- 论坛徽章:
- 0
|
小弟在probe里面第一行先调用pci_enable_device,结果总是报
PCI: Device 0000:05:00.0 not available because of resource collisions
probe of 0000:05:00.0 failed with error -22
第一行是pcibios_enable_resources 打印的,第二行是驱动里面自己打印的。
分析了一下pcibios_enable_resources的代码发现resource的start地址为0. 测试机器是intel的,内核版本2.6.9,而相同的驱动代码、相同的内核版本在另一台AMD的机器上是可以运行的,另外如果把intel的机器装成2.6.18也是没问题的。请问resource结构的start成员变量是什么赋值的? 多谢!
static inline int
pcibios_enable_resources (struct pci_dev *dev, int mask)
{
u16 cmd, old_cmd;
int idx;
struct resource *r;
unsigned long type_mask = IORESOURCE_IO | IORESOURCE_MEM;
if (!dev)
return -EINVAL;
pci_read_config_word(dev, PCI_COMMAND, &cmd);
old_cmd = cmd;
for (idx=0; idx<PCI_NUM_RESOURCES; idx++) {
/* Only set up the desired resources. */
if (!(mask & (1 << idx)))
continue;
r = &dev->resource[idx];
if (!(r->flags & type_mask))
continue;
if ((idx == PCI_ROM_RESOURCE) &&
(!(r->flags & IORESOURCE_ROM_ENABLE)))
continue;
if (!r->start && r->end) {
printk(KERN_ERR
"PCI: Device %s not available because of resource collisions\n",
pci_name(dev));
return -EINVAL;
}
if (r->flags & IORESOURCE_IO)
cmd |= PCI_COMMAND_IO;
if (r->flags & IORESOURCE_MEM)
cmd |= PCI_COMMAND_MEMORY;
}
if (cmd != old_cmd) {
printk("PCI: Enabling device %s (%04x -> %04x)\n", pci_name(dev), old_cmd, cmd);
pci_write_config_word(dev, PCI_COMMAND, cmd);
}
return 0; |
|