New PCI API
Till Straumann
strauman at slac.stanford.edu
Tue Jul 12 19:04:56 UTC 2005
Good points, you bring up. I fully agree.
We already have in_le32, out_be32, &friends
but they certainly assume memory-mapped I/O
or at least a common I/O scheme for all busses
(covers PCI IO access on x86).
Downside of a generic approach is that it's a complex
design task...
T.
Victor V. Vengerov wrote:
> Till Straumann wrote:
>
>>
>> Traditionally, the BSP simply provided macros
>>
>> PCI_MEM_BASE, PCI_IO_BASE, PCI_DRAM_OFFSET
>> etc.
>>
>> This approach is not good enough when multiple
>> 'PCI hoses' are involved.
>>
>> Therefore, I'd propose to deprecate those macros
>> and require BSPs to provide routines e.g.,
>>
>> /* return pci busx memory space as seen from CPU */ void
>> *pci_mem_base(int busx);
>> /* return pci busx IO space as seen from CPU */
>> void *pci_io_base(int busx);
>> /* board memory as seen from PCI busx */
>> void *pci_ram_base(int busx);
>>
> In some hardware, PCI bus is not mapped to memory at all - although
> indirect access is possible (e.g. write address to ADDR register, read
> from DATA register). (Simplest example is x86 PC :-) : I/O space is
> not memory-mapped and accessible through special instructions, but I
> have seen much more extravagant PCI bridges). Implementing of PCI API
> may be a good point to introduce primitives similar to Linux
> read{b,w,l}, write{b,w,l}, in{b,w,l}, out{b,w,l}, which accept address
> on PCI memory/IO space (in RTEMS case, hose number may be their
> argument as well). Ideally, it should be inlined. Drivers should avoid
> direct device memory/IO accesses. On traditional systems, these
> primitives are mapped to memory access, but arbitrary PCI bridges can
> be supported.
>
> Victor
>
>
More information about the users
mailing list