4. Type 0
31 - 24 23 - 16 15 - 8 7-0
1 00h Device ID Vendor ID
2 04h Status Command
3 08h Class code Subclass Prog IF Revision ID
4 0Ch BIST Header type Latency Timer Cache Line Size
5 10h Base address #0 (BAR0)
6 14h Base address #1 (BAR1)
7 18h Base address #2 (BAR2)
8 1Ch Base address #3 (BAR3)
9 20h Base address #4 (BAR4)
10 24h Base address #5 (BAR5)
11 28h Cardbus CIS Pointer
12 2Ch Subsystem ID Subsystem Vendor ID
13 30h Expansion ROM base address
Capabilities
14 34h Reserved
Pointer
15 38h Reserved
16 3Ch Max latency
M l t Min Grant
Mi G t Interrupt PIN
I t t Interrupt Line
I t t Li
4
5. コンフィグレーション空間 … PF on Host
[root@dut 0000:03:00.1]# lspci –x
03:00.0 Ethernet controller: Intel Corporation 82599EB 10 Gigabit TN Network Connection (rev 01)
Vendor ID = 8086 (Intel)
Device ID = 151c (82599EB 10 Gigabit TN Network Connection) Header Type = 80
bit 7 : Multi function
Command = 0407 bit 6‐0 : non‐bridge function
bit 0 : IO enable
bit 1 : Mem enable Revision ID = 01 Class code = 02 (Network Controller)
Status = 0010
00: 86 80 1c 15 07 04 10 00 01 00 00 02 10 00 80 00
10: 04 00 20 df 00 00 00 00 c1 ec 00 00 00 00 00 00
20: 04 80 1f df 00 00 00 00 00 00 00 00 86 80 2c a0
30: 00 00 00 00 40 00 00 00 00 00 00 00 0e 02 00 00
BAR#01 = 0000 0000 df20 0004 (Mem, 64bit) IRQ PIN = INTB#
BAR#23 = 0000 0000 0000 ecc1 IRQ Line = 0e
(IO, 32bit)
BAR#45 = 0000 0000 df1f 8004 (M
0000 0000 df1f 8004 (Mem, 64bit)
64bi )
Subsystem Vendor ID = 8086 (Intel)
PCI IDs = Vendor ID + Device ID Subsystem ID = a02c (***********)
http://pciids.sourceforge.net/
p p g
http://pci‐ids.ucw.cz/read/PC/8086 !!PCIはリトルエンディアン!!
5
6. コンフィグレーション空間 … VF on Host
[root@dut 0000:03:00.1]# lspci –x
03:10.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
Vendor ID = ffff (n/a)
/
Device ID = ffff (n/a) Header Type = 80
bit 7 : Single function
Command = 0004 bit 6‐0 : non‐bridge function
bit 0 : IO disable
bit 1 : Mem disable Revision ID = 01 Class code = 02 (Network Controller)
Status = 0010
00: ff ff ff ff 04 00 10 00 01 00 00 02 00 00 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 86 80 2c a0
30: 00 00 00 00 70 00 00 00 00 00 00 00 00 00 00 00
BAR#01 = 0000 0000 0000 0000 IRQ PIN = n/a
BAR#23 = 0000 0000 0000 0000 IRQ Line = 00
BAR#45 = 0000 0000 0000 0000
0000 0000 0000 0000
Subsystem Vendor ID = 8086 (Intel)
PCI IDs = Vendor ID + Device ID Subsystem ID = a02c (***********)
http://pciids.sourceforge.net/
p p g
http://pci‐ids.ucw.cz/read/PC/8086 !!PCIはリトルエンディアン!!
6
7. コンフィグレーション空間 … VF on Guest
[root@dutvm‐sriov ~]# lspci ‐ x
00:03.0 Ethernet controller: Intel Corporation 82559 Ethernet Controller Virtual Function (rev 01)
Vendor ID = 8086 (Intel)
Device ID = 10ed (82559 Ethernet Controller Virtual Function) Header Type = 80
bit 7 : Single function
Command = 0407 bit 6‐0 : non‐bridge function
bit 0 : IO enable
bit 1 : Mem enable Revision ID = 01 Class code = 02 (Network Controller)
Status = 0010
00: 86 80 ed 10 07 04 10 00 01 00 00 02 00 00 00 00
10: 00 00 02 f2 00 00 00 00 00 00 00 00 00 40 02 f2
20: 00 00 00 00 00 00 00 00 00 00 00 00 86 80 2c a0
30: 00 00 00 00 a0 00 00 00 00 00 00 00 00 00 00 00
BAR#0 = f202 0000 (Mem, 32bit) IRQ PIN = n/a
BAR#3 = f202 4000 (Mem, 32bit) IRQ Line = 00
BAR#45 = 0000 0000 0000 0000
0000 0000 0000 0000
Subsystem Vendor ID = 8086 (Intel)
PCI IDs = Vendor ID + Device ID Subsystem ID = a02c (***********)
http://pciids.sourceforge.net/
p p g
http://pci‐ids.ucw.cz/read/PC/8086 !!PCIはリトルエンディアン!!
7
8. PF on Host
[root@dut ~]# lspci ‐v ‐s 03:00.0
03:00.0 Ethernet controller: Intel Corporation 82599EB 10 Gigabit TN Network Connection (rev 01)
Subsystem: Intel Corporation Device a02c
b l i i
Flags: bus master, fast devsel, latency 0, IRQ 45
Memory at df200000 (64‐bit, non‐prefetchable) [size=2M]
I/O ports at ecc0 [size=32]
Memory at df1f8000 (64‐bit, non‐prefetchable) [size=16K]
Capabilities: [40] Power Management version 3
Capabilities: [50] MSI: Enable‐ Count=1/1 Maskable+ 64bit+
Capabilities: [70] MSI X: Enable Count=64 Masked‐
Capabilities: [70] MSI‐X: Enable+ Count 64 Masked
Capabilities: [a0] Express Endpoint, MSI 00
Capabilities: [e0] Vital Product Data
Capabilities: [100] Advanced Error Reporting
Capabilities: [140] Device Serial Number 00‐1b‐21‐ff‐ff‐ce‐51‐c4
Capabilities: [140] Device Serial Number 00 1b 21 ff ff ce 51 c4
Capabilities: [150] Alternative Routing‐ID Interpretation (ARI)
Capabilities: [160] Single Root I/O Virtualization (SR‐IOV)
Kernel driver in use: ixgbe
Kernel modules: ixgbe
l d l i b
8
9. VF on Host / Guest 比較
[root@dut ~]# lspci ‐v ‐s 03:10.0
03:10.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
Subsystem: Intel Corporation Device a02c
Subsystem: Intel Corporation Device a02c
Flags: bus master, fast devsel, latency 0
[virtual] Memory at d0000000 (64‐bit, prefetchable) [size=16K]
[virtual] Memory at d0100000 (64‐bit, prefetchable) [size=16K]
Capabilities: [70] MSI‐X: Enable+ Count=3 Masked‐
p [ ]
Capabilities: [a0] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Capabilities: [150] Alternative Routing‐ID Interpretation (ARI)
Kernel driver in use: pci‐stub
Kernel modules: ixgbevf
l d l b f
[root@dutvm‐sriov ~]# lspci ‐v ‐s 00:03.0
00:03.0 Ethernet controller: Intel Corporation 82559 Ethernet Controller Virtual Function (rev 01)
Subsystem: Intel Corporation Device a02c
Subsystem: Intel Corporation Device a02c
Physical Slot: 3
Flags: bus master, fast devsel, latency 0
Memory at f2020000 (32‐bit, non‐prefetchable) [size=16K]
Memory at f2024000 (32‐bit, non‐prefetchable) [size=16K]
y ( , p )[ ]
Capabilities: [a0] Express Endpoint, MSI 00
Capabilities: [70] MSI‐x: Enable+ Count=3 Masked‐
Kernel driver in use: ixgbevf
Kernel modules: ixgbevf
9
10. IO v.s. Memory ‐ Mapped IO
• IO Mapped IO
– IO port (IO空間) を利用
– IO空間のアドレス=IOポートアドレス、ポート番号
– 1,2,4 Byte単位でのRead/Write
– IO Port専用のニーモニックがある。asm/io.h
• MMIO : Memory Mapped IO
– IO Portの代わりにメモリアクセスをハードウェアレベルでのデバイスへのアクセスに置換
– デバイスに割当られたアドレス範囲にメモリアクセスをすることにより、ドライバからデバイス
のレジスタRead/Write可能
– ドライバが動作する「仮想メモリアドレス」と、MMIO確保された「物理メモリアドレス」の違いに
注意
• (PCIe Root Bridge <‐> Device) は共通
PCIe Layer (PCI R
PCI L B id D i )
– Config TLP (Transaction Layer Packet) でアクセス
• 共通の抽象的なインタ フェ ス有り
共通の抽象的なインターフェース有り
– asm/iomap.h
– void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max len);
10