blob: d3aad4ea9e64c944f99ff783586b5661ad491653 [file] [log] [blame]
//------------------------------------------------------------------------------
// <copyright file="utils_api.h" company="Atheros">
// Copyright (c) 2004-2010 Atheros Corporation. All rights reserved.
//
//
// 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_ */