1 /* 2 * RxBuf.h 3 * 4 * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * * Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * * Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * * Neither the name Texas Instruments nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 35 /***************************************************************************/ 36 /* */ 37 /* MODULE: buf.h */ 38 /* PURPOSE: manages the allocation/free and field access of the BUF */ 39 /* */ 40 /***************************************************************************/ 41 #ifndef _BUF_H_ 42 #define _BUF_H_ 43 44 #include "tidef.h" 45 #include "queue.h" 46 #include "public_descriptors.h" 47 48 49 50 #define WSPI_PAD_BYTES 16 /* Add padding before data buffer for WSPI overhead */ 51 #define PAYLOAD_ALIGN_PAD_BYTES 4 /* Add an extra word for alignment the MAC payload in case of QoS MSDU */ 52 53 54 55 /** 56 * \brief Buffer for Tx/Rx packets 57 */ 58 typedef void BUF, *PBUF; 59 60 /* Packet types */ 61 62 63 /** 64 * \def RX_BUF_DATA 65 * \brief Macro which gets a pointer to BUF packet header and returns the pointer to the start address of the WLAN packet's data 66 */ 67 #define RX_BUF_DATA(pBuf) ((void*)((TI_UINT8 *)pBuf + sizeof(RxIfDescriptor_t))) 68 /** 69 * \def RX_BUF_LEN 70 * \brief Macro which gets a pointer to BUF packet header and returns the buffer length (without Rx Descriptor) of the WLAN packet 71 */ 72 #define RX_BUF_LEN(pBuf) ( (((RxIfDescriptor_t *)(pBuf))->length << 2) - \ 73 ((RxIfDescriptor_t *)(pBuf))->extraBytes - \ 74 sizeof(RxIfDescriptor_t) ) 75 76 /** 77 * \def RX_ETH_PKT_DATA 78 * \brief Macro which gets a pointer to BUF packet header and returns the pointer to the start address of the ETH packet's data 79 */ 80 #define RX_ETH_PKT_DATA(pBuf) *((void **)(((TI_UINT32)pBuf + sizeof(RxIfDescriptor_t) + 2) & ~3)) 81 /** 82 * \def RX_ETH_PKT_LEN 83 * \brief Macro which gets a pointer to BUF packet header and returns the buffer length (without Rx Descriptor) of the ETH packet 84 */ 85 #define RX_ETH_PKT_LEN(pBuf) *((TI_UINT32 *)(((TI_UINT32)pBuf + sizeof(RxIfDescriptor_t) + 6) & ~3)) 86 87 88 /** \brief BUF Allocation 89 * 90 * \param hOs - OS module object handle 91 * \param len - Length of allocated WBUF 92 * \param ePacketClassTag - The RX packet type (used only in EMP) 93 * \return On success: Pointer to WBUF ; Otherwise: NULL 94 * 95 * \par Description 96 * This function allocates BUF element for Tx/Rx packet 97 * 98 * \sa 99 */ 100 BUF* RxBufAlloc (TI_HANDLE hOs, TI_UINT32 len, PacketClassTag_e ePacketClassTag); 101 102 103 /** \brief BUF Free 104 * 105 * \param hOs - OS module object handle 106 * \param pWbuf - Pointer to WBUF which was previously created by user 107 * \return void 108 * 109 * \par Description 110 * This function frees the memory allocated for BUF element 111 * 112 * \sa 113 */ 114 void RxBufFree (TI_HANDLE hOs, void* pBuf); 115 116 117 /** \brief BUF Free 118 * 119 * \param hOs - OS module object handle 120 * \param pWbuf - Pointer to WBUF which was previously created by user 121 * \return void 122 * 123 * \par Description 124 * This function increment the start address of data held in BUF element in len. 125 * 126 * \sa 127 */ 128 void RxBufReserve (TI_HANDLE hOs, void* pBuf, TI_UINT32 len); 129 130 #endif 131 132