diff options
Diffstat (limited to 'drivers/s390')
-rw-r--r-- | drivers/s390/net/qeth_core.h | 2 | ||||
-rw-r--r-- | drivers/s390/net/qeth_core_main.c | 15 | ||||
-rw-r--r-- | drivers/s390/net/qeth_core_sys.c | 14 |
3 files changed, 27 insertions, 4 deletions
diff --git a/drivers/s390/net/qeth_core.h b/drivers/s390/net/qeth_core.h index 0a4148d2d962..a2088af51cc5 100644 --- a/drivers/s390/net/qeth_core.h +++ b/drivers/s390/net/qeth_core.h | |||
@@ -268,6 +268,8 @@ static inline int qeth_is_ipa_enabled(struct qeth_ipa_info *ipa, | |||
268 | #define QETH_NO_PRIO_QUEUEING 0 | 268 | #define QETH_NO_PRIO_QUEUEING 0 |
269 | #define QETH_PRIO_Q_ING_PREC 1 | 269 | #define QETH_PRIO_Q_ING_PREC 1 |
270 | #define QETH_PRIO_Q_ING_TOS 2 | 270 | #define QETH_PRIO_Q_ING_TOS 2 |
271 | #define QETH_PRIO_Q_ING_SKB 3 | ||
272 | #define QETH_PRIO_Q_ING_VLAN 4 | ||
271 | 273 | ||
272 | /* Packing */ | 274 | /* Packing */ |
273 | #define QETH_LOW_WATERMARK_PACK 2 | 275 | #define QETH_LOW_WATERMARK_PACK 2 |
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c index dca5161beaed..34993009a9e1 100644 --- a/drivers/s390/net/qeth_core_main.c +++ b/drivers/s390/net/qeth_core_main.c | |||
@@ -3677,12 +3677,9 @@ EXPORT_SYMBOL_GPL(qeth_qdio_output_handler); | |||
3677 | int qeth_get_priority_queue(struct qeth_card *card, struct sk_buff *skb, | 3677 | int qeth_get_priority_queue(struct qeth_card *card, struct sk_buff *skb, |
3678 | int ipv, int cast_type) | 3678 | int ipv, int cast_type) |
3679 | { | 3679 | { |
3680 | __be16 *tci; | ||
3680 | u8 tos; | 3681 | u8 tos; |
3681 | 3682 | ||
3682 | if (!ipv && (card->info.type == QETH_CARD_TYPE_OSD || | ||
3683 | card->info.type == QETH_CARD_TYPE_OSX)) | ||
3684 | return card->qdio.default_out_queue; | ||
3685 | |||
3686 | if (cast_type && card->info.is_multicast_different) | 3683 | if (cast_type && card->info.is_multicast_different) |
3687 | return card->info.is_multicast_different & | 3684 | return card->info.is_multicast_different & |
3688 | (card->qdio.no_out_queues - 1); | 3685 | (card->qdio.no_out_queues - 1); |
@@ -3710,6 +3707,16 @@ int qeth_get_priority_queue(struct qeth_card *card, struct sk_buff *skb, | |||
3710 | return 1; | 3707 | return 1; |
3711 | if (tos & IPTOS_LOWDELAY) | 3708 | if (tos & IPTOS_LOWDELAY) |
3712 | return 0; | 3709 | return 0; |
3710 | break; | ||
3711 | case QETH_PRIO_Q_ING_SKB: | ||
3712 | if (skb->priority > 5) | ||
3713 | return 0; | ||
3714 | return ~skb->priority >> 1 & 3; | ||
3715 | case QETH_PRIO_Q_ING_VLAN: | ||
3716 | tci = &((struct ethhdr *)skb->data)->h_proto; | ||
3717 | if (*tci == ETH_P_8021Q) | ||
3718 | return ~*(tci + 1) >> (VLAN_PRIO_SHIFT + 1) & 3; | ||
3719 | break; | ||
3713 | default: | 3720 | default: |
3714 | break; | 3721 | break; |
3715 | } | 3722 | } |
diff --git a/drivers/s390/net/qeth_core_sys.c b/drivers/s390/net/qeth_core_sys.c index 8547de8a766c..8a25a2be9890 100644 --- a/drivers/s390/net/qeth_core_sys.c +++ b/drivers/s390/net/qeth_core_sys.c | |||
@@ -217,6 +217,10 @@ static ssize_t qeth_dev_prioqing_show(struct device *dev, | |||
217 | return sprintf(buf, "%s\n", "by precedence"); | 217 | return sprintf(buf, "%s\n", "by precedence"); |
218 | case QETH_PRIO_Q_ING_TOS: | 218 | case QETH_PRIO_Q_ING_TOS: |
219 | return sprintf(buf, "%s\n", "by type of service"); | 219 | return sprintf(buf, "%s\n", "by type of service"); |
220 | case QETH_PRIO_Q_ING_SKB: | ||
221 | return sprintf(buf, "%s\n", "by skb-priority"); | ||
222 | case QETH_PRIO_Q_ING_VLAN: | ||
223 | return sprintf(buf, "%s\n", "by VLAN headers"); | ||
220 | default: | 224 | default: |
221 | return sprintf(buf, "always queue %i\n", | 225 | return sprintf(buf, "always queue %i\n", |
222 | card->qdio.default_out_queue); | 226 | card->qdio.default_out_queue); |
@@ -253,9 +257,19 @@ static ssize_t qeth_dev_prioqing_store(struct device *dev, | |||
253 | if (!strcmp(tmp, "prio_queueing_prec")) { | 257 | if (!strcmp(tmp, "prio_queueing_prec")) { |
254 | card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_PREC; | 258 | card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_PREC; |
255 | card->qdio.default_out_queue = QETH_DEFAULT_QUEUE; | 259 | card->qdio.default_out_queue = QETH_DEFAULT_QUEUE; |
260 | } else if (!strcmp(tmp, "prio_queueing_skb")) { | ||
261 | card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_SKB; | ||
262 | card->qdio.default_out_queue = QETH_DEFAULT_QUEUE; | ||
256 | } else if (!strcmp(tmp, "prio_queueing_tos")) { | 263 | } else if (!strcmp(tmp, "prio_queueing_tos")) { |
257 | card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_TOS; | 264 | card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_TOS; |
258 | card->qdio.default_out_queue = QETH_DEFAULT_QUEUE; | 265 | card->qdio.default_out_queue = QETH_DEFAULT_QUEUE; |
266 | } else if (!strcmp(tmp, "prio_queueing_vlan")) { | ||
267 | if (!card->options.layer2) { | ||
268 | rc = -ENOTSUPP; | ||
269 | goto out; | ||
270 | } | ||
271 | card->qdio.do_prio_queueing = QETH_PRIO_Q_ING_VLAN; | ||
272 | card->qdio.default_out_queue = QETH_DEFAULT_QUEUE; | ||
259 | } else if (!strcmp(tmp, "no_prio_queueing:0")) { | 273 | } else if (!strcmp(tmp, "no_prio_queueing:0")) { |
260 | card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING; | 274 | card->qdio.do_prio_queueing = QETH_NO_PRIO_QUEUEING; |
261 | card->qdio.default_out_queue = 0; | 275 | card->qdio.default_out_queue = 0; |