
1
2
3
4
5
6
7
7
8
9
11
11
12
13
14
15
16
17
18
19
20
21
I2O Interface
Inbound/Outbound Queue Management
Copyright 1997-2000, V3 Semiconductor Inc.
EPC User
’
s Manual Revision 1.05
107
respective head or tail pointer to be incremented. If pushing or popping is accomplished by
the external PCI agent then the respective pointer is automatically incremented by the EPC.
Pointers that are managed by the local processor are also updated by it under software
control.
It is important to follow an orderly initialization process for the pointers. Typically all the
pointers would be initialized by the local processor. Once the queues have been initialized
and the ONLINE bit in the QBA_MAP register has been set, the local processor will be
unable to modify the contents of any of the pointers controlled by the host driver namely
OFL_HEAD, OPL_TAIL, IPL_HEAD and IFL_TAIL. These are maintained automatically
when the Inbound/Outbound ports are read by the PCI agent as the above table indicates.
12.3.1.1
Pointer Format
Each pointer is a 32 bit address into local memory. Since pointers are always aligned to a
32 bit boundary, the low 2 bits (bits 1-0) are read only (
‘
0
’
). The upper 12 bits of the address
(bits 31-20) of all 8 pointers are derived from a single register - the Queue Base Address
register (QBA_MAP) described in the next section. The format of each of the 8 pointer
registers is described in the next diagram:
Figure 55Figure 3 Pointer Register Bit Format
Only 4 of the pointers are automatically incremented by hardware. These are OFL_HEAD,
OPL_TAIL, IPL_HEAD and IFL_TAIL. Incrementing is always done on a modulo boundary
of queue size (queue size is determined by the QBA_MAP register described in the next
section). The pointer format diagram above shows where those modulo boundaries occur
for each of the queue size options. As an example, consider a queue size of 4K entries
Table 18: I2O Queue Pointers
Reg. Name
Offset
Description
Pointer Maintenance
OFL_HEAD
0xBC
Outbound Free List Head Pointer PCI write of Outbound Port auto-increments
OFL_TAIL
0xB8
Outbound Free List Tail Pointer
Updated by local processor
OPL_HEAD
0xB4
Outbound Post List Head Pointer Updated by local processor
OPL_TAIL
0xB0
Outbound Post List Tail Pointer
PCI read of Outbound Port auto-increments
IPL_HEAD
0xAC
Inbound Post List Head Pointer
PCI write of Inbound Port auto-increments
IPL_TAIL
0xA8
Inbound Post List Tail Pointer
Updated by local processor
IFL_HEAD
0xA4
Inbound Free List Head Pointer
Updated by local processor
IFL_TAIL
0xA0
Inbound Free List Tail Pointer
PCI read of Inbound Port auto-increments
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9
QBA_MAP bits 31-20 (read only)
8
7
6
5
4
3
2
1
0
Read/Write Bits
Auto Incremented for QSIZE=4
Auto Incremented for QSIZE=3
Auto Incremented for QSIZE=2
Auto Incremented for QSIZE=1
Auto Incremented for QSIZE=0