基于DM642的PCI加密卡驱动程序设计
2011-02-09章喜才张金果周广禄
陈 静,章喜才,张金果,周广禄
3. 东北电力大学,吉林 132012;4.哈尔滨工业大学,哈尔滨 150001)
0 引言
随着加解密技术的快速发展和加解密数据量的增大,PCI硬件加密卡已经成为高速加解密应用领域的主流。DSP芯片以其高性能的优势,在加密卡领域内得到了广泛的应用,特别是在军事秘密,无线通讯,语音加密等方面。驱动程序作为加密卡的一个重要组成部分,是实现加密卡和主机之间高速、稳定的通信和数据传输的重要保证。
图1 DM642的PCI接口结构图
1 DM642的PCI接口
DM642是 一 款TI公司生产的DSP芯片,属于C6000系 列。C6000 系 列DSP片内集成了一个主/从模式的PCI接口,通过PCI总线能够实现DSP与主机的互连。对于 DM642,PCI接口由EDMA的地址产生硬件与DSP相连,支持PCI接口规范2.2版本。如图1所示,PCI接口包括如下模块:
1)PCI总线接口模块(PCI Bus Interface Unit,PBIN) 由PBIN实现PCI总线协议。该模块对主/从模式下的总线交易都不会插入等待周期,可以实现最大的总线传输带宽。相应的FIFO为空或者满时,PCI接口将结束当前传输,断开总线连接。
2)EEPROM控制器 控制器与外部的4线串行EEPROM相连。PCI接口复位时,控制器读取EEPROM的数据,配置PCI接口。DSP还可以通过映射寄存器访问EEPROM。
3)DSP从模式写模块 包括一个multiplexer和一个PBIN到DSP的FIFO(由外部主机写入)。
4)DSP从模式读模块 包括一个multiplexer和一个DSP到PBIN的FIFO,外部主机是其中数据的请求方。
5)DSP主模式模块 包括读/写两个子模块,DSP是该模块的主控方。该接口不能同时执行主模式的读操作和写操作。
6)PCI的I/O接口模块 包括PCI的I/O映射寄存器。这些寄存器用于控制从模式总线交易中DMA/EDMA的访问页,标识主机状态以及向DSP触发中断或者复位。
7)DSP的寄存器接口 包含DSP的映射寄存器,用于控制主模式接口,产生PCI中断以及电源管理。
图2 驱动程序的中断通信模式示意图
2 驱动程序的中断通信模式
驱动程序的重要功能是实现主机和密码卡的通信,中断系统所承担的正是这个重要的任务,这也是驱动设计中的关键环节。功能驱动程序的中断系统所承接的两端分别是应用程序和加密卡,作为一个桥梁,它使应用程序和加密卡的通信得以实现。图2展示了功能驱动程序中断系统的工作框架(图中省略了其他无关操作)。如图2所示,中断系统包括两个方面:主机对密码卡的中断(1)和密码卡对主机的中断(2)。
1)主机对密码卡的中断
主机对密码卡的中断本质上就是应用程序在需要密码卡完成某项功能时,发送中断。 DSP端的程序可以根据接收到的中断信号执行相应的任务。
PCI主机通过向PCI I/O的host-to-DSP控制寄存器(HSCR)的DSPINT位写1,可以向DSP发出中断。当PCIIEN中对应位使能时,向DSPINT位的写1操作将触发HOSTSW中断。在这种情况下,中断使能和中断禁止等工作由DSP设备端程序来实现。
2)加密卡对主机的中断
加密卡对主机的中断本质上是DSP端的程序在完成指定任务后(或者因其它需要),发送中断。主机接收到中断,并传递给相应的用户应用程序,使应用程序根据接收到的中断信号执行相应操作。
在DSP端只要写中断寄存器,即可通过#INTA引脚将中断传送到主机端。在主机端的驱动程序中,则要对中断进行检测和响应中断。主机端的操作集中在中断服务程序(ISR)和中断延时程序(DPC)中。
由于ISR的程序级别在DIRQL(硬件中断)级别,在这个级别上执行程序将会屏蔽主机所有的中断和线程调度,因此只能将必要且省时的操作放在ISR中,而将大部分的功能性操作放在DPC中执行。DPC是运行在DISPATCH_LEVEL级的例程,不会屏蔽主机的中断,因此可以进行一些较为复杂的操作。
3 驱动程序的数据传输模式
驱动程序运行在主机Windows系统上,PCI加密卡作为外设使用,因此采用从模式进行数据传输。
3.1 地址映射
在DM642的PCI接口中有三个基址寄存器,Base0和Base1空间都属于Memory映射空间, Base0空间支持可预取的读写操作,Base1空间只能进行不可预取的读写操作。Base2空间属于IO映射空间。
在本系统中,Base0根据硬件资源情况映射了地址范围为0x00000000-0x0003FFFF的256KB空间,这部分空间用于存储DM642设备端程序,上电后DM642会从0x00000000开始执行程序;地址范围为0x80000000-0x81FFFFFF的32MB的SDRAM空 间, 这部分空间用来存放用户数据;地址范围为0x90000000-0x900FFFFF的1MB的Flash空间,用来固化DM642设备端程序,加密卡上电启动后将程序从Flash拷贝到内存中执行。
在主机端驱动程序中访问Base0空间的地址,需要为DSPP寄存器提供基地址,并为在数据传输时提供偏移地址。DSPP寄存器的bit 9:0与PCI访问地址的bit 21:0组合,形成最后对从DSP的访问地址。
图3 Base0空间数据传输流程图
3.2 数据传输
根据加密卡的硬件资源和分配的地址空间,数据传输的目的地址可以划分为三类:配置空间、内存映射空间(Base0空间、Base1空间)和I/O映射空间(Base2空间)。
配置空间的的内容一部分是通过总线驱动程序读取设备的EEPROM获得的,这是厂商用特殊设备烧写的配置信息,另一部分是主机的总线驱动程序检测到硬件后自动分配给设备的地址信息。所有遵循PCI标准的设备为其配置信息提供了一个独立的地址空间,DM642的PCI接口也不例外。PCI协议定义了许多头信息格式,在DriverWorks中,通常头信息是通过结构体PCI_CONFIG_HEADER_0来定义的,通过结构体PCI_CONFIG_HEADER_0即可读取配置空间的所有信息。
对于内存映射空间的访问,涉及到地址空间的分配和映射。其中,Base 0空间映射为数据存取区,将Base 1映射为寄存器存取区。图3是Base0空间数据传输的执行流程。Base0空间是可预取空间,因此数据传输过程中可以进行突发访问或启动DMA传输。
操作系统区分I/O空间和内存空间,在多总线结构中,每个总线都支持内存和I/O访问。一般来说,I/O空间可以在I/O总线周期中存取,但是,系统也允许外围地址中的I/O空间映射到系统内存空间,如Base1空间。因此,驱动程序在存取I/O寄存器时,必须要知道I/O寄存器在哪个总线上,并且要知道总线地址空间范围。对于I/O映射空间的访问在软件实现上和内存映射空间是类似的。
4 结论
通过速度测试,写操作速率达到11.9MB/s,读操作速率达到4.0MB/s,表明所开发的基于PCI的密码卡驱动程序具有较高的数据读写速率。系统测试表明,密码卡可以很好的完成RSA加密、分组加密、哈希加密等操作,证明此驱动程序具有很好的稳定性。不足之处是,当前系统的传输速率并不十分理想,系统优化和提高数据传输率仍需进一步的努力。
[1] 李方慧.王飞.何佩琨.TMS320C6000系列DSPs原理及应用[M].电子工业出版社.2003.
[2] 武安河.Windows 2000/XP WDM设备驱动程序开发(第二版)[M].电子工业出版社.2005.