| /* |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License as |
| * published by the Free Software Foundation; either version 2 of |
| * the License, or (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
| * MA 02111-1307 USA |
| */ |
| |
| #ifndef __QTN_SKB_CB_H |
| #define __QTN_SKB_CB_H |
| |
| struct qtn_skb_cb { |
| uint8_t encap; /* Encapsulation type */ |
| uint8_t ip_protocol; /* IP protocol */ |
| uint16_t ether_type; /* Ethernet Type */ |
| void *ni; /* Node structure pointer */ |
| uint32_t flags; |
| #define M_LINK0 0x0001 /* frame needs WEP encryption */ |
| #define M_FF 0x0002 /* fast frame */ |
| #define M_PWR_SAV 0x0004 /* bypass powersave handling */ |
| #define M_UAPSD 0x0008 /* frame flagged for u-apsd handling */ |
| #define M_RAW 0x0010 |
| #define M_CLASSIFY 0x0020 /* Packet has been classified */ |
| #define M_VSP_CHK 0x0040 /* VSP check done */ |
| #define M_VSP_NOT_FOUND 0x0080 /* VSP stream not found - usually first pkts from Eth */ |
| #define M_VSP_RX_BSS 0x0100 /* VSP stream originating from the BSS */ |
| #define M_RATE_TRAINING 0x0200 /* Empty data frame used to do rate training */ |
| #define M_NO_AMSDU 0x0400 /* AMSDU is prohibited for this frame */ |
| #define M_ENQUEUED_SCH 0x0800 /* Enqueued in qdrv_sch */ |
| #define M_ENQUEUED_MUC 0x1000 /* Enqueued to MuC */ |
| #define M_TX_DONE_IMM_INT 0x2000 /* Immediately interrupt lhost when tx done */ |
| #define M_VLAN_TAGGED 0x4000 /* skb belongs to some VLAN */ |
| #define M_VLAN_TAG_OWE 0x8000 /* VLAN tag is stripped of this skb */ |
| }; |
| |
| #define QTN_SKB_ENCAP_ETH 0 |
| #define QTN_SKB_ENCAP_80211_MGMT 1 |
| #define QTN_SKB_ENCAP_80211_DATA 2 |
| #define QTN_SKB_ENCAP(_skb) ((_skb)->qtn_cb.encap) |
| #define QTN_SKB_ENCAP_IS_80211(_skb) ((_skb)->qtn_cb.encap > 0) |
| #define QTN_SKB_ENCAP_IS_80211_MGMT(_skb) \ |
| ((_skb)->qtn_cb.encap == QTN_SKB_ENCAP_80211_MGMT) |
| |
| #define QTN_SKB_CB_NI(_skb) ((_skb)->qtn_cb.ni) |
| #define QTN_SKB_CB_ETHERTYPE(_skb) ((_skb)->qtn_cb.ether_type) |
| #define QTN_SKB_CB_IPPROTO(_skb) ((_skb)->qtn_cb.ip_protocol) |
| |
| #define M_FLAG_SET(_skb, _flag) ((_skb)->qtn_cb.flags |= _flag) |
| #define M_FLAG_CLR(_skb, _flag) ((_skb)->qtn_cb.flags &= ~_flag) |
| #define M_FLAG_GET(_skb, _flag) ((_skb)->qtn_cb.flags & _flag) |
| #define M_FLAG_ISSET(_skb, _flag) (!!((_skb)->qtn_cb.flags & _flag)) |
| #define M_FLAG_KEEP_ONLY(_skb, _flag) ((_skb)->qtn_cb.flags &= _flag) |
| |
| #define M_PWR_SAV_SET(skb) M_FLAG_SET((skb), M_PWR_SAV) |
| #define M_PWR_SAV_CLR(skb) M_FLAG_CLR((skb), M_PWR_SAV) |
| #define M_PWR_SAV_GET(skb) M_FLAG_GET((skb), M_PWR_SAV) |
| |
| #endif /* #ifndef __QTN_SKB_CB_H */ |