diff options
Diffstat (limited to 'drivers/s390')
-rw-r--r-- | drivers/s390/cio/qdio.c | 37 | ||||
-rw-r--r-- | drivers/s390/cio/qdio.h | 4 | ||||
-rw-r--r-- | drivers/s390/net/netiucv.c | 5 | ||||
-rw-r--r-- | drivers/s390/net/qeth_eddp.c | 4 | ||||
-rw-r--r-- | drivers/s390/net/qeth_eddp.h | 3 | ||||
-rw-r--r-- | drivers/s390/net/qeth_main.c | 45 | ||||
-rw-r--r-- | drivers/s390/net/qeth_mpc.c | 101 | ||||
-rw-r--r-- | drivers/s390/net/qeth_mpc.h | 219 | ||||
-rw-r--r-- | drivers/s390/net/qeth_sys.c | 2 |
9 files changed, 295 insertions, 125 deletions
diff --git a/drivers/s390/cio/qdio.c b/drivers/s390/cio/qdio.c index cba64e4cfcd4..f770018fe1d5 100644 --- a/drivers/s390/cio/qdio.c +++ b/drivers/s390/cio/qdio.c | |||
@@ -996,18 +996,25 @@ __qdio_outbound_processing(struct qdio_q *q) | |||
996 | if (qdio_has_outbound_q_moved(q)) | 996 | if (qdio_has_outbound_q_moved(q)) |
997 | qdio_kick_outbound_handler(q); | 997 | qdio_kick_outbound_handler(q); |
998 | 998 | ||
999 | if (q->is_iqdio_q) { | 999 | if (q->queue_type == QDIO_ZFCP_QFMT) { |
1000 | if ((!q->hydra_gives_outbound_pcis) && | ||
1001 | (!qdio_is_outbound_q_done(q))) | ||
1002 | qdio_mark_q(q); | ||
1003 | } | ||
1004 | else if (((!q->is_iqdio_q) && (!q->is_pci_out)) || | ||
1005 | (q->queue_type == QDIO_IQDIO_QFMT_ASYNCH)) { | ||
1000 | /* | 1006 | /* |
1001 | * for asynchronous queues, we better check, if the sent | 1007 | * make sure buffer switch from PRIMED to EMPTY is noticed |
1002 | * buffer is already switched from PRIMED to EMPTY. | 1008 | * and outbound_handler is called |
1003 | */ | 1009 | */ |
1004 | if ((q->queue_type == QDIO_IQDIO_QFMT_ASYNCH) && | 1010 | if (qdio_is_outbound_q_done(q)) { |
1005 | !qdio_is_outbound_q_done(q)) | 1011 | del_timer(&q->timer); |
1006 | qdio_mark_q(q); | 1012 | } else { |
1007 | 1013 | if (!timer_pending(&q->timer)) | |
1008 | } else if (!q->hydra_gives_outbound_pcis) | 1014 | mod_timer(&q->timer, jiffies + |
1009 | if (!qdio_is_outbound_q_done(q)) | 1015 | QDIO_FORCE_CHECK_TIMEOUT); |
1010 | qdio_mark_q(q); | 1016 | } |
1017 | } | ||
1011 | 1018 | ||
1012 | qdio_release_q(q); | 1019 | qdio_release_q(q); |
1013 | } | 1020 | } |
@@ -1826,6 +1833,7 @@ qdio_fill_qs(struct qdio_irq *irq_ptr, struct ccw_device *cdev, | |||
1826 | q->queue_type = QDIO_IQDIO_QFMT_ASYNCH; | 1833 | q->queue_type = QDIO_IQDIO_QFMT_ASYNCH; |
1827 | q->int_parm=int_parm; | 1834 | q->int_parm=int_parm; |
1828 | q->is_input_q=0; | 1835 | q->is_input_q=0; |
1836 | q->is_pci_out = 0; | ||
1829 | q->schid = irq_ptr->schid; | 1837 | q->schid = irq_ptr->schid; |
1830 | q->cdev = cdev; | 1838 | q->cdev = cdev; |
1831 | q->irq_ptr = irq_ptr; | 1839 | q->irq_ptr = irq_ptr; |
@@ -1838,6 +1846,10 @@ qdio_fill_qs(struct qdio_irq *irq_ptr, struct ccw_device *cdev, | |||
1838 | q->tasklet.data=(unsigned long)q; | 1846 | q->tasklet.data=(unsigned long)q; |
1839 | q->tasklet.func=(void(*)(unsigned long)) | 1847 | q->tasklet.func=(void(*)(unsigned long)) |
1840 | &qdio_outbound_processing; | 1848 | &qdio_outbound_processing; |
1849 | q->timer.function=(void(*)(unsigned long)) | ||
1850 | &qdio_outbound_processing; | ||
1851 | q->timer.data = (long)q; | ||
1852 | init_timer(&q->timer); | ||
1841 | 1853 | ||
1842 | atomic_set(&q->busy_siga_counter,0); | 1854 | atomic_set(&q->busy_siga_counter,0); |
1843 | q->timing.busy_start=0; | 1855 | q->timing.busy_start=0; |
@@ -2635,6 +2647,7 @@ qdio_shutdown(struct ccw_device *cdev, int how) | |||
2635 | 2647 | ||
2636 | for (i=0;i<irq_ptr->no_output_qs;i++) { | 2648 | for (i=0;i<irq_ptr->no_output_qs;i++) { |
2637 | tasklet_kill(&irq_ptr->output_qs[i]->tasklet); | 2649 | tasklet_kill(&irq_ptr->output_qs[i]->tasklet); |
2650 | del_timer(&irq_ptr->output_qs[i]->timer); | ||
2638 | wait_event_interruptible_timeout(cdev->private->wait_q, | 2651 | wait_event_interruptible_timeout(cdev->private->wait_q, |
2639 | !atomic_read(&irq_ptr-> | 2652 | !atomic_read(&irq_ptr-> |
2640 | output_qs[i]-> | 2653 | output_qs[i]-> |
@@ -3458,6 +3471,10 @@ do_qdio_handle_outbound(struct qdio_q *q, unsigned int callflags, | |||
3458 | qdio_perf_stat_inc(&perf_stats.outbound_cnt); | 3471 | qdio_perf_stat_inc(&perf_stats.outbound_cnt); |
3459 | return; | 3472 | return; |
3460 | } | 3473 | } |
3474 | if (callflags & QDIO_FLAG_PCI_OUT) | ||
3475 | q->is_pci_out = 1; | ||
3476 | else | ||
3477 | q->is_pci_out = 0; | ||
3461 | if (q->is_iqdio_q) { | 3478 | if (q->is_iqdio_q) { |
3462 | /* one siga for every sbal */ | 3479 | /* one siga for every sbal */ |
3463 | while (count--) | 3480 | while (count--) |
diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h index 2895392eaae4..6d7aad18f6f0 100644 --- a/drivers/s390/cio/qdio.h +++ b/drivers/s390/cio/qdio.h | |||
@@ -60,6 +60,7 @@ | |||
60 | #define QDIO_ACTIVATE_TIMEOUT ((5*HZ)>>10) | 60 | #define QDIO_ACTIVATE_TIMEOUT ((5*HZ)>>10) |
61 | #define QDIO_CLEANUP_CLEAR_TIMEOUT (20*HZ) | 61 | #define QDIO_CLEANUP_CLEAR_TIMEOUT (20*HZ) |
62 | #define QDIO_CLEANUP_HALT_TIMEOUT (10*HZ) | 62 | #define QDIO_CLEANUP_HALT_TIMEOUT (10*HZ) |
63 | #define QDIO_FORCE_CHECK_TIMEOUT (10*HZ) | ||
63 | 64 | ||
64 | enum qdio_irq_states { | 65 | enum qdio_irq_states { |
65 | QDIO_IRQ_STATE_INACTIVE, | 66 | QDIO_IRQ_STATE_INACTIVE, |
@@ -511,8 +512,8 @@ struct qdio_q { | |||
511 | 512 | ||
512 | void *irq_ptr; | 513 | void *irq_ptr; |
513 | 514 | ||
514 | #ifdef QDIO_USE_TIMERS_FOR_POLLING | ||
515 | struct timer_list timer; | 515 | struct timer_list timer; |
516 | #ifdef QDIO_USE_TIMERS_FOR_POLLING | ||
516 | atomic_t timer_already_set; | 517 | atomic_t timer_already_set; |
517 | spinlock_t timer_lock; | 518 | spinlock_t timer_lock; |
518 | #else /* QDIO_USE_TIMERS_FOR_POLLING */ | 519 | #else /* QDIO_USE_TIMERS_FOR_POLLING */ |
@@ -558,6 +559,7 @@ struct qdio_q { | |||
558 | } timing; | 559 | } timing; |
559 | atomic_t busy_siga_counter; | 560 | atomic_t busy_siga_counter; |
560 | unsigned int queue_type; | 561 | unsigned int queue_type; |
562 | unsigned int is_pci_out; | ||
561 | 563 | ||
562 | /* leave this member at the end. won't be cleared in qdio_fill_qs */ | 564 | /* leave this member at the end. won't be cleared in qdio_fill_qs */ |
563 | struct slib *slib; /* a page is allocated under this pointer, | 565 | struct slib *slib; /* a page is allocated under this pointer, |
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 | ||
621 | struct qeth_eddp_context * | 621 | struct qeth_eddp_context * |
622 | qeth_eddp_create_context(struct qeth_card *card, struct sk_buff *skb, | 622 | qeth_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 | ||
36 | extern struct qeth_eddp_context * | 36 | extern struct qeth_eddp_context * |
37 | qeth_eddp_create_context(struct qeth_card *,struct sk_buff *,struct qeth_hdr *); | 37 | qeth_eddp_create_context(struct qeth_card *,struct sk_buff *, |
38 | struct qeth_hdr *, unsigned char); | ||
38 | 39 | ||
39 | extern void | 40 | extern void |
40 | qeth_eddp_put_context(struct qeth_eddp_context *); | 41 | qeth_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 | ||
1685 | static void | ||
1686 | qeth_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 | |||
1685 | static struct qeth_ipa_cmd * | 1700 | static struct qeth_ipa_cmd * |
1686 | qeth_check_ipa_data(struct qeth_card *card, struct qeth_cmd_buffer *iob) | 1701 | qeth_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 | ||
160 | struct ipa_rc_msg { | ||
161 | enum qeth_ipa_return_codes rc; | ||
162 | char *msg; | ||
163 | }; | ||
160 | 164 | ||
165 | struct 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 | ||
212 | char * | ||
213 | qeth_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 | ||
224 | struct ipa_cmd_names { | ||
225 | enum qeth_ipa_cmds cmd; | ||
226 | char *name; | ||
227 | }; | ||
228 | |||
229 | struct 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 | ||
257 | char * | ||
258 | qeth_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 */ |
95 | enum qeth_routing_types { | 95 | enum 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 */ |
106 | enum qeth_ipa_cmds { | 105 | enum 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 | ||
135 | enum qeth_ip_ass_cmds { | 133 | enum 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 | ||
142 | enum qeth_arp_process_subcmds { | 140 | enum 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 | |||
153 | enum qeth_ipa_return_codes { | 154 | enum 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: ****************************************************/ |
205 | enum qeth_ipa_setadp_cmd { | 235 | enum 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 | }; |
220 | enum qeth_ipa_mac_ops { | 249 | enum 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 | }; |
227 | enum qeth_ipa_addr_ops { | 256 | enum 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 | }; |
233 | enum qeth_ipa_promisc_modes { | 262 | enum qeth_ipa_promisc_modes { |
234 | SET_PROMISC_MODE_OFF = 0, | 263 | SET_PROMISC_MODE_OFF = 0, |
@@ -407,15 +436,15 @@ struct qeth_ipacmd_hdr { | |||
407 | struct qeth_ipa_cmd { | 436 | struct 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 | |||
466 | extern char * | ||
467 | qeth_get_ipa_msg(enum qeth_ipa_return_codes rc); | ||
468 | extern char * | ||
469 | qeth_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[]; | |||
521 | extern unsigned char IDX_ACTIVATE_READ[]; | 556 | extern unsigned char IDX_ACTIVATE_READ[]; |
522 | extern unsigned char IDX_ACTIVATE_WRITE[]; | 557 | extern 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")) { |