IXP1200 Network Processor Family ATM OC-3/12/Ethernet IP Router Example Design
46 Application Note
Modified on: 3/20/02,
For the synchronous empty->non-empty queue notification feature to be used, only one
microengine can be assigned to dequeue from each queue. Further, it is optimal when threads on
that microengine dequeue from a single queue rather than from multiple queues.
If the dequeuing thread services multiple queues, it can use packetq_send queues and associated
dequeue code, or the polled scratchpad bit-vector notification mechanism can be added to these
macros. Queue headers must be in SRAM, as these macros do not currently support scratchpad
RAM headers
4.8 Counters
This design uses a counter subsystem wrapper around incrementing scratchpad RAM locations.
The subsystem manages counter names, enabling and disabling counters at compile time, and
pretty printing. Part of the counter subsystem runs on the microengines, and part on the
StrongARM core
counters.uc provides the following microcode API:
counter_reset()
counter_inc()
port_counter_inc()
counters.c provides the following API to the Transactor command prompt as well as VxWorks
console (neither macro requires parameters):
counters_init()
counters_print()
The counter names are allocated in system_config.h.
In simulation, counters.c is compiled into the atm_utils.dll Transactor foreign model.
Figure 34. Buffer Descriptor Queue API
bdq_init() Initialize queue structure.
bdq_enqueue() Enqueue on Back.
bdq_dequeue() Dequeue from Front.
Figure 35. Buffer Descriptor Queue Descriptor Structure (Resides in SRAM)
3
13
02
92
82
72
62
52
42
32
22
12
01
91
81
71
61
51
41
31
21
11
09876543210
0 reserved Count
1 Back (32 bit address)
2 Front (32 bit address)
Figure 36. Buffer Descriptor Queue Structure (Only Relevant Part Shown)
3
13
02
92
82
72
62
52
42
32
22
12
01
91
81
71
61
51
41
31
21
11
09876543210
0 overwritten Next BD Address