diff options
author | David S. Miller <davem@davemloft.net> | 2014-03-25 20:29:20 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-03-25 20:29:20 -0400 |
commit | 04f58c88542b6b351efb4eea01134eb672e22e6e (patch) | |
tree | 47bb617212f8c8951f35730e324bdc43487a01ca /drivers/net | |
parent | 0fc31966035d7a540c011b6c967ce8eae1db121b (diff) | |
parent | 632b06aa2842b12c6d6a510ec080fb6ebdb38ea5 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
Documentation/devicetree/bindings/net/micrel-ks8851.txt
net/core/netpoll.c
The net/core/netpoll.c conflict is a bug fix in 'net' happening
to code which is completely removed in 'net-next'.
In micrel-ks8851.txt we simply have overlapping changes.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/ethernet/atheros/alx/main.c | 14 | ||||
-rw-r--r-- | drivers/net/ethernet/atheros/atl1e/atl1e_main.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/cnic.c | 111 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/cnic.h | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/cnic_defs.h | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/cnic_if.h | 16 | ||||
-rw-r--r-- | drivers/net/ethernet/micrel/ks8851.c | 30 | ||||
-rw-r--r-- | drivers/net/ethernet/ti/cpsw.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/ti/davinci_cpdma.c | 4 | ||||
-rw-r--r-- | drivers/net/ethernet/ti/davinci_emac.c | 53 | ||||
-rw-r--r-- | drivers/net/ethernet/via/via-rhine.c | 8 | ||||
-rw-r--r-- | drivers/net/phy/phy_device.c | 3 | ||||
-rw-r--r-- | drivers/net/usb/cdc_ncm.c | 48 | ||||
-rw-r--r-- | drivers/net/vxlan.c | 130 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/xmit.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c | 4 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2800lib.c | 6 |
18 files changed, 304 insertions, 142 deletions
diff --git a/drivers/net/ethernet/atheros/alx/main.c b/drivers/net/ethernet/atheros/alx/main.c index 238356108e65..96f3edb6c738 100644 --- a/drivers/net/ethernet/atheros/alx/main.c +++ b/drivers/net/ethernet/atheros/alx/main.c | |||
@@ -1248,19 +1248,13 @@ static int alx_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1248 | * shared register for the high 32 bits, so only a single, aligned, | 1248 | * shared register for the high 32 bits, so only a single, aligned, |
1249 | * 4 GB physical address range can be used for descriptors. | 1249 | * 4 GB physical address range can be used for descriptors. |
1250 | */ | 1250 | */ |
1251 | if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(64)) && | 1251 | if (!dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64))) { |
1252 | !dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64))) { | ||
1253 | dev_dbg(&pdev->dev, "DMA to 64-BIT addresses\n"); | 1252 | dev_dbg(&pdev->dev, "DMA to 64-BIT addresses\n"); |
1254 | } else { | 1253 | } else { |
1255 | err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); | 1254 | err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); |
1256 | if (err) { | 1255 | if (err) { |
1257 | err = dma_set_coherent_mask(&pdev->dev, | 1256 | dev_err(&pdev->dev, "No usable DMA config, aborting\n"); |
1258 | DMA_BIT_MASK(32)); | 1257 | goto out_pci_disable; |
1259 | if (err) { | ||
1260 | dev_err(&pdev->dev, | ||
1261 | "No usable DMA config, aborting\n"); | ||
1262 | goto out_pci_disable; | ||
1263 | } | ||
1264 | } | 1258 | } |
1265 | } | 1259 | } |
1266 | 1260 | ||
diff --git a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c index d5c2d3e912e5..422aab27ea1b 100644 --- a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c +++ b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c | |||
@@ -2436,7 +2436,7 @@ err_reset: | |||
2436 | err_register: | 2436 | err_register: |
2437 | err_sw_init: | 2437 | err_sw_init: |
2438 | err_eeprom: | 2438 | err_eeprom: |
2439 | iounmap(adapter->hw.hw_addr); | 2439 | pci_iounmap(pdev, adapter->hw.hw_addr); |
2440 | err_init_netdev: | 2440 | err_init_netdev: |
2441 | err_ioremap: | 2441 | err_ioremap: |
2442 | free_netdev(netdev); | 2442 | free_netdev(netdev); |
@@ -2474,7 +2474,7 @@ static void atl1e_remove(struct pci_dev *pdev) | |||
2474 | unregister_netdev(netdev); | 2474 | unregister_netdev(netdev); |
2475 | atl1e_free_ring_resources(adapter); | 2475 | atl1e_free_ring_resources(adapter); |
2476 | atl1e_force_ps(&adapter->hw); | 2476 | atl1e_force_ps(&adapter->hw); |
2477 | iounmap(adapter->hw.hw_addr); | 2477 | pci_iounmap(pdev, adapter->hw.hw_addr); |
2478 | pci_release_regions(pdev); | 2478 | pci_release_regions(pdev); |
2479 | free_netdev(netdev); | 2479 | free_netdev(netdev); |
2480 | pci_disable_device(pdev); | 2480 | pci_disable_device(pdev); |
diff --git a/drivers/net/ethernet/broadcom/cnic.c b/drivers/net/ethernet/broadcom/cnic.c index fcf9105a5476..09f3fefcbf9c 100644 --- a/drivers/net/ethernet/broadcom/cnic.c +++ b/drivers/net/ethernet/broadcom/cnic.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* cnic.c: Broadcom CNIC core network driver. | 1 | /* cnic.c: Broadcom CNIC core network driver. |
2 | * | 2 | * |
3 | * Copyright (c) 2006-2013 Broadcom Corporation | 3 | * Copyright (c) 2006-2014 Broadcom Corporation |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify | 5 | * This program is free software; you can redistribute it and/or modify |
6 | * it under the terms of the GNU General Public License as published by | 6 | * it under the terms of the GNU General Public License as published by |
@@ -342,7 +342,7 @@ static int cnic_send_nlmsg(struct cnic_local *cp, u32 type, | |||
342 | while (retry < 3) { | 342 | while (retry < 3) { |
343 | rc = 0; | 343 | rc = 0; |
344 | rcu_read_lock(); | 344 | rcu_read_lock(); |
345 | ulp_ops = rcu_dereference(cnic_ulp_tbl[CNIC_ULP_ISCSI]); | 345 | ulp_ops = rcu_dereference(cp->ulp_ops[CNIC_ULP_ISCSI]); |
346 | if (ulp_ops) | 346 | if (ulp_ops) |
347 | rc = ulp_ops->iscsi_nl_send_msg( | 347 | rc = ulp_ops->iscsi_nl_send_msg( |
348 | cp->ulp_handle[CNIC_ULP_ISCSI], | 348 | cp->ulp_handle[CNIC_ULP_ISCSI], |
@@ -726,7 +726,7 @@ static void cnic_free_dma(struct cnic_dev *dev, struct cnic_dma *dma) | |||
726 | 726 | ||
727 | for (i = 0; i < dma->num_pages; i++) { | 727 | for (i = 0; i < dma->num_pages; i++) { |
728 | if (dma->pg_arr[i]) { | 728 | if (dma->pg_arr[i]) { |
729 | dma_free_coherent(&dev->pcidev->dev, BNX2_PAGE_SIZE, | 729 | dma_free_coherent(&dev->pcidev->dev, CNIC_PAGE_SIZE, |
730 | dma->pg_arr[i], dma->pg_map_arr[i]); | 730 | dma->pg_arr[i], dma->pg_map_arr[i]); |
731 | dma->pg_arr[i] = NULL; | 731 | dma->pg_arr[i] = NULL; |
732 | } | 732 | } |
@@ -785,7 +785,7 @@ static int cnic_alloc_dma(struct cnic_dev *dev, struct cnic_dma *dma, | |||
785 | 785 | ||
786 | for (i = 0; i < pages; i++) { | 786 | for (i = 0; i < pages; i++) { |
787 | dma->pg_arr[i] = dma_alloc_coherent(&dev->pcidev->dev, | 787 | dma->pg_arr[i] = dma_alloc_coherent(&dev->pcidev->dev, |
788 | BNX2_PAGE_SIZE, | 788 | CNIC_PAGE_SIZE, |
789 | &dma->pg_map_arr[i], | 789 | &dma->pg_map_arr[i], |
790 | GFP_ATOMIC); | 790 | GFP_ATOMIC); |
791 | if (dma->pg_arr[i] == NULL) | 791 | if (dma->pg_arr[i] == NULL) |
@@ -794,8 +794,8 @@ static int cnic_alloc_dma(struct cnic_dev *dev, struct cnic_dma *dma, | |||
794 | if (!use_pg_tbl) | 794 | if (!use_pg_tbl) |
795 | return 0; | 795 | return 0; |
796 | 796 | ||
797 | dma->pgtbl_size = ((pages * 8) + BNX2_PAGE_SIZE - 1) & | 797 | dma->pgtbl_size = ((pages * 8) + CNIC_PAGE_SIZE - 1) & |
798 | ~(BNX2_PAGE_SIZE - 1); | 798 | ~(CNIC_PAGE_SIZE - 1); |
799 | dma->pgtbl = dma_alloc_coherent(&dev->pcidev->dev, dma->pgtbl_size, | 799 | dma->pgtbl = dma_alloc_coherent(&dev->pcidev->dev, dma->pgtbl_size, |
800 | &dma->pgtbl_map, GFP_ATOMIC); | 800 | &dma->pgtbl_map, GFP_ATOMIC); |
801 | if (dma->pgtbl == NULL) | 801 | if (dma->pgtbl == NULL) |
@@ -900,8 +900,8 @@ static int cnic_alloc_context(struct cnic_dev *dev) | |||
900 | if (BNX2_CHIP(cp) == BNX2_CHIP_5709) { | 900 | if (BNX2_CHIP(cp) == BNX2_CHIP_5709) { |
901 | int i, k, arr_size; | 901 | int i, k, arr_size; |
902 | 902 | ||
903 | cp->ctx_blk_size = BNX2_PAGE_SIZE; | 903 | cp->ctx_blk_size = CNIC_PAGE_SIZE; |
904 | cp->cids_per_blk = BNX2_PAGE_SIZE / 128; | 904 | cp->cids_per_blk = CNIC_PAGE_SIZE / 128; |
905 | arr_size = BNX2_MAX_CID / cp->cids_per_blk * | 905 | arr_size = BNX2_MAX_CID / cp->cids_per_blk * |
906 | sizeof(struct cnic_ctx); | 906 | sizeof(struct cnic_ctx); |
907 | cp->ctx_arr = kzalloc(arr_size, GFP_KERNEL); | 907 | cp->ctx_arr = kzalloc(arr_size, GFP_KERNEL); |
@@ -933,7 +933,7 @@ static int cnic_alloc_context(struct cnic_dev *dev) | |||
933 | for (i = 0; i < cp->ctx_blks; i++) { | 933 | for (i = 0; i < cp->ctx_blks; i++) { |
934 | cp->ctx_arr[i].ctx = | 934 | cp->ctx_arr[i].ctx = |
935 | dma_alloc_coherent(&dev->pcidev->dev, | 935 | dma_alloc_coherent(&dev->pcidev->dev, |
936 | BNX2_PAGE_SIZE, | 936 | CNIC_PAGE_SIZE, |
937 | &cp->ctx_arr[i].mapping, | 937 | &cp->ctx_arr[i].mapping, |
938 | GFP_KERNEL); | 938 | GFP_KERNEL); |
939 | if (cp->ctx_arr[i].ctx == NULL) | 939 | if (cp->ctx_arr[i].ctx == NULL) |
@@ -1013,7 +1013,7 @@ static int __cnic_alloc_uio_rings(struct cnic_uio_dev *udev, int pages) | |||
1013 | if (udev->l2_ring) | 1013 | if (udev->l2_ring) |
1014 | return 0; | 1014 | return 0; |
1015 | 1015 | ||
1016 | udev->l2_ring_size = pages * BNX2_PAGE_SIZE; | 1016 | udev->l2_ring_size = pages * CNIC_PAGE_SIZE; |
1017 | udev->l2_ring = dma_alloc_coherent(&udev->pdev->dev, udev->l2_ring_size, | 1017 | udev->l2_ring = dma_alloc_coherent(&udev->pdev->dev, udev->l2_ring_size, |
1018 | &udev->l2_ring_map, | 1018 | &udev->l2_ring_map, |
1019 | GFP_KERNEL | __GFP_COMP); | 1019 | GFP_KERNEL | __GFP_COMP); |
@@ -1021,7 +1021,7 @@ static int __cnic_alloc_uio_rings(struct cnic_uio_dev *udev, int pages) | |||
1021 | return -ENOMEM; | 1021 | return -ENOMEM; |
1022 | 1022 | ||
1023 | udev->l2_buf_size = (cp->l2_rx_ring_size + 1) * cp->l2_single_buf_size; | 1023 | udev->l2_buf_size = (cp->l2_rx_ring_size + 1) * cp->l2_single_buf_size; |
1024 | udev->l2_buf_size = PAGE_ALIGN(udev->l2_buf_size); | 1024 | udev->l2_buf_size = CNIC_PAGE_ALIGN(udev->l2_buf_size); |
1025 | udev->l2_buf = dma_alloc_coherent(&udev->pdev->dev, udev->l2_buf_size, | 1025 | udev->l2_buf = dma_alloc_coherent(&udev->pdev->dev, udev->l2_buf_size, |
1026 | &udev->l2_buf_map, | 1026 | &udev->l2_buf_map, |
1027 | GFP_KERNEL | __GFP_COMP); | 1027 | GFP_KERNEL | __GFP_COMP); |
@@ -1102,7 +1102,7 @@ static int cnic_init_uio(struct cnic_dev *dev) | |||
1102 | uinfo->mem[0].size = MB_GET_CID_ADDR(TX_TSS_CID + | 1102 | uinfo->mem[0].size = MB_GET_CID_ADDR(TX_TSS_CID + |
1103 | TX_MAX_TSS_RINGS + 1); | 1103 | TX_MAX_TSS_RINGS + 1); |
1104 | uinfo->mem[1].addr = (unsigned long) cp->status_blk.gen & | 1104 | uinfo->mem[1].addr = (unsigned long) cp->status_blk.gen & |
1105 | PAGE_MASK; | 1105 | CNIC_PAGE_MASK; |
1106 | if (cp->ethdev->drv_state & CNIC_DRV_STATE_USING_MSIX) | 1106 | if (cp->ethdev->drv_state & CNIC_DRV_STATE_USING_MSIX) |
1107 | uinfo->mem[1].size = BNX2_SBLK_MSIX_ALIGN_SIZE * 9; | 1107 | uinfo->mem[1].size = BNX2_SBLK_MSIX_ALIGN_SIZE * 9; |
1108 | else | 1108 | else |
@@ -1113,7 +1113,7 @@ static int cnic_init_uio(struct cnic_dev *dev) | |||
1113 | uinfo->mem[0].size = pci_resource_len(dev->pcidev, 0); | 1113 | uinfo->mem[0].size = pci_resource_len(dev->pcidev, 0); |
1114 | 1114 | ||
1115 | uinfo->mem[1].addr = (unsigned long) cp->bnx2x_def_status_blk & | 1115 | uinfo->mem[1].addr = (unsigned long) cp->bnx2x_def_status_blk & |
1116 | PAGE_MASK; | 1116 | CNIC_PAGE_MASK; |
1117 | uinfo->mem[1].size = sizeof(*cp->bnx2x_def_status_blk); | 1117 | uinfo->mem[1].size = sizeof(*cp->bnx2x_def_status_blk); |
1118 | 1118 | ||
1119 | uinfo->name = "bnx2x_cnic"; | 1119 | uinfo->name = "bnx2x_cnic"; |
@@ -1267,14 +1267,14 @@ static int cnic_alloc_bnx2x_resc(struct cnic_dev *dev) | |||
1267 | for (i = MAX_ISCSI_TBL_SZ; i < cp->max_cid_space; i++) | 1267 | for (i = MAX_ISCSI_TBL_SZ; i < cp->max_cid_space; i++) |
1268 | cp->ctx_tbl[i].ulp_proto_id = CNIC_ULP_FCOE; | 1268 | cp->ctx_tbl[i].ulp_proto_id = CNIC_ULP_FCOE; |
1269 | 1269 | ||
1270 | pages = PAGE_ALIGN(cp->max_cid_space * CNIC_KWQ16_DATA_SIZE) / | 1270 | pages = CNIC_PAGE_ALIGN(cp->max_cid_space * CNIC_KWQ16_DATA_SIZE) / |
1271 | PAGE_SIZE; | 1271 | CNIC_PAGE_SIZE; |
1272 | 1272 | ||
1273 | ret = cnic_alloc_dma(dev, kwq_16_dma, pages, 0); | 1273 | ret = cnic_alloc_dma(dev, kwq_16_dma, pages, 0); |
1274 | if (ret) | 1274 | if (ret) |
1275 | return -ENOMEM; | 1275 | return -ENOMEM; |
1276 | 1276 | ||
1277 | n = PAGE_SIZE / CNIC_KWQ16_DATA_SIZE; | 1277 | n = CNIC_PAGE_SIZE / CNIC_KWQ16_DATA_SIZE; |
1278 | for (i = 0, j = 0; i < cp->max_cid_space; i++) { | 1278 | for (i = 0, j = 0; i < cp->max_cid_space; i++) { |
1279 | long off = CNIC_KWQ16_DATA_SIZE * (i % n); | 1279 | long off = CNIC_KWQ16_DATA_SIZE * (i % n); |
1280 | 1280 | ||
@@ -1296,7 +1296,7 @@ static int cnic_alloc_bnx2x_resc(struct cnic_dev *dev) | |||
1296 | goto error; | 1296 | goto error; |
1297 | } | 1297 | } |
1298 | 1298 | ||
1299 | pages = PAGE_ALIGN(BNX2X_ISCSI_GLB_BUF_SIZE) / PAGE_SIZE; | 1299 | pages = CNIC_PAGE_ALIGN(BNX2X_ISCSI_GLB_BUF_SIZE) / CNIC_PAGE_SIZE; |
1300 | ret = cnic_alloc_dma(dev, &cp->gbl_buf_info, pages, 0); | 1300 | ret = cnic_alloc_dma(dev, &cp->gbl_buf_info, pages, 0); |
1301 | if (ret) | 1301 | if (ret) |
1302 | goto error; | 1302 | goto error; |
@@ -1466,8 +1466,8 @@ static int cnic_bnx2x_iscsi_init1(struct cnic_dev *dev, struct kwqe *kwqe) | |||
1466 | cp->r2tq_size = cp->num_iscsi_tasks * BNX2X_ISCSI_MAX_PENDING_R2TS * | 1466 | cp->r2tq_size = cp->num_iscsi_tasks * BNX2X_ISCSI_MAX_PENDING_R2TS * |
1467 | BNX2X_ISCSI_R2TQE_SIZE; | 1467 | BNX2X_ISCSI_R2TQE_SIZE; |
1468 | cp->hq_size = cp->num_ccells * BNX2X_ISCSI_HQ_BD_SIZE; | 1468 | cp->hq_size = cp->num_ccells * BNX2X_ISCSI_HQ_BD_SIZE; |
1469 | pages = PAGE_ALIGN(cp->hq_size) / PAGE_SIZE; | 1469 | pages = CNIC_PAGE_ALIGN(cp->hq_size) / CNIC_PAGE_SIZE; |
1470 | hq_bds = pages * (PAGE_SIZE / BNX2X_ISCSI_HQ_BD_SIZE); | 1470 | hq_bds = pages * (CNIC_PAGE_SIZE / BNX2X_ISCSI_HQ_BD_SIZE); |
1471 | cp->num_cqs = req1->num_cqs; | 1471 | cp->num_cqs = req1->num_cqs; |
1472 | 1472 | ||
1473 | if (!dev->max_iscsi_conn) | 1473 | if (!dev->max_iscsi_conn) |
@@ -1477,9 +1477,9 @@ static int cnic_bnx2x_iscsi_init1(struct cnic_dev *dev, struct kwqe *kwqe) | |||
1477 | CNIC_WR16(dev, BAR_TSTRORM_INTMEM + TSTORM_ISCSI_RQ_SIZE_OFFSET(pfid), | 1477 | CNIC_WR16(dev, BAR_TSTRORM_INTMEM + TSTORM_ISCSI_RQ_SIZE_OFFSET(pfid), |
1478 | req1->rq_num_wqes); | 1478 | req1->rq_num_wqes); |
1479 | CNIC_WR16(dev, BAR_TSTRORM_INTMEM + TSTORM_ISCSI_PAGE_SIZE_OFFSET(pfid), | 1479 | CNIC_WR16(dev, BAR_TSTRORM_INTMEM + TSTORM_ISCSI_PAGE_SIZE_OFFSET(pfid), |
1480 | PAGE_SIZE); | 1480 | CNIC_PAGE_SIZE); |
1481 | CNIC_WR8(dev, BAR_TSTRORM_INTMEM + | 1481 | CNIC_WR8(dev, BAR_TSTRORM_INTMEM + |
1482 | TSTORM_ISCSI_PAGE_SIZE_LOG_OFFSET(pfid), PAGE_SHIFT); | 1482 | TSTORM_ISCSI_PAGE_SIZE_LOG_OFFSET(pfid), CNIC_PAGE_BITS); |
1483 | CNIC_WR16(dev, BAR_TSTRORM_INTMEM + | 1483 | CNIC_WR16(dev, BAR_TSTRORM_INTMEM + |
1484 | TSTORM_ISCSI_NUM_OF_TASKS_OFFSET(pfid), | 1484 | TSTORM_ISCSI_NUM_OF_TASKS_OFFSET(pfid), |
1485 | req1->num_tasks_per_conn); | 1485 | req1->num_tasks_per_conn); |
@@ -1489,9 +1489,9 @@ static int cnic_bnx2x_iscsi_init1(struct cnic_dev *dev, struct kwqe *kwqe) | |||
1489 | USTORM_ISCSI_RQ_BUFFER_SIZE_OFFSET(pfid), | 1489 | USTORM_ISCSI_RQ_BUFFER_SIZE_OFFSET(pfid), |
1490 | req1->rq_buffer_size); | 1490 | req1->rq_buffer_size); |
1491 | CNIC_WR16(dev, BAR_USTRORM_INTMEM + USTORM_ISCSI_PAGE_SIZE_OFFSET(pfid), | 1491 | CNIC_WR16(dev, BAR_USTRORM_INTMEM + USTORM_ISCSI_PAGE_SIZE_OFFSET(pfid), |
1492 | PAGE_SIZE); | 1492 | CNIC_PAGE_SIZE); |
1493 | CNIC_WR8(dev, BAR_USTRORM_INTMEM + | 1493 | CNIC_WR8(dev, BAR_USTRORM_INTMEM + |
1494 | USTORM_ISCSI_PAGE_SIZE_LOG_OFFSET(pfid), PAGE_SHIFT); | 1494 | USTORM_ISCSI_PAGE_SIZE_LOG_OFFSET(pfid), CNIC_PAGE_BITS); |
1495 | CNIC_WR16(dev, BAR_USTRORM_INTMEM + | 1495 | CNIC_WR16(dev, BAR_USTRORM_INTMEM + |
1496 | USTORM_ISCSI_NUM_OF_TASKS_OFFSET(pfid), | 1496 | USTORM_ISCSI_NUM_OF_TASKS_OFFSET(pfid), |
1497 | req1->num_tasks_per_conn); | 1497 | req1->num_tasks_per_conn); |
@@ -1504,9 +1504,9 @@ static int cnic_bnx2x_iscsi_init1(struct cnic_dev *dev, struct kwqe *kwqe) | |||
1504 | 1504 | ||
1505 | /* init Xstorm RAM */ | 1505 | /* init Xstorm RAM */ |
1506 | CNIC_WR16(dev, BAR_XSTRORM_INTMEM + XSTORM_ISCSI_PAGE_SIZE_OFFSET(pfid), | 1506 | CNIC_WR16(dev, BAR_XSTRORM_INTMEM + XSTORM_ISCSI_PAGE_SIZE_OFFSET(pfid), |
1507 | PAGE_SIZE); | 1507 | CNIC_PAGE_SIZE); |
1508 | CNIC_WR8(dev, BAR_XSTRORM_INTMEM + | 1508 | CNIC_WR8(dev, BAR_XSTRORM_INTMEM + |
1509 | XSTORM_ISCSI_PAGE_SIZE_LOG_OFFSET(pfid), PAGE_SHIFT); | 1509 | XSTORM_ISCSI_PAGE_SIZE_LOG_OFFSET(pfid), CNIC_PAGE_BITS); |
1510 | CNIC_WR16(dev, BAR_XSTRORM_INTMEM + | 1510 | CNIC_WR16(dev, BAR_XSTRORM_INTMEM + |
1511 | XSTORM_ISCSI_NUM_OF_TASKS_OFFSET(pfid), | 1511 | XSTORM_ISCSI_NUM_OF_TASKS_OFFSET(pfid), |
1512 | req1->num_tasks_per_conn); | 1512 | req1->num_tasks_per_conn); |
@@ -1519,9 +1519,9 @@ static int cnic_bnx2x_iscsi_init1(struct cnic_dev *dev, struct kwqe *kwqe) | |||
1519 | 1519 | ||
1520 | /* init Cstorm RAM */ | 1520 | /* init Cstorm RAM */ |
1521 | CNIC_WR16(dev, BAR_CSTRORM_INTMEM + CSTORM_ISCSI_PAGE_SIZE_OFFSET(pfid), | 1521 | CNIC_WR16(dev, BAR_CSTRORM_INTMEM + CSTORM_ISCSI_PAGE_SIZE_OFFSET(pfid), |
1522 | PAGE_SIZE); | 1522 | CNIC_PAGE_SIZE); |
1523 | CNIC_WR8(dev, BAR_CSTRORM_INTMEM + | 1523 | CNIC_WR8(dev, BAR_CSTRORM_INTMEM + |
1524 | CSTORM_ISCSI_PAGE_SIZE_LOG_OFFSET(pfid), PAGE_SHIFT); | 1524 | CSTORM_ISCSI_PAGE_SIZE_LOG_OFFSET(pfid), CNIC_PAGE_BITS); |
1525 | CNIC_WR16(dev, BAR_CSTRORM_INTMEM + | 1525 | CNIC_WR16(dev, BAR_CSTRORM_INTMEM + |
1526 | CSTORM_ISCSI_NUM_OF_TASKS_OFFSET(pfid), | 1526 | CSTORM_ISCSI_NUM_OF_TASKS_OFFSET(pfid), |
1527 | req1->num_tasks_per_conn); | 1527 | req1->num_tasks_per_conn); |
@@ -1623,18 +1623,18 @@ static int cnic_alloc_bnx2x_conn_resc(struct cnic_dev *dev, u32 l5_cid) | |||
1623 | } | 1623 | } |
1624 | 1624 | ||
1625 | ctx->cid = cid; | 1625 | ctx->cid = cid; |
1626 | pages = PAGE_ALIGN(cp->task_array_size) / PAGE_SIZE; | 1626 | pages = CNIC_PAGE_ALIGN(cp->task_array_size) / CNIC_PAGE_SIZE; |
1627 | 1627 | ||
1628 | ret = cnic_alloc_dma(dev, &iscsi->task_array_info, pages, 1); | 1628 | ret = cnic_alloc_dma(dev, &iscsi->task_array_info, pages, 1); |
1629 | if (ret) | 1629 | if (ret) |
1630 | goto error; | 1630 | goto error; |
1631 | 1631 | ||
1632 | pages = PAGE_ALIGN(cp->r2tq_size) / PAGE_SIZE; | 1632 | pages = CNIC_PAGE_ALIGN(cp->r2tq_size) / CNIC_PAGE_SIZE; |
1633 | ret = cnic_alloc_dma(dev, &iscsi->r2tq_info, pages, 1); | 1633 | ret = cnic_alloc_dma(dev, &iscsi->r2tq_info, pages, 1); |
1634 | if (ret) | 1634 | if (ret) |
1635 | goto error; | 1635 | goto error; |
1636 | 1636 | ||
1637 | pages = PAGE_ALIGN(cp->hq_size) / PAGE_SIZE; | 1637 | pages = CNIC_PAGE_ALIGN(cp->hq_size) / CNIC_PAGE_SIZE; |
1638 | ret = cnic_alloc_dma(dev, &iscsi->hq_info, pages, 1); | 1638 | ret = cnic_alloc_dma(dev, &iscsi->hq_info, pages, 1); |
1639 | if (ret) | 1639 | if (ret) |
1640 | goto error; | 1640 | goto error; |
@@ -1760,7 +1760,7 @@ static int cnic_setup_bnx2x_ctx(struct cnic_dev *dev, struct kwqe *wqes[], | |||
1760 | ictx->tstorm_st_context.iscsi.hdr_bytes_2_fetch = ISCSI_HEADER_SIZE; | 1760 | ictx->tstorm_st_context.iscsi.hdr_bytes_2_fetch = ISCSI_HEADER_SIZE; |
1761 | /* TSTORM requires the base address of RQ DB & not PTE */ | 1761 | /* TSTORM requires the base address of RQ DB & not PTE */ |
1762 | ictx->tstorm_st_context.iscsi.rq_db_phy_addr.lo = | 1762 | ictx->tstorm_st_context.iscsi.rq_db_phy_addr.lo = |
1763 | req2->rq_page_table_addr_lo & PAGE_MASK; | 1763 | req2->rq_page_table_addr_lo & CNIC_PAGE_MASK; |
1764 | ictx->tstorm_st_context.iscsi.rq_db_phy_addr.hi = | 1764 | ictx->tstorm_st_context.iscsi.rq_db_phy_addr.hi = |
1765 | req2->rq_page_table_addr_hi; | 1765 | req2->rq_page_table_addr_hi; |
1766 | ictx->tstorm_st_context.iscsi.iscsi_conn_id = req1->iscsi_conn_id; | 1766 | ictx->tstorm_st_context.iscsi.iscsi_conn_id = req1->iscsi_conn_id; |
@@ -1842,7 +1842,7 @@ static int cnic_setup_bnx2x_ctx(struct cnic_dev *dev, struct kwqe *wqes[], | |||
1842 | /* CSTORM and USTORM initialization is different, CSTORM requires | 1842 | /* CSTORM and USTORM initialization is different, CSTORM requires |
1843 | * CQ DB base & not PTE addr */ | 1843 | * CQ DB base & not PTE addr */ |
1844 | ictx->cstorm_st_context.cq_db_base.lo = | 1844 | ictx->cstorm_st_context.cq_db_base.lo = |
1845 | req1->cq_page_table_addr_lo & PAGE_MASK; | 1845 | req1->cq_page_table_addr_lo & CNIC_PAGE_MASK; |
1846 | ictx->cstorm_st_context.cq_db_base.hi = req1->cq_page_table_addr_hi; | 1846 | ictx->cstorm_st_context.cq_db_base.hi = req1->cq_page_table_addr_hi; |
1847 | ictx->cstorm_st_context.iscsi_conn_id = req1->iscsi_conn_id; | 1847 | ictx->cstorm_st_context.iscsi_conn_id = req1->iscsi_conn_id; |
1848 | ictx->cstorm_st_context.cq_proc_en_bit_map = (1 << cp->num_cqs) - 1; | 1848 | ictx->cstorm_st_context.cq_proc_en_bit_map = (1 << cp->num_cqs) - 1; |
@@ -2911,7 +2911,7 @@ static int cnic_l2_completion(struct cnic_local *cp) | |||
2911 | u16 hw_cons, sw_cons; | 2911 | u16 hw_cons, sw_cons; |
2912 | struct cnic_uio_dev *udev = cp->udev; | 2912 | struct cnic_uio_dev *udev = cp->udev; |
2913 | union eth_rx_cqe *cqe, *cqe_ring = (union eth_rx_cqe *) | 2913 | union eth_rx_cqe *cqe, *cqe_ring = (union eth_rx_cqe *) |
2914 | (udev->l2_ring + (2 * BNX2_PAGE_SIZE)); | 2914 | (udev->l2_ring + (2 * CNIC_PAGE_SIZE)); |
2915 | u32 cmd; | 2915 | u32 cmd; |
2916 | int comp = 0; | 2916 | int comp = 0; |
2917 | 2917 | ||
@@ -3244,7 +3244,8 @@ static int cnic_copy_ulp_stats(struct cnic_dev *dev, int ulp_type) | |||
3244 | int rc; | 3244 | int rc; |
3245 | 3245 | ||
3246 | mutex_lock(&cnic_lock); | 3246 | mutex_lock(&cnic_lock); |
3247 | ulp_ops = cnic_ulp_tbl_prot(ulp_type); | 3247 | ulp_ops = rcu_dereference_protected(cp->ulp_ops[ulp_type], |
3248 | lockdep_is_held(&cnic_lock)); | ||
3248 | if (ulp_ops && ulp_ops->cnic_get_stats) | 3249 | if (ulp_ops && ulp_ops->cnic_get_stats) |
3249 | rc = ulp_ops->cnic_get_stats(cp->ulp_handle[ulp_type]); | 3250 | rc = ulp_ops->cnic_get_stats(cp->ulp_handle[ulp_type]); |
3250 | else | 3251 | else |
@@ -4384,7 +4385,7 @@ static int cnic_setup_5709_context(struct cnic_dev *dev, int valid) | |||
4384 | u32 idx = cp->ctx_arr[i].cid / cp->cids_per_blk; | 4385 | u32 idx = cp->ctx_arr[i].cid / cp->cids_per_blk; |
4385 | u32 val; | 4386 | u32 val; |
4386 | 4387 | ||
4387 | memset(cp->ctx_arr[i].ctx, 0, BNX2_PAGE_SIZE); | 4388 | memset(cp->ctx_arr[i].ctx, 0, CNIC_PAGE_SIZE); |
4388 | 4389 | ||
4389 | CNIC_WR(dev, BNX2_CTX_HOST_PAGE_TBL_DATA0, | 4390 | CNIC_WR(dev, BNX2_CTX_HOST_PAGE_TBL_DATA0, |
4390 | (cp->ctx_arr[i].mapping & 0xffffffff) | valid_bit); | 4391 | (cp->ctx_arr[i].mapping & 0xffffffff) | valid_bit); |
@@ -4628,7 +4629,7 @@ static void cnic_init_bnx2_rx_ring(struct cnic_dev *dev) | |||
4628 | val = BNX2_L2CTX_L2_STATUSB_NUM(sb_id); | 4629 | val = BNX2_L2CTX_L2_STATUSB_NUM(sb_id); |
4629 | cnic_ctx_wr(dev, cid_addr, BNX2_L2CTX_HOST_BDIDX, val); | 4630 | cnic_ctx_wr(dev, cid_addr, BNX2_L2CTX_HOST_BDIDX, val); |
4630 | 4631 | ||
4631 | rxbd = udev->l2_ring + BNX2_PAGE_SIZE; | 4632 | rxbd = udev->l2_ring + CNIC_PAGE_SIZE; |
4632 | for (i = 0; i < BNX2_MAX_RX_DESC_CNT; i++, rxbd++) { | 4633 | for (i = 0; i < BNX2_MAX_RX_DESC_CNT; i++, rxbd++) { |
4633 | dma_addr_t buf_map; | 4634 | dma_addr_t buf_map; |
4634 | int n = (i % cp->l2_rx_ring_size) + 1; | 4635 | int n = (i % cp->l2_rx_ring_size) + 1; |
@@ -4639,11 +4640,11 @@ static void cnic_init_bnx2_rx_ring(struct cnic_dev *dev) | |||
4639 | rxbd->rx_bd_haddr_hi = (u64) buf_map >> 32; | 4640 | rxbd->rx_bd_haddr_hi = (u64) buf_map >> 32; |
4640 | rxbd->rx_bd_haddr_lo = (u64) buf_map & 0xffffffff; | 4641 | rxbd->rx_bd_haddr_lo = (u64) buf_map & 0xffffffff; |
4641 | } | 4642 | } |
4642 | val = (u64) (ring_map + BNX2_PAGE_SIZE) >> 32; | 4643 | val = (u64) (ring_map + CNIC_PAGE_SIZE) >> 32; |
4643 | cnic_ctx_wr(dev, cid_addr, BNX2_L2CTX_NX_BDHADDR_HI, val); | 4644 | cnic_ctx_wr(dev, cid_addr, BNX2_L2CTX_NX_BDHADDR_HI, val); |
4644 | rxbd->rx_bd_haddr_hi = val; | 4645 | rxbd->rx_bd_haddr_hi = val; |
4645 | 4646 | ||
4646 | val = (u64) (ring_map + BNX2_PAGE_SIZE) & 0xffffffff; | 4647 | val = (u64) (ring_map + CNIC_PAGE_SIZE) & 0xffffffff; |
4647 | cnic_ctx_wr(dev, cid_addr, BNX2_L2CTX_NX_BDHADDR_LO, val); | 4648 | cnic_ctx_wr(dev, cid_addr, BNX2_L2CTX_NX_BDHADDR_LO, val); |
4648 | rxbd->rx_bd_haddr_lo = val; | 4649 | rxbd->rx_bd_haddr_lo = val; |
4649 | 4650 | ||
@@ -4709,10 +4710,10 @@ static int cnic_start_bnx2_hw(struct cnic_dev *dev) | |||
4709 | 4710 | ||
4710 | val = CNIC_RD(dev, BNX2_MQ_CONFIG); | 4711 | val = CNIC_RD(dev, BNX2_MQ_CONFIG); |
4711 | val &= ~BNX2_MQ_CONFIG_KNL_BYP_BLK_SIZE; | 4712 | val &= ~BNX2_MQ_CONFIG_KNL_BYP_BLK_SIZE; |
4712 | if (BNX2_PAGE_BITS > 12) | 4713 | if (CNIC_PAGE_BITS > 12) |
4713 | val |= (12 - 8) << 4; | 4714 | val |= (12 - 8) << 4; |
4714 | else | 4715 | else |
4715 | val |= (BNX2_PAGE_BITS - 8) << 4; | 4716 | val |= (CNIC_PAGE_BITS - 8) << 4; |
4716 | 4717 | ||
4717 | CNIC_WR(dev, BNX2_MQ_CONFIG, val); | 4718 | CNIC_WR(dev, BNX2_MQ_CONFIG, val); |
4718 | 4719 | ||
@@ -4742,13 +4743,13 @@ static int cnic_start_bnx2_hw(struct cnic_dev *dev) | |||
4742 | 4743 | ||
4743 | /* Initialize the kernel work queue context. */ | 4744 | /* Initialize the kernel work queue context. */ |
4744 | val = KRNLQ_TYPE_TYPE_KRNLQ | KRNLQ_SIZE_TYPE_SIZE | | 4745 | val = KRNLQ_TYPE_TYPE_KRNLQ | KRNLQ_SIZE_TYPE_SIZE | |
4745 | (BNX2_PAGE_BITS - 8) | KRNLQ_FLAGS_QE_SELF_SEQ; | 4746 | (CNIC_PAGE_BITS - 8) | KRNLQ_FLAGS_QE_SELF_SEQ; |
4746 | cnic_ctx_wr(dev, kwq_cid_addr, L5_KRNLQ_TYPE, val); | 4747 | cnic_ctx_wr(dev, kwq_cid_addr, L5_KRNLQ_TYPE, val); |
4747 | 4748 | ||
4748 | val = (BNX2_PAGE_SIZE / sizeof(struct kwqe) - 1) << 16; | 4749 | val = (CNIC_PAGE_SIZE / sizeof(struct kwqe) - 1) << 16; |
4749 | cnic_ctx_wr(dev, kwq_cid_addr, L5_KRNLQ_QE_SELF_SEQ_MAX, val); | 4750 | cnic_ctx_wr(dev, kwq_cid_addr, L5_KRNLQ_QE_SELF_SEQ_MAX, val); |
4750 | 4751 | ||
4751 | val = ((BNX2_PAGE_SIZE / sizeof(struct kwqe)) << 16) | KWQ_PAGE_CNT; | 4752 | val = ((CNIC_PAGE_SIZE / sizeof(struct kwqe)) << 16) | KWQ_PAGE_CNT; |
4752 | cnic_ctx_wr(dev, kwq_cid_addr, L5_KRNLQ_PGTBL_NPAGES, val); | 4753 | cnic_ctx_wr(dev, kwq_cid_addr, L5_KRNLQ_PGTBL_NPAGES, val); |
4753 | 4754 | ||
4754 | val = (u32) ((u64) cp->kwq_info.pgtbl_map >> 32); | 4755 | val = (u32) ((u64) cp->kwq_info.pgtbl_map >> 32); |
@@ -4768,13 +4769,13 @@ static int cnic_start_bnx2_hw(struct cnic_dev *dev) | |||
4768 | 4769 | ||
4769 | /* Initialize the kernel complete queue context. */ | 4770 | /* Initialize the kernel complete queue context. */ |
4770 | val = KRNLQ_TYPE_TYPE_KRNLQ | KRNLQ_SIZE_TYPE_SIZE | | 4771 | val = KRNLQ_TYPE_TYPE_KRNLQ | KRNLQ_SIZE_TYPE_SIZE | |
4771 | (BNX2_PAGE_BITS - 8) | KRNLQ_FLAGS_QE_SELF_SEQ; | 4772 | (CNIC_PAGE_BITS - 8) | KRNLQ_FLAGS_QE_SELF_SEQ; |
4772 | cnic_ctx_wr(dev, kcq_cid_addr, L5_KRNLQ_TYPE, val); | 4773 | cnic_ctx_wr(dev, kcq_cid_addr, L5_KRNLQ_TYPE, val); |
4773 | 4774 | ||
4774 | val = (BNX2_PAGE_SIZE / sizeof(struct kcqe) - 1) << 16; | 4775 | val = (CNIC_PAGE_SIZE / sizeof(struct kcqe) - 1) << 16; |
4775 | cnic_ctx_wr(dev, kcq_cid_addr, L5_KRNLQ_QE_SELF_SEQ_MAX, val); | 4776 | cnic_ctx_wr(dev, kcq_cid_addr, L5_KRNLQ_QE_SELF_SEQ_MAX, val); |
4776 | 4777 | ||
4777 | val = ((BNX2_PAGE_SIZE / sizeof(struct kcqe)) << 16) | KCQ_PAGE_CNT; | 4778 | val = ((CNIC_PAGE_SIZE / sizeof(struct kcqe)) << 16) | KCQ_PAGE_CNT; |
4778 | cnic_ctx_wr(dev, kcq_cid_addr, L5_KRNLQ_PGTBL_NPAGES, val); | 4779 | cnic_ctx_wr(dev, kcq_cid_addr, L5_KRNLQ_PGTBL_NPAGES, val); |
4779 | 4780 | ||
4780 | val = (u32) ((u64) cp->kcq1.dma.pgtbl_map >> 32); | 4781 | val = (u32) ((u64) cp->kcq1.dma.pgtbl_map >> 32); |
@@ -4918,7 +4919,7 @@ static void cnic_init_bnx2x_tx_ring(struct cnic_dev *dev, | |||
4918 | u32 cli = cp->ethdev->iscsi_l2_client_id; | 4919 | u32 cli = cp->ethdev->iscsi_l2_client_id; |
4919 | u32 val; | 4920 | u32 val; |
4920 | 4921 | ||
4921 | memset(txbd, 0, BNX2_PAGE_SIZE); | 4922 | memset(txbd, 0, CNIC_PAGE_SIZE); |
4922 | 4923 | ||
4923 | buf_map = udev->l2_buf_map; | 4924 | buf_map = udev->l2_buf_map; |
4924 | for (i = 0; i < BNX2_MAX_TX_DESC_CNT; i += 3, txbd += 3) { | 4925 | for (i = 0; i < BNX2_MAX_TX_DESC_CNT; i += 3, txbd += 3) { |
@@ -4978,9 +4979,9 @@ static void cnic_init_bnx2x_rx_ring(struct cnic_dev *dev, | |||
4978 | struct bnx2x *bp = netdev_priv(dev->netdev); | 4979 | struct bnx2x *bp = netdev_priv(dev->netdev); |
4979 | struct cnic_uio_dev *udev = cp->udev; | 4980 | struct cnic_uio_dev *udev = cp->udev; |
4980 | struct eth_rx_bd *rxbd = (struct eth_rx_bd *) (udev->l2_ring + | 4981 | struct eth_rx_bd *rxbd = (struct eth_rx_bd *) (udev->l2_ring + |
4981 | BNX2_PAGE_SIZE); | 4982 | CNIC_PAGE_SIZE); |
4982 | struct eth_rx_cqe_next_page *rxcqe = (struct eth_rx_cqe_next_page *) | 4983 | struct eth_rx_cqe_next_page *rxcqe = (struct eth_rx_cqe_next_page *) |
4983 | (udev->l2_ring + (2 * BNX2_PAGE_SIZE)); | 4984 | (udev->l2_ring + (2 * CNIC_PAGE_SIZE)); |
4984 | struct host_sp_status_block *sb = cp->bnx2x_def_status_blk; | 4985 | struct host_sp_status_block *sb = cp->bnx2x_def_status_blk; |
4985 | int i; | 4986 | int i; |
4986 | u32 cli = cp->ethdev->iscsi_l2_client_id; | 4987 | u32 cli = cp->ethdev->iscsi_l2_client_id; |
@@ -5004,20 +5005,20 @@ static void cnic_init_bnx2x_rx_ring(struct cnic_dev *dev, | |||
5004 | rxbd->addr_lo = cpu_to_le32(buf_map & 0xffffffff); | 5005 | rxbd->addr_lo = cpu_to_le32(buf_map & 0xffffffff); |
5005 | } | 5006 | } |
5006 | 5007 | ||
5007 | val = (u64) (ring_map + BNX2_PAGE_SIZE) >> 32; | 5008 | val = (u64) (ring_map + CNIC_PAGE_SIZE) >> 32; |
5008 | rxbd->addr_hi = cpu_to_le32(val); | 5009 | rxbd->addr_hi = cpu_to_le32(val); |
5009 | data->rx.bd_page_base.hi = cpu_to_le32(val); | 5010 | data->rx.bd_page_base.hi = cpu_to_le32(val); |
5010 | 5011 | ||
5011 | val = (u64) (ring_map + BNX2_PAGE_SIZE) & 0xffffffff; | 5012 | val = (u64) (ring_map + CNIC_PAGE_SIZE) & 0xffffffff; |
5012 | rxbd->addr_lo = cpu_to_le32(val); | 5013 | rxbd->addr_lo = cpu_to_le32(val); |
5013 | data->rx.bd_page_base.lo = cpu_to_le32(val); | 5014 | data->rx.bd_page_base.lo = cpu_to_le32(val); |
5014 | 5015 | ||
5015 | rxcqe += BNX2X_MAX_RCQ_DESC_CNT; | 5016 | rxcqe += BNX2X_MAX_RCQ_DESC_CNT; |
5016 | val = (u64) (ring_map + (2 * BNX2_PAGE_SIZE)) >> 32; | 5017 | val = (u64) (ring_map + (2 * CNIC_PAGE_SIZE)) >> 32; |
5017 | rxcqe->addr_hi = cpu_to_le32(val); | 5018 | rxcqe->addr_hi = cpu_to_le32(val); |
5018 | data->rx.cqe_page_base.hi = cpu_to_le32(val); | 5019 | data->rx.cqe_page_base.hi = cpu_to_le32(val); |
5019 | 5020 | ||
5020 | val = (u64) (ring_map + (2 * BNX2_PAGE_SIZE)) & 0xffffffff; | 5021 | val = (u64) (ring_map + (2 * CNIC_PAGE_SIZE)) & 0xffffffff; |
5021 | rxcqe->addr_lo = cpu_to_le32(val); | 5022 | rxcqe->addr_lo = cpu_to_le32(val); |
5022 | data->rx.cqe_page_base.lo = cpu_to_le32(val); | 5023 | data->rx.cqe_page_base.lo = cpu_to_le32(val); |
5023 | 5024 | ||
@@ -5265,8 +5266,8 @@ static void cnic_shutdown_rings(struct cnic_dev *dev) | |||
5265 | msleep(10); | 5266 | msleep(10); |
5266 | } | 5267 | } |
5267 | clear_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags); | 5268 | clear_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags); |
5268 | rx_ring = udev->l2_ring + BNX2_PAGE_SIZE; | 5269 | rx_ring = udev->l2_ring + CNIC_PAGE_SIZE; |
5269 | memset(rx_ring, 0, BNX2_PAGE_SIZE); | 5270 | memset(rx_ring, 0, CNIC_PAGE_SIZE); |
5270 | } | 5271 | } |
5271 | 5272 | ||
5272 | static int cnic_register_netdev(struct cnic_dev *dev) | 5273 | static int cnic_register_netdev(struct cnic_dev *dev) |
diff --git a/drivers/net/ethernet/broadcom/cnic.h b/drivers/net/ethernet/broadcom/cnic.h index 0d6b13f854d9..d535ae4228b4 100644 --- a/drivers/net/ethernet/broadcom/cnic.h +++ b/drivers/net/ethernet/broadcom/cnic.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* cnic.h: Broadcom CNIC core network driver. | 1 | /* cnic.h: Broadcom CNIC core network driver. |
2 | * | 2 | * |
3 | * Copyright (c) 2006-2013 Broadcom Corporation | 3 | * Copyright (c) 2006-2014 Broadcom Corporation |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify | 5 | * This program is free software; you can redistribute it and/or modify |
6 | * it under the terms of the GNU General Public License as published by | 6 | * it under the terms of the GNU General Public License as published by |
diff --git a/drivers/net/ethernet/broadcom/cnic_defs.h b/drivers/net/ethernet/broadcom/cnic_defs.h index 95a8e4b11c9f..dcbca6997e8f 100644 --- a/drivers/net/ethernet/broadcom/cnic_defs.h +++ b/drivers/net/ethernet/broadcom/cnic_defs.h | |||
@@ -1,7 +1,7 @@ | |||
1 | 1 | ||
2 | /* cnic.c: Broadcom CNIC core network driver. | 2 | /* cnic.c: Broadcom CNIC core network driver. |
3 | * | 3 | * |
4 | * Copyright (c) 2006-2013 Broadcom Corporation | 4 | * Copyright (c) 2006-2014 Broadcom Corporation |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
diff --git a/drivers/net/ethernet/broadcom/cnic_if.h b/drivers/net/ethernet/broadcom/cnic_if.h index 8cf6b1926069..5f4d5573a73d 100644 --- a/drivers/net/ethernet/broadcom/cnic_if.h +++ b/drivers/net/ethernet/broadcom/cnic_if.h | |||
@@ -1,6 +1,6 @@ | |||
1 | /* cnic_if.h: Broadcom CNIC core network driver. | 1 | /* cnic_if.h: Broadcom CNIC core network driver. |
2 | * | 2 | * |
3 | * Copyright (c) 2006-2013 Broadcom Corporation | 3 | * Copyright (c) 2006-2014 Broadcom Corporation |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or modify | 5 | * This program is free software; you can redistribute it and/or modify |
6 | * it under the terms of the GNU General Public License as published by | 6 | * it under the terms of the GNU General Public License as published by |
@@ -14,8 +14,8 @@ | |||
14 | 14 | ||
15 | #include "bnx2x/bnx2x_mfw_req.h" | 15 | #include "bnx2x/bnx2x_mfw_req.h" |
16 | 16 | ||
17 | #define CNIC_MODULE_VERSION "2.5.19" | 17 | #define CNIC_MODULE_VERSION "2.5.20" |
18 | #define CNIC_MODULE_RELDATE "December 19, 2013" | 18 | #define CNIC_MODULE_RELDATE "March 14, 2014" |
19 | 19 | ||
20 | #define CNIC_ULP_RDMA 0 | 20 | #define CNIC_ULP_RDMA 0 |
21 | #define CNIC_ULP_ISCSI 1 | 21 | #define CNIC_ULP_ISCSI 1 |
@@ -24,6 +24,16 @@ | |||
24 | #define MAX_CNIC_ULP_TYPE_EXT 3 | 24 | #define MAX_CNIC_ULP_TYPE_EXT 3 |
25 | #define MAX_CNIC_ULP_TYPE 4 | 25 | #define MAX_CNIC_ULP_TYPE 4 |
26 | 26 | ||
27 | /* Use CPU native page size up to 16K for cnic ring sizes. */ | ||
28 | #if (PAGE_SHIFT > 14) | ||
29 | #define CNIC_PAGE_BITS 14 | ||
30 | #else | ||
31 | #define CNIC_PAGE_BITS PAGE_SHIFT | ||
32 | #endif | ||
33 | #define CNIC_PAGE_SIZE (1 << (CNIC_PAGE_BITS)) | ||
34 | #define CNIC_PAGE_ALIGN(addr) ALIGN(addr, CNIC_PAGE_SIZE) | ||
35 | #define CNIC_PAGE_MASK (~((CNIC_PAGE_SIZE) - 1)) | ||
36 | |||
27 | struct kwqe { | 37 | struct kwqe { |
28 | u32 kwqe_op_flag; | 38 | u32 kwqe_op_flag; |
29 | 39 | ||
diff --git a/drivers/net/ethernet/micrel/ks8851.c b/drivers/net/ethernet/micrel/ks8851.c index 727b546a9eb8..e0c92e0e5e1d 100644 --- a/drivers/net/ethernet/micrel/ks8851.c +++ b/drivers/net/ethernet/micrel/ks8851.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/crc32.h> | 23 | #include <linux/crc32.h> |
24 | #include <linux/mii.h> | 24 | #include <linux/mii.h> |
25 | #include <linux/eeprom_93cx6.h> | 25 | #include <linux/eeprom_93cx6.h> |
26 | #include <linux/regulator/consumer.h> | ||
26 | 27 | ||
27 | #include <linux/spi/spi.h> | 28 | #include <linux/spi/spi.h> |
28 | 29 | ||
@@ -83,6 +84,7 @@ union ks8851_tx_hdr { | |||
83 | * @rc_rxqcr: Cached copy of KS_RXQCR. | 84 | * @rc_rxqcr: Cached copy of KS_RXQCR. |
84 | * @eeprom_size: Companion eeprom size in Bytes, 0 if no eeprom | 85 | * @eeprom_size: Companion eeprom size in Bytes, 0 if no eeprom |
85 | * @eeprom: 93CX6 EEPROM state for accessing on-board EEPROM. | 86 | * @eeprom: 93CX6 EEPROM state for accessing on-board EEPROM. |
87 | * @vdd_reg: Optional regulator supplying the chip | ||
86 | * | 88 | * |
87 | * The @lock ensures that the chip is protected when certain operations are | 89 | * The @lock ensures that the chip is protected when certain operations are |
88 | * in progress. When the read or write packet transfer is in progress, most | 90 | * in progress. When the read or write packet transfer is in progress, most |
@@ -130,6 +132,7 @@ struct ks8851_net { | |||
130 | struct spi_transfer spi_xfer2[2]; | 132 | struct spi_transfer spi_xfer2[2]; |
131 | 133 | ||
132 | struct eeprom_93cx6 eeprom; | 134 | struct eeprom_93cx6 eeprom; |
135 | struct regulator *vdd_reg; | ||
133 | }; | 136 | }; |
134 | 137 | ||
135 | static int msg_enable; | 138 | static int msg_enable; |
@@ -1414,6 +1417,21 @@ static int ks8851_probe(struct spi_device *spi) | |||
1414 | ks->spidev = spi; | 1417 | ks->spidev = spi; |
1415 | ks->tx_space = 6144; | 1418 | ks->tx_space = 6144; |
1416 | 1419 | ||
1420 | ks->vdd_reg = regulator_get_optional(&spi->dev, "vdd"); | ||
1421 | if (IS_ERR(ks->vdd_reg)) { | ||
1422 | ret = PTR_ERR(ks->vdd_reg); | ||
1423 | if (ret == -EPROBE_DEFER) | ||
1424 | goto err_reg; | ||
1425 | } else { | ||
1426 | ret = regulator_enable(ks->vdd_reg); | ||
1427 | if (ret) { | ||
1428 | dev_err(&spi->dev, "regulator enable fail: %d\n", | ||
1429 | ret); | ||
1430 | goto err_reg_en; | ||
1431 | } | ||
1432 | } | ||
1433 | |||
1434 | |||
1417 | mutex_init(&ks->lock); | 1435 | mutex_init(&ks->lock); |
1418 | spin_lock_init(&ks->statelock); | 1436 | spin_lock_init(&ks->statelock); |
1419 | 1437 | ||
@@ -1508,8 +1526,14 @@ static int ks8851_probe(struct spi_device *spi) | |||
1508 | err_netdev: | 1526 | err_netdev: |
1509 | free_irq(ndev->irq, ks); | 1527 | free_irq(ndev->irq, ks); |
1510 | 1528 | ||
1511 | err_id: | ||
1512 | err_irq: | 1529 | err_irq: |
1530 | err_id: | ||
1531 | if (!IS_ERR(ks->vdd_reg)) | ||
1532 | regulator_disable(ks->vdd_reg); | ||
1533 | err_reg_en: | ||
1534 | if (!IS_ERR(ks->vdd_reg)) | ||
1535 | regulator_put(ks->vdd_reg); | ||
1536 | err_reg: | ||
1513 | free_netdev(ndev); | 1537 | free_netdev(ndev); |
1514 | return ret; | 1538 | return ret; |
1515 | } | 1539 | } |
@@ -1523,6 +1547,10 @@ static int ks8851_remove(struct spi_device *spi) | |||
1523 | 1547 | ||
1524 | unregister_netdev(priv->netdev); | 1548 | unregister_netdev(priv->netdev); |
1525 | free_irq(spi->irq, priv); | 1549 | free_irq(spi->irq, priv); |
1550 | if (!IS_ERR(priv->vdd_reg)) { | ||
1551 | regulator_disable(priv->vdd_reg); | ||
1552 | regulator_put(priv->vdd_reg); | ||
1553 | } | ||
1526 | free_netdev(priv->netdev); | 1554 | free_netdev(priv->netdev); |
1527 | 1555 | ||
1528 | return 0; | 1556 | return 0; |
diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c index 543a0813c9e0..5d5fec6c4eb0 100644 --- a/drivers/net/ethernet/ti/cpsw.c +++ b/drivers/net/ethernet/ti/cpsw.c | |||
@@ -2217,10 +2217,6 @@ static int cpsw_probe(struct platform_device *pdev) | |||
2217 | goto clean_ale_ret; | 2217 | goto clean_ale_ret; |
2218 | } | 2218 | } |
2219 | 2219 | ||
2220 | if (cpts_register(&pdev->dev, priv->cpts, | ||
2221 | data->cpts_clock_mult, data->cpts_clock_shift)) | ||
2222 | dev_err(priv->dev, "error registering cpts device\n"); | ||
2223 | |||
2224 | cpsw_notice(priv, probe, "initialized device (regs %pa, irq %d)\n", | 2220 | cpsw_notice(priv, probe, "initialized device (regs %pa, irq %d)\n", |
2225 | &ss_res->start, ndev->irq); | 2221 | &ss_res->start, ndev->irq); |
2226 | 2222 | ||
diff --git a/drivers/net/ethernet/ti/davinci_cpdma.c b/drivers/net/ethernet/ti/davinci_cpdma.c index 364d0c7952c0..88ef27067bf2 100644 --- a/drivers/net/ethernet/ti/davinci_cpdma.c +++ b/drivers/net/ethernet/ti/davinci_cpdma.c | |||
@@ -355,7 +355,7 @@ int cpdma_ctlr_stop(struct cpdma_ctlr *ctlr) | |||
355 | int i; | 355 | int i; |
356 | 356 | ||
357 | spin_lock_irqsave(&ctlr->lock, flags); | 357 | spin_lock_irqsave(&ctlr->lock, flags); |
358 | if (ctlr->state != CPDMA_STATE_ACTIVE) { | 358 | if (ctlr->state == CPDMA_STATE_TEARDOWN) { |
359 | spin_unlock_irqrestore(&ctlr->lock, flags); | 359 | spin_unlock_irqrestore(&ctlr->lock, flags); |
360 | return -EINVAL; | 360 | return -EINVAL; |
361 | } | 361 | } |
@@ -891,7 +891,7 @@ int cpdma_chan_stop(struct cpdma_chan *chan) | |||
891 | unsigned timeout; | 891 | unsigned timeout; |
892 | 892 | ||
893 | spin_lock_irqsave(&chan->lock, flags); | 893 | spin_lock_irqsave(&chan->lock, flags); |
894 | if (chan->state != CPDMA_STATE_ACTIVE) { | 894 | if (chan->state == CPDMA_STATE_TEARDOWN) { |
895 | spin_unlock_irqrestore(&chan->lock, flags); | 895 | spin_unlock_irqrestore(&chan->lock, flags); |
896 | return -EINVAL; | 896 | return -EINVAL; |
897 | } | 897 | } |
diff --git a/drivers/net/ethernet/ti/davinci_emac.c b/drivers/net/ethernet/ti/davinci_emac.c index cd9b164a0434..8f0e69ce07ca 100644 --- a/drivers/net/ethernet/ti/davinci_emac.c +++ b/drivers/net/ethernet/ti/davinci_emac.c | |||
@@ -1532,9 +1532,9 @@ static int emac_dev_open(struct net_device *ndev) | |||
1532 | struct device *emac_dev = &ndev->dev; | 1532 | struct device *emac_dev = &ndev->dev; |
1533 | u32 cnt; | 1533 | u32 cnt; |
1534 | struct resource *res; | 1534 | struct resource *res; |
1535 | int ret; | 1535 | int q, m, ret; |
1536 | int res_num = 0, irq_num = 0; | ||
1536 | int i = 0; | 1537 | int i = 0; |
1537 | int k = 0; | ||
1538 | struct emac_priv *priv = netdev_priv(ndev); | 1538 | struct emac_priv *priv = netdev_priv(ndev); |
1539 | 1539 | ||
1540 | pm_runtime_get(&priv->pdev->dev); | 1540 | pm_runtime_get(&priv->pdev->dev); |
@@ -1564,15 +1564,24 @@ static int emac_dev_open(struct net_device *ndev) | |||
1564 | } | 1564 | } |
1565 | 1565 | ||
1566 | /* Request IRQ */ | 1566 | /* Request IRQ */ |
1567 | while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, | ||
1568 | res_num))) { | ||
1569 | for (irq_num = res->start; irq_num <= res->end; irq_num++) { | ||
1570 | dev_err(emac_dev, "Request IRQ %d\n", irq_num); | ||
1571 | if (request_irq(irq_num, emac_irq, 0, ndev->name, | ||
1572 | ndev)) { | ||
1573 | dev_err(emac_dev, | ||
1574 | "DaVinci EMAC: request_irq() failed\n"); | ||
1575 | ret = -EBUSY; | ||
1567 | 1576 | ||
1568 | while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, k))) { | ||
1569 | for (i = res->start; i <= res->end; i++) { | ||
1570 | if (devm_request_irq(&priv->pdev->dev, i, emac_irq, | ||
1571 | 0, ndev->name, ndev)) | ||
1572 | goto rollback; | 1577 | goto rollback; |
1578 | } | ||
1573 | } | 1579 | } |
1574 | k++; | 1580 | res_num++; |
1575 | } | 1581 | } |
1582 | /* prepare counters for rollback in case of an error */ | ||
1583 | res_num--; | ||
1584 | irq_num--; | ||
1576 | 1585 | ||
1577 | /* Start/Enable EMAC hardware */ | 1586 | /* Start/Enable EMAC hardware */ |
1578 | emac_hw_enable(priv); | 1587 | emac_hw_enable(priv); |
@@ -1639,11 +1648,23 @@ static int emac_dev_open(struct net_device *ndev) | |||
1639 | 1648 | ||
1640 | return 0; | 1649 | return 0; |
1641 | 1650 | ||
1642 | rollback: | ||
1643 | |||
1644 | dev_err(emac_dev, "DaVinci EMAC: devm_request_irq() failed"); | ||
1645 | ret = -EBUSY; | ||
1646 | err: | 1651 | err: |
1652 | emac_int_disable(priv); | ||
1653 | napi_disable(&priv->napi); | ||
1654 | |||
1655 | rollback: | ||
1656 | for (q = res_num; q >= 0; q--) { | ||
1657 | res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, q); | ||
1658 | /* at the first iteration, irq_num is already set to the | ||
1659 | * right value | ||
1660 | */ | ||
1661 | if (q != res_num) | ||
1662 | irq_num = res->end; | ||
1663 | |||
1664 | for (m = irq_num; m >= res->start; m--) | ||
1665 | free_irq(m, ndev); | ||
1666 | } | ||
1667 | cpdma_ctlr_stop(priv->dma); | ||
1647 | pm_runtime_put(&priv->pdev->dev); | 1668 | pm_runtime_put(&priv->pdev->dev); |
1648 | return ret; | 1669 | return ret; |
1649 | } | 1670 | } |
@@ -1659,6 +1680,9 @@ err: | |||
1659 | */ | 1680 | */ |
1660 | static int emac_dev_stop(struct net_device *ndev) | 1681 | static int emac_dev_stop(struct net_device *ndev) |
1661 | { | 1682 | { |
1683 | struct resource *res; | ||
1684 | int i = 0; | ||
1685 | int irq_num; | ||
1662 | struct emac_priv *priv = netdev_priv(ndev); | 1686 | struct emac_priv *priv = netdev_priv(ndev); |
1663 | struct device *emac_dev = &ndev->dev; | 1687 | struct device *emac_dev = &ndev->dev; |
1664 | 1688 | ||
@@ -1674,6 +1698,13 @@ static int emac_dev_stop(struct net_device *ndev) | |||
1674 | if (priv->phydev) | 1698 | if (priv->phydev) |
1675 | phy_disconnect(priv->phydev); | 1699 | phy_disconnect(priv->phydev); |
1676 | 1700 | ||
1701 | /* Free IRQ */ | ||
1702 | while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, i))) { | ||
1703 | for (irq_num = res->start; irq_num <= res->end; irq_num++) | ||
1704 | free_irq(irq_num, priv->ndev); | ||
1705 | i++; | ||
1706 | } | ||
1707 | |||
1677 | if (netif_msg_drv(priv)) | 1708 | if (netif_msg_drv(priv)) |
1678 | dev_notice(emac_dev, "DaVinci EMAC: %s stopped\n", ndev->name); | 1709 | dev_notice(emac_dev, "DaVinci EMAC: %s stopped\n", ndev->name); |
1679 | 1710 | ||
diff --git a/drivers/net/ethernet/via/via-rhine.c b/drivers/net/ethernet/via/via-rhine.c index ce2e4d14ab31..f61dc2b72bb2 100644 --- a/drivers/net/ethernet/via/via-rhine.c +++ b/drivers/net/ethernet/via/via-rhine.c | |||
@@ -923,7 +923,7 @@ static int rhine_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
923 | if (rc) { | 923 | if (rc) { |
924 | dev_err(&pdev->dev, | 924 | dev_err(&pdev->dev, |
925 | "32-bit PCI DMA addresses not supported by the card!?\n"); | 925 | "32-bit PCI DMA addresses not supported by the card!?\n"); |
926 | goto err_out; | 926 | goto err_out_pci_disable; |
927 | } | 927 | } |
928 | 928 | ||
929 | /* sanity check */ | 929 | /* sanity check */ |
@@ -931,7 +931,7 @@ static int rhine_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
931 | (pci_resource_len(pdev, 1) < io_size)) { | 931 | (pci_resource_len(pdev, 1) < io_size)) { |
932 | rc = -EIO; | 932 | rc = -EIO; |
933 | dev_err(&pdev->dev, "Insufficient PCI resources, aborting\n"); | 933 | dev_err(&pdev->dev, "Insufficient PCI resources, aborting\n"); |
934 | goto err_out; | 934 | goto err_out_pci_disable; |
935 | } | 935 | } |
936 | 936 | ||
937 | pioaddr = pci_resource_start(pdev, 0); | 937 | pioaddr = pci_resource_start(pdev, 0); |
@@ -942,7 +942,7 @@ static int rhine_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
942 | dev = alloc_etherdev(sizeof(struct rhine_private)); | 942 | dev = alloc_etherdev(sizeof(struct rhine_private)); |
943 | if (!dev) { | 943 | if (!dev) { |
944 | rc = -ENOMEM; | 944 | rc = -ENOMEM; |
945 | goto err_out; | 945 | goto err_out_pci_disable; |
946 | } | 946 | } |
947 | SET_NETDEV_DEV(dev, &pdev->dev); | 947 | SET_NETDEV_DEV(dev, &pdev->dev); |
948 | 948 | ||
@@ -1084,6 +1084,8 @@ err_out_free_res: | |||
1084 | pci_release_regions(pdev); | 1084 | pci_release_regions(pdev); |
1085 | err_out_free_netdev: | 1085 | err_out_free_netdev: |
1086 | free_netdev(dev); | 1086 | free_netdev(dev); |
1087 | err_out_pci_disable: | ||
1088 | pci_disable_device(pdev); | ||
1087 | err_out: | 1089 | err_out: |
1088 | return rc; | 1090 | return rc; |
1089 | } | 1091 | } |
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index a2fbb3e1db9a..0ce606624296 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c | |||
@@ -684,10 +684,9 @@ EXPORT_SYMBOL(phy_detach); | |||
684 | int phy_suspend(struct phy_device *phydev) | 684 | int phy_suspend(struct phy_device *phydev) |
685 | { | 685 | { |
686 | struct phy_driver *phydrv = to_phy_driver(phydev->dev.driver); | 686 | struct phy_driver *phydrv = to_phy_driver(phydev->dev.driver); |
687 | struct ethtool_wolinfo wol; | 687 | struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL }; |
688 | 688 | ||
689 | /* If the device has WOL enabled, we cannot suspend the PHY */ | 689 | /* If the device has WOL enabled, we cannot suspend the PHY */ |
690 | wol.cmd = ETHTOOL_GWOL; | ||
691 | phy_ethtool_get_wol(phydev, &wol); | 690 | phy_ethtool_get_wol(phydev, &wol); |
692 | if (wol.wolopts) | 691 | if (wol.wolopts) |
693 | return -EBUSY; | 692 | return -EBUSY; |
diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c index e8711a8cfa01..549dbac710ed 100644 --- a/drivers/net/usb/cdc_ncm.c +++ b/drivers/net/usb/cdc_ncm.c | |||
@@ -68,7 +68,6 @@ static struct usb_driver cdc_ncm_driver; | |||
68 | static int cdc_ncm_setup(struct usbnet *dev) | 68 | static int cdc_ncm_setup(struct usbnet *dev) |
69 | { | 69 | { |
70 | struct cdc_ncm_ctx *ctx = (struct cdc_ncm_ctx *)dev->data[0]; | 70 | struct cdc_ncm_ctx *ctx = (struct cdc_ncm_ctx *)dev->data[0]; |
71 | struct usb_cdc_ncm_ntb_parameters ncm_parm; | ||
72 | u32 val; | 71 | u32 val; |
73 | u8 flags; | 72 | u8 flags; |
74 | u8 iface_no; | 73 | u8 iface_no; |
@@ -83,22 +82,22 @@ static int cdc_ncm_setup(struct usbnet *dev) | |||
83 | err = usbnet_read_cmd(dev, USB_CDC_GET_NTB_PARAMETERS, | 82 | err = usbnet_read_cmd(dev, USB_CDC_GET_NTB_PARAMETERS, |
84 | USB_TYPE_CLASS | USB_DIR_IN | 83 | USB_TYPE_CLASS | USB_DIR_IN |
85 | |USB_RECIP_INTERFACE, | 84 | |USB_RECIP_INTERFACE, |
86 | 0, iface_no, &ncm_parm, | 85 | 0, iface_no, &ctx->ncm_parm, |
87 | sizeof(ncm_parm)); | 86 | sizeof(ctx->ncm_parm)); |
88 | if (err < 0) { | 87 | if (err < 0) { |
89 | dev_err(&dev->intf->dev, "failed GET_NTB_PARAMETERS\n"); | 88 | dev_err(&dev->intf->dev, "failed GET_NTB_PARAMETERS\n"); |
90 | return err; /* GET_NTB_PARAMETERS is required */ | 89 | return err; /* GET_NTB_PARAMETERS is required */ |
91 | } | 90 | } |
92 | 91 | ||
93 | /* read correct set of parameters according to device mode */ | 92 | /* read correct set of parameters according to device mode */ |
94 | ctx->rx_max = le32_to_cpu(ncm_parm.dwNtbInMaxSize); | 93 | ctx->rx_max = le32_to_cpu(ctx->ncm_parm.dwNtbInMaxSize); |
95 | ctx->tx_max = le32_to_cpu(ncm_parm.dwNtbOutMaxSize); | 94 | ctx->tx_max = le32_to_cpu(ctx->ncm_parm.dwNtbOutMaxSize); |
96 | ctx->tx_remainder = le16_to_cpu(ncm_parm.wNdpOutPayloadRemainder); | 95 | ctx->tx_remainder = le16_to_cpu(ctx->ncm_parm.wNdpOutPayloadRemainder); |
97 | ctx->tx_modulus = le16_to_cpu(ncm_parm.wNdpOutDivisor); | 96 | ctx->tx_modulus = le16_to_cpu(ctx->ncm_parm.wNdpOutDivisor); |
98 | ctx->tx_ndp_modulus = le16_to_cpu(ncm_parm.wNdpOutAlignment); | 97 | ctx->tx_ndp_modulus = le16_to_cpu(ctx->ncm_parm.wNdpOutAlignment); |
99 | /* devices prior to NCM Errata shall set this field to zero */ | 98 | /* devices prior to NCM Errata shall set this field to zero */ |
100 | ctx->tx_max_datagrams = le16_to_cpu(ncm_parm.wNtbOutMaxDatagrams); | 99 | ctx->tx_max_datagrams = le16_to_cpu(ctx->ncm_parm.wNtbOutMaxDatagrams); |
101 | ntb_fmt_supported = le16_to_cpu(ncm_parm.bmNtbFormatsSupported); | 100 | ntb_fmt_supported = le16_to_cpu(ctx->ncm_parm.bmNtbFormatsSupported); |
102 | 101 | ||
103 | /* there are some minor differences in NCM and MBIM defaults */ | 102 | /* there are some minor differences in NCM and MBIM defaults */ |
104 | if (cdc_ncm_comm_intf_is_mbim(ctx->control->cur_altsetting)) { | 103 | if (cdc_ncm_comm_intf_is_mbim(ctx->control->cur_altsetting)) { |
@@ -147,7 +146,7 @@ static int cdc_ncm_setup(struct usbnet *dev) | |||
147 | } | 146 | } |
148 | 147 | ||
149 | /* inform device about NTB input size changes */ | 148 | /* inform device about NTB input size changes */ |
150 | if (ctx->rx_max != le32_to_cpu(ncm_parm.dwNtbInMaxSize)) { | 149 | if (ctx->rx_max != le32_to_cpu(ctx->ncm_parm.dwNtbInMaxSize)) { |
151 | __le32 dwNtbInMaxSize = cpu_to_le32(ctx->rx_max); | 150 | __le32 dwNtbInMaxSize = cpu_to_le32(ctx->rx_max); |
152 | 151 | ||
153 | err = usbnet_write_cmd(dev, USB_CDC_SET_NTB_INPUT_SIZE, | 152 | err = usbnet_write_cmd(dev, USB_CDC_SET_NTB_INPUT_SIZE, |
@@ -163,14 +162,6 @@ static int cdc_ncm_setup(struct usbnet *dev) | |||
163 | dev_dbg(&dev->intf->dev, "Using default maximum transmit length=%d\n", | 162 | dev_dbg(&dev->intf->dev, "Using default maximum transmit length=%d\n", |
164 | CDC_NCM_NTB_MAX_SIZE_TX); | 163 | CDC_NCM_NTB_MAX_SIZE_TX); |
165 | ctx->tx_max = CDC_NCM_NTB_MAX_SIZE_TX; | 164 | ctx->tx_max = CDC_NCM_NTB_MAX_SIZE_TX; |
166 | |||
167 | /* Adding a pad byte here simplifies the handling in | ||
168 | * cdc_ncm_fill_tx_frame, by making tx_max always | ||
169 | * represent the real skb max size. | ||
170 | */ | ||
171 | if (ctx->tx_max % usb_maxpacket(dev->udev, dev->out, 1) == 0) | ||
172 | ctx->tx_max++; | ||
173 | |||
174 | } | 165 | } |
175 | 166 | ||
176 | /* | 167 | /* |
@@ -456,6 +447,10 @@ advance: | |||
456 | goto error2; | 447 | goto error2; |
457 | } | 448 | } |
458 | 449 | ||
450 | /* initialize data interface */ | ||
451 | if (cdc_ncm_setup(dev)) | ||
452 | goto error2; | ||
453 | |||
459 | /* configure data interface */ | 454 | /* configure data interface */ |
460 | temp = usb_set_interface(dev->udev, iface_no, data_altsetting); | 455 | temp = usb_set_interface(dev->udev, iface_no, data_altsetting); |
461 | if (temp) { | 456 | if (temp) { |
@@ -470,12 +465,6 @@ advance: | |||
470 | goto error2; | 465 | goto error2; |
471 | } | 466 | } |
472 | 467 | ||
473 | /* initialize data interface */ | ||
474 | if (cdc_ncm_setup(dev)) { | ||
475 | dev_dbg(&intf->dev, "cdc_ncm_setup() failed\n"); | ||
476 | goto error2; | ||
477 | } | ||
478 | |||
479 | usb_set_intfdata(ctx->data, dev); | 468 | usb_set_intfdata(ctx->data, dev); |
480 | usb_set_intfdata(ctx->control, dev); | 469 | usb_set_intfdata(ctx->control, dev); |
481 | 470 | ||
@@ -492,6 +481,15 @@ advance: | |||
492 | dev->hard_mtu = ctx->tx_max; | 481 | dev->hard_mtu = ctx->tx_max; |
493 | dev->rx_urb_size = ctx->rx_max; | 482 | dev->rx_urb_size = ctx->rx_max; |
494 | 483 | ||
484 | /* cdc_ncm_setup will override dwNtbOutMaxSize if it is | ||
485 | * outside the sane range. Adding a pad byte here if necessary | ||
486 | * simplifies the handling in cdc_ncm_fill_tx_frame, making | ||
487 | * tx_max always represent the real skb max size. | ||
488 | */ | ||
489 | if (ctx->tx_max != le32_to_cpu(ctx->ncm_parm.dwNtbOutMaxSize) && | ||
490 | ctx->tx_max % usb_maxpacket(dev->udev, dev->out, 1) == 0) | ||
491 | ctx->tx_max++; | ||
492 | |||
495 | return 0; | 493 | return 0; |
496 | 494 | ||
497 | error2: | 495 | error2: |
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index eb59b14d5ee0..0d862a5077ab 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c | |||
@@ -1315,6 +1315,9 @@ static int arp_reduce(struct net_device *dev, struct sk_buff *skb) | |||
1315 | 1315 | ||
1316 | neigh_release(n); | 1316 | neigh_release(n); |
1317 | 1317 | ||
1318 | if (reply == NULL) | ||
1319 | goto out; | ||
1320 | |||
1318 | skb_reset_mac_header(reply); | 1321 | skb_reset_mac_header(reply); |
1319 | __skb_pull(reply, skb_network_offset(reply)); | 1322 | __skb_pull(reply, skb_network_offset(reply)); |
1320 | reply->ip_summed = CHECKSUM_UNNECESSARY; | 1323 | reply->ip_summed = CHECKSUM_UNNECESSARY; |
@@ -1336,15 +1339,103 @@ out: | |||
1336 | } | 1339 | } |
1337 | 1340 | ||
1338 | #if IS_ENABLED(CONFIG_IPV6) | 1341 | #if IS_ENABLED(CONFIG_IPV6) |
1342 | |||
1343 | static struct sk_buff *vxlan_na_create(struct sk_buff *request, | ||
1344 | struct neighbour *n, bool isrouter) | ||
1345 | { | ||
1346 | struct net_device *dev = request->dev; | ||
1347 | struct sk_buff *reply; | ||
1348 | struct nd_msg *ns, *na; | ||
1349 | struct ipv6hdr *pip6; | ||
1350 | u8 *daddr; | ||
1351 | int na_olen = 8; /* opt hdr + ETH_ALEN for target */ | ||
1352 | int ns_olen; | ||
1353 | int i, len; | ||
1354 | |||
1355 | if (dev == NULL) | ||
1356 | return NULL; | ||
1357 | |||
1358 | len = LL_RESERVED_SPACE(dev) + sizeof(struct ipv6hdr) + | ||
1359 | sizeof(*na) + na_olen + dev->needed_tailroom; | ||
1360 | reply = alloc_skb(len, GFP_ATOMIC); | ||
1361 | if (reply == NULL) | ||
1362 | return NULL; | ||
1363 | |||
1364 | reply->protocol = htons(ETH_P_IPV6); | ||
1365 | reply->dev = dev; | ||
1366 | skb_reserve(reply, LL_RESERVED_SPACE(request->dev)); | ||
1367 | skb_push(reply, sizeof(struct ethhdr)); | ||
1368 | skb_set_mac_header(reply, 0); | ||
1369 | |||
1370 | ns = (struct nd_msg *)skb_transport_header(request); | ||
1371 | |||
1372 | daddr = eth_hdr(request)->h_source; | ||
1373 | ns_olen = request->len - skb_transport_offset(request) - sizeof(*ns); | ||
1374 | for (i = 0; i < ns_olen-1; i += (ns->opt[i+1]<<3)) { | ||
1375 | if (ns->opt[i] == ND_OPT_SOURCE_LL_ADDR) { | ||
1376 | daddr = ns->opt + i + sizeof(struct nd_opt_hdr); | ||
1377 | break; | ||
1378 | } | ||
1379 | } | ||
1380 | |||
1381 | /* Ethernet header */ | ||
1382 | ether_addr_copy(eth_hdr(reply)->h_dest, daddr); | ||
1383 | ether_addr_copy(eth_hdr(reply)->h_source, n->ha); | ||
1384 | eth_hdr(reply)->h_proto = htons(ETH_P_IPV6); | ||
1385 | reply->protocol = htons(ETH_P_IPV6); | ||
1386 | |||
1387 | skb_pull(reply, sizeof(struct ethhdr)); | ||
1388 | skb_set_network_header(reply, 0); | ||
1389 | skb_put(reply, sizeof(struct ipv6hdr)); | ||
1390 | |||
1391 | /* IPv6 header */ | ||
1392 | |||
1393 | pip6 = ipv6_hdr(reply); | ||
1394 | memset(pip6, 0, sizeof(struct ipv6hdr)); | ||
1395 | pip6->version = 6; | ||
1396 | pip6->priority = ipv6_hdr(request)->priority; | ||
1397 | pip6->nexthdr = IPPROTO_ICMPV6; | ||
1398 | pip6->hop_limit = 255; | ||
1399 | pip6->daddr = ipv6_hdr(request)->saddr; | ||
1400 | pip6->saddr = *(struct in6_addr *)n->primary_key; | ||
1401 | |||
1402 | skb_pull(reply, sizeof(struct ipv6hdr)); | ||
1403 | skb_set_transport_header(reply, 0); | ||
1404 | |||
1405 | na = (struct nd_msg *)skb_put(reply, sizeof(*na) + na_olen); | ||
1406 | |||
1407 | /* Neighbor Advertisement */ | ||
1408 | memset(na, 0, sizeof(*na)+na_olen); | ||
1409 | na->icmph.icmp6_type = NDISC_NEIGHBOUR_ADVERTISEMENT; | ||
1410 | na->icmph.icmp6_router = isrouter; | ||
1411 | na->icmph.icmp6_override = 1; | ||
1412 | na->icmph.icmp6_solicited = 1; | ||
1413 | na->target = ns->target; | ||
1414 | ether_addr_copy(&na->opt[2], n->ha); | ||
1415 | na->opt[0] = ND_OPT_TARGET_LL_ADDR; | ||
1416 | na->opt[1] = na_olen >> 3; | ||
1417 | |||
1418 | na->icmph.icmp6_cksum = csum_ipv6_magic(&pip6->saddr, | ||
1419 | &pip6->daddr, sizeof(*na)+na_olen, IPPROTO_ICMPV6, | ||
1420 | csum_partial(na, sizeof(*na)+na_olen, 0)); | ||
1421 | |||
1422 | pip6->payload_len = htons(sizeof(*na)+na_olen); | ||
1423 | |||
1424 | skb_push(reply, sizeof(struct ipv6hdr)); | ||
1425 | |||
1426 | reply->ip_summed = CHECKSUM_UNNECESSARY; | ||
1427 | |||
1428 | return reply; | ||
1429 | } | ||
1430 | |||
1339 | static int neigh_reduce(struct net_device *dev, struct sk_buff *skb) | 1431 | static int neigh_reduce(struct net_device *dev, struct sk_buff *skb) |
1340 | { | 1432 | { |
1341 | struct vxlan_dev *vxlan = netdev_priv(dev); | 1433 | struct vxlan_dev *vxlan = netdev_priv(dev); |
1342 | struct neighbour *n; | 1434 | struct nd_msg *msg; |
1343 | union vxlan_addr ipa; | ||
1344 | const struct ipv6hdr *iphdr; | 1435 | const struct ipv6hdr *iphdr; |
1345 | const struct in6_addr *saddr, *daddr; | 1436 | const struct in6_addr *saddr, *daddr; |
1346 | struct nd_msg *msg; | 1437 | struct neighbour *n; |
1347 | struct inet6_dev *in6_dev = NULL; | 1438 | struct inet6_dev *in6_dev; |
1348 | 1439 | ||
1349 | in6_dev = __in6_dev_get(dev); | 1440 | in6_dev = __in6_dev_get(dev); |
1350 | if (!in6_dev) | 1441 | if (!in6_dev) |
@@ -1357,19 +1448,20 @@ static int neigh_reduce(struct net_device *dev, struct sk_buff *skb) | |||
1357 | saddr = &iphdr->saddr; | 1448 | saddr = &iphdr->saddr; |
1358 | daddr = &iphdr->daddr; | 1449 | daddr = &iphdr->daddr; |
1359 | 1450 | ||
1360 | if (ipv6_addr_loopback(daddr) || | ||
1361 | ipv6_addr_is_multicast(daddr)) | ||
1362 | goto out; | ||
1363 | |||
1364 | msg = (struct nd_msg *)skb_transport_header(skb); | 1451 | msg = (struct nd_msg *)skb_transport_header(skb); |
1365 | if (msg->icmph.icmp6_code != 0 || | 1452 | if (msg->icmph.icmp6_code != 0 || |
1366 | msg->icmph.icmp6_type != NDISC_NEIGHBOUR_SOLICITATION) | 1453 | msg->icmph.icmp6_type != NDISC_NEIGHBOUR_SOLICITATION) |
1367 | goto out; | 1454 | goto out; |
1368 | 1455 | ||
1369 | n = neigh_lookup(ipv6_stub->nd_tbl, daddr, dev); | 1456 | if (ipv6_addr_loopback(daddr) || |
1457 | ipv6_addr_is_multicast(&msg->target)) | ||
1458 | goto out; | ||
1459 | |||
1460 | n = neigh_lookup(ipv6_stub->nd_tbl, &msg->target, dev); | ||
1370 | 1461 | ||
1371 | if (n) { | 1462 | if (n) { |
1372 | struct vxlan_fdb *f; | 1463 | struct vxlan_fdb *f; |
1464 | struct sk_buff *reply; | ||
1373 | 1465 | ||
1374 | if (!(n->nud_state & NUD_CONNECTED)) { | 1466 | if (!(n->nud_state & NUD_CONNECTED)) { |
1375 | neigh_release(n); | 1467 | neigh_release(n); |
@@ -1383,13 +1475,23 @@ static int neigh_reduce(struct net_device *dev, struct sk_buff *skb) | |||
1383 | goto out; | 1475 | goto out; |
1384 | } | 1476 | } |
1385 | 1477 | ||
1386 | ipv6_stub->ndisc_send_na(dev, n, saddr, &msg->target, | 1478 | reply = vxlan_na_create(skb, n, |
1387 | !!in6_dev->cnf.forwarding, | 1479 | !!(f ? f->flags & NTF_ROUTER : 0)); |
1388 | true, false, false); | 1480 | |
1389 | neigh_release(n); | 1481 | neigh_release(n); |
1482 | |||
1483 | if (reply == NULL) | ||
1484 | goto out; | ||
1485 | |||
1486 | if (netif_rx_ni(reply) == NET_RX_DROP) | ||
1487 | dev->stats.rx_dropped++; | ||
1488 | |||
1390 | } else if (vxlan->flags & VXLAN_F_L3MISS) { | 1489 | } else if (vxlan->flags & VXLAN_F_L3MISS) { |
1391 | ipa.sin6.sin6_addr = *daddr; | 1490 | union vxlan_addr ipa = { |
1392 | ipa.sa.sa_family = AF_INET6; | 1491 | .sin6.sin6_addr = msg->target, |
1492 | .sa.sa_family = AF_INET6, | ||
1493 | }; | ||
1494 | |||
1393 | vxlan_ip_miss(dev, &ipa); | 1495 | vxlan_ip_miss(dev, &ipa); |
1394 | } | 1496 | } |
1395 | 1497 | ||
diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c index 0992f7c70e1a..c8a9dfab1fee 100644 --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c | |||
@@ -1547,6 +1547,7 @@ bool ath9k_hw_check_alive(struct ath_hw *ah) | |||
1547 | if (reg != last_val) | 1547 | if (reg != last_val) |
1548 | return true; | 1548 | return true; |
1549 | 1549 | ||
1550 | udelay(1); | ||
1550 | last_val = reg; | 1551 | last_val = reg; |
1551 | if ((reg & 0x7E7FFFEF) == 0x00702400) | 1552 | if ((reg & 0x7E7FFFEF) == 0x00702400) |
1552 | continue; | 1553 | continue; |
@@ -1559,8 +1560,6 @@ bool ath9k_hw_check_alive(struct ath_hw *ah) | |||
1559 | default: | 1560 | default: |
1560 | return true; | 1561 | return true; |
1561 | } | 1562 | } |
1562 | |||
1563 | udelay(1); | ||
1564 | } while (count-- > 0); | 1563 | } while (count-- > 0); |
1565 | 1564 | ||
1566 | return false; | 1565 | return false; |
diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index f76e6b9bb8e6..87cbec47fb48 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c | |||
@@ -2065,7 +2065,7 @@ static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc, | |||
2065 | 2065 | ||
2066 | ATH_TXBUF_RESET(bf); | 2066 | ATH_TXBUF_RESET(bf); |
2067 | 2067 | ||
2068 | if (tid) { | 2068 | if (tid && ieee80211_is_data_present(hdr->frame_control)) { |
2069 | fragno = le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_FRAG; | 2069 | fragno = le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_FRAG; |
2070 | seqno = tid->seq_next; | 2070 | seqno = tid->seq_next; |
2071 | hdr->seq_ctrl = cpu_to_le16(tid->seq_next << IEEE80211_SEQ_SEQ_SHIFT); | 2071 | hdr->seq_ctrl = cpu_to_le16(tid->seq_next << IEEE80211_SEQ_SEQ_SHIFT); |
@@ -2188,7 +2188,7 @@ int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb, | |||
2188 | txq->stopped = true; | 2188 | txq->stopped = true; |
2189 | } | 2189 | } |
2190 | 2190 | ||
2191 | if (txctl->an) | 2191 | if (txctl->an && ieee80211_is_data_present(hdr->frame_control)) |
2192 | tid = ath_get_skb_tid(sc, txctl->an, skb); | 2192 | tid = ath_get_skb_tid(sc, txctl->an, skb); |
2193 | 2193 | ||
2194 | if (info->flags & IEEE80211_TX_CTL_PS_RESPONSE) { | 2194 | if (info->flags & IEEE80211_TX_CTL_PS_RESPONSE) { |
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c index 47a6f3957b7f..13c89a0c4ba7 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c | |||
@@ -2140,8 +2140,10 @@ static int brcmf_sdio_txpkt_prep_sg(struct brcmf_sdio *bus, | |||
2140 | if (pkt_pad == NULL) | 2140 | if (pkt_pad == NULL) |
2141 | return -ENOMEM; | 2141 | return -ENOMEM; |
2142 | ret = brcmf_sdio_txpkt_hdalign(bus, pkt_pad); | 2142 | ret = brcmf_sdio_txpkt_hdalign(bus, pkt_pad); |
2143 | if (unlikely(ret < 0)) | 2143 | if (unlikely(ret < 0)) { |
2144 | kfree_skb(pkt_pad); | ||
2144 | return ret; | 2145 | return ret; |
2146 | } | ||
2145 | memcpy(pkt_pad->data, | 2147 | memcpy(pkt_pad->data, |
2146 | pkt->data + pkt->len - tail_chop, | 2148 | pkt->data + pkt->len - tail_chop, |
2147 | tail_chop); | 2149 | tail_chop); |
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c index 7f8b5d156c8c..41d4a8167dc3 100644 --- a/drivers/net/wireless/rt2x00/rt2800lib.c +++ b/drivers/net/wireless/rt2x00/rt2800lib.c | |||
@@ -5460,14 +5460,15 @@ static void rt2800_init_bbp_53xx(struct rt2x00_dev *rt2x00dev) | |||
5460 | 5460 | ||
5461 | rt2800_bbp_write(rt2x00dev, 68, 0x0b); | 5461 | rt2800_bbp_write(rt2x00dev, 68, 0x0b); |
5462 | 5462 | ||
5463 | rt2800_bbp_write(rt2x00dev, 69, 0x0d); | 5463 | rt2800_bbp_write(rt2x00dev, 69, 0x12); |
5464 | rt2800_bbp_write(rt2x00dev, 70, 0x06); | ||
5465 | rt2800_bbp_write(rt2x00dev, 73, 0x13); | 5464 | rt2800_bbp_write(rt2x00dev, 73, 0x13); |
5466 | rt2800_bbp_write(rt2x00dev, 75, 0x46); | 5465 | rt2800_bbp_write(rt2x00dev, 75, 0x46); |
5467 | rt2800_bbp_write(rt2x00dev, 76, 0x28); | 5466 | rt2800_bbp_write(rt2x00dev, 76, 0x28); |
5468 | 5467 | ||
5469 | rt2800_bbp_write(rt2x00dev, 77, 0x59); | 5468 | rt2800_bbp_write(rt2x00dev, 77, 0x59); |
5470 | 5469 | ||
5470 | rt2800_bbp_write(rt2x00dev, 70, 0x0a); | ||
5471 | |||
5471 | rt2800_bbp_write(rt2x00dev, 79, 0x13); | 5472 | rt2800_bbp_write(rt2x00dev, 79, 0x13); |
5472 | rt2800_bbp_write(rt2x00dev, 80, 0x05); | 5473 | rt2800_bbp_write(rt2x00dev, 80, 0x05); |
5473 | rt2800_bbp_write(rt2x00dev, 81, 0x33); | 5474 | rt2800_bbp_write(rt2x00dev, 81, 0x33); |
@@ -5510,7 +5511,6 @@ static void rt2800_init_bbp_53xx(struct rt2x00_dev *rt2x00dev) | |||
5510 | if (rt2x00_rt(rt2x00dev, RT5392)) { | 5511 | if (rt2x00_rt(rt2x00dev, RT5392)) { |
5511 | rt2800_bbp_write(rt2x00dev, 134, 0xd0); | 5512 | rt2800_bbp_write(rt2x00dev, 134, 0xd0); |
5512 | rt2800_bbp_write(rt2x00dev, 135, 0xf6); | 5513 | rt2800_bbp_write(rt2x00dev, 135, 0xf6); |
5513 | rt2800_bbp_write(rt2x00dev, 148, 0x84); | ||
5514 | } | 5514 | } |
5515 | 5515 | ||
5516 | rt2800_disable_unused_dac_adc(rt2x00dev); | 5516 | rt2800_disable_unused_dac_adc(rt2x00dev); |