//------------------------------------------------------------------------------ // ISC License (ISC) // // Copyright (c) 2004-2010, The Linux Foundation // All rights reserved. // Software was previously licensed under 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. // // //------------------------------------------------------------------------------ //============================================================================== // Utility Macros & Functions common across OS. // Author(s): ="Atheros" //============================================================================== #ifndef _HOST_UTILS_API_H_ #define _HOST_UTILS_API_H_ #ifdef __cplusplus extern "C" { #endif /* unaligned little endian access */ #define LE_READ_2(p) \ ((A_UINT16) \ ((((A_UINT8 *)(p))[0] ) | (((A_UINT8 *)(p))[1] << 8))) #define LE_READ_4(p) \ ((A_UINT32) \ ((((A_UINT8 *)(p))[0] ) | (((A_UINT8 *)(p))[1] << 8) | \ (((A_UINT8 *)(p))[2] << 16) | (((A_UINT8 *)(p))[3] << 24))) #define WPA_GET_BE16(a) ((A_UINT16) (((a)[0] << 8) | (a)[1])) #define WPA_PUT_BE16(a, val) \ do { \ (a)[0] = ((A_UINT16) (val)) >> 8; \ (a)[1] = ((A_UINT16) (val)) & 0xff; \ } while (0) #define WPA_GET_LE16(a) ((A_UINT16) (((a)[1] << 8) | (a)[0])) #define WPA_PUT_LE16(a, val) \ do { \ (a)[1] = ((A_UINT16) (val)) >> 8; \ (a)[0] = ((A_UINT16) (val)) & 0xff; \ } while (0) #define WPA_GET_BE24(a) ((((A_UINT32) (a)[0]) << 16) | (((A_UINT32) (a)[1]) << 8) | \ ((A_UINT32) (a)[2])) #define WPA_PUT_BE24(a, val) \ do { \ (a)[0] = (A_UINT8) ((((A_UINT32) (val)) >> 16) & 0xff); \ (a)[1] = (A_UINT8) ((((A_UINT32) (val)) >> 8) & 0xff); \ (a)[2] = (A_UINT8) (((A_UINT32) (val)) & 0xff); \ } while (0) #define WPA_GET_BE32(a) ((((A_UINT32) (a)[0]) << 24) | (((A_UINT32) (a)[1]) << 16) | \ (((A_UINT32) (a)[2]) << 8) | ((A_UINT32) (a)[3])) #define WPA_PUT_BE32(a, val) \ do { \ (a)[0] = (A_UINT8) ((((A_UINT32) (val)) >> 24) & 0xff); \ (a)[1] = (A_UINT8) ((((A_UINT32) (val)) >> 16) & 0xff); \ (a)[2] = (A_UINT8) ((((A_UINT32) (val)) >> 8) & 0xff); \ (a)[3] = (A_UINT8) (((A_UINT32) (val)) & 0xff); \ } while (0) #define WPA_GET_LE32(a) ((((A_UINT32) (a)[3]) << 24) | (((A_UINT32) (a)[2]) << 16) | \ (((A_UINT32) (a)[1]) << 8) | ((A_UINT32) (a)[0])) #define WPA_PUT_LE32(a, val) \ do { \ (a)[3] = (A_UINT8) ((((A_UINT32) (val)) >> 24) & 0xff); \ (a)[2] = (A_UINT8) ((((A_UINT32) (val)) >> 16) & 0xff); \ (a)[1] = (A_UINT8) ((((A_UINT32) (val)) >> 8) & 0xff); \ (a)[0] = (A_UINT8) (((A_UINT32) (val)) & 0xff); \ } while (0) #define WPA_OUI 0xf25000 static int __inline iswscoui(const A_UINT8 *frm) { return frm[1] > 3 && LE_READ_4(frm+2) == ((0x04<<24)|WPA_OUI); } static inline int is_zero_mac_addr(const A_UINT8 *addr) { return !(addr[0] | addr[1] | addr[2] | addr[3] | addr[4] | addr[5]); } #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _HOST_UTILS_API_H_ */