/** Reads a 16-bit I/O port. Reads the 16-bit I/O port specified by Port. The 16-bit read value is returned. This function must guarantee that all I/O read and write operations are serialized. If 16-bit I/O port operations are not supported, then ASSERT(). If Port is not aligned on a 16-bit boundary, then ASSERT(). @param Port The I/O port to read. @return The value read. **/ UINT16 EFIAPI IoRead16 ( IN UINTN Port ) { UINT16 Value; ASSERT ((Port & 1) == 0); _ReadWriteBarrier (); Value = _inpw ((UINT16)Port); _ReadWriteBarrier (); return Value; }
bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize) { tagPort32Struct Port32Struct; DWORD dwBytesReturned; if (!IsWinIoInitialized) return false; if (IsNT) { switch (bSize) { case 1: *pdwPortVal = _inp(wPortAddr); break; case 2: *pdwPortVal = _inpw(wPortAddr); break; case 4: *pdwPortVal = _inpd(wPortAddr); break; } } else { Port32Struct.bSize = bSize; Port32Struct.wPortAddr = wPortAddr; return DeviceIoControl(hDriver, WINIO_READPORT, &Port32Struct, sizeof(Port32Struct), pdwPortVal, sizeof(DWORD), &dwBytesReturned, NULL); } return true; }
WORD pci_read_word(WORD bus, WORD dev, WORD func, BYTE offset ) { WORD target = func + ((dev & 0x1F) << 3) + ((bus & 0xFF) << 8) ; _outpd( 0xCF8, (DWORD)( target << 8 ) | 0x80000000UL | ((DWORD)offset & ~3 ) ); return (WORD)_inpw( 0xCFC + (offset & 0x2) ); }
ushort InPortWord(ushort port) { return _inpw(port); }
unsigned short MSVCRT__inpw( unsigned short port) { return _inpw(port); }