diff options
Diffstat (limited to 'drivers/net')
| -rw-r--r-- | drivers/net/Kconfig | 4 | ||||
| -rw-r--r-- | drivers/net/ehea/ehea.h | 5 | ||||
| -rw-r--r-- | drivers/net/ehea/ehea_ethtool.c | 2 | ||||
| -rw-r--r-- | drivers/net/ehea/ehea_main.c | 26 | ||||
| -rw-r--r-- | drivers/net/ehea/ehea_phyp.c | 2 | ||||
| -rw-r--r-- | drivers/net/ehea/ehea_phyp.h | 6 | ||||
| -rw-r--r-- | drivers/net/ehea/ehea_qmr.c | 17 | ||||
| -rw-r--r-- | drivers/net/wireless/bcm43xx/bcm43xx_leds.c | 7 | ||||
| -rw-r--r-- | drivers/net/wireless/bcm43xx/bcm43xx_leds.h | 6 | ||||
| -rw-r--r-- | drivers/net/wireless/bcm43xx/bcm43xx_main.c | 16 | ||||
| -rw-r--r-- | drivers/net/wireless/hostap/hostap_plx.c | 4 |
11 files changed, 60 insertions, 35 deletions
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 28c17d1ca5cb..9cb3ca5806fc 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
| @@ -486,7 +486,7 @@ config SGI_IOC3_ETH_HW_TX_CSUM | |||
| 486 | 486 | ||
| 487 | config MIPS_SIM_NET | 487 | config MIPS_SIM_NET |
| 488 | tristate "MIPS simulator Network device (EXPERIMENTAL)" | 488 | tristate "MIPS simulator Network device (EXPERIMENTAL)" |
| 489 | depends on NETDEVICES && MIPS_SIM && EXPERIMENTAL | 489 | depends on MIPS_SIM && EXPERIMENTAL |
| 490 | help | 490 | help |
| 491 | The MIPSNET device is a simple Ethernet network device which is | 491 | The MIPSNET device is a simple Ethernet network device which is |
| 492 | emulated by the MIPS Simulator. | 492 | emulated by the MIPS Simulator. |
| @@ -2467,7 +2467,7 @@ config ISERIES_VETH | |||
| 2467 | 2467 | ||
| 2468 | config RIONET | 2468 | config RIONET |
| 2469 | tristate "RapidIO Ethernet over messaging driver support" | 2469 | tristate "RapidIO Ethernet over messaging driver support" |
| 2470 | depends on NETDEVICES && RAPIDIO | 2470 | depends on RAPIDIO |
| 2471 | 2471 | ||
| 2472 | config RIONET_TX_SIZE | 2472 | config RIONET_TX_SIZE |
| 2473 | int "Number of outbound queue entries" | 2473 | int "Number of outbound queue entries" |
diff --git a/drivers/net/ehea/ehea.h b/drivers/net/ehea/ehea.h index b40724fc6b74..39ad9f73d1ec 100644 --- a/drivers/net/ehea/ehea.h +++ b/drivers/net/ehea/ehea.h | |||
| @@ -39,7 +39,7 @@ | |||
| 39 | #include <asm/io.h> | 39 | #include <asm/io.h> |
| 40 | 40 | ||
| 41 | #define DRV_NAME "ehea" | 41 | #define DRV_NAME "ehea" |
| 42 | #define DRV_VERSION "EHEA_0034" | 42 | #define DRV_VERSION "EHEA_0043" |
| 43 | 43 | ||
| 44 | #define EHEA_MSG_DEFAULT (NETIF_MSG_LINK | NETIF_MSG_TIMER \ | 44 | #define EHEA_MSG_DEFAULT (NETIF_MSG_LINK | NETIF_MSG_TIMER \ |
| 45 | | NETIF_MSG_RX_ERR | NETIF_MSG_TX_ERR) | 45 | | NETIF_MSG_RX_ERR | NETIF_MSG_TX_ERR) |
| @@ -105,9 +105,6 @@ | |||
| 105 | #define EHEA_BCMC_VLANID_ALL 0x01 | 105 | #define EHEA_BCMC_VLANID_ALL 0x01 |
| 106 | #define EHEA_BCMC_VLANID_SINGLE 0x00 | 106 | #define EHEA_BCMC_VLANID_SINGLE 0x00 |
| 107 | 107 | ||
| 108 | /* Use this define to kmallocate pHYP control blocks */ | ||
| 109 | #define H_CB_ALIGNMENT 4096 | ||
| 110 | |||
| 111 | #define EHEA_CACHE_LINE 128 | 108 | #define EHEA_CACHE_LINE 128 |
| 112 | 109 | ||
| 113 | /* Memory Regions */ | 110 | /* Memory Regions */ |
diff --git a/drivers/net/ehea/ehea_ethtool.c b/drivers/net/ehea/ehea_ethtool.c index 82eb2fb8c75e..9f57c2e78ced 100644 --- a/drivers/net/ehea/ehea_ethtool.c +++ b/drivers/net/ehea/ehea_ethtool.c | |||
| @@ -238,7 +238,7 @@ static void ehea_get_ethtool_stats(struct net_device *dev, | |||
| 238 | data[i++] = port->port_res[0].swqe_refill_th; | 238 | data[i++] = port->port_res[0].swqe_refill_th; |
| 239 | data[i++] = port->resets; | 239 | data[i++] = port->resets; |
| 240 | 240 | ||
| 241 | cb6 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 241 | cb6 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
| 242 | if (!cb6) { | 242 | if (!cb6) { |
| 243 | ehea_error("no mem for cb6"); | 243 | ehea_error("no mem for cb6"); |
| 244 | return; | 244 | return; |
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c index 4538c99733fd..6ad696101418 100644 --- a/drivers/net/ehea/ehea_main.c +++ b/drivers/net/ehea/ehea_main.c | |||
| @@ -92,7 +92,7 @@ static struct net_device_stats *ehea_get_stats(struct net_device *dev) | |||
| 92 | 92 | ||
| 93 | memset(stats, 0, sizeof(*stats)); | 93 | memset(stats, 0, sizeof(*stats)); |
| 94 | 94 | ||
| 95 | cb2 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 95 | cb2 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
| 96 | if (!cb2) { | 96 | if (!cb2) { |
| 97 | ehea_error("no mem for cb2"); | 97 | ehea_error("no mem for cb2"); |
| 98 | goto out; | 98 | goto out; |
| @@ -586,8 +586,8 @@ int ehea_sense_port_attr(struct ehea_port *port) | |||
| 586 | u64 hret; | 586 | u64 hret; |
| 587 | struct hcp_ehea_port_cb0 *cb0; | 587 | struct hcp_ehea_port_cb0 *cb0; |
| 588 | 588 | ||
| 589 | cb0 = kzalloc(H_CB_ALIGNMENT, GFP_ATOMIC); /* May be called via */ | 589 | cb0 = kzalloc(PAGE_SIZE, GFP_ATOMIC); /* May be called via */ |
| 590 | if (!cb0) { /* ehea_neq_tasklet() */ | 590 | if (!cb0) { /* ehea_neq_tasklet() */ |
| 591 | ehea_error("no mem for cb0"); | 591 | ehea_error("no mem for cb0"); |
| 592 | ret = -ENOMEM; | 592 | ret = -ENOMEM; |
| 593 | goto out; | 593 | goto out; |
| @@ -670,7 +670,7 @@ int ehea_set_portspeed(struct ehea_port *port, u32 port_speed) | |||
| 670 | u64 hret; | 670 | u64 hret; |
| 671 | int ret = 0; | 671 | int ret = 0; |
| 672 | 672 | ||
| 673 | cb4 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 673 | cb4 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
| 674 | if (!cb4) { | 674 | if (!cb4) { |
| 675 | ehea_error("no mem for cb4"); | 675 | ehea_error("no mem for cb4"); |
| 676 | ret = -ENOMEM; | 676 | ret = -ENOMEM; |
| @@ -985,7 +985,7 @@ static int ehea_configure_port(struct ehea_port *port) | |||
| 985 | struct hcp_ehea_port_cb0 *cb0; | 985 | struct hcp_ehea_port_cb0 *cb0; |
| 986 | 986 | ||
| 987 | ret = -ENOMEM; | 987 | ret = -ENOMEM; |
| 988 | cb0 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 988 | cb0 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
| 989 | if (!cb0) | 989 | if (!cb0) |
| 990 | goto out; | 990 | goto out; |
| 991 | 991 | ||
| @@ -1443,7 +1443,7 @@ static int ehea_set_mac_addr(struct net_device *dev, void *sa) | |||
| 1443 | goto out; | 1443 | goto out; |
| 1444 | } | 1444 | } |
| 1445 | 1445 | ||
| 1446 | cb0 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 1446 | cb0 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
| 1447 | if (!cb0) { | 1447 | if (!cb0) { |
| 1448 | ehea_error("no mem for cb0"); | 1448 | ehea_error("no mem for cb0"); |
| 1449 | ret = -ENOMEM; | 1449 | ret = -ENOMEM; |
| @@ -1501,7 +1501,7 @@ static void ehea_promiscuous(struct net_device *dev, int enable) | |||
| 1501 | if ((enable && port->promisc) || (!enable && !port->promisc)) | 1501 | if ((enable && port->promisc) || (!enable && !port->promisc)) |
| 1502 | return; | 1502 | return; |
| 1503 | 1503 | ||
| 1504 | cb7 = kzalloc(H_CB_ALIGNMENT, GFP_ATOMIC); | 1504 | cb7 = kzalloc(PAGE_SIZE, GFP_ATOMIC); |
| 1505 | if (!cb7) { | 1505 | if (!cb7) { |
| 1506 | ehea_error("no mem for cb7"); | 1506 | ehea_error("no mem for cb7"); |
| 1507 | goto out; | 1507 | goto out; |
| @@ -1870,7 +1870,7 @@ static void ehea_vlan_rx_register(struct net_device *dev, | |||
| 1870 | 1870 | ||
| 1871 | port->vgrp = grp; | 1871 | port->vgrp = grp; |
| 1872 | 1872 | ||
| 1873 | cb1 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 1873 | cb1 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
| 1874 | if (!cb1) { | 1874 | if (!cb1) { |
| 1875 | ehea_error("no mem for cb1"); | 1875 | ehea_error("no mem for cb1"); |
| 1876 | goto out; | 1876 | goto out; |
| @@ -1899,7 +1899,7 @@ static void ehea_vlan_rx_add_vid(struct net_device *dev, unsigned short vid) | |||
| 1899 | int index; | 1899 | int index; |
| 1900 | u64 hret; | 1900 | u64 hret; |
| 1901 | 1901 | ||
| 1902 | cb1 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 1902 | cb1 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
| 1903 | if (!cb1) { | 1903 | if (!cb1) { |
| 1904 | ehea_error("no mem for cb1"); | 1904 | ehea_error("no mem for cb1"); |
| 1905 | goto out; | 1905 | goto out; |
| @@ -1935,7 +1935,7 @@ static void ehea_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) | |||
| 1935 | if (port->vgrp) | 1935 | if (port->vgrp) |
| 1936 | port->vgrp->vlan_devices[vid] = NULL; | 1936 | port->vgrp->vlan_devices[vid] = NULL; |
| 1937 | 1937 | ||
| 1938 | cb1 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 1938 | cb1 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
| 1939 | if (!cb1) { | 1939 | if (!cb1) { |
| 1940 | ehea_error("no mem for cb1"); | 1940 | ehea_error("no mem for cb1"); |
| 1941 | goto out; | 1941 | goto out; |
| @@ -1968,7 +1968,7 @@ int ehea_activate_qp(struct ehea_adapter *adapter, struct ehea_qp *qp) | |||
| 1968 | u64 dummy64 = 0; | 1968 | u64 dummy64 = 0; |
| 1969 | struct hcp_modify_qp_cb0* cb0; | 1969 | struct hcp_modify_qp_cb0* cb0; |
| 1970 | 1970 | ||
| 1971 | cb0 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 1971 | cb0 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
| 1972 | if (!cb0) { | 1972 | if (!cb0) { |
| 1973 | ret = -ENOMEM; | 1973 | ret = -ENOMEM; |
| 1974 | goto out; | 1974 | goto out; |
| @@ -2269,7 +2269,7 @@ int ehea_sense_adapter_attr(struct ehea_adapter *adapter) | |||
| 2269 | u64 hret; | 2269 | u64 hret; |
| 2270 | int ret; | 2270 | int ret; |
| 2271 | 2271 | ||
| 2272 | cb = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 2272 | cb = kzalloc(PAGE_SIZE, GFP_KERNEL); |
| 2273 | if (!cb) { | 2273 | if (!cb) { |
| 2274 | ret = -ENOMEM; | 2274 | ret = -ENOMEM; |
| 2275 | goto out; | 2275 | goto out; |
| @@ -2340,7 +2340,7 @@ static int ehea_setup_single_port(struct ehea_port *port, | |||
| 2340 | goto out; | 2340 | goto out; |
| 2341 | 2341 | ||
| 2342 | /* Enable Jumbo frames */ | 2342 | /* Enable Jumbo frames */ |
| 2343 | cb4 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL); | 2343 | cb4 = kzalloc(PAGE_SIZE, GFP_KERNEL); |
| 2344 | if (!cb4) { | 2344 | if (!cb4) { |
| 2345 | ehea_error("no mem for cb4"); | 2345 | ehea_error("no mem for cb4"); |
| 2346 | } else { | 2346 | } else { |
diff --git a/drivers/net/ehea/ehea_phyp.c b/drivers/net/ehea/ehea_phyp.c index 0b51a8cea077..0cfc2bc1a27b 100644 --- a/drivers/net/ehea/ehea_phyp.c +++ b/drivers/net/ehea/ehea_phyp.c | |||
| @@ -506,7 +506,7 @@ u64 ehea_h_register_rpage_mr(const u64 adapter_handle, const u64 mr_handle, | |||
| 506 | const u8 pagesize, const u8 queue_type, | 506 | const u8 pagesize, const u8 queue_type, |
| 507 | const u64 log_pageaddr, const u64 count) | 507 | const u64 log_pageaddr, const u64 count) |
| 508 | { | 508 | { |
| 509 | if ((count > 1) && (log_pageaddr & 0xfff)) { | 509 | if ((count > 1) && (log_pageaddr & ~PAGE_MASK)) { |
| 510 | ehea_error("not on pageboundary"); | 510 | ehea_error("not on pageboundary"); |
| 511 | return H_PARAMETER; | 511 | return H_PARAMETER; |
| 512 | } | 512 | } |
diff --git a/drivers/net/ehea/ehea_phyp.h b/drivers/net/ehea/ehea_phyp.h index fa51e3b5bb05..919f94b75933 100644 --- a/drivers/net/ehea/ehea_phyp.h +++ b/drivers/net/ehea/ehea_phyp.h | |||
| @@ -81,14 +81,16 @@ static inline u32 get_longbusy_msecs(int long_busy_ret_code) | |||
| 81 | static inline void hcp_epas_ctor(struct h_epas *epas, u64 paddr_kernel, | 81 | static inline void hcp_epas_ctor(struct h_epas *epas, u64 paddr_kernel, |
| 82 | u64 paddr_user) | 82 | u64 paddr_user) |
| 83 | { | 83 | { |
| 84 | epas->kernel.addr = ioremap(paddr_kernel, PAGE_SIZE); | 84 | /* To support 64k pages we must round to 64k page boundary */ |
| 85 | epas->kernel.addr = ioremap((paddr_kernel & PAGE_MASK), PAGE_SIZE) + | ||
| 86 | (paddr_kernel & ~PAGE_MASK); | ||
| 85 | epas->user.addr = paddr_user; | 87 | epas->user.addr = paddr_user; |
| 86 | } | 88 | } |
| 87 | 89 | ||
| 88 | static inline void hcp_epas_dtor(struct h_epas *epas) | 90 | static inline void hcp_epas_dtor(struct h_epas *epas) |
| 89 | { | 91 | { |
| 90 | if (epas->kernel.addr) | 92 | if (epas->kernel.addr) |
| 91 | iounmap(epas->kernel.addr); | 93 | iounmap((void __iomem*)((u64)epas->kernel.addr & PAGE_MASK)); |
| 92 | 94 | ||
| 93 | epas->user.addr = 0; | 95 | epas->user.addr = 0; |
| 94 | epas->kernel.addr = 0; | 96 | epas->kernel.addr = 0; |
diff --git a/drivers/net/ehea/ehea_qmr.c b/drivers/net/ehea/ehea_qmr.c index 3e1862326c88..72ef7bde3346 100644 --- a/drivers/net/ehea/ehea_qmr.c +++ b/drivers/net/ehea/ehea_qmr.c | |||
| @@ -209,11 +209,11 @@ int ehea_destroy_cq(struct ehea_cq *cq) | |||
| 209 | { | 209 | { |
| 210 | u64 adapter_handle, hret; | 210 | u64 adapter_handle, hret; |
| 211 | 211 | ||
| 212 | adapter_handle = cq->adapter->handle; | ||
| 213 | |||
| 214 | if (!cq) | 212 | if (!cq) |
| 215 | return 0; | 213 | return 0; |
| 216 | 214 | ||
| 215 | adapter_handle = cq->adapter->handle; | ||
| 216 | |||
| 217 | /* deregister all previous registered pages */ | 217 | /* deregister all previous registered pages */ |
| 218 | hret = ehea_h_free_resource(adapter_handle, cq->fw_handle); | 218 | hret = ehea_h_free_resource(adapter_handle, cq->fw_handle); |
| 219 | if (hret != H_SUCCESS) { | 219 | if (hret != H_SUCCESS) { |
| @@ -512,7 +512,7 @@ int ehea_reg_mr_adapter(struct ehea_adapter *adapter) | |||
| 512 | 512 | ||
| 513 | start = KERNELBASE; | 513 | start = KERNELBASE; |
| 514 | end = (u64)high_memory; | 514 | end = (u64)high_memory; |
| 515 | nr_pages = (end - start) / PAGE_SIZE; | 515 | nr_pages = (end - start) / EHEA_PAGESIZE; |
| 516 | 516 | ||
| 517 | pt = kzalloc(PAGE_SIZE, GFP_KERNEL); | 517 | pt = kzalloc(PAGE_SIZE, GFP_KERNEL); |
| 518 | if (!pt) { | 518 | if (!pt) { |
| @@ -538,9 +538,9 @@ int ehea_reg_mr_adapter(struct ehea_adapter *adapter) | |||
| 538 | if (nr_pages > 1) { | 538 | if (nr_pages > 1) { |
| 539 | u64 num_pages = min(nr_pages, (u64)512); | 539 | u64 num_pages = min(nr_pages, (u64)512); |
| 540 | for (i = 0; i < num_pages; i++) | 540 | for (i = 0; i < num_pages; i++) |
| 541 | pt[i] = virt_to_abs((void*)(((u64)start) | 541 | pt[i] = virt_to_abs((void*)(((u64)start) + |
| 542 | + ((k++) * | 542 | ((k++) * |
| 543 | PAGE_SIZE))); | 543 | EHEA_PAGESIZE))); |
| 544 | 544 | ||
| 545 | hret = ehea_h_register_rpage_mr(adapter->handle, | 545 | hret = ehea_h_register_rpage_mr(adapter->handle, |
| 546 | adapter->mr.handle, 0, | 546 | adapter->mr.handle, 0, |
| @@ -548,8 +548,9 @@ int ehea_reg_mr_adapter(struct ehea_adapter *adapter) | |||
| 548 | num_pages); | 548 | num_pages); |
| 549 | nr_pages -= num_pages; | 549 | nr_pages -= num_pages; |
| 550 | } else { | 550 | } else { |
| 551 | u64 abs_adr = virt_to_abs((void*)(((u64)start) | 551 | u64 abs_adr = virt_to_abs((void*)(((u64)start) + |
| 552 | + (k * PAGE_SIZE))); | 552 | (k * EHEA_PAGESIZE))); |
| 553 | |||
| 553 | hret = ehea_h_register_rpage_mr(adapter->handle, | 554 | hret = ehea_h_register_rpage_mr(adapter->handle, |
| 554 | adapter->mr.handle, 0, | 555 | adapter->mr.handle, 0, |
| 555 | 0, abs_adr,1); | 556 | 0, abs_adr,1); |
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_leds.c b/drivers/net/wireless/bcm43xx/bcm43xx_leds.c index 2ddbec6bf15b..7d383a27b927 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_leds.c +++ b/drivers/net/wireless/bcm43xx/bcm43xx_leds.c | |||
| @@ -189,20 +189,24 @@ void bcm43xx_leds_update(struct bcm43xx_private *bcm, int activity) | |||
| 189 | case BCM43xx_LED_INACTIVE: | 189 | case BCM43xx_LED_INACTIVE: |
| 190 | continue; | 190 | continue; |
| 191 | case BCM43xx_LED_OFF: | 191 | case BCM43xx_LED_OFF: |
| 192 | case BCM43xx_LED_BCM4303_3: | ||
| 192 | break; | 193 | break; |
| 193 | case BCM43xx_LED_ON: | 194 | case BCM43xx_LED_ON: |
| 194 | turn_on = 1; | 195 | turn_on = 1; |
| 195 | break; | 196 | break; |
| 196 | case BCM43xx_LED_ACTIVITY: | 197 | case BCM43xx_LED_ACTIVITY: |
| 198 | case BCM43xx_LED_BCM4303_0: | ||
| 197 | turn_on = activity; | 199 | turn_on = activity; |
| 198 | break; | 200 | break; |
| 199 | case BCM43xx_LED_RADIO_ALL: | 201 | case BCM43xx_LED_RADIO_ALL: |
| 200 | turn_on = radio->enabled; | 202 | turn_on = radio->enabled; |
| 201 | break; | 203 | break; |
| 202 | case BCM43xx_LED_RADIO_A: | 204 | case BCM43xx_LED_RADIO_A: |
| 205 | case BCM43xx_LED_BCM4303_2: | ||
| 203 | turn_on = (radio->enabled && phy->type == BCM43xx_PHYTYPE_A); | 206 | turn_on = (radio->enabled && phy->type == BCM43xx_PHYTYPE_A); |
| 204 | break; | 207 | break; |
| 205 | case BCM43xx_LED_RADIO_B: | 208 | case BCM43xx_LED_RADIO_B: |
| 209 | case BCM43xx_LED_BCM4303_1: | ||
| 206 | turn_on = (radio->enabled && | 210 | turn_on = (radio->enabled && |
| 207 | (phy->type == BCM43xx_PHYTYPE_B || | 211 | (phy->type == BCM43xx_PHYTYPE_B || |
| 208 | phy->type == BCM43xx_PHYTYPE_G)); | 212 | phy->type == BCM43xx_PHYTYPE_G)); |
| @@ -257,7 +261,8 @@ void bcm43xx_leds_update(struct bcm43xx_private *bcm, int activity) | |||
| 257 | continue; | 261 | continue; |
| 258 | #endif /* CONFIG_BCM43XX_DEBUG */ | 262 | #endif /* CONFIG_BCM43XX_DEBUG */ |
| 259 | default: | 263 | default: |
| 260 | assert(0); | 264 | dprintkl(KERN_INFO PFX "Bad value in leds_update," |
| 265 | " led->behaviour: 0x%x\n", led->behaviour); | ||
| 261 | }; | 266 | }; |
| 262 | 267 | ||
| 263 | if (led->activelow) | 268 | if (led->activelow) |
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_leds.h b/drivers/net/wireless/bcm43xx/bcm43xx_leds.h index d3716cf3aebc..811e14a81198 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_leds.h +++ b/drivers/net/wireless/bcm43xx/bcm43xx_leds.h | |||
| @@ -46,6 +46,12 @@ enum { /* LED behaviour values */ | |||
| 46 | BCM43xx_LED_TEST_BLINKSLOW, | 46 | BCM43xx_LED_TEST_BLINKSLOW, |
| 47 | BCM43xx_LED_TEST_BLINKMEDIUM, | 47 | BCM43xx_LED_TEST_BLINKMEDIUM, |
| 48 | BCM43xx_LED_TEST_BLINKFAST, | 48 | BCM43xx_LED_TEST_BLINKFAST, |
| 49 | |||
| 50 | /* Misc values for BCM4303 */ | ||
| 51 | BCM43xx_LED_BCM4303_0 = 0x2B, | ||
| 52 | BCM43xx_LED_BCM4303_1 = 0x78, | ||
| 53 | BCM43xx_LED_BCM4303_2 = 0x2E, | ||
| 54 | BCM43xx_LED_BCM4303_3 = 0x19, | ||
| 49 | }; | 55 | }; |
| 50 | 56 | ||
| 51 | int bcm43xx_leds_init(struct bcm43xx_private *bcm); | 57 | int bcm43xx_leds_init(struct bcm43xx_private *bcm); |
diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.c b/drivers/net/wireless/bcm43xx/bcm43xx_main.c index a94c6d8826f8..65edb56107fd 100644 --- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c +++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.c | |||
| @@ -3163,9 +3163,11 @@ static int estimate_periodic_work_badness(unsigned int state) | |||
| 3163 | static void bcm43xx_periodic_work_handler(void *d) | 3163 | static void bcm43xx_periodic_work_handler(void *d) |
| 3164 | { | 3164 | { |
| 3165 | struct bcm43xx_private *bcm = d; | 3165 | struct bcm43xx_private *bcm = d; |
| 3166 | struct net_device *net_dev = bcm->net_dev; | ||
| 3166 | unsigned long flags; | 3167 | unsigned long flags; |
| 3167 | u32 savedirqs = 0; | 3168 | u32 savedirqs = 0; |
| 3168 | int badness; | 3169 | int badness; |
| 3170 | unsigned long orig_trans_start = 0; | ||
| 3169 | 3171 | ||
| 3170 | mutex_lock(&bcm->mutex); | 3172 | mutex_lock(&bcm->mutex); |
| 3171 | badness = estimate_periodic_work_badness(bcm->periodic_state); | 3173 | badness = estimate_periodic_work_badness(bcm->periodic_state); |
| @@ -3173,7 +3175,18 @@ static void bcm43xx_periodic_work_handler(void *d) | |||
| 3173 | /* Periodic work will take a long time, so we want it to | 3175 | /* Periodic work will take a long time, so we want it to |
| 3174 | * be preemtible. | 3176 | * be preemtible. |
| 3175 | */ | 3177 | */ |
| 3176 | netif_tx_disable(bcm->net_dev); | 3178 | |
| 3179 | netif_tx_lock_bh(net_dev); | ||
| 3180 | /* We must fake a started transmission here, as we are going to | ||
| 3181 | * disable TX. If we wouldn't fake a TX, it would be possible to | ||
| 3182 | * trigger the netdev watchdog, if the last real TX is already | ||
| 3183 | * some time on the past (slightly less than 5secs) | ||
| 3184 | */ | ||
| 3185 | orig_trans_start = net_dev->trans_start; | ||
| 3186 | net_dev->trans_start = jiffies; | ||
| 3187 | netif_stop_queue(net_dev); | ||
| 3188 | netif_tx_unlock_bh(net_dev); | ||
| 3189 | |||
| 3177 | spin_lock_irqsave(&bcm->irq_lock, flags); | 3190 | spin_lock_irqsave(&bcm->irq_lock, flags); |
| 3178 | bcm43xx_mac_suspend(bcm); | 3191 | bcm43xx_mac_suspend(bcm); |
| 3179 | if (bcm43xx_using_pio(bcm)) | 3192 | if (bcm43xx_using_pio(bcm)) |
| @@ -3198,6 +3211,7 @@ static void bcm43xx_periodic_work_handler(void *d) | |||
| 3198 | bcm43xx_pio_thaw_txqueues(bcm); | 3211 | bcm43xx_pio_thaw_txqueues(bcm); |
| 3199 | bcm43xx_mac_enable(bcm); | 3212 | bcm43xx_mac_enable(bcm); |
| 3200 | netif_wake_queue(bcm->net_dev); | 3213 | netif_wake_queue(bcm->net_dev); |
| 3214 | net_dev->trans_start = orig_trans_start; | ||
| 3201 | } | 3215 | } |
| 3202 | mmiowb(); | 3216 | mmiowb(); |
| 3203 | spin_unlock_irqrestore(&bcm->irq_lock, flags); | 3217 | spin_unlock_irqrestore(&bcm->irq_lock, flags); |
diff --git a/drivers/net/wireless/hostap/hostap_plx.c b/drivers/net/wireless/hostap/hostap_plx.c index 6dfa041be66d..bc81b13a5a2a 100644 --- a/drivers/net/wireless/hostap/hostap_plx.c +++ b/drivers/net/wireless/hostap/hostap_plx.c | |||
| @@ -364,7 +364,7 @@ static int prism2_plx_check_cis(void __iomem *attr_mem, int attr_len, | |||
| 364 | 364 | ||
| 365 | pos = 0; | 365 | pos = 0; |
| 366 | while (pos < CIS_MAX_LEN - 1 && cis[pos] != CISTPL_END) { | 366 | while (pos < CIS_MAX_LEN - 1 && cis[pos] != CISTPL_END) { |
| 367 | if (pos + cis[pos + 1] >= CIS_MAX_LEN) | 367 | if (pos + 2 + cis[pos + 1] > CIS_MAX_LEN) |
| 368 | goto cis_error; | 368 | goto cis_error; |
| 369 | 369 | ||
| 370 | switch (cis[pos]) { | 370 | switch (cis[pos]) { |
| @@ -391,7 +391,7 @@ static int prism2_plx_check_cis(void __iomem *attr_mem, int attr_len, | |||
| 391 | break; | 391 | break; |
| 392 | 392 | ||
| 393 | case CISTPL_MANFID: | 393 | case CISTPL_MANFID: |
| 394 | if (cis[pos + 1] < 5) | 394 | if (cis[pos + 1] < 4) |
| 395 | goto cis_error; | 395 | goto cis_error; |
| 396 | manfid1 = cis[pos + 2] + (cis[pos + 3] << 8); | 396 | manfid1 = cis[pos + 2] + (cis[pos + 3] << 8); |
| 397 | manfid2 = cis[pos + 4] + (cis[pos + 5] << 8); | 397 | manfid2 = cis[pos + 4] + (cis[pos + 5] << 8); |
