}
wlc->hw->wlc = wlc;
- wlc->hw->bandstate[0] = (wlc_hwband_t *)wlc_calloc(osh, unit,
- (sizeof(wlc_hwband_t) * MAXBANDS));
+ wlc->hw->bandstate[0] = wlc_calloc(osh, unit,
+ (sizeof(struct wlc_hwband) * MAXBANDS));
if (wlc->hw->bandstate[0] == NULL) {
*err = 1006;
goto fail;
int i;
for (i = 1; i < MAXBANDS; i++) {
- wlc->hw->bandstate[i] = (wlc_hwband_t *)
+ wlc->hw->bandstate[i] = (struct wlc_hwband *)
((unsigned long)wlc->hw->bandstate[0] +
- (sizeof(wlc_hwband_t) * i));
+ (sizeof(struct wlc_hwband) * i));
}
}
- wlc->modulecb = (modulecb_t *)wlc_calloc(osh, unit,
- sizeof(modulecb_t) * WLC_MAXMODULES);
+ wlc->modulecb = wlc_calloc(osh, unit,
+ sizeof(struct modulecb) * WLC_MAXMODULES);
if (wlc->modulecb == NULL) {
*err = 1009;
goto fail;
}
wlc_bsscfg_ID_assign(wlc, wlc->cfg);
- wlc->pkt_callback = (pkt_cb_t *)wlc_calloc(osh, unit,
- (sizeof(pkt_cb_t) * (wlc->pub->tunables->maxpktcb + 1)));
+ wlc->pkt_callback = wlc_calloc(osh, unit,
+ (sizeof(struct pkt_cb) * (wlc->pub->tunables->maxpktcb + 1)));
if (wlc->pkt_callback == NULL) {
*err = 1013;
goto fail;
}
}
- wlc->protection = (wlc_protection_t *)wlc_calloc(osh, unit,
- sizeof(wlc_protection_t));
+ wlc->protection = wlc_calloc(osh, unit,
+ sizeof(struct wlc_protection));
if (wlc->protection == NULL) {
*err = 1016;
goto fail;
}
- wlc->stf = (wlc_stf_t *)wlc_calloc(osh, unit, sizeof(wlc_stf_t));
+ wlc->stf = wlc_calloc(osh, unit, sizeof(struct wlc_stf));
if (wlc->stf == NULL) {
*err = 1017;
goto fail;
}
int BCMFASTPATH
-wlc_sendampdu(struct ampdu_info *ampdu, wlc_txq_info_t *qi,
+wlc_sendampdu(struct ampdu_info *ampdu, struct wlc_txq_info *qi,
struct sk_buff **pdu, int prec)
{
struct wlc_info *wlc;
extern struct ampdu_info *wlc_ampdu_attach(struct wlc_info *wlc);
extern void wlc_ampdu_detach(struct ampdu_info *ampdu);
-extern int wlc_sendampdu(struct ampdu_info *ampdu, wlc_txq_info_t *qi,
+extern int wlc_sendampdu(struct ampdu_info *ampdu, struct wlc_txq_info *qi,
struct sk_buff **aggp, int prec);
extern void wlc_ampdu_dotxstatus(struct ampdu_info *ampdu, struct scb *scb,
struct sk_buff *p, tx_status_t *txs);
int wlc_bmac_detach(struct wlc_info *wlc)
{
uint i;
- wlc_hwband_t *band;
+ struct wlc_hwband *band;
struct wlc_hw_info *wlc_hw = wlc->hw;
int callbacks;
M_HOST_FLAGS1, M_HOST_FLAGS2, M_HOST_FLAGS3, M_HOST_FLAGS4,
M_HOST_FLAGS5
};
- wlc_hwband_t *band;
+ struct wlc_hwband *band;
ASSERT((val & ~mask) == 0);
ASSERT(idx < MHFMAX);
u16 wlc_bmac_mhf_get(struct wlc_hw_info *wlc_hw, u8 idx, int bands)
{
- wlc_hwband_t *band;
+ struct wlc_hwband *band;
ASSERT(idx < MHFMAX);
switch (bands) {
static u8 wlc_local_constraint_qdbm(struct wlc_info *wlc);
/* send and receive */
-static wlc_txq_info_t *wlc_txq_alloc(struct wlc_info *wlc,
- struct osl_info *osh);
+static struct wlc_txq_info *wlc_txq_alloc(struct wlc_info *wlc,
+ struct osl_info *osh);
static void wlc_txq_free(struct wlc_info *wlc, struct osl_info *osh,
- wlc_txq_info_t *qi);
-static void wlc_txflowcontrol_signal(struct wlc_info *wlc, wlc_txq_info_t *qi,
+ struct wlc_txq_info *qi);
+static void wlc_txflowcontrol_signal(struct wlc_info *wlc,
+ struct wlc_txq_info *qi,
bool on, int prio);
static void wlc_txflowcontrol_reset(struct wlc_info *wlc);
static u16 wlc_compute_airtime(struct wlc_info *wlc, ratespec_t rspec,
uint err = 0;
uint j;
struct wlc_pub *pub;
- wlc_txq_info_t *qi;
+ struct wlc_txq_info *qi;
uint n_disabled;
WL_NONE("wl%d: %s: vendor 0x%x device 0x%x\n",
{
/* free dumpcb list */
- dumpcb_t *prev, *ptr;
+ struct dumpcb_s *prev, *ptr;
prev = ptr = wlc->dumpcb_head;
while (ptr) {
ptr = prev->next;
uint callbacks = 0;
int i;
bool dev_gone = false;
- wlc_txq_info_t *qi;
+ struct wlc_txq_info *qi;
WL_TRACE("wl%d: %s:\n", wlc->pub->unit, __func__);
for (i = 0; i < WLC_MAXMODULES; i++) {
if (!strcmp(wlc->modulecb[i].name, name) &&
(wlc->modulecb[i].hdl == hdl)) {
- memset(&wlc->modulecb[i], 0, sizeof(modulecb_t));
+ memset(&wlc->modulecb[i], 0, sizeof(struct modulecb));
return 0;
}
}
uint prec)
{
struct wlc_info *wlc = (struct wlc_info *) ctx;
- wlc_txq_info_t *qi = wlc->active_queue; /* Check me */
+ struct wlc_txq_info *qi = wlc->active_queue; /* Check me */
struct pktq *q = &qi->q;
int prio;
return 0;
}
-void BCMFASTPATH wlc_send_q(struct wlc_info *wlc, wlc_txq_info_t *qi)
+void BCMFASTPATH wlc_send_q(struct wlc_info *wlc, struct wlc_txq_info *qi)
{
struct sk_buff *pkt[DOT11_MAXNUMFRAGS];
int prec;
return;
}
-void wlc_bss_list_free(struct wlc_info *wlc, wlc_bss_list_t *bss_list)
+void wlc_bss_list_free(struct wlc_info *wlc, struct wlc_bss_list *bss_list)
{
uint index;
- wlc_bss_info_t *bi;
if (!bss_list) {
WL_ERROR("%s: Attempting to free NULL list\n", __func__);
}
/* inspect all BSS descriptor */
for (index = 0; index < bss_list->count; index++) {
- bi = bss_list->ptrs[index];
- if (bi) {
- kfree(bi);
- bss_list->ptrs[index] = NULL;
- }
+ kfree(bss_list->ptrs[index]);
+ bss_list->ptrs[index] = NULL;
}
bss_list->count = 0;
}
/* check for the particular priority flow control bit being set */
bool
-wlc_txflowcontrol_prio_isset(struct wlc_info *wlc, wlc_txq_info_t *q, int prio)
+wlc_txflowcontrol_prio_isset(struct wlc_info *wlc, struct wlc_txq_info *q,
+ int prio)
{
uint prio_mask;
}
/* propogate the flow control to all interfaces using the given tx queue */
-void wlc_txflowcontrol(struct wlc_info *wlc, wlc_txq_info_t *qi,
+void wlc_txflowcontrol(struct wlc_info *wlc, struct wlc_txq_info *qi,
bool on, int prio)
{
uint prio_bits;
}
void
-wlc_txflowcontrol_override(struct wlc_info *wlc, wlc_txq_info_t *qi, bool on,
- uint override)
+wlc_txflowcontrol_override(struct wlc_info *wlc, struct wlc_txq_info *qi,
+ bool on, uint override)
{
uint prev_override;
static void wlc_txflowcontrol_reset(struct wlc_info *wlc)
{
- wlc_txq_info_t *qi;
+ struct wlc_txq_info *qi;
for (qi = wlc->tx_queues; qi != NULL; qi = qi->next) {
if (qi->stopped) {
}
static void
-wlc_txflowcontrol_signal(struct wlc_info *wlc, wlc_txq_info_t *qi, bool on,
+wlc_txflowcontrol_signal(struct wlc_info *wlc, struct wlc_txq_info *qi, bool on,
int prio)
{
struct wlc_if *wlcif;
}
}
-static wlc_txq_info_t *wlc_txq_alloc(struct wlc_info *wlc, struct osl_info *osh)
+static struct wlc_txq_info *wlc_txq_alloc(struct wlc_info *wlc,
+ struct osl_info *osh)
{
- wlc_txq_info_t *qi, *p;
-
- qi = (wlc_txq_info_t *) wlc_calloc(osh, wlc->pub->unit,
- sizeof(wlc_txq_info_t));
- if (qi == NULL) {
- return NULL;
- }
+ struct wlc_txq_info *qi, *p;
- /* Have enough room for control packets along with HI watermark */
- /* Also, add room to txq for total psq packets if all the SCBs leave PS mode */
- /* The watermark for flowcontrol to OS packets will remain the same */
- pktq_init(&qi->q, WLC_PREC_COUNT,
- (2 * wlc->pub->tunables->datahiwat) + PKTQ_LEN_DEFAULT +
- wlc->pub->psq_pkts_total);
-
- /* add this queue to the the global list */
- p = wlc->tx_queues;
- if (p == NULL) {
- wlc->tx_queues = qi;
- } else {
- while (p->next != NULL)
- p = p->next;
- p->next = qi;
+ qi = wlc_calloc(osh, wlc->pub->unit, sizeof(struct wlc_txq_info));
+ if (qi != NULL) {
+ /*
+ * Have enough room for control packets along with HI watermark
+ * Also, add room to txq for total psq packets if all the SCBs
+ * leave PS mode. The watermark for flowcontrol to OS packets
+ * will remain the same
+ */
+ pktq_init(&qi->q, WLC_PREC_COUNT,
+ (2 * wlc->pub->tunables->datahiwat) + PKTQ_LEN_DEFAULT
+ + wlc->pub->psq_pkts_total);
+
+ /* add this queue to the the global list */
+ p = wlc->tx_queues;
+ if (p == NULL) {
+ wlc->tx_queues = qi;
+ } else {
+ while (p->next != NULL)
+ p = p->next;
+ p->next = qi;
+ }
}
-
return qi;
}
static void wlc_txq_free(struct wlc_info *wlc, struct osl_info *osh,
- wlc_txq_info_t *qi)
+ struct wlc_txq_info *qi)
{
- wlc_txq_info_t *p;
+ struct wlc_txq_info *p;
if (qi == NULL)
return;
#define TXOFF (D11_TXH_LEN + D11_PHY_HDR_LEN)
/* For managing scan result lists */
-typedef struct wlc_bss_list {
+struct wlc_bss_list {
uint count;
bool beacon; /* set for beacon, cleared for probe response */
wlc_bss_info_t *ptrs[MAXBSS];
-} wlc_bss_list_t;
+};
#define SW_TIMER_MAC_STAT_UPD 30 /* periodic MAC stats update */
#define WLCWLUNIT(wlc) ((wlc)->pub->unit)
-typedef struct wlc_protection {
+struct wlc_protection {
bool _g; /* use g spec protection, driver internal */
s8 g_override; /* override for use of g spec protection */
u8 gmode_user; /* user config gmode, operating band->gmode is different */
uint ht20in40_ovlp_timeout; /* #sec until 20MHz overlapping OPMODE gone */
uint ht20in40_ibss_timeout; /* #sec until 20MHz-only HT station bcns gone */
uint non_gf_ibss_timeout; /* #sec until non-GF bcns gone */
-} wlc_protection_t;
+};
/* anything affects the single/dual streams/antenna operation */
-typedef struct wlc_stf {
+struct wlc_stf {
u8 hw_txchain; /* HW txchain bitmap cfg */
u8 txchain; /* txchain bitmap being used */
u8 txstreams; /* number of txchains being used */
s8 ldpc; /* AUTO/ON/OFF ldpc cap supported */
u8 txcore[MAX_STREAMS_SUPPORTED + 1]; /* bitmap of selected core for each Nsts */
s8 spatial_policy;
-} wlc_stf_t;
+};
#define WLC_STF_SS_STBC_TX(wlc, scb) \
(((wlc)->stf->txstreams > 1) && (((wlc)->band->band_stf_stbc_tx == ON) || \
/* tx completion callback takes 3 args */
typedef void (*pkcb_fn_t) (struct wlc_info *wlc, uint txstatus, void *arg);
-typedef struct pkt_cb {
+struct pkt_cb {
pkcb_fn_t fn; /* function to call when tx frame completes */
void *arg; /* void arg for fn */
u8 nextidx; /* index of next call back if threading */
bool entered; /* recursion check */
-} pkt_cb_t;
+};
- /* module control blocks */
-typedef struct modulecb {
+/* module control blocks */
+struct modulecb {
char name[32]; /* module name : NULL indicates empty array member */
const bcm_iovar_t *iovars; /* iovar table */
void *hdl; /* handle passed when handler 'doiovar' is called */
* number of timers that could not be
* freed.
*/
-} modulecb_t;
+};
- /* dump control blocks */
-typedef struct dumpcb_s {
+/* dump control blocks */
+struct dumpcb_s {
const char *name; /* dump name */
dump_fn_t dump_fn; /* 'wl dump' handler */
void *dump_fn_arg;
struct dumpcb_s *next;
-} dumpcb_t;
+};
/* virtual interface */
struct wlc_if {
/* flags for the interface */
#define WLC_IF_LINKED 0x02 /* this interface is linked to a wl_if */
-typedef struct wlc_hwband {
+struct wlc_hwband {
int bandtype; /* WLC_BAND_2G, WLC_BAND_5G */
uint bandunit; /* bandstate[] index */
u16 mhfs[MHFMAX]; /* MHF array shadow */
u16 radiorev;
wlc_phy_t *pi; /* pointer to phy specific information */
bool abgphy_encore;
-} wlc_hwband_t;
+};
struct wlc_hw_info {
struct osl_info *osh; /* pointer to os handle */
d11regs_t *regs; /* pointer to device registers */
void *physhim; /* phy shim layer handler */
void *phy_sh; /* pointer to shared phy state */
- wlc_hwband_t *band; /* pointer to active per-band state */
- wlc_hwband_t *bandstate[MAXBANDS]; /* per-band state (one per phy/radio) */
+ struct wlc_hwband *band;/* pointer to active per-band state */
+ struct wlc_hwband *bandstate[MAXBANDS];/* band state per phy/radio */
u16 bmac_phytxant; /* cache of high phytxant state */
bool shortslot; /* currently using 11g ShortSlot timing */
u16 SRL; /* 802.11 dot11ShortRetryLimit */
* if they belong to the same flow of traffic from the device. For multi-channel
* operation there are independent TX Queues for each channel.
*/
-typedef struct wlc_txq_info {
+struct wlc_txq_info {
struct wlc_txq_info *next;
struct pktq q;
uint stopped; /* tx flow control bits */
-} wlc_txq_info_t;
+};
/*
* Principal common (os-independent) software data structure.
bool bcmcfifo_drain; /* TX_BCMC_FIFO is set to drain */
/* tx queue */
- wlc_txq_info_t *tx_queues; /* common TX Queue list */
+ struct wlc_txq_info *tx_queues; /* common TX Queue list */
/* security */
wsec_key_t *wsec_keys[WSEC_MAX_KEYS]; /* dynamic key storage */
bool wsec_swkeys; /* indicates that all keys should be
* treated as sw keys (used for debugging)
*/
- modulecb_t *modulecb;
- dumpcb_t *dumpcb_head;
+ struct modulecb *modulecb;
+ struct dumpcb_s *dumpcb_head;
u8 mimoft; /* SIGN or 11N */
u8 mimo_band_bwcap; /* bw cap per band type */
bool ignore_bcns; /* override: ignore non shortslot bcns in a 11g network */
bool legacy_probe; /* restricts probe requests to CCK rates */
- wlc_protection_t *protection;
+ struct wlc_protection *protection;
s8 PLCPHdr_override; /* 802.11b Preamble Type override */
- wlc_stf_t *stf;
+ struct wlc_stf *stf;
- pkt_cb_t *pkt_callback; /* tx completion callback handlers */
+ struct pkt_cb *pkt_callback; /* tx completion callback handlers */
u32 txretried; /* tx retried number in one msdu */
u16 next_bsscfg_ID;
struct wlc_if *wlcif_list; /* linked list of wlc_if structs */
- wlc_txq_info_t *active_queue; /* txq for the currently active transmit context */
+ struct wlc_txq_info *active_queue; /* txq for the currently active
+ * transmit context
+ */
u32 mpc_dur; /* total time (ms) in mpc mode except for the
* portion since radio is turned off last time
*/
extern void wlc_mac_bcn_promisc_change(struct wlc_info *wlc, bool promisc);
extern void wlc_mac_bcn_promisc(struct wlc_info *wlc);
extern void wlc_mac_promisc(struct wlc_info *wlc);
-extern void wlc_txflowcontrol(struct wlc_info *wlc, wlc_txq_info_t *qi, bool on,
- int prio);
-extern void wlc_txflowcontrol_override(struct wlc_info *wlc, wlc_txq_info_t *qi,
+extern void wlc_txflowcontrol(struct wlc_info *wlc, struct wlc_txq_info *qi,
+ bool on, int prio);
+extern void wlc_txflowcontrol_override(struct wlc_info *wlc,
+ struct wlc_txq_info *qi,
bool on, uint override);
extern bool wlc_txflowcontrol_prio_isset(struct wlc_info *wlc,
- wlc_txq_info_t *qi, int prio);
-extern void wlc_send_q(struct wlc_info *wlc, wlc_txq_info_t *qi);
+ struct wlc_txq_info *qi, int prio);
+extern void wlc_send_q(struct wlc_info *wlc, struct wlc_txq_info *qi);
extern int wlc_prep_pdu(struct wlc_info *wlc, struct sk_buff *pdu, uint *fifo);
extern u16 wlc_calc_lsig_len(struct wlc_info *wlc, ratespec_t ratespec,
extern bool wlc_stay_awake(struct wlc_info *wlc);
extern void wlc_wme_initparams_sta(struct wlc_info *wlc, wme_param_ie_t *pe);
-extern void wlc_bss_list_free(struct wlc_info *wlc, wlc_bss_list_t *bss_list);
+extern void wlc_bss_list_free(struct wlc_info *wlc,
+ struct wlc_bss_list *bss_list);
extern void wlc_ht_mimops_cap_update(struct wlc_info *wlc, u8 mimops_mode);
#endif /* _wlc_h_ */