diff options
author | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
---|---|---|
committer | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
commit | ada47b5fe13d89735805b566185f4885f5a3f750 (patch) | |
tree | 644b88f8a71896307d71438e9b3af49126ffb22b /drivers/net/ehea | |
parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff) |
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'drivers/net/ehea')
-rw-r--r-- | drivers/net/ehea/ehea_ethtool.c | 4 | ||||
-rw-r--r-- | drivers/net/ehea/ehea_hcall.h | 51 | ||||
-rw-r--r-- | drivers/net/ehea/ehea_main.c | 39 | ||||
-rw-r--r-- | drivers/net/ehea/ehea_phyp.h | 1 | ||||
-rw-r--r-- | drivers/net/ehea/ehea_qmr.c | 5 |
5 files changed, 25 insertions, 75 deletions
diff --git a/drivers/net/ehea/ehea_ethtool.c b/drivers/net/ehea/ehea_ethtool.c index d76885223366..75b099ce49c9 100644 --- a/drivers/net/ehea/ehea_ethtool.c +++ b/drivers/net/ehea/ehea_ethtool.c | |||
@@ -118,7 +118,7 @@ doit: | |||
118 | ret = ehea_set_portspeed(port, sp); | 118 | ret = ehea_set_portspeed(port, sp); |
119 | 119 | ||
120 | if (!ret) | 120 | if (!ret) |
121 | ehea_info("%s: Port speed succesfully set: %dMbps " | 121 | ehea_info("%s: Port speed successfully set: %dMbps " |
122 | "%s Duplex", | 122 | "%s Duplex", |
123 | port->netdev->name, port->port_speed, | 123 | port->netdev->name, port->port_speed, |
124 | port->full_duplex == 1 ? "Full" : "Half"); | 124 | port->full_duplex == 1 ? "Full" : "Half"); |
@@ -134,7 +134,7 @@ static int ehea_nway_reset(struct net_device *dev) | |||
134 | ret = ehea_set_portspeed(port, EHEA_SPEED_AUTONEG); | 134 | ret = ehea_set_portspeed(port, EHEA_SPEED_AUTONEG); |
135 | 135 | ||
136 | if (!ret) | 136 | if (!ret) |
137 | ehea_info("%s: Port speed succesfully set: %dMbps " | 137 | ehea_info("%s: Port speed successfully set: %dMbps " |
138 | "%s Duplex", | 138 | "%s Duplex", |
139 | port->netdev->name, port->port_speed, | 139 | port->netdev->name, port->port_speed, |
140 | port->full_duplex == 1 ? "Full" : "Half"); | 140 | port->full_duplex == 1 ? "Full" : "Half"); |
diff --git a/drivers/net/ehea/ehea_hcall.h b/drivers/net/ehea/ehea_hcall.h deleted file mode 100644 index 8e7d1c3edc60..000000000000 --- a/drivers/net/ehea/ehea_hcall.h +++ /dev/null | |||
@@ -1,51 +0,0 @@ | |||
1 | /* | ||
2 | * linux/drivers/net/ehea/ehea_hcall.h | ||
3 | * | ||
4 | * eHEA ethernet device driver for IBM eServer System p | ||
5 | * | ||
6 | * (C) Copyright IBM Corp. 2006 | ||
7 | * | ||
8 | * Authors: | ||
9 | * Christoph Raisch <raisch@de.ibm.com> | ||
10 | * Jan-Bernd Themann <themann@de.ibm.com> | ||
11 | * Thomas Klein <tklein@de.ibm.com> | ||
12 | * | ||
13 | * | ||
14 | * This program is free software; you can redistribute it and/or modify | ||
15 | * it under the terms of the GNU General Public License as published by | ||
16 | * the Free Software Foundation; either version 2, or (at your option) | ||
17 | * any later version. | ||
18 | * | ||
19 | * This program is distributed in the hope that it will be useful, | ||
20 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
21 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
22 | * GNU General Public License for more details. | ||
23 | * | ||
24 | * You should have received a copy of the GNU General Public License | ||
25 | * along with this program; if not, write to the Free Software | ||
26 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
27 | */ | ||
28 | |||
29 | #ifndef __EHEA_HCALL_H__ | ||
30 | #define __EHEA_HCALL_H__ | ||
31 | |||
32 | /** | ||
33 | * This file contains HCALL defines that are to be included in the appropriate | ||
34 | * kernel files later | ||
35 | */ | ||
36 | |||
37 | #define H_ALLOC_HEA_RESOURCE 0x278 | ||
38 | #define H_MODIFY_HEA_QP 0x250 | ||
39 | #define H_QUERY_HEA_QP 0x254 | ||
40 | #define H_QUERY_HEA 0x258 | ||
41 | #define H_QUERY_HEA_PORT 0x25C | ||
42 | #define H_MODIFY_HEA_PORT 0x260 | ||
43 | #define H_REG_BCMC 0x264 | ||
44 | #define H_DEREG_BCMC 0x268 | ||
45 | #define H_REGISTER_HEA_RPAGES 0x26C | ||
46 | #define H_DISABLE_AND_GET_HEA 0x270 | ||
47 | #define H_GET_HEA_INFO 0x274 | ||
48 | #define H_ADD_CONN 0x284 | ||
49 | #define H_DEL_CONN 0x288 | ||
50 | |||
51 | #endif /* __EHEA_HCALL_H__ */ | ||
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c index 41bd7aeafd82..809ccc9ff09c 100644 --- a/drivers/net/ehea/ehea_main.c +++ b/drivers/net/ehea/ehea_main.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/udp.h> | 32 | #include <linux/udp.h> |
33 | #include <linux/if.h> | 33 | #include <linux/if.h> |
34 | #include <linux/list.h> | 34 | #include <linux/list.h> |
35 | #include <linux/slab.h> | ||
35 | #include <linux/if_ether.h> | 36 | #include <linux/if_ether.h> |
36 | #include <linux/notifier.h> | 37 | #include <linux/notifier.h> |
37 | #include <linux/reboot.h> | 38 | #include <linux/reboot.h> |
@@ -189,8 +190,8 @@ static void ehea_update_firmware_handles(void) | |||
189 | for (k = 0; k < EHEA_MAX_PORTS; k++) { | 190 | for (k = 0; k < EHEA_MAX_PORTS; k++) { |
190 | struct ehea_port *port = adapter->port[k]; | 191 | struct ehea_port *port = adapter->port[k]; |
191 | 192 | ||
192 | if (!port || (port->state != EHEA_PORT_UP) | 193 | if (!port || (port->state != EHEA_PORT_UP) || |
193 | || (num_ports == 0)) | 194 | (num_ports == 0)) |
194 | continue; | 195 | continue; |
195 | 196 | ||
196 | for (l = 0; | 197 | for (l = 0; |
@@ -447,7 +448,9 @@ static int ehea_refill_rq_def(struct ehea_port_res *pr, | |||
447 | max_index_mask = q_skba->len - 1; | 448 | max_index_mask = q_skba->len - 1; |
448 | for (i = 0; i < fill_wqes; i++) { | 449 | for (i = 0; i < fill_wqes; i++) { |
449 | u64 tmp_addr; | 450 | u64 tmp_addr; |
450 | struct sk_buff *skb = netdev_alloc_skb(dev, packet_size); | 451 | struct sk_buff *skb; |
452 | |||
453 | skb = netdev_alloc_skb_ip_align(dev, packet_size); | ||
451 | if (!skb) { | 454 | if (!skb) { |
452 | q_skba->os_skbs = fill_wqes - i; | 455 | q_skba->os_skbs = fill_wqes - i; |
453 | if (q_skba->os_skbs == q_skba->len - 2) { | 456 | if (q_skba->os_skbs == q_skba->len - 2) { |
@@ -457,7 +460,6 @@ static int ehea_refill_rq_def(struct ehea_port_res *pr, | |||
457 | } | 460 | } |
458 | break; | 461 | break; |
459 | } | 462 | } |
460 | skb_reserve(skb, NET_IP_ALIGN); | ||
461 | 463 | ||
462 | skb_arr[index] = skb; | 464 | skb_arr[index] = skb; |
463 | tmp_addr = ehea_map_vaddr(skb->data); | 465 | tmp_addr = ehea_map_vaddr(skb->data); |
@@ -500,7 +502,7 @@ static int ehea_refill_rq2(struct ehea_port_res *pr, int nr_of_wqes) | |||
500 | { | 502 | { |
501 | return ehea_refill_rq_def(pr, &pr->rq2_skba, 2, | 503 | return ehea_refill_rq_def(pr, &pr->rq2_skba, 2, |
502 | nr_of_wqes, EHEA_RWQE2_TYPE, | 504 | nr_of_wqes, EHEA_RWQE2_TYPE, |
503 | EHEA_RQ2_PKT_SIZE + NET_IP_ALIGN); | 505 | EHEA_RQ2_PKT_SIZE); |
504 | } | 506 | } |
505 | 507 | ||
506 | 508 | ||
@@ -508,7 +510,7 @@ static int ehea_refill_rq3(struct ehea_port_res *pr, int nr_of_wqes) | |||
508 | { | 510 | { |
509 | return ehea_refill_rq_def(pr, &pr->rq3_skba, 3, | 511 | return ehea_refill_rq_def(pr, &pr->rq3_skba, 3, |
510 | nr_of_wqes, EHEA_RWQE3_TYPE, | 512 | nr_of_wqes, EHEA_RWQE3_TYPE, |
511 | EHEA_MAX_PACKET_SIZE + NET_IP_ALIGN); | 513 | EHEA_MAX_PACKET_SIZE); |
512 | } | 514 | } |
513 | 515 | ||
514 | static inline int ehea_check_cqe(struct ehea_cqe *cqe, int *rq_num) | 516 | static inline int ehea_check_cqe(struct ehea_cqe *cqe, int *rq_num) |
@@ -656,8 +658,8 @@ static int get_skb_hdr(struct sk_buff *skb, void **iphdr, | |||
656 | static void ehea_proc_skb(struct ehea_port_res *pr, struct ehea_cqe *cqe, | 658 | static void ehea_proc_skb(struct ehea_port_res *pr, struct ehea_cqe *cqe, |
657 | struct sk_buff *skb) | 659 | struct sk_buff *skb) |
658 | { | 660 | { |
659 | int vlan_extracted = (cqe->status & EHEA_CQE_VLAN_TAG_XTRACT) | 661 | int vlan_extracted = ((cqe->status & EHEA_CQE_VLAN_TAG_XTRACT) && |
660 | && pr->port->vgrp; | 662 | pr->port->vgrp); |
661 | 663 | ||
662 | if (use_lro) { | 664 | if (use_lro) { |
663 | if (vlan_extracted) | 665 | if (vlan_extracted) |
@@ -1388,8 +1390,8 @@ out: | |||
1388 | 1390 | ||
1389 | int ehea_rem_smrs(struct ehea_port_res *pr) | 1391 | int ehea_rem_smrs(struct ehea_port_res *pr) |
1390 | { | 1392 | { |
1391 | if ((ehea_rem_mr(&pr->send_mr)) | 1393 | if ((ehea_rem_mr(&pr->send_mr)) || |
1392 | || (ehea_rem_mr(&pr->recv_mr))) | 1394 | (ehea_rem_mr(&pr->recv_mr))) |
1393 | return -EIO; | 1395 | return -EIO; |
1394 | else | 1396 | else |
1395 | return 0; | 1397 | return 0; |
@@ -1966,7 +1968,7 @@ static void ehea_set_multicast_list(struct net_device *dev) | |||
1966 | { | 1968 | { |
1967 | struct ehea_port *port = netdev_priv(dev); | 1969 | struct ehea_port *port = netdev_priv(dev); |
1968 | struct dev_mc_list *k_mcl_entry; | 1970 | struct dev_mc_list *k_mcl_entry; |
1969 | int ret, i; | 1971 | int ret; |
1970 | 1972 | ||
1971 | if (dev->flags & IFF_PROMISC) { | 1973 | if (dev->flags & IFF_PROMISC) { |
1972 | ehea_promiscuous(dev, 1); | 1974 | ehea_promiscuous(dev, 1); |
@@ -1980,7 +1982,7 @@ static void ehea_set_multicast_list(struct net_device *dev) | |||
1980 | } | 1982 | } |
1981 | ehea_allmulti(dev, 0); | 1983 | ehea_allmulti(dev, 0); |
1982 | 1984 | ||
1983 | if (dev->mc_count) { | 1985 | if (!netdev_mc_empty(dev)) { |
1984 | ret = ehea_drop_multicast_list(dev); | 1986 | ret = ehea_drop_multicast_list(dev); |
1985 | if (ret) { | 1987 | if (ret) { |
1986 | /* Dropping the current multicast list failed. | 1988 | /* Dropping the current multicast list failed. |
@@ -1989,15 +1991,14 @@ static void ehea_set_multicast_list(struct net_device *dev) | |||
1989 | ehea_allmulti(dev, 1); | 1991 | ehea_allmulti(dev, 1); |
1990 | } | 1992 | } |
1991 | 1993 | ||
1992 | if (dev->mc_count > port->adapter->max_mc_mac) { | 1994 | if (netdev_mc_count(dev) > port->adapter->max_mc_mac) { |
1993 | ehea_info("Mcast registration limit reached (0x%llx). " | 1995 | ehea_info("Mcast registration limit reached (0x%llx). " |
1994 | "Use ALLMULTI!", | 1996 | "Use ALLMULTI!", |
1995 | port->adapter->max_mc_mac); | 1997 | port->adapter->max_mc_mac); |
1996 | goto out; | 1998 | goto out; |
1997 | } | 1999 | } |
1998 | 2000 | ||
1999 | for (i = 0, k_mcl_entry = dev->mc_list; i < dev->mc_count; i++, | 2001 | netdev_for_each_mc_addr(k_mcl_entry, dev) |
2000 | k_mcl_entry = k_mcl_entry->next) | ||
2001 | ehea_add_multicast_entry(port, k_mcl_entry->dmi_addr); | 2002 | ehea_add_multicast_entry(port, k_mcl_entry->dmi_addr); |
2002 | 2003 | ||
2003 | } | 2004 | } |
@@ -2030,8 +2031,8 @@ static void ehea_xmit2(struct sk_buff *skb, struct net_device *dev, | |||
2030 | write_ip_start_end(swqe, skb); | 2031 | write_ip_start_end(swqe, skb); |
2031 | 2032 | ||
2032 | if (iph->protocol == IPPROTO_UDP) { | 2033 | if (iph->protocol == IPPROTO_UDP) { |
2033 | if ((iph->frag_off & IP_MF) | 2034 | if ((iph->frag_off & IP_MF) || |
2034 | || (iph->frag_off & IP_OFFSET)) | 2035 | (iph->frag_off & IP_OFFSET)) |
2035 | /* IP fragment, so don't change cs */ | 2036 | /* IP fragment, so don't change cs */ |
2036 | swqe->tx_control &= ~EHEA_SWQE_TCP_CHECKSUM; | 2037 | swqe->tx_control &= ~EHEA_SWQE_TCP_CHECKSUM; |
2037 | else | 2038 | else |
@@ -2076,8 +2077,8 @@ static void ehea_xmit3(struct sk_buff *skb, struct net_device *dev, | |||
2076 | write_tcp_offset_end(swqe, skb); | 2077 | write_tcp_offset_end(swqe, skb); |
2077 | 2078 | ||
2078 | } else if (iph->protocol == IPPROTO_UDP) { | 2079 | } else if (iph->protocol == IPPROTO_UDP) { |
2079 | if ((iph->frag_off & IP_MF) | 2080 | if ((iph->frag_off & IP_MF) || |
2080 | || (iph->frag_off & IP_OFFSET)) | 2081 | (iph->frag_off & IP_OFFSET)) |
2081 | /* IP fragment, so don't change cs */ | 2082 | /* IP fragment, so don't change cs */ |
2082 | swqe->tx_control |= EHEA_SWQE_CRC | 2083 | swqe->tx_control |= EHEA_SWQE_CRC |
2083 | | EHEA_SWQE_IMM_DATA_PRESENT; | 2084 | | EHEA_SWQE_IMM_DATA_PRESENT; |
diff --git a/drivers/net/ehea/ehea_phyp.h b/drivers/net/ehea/ehea_phyp.h index f3628c803567..2f8174c248bc 100644 --- a/drivers/net/ehea/ehea_phyp.h +++ b/drivers/net/ehea/ehea_phyp.h | |||
@@ -33,7 +33,6 @@ | |||
33 | #include <asm/hvcall.h> | 33 | #include <asm/hvcall.h> |
34 | #include "ehea.h" | 34 | #include "ehea.h" |
35 | #include "ehea_hw.h" | 35 | #include "ehea_hw.h" |
36 | #include "ehea_hcall.h" | ||
37 | 36 | ||
38 | /* Some abbreviations used here: | 37 | /* Some abbreviations used here: |
39 | * | 38 | * |
diff --git a/drivers/net/ehea/ehea_qmr.c b/drivers/net/ehea/ehea_qmr.c index bc7c5b7abb88..a1b4c7e56367 100644 --- a/drivers/net/ehea/ehea_qmr.c +++ b/drivers/net/ehea/ehea_qmr.c | |||
@@ -27,6 +27,7 @@ | |||
27 | */ | 27 | */ |
28 | 28 | ||
29 | #include <linux/mm.h> | 29 | #include <linux/mm.h> |
30 | #include <linux/slab.h> | ||
30 | #include "ehea.h" | 31 | #include "ehea.h" |
31 | #include "ehea_phyp.h" | 32 | #include "ehea_phyp.h" |
32 | #include "ehea_qmr.h" | 33 | #include "ehea_qmr.h" |
@@ -837,8 +838,8 @@ static u64 ehea_reg_mr_section(int top, int dir, int idx, u64 *pt, | |||
837 | hret = ehea_h_register_rpage_mr(adapter->handle, mr->handle, 0, | 838 | hret = ehea_h_register_rpage_mr(adapter->handle, mr->handle, 0, |
838 | 0, pt_abs, EHEA_MAX_RPAGE); | 839 | 0, pt_abs, EHEA_MAX_RPAGE); |
839 | 840 | ||
840 | if ((hret != H_SUCCESS) | 841 | if ((hret != H_SUCCESS) && |
841 | && (hret != H_PAGE_REGISTERED)) { | 842 | (hret != H_PAGE_REGISTERED)) { |
842 | ehea_h_free_resource(adapter->handle, mr->handle, | 843 | ehea_h_free_resource(adapter->handle, mr->handle, |
843 | FORCE_FREE); | 844 | FORCE_FREE); |
844 | ehea_error("register_rpage_mr failed"); | 845 | ehea_error("register_rpage_mr failed"); |