diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-22 20:51:31 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-22 20:51:31 -0500 |
commit | b7ad6d75028d021362221d9b2db19fcff995c3f8 (patch) | |
tree | 30d2a515571d7a43d5df7cb91d118a1d46b6142a /drivers/s390 | |
parent | 0caab23e11c015559af81a4c0f4759ca05a5446a (diff) | |
parent | 6a6bbd29a0284c1b9d33c324ba85f3ebb5509589 (diff) |
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6
* 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6:
[PATCH] Use of uninitialized variable in drivers/net/depca.c
[PATCH] Use after free in net/tulip/de2104x.c
[PATCH] sis900 adm7001 PHY support
[PATCH] sky2: more ethtool stats
[PATCH] s390: qeth :allow setting of attribute "route6" to "no_router".
[PATCH] s390: qeth driver cleanups
[PATCH] s390: qeth driver statistics fixes
[PATCH] AMD Au1xx0: fix Ethernet TX stats
[PATCH] fix spidernet build issue
Diffstat (limited to 'drivers/s390')
-rw-r--r-- | drivers/s390/net/qeth_main.c | 57 | ||||
-rw-r--r-- | drivers/s390/net/qeth_proc.c | 56 | ||||
-rw-r--r-- | drivers/s390/net/qeth_sys.c | 2 |
3 files changed, 35 insertions, 80 deletions
diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c index dba7f7f02e79..021cd5d08c61 100644 --- a/drivers/s390/net/qeth_main.c +++ b/drivers/s390/net/qeth_main.c | |||
@@ -1364,7 +1364,7 @@ qeth_wait_for_buffer(struct qeth_channel *channel) | |||
1364 | static void | 1364 | static void |
1365 | qeth_clear_cmd_buffers(struct qeth_channel *channel) | 1365 | qeth_clear_cmd_buffers(struct qeth_channel *channel) |
1366 | { | 1366 | { |
1367 | int cnt = 0; | 1367 | int cnt; |
1368 | 1368 | ||
1369 | for (cnt=0; cnt < QETH_CMD_BUFFER_NO; cnt++) | 1369 | for (cnt=0; cnt < QETH_CMD_BUFFER_NO; cnt++) |
1370 | qeth_release_buffer(channel,&channel->iob[cnt]); | 1370 | qeth_release_buffer(channel,&channel->iob[cnt]); |
@@ -2814,11 +2814,11 @@ qeth_handle_send_error(struct qeth_card *card, | |||
2814 | QETH_DBF_TEXT_(trace,1,"%s",CARD_BUS_ID(card)); | 2814 | QETH_DBF_TEXT_(trace,1,"%s",CARD_BUS_ID(card)); |
2815 | return QETH_SEND_ERROR_LINK_FAILURE; | 2815 | return QETH_SEND_ERROR_LINK_FAILURE; |
2816 | case 3: | 2816 | case 3: |
2817 | default: | ||
2817 | QETH_DBF_TEXT(trace, 1, "SIGAcc3"); | 2818 | QETH_DBF_TEXT(trace, 1, "SIGAcc3"); |
2818 | QETH_DBF_TEXT_(trace,1,"%s",CARD_BUS_ID(card)); | 2819 | QETH_DBF_TEXT_(trace,1,"%s",CARD_BUS_ID(card)); |
2819 | return QETH_SEND_ERROR_KICK_IT; | 2820 | return QETH_SEND_ERROR_KICK_IT; |
2820 | } | 2821 | } |
2821 | return QETH_SEND_ERROR_LINK_FAILURE; | ||
2822 | } | 2822 | } |
2823 | 2823 | ||
2824 | void | 2824 | void |
@@ -3865,6 +3865,7 @@ qeth_get_cast_type(struct qeth_card *card, struct sk_buff *skb) | |||
3865 | if ((hdr_mac == QETH_TR_MAC_NC) || | 3865 | if ((hdr_mac == QETH_TR_MAC_NC) || |
3866 | (hdr_mac == QETH_TR_MAC_C)) | 3866 | (hdr_mac == QETH_TR_MAC_C)) |
3867 | return RTN_MULTICAST; | 3867 | return RTN_MULTICAST; |
3868 | break; | ||
3868 | /* eth or so multicast? */ | 3869 | /* eth or so multicast? */ |
3869 | default: | 3870 | default: |
3870 | if ((hdr_mac == QETH_ETH_MAC_V4) || | 3871 | if ((hdr_mac == QETH_ETH_MAC_V4) || |
@@ -4419,6 +4420,7 @@ qeth_send_packet(struct qeth_card *card, struct sk_buff *skb) | |||
4419 | int elements_needed = 0; | 4420 | int elements_needed = 0; |
4420 | enum qeth_large_send_types large_send = QETH_LARGE_SEND_NO; | 4421 | enum qeth_large_send_types large_send = QETH_LARGE_SEND_NO; |
4421 | struct qeth_eddp_context *ctx = NULL; | 4422 | struct qeth_eddp_context *ctx = NULL; |
4423 | int tx_bytes = skb->len; | ||
4422 | int rc; | 4424 | int rc; |
4423 | 4425 | ||
4424 | QETH_DBF_TEXT(trace, 6, "sendpkt"); | 4426 | QETH_DBF_TEXT(trace, 6, "sendpkt"); |
@@ -4499,7 +4501,7 @@ qeth_send_packet(struct qeth_card *card, struct sk_buff *skb) | |||
4499 | elements_needed, ctx); | 4501 | elements_needed, ctx); |
4500 | if (!rc){ | 4502 | if (!rc){ |
4501 | card->stats.tx_packets++; | 4503 | card->stats.tx_packets++; |
4502 | card->stats.tx_bytes += skb->len; | 4504 | card->stats.tx_bytes += tx_bytes; |
4503 | #ifdef CONFIG_QETH_PERF_STATS | 4505 | #ifdef CONFIG_QETH_PERF_STATS |
4504 | if (skb_shinfo(skb)->tso_size && | 4506 | if (skb_shinfo(skb)->tso_size && |
4505 | !(large_send == QETH_LARGE_SEND_NO)) { | 4507 | !(large_send == QETH_LARGE_SEND_NO)) { |
@@ -4585,38 +4587,11 @@ qeth_mdio_read(struct net_device *dev, int phy_id, int regnum) | |||
4585 | case MII_NCONFIG: /* network interface config */ | 4587 | case MII_NCONFIG: /* network interface config */ |
4586 | break; | 4588 | break; |
4587 | default: | 4589 | default: |
4588 | rc = 0; | ||
4589 | break; | 4590 | break; |
4590 | } | 4591 | } |
4591 | return rc; | 4592 | return rc; |
4592 | } | 4593 | } |
4593 | 4594 | ||
4594 | static void | ||
4595 | qeth_mdio_write(struct net_device *dev, int phy_id, int regnum, int value) | ||
4596 | { | ||
4597 | switch(regnum){ | ||
4598 | case MII_BMCR: /* Basic mode control register */ | ||
4599 | case MII_BMSR: /* Basic mode status register */ | ||
4600 | case MII_PHYSID1: /* PHYS ID 1 */ | ||
4601 | case MII_PHYSID2: /* PHYS ID 2 */ | ||
4602 | case MII_ADVERTISE: /* Advertisement control reg */ | ||
4603 | case MII_LPA: /* Link partner ability reg */ | ||
4604 | case MII_EXPANSION: /* Expansion register */ | ||
4605 | case MII_DCOUNTER: /* disconnect counter */ | ||
4606 | case MII_FCSCOUNTER: /* false carrier counter */ | ||
4607 | case MII_NWAYTEST: /* N-way auto-neg test register */ | ||
4608 | case MII_RERRCOUNTER: /* rx error counter */ | ||
4609 | case MII_SREVISION: /* silicon revision */ | ||
4610 | case MII_RESV1: /* reserved 1 */ | ||
4611 | case MII_LBRERROR: /* loopback, rx, bypass error */ | ||
4612 | case MII_PHYADDR: /* physical address */ | ||
4613 | case MII_RESV2: /* reserved 2 */ | ||
4614 | case MII_TPISTATUS: /* TPI status for 10mbps */ | ||
4615 | case MII_NCONFIG: /* network interface config */ | ||
4616 | default: | ||
4617 | break; | ||
4618 | } | ||
4619 | } | ||
4620 | 4595 | ||
4621 | static inline const char * | 4596 | static inline const char * |
4622 | qeth_arp_get_error_cause(int *rc) | 4597 | qeth_arp_get_error_cause(int *rc) |
@@ -5236,21 +5211,6 @@ qeth_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) | |||
5236 | mii_data->val_out = qeth_mdio_read(dev,mii_data->phy_id, | 5211 | mii_data->val_out = qeth_mdio_read(dev,mii_data->phy_id, |
5237 | mii_data->reg_num); | 5212 | mii_data->reg_num); |
5238 | break; | 5213 | break; |
5239 | case SIOCSMIIREG: | ||
5240 | rc = -EOPNOTSUPP; | ||
5241 | break; | ||
5242 | /* TODO: remove return if qeth_mdio_write does something */ | ||
5243 | if (!capable(CAP_NET_ADMIN)){ | ||
5244 | rc = -EPERM; | ||
5245 | break; | ||
5246 | } | ||
5247 | mii_data = if_mii(rq); | ||
5248 | if (mii_data->phy_id != 0) | ||
5249 | rc = -EINVAL; | ||
5250 | else | ||
5251 | qeth_mdio_write(dev, mii_data->phy_id, mii_data->reg_num, | ||
5252 | mii_data->val_in); | ||
5253 | break; | ||
5254 | default: | 5214 | default: |
5255 | rc = -EOPNOTSUPP; | 5215 | rc = -EOPNOTSUPP; |
5256 | } | 5216 | } |
@@ -6900,7 +6860,7 @@ qeth_send_setassparms(struct qeth_card *card, struct qeth_cmd_buffer *iob, | |||
6900 | cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE); | 6860 | cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE); |
6901 | if (len <= sizeof(__u32)) | 6861 | if (len <= sizeof(__u32)) |
6902 | cmd->data.setassparms.data.flags_32bit = (__u32) data; | 6862 | cmd->data.setassparms.data.flags_32bit = (__u32) data; |
6903 | else if (len > sizeof(__u32)) | 6863 | else /* (len > sizeof(__u32)) */ |
6904 | memcpy(&cmd->data.setassparms.data, (void *) data, len); | 6864 | memcpy(&cmd->data.setassparms.data, (void *) data, len); |
6905 | 6865 | ||
6906 | rc = qeth_send_ipa_cmd(card, iob, reply_cb, reply_param); | 6866 | rc = qeth_send_ipa_cmd(card, iob, reply_cb, reply_param); |
@@ -7379,11 +7339,6 @@ qeth_setrouting_v6(struct qeth_card *card) | |||
7379 | qeth_correct_routing_type(card, &card->options.route6.type, | 7339 | qeth_correct_routing_type(card, &card->options.route6.type, |
7380 | QETH_PROT_IPV6); | 7340 | QETH_PROT_IPV6); |
7381 | 7341 | ||
7382 | if ((card->options.route6.type == NO_ROUTER) || | ||
7383 | ((card->info.type == QETH_CARD_TYPE_OSAE) && | ||
7384 | (card->options.route6.type == MULTICAST_ROUTER) && | ||
7385 | !qeth_is_supported6(card,IPA_OSA_MC_ROUTER))) | ||
7386 | return 0; | ||
7387 | rc = qeth_send_setrouting(card, card->options.route6.type, | 7342 | rc = qeth_send_setrouting(card, card->options.route6.type, |
7388 | QETH_PROT_IPV6); | 7343 | QETH_PROT_IPV6); |
7389 | if (rc) { | 7344 | if (rc) { |
diff --git a/drivers/s390/net/qeth_proc.c b/drivers/s390/net/qeth_proc.c index 3c6339df879d..360d782c7ada 100644 --- a/drivers/s390/net/qeth_proc.c +++ b/drivers/s390/net/qeth_proc.c | |||
@@ -74,7 +74,7 @@ qeth_procfile_seq_next(struct seq_file *s, void *it, loff_t *offset) | |||
74 | static inline const char * | 74 | static inline const char * |
75 | qeth_get_router_str(struct qeth_card *card, int ipv) | 75 | qeth_get_router_str(struct qeth_card *card, int ipv) |
76 | { | 76 | { |
77 | int routing_type = 0; | 77 | enum qeth_routing_types routing_type = NO_ROUTER; |
78 | 78 | ||
79 | if (ipv == 4) { | 79 | if (ipv == 4) { |
80 | routing_type = card->options.route4.type; | 80 | routing_type = card->options.route4.type; |
@@ -86,26 +86,26 @@ qeth_get_router_str(struct qeth_card *card, int ipv) | |||
86 | #endif /* CONFIG_QETH_IPV6 */ | 86 | #endif /* CONFIG_QETH_IPV6 */ |
87 | } | 87 | } |
88 | 88 | ||
89 | if (routing_type == PRIMARY_ROUTER) | 89 | switch (routing_type){ |
90 | case PRIMARY_ROUTER: | ||
90 | return "pri"; | 91 | return "pri"; |
91 | else if (routing_type == SECONDARY_ROUTER) | 92 | case SECONDARY_ROUTER: |
92 | return "sec"; | 93 | return "sec"; |
93 | else if (routing_type == MULTICAST_ROUTER) { | 94 | case MULTICAST_ROUTER: |
94 | if (card->info.broadcast_capable == QETH_BROADCAST_WITHOUT_ECHO) | 95 | if (card->info.broadcast_capable == QETH_BROADCAST_WITHOUT_ECHO) |
95 | return "mc+"; | 96 | return "mc+"; |
96 | return "mc"; | 97 | return "mc"; |
97 | } else if (routing_type == PRIMARY_CONNECTOR) { | 98 | case PRIMARY_CONNECTOR: |
98 | if (card->info.broadcast_capable == QETH_BROADCAST_WITHOUT_ECHO) | 99 | if (card->info.broadcast_capable == QETH_BROADCAST_WITHOUT_ECHO) |
99 | return "p+c"; | 100 | return "p+c"; |
100 | return "p.c"; | 101 | return "p.c"; |
101 | } else if (routing_type == SECONDARY_CONNECTOR) { | 102 | case SECONDARY_CONNECTOR: |
102 | if (card->info.broadcast_capable == QETH_BROADCAST_WITHOUT_ECHO) | 103 | if (card->info.broadcast_capable == QETH_BROADCAST_WITHOUT_ECHO) |
103 | return "s+c"; | 104 | return "s+c"; |
104 | return "s.c"; | 105 | return "s.c"; |
105 | } else if (routing_type == NO_ROUTER) | 106 | default: /* NO_ROUTER */ |
106 | return "no"; | 107 | return "no"; |
107 | else | 108 | } |
108 | return "unk"; | ||
109 | } | 109 | } |
110 | 110 | ||
111 | static int | 111 | static int |
@@ -192,27 +192,27 @@ qeth_perf_procfile_seq_show(struct seq_file *s, void *it) | |||
192 | CARD_DDEV_ID(card), | 192 | CARD_DDEV_ID(card), |
193 | QETH_CARD_IFNAME(card) | 193 | QETH_CARD_IFNAME(card) |
194 | ); | 194 | ); |
195 | seq_printf(s, " Skb's/buffers received : %li/%i\n" | 195 | seq_printf(s, " Skb's/buffers received : %lu/%u\n" |
196 | " Skb's/buffers sent : %li/%i\n\n", | 196 | " Skb's/buffers sent : %lu/%u\n\n", |
197 | card->stats.rx_packets, card->perf_stats.bufs_rec, | 197 | card->stats.rx_packets, card->perf_stats.bufs_rec, |
198 | card->stats.tx_packets, card->perf_stats.bufs_sent | 198 | card->stats.tx_packets, card->perf_stats.bufs_sent |
199 | ); | 199 | ); |
200 | seq_printf(s, " Skb's/buffers sent without packing : %li/%i\n" | 200 | seq_printf(s, " Skb's/buffers sent without packing : %lu/%u\n" |
201 | " Skb's/buffers sent with packing : %i/%i\n\n", | 201 | " Skb's/buffers sent with packing : %u/%u\n\n", |
202 | card->stats.tx_packets - card->perf_stats.skbs_sent_pack, | 202 | card->stats.tx_packets - card->perf_stats.skbs_sent_pack, |
203 | card->perf_stats.bufs_sent - card->perf_stats.bufs_sent_pack, | 203 | card->perf_stats.bufs_sent - card->perf_stats.bufs_sent_pack, |
204 | card->perf_stats.skbs_sent_pack, | 204 | card->perf_stats.skbs_sent_pack, |
205 | card->perf_stats.bufs_sent_pack | 205 | card->perf_stats.bufs_sent_pack |
206 | ); | 206 | ); |
207 | seq_printf(s, " Skbs sent in SG mode : %i\n" | 207 | seq_printf(s, " Skbs sent in SG mode : %u\n" |
208 | " Skb fragments sent in SG mode : %i\n\n", | 208 | " Skb fragments sent in SG mode : %u\n\n", |
209 | card->perf_stats.sg_skbs_sent, | 209 | card->perf_stats.sg_skbs_sent, |
210 | card->perf_stats.sg_frags_sent); | 210 | card->perf_stats.sg_frags_sent); |
211 | seq_printf(s, " large_send tx (in Kbytes) : %i\n" | 211 | seq_printf(s, " large_send tx (in Kbytes) : %u\n" |
212 | " large_send count : %i\n\n", | 212 | " large_send count : %u\n\n", |
213 | card->perf_stats.large_send_bytes >> 10, | 213 | card->perf_stats.large_send_bytes >> 10, |
214 | card->perf_stats.large_send_cnt); | 214 | card->perf_stats.large_send_cnt); |
215 | seq_printf(s, " Packing state changes no pkg.->packing : %i/%i\n" | 215 | seq_printf(s, " Packing state changes no pkg.->packing : %u/%u\n" |
216 | " Watermarks L/H : %i/%i\n" | 216 | " Watermarks L/H : %i/%i\n" |
217 | " Current buffer usage (outbound q's) : " | 217 | " Current buffer usage (outbound q's) : " |
218 | "%i/%i/%i/%i\n\n", | 218 | "%i/%i/%i/%i\n\n", |
@@ -229,16 +229,16 @@ qeth_perf_procfile_seq_show(struct seq_file *s, void *it) | |||
229 | atomic_read(&card->qdio.out_qs[3]->used_buffers) | 229 | atomic_read(&card->qdio.out_qs[3]->used_buffers) |
230 | : 0 | 230 | : 0 |
231 | ); | 231 | ); |
232 | seq_printf(s, " Inbound handler time (in us) : %i\n" | 232 | seq_printf(s, " Inbound handler time (in us) : %u\n" |
233 | " Inbound handler count : %i\n" | 233 | " Inbound handler count : %u\n" |
234 | " Inbound do_QDIO time (in us) : %i\n" | 234 | " Inbound do_QDIO time (in us) : %u\n" |
235 | " Inbound do_QDIO count : %i\n\n" | 235 | " Inbound do_QDIO count : %u\n\n" |
236 | " Outbound handler time (in us) : %i\n" | 236 | " Outbound handler time (in us) : %u\n" |
237 | " Outbound handler count : %i\n\n" | 237 | " Outbound handler count : %u\n\n" |
238 | " Outbound time (in us, incl QDIO) : %i\n" | 238 | " Outbound time (in us, incl QDIO) : %u\n" |
239 | " Outbound count : %i\n" | 239 | " Outbound count : %u\n" |
240 | " Outbound do_QDIO time (in us) : %i\n" | 240 | " Outbound do_QDIO time (in us) : %u\n" |
241 | " Outbound do_QDIO count : %i\n\n", | 241 | " Outbound do_QDIO count : %u\n\n", |
242 | card->perf_stats.inbound_time, | 242 | card->perf_stats.inbound_time, |
243 | card->perf_stats.inbound_cnt, | 243 | card->perf_stats.inbound_cnt, |
244 | card->perf_stats.inbound_do_qdio_time, | 244 | card->perf_stats.inbound_do_qdio_time, |
diff --git a/drivers/s390/net/qeth_sys.c b/drivers/s390/net/qeth_sys.c index c1831f572585..f2a076a2b2f1 100644 --- a/drivers/s390/net/qeth_sys.c +++ b/drivers/s390/net/qeth_sys.c | |||
@@ -115,7 +115,7 @@ qeth_dev_portno_store(struct device *dev, struct device_attribute *attr, const c | |||
115 | return -EPERM; | 115 | return -EPERM; |
116 | 116 | ||
117 | portno = simple_strtoul(buf, &tmp, 16); | 117 | portno = simple_strtoul(buf, &tmp, 16); |
118 | if ((portno < 0) || (portno > MAX_PORTNO)){ | 118 | if (portno > MAX_PORTNO){ |
119 | PRINT_WARN("portno 0x%X is out of range\n", portno); | 119 | PRINT_WARN("portno 0x%X is out of range\n", portno); |
120 | return -EINVAL; | 120 | return -EINVAL; |
121 | } | 121 | } |