blob: 869162ecdfe4793e3c3a48b8a627cd38b1d755c3 [file] [log] [blame]
/*
* Copyright (c) 2012, 2014 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 ol_tx_classify.h
* @brief API definitions for the tx classify module within the data SW.
*/
#ifndef _OL_TX_CLASSIFY__H_
#define _OL_TX_CLASSIFY__H_
#include <adf_nbuf.h> /* adf_nbuf_t */
#include <ol_txrx_types.h> /* ol_txrx_vdev_t, etc. */
static inline u_int8_t *
ol_tx_dest_addr_find(
struct ol_txrx_pdev_t *pdev,
adf_nbuf_t tx_nbuf)
{
u_int8_t *hdr_ptr;
void *datap = adf_nbuf_data(tx_nbuf);
if (pdev->frame_format == wlan_frm_fmt_raw) {
/* adjust hdr_ptr to RA */
struct ieee80211_frame *wh = (struct ieee80211_frame *)datap;
hdr_ptr = wh->i_addr1;
} else if (pdev->frame_format == wlan_frm_fmt_native_wifi) {
/* adjust hdr_ptr to RA */
struct ieee80211_frame *wh = (struct ieee80211_frame *)datap;
hdr_ptr = wh->i_addr1;
} else if (pdev->frame_format == wlan_frm_fmt_802_3) {
hdr_ptr = datap;
} else {
VOS_TRACE(VOS_MODULE_ID_TXRX, VOS_TRACE_LEVEL_ERROR,
"Invalid standard frame type: %d\n",
pdev->frame_format);
adf_os_assert(0);
hdr_ptr = NULL;
}
return hdr_ptr;
}
#if defined(CONFIG_HL_SUPPORT)
/**
* @brief Classify a tx frame to which tid queue.
*
* @param vdev - the virtual device sending the data
* (for specifying the transmitter address for multicast / broadcast data)
* @param tx_desc - descriptor object with meta-data about the tx frame
* @param netbuf - the tx frame
* @param tx_msdu_info - characteristics of the tx frame
*/
struct ol_tx_frms_queue_t *
ol_tx_classify(
struct ol_txrx_vdev_t *vdev,
struct ol_tx_desc_t *tx_desc,
adf_nbuf_t netbuf,
struct ol_txrx_msdu_info_t *tx_msdu_info);
struct ol_tx_frms_queue_t *
ol_tx_classify_mgmt(
struct ol_txrx_vdev_t *vdev,
struct ol_tx_desc_t *tx_desc,
adf_nbuf_t netbuf,
struct ol_txrx_msdu_info_t *tx_msdu_info);
#else
#define ol_tx_classify(vdev, tx_desc, netbuf, tx_msdu_info) NULL
#define ol_tx_classify_mgmt(vdev, tx_desc, netbuf, tx_msdu_info) NULL
#endif /* defined(CONFIG_HL_SUPPORT) */
#endif /* _OL_TX_CLASSIFY__H_ */