net: vlan: add protocol argument to packet tagging functions
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / net / ethernet / chelsio / cxgb4vf / sge.c
index 9488032d6d2d568239a0d940a9ca893359d40b4d..df296af20bd52d1052a1c05200841d55dc4acde1 100644 (file)
@@ -528,17 +528,21 @@ static void unmap_rx_buf(struct adapter *adapter, struct sge_fl *fl)
  */
 static inline void ring_fl_db(struct adapter *adapter, struct sge_fl *fl)
 {
+       u32 val;
+
        /*
         * The SGE keeps track of its Producer and Consumer Indices in terms
         * of Egress Queue Units so we can only tell it about integral numbers
         * of multiples of Free List Entries per Egress Queue Units ...
         */
        if (fl->pend_cred >= FL_PER_EQ_UNIT) {
+               val = PIDX(fl->pend_cred / FL_PER_EQ_UNIT);
+               if (!is_t4(adapter->chip))
+                       val |= DBTYPE(1);
                wmb();
                t4_write_reg(adapter, T4VF_SGE_BASE_ADDR + SGE_VF_KDOORBELL,
                             DBPRIO(1) |
-                            QID(fl->cntxt_id) |
-                            PIDX(fl->pend_cred / FL_PER_EQ_UNIT));
+                            QID(fl->cntxt_id) | val);
                fl->pend_cred %= FL_PER_EQ_UNIT;
        }
 }
@@ -1478,7 +1482,8 @@ static void do_gro(struct sge_eth_rxq *rxq, const struct pkt_gl *gl,
        skb_record_rx_queue(skb, rxq->rspq.idx);
 
        if (pkt->vlan_ex) {
-               __vlan_hwaccel_put_tag(skb, be16_to_cpu(pkt->vlan));
+               __vlan_hwaccel_put_tag(skb, cpu_to_be16(ETH_P_8021Q),
+                                       be16_to_cpu(pkt->vlan));
                rxq->stats.vlan_ex++;
        }
        ret = napi_gro_frags(&rxq->rspq.napi);
@@ -1547,7 +1552,7 @@ int t4vf_ethrx_handler(struct sge_rspq *rspq, const __be64 *rsp,
 
        if (pkt->vlan_ex) {
                rxq->stats.vlan_ex++;
-               __vlan_hwaccel_put_tag(skb, be16_to_cpu(pkt->vlan));
+               __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), be16_to_cpu(pkt->vlan));
        }
 
        netif_receive_skb(skb);