#include "precomp.h" #pragma hdrstop #include "alphaapi.h" #define IO_MEMORY_SPACE 0 #define IO_PORT_SPACE 1 VOID InputIoAddress( IN ULONG Size, IN ULONG AddressSpace, IN PUCHAR Args ); VOID OutputIoAddress( IN ULONG Size, IN ULONG AddressSpace, IN PUCHAR Args ); DECLARE_API( inprtb ) /*++ Routine Description: Arguments: args - Return Value: None --*/ { InputIoAddress( 1, IO_PORT_SPACE, (PSTR)args ); return; } DECLARE_API( inprtw ) /*++ Routine Description: Arguments: args - Return Value: None --*/ { InputIoAddress( 2, IO_PORT_SPACE, (PSTR)args ); return; } DECLARE_API( inprtd ) /*++ Routine Description: Arguments: args - Return Value: None --*/ { InputIoAddress( 4, IO_PORT_SPACE, (PSTR)args ); return; } DECLARE_API( inmb ) /*++ Routine Description: Arguments: args - Return Value: None --*/ { InputIoAddress( 1, IO_MEMORY_SPACE, (PSTR)args ); return; } DECLARE_API( inmw ) /*++ Routine Description: Arguments: args - Return Value: None --*/ { InputIoAddress( 2, IO_MEMORY_SPACE, (PSTR)args ); return; } DECLARE_API( inmd ) /*++ Routine Description: Arguments: args - Return Value: None --*/ { InputIoAddress( 4, IO_MEMORY_SPACE, (PSTR)args ); return; } DECLARE_API( outprtb ) /*++ Routine Description: Arguments: args - Return Value: None --*/ { OutputIoAddress( 1, IO_PORT_SPACE, (PSTR)args ); return; } DECLARE_API( outprtw ) /*++ Routine Description: Arguments: args - Return Value: None --*/ { OutputIoAddress( 2, IO_PORT_SPACE, (PSTR)args ); return; } DECLARE_API( outprtd ) /*++ Routine Description: Arguments: args - Return Value: None --*/ { OutputIoAddress( 4, IO_PORT_SPACE, (PSTR)args ); return; } DECLARE_API( outmb ) /*++ Routine Description: Arguments: args - Return Value: None --*/ { OutputIoAddress( 1, IO_MEMORY_SPACE, (PSTR)args ); return; } DECLARE_API( outmw ) /*++ Routine Description: Arguments: args - Return Value: None --*/ { OutputIoAddress( 2, IO_MEMORY_SPACE, (PSTR)args ); return; } DECLARE_API( outmd ) /*++ Routine Description: Arguments: args - Return Value: None --*/ { OutputIoAddress( 4, IO_MEMORY_SPACE, (PSTR)args ); return; } VOID InputIoAddress( IN ULONG Size, IN ULONG AddressSpace, IN PUCHAR Args ) /*++ Routine Description: Reads data from the specified I/O space address (port or memory). Arguments: Size - the size in bytes for the read operation. Args - the I/O space address to read from. Return Value: None. --*/ { ULONG ioAddress = 0xffffffff; ULONG data = 0; UCHAR Format[] = "%s%01lx\\%08lx: %01lx\n"; sscanf( Args, "%lx", &ioAddress ); if ( ioAddress == 0xffffffff ) { dprintf("no I/O address specified\n"); return; } Format[17] = (UCHAR)('0' + (Size * 2 )); //dprintf("%s\n", Format); ReadIoSpaceEx( ioAddress, &data, &Size, BusInterfaceType, BusNumber, AddressSpace); if (Size > 0) { dprintf(Format, BusInterfaceName, BusNumber, ioAddress, data); } else { dprintf(" %08lx: ", ioAddress); while (Size--) { dprintf("??"); } dprintf("\n"); } } VOID OutputIoAddress( IN ULONG Size, IN ULONG AddressSpace, IN PUCHAR Args ) /*++ Routine Description: Sets the interface type and bus number for subsequent INP, OUTP, INM, OUTM commands. Arguments: Size - the size in bytes of the operation. Args - the port address to write to. Return Value: None. --*/ { ULONG ioAddress = 0xffffffff; ULONG data = 0; sscanf( Args, "%lx %lx", &ioAddress, &data ); if ( ioAddress == 0xffffffff ) { dprintf("no I/O address specified\n"); return; } WriteIoSpaceEx( ioAddress, data, &Size, BusInterfaceType, BusNumber, AddressSpace); }