blob: 2926454ba732ed251dcb23d6fd5518f2dc6ffba5 [file] [log] [blame]
#ifndef __MTAD_GPD_H__
#define __MTAD_GPD_H__
#define HDMA_MAX_XFER_LEN 0xFFFF
#define HDMA_MAX_TX_MEM 5*1024//*1024
#define HDMA_MAX_RX_MEM 5*1024//*1024
#define HDMA_MAX_DUMMY_MEM 10*1024
#define HDMA_MAX_GPD_EXT_LEN 0xFF
#define HDMA_MAX_BD_EXT_LEN 0xFF
#define HDMA_MAX_GPD_UINT 0xFFFF
#define HDMA_MAX_BD_UINT 0xFFFF
#define HDMA_MAX_TGPD_NUM 256
#define HDMA_MAX_RGPD_NUM 256
#define HDMA_MAX_TBD_NUM 512
#define HDMA_MAX_RBD_NUM 512
#define HDMA_RX_TST_PADDDING 10 //Used in TX test, let the prepared RX buffer larger than the expected size to test the RX data timeout
typedef enum{
HDMA_BUF0,
HDMA_BUF1,
HDMA_BUF_BOTH,
} mtad_hdma_buf_mode_t;
typedef enum{
HDMA_TST_TX,
HDMA_TST_RX,
} mtad_hdma_tst_mode_t;
typedef struct mtad_hdma_tgpd_s {
kal_uint8 hwo:1;
kal_uint8 bdp:1;
kal_uint8 bps:1;
kal_uint8 resv1:4;
kal_uint8 ioc:1;
kal_uint8 cksum;
kal_uint16 resv2;
kal_uint32 nextPtr;
kal_uint32 bufPtr;
kal_uint16 bufLen;
kal_uint8 extLen;
kal_uint8 resv3;
kal_uint8 extBuf[HDMA_MAX_GPD_EXT_LEN + 1]; // Extension field
} mtad_hdma_tgpd_t;
typedef struct mtad_hdma_rgpd_s {
kal_uint8 hwo:1;
kal_uint8 bdp:1;
kal_uint8 bps:1;
kal_uint8 resv1:4;
kal_uint8 ioc:1;
kal_uint8 cksum;
kal_uint16 allowBufLen;
kal_uint32 nextPtr;
kal_uint32 bufPtr;
kal_uint16 bufLen;
kal_uint16 resv2;
} mtad_hdma_rgpd_t;
typedef struct mtad_hdma_tbd_s {
kal_uint8 eol:1;
kal_uint8 resv1:7;
kal_uint8 cksum;
kal_uint16 resv2;
kal_uint32 nextPtr;
kal_uint32 bufPtr;
kal_uint16 bufLen;
kal_uint8 extLen;
kal_uint8 resv3;
kal_uint8 extBuf[HDMA_MAX_BD_EXT_LEN + 1]; // Extension field
} mtad_hdma_tbd_t;
typedef struct mtad_hdma_rbd_s {
kal_uint8 eol:1;
kal_uint8 resv1:7;
kal_uint8 cksum;
kal_uint16 allowBufLen;
kal_uint32 nextPtr;
kal_uint32 bufPtr;
kal_uint16 bufLen;
kal_uint16 resv2;
} mtad_hdma_rbd_t;
typedef struct mtad_hdma_tx_queue_s {
mtad_hdma_tgpd_t *gpdHeadPtr;
mtad_hdma_tgpd_t *lastLoadedGpdPtr;
kal_uint32 count;
} mtad_hdma_tx_queue_t;
typedef struct mtad_hdma_rx_queue_s {
mtad_hdma_rgpd_t *gpdHeadPtr;
mtad_hdma_rgpd_t *lastLoadedGpdPtr;
kal_uint32 count;
} mtad_hdma_rx_queue_t;
typedef struct mtad_hdma_tgpd_pool_s{
kal_uint32 gpdUsed;
kal_uint32 gpdMax;
mtad_hdma_tgpd_t *gpd;
} mtad_hdma_tgpd_pool_t;
typedef struct mtad_hdma_rgpd_pool_s{
kal_uint32 gpdUsed;
kal_uint32 gpdMax;
mtad_hdma_rgpd_t *gpd;
} mtad_hdma_rgpd_pool_t;
typedef struct mtad_hdma_tbd_pool_s{
kal_uint32 bdUsed;
kal_uint32 bdMax;
mtad_hdma_tbd_t *bd;
} mtad_hdma_tbd_pool_t;
typedef struct mtad_hdma_rbd_pool_s{
kal_uint32 bdUsed;
kal_uint32 bdMax;
mtad_hdma_rbd_t *bd;
} mtad_hdma_rbd_pool_t;
typedef struct mtad_hdma_gpd_bd_param_s{
kal_uint32 gpdLenLimit;
kal_uint32 gpdExtLen;
kal_uint32 bdLenLimit;
kal_uint32 bdExtLen;
kal_uint32 bdNumLimit;
} mtad_hdma_gpd_bd_param_t;
typedef struct mtad_hdma_gpd_config_s{
kal_uint8 bps:1;
kal_uint8 ioc:1;
kal_uint8 resv:6;
} mtad_hdma_gpd_config_t;
#endif