手动解码pcie配置空间功能 - 例如

时间:2014-11-24 20:09:17

标签: pci pci-e

我没有运行o / s所以我无法使用像lspci这样的东西解码pcie(我希望lspci从文件中获取输入!)。

下面有一个十六进制转储(这是一个Xilinx Ultrascale FPGA,但问题是通用的),我试图了解功能的起始位置以及如何解码Next Cap Pointers以便走配置空间。根据Xilinx PG156第2-24页,功能从配置空间开始时的0x80开始,但0x80(0x80030001)的值似乎没有意义,下一个指针为零,但显然有更多功能

我无法在线或在标准中找到关于功能开始的明确答案。

000 0x813410ee
004 0x00100000
008 0x06800000
00c 0x00010000
010 0x0000000c
014 0x00000000
018 0x00000000
01c 0x00000000
020 0x00000000
024 0x00000000
028 0x00000000
02c 0x00000000
030 0x00000000
034 0x000000c0
038 0x00000000
03c 0x00000100
040 0x00000000
044 0x00000000
048 0x00000000
04c 0x00000000
050 0x00000000
054 0x00000000
058 0x00000000
05c 0x00000000
060 0x00000000
064 0x00000000
068 0x00000000
06c 0x00000000
070 0x00000000
074 0x00000000
078 0x00000000
07c 0x00000000
080 0x80030001
084 0x00000008
088 0x00000000
08c 0x00000000
090 0x00800005
094 0x00000000
098 0x00000000
09c 0x00000000
0a0 0x00000000
0a4 0x00000000
0a8 0x00000000
0ac 0x00000000
0b0 0x00000011
0b4 0x00000000
0b8 0x00000000
0bc 0x00000000
0c0 0x00420010
0c4 0x00008023
0c8 0x00012910
0cc 0x0073f043
0d0 0x20410000
0d4 0x00000000
0d8 0x00400000
0dc 0x00000000
0e0 0x00000000
0e4 0x00000012
0e8 0x00000000
0ec 0x0000000e
0f0 0x00030003
0f4 0x00000000
0f8 0x00000000
0fc 0x00000000
100 0x30020001
104 0x00000000
108 0x00400000
10c 0x00462030
110 0x00000001
114 0x0000e000
118 0x00000000
11c 0x00000000
120 0x00000000
124 0x00000000
128 0x00000000
12c 0x00000000
130 0x00000000
134 0x00000000
138 0x00000000
13c 0x00000000
140 0x0001000e
144 0x00000000
148 0x00000000
14c 0x00000000
150 0x30010003
154 0x00000000
158 0x00000000
15c 0x00000000
160 0x00010004
164 0x00000000
168 0x00000000
16c 0x00000000
170 0x00000000
174 0x00000000
178 0x00000000
17c 0x00000000
180 0x00000000
184 0x00000000
188 0x00000000
18c 0x00000000
190 0x00000000
194 0x00000000
198 0x00000000
19c 0x00000000
1a0 0x00000000
1a4 0x00000000
1a8 0x00000000
1ac 0x00000000
1b0 0x00000000
1b4 0x00000000
1b8 0x00010018
1bc 0x00000000
1c0 0x00010016
1c4 0x00000007
1c8 0x00000000
1cc 0x00000100
1d0 0x00000000
1d4 0x00000000
1d8 0x00000000
1dc 0x00000000
1e0 0x00000000
1e4 0x00000000
1e8 0x00000000
1ec 0x00000000
1f0 0x00000000
1f4 0x00000000
1f8 0x00000000
1fc 0x00000000
200 0x00000010
204 0x00000000
208 0x00000000
20c 0x00000000
210 0x00000000
214 0x00010000
218 0x00000000
21c 0x00000553
220 0x00000001
224 0x00000000
228 0x00000000
22c 0x00000000
230 0x00000000
234 0x00000000
238 0x00000000
23c 0x00000000
240 0x00000000
244 0x00000000
248 0x00000000
24c 0x00000000
250 0x00000000
254 0x00000000
258 0x00000000
25c 0x00000000
260 0x00000000
264 0x00000000
268 0x00000000
26c 0x00000000
270 0x00000000
274 0x30010017
278 0x00000005
27c 0x00000000
280 0x00000000
284 0x00000000
288 0x00000000
28c 0x00000000
290 0x00000000
294 0x00000000
298 0x00000000
29c 0x00000000
2a0 0x00000000
2a4 0x00000000
2a8 0x00000000
2ac 0x00000000
2b0 0x00000000
2b4 0x00000000
2b8 0x00000000
2bc 0x00000000
2c0 0x00000000
2c4 0x00000000
2c8 0x00000000
2cc 0x00000000
2d0 0x00000000
2d4 0x00000000
2d8 0x00000000
2dc 0x00000000
2e0 0x00000000
2e4 0x00000000
2e8 0x00000000
2ec 0x00000000
2f0 0x00000000
2f4 0x00000000
2f8 0x00000000
2fc 0x00000000
300 0x30010019
304 0x00000000
308 0x00000000
30c 0x3f003f00
310 0x3f003f00
314 0x3f003f00
318 0x3f003f00
31c 0x00000000
320 0x00000000
324 0x00000000
328 0x00000000
32c 0x00000000
330 0x00000000
334 0x00000000
338 0x00000000
33c 0x00000000
340 0x00000000
344 0x00000000
348 0x00000000
34c 0x00000000
350 0x00000000
354 0x00000000
358 0x00000000
35c 0x00000000
360 0x00000000
364 0x00000000
368 0x00000000
36c 0x00000000
370 0x00000000
374 0x00000000
378 0x00000000
37c 0x00000000
380 0x00000000
384 0x00000000
388 0x00000000
38c 0x00000000
390 0x00000000
394 0x00000000
398 0x00000000
39c 0x00000000
3a0 0x00000000
3a4 0x00000000
3a8 0x00000000
3ac 0x00000000
3b0 0x00000000
3b4 0x00000000
3b8 0x00000000
3bc 0x00000000
3c0 0x00010002
3c4 0x00000000
3c8 0x00000000
3cc 0x00000000
3d0 0x00000000
3d4 0x800000ff
3d8 0x00000000
3dc 0x00000000
3e0 0x00000000
3e4 0x00000000
3e8 0x00000000
3ec 0x00000000
3f0 0x00000000
3f4 0x00000000
3f8 0x00000000
3fc 0x00000000

4 个答案:

答案 0 :(得分:3)

  

我没有运行o / s所以我无法使用像lspci这样的东西解码pcie(我希望lspci从文件中获取输入!)。

lspci可以从文件中获取输入!

在一台计算机上使用lcpci -xx生成十六进制输出。将其保存在文本文件中。使用lspci -F [filename]来读取它。

现在您需要做的就是生成与原始文件格式相同的文本文件(它只是配置空间的十六进制转储)。

答案 1 :(得分:2)

功能指针位于地址0x34。 你看到的值是要去的地址。 在你的情况下0xc0。 在地址0xC0处,您的值为0x10。 这表示PCI Express功能结构。下一个值是0x00。这表示链接列表的结束,否则您将在此处看到一个地址并跳到那里继续。 0x10是PCI Express功能结构 0x05是MSI能力结构 0x01是

答案 2 :(得分:1)

好的,我已经发现了它是如何工作的。有两种功能,标准和扩展。指向第一个标准功能的指针位于配置寄存器的低8位,偏移量为0x34。

所以

034 0x000000c0

指向0xc0

0c0 0x00420010

我们在哪里找到PCIe功能寄存器(0x10),下一个指针(0x00,链的末尾)和一些元数据(0x0042 ref 7.8.2 of spec to decoding)。

另外,我们在偏移量0x0100处开始扩展功能(参见规范7.9)。

100 0x30020001

在这里,我们找到高级错误报告功能ID(0x0001),其版本(2)和下一个指针(0x300)。

300 0x30010019

在这里,我们找到了辅助PCI Express扩展功能(0x0019),它的版本(1)和下一个指针(0x300 - 它指向自身时没有意义)。

答案 3 :(得分:0)

至于PCIe扩展功能头结构:我认为存在错误。

位15:0 - ID 这是可用于标识PCIe扩展功能的ID值。可以通过在PCIe hardblock实例上设置属性来修改此值。只读。

比特19:16 - Rev 这是可用于标识PCIe扩展功能的Revision ID值。可以通过在PCIe hardblock实例上设置属性来修改此值。只读

31:20 - 长度 此字段指示整个结构中的字节数,包括PCI Express扩展功能标头,Vendor-Specific标头和其余数据。只读

然而,这些信息对于实际数字没有意义(正如你自己说的那样)....