ReactOS 0.4.17-dev-804-g023d8af
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)
 
static BOOLEAN XboxFindPciBios (_Out_ 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 156 of file machxbox.c.

158{
159 PCONFIGURATION_COMPONENT_DATA ControllerKey;
160 PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
161 PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
162 PCM_FRAMEBUF_DEVICE_DATA FramebufData;
163 ULONG Size;
164
166 return;
167
168 Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors[3]) + sizeof(*FramebufData);
169 PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
170 if (PartialResourceList == NULL)
171 {
172 ERR("Failed to allocate resource descriptor\n");
173 return;
174 }
175
176 /* Initialize resource descriptor */
177 RtlZeroMemory(PartialResourceList, Size);
178 PartialResourceList->Version = 1;
179 PartialResourceList->Revision = 2;
180 PartialResourceList->Count = 3;
181
182 /* Set IO Control Port */
183 PartialDescriptor = &PartialResourceList->PartialDescriptors[0];
184 PartialDescriptor->Type = CmResourceTypePort;
186 PartialDescriptor->Flags = CM_RESOURCE_PORT_MEMORY;
187 PartialDescriptor->u.Port.Start.LowPart = NvBase;
188 PartialDescriptor->u.Port.Start.HighPart = 0;
189 PartialDescriptor->u.Port.Length = (16 * 1024 * 1024);
190
191 /* Set Memory */
192 PartialDescriptor = &PartialResourceList->PartialDescriptors[1];
193 PartialDescriptor->Type = CmResourceTypeMemory;
195 PartialDescriptor->Flags = CM_RESOURCE_MEMORY_READ_WRITE;
196 PartialDescriptor->u.Memory.Start.LowPart = (FrameBuffer & 0x0FFFFFFF);
197 PartialDescriptor->u.Memory.Length = FrameBufferSize;
198
199 /* Set framebuffer-specific data */
200 PartialDescriptor = &PartialResourceList->PartialDescriptors[2];
201 PartialDescriptor->Type = CmResourceTypeDeviceSpecific;
203 PartialDescriptor->Flags = 0;
204 PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(*FramebufData);
205
206 /* Get pointer to framebuffer-specific data */
207 FramebufData = (PCM_FRAMEBUF_DEVICE_DATA)(PartialDescriptor + 1);
208 RtlCopyMemory(FramebufData, FrameBufferData, sizeof(*FrameBufferData));
209 FramebufData->Version = 1;
210 FramebufData->Revision = 3;
211 FramebufData->VideoClock = 0;
212
217 0,
218 0xFFFFFFFF,
219 "NV2A Framebuffer",
220 PartialResourceList,
221 Size,
222 &ControllerKey);
223
224 // NOTE: Don't add a MonitorPeripheral for now.
225}
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:224
#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:121
#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::@399::@401 Port
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@399::@404 Memory
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@399::@408 DeviceSpecificData
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@399 u
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 229 of file machxbox.c.

233{
234 PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
236 ULONG Size;
237
238 /* Set 'Configuration Data' value */
239 Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors);
240 PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
241 if (PartialResourceList == NULL)
242 {
243 ERR("Failed to allocate resource descriptor\n");
244 return;
245 }
246
247 /* Initialize resource descriptor */
248 RtlZeroMemory(PartialResourceList, Size);
249 PartialResourceList->Version = 1;
250 PartialResourceList->Revision = 1;
251 PartialResourceList->Count = 0;
252
253 /* Create new bus key */
254 FldrCreateComponentKey(SystemKey,
257 0,
258 0,
259 0xFFFFFFFF,
260 "ISA",
261 PartialResourceList,
262 Size,
263 &BusKey);
264
265 /* Increment bus number */
266 (*BusNumber)++;
267
268 /* Detect ISA/BIOS devices */
269 DetectBiosDisks(SystemKey, BusKey);
271
272 /* FIXME: Detect more ISA devices */
273}
#define MAX_XBOX_COM_PORTS
Definition: machxbox.c:26
static ULONG XboxGetSerialPort(ULONG Index, PULONG Irq)
Definition: machxbox.c:52
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:109
BOOLEAN NTAPI CpDoesPortExist(_In_ PUCHAR Address)
Definition: cport.c:33
#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
char CHAR
Definition: pedump.c:57
#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::@399::@402 Interrupt
struct _CM_SERIAL_DEVICE_DATA * PCM_SERIAL_DEVICE_DATA

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:438
#define NOTHING
Definition: input_list.c:10
__INTRIN_INLINE void __halt(void)
Definition: intrin_x86.h:1746
VOID XboxGetExtendedBIOSData(PULONG ExtendedBIOSDataArea, PULONG ExtendedBIOSDataSize)
Definition: machxbox.c:87
VOID XboxHwIdle(VOID)
Definition: machxbox.c:348
PCONFIGURATION_COMPONENT_DATA XboxHwDetect(_In_opt_ PCSTR Options)
Definition: machxbox.c:292
static UCHAR XboxGetFloppyCount(VOID)
Definition: machxbox.c:277
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
struct _PCI_TYPE1_CFG_BITS::@152::@153 bits
union _PCI_TYPE1_CFG_BITS::@152 u
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:123
ULONG XboxDiskGetCacheableBlockCount(UCHAR DriveNumber)
Definition: xboxdisk.c:166
BOOLEAN XboxDiskGetDriveGeometry(UCHAR DriveNumber, PGEOMETRY Geometry)
Definition: xboxdisk.c:146
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()

static BOOLEAN XboxFindPciBios ( _Out_ PPCI_REGISTRY_INFO  BusData)
static

Definition at line 35 of file machxbox.c.

37{
38 /* We emulate PCI BIOS here, there are 2 known working PCI buses on an original Xbox */
39 BusData->NoBuses = 2;
40 BusData->MajorRevision = 1;
41 BusData->MinorRevision = 0;
42 BusData->HardwareMechanism = 1;
43 return TRUE;
44}

Referenced by XboxHwDetect().

◆ XboxGetExtendedBIOSData()

VOID XboxGetExtendedBIOSData ( PULONG  ExtendedBIOSDataArea,
PULONG  ExtendedBIOSDataSize 
)

Definition at line 87 of file machxbox.c.

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

Referenced by MachInit().

◆ XboxGetFloppyCount()

static UCHAR XboxGetFloppyCount ( VOID  )
static

Definition at line 277 of file machxbox.c.

278{
279 /* On a PC we use CMOS/RTC I/O ports 0x70 and 0x71 to detect floppies.
280 * However an Xbox CMOS memory range [0x10, 0x70) and [0x80, 0x100)
281 * is filled with 0x55 0xAA 0x55 0xAA ... byte pattern which is used
282 * to validate the date/time settings by Xbox OS.
283 *
284 * Technically it's possible to connect a floppy drive to Xbox, but
285 * CMOS detection method should not be used here. */
286
287 WARN("XboxGetFloppyCount() is UNIMPLEMENTED, returning 0\n");
288 return 0;
289}
#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 98 of file machxbox.c.

99{
100 PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
102 GEOMETRY Geometry;
103 ULONG Size;
104
105 /* Initialize returned size */
106 *pSize = 0;
107
108 /* Set 'Configuration Data' value */
109 Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors[1]) + sizeof(*DiskGeometry);
110 PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
111 if (PartialResourceList == NULL)
112 {
113 ERR("Failed to allocate resource descriptor\n");
114 return NULL;
115 }
116
117 RtlZeroMemory(PartialResourceList, Size);
118 PartialResourceList->Version = 1;
119 PartialResourceList->Revision = 1;
120 PartialResourceList->Count = 1;
121 PartialResourceList->PartialDescriptors[0].Type =
123// PartialResourceList->PartialDescriptors[0].ShareDisposition =
124// PartialResourceList->PartialDescriptors[0].Flags =
125 PartialResourceList->PartialDescriptors[0].u.DeviceSpecificData.DataSize =
126 sizeof(*DiskGeometry);
127
128 /* Get the disk geometry */
129 DiskGeometry = (PCM_DISK_GEOMETRY_DEVICE_DATA)&PartialResourceList->PartialDescriptors[1];
130 if (XboxDiskGetDriveGeometry(DriveNumber, &Geometry))
131 {
132 DiskGeometry->BytesPerSector = Geometry.BytesPerSector;
133 DiskGeometry->NumberOfCylinders = Geometry.Cylinders;
134 DiskGeometry->SectorsPerTrack = Geometry.SectorsPerTrack;
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 /* Return configuration data */
151 *pSize = Size;
152 return PartialResourceList;
153}
VOID FrLdrHeapFree(PVOID MemoryPointer, ULONG Tag)
Definition: heap.c:539
if(dx< 0)
Definition: linetemp.h:194
Definition: disk.h:24
ULONG BytesPerSector
Number of bytes per sector.
Definition: disk.h:28
ULONG Cylinders
Number of cylinders on the disk.
Definition: disk.h:25
ULONG SectorsPerTrack
Number of sectors per track.
Definition: disk.h:27
ULONG Heads
Number of heads on the disk.
Definition: disk.h:26
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 52 of file machxbox.c.

53{
54 /*
55 * Xbox may have maximum two Serial COM ports
56 * if the Super I/O chip is connected via LPC
57 */
59 ULONG ComBase = 0;
60
62
63 // Select serial device
65
66 // Check if selected device is active
68 {
69 ComBase = LpcGetIoBase();
70 *Irq = LpcGetIrqPrimary();
71 }
72
74
75 return ComBase;
76}
#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
unsigned char UCHAR
Definition: typedefs.h:53
_Must_inspect_result_ _In_ WDFDEVICE Device
Definition: wdfchildlist.h:474
_In_ WDFCOLLECTION _In_ ULONG Index

Referenced by DetectIsaBios().

◆ XboxHwDetect()

PCONFIGURATION_COMPONENT_DATA XboxHwDetect ( _In_opt_ PCSTR  Options)

Definition at line 292 of file machxbox.c.

294{
296 ULONG BusNumber = 0;
297
298 TRACE("DetectHardware()\n");
299
300 /* Create the 'System' key */
301 FldrCreateSystemKey(&SystemKey, "Original Xbox (PC/AT like)");
302
304
305 /* TODO: Build actual Xbox's hardware configuration tree */
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:161
VOID DetectPciBios(_In_ PCONFIGURATION_COMPONENT_DATA SystemKey, _Inout_ PULONG BusNumber, _In_ FIND_PCI_BIOS MachFindPciBios)
Definition: hwpci.c:171
#define _stricmp
Definition: cat.c:22
static VOID DetectDisplayController(_In_ PCONFIGURATION_COMPONENT_DATA BusKey)
Definition: machxbox.c:156
static PCM_PARTIAL_RESOURCE_LIST XboxGetHarddiskConfigurationData(UCHAR DriveNumber, ULONG *pSize)
Definition: machxbox.c:98
static VOID DetectIsaBios(_In_opt_ PCSTR Options, _Inout_ PCONFIGURATION_COMPONENT_DATA SystemKey, _Out_ ULONG *BusNumber)
Definition: machxbox.c:229
static BOOLEAN XboxFindPciBios(_Out_ PPCI_REGISTRY_INFO BusData)
Definition: machxbox.c:35
GET_HARDDISK_CONFIG_DATA GetHarddiskConfigurationData
Definition: pchw.c:45
_In_ ULONG BusNumber
Definition: pciidex.h:65
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

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 DetectDisplayController(), and UefiInitializeAppleGraphics().

◆ NvBase

ULONG NvBase
extern

Definition at line 28 of file xboxvideo.c.

Referenced by DetectDisplayController().