Chinaunix首页 | 论坛 | 博客
  • 博客访问: 334497
  • 博文数量: 107
  • 博客积分: 2825
  • 博客等级: 少校
  • 技术积分: 795
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-19 12:19
文章分类

全部博文(107)

文章存档

2013年(2)

2012年(31)

2011年(18)

2010年(12)

2009年(44)

我的朋友

分类: LINUX

2009-10-11 11:06:40

2009年09月19日 11:56:05
PCI总线的配置周期




PCI总线的配置周期
为了实现参数的自动配置,每个PCI设备必须提供由256个字节配置寄存器构成的配置空间。在操作系统启动时或在PCI设备刚接入时PCI总线驱动程序要访问这些寄存器,以便对其初始化,并装入相应的设备驱动程序,使其变为可用状态。配置寄存器是即插即用的硬件基础。
1.PCI总线配置访问
在PCI设备的存储器访问或:I/O访问中,每个设备都对地址进行译码。然而,CPU却不能对配置空间直接寻址。对配置空间的寻址需采用如下的步骤:
①片选:由IDSEL来选择PCI设备,也就是将IDSEL引脚作为“芯片选择”信号。
②设备选择:在地址有效期间AD[1~0]=00,选择设备作为配置命令的目标设备。
③片内选择:通过AD[7~2]确定64个双字寄存器之一,通过字节允许信号确定访问该双字寄存器的哪几个字节寄存器。
配置命令也支持猝发方式访问。
上面的步骤中涉及到IDSEL信号。该信号通常由系统控制逻辑驱动。在配置访问中,由于没有使用高端的2l位地址线,因此,有时也可以将其和高21位地址线中的某一位相连(如何用高21位地址线来决定IDSEL还没有公认的或标准的方法)。
为支持系统中存在多条PCI总线,PCI总线规范定义了两种类型的配置访问,其格式如图9.9所示,它表明了在配置访问时地址相位AD线的信息的含义。



用AD[1~0]线上的值来区分类型0或类型1的配置访问,取值00表示0类配置访问,0l表示l类配置访问。类型0的配置访问用于选择当前正在操作的PCI总线上的设备。类型l配置访问用于对别的PCI总线提出配置请求。
对这两种配置访问,寄存器编号域和功能编号域的含义相同,总线编号和设备编号域只用于类型1的配置访问,保留域被目标设备忽略。
总线编号用于选择系统中最多256条总线中的一条。设备编号用于选择指定总线上最多32个设备中的一个,但如果采用IDSEL与一条AD线相连的方法,则只能选择到21个设备。功能编号用于从指定的多功能设备中选择最多八种功能中的一种功能。寄存器编号用于从设备的配置空间中选择一个双字寄存器。
2.配置周期的产生
在PCI应用系统中,必须提供用软件产生PCI配置周期的机制。这种机制一般放置于主桥路中。PCI总线规范只对PC-AT兼容的系统规定了产生配置周期的机制,而对其他系统未做规定。对于PC-AT兼容机,PCI总线规范定义了两种截然不同的机制,即配置机制1#和配置机制2#。要求优先考虑并实现配置机制1#,配置机制2#的设立是为了做到向后兼容。
(1)配置机制1#
这种机制使用两个双字I/O地址。第一个双字地址是0CF8H,是一个可读/写寄存器,命名为CONFIG-ADDRESS寄存器。第二个双字地址是0CFCH,命名为CONFIG-DATA寄存器。对配置空间的操作是通过写一个值到设备的CONFIG-ADDRESS寄存器,在此之后如果对CONFIG—DATA寄存器进行读或写操作,桥就会将CONFIG-ADDRESS寄存器中的值转换成PCI总线上所要求的配置周期,即自动产生配置读或配置写周期。
C0NFIG-ADDRESS寄存器为32位,其格式如图9.10所示。



该寄存器的格式与上述访问配置中的1类配置访问基本对应。位30~24为保留位,只能读且读出值为全0。通过位23~16在系统中选择一条指定总线。位15~11用来在指定的总线上选择一个设备。位10~8用来从指定的多功能设备中选择一种功能。通过位7~2,从设备的配置空间中选择一个双字寄存器,即一次就选择4个字节配置寄存器,但通过来自处理器的字节允许信号可以确定任何一个字节配置寄存器。位1和位0为保留位,读出值为00。最高位为允许位,决定是否允许把对CONFIG-DATA的访问转变成PCI总线上的配置访问。当该位为l时,表示允许,反之表示禁止。
无论何时,主桥路只要检测到对CONFIG-ADDRESS寄存器的写操作,该桥路就把写人数据存入到自己内部的CONFIG-ADDRESS寄存器。在对CONFIG-ADDRESS寄存器读时,桥路将返回CONFIG-ADDRESS寄存器中的数据。
当桥电路发现针对CONFIG-DATA的访问命令时,检查CONFIG-ADDRESS寄存器中的允许位和总线编号域。如果允许位为1,同时总线编号与该桥路或任何在桥路之后的总线编号相符时,则该桥路进行一次配置周期的转换。
与上述PCI配置访问类型相对应,配置周期的转换也有两种类型:第一种为0类,此类转换用于被寻址的设备位于主桥路所连接的PCI总线上的情况。第二种为l类,当设备位于桥路后面的另一条总线上时采用该类转换。
图9.11表示了0类配置周期在桥路上的转换情况。桥电路对设备编号域进行译码并在适当的II)SEL线上建立信号,从而在PCI总线上完成一次配置访问。从图中可以看出发送到PCI总线的地址线上各部分信

息的转换关系,其中,AD[10~2]直接取自CONFIG—ADDRESS的相应位,AD[1~0]取00。


对于l类配置周期的转换,其具体过程是桥路在一个配置命令的地址期间,直接将C0NFIG-ADDR:ESS寄存器的内容复制到PcI总线的地址线上,并且保证AD[1~0]为01。
在上述两种转换情况下,配合数据传输的字节允许信号必须从处理器总线上直接复制得到。
(2)配置机制2#
配置机制2#实际上是为访问PCI配置空间提供的一种模式,在该模式中,把PcI的配置空间映射到4 KB的CPU I/O空间。如果该模式处于允许状态,则对C000H~CFFFH范围内的I/O空间的任何CPU访问,都会变换成一个PCI配置周期;当该模式设置为禁止状态时,对上述范围内I/0空间的所有CPU访问,都成为对系统中相应I/O端口的访问。

阅读(743) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~