⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 net_buf.h

📁 ucos的tcpip协议占
💻 H
📖 第 1 页 / 共 3 页
字号:
*
*               (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 + -