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空間主要包括裝置的控制暫存器和狀態暫存器,一般用於控制和查詢裝置的工作狀態以及少量資料的交換。配置空間主要用於向系統提供裝置自身的基...