8 bytes of I/O space in memory

Question: What are the 8 bytes of I/O space used for in the PCI-DP?



The 8 bytes of I/O space in the memory are used for I/O addressed PCI transfers.

The total memory contents of the PCI-DP is 32KB, where the upper 16KB is the dual port shared memory (0x4000-0x7FFF).  The PCI interface allows both memory and I/O addressing although the I/O access is generally not recommended (it is present for compatibility with legacy systems).  As opposed to memory-mapped I/O, data from an I/O addressed operation flows to a port specified by a PCI I/O address pointer.

The PCI configuration space of the PCI-DP contains 8 bytes of I/O space (Base Address Register (BAR) #1).  The function of these 8 bytes is given on page 12 of the datasheet.  They are PCI I/O pointers where:  the first two bytes (offset from BAR#1 0x1-0x0) represents the I/O address pointer, and the last four bytes (offset from BAR#1 0x7-0x4) represent the 32 bit data.  Bytes 0x3-0x2 (offset from BAR#1) are left unused.

To initiate an I/O transfer, an address must first be loaded into the I/O address pointer (being an offset pointer into the 32KB memory space of the PCI-DP).  Then, a write or a read operation to the I/O data pointer will commence the I/O transfer.  If it is a read, then the data at the location in the PCI-DP memory map specified by the I/O address pointer will be returned.  If it is a write, the data is written to the addressed location in the memory map.

Remember that in order to use I/O addressed accesses, you must enable bit 0 of the Command field within the PCI configuration space.