key_flags |= (STA_KEY_FLG_CCMP | STA_KEY_FLG_MAP_KEY_MSK);
        key_flags |= cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS);
 
-       if (sta_id == il->ctx.bcast_sta_id)
+       if (sta_id == il->hw_params.bcast_id)
                key_flags |= STA_KEY_MULTICAST_MSK;
 
        keyconf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
        /* We don't build a direct scan probe request; the uCode will do
         * that based on the direct_mask added to each channel entry */
        scan->tx_cmd.tx_flags = TX_CMD_FLG_SEQ_CTL_MSK;
-       scan->tx_cmd.sta_id = il->ctx.bcast_sta_id;
+       scan->tx_cmd.sta_id = il->hw_params.bcast_id;
        scan->tx_cmd.stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE;
 
        /* flags + rate selection */
 
        int i;
 
        D_INFO("enter\n");
-       if (sta_id == il->ctx.bcast_sta_id)
+       if (sta_id == il->hw_params.bcast_id)
                goto out;
 
        psta = (struct il3945_sta_priv *)sta->drv_priv;
 
                return -ENOMEM;
        }
 
+       il->hw_params.bcast_id = IL3945_BROADCAST_ID;
+
        /* Assign number of Usable TX queues */
        il->hw_params.max_txq_num = il->cfg->base_params->num_of_queues;
 
        il->hw_params.max_rxq_size = RX_QUEUE_SIZE;
        il->hw_params.max_rxq_log = RX_QUEUE_SIZE_LOG;
        il->hw_params.max_stations = IL3945_STATION_COUNT;
-       il->ctx.bcast_sta_id = IL3945_BROADCAST_ID;
 
        il->sta_key_max_num = STA_KEY_MAX_NUM;
 
        tx_beacon_cmd = (struct il3945_tx_beacon_cmd *)&frame->u;
        memset(tx_beacon_cmd, 0, sizeof(*tx_beacon_cmd));
 
-       tx_beacon_cmd->tx.sta_id = il->ctx.bcast_sta_id;
+       tx_beacon_cmd->tx.sta_id = il->hw_params.bcast_id;
        tx_beacon_cmd->tx.stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE;
 
        frame_size =
 
                D_SCAN("Start passive scan.\n");
 
        scan->tx_cmd.tx_flags = TX_CMD_FLG_SEQ_CTL_MSK;
-       scan->tx_cmd.sta_id = ctx->bcast_sta_id;
+       scan->tx_cmd.sta_id = il->hw_params.bcast_id;
        scan->tx_cmd.stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE;
 
        switch (il->scan_band) {
 
        /* For management frames use broadcast id to do not break aggregation */
        if (!ieee80211_is_data(fc))
-               sta_id = ctx->bcast_sta_id;
+               sta_id = il->hw_params.bcast_id;
        else {
                /* Find idx into station table for destination station */
                sta_id = il_sta_id_or_broadcast(il, ctx, info->control.sta);
        if (keyconf->keylen == WEP_KEY_LEN_128)
                key_flags |= STA_KEY_FLG_KEY_SIZE_MSK;
 
-       if (sta_id == ctx->bcast_sta_id)
+       if (sta_id == il->hw_params.bcast_id)
                key_flags |= STA_KEY_MULTICAST_MSK;
 
        spin_lock_irqsave(&il->sta_lock, flags);
        key_flags |= cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS);
        key_flags &= ~STA_KEY_FLG_INVALID;
 
-       if (sta_id == ctx->bcast_sta_id)
+       if (sta_id == il->hw_params.bcast_id)
                key_flags |= STA_KEY_MULTICAST_MSK;
 
        keyconf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
        key_flags |= cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS);
        key_flags &= ~STA_KEY_FLG_INVALID;
 
-       if (sta_id == ctx->bcast_sta_id)
+       if (sta_id == il->hw_params.bcast_id)
                key_flags |= STA_KEY_MULTICAST_MSK;
 
        keyconf->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
 {
        unsigned long flags;
        struct il_link_quality_cmd *link_cmd;
-       u8 sta_id = ctx->bcast_sta_id;
+       u8 sta_id = il->hw_params.bcast_id;
 
        link_cmd = il4965_sta_alloc_lq(il, sta_id);
        if (!link_cmd) {
 
        /* Set up TX command fields */
        tx_beacon_cmd->tx.len = cpu_to_le16((u16) frame_size);
-       tx_beacon_cmd->tx.sta_id = il->beacon_ctx->bcast_sta_id;
+       tx_beacon_cmd->tx.sta_id = il->hw_params.bcast_id;
        tx_beacon_cmd->tx.stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE;
        tx_beacon_cmd->tx.tx_flags =
            TX_CMD_FLG_SEQ_CTL_MSK | TX_CMD_FLG_TSF_MSK |
 static int
 il4965_set_hw_params(struct il_priv *il)
 {
+       il->hw_params.bcast_id = IL4965_BROADCAST_ID;
        il->hw_params.max_rxq_size = RX_QUEUE_SIZE;
        il->hw_params.max_rxq_log = RX_QUEUE_SIZE_LOG;
        if (il->cfg->mod_params->amsdu_size_8K)
 
            sizeof(struct il4965_scd_bc_tbl);
        il->hw_params.tfd_size = sizeof(struct il_tfd);
        il->hw_params.max_stations = IL4965_STATION_COUNT;
-       il->ctx.bcast_sta_id = IL4965_BROADCAST_ID;
        il->hw_params.max_data_size = IL49_RTC_DATA_SIZE;
        il->hw_params.max_inst_size = IL49_RTC_INST_SIZE;
        il->hw_params.max_bsm_size = BSM_SRAM_SIZE;
                start = IL_STA_ID;
 
        if (is_broadcast_ether_addr(addr))
-               return il->ctx.bcast_sta_id;
+               return il->hw_params.bcast_id;
 
        spin_lock_irqsave(&il->sta_lock, flags);
        for (i = start; i < il->hw_params.max_stations; i++)
 
        if (is_ap)
                sta_id = IL_AP_ID;
        else if (is_broadcast_ether_addr(addr))
-               sta_id = ctx->bcast_sta_id;
+               sta_id = il->hw_params.bcast_id;
        else
                for (i = IL_STA_ID; i < il->hw_params.max_stations; i++) {
                        if (!compare_ether_addr
 
 
 /**
  * struct il_hw_params
+ * @bcast_id: f/w broadcast station ID
  * @max_txq_num: Max # Tx queues supported
  * @dma_chnl_num: Number of Tx DMA/FIFO channels
  * @scd_bc_tbls_size: size of scheduler byte count tables
  * @struct il_sensitivity_ranges: range of sensitivity values
  */
 struct il_hw_params {
+       u8 bcast_id;
        u8 max_txq_num;
        u8 dma_chnl_num;
        u16 scd_bc_tbls_size;
 
        struct il_qos_info qos_data;
 
-       u8 bcast_sta_id;
-
        struct il_wep_key wep_keys[WEP_KEYS_MAX];
        u8 key_mapping_keys;
 
        int sta_id;
 
        if (!sta)
-               return context->bcast_sta_id;
+               return il->hw_params.bcast_id;
 
        sta_id = il_sta_id(sta);