Zapis do portu 0cf8h kończy się niepowodzeniem z segfault
Mam procesor AMD modelu e2-2000. To jest rodzina 0fh. Według rodziny 0fh BKDG mam ten kod do odczytu identyfikatora urządzenia i dostawcy:
ReadPCIConfiguration:
movq $0x80000100, %rax
movq $0x0cf8, %rdx
outl %eax, %dx # sigsegv caught here
movq $0x0cfc, %rdx
inl %dx, %eax
ret
O ile wiem algorytm odczytu / zapisu konfiguracji PCI wygląda następująco:
wpisz numer docelowej magistrali, numer funkcji numeru urządzenia i numer przesunięcia lub rejestru do portu adresu konfiguracjiwykonać 1-, 2- lub 4-bajtową operację r / w z / do portu danych konfiguracyjnychPorty 0xcf8..0xcfb - port adresu konfiguracji (doubleword)
Znaczenie bitów:
31 - EnReg - włącz transakcję (R / W)24..31 - zarezerwowane (R / O)16..23 - BusNum (R / W)11..15 - DevNum (R / W)8..10 - FuncNum (R / W)2..7 - RegNum (R / W)0..1 - Zarezerwowane (R / O)Więc piszę do autobusu - 0, dev - 0, func - 1, reg - 00
czy robię coś źle?
(Używam skompilowanej i połączonej aplikacji z przestrzeni użytkownika, GNU / Debian "Wheezy" Linux 3.11.6)