18.4 IxQMgr Initialization and Uninitialization
The initialization of IxQMgr first requires a call to ixQMgrInit(), which takes no parameters and returns success or failure. No other ixQMgr functions may be called before this. Following initialization, the queues must be configured, and the dispatcher function should be called. Only one dispatcher can be invoked per each set of upper and lower 32 queues.
To uninitialize the IxQMgr component, call the ixQMgrUnload() function, which also takes no parameters and returns success or failure. Uninitialization should be done prior to unloading components that are dependant on IxQMgr. Uninitialization will unmap kernel memory mapped by the component. As an example, uninitialization should be done before unloading a kernel module or (if possible) before a soft reset.
To avoid unpredictable results, the ixQMgrUnload function should not be called twice in sequence before a call to ixQMgrInit. No other ixQMgr functions may be called after ixQMgrUnload except for ixQMgrInit.
18.5 Queue Configuration
The queue base address in AQM SRAM is calculated at run time. The IxQMgr access-layer component must be initialized by calling ixQMgrInit() before any queue is configured. Queue configurations include queue size, queue entry size, queue watermarks, interrupt enable/disable and callback registration. A check is performed on the queue configuration to ensure that the amount of SRAM required by the configuration does not exceed the amount available. The Queue configuration function ixQMgrQConfig( ) provides a configuration interface to the AQM queues. With the exception of ixQMgrQWatermarkSet(), the queue-configuration information to which this interface provides access can only be set once.
18.6 Queue Identifiers
An AQM hardware queue is identified by one of the 64 unique identifiers. Each IxQMgr interface function that operates on a queue takes one of the 64 identifiers (defined in IxQMgr.h) as a parameter and it is the clients responsibility to provide the correct identifier.
Reads and writes entries from/to AQM.
Determines the size of a queue in entries.
Determines the number of full entries in a queue.
Dispatches queue notification callbacks registered by clients. These are called in a defined order, based on a set of conditions.
Performs queue-status query.
— For queues 0-31, the status consists of the flags Nearly Empty, Empty, Nearly Full, and Full, Underflow and Overflow.
— For queues 32-63, the status consists of the flags Nearly Empty and Full.
Intel® IXP400 Software Access-Layer Components: Queue Manager (IxQMgr) API
— For queues 32-63, the notification source is the assertion or de-assertion of the Nearly Empty flag and cannot be changed.

Programmer’s Guide

IXP400 Software Version 2.0

April 2005

 

Document Number: 252539, Revision: 007

267

Page 267
Image 267
Intel IXP400 manual Document Number 252539, Revision 267