PCI总线配置空间
' M" _) s2 I$ |. k' i4 x4 d8 V
1.PCI总线配置空间的组织
4 A" F A, B7 @1 m" Y/ @# O0 ]
PCI总线配置空间是容量为256字节并具有特定记录结构的一个地址空间,该空间分为头标区和设备相关区两部分。在每个区中,设备只设置必须的和与之相关的寄存器。一个设备的配置空间不仅在系统自举时可以访问,在其他时间也可以访问。
' X6 m5 \/ d$ Q4 l
头标区的长度为64字节,偏移地址从00H到3FH,该区中的各个域用来识别各自不同的设备,并使设备能以一般的方法控制。每个设备都必须按照该区的格式和规定进行设置。而配置空间的其余192字节可以因设备而异。
/ q8 T/ T) A4 P6 j( ?' r
系统软件可能需要扫描PCI总线,以便确定总线上实际连接的设备。为此,配置软件读取每个PCI槽位上的设备供应商识别代码。如果所读取的位置上不存在设备,则主桥必须准确无误地报道出来。OFFFH是一个非法的设备供应商识别码。如果设备不存在,则主桥可以通过返回一个二进制全为“l”的值来作为设备配置空间寄存器的读出值。
% U& l( |+ o9 s% [3 `8 X- V6 ~/ o
如图9.12所示为配置空间头标区的布局情况。头标区又分为两部分:前16个字节的定义在各种类型的设备中都一样;而其余48个字节可以根据设备支持的基本功能情况进行不同的安排。位于偏移地址OEH处的头标类型域规定了头标区安排是何种类型。目前,只有一种头标类型定义(00H),其具体安排图9.12所示。将来的修改版本可能要为特殊的功能而定义其他的头标类型。
8 y) ^+ _$ ?9 \! q$ f
* R0 R6 w! B5 P) O$ x ^
$ V" v/ }4 j$ Z% z" N2 w
+ M/ S) O- u( ^" k4 M+ b$ O4 n" p
6 F% E& C4 r$ _
4 F3 a! h: V2 c 所有PCI设备都必须支持开发商识别、设备识别、命令和状态域,而其他寄存器可以当做保留来处理,视设备的功能而定。如果一个设备支持的功能是某个寄存器所管辖的,则它必须设置此寄存器,且要符合规定的位置和功能。配置空间头标区内各个寄存器的功能将在下节进行说明。
+ l( P8 f, h% R6 v
2.配置空间头标区寄存器的功能
, j0 b; Y+ R0 F! ?, h9 i# _
通过系统配置软件,可以进行PCI总线的系统配置。进行配置时,是通过配置空间头标区中的寄存器来实现的,这些寄存器的具体格式与具体的设备有关,但必须遵守一些共同的规则。
% {0 N8 T3 ^3 }; D2 d% V v% R 1)设备识别
, n( ~ @5 P, @) q I 在头标区有五个域用于识别设备,所有的PCI设备必须设置这些域,配置软件利用它们能够确定系统中可用的PCI总线设备,所有这些寄存器都是只读寄存器。
* y2 f4 q `' N r3 F
(1)开发商识别域(Vendor ID)
1 d) h2 Q" d- e3 I 该域用以标明设备的制造者。一个有效的开发商标识由PCI SIG组织(PCI总线规范的制订机构)来分配,以保证它的惟一性。该域为0FFFFH时属无效值。
2 G3 a+ Q: z+ k4 b$ c
(2)设备识别域(Device ID)
1 Y0 `" \4 v0 q
该域用以标明特定的设备,具体代码由开发商来分配。
& d7 o- l0 S5 }/ n. ~4 ^8 Q
(3)修改识别域(Revision ID)
/ T7 [( S3 N3 c& Q 该域用来指定一个设备特有的修改识别代码,其值由开发商来选定,该值可以为0。可以将该域看作是设备识别域的扩展。
. j& N K+ s0 C6 M6 s
(4)头标类型域(Header Type)
) t7 @+ {" n }$ r 该域有两个作用:一是表示配置空间内字节10H~3FH的布局类型,二是指出设备是否具有多种功能。该域的位7为0表示相应的设备为单功能设备,反之为多功能设备。位6~位0指出字节10H~3FH的布局情况。目前,只有一个编码00H对应如图9.12中的布局,其他编码均属保留。
# E2 m3 C2 F1 H, [( Z* i7 @5 |' `& L, b
(5)分类代码域(Class Code)
( g* l: @( }% t8 y9 [
分类代码寄存器为只读寄存器,用来标识设备的总体功能和特定的寄存器级编程接口。该寄存器分为三段,每段占一个字节。高位字节在0BH处,是一个基本分类代码,对设备的功能进行粗略的分类(如02H表示网络控制器、03H表示显示控制器等)。中间字节在0AH处,它对设备的功能给予更精确、更详细的分类。低位字节在09H处,用来标识一个特定的寄存器级编程接口(如果存在),以使与设备无关的软件可以与设备交互作用。
* d2 d# a1 A% y4 k i) [9 u 2)设备控制
$ e+ c$ w$ ^8 n% v9 Y2 D- S: G 头标区中的命令寄存器可为发出和响应PCI总线命令提供粗略的控制。这是一个16位的寄存器,位15~10为保留位,其余每一位对应一种控制。例如,位0用来控制对I/O空间的访问,当它为0时,禁止设备响应对I/O空间的访问;为1时,则允许设备响应对I/O空间的访问。再如位2用来控制设备得到PcI总线控制权的能力:该位为0时,禁止设备发出PCI访问;为1时,则表示允许设备作为总线的控制者(即主设备)。
8 @# _( G. l" Y+ B+ I* T k" u7 q
3)设备状态指示
8 p5 x+ U- ?7 n3 q( ] 状态寄存器用于记录PCI:总线有关操作的状态信息,如奇偶校验错、系统错等。
/ i% T% p! E. E; [( K 4)中断引脚寄存器的功能
; t2 t$ f) m2 s1 Q4 y& P6 _ 该寄存器的值表示设备(设备功能)使用了哪条中断线。其值为1时表示使用INTA#为2时对应INTB#,而3和4分别对应于INTC#和INTD#。如果设备(设备功能)没有使用中断线,则必须将该寄存器清0。该寄存器为只读寄存器。
3 i& ~: L' u a6 d' j( g$ L 5)MIN-GNT和MAX-LAT寄存器的功能
; ~+ e5 ?% U W; z! z
这两个寄存器都是只读寄存器,用来指定设备对延迟计时器(Latency timer)的设定值,单位为(1/4)μs。如果它们的值为0,则表明设备对延迟计时器没有特殊的要求。最小允许寄存器MIN-GNT用于指定设备需要多长的突发传输时间;最大延迟寄存器MAX-LAT可反映设备对PCI总线进行访问的频繁程度。
! b: `6 E0 n! n) j# g5 Y 6)基地址寄存器的功能
. d4 @$ i( a! j3 ~& p
基地址寄存器提供了一种为设备指定存储空间和I/