I/O ports, accessing from C
On SVR5 and SCO OpenServer 5,
I/O ports are accessed from a C routine
with the following functions:
 outb(port, value)
- 
outputs the least significant
byte of value to port.
 outw(port, value)
- 
outputs the least significant
2-byte word of value to port.
 outd(port, value)
- 
outputs the 4-byte double word
of value to port.
 value = inb(port)
- 
inputs a byte from port and
stores it in value.
 value = inw(port)
- 
inputs a word from port and stores it in value.
 value = ind(port)
- 
inputs a double word from
port and stores it in value.
On SVR5 and SCO OpenServer 5,
the C compiler converts inb(), outb(),
inw(), and outw()
directly to hardware instructions without
the overhead of a C function call
if the C file is compiled with at least
-Oi as part of the optimization flags.
If you compile with debugging,
(use the -g flag with the compile command)
then all the I/O calls in your source
become real C function calls.
This helps when using debuggers that can trace specific function calls.
These routines are not used in NFB drivers
on AIX 5L.
Instead, all access to the I/O registers
on the video card is performed
through the PCI bus memory-mapped I/O regions.
Use the
grafGetMemInfo(D3nfb)
function to obtain the address of the registers:
For example,
the following code is used in the
xxxInit( )
routine:
   	grafData *grafinfo = DDX_GRAFINFO(pScreen);
   	unsigned char *IOreg_ptr;
   	unsigned char *FrameBuffer_ptr;
   	
       	grafGetMemInfo(grafinfo, "REGS", NULL, NULL, &IOreg_ptr))
       	grafGetMemInfo(grafinfo, "APERTURE", NULL, NULL, &FrameBuffer_ptr))
See
``Porting SVR5 NFB drivers to AIX 5L''
for additional information about accessing
PCI configuration space
in AIX 5L drivers.
© 2005 The SCO Group, Inc.  All rights reserved.
OpenServer 6 and UnixWare (SVR5) HDK - June 2005