aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/cxgb3/cxgb3_offload.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/drivers/net/cxgb3/cxgb3_offload.c b/drivers/net/cxgb3/cxgb3_offload.c
index 901c824bfe6d..ff9c013ce535 100644
--- a/drivers/net/cxgb3/cxgb3_offload.c
+++ b/drivers/net/cxgb3/cxgb3_offload.c
@@ -833,10 +833,26 @@ static int do_trace(struct t3cdev *dev, struct sk_buff *skb)
833 return 0; 833 return 0;
834} 834}
835 835
836/*
837 * That skb would better have come from process_responses() where we abuse
838 * ->priority and ->csum to carry our data. NB: if we get to per-arch
839 * ->csum, the things might get really interesting here.
840 */
841
842static inline u32 get_hwtid(struct sk_buff *skb)
843{
844 return ntohl((__force __be32)skb->priority) >> 8 & 0xfffff;
845}
846
847static inline u32 get_opcode(struct sk_buff *skb)
848{
849 return G_OPCODE(ntohl((__force __be32)skb->csum));
850}
851
836static int do_term(struct t3cdev *dev, struct sk_buff *skb) 852static int do_term(struct t3cdev *dev, struct sk_buff *skb)
837{ 853{
838 unsigned int hwtid = ntohl(skb->priority) >> 8 & 0xfffff; 854 unsigned int hwtid = get_hwtid(skb);
839 unsigned int opcode = G_OPCODE(ntohl(skb->csum)); 855 unsigned int opcode = get_opcode(skb);
840 struct t3c_tid_entry *t3c_tid; 856 struct t3c_tid_entry *t3c_tid;
841 857
842 t3c_tid = lookup_tid(&(T3C_DATA(dev))->tid_maps, hwtid); 858 t3c_tid = lookup_tid(&(T3C_DATA(dev))->tid_maps, hwtid);
@@ -914,7 +930,7 @@ int process_rx(struct t3cdev *dev, struct sk_buff **skbs, int n)
914{ 930{
915 while (n--) { 931 while (n--) {
916 struct sk_buff *skb = *skbs++; 932 struct sk_buff *skb = *skbs++;
917 unsigned int opcode = G_OPCODE(ntohl(skb->csum)); 933 unsigned int opcode = get_opcode(skb);
918 int ret = cpl_handlers[opcode] (dev, skb); 934 int ret = cpl_handlers[opcode] (dev, skb);
919 935
920#if VALIDATE_TID 936#if VALIDATE_TID