📄 ixatmdtxtransport_p.h
字号:
/*** @def IX_ATMDACC_TXQ_MID_DECR* @brief Rollback a PDU submit from a software TX Queue** @note - This action is done during a TxPduSubmit rollback*/#define IX_ATMDACC_TXQ_MID_DECR(queue) \ IX_ATMDACC_SWQ_MID_DECR(queue)/*** @def IX_ATMDACC_TXQ_OVERLOADED* @brief Check if a software TX Queue is overloaded*/#define IX_ATMDACC_TXQ_OVERLOADED(queue) \ ((queue)->head == (queue)->mid)/*** @def IX_ATMDACC_TXQ_SCHEDULE_PENDING* @brief Check if elements are waiting for scheduling in a software TX Queue*/#define IX_ATMDACC_TXQ_SCHEDULE_PENDING(queue) \ ((queue)->tail != (queue)->mid)/*** @def IX_ATMDACC_TXQ_RECYCLE_PENDING* @brief Check in a software TX Queue if descriptors are still used by the Npe or waiting in the txDone queue*/#define IX_ATMDACC_TXQ_RECYCLE_PENDING(queue) \ (((queue)->head - (queue)->tail) != (queue)->size)/*** @def IX_ATMDACC_TXQ_TAIL_ENTRY_GET* @brief Get a @a IxAtmdAccNpeDescriptor at the tail of a software TX Queue*/#define IX_ATMDACC_TXQ_TAIL_ENTRY_GET(queue) \ IX_ATMDACC_SWQ_TAIL_ENTRY_GET(queue)/*** @def IX_ATMDACC_TXQ_HEAD_ENTRY_GET* @brief Get a @a IxAtmdAccNpeDescriptor at the head of a software TX Queue*/#define IX_ATMDACC_TXQ_HEAD_ENTRY_GET(queue) \ IX_ATMDACC_SWQ_HEAD_ENTRY_GET(queue)/*** @def IX_ATMDACC_TXQ_MID_ENTRY_GET* @brief Get a @a IxAtmdAccNpeDescriptor inside a software TX Queue*/#define IX_ATMDACC_TXQ_MID_ENTRY_GET(queue) \ IX_ATMDACC_SWQ_MID_ENTRY_GET(queue)/*** @def IX_ATMDACC_TX_SCHEDULE_TABLE_SIZE* @brief schedule table size used to build the entries needed* to fill the tx vc queue over the threshold level. This is set* to the maximum queue size.*/#define IX_ATMDACC_TX_SCHEDULE_TABLE_SIZE (IX_QMGR_Q_SIZE_INVALID - 1)/**** @brief IxAtmdAcc Tx channel information** The information in this structure is used on a per-channel basis.** This structure contains* @li The channel characteristics (port/vpi/vci ..)* @li The user callback functions and Id to be used when a mbuf is transmitted* @li An internal software queue to store incoming Pdus, process TX schedule and TX done recycling* @li The current information about the pdu being transmitted**/typedef struct{ IxAtmConnId connId; /**< channel Connection Id */ IxAtmLogicalPort port; /**< channel port */ unsigned int vpi; /**< channel vpi */ unsigned int vci; /**< channel vci */ IxNpeA_AalType npeAalType; /**< the npe service type for this connection */ unsigned int cellSize; /**< the cell size 48/52 for this connection */ IxAtmSchedulerVcId schedulerVcId; /**< scheduler Id for this channel */ IxQMgrCallbackId callbackId; /**< userId passed in a callback */ IxAtmdAccTxVcBufferReturnCallback txDoneCallback; /**< user callback */ IxAtmdAccNpeDescriptor *currentNpeDesc; /**< current entry being scheduled */ unsigned int remainingPduCellCount; /**< counter of remaining cells for this PDU */ volatile BOOL pduTransmitInProgress; /**< This flag is set when a pdu is being submitted. When set, it is not safe to force the data recycling during a @a ixAtmdAccTxDisconnect() step */ void * swQueueBuffer[IX_NPE_A_CHAIN_DESC_COUNT_MAX]; /**< data space for a sw queue. The maximum * size of the queue is driven by the number of PDUs * the NPE can chain */ IX_ATMDACC_TX_QUEUE queue; /**< Transmit s/w queue */#ifndef NDEBUG unsigned int txSubmitOverloadedCount; /**< Counter of overloaded conditions */ unsigned int txVcPduSubmitFailureCount; /**< failures during txvcPduSubmit */#endif} IxAtmdAccTxVcDescriptor;/*** @enum IxAtmdAccPortStatus* @brief Logical Port status*/typedef enum{ IX_ATMDACC_PORT_DOWN = 0, IX_ATMDACC_PORT_UP, IX_ATMDACC_PORT_DOWN_PENDING} IxAtmdAccPortStatus;/**** @brief AtmdAcc port information** The information in this structure is used on a per-port basis.** This structure contains* @li The user callback functions and Id to be used during an event notification* @li The current information about the queue setup* @li Flags to avoid reentrancy in Critical code**/typedef struct{ IxAtmdAccPortTxLowCallback txLowCallback; /**< User callback * invoked when the queue level is going * low */ IxQMgrQId txQueueId; /**< Tx queue associated * with this port */ unsigned int txQueueSize; /**< Tx queue size */ unsigned int txQueueThreshold; /**< Tx queue threshold (0 if not used) */ IxAtmScheduleTableEntry scheduleTable[IX_ATMDACC_TX_SCHEDULE_TABLE_SIZE]; /**< * schedule table used to build the last entries * to be filled up to the threshold level */ IxAtmdAccPortStatus status; /**< Logical port status (down or up) */ IxAtmdAccTxVcDemandUpdateCallback schDemandUpdate; /**< Atm Scheduling entity * associated with this port */ IxAtmdAccTxVcDemandClearCallback schDemandClear; /**< Atm Scheduling entity * associated with this port */ IxAtmdAccTxSchVcIdGetCallback schVcIdGet; /**< Atm Scheduling entity * associated with this port */ volatile BOOL schedulingInProgress; /**< This flag is set when * a schedule table is being processed. When * set, it is not safe to * force the data recycling during a * @a ixAtmdAccTxVcTryDisconnect() step */ UINT32 qMgrEntries[IX_ATMDACC_TX_SCHEDULE_TABLE_SIZE]; /**< * array of entries for qMgr burst write */} IxAtmdAccPortDescriptor;#ifndef NDEBUG/**** @brief AtmdAcc Tx transport stats** The information in this structure is used to log possible* runTime errors.**/typedef struct{ unsigned int txProcessInvokeCount; /**< schedule table submitted */ unsigned int txProcessFailedCount; /**< schedule table failure */ unsigned int idleCellScheduledCount; /**< idle cells scheduled */ unsigned int dataCellScheduledCount; /**< data cells scheduled */ unsigned int pduScheduledCount; /**< pdu scheduled */ unsigned int overScheduledCellCount; /**< Number of overscheduled cells */ unsigned int wrongConnIdScheduledCount; /**< wrong connId scheduled */ unsigned int disconnectScheduledCount; /**< scheduled during diconnect */ unsigned int txProcessUnderscheduledCount; /**< underscheduled */ unsigned int zeroCellCount; /**< Number of times 0 cells are scheduled by the scheduler */} IxAtmdAccTxTransportStats;/**** @brief AtmdAcc txDone transport stats** The information in this structure is used to log possible* runTime errors.**/typedef struct{ unsigned int invokeCount; /**< txDone invoke */ unsigned int failedCount; /**< txDone failures */ unsigned int pduCount; /**< txDone pdu received */ unsigned int ackCount; /**< txDone disable ack received */ unsigned int maxPduPerDispatch; /**< Maximum number of PDus per dispatch */ unsigned int descriptorOrderErrorCount; /**< descriptors out of order from npe */} IxAtmdAccTxDoneDispatchStats;/*** @brief txDone stats informations*/IX_ATMDACC_TX_TRANSPORT_EXTERN IxAtmdAccTxDoneDispatchStats ixAtmdAccTxDoneDispatchStats;/*** @brief tx stats informations*/IX_ATMDACC_TX_TRANSPORT_EXTERN IxAtmdAccTxTransportStats ixAtmdAccTxTransportStats[IX_UTOPIA_MAX_PORTS];#endif /* NDEBUG *//*** @brief pool of port information*/IX_ATMDACC_TX_TRANSPORT_EXTERN IxAtmdAccPortDescriptor ixAtmdAccPortDescriptor[IX_UTOPIA_MAX_PORTS];/*** @brief pool of channel slots*/IX_ATMDACC_TX_TRANSPORT_EXTERN IxAtmdAccTxVcDescriptor ixAtmdAccTxVcDescriptor[IX_ATM_MAX_NUM_AAL_OAM_TX_VCS];/*** @brief user callback to be used when the threshold level of the txdone queue is reached*/IX_ATMDACC_TX_TRANSPORT_EXTERN IxAtmdAccTxDoneDispatcher ixAtmdAccTxDoneDispatcher;/*** @brief buffer used to dump the contents of the tx done queue** This buffer is done to accomodate the tx done burst read. There is an extra entry* which is used as a null pointer to mark the end of the data when the full queue* is read.*/IX_ATMDACC_TX_TRANSPORT_EXTERN UINT32 ixAtmdAccTxDoneDispatchBuffer[IX_ATMDACC_TXDONE_QUEUE_SIZE + 1];/*** @brief number of ports configured in the system*/IX_ATMDACC_TX_TRANSPORT_EXTERN IxAtmLogicalPort ixAtmdAccTxNumPortConfigured;#endif /* IX_ATMDACC_TX_TRANSPORT_P_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -