prima: WLAN Driver Release 3.1.7.9

This is the initial release of the Prima WLAN Driver
diff --git a/CORE/VOSS/inc/i_vos_packet.h b/CORE/VOSS/inc/i_vos_packet.h
new file mode 100644
index 0000000..68251de
--- /dev/null
+++ b/CORE/VOSS/inc/i_vos_packet.h
@@ -0,0 +1,263 @@
+/*
+ * Copyright (c) 2012, Code Aurora Forum. 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( __I_VOS_PACKET_H )
+#define __I_VOS_PACKET_H
+
+/**=========================================================================
+
+  \file        i_vos_packet.h
+
+  \brief       virtual Operating System Servies (vOSS)
+
+   Network Protocol packet/buffer internal include file
+
+   Copyright 2009 (c) Qualcomm, Incorporated.  All Rights Reserved.
+
+   Qualcomm Confidential and Proprietary.
+
+  ========================================================================*/
+
+/* $Header$ */
+
+/*--------------------------------------------------------------------------
+  Include Files
+  ------------------------------------------------------------------------*/
+#include <vos_types.h>
+#include <vos_list.h>
+#include <linux/skbuff.h>
+#include <linux/list.h>
+
+#ifdef FEATURE_WLAN_INTEGRATED_SOC
+#include <wlan_qct_pal_packet.h>
+#include <wlan_qct_wdi_ds.h>
+#endif
+
+/*--------------------------------------------------------------------------
+  Preprocessor definitions and constants
+  ------------------------------------------------------------------------*/
+
+// Definitions for the various VOS packet pools.  Following are defines
+// for the SIZE and the NUMBER of vos packets in the vos packet pools.
+// Note that all of the code is written to allocate and manage the vos
+// packet pools based on these #defines only.  For example, if you want to
+// change the number of RX_RAW packets, simply change the #define that
+// defines the number of RX_RAW packets and rebuild VOSS.
+
+// the number of Receive vos packets used exclusively for vos packet
+// allocations of type VOS_PKT_TYPE_RX_RAW
+#define VPKT_NUM_RX_RAW_PACKETS (  512 )
+
+// the number of Transmit Management vos packets, used exclusively for
+// vos packet allocations of type VOS_PKT_TYPE_TX_802_11_MGMT
+#define VPKT_NUM_TX_MGMT_PACKETS (  6 )
+
+// the number of Transmit Data vos packets, used exclusively for
+// vos packet allocations of type VOS_PKT_TYPE_TX_802_3_DATA or
+// VOS_PKT_TYPE_TX_802_11_DATA
+#define VPKT_NUM_TX_DATA_PACKETS ( 128 )
+
+// the number of VOS Packets we need.  This is the memory we need to
+// allocate for the vos Packet structures themselves.  We need vos
+// packet structures for all of the packet types (RX_RAW, TX_MGMT, and
+// TX_DATA).
+#define VPKT_NUM_VOS_PKT_BUFFERS \
+                ( VPKT_NUM_RX_RAW_PACKETS \
+                + VPKT_NUM_TX_MGMT_PACKETS \
+                + VPKT_NUM_TX_DATA_PACKETS )
+
+// the number of Receive vos packets that we accumulate in the
+// replenish pool before we attempt to replenish them
+#define VPKT_RX_REPLENISH_THRESHOLD (  VPKT_NUM_RX_RAW_PACKETS >> 2 )
+
+// magic number which can be used to verify that a structure pointer being
+// dereferenced is really referencing a struct vos_pkt_t
+#define VPKT_MAGIC_NUMBER 0x56504B54  /* VPKT in ASCII */
+
+/*--------------------------------------------------------------------------
+  Type declarations
+  ------------------------------------------------------------------------*/
+
+
+
+/// implementation specific vos packet type
+struct vos_pkt_t
+{
+#ifdef FEATURE_WLAN_INTEGRATED_SOC
+
+   //palPacket MUST be the first member of vos_pkt_t
+   wpt_packet palPacket;
+#endif
+
+   // Node for linking vos packets into a free list
+   struct list_head node;
+
+   // Node for chaining vos packets into a packet chain
+   struct vos_pkt_t *pNext;
+
+   // pointer to an OS specific packet descriptor
+   struct sk_buff *pSkb;
+
+   // packet type
+   VOS_PKT_TYPE packetType;
+
+   // timestamp
+   v_TIME_t timestamp;
+
+   // user data pointers
+   v_VOID_t *pvUserData[ VOS_PKT_USER_DATA_ID_MAX ];
+
+   // magic number for verifying this is really a struct vos_pkt_t
+   v_U32_t magic;
+};
+
+
+// Parameters from the vos_pkt_get_packet() call that needs
+// to be saved in 'low resource' conditions.  We need all the
+// parameters from the original call to vos_pkt_get_packet()
+// to resolve the packet request when one become available.
+typedef struct
+{
+   vos_pkt_get_packet_callback callback;
+
+   v_VOID_t *userData;
+
+   v_SIZE_t dataSize;
+   v_SIZE_t numPackets;
+   v_BOOL_t zeroBuffer;
+
+} vos_pkt_low_resource_info;
+
+
+
+// vOSS Packet Context - all context / internal data needed for the
+// vOSS pPacket module.  This consiste of:
+// - memory for the vos Packet structures
+// - memory for the vos Packet Head / Tail buffers
+// - memory for the Rx Raw data buffers
+// - memory for the Tx Mgmt data buffers.
+typedef struct vos_pkt_context_s
+{
+   // place to save the vos Context
+   v_CONTEXT_t vosContext;
+
+   // the memory for the vos Packet structures....
+   struct vos_pkt_t vosPktBuffers[ VPKT_NUM_VOS_PKT_BUFFERS ];
+
+   // These are the lists to keep the constructed VOS packets that are
+   // available for allocation.  There are separate free vos packet
+   // pools for RX_RAW without attached skb, RX_RAW with attached skb,
+   // TX_DATA, and TX_MGMT.
+   struct list_head rxReplenishList;
+   struct list_head rxRawFreeList;
+   struct list_head txDataFreeList;
+   struct list_head txMgmtFreeList;
+
+#ifdef WLAN_SOFTAP_FEATURE
+   //Existing list_size opearation traverse the list. Too slow for data path.
+   //Add the field to enable faster flow control on tx path
+   v_U32_t uctxDataFreeListCount;
+#endif
+
+   // We keep a separate count of the number of RX_RAW packets
+   // waiting to be replenished
+   v_SIZE_t rxReplenishListCount;
+
+   // These are the structs to keep low-resource callback information.
+   // There are separate low-resource callback information blocks for
+   // RX_RAW, TX_DATA, and TX_MGMT.
+   vos_pkt_low_resource_info rxRawLowResourceInfo;
+   vos_pkt_low_resource_info txDataLowResourceInfo;
+   vos_pkt_low_resource_info txMgmtLowResourceInfo;   
+
+   struct mutex mlock;
+#ifdef FEATURE_WLAN_INTEGRATED_SOC
+   /*Meta Information to be transported with the packet*/
+   WDI_DS_TxMetaInfoType txMgmtMetaInfo[VPKT_NUM_TX_MGMT_PACKETS];
+   WDI_DS_TxMetaInfoType txDataMetaInfo[VPKT_NUM_TX_DATA_PACKETS];
+   WDI_DS_RxMetaInfoType rxMetaInfo[VPKT_NUM_RX_RAW_PACKETS];
+#endif
+
+} vos_pkt_context_t;
+
+
+
+/*---------------------------------------------------------------------------
+
+  \brief vos_packet_open() - initialize the vOSS Packet module
+
+  The \a vos_packet_open() function initializes the vOSS Packet
+  module.
+
+  \param  pVosContext - pointer to the global vOSS Context
+
+  \param  pVosPacketContext - pointer to a previously allocated
+          buffer big enough to hold the vos Packet context.
+
+  \param  vosPacketContextSize - the size allocated for the vos
+          packet context.
+
+  \return VOS_STATUS_SUCCESS - vos Packet module was successfully
+          initialized and is ready to be used.
+
+          VOS_STATUS_E_RESOURCES - System resources (other than memory)
+          are unavailable to initilize the vos Packet module
+
+          VOS_STATUS_E_NOMEM - insufficient memory exists to initialize
+          the vos packet module
+
+          VOS_STATUS_E_INVAL - Invalid parameter passed to the vos open
+          function
+
+          VOS_STATUS_E_FAILURE - Failure to initialize the vos packet
+          module
+
+  \sa vos_packet_close()
+
+  -------------------------------------------------------------------------*/
+VOS_STATUS vos_packet_open( v_VOID_t *pVosContext,
+                            vos_pkt_context_t *pVosPacketContext,
+                            v_SIZE_t vosPacketContextSize );
+
+
+/*---------------------------------------------------------------------------
+
+  \brief vos_packet_close() - Close the vOSS Packet module
+
+  The \a vos_packet_close() function closes the vOSS Packet module
+  Upon successful close all resources allocated from the OS will be
+  relinquished.
+
+  \param  pVosContext - pointer to the global vOSS Context
+
+  \return VOS_STATUS_SUCCESS - Packet module was successfully closed.
+
+          VOS_STATUS_E_INVAL - Invalid parameter passed to the packet
+          close function
+
+          VOS_STATUS_E_FAILURE - Failure to close the vos Packet module
+
+  \sa vos_packet_open()
+
+---------------------------------------------------------------------------*/
+VOS_STATUS vos_packet_close( v_PVOID_t pVosContext );
+
+#endif  // !defined( __I_VOS_PACKET_H )