- 论坛徽章:
- 0
|
原帖由 zx_wing 于 2008-9-1 23:02 发表 哇哇哇啊哇!!!!!!!!还是没想通!!!!举个例子:某个寄存器起始地址是base = 0xFF00 0000,结束地址是end = 0xFFFF 0000,那么长度就是size = 0xFFFF 0000 - 0xFF00 0000 = 0xFF 0000按照linu ...
spec里没有end寄存器,这个end应该是你自己捏造的
写进全1读出来为0xff000000,我上面贴的有这个操作
next = pos+1;
res = &dev->resource[pos];
res->name = pci_name(dev);
reg = PCI_BASE_ADDRESS_0 + (pos << 2);
pci_read_config_dword(dev, reg, &l);
pci_write_config_dword(dev, reg, ~0);
pci_read_config_dword(dev, reg, &sz);
pci_write_config_dword(dev, reg, l);
if (!sz || sz == 0xffffffff)
continue;
if (l == 0xffffffff)
l = 0;
raw_sz = sz;
if ((l & PCI_BASE_ADDRESS_SPACE) ==
PCI_BASE_ADDRESS_SPACE_MEMORY) {
sz = pci_size(l, sz, (u32)PCI_BASE_ADDRESS_MEM_MASK);
|
|
|