阅读:1591回复:4
请问在x86 linux2.4下,系统对pci板卡的base_address[]是如何配置的?
base_address[0]、base_address[1]、base_address[2]....中各存的是什么?这些内容是由谁来分配的?
非常感谢! |
|
沙发#
发布于:2003-06-03 11:27
由系统分配的,存的就是pci configuration space中的base address.
|
|
板凳#
发布于:2003-06-03 11:31
那就是说是linux自动分配的?那么pci configure space 中IO /memory等的分配各自分配到了 base_address[0]还是base_address[1]还是....?谢谢!
|
|
地板#
发布于:2003-06-03 13:14
系统会读取每个base_address[]的值来判断该寄存器存放的是IO空间或memory空间,Bit0 of all base address registers 决定寄存器是映射到IO 或Memory, (bit0==0 IO, bit0==1 memory)。
具体实现是读取该寄存器的值,然后写回0xFFFFFFFF,再读回该寄存器值,如果第二次读回的值不为全0或全1,则该base address register包含地址映射值,具体linux实现代码如下 : for(pos=0; pos<6; pos = next) { next = pos+1; res = &dev->resource[pos]; res->name = dev->name; 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; if ((l & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_MEMORY) { res->start = l & PCI_BASE_ADDRESS_MEM_MASK; sz = pci_size(sz, PCI_BASE_ADDRESS_MEM_MASK); } else { res->start = l & PCI_BASE_ADDRESS_IO_MASK; sz = pci_size(sz, PCI_BASE_ADDRESS_IO_MASK & 0xffff); } res->end = res->start + (unsigned long) sz; res->flags |= (l & 0xf) | pci_calc_resource_flags(l); if ((l & (PCI_BASE_ADDRESS_SPACE | PCI_BASE_ADDRESS_MEM_TYPE_MASK)) == (PCI_BASE_ADDRESS_SPACE_MEMORY | PCI_BASE_ADDRESS_MEM_TYPE_64)) { pci_read_config_dword(dev, reg+4, &l); next++; #if BITS_PER_LONG == 64 res->start |= ((unsigned long) l) << 32; res->end = res->start + sz; pci_write_config_dword(dev, reg+4, ~0); pci_read_config_dword(dev, reg+4, &sz); pci_write_config_dword(dev, reg+4, l); if (~sz) res->end = res->start + 0xffffffff + (((unsigned long) ~sz) << 32); #else if (l) { printk(KERN_ERR \"PCI: Unable to handle 64-bit address for device %s\\n\", dev->slot_name); res->start = 0; res->flags = 0; continue; } #endif } } |
|
地下室#
发布于:2003-06-04 14:00
谢谢!我是想知道系统对于每一个base_address[]是怎么分配的?每一个base_address[]中分配的是什么东东?
谢谢您的回答! |
|