/*  Beispiele:
	Die folgende Funktion zeigt eine Möglichkeit auf, wie die
    I/O-Adresse einer KOLTER-Karte ermittelt werden kann.

    Als übergabewert der Funktion ist die Device ID der
    entsprechenden Karte anzugeben (Beispiel: PCI16/16 = 0x0010).

    Der Rückgabewert der Funktion beinhaltet die I/O-Adresse
    der Karte oder 0, wenn keine Karte gefunden wurde bzw. keine
    Plug'n Play-Adresse vergeben wurde.
*/


#define VENDOR_KOLTER 0x1001

extern unsigned long far pascal INT_1A( unsigned long reax,
					unsigned long rebx,
					unsigned long recx,
					unsigned long redi);

unsigned long int PciGetIO(Device) {

unsigned long reax;
unsigned long rebx;
unsigned long recx;
unsigned long redi;
unsigned long ret_ecx;

unsigned int slot_no;
unsigned long io_adr;
unsigned long ven_dev;
unsigned long K_ven_dev;

io_adr = 0;

/* Device und VendorID werden verknüpft */
K_ven_dev = ((long) Device << 16) | VENDOR_KOLTER;

for (slot_no = 0;(slot_no <= 0x00F8) && (io_adr == 0);slot_no += 8) {
	ven_dev=INT_1A(0xb10aL,(long) slot_no,0L,0L);

        if (K_ven_dev == ven_dev)       /* Karte von KOLTER wurde gefunden*/
        io_adr=INT_1A(0xb10aL,(long) slot_no,0L,0x0010L);
}

io_adr &= 0xFFFFFFF0;                   /* I/O-Adresse wird maskiert */
return(io_adr);                         /* Rückgabe der I/O-Adresse  */

}
