C64x系列DSP/BIOS中设备驱动程序的设计
hwiAttrs.ccMask=IRQASK_NONE;
/*初始化PCI中断*/
hwiAttrs.arg=NULL;
IRQ_map(1RQ_EVIDSPINT,intrld);
HWI_dispatchPlug(intrId,(Fxn)isr,—1,&hwiAttrs);
}
(2)设计mdCreateChah的部分程序代码
static Int mdCreateChan(Ptr *chanp,Ptr devp,String name,
Int mode,Ptr chanParams,IOM_Tiom
Callback cbFxn,Ptr cbArg)
{
……
chan=MEM_alloc(0,sizeof(ChanObj),0);
chan—>queue=&device.hghPrioQue;
/*通道初始化*/
……
if(device.openCount==0){
PCI_intEnable(PCI_EVT_PCIMASTER);
/*PCI设备中断初始化。*/
……
IRQ_enable(IRQ_EVT_DSPINT);
}
*chanp=chan; /*返回创建通道*/
}
(3)设计mdSubmitChan的部分程序代码
static Int mdSubmitChan(Ptr chanp,IOM_Packet *pPacket)
{
ChanHandle chan=(ChanHandle)chanp;
/*挂载已创建通道*/
……
req=(C64XX_PCI_Request*)packet->addr;
/*I/O请求包地址*/
req->reserved=chan;
……
/*处理读写请求包*/
if(packet->cmd==IOM_READ‖packet->cmd==
IOM_WRITE){
imask=HWI_disable();
QUE_enqueue(chan->queue,packet)
……
《C64x系列DSP/BIOS中设备驱动程序的设计(第5页)》