aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/net
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-05-08 14:57:17 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-05-08 14:57:17 -0400
commit9028780a3e6d2c3dd940e89b377765cca008b6df (patch)
tree1e72fceedcb72b65e8851d0a56586a699e09ad2e /drivers/s390/net
parent5335a40be6867eff986a31bcd8fc82a5cb1e16bb (diff)
parente824f7836de25b1c2f659a2412d32227f1f68bcb (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: (40 commits) [netdrvr] atl1: fix build pasemi_mac: Use local-mac-address instead of mac-address if available pasemi_mac: PHY support pasemi_mac: Add msglevel support and "debug" module param pasemi_mac: Logic cleanup / rx performance improvements pasemi_mac: Minor cleanup / define fixes pasemi_mac: Add SKB reuse / copy-break pasemi_mac: Timer and interrupt fixes pasemi_mac: Abstract and fix up interrupt restart routines pasemi_mac: Move the IRQ mapping from the PCI layer to the driver tc35815: Remove unnecessary skb->dev assignment drivers/net/dm9000: Convert to generic boolean AT91RM9200 Ethernet: Fix multicast addressing AT91RM9200 Ethernet: Support additional PHYs PCMCIA-NETDEV : xirc2ps_cs: bugfix of multicast code sky2: re-enable 88E8056 for most motherboards MIPS: Drop unnecessary CONFIG_ISA from RBTX49XX ne: MIPS: Use platform_driver for ne on RBTX49XX ne: Add NEEDS_PORTLIST to control ISA auto-probe ne: Misc fixes for platform driver. ... Fix conflict in drivers/net/pasemi_mac.c (get_property() got renamed to of_get_property()) manually. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/s390/net')
-rw-r--r--drivers/s390/net/netiucv.c5
-rw-r--r--drivers/s390/net/qeth_eddp.c4
-rw-r--r--drivers/s390/net/qeth_eddp.h3
-rw-r--r--drivers/s390/net/qeth_main.c45
-rw-r--r--drivers/s390/net/qeth_mpc.c101
-rw-r--r--drivers/s390/net/qeth_mpc.h219
-rw-r--r--drivers/s390/net/qeth_sys.c2
7 files changed, 265 insertions, 114 deletions
diff --git a/drivers/s390/net/netiucv.c b/drivers/s390/net/netiucv.c
index e10e85e85c84..c358764f3264 100644
--- a/drivers/s390/net/netiucv.c
+++ b/drivers/s390/net/netiucv.c
@@ -1862,12 +1862,14 @@ static void netiucv_remove_connection(struct iucv_connection *conn)
1862 write_lock_bh(&iucv_connection_rwlock); 1862 write_lock_bh(&iucv_connection_rwlock);
1863 list_del_init(&conn->list); 1863 list_del_init(&conn->list);
1864 write_unlock_bh(&iucv_connection_rwlock); 1864 write_unlock_bh(&iucv_connection_rwlock);
1865 fsm_deltimer(&conn->timer);
1866 netiucv_purge_skb_queue(&conn->collect_queue);
1865 if (conn->path) { 1867 if (conn->path) {
1866 iucv_path_sever(conn->path, iucvMagic); 1868 iucv_path_sever(conn->path, iucvMagic);
1867 kfree(conn->path); 1869 kfree(conn->path);
1868 conn->path = NULL; 1870 conn->path = NULL;
1869 } 1871 }
1870 fsm_deltimer(&conn->timer); 1872 netiucv_purge_skb_queue(&conn->commit_queue);
1871 kfree_fsm(conn->fsm); 1873 kfree_fsm(conn->fsm);
1872 kfree_skb(conn->rx_buff); 1874 kfree_skb(conn->rx_buff);
1873 kfree_skb(conn->tx_buff); 1875 kfree_skb(conn->tx_buff);
@@ -2115,7 +2117,6 @@ static void __exit netiucv_exit(void)
2115 while (!list_empty(&iucv_connection_list)) { 2117 while (!list_empty(&iucv_connection_list)) {
2116 cp = list_entry(iucv_connection_list.next, 2118 cp = list_entry(iucv_connection_list.next,
2117 struct iucv_connection, list); 2119 struct iucv_connection, list);
2118 list_del(&cp->list);
2119 ndev = cp->netdev; 2120 ndev = cp->netdev;
2120 priv = netdev_priv(ndev); 2121 priv = netdev_priv(ndev);
2121 dev = priv->dev; 2122 dev = priv->dev;
diff --git a/drivers/s390/net/qeth_eddp.c b/drivers/s390/net/qeth_eddp.c
index dd7034fbfff8..4640f32daae5 100644
--- a/drivers/s390/net/qeth_eddp.c
+++ b/drivers/s390/net/qeth_eddp.c
@@ -620,10 +620,10 @@ qeth_eddp_create_context_tcp(struct qeth_card *card, struct sk_buff *skb,
620 620
621struct qeth_eddp_context * 621struct qeth_eddp_context *
622qeth_eddp_create_context(struct qeth_card *card, struct sk_buff *skb, 622qeth_eddp_create_context(struct qeth_card *card, struct sk_buff *skb,
623 struct qeth_hdr *qhdr) 623 struct qeth_hdr *qhdr, unsigned char sk_protocol)
624{ 624{
625 QETH_DBF_TEXT(trace, 5, "creddpc"); 625 QETH_DBF_TEXT(trace, 5, "creddpc");
626 switch (skb->sk->sk_protocol){ 626 switch (sk_protocol) {
627 case IPPROTO_TCP: 627 case IPPROTO_TCP:
628 return qeth_eddp_create_context_tcp(card, skb, qhdr); 628 return qeth_eddp_create_context_tcp(card, skb, qhdr);
629 default: 629 default:
diff --git a/drivers/s390/net/qeth_eddp.h b/drivers/s390/net/qeth_eddp.h
index 103768d3bab2..52910c9252c0 100644
--- a/drivers/s390/net/qeth_eddp.h
+++ b/drivers/s390/net/qeth_eddp.h
@@ -34,7 +34,8 @@ struct qeth_eddp_context_reference {
34}; 34};
35 35
36extern struct qeth_eddp_context * 36extern struct qeth_eddp_context *
37qeth_eddp_create_context(struct qeth_card *,struct sk_buff *,struct qeth_hdr *); 37qeth_eddp_create_context(struct qeth_card *,struct sk_buff *,
38 struct qeth_hdr *, unsigned char);
38 39
39extern void 40extern void
40qeth_eddp_put_context(struct qeth_eddp_context *); 41qeth_eddp_put_context(struct qeth_eddp_context *);
diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c
index 6fd8870551d3..29d176036e5c 100644
--- a/drivers/s390/net/qeth_main.c
+++ b/drivers/s390/net/qeth_main.c
@@ -1682,6 +1682,21 @@ qeth_put_reply(struct qeth_reply *reply)
1682 kfree(reply); 1682 kfree(reply);
1683} 1683}
1684 1684
1685static void
1686qeth_issue_ipa_msg(struct qeth_ipa_cmd *cmd, struct qeth_card *card)
1687{
1688 int rc;
1689 int com;
1690 char * ipa_name;
1691
1692 com = cmd->hdr.command;
1693 rc = cmd->hdr.return_code;
1694 ipa_name = qeth_get_ipa_cmd_name(com);
1695
1696 PRINT_ERR("%s(x%X) for %s returned x%X \"%s\"\n", ipa_name, com,
1697 QETH_CARD_IFNAME(card), rc, qeth_get_ipa_msg(rc));
1698}
1699
1685static struct qeth_ipa_cmd * 1700static struct qeth_ipa_cmd *
1686qeth_check_ipa_data(struct qeth_card *card, struct qeth_cmd_buffer *iob) 1701qeth_check_ipa_data(struct qeth_card *card, struct qeth_cmd_buffer *iob)
1687{ 1702{
@@ -1690,8 +1705,11 @@ qeth_check_ipa_data(struct qeth_card *card, struct qeth_cmd_buffer *iob)
1690 QETH_DBF_TEXT(trace,5,"chkipad"); 1705 QETH_DBF_TEXT(trace,5,"chkipad");
1691 if (IS_IPA(iob->data)){ 1706 if (IS_IPA(iob->data)){
1692 cmd = (struct qeth_ipa_cmd *) PDU_ENCAPSULATION(iob->data); 1707 cmd = (struct qeth_ipa_cmd *) PDU_ENCAPSULATION(iob->data);
1693 if (IS_IPA_REPLY(cmd)) 1708 if (IS_IPA_REPLY(cmd)) {
1709 if (cmd->hdr.return_code)
1710 qeth_issue_ipa_msg(cmd, card);
1694 return cmd; 1711 return cmd;
1712 }
1695 else { 1713 else {
1696 switch (cmd->hdr.command) { 1714 switch (cmd->hdr.command) {
1697 case IPA_CMD_STOPLAN: 1715 case IPA_CMD_STOPLAN:
@@ -2816,6 +2834,7 @@ qeth_flush_buffers(struct qeth_qdio_out_q *queue, int under_int,
2816 struct qeth_qdio_out_buffer *buf; 2834 struct qeth_qdio_out_buffer *buf;
2817 int rc; 2835 int rc;
2818 int i; 2836 int i;
2837 unsigned int qdio_flags;
2819 2838
2820 QETH_DBF_TEXT(trace, 6, "flushbuf"); 2839 QETH_DBF_TEXT(trace, 6, "flushbuf");
2821 2840
@@ -2859,13 +2878,13 @@ qeth_flush_buffers(struct qeth_qdio_out_q *queue, int under_int,
2859 queue->card->perf_stats.outbound_do_qdio_start_time = 2878 queue->card->perf_stats.outbound_do_qdio_start_time =
2860 qeth_get_micros(); 2879 qeth_get_micros();
2861 } 2880 }
2881 qdio_flags = QDIO_FLAG_SYNC_OUTPUT;
2862 if (under_int) 2882 if (under_int)
2863 rc = do_QDIO(CARD_DDEV(queue->card), 2883 qdio_flags |= QDIO_FLAG_UNDER_INTERRUPT;
2864 QDIO_FLAG_SYNC_OUTPUT | QDIO_FLAG_UNDER_INTERRUPT, 2884 if (atomic_read(&queue->set_pci_flags_count))
2865 queue->queue_no, index, count, NULL); 2885 qdio_flags |= QDIO_FLAG_PCI_OUT;
2866 else 2886 rc = do_QDIO(CARD_DDEV(queue->card), qdio_flags,
2867 rc = do_QDIO(CARD_DDEV(queue->card), QDIO_FLAG_SYNC_OUTPUT, 2887 queue->queue_no, index, count, NULL);
2868 queue->queue_no, index, count, NULL);
2869 if (queue->card->options.performance_stats) 2888 if (queue->card->options.performance_stats)
2870 queue->card->perf_stats.outbound_do_qdio_time += 2889 queue->card->perf_stats.outbound_do_qdio_time +=
2871 qeth_get_micros() - 2890 qeth_get_micros() -
@@ -4490,7 +4509,8 @@ qeth_send_packet(struct qeth_card *card, struct sk_buff *skb)
4490 qeth_fill_header(card, hdr, new_skb, ipv, cast_type); 4509 qeth_fill_header(card, hdr, new_skb, ipv, cast_type);
4491 } 4510 }
4492 if (large_send == QETH_LARGE_SEND_EDDP) { 4511 if (large_send == QETH_LARGE_SEND_EDDP) {
4493 ctx = qeth_eddp_create_context(card, new_skb, hdr); 4512 ctx = qeth_eddp_create_context(card, new_skb, hdr,
4513 skb->sk->sk_protocol);
4494 if (ctx == NULL) { 4514 if (ctx == NULL) {
4495 __qeth_free_new_skb(skb, new_skb); 4515 __qeth_free_new_skb(skb, new_skb);
4496 PRINT_WARN("could not create eddp context\n"); 4516 PRINT_WARN("could not create eddp context\n");
@@ -5948,9 +5968,6 @@ qeth_layer2_send_setmac_cb(struct qeth_card *card,
5948 cmd = (struct qeth_ipa_cmd *) data; 5968 cmd = (struct qeth_ipa_cmd *) data;
5949 if (cmd->hdr.return_code) { 5969 if (cmd->hdr.return_code) {
5950 QETH_DBF_TEXT_(trace, 2, "L2er%x", cmd->hdr.return_code); 5970 QETH_DBF_TEXT_(trace, 2, "L2er%x", cmd->hdr.return_code);
5951 PRINT_WARN("Error in registering MAC address on " \
5952 "device %s: x%x\n", CARD_BUS_ID(card),
5953 cmd->hdr.return_code);
5954 card->info.mac_bits &= ~QETH_LAYER2_MAC_REGISTERED; 5971 card->info.mac_bits &= ~QETH_LAYER2_MAC_REGISTERED;
5955 cmd->hdr.return_code = -EIO; 5972 cmd->hdr.return_code = -EIO;
5956 } else { 5973 } else {
@@ -5985,9 +6002,6 @@ qeth_layer2_send_delmac_cb(struct qeth_card *card,
5985 QETH_DBF_TEXT(trace, 2, "L2Dmaccb"); 6002 QETH_DBF_TEXT(trace, 2, "L2Dmaccb");
5986 cmd = (struct qeth_ipa_cmd *) data; 6003 cmd = (struct qeth_ipa_cmd *) data;
5987 if (cmd->hdr.return_code) { 6004 if (cmd->hdr.return_code) {
5988 PRINT_WARN("Error in deregistering MAC address on " \
5989 "device %s: x%x\n", CARD_BUS_ID(card),
5990 cmd->hdr.return_code);
5991 QETH_DBF_TEXT_(trace, 2, "err%d", cmd->hdr.return_code); 6005 QETH_DBF_TEXT_(trace, 2, "err%d", cmd->hdr.return_code);
5992 cmd->hdr.return_code = -EIO; 6006 cmd->hdr.return_code = -EIO;
5993 return 0; 6007 return 0;
@@ -6651,7 +6665,7 @@ qeth_setadpparms_change_macaddr_cb(struct qeth_card *card,
6651 QETH_DBF_TEXT(trace,4,"chgmaccb"); 6665 QETH_DBF_TEXT(trace,4,"chgmaccb");
6652 6666
6653 cmd = (struct qeth_ipa_cmd *) data; 6667 cmd = (struct qeth_ipa_cmd *) data;
6654 if (!card->options.layer2 || card->info.guestlan || 6668 if (!card->options.layer2 ||
6655 !(card->info.mac_bits & QETH_LAYER2_MAC_READ)) { 6669 !(card->info.mac_bits & QETH_LAYER2_MAC_READ)) {
6656 memcpy(card->dev->dev_addr, 6670 memcpy(card->dev->dev_addr,
6657 &cmd->data.setadapterparms.data.change_addr.addr, 6671 &cmd->data.setadapterparms.data.change_addr.addr,
@@ -8497,6 +8511,7 @@ __qeth_reboot_event_card(struct device *dev, void *data)
8497 card = (struct qeth_card *) dev->driver_data; 8511 card = (struct qeth_card *) dev->driver_data;
8498 qeth_clear_ip_list(card, 0, 0); 8512 qeth_clear_ip_list(card, 0, 0);
8499 qeth_qdio_clear_card(card, 0); 8513 qeth_qdio_clear_card(card, 0);
8514 qeth_clear_qdio_buffers(card);
8500 return 0; 8515 return 0;
8501} 8516}
8502 8517
diff --git a/drivers/s390/net/qeth_mpc.c b/drivers/s390/net/qeth_mpc.c
index 77c83209d70e..f54fdfdbf06f 100644
--- a/drivers/s390/net/qeth_mpc.c
+++ b/drivers/s390/net/qeth_mpc.c
@@ -157,12 +157,113 @@ unsigned char READ_CCW[]={
157}; 157};
158 158
159 159
160struct ipa_rc_msg {
161 enum qeth_ipa_return_codes rc;
162 char *msg;
163};
160 164
165struct ipa_rc_msg qeth_ipa_rc_msg[] = {
166 {IPA_RC_SUCCESS, "success"},
167 {IPA_RC_NOTSUPP, "Command not supported"},
168 {IPA_RC_IP_TABLE_FULL, "Add Addr IP Table Full - ipv6"},
169 {IPA_RC_UNKNOWN_ERROR, "IPA command failed - reason unknown"},
170 {IPA_RC_UNSUPPORTED_COMMAND, "Command not supported"},
171 {IPA_RC_DUP_IPV6_REMOTE,"ipv6 address already registered remote"},
172 {IPA_RC_DUP_IPV6_HOME, "ipv6 address already registered"},
173 {IPA_RC_UNREGISTERED_ADDR, "Address not registered"},
174 {IPA_RC_NO_ID_AVAILABLE, "No identifiers available"},
175 {IPA_RC_ID_NOT_FOUND, "Identifier not found"},
176 {IPA_RC_INVALID_IP_VERSION, "IP version incorrect"},
177 {IPA_RC_LAN_FRAME_MISMATCH, "LAN and frame mismatch"},
178 {IPA_RC_L2_UNSUPPORTED_CMD, "Unsupported layer 2 command"},
179 {IPA_RC_L2_DUP_MAC, "Duplicate MAC address"},
180 {IPA_RC_L2_ADDR_TABLE_FULL, "Layer2 address table full"},
181 {IPA_RC_L2_DUP_LAYER3_MAC, "Duplicate with layer 3 MAC"},
182 {IPA_RC_L2_GMAC_NOT_FOUND, "GMAC not found"},
183 {IPA_RC_L2_MAC_NOT_FOUND, "L2 mac address not found"},
184 {IPA_RC_L2_INVALID_VLAN_ID, "L2 invalid vlan id"},
185 {IPA_RC_L2_DUP_VLAN_ID, "L2 duplicate vlan id"},
186 {IPA_RC_L2_VLAN_ID_NOT_FOUND, "L2 vlan id not found"},
187 {IPA_RC_DATA_MISMATCH, "Data field mismatch (v4/v6 mixed)"},
188 {IPA_RC_INVALID_MTU_SIZE, "Invalid MTU size"},
189 {IPA_RC_INVALID_LANTYPE, "Invalid LAN type"},
190 {IPA_RC_INVALID_LANNUM, "Invalid LAN num"},
191 {IPA_RC_DUPLICATE_IP_ADDRESS, "Address already registered"},
192 {IPA_RC_IP_ADDR_TABLE_FULL, "IP address table full"},
193 {IPA_RC_LAN_PORT_STATE_ERROR, "LAN port state error"},
194 {IPA_RC_SETIP_NO_STARTLAN, "Setip no startlan received"},
195 {IPA_RC_SETIP_ALREADY_RECEIVED, "Setip already received"},
196 {IPA_RC_IP_ADDR_ALREADY_USED, "IP address already in use on LAN"},
197 {IPA_RC_MULTICAST_FULL, "No task available, multicast full"},
198 {IPA_RC_SETIP_INVALID_VERSION, "SETIP invalid IP version"},
199 {IPA_RC_UNSUPPORTED_SUBCMD, "Unsupported assist subcommand"},
200 {IPA_RC_ARP_ASSIST_NO_ENABLE, "Only partial success, no enable"},
201 {IPA_RC_PRIMARY_ALREADY_DEFINED,"Primary already defined"},
202 {IPA_RC_SECOND_ALREADY_DEFINED, "Secondary already defined"},
203 {IPA_RC_INVALID_SETRTG_INDICATOR,"Invalid SETRTG indicator"},
204 {IPA_RC_MC_ADDR_ALREADY_DEFINED,"Multicast address already defined"},
205 {IPA_RC_LAN_OFFLINE, "STRTLAN_LAN_DISABLED - LAN offline"},
206 {IPA_RC_INVALID_IP_VERSION2, "Invalid IP version"},
207 {IPA_RC_FFFF, "Unknown Error"}
208};
161 209
162 210
163 211
212char *
213qeth_get_ipa_msg(enum qeth_ipa_return_codes rc)
214{
215 int x = 0;
216 qeth_ipa_rc_msg[sizeof(qeth_ipa_rc_msg) /
217 sizeof(struct ipa_rc_msg) - 1].rc = rc;
218 while(qeth_ipa_rc_msg[x].rc != rc)
219 x++;
220 return qeth_ipa_rc_msg[x].msg;
221}
164 222
165 223
224struct ipa_cmd_names {
225 enum qeth_ipa_cmds cmd;
226 char *name;
227};
228
229struct ipa_cmd_names qeth_ipa_cmd_names[] = {
230 {IPA_CMD_STARTLAN, "startlan"},
231 {IPA_CMD_STOPLAN, "stoplan"},
232 {IPA_CMD_SETVMAC, "setvmac"},
233 {IPA_CMD_DELVMAC, "delvmca"},
234 {IPA_CMD_SETGMAC, "setgmac"},
235 {IPA_CMD_DELGMAC, "delgmac"},
236 {IPA_CMD_SETVLAN, "setvlan"},
237 {IPA_CMD_DELVLAN, "delvlan"},
238 {IPA_CMD_SETCCID, "setccid"},
239 {IPA_CMD_DELCCID, "delccid"},
240 {IPA_CMD_MODCCID, "setip"},
241 {IPA_CMD_SETIP, "setip"},
242 {IPA_CMD_QIPASSIST, "qipassist"},
243 {IPA_CMD_SETASSPARMS, "setassparms"},
244 {IPA_CMD_SETIPM, "setipm"},
245 {IPA_CMD_DELIPM, "delipm"},
246 {IPA_CMD_SETRTG, "setrtg"},
247 {IPA_CMD_DELIP, "delip"},
248 {IPA_CMD_SETADAPTERPARMS, "setadapterparms"},
249 {IPA_CMD_SET_DIAG_ASS, "set_diag_ass"},
250 {IPA_CMD_CREATE_ADDR, "create_addr"},
251 {IPA_CMD_DESTROY_ADDR, "destroy_addr"},
252 {IPA_CMD_REGISTER_LOCAL_ADDR, "register_local_addr"},
253 {IPA_CMD_UNREGISTER_LOCAL_ADDR, "unregister_local_addr"},
254 {IPA_CMD_UNKNOWN, "unknown"},
255};
166 256
257char *
258qeth_get_ipa_cmd_name(enum qeth_ipa_cmds cmd)
259{
260 int x = 0;
261 qeth_ipa_cmd_names[
262 sizeof(qeth_ipa_cmd_names)/
263 sizeof(struct ipa_cmd_names)-1].cmd = cmd;
264 while(qeth_ipa_cmd_names[x].cmd != cmd)
265 x++;
266 return qeth_ipa_cmd_names[x].name;
267}
167 268
168 269
diff --git a/drivers/s390/net/qeth_mpc.h b/drivers/s390/net/qeth_mpc.h
index d74bc43da72a..1d8083c91765 100644
--- a/drivers/s390/net/qeth_mpc.h
+++ b/drivers/s390/net/qeth_mpc.h
@@ -25,14 +25,14 @@ extern unsigned char IPA_PDU_HEADER[];
25 25
26#define IPA_CMD_LENGTH (IPA_PDU_HEADER_SIZE + sizeof(struct qeth_ipa_cmd)) 26#define IPA_CMD_LENGTH (IPA_PDU_HEADER_SIZE + sizeof(struct qeth_ipa_cmd))
27 27
28#define QETH_SEQ_NO_LENGTH 4 28#define QETH_SEQ_NO_LENGTH 4
29#define QETH_MPC_TOKEN_LENGTH 4 29#define QETH_MPC_TOKEN_LENGTH 4
30#define QETH_MCL_LENGTH 4 30#define QETH_MCL_LENGTH 4
31#define OSA_ADDR_LEN 6 31#define OSA_ADDR_LEN 6
32 32
33#define QETH_TIMEOUT (10 * HZ) 33#define QETH_TIMEOUT (10 * HZ)
34#define QETH_IPA_TIMEOUT (45 * HZ) 34#define QETH_IPA_TIMEOUT (45 * HZ)
35#define QETH_IDX_COMMAND_SEQNO 0xffff0000 35#define QETH_IDX_COMMAND_SEQNO 0xffff0000
36#define SR_INFO_LEN 16 36#define SR_INFO_LEN 16
37 37
38#define QETH_CLEAR_CHANNEL_PARM -10 38#define QETH_CLEAR_CHANNEL_PARM -10
@@ -93,79 +93,107 @@ enum qeth_checksum_types {
93 */ 93 */
94#define RESET_ROUTING_FLAG 0x10 /* indicate that routing type shall be set */ 94#define RESET_ROUTING_FLAG 0x10 /* indicate that routing type shall be set */
95enum qeth_routing_types { 95enum qeth_routing_types {
96 NO_ROUTER = 0, /* TODO: set to bit flag used in IPA Command */ 96 NO_ROUTER = 0, /* TODO: set to bit flag used in IPA Command */
97 PRIMARY_ROUTER = 1, 97 PRIMARY_ROUTER = 1,
98 SECONDARY_ROUTER = 2, 98 SECONDARY_ROUTER = 2,
99 MULTICAST_ROUTER = 3, 99 MULTICAST_ROUTER = 3,
100 PRIMARY_CONNECTOR = 4, 100 PRIMARY_CONNECTOR = 4,
101 SECONDARY_CONNECTOR = 5, 101 SECONDARY_CONNECTOR = 5,
102}; 102};
103 103
104
105/* IPA Commands */ 104/* IPA Commands */
106enum qeth_ipa_cmds { 105enum qeth_ipa_cmds {
107 IPA_CMD_STARTLAN = 0x01, 106 IPA_CMD_STARTLAN = 0x01,
108 IPA_CMD_STOPLAN = 0x02, 107 IPA_CMD_STOPLAN = 0x02,
109 IPA_CMD_SETVMAC = 0x21, 108 IPA_CMD_SETVMAC = 0x21,
110 IPA_CMD_DELVMAC = 0x22, 109 IPA_CMD_DELVMAC = 0x22,
111 IPA_CMD_SETGMAC = 0x23, 110 IPA_CMD_SETGMAC = 0x23,
112 IPA_CMD_DELGMAC = 0x24, 111 IPA_CMD_DELGMAC = 0x24,
113 IPA_CMD_SETVLAN = 0x25, 112 IPA_CMD_SETVLAN = 0x25,
114 IPA_CMD_DELVLAN = 0x26, 113 IPA_CMD_DELVLAN = 0x26,
115 IPA_CMD_SETCCID = 0x41, 114 IPA_CMD_SETCCID = 0x41,
116 IPA_CMD_DELCCID = 0x42, 115 IPA_CMD_DELCCID = 0x42,
117 IPA_CMD_MODCCID = 0x43, 116 IPA_CMD_MODCCID = 0x43,
118 IPA_CMD_SETIP = 0xb1, 117 IPA_CMD_SETIP = 0xb1,
119 IPA_CMD_DELIP = 0xb7, 118 IPA_CMD_QIPASSIST = 0xb2,
120 IPA_CMD_QIPASSIST = 0xb2, 119 IPA_CMD_SETASSPARMS = 0xb3,
121 IPA_CMD_SETASSPARMS = 0xb3, 120 IPA_CMD_SETIPM = 0xb4,
122 IPA_CMD_SETIPM = 0xb4, 121 IPA_CMD_DELIPM = 0xb5,
123 IPA_CMD_DELIPM = 0xb5, 122 IPA_CMD_SETRTG = 0xb6,
124 IPA_CMD_SETRTG = 0xb6, 123 IPA_CMD_DELIP = 0xb7,
125 IPA_CMD_SETADAPTERPARMS = 0xb8, 124 IPA_CMD_SETADAPTERPARMS = 0xb8,
126 IPA_CMD_IPFRAME = 0xb9, 125 IPA_CMD_SET_DIAG_ASS = 0xb9,
127 IPA_CMD_ADD_ADDR_ENTRY = 0xc1, 126 IPA_CMD_CREATE_ADDR = 0xc3,
128 IPA_CMD_DELETE_ADDR_ENTRY = 0xc2, 127 IPA_CMD_DESTROY_ADDR = 0xc4,
129 IPA_CMD_CREATE_ADDR = 0xc3, 128 IPA_CMD_REGISTER_LOCAL_ADDR = 0xd1,
130 IPA_CMD_DESTROY_ADDR = 0xc4, 129 IPA_CMD_UNREGISTER_LOCAL_ADDR = 0xd2,
131 IPA_CMD_REGISTER_LOCAL_ADDR = 0xd1, 130 IPA_CMD_UNKNOWN = 0x00
132 IPA_CMD_UNREGISTER_LOCAL_ADDR = 0xd2,
133}; 131};
134 132
135enum qeth_ip_ass_cmds { 133enum qeth_ip_ass_cmds {
136 IPA_CMD_ASS_START = 0x0001, 134 IPA_CMD_ASS_START = 0x0001,
137 IPA_CMD_ASS_STOP = 0x0002, 135 IPA_CMD_ASS_STOP = 0x0002,
138 IPA_CMD_ASS_CONFIGURE = 0x0003, 136 IPA_CMD_ASS_CONFIGURE = 0x0003,
139 IPA_CMD_ASS_ENABLE = 0x0004, 137 IPA_CMD_ASS_ENABLE = 0x0004,
140}; 138};
141 139
142enum qeth_arp_process_subcmds { 140enum qeth_arp_process_subcmds {
143 IPA_CMD_ASS_ARP_SET_NO_ENTRIES = 0x0003, 141 IPA_CMD_ASS_ARP_SET_NO_ENTRIES = 0x0003,
144 IPA_CMD_ASS_ARP_QUERY_CACHE = 0x0004, 142 IPA_CMD_ASS_ARP_QUERY_CACHE = 0x0004,
145 IPA_CMD_ASS_ARP_ADD_ENTRY = 0x0005, 143 IPA_CMD_ASS_ARP_ADD_ENTRY = 0x0005,
146 IPA_CMD_ASS_ARP_REMOVE_ENTRY = 0x0006, 144 IPA_CMD_ASS_ARP_REMOVE_ENTRY = 0x0006,
147 IPA_CMD_ASS_ARP_FLUSH_CACHE = 0x0007, 145 IPA_CMD_ASS_ARP_FLUSH_CACHE = 0x0007,
148 IPA_CMD_ASS_ARP_QUERY_INFO = 0x0104, 146 IPA_CMD_ASS_ARP_QUERY_INFO = 0x0104,
149 IPA_CMD_ASS_ARP_QUERY_STATS = 0x0204, 147 IPA_CMD_ASS_ARP_QUERY_STATS = 0x0204,
150}; 148};
151 149
152/* Return Codes for IPA Commands */ 150
151/* Return Codes for IPA Commands
152 * according to OSA card Specs */
153
153enum qeth_ipa_return_codes { 154enum qeth_ipa_return_codes {
154 IPA_RC_SUCCESS = 0x0000, 155 IPA_RC_SUCCESS = 0x0000,
155 IPA_RC_NOTSUPP = 0x0001, 156 IPA_RC_NOTSUPP = 0x0001,
156 IPA_RC_NO_ACCESS = 0x0002, 157 IPA_RC_IP_TABLE_FULL = 0x0002,
157 IPA_RC_FAILED = 0x0003, 158 IPA_RC_UNKNOWN_ERROR = 0x0003,
158 IPA_RC_DATA_MISMATCH = 0xe001, 159 IPA_RC_UNSUPPORTED_COMMAND = 0x0004,
159 IPA_RC_INVALID_LAN_TYPE = 0xe003, 160 IPA_RC_DUP_IPV6_REMOTE = 0x0008,
160 IPA_RC_INVALID_LAN_NO = 0xe004, 161 IPA_RC_DUP_IPV6_HOME = 0x0010,
161 IPA_RC_IPADDR_ALREADY_REG = 0xe005, 162 IPA_RC_UNREGISTERED_ADDR = 0x0011,
162 IPA_RC_IPADDR_TABLE_FULL = 0xe006, 163 IPA_RC_NO_ID_AVAILABLE = 0x0012,
163 IPA_RC_IPADDR_ALREADY_USED = 0xe00a, 164 IPA_RC_ID_NOT_FOUND = 0x0013,
164 IPA_RC_ASSNO_NOT_SUPP = 0xe00d, 165 IPA_RC_INVALID_IP_VERSION = 0x0020,
165 IPA_RC_ASSCMD_START_FAILED = 0xe00e, 166 IPA_RC_LAN_FRAME_MISMATCH = 0x0040,
166 IPA_RC_ASSCMD_PART_SUCCESS = 0xe00f, 167 IPA_RC_L2_UNSUPPORTED_CMD = 0x2003,
167 IPA_RC_IPADDR_NOT_DEFINED = 0xe010, 168 IPA_RC_L2_DUP_MAC = 0x2005,
168 IPA_RC_LAN_OFFLINE = 0xe080, 169 IPA_RC_L2_ADDR_TABLE_FULL = 0x2006,
170 IPA_RC_L2_DUP_LAYER3_MAC = 0x200a,
171 IPA_RC_L2_GMAC_NOT_FOUND = 0x200b,
172 IPA_RC_L2_MAC_NOT_FOUND = 0x2010,
173 IPA_RC_L2_INVALID_VLAN_ID = 0x2015,
174 IPA_RC_L2_DUP_VLAN_ID = 0x2016,
175 IPA_RC_L2_VLAN_ID_NOT_FOUND = 0x2017,
176 IPA_RC_DATA_MISMATCH = 0xe001,
177 IPA_RC_INVALID_MTU_SIZE = 0xe002,
178 IPA_RC_INVALID_LANTYPE = 0xe003,
179 IPA_RC_INVALID_LANNUM = 0xe004,
180 IPA_RC_DUPLICATE_IP_ADDRESS = 0xe005,
181 IPA_RC_IP_ADDR_TABLE_FULL = 0xe006,
182 IPA_RC_LAN_PORT_STATE_ERROR = 0xe007,
183 IPA_RC_SETIP_NO_STARTLAN = 0xe008,
184 IPA_RC_SETIP_ALREADY_RECEIVED = 0xe009,
185 IPA_RC_IP_ADDR_ALREADY_USED = 0xe00a,
186 IPA_RC_MULTICAST_FULL = 0xe00b,
187 IPA_RC_SETIP_INVALID_VERSION = 0xe00d,
188 IPA_RC_UNSUPPORTED_SUBCMD = 0xe00e,
189 IPA_RC_ARP_ASSIST_NO_ENABLE = 0xe00f,
190 IPA_RC_PRIMARY_ALREADY_DEFINED = 0xe010,
191 IPA_RC_SECOND_ALREADY_DEFINED = 0xe011,
192 IPA_RC_INVALID_SETRTG_INDICATOR = 0xe012,
193 IPA_RC_MC_ADDR_ALREADY_DEFINED = 0xe013,
194 IPA_RC_LAN_OFFLINE = 0xe080,
195 IPA_RC_INVALID_IP_VERSION2 = 0xf001,
196 IPA_RC_FFFF = 0xffff
169}; 197};
170 198
171/* IPA function flags; each flag marks availability of respective function */ 199/* IPA function flags; each flag marks availability of respective function */
@@ -183,7 +211,9 @@ enum qeth_ipa_funcs {
183 IPA_SETADAPTERPARMS = 0x00000400L, 211 IPA_SETADAPTERPARMS = 0x00000400L,
184 IPA_VLAN_PRIO = 0x00000800L, 212 IPA_VLAN_PRIO = 0x00000800L,
185 IPA_PASSTHRU = 0x00001000L, 213 IPA_PASSTHRU = 0x00001000L,
214 IPA_FLUSH_ARP_SUPPORT = 0x00002000L,
186 IPA_FULL_VLAN = 0x00004000L, 215 IPA_FULL_VLAN = 0x00004000L,
216 IPA_INBOUND_PASSTHRU = 0x00008000L,
187 IPA_SOURCE_MAC = 0x00010000L, 217 IPA_SOURCE_MAC = 0x00010000L,
188 IPA_OSA_MC_ROUTER = 0x00020000L, 218 IPA_OSA_MC_ROUTER = 0x00020000L,
189 IPA_QUERY_ARP_ASSIST = 0x00040000L, 219 IPA_QUERY_ARP_ASSIST = 0x00040000L,
@@ -204,31 +234,30 @@ enum qeth_ipa_setdelip_flags {
204/* SETADAPTER IPA Command: ****************************************************/ 234/* SETADAPTER IPA Command: ****************************************************/
205enum qeth_ipa_setadp_cmd { 235enum qeth_ipa_setadp_cmd {
206 IPA_SETADP_QUERY_COMMANDS_SUPPORTED = 0x01, 236 IPA_SETADP_QUERY_COMMANDS_SUPPORTED = 0x01,
207 IPA_SETADP_ALTER_MAC_ADDRESS = 0x02, 237 IPA_SETADP_ALTER_MAC_ADDRESS = 0x02,
208 IPA_SETADP_ADD_DELETE_GROUP_ADDRESS = 0x04, 238 IPA_SETADP_ADD_DELETE_GROUP_ADDRESS = 0x04,
209 IPA_SETADP_ADD_DELETE_FUNCTIONAL_ADDR = 0x08, 239 IPA_SETADP_ADD_DELETE_FUNCTIONAL_ADDR = 0x08,
210 IPA_SETADP_SET_ADDRESSING_MODE = 0x10, 240 IPA_SETADP_SET_ADDRESSING_MODE = 0x10,
211 IPA_SETADP_SET_CONFIG_PARMS = 0x20, 241 IPA_SETADP_SET_CONFIG_PARMS = 0x20,
212 IPA_SETADP_SET_CONFIG_PARMS_EXTENDED = 0x40, 242 IPA_SETADP_SET_CONFIG_PARMS_EXTENDED = 0x40,
213 IPA_SETADP_SET_BROADCAST_MODE = 0x80, 243 IPA_SETADP_SET_BROADCAST_MODE = 0x80,
214 IPA_SETADP_SEND_OSA_MESSAGE = 0x0100, 244 IPA_SETADP_SEND_OSA_MESSAGE = 0x0100,
215 IPA_SETADP_SET_SNMP_CONTROL = 0x0200, 245 IPA_SETADP_SET_SNMP_CONTROL = 0x0200,
216 IPA_SETADP_READ_SNMP_PARMS = 0x0400, 246 IPA_SETADP_QUERY_CARD_INFO = 0x0400,
217 IPA_SETADP_SET_PROMISC_MODE = 0x0800, 247 IPA_SETADP_SET_PROMISC_MODE = 0x0800,
218 IPA_SETADP_QUERY_CARD_INFO = 0x1000,
219}; 248};
220enum qeth_ipa_mac_ops { 249enum qeth_ipa_mac_ops {
221 CHANGE_ADDR_READ_MAC = 0, 250 CHANGE_ADDR_READ_MAC = 0,
222 CHANGE_ADDR_REPLACE_MAC = 1, 251 CHANGE_ADDR_REPLACE_MAC = 1,
223 CHANGE_ADDR_ADD_MAC = 2, 252 CHANGE_ADDR_ADD_MAC = 2,
224 CHANGE_ADDR_DEL_MAC = 4, 253 CHANGE_ADDR_DEL_MAC = 4,
225 CHANGE_ADDR_RESET_MAC = 8, 254 CHANGE_ADDR_RESET_MAC = 8,
226}; 255};
227enum qeth_ipa_addr_ops { 256enum qeth_ipa_addr_ops {
228 CHANGE_ADDR_READ_ADDR = 0, 257 CHANGE_ADDR_READ_ADDR = 0,
229 CHANGE_ADDR_ADD_ADDR = 1, 258 CHANGE_ADDR_ADD_ADDR = 1,
230 CHANGE_ADDR_DEL_ADDR = 2, 259 CHANGE_ADDR_DEL_ADDR = 2,
231 CHANGE_ADDR_FLUSH_ADDR_TABLE = 4, 260 CHANGE_ADDR_FLUSH_ADDR_TABLE = 4,
232}; 261};
233enum qeth_ipa_promisc_modes { 262enum qeth_ipa_promisc_modes {
234 SET_PROMISC_MODE_OFF = 0, 263 SET_PROMISC_MODE_OFF = 0,
@@ -407,15 +436,15 @@ struct qeth_ipacmd_hdr {
407struct qeth_ipa_cmd { 436struct qeth_ipa_cmd {
408 struct qeth_ipacmd_hdr hdr; 437 struct qeth_ipacmd_hdr hdr;
409 union { 438 union {
410 struct qeth_ipacmd_setdelip4 setdelip4; 439 struct qeth_ipacmd_setdelip4 setdelip4;
411 struct qeth_ipacmd_setdelip6 setdelip6; 440 struct qeth_ipacmd_setdelip6 setdelip6;
412 struct qeth_ipacmd_setdelipm setdelipm; 441 struct qeth_ipacmd_setdelipm setdelipm;
413 struct qeth_ipacmd_setassparms setassparms; 442 struct qeth_ipacmd_setassparms setassparms;
414 struct qeth_ipacmd_layer2setdelmac setdelmac; 443 struct qeth_ipacmd_layer2setdelmac setdelmac;
415 struct qeth_ipacmd_layer2setdelvlan setdelvlan; 444 struct qeth_ipacmd_layer2setdelvlan setdelvlan;
416 struct qeth_create_destroy_address create_destroy_addr; 445 struct qeth_create_destroy_address create_destroy_addr;
417 struct qeth_ipacmd_setadpparms setadapterparms; 446 struct qeth_ipacmd_setadpparms setadapterparms;
418 struct qeth_set_routing setrtg; 447 struct qeth_set_routing setrtg;
419 } data; 448 } data;
420} __attribute__ ((packed)); 449} __attribute__ ((packed));
421 450
@@ -433,6 +462,12 @@ enum qeth_ipa_arp_return_codes {
433 QETH_IPA_ARP_RC_Q_NO_DATA = 0x0008, 462 QETH_IPA_ARP_RC_Q_NO_DATA = 0x0008,
434}; 463};
435 464
465
466extern char *
467qeth_get_ipa_msg(enum qeth_ipa_return_codes rc);
468extern char *
469qeth_get_ipa_cmd_name(enum qeth_ipa_cmds cmd);
470
436#define QETH_SETASS_BASE_LEN (sizeof(struct qeth_ipacmd_hdr) + \ 471#define QETH_SETASS_BASE_LEN (sizeof(struct qeth_ipacmd_hdr) + \
437 sizeof(struct qeth_ipacmd_setassparms_hdr)) 472 sizeof(struct qeth_ipacmd_setassparms_hdr))
438#define QETH_IPA_ARP_DATA_POS(buffer) (buffer + IPA_PDU_HEADER_SIZE + \ 473#define QETH_IPA_ARP_DATA_POS(buffer) (buffer + IPA_PDU_HEADER_SIZE + \
@@ -521,7 +556,7 @@ extern unsigned char DM_ACT[];
521extern unsigned char IDX_ACTIVATE_READ[]; 556extern unsigned char IDX_ACTIVATE_READ[];
522extern unsigned char IDX_ACTIVATE_WRITE[]; 557extern unsigned char IDX_ACTIVATE_WRITE[];
523 558
524#define IDX_ACTIVATE_SIZE 0x22 559#define IDX_ACTIVATE_SIZE 0x22
525#define QETH_IDX_ACT_ISSUER_RM_TOKEN(buffer) (buffer+0x0c) 560#define QETH_IDX_ACT_ISSUER_RM_TOKEN(buffer) (buffer+0x0c)
526#define QETH_IDX_NO_PORTNAME_REQUIRED(buffer) ((buffer)[0x0b]&0x80) 561#define QETH_IDX_NO_PORTNAME_REQUIRED(buffer) ((buffer)[0x0b]&0x80)
527#define QETH_IDX_ACT_FUNC_LEVEL(buffer) (buffer+0x10) 562#define QETH_IDX_ACT_FUNC_LEVEL(buffer) (buffer+0x10)
diff --git a/drivers/s390/net/qeth_sys.c b/drivers/s390/net/qeth_sys.c
index d518419cd0c6..65ffc21afc37 100644
--- a/drivers/s390/net/qeth_sys.c
+++ b/drivers/s390/net/qeth_sys.c
@@ -384,8 +384,6 @@ qeth_dev_route_store(struct qeth_card *card, struct qeth_routing_info *route,
384 route->type = PRIMARY_CONNECTOR; 384 route->type = PRIMARY_CONNECTOR;
385 } else if (!strcmp(tmp, "secondary_connector")) { 385 } else if (!strcmp(tmp, "secondary_connector")) {
386 route->type = SECONDARY_CONNECTOR; 386 route->type = SECONDARY_CONNECTOR;
387 } else if (!strcmp(tmp, "multicast_router")) {
388 route->type = MULTICAST_ROUTER;
389 } else if (!strcmp(tmp, "primary_router")) { 387 } else if (!strcmp(tmp, "primary_router")) {
390 route->type = PRIMARY_ROUTER; 388 route->type = PRIMARY_ROUTER;
391 } else if (!strcmp(tmp, "secondary_router")) { 389 } else if (!strcmp(tmp, "secondary_router")) {