| /* |
| * Copyright (c) 2011-2013, 2016 The Linux Foundation. All rights reserved. |
| * |
| * Previously licensed under the ISC license by Qualcomm Atheros, Inc. |
| * |
| * |
| * Permission to use, copy, modify, and/or distribute this software for |
| * any purpose with or without fee is hereby granted, provided that the |
| * above copyright notice and this permission notice appear in all |
| * copies. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL |
| * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED |
| * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE |
| * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL |
| * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR |
| * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER |
| * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
| * PERFORMANCE OF THIS SOFTWARE. |
| */ |
| |
| /* |
| * This file was originally distributed by Qualcomm Atheros, Inc. |
| * under proprietary terms before Copyright ownership was assigned |
| * to the Linux Foundation. |
| */ |
| |
| /** ------------------------------------------------------------------------- * |
| ------------------------------------------------------------------------- * |
| |
| |
| \file palApi.h |
| |
| \brief Exports and types for the Platform Abstraction Layer interfaces. |
| |
| $Id$This file contains all the interfaces for thge Platform Abstration Layer |
| functions. It is intended to be included in all modules that are using |
| the PAL interfaces. |
| |
| ========================================================================== */ |
| #ifndef PALAPI_H__ |
| #define PALAPI_H__ |
| |
| #include "halTypes.h" |
| |
| /** |
| \mainpage Platform Abstraction Layer (PAL) |
| |
| \section intro Introduction |
| |
| palApi is the Platform Abstration Layer. |
| |
| This is the latest attempt to abstract the entire Platform, including the |
| hardware, chip, OS and Bus into a generic API. We are doing this to give |
| the MAC the ability to call |
| generic APIs that will allow the MAC to function in an abstract manner |
| with any Airgo chipset, on any supported OS (Windows and Linux for now) |
| across any system bus interface (PCI, PCIe, Cardbus, USB, etc.). |
| |
| \todo |
| - palReadRegister: register read |
| -# add an Open/Close abstraction to accomodate the PAL before the entire MAC is loaded. |
| -# Review with Linux folks to see this basic scructure works for them. |
| -# Figure out how to organize the directory structure |
| - palMemory: memory read/write |
| - include async versions of read/write register |
| - palTx: an abstraction for transmit frames that manages the Td and Tm rings |
| - palRx: an abstracion for receiving frames from a chip across any of the supported buses |
| - palInterrupt: abstract the interrupts into the HAL |
| |
| |
| \section impl_notes Implementation Notes |
| |
| \subsection subsection_codeStructure Code strucure |
| |
| */ |
| |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn palReadRegister |
| |
| \brief chip and bus agnostic funtion to read a register value |
| |
| \param hHdd - HDD context handle |
| |
| \param regAddress - address (offset) of the register to be read from the start |
| of register space. |
| |
| \param pRegValue - pointer to the memory where the register contents are written |
| |
| \return eHalStatus - status of the register read. Note that this function |
| can fail. In particular, when the card is removed, this function will return |
| a failure. |
| |
| -------------------------------------------------------------------------------*/ |
| eHalStatus palReadRegister( tHddHandle hHdd, tANI_U32 regAddress, tANI_U32 *pRegValue ); |
| |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn palWriteRegister |
| |
| \brief chip and bus agnostic funtion to write a register value |
| |
| \param hHdd - HDD context handle |
| |
| \param regAddress - address (offset) of the register to be read from the start |
| of register space. |
| |
| \param pRegValue - pointer to the value being written into the register |
| |
| \return eHalStatus - status of the register read. Note that this function |
| can fail. In particular, when the card is removed, this function will return |
| a failure. |
| |
| -------------------------------------------------------------------------------*/ |
| eHalStatus palWriteRegister( tHddHandle hHdd, tANI_U32 regAddress, tANI_U32 regValue ); |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn palAsyncWriteRegister |
| |
| \brief chip and bus agnostic async funtion to write a register value |
| |
| \param hHdd - HDD context handle |
| |
| \param regAddress - address (offset) of the register to be written from the start |
| of register space. |
| |
| \param regValue - value being written into the register |
| |
| \return eHalStatus - status of the register write. Note that this function |
| can fail. In particular, when the card is removed, this function will return |
| a failure. |
| |
| -------------------------------------------------------------------------------*/ |
| |
| eHalStatus palAsyncWriteRegister( tHddHandle hHdd, tANI_U32 regAddress, tANI_U32 regValue ); |
| |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn palReadDeviceMemory |
| |
| \brief chip and bus agnostic funtion to read memory from the chip |
| |
| \param hHdd - HDD context handle |
| |
| \param memOffset - address (offset) of the memory from the top of the |
| memory map (as exposed to the host) where the memory will be read from. |
| |
| \param pBuffer - pointer to a buffer where the memory will be placed in host |
| memory space after retreived from the chip. |
| |
| \param numBytes - the number of bytes to be read. |
| |
| \return eHalStatus - status of the memory read. Note that this function |
| can fail. In particular, when the card is removed, this function will return |
| a failure. |
| |
| -------------------------------------------------------------------------------*/ |
| eHalStatus palReadDeviceMemory( tHddHandle hHdd, tANI_U32 memOffset, tANI_U8 *pBuffer, tANI_U32 numBytes ); |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn palWriteDeviceMemory |
| |
| \brief chip and bus agnostic funtion to write memory to the chip |
| |
| \param hHdd - HDD context handle |
| |
| \param memOffset - address (offset) of the memory from the top of the on-chip |
| memory that will be written. |
| |
| \param pBuffer - pointer to a buffer that has the source data that will be |
| written to the chip. |
| |
| \param numBytes - the number of bytes to be written. |
| |
| \return eHalStatus - status of the memory read. Note that this function |
| can fail. In particular, when the card is removed, this function will return |
| a failure. |
| |
| -------------------------------------------------------------------------------*/ |
| eHalStatus palWriteDeviceMemory( tHddHandle hHdd, tANI_U32 memOffset, tANI_U8 *pBuffer, tANI_U32 numBytes ); |
| |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn palAllocateMemory |
| |
| \brief OS agnostic funtion to allocate host memory. |
| |
| \note Host memory that needs to be shared between the host and the |
| device needs to be allocated with the palAllocateSharedMemory() |
| and free'd with palFreeSharedMemory() functions. |
| |
| \param hHdd - HDD context handle |
| |
| \param ppMemory - pointer to a void pointer where the address of the |
| memory allocated will be placed upon return from this function. |
| |
| \param numBytes - the number of bytes to allocate. |
| |
| \return eHalStatus - status of the register read. Note that this function |
| can fail. In the case of a failure, a non-successful return code will be |
| returned and no memory will be allocated (the *ppMemory will be NULL so don't |
| try to use it unless the status returns success). |
| |
| -------------------------------------------------------------------------------*/ |
| #ifndef FEATURE_WLAN_PAL_MEM_DISABLE |
| |
| #ifdef MEMORY_DEBUG |
| #define palAllocateMemory(hHdd, ppMemory, numBytes) palAllocateMemory_debug(hHdd, ppMemory, numBytes, __FILE__, __LINE__) |
| eHalStatus palAllocateMemory_debug( tHddHandle hHdd, void **ppMemory, tANI_U32 numBytes, char* fileName, tANI_U32 lineNum ); |
| #else |
| eHalStatus palAllocateMemory( tHddHandle hHdd, void **ppMemory, tANI_U32 numBytes ); |
| #endif |
| |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn palFreeMemory |
| |
| \brief OS agnostic funtion to free host memory that was allocated with |
| palAllcoateMemory() calls. |
| |
| \note Host memory that needs to be shared between the host and the |
| device needs to be allocated with the palAllocateSharedMemory() |
| and free'd with palFreeSharedMemory() functions. |
| |
| \param hHdd - HDD context handle |
| |
| \param pMemory - pointer to memory that will be free'd. |
| |
| \return eHalStatus - status of the register read. Note that this function |
| can fail. In the case of a failure, a non-successful return code will be |
| returned and no memory will be allocated (the *ppMemory will be NULL so don't |
| try to use it unless the status returns success). |
| |
| -------------------------------------------------------------------------------*/ |
| eHalStatus palFreeMemory( tHddHandle hHdd, void *pMemory ); |
| |
| |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn palFillMemory |
| |
| \brief OS agnostic funtion to fill host memory with a specified byte value |
| |
| \param hHdd - HDD context handle |
| |
| \param pMemory - pointer to memory that will be filled. |
| |
| \param numBytes - the number of bytes to be filled. |
| |
| \param fillValue - the byte to be written to fill the memory with. |
| |
| \return eHalStatus - status of the register read. Note that this function |
| can fail. In the case of a failure, a non-successful return code will be |
| returned and no memory will be allocated (the *ppMemory will be NULL so don't |
| try to use it unless the status returns success). |
| |
| -------------------------------------------------------------------------------*/ |
| eHalStatus palFillMemory( tHddHandle hHdd, void *pMemory, tANI_U32 numBytes, tANI_BYTE fillValue ); |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn palCopyMemory |
| |
| \brief OS agnostic funtion to copy host memory from one location to another |
| |
| \param hHdd - HDD context handle |
| |
| \param pSrc - pointer to source memory location (to copy from) |
| |
| \param pSrc - pointer to destination memory location (to copy to) |
| |
| \param numBytes - the number of bytes to be be copied. |
| |
| \return eHalStatus - status of the memory copy |
| |
| -------------------------------------------------------------------------------*/ |
| eHalStatus palCopyMemory( tHddHandle hHdd, void *pDst, const void *pSrc, tANI_U32 numBytes ); |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn palFillMemory |
| |
| \brief OS agnostic funtion to fill host memory with a specified byte value |
| |
| \param hHdd - HDD context handle |
| |
| \param pMemory - pointer to memory that will be filled. |
| |
| \param numBytes - the number of bytes to be filled. |
| |
| \param fillValue - the byte to be written to fill the memory with. |
| |
| \return eHalStatus - status of the register read. Note that this function |
| can fail. In the case of a failure, a non-successful return code will be |
| returned and no memory will be allocated (the *ppMemory will be NULL so don't |
| try to use it unless the status returns success). |
| |
| -------------------------------------------------------------------------------*/ |
| ANI_INLINE_FUNCTION |
| eHalStatus palZeroMemory( tHddHandle hHdd, void *pMemory, tANI_U32 numBytes ) |
| { |
| return( palFillMemory( hHdd, pMemory, numBytes, 0 ) ); |
| } |
| |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn palEqualMemory |
| |
| \brief OS agnostic funtion to compare two pieces of memory, similar to |
| memcmp function in standard C. |
| |
| \param hHdd - HDD context handle |
| |
| \param pMemory1 - pointer to one location in memory to compare. |
| |
| \param pMemory2 - pointer to second location in memory to compare. |
| |
| \param numBytes - the number of bytes to compare. |
| |
| \return tANI_BOOLEAN - returns a boolean value that tells if the memory |
| locations are equal or now equal. |
| |
| -------------------------------------------------------------------------------*/ |
| tANI_BOOLEAN palEqualMemory( tHddHandle hHdd, void *pMemory1, void *pMemory2, tANI_U32 numBytes ); |
| #endif |
| /** --------------------------------------------------------------------------- |
| |
| \fn palFillDeviceMemory |
| |
| \brief OS agnostic funtion to fill device memory with a specified |
| 32bit value |
| |
| \param hHdd - HDD context handle |
| |
| \param memOffset - offset of the memory on the device to fill. |
| |
| \param numBytes - the number of bytes to be filled. |
| |
| \param fillValue - the byte pattern to fill into memory on the device |
| |
| \return eHalStatus - status of the register read. Note that this function |
| can fail. |
| |
| eHAL_STATUS_DEVICE_MEMORY_LENGTH_ERROR - length of the device memory is not |
| a multiple of 4 bytes. |
| |
| eHAL_STATUS_DEVICE_MEMORY_MISALIGNED - memory address is not aligned on a |
| 4 byte boundary. |
| |
| \note return failure if the memOffset is not 32bit aligned and not a |
| multiple of 4 bytes (the device does not support anything else). |
| |
| -------------------------------------------------------------------------------*/ |
| eHalStatus palFillDeviceMemory( tHddHandle hHdd, tANI_U32 memOffset, tANI_U32 numBytes, tANI_BYTE fillValue ); |
| |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn palZeroDeviceMemory |
| |
| \brief OS agnostic funtion to fill device memory with a specified byte value |
| |
| \param hHdd - HDD context handle |
| |
| \param memOffset - offset of the memory on the device to fill. |
| |
| \param numBytes - the number of bytes to be filled. |
| |
| \param fillValue - the 32bit pattern to fill the memory with. |
| |
| \return eHalStatus - status of the register read. Note that this function |
| can fail. |
| |
| eHAL_STATUS_DEVICE_MEMORY_LENGTH_ERROR - length of the device memory is not |
| a multiple of 4 bytes. |
| |
| eHAL_STATUS_DEVICE_MEMORY_MISALIGNED - memory address is not aligned on a |
| 4 byte boundary. |
| |
| \note return failure if the memOffset is not 32bit aligned and not a |
| multiple of 4 bytes (the device does not support anything else). |
| |
| -------------------------------------------------------------------------------*/ |
| ANI_INLINE_FUNCTION |
| eHalStatus palZeroDeviceMemory( tHddHandle hHdd, tANI_U32 memOffset, tANI_U32 numBytes ) |
| { |
| return( palFillDeviceMemory( hHdd, memOffset, numBytes, 0 ) ); |
| } |
| |
| /*---------------------------------------------------------------------------------- |
| |
| Allocate a packet for sending through the Tx APIs. |
| |
| \param hHdd - HDD context handle |
| |
| \param frmType - Frame type |
| |
| \param size |
| |
| \param data - |
| |
| \param ppPacket - |
| |
| \return eHalStatus - |
| ----------------------------------------------------------------------------------*/ |
| eHalStatus palPktAlloc(tHddHandle hHdd, eFrameType frmType, tANI_U16 size, void **data, void **ppPacket) ; |
| |
| |
| // This should return Ssome sort of status..... |
| void palPktFree( tHddHandle hHdd, eFrameType frmType, void* buf, void *pPacket); |
| |
| |
| |
| //PAL lock functions |
| //pHandle -- pointer to a caller allocated tPalSpinLockHandle object |
| eHalStatus palSpinLockAlloc( tHddHandle hHdd, tPalSpinLockHandle *pHandle ); |
| //hSpinLock -- a handle returned by palSpinLockAlloc |
| eHalStatus palSpinLockFree( tHddHandle hHdd, tPalSpinLockHandle hSpinLock ); |
| //hSpinLock -- a handle returned by palSpinLockAlloc |
| eHalStatus palSpinLockTake( tHddHandle hHdd, tPalSpinLockHandle hSpinLock ); |
| //hSpinLock -- a handle returned by palSpinLockAlloc |
| eHalStatus palSpinLockGive( tHddHandle hHdd, tPalSpinLockHandle hSpinLock ); |
| //PAL lock functions end |
| |
| |
| //This function send a message to MAC, |
| //pMsgBuf is a buffer allocated by caller. The actual structure varies base on message type |
| //The beginning of the buffer can always map to tSirMbMsg |
| //This function must take care of padding if it is required for the OS |
| eHalStatus palSendMBMessage(tHddHandle hHdd, void *pBuf); |
| |
| extern void palGetUnicastStats(tHddHandle hHdd, tANI_U32 *tx, tANI_U32 *rx); |
| |
| |
| /*---------------------------------------------------------------------------------- |
| this function is to return a tick count (one tick = ~10ms). It is used to calculate |
| time difference. |
| |
| \param hHdd - HDD context handle |
| |
| \return tick count. |
| ----------------------------------------------------------------------------------*/ |
| tANI_TIMESTAMP palGetTickCount(tHddHandle hHdd); |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn palReadRegMemory |
| |
| \brief chip and bus agnostic function to read memory from the PHY register space as memory |
| i.e. to read more than 4 bytes from the contiguous register space |
| |
| \param hHdd - HDD context handle |
| |
| \param memOffset - address (offset) of the memory from the top of the |
| memory map (as exposed to the host) where the memory will be read from. |
| |
| \param pBuffer - pointer to a buffer where the memory will be placed in host |
| memory space after retreived from the chip. |
| |
| \param numBytes - the number of bytes to be read. |
| |
| \return eHalStatus - status of the memory read. Note that this function |
| can fail. In particular, when the card is removed, this function will return |
| a failure. |
| |
| -------------------------------------------------------------------------------*/ |
| eHalStatus palReadRegMemory( tHddHandle hHdd, tANI_U32 memOffset, tANI_U8 *pBuffer, tANI_U32 numBytes ); |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn palAsyncWriteRegMemory |
| |
| \brief chip and bus agnostic function to write memory to the PHY register space as memory |
| i.e. to write more than 4 bytes from the contiguous register space. In USB interface, this |
| API does the write asynchronously. |
| |
| \param hHdd - HDD context handle |
| |
| \param memOffset - address (offset) of the memory from the top of the on-chip |
| memory that will be written. |
| |
| \param pBuffer - pointer to a buffer that has the source data that will be |
| written to the chip. |
| |
| \param numBytes - the number of bytes to be written. |
| |
| \return eHalStatus - status of the memory read. Note that this function |
| can fail. In particular, when the card is removed, this function will return |
| a failure. |
| |
| -------------------------------------------------------------------------------*/ |
| eHalStatus palAsyncWriteRegMemory( tHddHandle hHdd, tANI_U32 memOffset, tANI_U8 *pBuffer, tANI_U32 numBytes ); |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn palWriteRegMemory |
| \brief chip and bus agnostic function to write memory to the PHY register space as memory |
| i.e. to write more than 4 bytes from the contiguous register space. The difference from the |
| above routine is, in USB interface, this routine performs the write synchronously where as |
| the above routine performs it asynchronously. |
| |
| \param hHdd - HDD context handle |
| |
| \param memOffset - address (offset) of the memory from the top of the on-chip |
| memory that will be written. |
| |
| \param pBuffer - pointer to a buffer that has the source data that will be |
| written to the chip. |
| |
| \param numBytes - the number of bytes to be written. |
| |
| \return eHalStatus - status of the memory read. Note that this function |
| can fail. In particular, when the card is removed, this function will return |
| a failure. |
| |
| -------------------------------------------------------------------------------*/ |
| eHalStatus palWriteRegMemory( tHddHandle hHdd, tANI_U32 memOffset, tANI_U8 *pBuffer, tANI_U32 numBytes ); |
| |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn palWaitRegVal |
| |
| \brief is a blocking function which reads the register and waits for the given number of iterations |
| until the read value matches the waitRegVal. The delay between is perIterWaitInNanoSec(in nanoseconds) |
| |
| \param hHdd - HDD context handle |
| |
| \param reg - address of the register to be read |
| |
| \param mask - mask to be applied for the read value |
| |
| \param waitRegVal - expected value from the register after applying the mask. |
| |
| \param perIterWaitInNanoSec - delay between the two iterations in nanoseconds |
| |
| \param numIter - max number of reads before the timeout |
| |
| \param pReadRegVal - the value read from the register |
| |
| \return eHalStatus - status of the memory read. Note that this function |
| can fail. In particular, when the card is removed, this function will return |
| a failure. |
| |
| -------------------------------------------------------------------------------*/ |
| eHalStatus palWaitRegVal( tHddHandle hHdd, tANI_U32 reg, tANI_U32 mask, |
| tANI_U32 waitRegVal, tANI_U32 perIterWaitInNanoSec, |
| tANI_U32 numIter, tANI_U32 *pReadRegVal ); |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn palReadModifyWriteReg |
| |
| \brief chip and bus agnostic function to read a PHY register apply the given masks(AND and OR masks) |
| and writes back the new value to the register |
| |
| \param hHdd - HDD context handle |
| |
| \param reg - address of the register to be modified. |
| |
| \param andMask - The value read will be ANDed with this mask |
| |
| \parma orMask - The value after applying the andMask will be ORed with this value |
| |
| \return eHalStatus - status of the memory read. Note that this function |
| can fail. In particular, when the card is removed, this function will return |
| a failure. |
| |
| -------------------------------------------------------------------------------*/ |
| eHalStatus palReadModifyWriteReg( tHddHandle hHdd, tANI_U32 reg, tANI_U32 andMask, tANI_U32 orMask ); |
| |
| //PAL semaphore functions |
| eHalStatus palSemaphoreAlloc( tHddHandle hHdd, tPalSemaphoreHandle *pHandle, tANI_S32 count ); |
| eHalStatus palSemaphoreFree( tHddHandle hHdd, tPalSemaphoreHandle hSemaphore ); |
| eHalStatus palSemaphoreTake( tHddHandle hHdd, tPalSemaphoreHandle hSemaphore ); |
| eHalStatus palSemaphoreGive( tHddHandle hHdd, tPalSemaphoreHandle hSemaphore ); |
| eHalStatus palMutexAlloc( tHddHandle hHdd, tPalSemaphoreHandle *pHandle) ; |
| eHalStatus palMutexAllocLocked( tHddHandle hHdd, tPalSemaphoreHandle *pHandle) ; |
| |
| //PAL irq/softirq |
| eAniBoolean pal_in_interrupt(void) ; |
| void pal_local_bh_disable(void) ; |
| void pal_local_bh_enable(void) ; |
| |
| //PAL byte swap |
| tANI_U32 pal_be32_to_cpu(tANI_U32 x) ; |
| tANI_U32 pal_cpu_to_be32(tANI_U32 x) ; |
| tANI_U16 pal_be16_to_cpu(tANI_U16 x) ; |
| tANI_U16 pal_cpu_to_be16(tANI_U16 x) ; |
| |
| |
| #if defined( ANI_LITTLE_BYTE_ENDIAN ) |
| |
| // Need to eliminate these and use the ani_cpu_to_le, etc. macros.... |
| ANI_INLINE_FUNCTION unsigned long i_htonl( unsigned long ul ) |
| { |
| return( ( ( ul & 0x000000ff ) << 24 ) | |
| ( ( ul & 0x0000ff00 ) << 8 ) | |
| ( ( ul & 0x00ff0000 ) >> 8 ) | |
| ( ( ul & 0xff000000 ) >> 24 ) ); |
| } |
| |
| ANI_INLINE_FUNCTION unsigned short i_htons( unsigned short us ) |
| { |
| return( ( ( us >> 8 ) & 0x00ff ) + ( ( us << 8 ) & 0xff00 ) ); |
| } |
| |
| ANI_INLINE_FUNCTION unsigned short i_ntohs( unsigned short us ) |
| { |
| return( i_htons( us ) ); |
| } |
| |
| ANI_INLINE_FUNCTION unsigned long i_ntohl( unsigned long ul ) |
| { |
| return( i_htonl( ul ) ); |
| } |
| |
| #endif //#if defined( ANI_LITTLE_BYTE_ENDIAN ) |
| |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn pal_set_U32 |
| |
| \brief Assign 32-bit unsigned value to a byte array base on CPU's endianness. |
| |
| \note Caller must validate the byte array has enough space to hold the vlaue |
| |
| \param ptr - Starting address of a byte array |
| |
| \param value - The value to assign to the byte array |
| |
| \return - The address to the byte after the assignment. This may or may not |
| be valid. Caller to verify. |
| |
| -------------------------------------------------------------------------------*/ |
| ANI_INLINE_FUNCTION tANI_U8 * pal_set_U32(tANI_U8 *ptr, tANI_U32 value) |
| { |
| #if defined( ANI_BIG_BYTE_ENDIAN ) |
| *(ptr) = ( tANI_U8 )( value >> 24 ); |
| *(ptr + 1) = ( tANI_U8 )( value >> 16 ); |
| *(ptr + 2) = ( tANI_U8 )( value >> 8 ); |
| *(ptr + 3) = ( tANI_U8 )( value ); |
| #else |
| *(ptr + 3) = ( tANI_U8 )( value >> 24 ); |
| *(ptr + 2) = ( tANI_U8 )( value >> 16 ); |
| *(ptr + 1) = ( tANI_U8 )( value >> 8 ); |
| *(ptr) = ( tANI_U8 )( value ); |
| #endif |
| |
| return (ptr + 4); |
| } |
| |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn pal_set_U16 |
| |
| \brief Assign 16-bit unsigned value to a byte array base on CPU's endianness. |
| |
| \note Caller must validate the byte array has enough space to hold the vlaue |
| |
| \param ptr - Starting address of a byte array |
| |
| \param value - The value to assign to the byte array |
| |
| \return - The address to the byte after the assignment. This may or may not |
| be valid. Caller to verify. |
| |
| -------------------------------------------------------------------------------*/ |
| ANI_INLINE_FUNCTION tANI_U8 * pal_set_U16(tANI_U8 *ptr, tANI_U16 value) |
| { |
| #if defined( ANI_BIG_BYTE_ENDIAN ) |
| *(ptr) = ( tANI_U8 )( value >> 8 ); |
| *(ptr + 1) = ( tANI_U8 )( value ); |
| #else |
| *(ptr + 1) = ( tANI_U8 )( value >> 8 ); |
| *(ptr) = ( tANI_U8 )( value ); |
| #endif |
| |
| return (ptr + 2); |
| } |
| |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn pal_get_U16 |
| |
| \brief Retrieve a 16-bit unsigned value from a byte array base on CPU's endianness. |
| |
| \note Caller must validate the byte array has enough space to hold the vlaue |
| |
| \param ptr - Starting address of a byte array |
| |
| \param pValue - Pointer to a caller allocated buffer for 16 bit value. Value is to assign |
| to this location. |
| |
| \return - The address to the byte after the assignment. This may or may not |
| be valid. Caller to verify. |
| |
| -------------------------------------------------------------------------------*/ |
| ANI_INLINE_FUNCTION tANI_U8 * pal_get_U16(tANI_U8 *ptr, tANI_U16 *pValue) |
| { |
| #if defined( ANI_BIG_BYTE_ENDIAN ) |
| *pValue = (((tANI_U16) (*ptr << 8)) | |
| ((tANI_U16) (*(ptr+1)))); |
| #else |
| *pValue = (((tANI_U16) (*(ptr+1) << 8)) | |
| ((tANI_U16) (*ptr))); |
| #endif |
| |
| return (ptr + 2); |
| } |
| |
| |
| /** --------------------------------------------------------------------------- |
| |
| \fn pal_get_U32 |
| |
| \brief Retrieve a 32-bit unsigned value from a byte array base on CPU's endianness. |
| |
| \note Caller must validate the byte array has enough space to hold the vlaue |
| |
| \param ptr - Starting address of a byte array |
| |
| \param pValue - Pointer to a caller allocated buffer for 32 bit value. Value is to assign |
| to this location. |
| |
| \return - The address to the byte after the assignment. This may or may not |
| be valid. Caller to verify. |
| |
| -------------------------------------------------------------------------------*/ |
| ANI_INLINE_FUNCTION tANI_U8 * pal_get_U32(tANI_U8 *ptr, tANI_U32 *pValue) |
| { |
| #if defined( ANI_BIG_BYTE_ENDIAN ) |
| *pValue = ( (tANI_U32)(*(ptr) << 24) | |
| (tANI_U32)(*(ptr+1) << 16) | |
| (tANI_U32)(*(ptr+2) << 8) | |
| (tANI_U32)(*(ptr+3)) ); |
| #else |
| *pValue = ( (tANI_U32)(*(ptr+3) << 24) | |
| (tANI_U32)(*(ptr+2) << 16) | |
| (tANI_U32)(*(ptr+1) << 8) | |
| (tANI_U32)(*(ptr)) ); |
| #endif |
| |
| return (ptr + 4); |
| } |
| |
| |
| #endif |