陳 靜,章喜才,張金果,周廣祿
3. 東北電力大學(xué),吉林 132012;4.哈爾濱工業(yè)大學(xué),哈爾濱 150001)
隨著加解密技術(shù)的快速發(fā)展和加解密數(shù)據(jù)量的增大,PCI硬件加密卡已經(jīng)成為高速加解密應(yīng)用領(lǐng)域的主流。DSP芯片以其高性能的優(yōu)勢,在加密卡領(lǐng)域內(nèi)得到了廣泛的應(yīng)用,特別是在軍事秘密,無線通訊,語音加密等方面。驅(qū)動程序作為加密卡的一個重要組成部分,是實現(xiàn)加密卡和主機之間高速、穩(wěn)定的通信和數(shù)據(jù)傳輸?shù)闹匾WC。
圖1 DM642的PCI接口結(jié)構(gòu)圖
DM642是 一 款TI公司生產(chǎn)的DSP芯片,屬于C6000系 列。C6000 系 列DSP片內(nèi)集成了一個主/從模式的PCI接口,通過PCI總線能夠?qū)崿F(xiàn)DSP與主機的互連。對于 DM642,PCI接口由EDMA的地址產(chǎn)生硬件與DSP相連,支持PCI接口規(guī)范2.2版本。如圖1所示,PCI接口包括如下模塊:
1)PCI總線接口模塊(PCI Bus Interface Unit,PBIN) 由PBIN實現(xiàn)PCI總線協(xié)議。該模塊對主/從模式下的總線交易都不會插入等待周期,可以實現(xiàn)最大的總線傳輸帶寬。相應(yīng)的FIFO為空或者滿時,PCI接口將結(jié)束當(dāng)前傳輸,斷開總線連接。
2)EEPROM控制器 控制器與外部的4線串行EEPROM相連。PCI接口復(fù)位時,控制器讀取EEPROM的數(shù)據(jù),配置PCI接口。DSP還可以通過映射寄存器訪問EEPROM。
3)DSP從模式寫模塊 包括一個multiplexer和一個PBIN到DSP的FIFO(由外部主機寫入)。
4)DSP從模式讀模塊 包括一個multiplexer和一個DSP到PBIN的FIFO,外部主機是其中數(shù)據(jù)的請求方。
5)DSP主模式模塊 包括讀/寫兩個子模塊,DSP是該模塊的主控方。該接口不能同時執(zhí)行主模式的讀操作和寫操作。
6)PCI的I/O接口模塊 包括PCI的I/O映射寄存器。這些寄存器用于控制從模式總線交易中DMA/EDMA的訪問頁,標(biāo)識主機狀態(tài)以及向DSP觸發(fā)中斷或者復(fù)位。
7)DSP的寄存器接口 包含DSP的映射寄存器,用于控制主模式接口,產(chǎn)生PCI中斷以及電源管理。
圖2 驅(qū)動程序的中斷通信模式示意圖
驅(qū)動程序的重要功能是實現(xiàn)主機和密碼卡的通信,中斷系統(tǒng)所承擔(dān)的正是這個重要的任務(wù),這也是驅(qū)動設(shè)計中的關(guān)鍵環(huán)節(jié)。功能驅(qū)動程序的中斷系統(tǒng)所承接的兩端分別是應(yīng)用程序和加密卡,作為一個橋梁,它使應(yīng)用程序和加密卡的通信得以實現(xiàn)。圖2展示了功能驅(qū)動程序中斷系統(tǒng)的工作框架(圖中省略了其他無關(guān)操作)。如圖2所示,中斷系統(tǒng)包括兩個方面:主機對密碼卡的中斷(1)和密碼卡對主機的中斷(2)。
1)主機對密碼卡的中斷
主機對密碼卡的中斷本質(zhì)上就是應(yīng)用程序在需要密碼卡完成某項功能時,發(fā)送中斷。 DSP端的程序可以根據(jù)接收到的中斷信號執(zhí)行相應(yīng)的任務(wù)。
PCI主機通過向PCI I/O的host-to-DSP控制寄存器(HSCR)的DSPINT位寫1,可以向DSP發(fā)出中斷。當(dāng)PCIIEN中對應(yīng)位使能時,向DSPINT位的寫1操作將觸發(fā)HOSTSW中斷。在這種情況下,中斷使能和中斷禁止等工作由DSP設(shè)備端程序來實現(xiàn)。
2)加密卡對主機的中斷
加密卡對主機的中斷本質(zhì)上是DSP端的程序在完成指定任務(wù)后(或者因其它需要),發(fā)送中斷。主機接收到中斷,并傳遞給相應(yīng)的用戶應(yīng)用程序,使應(yīng)用程序根據(jù)接收到的中斷信號執(zhí)行相應(yīng)操作。
在DSP端只要寫中斷寄存器,即可通過#INTA引腳將中斷傳送到主機端。在主機端的驅(qū)動程序中,則要對中斷進行檢測和響應(yīng)中斷。主機端的操作集中在中斷服務(wù)程序(ISR)和中斷延時程序(DPC)中。
由于ISR的程序級別在DIRQL(硬件中斷)級別,在這個級別上執(zhí)行程序?qū)帘沃鳈C所有的中斷和線程調(diào)度,因此只能將必要且省時的操作放在ISR中,而將大部分的功能性操作放在DPC中執(zhí)行。DPC是運行在DISPATCH_LEVEL級的例程,不會屏蔽主機的中斷,因此可以進行一些較為復(fù)雜的操作。
驅(qū)動程序運行在主機Windows系統(tǒng)上,PCI加密卡作為外設(shè)使用,因此采用從模式進行數(shù)據(jù)傳輸。
在DM642的PCI接口中有三個基址寄存器,Base0和Base1空間都屬于Memory映射空間, Base0空間支持可預(yù)取的讀寫操作,Base1空間只能進行不可預(yù)取的讀寫操作。Base2空間屬于IO映射空間。
在本系統(tǒng)中,Base0根據(jù)硬件資源情況映射了地址范圍為0x00000000-0x0003FFFF的256KB空間,這部分空間用于存儲DM642設(shè)備端程序,上電后DM642會從0x00000000開始執(zhí)行程序;地址范圍為0x80000000-0x81FFFFFF的32MB的SDRAM空 間, 這部分空間用來存放用戶數(shù)據(jù);地址范圍為0x90000000-0x900FFFFF的1MB的Flash空間,用來固化DM642設(shè)備端程序,加密卡上電啟動后將程序從Flash拷貝到內(nèi)存中執(zhí)行。
在主機端驅(qū)動程序中訪問Base0空間的地址,需要為DSPP寄存器提供基地址,并為在數(shù)據(jù)傳輸時提供偏移地址。DSPP寄存器的bit 9:0與PCI訪問地址的bit 21:0組合,形成最后對從DSP的訪問地址。
圖3 Base0空間數(shù)據(jù)傳輸流程圖
根據(jù)加密卡的硬件資源和分配的地址空間,數(shù)據(jù)傳輸?shù)哪康牡刂房梢詣澐譃槿悾号渲每臻g、內(nèi)存映射空間(Base0空間、Base1空間)和I/O映射空間(Base2空間)。
配置空間的的內(nèi)容一部分是通過總線驅(qū)動程序讀取設(shè)備的EEPROM獲得的,這是廠商用特殊設(shè)備燒寫的配置信息,另一部分是主機的總線驅(qū)動程序檢測到硬件后自動分配給設(shè)備的地址信息。所有遵循PCI標(biāo)準(zhǔn)的設(shè)備為其配置信息提供了一個獨立的地址空間,DM642的PCI接口也不例外。PCI協(xié)議定義了許多頭信息格式,在DriverWorks中,通常頭信息是通過結(jié)構(gòu)體PCI_CONFIG_HEADER_0來定義的,通過結(jié)構(gòu)體PCI_CONFIG_HEADER_0即可讀取配置空間的所有信息。
對于內(nèi)存映射空間的訪問,涉及到地址空間的分配和映射。其中,Base 0空間映射為數(shù)據(jù)存取區(qū),將Base 1映射為寄存器存取區(qū)。圖3是Base0空間數(shù)據(jù)傳輸?shù)膱?zhí)行流程。Base0空間是可預(yù)取空間,因此數(shù)據(jù)傳輸過程中可以進行突發(fā)訪問或啟動DMA傳輸。
操作系統(tǒng)區(qū)分I/O空間和內(nèi)存空間,在多總線結(jié)構(gòu)中,每個總線都支持內(nèi)存和I/O訪問。一般來說,I/O空間可以在I/O總線周期中存取,但是,系統(tǒng)也允許外圍地址中的I/O空間映射到系統(tǒng)內(nèi)存空間,如Base1空間。因此,驅(qū)動程序在存取I/O寄存器時,必須要知道I/O寄存器在哪個總線上,并且要知道總線地址空間范圍。對于I/O映射空間的訪問在軟件實現(xiàn)上和內(nèi)存映射空間是類似的。
通過速度測試,寫操作速率達(dá)到11.9MB/s,讀操作速率達(dá)到4.0MB/s,表明所開發(fā)的基于PCI的密碼卡驅(qū)動程序具有較高的數(shù)據(jù)讀寫速率。系統(tǒng)測試表明,密碼卡可以很好的完成RSA加密、分組加密、哈希加密等操作,證明此驅(qū)動程序具有很好的穩(wěn)定性。不足之處是,當(dāng)前系統(tǒng)的傳輸速率并不十分理想,系統(tǒng)優(yōu)化和提高數(shù)據(jù)傳輸率仍需進一步的努力。
[1] 李方慧.王飛.何佩琨.TMS320C6000系列DSPs原理及應(yīng)用[M].電子工業(yè)出版社.2003.
[2] 武安河.Windows 2000/XP WDM設(shè)備驅(qū)動程序開發(fā)(第二版)[M].電子工業(yè)出版社.2005.