summaryrefslogtreecommitdiff
path: root/cleopatre/devkit/mt7601udrv/include/ap_diversity.h
diff options
context:
space:
mode:
authorFisher Cheng2013-05-24 16:54:08 +0800
committerJulien Lacour2013-10-01 12:12:48 +0200
commit8c1eb022607c0aba81d93b961abbfb47a2dcc325 (patch)
tree13b1cd55172e93b3d1e5baa7141ba259fd71b0af /cleopatre/devkit/mt7601udrv/include/ap_diversity.h
parent9e4d9d72dcac9686f1b4720e46e3bb88f6375a1e (diff)
cleo/devkit: add MTK MT7601U drv source code, refs #4011
- Enable Wireless LAN and Wireless extension in linux26.config
Diffstat (limited to 'cleopatre/devkit/mt7601udrv/include/ap_diversity.h')
-rw-r--r--cleopatre/devkit/mt7601udrv/include/ap_diversity.h142
1 files changed, 142 insertions, 0 deletions
diff --git a/cleopatre/devkit/mt7601udrv/include/ap_diversity.h b/cleopatre/devkit/mt7601udrv/include/ap_diversity.h
new file mode 100644
index 0000000000..30ba044c10
--- /dev/null
+++ b/cleopatre/devkit/mt7601udrv/include/ap_diversity.h
@@ -0,0 +1,142 @@
+/***************************************************************************
+ * Ralink Tech Inc.
+ * 4F, No. 2 Technology 5th Rd.
+ * Science-based Industrial Park
+ * Hsin-chu, Taiwan, R.O.C.
+ *
+ * (c) Copyright 2002, Ralink Technology, Inc.
+ *
+ * All rights reserved. Ralink's source code is an unpublished work and the
+ * use of a copyright notice does not imply otherwise. This source code
+ * contains confidential trade secret material of Ralink Tech. Any attemp
+ * or participation in deciphering, decoding, reverse engineering or in any
+ * way altering the source code is stricitly prohibited, unless the prior
+ * written consent of Ralink Technology, Inc. is obtained.
+ ***************************************************************************
+
+ Module Name:
+ ap_diversity.c
+
+ Abstract:
+
+ Revision History:
+ Who When What
+ -------- ---------- ----------------------------
+ YY Huang 06-10-2008 Init for RT3052.
+*/
+
+#ifndef _AP_DIVERSITY_H_
+#define _AP_DIVERSITY_H_
+
+#include "rtmp.h"
+
+#define ADDBGPRINT(format,args...) do{if(atomic_read(&DEBUG_VERBOSE_MODE)) printk( format, ##args);}while(0)
+#define PROC_DIR "AntDiv"
+
+/*
+ * For shorter udelay().
+ * (ripped from rtmp.h)
+ */
+/*#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) {} */
+/* Read BBP register by register's ID. Generate PER to test BA */
+#define RTMP_BBP_IO_READ8_BY_REG_ID_SHORT_DELAY(_A, _I, _pV) \
+{ \
+ BBP_CSR_CFG_STRUC BbpCsr; \
+ int i, k; \
+ if ((_A)->bPCIclkOff == FALSE) \
+ { \
+ for (i=0; i<MAX_BUSY_COUNT; i++) \
+ { \
+ RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word);\
+ if (BbpCsr.field.Busy == BUSY) \
+ continue; \
+ BbpCsr.word = 0; \
+ BbpCsr.field.fRead = 1; \
+ BbpCsr.field.BBP_RW_MODE = 1; \
+ BbpCsr.field.Busy = 1; \
+ BbpCsr.field.RegNum = _I; \
+ RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word);\
+ AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0, FALSE); \
+ RTMPusecDelay(10); \
+ for (k=0; k<MAX_BUSY_COUNT; k++) \
+ { \
+ RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
+ if (BbpCsr.field.Busy == IDLE) \
+ break; \
+ else \
+ printk("MCU busy\n"); \
+ } \
+ if ((BbpCsr.field.Busy == IDLE) && \
+ (BbpCsr.field.RegNum == _I)) \
+ { \
+ *(_pV) = (UCHAR)BbpCsr.field.Value; \
+ break; \
+ } \
+ } \
+ if (BbpCsr.field.Busy == BUSY) \
+ { \
+ DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", _I, BbpCsr.word)); \
+ *(_pV) = (_A)->BbpWriteLatch[_I]; \
+ RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word);\
+ BbpCsr.field.Busy = 0; \
+ RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word);\
+ } \
+ } \
+}
+
+
+/*
+ * proc fs related macros.
+ */
+#define CREATE_PROC_ENTRY(x) \
+ if ((pProc##x = create_proc_entry(#x, 0, pProcDir))){ \
+ pProc##x->read_proc = (read_proc_t*)&x##Read; \
+ pProc##x->write_proc = (write_proc_t*)&x##Write; \
+ } \
+
+#define IMPLEMENT_PROC_ENTRY(x,y,z) \
+static struct proc_dir_entry *pProc##x; \
+IMPLEMENT_PROC_ENTRY_READ(x,y,z) \
+IMPLEMENT_PROC_ENTRY_WRITE(x,y,z)
+
+#define IMPLEMENT_PROC_ENTRY_READ(x,y,z) \
+static INT x##Read(char *page, char **start, off_t off, \
+ int count, int *eof, void *data){ \
+ INT len; \
+ sprintf(page, "%d\n", atomic_read(&x)); \
+ len = strlen(page) + 1; \
+ *eof = 1; \
+ return len; \
+}
+#define IMPLEMENT_PROC_ENTRY_WRITE(x,y,z) \
+static INT x##Write(struct file *file, const char *buffer, \
+ unsigned long count, void *data){ \
+ CHAR tmp[32];INT tmp_val; \
+ if (count > 32) count = 32; \
+ memset(tmp, 0, 32); \
+ if (copy_from_user(tmp, buffer, count)) \
+ return -EFAULT; \
+ tmp_val = simple_strtol(tmp, 0, 10); \
+ if(tmp_val > z || tmp_val < y) \
+ return -EFAULT; \
+ atomic_set(&x, (int)tmp_val); \
+ return count; \
+}
+#define DESTORY_PROC_ENTRY(x) if (pProc##x) remove_proc_entry(#x, pProcDir);
+
+/*
+ * function prototype
+ */
+VOID RT3XXX_AntDiversity_Init(
+ IN RTMP_ADAPTER *pAd);
+
+VOID RT3XXX_AntDiversity_Fini(
+ IN RTMP_ADAPTER *pAd);
+
+VOID AntDiversity_Update_Rssi_Sample(
+ IN RTMP_ADAPTER *pAd,
+ IN RSSI_SAMPLE *pRssi,
+ IN RXWI_STRUC *pRxWI);
+
+
+#endif