|  | #ifndef __doxygen_HIDE  /* This file is not part of the API */ | 
|  |  | 
|  | /** | 
|  | * @file    IxNpeA.h | 
|  | * | 
|  | * @date    22-Mar-2002 | 
|  | * | 
|  | * @brief   Header file for the IXP400 ATM NPE API | 
|  | * | 
|  | * | 
|  | * @par | 
|  | * IXP400 SW Release version 2.0 | 
|  | * | 
|  | * -- Copyright Notice -- | 
|  | * | 
|  | * @par | 
|  | * Copyright 2001-2005, Intel Corporation. | 
|  | * All rights reserved. | 
|  | * | 
|  | * @par | 
|  | * Redistribution and use in source and binary forms, with or without | 
|  | * modification, are permitted provided that the following conditions | 
|  | * are met: | 
|  | * 1. Redistributions of source code must retain the above copyright | 
|  | *    notice, this list of conditions and the following disclaimer. | 
|  | * 2. Redistributions in binary form must reproduce the above copyright | 
|  | *    notice, this list of conditions and the following disclaimer in the | 
|  | *    documentation and/or other materials provided with the distribution. | 
|  | * 3. Neither the name of the Intel Corporation nor the names of its contributors | 
|  | *    may be used to endorse or promote products derived from this software | 
|  | *    without specific prior written permission. | 
|  | * | 
|  | * @par | 
|  | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' | 
|  | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
|  | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
|  | * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE | 
|  | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | 
|  | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | 
|  | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | 
|  | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | 
|  | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
|  | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
|  | * SUCH DAMAGE. | 
|  | * | 
|  | * @par | 
|  | * -- End of Copyright Notice -- | 
|  | */ | 
|  |  | 
|  | /** | 
|  | * @defgroup IxNpeA IXP400 NPE-A (IxNpeA) API | 
|  | * | 
|  | * @brief The Public API for the IXP400 NPE-A | 
|  | * | 
|  | * @{ | 
|  | */ | 
|  |  | 
|  | #ifndef IX_NPE_A_H | 
|  | #define IX_NPE_A_H | 
|  |  | 
|  | #include "IxQMgr.h" | 
|  | #include "IxOsal.h" | 
|  | #include "IxQueueAssignments.h" | 
|  |  | 
|  | /* General Message Ids */ | 
|  |  | 
|  | /* ATM Message Ids */ | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_ATM_UTOPIA_CONFIG_WRITE | 
|  | * | 
|  | * @brief ATM Message ID command to write the data to the offset in the | 
|  | * Utopia Configuration Table | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_ATM_UTOPIA_CONFIG_WRITE       0x20 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_ATM_UTOPIA_CONFIG_LOAD | 
|  | * | 
|  | * @brief ATM Message ID command triggers the NPE to copy the Utopia | 
|  | * Configuration Table to the Utopia coprocessor | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_ATM_UTOPIA_CONFIG_LOAD        0x21 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_ATM_UTOPIA_STATUS_UPLOAD | 
|  | * | 
|  | * @brief ATM Message ID command triggers the NPE to read-back the Utopia | 
|  | * status registers and update the Utopia Status Table. | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_ATM_UTOPIA_STATUS_UPLOAD      0x22 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_ATM_UTOPIA_STATUS_READ | 
|  | * | 
|  | * @brief ATM Message ID command to read the Utopia Status Table at the | 
|  | * specified offset. | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_ATM_UTOPIA_STATUS_READ        0x23 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_ATM_TX_ENABLE | 
|  | * | 
|  | * @brief ATM Message ID command triggers the NPE to re-enable processing | 
|  | * of any entries on the TxVcQ for this port. | 
|  | * | 
|  | * This command will be ignored for a port already enabled | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_ATM_TX_ENABLE                 0x25 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_ATM_TX_DISABLE | 
|  | * | 
|  | * @brief ATM Message ID command triggers the NPE to disable processing on | 
|  | * this port | 
|  | * | 
|  | * This command will be ignored for a port already disabled | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_ATM_TX_DISABLE                0x26 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_ATM_RX_ENABLE | 
|  | * | 
|  | * @brief ATM Message ID command triggers the NPE to process any received | 
|  | * cells for this VC according to the VC Lookup Table. | 
|  | * | 
|  | * Re-issuing this command with different contents for a VC that is not | 
|  | * disabled will cause unpredictable behavior. | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_ATM_RX_ENABLE                 0x27 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_ATM_RX_DISABLE | 
|  | * | 
|  | * @brief ATM Message ID command triggers the NPE to disable processing for | 
|  | * this VC. | 
|  | * | 
|  | * This command will be ignored for a VC already disabled | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_ATM_RX_DISABLE                0x28 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_ATM_STATUS_READ | 
|  | * | 
|  | * @brief ATM Message ID command to read the ATM status. The data is returned via | 
|  | * a response message | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_ATM_STATUS_READ               0x29 | 
|  |  | 
|  | /*-------------------------------------------------------------------------- | 
|  | * HSS Message IDs | 
|  | *--------------------------------------------------------------------------*/ | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_PORT_CONFIG_WRITE | 
|  | * | 
|  | * @brief HSS Message ID command writes the ConfigWord value to the location | 
|  | * in the HSS_CONFIG_TABLE specified by offset for HSS port hPort. | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_PORT_CONFIG_WRITE         0x40 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_PORT_CONFIG_LOAD | 
|  | * | 
|  | * @brief HSS Message ID command triggers the NPE to copy the contents of the | 
|  | * HSS Configuration Table to the appropriate configuration registers in the | 
|  | * HSS coprocessor for the port specified by hPort. | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_PORT_CONFIG_LOAD          0x41 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_PORT_ERROR_READ | 
|  | * | 
|  | * @brief HSS Message ID command triggers the NPE to return an HssErrorReadResponse | 
|  | * message for HSS port hPort. | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_PORT_ERROR_READ           0x42 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_CHAN_FLOW_ENABLE | 
|  | * | 
|  | * @brief HSS Message ID command triggers the NPE to reset internal status and | 
|  | * enable the HssChannelized operation on the HSS port specified by hPort. | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_CHAN_FLOW_ENABLE          0x43 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_CHAN_FLOW_DISABLE | 
|  | * | 
|  | * @brief HSS Message ID command triggers the NPE to disable the HssChannelized | 
|  | * operation on the HSS port specified by hPort. | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_CHAN_FLOW_DISABLE         0x44 | 
|  |  | 
|  | /** | 
|  | * @def  IX_NPE_A_MSSG_HSS_CHAN_IDLE_PATTERN_WRITE | 
|  | * | 
|  | * @brief HSS Message ID command writes the HSSnC_IDLE_PATTERN value for HSS | 
|  | * port hPort. (n=hPort) | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_CHAN_IDLE_PATTERN_WRITE   0x45 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_CHAN_NUM_CHANS_WRITE | 
|  | * | 
|  | * @brief HSS Message ID command writes the HSSnC_NUM_CHANNELS value for HSS | 
|  | * port hPort. (n=hPort) | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_CHAN_NUM_CHANS_WRITE      0x46 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_CHAN_RX_BUF_ADDR_WRITE | 
|  | * | 
|  | * @brief HSS Message ID command writes the HSSnC_RX_BUF_ADDR value for HSS | 
|  | * port hPort. (n=hPort) | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_CHAN_RX_BUF_ADDR_WRITE    0x47 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_CHAN_RX_BUF_CFG_WRITE | 
|  | * | 
|  | * @brief HSS Message ID command  writes the HSSnC_RX_BUF_SIZEB and | 
|  | * HSSnC_RX_TRIG_PERIOD values for HSS port hPort.  (n=hPort) | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_CHAN_RX_BUF_CFG_WRITE     0x48 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_CHAN_TX_BLK_CFG_WRITE | 
|  | * | 
|  | * @brief HSS Message ID command writes the HSSnC_TX_BLK1_SIZEB, | 
|  | * HSSnC_TX_BLK1_SIZEW, HSSnC_TX_BLK2_SIZEB, and HSSnC_TX_BLK2_SIZEW  values | 
|  | * for HSS port hPort. (n=hPort) | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_CHAN_TX_BLK_CFG_WRITE     0x49 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_CHAN_TX_BUF_ADDR_WRITE | 
|  | * @brief HSS Message ID command writes the HSSnC_TX_BUF_ADDR value for HSS | 
|  | * port hPort. (n=hPort) | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_CHAN_TX_BUF_ADDR_WRITE    0x4A | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_CHAN_TX_BUF_SIZE_WRITE | 
|  | * | 
|  | * @brief HSS Message ID command writes the HSSnC_TX_BUF_SIZEN value for HSS | 
|  | * port hPort. (n=hPort) | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_CHAN_TX_BUF_SIZE_WRITE    0x4B | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_PKT_PIPE_FLOW_ENABLE | 
|  | * | 
|  | * @brief HSS Message ID command triggers the NPE to reset internal status and | 
|  | * enable the HssPacketized operation for the flow specified by pPipe on | 
|  | * the HSS port specified by hPort. | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_PKT_PIPE_FLOW_ENABLE      0x50 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_PKT_PIPE_FLOW_DISABLE | 
|  | * @brief HSS Message ID command triggers the NPE to disable the HssPacketized | 
|  | * operation for the flow specified by pPipe on the HSS port specified by hPort. | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_PKT_PIPE_FLOW_DISABLE     0x51 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_PKT_NUM_PIPES_WRITE | 
|  | * @brief HSS Message ID command writes the HSSnP_NUM_PIPES value for HSS | 
|  | * port hPort.(n=hPort) | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_PKT_NUM_PIPES_WRITE       0x52 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_PKT_PIPE_FIFO_SIZEW_WRITE | 
|  | * | 
|  | * @brief HSS Message ID command writes the HSSnP_PIPEp_FIFOSIZEW value for | 
|  | * packet-pipe pPipe on HSS port hPort.  (n=hPort, p=pPipe) | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_PKT_PIPE_FIFO_SIZEW_WRITE 0x53 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_PKT_PIPE_HDLC_CFG_WRITE | 
|  | * | 
|  | * @brief HSS Message ID command writes the HSSnP_PIPEp_HDLC_RXCFG and | 
|  | * HSSnP_PIPEp_HDLC_TXCFG values for packet-pipe pPipe on HSS port hPort. | 
|  | * (n=hPort, p=pPipe) | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_PKT_PIPE_HDLC_CFG_WRITE   0x54 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_PKT_PIPE_IDLE_PATTERN_WRITE | 
|  | * | 
|  | * @brief HSS Message ID command writes the HSSnP_PIPEp_IDLE_PATTERN value | 
|  | * for packet-pipe pPipe on HSS port hPort.  (n=hPort, p=pPipe) | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_PKT_PIPE_IDLE_PATTERN_WRITE 0x55 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_PKT_PIPE_RX_SIZE_WRITE | 
|  | * | 
|  | * @brief HSS Message ID command writes the HSSnP_PIPEp_RXSIZEB value for | 
|  | * packet-pipe pPipe on HSS port hPort.  (n=hPort, p=pPipe) | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_PKT_PIPE_RX_SIZE_WRITE    0x56 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_MSSG_HSS_PKT_PIPE_MODE_WRITE | 
|  | * | 
|  | * @brief HSS Message ID command writes the HSSnP_PIPEp_MODE value for | 
|  | * packet-pipe pPipe on HSS port hPort.  (n=hPort, p=pPipe) | 
|  | */ | 
|  | #define IX_NPE_A_MSSG_HSS_PKT_PIPE_MODE_WRITE       0x57 | 
|  |  | 
|  |  | 
|  |  | 
|  | /* Queue Entry Masks */ | 
|  |  | 
|  | /*-------------------------------------------------------------------------- | 
|  | *  ATM Descriptor Structure offsets | 
|  | *--------------------------------------------------------------------------*/ | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_RXDESCRIPTOR_STATUS_OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Receive Descriptor Status field | 
|  | * | 
|  | * It is used for descriptor error reporting. | 
|  | */ | 
|  | #define IX_NPE_A_RXDESCRIPTOR_STATUS_OFFSET          0 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_RXDESCRIPTOR_VCID_OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Receive Descriptor VC ID field | 
|  | * | 
|  | * It is used to hold an identifier number for this VC | 
|  | */ | 
|  | #define IX_NPE_A_RXDESCRIPTOR_VCID_OFFSET            1 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_RXDESCRIPTOR_CURRMBUFSIZE_OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Receive Descriptor Current Mbuf | 
|  | * Size field | 
|  | * | 
|  | * Number of bytes the current mbuf data buffer can hold | 
|  | */ | 
|  | #define IX_NPE_A_RXDESCRIPTOR_CURRMBUFSIZE_OFFSET    2 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_RXDESCRIPTOR_ATMHEADER_OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Receive Descriptor ATM Header | 
|  | */ | 
|  | #define IX_NPE_A_RXDESCRIPTOR_ATMHEADER_OFFSET       4 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_RXDESCRIPTOR_CURRMBUFLEN_OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Receive Descriptor Current MBuf length | 
|  | * | 
|  | * | 
|  | * RX - Initialized to zero.  The NPE updates this field as each cell is received and | 
|  | * zeroes it with every new mbuf for chaining. Will not be bigger than currBbufSize. | 
|  | */ | 
|  | #define IX_NPE_A_RXDESCRIPTOR_CURRMBUFLEN_OFFSET    12 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_RXDESCRIPTOR_TIMELIMIT__OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Receive Descriptor Time Limit field | 
|  | * | 
|  | * Contains the Payload Reassembly Time Limit (used for aal0_xx only) | 
|  | */ | 
|  | #define IX_NPE_A_RXDESCRIPTOR_TIMELIMIT_OFFSET        14 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_RXDESCRIPTOR_PCURRMBUFF_OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Receive Descriptor Current MBuf Pointer | 
|  | * | 
|  | * The current mbuf pointer of a chain of mbufs. | 
|  | */ | 
|  | #define IX_NPE_A_RXDESCRIPTOR_PCURRMBUFF_OFFSET     20 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_RXDESCRIPTOR_PCURRMBUFDATA_OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Receive Descriptor Current MBuf Pointer | 
|  | * | 
|  | * Pointer to the next byte to be read or next free location to be written. | 
|  | */ | 
|  | #define IX_NPE_A_RXDESCRIPTOR_PCURRMBUFDATA_OFFSET  24 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_RXDESCRIPTOR_PNEXTMBUF_OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Receive Descriptor Next MBuf Pointer | 
|  | * | 
|  | * Pointer to the next MBuf in a chain of MBufs. | 
|  | */ | 
|  | #define IX_NPE_A_RXDESCRIPTOR_PNEXTMBUF_OFFSET      28 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_RXDESCRIPTOR_TOTALLENGTH_OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Receive Descriptor Total Length | 
|  | * | 
|  | * Total number of bytes written to the chain of MBufs by the NPE | 
|  | */ | 
|  | #define IX_NPE_A_RXDESCRIPTOR_TOTALLENGTH_OFFSET    32 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_RXDESCRIPTOR_AAL5CRCRESIDUE_OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Receive Descriptor AAL5 CRC Residue | 
|  | * | 
|  | * Current CRC value for a PDU | 
|  | */ | 
|  | #define IX_NPE_A_RXDESCRIPTOR_AAL5CRCRESIDUE_OFFSET 36 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_RXDESCRIPTOR_SIZE | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Receive Descriptor Size | 
|  | * | 
|  | * The size of the Receive descriptor | 
|  | */ | 
|  | #define IX_NPE_A_RXDESCRIPTOR_SIZE                  40 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_TXDESCRIPTOR_PORT_OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Transmit Descriptor Port | 
|  | * | 
|  | * Port identifier. | 
|  | */ | 
|  | #define IX_NPE_A_TXDESCRIPTOR_PORT_OFFSET            0 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_TXDESCRIPTOR_RSVD_OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Transmit Descriptor RSVD | 
|  | */ | 
|  | #define IX_NPE_A_TXDESCRIPTOR_RSVD_OFFSET            1 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_TXDESCRIPTOR_CURRMBUFLEN_OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Transmit Descriptor Current MBuf Length | 
|  | * | 
|  | * TX - Initialized by the XScale to the number of bytes in the current MBuf data buffer. | 
|  | * The NPE decrements this field for every transmitted cell.  Thus, when the NPE writes a | 
|  | * descriptor the TxDone queue, this field will equal zero. | 
|  | */ | 
|  | #define IX_NPE_A_TXDESCRIPTOR_CURRMBUFLEN_OFFSET     2 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_TXDESCRIPTOR_ATMHEADER_OFFSET | 
|  | * @brief ATM Descriptor structure offset for Transmit Descriptor ATM Header | 
|  | */ | 
|  | #define IX_NPE_A_TXDESCRIPTOR_ATMHEADER_OFFSET       4 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_TXDESCRIPTOR_PCURRMBUFF_OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Transmit Descriptor Pointer to the current MBuf chain | 
|  | */ | 
|  | #define IX_NPE_A_TXDESCRIPTOR_PCURRMBUFF_OFFSET      8 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_TXDESCRIPTOR_PCURRMBUFDATA_OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Transmit Descriptor Pointer to the current MBuf Data | 
|  | * | 
|  | * Pointer to the next byte to be read or next free location to be written. | 
|  | */ | 
|  | #define IX_NPE_A_TXDESCRIPTOR_PCURRMBUFDATA_OFFSET  12 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_TXDESCRIPTOR_PNEXTMBUF_OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Transmit Descriptor Pointer to the Next MBuf chain | 
|  | */ | 
|  | #define IX_NPE_A_TXDESCRIPTOR_PNEXTMBUF_OFFSET      16 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_TXDESCRIPTOR_TOTALLENGTH_OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Transmit Descriptor Total Length | 
|  | * | 
|  | * Total number of bytes written to the chain of MBufs by the NPE | 
|  | */ | 
|  | #define IX_NPE_A_TXDESCRIPTOR_TOTALLENGTH_OFFSET    20 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_TXDESCRIPTOR_AAL5CRCRESIDUE_OFFSET | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Transmit Descriptor AAL5 CRC Residue | 
|  | * | 
|  | * Current CRC value for a PDU | 
|  | */ | 
|  | #define IX_NPE_A_TXDESCRIPTOR_AAL5CRCRESIDUE_OFFSET 24 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_TXDESCRIPTOR_SIZE | 
|  | * | 
|  | * @brief ATM Descriptor structure offset for Transmit Descriptor Size | 
|  | */ | 
|  | #define IX_NPE_A_TXDESCRIPTOR_SIZE                  28 | 
|  |  | 
|  | /** | 
|  | * @def IX_NPE_A_CHAIN_DESC_COUNT_MAX | 
|  | * | 
|  | * @brief Maximum number of chained MBufs that can be chained together | 
|  | */ | 
|  | #define IX_NPE_A_CHAIN_DESC_COUNT_MAX            256 | 
|  |  | 
|  | /* | 
|  | *  Definition of the ATM cell header | 
|  | * | 
|  | * This would most conviently be defined as the bit field shown below. | 
|  | * Endian portability prevents this, therefore a set of macros | 
|  | * are defined to access the fields within the cell header assumed to | 
|  | * be passed as a UINT32. | 
|  | * | 
|  | * Changes to field sizes or orders must be reflected in the offset | 
|  | * definitions above. | 
|  | * | 
|  | *    typedef struct | 
|  | *    { | 
|  | *       unsigned int gfc:4; | 
|  | *       unsigned int vpi:8; | 
|  | *       unsigned int vci:16; | 
|  | *       unsigned int pti:3; | 
|  | *       unsigned int clp:1; | 
|  | *    } IxNpeA_AtmCellHeader; | 
|  | * | 
|  | */ | 
|  |  | 
|  | /** Mask to acess GFC */ | 
|  | #define GFC_MASK        0xf0000000 | 
|  |  | 
|  | /** return GFC from ATM cell header */ | 
|  | #define IX_NPE_A_ATMCELLHEADER_GFC_GET( header ) \ | 
|  | (((header) & GFC_MASK) >> 28) | 
|  |  | 
|  | /** set GFC into ATM cell header */ | 
|  | #define IX_NPE_A_ATMCELLHEADER_GFC_SET( header,gfc ) \ | 
|  | do { \ | 
|  | (header) &= ~GFC_MASK; \ | 
|  | (header) |= (((gfc) << 28) & GFC_MASK); \ | 
|  | } while(0) | 
|  |  | 
|  | /** Mask to acess VPI */ | 
|  | #define VPI_MASK        0x0ff00000 | 
|  |  | 
|  | /** return VPI from ATM cell header */ | 
|  | #define IX_NPE_A_ATMCELLHEADER_VPI_GET( header ) \ | 
|  | (((header) & VPI_MASK) >> 20) | 
|  |  | 
|  | /** set VPI into ATM cell header */ | 
|  | #define IX_NPE_A_ATMCELLHEADER_VPI_SET( header, vpi ) \ | 
|  | do { \ | 
|  | (header) &= ~VPI_MASK; \ | 
|  | (header) |= (((vpi) << 20) & VPI_MASK); \ | 
|  | } while(0) | 
|  |  | 
|  | /** Mask to acess VCI */ | 
|  | #define VCI_MASK        0x000ffff0 | 
|  |  | 
|  | /** return VCI from ATM cell header */ | 
|  | #define IX_NPE_A_ATMCELLHEADER_VCI_GET( header ) \ | 
|  | (((header) & VCI_MASK) >> 4) | 
|  |  | 
|  | /** set VCI into ATM cell header */ | 
|  | #define IX_NPE_A_ATMCELLHEADER_VCI_SET( header, vci ) \ | 
|  | do { \ | 
|  | (header) &= ~VCI_MASK; \ | 
|  | (header) |= (((vci) << 4) & VCI_MASK); \ | 
|  | } while(0) | 
|  |  | 
|  | /** Mask to acess PTI */ | 
|  | #define PTI_MASK        0x0000000e | 
|  |  | 
|  | /** return PTI from ATM cell header */ | 
|  | #define IX_NPE_A_ATMCELLHEADER_PTI_GET( header ) \ | 
|  | (((header) & PTI_MASK) >> 1) | 
|  |  | 
|  | /** set PTI into ATM cell header */ | 
|  | #define IX_NPE_A_ATMCELLHEADER_PTI_SET( header, pti ) \ | 
|  | do { \ | 
|  | (header) &= ~PTI_MASK; \ | 
|  | (header) |= (((pti) << 1) & PTI_MASK); \ | 
|  | } while(0) | 
|  |  | 
|  | /** Mask to acess CLP */ | 
|  | #define CLP_MASK        0x00000001 | 
|  |  | 
|  | /** return CLP from ATM cell header */ | 
|  | #define IX_NPE_A_ATMCELLHEADER_CLP_GET( header ) \ | 
|  | ((header) & CLP_MASK) | 
|  |  | 
|  | /** set CLP into ATM cell header */ | 
|  | #define IX_NPE_A_ATMCELLHEADER_CLP_SET( header, clp ) \ | 
|  | do { \ | 
|  | (header) &= ~CLP_MASK; \ | 
|  | (header) |= ((clp) & CLP_MASK); \ | 
|  | } while(0) | 
|  |  | 
|  |  | 
|  | /* | 
|  | * Definition of the Rx bitfield | 
|  | * | 
|  | * This would most conviently be defined as the bit field shown below. | 
|  | * Endian portability prevents this, therefore a set of macros | 
|  | * are defined to access the fields within the rxBitfield assumed to | 
|  | * be passed as a UINT32. | 
|  | * | 
|  | * Changes to field sizes or orders must be reflected in the offset | 
|  | * definitions above. | 
|  | * | 
|  | * Rx bitfield | 
|  | *    struct | 
|  | *    {   IX_NPEA_RXBITFIELD( | 
|  | *        unsigned int status:1, | 
|  | *        unsigned int port:7, | 
|  | *        unsigned int vcId:8, | 
|  | *        unsigned int currMbufSize:16); | 
|  | *    } rxBitField; | 
|  | * | 
|  | */ | 
|  |  | 
|  | /** Mask to acess the rxBitField status */ | 
|  | #define STATUS_MASK     0x80000000 | 
|  |  | 
|  | /** return the rxBitField status */ | 
|  | #define IX_NPE_A_RXBITFIELD_STATUS_GET( rxbitfield ) \ | 
|  | (((rxbitfield) & STATUS_MASK) >> 31) | 
|  |  | 
|  | /** set the rxBitField status */ | 
|  | #define IX_NPE_A_RXBITFIELD_STATUS_SET( rxbitfield, status ) \ | 
|  | do { \ | 
|  | (rxbitfield) &= ~STATUS_MASK; \ | 
|  | (rxbitfield) |= (((status) << 31) & STATUS_MASK); \ | 
|  | } while(0) | 
|  |  | 
|  | /** Mask to acess the rxBitField port */ | 
|  | #define PORT_MASK       0x7f000000 | 
|  |  | 
|  | /** return the rxBitField port */ | 
|  | #define IX_NPE_A_RXBITFIELD_PORT_GET( rxbitfield ) \ | 
|  | (((rxbitfield) & PORT_MASK) >> 24) | 
|  |  | 
|  | /** set the rxBitField port */ | 
|  | #define IX_NPE_A_RXBITFIELD_PORT_SET( rxbitfield, port ) \ | 
|  | do { \ | 
|  | (rxbitfield) &= ~PORT_MASK; \ | 
|  | (rxbitfield) |= (((port) << 24) & PORT_MASK); \ | 
|  | } while(0) | 
|  |  | 
|  | /** Mask to acess the rxBitField vcId */ | 
|  | #define VCID_MASK       0x00ff0000 | 
|  |  | 
|  | /** return the rxBitField vcId */ | 
|  | #define IX_NPE_A_RXBITFIELD_VCID_GET( rxbitfield ) \ | 
|  | (((rxbitfield) & VCID_MASK) >> 16) | 
|  |  | 
|  | /** set the rxBitField vcId */ | 
|  | #define IX_NPE_A_RXBITFIELD_VCID_SET( rxbitfield, vcid ) \ | 
|  | do { \ | 
|  | (rxbitfield) &= ~VCID_MASK; \ | 
|  | (rxbitfield) |= (((vcid) << 16) & VCID_MASK); \ | 
|  | } while(0) | 
|  |  | 
|  | /** Mask to acess the rxBitField mbuf size */ | 
|  | #define CURRMBUFSIZE_MASK       0x0000ffff | 
|  |  | 
|  | /** return the rxBitField mbuf size */ | 
|  | #define IX_NPE_A_RXBITFIELD_CURRMBUFSIZE_GET( rxbitfield ) \ | 
|  | ((rxbitfield) & CURRMBUFSIZE_MASK) | 
|  |  | 
|  | /** set the rxBitField mbuf size */ | 
|  | #define IX_NPE_A_RXBITFIELD_CURRMBUFSIZE_SET( rxbitfield, currmbufsize ) \ | 
|  | do { \ | 
|  | (rxbitfield) &= ~CURRMBUFSIZE_MASK; \ | 
|  | (rxbitfield) |= ((currmbufsize) & CURRMBUFSIZE_MASK); \ | 
|  | } while(0) | 
|  |  | 
|  |  | 
|  |  | 
|  | /** | 
|  | * @brief Tx Descriptor definition | 
|  | */ | 
|  | typedef struct | 
|  | { | 
|  | UINT8 port;				/**< Tx Port number */ | 
|  | UINT8 aalType; 			/**< AAL Type */ | 
|  | UINT16 currMbufLen;			/**< mbuf length */ | 
|  | UINT32 atmCellHeader;		/**< ATM cell header */ | 
|  | IX_OSAL_MBUF *pCurrMbuf;	        /**< pointer to mbuf */ | 
|  | unsigned char *pCurrMbufData;	/**< Pointer to mbuf->dat */ | 
|  | IX_OSAL_MBUF *pNextMbuf;		/**< Pointer to next mbuf */ | 
|  | UINT32  totalLen;			/**< Total Length */ | 
|  | UINT32  aal5CrcResidue;		/**< AAL5 CRC Residue */ | 
|  | } IxNpeA_TxAtmVc; | 
|  |  | 
|  | /* Changes to field sizes or orders must be reflected in the offset | 
|  | * definitions above. */ | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | /** | 
|  | * @brief Rx Descriptor definition | 
|  | */ | 
|  | typedef struct | 
|  | { | 
|  | UINT32  rxBitField;			/**< Recieved bit field */ | 
|  | UINT32  atmCellHeader;		/**< ATM Cell Header */ | 
|  | UINT32  rsvdWord0;                  /**< Reserved field */ | 
|  | UINT16  currMbufLen;		/**< Mbuf Length */ | 
|  | UINT8   timeLimit; 			/**< Payload Reassembly timeLimit (used for aal0_xx only) */ | 
|  | UINT8   rsvdByte0;                  /**< Reserved field */ | 
|  | UINT32  rsvdWord1;   		/**< Reserved field */ | 
|  | IX_OSAL_MBUF *pCurrMbuf;		/**< Pointer to current mbuf */ | 
|  | unsigned char *pCurrMbufData;	/**< Pointer to current mbuf->data */ | 
|  | IX_OSAL_MBUF *pNextMbuf;		/**< Pointer to next mbuf */ | 
|  | UINT32  totalLen;			/**< Total Length */ | 
|  | UINT32  aal5CrcResidue;		/**< AAL5 CRC Residue */ | 
|  | } IxNpeA_RxAtmVc; | 
|  |  | 
|  |  | 
|  | /** | 
|  | * @brief NPE-A AAL Type | 
|  | */ | 
|  | typedef enum | 
|  | { | 
|  | IX_NPE_A_AAL_TYPE_INVALID = 0,	/**< Invalid AAL type */ | 
|  | IX_NPE_A_AAL_TYPE_0_48    = 0x1,	/**< AAL0 - 48 byte */ | 
|  | IX_NPE_A_AAL_TYPE_0_52    = 0x2,	/**< AAL0 - 52 byte */ | 
|  | IX_NPE_A_AAL_TYPE_5       = 0x5,	/**< AAL5 */ | 
|  | IX_NPE_A_AAL_TYPE_OAM     = 0xF	/**< OAM */ | 
|  | } IxNpeA_AalType; | 
|  |  | 
|  | /** | 
|  | * @brief NPE-A Payload format 52-bytes & 48-bytes | 
|  | */ | 
|  | typedef enum | 
|  | { | 
|  | IX_NPE_A_52_BYTE_PAYLOAD = 0,	/**< 52 byte payload */ | 
|  | IX_NPE_A_48_BYTE_PAYLOAD		/**< 48 byte payload */ | 
|  | } IxNpeA_PayloadFormat; | 
|  |  | 
|  | /** | 
|  | * @brief  HSS Packetized NpePacket Descriptor Structure | 
|  | */ | 
|  | typedef struct | 
|  | { | 
|  | UINT8   status;		/**< Status of the packet passed to the client */ | 
|  | UINT8   errorCount;		/**< Number of errors */ | 
|  | UINT8   chainCount;		/**< Mbuf chain count e.g. 0 - No mbuf chain */ | 
|  | UINT8   rsvdByte0;		/**< Reserved byte to make the descriptor word align */ | 
|  |  | 
|  | UINT16  packetLength;	/**< Packet Length */ | 
|  | UINT16  rsvdShort0;		/**< Reserved short to make the descriptor a word align */ | 
|  |  | 
|  | IX_OSAL_MBUF *pRootMbuf;	/**< Pointer to Root mbuf */ | 
|  | IX_OSAL_MBUF *pNextMbuf;	/**< Pointer to next mbuf */ | 
|  | UINT8   *pMbufData;		/**< Pointer to the current mbuf->data */ | 
|  | UINT32  mbufLength;		/**< Current mbuf length */ | 
|  |  | 
|  | } IxNpeA_NpePacketDescriptor; | 
|  |  | 
|  |  | 
|  | #endif | 
|  | /** | 
|  | *@} | 
|  | */ | 
|  |  | 
|  | #endif /* __doxygen_HIDE */ |