blob: f24008626025731f718e22ec42a2a764a7b54204 [file] [edit]
/*
***************************************************************************
* Ralink Tech Inc.
* 4F, No. 2 Technology 5th Rd.
* Science-based Industrial Park
* Hsin-chu, Taiwan, R.O.C.
*
* (c) Copyright 2002-2004, 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:
wf_ple.h
Abstract:
Ralink Wireless Chip MAC related definition & structures
Revision History:
Who When What
-------- ---------- -------------------------------------
*/
#ifndef __WF_PLE_H__
#define __WF_PLE_H__
#if defined(_HIF_PCIE)
#define PLE_BASE 0x8000
#else
#define PLE_BASE 0x82060000
#endif
/* PLE Buffer Control Register */
#define PLE_PBUF_CTRL (PLE_BASE + 0x14)
#define PLE_TOTAL_PAGE_NUM_MASK (0xfff)
#define PLE_GET_TOTAL_PAGE_NUM(p) (((p) & 0xfff))
#define PLE_TOTAL_PAGE_CFG_MASK (0xf << 16)
#define PLE_GET_TOTAL_PAGE_CFG(p) (((p) & PSE_TOTAL_PAGE_CFG_MASK) >> 16)
#define PLE_PBUF_OFFSET_MASK (0xf << 20)
#define GET_PLE_PBUF_OFFSET(p) (((p) & PSE_PBUF_OFFSET_MASK) >> 20)
/* Release Control */
#define PLE_RELEASE_CTRL (PLE_BASE + 0x30)
#define PLE_NORMAL_TX_RLS_QID_MASK (0x1f)
#define GET_PLE_NORMAL_TX_RLS_QID(p) (((p) & GET_FIRST_FID_MASK))
#define PLE_NORMAL_TX_RLS_PID_MASK (0x3 << 6)
#define GET_PLE_NORMAL_TX_RLS_PID(p) (((p) & PLE_NORMAL_TX_RLS_PID_MASK) >> 6)
#define BCNx_RLS_QID_MASK (0x1f)
#define BCNx_RLS_PID_MASK (0x3)
#define SET_BCN0_RLS_QID(p) (((p) & BCNx_RLS_QID_MASK) << 16)
#define SET_BCN0_RLS_PID(p) (((p) & BCNx_RLS_PID_MASK) << 22)
#define SET_BCN1_RLS_QID(p) (((p) & BCNx_RLS_QID_MASK) << 24)
#define SET_BCN1_RLS_PID(p) (((p) & BCNx_RLS_PID_MASK) << 30)
#define PLE_GC (PLE_BASE)
#define PLE_INT_STS (PLE_BASE + 0x24)
#define PLE_INT_ERR_STS (PLE_BASE + 0x28)
/* HIF Report Control */
#define PLE_HIF_REPORT (PLE_BASE + 0x34)
/* CPU Interface get frame ID Control */
#define PLE_C_GET_FID_0 (PLE_BASE + 0x40)
/* CPU Interface get frame ID Control */
#define PLE_C_GET_FID_1 (PLE_BASE + 0x44)
#define PLE_C_EN_QUEUE_0 (PLE_BASE + 0x60)
#define PLE_C_EN_QUEUE_1 (PLE_BASE + 0x64)
#define PLE_C_EN_QUEUE_2 (PLE_BASE + 0x68)
#define PLE_C_DE_QUEUE_0 (PLE_BASE + 0x80)
#define PLE_C_DE_QUEUE_1 (PLE_BASE + 0x84)
#define PLE_C_DE_QUEUE_2 (PLE_BASE + 0x88)
#define PLE_C_DE_QUEUE_3 (PLE_BASE + 0x8c)
#define PLE_TO_N9_INT (PLE_BASE + 0xf0)
#define PLE_TO_N9_INT_TOGGLE_MASK 0x80000000
/* Queue Empty */
#define PLE_QUEUE_EMPTY (PLE_BASE + 0xb0)
#define PLE_AC0_QUEUE_EMPTY_0 (PLE_BASE + 0x300)
#define PLE_AC0_QUEUE_EMPTY_1 (PLE_BASE + 0x304)
#define PLE_AC0_QUEUE_EMPTY_2 (PLE_BASE + 0x308)
#define PLE_AC0_QUEUE_EMPTY_3 (PLE_BASE + 0x30c)
#define PLE_AC1_QUEUE_EMPTY_0 (PLE_BASE + 0x310)
#define PLE_AC1_QUEUE_EMPTY_1 (PLE_BASE + 0x314)
#define PLE_AC1_QUEUE_EMPTY_2 (PLE_BASE + 0x318)
#define PLE_AC1_QUEUE_EMPTY_3 (PLE_BASE + 0x31c)
#define PLE_AC2_QUEUE_EMPTY_0 (PLE_BASE + 0x320)
#define PLE_AC2_QUEUE_EMPTY_1 (PLE_BASE + 0x324)
#define PLE_AC2_QUEUE_EMPTY_2 (PLE_BASE + 0x328)
#define PLE_AC2_QUEUE_EMPTY_3 (PLE_BASE + 0x32c)
#define PLE_AC3_QUEUE_EMPTY_0 (PLE_BASE + 0x330)
#define PLE_AC3_QUEUE_EMPTY_1 (PLE_BASE + 0x334)
#define PLE_AC3_QUEUE_EMPTY_2 (PLE_BASE + 0x338)
#define PLE_AC3_QUEUE_EMPTY_3 (PLE_BASE + 0x33c)
#define PLE_STATION_PAUSE0 (PLE_BASE + 0x360)
#define PLE_STATION_PAUSE1 (PLE_BASE + 0x364)
#define PLE_STATION_PAUSE2 (PLE_BASE + 0x368)
#define PLE_STATION_PAUSE3 (PLE_BASE + 0x36C)
/* Page Flow Control */
#define PLE_FREEPG_CNT (PLE_BASE + 0x100)
#define PLE_FREEPG_HEAD_TAIL (PLE_BASE + 0x104)
#define PLE_PG_HIF_GROUP (PLE_BASE + 0x110)
#define PLE_HIF_PG_INFO (PLE_BASE + 0x114)
#define PLE_PG_CPU_GROUP (PLE_BASE + 0x150)
#define PLE_CPU_PG_INFO (PLE_BASE + 0x154)
/* Indirect path for read/write */
#define PLE_FL_QUE_CTRL_0 (PLE_BASE + 0x1b0)
#define PLE_FL_QUE_CTRL_1 (PLE_BASE + 0x1b4)
#define PLE_FL_QUE_CTRL_2 (PLE_BASE + 0x1b8)
#define PLE_FL_QUE_CTRL_3 (PLE_BASE + 0x1bc)
#define PLE_PL_QUE_CTRL_0 (PLE_BASE + 0x1c0)
/* Disable Station control */
#define DIS_STA_MAP0 (PLE_BASE + 0x260)
#define DIS_STA_MAP1 (PLE_BASE + 0x264)
#define DIS_STA_MAP2 (PLE_BASE + 0x268)
#define DIS_STA_MAP3 (PLE_BASE + 0x26c)
/* Station Pause control register */
#define STATION_PAUSE0 (PLE_BASE + 0x360)
#define STATION_PAUSE1 (PLE_BASE + 0x364)
#define STATION_PAUSE2 (PLE_BASE + 0x368)
#define STATION_PAUSE3 (PLE_BASE + 0x36c)
#define PLE_PEEK_CR_0 (PLE_BASE + 0x3d0)
#define PLE_PEEK_CR_OFFSET 0x4
#define PLE_PEEK_CR_NUM 12
/* VOW Ctrl */
#define VOW_RESET_DISABLE (1 << 26)
#define STA_MAX_DEFICIT_MASK (0x0000FFFF)
#define VOW_DBDC_BW_GROUP_CTRL (PLE_BASE + 0x2ec)
#define VOW_CONTROL (PLE_BASE + 0x370)
#define AIRTIME_DRR_SIZE (PLE_BASE + 0x374)
enum ENUM_UMAC_PORT {
ENUM_UMAC_HIF_PORT_0 = 0,
ENUM_UMAC_CPU_PORT_1 = 1,
ENUM_UMAC_LMAC_PORT_2 = 2,
ENUM_PLE_CTRL_PSE_PORT_3 = 3,
ENUM_UMAC_PSE_PLE_PORT_TOTAL_NUM = 4
};
/* N9 MCU QUEUE LIST */
enum ENUM_UMAC_CPU_P_QUEUE {
ENUM_UMAC_CTX_Q_0 = 0,
ENUM_UMAC_CTX_Q_1 = 1,
ENUM_UMAC_CTX_Q_2 = 2,
ENUM_UMAC_CTX_Q_3 = 3,
ENUM_UMAC_CRX = 0,
ENUM_UMAC_CIF_QUEUE_TOTAL_NUM = 4
};
/* LMAC PLE TX QUEUE LIST */
enum ENUM_UMAC_LMAC_PLE_TX_P_QUEUE {
ENUM_UMAC_LMAC_PLE_TX_Q_00 = 0x00,
ENUM_UMAC_LMAC_PLE_TX_Q_01 = 0x01,
ENUM_UMAC_LMAC_PLE_TX_Q_02 = 0x02,
ENUM_UMAC_LMAC_PLE_TX_Q_03 = 0x03,
ENUM_UMAC_LMAC_PLE_TX_Q_10 = 0x04,
ENUM_UMAC_LMAC_PLE_TX_Q_11 = 0x05,
ENUM_UMAC_LMAC_PLE_TX_Q_12 = 0x06,
ENUM_UMAC_LMAC_PLE_TX_Q_13 = 0x07,
ENUM_UMAC_LMAC_PLE_TX_Q_20 = 0x08,
ENUM_UMAC_LMAC_PLE_TX_Q_21 = 0x09,
ENUM_UMAC_LMAC_PLE_TX_Q_22 = 0x0a,
ENUM_UMAC_LMAC_PLE_TX_Q_23 = 0x0b,
ENUM_UMAC_LMAC_PLE_TX_Q_30 = 0x0c,
ENUM_UMAC_LMAC_PLE_TX_Q_31 = 0x0d,
ENUM_UMAC_LMAC_PLE_TX_Q_32 = 0x0e,
ENUM_UMAC_LMAC_PLE_TX_Q_33 = 0x0f,
ENUM_UMAC_LMAC_PLE_TX_Q_ALTX_0 = 0x10,
ENUM_UMAC_LMAC_PLE_TX_Q_BMC_0 = 0x11,
ENUM_UMAC_LMAC_PLE_TX_Q_BNC_0 = 0x12,
ENUM_UMAC_LMAC_PLE_TX_Q_PSMP_0 = 0x13,
ENUM_UMAC_LMAC_PLE_TX_Q_ALTX_1 = 0x14,
ENUM_UMAC_LMAC_PLE_TX_Q_BMC_1 = 0x15,
ENUM_UMAC_LMAC_PLE_TX_Q_BNC_1 = 0x16,
ENUM_UMAC_LMAC_PLE_TX_Q_PSMP_1 = 0x17,
ENUM_UMAC_LMAC_PLE_TX_Q_NAF = 0x18,
ENUM_UMAC_LMAC_PLE_TX_Q_NBCN = 0x19,
/* DE suggests not to use 0x1f, it's only for hw free queue */
ENUM_UMAC_LMAC_PLE_TX_Q_RELEASE = 0x1f,
ENUM_UMAC_LMAC_QUEUE_TOTAL_NUM = 24,
};
/* LMAC PLE For PSE Control P3 */
enum ENUM_UMAC_PLE_CTRL_P3_QUEUE {
ENUM_UMAC_PLE_CTRL_P3_Q_0X1E = 0x1e,
ENUM_UMAC_PLE_CTRL_P3_Q_0X1F = 0x1f,
ENUM_UMAC_PLE_CTRL_P3_TOTAL_NUM = 2
};
struct EMPTY_QUEUE_INFO {
int8_t *QueueName;
uint32_t Portid;
uint32_t Queueid;
};
#endif /* __WF_PLE_H__ */