Loading drivers/net/wireless/iwlwifi/iwl-fw-file.h +2 −0 Original line number Diff line number Diff line Loading @@ -244,6 +244,7 @@ enum iwl_ucode_tlv_flag { * longer than the passive one, which is essential for fragmented scan. * @IWL_UCODE_TLV_API_WIFI_MCC_UPDATE: ucode supports MCC updates with source. * IWL_UCODE_TLV_API_HDC_PHASE_0: ucode supports finer configuration of LTR * @IWL_UCODE_TLV_API_TX_POWER_DEV: new API for tx power. * @IWL_UCODE_TLV_API_BASIC_DWELL: use only basic dwell time in scan command, * regardless of the band or the number of the probes. FW will calculate * the actual dwell time. Loading @@ -260,6 +261,7 @@ enum iwl_ucode_tlv_api { IWL_UCODE_TLV_API_FRAGMENTED_SCAN = BIT(8), IWL_UCODE_TLV_API_WIFI_MCC_UPDATE = BIT(9), IWL_UCODE_TLV_API_HDC_PHASE_0 = BIT(10), IWL_UCODE_TLV_API_TX_POWER_DEV = BIT(11), IWL_UCODE_TLV_API_BASIC_DWELL = BIT(13), IWL_UCODE_TLV_API_SCD_CFG = BIT(15), IWL_UCODE_TLV_API_SINGLE_SCAN_EBS = BIT(16), Loading drivers/net/wireless/iwlwifi/iwl-trans.h +27 −14 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ * GPL LICENSE SUMMARY * * Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as Loading @@ -32,7 +32,7 @@ * BSD LICENSE * * Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH * All rights reserved. * * Redistribution and use in source and binary forms, with or without Loading Loading @@ -421,8 +421,9 @@ struct iwl_trans_txq_scd_cfg { * * All the handlers MUST be implemented * * @start_hw: starts the HW- from that point on, the HW can send interrupts * May sleep * @start_hw: starts the HW. If low_power is true, the NIC needs to be taken * out of a low power state. From that point on, the HW can send * interrupts. May sleep. * @op_mode_leave: Turn off the HW RF kill indication if on * May sleep * @start_fw: allocates and inits all the resources for the transport Loading @@ -432,10 +433,11 @@ struct iwl_trans_txq_scd_cfg { * the SCD base address in SRAM, then provide it here, or 0 otherwise. * May sleep * @stop_device: stops the whole device (embedded CPU put to reset) and stops * the HW. From that point on, the HW will be in low power but will still * issue interrupt if the HW RF kill is triggered. This callback must do * the right thing and not crash even if start_hw() was called but not * start_fw(). May sleep * the HW. If low_power is true, the NIC will be put in low power state. * From that point on, the HW will be stopped but will still issue an * interrupt if the HW RF kill switch is triggered. * This callback must do the right thing and not crash even if %start_hw() * was called but not &start_fw(). May sleep. * @d3_suspend: put the device into the correct mode for WoWLAN during * suspend. This is optional, if not implemented WoWLAN will not be * supported. This callback may sleep. Loading Loading @@ -491,14 +493,14 @@ struct iwl_trans_txq_scd_cfg { */ struct iwl_trans_ops { int (*start_hw)(struct iwl_trans *iwl_trans); int (*start_hw)(struct iwl_trans *iwl_trans, bool low_power); void (*op_mode_leave)(struct iwl_trans *iwl_trans); int (*start_fw)(struct iwl_trans *trans, const struct fw_img *fw, bool run_in_rfkill); int (*update_sf)(struct iwl_trans *trans, struct iwl_sf_region *st_fwrd_space); void (*fw_alive)(struct iwl_trans *trans, u32 scd_addr); void (*stop_device)(struct iwl_trans *trans); void (*stop_device)(struct iwl_trans *trans, bool low_power); void (*d3_suspend)(struct iwl_trans *trans, bool test); int (*d3_resume)(struct iwl_trans *trans, enum iwl_d3_status *status, Loading Loading @@ -652,11 +654,16 @@ static inline void iwl_trans_configure(struct iwl_trans *trans, trans->ops->configure(trans, trans_cfg); } static inline int iwl_trans_start_hw(struct iwl_trans *trans) static inline int _iwl_trans_start_hw(struct iwl_trans *trans, bool low_power) { might_sleep(); return trans->ops->start_hw(trans); return trans->ops->start_hw(trans, low_power); } static inline int iwl_trans_start_hw(struct iwl_trans *trans) { return trans->ops->start_hw(trans, true); } static inline void iwl_trans_op_mode_leave(struct iwl_trans *trans) Loading Loading @@ -703,15 +710,21 @@ static inline int iwl_trans_update_sf(struct iwl_trans *trans, return 0; } static inline void iwl_trans_stop_device(struct iwl_trans *trans) static inline void _iwl_trans_stop_device(struct iwl_trans *trans, bool low_power) { might_sleep(); trans->ops->stop_device(trans); trans->ops->stop_device(trans, low_power); trans->state = IWL_TRANS_NO_FW; } static inline void iwl_trans_stop_device(struct iwl_trans *trans) { _iwl_trans_stop_device(trans, true); } static inline void iwl_trans_d3_suspend(struct iwl_trans *trans, bool test) { might_sleep(); Loading drivers/net/wireless/iwlwifi/mvm/d3.c +1 −1 Original line number Diff line number Diff line Loading @@ -1726,7 +1726,7 @@ iwl_mvm_netdetect_query_results(struct iwl_mvm *mvm, results->matched_profiles = le32_to_cpu(query->matched_profiles); memcpy(results->matches, query->matches, sizeof(results->matches)); #ifdef CPTCFG_IWLWIFI_DEBUGFS #ifdef CONFIG_IWLWIFI_DEBUGFS mvm->last_netdetect_scans = le32_to_cpu(query->n_scans_done); #endif Loading drivers/net/wireless/iwlwifi/mvm/fw-api-power.h +34 −0 Original line number Diff line number Diff line Loading @@ -297,6 +297,40 @@ struct iwl_uapsd_misbehaving_ap_notif { u8 reserved[3]; } __packed; /** * struct iwl_reduce_tx_power_cmd - TX power reduction command * REDUCE_TX_POWER_CMD = 0x9f * @flags: (reserved for future implementation) * @mac_context_id: id of the mac ctx for which we are reducing TX power. * @pwr_restriction: TX power restriction in dBms. */ struct iwl_reduce_tx_power_cmd { u8 flags; u8 mac_context_id; __le16 pwr_restriction; } __packed; /* TX_REDUCED_POWER_API_S_VER_1 */ /** * struct iwl_dev_tx_power_cmd - TX power reduction command * REDUCE_TX_POWER_CMD = 0x9f * @set_mode: 0 - MAC tx power, 1 - device tx power * @mac_context_id: id of the mac ctx for which we are reducing TX power. * @pwr_restriction: TX power restriction in 1/8 dBms. * @dev_24: device TX power restriction in 1/8 dBms * @dev_52_low: device TX power restriction upper band - low * @dev_52_high: device TX power restriction upper band - high */ struct iwl_dev_tx_power_cmd { __le32 set_mode; __le32 mac_context_id; __le16 pwr_restriction; __le16 dev_24; __le16 dev_52_low; __le16 dev_52_high; } __packed; /* TX_REDUCED_POWER_API_S_VER_2 */ #define IWL_DEV_MAX_TX_POWER 0x7FFF /** * struct iwl_beacon_filter_cmd * REPLY_BEACON_FILTERING_CMD = 0xd2 (command) Loading drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h +2 −42 Original line number Diff line number Diff line Loading @@ -122,46 +122,6 @@ enum iwl_scan_complete_status { SCAN_COMP_STATUS_ERR_ALLOC_TE = 0x0C, }; /** * struct iwl_scan_results_notif - scan results for one channel * ( SCAN_RESULTS_NOTIFICATION = 0x83 ) * @channel: which channel the results are from * @band: 0 for 5.2 GHz, 1 for 2.4 GHz * @probe_status: SCAN_PROBE_STATUS_*, indicates success of probe request * @num_probe_not_sent: # of request that weren't sent due to not enough time * @duration: duration spent in channel, in usecs * @statistics: statistics gathered for this channel */ struct iwl_scan_results_notif { u8 channel; u8 band; u8 probe_status; u8 num_probe_not_sent; __le32 duration; __le32 statistics[SCAN_RESULTS_STATISTICS]; } __packed; /* SCAN_RESULT_NTF_API_S_VER_2 */ /** * struct iwl_scan_complete_notif - notifies end of scanning (all channels) * ( SCAN_COMPLETE_NOTIFICATION = 0x84 ) * @scanned_channels: number of channels scanned (and number of valid results) * @status: one of SCAN_COMP_STATUS_* * @bt_status: BT on/off status * @last_channel: last channel that was scanned * @tsf_low: TSF timer (lower half) in usecs * @tsf_high: TSF timer (higher half) in usecs * @results: array of scan results, only "scanned_channels" of them are valid */ struct iwl_scan_complete_notif { u8 scanned_channels; u8 status; u8 bt_status; u8 last_channel; __le32 tsf_low; __le32 tsf_high; struct iwl_scan_results_notif results[]; } __packed; /* SCAN_COMPLETE_NTF_API_S_VER_2 */ /* scan offload */ #define IWL_SCAN_MAX_BLACKLIST_LEN 64 #define IWL_SCAN_SHORT_BLACKLIST_LEN 16 Loading Loading @@ -554,7 +514,7 @@ struct iwl_scan_req_unified_lmac { } __packed; /** * struct iwl_lmac_scan_results_notif - scan results for one channel - * struct iwl_scan_results_notif - scan results for one channel - * SCAN_RESULT_NTF_API_S_VER_3 * @channel: which channel the results are from * @band: 0 for 5.2 GHz, 1 for 2.4 GHz Loading @@ -562,7 +522,7 @@ struct iwl_scan_req_unified_lmac { * @num_probe_not_sent: # of request that weren't sent due to not enough time * @duration: duration spent in channel, in usecs */ struct iwl_lmac_scan_results_notif { struct iwl_scan_results_notif { u8 channel; u8 band; u8 probe_status; Loading Loading
drivers/net/wireless/iwlwifi/iwl-fw-file.h +2 −0 Original line number Diff line number Diff line Loading @@ -244,6 +244,7 @@ enum iwl_ucode_tlv_flag { * longer than the passive one, which is essential for fragmented scan. * @IWL_UCODE_TLV_API_WIFI_MCC_UPDATE: ucode supports MCC updates with source. * IWL_UCODE_TLV_API_HDC_PHASE_0: ucode supports finer configuration of LTR * @IWL_UCODE_TLV_API_TX_POWER_DEV: new API for tx power. * @IWL_UCODE_TLV_API_BASIC_DWELL: use only basic dwell time in scan command, * regardless of the band or the number of the probes. FW will calculate * the actual dwell time. Loading @@ -260,6 +261,7 @@ enum iwl_ucode_tlv_api { IWL_UCODE_TLV_API_FRAGMENTED_SCAN = BIT(8), IWL_UCODE_TLV_API_WIFI_MCC_UPDATE = BIT(9), IWL_UCODE_TLV_API_HDC_PHASE_0 = BIT(10), IWL_UCODE_TLV_API_TX_POWER_DEV = BIT(11), IWL_UCODE_TLV_API_BASIC_DWELL = BIT(13), IWL_UCODE_TLV_API_SCD_CFG = BIT(15), IWL_UCODE_TLV_API_SINGLE_SCAN_EBS = BIT(16), Loading
drivers/net/wireless/iwlwifi/iwl-trans.h +27 −14 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ * GPL LICENSE SUMMARY * * Copyright(c) 2007 - 2014 Intel Corporation. All rights reserved. * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH * * This program is free software; you can redistribute it and/or modify * it under the terms of version 2 of the GNU General Public License as Loading @@ -32,7 +32,7 @@ * BSD LICENSE * * Copyright(c) 2005 - 2014 Intel Corporation. All rights reserved. * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH * All rights reserved. * * Redistribution and use in source and binary forms, with or without Loading Loading @@ -421,8 +421,9 @@ struct iwl_trans_txq_scd_cfg { * * All the handlers MUST be implemented * * @start_hw: starts the HW- from that point on, the HW can send interrupts * May sleep * @start_hw: starts the HW. If low_power is true, the NIC needs to be taken * out of a low power state. From that point on, the HW can send * interrupts. May sleep. * @op_mode_leave: Turn off the HW RF kill indication if on * May sleep * @start_fw: allocates and inits all the resources for the transport Loading @@ -432,10 +433,11 @@ struct iwl_trans_txq_scd_cfg { * the SCD base address in SRAM, then provide it here, or 0 otherwise. * May sleep * @stop_device: stops the whole device (embedded CPU put to reset) and stops * the HW. From that point on, the HW will be in low power but will still * issue interrupt if the HW RF kill is triggered. This callback must do * the right thing and not crash even if start_hw() was called but not * start_fw(). May sleep * the HW. If low_power is true, the NIC will be put in low power state. * From that point on, the HW will be stopped but will still issue an * interrupt if the HW RF kill switch is triggered. * This callback must do the right thing and not crash even if %start_hw() * was called but not &start_fw(). May sleep. * @d3_suspend: put the device into the correct mode for WoWLAN during * suspend. This is optional, if not implemented WoWLAN will not be * supported. This callback may sleep. Loading Loading @@ -491,14 +493,14 @@ struct iwl_trans_txq_scd_cfg { */ struct iwl_trans_ops { int (*start_hw)(struct iwl_trans *iwl_trans); int (*start_hw)(struct iwl_trans *iwl_trans, bool low_power); void (*op_mode_leave)(struct iwl_trans *iwl_trans); int (*start_fw)(struct iwl_trans *trans, const struct fw_img *fw, bool run_in_rfkill); int (*update_sf)(struct iwl_trans *trans, struct iwl_sf_region *st_fwrd_space); void (*fw_alive)(struct iwl_trans *trans, u32 scd_addr); void (*stop_device)(struct iwl_trans *trans); void (*stop_device)(struct iwl_trans *trans, bool low_power); void (*d3_suspend)(struct iwl_trans *trans, bool test); int (*d3_resume)(struct iwl_trans *trans, enum iwl_d3_status *status, Loading Loading @@ -652,11 +654,16 @@ static inline void iwl_trans_configure(struct iwl_trans *trans, trans->ops->configure(trans, trans_cfg); } static inline int iwl_trans_start_hw(struct iwl_trans *trans) static inline int _iwl_trans_start_hw(struct iwl_trans *trans, bool low_power) { might_sleep(); return trans->ops->start_hw(trans); return trans->ops->start_hw(trans, low_power); } static inline int iwl_trans_start_hw(struct iwl_trans *trans) { return trans->ops->start_hw(trans, true); } static inline void iwl_trans_op_mode_leave(struct iwl_trans *trans) Loading Loading @@ -703,15 +710,21 @@ static inline int iwl_trans_update_sf(struct iwl_trans *trans, return 0; } static inline void iwl_trans_stop_device(struct iwl_trans *trans) static inline void _iwl_trans_stop_device(struct iwl_trans *trans, bool low_power) { might_sleep(); trans->ops->stop_device(trans); trans->ops->stop_device(trans, low_power); trans->state = IWL_TRANS_NO_FW; } static inline void iwl_trans_stop_device(struct iwl_trans *trans) { _iwl_trans_stop_device(trans, true); } static inline void iwl_trans_d3_suspend(struct iwl_trans *trans, bool test) { might_sleep(); Loading
drivers/net/wireless/iwlwifi/mvm/d3.c +1 −1 Original line number Diff line number Diff line Loading @@ -1726,7 +1726,7 @@ iwl_mvm_netdetect_query_results(struct iwl_mvm *mvm, results->matched_profiles = le32_to_cpu(query->matched_profiles); memcpy(results->matches, query->matches, sizeof(results->matches)); #ifdef CPTCFG_IWLWIFI_DEBUGFS #ifdef CONFIG_IWLWIFI_DEBUGFS mvm->last_netdetect_scans = le32_to_cpu(query->n_scans_done); #endif Loading
drivers/net/wireless/iwlwifi/mvm/fw-api-power.h +34 −0 Original line number Diff line number Diff line Loading @@ -297,6 +297,40 @@ struct iwl_uapsd_misbehaving_ap_notif { u8 reserved[3]; } __packed; /** * struct iwl_reduce_tx_power_cmd - TX power reduction command * REDUCE_TX_POWER_CMD = 0x9f * @flags: (reserved for future implementation) * @mac_context_id: id of the mac ctx for which we are reducing TX power. * @pwr_restriction: TX power restriction in dBms. */ struct iwl_reduce_tx_power_cmd { u8 flags; u8 mac_context_id; __le16 pwr_restriction; } __packed; /* TX_REDUCED_POWER_API_S_VER_1 */ /** * struct iwl_dev_tx_power_cmd - TX power reduction command * REDUCE_TX_POWER_CMD = 0x9f * @set_mode: 0 - MAC tx power, 1 - device tx power * @mac_context_id: id of the mac ctx for which we are reducing TX power. * @pwr_restriction: TX power restriction in 1/8 dBms. * @dev_24: device TX power restriction in 1/8 dBms * @dev_52_low: device TX power restriction upper band - low * @dev_52_high: device TX power restriction upper band - high */ struct iwl_dev_tx_power_cmd { __le32 set_mode; __le32 mac_context_id; __le16 pwr_restriction; __le16 dev_24; __le16 dev_52_low; __le16 dev_52_high; } __packed; /* TX_REDUCED_POWER_API_S_VER_2 */ #define IWL_DEV_MAX_TX_POWER 0x7FFF /** * struct iwl_beacon_filter_cmd * REPLY_BEACON_FILTERING_CMD = 0xd2 (command) Loading
drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h +2 −42 Original line number Diff line number Diff line Loading @@ -122,46 +122,6 @@ enum iwl_scan_complete_status { SCAN_COMP_STATUS_ERR_ALLOC_TE = 0x0C, }; /** * struct iwl_scan_results_notif - scan results for one channel * ( SCAN_RESULTS_NOTIFICATION = 0x83 ) * @channel: which channel the results are from * @band: 0 for 5.2 GHz, 1 for 2.4 GHz * @probe_status: SCAN_PROBE_STATUS_*, indicates success of probe request * @num_probe_not_sent: # of request that weren't sent due to not enough time * @duration: duration spent in channel, in usecs * @statistics: statistics gathered for this channel */ struct iwl_scan_results_notif { u8 channel; u8 band; u8 probe_status; u8 num_probe_not_sent; __le32 duration; __le32 statistics[SCAN_RESULTS_STATISTICS]; } __packed; /* SCAN_RESULT_NTF_API_S_VER_2 */ /** * struct iwl_scan_complete_notif - notifies end of scanning (all channels) * ( SCAN_COMPLETE_NOTIFICATION = 0x84 ) * @scanned_channels: number of channels scanned (and number of valid results) * @status: one of SCAN_COMP_STATUS_* * @bt_status: BT on/off status * @last_channel: last channel that was scanned * @tsf_low: TSF timer (lower half) in usecs * @tsf_high: TSF timer (higher half) in usecs * @results: array of scan results, only "scanned_channels" of them are valid */ struct iwl_scan_complete_notif { u8 scanned_channels; u8 status; u8 bt_status; u8 last_channel; __le32 tsf_low; __le32 tsf_high; struct iwl_scan_results_notif results[]; } __packed; /* SCAN_COMPLETE_NTF_API_S_VER_2 */ /* scan offload */ #define IWL_SCAN_MAX_BLACKLIST_LEN 64 #define IWL_SCAN_SHORT_BLACKLIST_LEN 16 Loading Loading @@ -554,7 +514,7 @@ struct iwl_scan_req_unified_lmac { } __packed; /** * struct iwl_lmac_scan_results_notif - scan results for one channel - * struct iwl_scan_results_notif - scan results for one channel - * SCAN_RESULT_NTF_API_S_VER_3 * @channel: which channel the results are from * @band: 0 for 5.2 GHz, 1 for 2.4 GHz Loading @@ -562,7 +522,7 @@ struct iwl_scan_req_unified_lmac { * @num_probe_not_sent: # of request that weren't sent due to not enough time * @duration: duration spent in channel, in usecs */ struct iwl_lmac_scan_results_notif { struct iwl_scan_results_notif { u8 channel; u8 band; u8 probe_status; Loading