Linux Audio

Check our new training course

Linux BSP development engineering services

Need help to port Linux and bootloaders to your hardware?
Loading...
Note: File does not exist in v6.8.
  1/******************************************************************************
  2 *
  3 * Copyright(c) 2003 - 2011 Intel Corporation. All rights reserved.
  4 *
  5 * Portions of this file are derived from the ipw3945 project, as well
  6 * as portions of the ieee80211 subsystem header files.
  7 *
  8 * This program is free software; you can redistribute it and/or modify it
  9 * under the terms of version 2 of the GNU General Public License as
 10 * published by the Free Software Foundation.
 11 *
 12 * This program is distributed in the hope that it will be useful, but WITHOUT
 13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 14 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 15 * more details.
 16 *
 17 * You should have received a copy of the GNU General Public License along with
 18 * this program; if not, write to the Free Software Foundation, Inc.,
 19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
 20 *
 21 * The full GNU General Public License is included in this distribution in the
 22 * file called LICENSE.
 23 *
 24 * Contact Information:
 25 *  Intel Linux Wireless <ilw@linux.intel.com>
 26 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
 27 *
 28 *****************************************************************************/
 29#ifndef __iwl_legacy_sta_h__
 30#define __iwl_legacy_sta_h__
 31
 32#include "iwl-dev.h"
 33
 34#define HW_KEY_DYNAMIC 0
 35#define HW_KEY_DEFAULT 1
 36
 37#define IWL_STA_DRIVER_ACTIVE BIT(0) /* driver entry is active */
 38#define IWL_STA_UCODE_ACTIVE  BIT(1) /* ucode entry is active */
 39#define IWL_STA_UCODE_INPROGRESS  BIT(2) /* ucode entry is in process of
 40					    being activated */
 41#define IWL_STA_LOCAL BIT(3) /* station state not directed by mac80211;
 42				(this is for the IBSS BSSID stations) */
 43#define IWL_STA_BCAST BIT(4) /* this station is the special bcast station */
 44
 45
 46void iwl_legacy_restore_stations(struct iwl_priv *priv,
 47				struct iwl_rxon_context *ctx);
 48void iwl_legacy_clear_ucode_stations(struct iwl_priv *priv,
 49			      struct iwl_rxon_context *ctx);
 50void iwl_legacy_dealloc_bcast_stations(struct iwl_priv *priv);
 51int iwl_legacy_get_free_ucode_key_index(struct iwl_priv *priv);
 52int iwl_legacy_send_add_sta(struct iwl_priv *priv,
 53			struct iwl_legacy_addsta_cmd *sta, u8 flags);
 54int iwl_legacy_add_station_common(struct iwl_priv *priv,
 55			struct iwl_rxon_context *ctx,
 56			const u8 *addr, bool is_ap,
 57			struct ieee80211_sta *sta, u8 *sta_id_r);
 58int iwl_legacy_remove_station(struct iwl_priv *priv,
 59			const u8 sta_id,
 60			const u8 *addr);
 61int iwl_legacy_mac_sta_remove(struct ieee80211_hw *hw,
 62			struct ieee80211_vif *vif,
 63			struct ieee80211_sta *sta);
 64
 65u8 iwl_legacy_prep_station(struct iwl_priv *priv,
 66			struct iwl_rxon_context *ctx,
 67			const u8 *addr, bool is_ap,
 68			struct ieee80211_sta *sta);
 69
 70int iwl_legacy_send_lq_cmd(struct iwl_priv *priv,
 71			struct iwl_rxon_context *ctx,
 72			struct iwl_link_quality_cmd *lq,
 73			u8 flags, bool init);
 74
 75/**
 76 * iwl_legacy_clear_driver_stations - clear knowledge of all stations from driver
 77 * @priv: iwl priv struct
 78 *
 79 * This is called during iwl_down() to make sure that in the case
 80 * we're coming there from a hardware restart mac80211 will be
 81 * able to reconfigure stations -- if we're getting there in the
 82 * normal down flow then the stations will already be cleared.
 83 */
 84static inline void iwl_legacy_clear_driver_stations(struct iwl_priv *priv)
 85{
 86	unsigned long flags;
 87	struct iwl_rxon_context *ctx;
 88
 89	spin_lock_irqsave(&priv->sta_lock, flags);
 90	memset(priv->stations, 0, sizeof(priv->stations));
 91	priv->num_stations = 0;
 92
 93	priv->ucode_key_table = 0;
 94
 95	for_each_context(priv, ctx) {
 96		/*
 97		 * Remove all key information that is not stored as part
 98		 * of station information since mac80211 may not have had
 99		 * a chance to remove all the keys. When device is
100		 * reconfigured by mac80211 after an error all keys will
101		 * be reconfigured.
102		 */
103		memset(ctx->wep_keys, 0, sizeof(ctx->wep_keys));
104		ctx->key_mapping_keys = 0;
105	}
106
107	spin_unlock_irqrestore(&priv->sta_lock, flags);
108}
109
110static inline int iwl_legacy_sta_id(struct ieee80211_sta *sta)
111{
112	if (WARN_ON(!sta))
113		return IWL_INVALID_STATION;
114
115	return ((struct iwl_station_priv_common *)sta->drv_priv)->sta_id;
116}
117
118/**
119 * iwl_legacy_sta_id_or_broadcast - return sta_id or broadcast sta
120 * @priv: iwl priv
121 * @context: the current context
122 * @sta: mac80211 station
123 *
124 * In certain circumstances mac80211 passes a station pointer
125 * that may be %NULL, for example during TX or key setup. In
126 * that case, we need to use the broadcast station, so this
127 * inline wraps that pattern.
128 */
129static inline int iwl_legacy_sta_id_or_broadcast(struct iwl_priv *priv,
130					  struct iwl_rxon_context *context,
131					  struct ieee80211_sta *sta)
132{
133	int sta_id;
134
135	if (!sta)
136		return context->bcast_sta_id;
137
138	sta_id = iwl_legacy_sta_id(sta);
139
140	/*
141	 * mac80211 should not be passing a partially
142	 * initialised station!
143	 */
144	WARN_ON(sta_id == IWL_INVALID_STATION);
145
146	return sta_id;
147}
148#endif /* __iwl_legacy_sta_h__ */