免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3359 | 回复: 1
打印 上一主题 下一主题

probe函数的第一个参数是怎么回事,我的PCI设备IO端口访问不了,急急急 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-24 21:39 |只看该作者 |倒序浏览
static int __init PCI9030_probe(struct pci_dev *dev, const struct pci_device_id *id)
{
     printk("<1>entre myprobe\n";
         /* 启动PCI设备*/
         if(pci_enable_device(dev));
         return -EIO;
         //if(pci_set_dma_mask(dev,PCI9030_DMA_MASK))
        // return -ENODEV;
         if((card=kmalloc(sizeof(struct PCI9030_card),GFP_KERNEL))==NULL)
         {
            printk(KERN_ERR"CI9030ut of memory\n";
                 return -ENOMEM;
         }
         memset(card,0,sizeof(struct PCI9030_card));
         /*
         unsigned long pci_resource_start(struct pci_dev *dev, int bar);
         这个函数返回第一个地址(内存地址或者 I/O 端口号), 和 6 个 PCI I/O 区中的一个相关联的.
      这个区通过整数 bar (the base address register), 范围从 0-5 (包含).
         */
         card->iobase1=pci_resource_start(dev,1);
         card->iobase2=pci_resource_start(dev,2);
         card->CI_dev=*dev;
         card->pci_deviceID=id->device;
         card->iobase1len=pci_resource_len(dev,1);
         card->iobase2len=pci_resource_len(dev,2);
         card->iobase1flag=pci_resource_flags(dev,1);
         card->iobase2flag=pci_resource_flags(dev,2);
         card->next=NULL;
printk("<1>card iobase1 address :%lx, len :%lx, flag:%lx\n";
。。。。}

现在的情况是驱动已经能和对应的设备联系起来了,能读PCI配置空间,但是无法访问本地寄存器空间和LOCAL SPACE空间。
打印出来的值对应是0,0XC04F28AE,0xf8a3dd10,
不看前两个值,光是看iobase1flag的值为0xf8a3dd10,就有问题,这是怎么回事,
PROBE的第一个参数不是由PCI系统核心填充传递到我的驱动里来的么,怎么传进来的值是错的

论坛徽章:
0
2 [报告]
发表于 2008-07-21 21:56 |只看该作者
我觉得应该根据pci device的 device id 和vendor id 来寻找这个设备

dev=pci_find_device(vid,did);
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP