/*
 * Copyright (c) 2012, 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.
 */

#if !defined( __LEGACYPALTYPES_H__ )
#define __LEGACYPALTYPES_H__

/*==========================================================================
 *
 *  @file:     halLegacyPalTypes.h
 *
 *  @brief:    Exports and types for the Platform Abstraction Layer typedefs.
 *
 *  @author:   Kumar Anand
 *
 *             Copyright (C) 2010, Qualcomm, Inc.
 *             All rights reserved.
 *
 *=========================================================================*/

#include "wlan_defs.h"

/* Common type definitions */
typedef uint8     tANI_U8;
typedef int8      tANI_S8;
typedef uint16    tANI_U16;
typedef int16     tANI_S16;
typedef uint32    tANI_U32;
typedef int32     tANI_S32;

#ifndef BUILD_QWPTTSTATIC
typedef uint64    tANI_U64;
#endif

typedef byte      tANI_BYTE;
typedef boolean   tANI_BOOLEAN;
typedef uint32    tANI_TIMESTAMP;

#endif /*__LEGACYPALTYPES_H__*/
