PCI配置空間讀取

2021-10-18 18:27:56 字數 1546 閱讀 3736

1.拼湊出32位位址

bus有8位,dev有5位,fun有3位,最高位bit位為使能。

最高位要置1,也就是bit31置1,bit23 ~ 16是寫入bus number,bit15 ~ 11是device number,bit10 ~8是寫入function number.

如果要訪問pci裝置中bus number為00,device number 為1fh,function number為04的配置空間,

則32位位址應該是 1 ******x 00000000 11111 100 ****** 00

以4bit為單位,則是 1*** ***x 0000 0000 1111 1100 ***x xx00

2.使用0xcf8和0xcf9埠(0xcf8寫入位址,0xcf9讀取/修改數值)

把拼湊出的32bit位址,寫入0xcf8埠中。

然後從0xcf9埠中讀取出data。

如果要讀取bus number為00,device number 為1fh,

function number為04,register number 為04的數值

word enable = 1;

word bus = 00;

word dev= 0x1f;

word fun= 04;

word reg = 04;

dword addr = (enable<<31) | (bus << 16) | (dev<< 11) | (fun<< 8) | (reg); //32bit位址

用彙編實現,**如下:

cli

xor eax,eax

xor ebx,ebx

;enable

mov eax,1h

shl eax,31

;bus number

mov ebx,0

and ebx,0ffh

shl ebx,16

add eax,ebx

;device number

xor ebx,ebx

mov ebx,0x1f

and ebx,0ffh

shl ebx,11

add eax,ebx

;function number

xor ebx,ebx

mov ebx,4

and ebx,0ffh

shl ebx,8

add eax,ebx

;register

xor ebx,ebx

mov ebx,4

and ebx,0ffh

add eax,ebx

;read

mov dx,0cf8h

out dx,eax

mov dx,0cfch

in eax,dx

PCI的配置空間

pci的配置空間 主要討論如何去訪問pci配置空間和描述pci裝置的配置空間的定義和使用規則。理論上如何訪問pci配置空間的問題是屬於匯流排操作的一部分,但是和配置空間有著密切聯絡,有必要一起討論。下圖是pci架構的級聯圖。不同的bus就是通過bridge來連線的。每個pci bus上都可以掛載多個...

PCI配置空間簡介

配置空間中最重要的有 vendor id 廠商id。知名的裝置廠商的id。ffffh是乙個非法廠商id,可它來判斷pci裝置是否存在。device id 裝置id。某廠商生產的裝置的id。作業系統就是憑著 vendor id和device id 找到對應驅動程式的。class code 類 共三位元...

PCI裝置配置空間問題

pc機中包括三種空間 儲存器空間 i o空間 配置空間。儲存器空間主要包括記憶體 視訊記憶體 擴充套件rom 裝置緩衝區等,一般用於存放大量資料和進行資料塊交換。i o空間主要包括裝置的控制暫存器和狀態暫存器,一般用於控制和查詢裝置的工作狀態以及少量資料的交換。配置空間主要用於向系統提供裝置自身的基...