diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-13 13:38:12 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-13 13:38:12 -0400 |
commit | 2f2c779583e9646097b57599f8efeb8eca7bd654 (patch) | |
tree | aa7c88eb4f4deb668cba56e6f1fddd8dcc5006cf | |
parent | 2897c684d1d5140e0e0302e73660c7cb97981b27 (diff) | |
parent | 3c09e2647b5e1f1f9fd383971468823c2505e1b0 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (30 commits)
ctcm: rename READ/WRITE defines to avoid redefinitions
claw: rename READ/WRITE defines to avoid redefinitions
phylib: available for any speed ethernet
can: add limit for nframes and clean up signed/unsigned variables
pkt_sched: Check .walk and .leaf class handlers
pkt_sched: Fix sch_sfq vs tc_modify_qdisc oops
caif-spi: Bugfix SPI_DATA_POS settings were inverted.
caif: Bugfix - Increase default headroom size for control channel.
net: make netpoll_rx return bool for !CONFIG_NETPOLL
Bluetooth: Use 3-DH5 payload size for default ERTM max PDU size
Bluetooth: Fix incorrect setting of remote_tx_win for L2CAP ERTM
Bluetooth: Change default L2CAP ERTM retransmit timeout
Bluetooth: Fix endianness issue with L2CAP MPS configuration
net: Use NET_XMIT_SUCCESS where possible.
isdn: mISDN: call pci_disable_device() if pci_probe() failed
isdn: avm: call pci_disable_device() if pci_probe() failed
isdn: avm: call pci_disable_device() if pci_probe() failed
usbnet: rx_submit() should return an error code.
pkt_sched: Add some basic qdisc class ops verification. Was: [PATCH] sfq: add dummy bind/unbind handles
pkt_sched: sch_sfq: Add dummy unbind_tcf and put handles. Was: [PATCH] sfq: add dummy bind/unbind handles
...
43 files changed, 428 insertions, 391 deletions
diff --git a/drivers/isdn/hardware/avm/c4.c b/drivers/isdn/hardware/avm/c4.c index 7715d3242ec8..d3530f6e8115 100644 --- a/drivers/isdn/hardware/avm/c4.c +++ b/drivers/isdn/hardware/avm/c4.c | |||
@@ -1273,6 +1273,7 @@ static int __devinit c4_probe(struct pci_dev *dev, | |||
1273 | if (retval != 0) { | 1273 | if (retval != 0) { |
1274 | printk(KERN_ERR "c4: no AVM-C%d at i/o %#x, irq %d detected, mem %#x\n", | 1274 | printk(KERN_ERR "c4: no AVM-C%d at i/o %#x, irq %d detected, mem %#x\n", |
1275 | nr, param.port, param.irq, param.membase); | 1275 | nr, param.port, param.irq, param.membase); |
1276 | pci_disable_device(dev); | ||
1276 | return -ENODEV; | 1277 | return -ENODEV; |
1277 | } | 1278 | } |
1278 | return 0; | 1279 | return 0; |
diff --git a/drivers/isdn/hardware/avm/t1pci.c b/drivers/isdn/hardware/avm/t1pci.c index 5a3f83098018..a79eb5afb92d 100644 --- a/drivers/isdn/hardware/avm/t1pci.c +++ b/drivers/isdn/hardware/avm/t1pci.c | |||
@@ -210,6 +210,7 @@ static int __devinit t1pci_probe(struct pci_dev *dev, | |||
210 | if (retval != 0) { | 210 | if (retval != 0) { |
211 | printk(KERN_ERR "t1pci: no AVM-T1-PCI at i/o %#x, irq %d detected, mem %#x\n", | 211 | printk(KERN_ERR "t1pci: no AVM-T1-PCI at i/o %#x, irq %d detected, mem %#x\n", |
212 | param.port, param.irq, param.membase); | 212 | param.port, param.irq, param.membase); |
213 | pci_disable_device(dev); | ||
213 | return -ENODEV; | 214 | return -ENODEV; |
214 | } | 215 | } |
215 | return 0; | 216 | return 0; |
diff --git a/drivers/isdn/hardware/mISDN/mISDNinfineon.c b/drivers/isdn/hardware/mISDN/mISDNinfineon.c index d2dd61d65d51..af25e1f3efd4 100644 --- a/drivers/isdn/hardware/mISDN/mISDNinfineon.c +++ b/drivers/isdn/hardware/mISDN/mISDNinfineon.c | |||
@@ -1094,6 +1094,7 @@ inf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1094 | pr_info("mISDN: do not have informations about adapter at %s\n", | 1094 | pr_info("mISDN: do not have informations about adapter at %s\n", |
1095 | pci_name(pdev)); | 1095 | pci_name(pdev)); |
1096 | kfree(card); | 1096 | kfree(card); |
1097 | pci_disable_device(pdev); | ||
1097 | return -EINVAL; | 1098 | return -EINVAL; |
1098 | } else | 1099 | } else |
1099 | pr_notice("mISDN: found adapter %s at %s\n", | 1100 | pr_notice("mISDN: found adapter %s at %s\n", |
@@ -1103,7 +1104,7 @@ inf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1103 | pci_set_drvdata(pdev, card); | 1104 | pci_set_drvdata(pdev, card); |
1104 | err = setup_instance(card); | 1105 | err = setup_instance(card); |
1105 | if (err) { | 1106 | if (err) { |
1106 | pci_disable_device(card->pdev); | 1107 | pci_disable_device(pdev); |
1107 | kfree(card); | 1108 | kfree(card); |
1108 | pci_set_drvdata(pdev, NULL); | 1109 | pci_set_drvdata(pdev, NULL); |
1109 | } else if (ent->driver_data == INF_SCT_1) { | 1110 | } else if (ent->driver_data == INF_SCT_1) { |
@@ -1114,6 +1115,7 @@ inf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1114 | sc = kzalloc(sizeof(struct inf_hw), GFP_KERNEL); | 1115 | sc = kzalloc(sizeof(struct inf_hw), GFP_KERNEL); |
1115 | if (!sc) { | 1116 | if (!sc) { |
1116 | release_card(card); | 1117 | release_card(card); |
1118 | pci_disable_device(pdev); | ||
1117 | return -ENOMEM; | 1119 | return -ENOMEM; |
1118 | } | 1120 | } |
1119 | sc->irq = card->irq; | 1121 | sc->irq = card->irq; |
@@ -1121,6 +1123,7 @@ inf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1121 | sc->ci = card->ci + i; | 1123 | sc->ci = card->ci + i; |
1122 | err = setup_instance(sc); | 1124 | err = setup_instance(sc); |
1123 | if (err) { | 1125 | if (err) { |
1126 | pci_disable_device(pdev); | ||
1124 | kfree(sc); | 1127 | kfree(sc); |
1125 | release_card(card); | 1128 | release_card(card); |
1126 | break; | 1129 | break; |
diff --git a/drivers/net/caif/caif_spi_slave.c b/drivers/net/caif/caif_spi_slave.c index 077ccf840edf..2111dbfea6fe 100644 --- a/drivers/net/caif/caif_spi_slave.c +++ b/drivers/net/caif/caif_spi_slave.c | |||
@@ -22,13 +22,13 @@ | |||
22 | #include <net/caif/caif_spi.h> | 22 | #include <net/caif/caif_spi.h> |
23 | 23 | ||
24 | #ifndef CONFIG_CAIF_SPI_SYNC | 24 | #ifndef CONFIG_CAIF_SPI_SYNC |
25 | #define SPI_DATA_POS SPI_CMD_SZ | 25 | #define SPI_DATA_POS 0 |
26 | static inline int forward_to_spi_cmd(struct cfspi *cfspi) | 26 | static inline int forward_to_spi_cmd(struct cfspi *cfspi) |
27 | { | 27 | { |
28 | return cfspi->rx_cpck_len; | 28 | return cfspi->rx_cpck_len; |
29 | } | 29 | } |
30 | #else | 30 | #else |
31 | #define SPI_DATA_POS 0 | 31 | #define SPI_DATA_POS SPI_CMD_SZ |
32 | static inline int forward_to_spi_cmd(struct cfspi *cfspi) | 32 | static inline int forward_to_spi_cmd(struct cfspi *cfspi) |
33 | { | 33 | { |
34 | return 0; | 34 | return 0; |
diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig index a527e37728cd..eb799b36c86a 100644 --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig | |||
@@ -5,7 +5,7 @@ | |||
5 | menuconfig PHYLIB | 5 | menuconfig PHYLIB |
6 | tristate "PHY Device support and infrastructure" | 6 | tristate "PHY Device support and infrastructure" |
7 | depends on !S390 | 7 | depends on !S390 |
8 | depends on NET_ETHERNET | 8 | depends on NETDEVICES |
9 | help | 9 | help |
10 | Ethernet controllers are usually attached to PHY | 10 | Ethernet controllers are usually attached to PHY |
11 | devices. This option provides infrastructure for | 11 | devices. This option provides infrastructure for |
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 5130db8f5c4e..1bb16cb79433 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c | |||
@@ -301,7 +301,7 @@ EXPORT_SYMBOL(phy_ethtool_gset); | |||
301 | /** | 301 | /** |
302 | * phy_mii_ioctl - generic PHY MII ioctl interface | 302 | * phy_mii_ioctl - generic PHY MII ioctl interface |
303 | * @phydev: the phy_device struct | 303 | * @phydev: the phy_device struct |
304 | * @mii_data: MII ioctl data | 304 | * @ifr: &struct ifreq for socket ioctl's |
305 | * @cmd: ioctl cmd to execute | 305 | * @cmd: ioctl cmd to execute |
306 | * | 306 | * |
307 | * Note that this function is currently incompatible with the | 307 | * Note that this function is currently incompatible with the |
diff --git a/drivers/net/qlcnic/qlcnic_main.c b/drivers/net/qlcnic/qlcnic_main.c index b9615bd745ea..bf6d87adda4f 100644 --- a/drivers/net/qlcnic/qlcnic_main.c +++ b/drivers/net/qlcnic/qlcnic_main.c | |||
@@ -473,48 +473,58 @@ qlcnic_cleanup_pci_map(struct qlcnic_adapter *adapter) | |||
473 | static int | 473 | static int |
474 | qlcnic_init_pci_info(struct qlcnic_adapter *adapter) | 474 | qlcnic_init_pci_info(struct qlcnic_adapter *adapter) |
475 | { | 475 | { |
476 | struct qlcnic_pci_info pci_info[QLCNIC_MAX_PCI_FUNC]; | 476 | struct qlcnic_pci_info *pci_info; |
477 | int i, ret = 0, err; | 477 | int i, ret = 0, err; |
478 | u8 pfn; | 478 | u8 pfn; |
479 | 479 | ||
480 | if (!adapter->npars) | 480 | pci_info = kcalloc(QLCNIC_MAX_PCI_FUNC, sizeof(*pci_info), GFP_KERNEL); |
481 | adapter->npars = kzalloc(sizeof(struct qlcnic_npar_info) * | 481 | if (!pci_info) |
482 | QLCNIC_MAX_PCI_FUNC, GFP_KERNEL); | ||
483 | if (!adapter->npars) | ||
484 | return -ENOMEM; | 482 | return -ENOMEM; |
485 | 483 | ||
486 | if (!adapter->eswitch) | 484 | adapter->npars = kzalloc(sizeof(struct qlcnic_npar_info) * |
487 | adapter->eswitch = kzalloc(sizeof(struct qlcnic_eswitch) * | 485 | QLCNIC_MAX_PCI_FUNC, GFP_KERNEL); |
486 | if (!adapter->npars) { | ||
487 | err = -ENOMEM; | ||
488 | goto err_pci_info; | ||
489 | } | ||
490 | |||
491 | adapter->eswitch = kzalloc(sizeof(struct qlcnic_eswitch) * | ||
488 | QLCNIC_NIU_MAX_XG_PORTS, GFP_KERNEL); | 492 | QLCNIC_NIU_MAX_XG_PORTS, GFP_KERNEL); |
489 | if (!adapter->eswitch) { | 493 | if (!adapter->eswitch) { |
490 | err = -ENOMEM; | 494 | err = -ENOMEM; |
491 | goto err_eswitch; | 495 | goto err_npars; |
492 | } | 496 | } |
493 | 497 | ||
494 | ret = qlcnic_get_pci_info(adapter, pci_info); | 498 | ret = qlcnic_get_pci_info(adapter, pci_info); |
495 | if (!ret) { | 499 | if (ret) |
496 | for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++) { | 500 | goto err_eswitch; |
497 | pfn = pci_info[i].id; | ||
498 | if (pfn > QLCNIC_MAX_PCI_FUNC) | ||
499 | return QL_STATUS_INVALID_PARAM; | ||
500 | adapter->npars[pfn].active = pci_info[i].active; | ||
501 | adapter->npars[pfn].type = pci_info[i].type; | ||
502 | adapter->npars[pfn].phy_port = pci_info[i].default_port; | ||
503 | adapter->npars[pfn].mac_learning = DEFAULT_MAC_LEARN; | ||
504 | adapter->npars[pfn].min_bw = pci_info[i].tx_min_bw; | ||
505 | adapter->npars[pfn].max_bw = pci_info[i].tx_max_bw; | ||
506 | } | ||
507 | |||
508 | for (i = 0; i < QLCNIC_NIU_MAX_XG_PORTS; i++) | ||
509 | adapter->eswitch[i].flags |= QLCNIC_SWITCH_ENABLE; | ||
510 | 501 | ||
511 | return ret; | 502 | for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++) { |
503 | pfn = pci_info[i].id; | ||
504 | if (pfn > QLCNIC_MAX_PCI_FUNC) | ||
505 | return QL_STATUS_INVALID_PARAM; | ||
506 | adapter->npars[pfn].active = pci_info[i].active; | ||
507 | adapter->npars[pfn].type = pci_info[i].type; | ||
508 | adapter->npars[pfn].phy_port = pci_info[i].default_port; | ||
509 | adapter->npars[pfn].mac_learning = DEFAULT_MAC_LEARN; | ||
510 | adapter->npars[pfn].min_bw = pci_info[i].tx_min_bw; | ||
511 | adapter->npars[pfn].max_bw = pci_info[i].tx_max_bw; | ||
512 | } | 512 | } |
513 | 513 | ||
514 | for (i = 0; i < QLCNIC_NIU_MAX_XG_PORTS; i++) | ||
515 | adapter->eswitch[i].flags |= QLCNIC_SWITCH_ENABLE; | ||
516 | |||
517 | kfree(pci_info); | ||
518 | return 0; | ||
519 | |||
520 | err_eswitch: | ||
514 | kfree(adapter->eswitch); | 521 | kfree(adapter->eswitch); |
515 | adapter->eswitch = NULL; | 522 | adapter->eswitch = NULL; |
516 | err_eswitch: | 523 | err_npars: |
517 | kfree(adapter->npars); | 524 | kfree(adapter->npars); |
525 | adapter->npars = NULL; | ||
526 | err_pci_info: | ||
527 | kfree(pci_info); | ||
518 | 528 | ||
519 | return ret; | 529 | return ret; |
520 | } | 530 | } |
@@ -3361,15 +3371,21 @@ qlcnic_sysfs_read_pci_config(struct file *file, struct kobject *kobj, | |||
3361 | struct device *dev = container_of(kobj, struct device, kobj); | 3371 | struct device *dev = container_of(kobj, struct device, kobj); |
3362 | struct qlcnic_adapter *adapter = dev_get_drvdata(dev); | 3372 | struct qlcnic_adapter *adapter = dev_get_drvdata(dev); |
3363 | struct qlcnic_pci_func_cfg pci_cfg[QLCNIC_MAX_PCI_FUNC]; | 3373 | struct qlcnic_pci_func_cfg pci_cfg[QLCNIC_MAX_PCI_FUNC]; |
3364 | struct qlcnic_pci_info pci_info[QLCNIC_MAX_PCI_FUNC]; | 3374 | struct qlcnic_pci_info *pci_info; |
3365 | int i, ret; | 3375 | int i, ret; |
3366 | 3376 | ||
3367 | if (size != sizeof(pci_cfg)) | 3377 | if (size != sizeof(pci_cfg)) |
3368 | return QL_STATUS_INVALID_PARAM; | 3378 | return QL_STATUS_INVALID_PARAM; |
3369 | 3379 | ||
3380 | pci_info = kcalloc(QLCNIC_MAX_PCI_FUNC, sizeof(*pci_info), GFP_KERNEL); | ||
3381 | if (!pci_info) | ||
3382 | return -ENOMEM; | ||
3383 | |||
3370 | ret = qlcnic_get_pci_info(adapter, pci_info); | 3384 | ret = qlcnic_get_pci_info(adapter, pci_info); |
3371 | if (ret) | 3385 | if (ret) { |
3386 | kfree(pci_info); | ||
3372 | return ret; | 3387 | return ret; |
3388 | } | ||
3373 | 3389 | ||
3374 | for (i = 0; i < QLCNIC_MAX_PCI_FUNC ; i++) { | 3390 | for (i = 0; i < QLCNIC_MAX_PCI_FUNC ; i++) { |
3375 | pci_cfg[i].pci_func = pci_info[i].id; | 3391 | pci_cfg[i].pci_func = pci_info[i].id; |
@@ -3380,8 +3396,8 @@ qlcnic_sysfs_read_pci_config(struct file *file, struct kobject *kobj, | |||
3380 | memcpy(&pci_cfg[i].def_mac_addr, &pci_info[i].mac, ETH_ALEN); | 3396 | memcpy(&pci_cfg[i].def_mac_addr, &pci_info[i].mac, ETH_ALEN); |
3381 | } | 3397 | } |
3382 | memcpy(buf, &pci_cfg, size); | 3398 | memcpy(buf, &pci_cfg, size); |
3399 | kfree(pci_info); | ||
3383 | return size; | 3400 | return size; |
3384 | |||
3385 | } | 3401 | } |
3386 | static struct bin_attribute bin_attr_npar_config = { | 3402 | static struct bin_attribute bin_attr_npar_config = { |
3387 | .attr = {.name = "npar_config", .mode = (S_IRUGO | S_IWUSR)}, | 3403 | .attr = {.name = "npar_config", .mode = (S_IRUGO | S_IWUSR)}, |
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index 7f62e2dea28f..ca7fc9df1ccf 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c | |||
@@ -315,7 +315,7 @@ EXPORT_SYMBOL_GPL(usbnet_defer_kevent); | |||
315 | 315 | ||
316 | static void rx_complete (struct urb *urb); | 316 | static void rx_complete (struct urb *urb); |
317 | 317 | ||
318 | static void rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags) | 318 | static int rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags) |
319 | { | 319 | { |
320 | struct sk_buff *skb; | 320 | struct sk_buff *skb; |
321 | struct skb_data *entry; | 321 | struct skb_data *entry; |
@@ -327,7 +327,7 @@ static void rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags) | |||
327 | netif_dbg(dev, rx_err, dev->net, "no rx skb\n"); | 327 | netif_dbg(dev, rx_err, dev->net, "no rx skb\n"); |
328 | usbnet_defer_kevent (dev, EVENT_RX_MEMORY); | 328 | usbnet_defer_kevent (dev, EVENT_RX_MEMORY); |
329 | usb_free_urb (urb); | 329 | usb_free_urb (urb); |
330 | return; | 330 | return -ENOMEM; |
331 | } | 331 | } |
332 | skb_reserve (skb, NET_IP_ALIGN); | 332 | skb_reserve (skb, NET_IP_ALIGN); |
333 | 333 | ||
@@ -357,6 +357,9 @@ static void rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags) | |||
357 | netif_dbg(dev, ifdown, dev->net, "device gone\n"); | 357 | netif_dbg(dev, ifdown, dev->net, "device gone\n"); |
358 | netif_device_detach (dev->net); | 358 | netif_device_detach (dev->net); |
359 | break; | 359 | break; |
360 | case -EHOSTUNREACH: | ||
361 | retval = -ENOLINK; | ||
362 | break; | ||
360 | default: | 363 | default: |
361 | netif_dbg(dev, rx_err, dev->net, | 364 | netif_dbg(dev, rx_err, dev->net, |
362 | "rx submit, %d\n", retval); | 365 | "rx submit, %d\n", retval); |
@@ -374,6 +377,7 @@ static void rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags) | |||
374 | dev_kfree_skb_any (skb); | 377 | dev_kfree_skb_any (skb); |
375 | usb_free_urb (urb); | 378 | usb_free_urb (urb); |
376 | } | 379 | } |
380 | return retval; | ||
377 | } | 381 | } |
378 | 382 | ||
379 | 383 | ||
@@ -912,6 +916,7 @@ fail_halt: | |||
912 | /* tasklet could resubmit itself forever if memory is tight */ | 916 | /* tasklet could resubmit itself forever if memory is tight */ |
913 | if (test_bit (EVENT_RX_MEMORY, &dev->flags)) { | 917 | if (test_bit (EVENT_RX_MEMORY, &dev->flags)) { |
914 | struct urb *urb = NULL; | 918 | struct urb *urb = NULL; |
919 | int resched = 1; | ||
915 | 920 | ||
916 | if (netif_running (dev->net)) | 921 | if (netif_running (dev->net)) |
917 | urb = usb_alloc_urb (0, GFP_KERNEL); | 922 | urb = usb_alloc_urb (0, GFP_KERNEL); |
@@ -922,10 +927,12 @@ fail_halt: | |||
922 | status = usb_autopm_get_interface(dev->intf); | 927 | status = usb_autopm_get_interface(dev->intf); |
923 | if (status < 0) | 928 | if (status < 0) |
924 | goto fail_lowmem; | 929 | goto fail_lowmem; |
925 | rx_submit (dev, urb, GFP_KERNEL); | 930 | if (rx_submit (dev, urb, GFP_KERNEL) == -ENOLINK) |
931 | resched = 0; | ||
926 | usb_autopm_put_interface(dev->intf); | 932 | usb_autopm_put_interface(dev->intf); |
927 | fail_lowmem: | 933 | fail_lowmem: |
928 | tasklet_schedule (&dev->bh); | 934 | if (resched) |
935 | tasklet_schedule (&dev->bh); | ||
929 | } | 936 | } |
930 | } | 937 | } |
931 | 938 | ||
@@ -1175,8 +1182,11 @@ static void usbnet_bh (unsigned long param) | |||
1175 | // don't refill the queue all at once | 1182 | // don't refill the queue all at once |
1176 | for (i = 0; i < 10 && dev->rxq.qlen < qlen; i++) { | 1183 | for (i = 0; i < 10 && dev->rxq.qlen < qlen; i++) { |
1177 | urb = usb_alloc_urb (0, GFP_ATOMIC); | 1184 | urb = usb_alloc_urb (0, GFP_ATOMIC); |
1178 | if (urb != NULL) | 1185 | if (urb != NULL) { |
1179 | rx_submit (dev, urb, GFP_ATOMIC); | 1186 | if (rx_submit (dev, urb, GFP_ATOMIC) == |
1187 | -ENOLINK) | ||
1188 | return; | ||
1189 | } | ||
1180 | } | 1190 | } |
1181 | if (temp != dev->rxq.qlen) | 1191 | if (temp != dev->rxq.qlen) |
1182 | netif_dbg(dev, link, dev->net, | 1192 | netif_dbg(dev, link, dev->net, |
diff --git a/drivers/net/wan/farsync.c b/drivers/net/wan/farsync.c index ad7719fe6d0a..e050bd65e037 100644 --- a/drivers/net/wan/farsync.c +++ b/drivers/net/wan/farsync.c | |||
@@ -885,20 +885,21 @@ fst_rx_dma_complete(struct fst_card_info *card, struct fst_port_info *port, | |||
885 | * Receive a frame through the DMA | 885 | * Receive a frame through the DMA |
886 | */ | 886 | */ |
887 | static inline void | 887 | static inline void |
888 | fst_rx_dma(struct fst_card_info *card, unsigned char *skb, | 888 | fst_rx_dma(struct fst_card_info *card, dma_addr_t skb, |
889 | unsigned char *mem, int len) | 889 | dma_addr_t mem, int len) |
890 | { | 890 | { |
891 | /* | 891 | /* |
892 | * This routine will setup the DMA and start it | 892 | * This routine will setup the DMA and start it |
893 | */ | 893 | */ |
894 | 894 | ||
895 | dbg(DBG_RX, "In fst_rx_dma %p %p %d\n", skb, mem, len); | 895 | dbg(DBG_RX, "In fst_rx_dma %lx %lx %d\n", |
896 | (unsigned long) skb, (unsigned long) mem, len); | ||
896 | if (card->dmarx_in_progress) { | 897 | if (card->dmarx_in_progress) { |
897 | dbg(DBG_ASS, "In fst_rx_dma while dma in progress\n"); | 898 | dbg(DBG_ASS, "In fst_rx_dma while dma in progress\n"); |
898 | } | 899 | } |
899 | 900 | ||
900 | outl((unsigned long) skb, card->pci_conf + DMAPADR0); /* Copy to here */ | 901 | outl(skb, card->pci_conf + DMAPADR0); /* Copy to here */ |
901 | outl((unsigned long) mem, card->pci_conf + DMALADR0); /* from here */ | 902 | outl(mem, card->pci_conf + DMALADR0); /* from here */ |
902 | outl(len, card->pci_conf + DMASIZ0); /* for this length */ | 903 | outl(len, card->pci_conf + DMASIZ0); /* for this length */ |
903 | outl(0x00000000c, card->pci_conf + DMADPR0); /* In this direction */ | 904 | outl(0x00000000c, card->pci_conf + DMADPR0); /* In this direction */ |
904 | 905 | ||
@@ -1309,8 +1310,8 @@ fst_intr_rx(struct fst_card_info *card, struct fst_port_info *port) | |||
1309 | card->dma_port_rx = port; | 1310 | card->dma_port_rx = port; |
1310 | card->dma_len_rx = len; | 1311 | card->dma_len_rx = len; |
1311 | card->dma_rxpos = rxp; | 1312 | card->dma_rxpos = rxp; |
1312 | fst_rx_dma(card, (char *) card->rx_dma_handle_card, | 1313 | fst_rx_dma(card, card->rx_dma_handle_card, |
1313 | (char *) BUF_OFFSET(rxBuffer[pi][rxp][0]), len); | 1314 | BUF_OFFSET(rxBuffer[pi][rxp][0]), len); |
1314 | } | 1315 | } |
1315 | if (rxp != port->rxpos) { | 1316 | if (rxp != port->rxpos) { |
1316 | dbg(DBG_ASS, "About to increment rxpos by more than 1\n"); | 1317 | dbg(DBG_ASS, "About to increment rxpos by more than 1\n"); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-1000.c b/drivers/net/wireless/iwlwifi/iwl-1000.c index 8848333bc3a9..fec026212326 100644 --- a/drivers/net/wireless/iwlwifi/iwl-1000.c +++ b/drivers/net/wireless/iwlwifi/iwl-1000.c | |||
@@ -260,7 +260,7 @@ struct iwl_cfg iwl1000_bgn_cfg = { | |||
260 | .shadow_ram_support = false, | 260 | .shadow_ram_support = false, |
261 | .ht_greenfield_support = true, | 261 | .ht_greenfield_support = true, |
262 | .led_compensation = 51, | 262 | .led_compensation = 51, |
263 | .use_rts_for_ht = true, /* use rts/cts protection */ | 263 | .use_rts_for_aggregation = true, /* use rts/cts protection */ |
264 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 264 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
265 | .support_ct_kill_exit = true, | 265 | .support_ct_kill_exit = true, |
266 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF, | 266 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-3945.c b/drivers/net/wireless/iwlwifi/iwl-3945.c index a07310fefcf2..6950a783913b 100644 --- a/drivers/net/wireless/iwlwifi/iwl-3945.c +++ b/drivers/net/wireless/iwlwifi/iwl-3945.c | |||
@@ -769,22 +769,6 @@ void iwl3945_hw_build_tx_cmd_rate(struct iwl_priv *priv, | |||
769 | rts_retry_limit = data_retry_limit; | 769 | rts_retry_limit = data_retry_limit; |
770 | tx_cmd->rts_retry_limit = rts_retry_limit; | 770 | tx_cmd->rts_retry_limit = rts_retry_limit; |
771 | 771 | ||
772 | if (ieee80211_is_mgmt(fc)) { | ||
773 | switch (fc & cpu_to_le16(IEEE80211_FCTL_STYPE)) { | ||
774 | case cpu_to_le16(IEEE80211_STYPE_AUTH): | ||
775 | case cpu_to_le16(IEEE80211_STYPE_DEAUTH): | ||
776 | case cpu_to_le16(IEEE80211_STYPE_ASSOC_REQ): | ||
777 | case cpu_to_le16(IEEE80211_STYPE_REASSOC_REQ): | ||
778 | if (tx_flags & TX_CMD_FLG_RTS_MSK) { | ||
779 | tx_flags &= ~TX_CMD_FLG_RTS_MSK; | ||
780 | tx_flags |= TX_CMD_FLG_CTS_MSK; | ||
781 | } | ||
782 | break; | ||
783 | default: | ||
784 | break; | ||
785 | } | ||
786 | } | ||
787 | |||
788 | tx_cmd->rate = rate; | 772 | tx_cmd->rate = rate; |
789 | tx_cmd->tx_flags = tx_flags; | 773 | tx_cmd->tx_flags = tx_flags; |
790 | 774 | ||
@@ -2717,7 +2701,7 @@ static struct iwl_lib_ops iwl3945_lib = { | |||
2717 | static struct iwl_hcmd_utils_ops iwl3945_hcmd_utils = { | 2701 | static struct iwl_hcmd_utils_ops iwl3945_hcmd_utils = { |
2718 | .get_hcmd_size = iwl3945_get_hcmd_size, | 2702 | .get_hcmd_size = iwl3945_get_hcmd_size, |
2719 | .build_addsta_hcmd = iwl3945_build_addsta_hcmd, | 2703 | .build_addsta_hcmd = iwl3945_build_addsta_hcmd, |
2720 | .rts_tx_cmd_flag = iwlcore_rts_tx_cmd_flag, | 2704 | .tx_cmd_protection = iwlcore_tx_cmd_protection, |
2721 | .request_scan = iwl3945_request_scan, | 2705 | .request_scan = iwl3945_request_scan, |
2722 | }; | 2706 | }; |
2723 | 2707 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c index d6531ad3906a..d6da356608fa 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965.c +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c | |||
@@ -2223,7 +2223,7 @@ static struct iwl_hcmd_utils_ops iwl4965_hcmd_utils = { | |||
2223 | .build_addsta_hcmd = iwl4965_build_addsta_hcmd, | 2223 | .build_addsta_hcmd = iwl4965_build_addsta_hcmd, |
2224 | .chain_noise_reset = iwl4965_chain_noise_reset, | 2224 | .chain_noise_reset = iwl4965_chain_noise_reset, |
2225 | .gain_computation = iwl4965_gain_computation, | 2225 | .gain_computation = iwl4965_gain_computation, |
2226 | .rts_tx_cmd_flag = iwlcore_rts_tx_cmd_flag, | 2226 | .tx_cmd_protection = iwlcore_tx_cmd_protection, |
2227 | .calc_rssi = iwl4965_calc_rssi, | 2227 | .calc_rssi = iwl4965_calc_rssi, |
2228 | .request_scan = iwlagn_request_scan, | 2228 | .request_scan = iwlagn_request_scan, |
2229 | }; | 2229 | }; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c index 8093ce2804fb..aacf3770f075 100644 --- a/drivers/net/wireless/iwlwifi/iwl-5000.c +++ b/drivers/net/wireless/iwlwifi/iwl-5000.c | |||
@@ -506,7 +506,7 @@ struct iwl_cfg iwl5300_agn_cfg = { | |||
506 | .use_bsm = false, | 506 | .use_bsm = false, |
507 | .ht_greenfield_support = true, | 507 | .ht_greenfield_support = true, |
508 | .led_compensation = 51, | 508 | .led_compensation = 51, |
509 | .use_rts_for_ht = true, /* use rts/cts protection */ | 509 | .use_rts_for_aggregation = true, /* use rts/cts protection */ |
510 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 510 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
511 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, | 511 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, |
512 | .chain_noise_scale = 1000, | 512 | .chain_noise_scale = 1000, |
@@ -537,7 +537,7 @@ struct iwl_cfg iwl5100_bgn_cfg = { | |||
537 | .use_bsm = false, | 537 | .use_bsm = false, |
538 | .ht_greenfield_support = true, | 538 | .ht_greenfield_support = true, |
539 | .led_compensation = 51, | 539 | .led_compensation = 51, |
540 | .use_rts_for_ht = true, /* use rts/cts protection */ | 540 | .use_rts_for_aggregation = true, /* use rts/cts protection */ |
541 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 541 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
542 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, | 542 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, |
543 | .chain_noise_scale = 1000, | 543 | .chain_noise_scale = 1000, |
@@ -597,7 +597,7 @@ struct iwl_cfg iwl5100_agn_cfg = { | |||
597 | .use_bsm = false, | 597 | .use_bsm = false, |
598 | .ht_greenfield_support = true, | 598 | .ht_greenfield_support = true, |
599 | .led_compensation = 51, | 599 | .led_compensation = 51, |
600 | .use_rts_for_ht = true, /* use rts/cts protection */ | 600 | .use_rts_for_aggregation = true, /* use rts/cts protection */ |
601 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 601 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
602 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, | 602 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, |
603 | .chain_noise_scale = 1000, | 603 | .chain_noise_scale = 1000, |
@@ -628,7 +628,7 @@ struct iwl_cfg iwl5350_agn_cfg = { | |||
628 | .use_bsm = false, | 628 | .use_bsm = false, |
629 | .ht_greenfield_support = true, | 629 | .ht_greenfield_support = true, |
630 | .led_compensation = 51, | 630 | .led_compensation = 51, |
631 | .use_rts_for_ht = true, /* use rts/cts protection */ | 631 | .use_rts_for_aggregation = true, /* use rts/cts protection */ |
632 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 632 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
633 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, | 633 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, |
634 | .chain_noise_scale = 1000, | 634 | .chain_noise_scale = 1000, |
@@ -659,7 +659,7 @@ struct iwl_cfg iwl5150_agn_cfg = { | |||
659 | .use_bsm = false, | 659 | .use_bsm = false, |
660 | .ht_greenfield_support = true, | 660 | .ht_greenfield_support = true, |
661 | .led_compensation = 51, | 661 | .led_compensation = 51, |
662 | .use_rts_for_ht = true, /* use rts/cts protection */ | 662 | .use_rts_for_aggregation = true, /* use rts/cts protection */ |
663 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 663 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
664 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, | 664 | .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF, |
665 | .chain_noise_scale = 1000, | 665 | .chain_noise_scale = 1000, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-6000.c b/drivers/net/wireless/iwlwifi/iwl-6000.c index 58270529a0e4..af4fd50f3405 100644 --- a/drivers/net/wireless/iwlwifi/iwl-6000.c +++ b/drivers/net/wireless/iwlwifi/iwl-6000.c | |||
@@ -381,7 +381,7 @@ struct iwl_cfg iwl6000g2a_2agn_cfg = { | |||
381 | .shadow_ram_support = true, | 381 | .shadow_ram_support = true, |
382 | .ht_greenfield_support = true, | 382 | .ht_greenfield_support = true, |
383 | .led_compensation = 51, | 383 | .led_compensation = 51, |
384 | .use_rts_for_ht = true, /* use rts/cts protection */ | 384 | .use_rts_for_aggregation = true, /* use rts/cts protection */ |
385 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 385 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
386 | .supports_idle = true, | 386 | .supports_idle = true, |
387 | .adv_thermal_throttle = true, | 387 | .adv_thermal_throttle = true, |
@@ -489,7 +489,7 @@ struct iwl_cfg iwl6000g2b_2agn_cfg = { | |||
489 | .shadow_ram_support = true, | 489 | .shadow_ram_support = true, |
490 | .ht_greenfield_support = true, | 490 | .ht_greenfield_support = true, |
491 | .led_compensation = 51, | 491 | .led_compensation = 51, |
492 | .use_rts_for_ht = true, /* use rts/cts protection */ | 492 | .use_rts_for_aggregation = true, /* use rts/cts protection */ |
493 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 493 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
494 | .supports_idle = true, | 494 | .supports_idle = true, |
495 | .adv_thermal_throttle = true, | 495 | .adv_thermal_throttle = true, |
@@ -563,7 +563,7 @@ struct iwl_cfg iwl6000g2b_2bgn_cfg = { | |||
563 | .shadow_ram_support = true, | 563 | .shadow_ram_support = true, |
564 | .ht_greenfield_support = true, | 564 | .ht_greenfield_support = true, |
565 | .led_compensation = 51, | 565 | .led_compensation = 51, |
566 | .use_rts_for_ht = true, /* use rts/cts protection */ | 566 | .use_rts_for_aggregation = true, /* use rts/cts protection */ |
567 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 567 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
568 | .supports_idle = true, | 568 | .supports_idle = true, |
569 | .adv_thermal_throttle = true, | 569 | .adv_thermal_throttle = true, |
@@ -637,7 +637,7 @@ struct iwl_cfg iwl6000g2b_bgn_cfg = { | |||
637 | .shadow_ram_support = true, | 637 | .shadow_ram_support = true, |
638 | .ht_greenfield_support = true, | 638 | .ht_greenfield_support = true, |
639 | .led_compensation = 51, | 639 | .led_compensation = 51, |
640 | .use_rts_for_ht = true, /* use rts/cts protection */ | 640 | .use_rts_for_aggregation = true, /* use rts/cts protection */ |
641 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 641 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
642 | .supports_idle = true, | 642 | .supports_idle = true, |
643 | .adv_thermal_throttle = true, | 643 | .adv_thermal_throttle = true, |
@@ -714,7 +714,7 @@ struct iwl_cfg iwl6000i_2agn_cfg = { | |||
714 | .shadow_ram_support = true, | 714 | .shadow_ram_support = true, |
715 | .ht_greenfield_support = true, | 715 | .ht_greenfield_support = true, |
716 | .led_compensation = 51, | 716 | .led_compensation = 51, |
717 | .use_rts_for_ht = true, /* use rts/cts protection */ | 717 | .use_rts_for_aggregation = true, /* use rts/cts protection */ |
718 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 718 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
719 | .supports_idle = true, | 719 | .supports_idle = true, |
720 | .adv_thermal_throttle = true, | 720 | .adv_thermal_throttle = true, |
@@ -821,7 +821,7 @@ struct iwl_cfg iwl6050_2agn_cfg = { | |||
821 | .shadow_ram_support = true, | 821 | .shadow_ram_support = true, |
822 | .ht_greenfield_support = true, | 822 | .ht_greenfield_support = true, |
823 | .led_compensation = 51, | 823 | .led_compensation = 51, |
824 | .use_rts_for_ht = true, /* use rts/cts protection */ | 824 | .use_rts_for_aggregation = true, /* use rts/cts protection */ |
825 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 825 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
826 | .supports_idle = true, | 826 | .supports_idle = true, |
827 | .adv_thermal_throttle = true, | 827 | .adv_thermal_throttle = true, |
@@ -859,7 +859,7 @@ struct iwl_cfg iwl6050g2_bgn_cfg = { | |||
859 | .shadow_ram_support = true, | 859 | .shadow_ram_support = true, |
860 | .ht_greenfield_support = true, | 860 | .ht_greenfield_support = true, |
861 | .led_compensation = 51, | 861 | .led_compensation = 51, |
862 | .use_rts_for_ht = true, /* use rts/cts protection */ | 862 | .use_rts_for_aggregation = true, /* use rts/cts protection */ |
863 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 863 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
864 | .supports_idle = true, | 864 | .supports_idle = true, |
865 | .adv_thermal_throttle = true, | 865 | .adv_thermal_throttle = true, |
@@ -933,7 +933,7 @@ struct iwl_cfg iwl6000_3agn_cfg = { | |||
933 | .shadow_ram_support = true, | 933 | .shadow_ram_support = true, |
934 | .ht_greenfield_support = true, | 934 | .ht_greenfield_support = true, |
935 | .led_compensation = 51, | 935 | .led_compensation = 51, |
936 | .use_rts_for_ht = true, /* use rts/cts protection */ | 936 | .use_rts_for_aggregation = true, /* use rts/cts protection */ |
937 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, | 937 | .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, |
938 | .supports_idle = true, | 938 | .supports_idle = true, |
939 | .adv_thermal_throttle = true, | 939 | .adv_thermal_throttle = true, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-hcmd.c b/drivers/net/wireless/iwlwifi/iwl-agn-hcmd.c index a7216dda9786..75b901b3eb1e 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-hcmd.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-hcmd.c | |||
@@ -211,10 +211,21 @@ static void iwlagn_chain_noise_reset(struct iwl_priv *priv) | |||
211 | } | 211 | } |
212 | } | 212 | } |
213 | 213 | ||
214 | static void iwlagn_rts_tx_cmd_flag(struct ieee80211_tx_info *info, | 214 | static void iwlagn_tx_cmd_protection(struct iwl_priv *priv, |
215 | __le32 *tx_flags) | 215 | struct ieee80211_tx_info *info, |
216 | __le16 fc, __le32 *tx_flags) | ||
216 | { | 217 | { |
217 | *tx_flags |= TX_CMD_FLG_PROT_REQUIRE_MSK; | 218 | if (info->control.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS || |
219 | info->control.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) { | ||
220 | *tx_flags |= TX_CMD_FLG_PROT_REQUIRE_MSK; | ||
221 | return; | ||
222 | } | ||
223 | |||
224 | if (priv->cfg->use_rts_for_aggregation && | ||
225 | info->flags & IEEE80211_TX_CTL_AMPDU) { | ||
226 | *tx_flags |= TX_CMD_FLG_PROT_REQUIRE_MSK; | ||
227 | return; | ||
228 | } | ||
218 | } | 229 | } |
219 | 230 | ||
220 | /* Calc max signal level (dBm) among 3 possible receivers */ | 231 | /* Calc max signal level (dBm) among 3 possible receivers */ |
@@ -268,7 +279,7 @@ struct iwl_hcmd_utils_ops iwlagn_hcmd_utils = { | |||
268 | .build_addsta_hcmd = iwlagn_build_addsta_hcmd, | 279 | .build_addsta_hcmd = iwlagn_build_addsta_hcmd, |
269 | .gain_computation = iwlagn_gain_computation, | 280 | .gain_computation = iwlagn_gain_computation, |
270 | .chain_noise_reset = iwlagn_chain_noise_reset, | 281 | .chain_noise_reset = iwlagn_chain_noise_reset, |
271 | .rts_tx_cmd_flag = iwlagn_rts_tx_cmd_flag, | 282 | .tx_cmd_protection = iwlagn_tx_cmd_protection, |
272 | .calc_rssi = iwlagn_calc_rssi, | 283 | .calc_rssi = iwlagn_calc_rssi, |
273 | .request_scan = iwlagn_request_scan, | 284 | .request_scan = iwlagn_request_scan, |
274 | }; | 285 | }; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c index d04502d54df3..69155aa448fb 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c | |||
@@ -379,10 +379,7 @@ static void iwlagn_tx_cmd_build_basic(struct iwl_priv *priv, | |||
379 | tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK; | 379 | tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK; |
380 | } | 380 | } |
381 | 381 | ||
382 | priv->cfg->ops->utils->rts_tx_cmd_flag(info, &tx_flags); | 382 | priv->cfg->ops->utils->tx_cmd_protection(priv, info, fc, &tx_flags); |
383 | |||
384 | if ((tx_flags & TX_CMD_FLG_RTS_MSK) || (tx_flags & TX_CMD_FLG_CTS_MSK)) | ||
385 | tx_flags |= TX_CMD_FLG_FULL_TXOP_PROT_MSK; | ||
386 | 383 | ||
387 | tx_flags &= ~(TX_CMD_FLG_ANT_SEL_MSK); | 384 | tx_flags &= ~(TX_CMD_FLG_ANT_SEL_MSK); |
388 | if (ieee80211_is_mgmt(fc)) { | 385 | if (ieee80211_is_mgmt(fc)) { |
@@ -456,21 +453,6 @@ static void iwlagn_tx_cmd_build_rate(struct iwl_priv *priv, | |||
456 | if ((rate_idx >= IWL_FIRST_CCK_RATE) && (rate_idx <= IWL_LAST_CCK_RATE)) | 453 | if ((rate_idx >= IWL_FIRST_CCK_RATE) && (rate_idx <= IWL_LAST_CCK_RATE)) |
457 | rate_flags |= RATE_MCS_CCK_MSK; | 454 | rate_flags |= RATE_MCS_CCK_MSK; |
458 | 455 | ||
459 | /* Set up RTS and CTS flags for certain packets */ | ||
460 | switch (fc & cpu_to_le16(IEEE80211_FCTL_STYPE)) { | ||
461 | case cpu_to_le16(IEEE80211_STYPE_AUTH): | ||
462 | case cpu_to_le16(IEEE80211_STYPE_DEAUTH): | ||
463 | case cpu_to_le16(IEEE80211_STYPE_ASSOC_REQ): | ||
464 | case cpu_to_le16(IEEE80211_STYPE_REASSOC_REQ): | ||
465 | if (tx_cmd->tx_flags & TX_CMD_FLG_RTS_MSK) { | ||
466 | tx_cmd->tx_flags &= ~TX_CMD_FLG_RTS_MSK; | ||
467 | tx_cmd->tx_flags |= TX_CMD_FLG_CTS_MSK; | ||
468 | } | ||
469 | break; | ||
470 | default: | ||
471 | break; | ||
472 | } | ||
473 | |||
474 | /* Set up antennas */ | 456 | /* Set up antennas */ |
475 | priv->mgmt_tx_ant = iwl_toggle_tx_ant(priv, priv->mgmt_tx_ant, | 457 | priv->mgmt_tx_ant = iwl_toggle_tx_ant(priv, priv->mgmt_tx_ant, |
476 | priv->hw_params.valid_tx_ant); | 458 | priv->hw_params.valid_tx_ant); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 35337b1e7cac..c1882fd8345d 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -202,13 +202,6 @@ int iwl_commit_rxon(struct iwl_priv *priv) | |||
202 | 202 | ||
203 | priv->start_calib = 0; | 203 | priv->start_calib = 0; |
204 | if (new_assoc) { | 204 | if (new_assoc) { |
205 | /* | ||
206 | * allow CTS-to-self if possible for new association. | ||
207 | * this is relevant only for 5000 series and up, | ||
208 | * but will not damage 4965 | ||
209 | */ | ||
210 | priv->staging_rxon.flags |= RXON_FLG_SELF_CTS_EN; | ||
211 | |||
212 | /* Apply the new configuration | 205 | /* Apply the new configuration |
213 | * RXON assoc doesn't clear the station table in uCode, | 206 | * RXON assoc doesn't clear the station table in uCode, |
214 | */ | 207 | */ |
@@ -1618,45 +1611,9 @@ static ssize_t store_tx_power(struct device *d, | |||
1618 | 1611 | ||
1619 | static DEVICE_ATTR(tx_power, S_IWUSR | S_IRUGO, show_tx_power, store_tx_power); | 1612 | static DEVICE_ATTR(tx_power, S_IWUSR | S_IRUGO, show_tx_power, store_tx_power); |
1620 | 1613 | ||
1621 | static ssize_t show_rts_ht_protection(struct device *d, | ||
1622 | struct device_attribute *attr, char *buf) | ||
1623 | { | ||
1624 | struct iwl_priv *priv = dev_get_drvdata(d); | ||
1625 | |||
1626 | return sprintf(buf, "%s\n", | ||
1627 | priv->cfg->use_rts_for_ht ? "RTS/CTS" : "CTS-to-self"); | ||
1628 | } | ||
1629 | |||
1630 | static ssize_t store_rts_ht_protection(struct device *d, | ||
1631 | struct device_attribute *attr, | ||
1632 | const char *buf, size_t count) | ||
1633 | { | ||
1634 | struct iwl_priv *priv = dev_get_drvdata(d); | ||
1635 | unsigned long val; | ||
1636 | int ret; | ||
1637 | |||
1638 | ret = strict_strtoul(buf, 10, &val); | ||
1639 | if (ret) | ||
1640 | IWL_INFO(priv, "Input is not in decimal form.\n"); | ||
1641 | else { | ||
1642 | if (!iwl_is_associated(priv)) | ||
1643 | priv->cfg->use_rts_for_ht = val ? true : false; | ||
1644 | else | ||
1645 | IWL_ERR(priv, "Sta associated with AP - " | ||
1646 | "Change protection mechanism is not allowed\n"); | ||
1647 | ret = count; | ||
1648 | } | ||
1649 | return ret; | ||
1650 | } | ||
1651 | |||
1652 | static DEVICE_ATTR(rts_ht_protection, S_IWUSR | S_IRUGO, | ||
1653 | show_rts_ht_protection, store_rts_ht_protection); | ||
1654 | |||
1655 | |||
1656 | static struct attribute *iwl_sysfs_entries[] = { | 1614 | static struct attribute *iwl_sysfs_entries[] = { |
1657 | &dev_attr_temperature.attr, | 1615 | &dev_attr_temperature.attr, |
1658 | &dev_attr_tx_power.attr, | 1616 | &dev_attr_tx_power.attr, |
1659 | &dev_attr_rts_ht_protection.attr, | ||
1660 | #ifdef CONFIG_IWLWIFI_DEBUG | 1617 | #ifdef CONFIG_IWLWIFI_DEBUG |
1661 | &dev_attr_debug_level.attr, | 1618 | &dev_attr_debug_level.attr, |
1662 | #endif | 1619 | #endif |
@@ -3464,25 +3421,6 @@ static int iwl_mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, | |||
3464 | return ret; | 3421 | return ret; |
3465 | } | 3422 | } |
3466 | 3423 | ||
3467 | /* | ||
3468 | * switch to RTS/CTS for TX | ||
3469 | */ | ||
3470 | static void iwl_enable_rts_cts(struct iwl_priv *priv) | ||
3471 | { | ||
3472 | |||
3473 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) | ||
3474 | return; | ||
3475 | |||
3476 | priv->staging_rxon.flags &= ~RXON_FLG_SELF_CTS_EN; | ||
3477 | if (!test_bit(STATUS_SCANNING, &priv->status)) { | ||
3478 | IWL_DEBUG_INFO(priv, "use RTS/CTS protection\n"); | ||
3479 | iwlcore_commit_rxon(priv); | ||
3480 | } else { | ||
3481 | /* scanning, defer the request until scan completed */ | ||
3482 | IWL_DEBUG_INFO(priv, "defer setting RTS/CTS protection\n"); | ||
3483 | } | ||
3484 | } | ||
3485 | |||
3486 | static int iwl_mac_ampdu_action(struct ieee80211_hw *hw, | 3424 | static int iwl_mac_ampdu_action(struct ieee80211_hw *hw, |
3487 | struct ieee80211_vif *vif, | 3425 | struct ieee80211_vif *vif, |
3488 | enum ieee80211_ampdu_mlme_action action, | 3426 | enum ieee80211_ampdu_mlme_action action, |
@@ -3529,14 +3467,33 @@ static int iwl_mac_ampdu_action(struct ieee80211_hw *hw, | |||
3529 | } | 3467 | } |
3530 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) | 3468 | if (test_bit(STATUS_EXIT_PENDING, &priv->status)) |
3531 | ret = 0; | 3469 | ret = 0; |
3470 | if (priv->cfg->use_rts_for_aggregation) { | ||
3471 | struct iwl_station_priv *sta_priv = | ||
3472 | (void *) sta->drv_priv; | ||
3473 | /* | ||
3474 | * switch off RTS/CTS if it was previously enabled | ||
3475 | */ | ||
3476 | |||
3477 | sta_priv->lq_sta.lq.general_params.flags &= | ||
3478 | ~LINK_QUAL_FLAGS_SET_STA_TLC_RTS_MSK; | ||
3479 | iwl_send_lq_cmd(priv, &sta_priv->lq_sta.lq, | ||
3480 | CMD_ASYNC, false); | ||
3481 | } | ||
3532 | break; | 3482 | break; |
3533 | case IEEE80211_AMPDU_TX_OPERATIONAL: | 3483 | case IEEE80211_AMPDU_TX_OPERATIONAL: |
3534 | if (priv->cfg->use_rts_for_ht) { | 3484 | if (priv->cfg->use_rts_for_aggregation) { |
3485 | struct iwl_station_priv *sta_priv = | ||
3486 | (void *) sta->drv_priv; | ||
3487 | |||
3535 | /* | 3488 | /* |
3536 | * switch to RTS/CTS if it is the prefer protection | 3489 | * switch to RTS/CTS if it is the prefer protection |
3537 | * method for HT traffic | 3490 | * method for HT traffic |
3538 | */ | 3491 | */ |
3539 | iwl_enable_rts_cts(priv); | 3492 | |
3493 | sta_priv->lq_sta.lq.general_params.flags |= | ||
3494 | LINK_QUAL_FLAGS_SET_STA_TLC_RTS_MSK; | ||
3495 | iwl_send_lq_cmd(priv, &sta_priv->lq_sta.lq, | ||
3496 | CMD_ASYNC, false); | ||
3540 | } | 3497 | } |
3541 | ret = 0; | 3498 | ret = 0; |
3542 | break; | 3499 | break; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c index 8ccb6d205b6d..2c03c6e20a72 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.c +++ b/drivers/net/wireless/iwlwifi/iwl-core.c | |||
@@ -401,21 +401,38 @@ void iwlcore_free_geos(struct iwl_priv *priv) | |||
401 | EXPORT_SYMBOL(iwlcore_free_geos); | 401 | EXPORT_SYMBOL(iwlcore_free_geos); |
402 | 402 | ||
403 | /* | 403 | /* |
404 | * iwlcore_rts_tx_cmd_flag: Set rts/cts. 3945 and 4965 only share this | 404 | * iwlcore_tx_cmd_protection: Set rts/cts. 3945 and 4965 only share this |
405 | * function. | 405 | * function. |
406 | */ | 406 | */ |
407 | void iwlcore_rts_tx_cmd_flag(struct ieee80211_tx_info *info, | 407 | void iwlcore_tx_cmd_protection(struct iwl_priv *priv, |
408 | __le32 *tx_flags) | 408 | struct ieee80211_tx_info *info, |
409 | __le16 fc, __le32 *tx_flags) | ||
409 | { | 410 | { |
410 | if (info->control.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS) { | 411 | if (info->control.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS) { |
411 | *tx_flags |= TX_CMD_FLG_RTS_MSK; | 412 | *tx_flags |= TX_CMD_FLG_RTS_MSK; |
412 | *tx_flags &= ~TX_CMD_FLG_CTS_MSK; | 413 | *tx_flags &= ~TX_CMD_FLG_CTS_MSK; |
414 | *tx_flags |= TX_CMD_FLG_FULL_TXOP_PROT_MSK; | ||
415 | |||
416 | if (!ieee80211_is_mgmt(fc)) | ||
417 | return; | ||
418 | |||
419 | switch (fc & cpu_to_le16(IEEE80211_FCTL_STYPE)) { | ||
420 | case cpu_to_le16(IEEE80211_STYPE_AUTH): | ||
421 | case cpu_to_le16(IEEE80211_STYPE_DEAUTH): | ||
422 | case cpu_to_le16(IEEE80211_STYPE_ASSOC_REQ): | ||
423 | case cpu_to_le16(IEEE80211_STYPE_REASSOC_REQ): | ||
424 | *tx_flags &= ~TX_CMD_FLG_RTS_MSK; | ||
425 | *tx_flags |= TX_CMD_FLG_CTS_MSK; | ||
426 | break; | ||
427 | } | ||
413 | } else if (info->control.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) { | 428 | } else if (info->control.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) { |
414 | *tx_flags &= ~TX_CMD_FLG_RTS_MSK; | 429 | *tx_flags &= ~TX_CMD_FLG_RTS_MSK; |
415 | *tx_flags |= TX_CMD_FLG_CTS_MSK; | 430 | *tx_flags |= TX_CMD_FLG_CTS_MSK; |
431 | *tx_flags |= TX_CMD_FLG_FULL_TXOP_PROT_MSK; | ||
416 | } | 432 | } |
417 | } | 433 | } |
418 | EXPORT_SYMBOL(iwlcore_rts_tx_cmd_flag); | 434 | EXPORT_SYMBOL(iwlcore_tx_cmd_protection); |
435 | |||
419 | 436 | ||
420 | static bool is_single_rx_stream(struct iwl_priv *priv) | 437 | static bool is_single_rx_stream(struct iwl_priv *priv) |
421 | { | 438 | { |
@@ -1869,6 +1886,10 @@ void iwl_bss_info_changed(struct ieee80211_hw *hw, | |||
1869 | priv->staging_rxon.flags |= RXON_FLG_TGG_PROTECT_MSK; | 1886 | priv->staging_rxon.flags |= RXON_FLG_TGG_PROTECT_MSK; |
1870 | else | 1887 | else |
1871 | priv->staging_rxon.flags &= ~RXON_FLG_TGG_PROTECT_MSK; | 1888 | priv->staging_rxon.flags &= ~RXON_FLG_TGG_PROTECT_MSK; |
1889 | if (bss_conf->use_cts_prot) | ||
1890 | priv->staging_rxon.flags |= RXON_FLG_SELF_CTS_EN; | ||
1891 | else | ||
1892 | priv->staging_rxon.flags &= ~RXON_FLG_SELF_CTS_EN; | ||
1872 | } | 1893 | } |
1873 | 1894 | ||
1874 | if (changes & BSS_CHANGED_BASIC_RATES) { | 1895 | if (changes & BSS_CHANGED_BASIC_RATES) { |
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h index e9d23f2f869d..4a71dfb10a15 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/drivers/net/wireless/iwlwifi/iwl-core.h | |||
@@ -104,8 +104,9 @@ struct iwl_hcmd_utils_ops { | |||
104 | u32 min_average_noise, | 104 | u32 min_average_noise, |
105 | u8 default_chain); | 105 | u8 default_chain); |
106 | void (*chain_noise_reset)(struct iwl_priv *priv); | 106 | void (*chain_noise_reset)(struct iwl_priv *priv); |
107 | void (*rts_tx_cmd_flag)(struct ieee80211_tx_info *info, | 107 | void (*tx_cmd_protection)(struct iwl_priv *priv, |
108 | __le32 *tx_flags); | 108 | struct ieee80211_tx_info *info, |
109 | __le16 fc, __le32 *tx_flags); | ||
109 | int (*calc_rssi)(struct iwl_priv *priv, | 110 | int (*calc_rssi)(struct iwl_priv *priv, |
110 | struct iwl_rx_phy_res *rx_resp); | 111 | struct iwl_rx_phy_res *rx_resp); |
111 | void (*request_scan)(struct iwl_priv *priv, struct ieee80211_vif *vif); | 112 | void (*request_scan)(struct iwl_priv *priv, struct ieee80211_vif *vif); |
@@ -249,7 +250,7 @@ struct iwl_mod_params { | |||
249 | * @led_compensation: compensate on the led on/off time per HW according | 250 | * @led_compensation: compensate on the led on/off time per HW according |
250 | * to the deviation to achieve the desired led frequency. | 251 | * to the deviation to achieve the desired led frequency. |
251 | * The detail algorithm is described in iwl-led.c | 252 | * The detail algorithm is described in iwl-led.c |
252 | * @use_rts_for_ht: use rts/cts protection for HT traffic | 253 | * @use_rts_for_aggregation: use rts/cts protection for HT traffic |
253 | * @chain_noise_num_beacons: number of beacons used to compute chain noise | 254 | * @chain_noise_num_beacons: number of beacons used to compute chain noise |
254 | * @adv_thermal_throttle: support advance thermal throttle | 255 | * @adv_thermal_throttle: support advance thermal throttle |
255 | * @support_ct_kill_exit: support ct kill exit condition | 256 | * @support_ct_kill_exit: support ct kill exit condition |
@@ -318,7 +319,7 @@ struct iwl_cfg { | |||
318 | const bool ht_greenfield_support; | 319 | const bool ht_greenfield_support; |
319 | u16 led_compensation; | 320 | u16 led_compensation; |
320 | const bool broken_powersave; | 321 | const bool broken_powersave; |
321 | bool use_rts_for_ht; | 322 | bool use_rts_for_aggregation; |
322 | int chain_noise_num_beacons; | 323 | int chain_noise_num_beacons; |
323 | const bool supports_idle; | 324 | const bool supports_idle; |
324 | bool adv_thermal_throttle; | 325 | bool adv_thermal_throttle; |
@@ -390,8 +391,9 @@ void iwl_config_ap(struct iwl_priv *priv, struct ieee80211_vif *vif); | |||
390 | void iwl_mac_reset_tsf(struct ieee80211_hw *hw); | 391 | void iwl_mac_reset_tsf(struct ieee80211_hw *hw); |
391 | int iwl_alloc_txq_mem(struct iwl_priv *priv); | 392 | int iwl_alloc_txq_mem(struct iwl_priv *priv); |
392 | void iwl_free_txq_mem(struct iwl_priv *priv); | 393 | void iwl_free_txq_mem(struct iwl_priv *priv); |
393 | void iwlcore_rts_tx_cmd_flag(struct ieee80211_tx_info *info, | 394 | void iwlcore_tx_cmd_protection(struct iwl_priv *priv, |
394 | __le32 *tx_flags); | 395 | struct ieee80211_tx_info *info, |
396 | __le16 fc, __le32 *tx_flags); | ||
395 | #ifdef CONFIG_IWLWIFI_DEBUGFS | 397 | #ifdef CONFIG_IWLWIFI_DEBUGFS |
396 | int iwl_alloc_traffic_mem(struct iwl_priv *priv); | 398 | int iwl_alloc_traffic_mem(struct iwl_priv *priv); |
397 | void iwl_free_traffic_mem(struct iwl_priv *priv); | 399 | void iwl_free_traffic_mem(struct iwl_priv *priv); |
diff --git a/drivers/net/wireless/iwlwifi/iwl3945-base.c b/drivers/net/wireless/iwlwifi/iwl3945-base.c index d24eb47d3705..70c4b8fba0ee 100644 --- a/drivers/net/wireless/iwlwifi/iwl3945-base.c +++ b/drivers/net/wireless/iwlwifi/iwl3945-base.c | |||
@@ -435,10 +435,7 @@ static void iwl3945_build_tx_cmd_basic(struct iwl_priv *priv, | |||
435 | tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK; | 435 | tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK; |
436 | } | 436 | } |
437 | 437 | ||
438 | priv->cfg->ops->utils->rts_tx_cmd_flag(info, &tx_flags); | 438 | priv->cfg->ops->utils->tx_cmd_protection(priv, info, fc, &tx_flags); |
439 | |||
440 | if ((tx_flags & TX_CMD_FLG_RTS_MSK) || (tx_flags & TX_CMD_FLG_CTS_MSK)) | ||
441 | tx_flags |= TX_CMD_FLG_FULL_TXOP_PROT_MSK; | ||
442 | 439 | ||
443 | tx_flags &= ~(TX_CMD_FLG_ANT_SEL_MSK); | 440 | tx_flags &= ~(TX_CMD_FLG_ANT_SEL_MSK); |
444 | if (ieee80211_is_mgmt(fc)) { | 441 | if (ieee80211_is_mgmt(fc)) { |
diff --git a/drivers/net/wireless/libertas/cfg.c b/drivers/net/wireless/libertas/cfg.c index 2372abb29c2e..3e82f1627209 100644 --- a/drivers/net/wireless/libertas/cfg.c +++ b/drivers/net/wireless/libertas/cfg.c | |||
@@ -9,6 +9,7 @@ | |||
9 | #include <linux/sched.h> | 9 | #include <linux/sched.h> |
10 | #include <linux/wait.h> | 10 | #include <linux/wait.h> |
11 | #include <linux/slab.h> | 11 | #include <linux/slab.h> |
12 | #include <linux/sched.h> | ||
12 | #include <linux/ieee80211.h> | 13 | #include <linux/ieee80211.h> |
13 | #include <net/cfg80211.h> | 14 | #include <net/cfg80211.h> |
14 | #include <asm/unaligned.h> | 15 | #include <asm/unaligned.h> |
diff --git a/drivers/net/wireless/p54/p54pci.c b/drivers/net/wireless/p54/p54pci.c index 71a101fb2e4e..822f8dc26e9c 100644 --- a/drivers/net/wireless/p54/p54pci.c +++ b/drivers/net/wireless/p54/p54pci.c | |||
@@ -43,8 +43,6 @@ static DEFINE_PCI_DEVICE_TABLE(p54p_table) = { | |||
43 | { PCI_DEVICE(0x1260, 0x3886) }, | 43 | { PCI_DEVICE(0x1260, 0x3886) }, |
44 | /* Intersil PRISM Xbow Wireless LAN adapter (Symbol AP-300) */ | 44 | /* Intersil PRISM Xbow Wireless LAN adapter (Symbol AP-300) */ |
45 | { PCI_DEVICE(0x1260, 0xffff) }, | 45 | { PCI_DEVICE(0x1260, 0xffff) }, |
46 | /* Standard Microsystems Corp SMC2802W Wireless PCI */ | ||
47 | { PCI_DEVICE(0x10b8, 0x2802) }, | ||
48 | { }, | 46 | { }, |
49 | }; | 47 | }; |
50 | 48 | ||
diff --git a/drivers/s390/net/claw.c b/drivers/s390/net/claw.c index a75ed3083a6a..8e4153d740f3 100644 --- a/drivers/s390/net/claw.c +++ b/drivers/s390/net/claw.c | |||
@@ -386,7 +386,7 @@ claw_tx(struct sk_buff *skb, struct net_device *dev) | |||
386 | struct chbk *p_ch; | 386 | struct chbk *p_ch; |
387 | 387 | ||
388 | CLAW_DBF_TEXT(4, trace, "claw_tx"); | 388 | CLAW_DBF_TEXT(4, trace, "claw_tx"); |
389 | p_ch=&privptr->channel[WRITE]; | 389 | p_ch = &privptr->channel[WRITE_CHANNEL]; |
390 | spin_lock_irqsave(get_ccwdev_lock(p_ch->cdev), saveflags); | 390 | spin_lock_irqsave(get_ccwdev_lock(p_ch->cdev), saveflags); |
391 | rc=claw_hw_tx( skb, dev, 1 ); | 391 | rc=claw_hw_tx( skb, dev, 1 ); |
392 | spin_unlock_irqrestore(get_ccwdev_lock(p_ch->cdev), saveflags); | 392 | spin_unlock_irqrestore(get_ccwdev_lock(p_ch->cdev), saveflags); |
@@ -407,7 +407,7 @@ static struct sk_buff * | |||
407 | claw_pack_skb(struct claw_privbk *privptr) | 407 | claw_pack_skb(struct claw_privbk *privptr) |
408 | { | 408 | { |
409 | struct sk_buff *new_skb,*held_skb; | 409 | struct sk_buff *new_skb,*held_skb; |
410 | struct chbk *p_ch = &privptr->channel[WRITE]; | 410 | struct chbk *p_ch = &privptr->channel[WRITE_CHANNEL]; |
411 | struct claw_env *p_env = privptr->p_env; | 411 | struct claw_env *p_env = privptr->p_env; |
412 | int pkt_cnt,pk_ind,so_far; | 412 | int pkt_cnt,pk_ind,so_far; |
413 | 413 | ||
@@ -515,15 +515,15 @@ claw_open(struct net_device *dev) | |||
515 | privptr->p_env->write_size=CLAW_FRAME_SIZE; | 515 | privptr->p_env->write_size=CLAW_FRAME_SIZE; |
516 | } | 516 | } |
517 | claw_set_busy(dev); | 517 | claw_set_busy(dev); |
518 | tasklet_init(&privptr->channel[READ].tasklet, claw_irq_tasklet, | 518 | tasklet_init(&privptr->channel[READ_CHANNEL].tasklet, claw_irq_tasklet, |
519 | (unsigned long) &privptr->channel[READ]); | 519 | (unsigned long) &privptr->channel[READ_CHANNEL]); |
520 | for ( i = 0; i < 2; i++) { | 520 | for ( i = 0; i < 2; i++) { |
521 | CLAW_DBF_TEXT_(2, trace, "opn_ch%d", i); | 521 | CLAW_DBF_TEXT_(2, trace, "opn_ch%d", i); |
522 | init_waitqueue_head(&privptr->channel[i].wait); | 522 | init_waitqueue_head(&privptr->channel[i].wait); |
523 | /* skb_queue_head_init(&p_ch->io_queue); */ | 523 | /* skb_queue_head_init(&p_ch->io_queue); */ |
524 | if (i == WRITE) | 524 | if (i == WRITE_CHANNEL) |
525 | skb_queue_head_init( | 525 | skb_queue_head_init( |
526 | &privptr->channel[WRITE].collect_queue); | 526 | &privptr->channel[WRITE_CHANNEL].collect_queue); |
527 | privptr->channel[i].flag_a = 0; | 527 | privptr->channel[i].flag_a = 0; |
528 | privptr->channel[i].IO_active = 0; | 528 | privptr->channel[i].IO_active = 0; |
529 | privptr->channel[i].flag &= ~CLAW_TIMER; | 529 | privptr->channel[i].flag &= ~CLAW_TIMER; |
@@ -551,12 +551,12 @@ claw_open(struct net_device *dev) | |||
551 | if((privptr->channel[i].flag & CLAW_TIMER) == 0x00) | 551 | if((privptr->channel[i].flag & CLAW_TIMER) == 0x00) |
552 | del_timer(&timer); | 552 | del_timer(&timer); |
553 | } | 553 | } |
554 | if ((((privptr->channel[READ].last_dstat | | 554 | if ((((privptr->channel[READ_CHANNEL].last_dstat | |
555 | privptr->channel[WRITE].last_dstat) & | 555 | privptr->channel[WRITE_CHANNEL].last_dstat) & |
556 | ~(DEV_STAT_CHN_END | DEV_STAT_DEV_END)) != 0x00) || | 556 | ~(DEV_STAT_CHN_END | DEV_STAT_DEV_END)) != 0x00) || |
557 | (((privptr->channel[READ].flag | | 557 | (((privptr->channel[READ_CHANNEL].flag | |
558 | privptr->channel[WRITE].flag) & CLAW_TIMER) != 0x00)) { | 558 | privptr->channel[WRITE_CHANNEL].flag) & CLAW_TIMER) != 0x00)) { |
559 | dev_info(&privptr->channel[READ].cdev->dev, | 559 | dev_info(&privptr->channel[READ_CHANNEL].cdev->dev, |
560 | "%s: remote side is not ready\n", dev->name); | 560 | "%s: remote side is not ready\n", dev->name); |
561 | CLAW_DBF_TEXT(2, trace, "notrdy"); | 561 | CLAW_DBF_TEXT(2, trace, "notrdy"); |
562 | 562 | ||
@@ -608,8 +608,8 @@ claw_open(struct net_device *dev) | |||
608 | } | 608 | } |
609 | } | 609 | } |
610 | privptr->buffs_alloc = 0; | 610 | privptr->buffs_alloc = 0; |
611 | privptr->channel[READ].flag= 0x00; | 611 | privptr->channel[READ_CHANNEL].flag = 0x00; |
612 | privptr->channel[WRITE].flag = 0x00; | 612 | privptr->channel[WRITE_CHANNEL].flag = 0x00; |
613 | privptr->p_buff_ccw=NULL; | 613 | privptr->p_buff_ccw=NULL; |
614 | privptr->p_buff_read=NULL; | 614 | privptr->p_buff_read=NULL; |
615 | privptr->p_buff_write=NULL; | 615 | privptr->p_buff_write=NULL; |
@@ -652,10 +652,10 @@ claw_irq_handler(struct ccw_device *cdev, | |||
652 | } | 652 | } |
653 | 653 | ||
654 | /* Try to extract channel from driver data. */ | 654 | /* Try to extract channel from driver data. */ |
655 | if (privptr->channel[READ].cdev == cdev) | 655 | if (privptr->channel[READ_CHANNEL].cdev == cdev) |
656 | p_ch = &privptr->channel[READ]; | 656 | p_ch = &privptr->channel[READ_CHANNEL]; |
657 | else if (privptr->channel[WRITE].cdev == cdev) | 657 | else if (privptr->channel[WRITE_CHANNEL].cdev == cdev) |
658 | p_ch = &privptr->channel[WRITE]; | 658 | p_ch = &privptr->channel[WRITE_CHANNEL]; |
659 | else { | 659 | else { |
660 | dev_warn(&cdev->dev, "The device is not a CLAW device\n"); | 660 | dev_warn(&cdev->dev, "The device is not a CLAW device\n"); |
661 | CLAW_DBF_TEXT(2, trace, "badchan"); | 661 | CLAW_DBF_TEXT(2, trace, "badchan"); |
@@ -813,7 +813,7 @@ claw_irq_handler(struct ccw_device *cdev, | |||
813 | claw_clearbit_busy(TB_TX, dev); | 813 | claw_clearbit_busy(TB_TX, dev); |
814 | claw_clear_busy(dev); | 814 | claw_clear_busy(dev); |
815 | } | 815 | } |
816 | p_ch_r = (struct chbk *)&privptr->channel[READ]; | 816 | p_ch_r = (struct chbk *)&privptr->channel[READ_CHANNEL]; |
817 | if (test_and_set_bit(CLAW_BH_ACTIVE, | 817 | if (test_and_set_bit(CLAW_BH_ACTIVE, |
818 | (void *)&p_ch_r->flag_a) == 0) | 818 | (void *)&p_ch_r->flag_a) == 0) |
819 | tasklet_schedule(&p_ch_r->tasklet); | 819 | tasklet_schedule(&p_ch_r->tasklet); |
@@ -878,13 +878,13 @@ claw_release(struct net_device *dev) | |||
878 | for ( i = 1; i >=0 ; i--) { | 878 | for ( i = 1; i >=0 ; i--) { |
879 | spin_lock_irqsave( | 879 | spin_lock_irqsave( |
880 | get_ccwdev_lock(privptr->channel[i].cdev), saveflags); | 880 | get_ccwdev_lock(privptr->channel[i].cdev), saveflags); |
881 | /* del_timer(&privptr->channel[READ].timer); */ | 881 | /* del_timer(&privptr->channel[READ_CHANNEL].timer); */ |
882 | privptr->channel[i].claw_state = CLAW_STOP; | 882 | privptr->channel[i].claw_state = CLAW_STOP; |
883 | privptr->channel[i].IO_active = 0; | 883 | privptr->channel[i].IO_active = 0; |
884 | parm = (unsigned long) &privptr->channel[i]; | 884 | parm = (unsigned long) &privptr->channel[i]; |
885 | if (i == WRITE) | 885 | if (i == WRITE_CHANNEL) |
886 | claw_purge_skb_queue( | 886 | claw_purge_skb_queue( |
887 | &privptr->channel[WRITE].collect_queue); | 887 | &privptr->channel[WRITE_CHANNEL].collect_queue); |
888 | rc = ccw_device_halt (privptr->channel[i].cdev, parm); | 888 | rc = ccw_device_halt (privptr->channel[i].cdev, parm); |
889 | if (privptr->system_validate_comp==0x00) /* never opened? */ | 889 | if (privptr->system_validate_comp==0x00) /* never opened? */ |
890 | init_waitqueue_head(&privptr->channel[i].wait); | 890 | init_waitqueue_head(&privptr->channel[i].wait); |
@@ -971,16 +971,16 @@ claw_release(struct net_device *dev) | |||
971 | privptr->mtc_skipping = 1; | 971 | privptr->mtc_skipping = 1; |
972 | privptr->mtc_offset=0; | 972 | privptr->mtc_offset=0; |
973 | 973 | ||
974 | if (((privptr->channel[READ].last_dstat | | 974 | if (((privptr->channel[READ_CHANNEL].last_dstat | |
975 | privptr->channel[WRITE].last_dstat) & | 975 | privptr->channel[WRITE_CHANNEL].last_dstat) & |
976 | ~(DEV_STAT_CHN_END | DEV_STAT_DEV_END)) != 0x00) { | 976 | ~(DEV_STAT_CHN_END | DEV_STAT_DEV_END)) != 0x00) { |
977 | dev_warn(&privptr->channel[READ].cdev->dev, | 977 | dev_warn(&privptr->channel[READ_CHANNEL].cdev->dev, |
978 | "Deactivating %s completed with incorrect" | 978 | "Deactivating %s completed with incorrect" |
979 | " subchannel status " | 979 | " subchannel status " |
980 | "(read %02x, write %02x)\n", | 980 | "(read %02x, write %02x)\n", |
981 | dev->name, | 981 | dev->name, |
982 | privptr->channel[READ].last_dstat, | 982 | privptr->channel[READ_CHANNEL].last_dstat, |
983 | privptr->channel[WRITE].last_dstat); | 983 | privptr->channel[WRITE_CHANNEL].last_dstat); |
984 | CLAW_DBF_TEXT(2, trace, "badclose"); | 984 | CLAW_DBF_TEXT(2, trace, "badclose"); |
985 | } | 985 | } |
986 | CLAW_DBF_TEXT(4, trace, "rlsexit"); | 986 | CLAW_DBF_TEXT(4, trace, "rlsexit"); |
@@ -1324,7 +1324,7 @@ claw_hw_tx(struct sk_buff *skb, struct net_device *dev, long linkid) | |||
1324 | 1324 | ||
1325 | CLAW_DBF_TEXT(4, trace, "hw_tx"); | 1325 | CLAW_DBF_TEXT(4, trace, "hw_tx"); |
1326 | privptr = (struct claw_privbk *)(dev->ml_priv); | 1326 | privptr = (struct claw_privbk *)(dev->ml_priv); |
1327 | p_ch=(struct chbk *)&privptr->channel[WRITE]; | 1327 | p_ch = (struct chbk *)&privptr->channel[WRITE_CHANNEL]; |
1328 | p_env =privptr->p_env; | 1328 | p_env =privptr->p_env; |
1329 | claw_free_wrt_buf(dev); /* Clean up free chain if posible */ | 1329 | claw_free_wrt_buf(dev); /* Clean up free chain if posible */ |
1330 | /* scan the write queue to free any completed write packets */ | 1330 | /* scan the write queue to free any completed write packets */ |
@@ -1357,7 +1357,7 @@ claw_hw_tx(struct sk_buff *skb, struct net_device *dev, long linkid) | |||
1357 | claw_strt_out_IO(dev ); | 1357 | claw_strt_out_IO(dev ); |
1358 | claw_free_wrt_buf( dev ); | 1358 | claw_free_wrt_buf( dev ); |
1359 | if (privptr->write_free_count==0) { | 1359 | if (privptr->write_free_count==0) { |
1360 | ch = &privptr->channel[WRITE]; | 1360 | ch = &privptr->channel[WRITE_CHANNEL]; |
1361 | atomic_inc(&skb->users); | 1361 | atomic_inc(&skb->users); |
1362 | skb_queue_tail(&ch->collect_queue, skb); | 1362 | skb_queue_tail(&ch->collect_queue, skb); |
1363 | goto Done; | 1363 | goto Done; |
@@ -1369,7 +1369,7 @@ claw_hw_tx(struct sk_buff *skb, struct net_device *dev, long linkid) | |||
1369 | } | 1369 | } |
1370 | /* tx lock */ | 1370 | /* tx lock */ |
1371 | if (claw_test_and_setbit_busy(TB_TX,dev)) { /* set to busy */ | 1371 | if (claw_test_and_setbit_busy(TB_TX,dev)) { /* set to busy */ |
1372 | ch = &privptr->channel[WRITE]; | 1372 | ch = &privptr->channel[WRITE_CHANNEL]; |
1373 | atomic_inc(&skb->users); | 1373 | atomic_inc(&skb->users); |
1374 | skb_queue_tail(&ch->collect_queue, skb); | 1374 | skb_queue_tail(&ch->collect_queue, skb); |
1375 | claw_strt_out_IO(dev ); | 1375 | claw_strt_out_IO(dev ); |
@@ -1385,7 +1385,7 @@ claw_hw_tx(struct sk_buff *skb, struct net_device *dev, long linkid) | |||
1385 | privptr->p_write_free_chain == NULL ) { | 1385 | privptr->p_write_free_chain == NULL ) { |
1386 | 1386 | ||
1387 | claw_setbit_busy(TB_NOBUFFER,dev); | 1387 | claw_setbit_busy(TB_NOBUFFER,dev); |
1388 | ch = &privptr->channel[WRITE]; | 1388 | ch = &privptr->channel[WRITE_CHANNEL]; |
1389 | atomic_inc(&skb->users); | 1389 | atomic_inc(&skb->users); |
1390 | skb_queue_tail(&ch->collect_queue, skb); | 1390 | skb_queue_tail(&ch->collect_queue, skb); |
1391 | CLAW_DBF_TEXT(2, trace, "clawbusy"); | 1391 | CLAW_DBF_TEXT(2, trace, "clawbusy"); |
@@ -1397,7 +1397,7 @@ claw_hw_tx(struct sk_buff *skb, struct net_device *dev, long linkid) | |||
1397 | while (len_of_data > 0) { | 1397 | while (len_of_data > 0) { |
1398 | p_this_ccw=privptr->p_write_free_chain; /* get a block */ | 1398 | p_this_ccw=privptr->p_write_free_chain; /* get a block */ |
1399 | if (p_this_ccw == NULL) { /* lost the race */ | 1399 | if (p_this_ccw == NULL) { /* lost the race */ |
1400 | ch = &privptr->channel[WRITE]; | 1400 | ch = &privptr->channel[WRITE_CHANNEL]; |
1401 | atomic_inc(&skb->users); | 1401 | atomic_inc(&skb->users); |
1402 | skb_queue_tail(&ch->collect_queue, skb); | 1402 | skb_queue_tail(&ch->collect_queue, skb); |
1403 | goto Done2; | 1403 | goto Done2; |
@@ -2067,7 +2067,7 @@ claw_process_control( struct net_device *dev, struct ccwbk * p_ccw) | |||
2067 | *catch up to each other */ | 2067 | *catch up to each other */ |
2068 | privptr = dev->ml_priv; | 2068 | privptr = dev->ml_priv; |
2069 | p_env=privptr->p_env; | 2069 | p_env=privptr->p_env; |
2070 | tdev = &privptr->channel[READ].cdev->dev; | 2070 | tdev = &privptr->channel[READ_CHANNEL].cdev->dev; |
2071 | memcpy( &temp_host_name, p_env->host_name, 8); | 2071 | memcpy( &temp_host_name, p_env->host_name, 8); |
2072 | memcpy( &temp_ws_name, p_env->adapter_name , 8); | 2072 | memcpy( &temp_ws_name, p_env->adapter_name , 8); |
2073 | dev_info(tdev, "%s: CLAW device %.8s: " | 2073 | dev_info(tdev, "%s: CLAW device %.8s: " |
@@ -2245,7 +2245,7 @@ claw_process_control( struct net_device *dev, struct ccwbk * p_ccw) | |||
2245 | dev->name, temp_ws_name, | 2245 | dev->name, temp_ws_name, |
2246 | p_ctlbk->linkid); | 2246 | p_ctlbk->linkid); |
2247 | privptr->active_link_ID = p_ctlbk->linkid; | 2247 | privptr->active_link_ID = p_ctlbk->linkid; |
2248 | p_ch = &privptr->channel[WRITE]; | 2248 | p_ch = &privptr->channel[WRITE_CHANNEL]; |
2249 | wake_up(&p_ch->wait); /* wake up claw_open ( WRITE) */ | 2249 | wake_up(&p_ch->wait); /* wake up claw_open ( WRITE) */ |
2250 | break; | 2250 | break; |
2251 | case CONNECTION_RESPONSE: | 2251 | case CONNECTION_RESPONSE: |
@@ -2296,7 +2296,7 @@ claw_process_control( struct net_device *dev, struct ccwbk * p_ccw) | |||
2296 | "%s: Confirmed Now packing\n", dev->name); | 2296 | "%s: Confirmed Now packing\n", dev->name); |
2297 | p_env->packing = DO_PACKED; | 2297 | p_env->packing = DO_PACKED; |
2298 | } | 2298 | } |
2299 | p_ch = &privptr->channel[WRITE]; | 2299 | p_ch = &privptr->channel[WRITE_CHANNEL]; |
2300 | wake_up(&p_ch->wait); | 2300 | wake_up(&p_ch->wait); |
2301 | } else { | 2301 | } else { |
2302 | dev_warn(tdev, "Activating %s failed because of" | 2302 | dev_warn(tdev, "Activating %s failed because of" |
@@ -2556,7 +2556,7 @@ unpack_read(struct net_device *dev ) | |||
2556 | p_packd=NULL; | 2556 | p_packd=NULL; |
2557 | privptr = dev->ml_priv; | 2557 | privptr = dev->ml_priv; |
2558 | 2558 | ||
2559 | p_dev = &privptr->channel[READ].cdev->dev; | 2559 | p_dev = &privptr->channel[READ_CHANNEL].cdev->dev; |
2560 | p_env = privptr->p_env; | 2560 | p_env = privptr->p_env; |
2561 | p_this_ccw=privptr->p_read_active_first; | 2561 | p_this_ccw=privptr->p_read_active_first; |
2562 | while (p_this_ccw!=NULL && p_this_ccw->header.flag!=CLAW_PENDING) { | 2562 | while (p_this_ccw!=NULL && p_this_ccw->header.flag!=CLAW_PENDING) { |
@@ -2728,7 +2728,7 @@ claw_strt_read (struct net_device *dev, int lock ) | |||
2728 | struct ccwbk*p_ccwbk; | 2728 | struct ccwbk*p_ccwbk; |
2729 | struct chbk *p_ch; | 2729 | struct chbk *p_ch; |
2730 | struct clawh *p_clawh; | 2730 | struct clawh *p_clawh; |
2731 | p_ch=&privptr->channel[READ]; | 2731 | p_ch = &privptr->channel[READ_CHANNEL]; |
2732 | 2732 | ||
2733 | CLAW_DBF_TEXT(4, trace, "StRdNter"); | 2733 | CLAW_DBF_TEXT(4, trace, "StRdNter"); |
2734 | p_clawh=(struct clawh *)privptr->p_claw_signal_blk; | 2734 | p_clawh=(struct clawh *)privptr->p_claw_signal_blk; |
@@ -2782,7 +2782,7 @@ claw_strt_out_IO( struct net_device *dev ) | |||
2782 | return; | 2782 | return; |
2783 | } | 2783 | } |
2784 | privptr = (struct claw_privbk *)dev->ml_priv; | 2784 | privptr = (struct claw_privbk *)dev->ml_priv; |
2785 | p_ch=&privptr->channel[WRITE]; | 2785 | p_ch = &privptr->channel[WRITE_CHANNEL]; |
2786 | 2786 | ||
2787 | CLAW_DBF_TEXT(4, trace, "strt_io"); | 2787 | CLAW_DBF_TEXT(4, trace, "strt_io"); |
2788 | p_first_ccw=privptr->p_write_active_first; | 2788 | p_first_ccw=privptr->p_write_active_first; |
@@ -2875,7 +2875,7 @@ claw_free_netdevice(struct net_device * dev, int free_dev) | |||
2875 | if (dev->flags & IFF_RUNNING) | 2875 | if (dev->flags & IFF_RUNNING) |
2876 | claw_release(dev); | 2876 | claw_release(dev); |
2877 | if (privptr) { | 2877 | if (privptr) { |
2878 | privptr->channel[READ].ndev = NULL; /* say it's free */ | 2878 | privptr->channel[READ_CHANNEL].ndev = NULL; /* say it's free */ |
2879 | } | 2879 | } |
2880 | dev->ml_priv = NULL; | 2880 | dev->ml_priv = NULL; |
2881 | #ifdef MODULE | 2881 | #ifdef MODULE |
@@ -2960,18 +2960,18 @@ claw_new_device(struct ccwgroup_device *cgdev) | |||
2960 | struct ccw_dev_id dev_id; | 2960 | struct ccw_dev_id dev_id; |
2961 | 2961 | ||
2962 | dev_info(&cgdev->dev, "add for %s\n", | 2962 | dev_info(&cgdev->dev, "add for %s\n", |
2963 | dev_name(&cgdev->cdev[READ]->dev)); | 2963 | dev_name(&cgdev->cdev[READ_CHANNEL]->dev)); |
2964 | CLAW_DBF_TEXT(2, setup, "new_dev"); | 2964 | CLAW_DBF_TEXT(2, setup, "new_dev"); |
2965 | privptr = dev_get_drvdata(&cgdev->dev); | 2965 | privptr = dev_get_drvdata(&cgdev->dev); |
2966 | dev_set_drvdata(&cgdev->cdev[READ]->dev, privptr); | 2966 | dev_set_drvdata(&cgdev->cdev[READ_CHANNEL]->dev, privptr); |
2967 | dev_set_drvdata(&cgdev->cdev[WRITE]->dev, privptr); | 2967 | dev_set_drvdata(&cgdev->cdev[WRITE_CHANNEL]->dev, privptr); |
2968 | if (!privptr) | 2968 | if (!privptr) |
2969 | return -ENODEV; | 2969 | return -ENODEV; |
2970 | p_env = privptr->p_env; | 2970 | p_env = privptr->p_env; |
2971 | ccw_device_get_id(cgdev->cdev[READ], &dev_id); | 2971 | ccw_device_get_id(cgdev->cdev[READ_CHANNEL], &dev_id); |
2972 | p_env->devno[READ] = dev_id.devno; | 2972 | p_env->devno[READ_CHANNEL] = dev_id.devno; |
2973 | ccw_device_get_id(cgdev->cdev[WRITE], &dev_id); | 2973 | ccw_device_get_id(cgdev->cdev[WRITE_CHANNEL], &dev_id); |
2974 | p_env->devno[WRITE] = dev_id.devno; | 2974 | p_env->devno[WRITE_CHANNEL] = dev_id.devno; |
2975 | ret = add_channel(cgdev->cdev[0],0,privptr); | 2975 | ret = add_channel(cgdev->cdev[0],0,privptr); |
2976 | if (ret == 0) | 2976 | if (ret == 0) |
2977 | ret = add_channel(cgdev->cdev[1],1,privptr); | 2977 | ret = add_channel(cgdev->cdev[1],1,privptr); |
@@ -2980,14 +2980,14 @@ claw_new_device(struct ccwgroup_device *cgdev) | |||
2980 | " failed with error code %d\n", ret); | 2980 | " failed with error code %d\n", ret); |
2981 | goto out; | 2981 | goto out; |
2982 | } | 2982 | } |
2983 | ret = ccw_device_set_online(cgdev->cdev[READ]); | 2983 | ret = ccw_device_set_online(cgdev->cdev[READ_CHANNEL]); |
2984 | if (ret != 0) { | 2984 | if (ret != 0) { |
2985 | dev_warn(&cgdev->dev, | 2985 | dev_warn(&cgdev->dev, |
2986 | "Setting the read subchannel online" | 2986 | "Setting the read subchannel online" |
2987 | " failed with error code %d\n", ret); | 2987 | " failed with error code %d\n", ret); |
2988 | goto out; | 2988 | goto out; |
2989 | } | 2989 | } |
2990 | ret = ccw_device_set_online(cgdev->cdev[WRITE]); | 2990 | ret = ccw_device_set_online(cgdev->cdev[WRITE_CHANNEL]); |
2991 | if (ret != 0) { | 2991 | if (ret != 0) { |
2992 | dev_warn(&cgdev->dev, | 2992 | dev_warn(&cgdev->dev, |
2993 | "Setting the write subchannel online " | 2993 | "Setting the write subchannel online " |
@@ -3002,8 +3002,8 @@ claw_new_device(struct ccwgroup_device *cgdev) | |||
3002 | } | 3002 | } |
3003 | dev->ml_priv = privptr; | 3003 | dev->ml_priv = privptr; |
3004 | dev_set_drvdata(&cgdev->dev, privptr); | 3004 | dev_set_drvdata(&cgdev->dev, privptr); |
3005 | dev_set_drvdata(&cgdev->cdev[READ]->dev, privptr); | 3005 | dev_set_drvdata(&cgdev->cdev[READ_CHANNEL]->dev, privptr); |
3006 | dev_set_drvdata(&cgdev->cdev[WRITE]->dev, privptr); | 3006 | dev_set_drvdata(&cgdev->cdev[WRITE_CHANNEL]->dev, privptr); |
3007 | /* sysfs magic */ | 3007 | /* sysfs magic */ |
3008 | SET_NETDEV_DEV(dev, &cgdev->dev); | 3008 | SET_NETDEV_DEV(dev, &cgdev->dev); |
3009 | if (register_netdev(dev) != 0) { | 3009 | if (register_netdev(dev) != 0) { |
@@ -3021,16 +3021,16 @@ claw_new_device(struct ccwgroup_device *cgdev) | |||
3021 | goto out; | 3021 | goto out; |
3022 | } | 3022 | } |
3023 | } | 3023 | } |
3024 | privptr->channel[READ].ndev = dev; | 3024 | privptr->channel[READ_CHANNEL].ndev = dev; |
3025 | privptr->channel[WRITE].ndev = dev; | 3025 | privptr->channel[WRITE_CHANNEL].ndev = dev; |
3026 | privptr->p_env->ndev = dev; | 3026 | privptr->p_env->ndev = dev; |
3027 | 3027 | ||
3028 | dev_info(&cgdev->dev, "%s:readsize=%d writesize=%d " | 3028 | dev_info(&cgdev->dev, "%s:readsize=%d writesize=%d " |
3029 | "readbuffer=%d writebuffer=%d read=0x%04x write=0x%04x\n", | 3029 | "readbuffer=%d writebuffer=%d read=0x%04x write=0x%04x\n", |
3030 | dev->name, p_env->read_size, | 3030 | dev->name, p_env->read_size, |
3031 | p_env->write_size, p_env->read_buffers, | 3031 | p_env->write_size, p_env->read_buffers, |
3032 | p_env->write_buffers, p_env->devno[READ], | 3032 | p_env->write_buffers, p_env->devno[READ_CHANNEL], |
3033 | p_env->devno[WRITE]); | 3033 | p_env->devno[WRITE_CHANNEL]); |
3034 | dev_info(&cgdev->dev, "%s:host_name:%.8s, adapter_name " | 3034 | dev_info(&cgdev->dev, "%s:host_name:%.8s, adapter_name " |
3035 | ":%.8s api_type: %.8s\n", | 3035 | ":%.8s api_type: %.8s\n", |
3036 | dev->name, p_env->host_name, | 3036 | dev->name, p_env->host_name, |
@@ -3072,10 +3072,10 @@ claw_shutdown_device(struct ccwgroup_device *cgdev) | |||
3072 | priv = dev_get_drvdata(&cgdev->dev); | 3072 | priv = dev_get_drvdata(&cgdev->dev); |
3073 | if (!priv) | 3073 | if (!priv) |
3074 | return -ENODEV; | 3074 | return -ENODEV; |
3075 | ndev = priv->channel[READ].ndev; | 3075 | ndev = priv->channel[READ_CHANNEL].ndev; |
3076 | if (ndev) { | 3076 | if (ndev) { |
3077 | /* Close the device */ | 3077 | /* Close the device */ |
3078 | dev_info(&cgdev->dev, "%s: shutting down \n", | 3078 | dev_info(&cgdev->dev, "%s: shutting down\n", |
3079 | ndev->name); | 3079 | ndev->name); |
3080 | if (ndev->flags & IFF_RUNNING) | 3080 | if (ndev->flags & IFF_RUNNING) |
3081 | ret = claw_release(ndev); | 3081 | ret = claw_release(ndev); |
@@ -3083,8 +3083,8 @@ claw_shutdown_device(struct ccwgroup_device *cgdev) | |||
3083 | unregister_netdev(ndev); | 3083 | unregister_netdev(ndev); |
3084 | ndev->ml_priv = NULL; /* cgdev data, not ndev's to free */ | 3084 | ndev->ml_priv = NULL; /* cgdev data, not ndev's to free */ |
3085 | claw_free_netdevice(ndev, 1); | 3085 | claw_free_netdevice(ndev, 1); |
3086 | priv->channel[READ].ndev = NULL; | 3086 | priv->channel[READ_CHANNEL].ndev = NULL; |
3087 | priv->channel[WRITE].ndev = NULL; | 3087 | priv->channel[WRITE_CHANNEL].ndev = NULL; |
3088 | priv->p_env->ndev = NULL; | 3088 | priv->p_env->ndev = NULL; |
3089 | } | 3089 | } |
3090 | ccw_device_set_offline(cgdev->cdev[1]); | 3090 | ccw_device_set_offline(cgdev->cdev[1]); |
@@ -3115,8 +3115,8 @@ claw_remove_device(struct ccwgroup_device *cgdev) | |||
3115 | priv->channel[1].irb=NULL; | 3115 | priv->channel[1].irb=NULL; |
3116 | kfree(priv); | 3116 | kfree(priv); |
3117 | dev_set_drvdata(&cgdev->dev, NULL); | 3117 | dev_set_drvdata(&cgdev->dev, NULL); |
3118 | dev_set_drvdata(&cgdev->cdev[READ]->dev, NULL); | 3118 | dev_set_drvdata(&cgdev->cdev[READ_CHANNEL]->dev, NULL); |
3119 | dev_set_drvdata(&cgdev->cdev[WRITE]->dev, NULL); | 3119 | dev_set_drvdata(&cgdev->cdev[WRITE_CHANNEL]->dev, NULL); |
3120 | put_device(&cgdev->dev); | 3120 | put_device(&cgdev->dev); |
3121 | 3121 | ||
3122 | return; | 3122 | return; |
diff --git a/drivers/s390/net/claw.h b/drivers/s390/net/claw.h index 46d59a13db12..1bc5904df19f 100644 --- a/drivers/s390/net/claw.h +++ b/drivers/s390/net/claw.h | |||
@@ -74,8 +74,8 @@ | |||
74 | #define MAX_ENVELOPE_SIZE 65536 | 74 | #define MAX_ENVELOPE_SIZE 65536 |
75 | #define CLAW_DEFAULT_MTU_SIZE 4096 | 75 | #define CLAW_DEFAULT_MTU_SIZE 4096 |
76 | #define DEF_PACK_BUFSIZE 32768 | 76 | #define DEF_PACK_BUFSIZE 32768 |
77 | #define READ 0 | 77 | #define READ_CHANNEL 0 |
78 | #define WRITE 1 | 78 | #define WRITE_CHANNEL 1 |
79 | 79 | ||
80 | #define TB_TX 0 /* sk buffer handling in process */ | 80 | #define TB_TX 0 /* sk buffer handling in process */ |
81 | #define TB_STOP 1 /* network device stop in process */ | 81 | #define TB_STOP 1 /* network device stop in process */ |
diff --git a/drivers/s390/net/ctcm_fsms.c b/drivers/s390/net/ctcm_fsms.c index 70eb7f138414..8c921fc3511a 100644 --- a/drivers/s390/net/ctcm_fsms.c +++ b/drivers/s390/net/ctcm_fsms.c | |||
@@ -454,7 +454,7 @@ static void chx_firstio(fsm_instance *fi, int event, void *arg) | |||
454 | if ((fsmstate == CTC_STATE_SETUPWAIT) && | 454 | if ((fsmstate == CTC_STATE_SETUPWAIT) && |
455 | (ch->protocol == CTCM_PROTO_OS390)) { | 455 | (ch->protocol == CTCM_PROTO_OS390)) { |
456 | /* OS/390 resp. z/OS */ | 456 | /* OS/390 resp. z/OS */ |
457 | if (CHANNEL_DIRECTION(ch->flags) == READ) { | 457 | if (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) { |
458 | *((__u16 *)ch->trans_skb->data) = CTCM_INITIAL_BLOCKLEN; | 458 | *((__u16 *)ch->trans_skb->data) = CTCM_INITIAL_BLOCKLEN; |
459 | fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, | 459 | fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, |
460 | CTC_EVENT_TIMER, ch); | 460 | CTC_EVENT_TIMER, ch); |
@@ -472,14 +472,14 @@ static void chx_firstio(fsm_instance *fi, int event, void *arg) | |||
472 | * if in compatibility mode, since VM TCP delays the initial | 472 | * if in compatibility mode, since VM TCP delays the initial |
473 | * frame until it has some data to send. | 473 | * frame until it has some data to send. |
474 | */ | 474 | */ |
475 | if ((CHANNEL_DIRECTION(ch->flags) == WRITE) || | 475 | if ((CHANNEL_DIRECTION(ch->flags) == CTCM_WRITE) || |
476 | (ch->protocol != CTCM_PROTO_S390)) | 476 | (ch->protocol != CTCM_PROTO_S390)) |
477 | fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch); | 477 | fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch); |
478 | 478 | ||
479 | *((__u16 *)ch->trans_skb->data) = CTCM_INITIAL_BLOCKLEN; | 479 | *((__u16 *)ch->trans_skb->data) = CTCM_INITIAL_BLOCKLEN; |
480 | ch->ccw[1].count = 2; /* Transfer only length */ | 480 | ch->ccw[1].count = 2; /* Transfer only length */ |
481 | 481 | ||
482 | fsm_newstate(fi, (CHANNEL_DIRECTION(ch->flags) == READ) | 482 | fsm_newstate(fi, (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) |
483 | ? CTC_STATE_RXINIT : CTC_STATE_TXINIT); | 483 | ? CTC_STATE_RXINIT : CTC_STATE_TXINIT); |
484 | rc = ccw_device_start(ch->cdev, &ch->ccw[0], | 484 | rc = ccw_device_start(ch->cdev, &ch->ccw[0], |
485 | (unsigned long)ch, 0xff, 0); | 485 | (unsigned long)ch, 0xff, 0); |
@@ -495,7 +495,7 @@ static void chx_firstio(fsm_instance *fi, int event, void *arg) | |||
495 | * reply from VM TCP which brings up the RX channel to it's | 495 | * reply from VM TCP which brings up the RX channel to it's |
496 | * final state. | 496 | * final state. |
497 | */ | 497 | */ |
498 | if ((CHANNEL_DIRECTION(ch->flags) == READ) && | 498 | if ((CHANNEL_DIRECTION(ch->flags) == CTCM_READ) && |
499 | (ch->protocol == CTCM_PROTO_S390)) { | 499 | (ch->protocol == CTCM_PROTO_S390)) { |
500 | struct net_device *dev = ch->netdev; | 500 | struct net_device *dev = ch->netdev; |
501 | struct ctcm_priv *priv = dev->ml_priv; | 501 | struct ctcm_priv *priv = dev->ml_priv; |
@@ -600,15 +600,15 @@ static void ctcm_chx_start(fsm_instance *fi, int event, void *arg) | |||
600 | int rc; | 600 | int rc; |
601 | 601 | ||
602 | CTCM_DBF_TEXT_(SETUP, CTC_DBF_INFO, "%s(%s): %s", | 602 | CTCM_DBF_TEXT_(SETUP, CTC_DBF_INFO, "%s(%s): %s", |
603 | CTCM_FUNTAIL, ch->id, | 603 | CTCM_FUNTAIL, ch->id, |
604 | (CHANNEL_DIRECTION(ch->flags) == READ) ? "RX" : "TX"); | 604 | (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) ? "RX" : "TX"); |
605 | 605 | ||
606 | if (ch->trans_skb != NULL) { | 606 | if (ch->trans_skb != NULL) { |
607 | clear_normalized_cda(&ch->ccw[1]); | 607 | clear_normalized_cda(&ch->ccw[1]); |
608 | dev_kfree_skb(ch->trans_skb); | 608 | dev_kfree_skb(ch->trans_skb); |
609 | ch->trans_skb = NULL; | 609 | ch->trans_skb = NULL; |
610 | } | 610 | } |
611 | if (CHANNEL_DIRECTION(ch->flags) == READ) { | 611 | if (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) { |
612 | ch->ccw[1].cmd_code = CCW_CMD_READ; | 612 | ch->ccw[1].cmd_code = CCW_CMD_READ; |
613 | ch->ccw[1].flags = CCW_FLAG_SLI; | 613 | ch->ccw[1].flags = CCW_FLAG_SLI; |
614 | ch->ccw[1].count = 0; | 614 | ch->ccw[1].count = 0; |
@@ -622,7 +622,8 @@ static void ctcm_chx_start(fsm_instance *fi, int event, void *arg) | |||
622 | "%s(%s): %s trans_skb alloc delayed " | 622 | "%s(%s): %s trans_skb alloc delayed " |
623 | "until first transfer", | 623 | "until first transfer", |
624 | CTCM_FUNTAIL, ch->id, | 624 | CTCM_FUNTAIL, ch->id, |
625 | (CHANNEL_DIRECTION(ch->flags) == READ) ? "RX" : "TX"); | 625 | (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) ? |
626 | "RX" : "TX"); | ||
626 | } | 627 | } |
627 | ch->ccw[0].cmd_code = CCW_CMD_PREPARE; | 628 | ch->ccw[0].cmd_code = CCW_CMD_PREPARE; |
628 | ch->ccw[0].flags = CCW_FLAG_SLI | CCW_FLAG_CC; | 629 | ch->ccw[0].flags = CCW_FLAG_SLI | CCW_FLAG_CC; |
@@ -720,7 +721,7 @@ static void ctcm_chx_cleanup(fsm_instance *fi, int state, | |||
720 | 721 | ||
721 | ch->th_seg = 0x00; | 722 | ch->th_seg = 0x00; |
722 | ch->th_seq_num = 0x00; | 723 | ch->th_seq_num = 0x00; |
723 | if (CHANNEL_DIRECTION(ch->flags) == READ) { | 724 | if (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) { |
724 | skb_queue_purge(&ch->io_queue); | 725 | skb_queue_purge(&ch->io_queue); |
725 | fsm_event(priv->fsm, DEV_EVENT_RXDOWN, dev); | 726 | fsm_event(priv->fsm, DEV_EVENT_RXDOWN, dev); |
726 | } else { | 727 | } else { |
@@ -799,7 +800,8 @@ static void ctcm_chx_setuperr(fsm_instance *fi, int event, void *arg) | |||
799 | fsm_newstate(fi, CTC_STATE_STARTRETRY); | 800 | fsm_newstate(fi, CTC_STATE_STARTRETRY); |
800 | fsm_deltimer(&ch->timer); | 801 | fsm_deltimer(&ch->timer); |
801 | fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch); | 802 | fsm_addtimer(&ch->timer, CTCM_TIME_5_SEC, CTC_EVENT_TIMER, ch); |
802 | if (!IS_MPC(ch) && (CHANNEL_DIRECTION(ch->flags) == READ)) { | 803 | if (!IS_MPC(ch) && |
804 | (CHANNEL_DIRECTION(ch->flags) == CTCM_READ)) { | ||
803 | int rc = ccw_device_halt(ch->cdev, (unsigned long)ch); | 805 | int rc = ccw_device_halt(ch->cdev, (unsigned long)ch); |
804 | if (rc != 0) | 806 | if (rc != 0) |
805 | ctcm_ccw_check_rc(ch, rc, | 807 | ctcm_ccw_check_rc(ch, rc, |
@@ -811,10 +813,10 @@ static void ctcm_chx_setuperr(fsm_instance *fi, int event, void *arg) | |||
811 | CTCM_DBF_TEXT_(ERROR, CTC_DBF_CRIT, | 813 | CTCM_DBF_TEXT_(ERROR, CTC_DBF_CRIT, |
812 | "%s(%s) : %s error during %s channel setup state=%s\n", | 814 | "%s(%s) : %s error during %s channel setup state=%s\n", |
813 | CTCM_FUNTAIL, dev->name, ctc_ch_event_names[event], | 815 | CTCM_FUNTAIL, dev->name, ctc_ch_event_names[event], |
814 | (CHANNEL_DIRECTION(ch->flags) == READ) ? "RX" : "TX", | 816 | (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) ? "RX" : "TX", |
815 | fsm_getstate_str(fi)); | 817 | fsm_getstate_str(fi)); |
816 | 818 | ||
817 | if (CHANNEL_DIRECTION(ch->flags) == READ) { | 819 | if (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) { |
818 | fsm_newstate(fi, CTC_STATE_RXERR); | 820 | fsm_newstate(fi, CTC_STATE_RXERR); |
819 | fsm_event(priv->fsm, DEV_EVENT_RXDOWN, dev); | 821 | fsm_event(priv->fsm, DEV_EVENT_RXDOWN, dev); |
820 | } else { | 822 | } else { |
@@ -945,7 +947,7 @@ static void ctcm_chx_rxdisc(fsm_instance *fi, int event, void *arg) | |||
945 | fsm_event(priv->fsm, DEV_EVENT_TXDOWN, dev); | 947 | fsm_event(priv->fsm, DEV_EVENT_TXDOWN, dev); |
946 | 948 | ||
947 | fsm_newstate(fi, CTC_STATE_DTERM); | 949 | fsm_newstate(fi, CTC_STATE_DTERM); |
948 | ch2 = priv->channel[WRITE]; | 950 | ch2 = priv->channel[CTCM_WRITE]; |
949 | fsm_newstate(ch2->fsm, CTC_STATE_DTERM); | 951 | fsm_newstate(ch2->fsm, CTC_STATE_DTERM); |
950 | 952 | ||
951 | ccw_device_halt(ch->cdev, (unsigned long)ch); | 953 | ccw_device_halt(ch->cdev, (unsigned long)ch); |
@@ -1074,13 +1076,13 @@ static void ctcm_chx_iofatal(fsm_instance *fi, int event, void *arg) | |||
1074 | fsm_deltimer(&ch->timer); | 1076 | fsm_deltimer(&ch->timer); |
1075 | CTCM_DBF_TEXT_(ERROR, CTC_DBF_ERROR, | 1077 | CTCM_DBF_TEXT_(ERROR, CTC_DBF_ERROR, |
1076 | "%s: %s: %s unrecoverable channel error", | 1078 | "%s: %s: %s unrecoverable channel error", |
1077 | CTCM_FUNTAIL, ch->id, rd == READ ? "RX" : "TX"); | 1079 | CTCM_FUNTAIL, ch->id, rd == CTCM_READ ? "RX" : "TX"); |
1078 | 1080 | ||
1079 | if (IS_MPC(ch)) { | 1081 | if (IS_MPC(ch)) { |
1080 | priv->stats.tx_dropped++; | 1082 | priv->stats.tx_dropped++; |
1081 | priv->stats.tx_errors++; | 1083 | priv->stats.tx_errors++; |
1082 | } | 1084 | } |
1083 | if (rd == READ) { | 1085 | if (rd == CTCM_READ) { |
1084 | fsm_newstate(fi, CTC_STATE_RXERR); | 1086 | fsm_newstate(fi, CTC_STATE_RXERR); |
1085 | fsm_event(priv->fsm, DEV_EVENT_RXDOWN, dev); | 1087 | fsm_event(priv->fsm, DEV_EVENT_RXDOWN, dev); |
1086 | } else { | 1088 | } else { |
@@ -1503,7 +1505,7 @@ static void ctcmpc_chx_firstio(fsm_instance *fi, int event, void *arg) | |||
1503 | switch (fsm_getstate(fi)) { | 1505 | switch (fsm_getstate(fi)) { |
1504 | case CTC_STATE_STARTRETRY: | 1506 | case CTC_STATE_STARTRETRY: |
1505 | case CTC_STATE_SETUPWAIT: | 1507 | case CTC_STATE_SETUPWAIT: |
1506 | if (CHANNEL_DIRECTION(ch->flags) == READ) { | 1508 | if (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) { |
1507 | ctcmpc_chx_rxidle(fi, event, arg); | 1509 | ctcmpc_chx_rxidle(fi, event, arg); |
1508 | } else { | 1510 | } else { |
1509 | fsm_newstate(fi, CTC_STATE_TXIDLE); | 1511 | fsm_newstate(fi, CTC_STATE_TXIDLE); |
@@ -1514,7 +1516,7 @@ static void ctcmpc_chx_firstio(fsm_instance *fi, int event, void *arg) | |||
1514 | break; | 1516 | break; |
1515 | }; | 1517 | }; |
1516 | 1518 | ||
1517 | fsm_newstate(fi, (CHANNEL_DIRECTION(ch->flags) == READ) | 1519 | fsm_newstate(fi, (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) |
1518 | ? CTC_STATE_RXINIT : CTC_STATE_TXINIT); | 1520 | ? CTC_STATE_RXINIT : CTC_STATE_TXINIT); |
1519 | 1521 | ||
1520 | done: | 1522 | done: |
@@ -1753,8 +1755,8 @@ static void ctcmpc_chx_send_sweep(fsm_instance *fsm, int event, void *arg) | |||
1753 | struct net_device *dev = ach->netdev; | 1755 | struct net_device *dev = ach->netdev; |
1754 | struct ctcm_priv *priv = dev->ml_priv; | 1756 | struct ctcm_priv *priv = dev->ml_priv; |
1755 | struct mpc_group *grp = priv->mpcg; | 1757 | struct mpc_group *grp = priv->mpcg; |
1756 | struct channel *wch = priv->channel[WRITE]; | 1758 | struct channel *wch = priv->channel[CTCM_WRITE]; |
1757 | struct channel *rch = priv->channel[READ]; | 1759 | struct channel *rch = priv->channel[CTCM_READ]; |
1758 | struct sk_buff *skb; | 1760 | struct sk_buff *skb; |
1759 | struct th_sweep *header; | 1761 | struct th_sweep *header; |
1760 | int rc = 0; | 1762 | int rc = 0; |
@@ -2070,7 +2072,7 @@ static void dev_action_start(fsm_instance *fi, int event, void *arg) | |||
2070 | fsm_newstate(fi, DEV_STATE_STARTWAIT_RXTX); | 2072 | fsm_newstate(fi, DEV_STATE_STARTWAIT_RXTX); |
2071 | if (IS_MPC(priv)) | 2073 | if (IS_MPC(priv)) |
2072 | priv->mpcg->channels_terminating = 0; | 2074 | priv->mpcg->channels_terminating = 0; |
2073 | for (direction = READ; direction <= WRITE; direction++) { | 2075 | for (direction = CTCM_READ; direction <= CTCM_WRITE; direction++) { |
2074 | struct channel *ch = priv->channel[direction]; | 2076 | struct channel *ch = priv->channel[direction]; |
2075 | fsm_event(ch->fsm, CTC_EVENT_START, ch); | 2077 | fsm_event(ch->fsm, CTC_EVENT_START, ch); |
2076 | } | 2078 | } |
@@ -2092,7 +2094,7 @@ static void dev_action_stop(fsm_instance *fi, int event, void *arg) | |||
2092 | CTCMY_DBF_DEV_NAME(SETUP, dev, ""); | 2094 | CTCMY_DBF_DEV_NAME(SETUP, dev, ""); |
2093 | 2095 | ||
2094 | fsm_newstate(fi, DEV_STATE_STOPWAIT_RXTX); | 2096 | fsm_newstate(fi, DEV_STATE_STOPWAIT_RXTX); |
2095 | for (direction = READ; direction <= WRITE; direction++) { | 2097 | for (direction = CTCM_READ; direction <= CTCM_WRITE; direction++) { |
2096 | struct channel *ch = priv->channel[direction]; | 2098 | struct channel *ch = priv->channel[direction]; |
2097 | fsm_event(ch->fsm, CTC_EVENT_STOP, ch); | 2099 | fsm_event(ch->fsm, CTC_EVENT_STOP, ch); |
2098 | ch->th_seq_num = 0x00; | 2100 | ch->th_seq_num = 0x00; |
@@ -2183,11 +2185,11 @@ static void dev_action_chup(fsm_instance *fi, int event, void *arg) | |||
2183 | 2185 | ||
2184 | if (IS_MPC(priv)) { | 2186 | if (IS_MPC(priv)) { |
2185 | if (event == DEV_EVENT_RXUP) | 2187 | if (event == DEV_EVENT_RXUP) |
2186 | mpc_channel_action(priv->channel[READ], | 2188 | mpc_channel_action(priv->channel[CTCM_READ], |
2187 | READ, MPC_CHANNEL_ADD); | 2189 | CTCM_READ, MPC_CHANNEL_ADD); |
2188 | else | 2190 | else |
2189 | mpc_channel_action(priv->channel[WRITE], | 2191 | mpc_channel_action(priv->channel[CTCM_WRITE], |
2190 | WRITE, MPC_CHANNEL_ADD); | 2192 | CTCM_WRITE, MPC_CHANNEL_ADD); |
2191 | } | 2193 | } |
2192 | } | 2194 | } |
2193 | 2195 | ||
@@ -2239,11 +2241,11 @@ static void dev_action_chdown(fsm_instance *fi, int event, void *arg) | |||
2239 | } | 2241 | } |
2240 | if (IS_MPC(priv)) { | 2242 | if (IS_MPC(priv)) { |
2241 | if (event == DEV_EVENT_RXDOWN) | 2243 | if (event == DEV_EVENT_RXDOWN) |
2242 | mpc_channel_action(priv->channel[READ], | 2244 | mpc_channel_action(priv->channel[CTCM_READ], |
2243 | READ, MPC_CHANNEL_REMOVE); | 2245 | CTCM_READ, MPC_CHANNEL_REMOVE); |
2244 | else | 2246 | else |
2245 | mpc_channel_action(priv->channel[WRITE], | 2247 | mpc_channel_action(priv->channel[CTCM_WRITE], |
2246 | WRITE, MPC_CHANNEL_REMOVE); | 2248 | CTCM_WRITE, MPC_CHANNEL_REMOVE); |
2247 | } | 2249 | } |
2248 | } | 2250 | } |
2249 | 2251 | ||
diff --git a/drivers/s390/net/ctcm_main.c b/drivers/s390/net/ctcm_main.c index 4ecafbf91211..6edf20b62de5 100644 --- a/drivers/s390/net/ctcm_main.c +++ b/drivers/s390/net/ctcm_main.c | |||
@@ -267,7 +267,7 @@ static struct channel *channel_get(enum ctcm_channel_types type, | |||
267 | else { | 267 | else { |
268 | ch->flags |= CHANNEL_FLAGS_INUSE; | 268 | ch->flags |= CHANNEL_FLAGS_INUSE; |
269 | ch->flags &= ~CHANNEL_FLAGS_RWMASK; | 269 | ch->flags &= ~CHANNEL_FLAGS_RWMASK; |
270 | ch->flags |= (direction == WRITE) | 270 | ch->flags |= (direction == CTCM_WRITE) |
271 | ? CHANNEL_FLAGS_WRITE : CHANNEL_FLAGS_READ; | 271 | ? CHANNEL_FLAGS_WRITE : CHANNEL_FLAGS_READ; |
272 | fsm_newstate(ch->fsm, CTC_STATE_STOPPED); | 272 | fsm_newstate(ch->fsm, CTC_STATE_STOPPED); |
273 | } | 273 | } |
@@ -388,7 +388,8 @@ int ctcm_ch_alloc_buffer(struct channel *ch) | |||
388 | CTCM_DBF_TEXT_(ERROR, CTC_DBF_ERROR, | 388 | CTCM_DBF_TEXT_(ERROR, CTC_DBF_ERROR, |
389 | "%s(%s): %s trans_skb allocation error", | 389 | "%s(%s): %s trans_skb allocation error", |
390 | CTCM_FUNTAIL, ch->id, | 390 | CTCM_FUNTAIL, ch->id, |
391 | (CHANNEL_DIRECTION(ch->flags) == READ) ? "RX" : "TX"); | 391 | (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) ? |
392 | "RX" : "TX"); | ||
392 | return -ENOMEM; | 393 | return -ENOMEM; |
393 | } | 394 | } |
394 | 395 | ||
@@ -399,7 +400,8 @@ int ctcm_ch_alloc_buffer(struct channel *ch) | |||
399 | CTCM_DBF_TEXT_(ERROR, CTC_DBF_ERROR, | 400 | CTCM_DBF_TEXT_(ERROR, CTC_DBF_ERROR, |
400 | "%s(%s): %s set norm_cda failed", | 401 | "%s(%s): %s set norm_cda failed", |
401 | CTCM_FUNTAIL, ch->id, | 402 | CTCM_FUNTAIL, ch->id, |
402 | (CHANNEL_DIRECTION(ch->flags) == READ) ? "RX" : "TX"); | 403 | (CHANNEL_DIRECTION(ch->flags) == CTCM_READ) ? |
404 | "RX" : "TX"); | ||
403 | return -ENOMEM; | 405 | return -ENOMEM; |
404 | } | 406 | } |
405 | 407 | ||
@@ -603,14 +605,14 @@ static void ctcmpc_send_sweep_req(struct channel *rch) | |||
603 | 605 | ||
604 | priv = dev->ml_priv; | 606 | priv = dev->ml_priv; |
605 | grp = priv->mpcg; | 607 | grp = priv->mpcg; |
606 | ch = priv->channel[WRITE]; | 608 | ch = priv->channel[CTCM_WRITE]; |
607 | 609 | ||
608 | /* sweep processing is not complete until response and request */ | 610 | /* sweep processing is not complete until response and request */ |
609 | /* has completed for all read channels in group */ | 611 | /* has completed for all read channels in group */ |
610 | if (grp->in_sweep == 0) { | 612 | if (grp->in_sweep == 0) { |
611 | grp->in_sweep = 1; | 613 | grp->in_sweep = 1; |
612 | grp->sweep_rsp_pend_num = grp->active_channels[READ]; | 614 | grp->sweep_rsp_pend_num = grp->active_channels[CTCM_READ]; |
613 | grp->sweep_req_pend_num = grp->active_channels[READ]; | 615 | grp->sweep_req_pend_num = grp->active_channels[CTCM_READ]; |
614 | } | 616 | } |
615 | 617 | ||
616 | sweep_skb = __dev_alloc_skb(MPC_BUFSIZE_DEFAULT, GFP_ATOMIC|GFP_DMA); | 618 | sweep_skb = __dev_alloc_skb(MPC_BUFSIZE_DEFAULT, GFP_ATOMIC|GFP_DMA); |
@@ -911,7 +913,7 @@ static int ctcm_tx(struct sk_buff *skb, struct net_device *dev) | |||
911 | return NETDEV_TX_BUSY; | 913 | return NETDEV_TX_BUSY; |
912 | 914 | ||
913 | dev->trans_start = jiffies; | 915 | dev->trans_start = jiffies; |
914 | if (ctcm_transmit_skb(priv->channel[WRITE], skb) != 0) | 916 | if (ctcm_transmit_skb(priv->channel[CTCM_WRITE], skb) != 0) |
915 | return NETDEV_TX_BUSY; | 917 | return NETDEV_TX_BUSY; |
916 | return NETDEV_TX_OK; | 918 | return NETDEV_TX_OK; |
917 | } | 919 | } |
@@ -994,7 +996,7 @@ static int ctcmpc_tx(struct sk_buff *skb, struct net_device *dev) | |||
994 | } | 996 | } |
995 | 997 | ||
996 | dev->trans_start = jiffies; | 998 | dev->trans_start = jiffies; |
997 | if (ctcmpc_transmit_skb(priv->channel[WRITE], skb) != 0) { | 999 | if (ctcmpc_transmit_skb(priv->channel[CTCM_WRITE], skb) != 0) { |
998 | CTCM_DBF_TEXT_(MPC_ERROR, CTC_DBF_ERROR, | 1000 | CTCM_DBF_TEXT_(MPC_ERROR, CTC_DBF_ERROR, |
999 | "%s(%s): device error - dropped", | 1001 | "%s(%s): device error - dropped", |
1000 | CTCM_FUNTAIL, dev->name); | 1002 | CTCM_FUNTAIL, dev->name); |
@@ -1035,7 +1037,7 @@ static int ctcm_change_mtu(struct net_device *dev, int new_mtu) | |||
1035 | return -EINVAL; | 1037 | return -EINVAL; |
1036 | 1038 | ||
1037 | priv = dev->ml_priv; | 1039 | priv = dev->ml_priv; |
1038 | max_bufsize = priv->channel[READ]->max_bufsize; | 1040 | max_bufsize = priv->channel[CTCM_READ]->max_bufsize; |
1039 | 1041 | ||
1040 | if (IS_MPC(priv)) { | 1042 | if (IS_MPC(priv)) { |
1041 | if (new_mtu > max_bufsize - TH_HEADER_LENGTH) | 1043 | if (new_mtu > max_bufsize - TH_HEADER_LENGTH) |
@@ -1226,10 +1228,10 @@ static void ctcm_irq_handler(struct ccw_device *cdev, | |||
1226 | priv = dev_get_drvdata(&cgdev->dev); | 1228 | priv = dev_get_drvdata(&cgdev->dev); |
1227 | 1229 | ||
1228 | /* Try to extract channel from driver data. */ | 1230 | /* Try to extract channel from driver data. */ |
1229 | if (priv->channel[READ]->cdev == cdev) | 1231 | if (priv->channel[CTCM_READ]->cdev == cdev) |
1230 | ch = priv->channel[READ]; | 1232 | ch = priv->channel[CTCM_READ]; |
1231 | else if (priv->channel[WRITE]->cdev == cdev) | 1233 | else if (priv->channel[CTCM_WRITE]->cdev == cdev) |
1232 | ch = priv->channel[WRITE]; | 1234 | ch = priv->channel[CTCM_WRITE]; |
1233 | else { | 1235 | else { |
1234 | dev_err(&cdev->dev, | 1236 | dev_err(&cdev->dev, |
1235 | "%s: Internal error: Can't determine channel for " | 1237 | "%s: Internal error: Can't determine channel for " |
@@ -1587,13 +1589,13 @@ static int ctcm_new_device(struct ccwgroup_device *cgdev) | |||
1587 | goto out_ccw2; | 1589 | goto out_ccw2; |
1588 | } | 1590 | } |
1589 | 1591 | ||
1590 | for (direction = READ; direction <= WRITE; direction++) { | 1592 | for (direction = CTCM_READ; direction <= CTCM_WRITE; direction++) { |
1591 | priv->channel[direction] = | 1593 | priv->channel[direction] = |
1592 | channel_get(type, direction == READ ? read_id : write_id, | 1594 | channel_get(type, direction == CTCM_READ ? |
1593 | direction); | 1595 | read_id : write_id, direction); |
1594 | if (priv->channel[direction] == NULL) { | 1596 | if (priv->channel[direction] == NULL) { |
1595 | if (direction == WRITE) | 1597 | if (direction == CTCM_WRITE) |
1596 | channel_free(priv->channel[READ]); | 1598 | channel_free(priv->channel[CTCM_READ]); |
1597 | goto out_dev; | 1599 | goto out_dev; |
1598 | } | 1600 | } |
1599 | priv->channel[direction]->netdev = dev; | 1601 | priv->channel[direction]->netdev = dev; |
@@ -1617,13 +1619,13 @@ static int ctcm_new_device(struct ccwgroup_device *cgdev) | |||
1617 | 1619 | ||
1618 | dev_info(&dev->dev, | 1620 | dev_info(&dev->dev, |
1619 | "setup OK : r/w = %s/%s, protocol : %d\n", | 1621 | "setup OK : r/w = %s/%s, protocol : %d\n", |
1620 | priv->channel[READ]->id, | 1622 | priv->channel[CTCM_READ]->id, |
1621 | priv->channel[WRITE]->id, priv->protocol); | 1623 | priv->channel[CTCM_WRITE]->id, priv->protocol); |
1622 | 1624 | ||
1623 | CTCM_DBF_TEXT_(SETUP, CTC_DBF_INFO, | 1625 | CTCM_DBF_TEXT_(SETUP, CTC_DBF_INFO, |
1624 | "setup(%s) OK : r/w = %s/%s, protocol : %d", dev->name, | 1626 | "setup(%s) OK : r/w = %s/%s, protocol : %d", dev->name, |
1625 | priv->channel[READ]->id, | 1627 | priv->channel[CTCM_READ]->id, |
1626 | priv->channel[WRITE]->id, priv->protocol); | 1628 | priv->channel[CTCM_WRITE]->id, priv->protocol); |
1627 | 1629 | ||
1628 | return 0; | 1630 | return 0; |
1629 | out_unregister: | 1631 | out_unregister: |
@@ -1635,10 +1637,10 @@ out_ccw2: | |||
1635 | out_ccw1: | 1637 | out_ccw1: |
1636 | ccw_device_set_offline(cgdev->cdev[0]); | 1638 | ccw_device_set_offline(cgdev->cdev[0]); |
1637 | out_remove_channel2: | 1639 | out_remove_channel2: |
1638 | readc = channel_get(type, read_id, READ); | 1640 | readc = channel_get(type, read_id, CTCM_READ); |
1639 | channel_remove(readc); | 1641 | channel_remove(readc); |
1640 | out_remove_channel1: | 1642 | out_remove_channel1: |
1641 | writec = channel_get(type, write_id, WRITE); | 1643 | writec = channel_get(type, write_id, CTCM_WRITE); |
1642 | channel_remove(writec); | 1644 | channel_remove(writec); |
1643 | out_err_result: | 1645 | out_err_result: |
1644 | return result; | 1646 | return result; |
@@ -1660,19 +1662,19 @@ static int ctcm_shutdown_device(struct ccwgroup_device *cgdev) | |||
1660 | if (!priv) | 1662 | if (!priv) |
1661 | return -ENODEV; | 1663 | return -ENODEV; |
1662 | 1664 | ||
1663 | if (priv->channel[READ]) { | 1665 | if (priv->channel[CTCM_READ]) { |
1664 | dev = priv->channel[READ]->netdev; | 1666 | dev = priv->channel[CTCM_READ]->netdev; |
1665 | CTCM_DBF_DEV(SETUP, dev, ""); | 1667 | CTCM_DBF_DEV(SETUP, dev, ""); |
1666 | /* Close the device */ | 1668 | /* Close the device */ |
1667 | ctcm_close(dev); | 1669 | ctcm_close(dev); |
1668 | dev->flags &= ~IFF_RUNNING; | 1670 | dev->flags &= ~IFF_RUNNING; |
1669 | ctcm_remove_attributes(&cgdev->dev); | 1671 | ctcm_remove_attributes(&cgdev->dev); |
1670 | channel_free(priv->channel[READ]); | 1672 | channel_free(priv->channel[CTCM_READ]); |
1671 | } else | 1673 | } else |
1672 | dev = NULL; | 1674 | dev = NULL; |
1673 | 1675 | ||
1674 | if (priv->channel[WRITE]) | 1676 | if (priv->channel[CTCM_WRITE]) |
1675 | channel_free(priv->channel[WRITE]); | 1677 | channel_free(priv->channel[CTCM_WRITE]); |
1676 | 1678 | ||
1677 | if (dev) { | 1679 | if (dev) { |
1678 | unregister_netdev(dev); | 1680 | unregister_netdev(dev); |
@@ -1685,11 +1687,11 @@ static int ctcm_shutdown_device(struct ccwgroup_device *cgdev) | |||
1685 | ccw_device_set_offline(cgdev->cdev[1]); | 1687 | ccw_device_set_offline(cgdev->cdev[1]); |
1686 | ccw_device_set_offline(cgdev->cdev[0]); | 1688 | ccw_device_set_offline(cgdev->cdev[0]); |
1687 | 1689 | ||
1688 | if (priv->channel[READ]) | 1690 | if (priv->channel[CTCM_READ]) |
1689 | channel_remove(priv->channel[READ]); | 1691 | channel_remove(priv->channel[CTCM_READ]); |
1690 | if (priv->channel[WRITE]) | 1692 | if (priv->channel[CTCM_WRITE]) |
1691 | channel_remove(priv->channel[WRITE]); | 1693 | channel_remove(priv->channel[CTCM_WRITE]); |
1692 | priv->channel[READ] = priv->channel[WRITE] = NULL; | 1694 | priv->channel[CTCM_READ] = priv->channel[CTCM_WRITE] = NULL; |
1693 | 1695 | ||
1694 | return 0; | 1696 | return 0; |
1695 | 1697 | ||
@@ -1720,11 +1722,11 @@ static int ctcm_pm_suspend(struct ccwgroup_device *gdev) | |||
1720 | 1722 | ||
1721 | if (gdev->state == CCWGROUP_OFFLINE) | 1723 | if (gdev->state == CCWGROUP_OFFLINE) |
1722 | return 0; | 1724 | return 0; |
1723 | netif_device_detach(priv->channel[READ]->netdev); | 1725 | netif_device_detach(priv->channel[CTCM_READ]->netdev); |
1724 | ctcm_close(priv->channel[READ]->netdev); | 1726 | ctcm_close(priv->channel[CTCM_READ]->netdev); |
1725 | if (!wait_event_timeout(priv->fsm->wait_q, | 1727 | if (!wait_event_timeout(priv->fsm->wait_q, |
1726 | fsm_getstate(priv->fsm) == DEV_STATE_STOPPED, CTCM_TIME_5_SEC)) { | 1728 | fsm_getstate(priv->fsm) == DEV_STATE_STOPPED, CTCM_TIME_5_SEC)) { |
1727 | netif_device_attach(priv->channel[READ]->netdev); | 1729 | netif_device_attach(priv->channel[CTCM_READ]->netdev); |
1728 | return -EBUSY; | 1730 | return -EBUSY; |
1729 | } | 1731 | } |
1730 | ccw_device_set_offline(gdev->cdev[1]); | 1732 | ccw_device_set_offline(gdev->cdev[1]); |
@@ -1745,9 +1747,9 @@ static int ctcm_pm_resume(struct ccwgroup_device *gdev) | |||
1745 | rc = ccw_device_set_online(gdev->cdev[0]); | 1747 | rc = ccw_device_set_online(gdev->cdev[0]); |
1746 | if (rc) | 1748 | if (rc) |
1747 | goto err_out; | 1749 | goto err_out; |
1748 | ctcm_open(priv->channel[READ]->netdev); | 1750 | ctcm_open(priv->channel[CTCM_READ]->netdev); |
1749 | err_out: | 1751 | err_out: |
1750 | netif_device_attach(priv->channel[READ]->netdev); | 1752 | netif_device_attach(priv->channel[CTCM_READ]->netdev); |
1751 | return rc; | 1753 | return rc; |
1752 | } | 1754 | } |
1753 | 1755 | ||
diff --git a/drivers/s390/net/ctcm_main.h b/drivers/s390/net/ctcm_main.h index d34fa14f44e7..24d5215eb0c4 100644 --- a/drivers/s390/net/ctcm_main.h +++ b/drivers/s390/net/ctcm_main.h | |||
@@ -111,8 +111,8 @@ enum ctcm_channel_types { | |||
111 | 111 | ||
112 | #define CTCM_INITIAL_BLOCKLEN 2 | 112 | #define CTCM_INITIAL_BLOCKLEN 2 |
113 | 113 | ||
114 | #define READ 0 | 114 | #define CTCM_READ 0 |
115 | #define WRITE 1 | 115 | #define CTCM_WRITE 1 |
116 | 116 | ||
117 | #define CTCM_ID_SIZE 20+3 | 117 | #define CTCM_ID_SIZE 20+3 |
118 | 118 | ||
diff --git a/drivers/s390/net/ctcm_mpc.c b/drivers/s390/net/ctcm_mpc.c index 87c24d2936d6..2861e78773cb 100644 --- a/drivers/s390/net/ctcm_mpc.c +++ b/drivers/s390/net/ctcm_mpc.c | |||
@@ -419,8 +419,8 @@ void ctc_mpc_establish_connectivity(int port_num, | |||
419 | return; | 419 | return; |
420 | priv = dev->ml_priv; | 420 | priv = dev->ml_priv; |
421 | grp = priv->mpcg; | 421 | grp = priv->mpcg; |
422 | rch = priv->channel[READ]; | 422 | rch = priv->channel[CTCM_READ]; |
423 | wch = priv->channel[WRITE]; | 423 | wch = priv->channel[CTCM_WRITE]; |
424 | 424 | ||
425 | CTCM_DBF_TEXT_(MPC_SETUP, CTC_DBF_INFO, | 425 | CTCM_DBF_TEXT_(MPC_SETUP, CTC_DBF_INFO, |
426 | "%s(%s): state=%s", | 426 | "%s(%s): state=%s", |
@@ -578,7 +578,7 @@ void ctc_mpc_flow_control(int port_num, int flowc) | |||
578 | "%s: %s: flowc = %d", | 578 | "%s: %s: flowc = %d", |
579 | CTCM_FUNTAIL, dev->name, flowc); | 579 | CTCM_FUNTAIL, dev->name, flowc); |
580 | 580 | ||
581 | rch = priv->channel[READ]; | 581 | rch = priv->channel[CTCM_READ]; |
582 | 582 | ||
583 | mpcg_state = fsm_getstate(grp->fsm); | 583 | mpcg_state = fsm_getstate(grp->fsm); |
584 | switch (flowc) { | 584 | switch (flowc) { |
@@ -622,7 +622,7 @@ static void mpc_rcvd_sweep_resp(struct mpcg_info *mpcginfo) | |||
622 | struct net_device *dev = rch->netdev; | 622 | struct net_device *dev = rch->netdev; |
623 | struct ctcm_priv *priv = dev->ml_priv; | 623 | struct ctcm_priv *priv = dev->ml_priv; |
624 | struct mpc_group *grp = priv->mpcg; | 624 | struct mpc_group *grp = priv->mpcg; |
625 | struct channel *ch = priv->channel[WRITE]; | 625 | struct channel *ch = priv->channel[CTCM_WRITE]; |
626 | 626 | ||
627 | CTCM_PR_DEBUG("%s: ch=0x%p id=%s\n", __func__, ch, ch->id); | 627 | CTCM_PR_DEBUG("%s: ch=0x%p id=%s\n", __func__, ch, ch->id); |
628 | CTCM_D3_DUMP((char *)mpcginfo->sweep, TH_SWEEP_LENGTH); | 628 | CTCM_D3_DUMP((char *)mpcginfo->sweep, TH_SWEEP_LENGTH); |
@@ -656,7 +656,7 @@ static void ctcmpc_send_sweep_resp(struct channel *rch) | |||
656 | int rc = 0; | 656 | int rc = 0; |
657 | struct th_sweep *header; | 657 | struct th_sweep *header; |
658 | struct sk_buff *sweep_skb; | 658 | struct sk_buff *sweep_skb; |
659 | struct channel *ch = priv->channel[WRITE]; | 659 | struct channel *ch = priv->channel[CTCM_WRITE]; |
660 | 660 | ||
661 | CTCM_PR_DEBUG("%s: ch=0x%p id=%s\n", __func__, rch, rch->id); | 661 | CTCM_PR_DEBUG("%s: ch=0x%p id=%s\n", __func__, rch, rch->id); |
662 | 662 | ||
@@ -712,7 +712,7 @@ static void mpc_rcvd_sweep_req(struct mpcg_info *mpcginfo) | |||
712 | struct net_device *dev = rch->netdev; | 712 | struct net_device *dev = rch->netdev; |
713 | struct ctcm_priv *priv = dev->ml_priv; | 713 | struct ctcm_priv *priv = dev->ml_priv; |
714 | struct mpc_group *grp = priv->mpcg; | 714 | struct mpc_group *grp = priv->mpcg; |
715 | struct channel *ch = priv->channel[WRITE]; | 715 | struct channel *ch = priv->channel[CTCM_WRITE]; |
716 | 716 | ||
717 | if (do_debug) | 717 | if (do_debug) |
718 | CTCM_DBF_TEXT_(MPC_TRACE, CTC_DBF_DEBUG, | 718 | CTCM_DBF_TEXT_(MPC_TRACE, CTC_DBF_DEBUG, |
@@ -721,8 +721,8 @@ static void mpc_rcvd_sweep_req(struct mpcg_info *mpcginfo) | |||
721 | if (grp->in_sweep == 0) { | 721 | if (grp->in_sweep == 0) { |
722 | grp->in_sweep = 1; | 722 | grp->in_sweep = 1; |
723 | ctcm_test_and_set_busy(dev); | 723 | ctcm_test_and_set_busy(dev); |
724 | grp->sweep_req_pend_num = grp->active_channels[READ]; | 724 | grp->sweep_req_pend_num = grp->active_channels[CTCM_READ]; |
725 | grp->sweep_rsp_pend_num = grp->active_channels[READ]; | 725 | grp->sweep_rsp_pend_num = grp->active_channels[CTCM_READ]; |
726 | } | 726 | } |
727 | 727 | ||
728 | CTCM_D3_DUMP((char *)mpcginfo->sweep, TH_SWEEP_LENGTH); | 728 | CTCM_D3_DUMP((char *)mpcginfo->sweep, TH_SWEEP_LENGTH); |
@@ -906,14 +906,14 @@ void mpc_group_ready(unsigned long adev) | |||
906 | fsm_newstate(grp->fsm, MPCG_STATE_READY); | 906 | fsm_newstate(grp->fsm, MPCG_STATE_READY); |
907 | 907 | ||
908 | /* Put up a read on the channel */ | 908 | /* Put up a read on the channel */ |
909 | ch = priv->channel[READ]; | 909 | ch = priv->channel[CTCM_READ]; |
910 | ch->pdu_seq = 0; | 910 | ch->pdu_seq = 0; |
911 | CTCM_PR_DBGDATA("ctcmpc: %s() ToDCM_pdu_seq= %08x\n" , | 911 | CTCM_PR_DBGDATA("ctcmpc: %s() ToDCM_pdu_seq= %08x\n" , |
912 | __func__, ch->pdu_seq); | 912 | __func__, ch->pdu_seq); |
913 | 913 | ||
914 | ctcmpc_chx_rxidle(ch->fsm, CTC_EVENT_START, ch); | 914 | ctcmpc_chx_rxidle(ch->fsm, CTC_EVENT_START, ch); |
915 | /* Put the write channel in idle state */ | 915 | /* Put the write channel in idle state */ |
916 | ch = priv->channel[WRITE]; | 916 | ch = priv->channel[CTCM_WRITE]; |
917 | if (ch->collect_len > 0) { | 917 | if (ch->collect_len > 0) { |
918 | spin_lock(&ch->collect_lock); | 918 | spin_lock(&ch->collect_lock); |
919 | ctcm_purge_skb_queue(&ch->collect_queue); | 919 | ctcm_purge_skb_queue(&ch->collect_queue); |
@@ -960,7 +960,8 @@ void mpc_channel_action(struct channel *ch, int direction, int action) | |||
960 | "%s: %i / Grp:%s total_channels=%i, active_channels: " | 960 | "%s: %i / Grp:%s total_channels=%i, active_channels: " |
961 | "read=%i, write=%i\n", __func__, action, | 961 | "read=%i, write=%i\n", __func__, action, |
962 | fsm_getstate_str(grp->fsm), grp->num_channel_paths, | 962 | fsm_getstate_str(grp->fsm), grp->num_channel_paths, |
963 | grp->active_channels[READ], grp->active_channels[WRITE]); | 963 | grp->active_channels[CTCM_READ], |
964 | grp->active_channels[CTCM_WRITE]); | ||
964 | 965 | ||
965 | if ((action == MPC_CHANNEL_ADD) && (ch->in_mpcgroup == 0)) { | 966 | if ((action == MPC_CHANNEL_ADD) && (ch->in_mpcgroup == 0)) { |
966 | grp->num_channel_paths++; | 967 | grp->num_channel_paths++; |
@@ -994,10 +995,11 @@ void mpc_channel_action(struct channel *ch, int direction, int action) | |||
994 | grp->xid_skb->data, | 995 | grp->xid_skb->data, |
995 | grp->xid_skb->len); | 996 | grp->xid_skb->len); |
996 | 997 | ||
997 | ch->xid->xid2_dlc_type = ((CHANNEL_DIRECTION(ch->flags) == READ) | 998 | ch->xid->xid2_dlc_type = |
999 | ((CHANNEL_DIRECTION(ch->flags) == CTCM_READ) | ||
998 | ? XID2_READ_SIDE : XID2_WRITE_SIDE); | 1000 | ? XID2_READ_SIDE : XID2_WRITE_SIDE); |
999 | 1001 | ||
1000 | if (CHANNEL_DIRECTION(ch->flags) == WRITE) | 1002 | if (CHANNEL_DIRECTION(ch->flags) == CTCM_WRITE) |
1001 | ch->xid->xid2_buf_len = 0x00; | 1003 | ch->xid->xid2_buf_len = 0x00; |
1002 | 1004 | ||
1003 | ch->xid_skb->data = ch->xid_skb_data; | 1005 | ch->xid_skb->data = ch->xid_skb_data; |
@@ -1006,8 +1008,8 @@ void mpc_channel_action(struct channel *ch, int direction, int action) | |||
1006 | 1008 | ||
1007 | fsm_newstate(ch->fsm, CH_XID0_PENDING); | 1009 | fsm_newstate(ch->fsm, CH_XID0_PENDING); |
1008 | 1010 | ||
1009 | if ((grp->active_channels[READ] > 0) && | 1011 | if ((grp->active_channels[CTCM_READ] > 0) && |
1010 | (grp->active_channels[WRITE] > 0) && | 1012 | (grp->active_channels[CTCM_WRITE] > 0) && |
1011 | (fsm_getstate(grp->fsm) < MPCG_STATE_XID2INITW)) { | 1013 | (fsm_getstate(grp->fsm) < MPCG_STATE_XID2INITW)) { |
1012 | fsm_newstate(grp->fsm, MPCG_STATE_XID2INITW); | 1014 | fsm_newstate(grp->fsm, MPCG_STATE_XID2INITW); |
1013 | CTCM_DBF_TEXT_(MPC_SETUP, CTC_DBF_NOTICE, | 1015 | CTCM_DBF_TEXT_(MPC_SETUP, CTC_DBF_NOTICE, |
@@ -1027,10 +1029,10 @@ void mpc_channel_action(struct channel *ch, int direction, int action) | |||
1027 | if (grp->channels_terminating) | 1029 | if (grp->channels_terminating) |
1028 | goto done; | 1030 | goto done; |
1029 | 1031 | ||
1030 | if (((grp->active_channels[READ] == 0) && | 1032 | if (((grp->active_channels[CTCM_READ] == 0) && |
1031 | (grp->active_channels[WRITE] > 0)) | 1033 | (grp->active_channels[CTCM_WRITE] > 0)) |
1032 | || ((grp->active_channels[WRITE] == 0) && | 1034 | || ((grp->active_channels[CTCM_WRITE] == 0) && |
1033 | (grp->active_channels[READ] > 0))) | 1035 | (grp->active_channels[CTCM_READ] > 0))) |
1034 | fsm_event(grp->fsm, MPCG_EVENT_INOP, dev); | 1036 | fsm_event(grp->fsm, MPCG_EVENT_INOP, dev); |
1035 | } | 1037 | } |
1036 | done: | 1038 | done: |
@@ -1038,7 +1040,8 @@ done: | |||
1038 | "exit %s: %i / Grp:%s total_channels=%i, active_channels: " | 1040 | "exit %s: %i / Grp:%s total_channels=%i, active_channels: " |
1039 | "read=%i, write=%i\n", __func__, action, | 1041 | "read=%i, write=%i\n", __func__, action, |
1040 | fsm_getstate_str(grp->fsm), grp->num_channel_paths, | 1042 | fsm_getstate_str(grp->fsm), grp->num_channel_paths, |
1041 | grp->active_channels[READ], grp->active_channels[WRITE]); | 1043 | grp->active_channels[CTCM_READ], |
1044 | grp->active_channels[CTCM_WRITE]); | ||
1042 | 1045 | ||
1043 | CTCM_PR_DEBUG("exit %s: ch=0x%p id=%s\n", __func__, ch, ch->id); | 1046 | CTCM_PR_DEBUG("exit %s: ch=0x%p id=%s\n", __func__, ch, ch->id); |
1044 | } | 1047 | } |
@@ -1392,8 +1395,8 @@ static void mpc_action_go_inop(fsm_instance *fi, int event, void *arg) | |||
1392 | (grp->port_persist == 0)) | 1395 | (grp->port_persist == 0)) |
1393 | fsm_deltimer(&priv->restart_timer); | 1396 | fsm_deltimer(&priv->restart_timer); |
1394 | 1397 | ||
1395 | wch = priv->channel[WRITE]; | 1398 | wch = priv->channel[CTCM_WRITE]; |
1396 | rch = priv->channel[READ]; | 1399 | rch = priv->channel[CTCM_READ]; |
1397 | 1400 | ||
1398 | switch (grp->saved_state) { | 1401 | switch (grp->saved_state) { |
1399 | case MPCG_STATE_RESET: | 1402 | case MPCG_STATE_RESET: |
@@ -1480,8 +1483,8 @@ static void mpc_action_timeout(fsm_instance *fi, int event, void *arg) | |||
1480 | 1483 | ||
1481 | priv = dev->ml_priv; | 1484 | priv = dev->ml_priv; |
1482 | grp = priv->mpcg; | 1485 | grp = priv->mpcg; |
1483 | wch = priv->channel[WRITE]; | 1486 | wch = priv->channel[CTCM_WRITE]; |
1484 | rch = priv->channel[READ]; | 1487 | rch = priv->channel[CTCM_READ]; |
1485 | 1488 | ||
1486 | switch (fsm_getstate(grp->fsm)) { | 1489 | switch (fsm_getstate(grp->fsm)) { |
1487 | case MPCG_STATE_XID2INITW: | 1490 | case MPCG_STATE_XID2INITW: |
@@ -1586,7 +1589,7 @@ static int mpc_validate_xid(struct mpcg_info *mpcginfo) | |||
1586 | CTCM_D3_DUMP((char *)xid, XID2_LENGTH); | 1589 | CTCM_D3_DUMP((char *)xid, XID2_LENGTH); |
1587 | 1590 | ||
1588 | /*the received direction should be the opposite of ours */ | 1591 | /*the received direction should be the opposite of ours */ |
1589 | if (((CHANNEL_DIRECTION(ch->flags) == READ) ? XID2_WRITE_SIDE : | 1592 | if (((CHANNEL_DIRECTION(ch->flags) == CTCM_READ) ? XID2_WRITE_SIDE : |
1590 | XID2_READ_SIDE) != xid->xid2_dlc_type) { | 1593 | XID2_READ_SIDE) != xid->xid2_dlc_type) { |
1591 | rc = 2; | 1594 | rc = 2; |
1592 | /* XID REJECTED: r/w channel pairing mismatch */ | 1595 | /* XID REJECTED: r/w channel pairing mismatch */ |
@@ -1912,7 +1915,7 @@ static void mpc_action_doxid7(fsm_instance *fsm, int event, void *arg) | |||
1912 | if (grp == NULL) | 1915 | if (grp == NULL) |
1913 | return; | 1916 | return; |
1914 | 1917 | ||
1915 | for (direction = READ; direction <= WRITE; direction++) { | 1918 | for (direction = CTCM_READ; direction <= CTCM_WRITE; direction++) { |
1916 | struct channel *ch = priv->channel[direction]; | 1919 | struct channel *ch = priv->channel[direction]; |
1917 | struct xid2 *thisxid = ch->xid; | 1920 | struct xid2 *thisxid = ch->xid; |
1918 | ch->xid_skb->data = ch->xid_skb_data; | 1921 | ch->xid_skb->data = ch->xid_skb_data; |
@@ -2152,14 +2155,15 @@ static int mpc_send_qllc_discontact(struct net_device *dev) | |||
2152 | return -ENOMEM; | 2155 | return -ENOMEM; |
2153 | } | 2156 | } |
2154 | 2157 | ||
2155 | *((__u32 *)skb_push(skb, 4)) = priv->channel[READ]->pdu_seq; | 2158 | *((__u32 *)skb_push(skb, 4)) = |
2156 | priv->channel[READ]->pdu_seq++; | 2159 | priv->channel[CTCM_READ]->pdu_seq; |
2160 | priv->channel[CTCM_READ]->pdu_seq++; | ||
2157 | CTCM_PR_DBGDATA("ctcmpc: %s ToDCM_pdu_seq= %08x\n", | 2161 | CTCM_PR_DBGDATA("ctcmpc: %s ToDCM_pdu_seq= %08x\n", |
2158 | __func__, priv->channel[READ]->pdu_seq); | 2162 | __func__, priv->channel[CTCM_READ]->pdu_seq); |
2159 | 2163 | ||
2160 | /* receipt of CC03 resets anticipated sequence number on | 2164 | /* receipt of CC03 resets anticipated sequence number on |
2161 | receiving side */ | 2165 | receiving side */ |
2162 | priv->channel[READ]->pdu_seq = 0x00; | 2166 | priv->channel[CTCM_READ]->pdu_seq = 0x00; |
2163 | skb_reset_mac_header(skb); | 2167 | skb_reset_mac_header(skb); |
2164 | skb->dev = dev; | 2168 | skb->dev = dev; |
2165 | skb->protocol = htons(ETH_P_SNAP); | 2169 | skb->protocol = htons(ETH_P_SNAP); |
diff --git a/drivers/s390/net/ctcm_sysfs.c b/drivers/s390/net/ctcm_sysfs.c index 2b24550e865e..8305319b2a84 100644 --- a/drivers/s390/net/ctcm_sysfs.c +++ b/drivers/s390/net/ctcm_sysfs.c | |||
@@ -38,8 +38,8 @@ static ssize_t ctcm_buffer_write(struct device *dev, | |||
38 | int bs1; | 38 | int bs1; |
39 | struct ctcm_priv *priv = dev_get_drvdata(dev); | 39 | struct ctcm_priv *priv = dev_get_drvdata(dev); |
40 | 40 | ||
41 | if (!(priv && priv->channel[READ] && | 41 | ndev = priv->channel[CTCM_READ]->netdev; |
42 | (ndev = priv->channel[READ]->netdev))) { | 42 | if (!(priv && priv->channel[CTCM_READ] && ndev)) { |
43 | CTCM_DBF_TEXT(SETUP, CTC_DBF_ERROR, "bfnondev"); | 43 | CTCM_DBF_TEXT(SETUP, CTC_DBF_ERROR, "bfnondev"); |
44 | return -ENODEV; | 44 | return -ENODEV; |
45 | } | 45 | } |
@@ -55,12 +55,12 @@ static ssize_t ctcm_buffer_write(struct device *dev, | |||
55 | (bs1 < (ndev->mtu + LL_HEADER_LENGTH + 2))) | 55 | (bs1 < (ndev->mtu + LL_HEADER_LENGTH + 2))) |
56 | goto einval; | 56 | goto einval; |
57 | 57 | ||
58 | priv->channel[READ]->max_bufsize = bs1; | 58 | priv->channel[CTCM_READ]->max_bufsize = bs1; |
59 | priv->channel[WRITE]->max_bufsize = bs1; | 59 | priv->channel[CTCM_WRITE]->max_bufsize = bs1; |
60 | if (!(ndev->flags & IFF_RUNNING)) | 60 | if (!(ndev->flags & IFF_RUNNING)) |
61 | ndev->mtu = bs1 - LL_HEADER_LENGTH - 2; | 61 | ndev->mtu = bs1 - LL_HEADER_LENGTH - 2; |
62 | priv->channel[READ]->flags |= CHANNEL_FLAGS_BUFSIZE_CHANGED; | 62 | priv->channel[CTCM_READ]->flags |= CHANNEL_FLAGS_BUFSIZE_CHANGED; |
63 | priv->channel[WRITE]->flags |= CHANNEL_FLAGS_BUFSIZE_CHANGED; | 63 | priv->channel[CTCM_WRITE]->flags |= CHANNEL_FLAGS_BUFSIZE_CHANGED; |
64 | 64 | ||
65 | CTCM_DBF_DEV(SETUP, ndev, buf); | 65 | CTCM_DBF_DEV(SETUP, ndev, buf); |
66 | return count; | 66 | return count; |
@@ -85,9 +85,9 @@ static void ctcm_print_statistics(struct ctcm_priv *priv) | |||
85 | p += sprintf(p, " Device FSM state: %s\n", | 85 | p += sprintf(p, " Device FSM state: %s\n", |
86 | fsm_getstate_str(priv->fsm)); | 86 | fsm_getstate_str(priv->fsm)); |
87 | p += sprintf(p, " RX channel FSM state: %s\n", | 87 | p += sprintf(p, " RX channel FSM state: %s\n", |
88 | fsm_getstate_str(priv->channel[READ]->fsm)); | 88 | fsm_getstate_str(priv->channel[CTCM_READ]->fsm)); |
89 | p += sprintf(p, " TX channel FSM state: %s\n", | 89 | p += sprintf(p, " TX channel FSM state: %s\n", |
90 | fsm_getstate_str(priv->channel[WRITE]->fsm)); | 90 | fsm_getstate_str(priv->channel[CTCM_WRITE]->fsm)); |
91 | p += sprintf(p, " Max. TX buffer used: %ld\n", | 91 | p += sprintf(p, " Max. TX buffer used: %ld\n", |
92 | priv->channel[WRITE]->prof.maxmulti); | 92 | priv->channel[WRITE]->prof.maxmulti); |
93 | p += sprintf(p, " Max. chained SKBs: %ld\n", | 93 | p += sprintf(p, " Max. chained SKBs: %ld\n", |
@@ -102,7 +102,7 @@ static void ctcm_print_statistics(struct ctcm_priv *priv) | |||
102 | priv->channel[WRITE]->prof.tx_time); | 102 | priv->channel[WRITE]->prof.tx_time); |
103 | 103 | ||
104 | printk(KERN_INFO "Statistics for %s:\n%s", | 104 | printk(KERN_INFO "Statistics for %s:\n%s", |
105 | priv->channel[WRITE]->netdev->name, sbuf); | 105 | priv->channel[CTCM_WRITE]->netdev->name, sbuf); |
106 | kfree(sbuf); | 106 | kfree(sbuf); |
107 | return; | 107 | return; |
108 | } | 108 | } |
@@ -125,7 +125,7 @@ static ssize_t stats_write(struct device *dev, struct device_attribute *attr, | |||
125 | return -ENODEV; | 125 | return -ENODEV; |
126 | /* Reset statistics */ | 126 | /* Reset statistics */ |
127 | memset(&priv->channel[WRITE]->prof, 0, | 127 | memset(&priv->channel[WRITE]->prof, 0, |
128 | sizeof(priv->channel[WRITE]->prof)); | 128 | sizeof(priv->channel[CTCM_WRITE]->prof)); |
129 | return count; | 129 | return count; |
130 | } | 130 | } |
131 | 131 | ||
diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h index 848480bc2bf9..2308fbb4523a 100644 --- a/include/linux/etherdevice.h +++ b/include/linux/etherdevice.h | |||
@@ -129,7 +129,7 @@ static inline void random_ether_addr(u8 *addr) | |||
129 | /** | 129 | /** |
130 | * dev_hw_addr_random - Create random MAC and set device flag | 130 | * dev_hw_addr_random - Create random MAC and set device flag |
131 | * @dev: pointer to net_device structure | 131 | * @dev: pointer to net_device structure |
132 | * @addr: Pointer to a six-byte array containing the Ethernet address | 132 | * @hwaddr: Pointer to a six-byte array containing the Ethernet address |
133 | * | 133 | * |
134 | * Generate random MAC to be used by a device and set addr_assign_type | 134 | * Generate random MAC to be used by a device and set addr_assign_type |
135 | * so the state can be read by sysfs and be used by udev. | 135 | * so the state can be read by sysfs and be used by udev. |
diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h index 413742c92d14..791d5109f34c 100644 --- a/include/linux/netpoll.h +++ b/include/linux/netpoll.h | |||
@@ -122,7 +122,7 @@ static inline int netpoll_tx_running(struct net_device *dev) | |||
122 | } | 122 | } |
123 | 123 | ||
124 | #else | 124 | #else |
125 | static inline int netpoll_rx(struct sk_buff *skb) | 125 | static inline bool netpoll_rx(struct sk_buff *skb) |
126 | { | 126 | { |
127 | return 0; | 127 | return 0; |
128 | } | 128 | } |
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h index 636724b203ee..6c241444f902 100644 --- a/include/net/bluetooth/l2cap.h +++ b/include/net/bluetooth/l2cap.h | |||
@@ -33,9 +33,9 @@ | |||
33 | #define L2CAP_DEFAULT_FLUSH_TO 0xffff | 33 | #define L2CAP_DEFAULT_FLUSH_TO 0xffff |
34 | #define L2CAP_DEFAULT_TX_WINDOW 63 | 34 | #define L2CAP_DEFAULT_TX_WINDOW 63 |
35 | #define L2CAP_DEFAULT_MAX_TX 3 | 35 | #define L2CAP_DEFAULT_MAX_TX 3 |
36 | #define L2CAP_DEFAULT_RETRANS_TO 1000 /* 1 second */ | 36 | #define L2CAP_DEFAULT_RETRANS_TO 2000 /* 2 seconds */ |
37 | #define L2CAP_DEFAULT_MONITOR_TO 12000 /* 12 seconds */ | 37 | #define L2CAP_DEFAULT_MONITOR_TO 12000 /* 12 seconds */ |
38 | #define L2CAP_DEFAULT_MAX_PDU_SIZE 672 | 38 | #define L2CAP_DEFAULT_MAX_PDU_SIZE 1009 /* Sized for 3-DH5 packet */ |
39 | #define L2CAP_DEFAULT_ACK_TO 200 | 39 | #define L2CAP_DEFAULT_ACK_TO 200 |
40 | #define L2CAP_LOCAL_BUSY_TRIES 12 | 40 | #define L2CAP_LOCAL_BUSY_TRIES 12 |
41 | 41 | ||
diff --git a/include/net/sock.h b/include/net/sock.h index a441c9cdd625..ac53bfbdfe16 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
@@ -195,7 +195,8 @@ struct sock_common { | |||
195 | * @sk_priority: %SO_PRIORITY setting | 195 | * @sk_priority: %SO_PRIORITY setting |
196 | * @sk_type: socket type (%SOCK_STREAM, etc) | 196 | * @sk_type: socket type (%SOCK_STREAM, etc) |
197 | * @sk_protocol: which protocol this socket belongs in this network family | 197 | * @sk_protocol: which protocol this socket belongs in this network family |
198 | * @sk_peercred: %SO_PEERCRED setting | 198 | * @sk_peer_pid: &struct pid for this socket's peer |
199 | * @sk_peer_cred: %SO_PEERCRED setting | ||
199 | * @sk_rcvlowat: %SO_RCVLOWAT setting | 200 | * @sk_rcvlowat: %SO_RCVLOWAT setting |
200 | * @sk_rcvtimeo: %SO_RCVTIMEO setting | 201 | * @sk_rcvtimeo: %SO_RCVTIMEO setting |
201 | * @sk_sndtimeo: %SO_SNDTIMEO setting | 202 | * @sk_sndtimeo: %SO_SNDTIMEO setting |
@@ -211,6 +212,7 @@ struct sock_common { | |||
211 | * @sk_send_head: front of stuff to transmit | 212 | * @sk_send_head: front of stuff to transmit |
212 | * @sk_security: used by security modules | 213 | * @sk_security: used by security modules |
213 | * @sk_mark: generic packet mark | 214 | * @sk_mark: generic packet mark |
215 | * @sk_classid: this socket's cgroup classid | ||
214 | * @sk_write_pending: a write to stream socket waits to start | 216 | * @sk_write_pending: a write to stream socket waits to start |
215 | * @sk_state_change: callback to indicate change in the state of the sock | 217 | * @sk_state_change: callback to indicate change in the state of the sock |
216 | * @sk_data_ready: callback to indicate there is data to be processed | 218 | * @sk_data_ready: callback to indicate there is data to be processed |
diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c index 3e3cd9d4e52c..fadf26b4ed7c 100644 --- a/net/bluetooth/l2cap.c +++ b/net/bluetooth/l2cap.c | |||
@@ -2705,8 +2705,9 @@ done: | |||
2705 | case L2CAP_MODE_ERTM: | 2705 | case L2CAP_MODE_ERTM: |
2706 | pi->remote_tx_win = rfc.txwin_size; | 2706 | pi->remote_tx_win = rfc.txwin_size; |
2707 | pi->remote_max_tx = rfc.max_transmit; | 2707 | pi->remote_max_tx = rfc.max_transmit; |
2708 | if (rfc.max_pdu_size > pi->conn->mtu - 10) | 2708 | |
2709 | rfc.max_pdu_size = le16_to_cpu(pi->conn->mtu - 10); | 2709 | if (le16_to_cpu(rfc.max_pdu_size) > pi->conn->mtu - 10) |
2710 | rfc.max_pdu_size = cpu_to_le16(pi->conn->mtu - 10); | ||
2710 | 2711 | ||
2711 | pi->remote_mps = le16_to_cpu(rfc.max_pdu_size); | 2712 | pi->remote_mps = le16_to_cpu(rfc.max_pdu_size); |
2712 | 2713 | ||
@@ -2723,8 +2724,8 @@ done: | |||
2723 | break; | 2724 | break; |
2724 | 2725 | ||
2725 | case L2CAP_MODE_STREAMING: | 2726 | case L2CAP_MODE_STREAMING: |
2726 | if (rfc.max_pdu_size > pi->conn->mtu - 10) | 2727 | if (le16_to_cpu(rfc.max_pdu_size) > pi->conn->mtu - 10) |
2727 | rfc.max_pdu_size = le16_to_cpu(pi->conn->mtu - 10); | 2728 | rfc.max_pdu_size = cpu_to_le16(pi->conn->mtu - 10); |
2728 | 2729 | ||
2729 | pi->remote_mps = le16_to_cpu(rfc.max_pdu_size); | 2730 | pi->remote_mps = le16_to_cpu(rfc.max_pdu_size); |
2730 | 2731 | ||
@@ -2806,7 +2807,6 @@ static int l2cap_parse_conf_rsp(struct sock *sk, void *rsp, int len, void *data, | |||
2806 | if (*result == L2CAP_CONF_SUCCESS) { | 2807 | if (*result == L2CAP_CONF_SUCCESS) { |
2807 | switch (rfc.mode) { | 2808 | switch (rfc.mode) { |
2808 | case L2CAP_MODE_ERTM: | 2809 | case L2CAP_MODE_ERTM: |
2809 | pi->remote_tx_win = rfc.txwin_size; | ||
2810 | pi->retrans_timeout = le16_to_cpu(rfc.retrans_timeout); | 2810 | pi->retrans_timeout = le16_to_cpu(rfc.retrans_timeout); |
2811 | pi->monitor_timeout = le16_to_cpu(rfc.monitor_timeout); | 2811 | pi->monitor_timeout = le16_to_cpu(rfc.monitor_timeout); |
2812 | pi->mps = le16_to_cpu(rfc.max_pdu_size); | 2812 | pi->mps = le16_to_cpu(rfc.max_pdu_size); |
@@ -2862,7 +2862,6 @@ static void l2cap_conf_rfc_get(struct sock *sk, void *rsp, int len) | |||
2862 | done: | 2862 | done: |
2863 | switch (rfc.mode) { | 2863 | switch (rfc.mode) { |
2864 | case L2CAP_MODE_ERTM: | 2864 | case L2CAP_MODE_ERTM: |
2865 | pi->remote_tx_win = rfc.txwin_size; | ||
2866 | pi->retrans_timeout = le16_to_cpu(rfc.retrans_timeout); | 2865 | pi->retrans_timeout = le16_to_cpu(rfc.retrans_timeout); |
2867 | pi->monitor_timeout = le16_to_cpu(rfc.monitor_timeout); | 2866 | pi->monitor_timeout = le16_to_cpu(rfc.monitor_timeout); |
2868 | pi->mps = le16_to_cpu(rfc.max_pdu_size); | 2867 | pi->mps = le16_to_cpu(rfc.max_pdu_size); |
diff --git a/net/caif/cfpkt_skbuff.c b/net/caif/cfpkt_skbuff.c index 01f238ff2346..c49a6695793a 100644 --- a/net/caif/cfpkt_skbuff.c +++ b/net/caif/cfpkt_skbuff.c | |||
@@ -9,7 +9,7 @@ | |||
9 | #include <linux/hardirq.h> | 9 | #include <linux/hardirq.h> |
10 | #include <net/caif/cfpkt.h> | 10 | #include <net/caif/cfpkt.h> |
11 | 11 | ||
12 | #define PKT_PREFIX 16 | 12 | #define PKT_PREFIX 48 |
13 | #define PKT_POSTFIX 2 | 13 | #define PKT_POSTFIX 2 |
14 | #define PKT_LEN_WHEN_EXTENDING 128 | 14 | #define PKT_LEN_WHEN_EXTENDING 128 |
15 | #define PKT_ERROR(pkt, errmsg) do { \ | 15 | #define PKT_ERROR(pkt, errmsg) do { \ |
diff --git a/net/can/bcm.c b/net/can/bcm.c index 9c65e9deb9c3..08ffe9e4be20 100644 --- a/net/can/bcm.c +++ b/net/can/bcm.c | |||
@@ -60,6 +60,13 @@ | |||
60 | #include <net/sock.h> | 60 | #include <net/sock.h> |
61 | #include <net/net_namespace.h> | 61 | #include <net/net_namespace.h> |
62 | 62 | ||
63 | /* | ||
64 | * To send multiple CAN frame content within TX_SETUP or to filter | ||
65 | * CAN messages with multiplex index within RX_SETUP, the number of | ||
66 | * different filters is limited to 256 due to the one byte index value. | ||
67 | */ | ||
68 | #define MAX_NFRAMES 256 | ||
69 | |||
63 | /* use of last_frames[index].can_dlc */ | 70 | /* use of last_frames[index].can_dlc */ |
64 | #define RX_RECV 0x40 /* received data for this element */ | 71 | #define RX_RECV 0x40 /* received data for this element */ |
65 | #define RX_THR 0x80 /* element not been sent due to throttle feature */ | 72 | #define RX_THR 0x80 /* element not been sent due to throttle feature */ |
@@ -89,16 +96,16 @@ struct bcm_op { | |||
89 | struct list_head list; | 96 | struct list_head list; |
90 | int ifindex; | 97 | int ifindex; |
91 | canid_t can_id; | 98 | canid_t can_id; |
92 | int flags; | 99 | u32 flags; |
93 | unsigned long frames_abs, frames_filtered; | 100 | unsigned long frames_abs, frames_filtered; |
94 | struct timeval ival1, ival2; | 101 | struct timeval ival1, ival2; |
95 | struct hrtimer timer, thrtimer; | 102 | struct hrtimer timer, thrtimer; |
96 | struct tasklet_struct tsklet, thrtsklet; | 103 | struct tasklet_struct tsklet, thrtsklet; |
97 | ktime_t rx_stamp, kt_ival1, kt_ival2, kt_lastmsg; | 104 | ktime_t rx_stamp, kt_ival1, kt_ival2, kt_lastmsg; |
98 | int rx_ifindex; | 105 | int rx_ifindex; |
99 | int count; | 106 | u32 count; |
100 | int nframes; | 107 | u32 nframes; |
101 | int currframe; | 108 | u32 currframe; |
102 | struct can_frame *frames; | 109 | struct can_frame *frames; |
103 | struct can_frame *last_frames; | 110 | struct can_frame *last_frames; |
104 | struct can_frame sframe; | 111 | struct can_frame sframe; |
@@ -175,7 +182,7 @@ static int bcm_proc_show(struct seq_file *m, void *v) | |||
175 | 182 | ||
176 | seq_printf(m, "rx_op: %03X %-5s ", | 183 | seq_printf(m, "rx_op: %03X %-5s ", |
177 | op->can_id, bcm_proc_getifname(ifname, op->ifindex)); | 184 | op->can_id, bcm_proc_getifname(ifname, op->ifindex)); |
178 | seq_printf(m, "[%d]%c ", op->nframes, | 185 | seq_printf(m, "[%u]%c ", op->nframes, |
179 | (op->flags & RX_CHECK_DLC)?'d':' '); | 186 | (op->flags & RX_CHECK_DLC)?'d':' '); |
180 | if (op->kt_ival1.tv64) | 187 | if (op->kt_ival1.tv64) |
181 | seq_printf(m, "timeo=%lld ", | 188 | seq_printf(m, "timeo=%lld ", |
@@ -198,7 +205,7 @@ static int bcm_proc_show(struct seq_file *m, void *v) | |||
198 | 205 | ||
199 | list_for_each_entry(op, &bo->tx_ops, list) { | 206 | list_for_each_entry(op, &bo->tx_ops, list) { |
200 | 207 | ||
201 | seq_printf(m, "tx_op: %03X %s [%d] ", | 208 | seq_printf(m, "tx_op: %03X %s [%u] ", |
202 | op->can_id, | 209 | op->can_id, |
203 | bcm_proc_getifname(ifname, op->ifindex), | 210 | bcm_proc_getifname(ifname, op->ifindex), |
204 | op->nframes); | 211 | op->nframes); |
@@ -283,7 +290,7 @@ static void bcm_send_to_user(struct bcm_op *op, struct bcm_msg_head *head, | |||
283 | struct can_frame *firstframe; | 290 | struct can_frame *firstframe; |
284 | struct sockaddr_can *addr; | 291 | struct sockaddr_can *addr; |
285 | struct sock *sk = op->sk; | 292 | struct sock *sk = op->sk; |
286 | int datalen = head->nframes * CFSIZ; | 293 | unsigned int datalen = head->nframes * CFSIZ; |
287 | int err; | 294 | int err; |
288 | 295 | ||
289 | skb = alloc_skb(sizeof(*head) + datalen, gfp_any()); | 296 | skb = alloc_skb(sizeof(*head) + datalen, gfp_any()); |
@@ -468,7 +475,7 @@ rx_changed_settime: | |||
468 | * bcm_rx_cmp_to_index - (bit)compares the currently received data to formerly | 475 | * bcm_rx_cmp_to_index - (bit)compares the currently received data to formerly |
469 | * received data stored in op->last_frames[] | 476 | * received data stored in op->last_frames[] |
470 | */ | 477 | */ |
471 | static void bcm_rx_cmp_to_index(struct bcm_op *op, int index, | 478 | static void bcm_rx_cmp_to_index(struct bcm_op *op, unsigned int index, |
472 | const struct can_frame *rxdata) | 479 | const struct can_frame *rxdata) |
473 | { | 480 | { |
474 | /* | 481 | /* |
@@ -554,7 +561,8 @@ static enum hrtimer_restart bcm_rx_timeout_handler(struct hrtimer *hrtimer) | |||
554 | /* | 561 | /* |
555 | * bcm_rx_do_flush - helper for bcm_rx_thr_flush | 562 | * bcm_rx_do_flush - helper for bcm_rx_thr_flush |
556 | */ | 563 | */ |
557 | static inline int bcm_rx_do_flush(struct bcm_op *op, int update, int index) | 564 | static inline int bcm_rx_do_flush(struct bcm_op *op, int update, |
565 | unsigned int index) | ||
558 | { | 566 | { |
559 | if ((op->last_frames) && (op->last_frames[index].can_dlc & RX_THR)) { | 567 | if ((op->last_frames) && (op->last_frames[index].can_dlc & RX_THR)) { |
560 | if (update) | 568 | if (update) |
@@ -575,7 +583,7 @@ static int bcm_rx_thr_flush(struct bcm_op *op, int update) | |||
575 | int updated = 0; | 583 | int updated = 0; |
576 | 584 | ||
577 | if (op->nframes > 1) { | 585 | if (op->nframes > 1) { |
578 | int i; | 586 | unsigned int i; |
579 | 587 | ||
580 | /* for MUX filter we start at index 1 */ | 588 | /* for MUX filter we start at index 1 */ |
581 | for (i = 1; i < op->nframes; i++) | 589 | for (i = 1; i < op->nframes; i++) |
@@ -624,7 +632,7 @@ static void bcm_rx_handler(struct sk_buff *skb, void *data) | |||
624 | { | 632 | { |
625 | struct bcm_op *op = (struct bcm_op *)data; | 633 | struct bcm_op *op = (struct bcm_op *)data; |
626 | const struct can_frame *rxframe = (struct can_frame *)skb->data; | 634 | const struct can_frame *rxframe = (struct can_frame *)skb->data; |
627 | int i; | 635 | unsigned int i; |
628 | 636 | ||
629 | /* disable timeout */ | 637 | /* disable timeout */ |
630 | hrtimer_cancel(&op->timer); | 638 | hrtimer_cancel(&op->timer); |
@@ -822,14 +830,15 @@ static int bcm_tx_setup(struct bcm_msg_head *msg_head, struct msghdr *msg, | |||
822 | { | 830 | { |
823 | struct bcm_sock *bo = bcm_sk(sk); | 831 | struct bcm_sock *bo = bcm_sk(sk); |
824 | struct bcm_op *op; | 832 | struct bcm_op *op; |
825 | int i, err; | 833 | unsigned int i; |
834 | int err; | ||
826 | 835 | ||
827 | /* we need a real device to send frames */ | 836 | /* we need a real device to send frames */ |
828 | if (!ifindex) | 837 | if (!ifindex) |
829 | return -ENODEV; | 838 | return -ENODEV; |
830 | 839 | ||
831 | /* we need at least one can_frame */ | 840 | /* check nframes boundaries - we need at least one can_frame */ |
832 | if (msg_head->nframes < 1) | 841 | if (msg_head->nframes < 1 || msg_head->nframes > MAX_NFRAMES) |
833 | return -EINVAL; | 842 | return -EINVAL; |
834 | 843 | ||
835 | /* check the given can_id */ | 844 | /* check the given can_id */ |
@@ -993,6 +1002,10 @@ static int bcm_rx_setup(struct bcm_msg_head *msg_head, struct msghdr *msg, | |||
993 | msg_head->nframes = 0; | 1002 | msg_head->nframes = 0; |
994 | } | 1003 | } |
995 | 1004 | ||
1005 | /* the first element contains the mux-mask => MAX_NFRAMES + 1 */ | ||
1006 | if (msg_head->nframes > MAX_NFRAMES + 1) | ||
1007 | return -EINVAL; | ||
1008 | |||
996 | if ((msg_head->flags & RX_RTR_FRAME) && | 1009 | if ((msg_head->flags & RX_RTR_FRAME) && |
997 | ((msg_head->nframes != 1) || | 1010 | ((msg_head->nframes != 1) || |
998 | (!(msg_head->can_id & CAN_RTR_FLAG)))) | 1011 | (!(msg_head->can_id & CAN_RTR_FLAG)))) |
diff --git a/net/dsa/Kconfig b/net/dsa/Kconfig index 11201784d29a..87bb5f4de0e8 100644 --- a/net/dsa/Kconfig +++ b/net/dsa/Kconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | menuconfig NET_DSA | 1 | menuconfig NET_DSA |
2 | bool "Distributed Switch Architecture support" | 2 | bool "Distributed Switch Architecture support" |
3 | default n | 3 | default n |
4 | depends on EXPERIMENTAL && NET_ETHERNET && !S390 | 4 | depends on EXPERIMENTAL && NETDEVICES && !S390 |
5 | select PHYLIB | 5 | select PHYLIB |
6 | ---help--- | 6 | ---help--- |
7 | This allows you to use hardware switch chips that use | 7 | This allows you to use hardware switch chips that use |
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index b9e8c3b7d406..408eea7086aa 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c | |||
@@ -150,22 +150,34 @@ int register_qdisc(struct Qdisc_ops *qops) | |||
150 | if (qops->enqueue == NULL) | 150 | if (qops->enqueue == NULL) |
151 | qops->enqueue = noop_qdisc_ops.enqueue; | 151 | qops->enqueue = noop_qdisc_ops.enqueue; |
152 | if (qops->peek == NULL) { | 152 | if (qops->peek == NULL) { |
153 | if (qops->dequeue == NULL) { | 153 | if (qops->dequeue == NULL) |
154 | qops->peek = noop_qdisc_ops.peek; | 154 | qops->peek = noop_qdisc_ops.peek; |
155 | } else { | 155 | else |
156 | rc = -EINVAL; | 156 | goto out_einval; |
157 | goto out; | ||
158 | } | ||
159 | } | 157 | } |
160 | if (qops->dequeue == NULL) | 158 | if (qops->dequeue == NULL) |
161 | qops->dequeue = noop_qdisc_ops.dequeue; | 159 | qops->dequeue = noop_qdisc_ops.dequeue; |
162 | 160 | ||
161 | if (qops->cl_ops) { | ||
162 | const struct Qdisc_class_ops *cops = qops->cl_ops; | ||
163 | |||
164 | if (!(cops->get && cops->put && cops->walk && cops->leaf)) | ||
165 | goto out_einval; | ||
166 | |||
167 | if (cops->tcf_chain && !(cops->bind_tcf && cops->unbind_tcf)) | ||
168 | goto out_einval; | ||
169 | } | ||
170 | |||
163 | qops->next = NULL; | 171 | qops->next = NULL; |
164 | *qp = qops; | 172 | *qp = qops; |
165 | rc = 0; | 173 | rc = 0; |
166 | out: | 174 | out: |
167 | write_unlock(&qdisc_mod_lock); | 175 | write_unlock(&qdisc_mod_lock); |
168 | return rc; | 176 | return rc; |
177 | |||
178 | out_einval: | ||
179 | rc = -EINVAL; | ||
180 | goto out; | ||
169 | } | 181 | } |
170 | EXPORT_SYMBOL(register_qdisc); | 182 | EXPORT_SYMBOL(register_qdisc); |
171 | 183 | ||
diff --git a/net/sched/sch_atm.c b/net/sched/sch_atm.c index e114f23d5eae..340662789529 100644 --- a/net/sched/sch_atm.c +++ b/net/sched/sch_atm.c | |||
@@ -418,7 +418,7 @@ static int atm_tc_enqueue(struct sk_buff *skb, struct Qdisc *sch) | |||
418 | } | 418 | } |
419 | 419 | ||
420 | ret = qdisc_enqueue(skb, flow->q); | 420 | ret = qdisc_enqueue(skb, flow->q); |
421 | if (ret != 0) { | 421 | if (ret != NET_XMIT_SUCCESS) { |
422 | drop: __maybe_unused | 422 | drop: __maybe_unused |
423 | if (net_xmit_drop_count(ret)) { | 423 | if (net_xmit_drop_count(ret)) { |
424 | sch->qstats.drops++; | 424 | sch->qstats.drops++; |
@@ -442,7 +442,7 @@ drop: __maybe_unused | |||
442 | */ | 442 | */ |
443 | if (flow == &p->link) { | 443 | if (flow == &p->link) { |
444 | sch->q.qlen++; | 444 | sch->q.qlen++; |
445 | return 0; | 445 | return NET_XMIT_SUCCESS; |
446 | } | 446 | } |
447 | tasklet_schedule(&p->task); | 447 | tasklet_schedule(&p->task); |
448 | return NET_XMIT_SUCCESS | __NET_XMIT_BYPASS; | 448 | return NET_XMIT_SUCCESS | __NET_XMIT_BYPASS; |
diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c index 534f33231c17..201cbac2b32c 100644 --- a/net/sched/sch_sfq.c +++ b/net/sched/sch_sfq.c | |||
@@ -334,7 +334,7 @@ sfq_enqueue(struct sk_buff *skb, struct Qdisc *sch) | |||
334 | if (++sch->q.qlen <= q->limit) { | 334 | if (++sch->q.qlen <= q->limit) { |
335 | sch->bstats.bytes += qdisc_pkt_len(skb); | 335 | sch->bstats.bytes += qdisc_pkt_len(skb); |
336 | sch->bstats.packets++; | 336 | sch->bstats.packets++; |
337 | return 0; | 337 | return NET_XMIT_SUCCESS; |
338 | } | 338 | } |
339 | 339 | ||
340 | sfq_drop(sch); | 340 | sfq_drop(sch); |
@@ -508,6 +508,11 @@ nla_put_failure: | |||
508 | return -1; | 508 | return -1; |
509 | } | 509 | } |
510 | 510 | ||
511 | static struct Qdisc *sfq_leaf(struct Qdisc *sch, unsigned long arg) | ||
512 | { | ||
513 | return NULL; | ||
514 | } | ||
515 | |||
511 | static unsigned long sfq_get(struct Qdisc *sch, u32 classid) | 516 | static unsigned long sfq_get(struct Qdisc *sch, u32 classid) |
512 | { | 517 | { |
513 | return 0; | 518 | return 0; |
@@ -519,6 +524,10 @@ static unsigned long sfq_bind(struct Qdisc *sch, unsigned long parent, | |||
519 | return 0; | 524 | return 0; |
520 | } | 525 | } |
521 | 526 | ||
527 | static void sfq_put(struct Qdisc *q, unsigned long cl) | ||
528 | { | ||
529 | } | ||
530 | |||
522 | static struct tcf_proto **sfq_find_tcf(struct Qdisc *sch, unsigned long cl) | 531 | static struct tcf_proto **sfq_find_tcf(struct Qdisc *sch, unsigned long cl) |
523 | { | 532 | { |
524 | struct sfq_sched_data *q = qdisc_priv(sch); | 533 | struct sfq_sched_data *q = qdisc_priv(sch); |
@@ -571,9 +580,12 @@ static void sfq_walk(struct Qdisc *sch, struct qdisc_walker *arg) | |||
571 | } | 580 | } |
572 | 581 | ||
573 | static const struct Qdisc_class_ops sfq_class_ops = { | 582 | static const struct Qdisc_class_ops sfq_class_ops = { |
583 | .leaf = sfq_leaf, | ||
574 | .get = sfq_get, | 584 | .get = sfq_get, |
585 | .put = sfq_put, | ||
575 | .tcf_chain = sfq_find_tcf, | 586 | .tcf_chain = sfq_find_tcf, |
576 | .bind_tcf = sfq_bind, | 587 | .bind_tcf = sfq_bind, |
588 | .unbind_tcf = sfq_put, | ||
577 | .dump = sfq_dump_class, | 589 | .dump = sfq_dump_class, |
578 | .dump_stats = sfq_dump_class_stats, | 590 | .dump_stats = sfq_dump_class_stats, |
579 | .walk = sfq_walk, | 591 | .walk = sfq_walk, |
diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c index 0991c640cd3e..641a30d64635 100644 --- a/net/sched/sch_tbf.c +++ b/net/sched/sch_tbf.c | |||
@@ -127,7 +127,7 @@ static int tbf_enqueue(struct sk_buff *skb, struct Qdisc* sch) | |||
127 | return qdisc_reshape_fail(skb, sch); | 127 | return qdisc_reshape_fail(skb, sch); |
128 | 128 | ||
129 | ret = qdisc_enqueue(skb, q->qdisc); | 129 | ret = qdisc_enqueue(skb, q->qdisc); |
130 | if (ret != 0) { | 130 | if (ret != NET_XMIT_SUCCESS) { |
131 | if (net_xmit_drop_count(ret)) | 131 | if (net_xmit_drop_count(ret)) |
132 | sch->qstats.drops++; | 132 | sch->qstats.drops++; |
133 | return ret; | 133 | return ret; |
@@ -136,7 +136,7 @@ static int tbf_enqueue(struct sk_buff *skb, struct Qdisc* sch) | |||
136 | sch->q.qlen++; | 136 | sch->q.qlen++; |
137 | sch->bstats.bytes += qdisc_pkt_len(skb); | 137 | sch->bstats.bytes += qdisc_pkt_len(skb); |
138 | sch->bstats.packets++; | 138 | sch->bstats.packets++; |
139 | return 0; | 139 | return NET_XMIT_SUCCESS; |
140 | } | 140 | } |
141 | 141 | ||
142 | static unsigned int tbf_drop(struct Qdisc* sch) | 142 | static unsigned int tbf_drop(struct Qdisc* sch) |
diff --git a/net/sched/sch_teql.c b/net/sched/sch_teql.c index 807643bdcbac..feaabc103ce6 100644 --- a/net/sched/sch_teql.c +++ b/net/sched/sch_teql.c | |||
@@ -85,7 +85,7 @@ teql_enqueue(struct sk_buff *skb, struct Qdisc* sch) | |||
85 | __skb_queue_tail(&q->q, skb); | 85 | __skb_queue_tail(&q->q, skb); |
86 | sch->bstats.bytes += qdisc_pkt_len(skb); | 86 | sch->bstats.bytes += qdisc_pkt_len(skb); |
87 | sch->bstats.packets++; | 87 | sch->bstats.packets++; |
88 | return 0; | 88 | return NET_XMIT_SUCCESS; |
89 | } | 89 | } |
90 | 90 | ||
91 | kfree_skb(skb); | 91 | kfree_skb(skb); |
diff --git a/net/wireless/mlme.c b/net/wireless/mlme.c index e74a1a2119d3..d1a3fb99fdf2 100644 --- a/net/wireless/mlme.c +++ b/net/wireless/mlme.c | |||
@@ -843,13 +843,19 @@ int cfg80211_mlme_action(struct cfg80211_registered_device *rdev, | |||
843 | return -EINVAL; | 843 | return -EINVAL; |
844 | if (mgmt->u.action.category != WLAN_CATEGORY_PUBLIC) { | 844 | if (mgmt->u.action.category != WLAN_CATEGORY_PUBLIC) { |
845 | /* Verify that we are associated with the destination AP */ | 845 | /* Verify that we are associated with the destination AP */ |
846 | wdev_lock(wdev); | ||
847 | |||
846 | if (!wdev->current_bss || | 848 | if (!wdev->current_bss || |
847 | memcmp(wdev->current_bss->pub.bssid, mgmt->bssid, | 849 | memcmp(wdev->current_bss->pub.bssid, mgmt->bssid, |
848 | ETH_ALEN) != 0 || | 850 | ETH_ALEN) != 0 || |
849 | (wdev->iftype == NL80211_IFTYPE_STATION && | 851 | (wdev->iftype == NL80211_IFTYPE_STATION && |
850 | memcmp(wdev->current_bss->pub.bssid, mgmt->da, | 852 | memcmp(wdev->current_bss->pub.bssid, mgmt->da, |
851 | ETH_ALEN) != 0)) | 853 | ETH_ALEN) != 0)) { |
854 | wdev_unlock(wdev); | ||
852 | return -ENOTCONN; | 855 | return -ENOTCONN; |
856 | } | ||
857 | |||
858 | wdev_unlock(wdev); | ||
853 | } | 859 | } |
854 | 860 | ||
855 | if (memcmp(mgmt->sa, dev->dev_addr, ETH_ALEN) != 0) | 861 | if (memcmp(mgmt->sa, dev->dev_addr, ETH_ALEN) != 0) |