ath10k: add trace event for WMI_DEBUG_MESG_EVENTID
[cascardo/linux.git] / include / linux / if_vlan.h
index 715c343..f252deb 100644 (file)
@@ -89,6 +89,101 @@ extern struct net_device *__vlan_find_dev_deep(struct net_device *real_dev,
 extern struct net_device *vlan_dev_real_dev(const struct net_device *dev);
 extern u16 vlan_dev_vlan_id(const struct net_device *dev);
 
+/**
+ *     struct vlan_priority_tci_mapping - vlan egress priority mappings
+ *     @priority: skb priority
+ *     @vlan_qos: vlan priority: (skb->priority << 13) & 0xE000
+ *     @next: pointer to next struct
+ */
+struct vlan_priority_tci_mapping {
+       u32                                     priority;
+       u16                                     vlan_qos;
+       struct vlan_priority_tci_mapping        *next;
+};
+
+/**
+ *     struct vlan_pcpu_stats - VLAN percpu rx/tx stats
+ *     @rx_packets: number of received packets
+ *     @rx_bytes: number of received bytes
+ *     @rx_multicast: number of received multicast packets
+ *     @tx_packets: number of transmitted packets
+ *     @tx_bytes: number of transmitted bytes
+ *     @syncp: synchronization point for 64bit counters
+ *     @rx_errors: number of rx errors
+ *     @tx_dropped: number of tx drops
+ */
+struct vlan_pcpu_stats {
+       u64                     rx_packets;
+       u64                     rx_bytes;
+       u64                     rx_multicast;
+       u64                     tx_packets;
+       u64                     tx_bytes;
+       struct u64_stats_sync   syncp;
+       u32                     rx_errors;
+       u32                     tx_dropped;
+};
+
+struct proc_dir_entry;
+struct netpoll;
+
+/**
+ *     struct vlan_dev_priv - VLAN private device data
+ *     @nr_ingress_mappings: number of ingress priority mappings
+ *     @ingress_priority_map: ingress priority mappings
+ *     @nr_egress_mappings: number of egress priority mappings
+ *     @egress_priority_map: hash of egress priority mappings
+ *     @vlan_proto: VLAN encapsulation protocol
+ *     @vlan_id: VLAN identifier
+ *     @flags: device flags
+ *     @real_dev: underlying netdevice
+ *     @real_dev_addr: address of underlying netdevice
+ *     @dent: proc dir entry
+ *     @vlan_pcpu_stats: ptr to percpu rx stats
+ */
+struct vlan_dev_priv {
+       unsigned int                            nr_ingress_mappings;
+       u32                                     ingress_priority_map[8];
+       unsigned int                            nr_egress_mappings;
+       struct vlan_priority_tci_mapping        *egress_priority_map[16];
+
+       __be16                                  vlan_proto;
+       u16                                     vlan_id;
+       u16                                     flags;
+
+       struct net_device                       *real_dev;
+       unsigned char                           real_dev_addr[ETH_ALEN];
+
+       struct proc_dir_entry                   *dent;
+       struct vlan_pcpu_stats __percpu         *vlan_pcpu_stats;
+#ifdef CONFIG_NET_POLL_CONTROLLER
+       struct netpoll                          *netpoll;
+#endif
+};
+
+static inline struct vlan_dev_priv *vlan_dev_priv(const struct net_device *dev)
+{
+       return netdev_priv(dev);
+}
+
+static inline u16
+vlan_dev_get_egress_qos_mask(struct net_device *dev, u32 skprio)
+{
+       struct vlan_priority_tci_mapping *mp;
+
+       smp_rmb(); /* coupled with smp_wmb() in vlan_dev_set_egress_priority() */
+
+       mp = vlan_dev_priv(dev)->egress_priority_map[(skprio & 0xF)];
+       while (mp) {
+               if (mp->priority == skprio) {
+                       return mp->vlan_qos; /* This should already be shifted
+                                             * to mask correctly with the
+                                             * VLAN's TCI */
+               }
+               mp = mp->next;
+       }
+       return 0;
+}
+
 extern bool vlan_do_receive(struct sk_buff **skb);
 extern struct sk_buff *vlan_untag(struct sk_buff *skb);
 
@@ -121,6 +216,12 @@ static inline u16 vlan_dev_vlan_id(const struct net_device *dev)
        return 0;
 }
 
+static inline u16 vlan_dev_get_egress_qos_mask(struct net_device *dev,
+                                              u32 skprio)
+{
+       return 0;
+}
+
 static inline bool vlan_do_receive(struct sk_buff **skb)
 {
        return false;