ReactOS 0.4.16-dev-2232-gc2aaa52
machxbox.c File Reference
#include <freeldr.h>
#include <drivers/xbox/superio.h>
#include "../../vidfb.h"
#include <debug.h>
Include dependency graph for machxbox.c:

Go to the source code of this file.

Macros

#define MAX_XBOX_COM_PORTS   2
 

Functions

 DBG_DEFAULT_CHANNEL (HWDETECT)
 
BOOLEAN XboxFindPciBios (PPCI_REGISTRY_INFO BusData)
 
VOID DetectSerialPointerPeripheral (PCONFIGURATION_COMPONENT_DATA ControllerKey, PUCHAR Base)
 
static ULONG XboxGetSerialPort (ULONG Index, PULONG Irq)
 
VOID DetectSerialPorts (_In_opt_ PCSTR Options, _Inout_ PCONFIGURATION_COMPONENT_DATA BusKey, _In_ GET_SERIAL_PORT MachGetSerialPort, _In_ ULONG Count)
 
VOID XboxGetExtendedBIOSData (PULONG ExtendedBIOSDataArea, PULONG ExtendedBIOSDataSize)
 
static PCM_PARTIAL_RESOURCE_LIST XboxGetHarddiskConfigurationData (UCHAR DriveNumber, ULONG *pSize)
 
static VOID DetectDisplayController (_In_ PCONFIGURATION_COMPONENT_DATA BusKey)
 
static VOID DetectIsaBios (_In_opt_ PCSTR Options, _Inout_ PCONFIGURATION_COMPONENT_DATA SystemKey, _Out_ ULONG *BusNumber)
 
static UCHAR XboxGetFloppyCount (VOID)
 
PCONFIGURATION_COMPONENT_DATA XboxHwDetect (_In_opt_ PCSTR Options)
 
VOID XboxHwIdle (VOID)
 
VOID __cdecl ChainLoadBiosBootSectorCode (IN UCHAR BootDrive OPTIONAL, IN ULONG BootPartition OPTIONAL)
 
VOID MachInit (const char *CmdLine)
 
VOID XboxPrepareForReactOS (VOID)
 

Variables

ULONG NvBase
 
ULONG_PTR FrameBuffer
 
ULONG FrameBufferSize
 
PCM_FRAMEBUF_DEVICE_DATA FrameBufferData
 

Macro Definition Documentation

◆ MAX_XBOX_COM_PORTS

#define MAX_XBOX_COM_PORTS   2

Definition at line 26 of file machxbox.c.

Function Documentation

◆ ChainLoadBiosBootSectorCode()

VOID __cdecl ChainLoadBiosBootSectorCode ( IN UCHAR BootDrive  OPTIONAL,
IN ULONG BootPartition  OPTIONAL 
)

Definition at line 354 of file machxbox.c.

357{
358 /* No-op on XBOX */
359}

◆ DBG_DEFAULT_CHANNEL()

DBG_DEFAULT_CHANNEL ( HWDETECT  )

◆ DetectDisplayController()

static VOID DetectDisplayController ( _In_ PCONFIGURATION_COMPONENT_DATA  BusKey)
static

Definition at line 155 of file machxbox.c.

157{
158 PCONFIGURATION_COMPONENT_DATA ControllerKey;
159 PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
160 PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
161 PCM_FRAMEBUF_DEVICE_DATA FramebufData;
162 ULONG Size;
163
165 return;
166
167 Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors[3]) + sizeof(*FramebufData);
168 PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
169 if (PartialResourceList == NULL)
170 {
171 ERR("Failed to allocate resource descriptor\n");
172 return;
173 }
174
175 /* Initialize resource descriptor */
176 RtlZeroMemory(PartialResourceList, Size);
177 PartialResourceList->Version = 1;
178 PartialResourceList->Revision = 2;
179 PartialResourceList->Count = 3;
180
181 /* Set IO Control Port */
182 PartialDescriptor = &PartialResourceList->PartialDescriptors[0];
183 PartialDescriptor->Type = CmResourceTypePort;
185 PartialDescriptor->Flags = CM_RESOURCE_PORT_MEMORY;
186 PartialDescriptor->u.Port.Start.LowPart = NvBase;
187 PartialDescriptor->u.Port.Start.HighPart = 0;
188 PartialDescriptor->u.Port.Length = (16 * 1024 * 1024);
189
190 /* Set Memory */
191 PartialDescriptor = &PartialResourceList->PartialDescriptors[1];
192 PartialDescriptor->Type = CmResourceTypeMemory;
194 PartialDescriptor->Flags = CM_RESOURCE_MEMORY_READ_WRITE;
195 PartialDescriptor->u.Memory.Start.LowPart = (FrameBuffer & 0x0FFFFFFF);
196 PartialDescriptor->u.Memory.Length = FrameBufferSize;
197
198 /* Set framebuffer-specific data */
199 PartialDescriptor = &PartialResourceList->PartialDescriptors[2];
200 PartialDescriptor->Type = CmResourceTypeDeviceSpecific;
202 PartialDescriptor->Flags = 0;
203 PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(*FramebufData);
204
205 /* Get pointer to framebuffer-specific data */
206 FramebufData = (PCM_FRAMEBUF_DEVICE_DATA)(PartialDescriptor + 1);
207 RtlCopyMemory(FramebufData, FrameBufferData, sizeof(*FrameBufferData));
208 FramebufData->Version = 1;
209 FramebufData->Revision = 3;
210 FramebufData->VideoClock = 0;
211
216 0,
217 0xFFFFFFFF,
218 "NV2A Framebuffer",
219 PartialResourceList,
220 Size,
221 &ControllerKey);
222
223 // NOTE: Don't add a MonitorPeripheral for now.
224}
VOID FldrCreateComponentKey(_In_ PCONFIGURATION_COMPONENT_DATA SystemNode, _In_ CONFIGURATION_CLASS Class, _In_ CONFIGURATION_TYPE Type, _In_ IDENTIFIER_FLAG Flags, _In_ ULONG Key, _In_ ULONG Affinity, _In_ PCSTR IdentifierString, _In_ PCM_PARTIAL_RESOURCE_LIST ResourceList, _In_ ULONG Size, _Out_ PCONFIGURATION_COMPONENT_DATA *ComponentKey)
Definition: archwsup.c:198
#define ERR(fmt,...)
Definition: precomp.h:57
PVOID FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag)
Definition: heap.c:533
#define NULL
Definition: types.h:112
ULONG FrameBufferSize
Definition: xboxvideo.c:30
PCM_FRAMEBUF_DEVICE_DATA FrameBufferData
Definition: xboxvideo.c:31
ULONG NvBase
Definition: xboxvideo.c:28
ULONG_PTR FrameBuffer
Definition: xboxvideo.c:29
#define CM_RESOURCE_PORT_MEMORY
Definition: cmtypes.h:108
#define CM_RESOURCE_MEMORY_READ_WRITE
Definition: cmtypes.h:120
#define CmResourceTypeMemory
Definition: restypes.h:106
#define CmResourceTypeDeviceSpecific
Definition: restypes.h:108
#define CmResourceTypePort
Definition: restypes.h:104
@ ControllerClass
Definition: arc.h:103
@ DisplayController
Definition: arc.h:132
@ ConsoleOut
Definition: arc.h:92
@ Output
Definition: arc.h:94
struct _CM_FRAMEBUF_DEVICE_DATA * PCM_FRAMEBUF_DEVICE_DATA
ReactOS Framebuffer-specific video device configuration data.
Definition: framebuf.h:35
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@432::@437 Memory
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@432::@434 Port
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@432 u
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@432::@441 DeviceSpecificData
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
Definition: restypes.h:100
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
uint32_t ULONG
Definition: typedefs.h:59
#define TAG_HW_RESOURCE_LIST
Definition: uefidisk.c:15
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4539
@ CmResourceShareDeviceExclusive
Definition: cmtypes.h:241
@ CmResourceShareUndetermined
Definition: cmtypes.h:240

Referenced by XboxHwDetect().

◆ DetectIsaBios()

static VOID DetectIsaBios ( _In_opt_ PCSTR  Options,
_Inout_ PCONFIGURATION_COMPONENT_DATA  SystemKey,
_Out_ ULONG BusNumber 
)
static

Definition at line 228 of file machxbox.c.

232{
233 PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
235 ULONG Size;
236
237 /* Set 'Configuration Data' value */
238 Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors);
239 PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
240 if (PartialResourceList == NULL)
241 {
242 ERR("Failed to allocate resource descriptor\n");
243 return;
244 }
245
246 /* Initialize resource descriptor */
247 RtlZeroMemory(PartialResourceList, Size);
248 PartialResourceList->Version = 1;
249 PartialResourceList->Revision = 1;
250 PartialResourceList->Count = 0;
251
252 /* Create new bus key */
253 FldrCreateComponentKey(SystemKey,
256 0,
257 0,
258 0xFFFFFFFF,
259 "ISA",
260 PartialResourceList,
261 Size,
262 &BusKey);
263
264 /* Increment bus number */
265 (*BusNumber)++;
266
267 /* Detect ISA/BIOS devices */
268 DetectBiosDisks(SystemKey, BusKey);
270
271 /* FIXME: Detect more ISA devices */
272}
#define MAX_XBOX_COM_PORTS
Definition: machxbox.c:26
static ULONG XboxGetSerialPort(ULONG Index, PULONG Irq)
Definition: machxbox.c:51
VOID DetectSerialPorts(_In_opt_ PCSTR Options, _Inout_ PCONFIGURATION_COMPONENT_DATA BusKey, _In_ GET_SERIAL_PORT MachGetSerialPort, _In_ ULONG Count)
Definition: machpc.c:780
VOID DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey, PCONFIGURATION_COMPONENT_DATA BusKey)
Definition: pchw.c:342
@ AdapterClass
Definition: arc.h:102
@ MultiFunctionAdapter
Definition: arc.h:125
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
Definition: wdfdevice.h:3540

Referenced by XboxHwDetect().

◆ DetectSerialPointerPeripheral()

VOID DetectSerialPointerPeripheral ( PCONFIGURATION_COMPONENT_DATA  ControllerKey,
PUCHAR  Base 
)

◆ DetectSerialPorts()

VOID DetectSerialPorts ( _In_opt_ PCSTR  Options,
_Inout_ PCONFIGURATION_COMPONENT_DATA  BusKey,
_In_ GET_SERIAL_PORT  MachGetSerialPort,
_In_ ULONG  Count 
)

Definition at line 780 of file machpc.c.

785{
786 PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
787 PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
788 PCM_SERIAL_DEVICE_DATA SerialDeviceData;
789 ULONG Irq;
790 ULONG Base;
791 CHAR Identifier[80];
792 ULONG ControllerNumber = 0;
793 PCONFIGURATION_COMPONENT_DATA ControllerKey;
794 ULONG i;
795 ULONG Size;
796 ULONG PortBitmap;
797
798 TRACE("DetectSerialPorts()\n");
799
801
802 for (i = 0; i < Count; i++)
803 {
804 Base = MachGetSerialPort(i, &Irq);
805 if ((Base == 0) || !CpDoesPortExist(UlongToPtr(Base)))
806 continue;
807
808 TRACE("Found COM%u port at 0x%x\n", i + 1, Base);
809
810 /* Set 'Identifier' value */
811 RtlStringCbPrintfA(Identifier, sizeof(Identifier), "COM%ld", i + 1);
812
813 /* Build full device descriptor */
814 Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors[3]) + sizeof(*SerialDeviceData);
815 PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
816 if (PartialResourceList == NULL)
817 {
818 ERR("Failed to allocate resource descriptor! Ignoring remaining serial ports. (i = %lu, Count = %lu)\n",
819 i, Count);
820 break;
821 }
822
823 /* Initialize resource descriptor */
824 RtlZeroMemory(PartialResourceList, Size);
825 PartialResourceList->Version = 1;
826 PartialResourceList->Revision = 1;
827 PartialResourceList->Count = 3;
828
829 /* Set IO Port */
830 PartialDescriptor = &PartialResourceList->PartialDescriptors[0];
831 PartialDescriptor->Type = CmResourceTypePort;
833 PartialDescriptor->Flags = CM_RESOURCE_PORT_IO;
834 PartialDescriptor->u.Port.Start.LowPart = Base;
835 PartialDescriptor->u.Port.Start.HighPart = 0x0;
836 PartialDescriptor->u.Port.Length = 8;
837
838 /* Set Interrupt */
839 PartialDescriptor = &PartialResourceList->PartialDescriptors[1];
840 PartialDescriptor->Type = CmResourceTypeInterrupt;
842 PartialDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED;
843 PartialDescriptor->u.Interrupt.Level = Irq;
844 PartialDescriptor->u.Interrupt.Vector = Irq;
845 PartialDescriptor->u.Interrupt.Affinity = 0xFFFFFFFF;
846
847 /* Set serial data (device specific) */
848 PartialDescriptor = &PartialResourceList->PartialDescriptors[2];
849 PartialDescriptor->Type = CmResourceTypeDeviceSpecific;
851 PartialDescriptor->Flags = 0;
852 PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(*SerialDeviceData);
853
854 SerialDeviceData = (PCM_SERIAL_DEVICE_DATA)(PartialDescriptor + 1);
855 SerialDeviceData->BaudClock = 1843200; /* UART Clock frequency (Hertz) */
856
857 /* Create controller key */
862 ControllerNumber,
863 0xFFFFFFFF,
865 PartialResourceList,
866 Size,
867 &ControllerKey);
868
869 if (!(PortBitmap & (1 << i)) && !Rs232PortInUse(UlongToPtr(Base)))
870 {
871 /* Detect serial mouse */
873 }
874
875 ControllerNumber++;
876 }
877}
@ Identifier
Definition: asmpp.cpp:95
BOOLEAN Rs232PortInUse(PUCHAR Base)
Definition: rs232.c:140
BOOLEAN NTAPI CpDoesPortExist(IN PUCHAR Address)
Definition: cport.c:224
#define UlongToPtr(u)
Definition: config.h:106
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static ULONG GetSerialMouseDetectionBitmap(_In_opt_ PCSTR Options)
Definition: machpc.c:740
static VOID DetectSerialPointerPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey, PUCHAR Base)
Definition: machpc.c:554
#define CM_RESOURCE_PORT_IO
Definition: cmtypes.h:109
_In_opt_ ULONG Base
Definition: rtlfuncs.h:2486
int Count
Definition: noreturn.cpp:7
NTSTRSAFEVAPI RtlStringCbPrintfA(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,...)
Definition: ntstrsafe.h:1148
#define CM_RESOURCE_INTERRUPT_LATCHED
Definition: restypes.h:117
#define CmResourceTypeInterrupt
Definition: restypes.h:105
@ SerialController
Definition: arc.h:130
@ ConsoleIn
Definition: arc.h:91
@ Input
Definition: arc.h:93
#define TRACE(s)
Definition: solgame.cpp:4
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@432::@435 Interrupt
struct _CM_SERIAL_DEVICE_DATA * PCM_SERIAL_DEVICE_DATA
char CHAR
Definition: xmlstorage.h:175

Referenced by DetectIsaBios().

◆ MachInit()

VOID MachInit ( const char CmdLine)

Definition at line 364 of file machxbox.c.

365{
366 PCI_TYPE1_CFG_BITS PciCfg1;
367 ULONG PciId;
368
369 /* Check for Xbox by identifying device at PCI 0:0:0, if it's
370 * 0x10DE/0x02A5 then we're running on an Xbox */
371
372 /* Select Host to PCI bridge */
373 PciCfg1.u.bits.Enable = 1;
374 PciCfg1.u.bits.BusNumber = 0;
375 PciCfg1.u.bits.DeviceNumber = 0;
376 PciCfg1.u.bits.FunctionNumber = 0;
377 /* Select register VendorID & DeviceID */
378 PciCfg1.u.bits.RegisterNumber = 0x00;
379 PciCfg1.u.bits.Reserved = 0;
380
383 if (PciId != 0x02A510DE)
384 {
385 ERR("This is not an original Xbox!\n");
386
387 /* Disable and halt the CPU */
388 _disable();
389 __halt();
390
391 while (TRUE)
392 NOTHING;
393 }
394
395 /* Set LEDs to red before anything is initialized */
396 XboxSetLED("rrrr");
397
398 /* Setup vtbl */
428
429 /* Initialize our stuff */
430 XboxMemInit();
432
433 /* Set LEDs to orange after init */
434 XboxSetLED("oooo");
435
437}
MACHVTBL MachVtbl
Definition: arcemul.c:21
#define PCI_TYPE1_DATA_PORT
Definition: hardware.h:45
#define PCI_TYPE1_ADDRESS_PORT
Definition: hardware.h:44
#define TRUE
Definition: types.h:120
ULONG NTAPI READ_PORT_ULONG(IN PULONG Port)
Definition: portio.c:70
VOID NTAPI WRITE_PORT_ULONG(IN PULONG Port, IN ULONG Value)
Definition: portio.c:123
BOOLEAN PcInitializeBootDevices(VOID)
Definition: hwdisk.c:458
#define NOTHING
Definition: input_list.c:10
__INTRIN_INLINE void __halt(void)
Definition: intrin_x86.h:1728
VOID XboxGetExtendedBIOSData(PULONG ExtendedBIOSDataArea, PULONG ExtendedBIOSDataSize)
Definition: machxbox.c:86
VOID XboxHwIdle(VOID)
Definition: machxbox.c:348
PCONFIGURATION_COMPONENT_DATA XboxHwDetect(_In_opt_ PCSTR Options)
Definition: machxbox.c:291
static UCHAR XboxGetFloppyCount(VOID)
Definition: machxbox.c:276
VOID XboxPrepareForReactOS(VOID)
Definition: machxbox.c:440
VOID PcBeep(VOID)
Definition: pcbeep.c:34
VOID HalpCalibrateStallExecution(VOID)
Definition: pchw.c:105
void __cdecl _disable(void)
Definition: intrin_arm.h:365
union _PCI_TYPE1_CFG_BITS::@195 u
struct _PCI_TYPE1_CFG_BITS::@195::@196 bits
VOID(* VideoGetPaletteColor)(UCHAR Color, UCHAR *Red, UCHAR *Green, UCHAR *Blue)
Definition: machine.h:56
VIDEODISPLAYMODE(* VideoSetDisplayMode)(PCSTR DisplayMode, BOOLEAN Init)
Definition: machine.h:46
VOID(* GetExtendedBIOSData)(PULONG ExtendedBIOSDataArea, PULONG ExtendedBIOSDataSize)
Definition: machine.h:64
int(* ConsGetCh)(VOID)
Definition: machine.h:43
VOID(* PrepareForReactOS)(VOID)
Definition: machine.h:59
VOID(* VideoSetPaletteColor)(UCHAR Color, UCHAR Red, UCHAR Green, UCHAR Blue)
Definition: machine.h:55
BOOLEAN(* InitializeBootDevices)(VOID)
Definition: machine.h:76
VOID(* VideoCopyOffScreenBufferToVRAM)(PVOID Buffer)
Definition: machine.h:53
BOOLEAN(* ConsKbHit)(VOID)
Definition: machine.h:42
VOID(* VideoHideShowTextCursor)(BOOLEAN Show)
Definition: machine.h:51
TIMEINFO *(* GetTime)(VOID)
Definition: machine.h:72
UCHAR(* GetFloppyCount)(VOID)
Definition: machine.h:66
BOOLEAN(* DiskGetDriveGeometry)(UCHAR DriveNumber, PGEOMETRY DriveGeometry)
Definition: machine.h:68
BOOLEAN(* DiskReadLogicalSectors)(UCHAR DriveNumber, ULONGLONG SectorNumber, ULONG SectorCount, PVOID Buffer)
Definition: machine.h:67
PFREELDR_MEMORY_DESCRIPTOR(* GetMemoryMap)(PULONG MaxMemoryMapSize)
Definition: machine.h:63
VOID(* VideoGetFontsFromFirmware)(PULONG RomFontPointers)
Definition: machine.h:49
VOID(* Beep)(VOID)
Definition: machine.h:58
VOID(* VideoSetTextCursorPosition)(UCHAR X, UCHAR Y)
Definition: machine.h:50
ULONG(* VideoGetBufferSize)(VOID)
Definition: machine.h:48
VOID(* VideoPutChar)(int Ch, UCHAR Attr, unsigned X, unsigned Y)
Definition: machine.h:52
ULONG(* DiskGetCacheableBlockCount)(UCHAR DriveNumber)
Definition: machine.h:69
VOID(* VideoGetDisplaySize)(PULONG Width, PULONG Height, PULONG Depth)
Definition: machine.h:47
VOID(* VideoClearScreen)(UCHAR Attr)
Definition: machine.h:45
VOID(* HwIdle)(VOID)
Definition: machine.h:78
VOID(* VideoSync)(VOID)
Definition: machine.h:57
BOOLEAN(* VideoIsPaletteFixed)(VOID)
Definition: machine.h:54
PCONFIGURATION_COMPONENT_DATA(* HwDetect)(_In_opt_ PCSTR Options)
Definition: machine.h:77
VOID(* ConsPutChar)(int Ch)
Definition: machine.h:41
uint32_t * PULONG
Definition: typedefs.h:59
BOOLEAN XboxConsKbHit(VOID)
Definition: xboxcons.c:72
VOID XboxConsPutChar(int c)
Definition: xboxcons.c:29
int XboxConsGetCh(void)
Definition: xboxcons.c:79
BOOLEAN XboxDiskReadLogicalSectors(IN UCHAR DriveNumber, IN ULONGLONG SectorNumber, IN ULONG SectorCount, OUT PVOID Buffer)
Definition: xboxdisk.c:151
ULONG XboxDiskGetCacheableBlockCount(UCHAR DriveNumber)
Definition: xboxdisk.c:194
BOOLEAN XboxDiskGetDriveGeometry(UCHAR DriveNumber, PGEOMETRY Geometry)
Definition: xboxdisk.c:174
void XboxSetLED(PCSTR pattern)
Definition: xboxi2c.c:198
PFREELDR_MEMORY_DESCRIPTOR XboxMemGetMemoryMap(ULONG *MemoryMapSize)
Definition: xboxmem.c:228
VOID XboxMemInit(VOID)
Definition: xboxmem.c:117
TIMEINFO * XboxGetTime(VOID)
Definition: xboxrtc.c:46
VOID XboxVideoGetPaletteColor(UCHAR Color, UCHAR *Red, UCHAR *Green, UCHAR *Blue)
Definition: xboxvideo.c:205
VOID XboxVideoInit(VOID)
Definition: xboxvideo.c:96
VOID XboxVideoPutChar(int Ch, UCHAR Attr, unsigned X, unsigned Y)
Definition: xboxvideo.c:43
VOID XboxVideoSetTextCursorPosition(UCHAR X, UCHAR Y)
Definition: xboxvideo.c:175
VOID XboxVideoSetPaletteColor(UCHAR Color, UCHAR Red, UCHAR Green, UCHAR Blue)
Definition: xboxvideo.c:199
VOID XboxVideoCopyOffScreenBufferToVRAM(PVOID Buffer)
Definition: xboxvideo.c:187
VOID XboxVideoGetDisplaySize(PULONG Width, PULONG Height, PULONG Depth)
Definition: xboxvideo.c:157
ULONG XboxVideoGetBufferSize(VOID)
Definition: xboxvideo.c:163
VOID XboxVideoSync(VOID)
Definition: xboxvideo.c:211
VOID XboxVideoHideShowTextCursor(BOOLEAN Show)
Definition: xboxvideo.c:181
BOOLEAN XboxVideoIsPaletteFixed(VOID)
Definition: xboxvideo.c:193
VOID XboxVideoClearScreen(UCHAR Attr)
Definition: xboxvideo.c:37
VIDEODISPLAYMODE XboxVideoSetDisplayMode(PCSTR DisplayMode, BOOLEAN Init)
Definition: xboxvideo.c:150
VOID XboxVideoGetFontsFromFirmware(PULONG RomFontPointers)
Definition: xboxvideo.c:169

◆ XboxFindPciBios()

BOOLEAN XboxFindPciBios ( PPCI_REGISTRY_INFO  BusData)

Definition at line 35 of file machxbox.c.

36{
37 /* We emulate PCI BIOS here, there are 2 known working PCI buses on an original Xbox */
38 BusData->NoBuses = 2;
39 BusData->MajorRevision = 1;
40 BusData->MinorRevision = 0;
41 BusData->HardwareMechanism = 1;
42 return TRUE;
43}
UCHAR MajorRevision
Definition: pci.h:107
UCHAR NoBuses
Definition: pci.h:109
UCHAR HardwareMechanism
Definition: pci.h:110
UCHAR MinorRevision
Definition: pci.h:108

Referenced by XboxHwDetect().

◆ XboxGetExtendedBIOSData()

VOID XboxGetExtendedBIOSData ( PULONG  ExtendedBIOSDataArea,
PULONG  ExtendedBIOSDataSize 
)

Definition at line 86 of file machxbox.c.

87{
88 TRACE("XboxGetExtendedBIOSData(): UNIMPLEMENTED\n");
91}
#define ExtendedBIOSDataArea
Definition: winldr.c:346
#define ExtendedBIOSDataSize
Definition: winldr.c:347

Referenced by MachInit().

◆ XboxGetFloppyCount()

static UCHAR XboxGetFloppyCount ( VOID  )
static

Definition at line 276 of file machxbox.c.

277{
278 /* On a PC we use CMOS/RTC I/O ports 0x70 and 0x71 to detect floppies.
279 * However an Xbox CMOS memory range [0x10, 0x70) and [0x80, 0x100)
280 * is filled with 0x55 0xAA 0x55 0xAA ... byte pattern which is used
281 * to validate the date/time settings by Xbox OS.
282 *
283 * Technically it's possible to connect a floppy drive to Xbox, but
284 * CMOS detection method should not be used here. */
285
286 WARN("XboxGetFloppyCount() is UNIMPLEMENTED, returning 0\n");
287 return 0;
288}
#define WARN(fmt,...)
Definition: precomp.h:61

Referenced by MachInit().

◆ XboxGetHarddiskConfigurationData()

static PCM_PARTIAL_RESOURCE_LIST XboxGetHarddiskConfigurationData ( UCHAR  DriveNumber,
ULONG pSize 
)
static

Definition at line 97 of file machxbox.c.

98{
99 PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
101 GEOMETRY Geometry;
102 ULONG Size;
103
104 /* Initialize returned size */
105 *pSize = 0;
106
107 /* Set 'Configuration Data' value */
108 Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors[1]) + sizeof(*DiskGeometry);
109 PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
110 if (PartialResourceList == NULL)
111 {
112 ERR("Failed to allocate resource descriptor\n");
113 return NULL;
114 }
115
116 RtlZeroMemory(PartialResourceList, Size);
117 PartialResourceList->Version = 1;
118 PartialResourceList->Revision = 1;
119 PartialResourceList->Count = 1;
120 PartialResourceList->PartialDescriptors[0].Type =
122// PartialResourceList->PartialDescriptors[0].ShareDisposition =
123// PartialResourceList->PartialDescriptors[0].Flags =
124 PartialResourceList->PartialDescriptors[0].u.DeviceSpecificData.DataSize =
125 sizeof(*DiskGeometry);
126
127 /* Get the disk geometry */
128 DiskGeometry = (PCM_DISK_GEOMETRY_DEVICE_DATA)&PartialResourceList->PartialDescriptors[1];
129 if (XboxDiskGetDriveGeometry(DriveNumber, &Geometry))
130 {
131 DiskGeometry->BytesPerSector = Geometry.BytesPerSector;
132 DiskGeometry->NumberOfCylinders = Geometry.Cylinders;
133 DiskGeometry->SectorsPerTrack = Geometry.SectorsPerTrack;
134 DiskGeometry->NumberOfHeads = Geometry.Heads;
135 }
136 else
137 {
138 ERR("Reading disk geometry failed\n");
139 FrLdrHeapFree(PartialResourceList, TAG_HW_RESOURCE_LIST);
140 return NULL;
141 }
142 TRACE("Disk %x: %u Cylinders %u Heads %u Sectors %u Bytes\n",
143 DriveNumber,
144 DiskGeometry->NumberOfCylinders,
145 DiskGeometry->NumberOfHeads,
146 DiskGeometry->SectorsPerTrack,
147 DiskGeometry->BytesPerSector);
148
149 /* Return configuration data */
150 *pSize = Size;
151 return PartialResourceList;
152}
VOID FrLdrHeapFree(PVOID MemoryPointer, ULONG Tag)
Definition: heap.c:539
if(dx< 0)
Definition: linetemp.h:194
Definition: disk.h:26
ULONG BytesPerSector
Number of bytes per sector.
Definition: disk.h:30
ULONG Cylinders
Number of cylinders on the disk.
Definition: disk.h:27
ULONG SectorsPerTrack
Number of sectors per track.
Definition: disk.h:29
ULONG Heads
Number of heads on the disk.
Definition: disk.h:28
struct _CM_DISK_GEOMETRY_DEVICE_DATA * PCM_DISK_GEOMETRY_DEVICE_DATA

Referenced by XboxHwDetect().

◆ XboxGetSerialPort()

static ULONG XboxGetSerialPort ( ULONG  Index,
PULONG  Irq 
)
static

Definition at line 51 of file machxbox.c.

52{
53 /*
54 * Xbox may have maximum two Serial COM ports
55 * if the Super I/O chip is connected via LPC
56 */
58 ULONG ComBase = 0;
59
61
62 // Select serial device
64
65 // Check if selected device is active
67 {
68 ComBase = LpcGetIoBase();
69 *Irq = LpcGetIrqPrimary();
70 }
71
73
74 return ComBase;
75}
#define LPC_CONFIG_DEVICE_NUMBER
Definition: superio.h:30
#define LPC_CONFIG_DEVICE_ACTIVATE
Definition: superio.h:31
FORCEINLINE ULONG LpcGetIoBase(VOID)
Definition: superio.h:96
#define LPC_DEVICE_SERIAL_PORT_2
Definition: superio.h:24
FORCEINLINE ULONG LpcGetIrqPrimary(VOID)
Definition: superio.h:126
FORCEINLINE UCHAR LpcReadRegister(UCHAR Register)
Definition: superio.h:59
#define LPC_DEVICE_SERIAL_PORT_1
Definition: superio.h:23
FORCEINLINE VOID LpcWriteRegister(UCHAR Register, UCHAR Value)
Definition: superio.h:67
FORCEINLINE VOID LpcExitConfig(VOID)
Definition: superio.h:51
FORCEINLINE VOID LpcEnterConfig(VOID)
Definition: superio.h:43
_Must_inspect_result_ _In_ WDFDEVICE Device
Definition: wdfchildlist.h:474
_In_ WDFCOLLECTION _In_ ULONG Index
unsigned char UCHAR
Definition: xmlstorage.h:181

Referenced by DetectIsaBios().

◆ XboxHwDetect()

PCONFIGURATION_COMPONENT_DATA XboxHwDetect ( _In_opt_ PCSTR  Options)

Definition at line 291 of file machxbox.c.

293{
295 ULONG BusNumber = 0;
296
297 TRACE("DetectHardware()\n");
298
299 /* Create the 'System' key */
300 FldrCreateSystemKey(&SystemKey, "Original Xbox (PC/AT like)");
301
304
305 /* TODO: Build actual Xbox's hardware configuration tree */
306 DetectPciBios(SystemKey, &BusNumber);
307 DetectIsaBios(Options, SystemKey, &BusNumber);
308
309 /* On XBOX, the display controller is on PCI bus #1 */
310 {
312 ULONG NumPciBus = 0;
313 ULONG PciBusToFind = 1;
314
315 /* PCI buses are under the System Key (i.e. siblings) */
316 for (BusKey = SystemKey->Child; BusKey; BusKey = BusKey->Sibling)
317 {
318 ERR("** XBOX: Current bus '%s' **\n", BusKey->ComponentEntry.Identifier);
319
320 /* Try to get a match */
321 if ((BusKey->ComponentEntry.Class == AdapterClass) &&
323 /* Verify it's a PCI key */
324 (BusKey->ComponentEntry.Identifier &&
325 !_stricmp(BusKey->ComponentEntry.Identifier, "PCI")))
326 {
327 /* Got a PCI bus, check whether it's the one to find */
328 if (NumPciBus == PciBusToFind)
329 {
330 ERR("** XBOX: PCI bus #%lu found!\n **\n", PciBusToFind);
331 break;
332 }
333 /* Nope, continue */
334 ++NumPciBus;
335 }
336 }
337 if (BusKey)
338 {
339 ERR("** XBOX: Adding Display Controller on PCI #1 **\n");
341 }
342 }
343
344 TRACE("DetectHardware() Done\n");
345 return SystemKey;
346}
VOID FldrCreateSystemKey(_Out_ PCONFIGURATION_COMPONENT_DATA *SystemNode, _In_ PCSTR IdentifierString)
Definition: archwsup.c:135
VOID DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
Definition: hwpci.c:174
FIND_PCI_BIOS FindPciBios
Definition: hwpci.c:26
#define _stricmp
Definition: cat.c:22
static VOID DetectDisplayController(_In_ PCONFIGURATION_COMPONENT_DATA BusKey)
Definition: machxbox.c:155
static PCM_PARTIAL_RESOURCE_LIST XboxGetHarddiskConfigurationData(UCHAR DriveNumber, ULONG *pSize)
Definition: machxbox.c:97
static VOID DetectIsaBios(_In_opt_ PCSTR Options, _Inout_ PCONFIGURATION_COMPONENT_DATA SystemKey, _Out_ ULONG *BusNumber)
Definition: machxbox.c:228
BOOLEAN XboxFindPciBios(PPCI_REGISTRY_INFO BusData)
Definition: machxbox.c:35
GET_HARDDISK_CONFIG_DATA GetHarddiskConfigurationData
Definition: pchw.c:45
CONFIGURATION_COMPONENT ComponentEntry
Definition: arc.h:287
struct _CONFIGURATION_COMPONENT_DATA * Sibling
Definition: arc.h:286
struct _CONFIGURATION_COMPONENT_DATA * Child
Definition: arc.h:285
CONFIGURATION_TYPE Type
Definition: arc.h:161
CONFIGURATION_CLASS Class
Definition: arc.h:160
_In_opt_ PUNICODE_STRING _In_ PDRIVER_OBJECT _In_ PDEVICE_OBJECT _In_ INTERFACE_TYPE _In_ ULONG BusNumber
Definition: halfuncs.h:160

Referenced by MachInit().

◆ XboxHwIdle()

VOID XboxHwIdle ( VOID  )

Definition at line 348 of file machxbox.c.

349{
350 /* UNIMPLEMENTED */
351}

Referenced by MachInit().

◆ XboxPrepareForReactOS()

VOID XboxPrepareForReactOS ( VOID  )

Definition at line 440 of file machxbox.c.

441{
442 /* Prepare video and turn off debug messages to screen */
445}
#define DebugDisableScreenPort()
Definition: debug.h:123
VOID XboxVideoPrepareForReactOS(VOID)
Definition: xboxvideo.c:217

Referenced by MachInit().

Variable Documentation

◆ FrameBuffer

◆ FrameBufferData

PCM_FRAMEBUF_DEVICE_DATA FrameBufferData
extern

Definition at line 31 of file xboxvideo.c.

Referenced by DetectDisplayController().

◆ FrameBufferSize

ULONG FrameBufferSize
extern

Definition at line 30 of file xboxvideo.c.

Referenced by ConsoleEfiGopEnable(), DetectDisplayController(), and EfiGopGetFrameBuffer().

◆ NvBase

ULONG NvBase
extern

Definition at line 28 of file xboxvideo.c.

Referenced by DetectDisplayController().