pull request: iwlwifi 2015-06-15
Subsystems (2)
SGkgS2FsbGUsDQoNClRoaXMgaXMgdGhlIGZpcnN0IHB1bGwgcmVxdWVzdCBvZiBmaXhlcyBmb3Ig NC4yLiBBIGZldyBvZiB0aGUgcGF0Y2hlcw0KaGVyZSBhcmUgQ0NlZCB0byBzdGFibGUuIEJlc2lk ZXMgZml4IGZvciAoaGFyZCB0byBoaXQpIGNyYXNoZXMgdGhlcmUgYXJlDQphIGJ1bmNoIG9mIGZp eGVzIGZvciA4MDAwIGRldmljZXMgd2hpY2ggYXJlIG5vdyB1bmRlcmdvaW5nIHRoZSBmaW5hbA0K cm91bmQgb2YgdGVzdHMuDQpMZXQgbWUga25vdyBpZiB5b3UgaGF2ZSBpc3N1ZXMhDQoNCmVtbWFu dWVsDQoNCg0KVGhlIGZvbGxvd2luZyBjaGFuZ2VzIHNpbmNlIGNvbW1pdCBlMDQ1NjcxN2U0ODNi YjhhOTQzMWI4MGE1YmRjOTlhOTI4YjliMDAzOg0KDQogIE1lcmdlIGdpdDovL2dpdC5rZXJuZWwu b3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9kYXZlbS9uZXQtbmV4dCAoMjAxNS0wNi0yNCAx Njo0OTo0OSAtMDcwMCkNCg0KYXJlIGF2YWlsYWJsZSBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkgYXQ6 DQoNCiAgaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvaXds d2lmaS9pd2x3aWZpLWZpeGVzLmdpdCB0YWdzL2l3bHdpZmktZm9yLWthbGxlLTIwMTUtMDYtMTIN Cg0KZm9yIHlvdSB0byBmZXRjaCBjaGFuZ2VzIHVwIHRvIGJlODhhMWFkYTliOTdiYjAxNjE5NmI3 ZjRhMWZjMmZlMmY3OTg1Mjk6DQoNCiAgaXdsd2lmaTogbnZtOiByZW1vdmUgbWFjIGFkZHJlc3Mg Ynl0ZSBzd2FwcGluZyBpbiA4MDAwIGZhbWlseSAoMjAxNS0wNy0xMiAxOTo1NDoxOSArMDMwMCkN Cg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KKiBidWcgZml4ZXMgc3BlY2lmaWMgZm9yIDgwMDAgc2VyaWVzDQoqIGZpeCBh IGNyYXNoIGluIHRpbWUgZXZlbnRzDQoqIGZpeCBhIGNyYXNoIGluIFBDSWUgdHJhbnNwb3J0DQoq IGZpeCBCVCBDb2V4IGNvZGUgdGhhdCBwcmV2ZW50ZWQgYXNzb2NpYXRpb24gb24gY2VydGFpbg0K ICAgICAgICBkZXZpY2VzICgzMTYwKS4NCiogcmV2ZXJ0IHRoZSBuZXcgUkJEIGFsbG9jYXRpb24g bW9kZWwgYmVjYXVzZSBpdCBpbnRyb2R1Y2VkDQoJYSBidWcgd2hlbiBydW5uaW5nIG9uIHdlYWsg Vk0gc2V0dXBzLg0KKiBhIG5ldyBkZXZpY2UgSURzDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkF2cmFoYW0gU3Rlcm4g KDEpOg0KICAgICAgaXdsd2lmaTogbXZtOiBBZGQgcHJlZW1wdGl2ZSBmbGFnIHRvIHNjaGV1bGRl ZCBzY2FuDQoNCkRyZXlmdXNzLCBIYWltICgxKToNCiAgICAgIGl3bHdpZmk6IHBjaWU6IEZpeCBi dWcgaW4gTklDJ3MgUE0gcmVnaXN0ZXJzIGFjY2Vzcw0KDQpFbW1hbnVlbCBHcnVtYmFjaCAoNCk6 DQogICAgICBpd2x3aWZpOiBtdm06IGZpeCBhbnRlbm5hIHNlbGVjdGlvbiB3aGVuIEJUIGlzIGFj dGl2ZQ0KICAgICAgaXdsd2lmaTogcGNpZTogZG9uJ3QgcGFuaWMgaWYgcGNpZSB0cmFuc3BvcnQg YWxsb2MgZmFpbHMNCiAgICAgIGl3bHdpZmk6IHBjaWU6IHByZXBhcmUgdGhlIGRldmljZSBiZWZv cmUgYWNjZXNzaW5nIGl0DQogICAgICBSZXZlcnQgIml3bHdpZmk6IHBjaWU6IE5ldyBSQkQgYWxs b2NhdGlvbiBtb2RlbCINCg0KSm9oYW5uZXMgQmVyZyAoMSk6DQogICAgICBpd2x3aWZpOiBtdm06 IGNoZWNrIHRpbWUtZXZlbnQgdmlmIHRvIGF2b2lkIGJhZCBkZWxldGlvbg0KDQpMaWFkIEthdWZt YW4gKDEpOg0KICAgICAgaXdsd2lmaTogbnZtOiByZW1vdmUgbWFjIGFkZHJlc3MgYnl0ZSBzd2Fw cGluZyBpbiA4MDAwIGZhbWlseQ0KDQpNYXR0aSBHb3R0bGllYiAoMSk6DQogICAgICBpd2x3aWZp OiBtdm06IEF2b2lkIGFjY2Vzc2luZyBOdWxsIHBvaW50ZXIgd2hlbiBzZXR0aW5nIGlndGsNCg0K T3JlbiBHaXZvbiAoMSk6DQogICAgICBpd2x3aWZpOiBlZGl0IHRoZSAzMTY1IHNlcmllcyBhbmQg ODAwMCBzZXJpZXMgUENJIElEcw0KDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wt ZmguaCAgICAgICAgICB8ICAgNiArKw0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXds LW52bS1wYXJzZS5jICAgfCAgMTIgKystDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9t dm0vZnctYXBpLXNjYW4uaCB8ICAgMyArLQ0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkv bXZtL3NjYW4uYyAgICAgICAgfCAgIDMgKw0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkv bXZtL3N0YS5jICAgICAgICAgfCAgIDMgKy0NCiBkcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZp L212bS90aW1lLWV2ZW50LmMgIHwgICAyICstDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lm aS9tdm0vdHguYyAgICAgICAgICB8ICAgMiArLQ0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdp ZmkvcGNpZS9kcnYuYyAgICAgICAgfCAgIDUgKy0NCiBkcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3 aWZpL3BjaWUvaW50ZXJuYWwuaCAgIHwgIDUxICsrLS0tLS0tLS0tDQogZHJpdmVycy9uZXQvd2ly ZWxlc3MvaXdsd2lmaS9wY2llL3J4LmMgICAgICAgICB8IDQxNCArKysrKysrKysrKysrKysrKyst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvcGNpZS90cmFucy5j ICAgICAgfCAgNTIgKysrKysrKy0tLS0tDQogMTEgZmlsZXMgY2hhbmdlZCwgMTQzIGluc2VydGlv bnMoKyksIDQxMCBkZWxldGlvbnMoLSkNCg0K
PATCH 1/10 iwlwifi: mvm: fix antenna selection when BT is active
When BT is active, we want to avoid the shared antenna for management frame to make sure we don't disturb BT. There was a bug in that code because it chose the antenna BIT(ANT_A) where ANT_A is already a bitmap (0x1). This means that the antenna chosen in the end was ANT_B. While this is not optimal on devices with 2 antennas (it'd disturb BT), it is critical on single antenna devices like 3160 which couldn't connect at all when BT was active.
This fixes:
https://bugzilla.kernel.org/show_bug.cgi?id=97181
--- drivers/net/wireless/iwlwifi/mvm/tx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/wireless/iwlwifi/mvm/tx.c +1 -1
@@ -252,7 +252,7 @@ void iwl_mvm_set_tx_cmd_rate(struct iwl_mvm *mvm, struct iwl_tx_cmd *tx_cmd,if (info->band ==IEEE80211_BAND_2GHZ && !iwl_mvm_bt_coex_is_shared_ant_avail (mvm)) - rate_flags =BIT (mvm->cfg->non_shared_ant) <<RATE_MCS_ANT_POS ; + rate_flags = mvm->cfg->non_shared_ant <<RATE_MCS_ANT_POS ;else rate_flags =BIT (mvm->mgmt_last_antenna_idx) <<RATE_MCS_ANT_POS ;
Signature · 1 line
2.1.4
PATCH 2/10 iwlwifi: mvm: Avoid accessing Null pointer when setting igtk
In reply to Grumbach, EmmanuelFrom: Matti Gottlieb <[email protected]>
Sometimes when setting an igtk key the station maybe NULL. In the of case igtk the function will skip to the end, and try to print sta->addr, if sta is Null - we will access a Null pointer.
Avoid accessing a Null pointer when setting a igtk key & the sta == NULL, and print a default MAC address instead.
--- drivers/net/wireless/iwlwifi/mvm/sta.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/net/wireless/iwlwifi/mvm/sta.c +2 -1
@@ -1401,6 +1401,7 @@ int iwl_mvm_set_sta_key(struct iwl_mvm *mvm,bool mcast = !(keyconf->flags &IEEE80211_KEY_FLAG_PAIRWISE );u8 sta_id;int ret; +static const u8 __maybe_unused zero_addr[ETH_ALEN ] = {0 };lockdep_assert_held (&mvm->mutex);
@@ -1467,7 +1468,7 @@ int iwl_mvm_set_sta_key(struct iwl_mvm *mvm, end:IWL_DEBUG_WEP (mvm,"key: cipher=%x len=%d idx=%d sta=%pM ret=%d\n" , keyconf->cipher, keyconf->keylen, keyconf->keyidx, - sta->addr, ret); + sta ? sta->addr : zero_addr, ret);return ret; }
Signature · 1 line
2.1.4
PATCH 3/10 iwlwifi: pcie: Fix bug in NIC's PM registers access
In reply to Grumbach, EmmanuelFrom: "Dreyfuss, Haim" <[email protected]>
While cleanig the access to those hw-dependent registers, instead of using the product family type, wrong condition was added mistakenly and enabled 8000 family devices a forbidden access to HW registers, fix it.
--- drivers/net/wireless/iwlwifi/pcie/trans.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/wireless/iwlwifi/pcie/trans.c +1 -1
@@ -182,7 +182,7 @@ static void iwl_trans_pcie_write_shr(struct iwl_trans *trans, u32 reg, u32 val)static void iwl_pcie_set_pwr (struct iwl_trans *trans,bool vaux) { -if (!trans->cfg->apmg_not_supported) +if (trans->cfg->apmg_not_supported)return ;if (vaux &&pci_pme_capable (to_pci_dev (trans->dev), PCI_D3cold))
Signature · 1 line
2.1.4
PATCH 4/10 iwlwifi: pcie: don't panic if pcie transport alloc fails
In reply to Grumbach, Emmanueliwl_trans_pcie_alloc needs to return a non-zero value if it fails. Otherwise the iwl_drv_start will think that the allocation succeeded.
Remove the duplication of err and ret variable and use ret which is the name we usually use in other places of the driver.
--- drivers/net/wireless/iwlwifi/pcie/trans.c | 44 +++++++++++++++---------------- 1 file changed, 22 insertions(+), 22 deletions(-)
drivers/net/wireless/iwlwifi/pcie/trans.c +22 -22
@@ -2459,7 +2459,7 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,struct iwl_trans_pcie *trans_pcie;struct iwl_trans *trans;u16 pci_cmd; -int err; +int ret; trans =iwl_trans_alloc (sizeof (struct iwl_trans_pcie ), &pdev->dev, cfg, &trans_ops_pcie,0 );
@@ -2474,8 +2474,8 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,spin_lock_init (&trans_pcie->ref_lock);init_waitqueue_head (&trans_pcie->ucode_write_waitq); - err =pci_enable_device (pdev); -if (err) + ret =pci_enable_device (pdev); +if (ret) goto out_no_pci;if (!cfg->base_params->pcie_l1_allowed) {
@@ -2491,23 +2491,23 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,pci_set_master (pdev); - err =pci_set_dma_mask (pdev,DMA_BIT_MASK (36 )); -if (!err) - err =pci_set_consistent_dma_mask (pdev,DMA_BIT_MASK (36 )); -if (err) { - err =pci_set_dma_mask (pdev,DMA_BIT_MASK (32 )); -if (!err) - err =pci_set_consistent_dma_mask (pdev, + ret =pci_set_dma_mask (pdev,DMA_BIT_MASK (36 )); +if (!ret) + ret =pci_set_consistent_dma_mask (pdev,DMA_BIT_MASK (36 )); +if (ret) { + ret =pci_set_dma_mask (pdev,DMA_BIT_MASK (32 )); +if (!ret) + ret =pci_set_consistent_dma_mask (pdev,DMA_BIT_MASK (32 ));/* both attempts failed: */ -if (err) { +if (ret) {dev_err (&pdev->dev,"No suitable DMA available\n" ); goto out_pci_disable_device; } } - err =pci_request_regions (pdev,DRV_NAME ); -if (err) { + ret =pci_request_regions (pdev,DRV_NAME ); +if (ret) {dev_err (&pdev->dev,"pci_request_regions failed\n" ); goto out_pci_disable_device; }
@@ -2515,7 +2515,7 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, trans_pcie->hw_base =pci_ioremap_bar (pdev,0 );if (!trans_pcie->hw_base) {dev_err (&pdev->dev,"pci_ioremap_bar failed\n" ); - err = -ENODEV ; + ret = -ENODEV ; goto out_pci_release_regions; }
@@ -2527,9 +2527,9 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, trans_pcie->pci_dev = pdev;iwl_disable_interrupts (trans); - err =pci_enable_msi (pdev); -if (err) { -dev_err (&pdev->dev,"pci_enable_msi failed(0X%x)\n" , err); + ret =pci_enable_msi (pdev); +if (ret) { +dev_err (&pdev->dev,"pci_enable_msi failed(0X%x)\n" , ret);/* enable rfkill interrupt: hw bug w/a */ pci_read_config_word (pdev,PCI_COMMAND , &pci_cmd);if (pci_cmd &PCI_COMMAND_INTX_DISABLE ) {
@@ -2547,7 +2547,6 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,*/ if (trans->cfg->device_family ==IWL_DEVICE_FAMILY_8000 ) {unsigned long flags; -int ret; trans->hw_rev = (trans->hw_rev &0xfff0 ) | (CSR_HW_REV_STEP (trans->hw_rev <<2 ) <<2 );
@@ -2591,13 +2590,14 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,/* Initialize the wait queue for commands */ init_waitqueue_head (&trans_pcie->wait_command_queue); -if (iwl_pcie_alloc_ict (trans)) + ret =iwl_pcie_alloc_ict (trans); +if (ret) goto out_pci_disable_msi; - err =request_threaded_irq (pdev->irq, iwl_pcie_isr, + ret =request_threaded_irq (pdev->irq, iwl_pcie_isr, iwl_pcie_irq_handler,IRQF_SHARED ,DRV_NAME , trans); -if (err) { +if (ret) {IWL_ERR (trans,"Error allocating IRQ %d\n" , pdev->irq); goto out_free_ict; }
@@ -2617,5 +2617,5 @@ out_pci_disable_device:pci_disable_device (pdev); out_no_pci:iwl_trans_free (trans); -return ERR_PTR (err); +return ERR_PTR (ret); }
Signature · 1 line
2.1.4
PATCH 5/10 iwlwifi: pcie: prepare the device before accessing it
In reply to Grumbach, EmmanuelFor 8000 series, we need to access the device to know what firmware to load. Before we do so, we need to prepare the device otherwise we might not be able to access the hardware.
--- drivers/net/wireless/iwlwifi/pcie/trans.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/net/wireless/iwlwifi/pcie/trans.c +6 -0
@@ -2551,6 +2551,12 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, trans->hw_rev = (trans->hw_rev &0xfff0 ) | (CSR_HW_REV_STEP (trans->hw_rev <<2 ) <<2 ); + ret =iwl_pcie_prepare_card_hw (trans); +if (ret) { +IWL_WARN (trans,"Exit HW not ready\n" ); + goto out_pci_disable_msi; + } +/* * in-order to recognize C step driver should read chip version * id located at the AUX bus MISC address space.
Signature · 1 line
2.1.4
PATCH 6/10 iwlwifi: mvm: check time-event vif to avoid bad deletion
In reply to Grumbach, EmmanuelFrom: Johannes Berg <[email protected]>
The time event is initialized relatively late in interface (mvmvif) initialization, so it's possible to fail before that happens. As a consequence, the driver will crash if it ever tries to delete this time event in case initialization was unsuccessful.
Avoid this by using the time event's vif pointer to indicate validity. The vif pointer is != NULL whenever the id is != TE_MAX, except for this special error case where the vif pointer will have the correct property (as the whole memory is cleared on allocation) whereas the id is 0, causing a crash in trying to delete the time event from the list.
--- drivers/net/wireless/iwlwifi/mvm/time-event.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/wireless/iwlwifi/mvm/time-event.c +1 -1
@@ -86,7 +86,7 @@ void iwl_mvm_te_clear_data(struct iwl_mvm *mvm, {lockdep_assert_held (&mvm->time_event_lock); -if (te_data->id ==TE_MAX ) +if (!te_data->vif)return ;list_del (&te_data->list);
Signature · 1 line
2.1.4
PATCH 7/10 iwlwifi: edit the 3165 series and 8000 series PCI IDs
In reply to Grumbach, EmmanuelFrom: Oren Givon <[email protected]>
Add new 3165 devices support.
Add one new 8000 series device support.
Remove support for 0x0000, 0xC030 and 0xD030 sub-system IDs in the 8000 series.
--- drivers/net/wireless/iwlwifi/pcie/drv.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/net/wireless/iwlwifi/pcie/drv.c +3 -2
@@ -368,12 +368,14 @@ static const struct pci_device_id iwl_hw_card_ids[] = {/* 3165 Series */ {IWL_PCI_DEVICE(0x3165, 0x4010, iwl3165_2ac_cfg)}, {IWL_PCI_DEVICE(0x3165, 0x4012, iwl3165_2ac_cfg)}, + {IWL_PCI_DEVICE(0x3166, 0x4212, iwl3165_2ac_cfg)}, {IWL_PCI_DEVICE(0x3165, 0x4410, iwl3165_2ac_cfg)}, {IWL_PCI_DEVICE(0x3165, 0x4510, iwl3165_2ac_cfg)}, {IWL_PCI_DEVICE(0x3165, 0x4110, iwl3165_2ac_cfg)}, {IWL_PCI_DEVICE(0x3166, 0x4310, iwl3165_2ac_cfg)}, {IWL_PCI_DEVICE(0x3166, 0x4210, iwl3165_2ac_cfg)}, {IWL_PCI_DEVICE(0x3165, 0x8010, iwl3165_2ac_cfg)}, + {IWL_PCI_DEVICE(0x3165, 0x8110, iwl3165_2ac_cfg)},/* 7265 Series */ {IWL_PCI_DEVICE(0x095A, 0x5010, iwl7265_2ac_cfg)},
@@ -426,9 +428,8 @@ static const struct pci_device_id iwl_hw_card_ids[] = { {IWL_PCI_DEVICE(0x24F4, 0x1130, iwl8260_2ac_cfg)}, {IWL_PCI_DEVICE(0x24F4, 0x1030, iwl8260_2ac_cfg)}, {IWL_PCI_DEVICE(0x24F3, 0xC010, iwl8260_2ac_cfg)}, + {IWL_PCI_DEVICE(0x24F3, 0xC110, iwl8260_2ac_cfg)}, {IWL_PCI_DEVICE(0x24F3, 0xD010, iwl8260_2ac_cfg)}, - {IWL_PCI_DEVICE(0x24F4, 0xC030, iwl8260_2ac_cfg)}, - {IWL_PCI_DEVICE(0x24F4, 0xD030, iwl8260_2ac_cfg)}, {IWL_PCI_DEVICE(0x24F3, 0xC050, iwl8260_2ac_cfg)}, {IWL_PCI_DEVICE(0x24F3, 0xD050, iwl8260_2ac_cfg)}, {IWL_PCI_DEVICE(0x24F3, 0x8010, iwl8260_2ac_cfg)},
Signature · 1 line
2.1.4
Re: [PATCH 07/10] iwlwifi: edit the 3165 series and 8000 series PCI IDs
Quoted 6 lines · Emmanuel Grumbach
From: Oren Givon <[email protected]>
Add new 3165 devices support.
Add one new 8000 series device support.
Remove support for0x0000,0xC030and0xD030sub-system IDs in the 8000 series.
The commit log doesn't mention anything _why_ the three ids are removed. In the future please document that so that people don't need to guess.
Signature · 1 line
Kalle Valo
PATCH 8/10 iwlwifi: mvm: Add preemptive flag to scheulded scan
In reply to Grumbach, EmmanuelFrom: Avraham Stern <[email protected]>
Add preemptive flag to scheduled scan command flags. Without this flag, all scan requests after scheduled scan was started will be delayed until scheduled scan stops. As a result, P2P_FIND will be blocked while scheduled scan is active.
This flag was omitted during refactoring.
--- drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h | 3 ++- drivers/net/wireless/iwlwifi/mvm/scan.c | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-)
drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h +2 -1
@@ -660,7 +660,8 @@ struct iwl_scan_config {* iwl_umac_scan_flags *@IWL_UMAC_SCAN_FLAG_PREEMPTIVE: scan process triggered by this scan request * can be preempted by other scan requests with higher priority. -* The low priority scan is aborted. +* The low priority scan will be resumed when the higher proirity scan is +* completed. *@IWL_UMAC_SCAN_FLAG_START_NOTIF: notification will be sent to the driver * when scan starts. */
drivers/net/wireless/iwlwifi/mvm/scan.c +3 -0
@@ -1109,6 +1109,9 @@ static int iwl_mvm_scan_umac(struct iwl_mvm *mvm, struct ieee80211_vif *vif, cmd->uid =cpu_to_le32 (uid); cmd->general_flags =cpu_to_le32 (iwl_mvm_scan_umac_flags (mvm, params)); +if (type ==IWL_MVM_SCAN_SCHED ) + cmd->flags =cpu_to_le32 (IWL_UMAC_SCAN_FLAG_PREEMPTIVE ); +if (iwl_mvm_scan_use_ebs (mvm, vif, n_iterations)) cmd->channel_flags =IWL_SCAN_CHANNEL_FLAG_EBS | IWL_SCAN_CHANNEL_FLAG_EBS_ACCURATE |
Signature · 1 line
2.1.4
PATCH 9/10 Revert "iwlwifi: pcie: New RBD allocation model"
In reply to Grumbach, EmmanuelThis reverts commit 5f17570354f91275b0a37a4da33d29a2ab57d32e.
This patch introduced a high latency in buffer allocation under extreme load. This latency caused a firmwre crash. The same scenario works fine with this patch reverted.
--- drivers/net/wireless/iwlwifi/iwl-fh.h | 6 + drivers/net/wireless/iwlwifi/pcie/internal.h | 51 +--- drivers/net/wireless/iwlwifi/pcie/rx.c | 414 ++++++--------------------- 3 files changed, 97 insertions(+), 374 deletions(-)
drivers/net/wireless/iwlwifi/iwl-fh.h +6 -0
@@ -438,6 +438,12 @@ static inline unsigned int FH_MEM_CBBC_QUEUE(unsigned int chnl)#define RX_QUEUE_MASK 255#define RX_QUEUE_SIZE_LOG 8 +/* +* RX related structures and functions +*/ +#define RX_FREE_BUFFERS 64 +#define RX_LOW_WATERMARK 8 +/** * struct iwl_rb_status - reserve buffer status * host memory mapped FH registers
drivers/net/wireless/iwlwifi/pcie/internal.h +8 -43
98 lines not on this page · raw message
drivers/net/wireless/iwlwifi/pcie/rx.c +83 -331
590 lines not on this page · raw message
Signature · 1 line
2.1.4
PATCH 10/10 iwlwifi: nvm: remove mac address byte swapping in 8000 family
In reply to Grumbach, EmmanuelFrom: Liad Kaufman <[email protected]>
This fixes the byte order copying in the MAO (Mac Override Section) section from the PNVM, as the byte swapping is not required anymore in the 8000 family. Due to the byte swapping, the driver was reporting an incorrect MAC adddress.
--- drivers/net/wireless/iwlwifi/iwl-nvm-parse.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-)
drivers/net/wireless/iwlwifi/iwl-nvm-parse.c +5 -7
@@ -540,13 +540,11 @@ static void iwl_set_hw_address_family_8000(struct device *dev, hw_addr = (const u8 *)(mac_override +MAC_ADDRESS_OVERRIDE_FAMILY_8000 ); -/* The byte order is little endian 16 bit, meaning 214365 */ - data->hw_addr[0 ] = hw_addr[1 ]; - data->hw_addr[1 ] = hw_addr[0 ]; - data->hw_addr[2 ] = hw_addr[3 ]; - data->hw_addr[3 ] = hw_addr[2 ]; - data->hw_addr[4 ] = hw_addr[5 ]; - data->hw_addr[5 ] = hw_addr[4 ]; +/* +* Store the MAC address from MAO section. +* No byte swapping is required in MAO section +*/ +memcpy (data->hw_addr, hw_addr,ETH_ALEN );/* * Force the use of the OTP MAC address in case of reserved MAC
Signature · 1 line
2.1.4
Quoted 9 lines · Emmanuel
This is the first pull request of fixes for 4.2. A few of the patches here are CCed to stable. Besides fix for (hard to hit) crashes there are a bunch of fixes for 8000 devices which are now undergoing the final round of tests.
Let me know if you have issues!emmanuel
Quoted 8 lines
The following changes since commit
e0456717e483bb8a9431b80a5bdc99a928b9b003:Merge
git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next(2015-06-24 16:49:49 -0700)are available in the git repository at:
https://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes.git tags/iwlwifi-for-kalle-2015-06-12
Thanks, pulled.
Signature · 1 line
Kalle Valo