ReactOS 0.4.16-dev-2012-gbac7d7f
machxbox.c File Reference
#include <freeldr.h>
#include <drivers/xbox/superio.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 (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_PTR FrameBuffer
 
ULONG FrameBufferSize
 

Macro Definition Documentation

◆ MAX_XBOX_COM_PORTS

#define MAX_XBOX_COM_PORTS   2

Definition at line 25 of file machxbox.c.

Function Documentation

◆ ChainLoadBiosBootSectorCode()

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

Definition at line 293 of file machxbox.c.

296{
297 /* No-op on XBOX */
298}

◆ DBG_DEFAULT_CHANNEL()

DBG_DEFAULT_CHANNEL ( HWDETECT  )

◆ DetectDisplayController()

static VOID DetectDisplayController ( PCONFIGURATION_COMPONENT_DATA  BusKey)
static

Definition at line 154 of file machxbox.c.

155{
156 PCONFIGURATION_COMPONENT_DATA ControllerKey;
157 PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
158 PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
159 ULONG Size;
160
161 if (FrameBufferSize == 0)
162 return;
163
165 PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
166 if (PartialResourceList == NULL)
167 {
168 ERR("Failed to allocate resource descriptor\n");
169 return;
170 }
171
172 /* Initialize resource descriptor */
173 RtlZeroMemory(PartialResourceList, Size);
174 PartialResourceList->Version = 1;
175 PartialResourceList->Revision = 1;
176 PartialResourceList->Count = 1;
177
178 /* Set Memory */
179 PartialDescriptor = &PartialResourceList->PartialDescriptors[0];
180 PartialDescriptor->Type = CmResourceTypeMemory;
182 PartialDescriptor->Flags = CM_RESOURCE_MEMORY_READ_WRITE;
183 PartialDescriptor->u.Memory.Start.LowPart = (FrameBuffer & 0x0FFFFFFF);
184 PartialDescriptor->u.Memory.Length = FrameBufferSize;
185
190 0,
191 0xFFFFFFFF,
192 "NV2A Framebuffer",
193 PartialResourceList,
194 Size,
195 &ControllerKey);
196}
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
ULONG_PTR FrameBuffer
Definition: xboxvideo.c:29
#define CM_RESOURCE_MEMORY_READ_WRITE
Definition: cmtypes.h:120
#define CmResourceTypeMemory
Definition: restypes.h:106
struct _CM_PARTIAL_RESOURCE_LIST CM_PARTIAL_RESOURCE_LIST
@ ControllerClass
Definition: arc.h:103
@ DisplayController
Definition: arc.h:132
@ ConsoleOut
Definition: arc.h:92
@ Output
Definition: arc.h:94
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@432::@437 Memory
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@432 u
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
Definition: restypes.h:100
#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

Referenced by DetectIsaBios().

◆ DetectIsaBios()

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

Definition at line 200 of file machxbox.c.

204{
205 PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
207 ULONG Size;
208
209 /* Set 'Configuration Data' value */
212 PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
213 if (PartialResourceList == NULL)
214 {
215 ERR("Failed to allocate resource descriptor\n");
216 return;
217 }
218
219 /* Initialize resource descriptor */
220 RtlZeroMemory(PartialResourceList, Size);
221 PartialResourceList->Version = 1;
222 PartialResourceList->Revision = 1;
223 PartialResourceList->Count = 0;
224
225 /* Create new bus key */
226 FldrCreateComponentKey(SystemKey,
229 0,
230 0,
231 0xFFFFFFFF,
232 "ISA",
233 PartialResourceList,
234 Size,
235 &BusKey);
236
237 /* Increment bus number */
238 (*BusNumber)++;
239
240 /* Detect ISA/BIOS devices */
241 DetectBiosDisks(SystemKey, BusKey);
244
245 /* FIXME: Detect more ISA devices */
246}
#define MAX_XBOX_COM_PORTS
Definition: machxbox.c:25
static ULONG XboxGetSerialPort(ULONG Index, PULONG Irq)
Definition: machxbox.c:47
VOID DetectSerialPorts(_In_opt_ PCSTR Options, _Inout_ PCONFIGURATION_COMPONENT_DATA BusKey, _In_ GET_SERIAL_PORT MachGetSerialPort, _In_ ULONG Count)
Definition: machpc.c:789
static VOID DetectDisplayController(PCONFIGURATION_COMPONENT_DATA BusKey)
Definition: machxbox.c:154
VOID DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey, PCONFIGURATION_COMPONENT_DATA BusKey)
Definition: pchw.c:344
@ 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 789 of file machpc.c.

794{
795 PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
796 PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
797 PCM_SERIAL_DEVICE_DATA SerialDeviceData;
798 ULONG Irq;
799 ULONG Base;
800 CHAR Identifier[80];
801 ULONG ControllerNumber = 0;
802 PCONFIGURATION_COMPONENT_DATA ControllerKey;
803 ULONG i;
804 ULONG Size;
805 ULONG PortBitmap;
806
807 TRACE("DetectSerialPorts()\n");
808
810
811 for (i = 0; i < Count; i++)
812 {
813 Base = MachGetSerialPort(i, &Irq);
814 if ((Base == 0) || !CpDoesPortExist(UlongToPtr(Base)))
815 continue;
816
817 TRACE("Found COM%u port at 0x%x\n", i + 1, Base);
818
819 /* Set 'Identifier' value */
820 RtlStringCbPrintfA(Identifier, sizeof(Identifier), "COM%ld", i + 1);
821
822 /* Build full device descriptor */
825 sizeof(CM_SERIAL_DEVICE_DATA);
826 PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
827 if (PartialResourceList == NULL)
828 {
829 ERR("Failed to allocate resource descriptor! Ignoring remaining serial ports. (i = %lu, Count = %lu)\n",
830 i, Count);
831 break;
832 }
833
834 /* Initialize resource descriptor */
835 RtlZeroMemory(PartialResourceList, Size);
836 PartialResourceList->Version = 1;
837 PartialResourceList->Revision = 1;
838 PartialResourceList->Count = 3;
839
840 /* Set IO Port */
841 PartialDescriptor = &PartialResourceList->PartialDescriptors[0];
842 PartialDescriptor->Type = CmResourceTypePort;
844 PartialDescriptor->Flags = CM_RESOURCE_PORT_IO;
845 PartialDescriptor->u.Port.Start.LowPart = Base;
846 PartialDescriptor->u.Port.Start.HighPart = 0x0;
847 PartialDescriptor->u.Port.Length = 8;
848
849 /* Set Interrupt */
850 PartialDescriptor = &PartialResourceList->PartialDescriptors[1];
851 PartialDescriptor->Type = CmResourceTypeInterrupt;
853 PartialDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED;
854 PartialDescriptor->u.Interrupt.Level = Irq;
855 PartialDescriptor->u.Interrupt.Vector = Irq;
856 PartialDescriptor->u.Interrupt.Affinity = 0xFFFFFFFF;
857
858 /* Set serial data (device specific) */
859 PartialDescriptor = &PartialResourceList->PartialDescriptors[2];
860 PartialDescriptor->Type = CmResourceTypeDeviceSpecific;
862 PartialDescriptor->Flags = 0;
863 PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(CM_SERIAL_DEVICE_DATA);
864
865 SerialDeviceData =
866 (PCM_SERIAL_DEVICE_DATA)&PartialResourceList->PartialDescriptors[3];
867 SerialDeviceData->BaudClock = 1843200; /* UART Clock frequency (Hertz) */
868
869 /* Create controller key */
874 ControllerNumber,
875 0xFFFFFFFF,
877 PartialResourceList,
878 Size,
879 &ControllerKey);
880
881 if (!(PortBitmap & (1 << i)) && !Rs232PortInUse(UlongToPtr(Base)))
882 {
883 /* Detect serial mouse */
885 }
886
887 ControllerNumber++;
888 }
889}
@ 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:749
static VOID DetectSerialPointerPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey, PUCHAR Base)
Definition: machpc.c:562
#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 CmResourceTypeDeviceSpecific
Definition: restypes.h:108
#define CmResourceTypePort
Definition: restypes.h:104
#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::@434 Port
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@432::@441 DeviceSpecificData
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@432::@435 Interrupt
struct _CM_SERIAL_DEVICE_DATA * PCM_SERIAL_DEVICE_DATA
struct _CM_SERIAL_DEVICE_DATA CM_SERIAL_DEVICE_DATA
@ CmResourceShareUndetermined
Definition: cmtypes.h:240
char CHAR
Definition: xmlstorage.h:175

Referenced by DetectIsaBios().

◆ MachInit()

VOID MachInit ( const char CmdLine)

Definition at line 303 of file machxbox.c.

304{
305 PCI_TYPE1_CFG_BITS PciCfg1;
306 ULONG PciId;
307
308 /* Check for Xbox by identifying device at PCI 0:0:0, if it's
309 * 0x10DE/0x02A5 then we're running on an Xbox */
310
311 /* Select Host to PCI bridge */
312 PciCfg1.u.bits.Enable = 1;
313 PciCfg1.u.bits.BusNumber = 0;
314 PciCfg1.u.bits.DeviceNumber = 0;
315 PciCfg1.u.bits.FunctionNumber = 0;
316 /* Select register VendorID & DeviceID */
317 PciCfg1.u.bits.RegisterNumber = 0x00;
318 PciCfg1.u.bits.Reserved = 0;
319
322 if (PciId != 0x02A510DE)
323 {
324 ERR("This is not an original Xbox!\n");
325
326 /* Disable and halt the CPU */
327 _disable();
328 __halt();
329
330 while (TRUE)
331 NOTHING;
332 }
333
334 /* Set LEDs to red before anything is initialized */
335 XboxSetLED("rrrr");
336
337 /* Setup vtbl */
367
368 /* Initialize our stuff */
369 XboxMemInit();
371
372 /* Set LEDs to orange after init */
373 XboxSetLED("oooo");
374
376}
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
void __cdecl _disable(void)
Definition: intrin_arm.h:365
__INTRIN_INLINE void __halt(void)
Definition: intrin_x86.h:1728
VOID XboxGetExtendedBIOSData(PULONG ExtendedBIOSDataArea, PULONG ExtendedBIOSDataSize)
Definition: machxbox.c:82
VOID XboxHwIdle(VOID)
Definition: machxbox.c:287
PCONFIGURATION_COMPONENT_DATA XboxHwDetect(_In_opt_ PCSTR Options)
Definition: machxbox.c:265
static UCHAR XboxGetFloppyCount(VOID)
Definition: machxbox.c:250
VOID XboxPrepareForReactOS(VOID)
Definition: machxbox.c:379
VOID PcBeep(VOID)
Definition: pcbeep.c:34
VOID HalpCalibrateStallExecution(VOID)
Definition: pchw.c:105
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:40
VOID XboxVideoGetPaletteColor(UCHAR Color, UCHAR *Red, UCHAR *Green, UCHAR *Blue)
Definition: xboxvideo.c:198
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:168
VOID XboxVideoSetPaletteColor(UCHAR Color, UCHAR Red, UCHAR Green, UCHAR Blue)
Definition: xboxvideo.c:192
VOID XboxVideoCopyOffScreenBufferToVRAM(PVOID Buffer)
Definition: xboxvideo.c:180
VOID XboxVideoGetDisplaySize(PULONG Width, PULONG Height, PULONG Depth)
Definition: xboxvideo.c:150
ULONG XboxVideoGetBufferSize(VOID)
Definition: xboxvideo.c:156
VOID XboxVideoSync(VOID)
Definition: xboxvideo.c:204
VOID XboxVideoHideShowTextCursor(BOOLEAN Show)
Definition: xboxvideo.c:174
BOOLEAN XboxVideoIsPaletteFixed(VOID)
Definition: xboxvideo.c:186
VOID XboxVideoClearScreen(UCHAR Attr)
Definition: xboxvideo.c:37
VIDEODISPLAYMODE XboxVideoSetDisplayMode(PCSTR DisplayMode, BOOLEAN Init)
Definition: xboxvideo.c:143
VOID XboxVideoGetFontsFromFirmware(PULONG RomFontPointers)
Definition: xboxvideo.c:162

◆ XboxFindPciBios()

BOOLEAN XboxFindPciBios ( PPCI_REGISTRY_INFO  BusData)

Definition at line 31 of file machxbox.c.

32{
33 /* We emulate PCI BIOS here, there are 2 known working PCI buses on an original Xbox */
34 BusData->NoBuses = 2;
35 BusData->MajorRevision = 1;
36 BusData->MinorRevision = 0;
37 BusData->HardwareMechanism = 1;
38 return TRUE;
39}
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 82 of file machxbox.c.

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

Referenced by MachInit().

◆ XboxGetFloppyCount()

static UCHAR XboxGetFloppyCount ( VOID  )
static

Definition at line 250 of file machxbox.c.

251{
252 /* On a PC we use CMOS/RTC I/O ports 0x70 and 0x71 to detect floppies.
253 * However an Xbox CMOS memory range [0x10, 0x70) and [0x80, 0x100)
254 * is filled with 0x55 0xAA 0x55 0xAA ... byte pattern which is used
255 * to validate the date/time settings by Xbox OS.
256 *
257 * Technically it's possible to connect a floppy drive to Xbox, but
258 * CMOS detection method should not be used here. */
259
260 WARN("XboxGetFloppyCount() is UNIMPLEMENTED, returning 0\n");
261 return 0;
262}
#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 93 of file machxbox.c.

94{
95 PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
97 GEOMETRY Geometry;
98 ULONG Size;
99
100 /* Initialize returned size */
101 *pSize = 0;
102
103 /* Set 'Configuration Data' value */
106 PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
107 if (PartialResourceList == NULL)
108 {
109 ERR("Failed to allocate resource descriptor\n");
110 return NULL;
111 }
112
113 RtlZeroMemory(PartialResourceList, Size);
114 PartialResourceList->Version = 1;
115 PartialResourceList->Revision = 1;
116 PartialResourceList->Count = 1;
117 PartialResourceList->PartialDescriptors[0].Type =
119// PartialResourceList->PartialDescriptors[0].ShareDisposition =
120// PartialResourceList->PartialDescriptors[0].Flags =
121 PartialResourceList->PartialDescriptors[0].u.DeviceSpecificData.DataSize =
123
124 /* Get pointer to geometry data */
125 DiskGeometry = (PVOID)(((ULONG_PTR)PartialResourceList) + sizeof(CM_PARTIAL_RESOURCE_LIST));
126
127 /* Get the disk geometry */
128 if (XboxDiskGetDriveGeometry(DriveNumber, &Geometry))
129 {
130 DiskGeometry->BytesPerSector = Geometry.BytesPerSector;
131 DiskGeometry->NumberOfCylinders = Geometry.Cylinders;
132 DiskGeometry->SectorsPerTrack = Geometry.SectorsPerTrack;
133 DiskGeometry->NumberOfHeads = Geometry.Heads;
134 }
135 else
136 {
137 ERR("Reading disk geometry failed\n");
138 FrLdrHeapFree(PartialResourceList, TAG_HW_RESOURCE_LIST);
139 return NULL;
140 }
141 TRACE("Disk %x: %u Cylinders %u Heads %u Sectors %u Bytes\n",
142 DriveNumber,
143 DiskGeometry->NumberOfCylinders,
144 DiskGeometry->NumberOfHeads,
145 DiskGeometry->SectorsPerTrack,
146 DiskGeometry->BytesPerSector);
147
148 /* Return configuration data */
149 *pSize = Size;
150 return PartialResourceList;
151}
VOID FrLdrHeapFree(PVOID MemoryPointer, ULONG Tag)
Definition: heap.c:539
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
void * PVOID
Definition: typedefs.h:50
uint32_t ULONG_PTR
Definition: typedefs.h:65
struct _CM_DISK_GEOMETRY_DEVICE_DATA CM_DISK_GEOMETRY_DEVICE_DATA

Referenced by XboxHwDetect().

◆ XboxGetSerialPort()

static ULONG XboxGetSerialPort ( ULONG  Index,
PULONG  Irq 
)
static

Definition at line 47 of file machxbox.c.

48{
49 /*
50 * Xbox may have maximum two Serial COM ports
51 * if the Super I/O chip is connected via LPC
52 */
54 ULONG ComBase = 0;
55
57
58 // Select serial device
60
61 // Check if selected device is active
63 {
64 ComBase = LpcGetIoBase();
65 *Irq = LpcGetIrqPrimary();
66 }
67
69
70 return ComBase;
71}
#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 265 of file machxbox.c.

267{
269 ULONG BusNumber = 0;
270
271 TRACE("DetectHardware()\n");
272
273 /* Create the 'System' key */
274 FldrCreateSystemKey(&SystemKey, "Original Xbox (PC/AT like)");
275
278
279 /* TODO: Build actual xbox's hardware configuration tree */
280 DetectPciBios(SystemKey, &BusNumber);
281 DetectIsaBios(Options, SystemKey, &BusNumber);
282
283 TRACE("DetectHardware() Done\n");
284 return SystemKey;
285}
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:176
FIND_PCI_BIOS FindPciBios
Definition: hwpci.c:26
static PCM_PARTIAL_RESOURCE_LIST XboxGetHarddiskConfigurationData(UCHAR DriveNumber, ULONG *pSize)
Definition: machxbox.c:93
static VOID DetectIsaBios(_In_opt_ PCSTR Options, _Inout_ PCONFIGURATION_COMPONENT_DATA SystemKey, _Out_ ULONG *BusNumber)
Definition: machxbox.c:200
BOOLEAN XboxFindPciBios(PPCI_REGISTRY_INFO BusData)
Definition: machxbox.c:31
GET_HARDDISK_CONFIG_DATA GetHarddiskConfigurationData
Definition: pchw.c:45
_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 287 of file machxbox.c.

288{
289 /* UNIMPLEMENTED */
290}

Referenced by MachInit().

◆ XboxPrepareForReactOS()

VOID XboxPrepareForReactOS ( VOID  )

Definition at line 379 of file machxbox.c.

380{
381 /* Prepare video and turn off debug messages to screen */
384}
#define DebugDisableScreenPort()
Definition: debug.h:123
VOID XboxVideoPrepareForReactOS(VOID)
Definition: xboxvideo.c:210

Referenced by MachInit().

Variable Documentation

◆ FrameBuffer

◆ FrameBufferSize

ULONG FrameBufferSize
extern