aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/net/qeth_l2_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/net/qeth_l2_main.c')
-rw-r--r--drivers/s390/net/qeth_l2_main.c39
1 files changed, 22 insertions, 17 deletions
diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c
index 23aaf373f631..2914a1a69f83 100644
--- a/drivers/s390/net/qeth_l2_main.c
+++ b/drivers/s390/net/qeth_l2_main.c
@@ -146,11 +146,11 @@ static int qeth_l2_write_mac(struct qeth_card *card, u8 *mac)
146 QETH_CARD_TEXT(card, 2, "L2Wmac"); 146 QETH_CARD_TEXT(card, 2, "L2Wmac");
147 rc = qeth_l2_send_setdelmac(card, mac, cmd); 147 rc = qeth_l2_send_setdelmac(card, mac, cmd);
148 if (rc == -EEXIST) 148 if (rc == -EEXIST)
149 QETH_DBF_MESSAGE(2, "MAC %pM already registered on %s\n", 149 QETH_DBF_MESSAGE(2, "MAC already registered on device %x\n",
150 mac, QETH_CARD_IFNAME(card)); 150 CARD_DEVID(card));
151 else if (rc) 151 else if (rc)
152 QETH_DBF_MESSAGE(2, "Failed to register MAC %pM on %s: %d\n", 152 QETH_DBF_MESSAGE(2, "Failed to register MAC on device %x: %d\n",
153 mac, QETH_CARD_IFNAME(card), rc); 153 CARD_DEVID(card), rc);
154 return rc; 154 return rc;
155} 155}
156 156
@@ -163,8 +163,8 @@ static int qeth_l2_remove_mac(struct qeth_card *card, u8 *mac)
163 QETH_CARD_TEXT(card, 2, "L2Rmac"); 163 QETH_CARD_TEXT(card, 2, "L2Rmac");
164 rc = qeth_l2_send_setdelmac(card, mac, cmd); 164 rc = qeth_l2_send_setdelmac(card, mac, cmd);
165 if (rc) 165 if (rc)
166 QETH_DBF_MESSAGE(2, "Failed to delete MAC %pM on %s: %d\n", 166 QETH_DBF_MESSAGE(2, "Failed to delete MAC on device %u: %d\n",
167 mac, QETH_CARD_IFNAME(card), rc); 167 CARD_DEVID(card), rc);
168 return rc; 168 return rc;
169} 169}
170 170
@@ -260,9 +260,9 @@ static int qeth_l2_send_setdelvlan_cb(struct qeth_card *card,
260 260
261 QETH_CARD_TEXT(card, 2, "L2sdvcb"); 261 QETH_CARD_TEXT(card, 2, "L2sdvcb");
262 if (cmd->hdr.return_code) { 262 if (cmd->hdr.return_code) {
263 QETH_DBF_MESSAGE(2, "Error in processing VLAN %i on %s: 0x%x.\n", 263 QETH_DBF_MESSAGE(2, "Error in processing VLAN %u on device %x: %#x.\n",
264 cmd->data.setdelvlan.vlan_id, 264 cmd->data.setdelvlan.vlan_id,
265 QETH_CARD_IFNAME(card), cmd->hdr.return_code); 265 CARD_DEVID(card), cmd->hdr.return_code);
266 QETH_CARD_TEXT_(card, 2, "L2VL%4x", cmd->hdr.command); 266 QETH_CARD_TEXT_(card, 2, "L2VL%4x", cmd->hdr.command);
267 QETH_CARD_TEXT_(card, 2, "err%d", cmd->hdr.return_code); 267 QETH_CARD_TEXT_(card, 2, "err%d", cmd->hdr.return_code);
268 } 268 }
@@ -455,8 +455,8 @@ static int qeth_l2_request_initial_mac(struct qeth_card *card)
455 rc = qeth_vm_request_mac(card); 455 rc = qeth_vm_request_mac(card);
456 if (!rc) 456 if (!rc)
457 goto out; 457 goto out;
458 QETH_DBF_MESSAGE(2, "z/VM MAC Service failed on device %s: x%x\n", 458 QETH_DBF_MESSAGE(2, "z/VM MAC Service failed on device %x: %#x\n",
459 CARD_BUS_ID(card), rc); 459 CARD_DEVID(card), rc);
460 QETH_DBF_TEXT_(SETUP, 2, "err%04x", rc); 460 QETH_DBF_TEXT_(SETUP, 2, "err%04x", rc);
461 /* fall back to alternative mechanism: */ 461 /* fall back to alternative mechanism: */
462 } 462 }
@@ -468,8 +468,8 @@ static int qeth_l2_request_initial_mac(struct qeth_card *card)
468 rc = qeth_setadpparms_change_macaddr(card); 468 rc = qeth_setadpparms_change_macaddr(card);
469 if (!rc) 469 if (!rc)
470 goto out; 470 goto out;
471 QETH_DBF_MESSAGE(2, "READ_MAC Assist failed on device %s: x%x\n", 471 QETH_DBF_MESSAGE(2, "READ_MAC Assist failed on device %x: %#x\n",
472 CARD_BUS_ID(card), rc); 472 CARD_DEVID(card), rc);
473 QETH_DBF_TEXT_(SETUP, 2, "1err%04x", rc); 473 QETH_DBF_TEXT_(SETUP, 2, "1err%04x", rc);
474 /* fall back once more: */ 474 /* fall back once more: */
475 } 475 }
@@ -826,7 +826,8 @@ static void qeth_l2_remove_device(struct ccwgroup_device *cgdev)
826 826
827 if (cgdev->state == CCWGROUP_ONLINE) 827 if (cgdev->state == CCWGROUP_ONLINE)
828 qeth_l2_set_offline(cgdev); 828 qeth_l2_set_offline(cgdev);
829 unregister_netdev(card->dev); 829 if (qeth_netdev_is_registered(card->dev))
830 unregister_netdev(card->dev);
830} 831}
831 832
832static const struct ethtool_ops qeth_l2_ethtool_ops = { 833static const struct ethtool_ops qeth_l2_ethtool_ops = {
@@ -862,11 +863,11 @@ static const struct net_device_ops qeth_l2_netdev_ops = {
862 .ndo_set_features = qeth_set_features 863 .ndo_set_features = qeth_set_features
863}; 864};
864 865
865static int qeth_l2_setup_netdev(struct qeth_card *card) 866static int qeth_l2_setup_netdev(struct qeth_card *card, bool carrier_ok)
866{ 867{
867 int rc; 868 int rc;
868 869
869 if (card->dev->netdev_ops) 870 if (qeth_netdev_is_registered(card->dev))
870 return 0; 871 return 0;
871 872
872 card->dev->priv_flags |= IFF_UNICAST_FLT; 873 card->dev->priv_flags |= IFF_UNICAST_FLT;
@@ -919,6 +920,9 @@ static int qeth_l2_setup_netdev(struct qeth_card *card)
919 qeth_l2_request_initial_mac(card); 920 qeth_l2_request_initial_mac(card);
920 netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT); 921 netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT);
921 rc = register_netdev(card->dev); 922 rc = register_netdev(card->dev);
923 if (!rc && carrier_ok)
924 netif_carrier_on(card->dev);
925
922 if (rc) 926 if (rc)
923 card->dev->netdev_ops = NULL; 927 card->dev->netdev_ops = NULL;
924 return rc; 928 return rc;
@@ -949,6 +953,7 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode)
949 struct qeth_card *card = dev_get_drvdata(&gdev->dev); 953 struct qeth_card *card = dev_get_drvdata(&gdev->dev);
950 int rc = 0; 954 int rc = 0;
951 enum qeth_card_states recover_flag; 955 enum qeth_card_states recover_flag;
956 bool carrier_ok;
952 957
953 mutex_lock(&card->discipline_mutex); 958 mutex_lock(&card->discipline_mutex);
954 mutex_lock(&card->conf_mutex); 959 mutex_lock(&card->conf_mutex);
@@ -956,7 +961,7 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode)
956 QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *)); 961 QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
957 962
958 recover_flag = card->state; 963 recover_flag = card->state;
959 rc = qeth_core_hardsetup_card(card); 964 rc = qeth_core_hardsetup_card(card, &carrier_ok);
960 if (rc) { 965 if (rc) {
961 QETH_DBF_TEXT_(SETUP, 2, "2err%04x", rc); 966 QETH_DBF_TEXT_(SETUP, 2, "2err%04x", rc);
962 rc = -ENODEV; 967 rc = -ENODEV;
@@ -967,7 +972,7 @@ static int __qeth_l2_set_online(struct ccwgroup_device *gdev, int recovery_mode)
967 dev_info(&card->gdev->dev, 972 dev_info(&card->gdev->dev,
968 "The device represents a Bridge Capable Port\n"); 973 "The device represents a Bridge Capable Port\n");
969 974
970 rc = qeth_l2_setup_netdev(card); 975 rc = qeth_l2_setup_netdev(card, carrier_ok);
971 if (rc) 976 if (rc)
972 goto out_remove; 977 goto out_remove;
973 978