ReactOS  0.4.15-dev-1039-gb9754fa
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 
171  Size = sizeof(CM_PARTIAL_RESOURCE_LIST);
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  memset(PartialResourceList, 0, Size);
179 
180  /* Initialize resource descriptor */
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 
193  FldrCreateComponentKey(BusKey,
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 }
struct _CM_PARTIAL_RESOURCE_LIST CM_PARTIAL_RESOURCE_LIST
GLint x0
Definition: linetemp.h:95
char CHAR
Definition: xmlstorage.h:175
#define CM_RESOURCE_MEMORY_READ_WRITE
Definition: cmtypes.h:120
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@387 u
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@387::@392 Memory
smooth NULL
Definition: ftsmooth.c:416
Definition: bufpool.h:45
#define TRACE(s)
Definition: solgame.cpp:4
FORCEINLINE PVOID FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag)
Definition: mm.h:163
PVOID FrameBuffer
Definition: xboxvideo.c:28
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
Definition: hwresource.cpp:119
IN PVOID IN PVOID IN USHORT IN USHORT Size
Definition: pci.h:361
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 ERR(fmt,...)
Definition: debug.h:110
ULONG FrameBufferSize
Definition: xboxvideo.c:29
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
unsigned int ULONG
Definition: retypes.h:1
#define ULONG_PTR
Definition: config.h:101
#define CmResourceTypeMemory
Definition: hwresource.cpp:125
#define memset(x, y, z)
Definition: compat.h:39
#define TAG_HW_RESOURCE_LIST
Definition: hardware.h:26

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 */
216  Size = sizeof(CM_PARTIAL_RESOURCE_LIST) -
218  PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
219  if (PartialResourceList == NULL)
220  {
221  TRACE("Failed to allocate resource descriptor\n");
222  return;
223  }
224 
225  /* Initialize resource descriptor */
226  memset(PartialResourceList, 0, Size);
227  PartialResourceList->Version = 1;
228  PartialResourceList->Revision = 1;
229  PartialResourceList->Count = 0;
230 
231  /* Create new bus key */
232  FldrCreateComponentKey(SystemKey,
233  AdapterClass,
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);
249  DetectDisplayController(BusKey);
250 
251  /* FIXME: Detect more ISA devices */
252 }
struct _CM_PARTIAL_RESOURCE_LIST CM_PARTIAL_RESOURCE_LIST
VOID DetectSerialPorts(PCONFIGURATION_COMPONENT_DATA BusKey, GET_SERIAL_PORT MachGetSerialPort, ULONG Count)
Definition: machpc.c:659
VOID DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey, PCONFIGURATION_COMPONENT_DATA BusKey)
Definition: pchw.c:344
#define MAX_XBOX_COM_PORTS
Definition: machxbox.c:25
GLint x0
Definition: linetemp.h:95
static VOID DetectDisplayController(PCONFIGURATION_COMPONENT_DATA BusKey)
Definition: machxbox.c:158
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
FORCEINLINE PVOID FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag)
Definition: mm.h:163
IN PVOID IN PVOID IN USHORT IN USHORT Size
Definition: pci.h:361
static ULONG XboxGetSerialPort(ULONG Index, PULONG Irq)
Definition: machxbox.c:48
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
unsigned int ULONG
Definition: retypes.h:1
#define memset(x, y, z)
Definition: compat.h:39
#define TAG_HW_RESOURCE_LIST
Definition: hardware.h:26

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 659 of file machpc.c.

660 {
661  PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
662  PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
663  PCM_SERIAL_DEVICE_DATA SerialDeviceData;
664  ULONG Irq;
665  ULONG Base;
666  CHAR Buffer[80];
667  ULONG ControllerNumber = 0;
668  PCONFIGURATION_COMPONENT_DATA ControllerKey;
669  ULONG i;
670  ULONG Size;
671 
672  TRACE("DetectSerialPorts()\n");
673 
674  for (i = 0; i < Count; i++)
675  {
676  Base = MachGetSerialPort(i, &Irq);
677  if ((Base == 0) || !CpDoesPortExist(UlongToPtr(Base)))
678  continue;
679 
680  TRACE("Found COM%u port at 0x%x\n", i + 1, Base);
681 
682  /* Set 'Identifier' value */
683  sprintf(Buffer, "COM%ld", i + 1);
684 
685  /* Build full device descriptor */
686  Size = sizeof(CM_PARTIAL_RESOURCE_LIST) +
687  2 * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) +
688  sizeof(CM_SERIAL_DEVICE_DATA);
689  PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
690  if (PartialResourceList == NULL)
691  {
692  ERR("Failed to allocate resource descriptor\n");
693  continue;
694  }
695  memset(PartialResourceList, 0, Size);
696 
697  /* Initialize resource descriptor */
698  PartialResourceList->Version = 1;
699  PartialResourceList->Revision = 1;
700  PartialResourceList->Count = 3;
701 
702  /* Set IO Port */
703  PartialDescriptor = &PartialResourceList->PartialDescriptors[0];
704  PartialDescriptor->Type = CmResourceTypePort;
706  PartialDescriptor->Flags = CM_RESOURCE_PORT_IO;
707  PartialDescriptor->u.Port.Start.LowPart = Base;
708  PartialDescriptor->u.Port.Start.HighPart = 0x0;
709  PartialDescriptor->u.Port.Length = 8;
710 
711  /* Set Interrupt */
712  PartialDescriptor = &PartialResourceList->PartialDescriptors[1];
713  PartialDescriptor->Type = CmResourceTypeInterrupt;
714  PartialDescriptor->ShareDisposition = CmResourceShareUndetermined;
715  PartialDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED;
716  PartialDescriptor->u.Interrupt.Level = Irq;
717  PartialDescriptor->u.Interrupt.Vector = Irq;
718  PartialDescriptor->u.Interrupt.Affinity = 0xFFFFFFFF;
719 
720  /* Set serial data (device specific) */
721  PartialDescriptor = &PartialResourceList->PartialDescriptors[2];
722  PartialDescriptor->Type = CmResourceTypeDeviceSpecific;
723  PartialDescriptor->ShareDisposition = CmResourceShareUndetermined;
724  PartialDescriptor->Flags = 0;
725  PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(CM_SERIAL_DEVICE_DATA);
726 
727  SerialDeviceData =
728  (PCM_SERIAL_DEVICE_DATA)&PartialResourceList->PartialDescriptors[3];
729  SerialDeviceData->BaudClock = 1843200; /* UART Clock frequency (Hertz) */
730 
731  /* Create controller key */
732  FldrCreateComponentKey(BusKey,
734  SerialController,
736  ControllerNumber,
737  0xFFFFFFFF,
738  Buffer,
739  PartialResourceList,
740  Size,
741  &ControllerKey);
742 
744  {
745  /* Detect serial mouse */
747  }
748 
749  ControllerNumber++;
750  }
751 }
struct _CM_PARTIAL_RESOURCE_LIST CM_PARTIAL_RESOURCE_LIST
#define CmResourceTypeDeviceSpecific
Definition: hwresource.cpp:127
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@387::@396 DeviceSpecificData
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@387::@390 Interrupt
Definition: arc.h:82
char CHAR
Definition: xmlstorage.h:175
struct _CM_SERIAL_DEVICE_DATA CM_SERIAL_DEVICE_DATA
_In_opt_ ULONG Base
Definition: rtlfuncs.h:2373
Definition: arc.h:84
_Inout_ __drv_aliasesMem PSLIST_ENTRY _Inout_ PSLIST_ENTRY _In_ ULONG Count
Definition: exfuncs.h:1223
static VOID DetectSerialPointerPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey, PUCHAR Base)
Definition: machpc.c:483
BOOLEAN Rs232PortInUse(PUCHAR Base)
Definition: rs232.c:140
#define CmResourceTypePort
Definition: hwresource.cpp:123
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@387 u
#define sprintf(buf, format,...)
Definition: sprintf.c:55
BOOLEAN NTAPI CpDoesPortExist(IN PUCHAR Address)
Definition: cport.c:227
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
smooth NULL
Definition: ftsmooth.c:416
Definition: bufpool.h:45
#define UlongToPtr(u)
Definition: config.h:106
FORCEINLINE PVOID FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag)
Definition: mm.h:163
#define TRACE(s)
Definition: solgame.cpp:4
struct _CM_SERIAL_DEVICE_DATA * PCM_SERIAL_DEVICE_DATA
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
Definition: hwresource.cpp:119
Definition: arc.h:85
IN PVOID IN PVOID IN USHORT IN USHORT Size
Definition: pci.h:361
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
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@387::@389 Port
#define ERR(fmt,...)
Definition: debug.h:110
#define CM_RESOURCE_PORT_IO
Definition: cmtypes.h:109
Definition: arc.h:83
#define CmResourceTypeInterrupt
Definition: hwresource.cpp:124
#define CM_RESOURCE_INTERRUPT_LATCHED
Definition: cmtypes.h:144
unsigned int ULONG
Definition: retypes.h:1
#define memset(x, y, z)
Definition: compat.h:39
#define TAG_HW_RESOURCE_LIST
Definition: hardware.h:26

Referenced by DetectIsaBios().

◆ MachInit()

VOID MachInit ( const char CmdLine)

Definition at line 302 of file machxbox.c.

303 {
304  ULONG PciId;
305 
306  memset(&MachVtbl, 0, sizeof(MACHVTBL));
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  WRITE_PORT_ULONG((PULONG)0xCF8, CONFIG_CMD(0, 0, 0));
311  PciId = READ_PORT_ULONG((PULONG)0xCFC);
312  if (PciId != 0x02A510DE)
313  {
314  ERR("This is not original Xbox!\n");
315 
316  /* Disable and halt the CPU */
317  _disable();
318  __halt();
319 
320  while (TRUE);
321  }
322 
323  /* Set LEDs to red before anything is initialized */
324  XboxSetLED("rrrr");
325 
326  /* Setup vtbl */
343  MachVtbl.Beep = PcBeep;
355 
356  /* Initialize our stuff */
357  XboxMemInit();
358  XboxVideoInit();
359 
360  /* Set LEDs to orange after init */
361  XboxSetLED("oooo");
362 
364 }
BOOLEAN XboxConsKbHit(VOID)
Definition: xboxcons.c:69
PCONFIGURATION_COMPONENT_DATA XboxHwDetect(VOID)
Definition: machxbox.c:271
PFREELDR_MEMORY_DESCRIPTOR(* GetMemoryMap)(PULONG MaxMemoryMapSize)
Definition: machine.h:63
#define TRUE
Definition: types.h:120
VOID(* GetExtendedBIOSData)(PULONG ExtendedBIOSDataArea, PULONG ExtendedBIOSDataSize)
Definition: machine.h:64
VOID(* VideoClearScreen)(UCHAR Attr)
Definition: machine.h:45
__INTRIN_INLINE void __halt(void)
Definition: intrin_x86.h:1609
PCONFIGURATION_COMPONENT_DATA(* HwDetect)(VOID)
Definition: machine.h:77
VOID(* VideoGetDisplaySize)(PULONG Width, PULONG Height, PULONG Depth)
Definition: machine.h:47
ULONG NTAPI READ_PORT_ULONG(IN PULONG Port)
Definition: portio.c:70
static UCHAR XboxGetFloppyCount(VOID)
Definition: machxbox.c:256
VOID XboxVideoCopyOffScreenBufferToVRAM(PVOID Buffer)
Definition: xboxvideo.c:273
VOID XboxVideoClearScreen(UCHAR Attr)
Definition: xboxvideo.c:124
VOID XboxConsPutChar(int c)
Definition: xboxcons.c:26
BOOLEAN(* VideoIsPaletteFixed)(VOID)
Definition: machine.h:54
UCHAR(* GetFloppyCount)(VOID)
Definition: machine.h:66
VOID XboxMemInit(VOID)
Definition: xboxmem.c:58
VOID XboxVideoSetTextCursorPosition(UCHAR X, UCHAR Y)
Definition: xboxvideo.c:261
VOID NTAPI WRITE_PORT_ULONG(IN PULONG Port, IN ULONG Value)
Definition: portio.c:123
BOOLEAN XboxDiskReadLogicalSectors(IN UCHAR DriveNumber, IN ULONGLONG SectorNumber, IN ULONG SectorCount, OUT PVOID Buffer)
Definition: xboxdisk.c:84
BOOLEAN PcInitializeBootDevices(VOID)
Definition: hwdisk.c:470
VOID(* VideoGetFontsFromFirmware)(PULONG RomFontPointers)
Definition: machine.h:49
int XboxConsGetCh(void)
Definition: xboxcons.c:76
BOOLEAN(* DiskGetDriveGeometry)(UCHAR DriveNumber, PGEOMETRY DriveGeometry)
Definition: machine.h:68
VOID(* VideoSetTextCursorPosition)(UCHAR X, UCHAR Y)
Definition: machine.h:50
ULONG XboxVideoGetBufferSize(VOID)
Definition: xboxvideo.c:249
TIMEINFO *(* GetTime)(VOID)
Definition: machine.h:72
VOID XboxVideoGetFontsFromFirmware(PULONG RomFontPointers)
Definition: xboxvideo.c:255
BOOLEAN(* InitializeBootDevices)(VOID)
Definition: machine.h:76
VOID(* VideoGetPaletteColor)(UCHAR Color, UCHAR *Red, UCHAR *Green, UCHAR *Blue)
Definition: machine.h:56
BOOLEAN XboxVideoIsPaletteFixed(VOID)
Definition: xboxvideo.c:289
PFREELDR_MEMORY_DESCRIPTOR XboxMemGetMemoryMap(ULONG *MemoryMapSize)
Definition: xboxmem.c:158
VOID XboxVideoGetDisplaySize(PULONG Width, PULONG Height, PULONG Depth)
Definition: xboxvideo.c:241
VOID XboxPrepareForReactOS(VOID)
Definition: machxbox.c:367
VOID XboxHwIdle(VOID)
Definition: machxbox.c:293
BOOLEAN(* DiskReadLogicalSectors)(UCHAR DriveNumber, ULONGLONG SectorNumber, ULONG SectorCount, PVOID Buffer)
Definition: machine.h:67
BOOLEAN(* ConsKbHit)(VOID)
Definition: machine.h:42
VOID XboxVideoSync(VOID)
Definition: xboxvideo.c:307
VOID(* VideoPutChar)(int Ch, UCHAR Attr, unsigned X, unsigned Y)
Definition: machine.h:52
VOID XboxVideoInit(VOID)
Definition: xboxvideo.c:194
void XboxSetLED(PCSTR pattern)
Definition: xboxi2c.c:198
VOID XboxVideoPutChar(int Ch, UCHAR Attr, unsigned X, unsigned Y)
Definition: xboxvideo.c:134
VOID(* VideoSetPaletteColor)(UCHAR Color, UCHAR Red, UCHAR Green, UCHAR Blue)
Definition: machine.h:55
VOID XboxVideoHideShowTextCursor(BOOLEAN Show)
Definition: xboxvideo.c:267
VOID(* PrepareForReactOS)(VOID)
Definition: machine.h:59
ULONG(* VideoGetBufferSize)(VOID)
Definition: machine.h:48
int(* ConsGetCh)(VOID)
Definition: machine.h:43
#define ERR(fmt,...)
Definition: debug.h:110
ULONG(* DiskGetCacheableBlockCount)(UCHAR DriveNumber)
Definition: machine.h:69
VOID(* ConsPutChar)(int Ch)
Definition: machine.h:41
BOOLEAN XboxDiskGetDriveGeometry(UCHAR DriveNumber, PGEOMETRY Geometry)
Definition: xboxdisk.c:103
MACHVTBL MachVtbl
Definition: arcemul.c:21
VOID PcBeep(VOID)
Definition: pcbeep.c:34
VOID(* HwIdle)(VOID)
Definition: machine.h:78
VOID HalpCalibrateStallExecution(VOID)
Definition: pchw.c:105
unsigned int * PULONG
Definition: retypes.h:1
#define CONFIG_CMD(bus, dev_fn, where)
Definition: hardware.h:23
VOID(* VideoSync)(VOID)
Definition: machine.h:57
void __cdecl _disable(void)
Definition: intrin_arm.h:365
VOID XboxVideoSetPaletteColor(UCHAR Color, UCHAR Red, UCHAR Green, UCHAR Blue)
Definition: xboxvideo.c:295
unsigned int ULONG
Definition: retypes.h:1
VOID XboxVideoGetPaletteColor(UCHAR Color, UCHAR *Red, UCHAR *Green, UCHAR *Blue)
Definition: xboxvideo.c:301
VOID(* VideoCopyOffScreenBufferToVRAM)(PVOID Buffer)
Definition: machine.h:53
VIDEODISPLAYMODE(* VideoSetDisplayMode)(char *DisplayMode, BOOLEAN Init)
Definition: machine.h:46
VOID XboxGetExtendedBIOSData(PULONG ExtendedBIOSDataArea, PULONG ExtendedBIOSDataSize)
Definition: machxbox.c:79
VIDEODISPLAYMODE XboxVideoSetDisplayMode(char *DisplayMode, BOOLEAN Init)
Definition: xboxvideo.c:234
VOID(* Beep)(VOID)
Definition: machine.h:58
#define memset(x, y, z)
Definition: compat.h:39
TIMEINFO * XboxGetTime(VOID)
Definition: xboxrtc.c:40
ULONG XboxDiskGetCacheableBlockCount(UCHAR DriveNumber)
Definition: xboxdisk.c:122
VOID(* VideoHideShowTextCursor)(BOOLEAN Show)
Definition: machine.h:51

◆ 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 }
#define TRUE
Definition: types.h:120
UCHAR HardwareMechanism
Definition: pci.h:110
UCHAR MinorRevision
Definition: pci.h:108
UCHAR MajorRevision
Definition: pci.h:107
UCHAR NoBuses
Definition: pci.h:109

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 ExtendedBIOSDataSize
Definition: winldr.c:421
#define ExtendedBIOSDataArea
Definition: winldr.c:420
#define TRACE(s)
Definition: solgame.cpp:4

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;
93  PCM_DISK_GEOMETRY_DEVICE_DATA DiskGeometry;
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 */
104  Size = sizeof(CM_PARTIAL_RESOURCE_LIST) +
106  PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
107  if (PartialResourceList == NULL)
108  {
109  ERR("Failed to allocate a full resource descriptor\n");
110  return NULL;
111  }
112 
113  memset(PartialResourceList, 0, 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 }
struct _CM_PARTIAL_RESOURCE_LIST CM_PARTIAL_RESOURCE_LIST
#define CmResourceTypeDeviceSpecific
Definition: hwresource.cpp:127
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@387::@396 DeviceSpecificData
FORCEINLINE VOID FrLdrHeapFree(PVOID MemoryPointer, ULONG Tag)
Definition: mm.h:170
ULONG Cylinders
Definition: disk.h:26
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@387 u
uint32_t ULONG_PTR
Definition: typedefs.h:65
smooth NULL
Definition: ftsmooth.c:416
void * PVOID
Definition: retypes.h:9
ULONG Sectors
Definition: disk.h:28
#define TRACE(s)
Definition: solgame.cpp:4
FORCEINLINE PVOID FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag)
Definition: mm.h:163
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
Definition: hwresource.cpp:119
IN PVOID IN PVOID IN USHORT IN USHORT Size
Definition: pci.h:361
#define ERR(fmt,...)
Definition: debug.h:110
BOOLEAN XboxDiskGetDriveGeometry(UCHAR DriveNumber, PGEOMETRY Geometry)
Definition: xboxdisk.c:103
ULONG BytesPerSector
Definition: disk.h:29
Definition: disk.h:24
unsigned int ULONG
Definition: retypes.h:1
#define memset(x, y, z)
Definition: compat.h:39
struct _CM_DISK_GEOMETRY_DEVICE_DATA CM_DISK_GEOMETRY_DEVICE_DATA
#define TAG_HW_RESOURCE_LIST
Definition: hardware.h:26
ULONG Heads
Definition: disk.h:27

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 
69  LpcExitConfig();
70 
71  return ComBase;
72 }
#define MAX_XBOX_COM_PORTS
Definition: machxbox.c:25
_In_ PIRP _In_ PDEVICE_OBJECT Device
Definition: fatprocs.h:2029
#define LPC_DEVICE_SERIAL_PORT_1
Definition: superio.h:23
#define LPC_DEVICE_SERIAL_PORT_2
Definition: superio.h:24
FORCEINLINE VOID LpcExitConfig(VOID)
Definition: superio.h:51
FORCEINLINE UCHAR LpcReadRegister(UCHAR Register)
Definition: superio.h:59
FORCEINLINE ULONG LpcGetIoBase()
Definition: superio.h:96
#define LPC_CONFIG_DEVICE_NUMBER
Definition: superio.h:30
static const UCHAR Index[8]
Definition: usbohci.c:18
FORCEINLINE VOID LpcWriteRegister(UCHAR Register, UCHAR Value)
Definition: superio.h:67
unsigned char UCHAR
Definition: xmlstorage.h:181
FORCEINLINE VOID LpcEnterConfig(VOID)
Definition: superio.h:43
#define LPC_CONFIG_DEVICE_ACTIVATE
Definition: superio.h:31
unsigned int ULONG
Definition: retypes.h:1
FORCEINLINE ULONG LpcGetIrqPrimary()
Definition: superio.h:126

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
BOOLEAN XboxFindPciBios(PPCI_REGISTRY_INFO BusData)
Definition: machxbox.c:31
FIND_PCI_BIOS FindPciBios
Definition: hwpci.c:26
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:156
#define TRACE(s)
Definition: solgame.cpp:4
VOID DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
Definition: hwpci.c:176
unsigned int ULONG
Definition: retypes.h:1
VOID NTAPI FldrCreateSystemKey(OUT PCONFIGURATION_COMPONENT_DATA *SystemNode)
Definition: archwsup.c:89
static VOID DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
Definition: machxbox.c:209
static PCM_PARTIAL_RESOURCE_LIST XboxGetHarddiskConfigurationData(UCHAR DriveNumber, ULONG *pSize)
Definition: machxbox.c:90

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 367 of file machxbox.c.

368 {
369  /* On Xbox, prepare video and disk support */
373 
374  /* Turn off debug messages to screen */
375  DebugDisableScreenPort();
376 }
#define FALSE
Definition: types.h:117
VOID __cdecl DiskStopFloppyMotor(VOID)
Definition: pc98hw.c:1244
VOID XboxVideoPrepareForReactOS(VOID)
Definition: xboxvideo.c:313
VOID XboxDiskInit(BOOLEAN Init)
Definition: xboxdisk.c:26

Referenced by MachInit().

Variable Documentation

◆ FrameBuffer

◆ FrameBufferSize

ULONG FrameBufferSize