8 bytes of I/O space in memory | Cypress Semiconductor
Support & Community
8 bytes of I/O space in memory
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.