diff options
Diffstat (limited to 'drivers/s390/net/qeth_l2_main.c')
| -rw-r--r-- | drivers/s390/net/qeth_l2_main.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c index b7b9d5cbe4d5..ce87ae72edbd 100644 --- a/drivers/s390/net/qeth_l2_main.c +++ b/drivers/s390/net/qeth_l2_main.c | |||
| @@ -132,7 +132,7 @@ static int qeth_setdel_makerc(struct qeth_card *card, int retcode) | |||
| 132 | int rc; | 132 | int rc; |
| 133 | 133 | ||
| 134 | if (retcode) | 134 | if (retcode) |
| 135 | QETH_CARD_TEXT_(card, 2, "err%d", retcode); | 135 | QETH_CARD_TEXT_(card, 2, "err%04x", retcode); |
| 136 | switch (retcode) { | 136 | switch (retcode) { |
| 137 | case IPA_RC_SUCCESS: | 137 | case IPA_RC_SUCCESS: |
| 138 | rc = 0; | 138 | rc = 0; |
| @@ -154,6 +154,9 @@ static int qeth_setdel_makerc(struct qeth_card *card, int retcode) | |||
| 154 | case IPA_RC_L2_MAC_NOT_FOUND: | 154 | case IPA_RC_L2_MAC_NOT_FOUND: |
| 155 | rc = -ENOENT; | 155 | rc = -ENOENT; |
| 156 | break; | 156 | break; |
| 157 | case -ENOMEM: | ||
| 158 | rc = -ENOMEM; | ||
| 159 | break; | ||
| 157 | default: | 160 | default: |
| 158 | rc = -EIO; | 161 | rc = -EIO; |
| 159 | break; | 162 | break; |
| @@ -301,6 +304,8 @@ static int qeth_l2_send_setdelvlan(struct qeth_card *card, __u16 i, | |||
| 301 | 304 | ||
| 302 | QETH_CARD_TEXT_(card, 4, "L2sdv%x", ipacmd); | 305 | QETH_CARD_TEXT_(card, 4, "L2sdv%x", ipacmd); |
| 303 | iob = qeth_get_ipacmd_buffer(card, ipacmd, QETH_PROT_IPV4); | 306 | iob = qeth_get_ipacmd_buffer(card, ipacmd, QETH_PROT_IPV4); |
| 307 | if (!iob) | ||
| 308 | return -ENOMEM; | ||
| 304 | cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE); | 309 | cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE); |
| 305 | cmd->data.setdelvlan.vlan_id = i; | 310 | cmd->data.setdelvlan.vlan_id = i; |
| 306 | return qeth_send_ipa_cmd(card, iob, | 311 | return qeth_send_ipa_cmd(card, iob, |
| @@ -323,6 +328,7 @@ static int qeth_l2_vlan_rx_add_vid(struct net_device *dev, | |||
| 323 | { | 328 | { |
| 324 | struct qeth_card *card = dev->ml_priv; | 329 | struct qeth_card *card = dev->ml_priv; |
| 325 | struct qeth_vlan_vid *id; | 330 | struct qeth_vlan_vid *id; |
| 331 | int rc; | ||
| 326 | 332 | ||
| 327 | QETH_CARD_TEXT_(card, 4, "aid:%d", vid); | 333 | QETH_CARD_TEXT_(card, 4, "aid:%d", vid); |
| 328 | if (!vid) | 334 | if (!vid) |
| @@ -338,7 +344,11 @@ static int qeth_l2_vlan_rx_add_vid(struct net_device *dev, | |||
| 338 | id = kmalloc(sizeof(struct qeth_vlan_vid), GFP_ATOMIC); | 344 | id = kmalloc(sizeof(struct qeth_vlan_vid), GFP_ATOMIC); |
| 339 | if (id) { | 345 | if (id) { |
| 340 | id->vid = vid; | 346 | id->vid = vid; |
| 341 | qeth_l2_send_setdelvlan(card, vid, IPA_CMD_SETVLAN); | 347 | rc = qeth_l2_send_setdelvlan(card, vid, IPA_CMD_SETVLAN); |
| 348 | if (rc) { | ||
| 349 | kfree(id); | ||
| 350 | return rc; | ||
| 351 | } | ||
| 342 | spin_lock_bh(&card->vlanlock); | 352 | spin_lock_bh(&card->vlanlock); |
| 343 | list_add_tail(&id->list, &card->vid_list); | 353 | list_add_tail(&id->list, &card->vid_list); |
| 344 | spin_unlock_bh(&card->vlanlock); | 354 | spin_unlock_bh(&card->vlanlock); |
| @@ -353,6 +363,7 @@ static int qeth_l2_vlan_rx_kill_vid(struct net_device *dev, | |||
| 353 | { | 363 | { |
| 354 | struct qeth_vlan_vid *id, *tmpid = NULL; | 364 | struct qeth_vlan_vid *id, *tmpid = NULL; |
| 355 | struct qeth_card *card = dev->ml_priv; | 365 | struct qeth_card *card = dev->ml_priv; |
| 366 | int rc = 0; | ||
| 356 | 367 | ||
| 357 | QETH_CARD_TEXT_(card, 4, "kid:%d", vid); | 368 | QETH_CARD_TEXT_(card, 4, "kid:%d", vid); |
| 358 | if (card->info.type == QETH_CARD_TYPE_OSM) { | 369 | if (card->info.type == QETH_CARD_TYPE_OSM) { |
| @@ -373,11 +384,11 @@ static int qeth_l2_vlan_rx_kill_vid(struct net_device *dev, | |||
| 373 | } | 384 | } |
| 374 | spin_unlock_bh(&card->vlanlock); | 385 | spin_unlock_bh(&card->vlanlock); |
| 375 | if (tmpid) { | 386 | if (tmpid) { |
| 376 | qeth_l2_send_setdelvlan(card, vid, IPA_CMD_DELVLAN); | 387 | rc = qeth_l2_send_setdelvlan(card, vid, IPA_CMD_DELVLAN); |
| 377 | kfree(tmpid); | 388 | kfree(tmpid); |
| 378 | } | 389 | } |
| 379 | qeth_l2_set_multicast_list(card->dev); | 390 | qeth_l2_set_multicast_list(card->dev); |
| 380 | return 0; | 391 | return rc; |
| 381 | } | 392 | } |
| 382 | 393 | ||
| 383 | static int qeth_l2_stop_card(struct qeth_card *card, int recovery_mode) | 394 | static int qeth_l2_stop_card(struct qeth_card *card, int recovery_mode) |
| @@ -556,6 +567,8 @@ static int qeth_l2_send_setdelmac(struct qeth_card *card, __u8 *mac, | |||
| 556 | 567 | ||
| 557 | QETH_CARD_TEXT(card, 2, "L2sdmac"); | 568 | QETH_CARD_TEXT(card, 2, "L2sdmac"); |
| 558 | iob = qeth_get_ipacmd_buffer(card, ipacmd, QETH_PROT_IPV4); | 569 | iob = qeth_get_ipacmd_buffer(card, ipacmd, QETH_PROT_IPV4); |
| 570 | if (!iob) | ||
| 571 | return -ENOMEM; | ||
| 559 | cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE); | 572 | cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE); |
| 560 | cmd->data.setdelmac.mac_length = OSA_ADDR_LEN; | 573 | cmd->data.setdelmac.mac_length = OSA_ADDR_LEN; |
| 561 | memcpy(&cmd->data.setdelmac.mac, mac, OSA_ADDR_LEN); | 574 | memcpy(&cmd->data.setdelmac.mac, mac, OSA_ADDR_LEN); |
| @@ -630,7 +643,7 @@ static int qeth_l2_request_initial_mac(struct qeth_card *card) | |||
| 630 | if (rc) { | 643 | if (rc) { |
| 631 | QETH_DBF_MESSAGE(2, "couldn't get MAC address on " | 644 | QETH_DBF_MESSAGE(2, "couldn't get MAC address on " |
| 632 | "device %s: x%x\n", CARD_BUS_ID(card), rc); | 645 | "device %s: x%x\n", CARD_BUS_ID(card), rc); |
| 633 | QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc); | 646 | QETH_DBF_TEXT_(SETUP, 2, "1err%04x", rc); |
| 634 | return rc; | 647 | return rc; |
| 635 | } | 648 | } |
| 636 | QETH_DBF_HEX(SETUP, 2, card->dev->dev_addr, OSA_ADDR_LEN); | 649 | QETH_DBF_HEX(SETUP, 2, card->dev->dev_addr, OSA_ADDR_LEN); |
| @@ -975,7 +988,7 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode) | |||
| 975 | recover_flag = card->state; | 988 | recover_flag = card->state; |
| 976 | rc = qeth_core_hardsetup_card(card); | 989 | rc = qeth_core_hardsetup_card(card); |
| 977 | if (rc) { | 990 | if (rc) { |
| 978 | QETH_DBF_TEXT_(SETUP, 2, "2err%d", rc); | 991 | QETH_DBF_TEXT_(SETUP, 2, "2err%04x", rc); |
| 979 | rc = -ENODEV; | 992 | rc = -ENODEV; |
| 980 | goto out_remove; | 993 | goto out_remove; |
| 981 | } | 994 | } |
| @@ -1709,6 +1722,8 @@ static void qeth_bridgeport_query_support(struct qeth_card *card) | |||
| 1709 | 1722 | ||
| 1710 | QETH_CARD_TEXT(card, 2, "brqsuppo"); | 1723 | QETH_CARD_TEXT(card, 2, "brqsuppo"); |
| 1711 | iob = qeth_get_ipacmd_buffer(card, IPA_CMD_SETBRIDGEPORT, 0); | 1724 | iob = qeth_get_ipacmd_buffer(card, IPA_CMD_SETBRIDGEPORT, 0); |
| 1725 | if (!iob) | ||
| 1726 | return; | ||
| 1712 | cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE); | 1727 | cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE); |
| 1713 | cmd->data.sbp.hdr.cmdlength = | 1728 | cmd->data.sbp.hdr.cmdlength = |
| 1714 | sizeof(struct qeth_ipacmd_sbp_hdr) + | 1729 | sizeof(struct qeth_ipacmd_sbp_hdr) + |
| @@ -1784,6 +1799,8 @@ int qeth_bridgeport_query_ports(struct qeth_card *card, | |||
| 1784 | if (!(card->options.sbp.supported_funcs & IPA_SBP_QUERY_BRIDGE_PORTS)) | 1799 | if (!(card->options.sbp.supported_funcs & IPA_SBP_QUERY_BRIDGE_PORTS)) |
| 1785 | return -EOPNOTSUPP; | 1800 | return -EOPNOTSUPP; |
| 1786 | iob = qeth_get_ipacmd_buffer(card, IPA_CMD_SETBRIDGEPORT, 0); | 1801 | iob = qeth_get_ipacmd_buffer(card, IPA_CMD_SETBRIDGEPORT, 0); |
| 1802 | if (!iob) | ||
| 1803 | return -ENOMEM; | ||
| 1787 | cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE); | 1804 | cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE); |
| 1788 | cmd->data.sbp.hdr.cmdlength = | 1805 | cmd->data.sbp.hdr.cmdlength = |
| 1789 | sizeof(struct qeth_ipacmd_sbp_hdr); | 1806 | sizeof(struct qeth_ipacmd_sbp_hdr); |
| @@ -1796,9 +1813,7 @@ int qeth_bridgeport_query_ports(struct qeth_card *card, | |||
| 1796 | if (rc) | 1813 | if (rc) |
| 1797 | return rc; | 1814 | return rc; |
| 1798 | rc = qeth_bridgeport_makerc(card, &cbctl, IPA_SBP_QUERY_BRIDGE_PORTS); | 1815 | rc = qeth_bridgeport_makerc(card, &cbctl, IPA_SBP_QUERY_BRIDGE_PORTS); |
| 1799 | if (rc) | 1816 | return rc; |
| 1800 | return rc; | ||
| 1801 | return 0; | ||
| 1802 | } | 1817 | } |
| 1803 | EXPORT_SYMBOL_GPL(qeth_bridgeport_query_ports); | 1818 | EXPORT_SYMBOL_GPL(qeth_bridgeport_query_ports); |
| 1804 | 1819 | ||
| @@ -1852,6 +1867,8 @@ int qeth_bridgeport_setrole(struct qeth_card *card, enum qeth_sbp_roles role) | |||
| 1852 | if (!(card->options.sbp.supported_funcs & setcmd)) | 1867 | if (!(card->options.sbp.supported_funcs & setcmd)) |
| 1853 | return -EOPNOTSUPP; | 1868 | return -EOPNOTSUPP; |
| 1854 | iob = qeth_get_ipacmd_buffer(card, IPA_CMD_SETBRIDGEPORT, 0); | 1869 | iob = qeth_get_ipacmd_buffer(card, IPA_CMD_SETBRIDGEPORT, 0); |
| 1870 | if (!iob) | ||
| 1871 | return -ENOMEM; | ||
| 1855 | cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE); | 1872 | cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE); |
| 1856 | cmd->data.sbp.hdr.cmdlength = cmdlength; | 1873 | cmd->data.sbp.hdr.cmdlength = cmdlength; |
| 1857 | cmd->data.sbp.hdr.command_code = setcmd; | 1874 | cmd->data.sbp.hdr.command_code = setcmd; |
