jeosph
驱动中牛
驱动中牛
  • 注册日期2001-04-19
  • 最后登录2006-08-08
  • 粉丝0
  • 关注0
  • 积分96分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:1512回复:1

关于PCMCIA卡驱动的问题

楼主#
更多 发布于:2001-11-08 16:06
对于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)要访问属性内存,又该怎么办呢?
jeosph
驱动中牛
驱动中牛
  • 注册日期2001-04-19
  • 最后登录2006-08-08
  • 粉丝0
  • 关注0
  • 积分96分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-11-22 20:32
在passive level级可以用构造IRP向下层设备发送的方式访问属性内存,这个已经 通过实验确认了,
至于在DISPATCH LEVEL访问属性内存的方式也没有问题(这个实验准备后天进行。

可是在DIRQL上如何访问呢?估计按2KDDK的说法,也应该没有问题,
但如何得到这permenent memory window ,我 实在无法知道,
希望高手赐教!!
谢谢了,先!
游客

返回顶部