#ifndef B43_XMIT_H_
#define B43_XMIT_H_

#include "main.h"

#define _b43_declare_plcp_hdr(size) \
	struct b43_plcp_hdr##size {		\
		union {				\
			__le32 data;		\
			__u8 raw[size];		\
		} __attribute__((__packed__));	\
	} __attribute__((__packed__))

/* struct b43_plcp_hdr4 */
_b43_declare_plcp_hdr(4);
/* struct b43_plcp_hdr6 */
_b43_declare_plcp_hdr(6);

#undef _b43_declare_plcp_hdr

/* TX header for v4 firmware */
struct b43_txhdr_fw4 {
	__le32 mac_ctl;		/* MAC TX control */
	__le16 mac_frame_ctl;	/* Copy of the FrameControl field */
	__le16 tx_fes_time_norm;	/* TX FES Time Normal */
	__le16 phy_ctl;		/* PHY TX control */
	__le16 phy_ctl_0;	/* Unused */
	__le16 phy_ctl_1;	/* Unused */
	__le16 phy_ctl_rts_0;	/* Unused */
	__le16 phy_ctl_rts_1;	/* Unused */
	__u8 phy_rate;		/* PHY rate */
	__u8 phy_rate_rts;	/* PHY rate for RTS/CTS */
	__u8 extra_ft;		/* Extra Frame Types */
	__u8 chan_radio_code;	/* Channel Radio Code */
	__u8 iv[16];		/* Encryption IV */
	__u8 tx_receiver[6];	/* TX Frame Receiver address */
	__le16 tx_fes_time_fb;	/* TX FES Time Fallback */
	struct b43_plcp_hdr6 rts_plcp_fb;	/* RTS fallback PLCP */
	__le16 rts_dur_fb;	/* RTS fallback duration */
	struct b43_plcp_hdr6 plcp_fb;	/* Fallback PLCP */
	__le16 dur_fb;		/* Fallback duration */
	__le16 mm_dur_time;	/* Unused */
	__le16 mm_dur_time_fb;	/* Unused */
	__le32 time_stamp;	/* Timestamp */
	 PAD_BYTES(2);
	__le16 cookie;		/* TX frame cookie */
	__le16 tx_status;	/* TX status */
	struct b43_plcp_hdr6 rts_plcp;	/* RTS PLCP */
	__u8 rts_frame[16];	/* The RTS frame (if used) */
	 PAD_BYTES(2);
	struct b43_plcp_hdr6 plcp;	/* Main PLCP */
} __attribute__ ((__packed__));

/* MAC TX control */
#define B43_TX4_MAC_KEYIDX		0x0FF00000	/* Security key index */
#define B43_TX4_MAC_KEYIDX_SHIFT	20
#define B43_TX4_MAC_KEYALG		0x00070000	/* Security key algorithm */
#define B43_TX4_MAC_KEYALG_SHIFT	16
#define B43_TX4_MAC_LIFETIME	0x00001000
#define B43_TX4_MAC_FRAMEBURST	0x00000800
#define B43_TX4_MAC_SENDCTS		0x00000400
#define B43_TX4_MAC_AMPDU		0x00000300
#define B43_TX4_MAC_AMPDU_SHIFT	8
#define B43_TX4_MAC_5GHZ		0x00000080
#define B43_TX4_MAC_IGNPMQ		0x00000020
#define B43_TX4_MAC_HWSEQ		0x00000010	/* Use Hardware Sequence Number */
#define B43_TX4_MAC_STMSDU		0x00000008	/* Start MSDU */
#define B43_TX4_MAC_SENDRTS		0x00000004
#define B43_TX4_MAC_LONGFRAME	0x00000002
#define B43_TX4_MAC_ACK		0x00000001

/* Extra Frame Types */
#define B43_TX4_EFT_FBOFDM		0x0001	/* Data frame fallback rate type */
#define B43_TX4_EFT_RTSOFDM		0x0004	/* RTS/CTS rate type */
#define B43_TX4_EFT_RTSFBOFDM	0x0010	/* RTS/CTS fallback rate type */

/* PHY TX control word */
#define B43_TX4_PHY_OFDM		0x0001	/* Data frame rate type */
#define B43_TX4_PHY_SHORTPRMBL	0x0010	/* Use short preamble */
#define B43_TX4_PHY_ANT		0x03C0	/* Antenna selection */
#define  B43_TX4_PHY_ANT0		0x0000	/* Use antenna 0 */
#define  B43_TX4_PHY_ANT1		0x0100	/* Use antenna 1 */
#define  B43_TX4_PHY_ANTLAST	0x0300	/* Use last used antenna */

void b43_generate_txhdr(struct b43_wldev *dev,
			u8 * txhdr,
			const unsigned char *fragment_data,
			unsigned int fragment_len,
			const struct ieee80211_tx_control *txctl, u16 cookie);

/* Transmit Status */
struct b43_txstatus {
	u16 cookie;		/* The cookie from the txhdr */
	u16 seq;		/* Sequence number */
	u8 phy_stat;		/* PHY TX status */
	u8 frame_count;		/* Frame transmit count */
	u8 rts_count;		/* RTS transmit count */
	u8 supp_reason;		/* Suppression reason */
	/* flags */
	u8 pm_indicated;	/* PM mode indicated to AP */
	u8 intermediate;	/* Intermediate status notification (not final) */
	u8 for_ampdu;		/* Status is for an AMPDU (afterburner) */
	u8 acked;		/* Wireless ACK received */
};

/* txstatus supp_reason values */
enum {
	B43_TXST_SUPP_NONE,	/* Not suppressed */
	B43_TXST_SUPP_PMQ,	/* Suppressed due to PMQ entry */
	B43_TXST_SUPP_FLUSH,	/* Suppressed due to flush request */
	B43_TXST_SUPP_PREV,	/* Previous fragment failed */
	B43_TXST_SUPP_CHAN,	/* Channel mismatch */
	B43_TXST_SUPP_LIFE,	/* Lifetime expired */
	B43_TXST_SUPP_UNDER,	/* Buffer underflow */
	B43_TXST_SUPP_ABNACK,	/* Afterburner NACK */
};

/* Transmit Status as received through DMA/PIO on old chips */
struct b43_hwtxstatus {
	PAD_BYTES(4);
	__le16 cookie;
	u8 flags;
	u8 count;
	 PAD_BYTES(2);
	__le16 seq;
	u8 phy_stat;
	 PAD_BYTES(1);
} __attribute__ ((__packed__));

/* Receive header for v4 firmware. */
struct b43_rxhdr_fw4 {
	__le16 frame_len;	/* Frame length */
	 PAD_BYTES(2);
	__le16 phy_status0;	/* PHY RX Status 0 */
	__u8 jssi;		/* PHY RX Status 1: JSSI */
	__u8 sig_qual;		/* PHY RX Status 1: Signal Quality */
	__le16 phy_status2;	/* PHY RX Status 2 */
	__le16 phy_status3;	/* PHY RX Status 3 */
	__le32 mac_status;	/* MAC RX status */
	__le16 mac_time;
	__le16 channel;
} __attribute__ ((__packed__));

/* PHY RX Status 0 */
#define B43_RX_PHYST0_GAINCTL	0x4000	/* Gain Control */
#define B43_RX_PHYST0_PLCPHCF	0x0200
#define B43_RX_PHYST0_PLCPFV	0x0100
#define B43_RX_PHYST0_SHORTPRMBL	0x0080	/* Received with Short Preamble */
#define B43_RX_PHYST0_LCRS		0x0040
#define B43_RX_PHYST0_ANT		0x0020	/* Antenna */
#define B43_RX_PHYST0_UNSRATE	0x0010
#define B43_RX_PHYST0_CLIP		0x000C
#define B43_RX_PHYST0_CLIP_SHIFT	2
#define B43_RX_PHYST0_FTYPE		0x0003	/* Frame type */
#define  B43_RX_PHYST0_CCK		0x0000	/* Frame type: CCK */
#define  B43_RX_PHYST0_OFDM		0x0001	/* Frame type: OFDM */
#define  B43_RX_PHYST0_PRE_N	0x0002	/* Pre-standard N-PHY frame */
#define  B43_RX_PHYST0_STD_N	0x0003	/* Standard N-PHY frame */

/* PHY RX Status 2 */
#define B43_RX_PHYST2_LNAG		0xC000	/* LNA Gain */
#define B43_RX_PHYST2_LNAG_SHIFT	14
#define B43_RX_PHYST2_PNAG		0x3C00	/* PNA Gain */
#define B43_RX_PHYST2_PNAG_SHIFT	10
#define B43_RX_PHYST2_FOFF		0x03FF	/* F offset */

/* PHY RX Status 3 */
#define B43_RX_PHYST3_DIGG		0x1800	/* DIG Gain */
#define B43_RX_PHYST3_DIGG_SHIFT	11
#define B43_RX_PHYST3_TRSTATE	0x0400	/* TR state */

/* MAC RX Status */
#define B43_RX_MAC_BEACONSENT	0x00008000	/* Beacon send flag */
#define B43_RX_MAC_KEYIDX		0x000007E0	/* Key index */
#define B43_RX_MAC_KEYIDX_SHIFT	5
#define B43_RX_MAC_DECERR		0x00000010	/* Decrypt error */
#define B43_RX_MAC_DEC		0x00000008	/* Decryption attempted */
#define B43_RX_MAC_PADDING		0x00000004	/* Pad bytes present */
#define B43_RX_MAC_RESP		0x00000002	/* Response frame transmitted */
#define B43_RX_MAC_FCSERR		0x00000001	/* FCS error */

/* RX channel */
#define B43_RX_CHAN_GAIN		0xFC00	/* Gain */
#define B43_RX_CHAN_GAIN_SHIFT	10
#define B43_RX_CHAN_ID		0x03FC	/* Channel ID */
#define B43_RX_CHAN_ID_SHIFT	2
#define B43_RX_CHAN_PHYTYPE		0x0003	/* PHY type */

u8 b43_plcp_get_ratecode_cck(const u8 bitrate);
u8 b43_plcp_get_ratecode_ofdm(const u8 bitrate);

void b43_generate_plcp_hdr(struct b43_plcp_hdr4 *plcp,
			   const u16 octets, const u8 bitrate);

void b43_rx(struct b43_wldev *dev, struct sk_buff *skb, const void *_rxhdr);

void b43_handle_txstatus(struct b43_wldev *dev,
			 const struct b43_txstatus *status);

void b43_handle_hwtxstatus(struct b43_wldev *dev,
			   const struct b43_hwtxstatus *hw);

void b43_tx_suspend(struct b43_wldev *dev);
void b43_tx_resume(struct b43_wldev *dev);

#define B43_NR_QOSPARMS		22
enum {
	B43_QOSPARM_TXOP = 0,
	B43_QOSPARM_CWMIN,
	B43_QOSPARM_CWMAX,
	B43_QOSPARM_CWCUR,
	B43_QOSPARM_AIFS,
	B43_QOSPARM_BSLOTS,
	B43_QOSPARM_REGGAP,
	B43_QOSPARM_STATUS,
};
void b43_qos_init(struct b43_wldev *dev);

/* Helper functions for converting the key-table index from "firmware-format"
 * to "raw-format" and back. The firmware API changed for this at some revision.
 * We need to account for that here. */
static inline int b43_new_kidx_api(struct b43_wldev *dev)
{
	/* FIXME: Not sure the change was at rev 351 */
	return (dev->fw.rev >= 351);
}
static inline u8 b43_kidx_to_fw(struct b43_wldev *dev, u8 raw_kidx)
{
	u8 firmware_kidx;
	if (b43_new_kidx_api(dev)) {
		firmware_kidx = raw_kidx;
	} else {
		if (raw_kidx >= 4)	/* Is per STA key? */
			firmware_kidx = raw_kidx - 4;
		else
			firmware_kidx = raw_kidx;	/* TX default key */
	}
	return firmware_kidx;
}
static inline u8 b43_kidx_to_raw(struct b43_wldev *dev, u8 firmware_kidx)
{
	u8 raw_kidx;
	if (b43_new_kidx_api(dev))
		raw_kidx = firmware_kidx;
	else
		raw_kidx = firmware_kidx + 4;	/* RX default keys or per STA keys */
	return raw_kidx;
}

#endif /* B43_XMIT_H_ */
