ReactOS 0.4.17-dev-966-gf06eace
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 XboxDetectPciBus (_In_ PCONFIGURATION_COMPONENT_DATA SystemKey, _Inout_ PULONG BusNumber, _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 359 of file machxbox.c.

362{
363 /* No-op on XBOX */
364}

◆ DBG_DEFAULT_CHANNEL()

DBG_DEFAULT_CHANNEL ( HWDETECT  )

◆ DetectDisplayController()

static VOID DetectDisplayController ( _In_ PCONFIGURATION_COMPONENT_DATA  BusKey)
static

Definition at line 161 of file machxbox.c.

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

238{
239 PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
241 ULONG Size;
242
243 /* Set 'Configuration Data' value */
244 Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors);
245 PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
246 if (PartialResourceList == NULL)
247 {
248 ERR("Failed to allocate resource descriptor\n");
249 return;
250 }
251
252 /* Initialize resource descriptor */
253 RtlZeroMemory(PartialResourceList, Size);
254 PartialResourceList->Version = 1;
255 PartialResourceList->Revision = 1;
256 PartialResourceList->Count = 0;
257
258 /* Create new bus key */
259 FldrCreateComponentKey(SystemKey,
262 0,
263 0,
264 0xFFFFFFFF,
265 "ISA",
266 PartialResourceList,
267 Size,
268 &BusKey);
269
270 /* Increment bus number */
271 (*BusNumber)++;
272
273 /* Detect ISA/BIOS devices */
274 DetectBiosDisks(SystemKey, BusKey);
276
277 /* FIXME: Detect more ISA devices */
278}
#define MAX_XBOX_COM_PORTS
Definition: machxbox.c:26
static ULONG XboxGetSerialPort(ULONG Index, PULONG Irq)
Definition: machxbox.c:57
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::@486::@489 Interrupt
struct _CM_SERIAL_DEVICE_DATA * PCM_SERIAL_DEVICE_DATA

Referenced by DetectIsaBios().

◆ MachInit()

VOID MachInit ( const char *  CmdLine)

Definition at line 369 of file machxbox.c.

370{
371 PCI_TYPE1_CFG_BITS PciCfg1;
372 ULONG PciId;
373
374 /* Check for Xbox by identifying device at PCI 0:0:0, if it's
375 * 0x10DE/0x02A5 then we're running on an Xbox */
376
377 /* Select Host to PCI bridge */
378 PciCfg1.u.bits.Enable = 1;
379 PciCfg1.u.bits.BusNumber = 0;
380 PciCfg1.u.bits.DeviceNumber = 0;
381 PciCfg1.u.bits.FunctionNumber = 0;
382 /* Select register VendorID & DeviceID */
383 PciCfg1.u.bits.RegisterNumber = 0x00;
384 PciCfg1.u.bits.Reserved = 0;
385
388 if (PciId != 0x02A510DE)
389 {
390 ERR("This is not an original Xbox!\n");
391
392 /* Disable and halt the CPU */
393 _disable();
394 __halt();
395
396 while (TRUE)
397 NOTHING;
398 }
399
400 /* Set LEDs to red before anything is initialized */
401 XboxSetLED("rrrr");
402
403 /* Setup vtbl */
433
434 /* Initialize our stuff */
435 XboxMemInit();
437
438 /* Set LEDs to orange after init */
439 XboxSetLED("oooo");
440
442}
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:92
VOID XboxHwIdle(VOID)
Definition: machxbox.c:353
PCONFIGURATION_COMPONENT_DATA XboxHwDetect(_In_opt_ PCSTR Options)
Definition: machxbox.c:297
static UCHAR XboxGetFloppyCount(VOID)
Definition: machxbox.c:282
VOID XboxPrepareForReactOS(VOID)
Definition: machxbox.c:445
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::@154::@155 bits
union _PCI_TYPE1_CFG_BITS::@154 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

◆ XboxDetectPciBus()

static BOOLEAN XboxDetectPciBus ( _In_ PCONFIGURATION_COMPONENT_DATA  SystemKey,
_Inout_ PULONG  BusNumber,
_Out_ PPCI_REGISTRY_INFO  BusData 
)
static

Definition at line 35 of file machxbox.c.

39{
40 UNREFERENCED_PARAMETER(SystemKey);
42
43 /* There are 2 known working Type 1 PCI buses on an original Xbox */
44 BusData->MajorRevision = 1;
45 BusData->MinorRevision = 0;
46 BusData->NoBuses = 2;
47 BusData->HardwareMechanism = 1;
48 return TRUE;
49}
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:329
_In_ ULONG BusNumber
Definition: pciidex.h:65

Referenced by XboxHwDetect().

◆ XboxGetExtendedBIOSData()

VOID XboxGetExtendedBIOSData ( PULONG  ExtendedBIOSDataArea,
PULONG  ExtendedBIOSDataSize 
)

Definition at line 92 of file machxbox.c.

93{
94 TRACE("XboxGetExtendedBIOSData(): UNIMPLEMENTED\n");
97}
#define ExtendedBIOSDataArea
Definition: winldr.c:346
#define ExtendedBIOSDataSize
Definition: winldr.c:347

Referenced by MachInit().

◆ XboxGetFloppyCount()

static UCHAR XboxGetFloppyCount ( VOID  )
static

Definition at line 282 of file machxbox.c.

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

104{
105 PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
107 GEOMETRY Geometry;
108 ULONG Size;
109
110 /* Initialize returned size */
111 *pSize = 0;
112
113 /* Set 'Configuration Data' value */
114 Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors[1]) + sizeof(*DiskGeometry);
115 PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
116 if (PartialResourceList == NULL)
117 {
118 ERR("Failed to allocate resource descriptor\n");
119 return NULL;
120 }
121
122 RtlZeroMemory(PartialResourceList, Size);
123 PartialResourceList->Version = 1;
124 PartialResourceList->Revision = 1;
125 PartialResourceList->Count = 1;
126 PartialResourceList->PartialDescriptors[0].Type =
128// PartialResourceList->PartialDescriptors[0].ShareDisposition =
129// PartialResourceList->PartialDescriptors[0].Flags =
130 PartialResourceList->PartialDescriptors[0].u.DeviceSpecificData.DataSize =
131 sizeof(*DiskGeometry);
132
133 /* Get the disk geometry */
134 DiskGeometry = (PCM_DISK_GEOMETRY_DEVICE_DATA)&PartialResourceList->PartialDescriptors[1];
135 if (XboxDiskGetDriveGeometry(DriveNumber, &Geometry))
136 {
137 DiskGeometry->BytesPerSector = Geometry.BytesPerSector;
138 DiskGeometry->NumberOfCylinders = Geometry.Cylinders;
139 DiskGeometry->SectorsPerTrack = Geometry.SectorsPerTrack;
140 DiskGeometry->NumberOfHeads = Geometry.Heads;
141 }
142 else
143 {
144 ERR("Reading disk geometry failed\n");
145 FrLdrHeapFree(PartialResourceList, TAG_HW_RESOURCE_LIST);
146 return NULL;
147 }
148 TRACE("Disk %x: %u Cylinders %u Heads %u Sectors %u Bytes\n",
149 DriveNumber,
150 DiskGeometry->NumberOfCylinders,
151 DiskGeometry->NumberOfHeads,
152 DiskGeometry->SectorsPerTrack,
153 DiskGeometry->BytesPerSector);
154
155 /* Return configuration data */
156 *pSize = Size;
157 return PartialResourceList;
158}
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 57 of file machxbox.c.

58{
59 /*
60 * Xbox may have maximum two Serial COM ports
61 * if the Super I/O chip is connected via LPC
62 */
64 ULONG ComBase = 0;
65
67
68 // Select serial device
70
71 // Check if selected device is active
73 {
74 ComBase = LpcGetIoBase();
75 *Irq = LpcGetIrqPrimary();
76 }
77
79
80 return ComBase;
81}
#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 297 of file machxbox.c.

299{
301 ULONG BusNumber = 0;
302
303 TRACE("DetectHardware()\n");
304
305 /* Create the 'System' key */
306 FldrCreateSystemKey(&SystemKey, "Original Xbox (PC/AT like)");
307
309
310 /* TODO: Build actual Xbox's hardware configuration tree */
312 DetectIsaBios(Options, SystemKey, &BusNumber);
313
314 /* On XBOX, the display controller is on PCI bus #1 */
315 {
317 ULONG NumPciBus = 0;
318 ULONG PciBusToFind = 1;
319
320 /* PCI buses are under the System Key (i.e. siblings) */
321 for (BusKey = SystemKey->Child; BusKey; BusKey = BusKey->Sibling)
322 {
323 ERR("** XBOX: Current bus '%s' **\n", BusKey->ComponentEntry.Identifier);
324
325 /* Try to get a match */
326 if ((BusKey->ComponentEntry.Class == AdapterClass) &&
328 /* Verify it's a PCI key */
329 (BusKey->ComponentEntry.Identifier &&
330 !_stricmp(BusKey->ComponentEntry.Identifier, "PCI")))
331 {
332 /* Got a PCI bus, check whether it's the one to find */
333 if (NumPciBus == PciBusToFind)
334 {
335 ERR("** XBOX: PCI bus #%lu found!\n **\n", PciBusToFind);
336 break;
337 }
338 /* Nope, continue */
339 ++NumPciBus;
340 }
341 }
342 if (BusKey)
343 {
344 ERR("** XBOX: Adding Display Controller on PCI #1 **\n");
346 }
347 }
348
349 TRACE("DetectHardware() Done\n");
350 return SystemKey;
351}
VOID FldrCreateSystemKey(_Out_ PCONFIGURATION_COMPONENT_DATA *SystemNode, _In_ PCSTR IdentifierString)
Definition: archwsup.c:161
VOID DetectPciBus(_In_ PCONFIGURATION_COMPONENT_DATA SystemKey, _Inout_ PULONG BusNumber, _In_ DETECT_PCI_BUS MachDetectPciBus)
Definition: hwpci.c:17
#define _stricmp
Definition: cat.c:22
static VOID DetectDisplayController(_In_ PCONFIGURATION_COMPONENT_DATA BusKey)
Definition: machxbox.c:161
static PCM_PARTIAL_RESOURCE_LIST XboxGetHarddiskConfigurationData(UCHAR DriveNumber, ULONG *pSize)
Definition: machxbox.c:103
static VOID DetectIsaBios(_In_opt_ PCSTR Options, _Inout_ PCONFIGURATION_COMPONENT_DATA SystemKey, _Out_ ULONG *BusNumber)
Definition: machxbox.c:234
static BOOLEAN XboxDetectPciBus(_In_ PCONFIGURATION_COMPONENT_DATA SystemKey, _Inout_ PULONG BusNumber, _Out_ 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

Referenced by MachInit().

◆ XboxHwIdle()

VOID XboxHwIdle ( VOID  )

Definition at line 353 of file machxbox.c.

354{
355 /* UNIMPLEMENTED */
356}

Referenced by MachInit().

◆ XboxPrepareForReactOS()

VOID XboxPrepareForReactOS ( VOID  )

Definition at line 445 of file machxbox.c.

446{
447 /* Prepare video and turn off debug messages to screen */
450}
#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().