ReactOS 0.4.16-dev-91-g764881a
io.c File Reference
#include "ntvdm.h"
#include <debug.h>
#include "emulator.h"
#include "io.h"
Include dependency graph for io.c:

Go to the source code of this file.

Classes

struct  _EMULATOR_IO_HANDLERS
 
struct  _EMULATOR_IOPORT_HANDLERS
 

Macros

#define NDEBUG
 

Typedefs

typedef struct _EMULATOR_IO_HANDLERS EMULATOR_IO_HANDLERS
 
typedef struct _EMULATOR_IO_HANDLERSPEMULATOR_IO_HANDLERS
 
typedef struct _EMULATOR_IOPORT_HANDLERS EMULATOR_IOPORT_HANDLERS
 
typedef struct _EMULATOR_IOPORT_HANDLERSPEMULATOR_IOPORT_HANDLERS
 

Functions

UCHAR IOReadB (USHORT Port)
 
VOID IOReadStrB (USHORT Port, PUCHAR Buffer, ULONG Count)
 
VOID IOWriteB (USHORT Port, UCHAR Buffer)
 
VOID IOWriteStrB (USHORT Port, PUCHAR Buffer, ULONG Count)
 
USHORT IOReadW (USHORT Port)
 
VOID IOReadStrW (USHORT Port, PUSHORT Buffer, ULONG Count)
 
VOID IOWriteW (USHORT Port, USHORT Buffer)
 
VOID IOWriteStrW (USHORT Port, PUSHORT Buffer, ULONG Count)
 
ULONG IOReadD (USHORT Port)
 
VOID IOReadStrD (USHORT Port, PULONG Buffer, ULONG Count)
 
VOID IOWriteD (USHORT Port, ULONG Buffer)
 
VOID IOWriteStrD (USHORT Port, PULONG Buffer, ULONG Count)
 
VOID RegisterIoPort (USHORT Port, EMULATOR_INB_PROC InHandler, EMULATOR_OUTB_PROC OutHandler)
 
VOID UnregisterIoPort (USHORT Port)
 
VOID FASTCALL EmulatorReadIo (PFAST486_STATE State, USHORT Port, PVOID Buffer, ULONG DataCount, UCHAR DataSize)
 
VOID FASTCALL EmulatorWriteIo (PFAST486_STATE State, USHORT Port, PVOID Buffer, ULONG DataCount, UCHAR DataSize)
 
BOOL WINAPI VDDInstallIOHook (IN HANDLE hVdd, IN WORD cPortRange, IN PVDD_IO_PORTRANGE pPortRange, IN PVDD_IO_HANDLERS IoHandlers)
 
VOID WINAPI VDDDeInstallIOHook (IN HANDLE hVdd, IN WORD cPortRange, IN PVDD_IO_PORTRANGE pPortRange)
 

Variables

EMULATOR_IOPORT_HANDLERS IoPortProc [EMULATOR_MAX_IOPORTS_NUM] = {{NULL}}
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 14 of file io.c.

Typedef Documentation

◆ EMULATOR_IO_HANDLERS

◆ EMULATOR_IOPORT_HANDLERS

◆ PEMULATOR_IO_HANDLERS

◆ PEMULATOR_IOPORT_HANDLERS

Function Documentation

◆ EmulatorReadIo()

VOID FASTCALL EmulatorReadIo ( PFAST486_STATE  State,
USHORT  Port,
PVOID  Buffer,
ULONG  DataCount,
UCHAR  DataSize 
)

Definition at line 349 of file io.c.

354{
356
357 if (DataSize == 0 || DataCount == 0) return;
358
359 if (DataSize == sizeof(UCHAR))
360 {
361 if (DataCount == 1)
363 else
364 IOReadStrB(Port, Buffer, DataCount);
365 }
366 else if (DataSize == sizeof(USHORT))
367 {
368 if (DataCount == 1)
370 else
371 IOReadStrW(Port, Buffer, DataCount);
372 }
373 else if (DataSize == sizeof(ULONG))
374 {
375 if (DataCount == 1)
377 else
378 IOReadStrD(Port, Buffer, DataCount);
379 }
380 else
381 {
383
384 while (DataCount--)
385 {
386 ULONG CurrentPort = Port;
387 ULONG Count;
388 UCHAR NewDataSize = DataSize;
389
390 /* Read dword */
391 Count = NewDataSize >> 2; // NewDataSize / sizeof(ULONG);
392 NewDataSize = NewDataSize & 3; // NewDataSize % sizeof(ULONG);
393 while (Count--)
394 {
395 *(PULONG)Address = IOReadD(CurrentPort);
396 CurrentPort += sizeof(ULONG);
397 Address += sizeof(ULONG);
398 }
399
400 /* Read word */
401 Count = NewDataSize >> 1; // NewDataSize / sizeof(USHORT);
402 NewDataSize = NewDataSize & 1; // NewDataSize % sizeof(USHORT);
403 while (Count--)
404 {
405 *(PUSHORT)Address = IOReadW(CurrentPort);
406 CurrentPort += sizeof(USHORT);
407 Address += sizeof(USHORT);
408 }
409
410 /* Read byte */
411 Count = NewDataSize; // NewDataSize / sizeof(UCHAR);
412 // NewDataSize = NewDataSize % sizeof(UCHAR);
413 while (Count--)
414 {
415 *(PUCHAR)Address = IOReadB(CurrentPort);
416 CurrentPort += sizeof(UCHAR);
417 Address += sizeof(UCHAR);
418 }
419 }
420 }
421}
Definition: bufpool.h:45
CPPORT Port[4]
Definition: headless.c:35
_In_ NDIS_STATUS _In_ ULONG _In_ USHORT _In_opt_ PVOID _In_ ULONG DataSize
Definition: ndis.h:4755
int Count
Definition: noreturn.cpp:7
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
unsigned short USHORT
Definition: pedump.c:61
static WCHAR Address[46]
Definition: ping.c:68
ULONG IOReadD(USHORT Port)
Definition: io.c:252
VOID IOReadStrB(USHORT Port, PUCHAR Buffer, ULONG Count)
Definition: io.c:88
USHORT IOReadW(USHORT Port)
Definition: io.c:156
VOID IOReadStrW(USHORT Port, PUSHORT Buffer, ULONG Count)
Definition: io.c:183
VOID IOReadStrD(USHORT Port, PULONG Buffer, ULONG Count)
Definition: io.c:271
UCHAR IOReadB(USHORT Port)
Definition: io.c:64
uint32_t * PULONG
Definition: typedefs.h:59
uint16_t * PUSHORT
Definition: typedefs.h:56
unsigned char * PUCHAR
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
unsigned char UCHAR
Definition: xmlstorage.h:181

Referenced by CpuInitialize().

◆ EmulatorWriteIo()

VOID FASTCALL EmulatorWriteIo ( PFAST486_STATE  State,
USHORT  Port,
PVOID  Buffer,
ULONG  DataCount,
UCHAR  DataSize 
)

Definition at line 424 of file io.c.

429{
431
432 if (DataSize == 0 || DataCount == 0) return;
433
434 if (DataSize == sizeof(UCHAR))
435 {
436 if (DataCount == 1)
438 else
439 IOWriteStrB(Port, Buffer, DataCount);
440 }
441 else if (DataSize == sizeof(USHORT))
442 {
443 if (DataCount == 1)
445 else
446 IOWriteStrW(Port, Buffer, DataCount);
447 }
448 else if (DataSize == sizeof(ULONG))
449 {
450 if (DataCount == 1)
452 else
453 IOWriteStrD(Port, Buffer, DataCount);
454 }
455 else
456 {
458
459 while (DataCount--)
460 {
461 ULONG CurrentPort = Port;
462 ULONG Count;
463 UCHAR NewDataSize = DataSize;
464
465 /* Write dword */
466 Count = NewDataSize >> 2; // NewDataSize / sizeof(ULONG);
467 NewDataSize = NewDataSize & 3; // NewDataSize % sizeof(ULONG);
468 while (Count--)
469 {
470 IOWriteD(CurrentPort, *(PULONG)Address);
471 CurrentPort += sizeof(ULONG);
472 Address += sizeof(ULONG);
473 }
474
475 /* Write word */
476 Count = NewDataSize >> 1; // NewDataSize / sizeof(USHORT);
477 NewDataSize = NewDataSize & 1; // NewDataSize % sizeof(USHORT);
478 while (Count--)
479 {
480 IOWriteW(CurrentPort, *(PUSHORT)Address);
481 CurrentPort += sizeof(USHORT);
482 Address += sizeof(USHORT);
483 }
484
485 /* Write byte */
486 Count = NewDataSize; // NewDataSize / sizeof(UCHAR);
487 // NewDataSize = NewDataSize % sizeof(UCHAR);
488 while (Count--)
489 {
490 IOWriteB(CurrentPort, *(PUCHAR)Address);
491 CurrentPort += sizeof(UCHAR);
492 Address += sizeof(UCHAR);
493 }
494 }
495 }
496}
VOID IOWriteB(USHORT Port, UCHAR Buffer)
Definition: io.c:111
VOID IOWriteW(USHORT Port, USHORT Buffer)
Definition: io.c:206
VOID IOWriteD(USHORT Port, ULONG Buffer)
Definition: io.c:287
VOID IOWriteStrW(USHORT Port, PUSHORT Buffer, ULONG Count)
Definition: io.c:229
VOID IOWriteStrD(USHORT Port, PULONG Buffer, ULONG Count)
Definition: io.c:304
VOID IOWriteStrB(USHORT Port, PUCHAR Buffer, ULONG Count)
Definition: io.c:133

Referenced by CpuInitialize().

◆ IOReadB()

UCHAR IOReadB ( USHORT  Port)

Definition at line 64 of file io.c.

65{
67 IoPortProc[Port].IoHandlers.InB)
68 {
70 }
72 IoPortProc[Port].VddIoHandlers.inb_handler)
73 {
74 UCHAR Data;
77 return Data;
78 }
79 else
80 {
81 /* Return an empty port byte value */
82 DPRINT("Read from unknown port: 0x%X\n", Port);
83 return 0xFF;
84 }
85}
#define NULL
Definition: types.h:112
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define ASSERT(a)
Definition: mode.c:44
#define MAXWORD
#define DPRINT
Definition: sndvol32.h:73
VDD_IO_HANDLERS VddIoHandlers
Definition: io.c:49
EMULATOR_IO_HANDLERS IoHandlers
Definition: io.c:52
EMULATOR_INB_PROC InB
Definition: io.c:24
PFNVDD_INB inb_handler
Definition: nt_vdd.h:145
EMULATOR_IOPORT_HANDLERS IoPortProc[EMULATOR_MAX_IOPORTS_NUM]
Definition: io.c:59
HANDLE hVdd
Definition: testvdd.c:87

Referenced by Bios32Post(), BiosBootstrapLoader(), BiosHandleMasterPicIRQ(), BiosHandleSlavePicIRQ(), BiosKeyboardIrq(), BiosMiscService(), BiosTimeService(), DisableMouseInt(), DosMouseIrq(), EmulatorReadIo(), EnableMouseInt(), EraseMouseCursor(), InitializeBiosData(), IOReadStrB(), IOReadW(), PaintMouseCursor(), PicSetIRQMask(), ReadMouseData(), VbeInitialize(), VbeResetExtendedRegisters(), VbeService(), VbeSetExtendedRegisters(), VgaSetRegisters(), VgaSetSinglePaletteRegister(), VidBiosClearScreen(), VidBiosDrawGlyph(), VidBiosSyncCursorPosition(), and VidBiosVideoService().

◆ IOReadD()

ULONG IOReadD ( USHORT  Port)

Definition at line 252 of file io.c.

253{
255 IoPortProc[Port].IoHandlers.InD)
256 {
258 }
259 else
260 {
261 USHORT Low, High;
262
263 // FIXME: Is it ok on Little endian and Big endian ??
264 Low = IOReadW(Port);
265 High = IOReadW(Port + sizeof(USHORT));
266 return MAKELONG(Low, High);
267 }
268}
@ High
Definition: strmini.h:378
@ Low
Definition: strmini.h:380
EMULATOR_IND_PROC InD
Definition: io.c:26
#define MAKELONG(a, b)
Definition: typedefs.h:249

Referenced by EmulatorReadIo(), and IOReadStrD().

◆ IOReadStrB()

VOID IOReadStrB ( USHORT  Port,
PUCHAR  Buffer,
ULONG  Count 
)

Definition at line 88 of file io.c.

91{
93 IoPortProc[Port].IoHandlers.InsB)
94 {
96 }
98 IoPortProc[Port].VddIoHandlers.insb_handler)
99 {
100 ASSERT(Port <= MAXWORD);
101 ASSERT(Count <= MAXWORD);
103 }
104 else
105 {
106 while (Count--) *Buffer++ = IOReadB(Port);
107 }
108}
unsigned short WORD
Definition: ntddk_ex.h:93
EMULATOR_INSB_PROC InsB
Definition: io.c:28
PFNVDD_INSB insb_handler
Definition: nt_vdd.h:147

Referenced by EmulatorReadIo().

◆ IOReadStrD()

VOID IOReadStrD ( USHORT  Port,
PULONG  Buffer,
ULONG  Count 
)

Definition at line 271 of file io.c.

274{
276 IoPortProc[Port].IoHandlers.InsD)
277 {
279 }
280 else
281 {
282 while (Count--) *Buffer++ = IOReadD(Port);
283 }
284}
EMULATOR_INSD_PROC InsD
Definition: io.c:30

Referenced by EmulatorReadIo().

◆ IOReadStrW()

VOID IOReadStrW ( USHORT  Port,
PUSHORT  Buffer,
ULONG  Count 
)

Definition at line 183 of file io.c.

186{
188 IoPortProc[Port].IoHandlers.InsW)
189 {
191 }
193 IoPortProc[Port].VddIoHandlers.insw_handler)
194 {
195 ASSERT(Port <= MAXWORD);
196 ASSERT(Count <= MAXWORD);
198 }
199 else
200 {
201 while (Count--) *Buffer++ = IOReadW(Port);
202 }
203}
EMULATOR_INSW_PROC InsW
Definition: io.c:29
PFNVDD_INSW insw_handler
Definition: nt_vdd.h:148

Referenced by EmulatorReadIo().

◆ IOReadW()

USHORT IOReadW ( USHORT  Port)

Definition at line 156 of file io.c.

157{
159 IoPortProc[Port].IoHandlers.InW)
160 {
162 }
164 IoPortProc[Port].VddIoHandlers.inw_handler)
165 {
166 USHORT Data;
167 ASSERT(Port <= MAXWORD);
169 return Data;
170 }
171 else
172 {
173 UCHAR Low, High;
174
175 // FIXME: Is it ok on Little endian and Big endian ??
176 Low = IOReadB(Port);
177 High = IOReadB(Port + sizeof(UCHAR));
178 return MAKEWORD(Low, High);
179 }
180}
EMULATOR_INW_PROC InW
Definition: io.c:25
PFNVDD_INW inw_handler
Definition: nt_vdd.h:146
#define MAKEWORD(a, b)
Definition: typedefs.h:248

Referenced by EmulatorReadIo(), IOReadD(), and IOReadStrW().

◆ IOWriteB()

◆ IOWriteD()

VOID IOWriteD ( USHORT  Port,
ULONG  Buffer 
)

Definition at line 287 of file io.c.

289{
291 IoPortProc[Port].IoHandlers.OutD)
292 {
294 }
295 else
296 {
297 // FIXME: Is it ok on Little endian and Big endian ??
299 IOWriteW(Port + sizeof(USHORT), HIWORD(Buffer));
300 }
301}
#define LOWORD(l)
Definition: pedump.c:82
EMULATOR_OUTD_PROC OutD
Definition: io.c:34
#define HIWORD(l)
Definition: typedefs.h:247

Referenced by EmulatorWriteIo(), and IOWriteStrD().

◆ IOWriteStrB()

VOID IOWriteStrB ( USHORT  Port,
PUCHAR  Buffer,
ULONG  Count 
)

Definition at line 133 of file io.c.

136{
138 IoPortProc[Port].IoHandlers.OutsB)
139 {
141 }
143 IoPortProc[Port].VddIoHandlers.outsb_handler)
144 {
145 ASSERT(Port <= MAXWORD);
146 ASSERT(Count <= MAXWORD);
148 }
149 else
150 {
151 while (Count--) IOWriteB(Port, *Buffer++);
152 }
153}
EMULATOR_OUTSB_PROC OutsB
Definition: io.c:36
PFNVDD_OUTSB outsb_handler
Definition: nt_vdd.h:151

Referenced by EmulatorWriteIo().

◆ IOWriteStrD()

VOID IOWriteStrD ( USHORT  Port,
PULONG  Buffer,
ULONG  Count 
)

Definition at line 304 of file io.c.

307{
309 IoPortProc[Port].IoHandlers.OutsD)
310 {
312 }
313 else
314 {
315 while (Count--) IOWriteD(Port, *Buffer++);
316 }
317}
EMULATOR_OUTSD_PROC OutsD
Definition: io.c:38

Referenced by EmulatorWriteIo().

◆ IOWriteStrW()

VOID IOWriteStrW ( USHORT  Port,
PUSHORT  Buffer,
ULONG  Count 
)

Definition at line 229 of file io.c.

232{
234 IoPortProc[Port].IoHandlers.OutsW)
235 {
237 }
239 IoPortProc[Port].VddIoHandlers.outsw_handler)
240 {
241 ASSERT(Port <= MAXWORD);
242 ASSERT(Count <= MAXWORD);
244 }
245 else
246 {
247 while (Count--) IOWriteW(Port, *Buffer++);
248 }
249}
EMULATOR_OUTSW_PROC OutsW
Definition: io.c:37
PFNVDD_OUTSW outsw_handler
Definition: nt_vdd.h:152

Referenced by EmulatorWriteIo().

◆ IOWriteW()

VOID IOWriteW ( USHORT  Port,
USHORT  Buffer 
)

Definition at line 206 of file io.c.

208{
210 IoPortProc[Port].IoHandlers.OutW)
211 {
213 }
215 IoPortProc[Port].VddIoHandlers.outw_handler)
216 {
217 ASSERT(Port <= MAXWORD);
219 }
220 else
221 {
222 // FIXME: Is it ok on Little endian and Big endian ??
224 IOWriteB(Port + sizeof(UCHAR), HIBYTE(Buffer));
225 }
226}
#define LOBYTE(W)
Definition: jmemdos.c:487
#define HIBYTE(W)
Definition: jmemdos.c:486
EMULATOR_OUTW_PROC OutW
Definition: io.c:33
PFNVDD_OUTW outw_handler
Definition: nt_vdd.h:150

Referenced by EmulatorWriteIo(), IOWriteD(), and IOWriteStrW().

◆ RegisterIoPort()

VOID RegisterIoPort ( USHORT  Port,
EMULATOR_INB_PROC  InHandler,
EMULATOR_OUTB_PROC  OutHandler 
)

Definition at line 320 of file io.c.

323{
324 if (IoPortProc[Port].IoHandlers.InB == NULL)
325 IoPortProc[Port].IoHandlers.InB = InHandler;
326 else
327 DPRINT1("IoPortProc[0x%X].IoHandlers.InB already registered\n", Port);
328
329 if (IoPortProc[Port].IoHandlers.OutB == NULL)
330 IoPortProc[Port].IoHandlers.OutB = OutHandler;
331 else
332 DPRINT1("IoPortProc[0x%X].IoHandlers.OutB already registered\n", Port);
333
334 /* We hold the I/O port internally */
336}
#define DPRINT1
Definition: precomp.h:8

Referenced by CmosInitialize(), DmaInitialize(), PicInitialize(), PitInitialize(), PpiInitialize(), PS2Initialize(), VgaInitialize(), and VgaWritePort().

◆ UnregisterIoPort()

VOID UnregisterIoPort ( USHORT  Port)

Definition at line 338 of file io.c.

339{
340 /*
341 * Put automagically all the fields to zero:
342 * the hVdd gets unregistered as well as all the handlers.
343 */
344 // IoPortProc[Port] = {NULL};
346}
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262

Referenced by VgaWritePort().

◆ VDDDeInstallIOHook()

VOID WINAPI VDDDeInstallIOHook ( IN HANDLE  hVdd,
IN WORD  cPortRange,
IN PVDD_IO_PORTRANGE  pPortRange 
)

Definition at line 565 of file io.c.

568{
569 WORD i;
570
571 /* Check validity of the VDD handle */
572 if (hVdd == NULL || hVdd == INVALID_HANDLE_VALUE)
573 {
575 return;
576 }
577
578 /* Loop for each range of I/O ports */
579 while (cPortRange--)
580 {
581 /* Unregister the range of I/O ports */
582 for (i = pPortRange->First; i <= pPortRange->Last; ++i)
583 {
584 /*
585 * Don't do anything if we don't own the I/O port.
586 */
587 if (IoPortProc[i].hVdd != hVdd)
588 {
589 DPRINT1("IoPortProc[0x%X] owned by somebody else\n", i);
590 continue;
591 }
592
593 /*
594 * Put automagically all the fields to zero:
595 * the hVdd gets unregistered as well as all the handlers.
596 */
597 // IoPortProc[i] = {NULL};
599 }
600
601 /* Go to the next range */
602 ++pPortRange;
603 }
604}
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define SetLastError(x)
Definition: compat.h:752
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

◆ VDDInstallIOHook()

BOOL WINAPI VDDInstallIOHook ( IN HANDLE  hVdd,
IN WORD  cPortRange,
IN PVDD_IO_PORTRANGE  pPortRange,
IN PVDD_IO_HANDLERS  IoHandlers 
)

Definition at line 502 of file io.c.

506{
507 WORD i;
508
509 /* Check validity of the VDD handle */
510 if (hVdd == NULL || hVdd == INVALID_HANDLE_VALUE)
511 {
513 return FALSE;
514 }
515
516 /* Loop for each range of I/O ports */
517 while (cPortRange--)
518 {
519 /* Register the range of I/O ports */
520 for (i = pPortRange->First; i <= pPortRange->Last; ++i)
521 {
522 /*
523 * Don't do anything if the I/O port is already
524 * handled internally or externally.
525 */
526 if (IoPortProc[i].hVdd != NULL)
527 {
528 DPRINT1("IoPortProc[0x%X] already registered\n", i);
529 continue;
530 }
531
532 /* Register wrt. the VDD */
534
535 /* Disable the internal handlers */
539
543
547
551
552 /* Save our handlers */
553 IoPortProc[i].VddIoHandlers = *IoHandlers;
554 }
555
556 /* Go to the next range */
557 ++pPortRange;
558 }
559
560 return TRUE;
561}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117

Variable Documentation

◆ IoPortProc