Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 32bfd35d authored by Johannes Berg's avatar Johannes Berg Committed by David S. Miller
Browse files

mac80211: dont use interface indices in drivers



This patch gets rid of the if_id stuff where possible in favour of
a new per-virtual-interface structure "struct ieee80211_vif". This
structure is located at the end of the per-interface structure and
contains a variable length driver-use data area.

This has two advantages:
 * removes the need to look up interfaces by if_id, this is better
   for working with network namespaces and performance
 * allows drivers to store and retrieve per-interface data without
   having to allocate own lists/hash tables

Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent f6532111
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1312,7 +1312,8 @@ static int adm8211_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf)
	return 0;
}

static int adm8211_config_interface(struct ieee80211_hw *dev, int if_id,
static int adm8211_config_interface(struct ieee80211_hw *dev,
				    struct ieee80211_vif *vif,
				    struct ieee80211_if_conf *conf)
{
	struct adm8211_priv *priv = dev->priv;
+8 −7
Original line number Diff line number Diff line
@@ -178,7 +178,8 @@ static void ath5k_remove_interface(struct ieee80211_hw *hw,
		struct ieee80211_if_init_conf *conf);
static int ath5k_config(struct ieee80211_hw *hw,
		struct ieee80211_conf *conf);
static int ath5k_config_interface(struct ieee80211_hw *hw, int if_id,
static int ath5k_config_interface(struct ieee80211_hw *hw,
		struct ieee80211_vif *vif,
		struct ieee80211_if_conf *conf);
static void ath5k_configure_filter(struct ieee80211_hw *hw,
		unsigned int changed_flags,
@@ -2498,12 +2499,12 @@ static int ath5k_add_interface(struct ieee80211_hw *hw,
	int ret;

	mutex_lock(&sc->lock);
	if (sc->iface_id) {
	if (sc->vif) {
		ret = 0;
		goto end;
	}

	sc->iface_id = conf->if_id;
	sc->vif = conf->vif;

	switch (conf->type) {
	case IEEE80211_IF_TYPE_STA:
@@ -2528,10 +2529,10 @@ ath5k_remove_interface(struct ieee80211_hw *hw,
	struct ath5k_softc *sc = hw->priv;

	mutex_lock(&sc->lock);
	if (sc->iface_id != conf->if_id)
	if (sc->vif != conf->vif)
		goto end;

	sc->iface_id = 0;
	sc->vif = NULL;
end:
	mutex_unlock(&sc->lock);
}
@@ -2549,7 +2550,7 @@ ath5k_config(struct ieee80211_hw *hw,
}

static int
ath5k_config_interface(struct ieee80211_hw *hw, int if_id,
ath5k_config_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
			struct ieee80211_if_conf *conf)
{
	struct ath5k_softc *sc = hw->priv;
@@ -2560,7 +2561,7 @@ ath5k_config_interface(struct ieee80211_hw *hw, int if_id,
	 * be set to mac80211's value at ath5k_config(). */
	sc->bintval = 1000 * 1000 / 1024;
	mutex_lock(&sc->lock);
	if (sc->iface_id != if_id) {
	if (sc->vif != vif) {
		ret = -EIO;
		goto unlock;
	}
+1 −1
Original line number Diff line number Diff line
@@ -123,7 +123,7 @@ struct ath5k_softc {
	unsigned int		curmode;	/* current phy mode */
	struct ieee80211_channel *curchan;	/* current h/w channel */

	int 			iface_id;	/* add/remove_interface id */
	struct ieee80211_vif *vif;

	struct {
		u8	rxflags;	/* radiotap rx flags */
+1 −1
Original line number Diff line number Diff line
@@ -533,7 +533,7 @@ static inline void ath5k_hw_write_rate_duration(struct ath5k_hw *ah,
		 * ieee80211_duration() for a brief description of
		 * what rate we should choose to TX ACKs. */
		tx_time = ieee80211_generic_frame_duration(sc->hw,
			sc->iface_id, 10, control_rate->rate_kbps/100);
			sc->vif, 10, control_rate->rate_kbps/100);

		ath5k_hw_reg_write(ah, tx_time, reg);

+1 −4
Original line number Diff line number Diff line
@@ -625,10 +625,7 @@ struct b43_wl {
	 * at a time. General information about this interface follows.
	 */

	/* Opaque ID of the operating interface from the ieee80211
	 * subsystem. Do not modify.
	 */
	int if_id;
	struct ieee80211_vif *vif;
	/* The MAC address of the operating interface. */
	u8 mac_addr[ETH_ALEN];
	/* Current BSSID */
Loading