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
e7322f32
Commit
e7322f32
authored
Oct 29, 2014
by
Emmanuel Grumbach
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'iwlwifi-fixes/master' into iwlwifi-next
parents
35a9ad8a
7f2ac8fb
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
106 additions
and
44 deletions
+106
-44
drivers/net/wireless/iwlwifi/dvm/mac80211.c
drivers/net/wireless/iwlwifi/dvm/mac80211.c
+13
-11
drivers/net/wireless/iwlwifi/iwl-8000.c
drivers/net/wireless/iwlwifi/iwl-8000.c
+2
-1
drivers/net/wireless/iwlwifi/iwl-trans.h
drivers/net/wireless/iwlwifi/iwl-trans.h
+2
-0
drivers/net/wireless/iwlwifi/mvm/coex.c
drivers/net/wireless/iwlwifi/mvm/coex.c
+2
-2
drivers/net/wireless/iwlwifi/mvm/coex_legacy.c
drivers/net/wireless/iwlwifi/mvm/coex_legacy.c
+2
-2
drivers/net/wireless/iwlwifi/mvm/fw-api-power.h
drivers/net/wireless/iwlwifi/mvm/fw-api-power.h
+34
-1
drivers/net/wireless/iwlwifi/mvm/fw-api.h
drivers/net/wireless/iwlwifi/mvm/fw-api.h
+1
-0
drivers/net/wireless/iwlwifi/mvm/fw.c
drivers/net/wireless/iwlwifi/mvm/fw.c
+9
-0
drivers/net/wireless/iwlwifi/mvm/mac80211.c
drivers/net/wireless/iwlwifi/mvm/mac80211.c
+23
-9
drivers/net/wireless/iwlwifi/mvm/ops.c
drivers/net/wireless/iwlwifi/mvm/ops.c
+1
-0
drivers/net/wireless/iwlwifi/mvm/scan.c
drivers/net/wireless/iwlwifi/mvm/scan.c
+2
-1
drivers/net/wireless/iwlwifi/mvm/time-event.c
drivers/net/wireless/iwlwifi/mvm/time-event.c
+1
-1
drivers/net/wireless/iwlwifi/mvm/tx.c
drivers/net/wireless/iwlwifi/mvm/tx.c
+2
-6
drivers/net/wireless/iwlwifi/pcie/trans.c
drivers/net/wireless/iwlwifi/pcie/trans.c
+12
-10
No files found.
drivers/net/wireless/iwlwifi/dvm/mac80211.c
View file @
e7322f32
...
...
@@ -1095,6 +1095,7 @@ static void iwlagn_mac_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
u32
queues
,
bool
drop
)
{
struct
iwl_priv
*
priv
=
IWL_MAC80211_GET_DVM
(
hw
);
u32
scd_queues
;
mutex_lock
(
&
priv
->
mutex
);
IWL_DEBUG_MAC80211
(
priv
,
"enter
\n
"
);
...
...
@@ -1108,18 +1109,19 @@ static void iwlagn_mac_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
goto
done
;
}
/*
* mac80211 will not push any more frames for transmit
* until the flush is completed
*/
if
(
drop
)
{
IWL_DEBUG_MAC80211
(
priv
,
"send flush command
\n
"
);
if
(
iwlagn_txfifo_flush
(
priv
,
0
))
{
IWL_ERR
(
priv
,
"flush request fail
\n
"
);
goto
done
;
}
scd_queues
=
BIT
(
priv
->
cfg
->
base_params
->
num_of_queues
)
-
1
;
scd_queues
&=
~
(
BIT
(
IWL_IPAN_CMD_QUEUE_NUM
)
|
BIT
(
IWL_DEFAULT_CMD_QUEUE_NUM
));
if
(
vif
)
scd_queues
&=
~
BIT
(
vif
->
hw_queue
[
IEEE80211_AC_VO
]);
IWL_DEBUG_TX_QUEUES
(
priv
,
"Flushing SCD queues: 0x%x
\n
"
,
scd_queues
);
if
(
iwlagn_txfifo_flush
(
priv
,
scd_queues
))
{
IWL_ERR
(
priv
,
"flush request fail
\n
"
);
goto
done
;
}
IWL_DEBUG_
MAC80211
(
priv
,
"wait transmit/flush all frames
\n
"
);
IWL_DEBUG_
TX_QUEUES
(
priv
,
"wait transmit/flush all frames
\n
"
);
iwl_trans_wait_tx_queue_empty
(
priv
->
trans
,
0xffffffff
);
done:
mutex_unlock
(
&
priv
->
mutex
);
...
...
drivers/net/wireless/iwlwifi/iwl-8000.c
View file @
e7322f32
...
...
@@ -82,7 +82,8 @@
#define IWL8000_TX_POWER_VERSION 0xffff
/* meaningless */
#define IWL8000_FW_PRE "iwlwifi-8000"
#define IWL8000_MODULE_FIRMWARE(api) IWL8000_FW_PRE __stringify(api) ".ucode"
#define IWL8000_MODULE_FIRMWARE(api) \
IWL8000_FW_PRE "-" __stringify(api) ".ucode"
#define NVM_HW_SECTION_NUM_FAMILY_8000 10
#define DEFAULT_NVM_FILE_FAMILY_8000 "iwl_nvm_8000.bin"
...
...
drivers/net/wireless/iwlwifi/iwl-trans.h
View file @
e7322f32
...
...
@@ -563,6 +563,7 @@ enum iwl_trans_state {
* Set during transport allocation.
* @hw_id_str: a string with info about HW ID. Set during transport allocation.
* @pm_support: set to true in start_hw if link pm is supported
* @ltr_enabled: set to true if the LTR is enabled
* @dev_cmd_pool: pool for Tx cmd allocation - for internal use only.
* The user should use iwl_trans_{alloc,free}_tx_cmd.
* @dev_cmd_headroom: room needed for the transport's private use before the
...
...
@@ -589,6 +590,7 @@ struct iwl_trans {
u8
rx_mpdu_cmd
,
rx_mpdu_cmd_hdr_size
;
bool
pm_support
;
bool
ltr_enabled
;
/* The following fields are internal only */
struct
kmem_cache
*
dev_cmd_pool
;
...
...
drivers/net/wireless/iwlwifi/mvm/coex.c
View file @
e7322f32
...
...
@@ -303,8 +303,8 @@ static const __le64 iwl_ci_mask[][3] = {
};
static
const
__le32
iwl_bt_mprio_lut
[
BT_COEX_MULTI_PRIO_LUT_SIZE
]
=
{
cpu_to_le32
(
0x2
8412201
),
cpu_to_le32
(
0x
111184
51
),
cpu_to_le32
(
0x2
e402280
),
cpu_to_le32
(
0x
7711a7
51
),
};
struct
corunning_block_luts
{
...
...
drivers/net/wireless/iwlwifi/mvm/coex_legacy.c
View file @
e7322f32
...
...
@@ -291,8 +291,8 @@ static const __le64 iwl_ci_mask[][3] = {
};
static
const
__le32
iwl_bt_mprio_lut
[
BT_COEX_MULTI_PRIO_LUT_SIZE
]
=
{
cpu_to_le32
(
0x2
8412201
),
cpu_to_le32
(
0x
111184
51
),
cpu_to_le32
(
0x2
e402280
),
cpu_to_le32
(
0x
7711a7
51
),
};
struct
corunning_block_luts
{
...
...
drivers/net/wireless/iwlwifi/mvm/fw-api-power.h
View file @
e7322f32
...
...
@@ -68,13 +68,46 @@
/* Power Management Commands, Responses, Notifications */
/**
* enum iwl_ltr_config_flags - masks for LTR config command flags
* @LTR_CFG_FLAG_FEATURE_ENABLE: Feature operational status
* @LTR_CFG_FLAG_HW_DIS_ON_SHADOW_REG_ACCESS: allow LTR change on shadow
* memory access
* @LTR_CFG_FLAG_HW_EN_SHRT_WR_THROUGH: allow LTR msg send on ANY LTR
* reg change
* @LTR_CFG_FLAG_HW_DIS_ON_D0_2_D3: allow LTR msg send on transition from
* D0 to D3
* @LTR_CFG_FLAG_SW_SET_SHORT: fixed static short LTR register
* @LTR_CFG_FLAG_SW_SET_LONG: fixed static short LONG register
* @LTR_CFG_FLAG_DENIE_C10_ON_PD: allow going into C10 on PD
*/
enum
iwl_ltr_config_flags
{
LTR_CFG_FLAG_FEATURE_ENABLE
=
BIT
(
0
),
LTR_CFG_FLAG_HW_DIS_ON_SHADOW_REG_ACCESS
=
BIT
(
1
),
LTR_CFG_FLAG_HW_EN_SHRT_WR_THROUGH
=
BIT
(
2
),
LTR_CFG_FLAG_HW_DIS_ON_D0_2_D3
=
BIT
(
3
),
LTR_CFG_FLAG_SW_SET_SHORT
=
BIT
(
4
),
LTR_CFG_FLAG_SW_SET_LONG
=
BIT
(
5
),
LTR_CFG_FLAG_DENIE_C10_ON_PD
=
BIT
(
6
),
};
/**
* struct iwl_ltr_config_cmd - configures the LTR
* @flags: See %enum iwl_ltr_config_flags
*/
struct
iwl_ltr_config_cmd
{
__le32
flags
;
__le32
static_long
;
__le32
static_short
;
}
__packed
;
/* Radio LP RX Energy Threshold measured in dBm */
#define POWER_LPRX_RSSI_THRESHOLD 75
#define POWER_LPRX_RSSI_THRESHOLD_MAX 94
#define POWER_LPRX_RSSI_THRESHOLD_MIN 30
/**
* enum iwl_
scan
_flags - masks for power table command flags
* enum iwl_
power
_flags - masks for power table command flags
* @POWER_FLAGS_POWER_SAVE_ENA_MSK: '1' Allow to save power by turning off
* receiver and transmitter. '0' - does not allow.
* @POWER_FLAGS_POWER_MANAGEMENT_ENA_MSK: '0' Driver disables power management,
...
...
drivers/net/wireless/iwlwifi/mvm/fw-api.h
View file @
e7322f32
...
...
@@ -157,6 +157,7 @@ enum {
/* Power - legacy power table command */
POWER_TABLE_CMD
=
0x77
,
PSM_UAPSD_AP_MISBEHAVING_NOTIFICATION
=
0x78
,
LTR_CONFIG
=
0xee
,
/* Thermal Throttling*/
REPLY_THERMAL_MNG_BACKOFF
=
0x7e
,
...
...
drivers/net/wireless/iwlwifi/mvm/fw.c
View file @
e7322f32
...
...
@@ -480,6 +480,15 @@ int iwl_mvm_up(struct iwl_mvm *mvm)
/* Initialize tx backoffs to the minimal possible */
iwl_mvm_tt_tx_backoff
(
mvm
,
0
);
if
(
mvm
->
trans
->
ltr_enabled
)
{
struct
iwl_ltr_config_cmd
cmd
=
{
.
flags
=
cpu_to_le32
(
LTR_CFG_FLAG_FEATURE_ENABLE
),
};
WARN_ON
(
iwl_mvm_send_cmd_pdu
(
mvm
,
LTR_CONFIG
,
0
,
sizeof
(
cmd
),
&
cmd
));
}
ret
=
iwl_mvm_power_update_device
(
mvm
);
if
(
ret
)
goto
error
;
...
...
drivers/net/wireless/iwlwifi/mvm/mac80211.c
View file @
e7322f32
...
...
@@ -526,7 +526,8 @@ static void iwl_mvm_mac_tx(struct ieee80211_hw *hw,
}
if
(
IEEE80211_SKB_CB
(
skb
)
->
hw_queue
==
IWL_MVM_OFFCHANNEL_QUEUE
&&
!
test_bit
(
IWL_MVM_STATUS_ROC_RUNNING
,
&
mvm
->
status
))
!
test_bit
(
IWL_MVM_STATUS_ROC_RUNNING
,
&
mvm
->
status
)
&&
!
test_bit
(
IWL_MVM_STATUS_ROC_AUX_RUNNING
,
&
mvm
->
status
))
goto
drop
;
/* treat non-bufferable MMPDUs as broadcast if sta is sleeping */
...
...
@@ -1734,6 +1735,13 @@ iwl_mvm_bss_info_changed_ap_ibss(struct iwl_mvm *mvm,
if
(
changes
&
BSS_CHANGED_BEACON
&&
iwl_mvm_mac_ctxt_beacon_changed
(
mvm
,
vif
))
IWL_WARN
(
mvm
,
"Failed updating beacon data
\n
"
);
if
(
changes
&
BSS_CHANGED_TXPOWER
)
{
IWL_DEBUG_CALIB
(
mvm
,
"Changing TX Power to %d
\n
"
,
bss_conf
->
txpower
);
iwl_mvm_set_tx_power
(
mvm
,
vif
,
bss_conf
->
txpower
);
}
}
static
void
iwl_mvm_bss_info_changed
(
struct
ieee80211_hw
*
hw
,
...
...
@@ -2367,14 +2375,19 @@ static int iwl_mvm_send_aux_roc_cmd(struct iwl_mvm *mvm,
/* Set the node address */
memcpy
(
aux_roc_req
.
node_addr
,
vif
->
addr
,
ETH_ALEN
);
lockdep_assert_held
(
&
mvm
->
mutex
);
spin_lock_bh
(
&
mvm
->
time_event_lock
);
if
(
WARN_ON
(
te_data
->
id
==
HOT_SPOT_CMD
))
{
spin_unlock_bh
(
&
mvm
->
time_event_lock
);
return
-
EIO
;
}
te_data
->
vif
=
vif
;
te_data
->
duration
=
duration
;
te_data
->
id
=
HOT_SPOT_CMD
;
lockdep_assert_held
(
&
mvm
->
mutex
);
spin_lock_bh
(
&
mvm
->
time_event_lock
);
list_add_tail
(
&
te_data
->
list
,
&
mvm
->
time_event_list
);
spin_unlock_bh
(
&
mvm
->
time_event_lock
);
/*
...
...
@@ -2430,22 +2443,23 @@ static int iwl_mvm_roc(struct ieee80211_hw *hw,
IWL_DEBUG_MAC80211
(
mvm
,
"enter (%d, %d, %d)
\n
"
,
channel
->
hw_value
,
duration
,
type
);
mutex_lock
(
&
mvm
->
mutex
);
switch
(
vif
->
type
)
{
case
NL80211_IFTYPE_STATION
:
/* Use aux roc framework (HS20) */
ret
=
iwl_mvm_send_aux_roc_cmd
(
mvm
,
channel
,
vif
,
duration
);
return
ret
;
goto
out_unlock
;
case
NL80211_IFTYPE_P2P_DEVICE
:
/* handle below */
break
;
default:
IWL_ERR
(
mvm
,
"vif isn't P2P_DEVICE: %d
\n
"
,
vif
->
type
);
return
-
EINVAL
;
ret
=
-
EINVAL
;
goto
out_unlock
;
}
mutex_lock
(
&
mvm
->
mutex
);
for
(
i
=
0
;
i
<
NUM_PHY_CTX
;
i
++
)
{
phy_ctxt
=
&
mvm
->
phy_ctxts
[
i
];
if
(
phy_ctxt
->
ref
==
0
||
mvmvif
->
phy_ctxt
==
phy_ctxt
)
...
...
drivers/net/wireless/iwlwifi/mvm/ops.c
View file @
e7322f32
...
...
@@ -336,6 +336,7 @@ static const char *const iwl_mvm_cmd_strings[REPLY_MAX] = {
CMD
(
DTS_MEASUREMENT_NOTIFICATION
),
CMD
(
REPLY_THERMAL_MNG_BACKOFF
),
CMD
(
MAC_PM_POWER_TABLE
),
CMD
(
LTR_CONFIG
),
CMD
(
BT_COEX_CI
),
CMD
(
BT_COEX_UPDATE_SW_BOOST
),
CMD
(
BT_COEX_UPDATE_CORUN_LUT
),
...
...
drivers/net/wireless/iwlwifi/mvm/scan.c
View file @
e7322f32
...
...
@@ -459,7 +459,8 @@ int iwl_mvm_scan_request(struct iwl_mvm *mvm,
basic_ssid
?
1
:
0
);
cmd
->
tx_cmd
.
tx_flags
=
cpu_to_le32
(
TX_CMD_FLG_SEQ_CTL
|
TX_CMD_FLG_BT_DIS
);
3
<<
TX_CMD_FLG_BT_PRIO_POS
);
cmd
->
tx_cmd
.
sta_id
=
mvm
->
aux_sta
.
sta_id
;
cmd
->
tx_cmd
.
life_time
=
cpu_to_le32
(
TX_CMD_LIFE_TIME_INFINITE
);
cmd
->
tx_cmd
.
rate_n_flags
=
...
...
drivers/net/wireless/iwlwifi/mvm/time-event.c
View file @
e7322f32
...
...
@@ -305,8 +305,8 @@ static int iwl_mvm_aux_roc_te_handle_notif(struct iwl_mvm *mvm,
te_data
->
running
=
false
;
te_data
->
vif
=
NULL
;
te_data
->
uid
=
0
;
te_data
->
id
=
TE_MAX
;
}
else
if
(
le32_to_cpu
(
notif
->
action
)
==
TE_V2_NOTIF_HOST_EVENT_START
)
{
set_bit
(
IWL_MVM_STATUS_ROC_RUNNING
,
&
mvm
->
status
);
set_bit
(
IWL_MVM_STATUS_ROC_AUX_RUNNING
,
&
mvm
->
status
);
te_data
->
running
=
true
;
ieee80211_ready_on_channel
(
mvm
->
hw
);
/* Start TE */
...
...
drivers/net/wireless/iwlwifi/mvm/tx.c
View file @
e7322f32
...
...
@@ -175,14 +175,10 @@ static void iwl_mvm_set_tx_cmd_rate(struct iwl_mvm *mvm,
/*
* for data packets, rate info comes from the table inside the fw. This
* table is controlled by LINK_QUALITY commands. Exclude ctrl port
* frames like EAPOLs which should be treated as mgmt frames. This
* avoids them being sent initially in high rates which increases the
* chances for completion of the 4-Way handshake.
* table is controlled by LINK_QUALITY commands
*/
if
(
ieee80211_is_data
(
fc
)
&&
sta
&&
!
(
info
->
control
.
flags
&
IEEE80211_TX_CTRL_PORT_CTRL_PROTO
))
{
if
(
ieee80211_is_data
(
fc
)
&&
sta
)
{
tx_cmd
->
initial_rate_index
=
0
;
tx_cmd
->
tx_flags
|=
cpu_to_le32
(
TX_CMD_FLG_STA_RATE
);
return
;
...
...
drivers/net/wireless/iwlwifi/pcie/trans.c
View file @
e7322f32
...
...
@@ -174,6 +174,7 @@ static void iwl_pcie_apm_config(struct iwl_trans *trans)
{
struct
iwl_trans_pcie
*
trans_pcie
=
IWL_TRANS_GET_PCIE_TRANS
(
trans
);
u16
lctl
;
u16
cap
;
/*
* HW bug W/A for instability in PCIe bus L0S->L1 transition.
...
...
@@ -184,16 +185,17 @@ static void iwl_pcie_apm_config(struct iwl_trans *trans)
* power savings, even without L1.
*/
pcie_capability_read_word
(
trans_pcie
->
pci_dev
,
PCI_EXP_LNKCTL
,
&
lctl
);
if
(
lctl
&
PCI_EXP_LNKCTL_ASPM_L1
)
{
/* L1-ASPM enabled; disable(!) L0S */
if
(
lctl
&
PCI_EXP_LNKCTL_ASPM_L1
)
iwl_set_bit
(
trans
,
CSR_GIO_REG
,
CSR_GIO_REG_VAL_L0S_ENABLED
);
dev_info
(
trans
->
dev
,
"L1 Enabled; Disabling L0S
\n
"
);
}
else
{
/* L1-ASPM disabled; enable(!) L0S */
else
iwl_clear_bit
(
trans
,
CSR_GIO_REG
,
CSR_GIO_REG_VAL_L0S_ENABLED
);
dev_info
(
trans
->
dev
,
"L1 Disabled; Enabling L0S
\n
"
);
}
trans
->
pm_support
=
!
(
lctl
&
PCI_EXP_LNKCTL_ASPM_L0S
);
pcie_capability_read_word
(
trans_pcie
->
pci_dev
,
PCI_EXP_DEVCTL2
,
&
cap
);
trans
->
ltr_enabled
=
cap
&
PCI_EXP_DEVCTL2_LTR_EN
;
dev_info
(
trans
->
dev
,
"L1 %sabled - LTR %sabled
\n
"
,
(
lctl
&
PCI_EXP_LNKCTL_ASPM_L1
)
?
"En"
:
"Dis"
,
trans
->
ltr_enabled
?
"En"
:
"Dis"
);
}
/*
...
...
@@ -428,7 +430,7 @@ static int iwl_pcie_apm_stop_master(struct iwl_trans *trans)
ret
=
iwl_poll_bit
(
trans
,
CSR_RESET
,
CSR_RESET_REG_FLAG_MASTER_DISABLED
,
CSR_RESET_REG_FLAG_MASTER_DISABLED
,
100
);
if
(
ret
)
if
(
ret
<
0
)
IWL_WARN
(
trans
,
"Master Disable Timed Out, 100 usec
\n
"
);
IWL_DEBUG_INFO
(
trans
,
"stop master
\n
"
);
...
...
@@ -544,7 +546,7 @@ static int iwl_pcie_prepare_card_hw(struct iwl_trans *trans)
msleep
(
25
);
}
IWL_
DEBUG_INFO
(
trans
,
"got NIC after %d iterations
\n
"
,
iter
);
IWL_
ERR
(
trans
,
"Couldn't prepare the card
\n
"
);
return
ret
;
}
...
...
@@ -1043,7 +1045,7 @@ static int iwl_trans_pcie_d3_resume(struct iwl_trans *trans,
CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY
,
CSR_GP_CNTRL_REG_FLAG_MAC_CLOCK_READY
,
25000
);
if
(
ret
)
{
if
(
ret
<
0
)
{
IWL_ERR
(
trans
,
"Failed to resume the device (mac ready)
\n
"
);
return
ret
;
}
...
...
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