Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
718803d1
Commit
718803d1
authored
Jul 29, 2013
by
John W. Linville
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-john' of
git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes
parents
0ba568d7
a53ee0a3
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
57 additions
and
39 deletions
+57
-39
drivers/net/wireless/iwlwifi/iwl-prph.h
drivers/net/wireless/iwlwifi/iwl-prph.h
+2
-0
drivers/net/wireless/iwlwifi/mvm/d3.c
drivers/net/wireless/iwlwifi/mvm/d3.c
+10
-5
drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h
drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h
+0
-1
drivers/net/wireless/iwlwifi/mvm/mac80211.c
drivers/net/wireless/iwlwifi/mvm/mac80211.c
+21
-21
drivers/net/wireless/iwlwifi/mvm/scan.c
drivers/net/wireless/iwlwifi/mvm/scan.c
+2
-9
drivers/net/wireless/iwlwifi/mvm/sta.c
drivers/net/wireless/iwlwifi/mvm/sta.c
+8
-3
drivers/net/wireless/iwlwifi/pcie/drv.c
drivers/net/wireless/iwlwifi/pcie/drv.c
+1
-0
drivers/net/wireless/iwlwifi/pcie/rx.c
drivers/net/wireless/iwlwifi/pcie/rx.c
+8
-0
drivers/net/wireless/iwlwifi/pcie/trans.c
drivers/net/wireless/iwlwifi/pcie/trans.c
+5
-0
No files found.
drivers/net/wireless/iwlwifi/iwl-prph.h
View file @
718803d1
...
@@ -97,6 +97,8 @@
...
@@ -97,6 +97,8 @@
#define APMG_PCIDEV_STT_VAL_L1_ACT_DIS (0x00000800)
#define APMG_PCIDEV_STT_VAL_L1_ACT_DIS (0x00000800)
#define APMG_RTC_INT_STT_RFKILL (0x10000000)
/* Device system time */
/* Device system time */
#define DEVICE_SYSTEM_TIME_REG 0xA0206C
#define DEVICE_SYSTEM_TIME_REG 0xA0206C
...
...
drivers/net/wireless/iwlwifi/mvm/d3.c
View file @
718803d1
...
@@ -134,7 +134,7 @@ struct wowlan_key_data {
...
@@ -134,7 +134,7 @@ struct wowlan_key_data {
struct
iwl_wowlan_rsc_tsc_params_cmd
*
rsc_tsc
;
struct
iwl_wowlan_rsc_tsc_params_cmd
*
rsc_tsc
;
struct
iwl_wowlan_tkip_params_cmd
*
tkip
;
struct
iwl_wowlan_tkip_params_cmd
*
tkip
;
bool
error
,
use_rsc_tsc
,
use_tkip
;
bool
error
,
use_rsc_tsc
,
use_tkip
;
int
gtk
_key_idx
;
int
wep
_key_idx
;
};
};
static
void
iwl_mvm_wowlan_program_keys
(
struct
ieee80211_hw
*
hw
,
static
void
iwl_mvm_wowlan_program_keys
(
struct
ieee80211_hw
*
hw
,
...
@@ -188,8 +188,8 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw,
...
@@ -188,8 +188,8 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw,
wkc
.
wep_key
.
key_offset
=
0
;
wkc
.
wep_key
.
key_offset
=
0
;
}
else
{
}
else
{
/* others start at 1 */
/* others start at 1 */
data
->
gtk
_key_idx
++
;
data
->
wep
_key_idx
++
;
wkc
.
wep_key
.
key_offset
=
data
->
gtk
_key_idx
;
wkc
.
wep_key
.
key_offset
=
data
->
wep
_key_idx
;
}
}
ret
=
iwl_mvm_send_cmd_pdu
(
mvm
,
WEP_KEY
,
CMD_SYNC
,
ret
=
iwl_mvm_send_cmd_pdu
(
mvm
,
WEP_KEY
,
CMD_SYNC
,
...
@@ -316,8 +316,13 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw,
...
@@ -316,8 +316,13 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw,
mvm
->
ptk_ivlen
=
key
->
iv_len
;
mvm
->
ptk_ivlen
=
key
->
iv_len
;
mvm
->
ptk_icvlen
=
key
->
icv_len
;
mvm
->
ptk_icvlen
=
key
->
icv_len
;
}
else
{
}
else
{
data
->
gtk_key_idx
++
;
/*
key
->
hw_key_idx
=
data
->
gtk_key_idx
;
* firmware only supports TSC/RSC for a single key,
* so if there are multiple keep overwriting them
* with new ones -- this relies on mac80211 doing
* list_add_tail().
*/
key
->
hw_key_idx
=
1
;
mvm
->
gtk_ivlen
=
key
->
iv_len
;
mvm
->
gtk_ivlen
=
key
->
iv_len
;
mvm
->
gtk_icvlen
=
key
->
icv_len
;
mvm
->
gtk_icvlen
=
key
->
icv_len
;
}
}
...
...
drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h
View file @
718803d1
...
@@ -69,7 +69,6 @@
...
@@ -69,7 +69,6 @@
/* Scan Commands, Responses, Notifications */
/* Scan Commands, Responses, Notifications */
/* Masks for iwl_scan_channel.type flags */
/* Masks for iwl_scan_channel.type flags */
#define SCAN_CHANNEL_TYPE_PASSIVE 0
#define SCAN_CHANNEL_TYPE_ACTIVE BIT(0)
#define SCAN_CHANNEL_TYPE_ACTIVE BIT(0)
#define SCAN_CHANNEL_NARROW_BAND BIT(22)
#define SCAN_CHANNEL_NARROW_BAND BIT(22)
...
...
drivers/net/wireless/iwlwifi/mvm/mac80211.c
View file @
718803d1
...
@@ -511,6 +511,27 @@ static int iwl_mvm_mac_add_interface(struct ieee80211_hw *hw,
...
@@ -511,6 +511,27 @@ static int iwl_mvm_mac_add_interface(struct ieee80211_hw *hw,
if
(
ret
)
if
(
ret
)
goto
out_unlock
;
goto
out_unlock
;
/*
* TODO: remove this temporary code.
* Currently MVM FW supports power management only on single MAC.
* If new interface added, disable PM on existing interface.
* P2P device is a special case, since it is handled by FW similary to
* scan. If P2P deviced is added, PM remains enabled on existing
* interface.
* Note: the method below does not count the new interface being added
* at this moment.
*/
if
(
vif
->
type
!=
NL80211_IFTYPE_P2P_DEVICE
)
mvm
->
vif_count
++
;
if
(
mvm
->
vif_count
>
1
)
{
IWL_DEBUG_MAC80211
(
mvm
,
"Disable power on existing interfaces
\n
"
);
ieee80211_iterate_active_interfaces_atomic
(
mvm
->
hw
,
IEEE80211_IFACE_ITER_NORMAL
,
iwl_mvm_pm_disable_iterator
,
mvm
);
}
/*
/*
* The AP binding flow can be done only after the beacon
* The AP binding flow can be done only after the beacon
* template is configured (which happens only in the mac80211
* template is configured (which happens only in the mac80211
...
@@ -534,27 +555,6 @@ static int iwl_mvm_mac_add_interface(struct ieee80211_hw *hw,
...
@@ -534,27 +555,6 @@ static int iwl_mvm_mac_add_interface(struct ieee80211_hw *hw,
goto
out_unlock
;
goto
out_unlock
;
}
}
/*
* TODO: remove this temporary code.
* Currently MVM FW supports power management only on single MAC.
* If new interface added, disable PM on existing interface.
* P2P device is a special case, since it is handled by FW similary to
* scan. If P2P deviced is added, PM remains enabled on existing
* interface.
* Note: the method below does not count the new interface being added
* at this moment.
*/
if
(
vif
->
type
!=
NL80211_IFTYPE_P2P_DEVICE
)
mvm
->
vif_count
++
;
if
(
mvm
->
vif_count
>
1
)
{
IWL_DEBUG_MAC80211
(
mvm
,
"Disable power on existing interfaces
\n
"
);
ieee80211_iterate_active_interfaces_atomic
(
mvm
->
hw
,
IEEE80211_IFACE_ITER_NORMAL
,
iwl_mvm_pm_disable_iterator
,
mvm
);
}
ret
=
iwl_mvm_mac_ctxt_add
(
mvm
,
vif
);
ret
=
iwl_mvm_mac_ctxt_add
(
mvm
,
vif
);
if
(
ret
)
if
(
ret
)
goto
out_release
;
goto
out_release
;
...
...
drivers/net/wireless/iwlwifi/mvm/scan.c
View file @
718803d1
...
@@ -178,19 +178,12 @@ static void iwl_mvm_scan_fill_channels(struct iwl_scan_cmd *cmd,
...
@@ -178,19 +178,12 @@ static void iwl_mvm_scan_fill_channels(struct iwl_scan_cmd *cmd,
struct
iwl_scan_channel
*
chan
=
(
struct
iwl_scan_channel
*
)
struct
iwl_scan_channel
*
chan
=
(
struct
iwl_scan_channel
*
)
(
cmd
->
data
+
le16_to_cpu
(
cmd
->
tx_cmd
.
len
));
(
cmd
->
data
+
le16_to_cpu
(
cmd
->
tx_cmd
.
len
));
int
i
;
int
i
;
__le32
chan_type_value
;
if
(
req
->
n_ssids
>
0
)
chan_type_value
=
cpu_to_le32
(
BIT
(
req
->
n_ssids
)
-
1
);
else
chan_type_value
=
SCAN_CHANNEL_TYPE_PASSIVE
;
for
(
i
=
0
;
i
<
cmd
->
channel_count
;
i
++
)
{
for
(
i
=
0
;
i
<
cmd
->
channel_count
;
i
++
)
{
chan
->
channel
=
cpu_to_le16
(
req
->
channels
[
i
]
->
hw_value
);
chan
->
channel
=
cpu_to_le16
(
req
->
channels
[
i
]
->
hw_value
);
chan
->
type
=
cpu_to_le32
(
BIT
(
req
->
n_ssids
)
-
1
);
if
(
req
->
channels
[
i
]
->
flags
&
IEEE80211_CHAN_PASSIVE_SCAN
)
if
(
req
->
channels
[
i
]
->
flags
&
IEEE80211_CHAN_PASSIVE_SCAN
)
chan
->
type
=
SCAN_CHANNEL_TYPE_PASSIVE
;
chan
->
type
&=
cpu_to_le32
(
~
SCAN_CHANNEL_TYPE_ACTIVE
);
else
chan
->
type
=
chan_type_value
;
chan
->
active_dwell
=
cpu_to_le16
(
active_dwell
);
chan
->
active_dwell
=
cpu_to_le16
(
active_dwell
);
chan
->
passive_dwell
=
cpu_to_le16
(
passive_dwell
);
chan
->
passive_dwell
=
cpu_to_le16
(
passive_dwell
);
chan
->
iteration_count
=
cpu_to_le16
(
1
);
chan
->
iteration_count
=
cpu_to_le16
(
1
);
...
...
drivers/net/wireless/iwlwifi/mvm/sta.c
View file @
718803d1
...
@@ -915,6 +915,7 @@ int iwl_mvm_sta_tx_agg_flush(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
...
@@ -915,6 +915,7 @@ int iwl_mvm_sta_tx_agg_flush(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
struct
iwl_mvm_sta
*
mvmsta
=
(
void
*
)
sta
->
drv_priv
;
struct
iwl_mvm_sta
*
mvmsta
=
(
void
*
)
sta
->
drv_priv
;
struct
iwl_mvm_tid_data
*
tid_data
=
&
mvmsta
->
tid_data
[
tid
];
struct
iwl_mvm_tid_data
*
tid_data
=
&
mvmsta
->
tid_data
[
tid
];
u16
txq_id
;
u16
txq_id
;
enum
iwl_mvm_agg_state
old_state
;
/*
/*
* First set the agg state to OFF to avoid calling
* First set the agg state to OFF to avoid calling
...
@@ -924,13 +925,17 @@ int iwl_mvm_sta_tx_agg_flush(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
...
@@ -924,13 +925,17 @@ int iwl_mvm_sta_tx_agg_flush(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
txq_id
=
tid_data
->
txq_id
;
txq_id
=
tid_data
->
txq_id
;
IWL_DEBUG_TX_QUEUES
(
mvm
,
"Flush AGG: sta %d tid %d q %d state %d
\n
"
,
IWL_DEBUG_TX_QUEUES
(
mvm
,
"Flush AGG: sta %d tid %d q %d state %d
\n
"
,
mvmsta
->
sta_id
,
tid
,
txq_id
,
tid_data
->
state
);
mvmsta
->
sta_id
,
tid
,
txq_id
,
tid_data
->
state
);
old_state
=
tid_data
->
state
;
tid_data
->
state
=
IWL_AGG_OFF
;
tid_data
->
state
=
IWL_AGG_OFF
;
spin_unlock_bh
(
&
mvmsta
->
lock
);
spin_unlock_bh
(
&
mvmsta
->
lock
);
if
(
old_state
>=
IWL_AGG_ON
)
{
if
(
iwl_mvm_flush_tx_path
(
mvm
,
BIT
(
txq_id
),
true
))
if
(
iwl_mvm_flush_tx_path
(
mvm
,
BIT
(
txq_id
),
true
))
IWL_ERR
(
mvm
,
"Couldn't flush the AGG queue
\n
"
);
IWL_ERR
(
mvm
,
"Couldn't flush the AGG queue
\n
"
);
iwl_trans_txq_disable
(
mvm
->
trans
,
tid_data
->
txq_id
);
iwl_trans_txq_disable
(
mvm
->
trans
,
tid_data
->
txq_id
);
}
mvm
->
queue_to_mac80211
[
tid_data
->
txq_id
]
=
mvm
->
queue_to_mac80211
[
tid_data
->
txq_id
]
=
IWL_INVALID_MAC80211_QUEUE
;
IWL_INVALID_MAC80211_QUEUE
;
...
...
drivers/net/wireless/iwlwifi/pcie/drv.c
View file @
718803d1
...
@@ -130,6 +130,7 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = {
...
@@ -130,6 +130,7 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = {
{
IWL_PCI_DEVICE
(
0x423C
,
0x1306
,
iwl5150_abg_cfg
)},
/* Half Mini Card */
{
IWL_PCI_DEVICE
(
0x423C
,
0x1306
,
iwl5150_abg_cfg
)},
/* Half Mini Card */
{
IWL_PCI_DEVICE
(
0x423C
,
0x1221
,
iwl5150_agn_cfg
)},
/* Mini Card */
{
IWL_PCI_DEVICE
(
0x423C
,
0x1221
,
iwl5150_agn_cfg
)},
/* Mini Card */
{
IWL_PCI_DEVICE
(
0x423C
,
0x1321
,
iwl5150_agn_cfg
)},
/* Half Mini Card */
{
IWL_PCI_DEVICE
(
0x423C
,
0x1321
,
iwl5150_agn_cfg
)},
/* Half Mini Card */
{
IWL_PCI_DEVICE
(
0x423C
,
0x1326
,
iwl5150_abg_cfg
)},
/* Half Mini Card */
{
IWL_PCI_DEVICE
(
0x423D
,
0x1211
,
iwl5150_agn_cfg
)},
/* Mini Card */
{
IWL_PCI_DEVICE
(
0x423D
,
0x1211
,
iwl5150_agn_cfg
)},
/* Mini Card */
{
IWL_PCI_DEVICE
(
0x423D
,
0x1311
,
iwl5150_agn_cfg
)},
/* Half Mini Card */
{
IWL_PCI_DEVICE
(
0x423D
,
0x1311
,
iwl5150_agn_cfg
)},
/* Half Mini Card */
...
...
drivers/net/wireless/iwlwifi/pcie/rx.c
View file @
718803d1
...
@@ -888,6 +888,14 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)
...
@@ -888,6 +888,14 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)
iwl_op_mode_hw_rf_kill
(
trans
->
op_mode
,
hw_rfkill
);
iwl_op_mode_hw_rf_kill
(
trans
->
op_mode
,
hw_rfkill
);
if
(
hw_rfkill
)
{
if
(
hw_rfkill
)
{
/*
* Clear the interrupt in APMG if the NIC is going down.
* Note that when the NIC exits RFkill (else branch), we
* can't access prph and the NIC will be reset in
* start_hw anyway.
*/
iwl_write_prph
(
trans
,
APMG_RTC_INT_STT_REG
,
APMG_RTC_INT_STT_RFKILL
);
set_bit
(
STATUS_RFKILL
,
&
trans_pcie
->
status
);
set_bit
(
STATUS_RFKILL
,
&
trans_pcie
->
status
);
if
(
test_and_clear_bit
(
STATUS_HCMD_ACTIVE
,
if
(
test_and_clear_bit
(
STATUS_HCMD_ACTIVE
,
&
trans_pcie
->
status
))
&
trans_pcie
->
status
))
...
...
drivers/net/wireless/iwlwifi/pcie/trans.c
View file @
718803d1
...
@@ -670,6 +670,11 @@ static int iwl_trans_pcie_start_hw(struct iwl_trans *trans)
...
@@ -670,6 +670,11 @@ static int iwl_trans_pcie_start_hw(struct iwl_trans *trans)
return
err
;
return
err
;
}
}
/* Reset the entire device */
iwl_set_bit
(
trans
,
CSR_RESET
,
CSR_RESET_REG_FLAG_SW_RESET
);
usleep_range
(
10
,
15
);
iwl_pcie_apm_init
(
trans
);
iwl_pcie_apm_init
(
trans
);
/* From now on, the op_mode will be kept updated about RF kill state */
/* From now on, the op_mode will be kept updated about RF kill state */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment