Hey Leute
Ich hab da mal wieder ein Problem
Da nun mehr als 2 devices von meinem OS unterstützt werden, hab ich mir gedacht, dass ich mal eine Netzwerkkarte ausprobiere.
Nun benutze ich die PCnet Fast III.
Das Problem:
Die Netzwerkkarte hat den selben IRQ wie die Soundkarte vom BIOS bekommen, soweit so gut.
Nun hab ich versucht diese IRQ zu ändern, nach dem schreiben lese ich das Register nochmal aus, um sicher zu gehen, dass es auch wirklich geändert wurde - was es auch tut.
Dennoch spammen die Karten weiterhin die alte IRQ als ob nichts geändert wurde.
Muss ich das Ändern der IRQ noch noch irgendwie dem PIC mitteilen?
Hier ein wenig code:
uint32_t data = pci_read_dword(pci_info.bus, pci_info.slot, pci_info.function, 60) & 0xFFFFFF00;
pci_write_dword(pci_info.bus, pci_info.slot, pci_info.function, 60, data | new_irq);
pci_info.irq = pci_read_word(pci_info.bus, pci_info.slot, pci_info.function, 60) & 0x00FF;
Danach hab ich IRQ Sharing versucht, es läuft in QEMU auch ganz gut, aber in VirtualBox ist das Bit einfach nie gesetzt und der handler returned direkt:
uint32_t dev_status = pci_read_word(pcnet_device.bus, pcnet_device.slot, pcnet_device.function, 6);
if(!(dev_status & 8))
return false;
Das 10. Bit wurde natürlich auch gecleared:
pci_write_word(pci_info->bus, pci_info->slot, pci_info->function, 4, 0x5);
Vielen Dank im Vorraus!