- 论坛徽章:
- 0
|
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系统核心填充传递到我的驱动里来的么,怎么传进来的值是错的 |
|