RS/6000 Device Driver Problems.

Paul Chamberlain tif at doorstop.austin.ibm.com
Tue Nov 27 02:04:19 AEST 1990


andre at eicon.eicon.qc.ca (Andre Scheunemann) writes:
>    mem_addr = BUSMEM_ATT(bus_id, card_mem_addr);
>    data = BUSIO_GETC(mem_addr);	/* this causes a system crash !!!!! */

I would make sure that the bus_id is correct and that the
card_mem_addr does in fact have the correct address of the card.

If you have the Hardware Technical Reference -- General Information, you
should already be familiar with chapter 4.  I see some particularly useful
information about "Load and Store Error Conditions" on pages 32-34.  You
should be able to see the Channel Status Register (CSR) from the debugger
if you turn the debugger on.  Use "bosboot -a -D" I think.  I would almost
bet that the first nybble is a "0xB" for "Card Selected Feedback Error".
This means that whatever you did, no card answered to that address.

FYI, the crashes can be prevented and recovered from.  A Data Storage
Interrupt (DSI) eventually causes a longjmpx() which is the opposite
of setjmpx().  These routines handle a _stack_ of recovery routines.
If the stack is empty it crashes.  A routine called pio_assist()
assists in doing PIO and handling errors.  I think that the library
version of this routine was left out on the very first ship of AIX 3.1.
I _think_ it is present in all others.

Paul Chamberlain | I do NOT represent IBM.     tif at doorstop, sc30661 at ausvm6
512/838-7008     | ...!cs.utexas.edu!ibmchs!auschs!doorstop.austin.ibm.com!tif



More information about the Comp.unix.wizards mailing list