ReactOS  0.4.14-dev-822-g065afd9
machpc.c File Reference
#include <freeldr.h>
#include <cportlib/cportlib.h>
#include <debug.h>
Include dependency graph for machpc.c:

Go to the source code of this file.

Macros

#define MAX_COM_PORTS   4
 
#define MAX_LPT_PORTS   3
 
#define MOUSE_TYPE_NONE   0
 
#define MOUSE_TYPE_MICROSOFT   1
 
#define MOUSE_TYPE_LOGITECH   2
 
#define MOUSE_TYPE_WHEELZ   3
 
#define MOUSE_TYPE_MOUSESYSTEMS   4
 
#define CONTROLLER_REGISTER_STATUS   0x64
 
#define CONTROLLER_REGISTER_CONTROL   0x64
 
#define CONTROLLER_REGISTER_DATA   0x60
 
#define CONTROLLER_COMMAND_READ_MODE   0x20
 
#define CONTROLLER_COMMAND_WRITE_MODE   0x60
 
#define CONTROLLER_COMMAND_GET_VERSION   0xA1
 
#define CONTROLLER_COMMAND_MOUSE_DISABLE   0xA7
 
#define CONTROLLER_COMMAND_MOUSE_ENABLE   0xA8
 
#define CONTROLLER_COMMAND_TEST_MOUSE   0xA9
 
#define CONTROLLER_COMMAND_SELF_TEST   0xAA
 
#define CONTROLLER_COMMAND_KEYBOARD_TEST   0xAB
 
#define CONTROLLER_COMMAND_KEYBOARD_DISABLE   0xAD
 
#define CONTROLLER_COMMAND_KEYBOARD_ENABLE   0xAE
 
#define CONTROLLER_COMMAND_WRITE_MOUSE_OUTPUT_BUFFER   0xD3
 
#define CONTROLLER_COMMAND_WRITE_MOUSE   0xD4
 
#define CONTROLLER_STATUS_OUTPUT_BUFFER_FULL   0x01
 
#define CONTROLLER_STATUS_INPUT_BUFFER_FULL   0x02
 
#define CONTROLLER_STATUS_SELF_TEST   0x04
 
#define CONTROLLER_STATUS_COMMAND   0x08
 
#define CONTROLLER_STATUS_UNLOCKED   0x10
 
#define CONTROLLER_STATUS_MOUSE_OUTPUT_BUFFER_FULL   0x20
 
#define CONTROLLER_STATUS_GENERAL_TIMEOUT   0x40
 
#define CONTROLLER_STATUS_PARITY_ERROR   0x80
 
#define AUX_STATUS_OUTPUT_BUFFER_FULL
 
#define CONTROLLER_TIMEOUT   250
 

Functions

 DBG_DEFAULT_CHANNEL (HWDETECT)
 
VOID PcGetExtendedBIOSData (PULONG ExtendedBIOSDataArea, PULONG ExtendedBIOSDataSize)
 
static PCM_PARTIAL_RESOURCE_LIST PcGetHarddiskConfigurationData (UCHAR DriveNumber, ULONG *pSize)
 
static VOID DetectPnpBios (PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
 
static VOID InitializeSerialPort (PUCHAR Port, UCHAR LineControl)
 
static ULONG DetectSerialMouse (PUCHAR Port)
 
static ULONG GetSerialMousePnpId (PUCHAR Port, char *Buffer)
 
static VOID DetectSerialPointerPeripheral (PCONFIGURATION_COMPONENT_DATA ControllerKey, PUCHAR Base)
 
ULONG PcGetSerialPort (ULONG Index, PULONG Irq)
 
VOID DetectSerialPorts (PCONFIGURATION_COMPONENT_DATA BusKey, GET_SERIAL_PORT MachGetSerialPort, ULONG Count)
 
static VOID DetectParallelPorts (PCONFIGURATION_COMPONENT_DATA BusKey)
 
BOOLEAN DetectKeyboardDevice (VOID)
 
static VOID DetectKeyboardPeripheral (PCONFIGURATION_COMPONENT_DATA ControllerKey)
 
static VOID DetectKeyboardController (PCONFIGURATION_COMPONENT_DATA BusKey)
 
static VOID PS2ControllerWait (VOID)
 
static BOOLEAN DetectPS2AuxPort (VOID)
 
static BOOLEAN DetectPS2AuxDevice (VOID)
 
static VOID DetectPS2Mouse (PCONFIGURATION_COMPONENT_DATA BusKey)
 
USHORT BiosIsVesaSupported (VOID)
 
BOOLEAN BiosIsVesaDdcSupported (VOID)
 
BOOLEAN BiosVesaReadEdid (VOID)
 
static VOID DetectDisplayController (PCONFIGURATION_COMPONENT_DATA BusKey)
 
static VOID DetectIsaBios (PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
 
static UCHAR PcGetFloppyCount (VOID)
 
PCONFIGURATION_COMPONENT_DATA PcHwDetect (VOID)
 
VOID PcHwIdle (VOID)
 
VOID PcMachInit (const char *CmdLine)
 
VOID PcPrepareForReactOS (VOID)
 

Macro Definition Documentation

◆ AUX_STATUS_OUTPUT_BUFFER_FULL

#define AUX_STATUS_OUTPUT_BUFFER_FULL
Value:
CONTROLLER_STATUS_MOUSE_OUTPUT_BUFFER_FULL)
#define CONTROLLER_STATUS_OUTPUT_BUFFER_FULL
Definition: machpc.c:64

Definition at line 72 of file machpc.c.

◆ CONTROLLER_COMMAND_GET_VERSION

#define CONTROLLER_COMMAND_GET_VERSION   0xA1

Definition at line 52 of file machpc.c.

◆ CONTROLLER_COMMAND_KEYBOARD_DISABLE

#define CONTROLLER_COMMAND_KEYBOARD_DISABLE   0xAD

Definition at line 58 of file machpc.c.

◆ CONTROLLER_COMMAND_KEYBOARD_ENABLE

#define CONTROLLER_COMMAND_KEYBOARD_ENABLE   0xAE

Definition at line 59 of file machpc.c.

◆ CONTROLLER_COMMAND_KEYBOARD_TEST

#define CONTROLLER_COMMAND_KEYBOARD_TEST   0xAB

Definition at line 57 of file machpc.c.

◆ CONTROLLER_COMMAND_MOUSE_DISABLE

#define CONTROLLER_COMMAND_MOUSE_DISABLE   0xA7

Definition at line 53 of file machpc.c.

◆ CONTROLLER_COMMAND_MOUSE_ENABLE

#define CONTROLLER_COMMAND_MOUSE_ENABLE   0xA8

Definition at line 54 of file machpc.c.

◆ CONTROLLER_COMMAND_READ_MODE

#define CONTROLLER_COMMAND_READ_MODE   0x20

Definition at line 50 of file machpc.c.

◆ CONTROLLER_COMMAND_SELF_TEST

#define CONTROLLER_COMMAND_SELF_TEST   0xAA

Definition at line 56 of file machpc.c.

◆ CONTROLLER_COMMAND_TEST_MOUSE

#define CONTROLLER_COMMAND_TEST_MOUSE   0xA9

Definition at line 55 of file machpc.c.

◆ CONTROLLER_COMMAND_WRITE_MODE

#define CONTROLLER_COMMAND_WRITE_MODE   0x60

Definition at line 51 of file machpc.c.

◆ CONTROLLER_COMMAND_WRITE_MOUSE

#define CONTROLLER_COMMAND_WRITE_MOUSE   0xD4

Definition at line 61 of file machpc.c.

◆ CONTROLLER_COMMAND_WRITE_MOUSE_OUTPUT_BUFFER

#define CONTROLLER_COMMAND_WRITE_MOUSE_OUTPUT_BUFFER   0xD3

Definition at line 60 of file machpc.c.

◆ CONTROLLER_REGISTER_CONTROL

#define CONTROLLER_REGISTER_CONTROL   0x64

Definition at line 46 of file machpc.c.

◆ CONTROLLER_REGISTER_DATA

#define CONTROLLER_REGISTER_DATA   0x60

Definition at line 47 of file machpc.c.

◆ CONTROLLER_REGISTER_STATUS

#define CONTROLLER_REGISTER_STATUS   0x64

Definition at line 45 of file machpc.c.

◆ CONTROLLER_STATUS_COMMAND

#define CONTROLLER_STATUS_COMMAND   0x08

Definition at line 67 of file machpc.c.

◆ CONTROLLER_STATUS_GENERAL_TIMEOUT

#define CONTROLLER_STATUS_GENERAL_TIMEOUT   0x40

Definition at line 70 of file machpc.c.

◆ CONTROLLER_STATUS_INPUT_BUFFER_FULL

#define CONTROLLER_STATUS_INPUT_BUFFER_FULL   0x02

Definition at line 65 of file machpc.c.

◆ CONTROLLER_STATUS_MOUSE_OUTPUT_BUFFER_FULL

#define CONTROLLER_STATUS_MOUSE_OUTPUT_BUFFER_FULL   0x20

Definition at line 69 of file machpc.c.

◆ CONTROLLER_STATUS_OUTPUT_BUFFER_FULL

#define CONTROLLER_STATUS_OUTPUT_BUFFER_FULL   0x01

Definition at line 64 of file machpc.c.

◆ CONTROLLER_STATUS_PARITY_ERROR

#define CONTROLLER_STATUS_PARITY_ERROR   0x80

Definition at line 71 of file machpc.c.

◆ CONTROLLER_STATUS_SELF_TEST

#define CONTROLLER_STATUS_SELF_TEST   0x04

Definition at line 66 of file machpc.c.

◆ CONTROLLER_STATUS_UNLOCKED

#define CONTROLLER_STATUS_UNLOCKED   0x10

Definition at line 68 of file machpc.c.

◆ CONTROLLER_TIMEOUT

#define CONTROLLER_TIMEOUT   250

Definition at line 76 of file machpc.c.

◆ MAX_COM_PORTS

#define MAX_COM_PORTS   4

Definition at line 27 of file machpc.c.

◆ MAX_LPT_PORTS

#define MAX_LPT_PORTS   3

Definition at line 28 of file machpc.c.

◆ MOUSE_TYPE_LOGITECH

#define MOUSE_TYPE_LOGITECH   2

Definition at line 35 of file machpc.c.

◆ MOUSE_TYPE_MICROSOFT

#define MOUSE_TYPE_MICROSOFT   1

Definition at line 33 of file machpc.c.

◆ MOUSE_TYPE_MOUSESYSTEMS

#define MOUSE_TYPE_MOUSESYSTEMS   4

Definition at line 39 of file machpc.c.

◆ MOUSE_TYPE_NONE

#define MOUSE_TYPE_NONE   0

Definition at line 31 of file machpc.c.

◆ MOUSE_TYPE_WHEELZ

#define MOUSE_TYPE_WHEELZ   3

Definition at line 37 of file machpc.c.

Function Documentation

◆ BiosIsVesaDdcSupported()

BOOLEAN BiosIsVesaDdcSupported ( VOID  )

Definition at line 242 of file i386vid.c.

243 {
244  REGS Regs;
245 
246  TRACE("BiosIsVesaDdcSupported()\n");
247 
248  Regs.w.ax = 0x4F15;
249  Regs.b.bl = 0;
250  Regs.w.cx = 0;
251  Regs.w.es = 0;
252  Regs.w.di = 0;
253  Int386(0x10, &Regs, &Regs);
254 
255  TRACE("AL = 0x%x\n", Regs.b.al);
256  TRACE("AH = 0x%x\n", Regs.b.ah);
257 
258  TRACE("BL = 0x%x\n", Regs.b.bl);
259 
260  if (Regs.w.ax != 0x004F)
261  {
262  WARN("VBE/DDC Installation check function not supported (AL=0x%x) or failed (AH=0x%x)\n",
263  Regs.b.al, Regs.b.ah);
264  return FALSE;
265  }
266 
267  return (Regs.b.ah == 0);
268 }
#define WARN(fmt,...)
Definition: debug.h:111
unsigned short cx
Definition: pcbios.h:107
unsigned short es
Definition: pcbios.h:115
unsigned char ah
Definition: pcbios.h:126
int __cdecl Int386(int ivec, REGS *in, REGS *out)
#define TRACE(s)
Definition: solgame.cpp:4
unsigned char bl
Definition: pcbios.h:128
BYTEREGS b
Definition: pcbios.h:157
unsigned char al
Definition: pcbios.h:125
unsigned short ax
Definition: pcbios.h:105
Definition: pcbios.h:152
unsigned short di
Definition: pcbios.h:111
WORDREGS w
Definition: pcbios.h:156

Referenced by DetectDisplayController().

◆ BiosIsVesaSupported()

USHORT BiosIsVesaSupported ( VOID  )

Definition at line 160 of file i386vid.c.

161 {
162  REGS Regs;
164  //USHORT* VideoModes;
165  //USHORT Index;
166 
167  TRACE("BiosIsVesaSupported()\n");
168 
169  RtlZeroMemory(SvgaInfo, sizeof(VESA_SVGA_INFO));
170 
171  // Make sure we receive version 2.0 info
172  SvgaInfo->Signature[0] = 'V';
173  SvgaInfo->Signature[1] = 'B';
174  SvgaInfo->Signature[2] = 'E';
175  SvgaInfo->Signature[3] = '2';
176 
177  // Int 10h AX=4F00h
178  // VESA SuperVGA BIOS (VBE) - GET SuperVGA INFORMATION
179  //
180  // AX = 4F00h
181  // ES:DI -> buffer for SuperVGA information (see #00077)
182  // Return:
183  // AL = 4Fh if function supported
184  // AH = status
185  // 00h successful
186  // ES:DI buffer filled
187  // 01h failed
188  // ---VBE v2.0---
189  // 02h function not supported by current hardware configuration
190  // 03h function invalid in current video mode
191  //
192  // Determine whether VESA BIOS extensions are present and the
193  // capabilities supported by the display adapter
194  //
195  // Installation check;VESA SuperVGA
196  Regs.w.ax = 0x4F00;
197  Regs.w.es = BIOSCALLBUFSEGMENT;
198  Regs.w.di = BIOSCALLBUFOFFSET;
199  Int386(0x10, &Regs, &Regs);
200 
201  TRACE("AL = 0x%x\n", Regs.b.al);
202  TRACE("AH = 0x%x\n", Regs.b.ah);
203 
204  if (Regs.w.ax != 0x004F)
205  {
206  WARN("VBE Get SuperVGA information function not supported (AL=0x%x) or failed (AH=0x%x)\n",
207  Regs.b.al, Regs.b.ah);
208  return 0x0000;
209  }
210 
211  TRACE("Supported.\n");
212  TRACE("SvgaInfo->Signature[4] = %c%c%c%c\n", SvgaInfo->Signature[0], SvgaInfo->Signature[1], SvgaInfo->Signature[2], SvgaInfo->Signature[3]);
213  TRACE("SvgaInfo->VesaVersion = v%d.%d\n", ((SvgaInfo->VesaVersion >> 8) & 0xFF), (SvgaInfo->VesaVersion & 0xFF));
214  TRACE("SvgaInfo->OemNamePtr = 0x%x\n", SvgaInfo->OemNamePtr);
215  TRACE("SvgaInfo->Capabilities = 0x%x\n", SvgaInfo->Capabilities);
216  TRACE("SvgaInfo->VideoMemory = %dK\n", SvgaInfo->TotalVideoMemory * 64);
217  TRACE("---VBE v2.0 ---\n");
218  TRACE("SvgaInfo->OemSoftwareVersion = v%d.%d\n", ((SvgaInfo->OemSoftwareVersion >> 8) & 0x0F) + (((SvgaInfo->OemSoftwareVersion >> 12) & 0x0F) * 10), (SvgaInfo->OemSoftwareVersion & 0x0F) + (((SvgaInfo->OemSoftwareVersion >> 4) & 0x0F) * 10));
219  TRACE("SvgaInfo->VendorNamePtr = 0x%x\n", SvgaInfo->VendorNamePtr);
220  TRACE("SvgaInfo->ProductNamePtr = 0x%x\n", SvgaInfo->ProductNamePtr);
221  TRACE("SvgaInfo->ProductRevisionStringPtr = 0x%x\n", SvgaInfo->ProductRevisionStringPtr);
222  TRACE("SvgaInfo->VBE/AF Version = 0x%x (BCD WORD)\n", SvgaInfo->VBE_AF_Version);
223 
224  if (SvgaInfo->Signature[0] != 'V' ||
225  SvgaInfo->Signature[1] != 'E' ||
226  SvgaInfo->Signature[2] != 'S' ||
227  SvgaInfo->Signature[3] != 'A')
228  {
229  ERR("Bad signature in VESA information (%c%c%c%c)\n",
230  SvgaInfo->Signature[0],
231  SvgaInfo->Signature[1],
232  SvgaInfo->Signature[2],
233  SvgaInfo->Signature[3]);
234  return 0x0000;
235  }
236 
237  return SvgaInfo->VesaVersion;
238 }
USHORT VBE_AF_Version
Definition: i386vid.c:47
#define BIOSCALLBUFFER
Definition: x86common.h:12
#define WARN(fmt,...)
Definition: debug.h:111
ULONG ProductRevisionStringPtr
Definition: i386vid.c:46
unsigned short es
Definition: pcbios.h:115
unsigned char ah
Definition: pcbios.h:126
struct VESA_SVGA_INFO * PVESA_SVGA_INFO
int __cdecl Int386(int ivec, REGS *in, REGS *out)
ULONG OemNamePtr
Definition: i386vid.c:32
#define BIOSCALLBUFSEGMENT
Definition: x86common.h:21
UCHAR Signature[4]
Definition: i386vid.c:28
ULONG Capabilities
Definition: i386vid.c:34
#define TRACE(s)
Definition: solgame.cpp:4
ULONG ProductNamePtr
Definition: i386vid.c:45
#define BIOSCALLBUFOFFSET
Definition: x86common.h:22
BYTEREGS b
Definition: pcbios.h:157
unsigned char al
Definition: pcbios.h:125
#define ERR(fmt,...)
Definition: debug.h:109
unsigned short ax
Definition: pcbios.h:105
USHORT VesaVersion
Definition: i386vid.c:31
Definition: pcbios.h:152
USHORT OemSoftwareVersion
Definition: i386vid.c:43
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:261
USHORT TotalVideoMemory
Definition: i386vid.c:37
ULONG VendorNamePtr
Definition: i386vid.c:44
unsigned short di
Definition: pcbios.h:111
WORDREGS w
Definition: pcbios.h:156

Referenced by DetectDisplayController().

◆ BiosVesaReadEdid()

BOOLEAN BiosVesaReadEdid ( VOID  )

Definition at line 272 of file i386vid.c.

273 {
274  REGS Regs;
275 
276  TRACE("BiosVesaReadEdid()\n");
277 
279 
280  Regs.w.ax = 0x4F15;
281  Regs.b.bl = 1;
282  Regs.w.cx = 0;
283  Regs.w.dx = 0;
284  Regs.w.es = BIOSCALLBUFSEGMENT;
285  Regs.w.di = BIOSCALLBUFOFFSET;
286  Int386(0x10, &Regs, &Regs);
287 
288  TRACE("AL = 0x%x\n", Regs.b.al);
289  TRACE("AH = 0x%x\n", Regs.b.ah);
290 
291  if (Regs.w.ax != 0x004F)
292  {
293  WARN("VBE/DDC Read EDID function not supported (AL=0x%x) or failed (AH=0x%x)\n",
294  Regs.b.al, Regs.b.ah);
295  return FALSE;
296  }
297 
298  return (Regs.b.ah == 0);
299 }
unsigned short dx
Definition: pcbios.h:108
#define BIOSCALLBUFFER
Definition: x86common.h:12
#define WARN(fmt,...)
Definition: debug.h:111
unsigned short cx
Definition: pcbios.h:107
unsigned short es
Definition: pcbios.h:115
unsigned char ah
Definition: pcbios.h:126
int __cdecl Int386(int ivec, REGS *in, REGS *out)
#define BIOSCALLBUFSEGMENT
Definition: x86common.h:21
#define TRACE(s)
Definition: solgame.cpp:4
unsigned char bl
Definition: pcbios.h:128
#define BIOSCALLBUFOFFSET
Definition: x86common.h:22
BYTEREGS b
Definition: pcbios.h:157
unsigned char al
Definition: pcbios.h:125
unsigned short ax
Definition: pcbios.h:105
Definition: pcbios.h:152
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:261
unsigned short di
Definition: pcbios.h:111
WORDREGS w
Definition: pcbios.h:156

Referenced by DetectDisplayController().

◆ DBG_DEFAULT_CHANNEL()

DBG_DEFAULT_CHANNEL ( HWDETECT  )

◆ DetectDisplayController()

static VOID DetectDisplayController ( PCONFIGURATION_COMPONENT_DATA  BusKey)
static

Definition at line 1235 of file machpc.c.

1236 {
1237  CHAR Buffer[80];
1238  PCONFIGURATION_COMPONENT_DATA ControllerKey;
1239  USHORT VesaVersion;
1240 
1241  /* FIXME: Set 'ComponentInformation' value */
1242 
1243  VesaVersion = BiosIsVesaSupported();
1244  if (VesaVersion != 0)
1245  {
1246  TRACE("VESA version %c.%c\n",
1247  (VesaVersion >> 8) + '0',
1248  (VesaVersion & 0xFF) + '0');
1249  }
1250  else
1251  {
1252  TRACE("VESA not supported\n");
1253  }
1254 
1255  if (VesaVersion >= 0x0200)
1256  {
1257  strcpy(Buffer, "VBE Display");
1258  }
1259  else
1260  {
1261  strcpy(Buffer, "VGA Display");
1262  }
1263 
1264  FldrCreateComponentKey(BusKey,
1266  DisplayController,
1267  0x0,
1268  0x0,
1269  0xFFFFFFFF,
1270  Buffer,
1271  NULL,
1272  0,
1273  &ControllerKey);
1274  TRACE("Created key: DisplayController\\0\n");
1275 
1276  /* FIXME: Add display peripheral (monitor) data */
1277  if (VesaVersion != 0)
1278  {
1279  if (BiosIsVesaDdcSupported())
1280  {
1281  TRACE("VESA/DDC supported!\n");
1282  if (BiosVesaReadEdid())
1283  {
1284  TRACE("EDID data read successfully!\n");
1285 
1286  }
1287  }
1288  }
1289 }
GLint x0
Definition: linetemp.h:95
char CHAR
Definition: xmlstorage.h:175
BOOLEAN BiosIsVesaDdcSupported(VOID)
Definition: i386vid.c:242
smooth NULL
Definition: ftsmooth.c:416
Definition: bufpool.h:45
BOOLEAN BiosVesaReadEdid(VOID)
Definition: i386vid.c:272
#define TRACE(s)
Definition: solgame.cpp:4
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 short USHORT
Definition: pedump.c:61
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
USHORT BiosIsVesaSupported(VOID)
Definition: i386vid.c:160

Referenced by DetectIsaBios().

◆ DetectIsaBios()

static VOID DetectIsaBios ( PCONFIGURATION_COMPONENT_DATA  SystemKey,
ULONG BusNumber 
)
static

Definition at line 1293 of file machpc.c.

1294 {
1295  PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
1297  ULONG Size;
1298 
1299  /* Set 'Configuration Data' value */
1300  Size = sizeof(CM_PARTIAL_RESOURCE_LIST) -
1302  PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
1303  if (PartialResourceList == NULL)
1304  {
1305  ERR("Failed to allocate resource descriptor\n");
1306  return;
1307  }
1308 
1309  /* Initialize resource descriptor */
1310  memset(PartialResourceList, 0, Size);
1311  PartialResourceList->Version = 1;
1312  PartialResourceList->Revision = 1;
1313  PartialResourceList->Count = 0;
1314 
1315  /* Create new bus key */
1316  FldrCreateComponentKey(SystemKey,
1317  AdapterClass,
1318  MultiFunctionAdapter,
1319  0x0,
1320  0x0,
1321  0xFFFFFFFF,
1322  "ISA",
1323  PartialResourceList,
1324  Size,
1325  &BusKey);
1326 
1327  /* Increment bus number */
1328  (*BusNumber)++;
1329 
1330  /* Detect ISA/BIOS devices */
1331  DetectBiosDisks(SystemKey, BusKey);
1333  DetectParallelPorts(BusKey);
1334  DetectKeyboardController(BusKey);
1335  DetectPS2Mouse(BusKey);
1336  DetectDisplayController(BusKey);
1337 
1338  /* FIXME: Detect more ISA devices */
1339 }
struct _CM_PARTIAL_RESOURCE_LIST CM_PARTIAL_RESOURCE_LIST
GLint x0
Definition: linetemp.h:95
VOID DetectSerialPorts(PCONFIGURATION_COMPONENT_DATA BusKey, GET_SERIAL_PORT MachGetSerialPort, ULONG Count)
Definition: machpc.c:659
static VOID DetectKeyboardController(PCONFIGURATION_COMPONENT_DATA BusKey)
Definition: machpc.c:971
smooth NULL
Definition: ftsmooth.c:416
static VOID DetectParallelPorts(PCONFIGURATION_COMPONENT_DATA BusKey)
Definition: machpc.c:754
FORCEINLINE PVOID FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag)
Definition: mm.h:163
VOID DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey, PCONFIGURATION_COMPONENT_DATA BusKey)
Definition: hardware.c:344
static VOID DetectPS2Mouse(PCONFIGURATION_COMPONENT_DATA BusKey)
Definition: machpc.c:1149
#define MAX_COM_PORTS
Definition: machpc.c:27
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
ULONG PcGetSerialPort(ULONG Index, PULONG Irq)
Definition: machpc.c:642
static VOID DetectDisplayController(PCONFIGURATION_COMPONENT_DATA BusKey)
Definition: machpc.c:1235
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 PcHwDetect().

◆ DetectKeyboardController()

static VOID DetectKeyboardController ( PCONFIGURATION_COMPONENT_DATA  BusKey)
static

Definition at line 971 of file machpc.c.

972 {
973  PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
974  PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
975  PCONFIGURATION_COMPONENT_DATA ControllerKey;
976  ULONG Size;
977 
978  /* Set 'Configuration Data' value */
979  Size = sizeof(CM_PARTIAL_RESOURCE_LIST) +
980  2 * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR);
981  PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
982  if (PartialResourceList == NULL)
983  {
984  ERR("Failed to allocate resource descriptor\n");
985  return;
986  }
987 
988  /* Initialize resource descriptor */
989  memset(PartialResourceList, 0, Size);
990  PartialResourceList->Version = 1;
991  PartialResourceList->Revision = 1;
992  PartialResourceList->Count = 3;
993 
994  /* Set Interrupt */
995  PartialDescriptor = &PartialResourceList->PartialDescriptors[0];
996  PartialDescriptor->Type = CmResourceTypeInterrupt;
997  PartialDescriptor->ShareDisposition = CmResourceShareUndetermined;
998  PartialDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED;
999  PartialDescriptor->u.Interrupt.Level = 1;
1000  PartialDescriptor->u.Interrupt.Vector = 1;
1001  PartialDescriptor->u.Interrupt.Affinity = 0xFFFFFFFF;
1002 
1003  /* Set IO Port 0x60 */
1004  PartialDescriptor = &PartialResourceList->PartialDescriptors[1];
1005  PartialDescriptor->Type = CmResourceTypePort;
1006  PartialDescriptor->ShareDisposition = CmResourceShareDeviceExclusive;
1007  PartialDescriptor->Flags = CM_RESOURCE_PORT_IO;
1008  PartialDescriptor->u.Port.Start.LowPart = 0x60;
1009  PartialDescriptor->u.Port.Start.HighPart = 0x0;
1010  PartialDescriptor->u.Port.Length = 1;
1011 
1012  /* Set IO Port 0x64 */
1013  PartialDescriptor = &PartialResourceList->PartialDescriptors[2];
1014  PartialDescriptor->Type = CmResourceTypePort;
1015  PartialDescriptor->ShareDisposition = CmResourceShareDeviceExclusive;
1016  PartialDescriptor->Flags = CM_RESOURCE_PORT_IO;
1017  PartialDescriptor->u.Port.Start.LowPart = 0x64;
1018  PartialDescriptor->u.Port.Start.HighPart = 0x0;
1019  PartialDescriptor->u.Port.Length = 1;
1020 
1021  /* Create controller key */
1022  FldrCreateComponentKey(BusKey,
1024  KeyboardController,
1025  Input | ConsoleIn,
1026  0x0,
1027  0xFFFFFFFF,
1028  NULL,
1029  PartialResourceList,
1030  Size,
1031  &ControllerKey);
1032  TRACE("Created key: KeyboardController\\0\n");
1033 
1034  DetectKeyboardPeripheral(ControllerKey);
1035 }
struct _CM_PARTIAL_RESOURCE_LIST CM_PARTIAL_RESOURCE_LIST
GLint x0
Definition: linetemp.h:95
Definition: arc.h:82
Definition: arc.h:84
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378 u
#define CmResourceTypePort
Definition: hwresource.cpp:123
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378::@380 Port
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
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
Definition: hwresource.cpp:119
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
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378::@381 Interrupt
#define CM_RESOURCE_PORT_IO
Definition: cmtypes.h:109
#define CmResourceTypeInterrupt
Definition: hwresource.cpp:124
#define CM_RESOURCE_INTERRUPT_LATCHED
Definition: cmtypes.h:144
static VOID DetectKeyboardPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey)
Definition: machpc.c:915
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().

◆ DetectKeyboardDevice()

BOOLEAN DetectKeyboardDevice ( VOID  )

Definition at line 846 of file machpc.c.

847 {
848  UCHAR Status;
849  UCHAR Scancode;
850  ULONG Loops;
851  BOOLEAN Result = TRUE;
852 
853  /* Identify device */
855 
856  /* Wait for reply */
857  for (Loops = 0; Loops < 100; Loops++)
858  {
862  break;
863  }
864 
866  {
867  /* PC/XT keyboard or no keyboard */
868  Result = FALSE;
869  }
870 
872  if (Scancode != 0xFA)
873  {
874  /* No ACK received */
875  Result = FALSE;
876  }
877 
879 
882  {
883  /* Found AT keyboard */
884  return Result;
885  }
886 
888  if (Scancode != 0xAB)
889  {
890  /* No 0xAB received */
891  Result = FALSE;
892  }
893 
895 
898  {
899  /* No byte in buffer */
900  Result = FALSE;
901  }
902 
904  if (Scancode != 0x41)
905  {
906  /* No 0x41 received */
907  Result = FALSE;
908  }
909 
910  /* Found MF-II keyboard */
911  return Result;
912 }
#define TRUE
Definition: types.h:120
unsigned char * PUCHAR
Definition: retypes.h:3
UCHAR NTAPI READ_PORT_UCHAR(PUCHAR Address)
Definition: mach.c:528
#define CONTROLLER_STATUS_OUTPUT_BUFFER_FULL
Definition: machpc.c:64
VOID StallExecutionProcessor(ULONG Microseconds)
Definition: hardware.c:60
unsigned char BOOLEAN
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:426
#define CONTROLLER_REGISTER_DATA
Definition: machpc.c:47
unsigned char UCHAR
Definition: xmlstorage.h:181
Status
Definition: gdiplustypes.h:24
unsigned int ULONG
Definition: retypes.h:1
void WRITE_PORT_UCHAR(PUCHAR Address, UCHAR Value)
Definition: mach.c:532
#define CONTROLLER_REGISTER_STATUS
Definition: machpc.c:45

◆ DetectKeyboardPeripheral()

static VOID DetectKeyboardPeripheral ( PCONFIGURATION_COMPONENT_DATA  ControllerKey)
static

Definition at line 915 of file machpc.c.

916 {
917  PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
918  PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
919  PCM_KEYBOARD_DEVICE_DATA KeyboardData;
920  PCONFIGURATION_COMPONENT_DATA PeripheralKey;
921  ULONG Size;
922 
923  /* HACK: don't call DetectKeyboardDevice() as it fails in Qemu 0.8.2
924  if (DetectKeyboardDevice()) */
925  {
926  /* Set 'Configuration Data' value */
927  Size = sizeof(CM_PARTIAL_RESOURCE_LIST) +
928  sizeof(CM_KEYBOARD_DEVICE_DATA);
929  PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
930  if (PartialResourceList == NULL)
931  {
932  ERR("Failed to allocate resource descriptor\n");
933  return;
934  }
935 
936  /* Initialize resource descriptor */
937  memset(PartialResourceList, 0, Size);
938  PartialResourceList->Version = 1;
939  PartialResourceList->Revision = 1;
940  PartialResourceList->Count = 1;
941 
942  PartialDescriptor = &PartialResourceList->PartialDescriptors[0];
943  PartialDescriptor->Type = CmResourceTypeDeviceSpecific;
944  PartialDescriptor->ShareDisposition = CmResourceShareUndetermined;
945  PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(CM_KEYBOARD_DEVICE_DATA);
946 
947  KeyboardData = (PCM_KEYBOARD_DEVICE_DATA)(PartialDescriptor + 1);
948  KeyboardData->Version = 1;
949  KeyboardData->Revision = 1;
950  KeyboardData->Type = 4;
951  KeyboardData->Subtype = 0;
952  KeyboardData->KeyboardFlags = 0x20;
953 
954  /* Create controller key */
955  FldrCreateComponentKey(ControllerKey,
957  KeyboardPeripheral,
958  Input | ConsoleIn,
959  0x0,
960  0xFFFFFFFF,
961  "PCAT_ENHANCED",
962  PartialResourceList,
963  Size,
964  &PeripheralKey);
965  TRACE("Created key: KeyboardPeripheral\\0\n");
966  }
967 }
struct _CM_PARTIAL_RESOURCE_LIST CM_PARTIAL_RESOURCE_LIST
#define CmResourceTypeDeviceSpecific
Definition: hwresource.cpp:127
GLint x0
Definition: linetemp.h:95
Definition: arc.h:82
Definition: arc.h:84
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378::@387 DeviceSpecificData
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378 u
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
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
Definition: hwresource.cpp:119
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
struct _CM_KEYBOARD_DEVICE_DATA CM_KEYBOARD_DEVICE_DATA
unsigned int ULONG
Definition: retypes.h:1
struct _CM_KEYBOARD_DEVICE_DATA * PCM_KEYBOARD_DEVICE_DATA
#define memset(x, y, z)
Definition: compat.h:39
#define TAG_HW_RESOURCE_LIST
Definition: hardware.h:26

Referenced by DetectKeyboardController().

◆ DetectParallelPorts()

static VOID DetectParallelPorts ( PCONFIGURATION_COMPONENT_DATA  BusKey)
static

Definition at line 754 of file machpc.c.

755 {
756  PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
757  PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
758  ULONG Irq[MAX_LPT_PORTS] = {7, 5, (ULONG) - 1};
759  CHAR Buffer[80];
760  PCONFIGURATION_COMPONENT_DATA ControllerKey;
761  PUSHORT BasePtr;
762  ULONG Base;
763  ULONG ControllerNumber = 0;
764  ULONG i;
765  ULONG Size;
766 
767  TRACE("DetectParallelPorts() called\n");
768 
769  /*
770  * The BIOS data area 0x408 holds the address of the first valid LPT port.
771  * Each LPT port address is stored in a 2-byte field.
772  * Infos at: http://www.bioscentral.com/misc/bda.htm
773  */
774  BasePtr = (PUSHORT)0x408;
775 
776  for (i = 0; i < MAX_LPT_PORTS; i++, BasePtr++)
777  {
778  Base = (ULONG) * BasePtr;
779  if (Base == 0)
780  continue;
781 
782  TRACE("Parallel port %u: %x\n", ControllerNumber, Base);
783 
784  /* Set 'Identifier' value */
785  sprintf(Buffer, "PARALLEL%ld", i + 1);
786 
787  /* Build full device descriptor */
788  Size = sizeof(CM_PARTIAL_RESOURCE_LIST);
789  if (Irq[i] != (ULONG) - 1)
791 
792  PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
793  if (PartialResourceList == NULL)
794  {
795  ERR("Failed to allocate resource descriptor\n");
796  continue;
797  }
798  memset(PartialResourceList, 0, Size);
799 
800  /* Initialize resource descriptor */
801  PartialResourceList->Version = 1;
802  PartialResourceList->Revision = 1;
803  PartialResourceList->Count = (Irq[i] != (ULONG) - 1) ? 2 : 1;
804 
805  /* Set IO Port */
806  PartialDescriptor = &PartialResourceList->PartialDescriptors[0];
807  PartialDescriptor->Type = CmResourceTypePort;
809  PartialDescriptor->Flags = CM_RESOURCE_PORT_IO;
810  PartialDescriptor->u.Port.Start.LowPart = Base;
811  PartialDescriptor->u.Port.Start.HighPart = 0x0;
812  PartialDescriptor->u.Port.Length = 3;
813 
814  /* Set Interrupt */
815  if (Irq[i] != (ULONG) - 1)
816  {
817  PartialDescriptor = &PartialResourceList->PartialDescriptors[1];
818  PartialDescriptor->Type = CmResourceTypeInterrupt;
819  PartialDescriptor->ShareDisposition = CmResourceShareUndetermined;
820  PartialDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED;
821  PartialDescriptor->u.Interrupt.Level = Irq[i];
822  PartialDescriptor->u.Interrupt.Vector = Irq[i];
823  PartialDescriptor->u.Interrupt.Affinity = 0xFFFFFFFF;
824  }
825 
826  /* Create controller key */
827  FldrCreateComponentKey(BusKey,
829  ParallelController,
830  Output,
831  ControllerNumber,
832  0xFFFFFFFF,
833  Buffer,
834  PartialResourceList,
835  Size,
836  &ControllerKey);
837 
838  ControllerNumber++;
839  }
840 
841  TRACE("DetectParallelPorts() done\n");
842 }
struct _CM_PARTIAL_RESOURCE_LIST CM_PARTIAL_RESOURCE_LIST
#define MAX_LPT_PORTS
Definition: machpc.c:28
char CHAR
Definition: xmlstorage.h:175
_In_opt_ ULONG Base
Definition: rtlfuncs.h:2374
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378 u
#define CmResourceTypePort
Definition: hwresource.cpp:123
#define sprintf(buf, format,...)
Definition: sprintf.c:55
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
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378::@380 Port
smooth NULL
Definition: ftsmooth.c:416
Definition: bufpool.h:45
FORCEINLINE PVOID FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag)
Definition: mm.h:163
#define TRACE(s)
Definition: solgame.cpp:4
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: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
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378::@381 Interrupt
#define CM_RESOURCE_PORT_IO
Definition: cmtypes.h:109
#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
unsigned short * PUSHORT
Definition: retypes.h:2
#define TAG_HW_RESOURCE_LIST
Definition: hardware.h:26

Referenced by DetectIsaBios().

◆ DetectPnpBios()

static VOID DetectPnpBios ( PCONFIGURATION_COMPONENT_DATA  SystemKey,
ULONG BusNumber 
)
static

Definition at line 182 of file machpc.c.

183 {
184  PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
188  ULONG x;
189  ULONG NodeSize = 0;
190  ULONG NodeCount = 0;
192  ULONG FoundNodeCount;
193  int i;
194  ULONG PnpBufferSize;
195  ULONG PnpBufferSizeLimit;
196  ULONG Size;
197  char *Ptr;
198 
200  if (InstData == NULL || strncmp((CHAR*)InstData->Signature, "$PnP", 4))
201  {
202  TRACE("PnP-BIOS not supported\n");
203  return;
204  }
205 
206  TRACE("PnP-BIOS supported\n");
207  TRACE("Signature '%c%c%c%c'\n",
208  InstData->Signature[0], InstData->Signature[1],
209  InstData->Signature[2], InstData->Signature[3]);
210 
211  x = PnpBiosGetDeviceNodeCount(&NodeSize, &NodeCount);
212  if (x == 0x82)
213  {
214  TRACE("PnP-BIOS function 'Get Number of System Device Nodes' not supported\n");
215  return;
216  }
217 
218  NodeCount &= 0xFF; // needed since some fscked up BIOSes return
219  // wrong info (e.g. Mac Virtual PC)
220  // e.g. look: http://my.execpc.com/~geezer/osd/pnp/pnp16.c
221  if (x != 0 || NodeSize == 0 || NodeCount == 0)
222  {
223  ERR("PnP-BIOS failed to enumerate device nodes\n");
224  return;
225  }
226  TRACE("MaxNodeSize %u NodeCount %u\n", NodeSize, NodeCount);
227  TRACE("Estimated buffer size %u\n", NodeSize * NodeCount);
228 
229  /* Set 'Configuration Data' value */
230  PnpBufferSizeLimit = sizeof(CM_PNP_BIOS_INSTALLATION_CHECK)
231  + (NodeSize * NodeCount);
232  Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + PnpBufferSizeLimit;
233  PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
234  if (PartialResourceList == NULL)
235  {
236  ERR("Failed to allocate resource descriptor\n");
237  return;
238  }
239  memset(PartialResourceList, 0, Size);
240 
241  /* Initialize resource descriptor */
242  PartialResourceList->Version = 1;
243  PartialResourceList->Revision = 1;
244  PartialResourceList->Count = 1;
245  PartialResourceList->PartialDescriptors[0].Type =
247  PartialResourceList->PartialDescriptors[0].ShareDisposition =
249 
250  /* The buffer starts after PartialResourceList->PartialDescriptors[0] */
251  Ptr = (char *)(PartialResourceList + 1);
252 
253  /* Set installation check data */
254  memcpy (Ptr, InstData, sizeof(CM_PNP_BIOS_INSTALLATION_CHECK));
256  PnpBufferSize = sizeof(CM_PNP_BIOS_INSTALLATION_CHECK);
257 
258  /* Copy device nodes */
259  FoundNodeCount = 0;
260  for (i = 0; i < 0xFF; i++)
261  {
262  NodeNumber = (UCHAR)i;
263 
265  if (x == 0)
266  {
268 
269  TRACE("Node: %u Size %u (0x%x)\n",
270  DeviceNode->Node,
271  DeviceNode->Size,
272  DeviceNode->Size);
273 
274  if (PnpBufferSize + DeviceNode->Size > PnpBufferSizeLimit)
275  {
276  ERR("Buffer too small! Ignoring remaining device nodes.\n");
277  break;
278  }
279 
280  memcpy(Ptr, DeviceNode, DeviceNode->Size);
281 
282  Ptr += DeviceNode->Size;
283  PnpBufferSize += DeviceNode->Size;
284 
285  FoundNodeCount++;
286  if (FoundNodeCount >= NodeCount)
287  break;
288  }
289  }
290 
291  /* Set real data size */
292  PartialResourceList->PartialDescriptors[0].u.DeviceSpecificData.DataSize =
293  PnpBufferSize;
294  Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + PnpBufferSize;
295 
296  TRACE("Real buffer size: %u\n", PnpBufferSize);
297  TRACE("Resource size: %u\n", Size);
298 
299  /* Create component key */
300  FldrCreateComponentKey(SystemKey,
301  AdapterClass,
302  MultiFunctionAdapter,
303  0x0,
304  0x0,
305  0xFFFFFFFF,
306  "PNP BIOS",
307  PartialResourceList,
308  Size,
309  &BusKey);
310 
311  (*BusNumber)++;
312 }
struct _CM_PARTIAL_RESOURCE_LIST CM_PARTIAL_RESOURCE_LIST
#define CmResourceTypeDeviceSpecific
Definition: hwresource.cpp:127
GLint x0
Definition: linetemp.h:95
#define DiskReadBuffer
Definition: hardware.h:33
struct _CM_PNP_BIOS_INSTALLATION_CHECK * PCM_PNP_BIOS_INSTALLATION_CHECK
char CHAR
Definition: xmlstorage.h:175
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
Definition: fsrtlfuncs.h:898
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378::@387 DeviceSpecificData
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
struct _CM_PNP_BIOS_DEVICE_NODE * PCM_PNP_BIOS_DEVICE_NODE
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378 u
_Out_ PUSHORT NodeNumber
Definition: iofuncs.h:2567
ULONG __cdecl PnpBiosGetDeviceNode(UCHAR *NodeId, UCHAR *NodeBuffer)
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
ULONG __cdecl PnpBiosGetDeviceNodeCount(ULONG *NodeSize, ULONG *NodeCount)
struct _CM_PNP_BIOS_INSTALLATION_CHECK CM_PNP_BIOS_INSTALLATION_CHECK
FORCEINLINE PVOID FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag)
Definition: mm.h:163
#define TRACE(s)
Definition: solgame.cpp:4
int strncmp(const char *String1, const char *String2, ACPI_SIZE Count)
Definition: utclib.c:534
Definition: Node.h:9
unsigned char UCHAR
Definition: xmlstorage.h:181
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
Definition: hwresource.cpp:119
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
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
ULONG_PTR __cdecl PnpBiosSupported(VOID)
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 PcHwDetect().

◆ DetectPS2AuxDevice()

static BOOLEAN DetectPS2AuxDevice ( VOID  )
static

Definition at line 1100 of file machpc.c.

1101 {
1102  UCHAR Scancode;
1103  UCHAR Status;
1104  ULONG Loops;
1105  BOOLEAN Result = TRUE;
1106 
1111 
1112  /* Identify device */
1114 
1115  /* Wait for reply */
1116  for (Loops = 0; Loops < 100; Loops++)
1117  {
1118  StallExecutionProcessor(10000);
1121  break;
1122  }
1123 
1126  Result = FALSE;
1127 
1129  if (Scancode != 0xFA)
1130  Result = FALSE;
1131 
1132  StallExecutionProcessor(10000);
1133 
1136  Result = FALSE;
1137 
1139  if (Scancode != 0x00)
1140  Result = FALSE;
1141 
1142  return Result;
1143 }
#define TRUE
Definition: types.h:120
unsigned char * PUCHAR
Definition: retypes.h:3
UCHAR NTAPI READ_PORT_UCHAR(PUCHAR Address)
Definition: mach.c:528
#define CONTROLLER_STATUS_OUTPUT_BUFFER_FULL
Definition: machpc.c:64
VOID StallExecutionProcessor(ULONG Microseconds)
Definition: hardware.c:60
unsigned char BOOLEAN
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:426
#define CONTROLLER_COMMAND_WRITE_MOUSE
Definition: machpc.c:61
static VOID PS2ControllerWait(VOID)
Definition: machpc.c:1039
#define CONTROLLER_REGISTER_DATA
Definition: machpc.c:47
#define CONTROLLER_STATUS_MOUSE_OUTPUT_BUFFER_FULL
Definition: machpc.c:69
unsigned char UCHAR
Definition: xmlstorage.h:181
Status
Definition: gdiplustypes.h:24
unsigned int ULONG
Definition: retypes.h:1
void WRITE_PORT_UCHAR(PUCHAR Address, UCHAR Value)
Definition: mach.c:532
#define CONTROLLER_REGISTER_STATUS
Definition: machpc.c:45
#define CONTROLLER_REGISTER_CONTROL
Definition: machpc.c:46

Referenced by DetectPS2Mouse().

◆ DetectPS2AuxPort()

static BOOLEAN DetectPS2AuxPort ( VOID  )
static

Definition at line 1057 of file machpc.c.

1058 {
1059 #if 1
1060  /* Current detection is too unreliable. Just do as if
1061  * the PS/2 aux port is always present
1062  */
1063  return TRUE;
1064 #else
1065  ULONG Loops;
1066  UCHAR Status;
1067 
1068  /* Put the value 0x5A in the output buffer using the
1069  * "WriteAuxiliary Device Output Buffer" command (0xD3).
1070  * Poll the Status Register for a while to see if the value really turns up
1071  * in the Data Register. If the KEYBOARD_STATUS_MOUSE_OBF bit is also set
1072  * to 1 in the Status Register, we assume this controller has an
1073  * Auxiliary Port (a.k.a. Mouse Port).
1074  */
1079 
1080  /* 0x5A is a random dummy value */
1082  0x5A);
1083 
1084  for (Loops = 0; Loops < 10; Loops++)
1085  {
1086  StallExecutionProcessor(10000);
1089  break;
1090  }
1091 
1093 
1095 #endif
1096 }
#define TRUE
Definition: types.h:120
unsigned char * PUCHAR
Definition: retypes.h:3
UCHAR NTAPI READ_PORT_UCHAR(PUCHAR Address)
Definition: mach.c:528
#define CONTROLLER_STATUS_OUTPUT_BUFFER_FULL
Definition: machpc.c:64
VOID StallExecutionProcessor(ULONG Microseconds)
Definition: hardware.c:60
static VOID PS2ControllerWait(VOID)
Definition: machpc.c:1039
#define CONTROLLER_REGISTER_DATA
Definition: machpc.c:47
#define CONTROLLER_STATUS_MOUSE_OUTPUT_BUFFER_FULL
Definition: machpc.c:69
unsigned char UCHAR
Definition: xmlstorage.h:181
Status
Definition: gdiplustypes.h:24
#define CONTROLLER_COMMAND_WRITE_MOUSE_OUTPUT_BUFFER
Definition: machpc.c:60
unsigned int ULONG
Definition: retypes.h:1
void WRITE_PORT_UCHAR(PUCHAR Address, UCHAR Value)
Definition: mach.c:532
#define CONTROLLER_REGISTER_STATUS
Definition: machpc.c:45
#define CONTROLLER_REGISTER_CONTROL
Definition: machpc.c:46

Referenced by DetectPS2Mouse().

◆ DetectPS2Mouse()

static VOID DetectPS2Mouse ( PCONFIGURATION_COMPONENT_DATA  BusKey)
static

Definition at line 1149 of file machpc.c.

1150 {
1151  PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
1152  PCONFIGURATION_COMPONENT_DATA ControllerKey;
1153  PCONFIGURATION_COMPONENT_DATA PeripheralKey;
1154  ULONG Size;
1155 
1156  if (DetectPS2AuxPort())
1157  {
1158  TRACE("Detected PS2 port\n");
1159 
1160  PartialResourceList = FrLdrHeapAlloc(sizeof(CM_PARTIAL_RESOURCE_LIST), TAG_HW_RESOURCE_LIST);
1161  if (PartialResourceList == NULL)
1162  {
1163  ERR("Failed to allocate resource descriptor\n");
1164  return;
1165  }
1166  memset(PartialResourceList, 0, sizeof(CM_PARTIAL_RESOURCE_LIST));
1167 
1168  /* Initialize resource descriptor */
1169  PartialResourceList->Version = 1;
1170  PartialResourceList->Revision = 1;
1171  PartialResourceList->Count = 1;
1172 
1173  /* Set Interrupt */
1174  PartialResourceList->PartialDescriptors[0].Type = CmResourceTypeInterrupt;
1176  PartialResourceList->PartialDescriptors[0].Flags = CM_RESOURCE_INTERRUPT_LATCHED;
1177  PartialResourceList->PartialDescriptors[0].u.Interrupt.Level = 12;
1178  PartialResourceList->PartialDescriptors[0].u.Interrupt.Vector = 12;
1179  PartialResourceList->PartialDescriptors[0].u.Interrupt.Affinity = 0xFFFFFFFF;
1180 
1181  /* Create controller key */
1182  FldrCreateComponentKey(BusKey,
1184  PointerController,
1185  Input,
1186  0x0,
1187  0xFFFFFFFF,
1188  NULL,
1189  PartialResourceList,
1190  sizeof(CM_PARTIAL_RESOURCE_LIST),
1191  &ControllerKey);
1192  TRACE("Created key: PointerController\\0\n");
1193 
1194  if (DetectPS2AuxDevice())
1195  {
1196  TRACE("Detected PS2 mouse\n");
1197 
1198  /* Initialize resource descriptor */
1199  Size = sizeof(CM_PARTIAL_RESOURCE_LIST) -
1201  PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
1202  if (PartialResourceList == NULL)
1203  {
1204  ERR("Failed to allocate resource descriptor\n");
1205  return;
1206  }
1207  memset(PartialResourceList, 0, Size);
1208  PartialResourceList->Version = 1;
1209  PartialResourceList->Revision = 1;
1210  PartialResourceList->Count = 0;
1211 
1212  /* Create peripheral key */
1213  FldrCreateComponentKey(ControllerKey,
1215  PointerPeripheral,
1216  Input,
1217  0x0,
1218  0xFFFFFFFF,
1219  "MICROSOFT PS2 MOUSE",
1220  PartialResourceList,
1221  Size,
1222  &PeripheralKey);
1223  TRACE("Created key: PointerPeripheral\\0\n");
1224  }
1225  }
1226 }
struct _CM_PARTIAL_RESOURCE_LIST CM_PARTIAL_RESOURCE_LIST
GLint x0
Definition: linetemp.h:95
Definition: arc.h:84
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378 u
static BOOLEAN DetectPS2AuxDevice(VOID)
Definition: machpc.c:1100
static BOOLEAN DetectPS2AuxPort(VOID)
Definition: machpc.c:1057
smooth NULL
Definition: ftsmooth.c:416
FORCEINLINE PVOID FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag)
Definition: mm.h:163
#define TRACE(s)
Definition: solgame.cpp:4
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]
Definition: hwresource.cpp:119
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
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378::@381 Interrupt
#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().

◆ DetectSerialMouse()

static ULONG DetectSerialMouse ( PUCHAR  Port)
static

Definition at line 330 of file machpc.c.

331 {
332  CHAR Buffer[4];
333  ULONG i;
334  ULONG TimeOut;
335  UCHAR LineControl;
336 
337  /* Shutdown mouse or something like that */
338  LineControl = READ_PORT_UCHAR(Port + 4);
339  WRITE_PORT_UCHAR(Port + 4, (LineControl & ~0x02) | 0x01);
340  StallExecutionProcessor(100000);
341 
342  /*
343  * Clear buffer
344  * Maybe there is no serial port although BIOS reported one (this
345  * is the case on Apple hardware), or the serial port is misbehaving,
346  * therefore we must give up after some time.
347  */
348  TimeOut = 200;
349  while (READ_PORT_UCHAR(Port + 5) & 0x01)
350  {
351  if (--TimeOut == 0)
352  return MOUSE_TYPE_NONE;
354  }
355 
356  /*
357  * Send modem control with 'Data Terminal Ready', 'Request To Send' and
358  * 'Output Line 2' message. This enables mouse to identify.
359  */
360  WRITE_PORT_UCHAR(Port + 4, 0x0b);
361 
362  /* Wait 10 milliseconds for the mouse getting ready */
364 
365  /* Read first four bytes, which contains Microsoft Mouse signs */
366  TimeOut = 20;
367  for (i = 0; i < 4; i++)
368  {
369  while ((READ_PORT_UCHAR(Port + 5) & 1) == 0)
370  {
372  --TimeOut;
373  if (TimeOut == 0)
374  return MOUSE_TYPE_NONE;
375  }
377  }
378 
379  TRACE("Mouse data: %x %x %x %x\n",
380  Buffer[0], Buffer[1], Buffer[2], Buffer[3]);
381 
382  /* Check that four bytes for signs */
383  for (i = 0; i < 4; ++i)
384  {
385  if (Buffer[i] == 'B')
386  {
387  /* Sign for Microsoft Ballpoint */
388 // DbgPrint("Microsoft Ballpoint device detected\n");
389 // DbgPrint("THIS DEVICE IS NOT SUPPORTED, YET\n");
390  return MOUSE_TYPE_NONE;
391  }
392  else if (Buffer[i] == 'M')
393  {
394  /* Sign for Microsoft Mouse protocol followed by button specifier */
395  if (i == 3)
396  {
397  /* Overflow Error */
398  return MOUSE_TYPE_NONE;
399  }
400 
401  switch (Buffer[i + 1])
402  {
403  case '3':
404  TRACE("Microsoft Mouse with 3-buttons detected\n");
405  return MOUSE_TYPE_LOGITECH;
406 
407  case 'Z':
408  TRACE("Microsoft Wheel Mouse detected\n");
409  return MOUSE_TYPE_WHEELZ;
410 
411  /* case '2': */
412  default:
413  TRACE("Microsoft Mouse with 2-buttons detected\n");
414  return MOUSE_TYPE_MICROSOFT;
415  }
416  }
417  }
418 
419  return MOUSE_TYPE_NONE;
420 }
CPPORT Port[4]
Definition: headless.c:34
char CHAR
Definition: xmlstorage.h:175
UCHAR NTAPI READ_PORT_UCHAR(PUCHAR Address)
Definition: mach.c:528
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define MOUSE_TYPE_MICROSOFT
Definition: machpc.c:33
VOID StallExecutionProcessor(ULONG Microseconds)
Definition: hardware.c:60
Definition: bufpool.h:45
#define MOUSE_TYPE_NONE
Definition: machpc.c:31
#define TRACE(s)
Definition: solgame.cpp:4
#define MOUSE_TYPE_WHEELZ
Definition: machpc.c:37
unsigned char UCHAR
Definition: xmlstorage.h:181
#define MOUSE_TYPE_LOGITECH
Definition: machpc.c:35
unsigned int ULONG
Definition: retypes.h:1
void WRITE_PORT_UCHAR(PUCHAR Address, UCHAR Value)
Definition: mach.c:532

Referenced by DetectSerialPointerPeripheral().

◆ DetectSerialPointerPeripheral()

static VOID DetectSerialPointerPeripheral ( PCONFIGURATION_COMPONENT_DATA  ControllerKey,
PUCHAR  Base 
)
static

Definition at line 483 of file machpc.c.

485 {
486  PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
487  char Buffer[256];
488  CHAR Identifier[256];
489  PCONFIGURATION_COMPONENT_DATA PeripheralKey;
490  ULONG MouseType;
491  ULONG Size, Length;
492  ULONG i;
493  ULONG j;
494  ULONG k;
495 
496  TRACE("DetectSerialPointerPeripheral()\n");
497 
498  Identifier[0] = 0;
499 
501  MouseType = DetectSerialMouse(Base);
502 
503  if (MouseType != MOUSE_TYPE_NONE)
504  {
506  TRACE( "PnP ID length: %u\n", Length);
507 
508  if (Length != 0)
509  {
510  /* Convert PnP sting to ASCII */
511  if (Buffer[0] == 0x08)
512  {
513  for (i = 0; i < Length; i++)
514  Buffer[i] += 0x20;
515  }
516  Buffer[Length] = 0;
517 
518  TRACE("PnP ID string: %s\n", Buffer);
519 
520  /* Copy PnpId string */
521  for (i = 0; i < 7; i++)
522  {
523  Identifier[i] = Buffer[3 + i];
524  }
525  memcpy(&Identifier[7],
526  L" - ",
527  3 * sizeof(WCHAR));
528 
529  /* Skip device serial number */
530  i = 10;
531  if (Buffer[i] == '\\')
532  {
533  for (j = ++i; i < Length; ++i)
534  {
535  if (Buffer[i] == '\\')
536  break;
537  }
538  if (i >= Length)
539  i -= 3;
540  }
541 
542  /* Skip PnP class */
543  if (Buffer[i] == '\\')
544  {
545  for (j = ++i; i < Length; ++i)
546  {
547  if (Buffer[i] == '\\')
548  break;
549  }
550 
551  if (i >= Length)
552  i -= 3;
553  }
554 
555  /* Skip compatible PnP Id */
556  if (Buffer[i] == '\\')
557  {
558  for (j = ++i; i < Length; ++i)
559  {
560  if (Buffer[i] == '\\')
561  break;
562  }
563  if (Buffer[j] == '*')
564  ++j;
565  if (i >= Length)
566  i -= 3;
567  }
568 
569  /* Get product description */
570  if (Buffer[i] == '\\')
571  {
572  for (j = ++i; i < Length; ++i)
573  {
574  if (Buffer[i] == ';')
575  break;
576  }
577  if (i >= Length)
578  i -= 3;
579  if (i > j + 1)
580  {
581  for (k = 0; k < i - j; k++)
582  {
583  Identifier[k + 10] = Buffer[k + j];
584  }
585  Identifier[10 + (i - j)] = 0;
586  }
587  }
588 
589  TRACE("Identifier string: %s\n", Identifier);
590  }
591 
592  if (Length == 0 || strlen(Identifier) < 11)
593  {
594  switch (MouseType)
595  {
596  case MOUSE_TYPE_LOGITECH:
597  strcpy(Identifier, "LOGITECH SERIAL MOUSE");
598  break;
599 
600  case MOUSE_TYPE_WHEELZ:
601  strcpy(Identifier, "MICROSOFT SERIAL MOUSE WITH WHEEL");
602  break;
603 
605  default:
606  strcpy(Identifier, "MICROSOFT SERIAL MOUSE");
607  break;
608  }
609  }
610 
611  /* Set 'Configuration Data' value */
612  Size = sizeof(CM_PARTIAL_RESOURCE_LIST) -
614  PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
615  if (PartialResourceList == NULL)
616  {
617  ERR("Failed to allocate resource descriptor\n");
618  return;
619  }
620  memset(PartialResourceList, 0, Size);
621  PartialResourceList->Version = 1;
622  PartialResourceList->Revision = 1;
623  PartialResourceList->Count = 0;
624 
625  /* Create 'PointerPeripheral' key */
626  FldrCreateComponentKey(ControllerKey,
628  PointerPeripheral,
629  Input,
630  0x0,
631  0xFFFFFFFF,
632  Identifier,
633  PartialResourceList,
634  Size,
635  &PeripheralKey);
636 
637  TRACE("Created key: PointerPeripheral\\0\n");
638  }
639 }
struct _CM_PARTIAL_RESOURCE_LIST CM_PARTIAL_RESOURCE_LIST
GLint x0
Definition: linetemp.h:95
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
char CHAR
Definition: xmlstorage.h:175
_In_opt_ ULONG Base
Definition: rtlfuncs.h:2374
Definition: arc.h:84
static ULONG GetSerialMousePnpId(PUCHAR Port, char *Buffer)
Definition: machpc.c:423
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define MOUSE_TYPE_MICROSOFT
Definition: machpc.c:33
static ULONG DetectSerialMouse(PUCHAR Port)
Definition: machpc.c:330
smooth NULL
Definition: ftsmooth.c:416
Definition: bufpool.h:45
#define MOUSE_TYPE_NONE
Definition: machpc.c:31
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 GLint GLint j
Definition: glfuncs.h:250
FORCEINLINE PVOID FrLdrHeapAlloc(SIZE_T MemorySize, ULONG Tag)
Definition: mm.h:163
#define TRACE(s)
Definition: solgame.cpp:4
#define MOUSE_TYPE_WHEELZ
Definition: machpc.c:37
__wchar_t WCHAR
Definition: xmlstorage.h:180
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:101
static VOID InitializeSerialPort(PUCHAR Port, UCHAR LineControl)
Definition: machpc.c:316
static const WCHAR L[]
Definition: oid.c:1250
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
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 MOUSE_TYPE_LOGITECH
Definition: machpc.c:35
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
unsigned int ULONG
Definition: retypes.h:1
#define memset(x, y, z)
Definition: compat.h:39
int k
Definition: mpi.c:3369
#define TAG_HW_RESOURCE_LIST
Definition: hardware.h:26

Referenced by DetectSerialPorts().

◆ 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
#define CmResourceTypeDeviceSpecific
Definition: hwresource.cpp:127
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:2374
Definition: arc.h:84
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378::@387 DeviceSpecificData
_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
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378 u
BOOLEAN Rs232PortInUse(PUCHAR Base)
Definition: rs232.c:132
#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
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378::@380 Port
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: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
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378::@381 Interrupt
#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().

◆ GetSerialMousePnpId()

static ULONG GetSerialMousePnpId ( PUCHAR  Port,
char Buffer 
)
static

Definition at line 423 of file machpc.c.

424 {
425  ULONG TimeOut;
426  ULONG i = 0;
427  char c;
428  char x;
429 
430  WRITE_PORT_UCHAR(Port + 4, 0x09);
431 
432  /* Wait 10 milliseconds for the mouse getting ready */
434 
435  WRITE_PORT_UCHAR(Port + 4, 0x0b);
436 
438 
439  for (;;)
440  {
441  TimeOut = 200;
442  while (((READ_PORT_UCHAR(Port + 5) & 1) == 0) && (TimeOut > 0))
443  {
445  --TimeOut;
446  if (TimeOut == 0)
447  {
448  return 0;
449  }
450  }
451 
453  if (c == 0x08 || c == 0x28)
454  break;
455  }
456 
457  Buffer[i++] = c;
458  x = c + 1;
459 
460  for (;;)
461  {
462  TimeOut = 200;
463  while (((READ_PORT_UCHAR(Port + 5) & 1) == 0) && (TimeOut > 0))
464  {
466  --TimeOut;
467  if (TimeOut == 0)
468  return 0;
469  }
471  Buffer[i++] = c;
472  if (c == x)
473  break;
474  if (i >= 256)
475  break;
476  }
477 
478  return i;
479 }
CPPORT Port[4]
Definition: headless.c:34
UCHAR NTAPI READ_PORT_UCHAR(PUCHAR Address)
Definition: mach.c:528
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
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
VOID StallExecutionProcessor(ULONG Microseconds)
Definition: hardware.c:60
Definition: bufpool.h:45
const GLubyte * c
Definition: glext.h:8905
#define c
Definition: ke_i.h:80
unsigned int ULONG
Definition: retypes.h:1
void WRITE_PORT_UCHAR(PUCHAR Address, UCHAR Value)
Definition: mach.c:532

Referenced by DetectSerialPointerPeripheral().

◆ InitializeSerialPort()

static VOID InitializeSerialPort ( PUCHAR  Port,
UCHAR  LineControl 
)
static

Definition at line 316 of file machpc.c.

318 {
319  WRITE_PORT_UCHAR(Port + 3, 0x80); /* set DLAB on */
320  WRITE_PORT_UCHAR(Port, 0x60); /* speed LO byte */
321  WRITE_PORT_UCHAR(Port + 1, 0); /* speed HI byte */
322  WRITE_PORT_UCHAR(Port + 3, LineControl);
323  WRITE_PORT_UCHAR(Port + 1, 0); /* set comm and DLAB to 0 */
324  WRITE_PORT_UCHAR(Port + 4, 0x09); /* DR int enable */
325  READ_PORT_UCHAR(Port + 5); /* clear error bits */
326 }
CPPORT Port[4]
Definition: headless.c:34
UCHAR NTAPI READ_PORT_UCHAR(PUCHAR Address)
Definition: mach.c:528
void WRITE_PORT_UCHAR(PUCHAR Address, UCHAR Value)
Definition: mach.c:532

Referenced by DetectSerialPointerPeripheral().

◆ PcGetExtendedBIOSData()

VOID PcGetExtendedBIOSData ( PULONG  ExtendedBIOSDataArea,
PULONG  ExtendedBIOSDataSize 
)

Definition at line 80 of file machpc.c.

81 {
82  REGS BiosRegs;
83 
84  /* Get address and size of the extended BIOS data area */
85  BiosRegs.d.eax = 0xC100;
86  Int386(0x15, &BiosRegs, &BiosRegs);
87  if (INT386_SUCCESS(BiosRegs))
88  {
89  *ExtendedBIOSDataArea = BiosRegs.w.es << 4;
90  *ExtendedBIOSDataSize = 1024;
91  }
92  else
93  {
94  WARN("Int 15h AH=C1h call failed\n");
97  }
98 }
#define ExtendedBIOSDataSize
Definition: winldr.c:421
#define WARN(fmt,...)
Definition: debug.h:111
unsigned long eax
Definition: pcbios.h:85
unsigned short es
Definition: pcbios.h:115
int __cdecl Int386(int ivec, REGS *in, REGS *out)
#define INT386_SUCCESS(regs)
Definition: pcbios.h:173
#define ExtendedBIOSDataArea
Definition: winldr.c:420
DWORDREGS d
Definition: pcbios.h:155
Definition: pcbios.h:152
WORDREGS w
Definition: pcbios.h:156

Referenced by PcMachInit().

◆ PcGetFloppyCount()

static UCHAR PcGetFloppyCount ( VOID  )
static

Definition at line 1343 of file machpc.c.

1344 {
1345  UCHAR Data;
1346 
1347  WRITE_PORT_UCHAR((PUCHAR)0x70, 0x10);
1348  Data = READ_PORT_UCHAR((PUCHAR)0x71);
1349 
1350  return ((Data & 0xF0) ? 1 : 0) + ((Data & 0x0F) ? 1 : 0);
1351 }
unsigned char * PUCHAR
Definition: retypes.h:3
UCHAR NTAPI READ_PORT_UCHAR(PUCHAR Address)
Definition: mach.c:528
_In_ LPGUID _In_ PVOID Data
Definition: classpnp.h:778
unsigned char UCHAR
Definition: xmlstorage.h:181
void WRITE_PORT_UCHAR(PUCHAR Address, UCHAR Value)
Definition: mach.c:532

Referenced by PcMachInit().

◆ PcGetHarddiskConfigurationData()

static PCM_PARTIAL_RESOURCE_LIST PcGetHarddiskConfigurationData ( UCHAR  DriveNumber,
ULONG pSize 
)
static

Definition at line 104 of file machpc.c.

105 {
106  PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
107  PCM_DISK_GEOMETRY_DEVICE_DATA DiskGeometry;
108  // EXTENDED_GEOMETRY ExtGeometry;
109  GEOMETRY Geometry;
110  ULONG Size;
111 
112  //
113  // Initialize returned size
114  //
115  *pSize = 0;
116 
117  /* Set 'Configuration Data' value */
118  Size = sizeof(CM_PARTIAL_RESOURCE_LIST) +
120  PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
121  if (PartialResourceList == NULL)
122  {
123  ERR("Failed to allocate resource descriptor\n");
124  return NULL;
125  }
126 
127  memset(PartialResourceList, 0, Size);
128  PartialResourceList->Version = 1;
129  PartialResourceList->Revision = 1;
130  PartialResourceList->Count = 1;
131  PartialResourceList->PartialDescriptors[0].Type =
133 // PartialResourceList->PartialDescriptors[0].ShareDisposition =
134 // PartialResourceList->PartialDescriptors[0].Flags =
135  PartialResourceList->PartialDescriptors[0].u.DeviceSpecificData.DataSize =
137 
138  /* Get pointer to geometry data */
139  DiskGeometry = (PVOID)(((ULONG_PTR)PartialResourceList) + sizeof(CM_PARTIAL_RESOURCE_LIST));
140 
141  /* Get the disk geometry */
142 #if 0 // This is somehow replaced by what PcDiskGetDriveGeometry() does internally.
143  ExtGeometry.Size = sizeof(EXTENDED_GEOMETRY);
144  if (DiskGetExtendedDriveParameters(DriveNumber, &ExtGeometry, ExtGeometry.Size))
145  {
146  DiskGeometry->BytesPerSector = ExtGeometry.BytesPerSector;
147  DiskGeometry->NumberOfCylinders = ExtGeometry.Cylinders;
148  DiskGeometry->SectorsPerTrack = ExtGeometry.SectorsPerTrack;
149  DiskGeometry->NumberOfHeads = ExtGeometry.Heads;
150  }
151  else
152 #endif
153  if (PcDiskGetDriveGeometry(DriveNumber, &Geometry))
154  {
155  DiskGeometry->BytesPerSector = Geometry.BytesPerSector;
156  DiskGeometry->NumberOfCylinders = Geometry.Cylinders;
157  DiskGeometry->SectorsPerTrack = Geometry.Sectors;
158  DiskGeometry->NumberOfHeads = Geometry.Heads;
159  }
160  else
161  {
162  TRACE("Reading disk geometry failed\n");
163  FrLdrHeapFree(PartialResourceList, TAG_HW_RESOURCE_LIST);
164  return NULL;
165  }
166  TRACE("Disk %x: %u Cylinders %u Heads %u Sectors %u Bytes\n",
167  DriveNumber,
168  DiskGeometry->NumberOfCylinders,
169  DiskGeometry->NumberOfHeads,
170  DiskGeometry->SectorsPerTrack,
171  DiskGeometry->BytesPerSector);
172 
173  //
174  // Return configuration data
175  //
176  *pSize = Size;
177  return PartialResourceList;
178 }
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
struct _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378::@387 DeviceSpecificData
union _CM_PARTIAL_RESOURCE_DESCRIPTOR::@378 u
uint32_t ULONG_PTR
Definition: typedefs.h:63
BOOLEAN PcDiskGetDriveGeometry(UCHAR DriveNumber, PGEOMETRY Geometry)
Definition: pcdisk.c:798
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:359
#define ERR(fmt,...)
Definition: debug.h:109
ULONG BytesPerSector
Definition: disk.h:29
static BOOLEAN DiskGetExtendedDriveParameters(IN UCHAR DriveNumber, IN PPC_DISK_DRIVE DiskDrive, OUT PVOID Buffer, IN USHORT BufferSize)
Definition: pcdisk.c:294
Definition: disk.h:24
struct _EXTENDED_GEOMETRY EXTENDED_GEOMETRY
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 PcHwDetect().

◆ PcGetSerialPort()

ULONG PcGetSerialPort ( ULONG  Index,
PULONG  Irq 
)

Definition at line 642 of file machpc.c.

643 {
644  static const ULONG PcIrq[MAX_COM_PORTS] = {4, 3, 4, 3};
645  PUSHORT BasePtr;
646 
647  /*
648  * The BIOS data area 0x400 holds the address of the first valid COM port.
649  * Each COM port address is stored in a 2-byte field.
650  * Infos at: http://www.bioscentral.com/misc/bda.htm
651  */
652  BasePtr = (PUSHORT)0x400;
653  *Irq = PcIrq[Index];
654 
655  return (ULONG) *(BasePtr + Index);
656 }
static const UCHAR Index[8]
Definition: usbohci.c:18
#define MAX_COM_PORTS
Definition: machpc.c:27
unsigned int ULONG
Definition: retypes.h:1
unsigned short * PUSHORT
Definition: retypes.h:2

Referenced by DetectIsaBios().

◆ PcHwDetect()

Definition at line 1354 of file machpc.c.

1355 {
1357  ULONG BusNumber = 0;
1358 
1359  TRACE("DetectHardware()\n");
1360 
1361  /* Create the 'System' key */
1362  FldrCreateSystemKey(&SystemKey);
1363  // TODO: Discover and set the machine type as the Component->Identifier
1364 
1367 
1368  /* Detect buses */
1369  DetectPciBios(SystemKey, &BusNumber);
1370  DetectApmBios(SystemKey, &BusNumber);
1371  DetectPnpBios(SystemKey, &BusNumber);
1372  DetectIsaBios(SystemKey, &BusNumber); // TODO: Detect first EISA or MCA, before ISA
1373  DetectAcpiBios(SystemKey, &BusNumber);
1374 
1375  // TODO: Collect the ROM blocks from 0xC0000 to 0xF0000 and append their
1376  // CM_ROM_BLOCK data into the 'System' key's configuration data.
1377 
1378  TRACE("DetectHardware() Done\n");
1379  return SystemKey;
1380 }
GET_HARDDISK_CONFIG_DATA GetHarddiskConfigurationData
Definition: hardware.c:45
FIND_PCI_BIOS FindPciBios
Definition: hwpci.c:26
static PCM_PARTIAL_RESOURCE_LIST PcGetHarddiskConfigurationData(UCHAR DriveNumber, ULONG *pSize)
Definition: machpc.c:104
_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
static VOID DetectPnpBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
Definition: machpc.c:182
VOID DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
Definition: hwpci.c:176
VOID DetectAcpiBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
Definition: hwacpi.c:54
static VOID DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
Definition: machpc.c:1293
BOOLEAN PcFindPciBios(PPCI_REGISTRY_INFO BusData)
Definition: hwpci.c:80
unsigned int ULONG
Definition: retypes.h:1
VOID NTAPI FldrCreateSystemKey(OUT PCONFIGURATION_COMPONENT_DATA *SystemNode)
Definition: archwsup.c:89
VOID DetectApmBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
Definition: hwapm.c:57

Referenced by PcMachInit().

◆ PcHwIdle()

VOID PcHwIdle ( VOID  )

Definition at line 1383 of file machpc.c.

1384 {
1385  REGS Regs;
1386 
1387  /* Select APM 1.0+ function */
1388  Regs.b.ah = 0x53;
1389 
1390  /* Function 05h: CPU idle */
1391  Regs.b.al = 0x05;
1392 
1393  /* Call INT 15h */
1394  Int386(0x15, &Regs, &Regs);
1395 
1396  /* Check if successfull (CF set on error) */
1397  if (INT386_SUCCESS(Regs))
1398  return;
1399 
1400  /*
1401  * No futher processing here.
1402  * Optionally implement HLT instruction handling.
1403  */
1404 }
unsigned char ah
Definition: pcbios.h:126
int __cdecl Int386(int ivec, REGS *in, REGS *out)
#define INT386_SUCCESS(regs)
Definition: pcbios.h:173
BYTEREGS b
Definition: pcbios.h:157
unsigned char al
Definition: pcbios.h:125
Definition: pcbios.h:152

Referenced by PcMachInit().

◆ PcMachInit()

VOID PcMachInit ( const char CmdLine)

Definition at line 1410 of file machpc.c.

1411 {
1412  /* Setup vtbl */
1429  MachVtbl.Beep = PcBeep;
1441 }
PFREELDR_MEMORY_DESCRIPTOR(* GetMemoryMap)(PULONG MaxMemoryMapSize)
Definition: machine.h:63
VOID PcVideoGetFontsFromFirmware(PULONG RomFontPointers)
Definition: pcvideo.c:974
VOID PcVideoSync(VOID)
Definition: pcvideo.c:1136
VOID(* GetExtendedBIOSData)(PULONG ExtendedBIOSDataArea, PULONG ExtendedBIOSDataSize)
Definition: machine.h:64
VOID(* VideoClearScreen)(UCHAR Attr)
Definition: machine.h:45
PCONFIGURATION_COMPONENT_DATA(* HwDetect)(VOID)
Definition: machine.h:77
VOID(* VideoGetDisplaySize)(PULONG Width, PULONG Height, PULONG Depth)
Definition: machine.h:47
BOOLEAN(* VideoIsPaletteFixed)(VOID)
Definition: machine.h:54
UCHAR(* GetFloppyCount)(VOID)
Definition: machine.h:66
ULONG PcDiskGetCacheableBlockCount(UCHAR DriveNumber)
Definition: pcdisk.c:827
BOOLEAN PcInitializeBootDevices(VOID)
Definition: hwdisk.c:470
VOID PcVideoHideShowTextCursor(BOOLEAN Show)
Definition: pcvideo.c:1033
VOID PcVideoSetTextCursorPosition(UCHAR X, UCHAR Y)
Definition: pcvideo.c:1008
VOID PcGetExtendedBIOSData(PULONG ExtendedBIOSDataArea, PULONG ExtendedBIOSDataSize)
Definition: machpc.c:80
VOID(* VideoGetFontsFromFirmware)(PULONG RomFontPointers)
Definition: machine.h:49
VOID PcVideoClearScreen(UCHAR Attr)
Definition: pcvideo.c:1087
BOOLEAN PcDiskGetDriveGeometry(UCHAR DriveNumber, PGEOMETRY Geometry)
Definition: pcdisk.c:798
BOOLEAN(* DiskGetDriveGeometry)(UCHAR DriveNumber, PGEOMETRY DriveGeometry)
Definition: machine.h:68
VOID(* VideoSetTextCursorPosition)(UCHAR X, UCHAR Y)
Definition: machine.h:50
PFREELDR_MEMORY_DESCRIPTOR PcMemGetMemoryMap(ULONG *MemoryMapSize)
Definition: pcmem.c:599
TIMEINFO *(* GetTime)(VOID)
Definition: machine.h:72
BOOLEAN(* InitializeBootDevices)(VOID)
Definition: machine.h:76
BOOLEAN PcDiskReadLogicalSectors(IN UCHAR DriveNumber, IN ULONGLONG SectorNumber, IN ULONG SectorCount, OUT PVOID Buffer)
Definition: pcdisk.c:758
VOID(* VideoGetPaletteColor)(UCHAR Color, UCHAR *Red, UCHAR *Green, UCHAR *Blue)
Definition: machine.h:56
VIDEODISPLAYMODE PcVideoSetDisplayMode(char *DisplayModeName, BOOLEAN Init)
Definition: pcvideo.c:886
BOOLEAN PcConsKbHit(VOID)
Definition: pccons.c:69
BOOLEAN PcVideoIsPaletteFixed(VOID)
Definition: pcvideo.c:1112
VOID PcVideoSetPaletteColor(UCHAR Color, UCHAR Red, UCHAR Green, UCHAR Blue)
Definition: pcvideo.c:1118
PCONFIGURATION_COMPONENT_DATA PcHwDetect(VOID)
Definition: machpc.c:1354
BOOLEAN(* DiskReadLogicalSectors)(UCHAR DriveNumber, ULONGLONG SectorNumber, ULONG SectorCount, PVOID Buffer)
Definition: machine.h:67
BOOLEAN(* ConsKbHit)(VOID)
Definition: machine.h:42
VOID(* VideoPutChar)(int Ch, UCHAR Attr, unsigned X, unsigned Y)
Definition: machine.h:52
VOID PcVideoPutChar(int Ch, UCHAR Attr, unsigned X, unsigned Y)
Definition: pcvideo.c:1103
VOID(* VideoSetPaletteColor)(UCHAR Color, UCHAR Red, UCHAR Green, UCHAR Blue)
Definition: machine.h:55
VOID PcBeep(VOID)
Definition: i386rtl.c:25
VOID PcVideoGetDisplaySize(PULONG Width, PULONG Height, PULONG Depth)
Definition: pcvideo.c:944
VOID(* PrepareForReactOS)(VOID)
Definition: machine.h:59
ULONG(* VideoGetBufferSize)(VOID)
Definition: machine.h:48
int(* ConsGetCh)(VOID)
Definition: machine.h:43
ULONG(* DiskGetCacheableBlockCount)(UCHAR DriveNumber)
Definition: machine.h:69
VOID(* ConsPutChar)(int Ch)
Definition: machine.h:41
MACHVTBL MachVtbl
Definition: arcemul.c:21
VOID(* HwIdle)(VOID)
Definition: machine.h:78
VOID PcHwIdle(VOID)
Definition: machpc.c:1383
static UCHAR PcGetFloppyCount(VOID)
Definition: machpc.c:1343
VOID PcVideoCopyOffScreenBufferToVRAM(PVOID Buffer)
Definition: pcvideo.c:1046
VOID(* VideoSync)(VOID)
Definition: machine.h:57
VOID PcVideoGetPaletteColor(UCHAR Color, UCHAR *Red, UCHAR *Green, UCHAR *Blue)
Definition: pcvideo.c:1127
VOID(* VideoCopyOffScreenBufferToVRAM)(PVOID Buffer)
Definition: machine.h:53
VIDEODISPLAYMODE(* VideoSetDisplayMode)(char *DisplayMode, BOOLEAN Init)
Definition: machine.h:46
TIMEINFO * PcGetTime(VOID)
Definition: pcrtc.c:24
VOID(* Beep)(VOID)
Definition: machine.h:58
ULONG PcVideoGetBufferSize(VOID)
Definition: pcvideo.c:968
int PcConsGetCh(void)
Definition: pccons.c:90
VOID PcPrepareForReactOS(VOID)
Definition: machpc.c:1444
VOID PcConsPutChar(int Ch)
Definition: pccons.c:28
VOID(* VideoHideShowTextCursor)(BOOLEAN Show)
Definition: machine.h:51

Referenced by MachInit().

◆ PcPrepareForReactOS()

VOID PcPrepareForReactOS ( VOID  )

Definition at line 1444 of file machpc.c.

1445 {
1446  /* On PC, prepare video and turn off the floppy motor */
1448  DiskStopFloppyMotor();
1449 }
VOID PcVideoPrepareForReactOS(VOID)
Definition: pcvideo.c:1159

Referenced by PcMachInit().

◆ PS2ControllerWait()

static VOID PS2ControllerWait ( VOID  )
static

Definition at line 1039 of file machpc.c.

1040 {
1041  ULONG Timeout;
1042  UCHAR Status;
1043 
1044  for (Timeout = 0; Timeout < CONTROLLER_TIMEOUT; Timeout++)
1045  {
1048  return;
1049 
1050  /* Sleep for one millisecond */
1052  }
1053 }
#define CONTROLLER_STATUS_INPUT_BUFFER_FULL
Definition: machpc.c:65
#define CONTROLLER_TIMEOUT
Definition: machpc.c:76
unsigned char * PUCHAR
Definition: retypes.h:3
UCHAR NTAPI READ_PORT_UCHAR(PUCHAR Address)
Definition: mach.c:528
VOID StallExecutionProcessor(ULONG Microseconds)
Definition: hardware.c:60
unsigned char UCHAR
Definition: xmlstorage.h:181
Status
Definition: gdiplustypes.h:24
static ULONG Timeout
Definition: ping.c:61
unsigned int ULONG
Definition: retypes.h:1
#define CONTROLLER_REGISTER_STATUS
Definition: machpc.c:45

Referenced by DetectPS2AuxDevice(), and DetectPS2AuxPort().