blob: 12684860023148fc2ba6577b0f0e51953278b3a3 [file] [log] [blame]
/*
* Copyright (c) 2014-2018 The Linux Foundation. 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.
*/
#if !defined(__CDS_UTILS_H)
#define __CDS_UTILS_H
/**=========================================================================
\file cds_utils.h
\brief Connectivity driver services (CDS) utility APIs
Various utility functions
========================================================================*/
/*--------------------------------------------------------------------------
Include Files
------------------------------------------------------------------------*/
#include <qdf_types.h>
#include <qdf_status.h>
#include <qdf_event.h>
#include <qdf_lock.h>
#include "ani_global.h"
/*--------------------------------------------------------------------------
Preprocessor definitions and constants
------------------------------------------------------------------------*/
#define CDS_DIGEST_SHA1_SIZE (20)
#define CDS_DIGEST_MD5_SIZE (16)
#define CDS_24_GHZ_BASE_FREQ (2407)
#define CDS_5_GHZ_BASE_FREQ (5000)
#define CDS_24_GHZ_CHANNEL_6 (6)
#define CDS_24_GHZ_CHANNEL_1 (1)
#define CDS_5_GHZ_CHANNEL_36 (36)
#define CDS_24_GHZ_CHANNEL_14 (14)
#define CDS_24_GHZ_CHANNEL_15 (15)
#define CDS_24_GHZ_CHANNEL_27 (27)
#define CDS_5_GHZ_CHANNEL_165 (165)
#define CDS_5_GHZ_CHANNEL_170 (170)
#define CDS_CHAN_SPACING_5MHZ (5)
#define CDS_CHAN_SPACING_20MHZ (20)
#define CDS_CHAN_14_FREQ (2484)
#define CDS_CHAN_15_FREQ (2512)
#define CDS_CHAN_170_FREQ (5852)
#define INVALID_SCAN_ID 0xFFFFFFFF
#define CDS_DBS_SCAN_CLIENTS_MAX (7)
#define CDS_DBS_SCAN_PARAM_PER_CLIENT (3)
#define cds_alert(params...) QDF_TRACE_FATAL(QDF_MODULE_ID_QDF, params)
#define cds_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_QDF, params)
#define cds_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_QDF, params)
#define cds_info(params...) QDF_TRACE_INFO(QDF_MODULE_ID_QDF, params)
#define cds_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_QDF, params)
#define cds_enter() QDF_TRACE_ENTER(QDF_MODULE_ID_QDF, "enter")
#define cds_exit() QDF_TRACE_EXIT(QDF_MODULE_ID_QDF, "exit")
/**
* enum cds_band_type - Band type - 2g, 5g or all
* CDS_BAND_ALL: Both 2G and 5G are valid.
* CDS_BAND_2GHZ: only 2G is valid.
* CDS_BAND_5GHZ: only 5G is valid.
*/
enum cds_band_type {
CDS_BAND_ALL = 0,
CDS_BAND_2GHZ = 1,
CDS_BAND_5GHZ = 2
};
/*-------------------------------------------------------------------------
Function declarations and documenation
------------------------------------------------------------------------*/
QDF_STATUS cds_crypto_init(uint32_t *phCryptProv);
QDF_STATUS cds_crypto_deinit(uint32_t hCryptProv);
/**
* cds_rand_get_bytes
* FUNCTION:
* Returns cryptographically secure pseudo-random bytes.
*
*
* @param pbBuf - the caller allocated location where the bytes should be copied
* @param numBytes the number of bytes that should be generated and
* copied
*
* @return QDF_STATUS_SUCCSS if the operation succeeds
*/
QDF_STATUS cds_rand_get_bytes(uint32_t handle, uint8_t *pbBuf,
uint32_t numBytes);
uint32_t cds_chan_to_freq(uint8_t chan);
uint8_t cds_freq_to_chan(uint32_t freq);
enum cds_band_type cds_chan_to_band(uint32_t chan);
/**
* cds_upper_to_lower: API to convert upper case string into lower case
* @txt: input text
* @length: length of input string
*
* Return: None
*/
void cds_upper_to_lower(uint8_t *txt, uint32_t length);
#ifdef WLAN_FEATURE_11W
bool cds_is_mmie_valid(uint8_t *key, uint8_t *ipn,
uint8_t *frm, uint8_t *efrm);
bool cds_attach_mmie(uint8_t *igtk, uint8_t *ipn, uint16_t key_id,
uint8_t *frm, uint8_t *efrm, uint16_t frmLen);
uint8_t cds_get_mmie_size(void);
/**
* cds_is_gmac_mmie_valid: Validates GMAC MIC
* @igtk: integrity group temporal key
* @ipn: IGTK packet number
* @frm: IEEE 802.11 frame
* @efrm: End of frame
* @key_length: Length of IGTK
*
* Return: True if MIC validation is successful, false otherwise
*/
bool cds_is_gmac_mmie_valid(uint8_t *igtk, uint8_t *ipn, uint8_t *frm,
uint8_t *efrm, uint16_t key_length);
/**
* cds_get_gmac_mmie_size: Gives length of GMAC MMIE size
*
* Return: Size of MMIE for GMAC
*/
uint8_t cds_get_gmac_mmie_size(void);
#endif /* WLAN_FEATURE_11W */
QDF_STATUS sme_send_flush_logs_cmd_to_fw(tpAniSirGlobal pMac);
static inline void cds_host_diag_log_work(qdf_wake_lock_t *lock, uint32_t msec,
uint32_t reason) {
if (((cds_get_ring_log_level(RING_ID_WAKELOCK) >= WLAN_LOG_LEVEL_ACTIVE)
&& (WIFI_POWER_EVENT_WAKELOCK_HOLD_RX == reason)) ||
(WIFI_POWER_EVENT_WAKELOCK_HOLD_RX != reason)) {
host_diag_log_wlock(reason, qdf_wake_lock_name(lock),
msec, WIFI_POWER_EVENT_WAKELOCK_TAKEN);
}
}
/**
* cds_copy_hlp_info() - Copy HLP info
* @input_dst_mac: input HLP destination MAC address
* @input_src_mac: input HLP source MAC address
* @input_hlp_data_len: input HLP data length
* @input_hlp_data: Pointer to input HLP data
* @output_dst_mac: output HLP destination MAC address
* @output_src_mac: output HLP source MAC address
* @output_hlp_data_len: Pointer to output HLP data length
* @output_hlp_data: output Pointer to HLP data
*
* Util API to copy HLP info from input to output
*
* Return: None
*/
void cds_copy_hlp_info(struct qdf_mac_addr *input_dst_mac,
struct qdf_mac_addr *input_src_mac,
uint16_t input_hlp_data_len,
uint8_t *input_hlp_data,
struct qdf_mac_addr *output_dst_mac,
struct qdf_mac_addr *output_src_mac,
uint16_t *output_hlp_data_len,
uint8_t *output_hlp_data);
#endif /* #if !defined __CDS_UTILS_H */