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) |
