175df20e0385198e80439bfc33c001fcecf094622Lars Lindley/*
275df20e0385198e80439bfc33c001fcecf094622Lars Lindley * ==================================================================
375df20e0385198e80439bfc33c001fcecf094622Lars Lindley * MTO.H
475df20e0385198e80439bfc33c001fcecf094622Lars Lindley *
575df20e0385198e80439bfc33c001fcecf094622Lars Lindley * Copyright (c) 2003 Winbond Electronics Corp. All rights reserved.
675df20e0385198e80439bfc33c001fcecf094622Lars Lindley * ==================================================================
775df20e0385198e80439bfc33c001fcecf094622Lars Lindley */
866101de10957e07a6fd0365d5af9adf650246d14Pavel Machek#ifndef __MTO_H__
966101de10957e07a6fd0365d5af9adf650246d14Pavel Machek#define __MTO_H__
1066101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
1180aba53616a5f2f97adf386a2a3ccd5fb0dbfdd6Pekka Enberg#include <linux/types.h>
1280aba53616a5f2f97adf386a2a3ccd5fb0dbfdd6Pekka Enberg
1364328c8711d72794446bbafe23890468786424ccPekka Enbergstruct wbsoft_priv;
1464328c8711d72794446bbafe23890468786424ccPekka Enberg
1566101de10957e07a6fd0365d5af9adf650246d14Pavel Machek#define MTO_PREAMBLE_LONG               WLAN_PREAMBLE_TYPE_LONG
1666101de10957e07a6fd0365d5af9adf650246d14Pavel Machek#define MTO_PREAMBLE_SHORT              WLAN_PREAMBLE_TYPE_SHORT
1766101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
1875df20e0385198e80439bfc33c001fcecf094622Lars Lindley/* Defines the parameters used in the MAC Throughput Optimization algorithm */
19a95c69cfe44d96489777f9eda8c2005963730befPekka Enbergstruct wb35_mto_params {
2075df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u32	TxFlowCount; /* to judge what kind the tx flow(sparse or busy) is */
2166101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
2275df20e0385198e80439bfc33c001fcecf094622Lars Lindley	/* --------- DTO threshold parameters ------------- */
2375df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u16	DTO_PeriodicCheckCycle;
2475df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u16	DTO_RssiThForAntDiv;
2566101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
2675df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u16	DTO_TxCountThForCalcNewRate;
2775df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u16	DTO_TxRateIncTh;
2866101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
2975df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u16	DTO_TxRateDecTh;
3075df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u16	DTO_TxRateEqTh;
3166101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
3275df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u16	DTO_TxRateBackOff;
3375df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u16	DTO_TxRetryRateReduce;
3466101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
3575df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u16	DTO_TxPowerIndex;		/* 0 ~ 31 */
3675df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u16	reserved_1;
3775df20e0385198e80439bfc33c001fcecf094622Lars Lindley	/* ------------------------------------------------ */
3866101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
3975df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u8	PowerChangeEnable;
4075df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u8	AntDiversityEnable;
4175df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u8	CCA_Mode;
4275df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u8	CCA_Mode_Setup;
4375df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u8	Preamble_Type;
4475df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u8	PreambleChangeEnable;
4566101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
4675df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u8	DataRateLevel;
4775df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u8	DataRateChangeEnable;
4875df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u8	FragThresholdLevel;
4975df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u8	FragThresholdChangeEnable;
5066101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
5175df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u16	RTSThreshold;
5275df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u16	RTSThreshold_Setup;
5366101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
5475df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u32	AvgIdleSlot;
5575df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u32	Pr_Interf;
5675df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u32	AvgGapBtwnInterf;
5766101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
5875df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u8	RTSChangeEnable;
5975df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u8	Ant_sel;
6075df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u8	aging_timeout;
6175df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u8	reserved_2;
6266101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
6375df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u32	Cnt_Ant[2];
6475df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u32	SQ_Ant[2];
6566101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
6675df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u8	FallbackRateLevel;
6775df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u8	OfdmRateLevel;
6866101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
6975df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u8	RatePolicy;
7075df20e0385198e80439bfc33c001fcecf094622Lars Lindley	u8	reserved_3[3];
7166101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
7275df20e0385198e80439bfc33c001fcecf094622Lars Lindley	/* For RSSI turning */
7375df20e0385198e80439bfc33c001fcecf094622Lars Lindley	s32	RSSI_high;
7475df20e0385198e80439bfc33c001fcecf094622Lars Lindley	s32	RSSI_low;
75a95c69cfe44d96489777f9eda8c2005963730befPekka Enberg};
7666101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
7766101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
7875df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_DATA()		(adapter->sMtoPara)
7975df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_HAL()		(&adapter->sHwData)
8075df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_SET_PREAMBLE_TYPE(x) /* Turbo mark LM_PREAMBLE_TYPE(&pcore_data->lm_data) = (x) */
8175df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_ENABLE		(adapter->sLocalPara.TxRateMode == RATE_AUTO)
8275df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_TXPOWER_FROM_EEPROM	(adapter->sHwData.PowerIndexFromEEPROM)
8375df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define LOCAL_ANTENNA_NO()	(adapter->sLocalPara.bAntennaNo)
8475df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define LOCAL_IS_CONNECTED()	(adapter->sLocalPara.wConnectedSTAindex != 0)
8575df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_INITTXRATE_MODE	(adapter->sHwData.SoftwareSet&0x2) /* bit 1 */
8666101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
8775df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_POWER_CHANGE_ENABLE()	MTO_DATA().PowerChangeEnable
8875df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_CCA_MODE()			MTO_DATA().CCA_Mode
8975df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_CCA_MODE_SETUP()		MTO_DATA().CCA_Mode_Setup
9075df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_PREAMBLE_TYPE()		MTO_DATA().Preamble_Type
9175df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_PREAMBLE_CHANGE_ENABLE()	MTO_DATA().PreambleChangeEnable
9266101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
9375df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_RATE_LEVEL()		MTO_DATA().DataRateLevel
9466101de10957e07a6fd0365d5af9adf650246d14Pavel Machek#define MTO_OFDM_RATE_LEVEL()		MTO_DATA().OfdmRateLevel
9575df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_RATE_CHANGE_ENABLE()	MTO_DATA().DataRateChangeEnable
9675df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_FRAG_TH_LEVEL()		MTO_DATA().FragThresholdLevel
9775df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_FRAG_CHANGE_ENABLE()	MTO_DATA().FragThresholdChangeEnable
9875df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_RTS_THRESHOLD()		MTO_DATA().RTSThreshold
9975df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_RTS_CHANGE_ENABLE()		MTO_DATA().RTSChangeEnable
10075df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_RTS_THRESHOLD_SETUP()	MTO_DATA().RTSThreshold_Setup
10166101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
10275df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_AVG_IDLE_SLOT()		MTO_DATA().AvgIdleSlot
10375df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_PR_INTERF()			MTO_DATA().Pr_Interf
10475df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_AVG_GAP_BTWN_INTERF()	MTO_DATA().AvgGapBtwnInterf
10566101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
10675df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_CNT_ANT(x)			MTO_DATA().Cnt_Ant[(x)]
10775df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_SQ_ANT(x)			MTO_DATA().SQ_Ant[(x)]
10875df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_AGING_TIMEOUT()		MTO_DATA().aging_timeout
10966101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
11075df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_TXFLOWCOUNT()		MTO_DATA().TxFlowCount
11166101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
11275df20e0385198e80439bfc33c001fcecf094622Lars Lindley/* --------- DTO threshold parameters ------------- */
11366101de10957e07a6fd0365d5af9adf650246d14Pavel Machek#define	MTOPARA_PERIODIC_CHECK_CYCLE()		MTO_DATA().DTO_PeriodicCheckCycle
11466101de10957e07a6fd0365d5af9adf650246d14Pavel Machek#define	MTOPARA_RSSI_TH_FOR_ANTDIV()		MTO_DATA().DTO_RssiThForAntDiv
11566101de10957e07a6fd0365d5af9adf650246d14Pavel Machek#define	MTOPARA_TXCOUNT_TH_FOR_CALC_RATE()	MTO_DATA().DTO_TxCountThForCalcNewRate
11666101de10957e07a6fd0365d5af9adf650246d14Pavel Machek#define	MTOPARA_TXRATE_INC_TH()			MTO_DATA().DTO_TxRateIncTh
11766101de10957e07a6fd0365d5af9adf650246d14Pavel Machek#define	MTOPARA_TXRATE_DEC_TH()			MTO_DATA().DTO_TxRateDecTh
11866101de10957e07a6fd0365d5af9adf650246d14Pavel Machek#define MTOPARA_TXRATE_EQ_TH()			MTO_DATA().DTO_TxRateEqTh
11966101de10957e07a6fd0365d5af9adf650246d14Pavel Machek#define	MTOPARA_TXRATE_BACKOFF()		MTO_DATA().DTO_TxRateBackOff
12066101de10957e07a6fd0365d5af9adf650246d14Pavel Machek#define	MTOPARA_TXRETRYRATE_REDUCE()		MTO_DATA().DTO_TxRetryRateReduce
12166101de10957e07a6fd0365d5af9adf650246d14Pavel Machek#define MTOPARA_TXPOWER_INDEX()			MTO_DATA().DTO_TxPowerIndex
12275df20e0385198e80439bfc33c001fcecf094622Lars Lindley/* ------------------------------------------------ */
12366101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
12466101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
12575df20e0385198e80439bfc33c001fcecf094622Lars Lindleyextern u16 MTO_Frag_Th_Tbl[];
12666101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
12775df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_DATA_RATE()			MTO_Data_Rate_Tbl[MTO_RATE_LEVEL()]
12875df20e0385198e80439bfc33c001fcecf094622Lars Lindley#define MTO_FRAG_TH()			MTO_Frag_Th_Tbl[MTO_FRAG_TH_LEVEL()]
12966101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
13064328c8711d72794446bbafe23890468786424ccPekka Enbergextern void MTO_Init(struct wbsoft_priv *);
13164328c8711d72794446bbafe23890468786424ccPekka Enbergextern void MTO_PeriodicTimerExpired(struct wbsoft_priv *);
13264328c8711d72794446bbafe23890468786424ccPekka Enbergextern void MTO_SetDTORateRange(struct wbsoft_priv *, u8 *, u8);
13357a944435fd0c56ffde42288d8515020b2859e30Pekka Enbergextern u8 MTO_GetTxRate(struct wbsoft_priv *adapter, u32 fpdu_len);
13457a944435fd0c56ffde42288d8515020b2859e30Pekka Enbergextern u8 MTO_GetTxFallbackRate(struct wbsoft_priv *adapter);
13557a944435fd0c56ffde42288d8515020b2859e30Pekka Enbergextern void MTO_SetTxCount(struct wbsoft_priv *adapter, u8 t0, u8 index);
13664328c8711d72794446bbafe23890468786424ccPekka Enberg
13775df20e0385198e80439bfc33c001fcecf094622Lars Lindley#endif /* __MTO_H__ */
13866101de10957e07a6fd0365d5af9adf650246d14Pavel Machek
139