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.c41
1 files changed, 16 insertions, 25 deletions
diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c
index 86ec50ddae13..f682f7b14480 100644
--- a/drivers/s390/net/qeth_l2_main.c
+++ b/drivers/s390/net/qeth_l2_main.c
@@ -101,19 +101,16 @@ static struct net_device *qeth_l2_netdev_by_devno(unsigned char *read_dev_no)
101{ 101{
102 struct qeth_card *card; 102 struct qeth_card *card;
103 struct net_device *ndev; 103 struct net_device *ndev;
104 unsigned char *readno; 104 __u16 temp_dev_no;
105 __u16 temp_dev_no, card_dev_no;
106 char *endp;
107 unsigned long flags; 105 unsigned long flags;
106 struct ccw_dev_id read_devid;
108 107
109 ndev = NULL; 108 ndev = NULL;
110 memcpy(&temp_dev_no, read_dev_no, 2); 109 memcpy(&temp_dev_no, read_dev_no, 2);
111 read_lock_irqsave(&qeth_core_card_list.rwlock, flags); 110 read_lock_irqsave(&qeth_core_card_list.rwlock, flags);
112 list_for_each_entry(card, &qeth_core_card_list.list, list) { 111 list_for_each_entry(card, &qeth_core_card_list.list, list) {
113 readno = CARD_RDEV_ID(card); 112 ccw_device_get_id(CARD_RDEV(card), &read_devid);
114 readno += (strlen(readno) - 4); 113 if (read_devid.devno == temp_dev_no) {
115 card_dev_no = simple_strtoul(readno, &endp, 16);
116 if (card_dev_no == temp_dev_no) {
117 ndev = card->dev; 114 ndev = card->dev;
118 break; 115 break;
119 } 116 }
@@ -134,14 +131,14 @@ static int qeth_l2_send_setgroupmac_cb(struct qeth_card *card,
134 mac = &cmd->data.setdelmac.mac[0]; 131 mac = &cmd->data.setdelmac.mac[0];
135 /* MAC already registered, needed in couple/uncouple case */ 132 /* MAC already registered, needed in couple/uncouple case */
136 if (cmd->hdr.return_code == 0x2005) { 133 if (cmd->hdr.return_code == 0x2005) {
137 PRINT_WARN("Group MAC %02x:%02x:%02x:%02x:%02x:%02x " \ 134 QETH_DBF_MESSAGE(2, "Group MAC %02x:%02x:%02x:%02x:%02x:%02x "
138 "already existing on %s \n", 135 "already existing on %s \n",
139 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], 136 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5],
140 QETH_CARD_IFNAME(card)); 137 QETH_CARD_IFNAME(card));
141 cmd->hdr.return_code = 0; 138 cmd->hdr.return_code = 0;
142 } 139 }
143 if (cmd->hdr.return_code) 140 if (cmd->hdr.return_code)
144 PRINT_ERR("Could not set group MAC " \ 141 QETH_DBF_MESSAGE(2, "Could not set group MAC "
145 "%02x:%02x:%02x:%02x:%02x:%02x on %s: %x\n", 142 "%02x:%02x:%02x:%02x:%02x:%02x on %s: %x\n",
146 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], 143 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5],
147 QETH_CARD_IFNAME(card), cmd->hdr.return_code); 144 QETH_CARD_IFNAME(card), cmd->hdr.return_code);
@@ -166,7 +163,7 @@ static int qeth_l2_send_delgroupmac_cb(struct qeth_card *card,
166 cmd = (struct qeth_ipa_cmd *) data; 163 cmd = (struct qeth_ipa_cmd *) data;
167 mac = &cmd->data.setdelmac.mac[0]; 164 mac = &cmd->data.setdelmac.mac[0];
168 if (cmd->hdr.return_code) 165 if (cmd->hdr.return_code)
169 PRINT_ERR("Could not delete group MAC " \ 166 QETH_DBF_MESSAGE(2, "Could not delete group MAC "
170 "%02x:%02x:%02x:%02x:%02x:%02x on %s: %x\n", 167 "%02x:%02x:%02x:%02x:%02x:%02x on %s: %x\n",
171 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], 168 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5],
172 QETH_CARD_IFNAME(card), cmd->hdr.return_code); 169 QETH_CARD_IFNAME(card), cmd->hdr.return_code);
@@ -186,10 +183,8 @@ static void qeth_l2_add_mc(struct qeth_card *card, __u8 *mac)
186 183
187 mc = kmalloc(sizeof(struct qeth_mc_mac), GFP_ATOMIC); 184 mc = kmalloc(sizeof(struct qeth_mc_mac), GFP_ATOMIC);
188 185
189 if (!mc) { 186 if (!mc)
190 PRINT_ERR("no mem vor mc mac address\n");
191 return; 187 return;
192 }
193 188
194 memcpy(mc->mc_addr, mac, OSA_ADDR_LEN); 189 memcpy(mc->mc_addr, mac, OSA_ADDR_LEN);
195 mc->mc_addrlen = OSA_ADDR_LEN; 190 mc->mc_addrlen = OSA_ADDR_LEN;
@@ -280,7 +275,7 @@ static int qeth_l2_send_setdelvlan_cb(struct qeth_card *card,
280 QETH_DBF_TEXT(TRACE, 2, "L2sdvcb"); 275 QETH_DBF_TEXT(TRACE, 2, "L2sdvcb");
281 cmd = (struct qeth_ipa_cmd *) data; 276 cmd = (struct qeth_ipa_cmd *) data;
282 if (cmd->hdr.return_code) { 277 if (cmd->hdr.return_code) {
283 PRINT_ERR("Error in processing VLAN %i on %s: 0x%x. " 278 QETH_DBF_MESSAGE(2, "Error in processing VLAN %i on %s: 0x%x. "
284 "Continuing\n", cmd->data.setdelvlan.vlan_id, 279 "Continuing\n", cmd->data.setdelvlan.vlan_id,
285 QETH_CARD_IFNAME(card), cmd->hdr.return_code); 280 QETH_CARD_IFNAME(card), cmd->hdr.return_code);
286 QETH_DBF_TEXT_(TRACE, 2, "L2VL%4x", cmd->hdr.command); 281 QETH_DBF_TEXT_(TRACE, 2, "L2VL%4x", cmd->hdr.command);
@@ -333,8 +328,6 @@ static void qeth_l2_vlan_rx_add_vid(struct net_device *dev, unsigned short vid)
333 spin_lock_bh(&card->vlanlock); 328 spin_lock_bh(&card->vlanlock);
334 list_add_tail(&id->list, &card->vid_list); 329 list_add_tail(&id->list, &card->vid_list);
335 spin_unlock_bh(&card->vlanlock); 330 spin_unlock_bh(&card->vlanlock);
336 } else {
337 PRINT_ERR("no memory for vid\n");
338 } 331 }
339} 332}
340 333
@@ -550,16 +543,15 @@ static int qeth_l2_request_initial_mac(struct qeth_card *card)
550 543
551 rc = qeth_query_setadapterparms(card); 544 rc = qeth_query_setadapterparms(card);
552 if (rc) { 545 if (rc) {
553 PRINT_WARN("could not query adapter parameters on device %s: " 546 QETH_DBF_MESSAGE(2, "could not query adapter parameters on "
554 "x%x\n", CARD_BUS_ID(card), rc); 547 "device %s: x%x\n", CARD_BUS_ID(card), rc);
555 } 548 }
556 549
557 if (card->info.guestlan) { 550 if (card->info.guestlan) {
558 rc = qeth_setadpparms_change_macaddr(card); 551 rc = qeth_setadpparms_change_macaddr(card);
559 if (rc) { 552 if (rc) {
560 PRINT_WARN("couldn't get MAC address on " 553 QETH_DBF_MESSAGE(2, "couldn't get MAC address on "
561 "device %s: x%x\n", 554 "device %s: x%x\n", CARD_BUS_ID(card), rc);
562 CARD_BUS_ID(card), rc);
563 QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc); 555 QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc);
564 return rc; 556 return rc;
565 } 557 }
@@ -585,8 +577,6 @@ static int qeth_l2_set_mac_address(struct net_device *dev, void *p)
585 } 577 }
586 578
587 if (card->info.type == QETH_CARD_TYPE_OSN) { 579 if (card->info.type == QETH_CARD_TYPE_OSN) {
588 PRINT_WARN("Setting MAC address on %s is not supported.\n",
589 dev->name);
590 QETH_DBF_TEXT(TRACE, 3, "setmcOSN"); 580 QETH_DBF_TEXT(TRACE, 3, "setmcOSN");
591 return -EOPNOTSUPP; 581 return -EOPNOTSUPP;
592 } 582 }
@@ -666,7 +656,7 @@ static int qeth_l2_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
666 ctx = qeth_eddp_create_context(card, new_skb, hdr, 656 ctx = qeth_eddp_create_context(card, new_skb, hdr,
667 skb->sk->sk_protocol); 657 skb->sk->sk_protocol);
668 if (ctx == NULL) { 658 if (ctx == NULL) {
669 PRINT_WARN("could not create eddp context\n"); 659 QETH_DBF_MESSAGE(2, "could not create eddp context\n");
670 goto tx_drop; 660 goto tx_drop;
671 } 661 }
672 } else { 662 } else {
@@ -731,6 +721,7 @@ tx_drop:
731 if ((new_skb != skb) && new_skb) 721 if ((new_skb != skb) && new_skb)
732 dev_kfree_skb_any(new_skb); 722 dev_kfree_skb_any(new_skb);
733 dev_kfree_skb_any(skb); 723 dev_kfree_skb_any(skb);
724 netif_wake_queue(dev);
734 return NETDEV_TX_OK; 725 return NETDEV_TX_OK;
735} 726}
736 727
@@ -1155,7 +1146,7 @@ static int qeth_osn_send_control_data(struct qeth_card *card, int len,
1155 (addr_t) iob, 0, 0); 1146 (addr_t) iob, 0, 0);
1156 spin_unlock_irqrestore(get_ccwdev_lock(card->write.ccwdev), flags); 1147 spin_unlock_irqrestore(get_ccwdev_lock(card->write.ccwdev), flags);
1157 if (rc) { 1148 if (rc) {
1158 PRINT_WARN("qeth_osn_send_control_data: " 1149 QETH_DBF_MESSAGE(2, "qeth_osn_send_control_data: "
1159 "ccw_device_start rc = %i\n", rc); 1150 "ccw_device_start rc = %i\n", rc);
1160 QETH_DBF_TEXT_(TRACE, 2, " err%d", rc); 1151 QETH_DBF_TEXT_(TRACE, 2, " err%d", rc);
1161 qeth_release_buffer(iob->channel, iob); 1152 qeth_release_buffer(iob->channel, iob);