/*
 * 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 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 */
