📄 net_buf.h
字号:
*
* (b) 'NET_BUF_SMALL'/'NET_BUF_LARGE' 'Data' buffer declared with an additional CPU data word size so
* that NICs may efficiently & safely read or write data without overflowing the 'Data' buffer.
*
* This additional CPU data word size does NOT increase the overall useable network buffer 'Data'
* size (see also 'net_buf.c NetBuf_GetMaxSize() Note #3').
*
* (c) 'NET_BUF's 'Data' declared with 1 entry; prevents removal by compiler optimization.
*
* (5) Whenever generic 'NET_BUF' pointer 'pbuf' is used to index NetBuf_SmallTbl[] or NetBuf_LargeTbl[],
* 'pbuf' CANNOT be pointer-incremented to access consecutive table buffers; 'pbuf' MUST load the
* address of each table buffer entry.
*********************************************************************************************************
*/
/* ---------------------- NET BUF SMALL ----------------------- */
typedef struct net_buf_small {
NET_BUF_HDR Hdr;
CPU_ALIGN Dummy; /* See Note #2. */
CPU_INT08U Data[NET_BUF_CFG_DATA_SIZE_SMALL /* See Notes #4a & #3. */
+ sizeof(CPU_DATA)]; /* See Note #4b. */
} NET_BUF_SMALL;
/* ---------------------- NET BUF LARGE ----------------------- */
typedef struct net_buf_large {
NET_BUF_HDR Hdr;
CPU_ALIGN Dummy; /* See Note #2. */
CPU_INT08U Data[NET_BUF_CFG_DATA_SIZE_LARGE /* See Notes #4a & #3. */
+ sizeof(CPU_DATA)]; /* See Note #4b. */
} NET_BUF_LARGE;
/* ------------------------- NET BUF -------------------------- */
typedef struct net_buf {
NET_BUF_HDR Hdr;
CPU_ALIGN Dummy; /* See Note #2. */
CPU_INT08U Data[1]; /* See Note #4c. */
} NET_BUF; /* NET_BUF used to point to _SMALL/_LARGE bufs (see Note #5). */
/*$PAGE*/
/*
*********************************************************************************************************
* GLOBAL VARIABLES
*********************************************************************************************************
*/
#if (NET_BUF_CFG_NBR_SMALL > 0) /* ---------------- SMALL NET BUFS ---------------- */
NET_BUF_EXT NET_BUF_SMALL NetBuf_SmallTbl[NET_BUF_CFG_NBR_SMALL];
NET_BUF_EXT NET_BUF_SMALL *NetBuf_SmallPoolPtr; /* Ptr to pool of free small net bufs. */
NET_BUF_EXT NET_STAT_POOL NetBuf_SmallPoolStat;
#endif
#if (NET_BUF_CFG_NBR_LARGE > 0) /* ---------------- LARGE NET BUFS ---------------- */
NET_BUF_EXT NET_BUF_LARGE NetBuf_LargeTbl[NET_BUF_CFG_NBR_LARGE];
NET_BUF_EXT NET_BUF_LARGE *NetBuf_LargePoolPtr; /* Ptr to pool of free large net bufs. */
NET_BUF_EXT NET_STAT_POOL NetBuf_LargePoolStat;
#endif
#if (NET_CTR_CFG_ERR_EN == DEF_ENABLED) /* ----------------- NET BUF ERRS ----------------- */
NET_BUF_EXT NET_CTR NetBuf_ErrNoneAvailCtr; /* Nbr net bufs unavail. */
NET_BUF_EXT NET_CTR NetBuf_ErrInvalidTypeCtr; /* Nbr net bufs with invalid type. */
NET_BUF_EXT NET_CTR NetBuf_ErrSizeCtr; /* Nbr net bufs with invalid size. */
NET_BUF_EXT NET_CTR NetBuf_ErrLenCtr; /* Nbr net bufs with invalid len. */
NET_BUF_EXT NET_CTR NetBuf_ErrLostCtr; /* Nbr net bufs lost/discarded. */
#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED)
NET_BUF_EXT NET_CTR NetBuf_ErrNullPtrCtr; /* Nbr null net buf accesses. */
NET_BUF_EXT NET_CTR NetBuf_ErrNotUsedCtr; /* Nbr unused net buf accesses. */
NET_BUF_EXT NET_CTR NetBuf_ErrIxCtr; /* Nbr net bufs with invalid ix. */
#endif
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
void NetBuf_Init (void);
/* --------- BUF ALLOCATION FNCTS --------- */
NET_BUF_SIZE NetBuf_GetMaxSize (NET_BUF *pbuf,
NET_BUF_SIZE ix_start);
NET_BUF *NetBuf_Get (NET_BUF_SIZE size,
NET_BUF_SIZE ix_start,
CPU_INT16U flags,
NET_ERR *perr);
void NetBuf_Free (NET_BUF *pbuf);
void NetBuf_FreeBuf (NET_BUF *pbuf,
NET_CTR *pctr);
void NetBuf_FreeBufList (NET_BUF *pbuf_list,
NET_CTR *pctr);
void NetBuf_FreeBufQ_PrimList (NET_BUF *pbuf_q,
NET_CTR *pctr);
void NetBuf_FreeBufQ_SecList (NET_BUF *pbuf_q,
NET_CTR *pctr,
CPU_FNCT_PTR pfnct_unlink);
/* ------------ BUF API FNCTS ------------- */
void NetBuf_DataRd (NET_BUF *pbuf,
NET_BUF_SIZE ix,
NET_BUF_SIZE len,
CPU_INT08U *pdest,
NET_ERR *perr);
void NetBuf_DataWr (NET_BUF *pbuf,
NET_BUF_SIZE ix,
NET_BUF_SIZE len,
CPU_INT08U *psrc,
NET_ERR *perr);
/* ----------- BUF STATUS FNCTS ----------- */
CPU_BOOLEAN NetBuf_IsUsed (NET_BUF *pbuf);
#if (NET_BUF_CFG_NBR_SMALL > 0)
NET_STAT_POOL NetBuf_SmallPoolStatGet (void);
void NetBuf_SmallPoolStatResetMaxUsed(void);
#endif
#if (NET_BUF_CFG_NBR_LARGE > 0)
NET_STAT_POOL NetBuf_LargePoolStatGet (void);
void NetBuf_LargePoolStatResetMaxUsed(void);
#endif
/*$PAGE*/
/*
*********************************************************************************************************
* CONFIGURATION ERRORS
*********************************************************************************************************
*/
#ifndef NET_BUF_CFG_NBR_SMALL
#error "NET_BUF_CFG_NBR_SMALL not #define'd in 'net_cfg.h' "
#error " [NET_BUF_CFG_NBR_SMALL MUST be >= 0]"
#error " [ && < 65536]"
/* See 'NETWORK BUFFER QUANTITY DATA TYPE'. */
#elif ((NET_BUF_CFG_NBR_SMALL < DEF_INT_16U_MIN_VAL) || \
(NET_BUF_CFG_NBR_SMALL > DEF_INT_16U_MAX_VAL))
#error "NET_BUF_CFG_NBR_SMALL illegally #define'd in 'net_cfg.h' "
#error " [NET_BUF_CFG_NBR_SMALL MUST be >= 0]"
#error " [ && < 65536]"
#elif (NET_BUF_CFG_NBR_SMALL > 0)
#ifndef NET_BUF_CFG_DATA_SIZE_SMALL
#error "NET_BUF_CFG_DATA_SIZE_SMALL not #define'd in 'net_cfg.h' "
#error " [NET_BUF_CFG_DATA_SIZE_SMALL MUST be >= NET_BUF_DATA_SIZE_MIN]"
#error " [(see 'net_buf.h NETWORK BUFFER DATA TYPE Note #3a') ]"
#elif (NET_BUF_CFG_DATA_SIZE_SMALL < NET_BUF_DATA_SIZE_MIN)
#error "NET_BUF_CFG_DATA_SIZE_SMALL illegally #define'd in 'net_cfg.h' "
#error " [NET_BUF_CFG_DATA_SIZE_SMALL MUST be >= NET_BUF_DATA_SIZE_MIN]"
#error " [(see 'net_buf.h NETWORK BUFFER DATA TYPE Note #3a') ]"
#endif
#if 0 /* Alignment is NOT absolutely required. */
#if (((CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_32) && \
((NET_BUF_CFG_DATA_SIZE_SMALL % CPU_WORD_SIZE_32) != 0)) || \
((CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_16) && \
((NET_BUF_CFG_DATA_SIZE_SMALL % CPU_WORD_SIZE_16) != 0)))
#error "NET_BUF_CFG_DATA_SIZE_SMALL illegally #define'd in 'net_cfg.h' "
#error " [NET_BUF_CFG_DATA_SIZE_SMALL SHOULD be an integer ]"
#error " [ multiple of 'CPU_ALIGN' word size ]"
#error " [(see 'net_buf.h NETWORK BUFFER DATA TYPE Note #3c')]"
#endif
#endif
#endif
#ifndef NET_BUF_CFG_NBR_LARGE
#error "NET_BUF_CFG_NBR_LARGE not #define'd in 'net_cfg.h' "
#error " [NET_BUF_CFG_NBR_LARGE MUST be >= 0]"
#error " [ && < 65536]"
/* See 'NETWORK BUFFER QUANTITY DATA TYPE'. */
#elif ((NET_BUF_CFG_NBR_LARGE < DEF_INT_16U_MIN_VAL) || \
(NET_BUF_CFG_NBR_LARGE > DEF_INT_16U_MAX_VAL))
#error "NET_BUF_CFG_NBR_LARGE illegally #define'd in 'net_cfg.h' "
#error " [NET_BUF_CFG_NBR_LARGE MUST be >= 0]"
#error " [ && < 65536]"
#elif (NET_BUF_CFG_NBR_LARGE > 0)
#ifndef NET_BUF_CFG_DATA_SIZE_LARGE
#error "NET_BUF_CFG_DATA_SIZE_LARGE not #define'd in 'net_cfg.h' "
#error " [NET_BUF_CFG_DATA_SIZE_LARGE MUST be >= NET_BUF_DATA_SIZE_MIN]"
#error " [(see 'net_buf.h NETWORK BUFFER DATA TYPE Note #3a') ]"
#elif (NET_BUF_CFG_DATA_SIZE_LARGE < NET_BUF_DATA_SIZE_MIN)
#error "NET_BUF_CFG_DATA_SIZE_LARGE illegally #define'd in 'net_cfg.h' "
#error " [NET_BUF_CFG_DATA_SIZE_LARGE MUST be >= NET_BUF_DATA_SIZE_MIN]"
#error " [(see 'net_buf.h NETWORK BUFFER DATA TYPE Note #3a') ]"
#endif
#if 0 /* Alignment is NOT absolutely required. */
#if (((CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_32) && \
((NET_BUF_CFG_DATA_SIZE_LARGE % CPU_WORD_SIZE_32) != 0)) || \
((CPU_CFG_DATA_SIZE == CPU_WORD_SIZE_16) && \
((NET_BUF_CFG_DATA_SIZE_LARGE % CPU_WORD_SIZE_16) != 0)))
#error "NET_BUF_CFG_DATA_SIZE_LARGE illegally #define'd in 'net_cfg.h' "
#error " [NET_BUF_CFG_DATA_SIZE_LARGE SHOULD be an integer ]"
#error " [ multiple of 'CPU_ALIGN' word size ]"
#error " [(see 'net_buf.h NETWORK BUFFER DATA TYPE Note #3c')]"
#endif
#endif
#endif
/*$PAGE*/
#if ((NET_BUF_CFG_NBR_SMALL < 1) && \
(NET_BUF_CFG_NBR_LARGE < 1))
#error "NET_BUF_CFG_NBR_SMALL && "
#error "NET_BUF_CFG_NBR_LARGE illegally #define'd in 'net_cfg.h' "
#error " [NET_BUF_CFG_NBR_SMALL || ]"
#error " [NET_BUF_CFG_NBR_LARGE MUST be > 0]"
#endif
#if ((NET_BUF_CFG_NBR_SMALL > 0 ) && \
(NET_BUF_CFG_NBR_LARGE > 0 ) && \
(NET_BUF_CFG_DATA_SIZE_LARGE < NET_BUF_CFG_DATA_SIZE_SMALL))
#error "NET_BUF_CFG_DATA_SIZE_LARGE illegally #define'd in 'net_cfg.h' "
#error " [NET_BUF_CFG_DATA_SIZE_LARGE MUST be >= NET_BUF_CFG_DATA_SIZE_SMALL]"
#error " [(see 'net_buf.h NETWORK BUFFER DATA TYPE Note #3b') ]"
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -