Summary: I/O to a micro channel adapter card
Lars Soltau
lso at softpro.stgt.sub.org
Fri May 3 02:36:04 AEST 1991
I think enough time has passed since I posted my request for information about
performing I/O with microchannel adapters from a device driver.
First, I want to thank all of you who mailed me a reply. Without your help I
would have had to abandon my project.
The most important mail I received was from Michael Massa
(massa at eniac.seas.upenn.edu), who mailed me the following two pieces of code
and an explanation.
-------------------------------------------------------------------------------
Sample code to set a POS register:
#include <sys/adspace.h>
#include <sys/iocc.h>
#include <sys/ioacc.h>
int bus_val;
/* Set POS 2 to the correct value */
pos2 = ???;
bus_val = IOCC_ATT(IOCC_BID, 0);
pptr = bus_val + IO_IOCC + POSREG(2, slot_number);
BUSIO_PUTC(pptr, pos2); /* Load the contents into POS2 */
IOCC_DET(bus_val);
Sample code for writing to a Micro Channel device
#define BUS_ID (0x82000030) /* bus id to gain access to MCA bus */
/* this usually comes from the ODM PdAt entry */
unsigned char *p;
ulong bus_val;
bus_val = BUSIO_ATT(BUS_ID, 0);
p = (unsigned char *) (bus_val + 0x9876); /* 0x9876 is the reg addr */
BUSIO_PUTC(p, 0x12);
BUSIO_DET(bus_val);
Basically what is happening is that you are attaching the bus I/O address
space to your own virtual address space - the BUSIO_ATT macro calls the
io_att() kernel call.
-------------------------------------------------------------------------------
--
Lars Soltau lso at softpro.stgt.sub.org
#include <stddiscl.h>
More information about the Comp.unix.aix
mailing list