svn commit: r293099 - head/sys/dev/iwm

Andriy Voskoboinyk avos at FreeBSD.org
Sun Jan 3 10:06:11 UTC 2016


Author: avos
Date: Sun Jan  3 10:06:10 2016
New Revision: 293099
URL: https://svnweb.freebsd.org/changeset/base/293099

Log:
  iwm: reorganize if_iwmvar.h
  
  - Change order of data in if_iwmvar.h
  (like it is in other drivers: defines, data structures,
  vap/node structures, softc struct and locks); use indentation.
  - Fix IWM_LOCK(_sc) / IWM_UNLOCK(_sc) macro.
  - Add IWM_LOCK_INIT / DESTROY(sc) + fix mtx_init() usage.
  - Wrap iwm_node casts into IWM_NODE() macro.
  - Drop some fields:
   * wt_hwqueue from Tx radiotap header;
   * macaddr[6] from iwm_vap;
  
  Approved by:	adrian
  Differential Revision:	https://reviews.freebsd.org/D4753

Modified:
  head/sys/dev/iwm/if_iwm.c
  head/sys/dev/iwm/if_iwm_mac_ctxt.c
  head/sys/dev/iwm/if_iwmvar.h

Modified: head/sys/dev/iwm/if_iwm.c
==============================================================================
--- head/sys/dev/iwm/if_iwm.c	Sun Jan  3 09:54:03 2016	(r293098)
+++ head/sys/dev/iwm/if_iwm.c	Sun Jan  3 10:06:10 2016	(r293099)
@@ -2649,7 +2649,7 @@ iwm_tx(struct iwm_softc *sc, struct mbuf
 {
 	struct ieee80211com *ic = &sc->sc_ic;
 	struct ieee80211vap *vap = TAILQ_FIRST(&ic->ic_vaps);
-	struct iwm_node *in = (struct iwm_node *)ni;
+	struct iwm_node *in = IWM_NODE(ni);
 	struct iwm_tx_ring *ring;
 	struct iwm_tx_data *data;
 	struct iwm_tfd *desc;
@@ -2706,7 +2706,6 @@ iwm_tx(struct iwm_softc *sc, struct mbuf
 		tap->wt_chan_freq = htole16(ni->ni_chan->ic_freq);
 		tap->wt_chan_flags = htole16(ni->ni_chan->ic_flags);
 		tap->wt_rate = rinfo->rate;
-		tap->wt_hwqueue = ac;
 		if (k != NULL)
 			tap->wt_flags |= IEEE80211_RADIOTAP_F_WEP;
 		ieee80211_radiotap_tx(vap, m);
@@ -3182,7 +3181,7 @@ iwm_auth(struct ieee80211vap *vap, struc
 	 * freed from underneath us. Grr.
 	 */
 	ni = ieee80211_ref_node(vap->iv_bss);
-	in = (struct iwm_node *) ni;
+	in = IWM_NODE(ni);
 	IWM_DPRINTF(sc, IWM_DEBUG_RESET | IWM_DEBUG_STATE,
 	    "%s: called; vap=%p, bss ni=%p\n",
 	    __func__,
@@ -3289,7 +3288,7 @@ out:
 static int
 iwm_assoc(struct ieee80211vap *vap, struct iwm_softc *sc)
 {
-	struct iwm_node *in = (struct iwm_node *)vap->iv_bss;
+	struct iwm_node *in = IWM_NODE(vap->iv_bss);
 	int error;
 
 	if ((error = iwm_mvm_update_sta(sc, in)) != 0) {
@@ -3515,7 +3514,7 @@ iwm_newstate(struct ieee80211vap *vap, e
 	if (vap->iv_state == IEEE80211_S_RUN && nstate != vap->iv_state) {
 		iwm_mvm_disable_beacon_filter(sc);
 
-		if (((in = (void *)vap->iv_bss) != NULL))
+		if (((in = IWM_NODE(vap->iv_bss)) != NULL))
 			in->in_assoc = 0;
 
 		iwm_release(sc, NULL);
@@ -3591,7 +3590,7 @@ iwm_newstate(struct ieee80211vap *vap, e
 			break;
 		}
 
-		in = (struct iwm_node *)vap->iv_bss;
+		in = IWM_NODE(vap->iv_bss);
 		iwm_mvm_power_mac_update_mode(sc, in);
 		iwm_mvm_enable_beacon_filter(sc, in);
 		iwm_mvm_update_quotas(sc, in);
@@ -4596,7 +4595,7 @@ iwm_attach(device_t dev)
 	int txq_i, i;
 
 	sc->sc_dev = dev;
-	mtx_init(&sc->sc_mtx, "iwm_mtx", MTX_DEF, 0);
+	IWM_LOCK_INIT(sc);
 	mbufq_init(&sc->sc_snd, ifqmaxlen);
 	callout_init_mtx(&sc->sc_watchdog_to, &sc->sc_mtx, 0);
 	TASK_INIT(&sc->sc_es_task, 0, iwm_endscan_cb, sc);
@@ -4985,7 +4984,7 @@ iwm_detach_local(struct iwm_softc *sc, i
 	iwm_pci_detach(dev);
 
 	mbufq_drain(&sc->sc_snd);
-	mtx_destroy(&sc->sc_mtx);
+	IWM_LOCK_DESTROY(sc);
 
 	return (0);
 }

Modified: head/sys/dev/iwm/if_iwm_mac_ctxt.c
==============================================================================
--- head/sys/dev/iwm/if_iwm_mac_ctxt.c	Sun Jan  3 09:54:03 2016	(r293098)
+++ head/sys/dev/iwm/if_iwm_mac_ctxt.c	Sun Jan  3 10:06:10 2016	(r293099)
@@ -426,7 +426,7 @@ iwm_mvm_mac_ctxt_cmd_station(struct iwm_
 	uint32_t action)
 {
 	struct ieee80211_node *ni = vap->iv_bss;
-	struct iwm_node *in = (struct iwm_node *) ni;
+	struct iwm_node *in = IWM_NODE(ni);
 	struct iwm_mac_ctx_cmd cmd;
 
 	IWM_DPRINTF(sc, IWM_DEBUG_RESET,

Modified: head/sys/dev/iwm/if_iwmvar.h
==============================================================================
--- head/sys/dev/iwm/if_iwmvar.h	Sun Jan  3 09:54:03 2016	(r293098)
+++ head/sys/dev/iwm/if_iwmvar.h	Sun Jan  3 10:06:10 2016	(r293099)
@@ -129,7 +129,6 @@ struct iwm_tx_radiotap_header {
 	uint8_t		wt_rate;
 	uint16_t	wt_chan_freq;
 	uint16_t	wt_chan_flags;
-	uint8_t		wt_hwqueue;
 } __packed;
 
 #define IWM_TX_RADIOTAP_PRESENT						\
@@ -152,9 +151,6 @@ struct iwm_tx_radiotap_header {
 #define IWM_FW_STATUS_INPROGRESS	1
 #define IWM_FW_STATUS_DONE		2
 
-#define	IWM_LOCK(_sc)	mtx_lock(&sc->sc_mtx)
-#define	IWM_UNLOCK(_sc)	mtx_unlock(&sc->sc_mtx)
-
 enum iwm_ucode_type {
 	IWM_UCODE_TYPE_INIT,
 	IWM_UCODE_TYPE_REGULAR,
@@ -244,12 +240,12 @@ struct iwm_dma_info {
 #define IWM_TX_RING_HIMARK	224
 
 struct iwm_tx_data {
-	bus_dmamap_t	map;
-	bus_addr_t	cmd_paddr;
-	bus_addr_t	scratch_paddr;
-	struct mbuf	*m;
-	struct iwm_node *in;
-	int done;
+	bus_dmamap_t		map;
+	bus_addr_t		cmd_paddr;
+	bus_addr_t		scratch_paddr;
+	struct mbuf		*m;
+	struct iwm_node 	*in;
+	int			done;
 };
 
 struct iwm_tx_ring {
@@ -295,12 +291,6 @@ struct iwm_rx_ring {
 	int			cur;
 };
 
-#define IWM_FLAG_USE_ICT	0x01
-#define IWM_FLAG_HW_INITED	0x02
-#define IWM_FLAG_STOPPED	0x04
-#define IWM_FLAG_RFKILL		0x08
-#define IWM_FLAG_BUSY		0x10
-
 struct iwm_ucode_status {
 	uint32_t uc_error_event_table;
 	uint32_t uc_log_event_table;
@@ -371,68 +361,97 @@ struct iwm_bf_data {
 };
 
 struct iwm_vap {
-	struct ieee80211vap iv_vap;
-	uint8_t macaddr[IEEE80211_ADDR_LEN];
-	int is_uploaded;
+	struct ieee80211vap	iv_vap;
+	int			is_uploaded;
+
+	int			(*iv_newstate)(struct ieee80211vap *,
+				    enum ieee80211_state, int);
+};
+#define IWM_VAP(_vap)		((struct iwm_vap *)(_vap))
+
+struct iwm_node {
+	struct ieee80211_node	in_ni;
+	struct iwm_mvm_phy_ctxt	*in_phyctxt;
+
+	/* status "bits" */
+	int			in_assoc;
+
+	struct iwm_lq_cmd	in_lq;
 
-	int (*iv_newstate)(struct ieee80211vap *, enum ieee80211_state, int);
+	uint8_t			in_ridx[IEEE80211_RATE_MAXSIZE];
 };
+#define IWM_NODE(_ni)		((struct iwm_node *)(_ni))
+
+#define IWM_STATION_ID 0
+
+#define	IWM_DEFAULT_MACID	0
+#define	IWM_DEFAULT_COLOR	0
+#define	IWM_DEFAULT_TSFID	0
 
-#define IWM_VAP(_vap)   ((struct iwm_vap *)(_vap))
+#define IWM_ICT_SIZE		4096
+#define IWM_ICT_COUNT		(IWM_ICT_SIZE / sizeof (uint32_t))
+#define IWM_ICT_PADDR_SHIFT	12
 
 struct iwm_softc {
+	device_t		sc_dev;
+	uint32_t		sc_debug;
+
 	struct mtx		sc_mtx;
 	struct mbufq		sc_snd;
 	struct ieee80211com	sc_ic;
-	device_t		sc_dev;
+
+	int			sc_flags;
+#define IWM_FLAG_USE_ICT	(1 << 0)
+#define IWM_FLAG_HW_INITED	(1 << 1)
+#define IWM_FLAG_STOPPED	(1 << 2)
+#define IWM_FLAG_RFKILL		(1 << 3)
+#define IWM_FLAG_BUSY		(1 << 4)
 
 	struct intr_config_hook sc_preinit_hook;
-	struct callout sc_watchdog_to;
+	struct callout		sc_watchdog_to;
 
 	struct task		init_task;
 
-	struct resource *sc_irq;
-	struct resource *sc_mem;
-	bus_space_tag_t sc_st;
-	bus_space_handle_t sc_sh;
-	bus_size_t sc_sz;
-	bus_dma_tag_t sc_dmat;
-	void *sc_ih;
+	struct resource		*sc_irq;
+	struct resource		*sc_mem;
+	bus_space_tag_t		sc_st;
+	bus_space_handle_t	sc_sh;
+	bus_size_t		sc_sz;
+	bus_dma_tag_t		sc_dmat;
+	void			*sc_ih;
 
 	/* TX scheduler rings. */
-	struct iwm_dma_info		sched_dma;
-	uint32_t			sched_base;
+	struct iwm_dma_info	sched_dma;
+	uint32_t		sched_base;
 
 	/* TX/RX rings. */
-	struct iwm_tx_ring txq[IWM_MVM_MAX_QUEUES];
-	struct iwm_rx_ring rxq;
-	int qfullmsk;
+	struct iwm_tx_ring	txq[IWM_MVM_MAX_QUEUES];
+	struct iwm_rx_ring	rxq;
+	int			qfullmsk;
 
-	int sc_sf_state;
+	int			sc_sf_state;
 
 	/* ICT table. */
 	struct iwm_dma_info	ict_dma;
 	int			ict_cur;
 
-	int sc_hw_rev;
-	int sc_hw_id;
+	int			sc_hw_rev;
+	int			sc_hw_id;
 
-	struct iwm_dma_info kw_dma;
-	struct iwm_dma_info fw_dma;
+	struct iwm_dma_info	kw_dma;
+	struct iwm_dma_info	fw_dma;
 
-	int sc_fw_chunk_done;
-	int sc_init_complete;
+	int			sc_fw_chunk_done;
+	int			sc_init_complete;
 
-	struct iwm_ucode_status sc_uc;
-	enum iwm_ucode_type sc_uc_current;
-	int sc_fwver;
+	struct iwm_ucode_status	sc_uc;
+	enum iwm_ucode_type	sc_uc_current;
+	int			sc_fwver;
 
-	int sc_capaflags;
-	int sc_capa_max_probe_len;
+	int			sc_capaflags;
+	int			sc_capa_max_probe_len;
 
-	int sc_intmask;
-	int sc_flags;
-	uint32_t sc_debug;
+	int			sc_intmask;
 
 	/*
 	 * So why do we need a separate stopped flag and a generation?
@@ -443,86 +462,63 @@ struct iwm_softc {
 	 * the device from interrupt context when it craps out, so we
 	 * don't have the luxury of waiting for quiescense.
 	 */
-	int sc_generation;
+	int			sc_generation;
 
-	const char *sc_fwname;
-	bus_size_t sc_fwdmasegsz;
-	struct iwm_fw_info sc_fw;
-	int sc_fw_phy_config;
+	const char		*sc_fwname;
+	bus_size_t		sc_fwdmasegsz;
+	struct iwm_fw_info	sc_fw;
+	int			sc_fw_phy_config;
 	struct iwm_tlv_calib_ctrl sc_default_calib[IWM_UCODE_TYPE_MAX];
 
-	struct iwm_nvm_data sc_nvm;
-	struct iwm_phy_db sc_phy_db;
+	struct iwm_nvm_data	sc_nvm;
+	struct iwm_phy_db	sc_phy_db;
 
-	struct iwm_bf_data sc_bf;
+	struct iwm_bf_data	sc_bf;
 
-	int sc_tx_timer;
+	int			sc_tx_timer;
 
-	struct iwm_scan_cmd *sc_scan_cmd;
-	size_t sc_scan_cmd_len;
-	int sc_scan_last_antenna;
-	int sc_scanband;
+	struct iwm_scan_cmd	*sc_scan_cmd;
+	size_t			sc_scan_cmd_len;
+	int			sc_scan_last_antenna;
+	int			sc_scanband;
 
-	int sc_auth_prot;
+	int			sc_auth_prot;
 
-	int sc_fixed_ridx;
+	int			sc_fixed_ridx;
 
-	int sc_staid;
-	int sc_nodecolor;
+	int			sc_staid;
+	int			sc_nodecolor;
 
-	uint8_t sc_cmd_resp[IWM_CMD_RESP_MAX];
-	int sc_wantresp;
+	uint8_t			sc_cmd_resp[IWM_CMD_RESP_MAX];
+	int			sc_wantresp;
 
-	struct taskqueue *sc_tq;
-	struct task sc_es_task;
+	struct taskqueue	*sc_tq;
+	struct task		sc_es_task;
 
-	struct iwm_rx_phy_info sc_last_phy_info;
-	int sc_ampdu_ref;
+	struct iwm_rx_phy_info	sc_last_phy_info;
+	int			sc_ampdu_ref;
 
-	struct iwm_int_sta sc_aux_sta;
+	struct iwm_int_sta	sc_aux_sta;
 
 	/* phy contexts.  we only use the first one */
-	struct iwm_mvm_phy_ctxt sc_phyctxt[IWM_NUM_PHY_CTX];
+	struct iwm_mvm_phy_ctxt	sc_phyctxt[IWM_NUM_PHY_CTX];
 
 	struct iwm_notif_statistics sc_stats;
-	int sc_noise;
+	int			sc_noise;
 
-	int host_interrupt_operation_mode;
+	int			host_interrupt_operation_mode;
 
 	caddr_t			sc_drvbpf;
 
-	union {
-		struct iwm_rx_radiotap_header th;
-		uint8_t	pad[IEEE80211_RADIOTAP_HDRLEN];
-	} sc_rxtapu;
-#define sc_rxtap	sc_rxtapu.th
-
-	union {
-		struct iwm_tx_radiotap_header th;
-		uint8_t	pad[IEEE80211_RADIOTAP_HDRLEN];
-	} sc_txtapu;
-#define sc_txtap	sc_txtapu.th
-
-	int		sc_max_rssi;
-};
-
-#define	IWM_DEFAULT_MACID	0
-#define	IWM_DEFAULT_COLOR	0
-#define	IWM_DEFAULT_TSFID	0
-
-struct iwm_node {
-	struct ieee80211_node in_ni;
-	struct iwm_mvm_phy_ctxt *in_phyctxt;
-
-	/* status "bits" */
-	int in_assoc;
-
-	struct iwm_lq_cmd in_lq;
+	struct iwm_rx_radiotap_header sc_rxtap;
+	struct iwm_tx_radiotap_header sc_txtap;
 
-	uint8_t in_ridx[IEEE80211_RATE_MAXSIZE];
+	int			sc_max_rssi;
 };
-#define IWM_STATION_ID 0
 
-#define IWM_ICT_SIZE		4096
-#define IWM_ICT_COUNT		(IWM_ICT_SIZE / sizeof (uint32_t))
-#define IWM_ICT_PADDR_SHIFT	12
+#define IWM_LOCK_INIT(_sc) \
+	mtx_init(&(_sc)->sc_mtx, device_get_nameunit((_sc)->sc_dev), \
+	    MTX_NETWORK_LOCK, MTX_DEF);
+#define	IWM_LOCK(_sc)		mtx_lock(&(_sc)->sc_mtx)
+#define	IWM_UNLOCK(_sc)		mtx_unlock(&(_sc)->sc_mtx)
+#define IWM_LOCK_DESTROY(_sc)	mtx_destroy(&(_sc)->sc_mtx)


More information about the svn-src-all mailing list