ReactOS 0.4.15-dev-5865-g640e228
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 (PCONFIGURATION_COMPONENT_DATA BusKey, GET_SERIAL_PORT MachGetSerialPort, 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 (PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
 
static UCHAR XboxGetFloppyCount (VOID)
 
PCONFIGURATION_COMPONENT_DATA XboxHwDetect (VOID)
 
VOID XboxHwIdle (VOID)
 
VOID MachInit (const char *CmdLine)
 
VOID XboxPrepareForReactOS (VOID)
 

Variables

PVOID 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

◆ DBG_DEFAULT_CHANNEL()

DBG_DEFAULT_CHANNEL ( HWDETECT  )

◆ DetectDisplayController()

static VOID DetectDisplayController ( PCONFIGURATION_COMPONENT_DATA  BusKey)
static

Definition at line 158 of file machxbox.c.

159{
160 CHAR Buffer[80];
161 PCONFIGURATION_COMPONENT_DATA ControllerKey;
162 PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
163 PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
164 ULONG Size;
165
166 if (FrameBufferSize == 0)
167 return;
168
169 strcpy(Buffer, "NV2A Framebuffer");
170
172 PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
173 if (PartialResourceList == NULL)
174 {
175 ERR("Failed to allocate resource descriptor\n");
176 return;
177 }
178
179 /* Initialize resource descriptor */
180 RtlZeroMemory(PartialResourceList, Size);
181 PartialResourceList->Version = 1;
182 PartialResourceList->Revision = 1;
183 PartialResourceList->Count = 1;
184
185 /* Set Memory */
186 PartialDescriptor = &PartialResourceList->PartialDescriptors[0];
187 PartialDescriptor->Type = CmResourceTypeMemory;
189 PartialDescriptor->Flags = CM_RESOURCE_MEMORY_READ_WRITE;
190 PartialDescriptor->u.Memory.Start.LowPart = (ULONG_PTR)FrameBuffer & 0x0FFFFFFF;
191 PartialDescriptor->u.Memory.Length = FrameBufferSize;
192
195 DisplayController,
196 0x0,
197 0x0,
198 0xFFFFFFFF,
199 Buffer,
200 PartialResourceList,
201 Size,
202 &ControllerKey);
203
204 TRACE("Created key: DisplayController\\0\n");
205}
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
VOID NTAPI 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 PCHAR IdentifierString, IN PCM_PARTIAL_RESOURCE_LIST ResourceList, IN ULONG Size, OUT PCONFIGURATION_COMPONENT_DATA *ComponentKey)
Definition: archwsup.c:147
#define TAG_HW_RESOURCE_LIST
Definition: hardware.h:23
#define ERR(fmt,...)
Definition: debug.h:110
FORCEINLINE PVOID FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag)
Definition: mm.h:174
Definition: bufpool.h:45
#define NULL
Definition: types.h:112
#define ULONG_PTR
Definition: config.h:101
#define CmResourceTypeMemory
Definition: hwresource.cpp:125
struct _CM_PARTIAL_RESOURCE_LIST CM_PARTIAL_RESOURCE_LIST
ULONG FrameBufferSize
Definition: xboxvideo.c:29
PVOID FrameBuffer
Definition: xboxvideo.c:28
#define CM_RESOURCE_MEMORY_READ_WRITE
Definition: cmtypes.h:120
@ ControllerClass
Definition: arc.h:94
#define TRACE(s)
Definition: solgame.cpp:4
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@386 Memory
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381 u
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
Definition: hwresource.cpp:119
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
uint32_t ULONG
Definition: typedefs.h:59
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
@ CmResourceShareDeviceExclusive
Definition: cmtypes.h:241
char CHAR
Definition: xmlstorage.h:175

Referenced by DetectIsaBios().

◆ DetectIsaBios()

static VOID DetectIsaBios ( PCONFIGURATION_COMPONENT_DATA  SystemKey,
ULONG BusNumber 
)
static

Definition at line 209 of file machxbox.c.

210{
211 PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
213 ULONG Size;
214
215 /* Set 'Configuration Data' value */
218 PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
219 if (PartialResourceList == NULL)
220 {
221 ERR("Failed to allocate resource descriptor\n");
222 return;
223 }
224
225 /* Initialize resource descriptor */
226 RtlZeroMemory(PartialResourceList, Size);
227 PartialResourceList->Version = 1;
228 PartialResourceList->Revision = 1;
229 PartialResourceList->Count = 0;
230
231 /* Create new bus key */
232 FldrCreateComponentKey(SystemKey,
234 MultiFunctionAdapter,
235 0x0,
236 0x0,
237 0xFFFFFFFF,
238 "ISA",
239 PartialResourceList,
240 Size,
241 &BusKey);
242
243 /* Increment bus number */
244 (*BusNumber)++;
245
246 /* Detect ISA/BIOS devices */
247 DetectBiosDisks(SystemKey, BusKey);
250
251 /* FIXME: Detect more ISA devices */
252}
#define MAX_XBOX_COM_PORTS
Definition: machxbox.c:25
static ULONG XboxGetSerialPort(ULONG Index, PULONG Irq)
Definition: machxbox.c:48
VOID DetectSerialPorts(PCONFIGURATION_COMPONENT_DATA BusKey, GET_SERIAL_PORT MachGetSerialPort, ULONG Count)
Definition: machpc.c:719
static VOID DetectDisplayController(PCONFIGURATION_COMPONENT_DATA BusKey)
Definition: machxbox.c:158
VOID DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey, PCONFIGURATION_COMPONENT_DATA BusKey)
Definition: pchw.c:345
@ AdapterClass
Definition: arc.h:93

Referenced by XboxHwDetect().

◆ DetectSerialPointerPeripheral()

VOID DetectSerialPointerPeripheral ( PCONFIGURATION_COMPONENT_DATA  ControllerKey,
PUCHAR  Base 
)

◆ DetectSerialPorts()

VOID DetectSerialPorts ( PCONFIGURATION_COMPONENT_DATA  BusKey,
GET_SERIAL_PORT  MachGetSerialPort,
ULONG  Count 
)

Definition at line 719 of file machpc.c.

720{
721 PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
722 PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
723 PCM_SERIAL_DEVICE_DATA SerialDeviceData;
724 ULONG Irq;
725 ULONG Base;
726 CHAR Buffer[80];
727 ULONG ControllerNumber = 0;
728 PCONFIGURATION_COMPONENT_DATA ControllerKey;
729 ULONG i;
730 ULONG Size;
731
732 TRACE("DetectSerialPorts()\n");
733
734 for (i = 0; i < Count; i++)
735 {
736 Base = MachGetSerialPort(i, &Irq);
737 if ((Base == 0) || !CpDoesPortExist(UlongToPtr(Base)))
738 continue;
739
740 TRACE("Found COM%u port at 0x%x\n", i + 1, Base);
741
742 /* Set 'Identifier' value */
743 sprintf(Buffer, "COM%ld", i + 1);
744
745 /* Build full device descriptor */
748 sizeof(CM_SERIAL_DEVICE_DATA);
749 PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
750 if (PartialResourceList == NULL)
751 {
752 ERR("Failed to allocate resource descriptor! Ignoring remaining serial ports. (i = %lu, Count = %lu)\n",
753 i, Count);
754 break;
755 }
756
757 /* Initialize resource descriptor */
758 RtlZeroMemory(PartialResourceList, Size);
759 PartialResourceList->Version = 1;
760 PartialResourceList->Revision = 1;
761 PartialResourceList->Count = 3;
762
763 /* Set IO Port */
764 PartialDescriptor = &PartialResourceList->PartialDescriptors[0];
765 PartialDescriptor->Type = CmResourceTypePort;
767 PartialDescriptor->Flags = CM_RESOURCE_PORT_IO;
768 PartialDescriptor->u.Port.Start.LowPart = Base;
769 PartialDescriptor->u.Port.Start.HighPart = 0x0;
770 PartialDescriptor->u.Port.Length = 8;
771
772 /* Set Interrupt */
773 PartialDescriptor = &PartialResourceList->PartialDescriptors[1];
774 PartialDescriptor->Type = CmResourceTypeInterrupt;
776 PartialDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED;
777 PartialDescriptor->u.Interrupt.Level = Irq;
778 PartialDescriptor->u.Interrupt.Vector = Irq;
779 PartialDescriptor->u.Interrupt.Affinity = 0xFFFFFFFF;
780
781 /* Set serial data (device specific) */
782 PartialDescriptor = &PartialResourceList->PartialDescriptors[2];
783 PartialDescriptor->Type = CmResourceTypeDeviceSpecific;
785 PartialDescriptor->Flags = 0;
786 PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(CM_SERIAL_DEVICE_DATA);
787
788 SerialDeviceData =
789 (PCM_SERIAL_DEVICE_DATA)&PartialResourceList->PartialDescriptors[3];
790 SerialDeviceData->BaudClock = 1843200; /* UART Clock frequency (Hertz) */
791
792 /* Create controller key */
795 SerialController,
797 ControllerNumber,
798 0xFFFFFFFF,
799 Buffer,
800 PartialResourceList,
801 Size,
802 &ControllerKey);
803
805 {
806 /* Detect serial mouse */
808 }
809
810 ControllerNumber++;
811 }
812}
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
#define CmResourceTypeDeviceSpecific
Definition: hwresource.cpp:127
#define CmResourceTypePort
Definition: hwresource.cpp:123
#define CmResourceTypeInterrupt
Definition: hwresource.cpp:124
static VOID DetectSerialPointerPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey, PUCHAR Base)
Definition: machpc.c:542
#define sprintf(buf, format,...)
Definition: sprintf.c:55
#define CM_RESOURCE_PORT_IO
Definition: cmtypes.h:109
#define CM_RESOURCE_INTERRUPT_LATCHED
Definition: cmtypes.h:144
_In_opt_ ULONG Base
Definition: rtlfuncs.h:2427
int Count
Definition: noreturn.cpp:7
@ ConsoleOut
Definition: arc.h:83
@ ConsoleIn
Definition: arc.h:82
@ Input
Definition: arc.h:84
@ Output
Definition: arc.h:85
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@390 DeviceSpecificData
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@383 Port
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@381::@384 Interrupt
struct _CM_SERIAL_DEVICE_DATA * PCM_SERIAL_DEVICE_DATA
struct _CM_SERIAL_DEVICE_DATA CM_SERIAL_DEVICE_DATA
@ CmResourceShareUndetermined
Definition: cmtypes.h:240

Referenced by DetectIsaBios().

◆ MachInit()

VOID MachInit ( const char CmdLine)

Definition at line 302 of file machxbox.c.

303{
304 PCI_TYPE1_CFG_BITS PciCfg1;
305 ULONG PciId;
306
307 /* Check for Xbox by identifying device at PCI 0:0:0, if it's
308 * 0x10DE/0x02A5 then we're running on an Xbox */
309
310 /* Select Host to PCI bridge */
311 PciCfg1.u.bits.Enable = 1;
312 PciCfg1.u.bits.BusNumber = 0;
313 PciCfg1.u.bits.DeviceNumber = 0;
314 PciCfg1.u.bits.FunctionNumber = 0;
315 /* Select register VendorID & DeviceID */
316 PciCfg1.u.bits.RegisterNumber = 0x00;
317 PciCfg1.u.bits.Reserved = 0;
318
321 if (PciId != 0x02A510DE)
322 {
323 ERR("This is not an original Xbox!\n");
324
325 /* Disable and halt the CPU */
326 _disable();
327 __halt();
328
329 while (TRUE)
330 NOTHING;
331 }
332
333 /* Set LEDs to red before anything is initialized */
334 XboxSetLED("rrrr");
335
336 /* Setup vtbl */
366
367 /* Initialize our stuff */
368 XboxMemInit();
370
371 /* Set LEDs to orange after init */
372 XboxSetLED("oooo");
373
375}
MACHVTBL MachVtbl
Definition: arcemul.c:21
#define PCI_TYPE1_DATA_PORT
Definition: hardware.h:34
#define PCI_TYPE1_ADDRESS_PORT
Definition: hardware.h:33
#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:470
#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:1714
VOID XboxGetExtendedBIOSData(PULONG ExtendedBIOSDataArea, PULONG ExtendedBIOSDataSize)
Definition: machxbox.c:79
VOID XboxHwIdle(VOID)
Definition: machxbox.c:293
PCONFIGURATION_COMPONENT_DATA XboxHwDetect(VOID)
Definition: machxbox.c:271
static UCHAR XboxGetFloppyCount(VOID)
Definition: machxbox.c:256
VOID XboxPrepareForReactOS(VOID)
Definition: machxbox.c:378
VOID PcBeep(VOID)
Definition: pcbeep.c:34
VOID HalpCalibrateStallExecution(VOID)
Definition: pchw.c:105
struct _PCI_TYPE1_CFG_BITS::@153::@154 bits
union _PCI_TYPE1_CFG_BITS::@153 u
VOID(* VideoGetPaletteColor)(UCHAR Color, UCHAR *Red, UCHAR *Green, UCHAR *Blue)
Definition: machine.h:56
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
PCONFIGURATION_COMPONENT_DATA(* HwDetect)(VOID)
Definition: machine.h:77
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
VIDEODISPLAYMODE(* VideoSetDisplayMode)(char *DisplayMode, BOOLEAN Init)
Definition: machine.h:46
BOOLEAN(* VideoIsPaletteFixed)(VOID)
Definition: machine.h:54
VOID(* ConsPutChar)(int Ch)
Definition: machine.h:41
uint32_t * PULONG
Definition: typedefs.h:59
BOOLEAN XboxConsKbHit(VOID)
Definition: xboxcons.c:69
VOID XboxConsPutChar(int c)
Definition: xboxcons.c:26
int XboxConsGetCh(void)
Definition: xboxcons.c:76
BOOLEAN XboxDiskReadLogicalSectors(IN UCHAR DriveNumber, IN ULONGLONG SectorNumber, IN ULONG SectorCount, OUT PVOID Buffer)
Definition: xboxdisk.c:84
ULONG XboxDiskGetCacheableBlockCount(UCHAR DriveNumber)
Definition: xboxdisk.c:122
BOOLEAN XboxDiskGetDriveGeometry(UCHAR DriveNumber, PGEOMETRY Geometry)
Definition: xboxdisk.c:103
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:303
VOID XboxVideoInit(VOID)
Definition: xboxvideo.c:196
VOID XboxVideoPutChar(int Ch, UCHAR Attr, unsigned X, unsigned Y)
Definition: xboxvideo.c:136
VOID XboxVideoSetTextCursorPosition(UCHAR X, UCHAR Y)
Definition: xboxvideo.c:263
VOID XboxVideoSetPaletteColor(UCHAR Color, UCHAR Red, UCHAR Green, UCHAR Blue)
Definition: xboxvideo.c:297
VOID XboxVideoCopyOffScreenBufferToVRAM(PVOID Buffer)
Definition: xboxvideo.c:275
VOID XboxVideoGetDisplaySize(PULONG Width, PULONG Height, PULONG Depth)
Definition: xboxvideo.c:243
ULONG XboxVideoGetBufferSize(VOID)
Definition: xboxvideo.c:251
VOID XboxVideoSync(VOID)
Definition: xboxvideo.c:309
VIDEODISPLAYMODE XboxVideoSetDisplayMode(char *DisplayMode, BOOLEAN Init)
Definition: xboxvideo.c:236
VOID XboxVideoHideShowTextCursor(BOOLEAN Show)
Definition: xboxvideo.c:269
BOOLEAN XboxVideoIsPaletteFixed(VOID)
Definition: xboxvideo.c:291
VOID XboxVideoClearScreen(UCHAR Attr)
Definition: xboxvideo.c:126
VOID XboxVideoGetFontsFromFirmware(PULONG RomFontPointers)
Definition: xboxvideo.c:257

◆ 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
35 BusData->NoBuses = 2;
36 BusData->MajorRevision = 1;
37 BusData->MinorRevision = 0;
38 BusData->HardwareMechanism = 1;
39 return TRUE;
40}
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 79 of file machxbox.c.

80{
81 TRACE("XboxGetExtendedBIOSData(): UNIMPLEMENTED\n");
84}
#define ExtendedBIOSDataArea
Definition: winldr.c:420
#define ExtendedBIOSDataSize
Definition: winldr.c:421

Referenced by MachInit().

◆ XboxGetFloppyCount()

static UCHAR XboxGetFloppyCount ( VOID  )
static

Definition at line 256 of file machxbox.c.

257{
258 /* On a PC we use CMOS/RTC I/O ports 0x70 and 0x71 to detect floppies.
259 * However an Xbox CMOS memory range [0x10, 0x70) and [0x80, 0x100)
260 * is filled with 0x55 0xAA 0x55 0xAA ... byte pattern which is used
261 * to validate the date/time settings by Xbox OS.
262 *
263 * Technically it's possible to connect a floppy drive to Xbox, but
264 * CMOS detection method should not be used here. */
265
266 WARN("XboxGetFloppyCount() is UNIMPLEMENTED, returning 0\n");
267 return 0;
268}
#define WARN(fmt,...)
Definition: debug.h:112

Referenced by MachInit().

◆ XboxGetHarddiskConfigurationData()

static PCM_PARTIAL_RESOURCE_LIST XboxGetHarddiskConfigurationData ( UCHAR  DriveNumber,
ULONG pSize 
)
static

Definition at line 90 of file machxbox.c.

91{
92 PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
94 //EXTENDED_GEOMETRY ExtGeometry;
95 GEOMETRY Geometry;
96 ULONG Size;
97
98 //
99 // Initialize returned size
100 //
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 //ExtGeometry.Size = sizeof(EXTENDED_GEOMETRY);
129
130 if (XboxDiskGetDriveGeometry(DriveNumber, &Geometry))
131 {
132 DiskGeometry->BytesPerSector = Geometry.BytesPerSector;
133 DiskGeometry->NumberOfCylinders = Geometry.Cylinders;
134 DiskGeometry->SectorsPerTrack = Geometry.Sectors;
135 DiskGeometry->NumberOfHeads = Geometry.Heads;
136 }
137 else
138 {
139 ERR("Reading disk geometry failed\n");
140 FrLdrHeapFree(PartialResourceList, TAG_HW_RESOURCE_LIST);
141 return NULL;
142 }
143 TRACE("Disk %x: %u Cylinders %u Heads %u Sectors %u Bytes\n",
144 DriveNumber,
145 DiskGeometry->NumberOfCylinders,
146 DiskGeometry->NumberOfHeads,
147 DiskGeometry->SectorsPerTrack,
148 DiskGeometry->BytesPerSector);
149
150 //
151 // Return configuration data
152 //
153 *pSize = Size;
154 return PartialResourceList;
155}
FORCEINLINE VOID FrLdrHeapFree(PVOID MemoryPointer, ULONG Tag)
Definition: mm.h:181
Definition: disk.h:25
ULONG BytesPerSector
Definition: disk.h:29
ULONG Sectors
Definition: disk.h:28
ULONG Cylinders
Definition: disk.h:26
ULONG Heads
Definition: disk.h:27
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 48 of file machxbox.c.

49{
50 /*
51 * Xbox may have maximum two Serial COM ports
52 * if the Super I/O chip is connected via LPC
53 */
55 ULONG ComBase = 0;
56
58
59 // Select serial device
61
62 // Check if selected device is active
64 {
65 ComBase = LpcGetIoBase();
66 *Irq = LpcGetIrqPrimary();
67 }
68
70
71 return ComBase;
72}
#define LPC_CONFIG_DEVICE_NUMBER
Definition: superio.h:30
#define LPC_CONFIG_DEVICE_ACTIVATE
Definition: superio.h:31
#define LPC_DEVICE_SERIAL_PORT_2
Definition: superio.h:24
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
FORCEINLINE ULONG LpcGetIrqPrimary()
Definition: superio.h:126
FORCEINLINE ULONG LpcGetIoBase()
Definition: superio.h:96
_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 ( VOID  )

Definition at line 271 of file machxbox.c.

272{
274 ULONG BusNumber = 0;
275
276 TRACE("DetectHardware()\n");
277
278 /* Create the 'System' key */
279 FldrCreateSystemKey(&SystemKey);
280 FldrSetIdentifier(SystemKey, "Original Xbox (PC/AT like)");
281
284
285 /* TODO: Build actual xbox's hardware configuration tree */
286 DetectPciBios(SystemKey, &BusNumber);
287 DetectIsaBios(SystemKey, &BusNumber);
288
289 TRACE("DetectHardware() Done\n");
290 return SystemKey;
291}
VOID NTAPI FldrSetIdentifier(IN PCONFIGURATION_COMPONENT_DATA ComponentData, IN PCHAR IdentifierString)
Definition: archwsup.c:56
VOID NTAPI FldrCreateSystemKey(OUT PCONFIGURATION_COMPONENT_DATA *SystemNode)
Definition: archwsup.c:89
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:90
static VOID DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
Definition: machxbox.c:209
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 293 of file machxbox.c.

294{
295 /* UNIMPLEMENTED */
296}

Referenced by MachInit().

◆ XboxPrepareForReactOS()

VOID XboxPrepareForReactOS ( VOID  )

Definition at line 378 of file machxbox.c.

379{
380 /* On Xbox, prepare video and disk support */
384
385 /* Turn off debug messages to screen */
387}
#define DebugDisableScreenPort()
Definition: debug.h:120
#define FALSE
Definition: types.h:117
VOID __cdecl DiskStopFloppyMotor(VOID)
Definition: pc98hw.c:1245
VOID XboxDiskInit(BOOLEAN Init)
Definition: xboxdisk.c:26
VOID XboxVideoPrepareForReactOS(VOID)
Definition: xboxvideo.c:315

Referenced by MachInit().

Variable Documentation

◆ FrameBuffer

◆ FrameBufferSize

ULONG FrameBufferSize
extern