summaryrefslogblamecommitdiffstats
path: root/drivers/staging/agnx/agnx.h
blob: 3963d2597a1105da0e5a1a34eb361e4d913e2e5c (plain) (tree)
1
2
3
4
5


               

                     





































                                                                                     



                                          




                                             
                                                


























































                                                                 
                                                                                

                                               
                                   


                           




































                                                                           
#ifndef AGNX_H_
#define AGNX_H_

#include <linux/io.h>

#include "xmit.h"

#define PFX				KBUILD_MODNAME ": "

static inline u32 agnx_read32(void __iomem *mem_region, u32 offset)
{
	return ioread32(mem_region + offset);
}

static inline void agnx_write32(void __iomem *mem_region, u32 offset, u32 val)
{
	iowrite32(val, mem_region + offset);
}

/* static const struct ieee80211_rate agnx_rates_80211b[] = { */
/* 	{ .rate = 10, */
/* 	  .val = 0xa, */
/* 	  .flags = IEEE80211_RATE_CCK }, */
/* 	{ .rate = 20, */
/* 	  .val = 0x14, */
/* 	  .hw_value = -0x14, */
/* 	  .flags = IEEE80211_RATE_CCK_2 }, */
/* 	{ .rate = 55, */
/* 	  .val = 0x37, */
/* 	  .val2 = -0x37, */
/* 	  .flags = IEEE80211_RATE_CCK_2 }, */
/* 	{ .rate = 110, */
/* 	  .val = 0x6e, */
/* 	  .val2 = -0x6e, */
/* 	  .flags = IEEE80211_RATE_CCK_2 } */
/* }; */


static const struct ieee80211_rate agnx_rates_80211g[] = {
/* 	{ .bitrate = 10, .hw_value = 1, .flags = IEEE80211_RATE_SHORT_PREAMBLE }, */
/* 	{ .bitrate = 20, .hw_value = 2, .flags = IEEE80211_RATE_SHORT_PREAMBLE }, */
/* 	{ .bitrate = 55, .hw_value = 3, .flags = IEEE80211_RATE_SHORT_PREAMBLE }, */
/* 	{ .bitrate = 110, .hw_value = 4, .flags = IEEE80211_RATE_SHORT_PREAMBLE }, */
	{ .bitrate = 10, .hw_value = 1, },
	{ .bitrate = 20, .hw_value = 2, },
	{ .bitrate = 55, .hw_value = 3, },
	{ .bitrate = 110, .hw_value = 4,},

	{ .bitrate = 60, .hw_value = 0xB, },
	{ .bitrate = 90, .hw_value = 0xF, },
	{ .bitrate = 120, .hw_value = 0xA },
	{ .bitrate = 180, .hw_value = 0xE, },
/*	{ .bitrate = 240, .hw_value = 0xd, }, */
	{ .bitrate = 360, .hw_value = 0xD, },
	{ .bitrate = 480, .hw_value = 0x8, },
	{ .bitrate = 540, .hw_value = 0xC, },
};

static const struct ieee80211_channel agnx_channels[] = {
	{ .center_freq = 2412, .hw_value = 1, },
	{ .center_freq = 2417, .hw_value = 2, },
	{ .center_freq = 2422, .hw_value = 3, },
	{ .center_freq = 2427, .hw_value = 4, },
	{ .center_freq = 2432, .hw_value = 5, },
	{ .center_freq = 2437, .hw_value = 6, },
	{ .center_freq = 2442, .hw_value = 7, },
	{ .center_freq = 2447, .hw_value = 8, },
	{ .center_freq = 2452, .hw_value = 9, },
	{ .center_freq = 2457, .hw_value = 10, },
	{ .center_freq = 2462, .hw_value = 11, },
	{ .center_freq = 2467, .hw_value = 12, },
	{ .center_freq = 2472, .hw_value = 13, },
	{ .center_freq = 2484, .hw_value = 14, },
};

#define NUM_DRIVE_MODES	2
/* Agnx operate mode */
enum {
	AGNX_MODE_80211A,
	AGNX_MODE_80211A_OOB,
	AGNX_MODE_80211A_MIMO,
	AGNX_MODE_80211B_SHORT,
	AGNX_MODE_80211B_LONG,
	AGNX_MODE_80211G,
	AGNX_MODE_80211G_OOB,
	AGNX_MODE_80211G_MIMO,
};

enum {
	AGNX_UNINIT,
	AGNX_START,
	AGNX_STOP,
};

struct agnx_priv {
	struct pci_dev *pdev;
	struct ieee80211_hw *hw;

	spinlock_t lock;
	struct mutex mutex;
	unsigned int init_status;

	void __iomem *ctl;	/* pointer to base ram address */
	void __iomem *data;	/* pointer to mem region #2 */

	struct agnx_ring rx;
	struct agnx_ring txm;
	struct agnx_ring txd;

	/* Need volatile? */
	u32 irq_status;

	struct delayed_work periodic_work; /* Periodic tasks like recalibrate */
	struct ieee80211_low_level_stats stats;

	/* unsigned int phymode; */
	int mode;
	int channel;
	u8 bssid[ETH_ALEN];

	u8 mac_addr[ETH_ALEN];
	u8 revid;

	struct ieee80211_supported_band band;
};


#define AGNX_CHAINS_MAX	6
#define AGNX_PERIODIC_DELAY 60000 /* unit: ms */
#define LOCAL_STAID	0	/* the station entry for the card itself */
#define BSSID_STAID	1	/* the station entry for the bsssid AP */
#define	spi_delay()	udelay(40)
#define eeprom_delay()	udelay(40)
#define	routing_table_delay()	udelay(50)

/* PDU pool MEM region #2 */
#define AGNX_PDUPOOL		0x40000	/* PDU pool */
#define AGNX_PDUPOOL_SIZE	0x8000	/* PDU pool size*/
#define AGNX_PDU_TX_WQ		0x41000	/* PDU list TX workqueue */
#define AGNX_PDU_FREE		0x41800	/* Free Pool */
#define PDU_SIZE		0x80	/* Free Pool node size */
#define PDU_FREE_CNT		0xd0 /* Free pool node count */


/* RF stuffs */
extern void rf_chips_init(struct agnx_priv *priv);
extern void spi_rc_write(void __iomem *mem_region, u32 chip_ids, u32 sw);
extern void calibrate_oscillator(struct agnx_priv *priv);
extern void do_calibration(struct agnx_priv *priv);
extern void antenna_calibrate(struct agnx_priv *priv);
extern void __antenna_calibrate(struct agnx_priv *priv);
extern void print_offsets(struct agnx_priv *priv);
extern int agnx_set_channel(struct agnx_priv *priv, unsigned int channel);


#endif /* AGNX_H_ */