Escreva para a porta 0cf8h falha com segfault

Eu tenho um processador AMD do modelo e2-2000. Esta é a família 0fh. De acordo com a família 0fh BKDG eu tenho este código para ler o ID do dispositivo e do fornecedor:

ReadPCIConfiguration:
movq    $0x80000100, %rax
movq    $0x0cf8, %rdx
outl    %eax, %dx          # sigsegv caught here
movq    $0x0cfc, %rdx
inl     %dx, %eax
ret

Tanto quanto eu sei o algoritmo para ler / escrever configuração PCI é a seguinte:

gravar o número do barramento de destino, o número da função do número do dispositivo e o número do registro ou deslocamento para a porta de endereço de configuraçãoexecutar operação de 1, 2 ou 4 bytes de r / w da / para a porta de dados de configuração

Portas 0xcf8..0xcfb - porta de endereço de configuração (doubleword)

Bits significado:

31 - EnReg - habilita a transação (R ​​/ W)24..31 - reservado (R / O)16..23 - BusNum (R / W)11.15 - DevNum (R / W)8..10 - FuncNum (R / W)2.7 - RegNum (R / W)0..1 - Reservado (R / O)

Então, eu escrevo para bus - 0, dev - 0, func - 1, reg - 00

Estou fazendo algo errado?

(Eu corro o aplicativo compilado e vinculado do userspace, GNU / Debian "Wheezy" Linux 3.11.6)

questionAnswers(1)

yourAnswerToTheQuestion