阅读:1512回复:1
关于PCMCIA卡驱动的问题
对于modem型(即Memory&I/O)PC卡,按照协议标准要用configuration tuple 在PC 卡的attribute memory中定义四个标准的寄存器
configuration option register CCR0 card configuration and status register CCR1 pin replace register CCR2 socket and copy register CCR3 而在这几个寄存器中有3个标志位我认为对编写驱动程序是非常有用的。 CCR0.7=sreset 使PC设备处于复位状态 CCR1.1=interrupt 设备中断标志 CCR2.2=power down 关闭设备电源 1)问题: 但在程序中如何访问这几个寄存器呢?是用访问attribute memory的 方式吗?(按照2KDDK kernel-Mode drivers part7 1.1 requirements for accessing attribute memory of a pcmcia device 中operation a device的说法,好象应该是这种方式),还是用访问设备端口的方式? 2KDDK中指出WDM驱动程序的三种访问attribute memory的方式,分别对应于PASSIVE、DISPATCH、DIRQL这三个级别,前面2种方式还好理解,第三种方式就让我迷惑不解了,因为它要求Access pcmcia Attribute Memory through a Permanent Memory Window 在访问积存器,用PcCardConfig来定义attribute memory。 按照DDK的说明,我的.INF文件中有(这样做的目的是可以在没有PC卡硬件的情况下,将驱动程序的原理先行搞通) [card.configoverride] ConfigPriority=NORMAL IOConfig=610-61f IRQConfig=7 MemConfig=C0000-C7FFF PcCardConfig=3:E0000:F0000 但是在我的StartDevice->RetrieveResources中,case CmResourceTypePcCardConfig:程序碰都没有碰,相反却发现case CmResourceTypeDevicePrivate: ULONG DATA[1]=resource->u.DevicePrivate.Data[1]==0xE0000,ULONG DATA[2]=resource->u.DevicePrivate.Data[2]==0xF0000 2)问题: 这是巧合,还是本来就是如此?(我改动PcCardConfig的值,对应的DATA[1]、DATA[2]上述相等关系不变。) 3)问题: 我如何才能真正地找到DDK中所说的这个属性内存的位置了,其Length又是如何体现的呢? 4)问题: 做过PCMCIA vxd驱动的朋友,你们又是如何处理这些寄存器的呢? 在NDIS的函数的2KDDK叙说中,系统提供了2个函数,NdisReadPcmciaAttributeMemory和NdisWritePcmciaAttributeMemory,分别对应于属性内存的读写,但它们的运行级别为<=Dispatch Level 5)问题: 如果编写NDIS的小端口驱动在ISR中(DIRQL_LEVEL)要访问属性内存,又该怎么办呢? |
|
沙发#
发布于:2001-11-22 20:32
在passive level级可以用构造IRP向下层设备发送的方式访问属性内存,这个已经 通过实验确认了,
至于在DISPATCH LEVEL访问属性内存的方式也没有问题(这个实验准备后天进行。 可是在DIRQL上如何访问呢?估计按2KDDK的说法,也应该没有问题, 但如何得到这permenent memory window ,我 实在无法知道, 希望高手赐教!! 谢谢了,先! |
|