- 論壇徽章:
- 0
|
static int __init PCI9030_probe(struct pci_dev *dev, const struct pci_device_id *id)
{
printk("<1>entre myprobe\n" ;
/* 啟動(dòng)PCI設(shè)備*/
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" CI9030 ut of memory\n" ;
return -ENOMEM;
}
memset(card,0,sizeof(struct PCI9030_card));
/*
unsigned long pci_resource_start(struct pci_dev *dev, int bar);
這個(gè)函數(shù)返回第一個(gè)地址(內(nèi)存地址或者 I/O 端口號(hào)), 和 6 個(gè) PCI I/O 區(qū)中的一個(gè)相關(guān)聯(lián)的.
這個(gè)區(qū)通過整數(shù) 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" ;
。。。。}
現(xiàn)在的情況是驅(qū)動(dòng)已經(jīng)能和對(duì)應(yīng)的設(shè)備聯(lián)系起來了,能讀PCI配置空間,但是無法訪問本地寄存器空間和LOCAL SPACE空間。
打印出來的值對(duì)應(yīng)是0,0XC04F28AE,0xf8a3dd10,
不看前兩個(gè)值,光是看iobase1flag的值為0xf8a3dd10,就有問題,這是怎么回事,
PROBE的第一個(gè)參數(shù)不是由PCI系統(tǒng)核心填充傳遞到我的驅(qū)動(dòng)里來的么,怎么傳進(jìn)來的值是錯(cuò)的 |
|