|
@@ -1718,6 +1718,7 @@ static void iwl_nic_start(struct iwl_priv *priv)
|
|
|
struct iwlagn_ucode_capabilities {
|
|
|
u32 max_probe_length;
|
|
|
u32 standard_phy_calibration_size;
|
|
|
+ bool pan;
|
|
|
};
|
|
|
|
|
|
static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context);
|
|
@@ -1955,6 +1956,11 @@ static int iwlagn_load_firmware(struct iwl_priv *priv,
|
|
|
capa->max_probe_length =
|
|
|
le32_to_cpup((__le32 *)tlv_data);
|
|
|
break;
|
|
|
+ case IWL_UCODE_TLV_PAN:
|
|
|
+ if (tlv_len)
|
|
|
+ goto invalid_tlv_len;
|
|
|
+ capa->pan = true;
|
|
|
+ break;
|
|
|
case IWL_UCODE_TLV_INIT_EVTLOG_PTR:
|
|
|
if (tlv_len != sizeof(u32))
|
|
|
goto invalid_tlv_len;
|
|
@@ -2230,10 +2236,11 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context)
|
|
|
priv->_agn.inst_evtlog_size = priv->cfg->max_event_log_size;
|
|
|
priv->_agn.inst_errlog_ptr = pieces.inst_errlog_ptr;
|
|
|
|
|
|
- if (priv->valid_contexts == BIT(IWL_RXON_CTX_BSS))
|
|
|
- priv->sta_key_max_num = STA_KEY_MAX_NUM;
|
|
|
- else
|
|
|
+ if (ucode_capa.pan) {
|
|
|
+ priv->valid_contexts |= BIT(IWL_RXON_CTX_PAN);
|
|
|
priv->sta_key_max_num = STA_KEY_MAX_NUM_PAN;
|
|
|
+ } else
|
|
|
+ priv->sta_key_max_num = STA_KEY_MAX_NUM;
|
|
|
|
|
|
/* Copy images into buffers for card's bus-master reads ... */
|
|
|
|
|
@@ -4226,7 +4233,17 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|
|
priv->contexts[IWL_RXON_CTX_BSS].qos_cmd = REPLY_QOS_PARAM;
|
|
|
priv->contexts[IWL_RXON_CTX_BSS].ap_sta_id = IWL_AP_ID;
|
|
|
priv->contexts[IWL_RXON_CTX_BSS].wep_key_cmd = REPLY_WEPKEY;
|
|
|
- BUILD_BUG_ON(NUM_IWL_RXON_CTX != 1);
|
|
|
+
|
|
|
+ priv->contexts[IWL_RXON_CTX_PAN].rxon_cmd = REPLY_WIPAN_RXON;
|
|
|
+ priv->contexts[IWL_RXON_CTX_PAN].rxon_timing_cmd = REPLY_WIPAN_RXON_TIMING;
|
|
|
+ priv->contexts[IWL_RXON_CTX_PAN].rxon_assoc_cmd = REPLY_WIPAN_RXON_ASSOC;
|
|
|
+ priv->contexts[IWL_RXON_CTX_PAN].qos_cmd = REPLY_WIPAN_QOS_PARAM;
|
|
|
+ priv->contexts[IWL_RXON_CTX_PAN].ap_sta_id = IWL_AP_ID_PAN;
|
|
|
+ priv->contexts[IWL_RXON_CTX_PAN].wep_key_cmd = REPLY_WIPAN_WEPKEY;
|
|
|
+ priv->contexts[IWL_RXON_CTX_PAN].bcast_sta_id = IWLAGN_PAN_BCAST_ID;
|
|
|
+ priv->contexts[IWL_RXON_CTX_PAN].station_flags = STA_FLG_PAN_STATION;
|
|
|
+
|
|
|
+ BUILD_BUG_ON(NUM_IWL_RXON_CTX != 2);
|
|
|
|
|
|
SET_IEEE80211_DEV(hw, &pdev->dev);
|
|
|
|