/* Version 1.0 04.04.2001 */ #include #include #include #include unsigned int Qeinheit; unsigned long vendor; unsigned long adresse; unsigned int einheit; unsigned int device; unsigned long qd; unsigned long adresse4; unsigned long pci_rd_cfg(unsigned int einheit, unsigned int adresse); void pci_wr_cfg(unsigned int einheit, unsigned int adresse, unsigned long wert); int main (int argc,char *argv[]) { if (argc==1 || argv[1][0]=='?') { printf("\nWARNUNG !" "\nDieses Programm erm”glicht die manuelle Žnderung der I/O-Adresse einer." "\nQUANCOM PCI-Karte." "\nDiese Žnderung kann zu Konflikten mit anderen Karten fhren und einen" "\nDatenverlust oder physikalische Sch„den des Rechners verursachen." "\n\nFr Sch„den, die durch die Benutzung des Programms entstehen, bernimmt" "\nder Programmierer keine Haftung!"); printf("\n\n\nEingabebeispiele:" "\n\n SETIOMEM 10 1D0 (Die Adresse der WATCHDOG-Karte wird auf 0x1D0 gesetzt)" "\n\n SETIOMEM 10 1D0 x (wie oben,jedoch ohne Hinweistext)"); exit(0); } /*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/ if (argc > 4 || argc ==2) { printf("\nFehlerhafte Eingabe"); exit(0); } /*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/ if ((argc == 3) || (argc == 4)) { sscanf(argv[2],"%08lx",&adresse); sscanf(argv[1],"%4x",&device); if ((0x0100 < adresse < 0xffff) && !(adresse & 0x0000000F)) { if(argc==3 || (argc==4 && argv[3][0]!='x' && argv[3][0]!='X')) { printf("\nWARNUNG !" "\nDieses Programm erm”glicht die manuelle Žnderung der I/O-Adresse einer." "\nQUANCOM PCI-Karte." "\nDiese Žnderung kann zu Konflikten mit anderen Karten fhren und einen" "\nDatenverlust oder physikalische Sch„den des Rechners verursachen." "\n\nFr Sch„den, die durch die Benutzung des Programms entstehen, bernimmt" "\nder Programmierer keine Haftung!"); printf("\n\n\n Adress„nderung durchfhren? (j/n)"); if (getch() != 'j') exit(1); printf("\n"); } qd = device; qd = qd << 16; qd |= 0x8008; Qeinheit=0xFFFF; for (einheit=0;einheit<=0x00ff;einheit+=8) { vendor = pci_rd_cfg(einheit, 0x0000); Qeinheit=(vendor==qd)?einheit:Qeinheit; } if(Qeinheit==0xFFFF) printf("%cDie Karte konnte nicht gefunden werden\n",7); else { printf("Die voreingestellte Adresse war 0x%04X",(pci_rd_cfg(Qeinheit, 0x0010) & 0xFFFE)); pci_wr_cfg(Qeinheit,0x10,adresse); printf("\nDie neue Adresse ist 0x%04X",(pci_rd_cfg(Qeinheit, 0x0010) & 0xFFFE)); /*Bit 0 von Adresse 4 enabled (bei 1) die Ausdekodierung der I/O-Adresse*/ /*Dieses Bit wird hiermit gelesen*/ adresse4=pci_rd_cfg(Qeinheit, 0x0004); pci_wr_cfg(Qeinheit, 0x0004, adresse4 | 1); }/*else ENDE, wenn eine Karte da ist*/ } } } /*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/