/* * */ #include #include #include "global.h" #include "kbd.h" #include "al6000.h" unsigned char id[] = {0x05, 0x97, 0x33, 0x30}; static FLAG chk_slot(int slot); /*************************************************************************** * * chk_slot(...) * * Return - true, if slot is occupied. * ***************************************************************************/ static FLAG chk_slot(int slot) { unsigned int io_addr; int x; io_addr = (slot << 12) + 0xc80; for(x = 0; x < 4; x++, io_addr++) if (inport(io_addr) != id[x]) return(FALSE); return(TRUE); } /*************************************************************************** * * void_cache(...) * ***************************************************************************/ #define MAX_SLOT 8 #define MBX_BASE_OLD 0x10 #define MBX_BASE 0x17 #define ADAPTER_IRQ_REG 0x0D #define VOID_COMMAND 0x81 #define SEND_COMMAND 0x80 void al6_reset() { FLAG found = FALSE; int x, io_base; long timeout; for(x = 0; x < MAX_SLOT; x++) /* Search slots */ { if(chk_slot(x)) { /* Any AL6s? */ found = TRUE; /* One AL6 found */ printf("AL6x00 found EISA Bus slot #%d...\n",x); if (kbd_get_yn("Reset")) { io_base = (x << 12) + 0xc80; outport(io_base+MBX_BASE, VOID_COMMAND); outport(io_base+ADAPTER_IRQ_REG, SEND_COMMAND); timeout = 1; while((inport(io_base+ADAPTER_IRQ_REG) & SEND_COMMAND) && timeout) timeout++; } } } if (!found) /* No AL6s found? */ error("Could not reset, no AL6000s found"); }