ReactOS  0.4.14-dev-1331-g167fa2c
machxbox.c File Reference
#include <freeldr.h>
#include <debug.h>
Include dependency graph for machxbox.c:

Go to the source code of this file.

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 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)
 

Function Documentation

◆ DBG_DEFAULT_CHANNEL()

DBG_DEFAULT_CHANNEL ( HWDETECT  )

◆ DetectIsaBios()

static VOID DetectIsaBios ( PCONFIGURATION_COMPONENT_DATA  SystemKey,
ULONG BusNumber 
)
static

Definition at line 165 of file machxbox.c.

166 {
167  PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
169  ULONG Size;
170 
171  /* Set 'Configuration Data' value */
172  Size = sizeof(CM_PARTIAL_RESOURCE_LIST) -
174  PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
175  if (PartialResourceList == NULL)
176  {
177  TRACE("Failed to allocate resource descriptor\n");
178  return;
179  }
180 
181  /* Initialize resource descriptor */
182  memset(PartialResourceList, 0, Size);
183  PartialResourceList->Version = 1;
184  PartialResourceList->Revision = 1;
185  PartialResourceList->Count = 0;
186 
187  /* Create new bus key */
188  FldrCreateComponentKey(SystemKey,
189  AdapterClass,
190  MultiFunctionAdapter,
191  0x0,
192  0x0,
193  0xFFFFFFFF,
194  "ISA",
195  PartialResourceList,
196  Size,
197  &BusKey);
198 
199  /* Increment bus number */
200  (*BusNumber)++;
201 
202  /* Detect ISA/BIOS devices */
203  DetectBiosDisks(SystemKey, BusKey);
205 
206  /* FIXME: Detect more ISA devices */
207 }
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
GLint x0
Definition: linetemp.h:95
#define MAX_XBOX_COM_PORTS
Definition: machxbox.h:25
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:359
static ULONG XboxGetSerialPort(ULONG Index, PULONG Irq)
Definition: machxbox.c:43
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 = 7;
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
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@379::@381 Port
#define CmResourceTypeDeviceSpecific
Definition: hwresource.cpp:127
Definition: arc.h:82
char CHAR
Definition: xmlstorage.h:175
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@379::@382 Interrupt
struct _CM_SERIAL_DEVICE_DATA CM_SERIAL_DEVICE_DATA
_In_opt_ ULONG Base
Definition: rtlfuncs.h:2374
Definition: arc.h:84
_Inout_ __drv_aliasesMem PSLIST_ENTRY _Inout_ PSLIST_ENTRY _In_ ULONG Count
Definition: exfuncs.h:1015
static VOID DetectSerialPointerPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey, PUCHAR Base)
Definition: machpc.c:483
BOOLEAN Rs232PortInUse(PUCHAR Base)
Definition: rs232.c:136
#define CmResourceTypePort
Definition: hwresource.cpp:123
#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_PARTIAL_RESOURCE_DESCRIPTOR::@379::@388 DeviceSpecificData
struct _CM_SERIAL_DEVICE_DATA * PCM_SERIAL_DEVICE_DATA
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
Definition: hwresource.cpp:119
Definition: arc.h:85
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@379 u
IN PVOID IN PVOID IN USHORT IN USHORT Size
Definition: pci.h:359
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:109
#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 256 of file machxbox.c.

257 {
258  ULONG PciId;
259 
260  memset(&MachVtbl, 0, sizeof(MACHVTBL));
261 
262  /* Check for Xbox by identifying device at PCI 0:0:0, if it's
263  * 0x10DE/0x02A5 then we're running on an Xbox */
264  WRITE_PORT_ULONG((ULONG *)0xCF8, CONFIG_CMD(0, 0, 0));
265  PciId = READ_PORT_ULONG((ULONG *)0xCFC);
266  if (PciId != 0x02A510DE)
267  {
268  ERR("This is not original Xbox!\n");
269 
270  /* Disable and halt the CPU */
271  _disable();
272  __halt();
273 
274  while (TRUE);
275  }
276 
277  /* Set LEDs to red before anything is initialized */
278  XboxSetLED("rrrr");
279 
280  /* Initialize our stuff */
281  XboxMemInit();
282  XboxVideoInit();
283 
284  /* Setup vtbl */
301  MachVtbl.Beep = PcBeep;
313 
314  /* Set LEDs to orange after init */
315  XboxSetLED("oooo");
316 
318 }
BOOLEAN XboxConsKbHit(VOID)
Definition: xboxcons.c:59
PCONFIGURATION_COMPONENT_DATA XboxHwDetect(VOID)
Definition: machxbox.c:226
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:1595
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:211
VOID XboxVideoCopyOffScreenBufferToVRAM(PVOID Buffer)
Definition: xboxvideo.c:254
VOID XboxVideoClearScreen(UCHAR Attr)
Definition: xboxvideo.c:105
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:57
VOID XboxVideoSetTextCursorPosition(UCHAR X, UCHAR Y)
Definition: xboxvideo.c:242
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:66
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:230
TIMEINFO *(* GetTime)(VOID)
Definition: machine.h:72
VOID XboxVideoGetFontsFromFirmware(PULONG RomFontPointers)
Definition: xboxvideo.c:236
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:270
PFREELDR_MEMORY_DESCRIPTOR XboxMemGetMemoryMap(ULONG *MemoryMapSize)
Definition: xboxmem.c:156
VOID XboxVideoGetDisplaySize(PULONG Width, PULONG Height, PULONG Depth)
Definition: xboxvideo.c:222
VOID XboxPrepareForReactOS(VOID)
Definition: machxbox.c:321
VOID XboxHwIdle(VOID)
Definition: machxbox.c:247
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:288
VOID(* VideoPutChar)(int Ch, UCHAR Attr, unsigned X, unsigned Y)
Definition: machine.h:52
VOID XboxVideoInit(VOID)
Definition: xboxvideo.c:175
void XboxSetLED(PCSTR pattern)
Definition: xboxi2c.c:198
VOID XboxVideoPutChar(int Ch, UCHAR Attr, unsigned X, unsigned Y)
Definition: xboxvideo.c:115
VOID(* VideoSetPaletteColor)(UCHAR Color, UCHAR Red, UCHAR Green, UCHAR Blue)
Definition: machine.h:55
VOID XboxVideoHideShowTextCursor(BOOLEAN Show)
Definition: xboxvideo.c:248
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:109
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
#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:276
unsigned int ULONG
Definition: retypes.h:1
VOID XboxVideoGetPaletteColor(UCHAR Color, UCHAR *Red, UCHAR *Green, UCHAR *Blue)
Definition: xboxvideo.c:282
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:85
VIDEODISPLAYMODE XboxVideoSetDisplayMode(char *DisplayMode, BOOLEAN Init)
Definition: xboxvideo.c:215
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 26 of file machxbox.c.

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

86 {
87  TRACE("XboxGetExtendedBIOSData(): UNIMPLEMENTED\n");
90 }
#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 211 of file machxbox.c.

212 {
213  /* On a PC we use CMOS/RTC I/O ports 0x70 and 0x71 to detect floppies.
214  * However an Xbox CMOS memory range [0x10, 0x70) and [0x80, 0x100)
215  * is filled with 0x55 0xAA 0x55 0xAA ... byte pattern which is used
216  * to validate the date/time settings by Xbox OS.
217  *
218  * Technically it's possible to connect a floppy drive to Xbox, but
219  * CMOS detection method should not be used here. */
220 
221  WARN("XboxGetFloppyCount() is UNIMPLEMENTED, returning 0\n");
222  return 0;
223 }
#define WARN(fmt,...)
Definition: debug.h:111

Referenced by MachInit().

◆ XboxGetHarddiskConfigurationData()

static PCM_PARTIAL_RESOURCE_LIST XboxGetHarddiskConfigurationData ( UCHAR  DriveNumber,
ULONG pSize 
)
static

Definition at line 96 of file machxbox.c.

97 {
98  PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
99  PCM_DISK_GEOMETRY_DEVICE_DATA DiskGeometry;
100  //EXTENDED_GEOMETRY ExtGeometry;
101  GEOMETRY Geometry;
102  ULONG Size;
103 
104  //
105  // Initialize returned size
106  //
107  *pSize = 0;
108 
109  /* Set 'Configuration Data' value */
110  Size = sizeof(CM_PARTIAL_RESOURCE_LIST) +
112  PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
113  if (PartialResourceList == NULL)
114  {
115  ERR("Failed to allocate a full resource descriptor\n");
116  return NULL;
117  }
118 
119  memset(PartialResourceList, 0, Size);
120  PartialResourceList->Version = 1;
121  PartialResourceList->Revision = 1;
122  PartialResourceList->Count = 1;
123  PartialResourceList->PartialDescriptors[0].Type =
125 // PartialResourceList->PartialDescriptors[0].ShareDisposition =
126 // PartialResourceList->PartialDescriptors[0].Flags =
127  PartialResourceList->PartialDescriptors[0].u.DeviceSpecificData.DataSize =
129 
130  /* Get pointer to geometry data */
131  DiskGeometry = (PVOID)(((ULONG_PTR)PartialResourceList) + sizeof(CM_PARTIAL_RESOURCE_LIST));
132 
133  /* Get the disk geometry */
134  //ExtGeometry.Size = sizeof(EXTENDED_GEOMETRY);
135 
136  if (XboxDiskGetDriveGeometry(DriveNumber, &Geometry))
137  {
138  DiskGeometry->BytesPerSector = Geometry.BytesPerSector;
139  DiskGeometry->NumberOfCylinders = Geometry.Cylinders;
140  DiskGeometry->SectorsPerTrack = Geometry.Sectors;
141  DiskGeometry->NumberOfHeads = Geometry.Heads;
142  }
143  else
144  {
145  ERR("Reading disk geometry failed\n");
146  FrLdrHeapFree(PartialResourceList, TAG_HW_RESOURCE_LIST);
147  return NULL;
148  }
149  TRACE("Disk %x: %u Cylinders %u Heads %u Sectors %u Bytes\n",
150  DriveNumber,
151  DiskGeometry->NumberOfCylinders,
152  DiskGeometry->NumberOfHeads,
153  DiskGeometry->SectorsPerTrack,
154  DiskGeometry->BytesPerSector);
155 
156  //
157  // Return configuration data
158  //
159  *pSize = Size;
160  return PartialResourceList;
161 }
struct _CM_PARTIAL_RESOURCE_LIST CM_PARTIAL_RESOURCE_LIST
#define CmResourceTypeDeviceSpecific
Definition: hwresource.cpp:127
FORCEINLINE VOID FrLdrHeapFree(PVOID MemoryPointer, ULONG Tag)
Definition: mm.h:170
ULONG Cylinders
Definition: disk.h:26
uint32_t ULONG_PTR
Definition: typedefs.h:64
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
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@379::@388 DeviceSpecificData
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
Definition: hwresource.cpp:119
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@379 u
IN PVOID IN PVOID IN USHORT IN USHORT Size
Definition: pci.h:359
#define ERR(fmt,...)
Definition: debug.h:109
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 43 of file machxbox.c.

44 {
45  /*
46  * Xbox may have maximum two Serial COM ports
47  * if the Super I/O chip is connected via LPC
48  */
50  ULONG ComBase = 0;
51 
52  // Enter Configuration
54 
55  // Select serial device
58 
59  // Check if selected device is active
61  if (READ_PORT_UCHAR((PUCHAR)(LPC_IO_BASE + 1)) == 1)
62  {
63  // Read LSB
65  ComBase = READ_PORT_UCHAR((PUCHAR)(LPC_IO_BASE + 1));
66  // Read MSB
68  ComBase |= (READ_PORT_UCHAR((PUCHAR)(LPC_IO_BASE + 1)) << 8);
69  // Read IRQ
71  *Irq = READ_PORT_UCHAR((PUCHAR)(LPC_IO_BASE + 1));
72  }
73 
74  // Exit Configuration
76 
77  return ComBase;
78 }
_In_ PIRP _In_ PDEVICE_OBJECT Device
Definition: fatprocs.h:2020
#define LPC_CONFIG_DEVICE_BASE_ADDRESS_LOW
Definition: machxbox.h:37
unsigned char * PUCHAR
Definition: retypes.h:3
UCHAR NTAPI READ_PORT_UCHAR(PUCHAR Address)
Definition: mach.c:528
#define MAX_XBOX_COM_PORTS
Definition: machxbox.h:25
#define LPC_CONFIG_DEVICE_NUMBER
Definition: machxbox.h:34
#define LPC_IO_BASE
Definition: machxbox.h:27
#define LPC_ENTER_CONFIG_KEY
Definition: machxbox.h:28
static const UCHAR Index[8]
Definition: usbohci.c:18
#define LPC_CONFIG_DEVICE_ACTIVATE
Definition: machxbox.h:35
unsigned char UCHAR
Definition: xmlstorage.h:181
#define LPC_DEVICE_SERIAL_PORT_1
Definition: machxbox.h:31
#define LPC_EXIT_CONFIG_KEY
Definition: machxbox.h:29
#define LPC_DEVICE_SERIAL_PORT_2
Definition: machxbox.h:32
#define LPC_CONFIG_DEVICE_BASE_ADDRESS_HIGH
Definition: machxbox.h:36
unsigned int ULONG
Definition: retypes.h:1
void WRITE_PORT_UCHAR(PUCHAR Address, UCHAR Value)
Definition: mach.c:532
#define LPC_CONFIG_DEVICE_INTERRUPT
Definition: machxbox.h:38

Referenced by DetectIsaBios().

◆ XboxHwDetect()

PCONFIGURATION_COMPONENT_DATA XboxHwDetect ( VOID  )

Definition at line 226 of file machxbox.c.

227 {
229  ULONG BusNumber = 0;
230 
231  TRACE("DetectHardware()\n");
232 
233  /* Create the 'System' key */
234  FldrCreateSystemKey(&SystemKey);
235 
238 
239  /* TODO: Build actual xbox's hardware configuration tree */
240  DetectPciBios(SystemKey, &BusNumber);
241  DetectIsaBios(SystemKey, &BusNumber);
242 
243  TRACE("DetectHardware() Done\n");
244  return SystemKey;
245 }
BOOLEAN XboxFindPciBios(PPCI_REGISTRY_INFO BusData)
Definition: machxbox.c:26
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:165
static PCM_PARTIAL_RESOURCE_LIST XboxGetHarddiskConfigurationData(UCHAR DriveNumber, ULONG *pSize)
Definition: machxbox.c:96

Referenced by MachInit().

◆ XboxHwIdle()

VOID XboxHwIdle ( VOID  )

Definition at line 247 of file machxbox.c.

248 {
249  /* UNIMPLEMENTED */
250 }

Referenced by MachInit().

◆ XboxPrepareForReactOS()

VOID XboxPrepareForReactOS ( VOID  )

Definition at line 321 of file machxbox.c.

322 {
323  /* On Xbox, prepare video and disk support */
327 }
VOID __cdecl DiskStopFloppyMotor(VOID)
Definition: pc98hw.c:1244
VOID XboxVideoPrepareForReactOS(VOID)
Definition: xboxvideo.c:294
VOID XboxDiskInit(BOOLEAN Init)
Definition: xboxdisk.c:26

Referenced by MachInit().