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

📄 mbuf_pub.h

📁 abstract rtos
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifdef __cplusplus#if __cplusplusextern "C"{#endif #endif #ifndef __INC_MBUF_PUB_H__#define __INC_MBUF_PUB_H__#define MBUF_MBUF_SIZE ( sizeof(MBUF_S) )#define MBUF_DATA_BLOCK_DESC_SIZE ( sizeof(MBUF_DATABLOCKDESCRIPTOR_S) )#define MBUF_DATA_BLOCK2048_SIZE 2048#define MBUF_DATA_BLOCK4096_SIZE 4096#define MBUF_MAGIC_WORD				0x12345678#define MBUF_MIN(a,b) (((a) < (b)) ? (a) : (b))#define MBUF_TYPE_DATA				1#define MBUF_TYPE_CONTROL			2#define MBUF_TYPE_NAME				3#define MBUF_TYPE_OOBDATA           4#define MBUF_TYPE_SOOPTS            5#define MBUF_PRI_LOOPAD		4#define MBUF_PRI_TOP		3#define MBUF_PRI_HIGH		0#define MBUF_PRI_MEDI		1#define MBUF_PRI_LOW		2#define MBUF_GET_PRI(pstMBufM)  ( (pstMBufM)->stUserTagData.stCommonInfo.ulPRI )#define MBUF_ASSIGN_PRI(pstMBufM, ulPri) \	(pstMBufM)->stUserTagData.stCommonInfo.ulPRI = (ulPri)#define MBUF_CREATE_BY_DATA_BLOCK(pstMBufM, pucDataBlockM, ulDataBlockLengthM,	pucDataM, \	ulDataLengthM, ulReceiveIfnetIndexM, ulMpeM)\{\	(pstMBufM) = aos_dmem_alloc( ulMpeM, SID_MBUF, MBUF_MBUF_SIZE);\	if( (pstMBufM) != NULL)\	{\		(pstMBufM)->ulMbufMagic = MBUF_MAGIC_NUMBER;\		(pstMBufM)->stDataBlockDescriptor.ulDBMagic = DBES_MAGIC_NUMBER;\		(pstMBufM)->stDataBlockDescriptor.pstNextDataBlockDescriptor = (MBUF_DATABLOCKDESCRIPTOR_S*)NULL;\		(pstMBufM)->stDataBlockDescriptor.pucDataBlock = (pucDataBlockM);\		(pstMBufM)->stDataBlockDescriptor.ulDataBlockLength = (ulDataBlockLengthM);\		(pstMBufM)->stDataBlockDescriptor.pucData = (pucDataM);\		(pstMBufM)->stDataBlockDescriptor.ulDataLength = (ulDataLengthM);\		(pstMBufM)->stDataBlockDescriptor.ulType = MBUF_TYPE_DATA;\		(pstMBufM)->stDataBlockDescriptor.ulOption = 0;\		\		aos_memset( (VOID *) (& pstMBufM->stUserTagData), 0 , sizeof(MBUF_USERTAGDATA_S));\		(pstMBufM)->ulTotalDataLength = (ulDataLengthM);\		(pstMBufM)->ulDataBlockNumber = 1;\		(pstMBufM)->stUserTagData.stCommonInfo.ulReceiveIfnetIndex = (ulReceiveIfnetIndexM);\		(pstMBufM)->pstNextMBuf = NULL;\	}\}struct tagMBuf;extern VOID mbuf_cut_head(struct tagMBuf * pstMBuf, U32 ulLength);#define MBUF_CUT_HEAD(pstMBufM, ulLengthM)\{\	if(MBUF_IS_OK(pstMBufM))\	{\		if( (pstMBufM)->stDataBlockDescriptor.ulDataLength >= (ulLengthM) )\		{\			(pstMBufM)->stDataBlockDescriptor.pucData += (ulLengthM);\			(pstMBufM)->stDataBlockDescriptor.ulDataLength -= (ulLengthM);\			(pstMBufM)->ulTotalDataLength -= (ulLengthM);\		}\		else\		{\			mbuf_cut_head( (pstMBufM), (ulLengthM) );\		}\	}\	else\	{\		AOS_ASSERT(0);\	}\}extern U32 mbuf_pullup(struct tagMBuf * pstMBuf, U32 ulLength, U32 mpe);#define MBUF_MAKE_MEMORY_CONTINUOUS(pstMBufM, ulLengthM, ulMpeM, ulResultM) \{\	if(MBUF_IS_OK(pstMBufM))\	{\		if( (pstMBufM)->stDataBlockDescriptor.ulDataLength < (ulLengthM) )\		{\			(ulResultM) = mbuf_pullup( (pstMBufM), (ulLengthM), (ulMpeM) );\		}\		else\		{\			(ulResultM) = MBUF_OK;\		}\	}\	else\	{\		AOS_ASSERT(0);\		(ulResultM) = MBUF_FAIL;\	}\}extern U32 mbuf_prepend_db(struct tagMBuf * pstMBuf, U32 ulLength, U32 mpe);#define MBUF_PREPEND_MEMORY_SPACE(pstMBufM, ulLengthM, ulMpeM, ulResultM)\{\	U32 ulReferenceCount;\	MBUF_DATABLOCKDESCRIPTOR_S * pstDataBlockDescriptor;\	U32 ulReturn;\	\	if(MBUF_IS_OK(pstMBufM))	\	{\		pstDataBlockDescriptor = &( (pstMBufM)->stDataBlockDescriptor );\		ulReturn = aos_dmem_ref_get(pstDataBlockDescriptor->pucDataBlock, & ulReferenceCount);\		if(ulReturn != 0)\		{\			ulReferenceCount = 2;\		}\		if(ulReferenceCount == 1 \			&& (U32) (pstDataBlockDescriptor->pucData - pstDataBlockDescriptor->pucDataBlock) >= (ulLengthM) )\		{\			pstDataBlockDescriptor->pucData -= (ulLengthM);\			pstDataBlockDescriptor->ulDataLength += (ulLengthM);\			(pstMBufM)->ulTotalDataLength += (ulLengthM);\			(ulResultM) = MBUF_OK;\		}\		else\		{\			(ulResultM) = mbuf_prepend_db( (pstMBufM), (ulLengthM), (ulMpeM) );\		}\	}\	else\	{\		AOS_ASSERT(0);\		(ulResultM) = MBUF_FAIL;\	}\}#define MBUF_COMPRESS(pstMBufM, ulDataBlockNumberM, ulMpeM, ulResultM)\{\	if(MBUF_IS_OK(pstMBufM))\	{\		if( (pstMBufM)->ulDataBlockNumber > (ulDataBlockNumberM) )\		{\			(ulResultM) = mbuf_compress((pstMBufM), (ulDataBlockNumberM), (ulMpeM) );\		}\		else\		{\			(ulResultM) = MBUF_OK;\		}\	}\	else\	{\		(ulResultM) = MBUF_FAIL;\	}\}#define MBUF_GET_DATA_BLOCK_DESC(pstMBufM) ( & ( (pstMBufM)->stDataBlockDescriptor) )#define MBUF_GET_DATA_BLOCK_DESC_INFO(pstDataBlockDescriptorM, pucDataM, ulDataLengthM, pstNextDataBlockDescriptorM)\{\	(pucDataM) = (pstDataBlockDescriptorM)->pucData;\	(ulDataLengthM) = (pstDataBlockDescriptorM)->ulDataLength;\	(pstNextDataBlockDescriptorM) = (pstDataBlockDescriptorM)->pstNextDataBlockDescriptor;\}#define MBUF_MTOD(pstMBufM, DataTypeM) ( (DataTypeM)  (pstMBufM)->stDataBlockDescriptor.pucData )#define MBUF_GET_PTR_NEXT_MBUF(pstMBufM) ( (pstMBufM)->pstNextMBuf )#define MBUF_ASSIGN_PTR_NEXT_MBUF(pstMBufM, pstNextMBufM) (pstMBufM)->pstNextMBuf = (pstNextMBufM)#define MBUF_GET_TOTAL_DATA_LENGTH(pstMBufM) ( (pstMBufM)->ulTotalDataLength )#define MBUF_GET_DATA_BLOCK_NUMBER(pstMBufM) ( (pstMBufM)->ulDataBlockNumber )#define MBUF_GET_DATA_BLOCK_DESC_TYPE(pstDataBlockDescriptorM) (pstDataBlockDescriptorM)->ulType#define MBUF_ASSIGN_DATA_BLOCK_DESC_TYPE(pstDataBlockDescriptorM, ulTypeM) (pstDataBlockDescriptorM)->ulType = (ulTypeM)#define MBUF_GET_DATA_BLOCK_DESC_OPTION(pstDataBlockDescriptorM) (pstDataBlockDescriptorM)->ulOption#define MBUF_SET_DATA_BLOCK_DESC_OPTION(pstDataBlockDescriptorM, ulOptionM) (pstDataBlockDescriptorM)->ulOption |= (ulOptionM)#define MBUF_CLEAR_DATA_BLOCK_DESC_OPTION(pstDataBlockDescriptorM, ulOptionM) (pstDataBlockDescriptorM)->ulOption &= (~(ulOptionM))#define MBUF_GET_NONZERO_DATA_BLOCK_NUMBER(pstMBufM, ulNonzeroDataBlockNumberM)\{\	MBUF_DATABLOCKDESCRIPTOR_S * pstDataBlockDescriptor;\	\	(ulNonzeroDataBlockNumberM) = 0;\	for(pstDataBlockDescriptor = MBUF_GET_DATA_BLOCK_DESC(pstMBufM);\		pstDataBlockDescriptor != NULL;\		pstDataBlockDescriptor = pstDataBlockDescriptor->pstNextDataBlockDescriptor)\	{\		if(pstDataBlockDescriptor->ulDataLength != 0)\		{\			(ulNonzeroDataBlockNumberM) ++;\		}\	}\} #define MBUF_FAIL ((U32) 1)#define MBUF_OK ((U32) 0)typedef struct tagMBufCommonInfo{	U32 ulReceiveIfnetIndex;	U32 ulSendIfnetIndex;	U32 ulSendAtIndex;	U32 ulChannelCID;	U32 ulSlotInfo;	U32 ulQueueID;			U32 ulPRI;	MBUF_USERTAGDATA_S stUserTagData;       	MBUF_DATABLOCKDESCRIPTOR_S stDataBlockDescriptor;}MBUF_S;MBUF_S * mbuf_create_and_copy_buf(U32 ulReserveHeadSpace, U32 ulLength, U8 * pucBuffer, U32 ulType, U32 mpe);MBUF_S * mbuf_create(U32 ulReserveHeadSpace, U32 ulLength, U32 ulType, U32 mpe);U32 mbuf_destroy(MBUF_S * pstMBuf);U32 mbuf_copy_from_buff(MBUF_S * pstMBuf, U32 ulOffset, U32 ulLength, U8 * pucBuffer, U32 mpe);U32 mbuf_copy_to_buff(MBUF_S * pstMBuf, U32 ulOffset, U32 ulLength, U8 * pucBuffer);MBUF_S * mbuf_reference_copy(MBUF_S * pstMBuf, U32 ulOffset, U32 ulLength, U32 mpe);MBUF_S * mbuf_raw_copy(MBUF_S * pstMBuf, U32 ulOffset, U32 ulLength, U32 ulReserveHeadSpace, U32 mpe);U32 mbuf_concatenate(MBUF_S * pstDestinationMBuf, MBUF_S * pstSourceMBuf, U32 mpe);MBUF_S * mbuf_fragment(MBUF_S * pstMBuf, U32 ulLength, U32 mpe);U32 mbuf_cut_and_free_head(MBUF_S * pstMBuf, U32 ulLength);U32 mbuf_cut_part(MBUF_S * pstMBuf, U32 ulOffset, U32 ulLength);U32 mbuf_cut_tail(MBUF_S * pstMBuf, U32 ulLength);U8 * mbuf_append(MBUF_S * pstMBuf, U32 ulLength, U32 mpe);U32 mbuf_assign_zero(MBUF_S * pstMBuf);MBUF_S * mbuf_reference_copy_by_dbdes(MBUF_DATABLOCKDESCRIPTOR_S * pstDataBlockDescriptor,  U32 ulOffset, U32 ulLength,  U32 mpe);MBUF_S * mbuf_raw_copy_by_dbdes(MBUF_DATABLOCKDESCRIPTOR_S * pstDataBlockDescriptor,  U32 ulOffset, U32 ulLength,  U32 mpe);U32 mbuf_neat_concatenate(MBUF_S * pstDestinationMBuf, MBUF_S * pstSourceMBuf, MBUF_DATABLOCKDESCRIPTOR_S ** ppstLastDataBlockDescriptor, U32 mpe);U32 mbuf_free_zero_db(MBUF_S * pstMBuf);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -