/*
* Copyright (c) 2015 South Silicon Valley Microelectronics Inc.
* Copyright (c) 2015 iComm Corporation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _DEV_TBL_H_
#define _DEV_TBL_H_
#include "ssv6200_configuration.h"
#include "drv_comm.h"
struct ssv6xxx_dev_table {
u32 address;
u32 data;
};
#define ssv6200_phy_tbl phy_setting
#ifdef CONFIG_SSV_CABRIO_E
#define ssv6200_rf_tbl asic_rf_setting
#else
#undef ssv6200_rf_tbl
#define ssv6200_rf_tbl fpga_rf_setting
#endif
#define ACTION_DO_NOTHING 0
#define ACTION_UPDATE_NAV 1
#define ACTION_RESET_NAV 2
#define ACTION_SIGNAL_ACK 3
#define FRAME_ACCEPT 0
#define FRAME_DROP 1
#define SET_DEC_TBL(_type,_mask,_action,_drop) \
(_type<<9| \
_mask <<3| \
_action<<1| \
_drop)
#ifndef USE_GENERIC_DECI_TBL
u16 sta_deci_tbl[] =
{
SET_DEC_TBL(0x1e, 0x3e, ACTION_RESET_NAV, FRAME_DROP),
SET_DEC_TBL(0x18, 0x3e, ACTION_SIGNAL_ACK, FRAME_ACCEPT),
SET_DEC_TBL(0x1a, 0x3f, ACTION_SIGNAL_ACK, FRAME_DROP),
SET_DEC_TBL(0x10, 0x38, ACTION_DO_NOTHING, FRAME_DROP),
SET_DEC_TBL(0x25, 0x3f, ACTION_DO_NOTHING, FRAME_DROP),
SET_DEC_TBL(0x26, 0x36, ACTION_DO_NOTHING, FRAME_DROP),
SET_DEC_TBL(0x08, 0x3f, ACTION_DO_NOTHING, FRAME_ACCEPT),
SET_DEC_TBL(0x05, 0x3f, ACTION_SIGNAL_ACK, FRAME_ACCEPT),
SET_DEC_TBL(0x0b, 0x3f, ACTION_SIGNAL_ACK, FRAME_ACCEPT),
SET_DEC_TBL(0x01, 0x3d, ACTION_SIGNAL_ACK, FRAME_ACCEPT),
SET_DEC_TBL(0x20, 0x30, ACTION_SIGNAL_ACK, FRAME_ACCEPT),
SET_DEC_TBL(0x00, 0x00, ACTION_SIGNAL_ACK, FRAME_ACCEPT),
SET_DEC_TBL(0x00, 0x00, ACTION_DO_NOTHING, FRAME_DROP),
SET_DEC_TBL(0x00, 0x00, ACTION_UPDATE_NAV, FRAME_DROP),
SET_DEC_TBL(0x00, 0x00, ACTION_RESET_NAV, FRAME_DROP),
SET_DEC_TBL(0x00, 0x00, ACTION_SIGNAL_ACK, FRAME_DROP),
0x2008,
0x1001,
#if 0
0x8408,
0x1000,
#else
0x0808,
0x1040,
#endif
0x2008,
0x800E,
0x0BB8,
0x2B88,
0x0800,
};
u16 ap_deci_tbl[] =
{
SET_DEC_TBL(0x1e, 0x3e, ACTION_RESET_NAV, FRAME_DROP),
SET_DEC_TBL(0x18, 0x3e, ACTION_SIGNAL_ACK, FRAME_ACCEPT),
SET_DEC_TBL(0x1a, 0x3f, ACTION_SIGNAL_ACK, FRAME_ACCEPT),
SET_DEC_TBL(0x10, 0x38, ACTION_DO_NOTHING, FRAME_DROP),
SET_DEC_TBL(0x25, 0x3f, ACTION_DO_NOTHING, FRAME_DROP),
SET_DEC_TBL(0x26, 0x36, ACTION_DO_NOTHING, FRAME_DROP),
SET_DEC_TBL(0x08, 0x3f, ACTION_DO_NOTHING, FRAME_DROP),
SET_DEC_TBL(0x20, 0x30, ACTION_DO_NOTHING, FRAME_DROP),
SET_DEC_TBL(0x00, 0x00, ACTION_DO_NOTHING, FRAME_ACCEPT),
SET_DEC_TBL(0x00, 0x00, ACTION_DO_NOTHING, FRAME_ACCEPT),
SET_DEC_TBL(0x20, 0x30, ACTION_SIGNAL_ACK, FRAME_ACCEPT),
SET_DEC_TBL(0x00, 0x00, ACTION_SIGNAL_ACK, FRAME_ACCEPT),
SET_DEC_TBL(0x00, 0x00, ACTION_DO_NOTHING, FRAME_DROP),
SET_DEC_TBL(0x00, 0x00, ACTION_UPDATE_NAV, FRAME_DROP),
SET_DEC_TBL(0x00, 0x00, ACTION_RESET_NAV, FRAME_DROP),
SET_DEC_TBL(0x00, 0x00, ACTION_SIGNAL_ACK, FRAME_DROP),
0x2008,
0x1001,
0x0888,
0x1040,
0x2008,
0x800E,
0x0800,
0x2008,
0x0800,
};
#else
u16 generic_deci_tbl[] =
{
SET_DEC_TBL(0x1e, 0x3e, ACTION_RESET_NAV, FRAME_DROP),
SET_DEC_TBL(0x18, 0x3e, ACTION_SIGNAL_ACK, FRAME_ACCEPT),
SET_DEC_TBL(0x1a, 0x3f, ACTION_DO_NOTHING, FRAME_ACCEPT),
SET_DEC_TBL(0x10, 0x38, ACTION_DO_NOTHING, FRAME_DROP),
0,
0,
0,
SET_DEC_TBL(0x05, 0x3f, ACTION_SIGNAL_ACK, FRAME_ACCEPT),
SET_DEC_TBL(0x0b, 0x3f, ACTION_SIGNAL_ACK, FRAME_ACCEPT),
SET_DEC_TBL(0x01, 0x3d, ACTION_SIGNAL_ACK, FRAME_ACCEPT),
SET_DEC_TBL(0x00, 0x00, ACTION_DO_NOTHING, FRAME_ACCEPT),
SET_DEC_TBL(0x00, 0x00, ACTION_SIGNAL_ACK, FRAME_ACCEPT),
SET_DEC_TBL(0x00, 0x00, ACTION_DO_NOTHING, FRAME_DROP),
SET_DEC_TBL(0x00, 0x00, ACTION_UPDATE_NAV, FRAME_DROP),
SET_DEC_TBL(0x00, 0x00, ACTION_RESET_NAV, FRAME_DROP),
SET_DEC_TBL(0x00, 0x00, ACTION_SIGNAL_ACK, FRAME_DROP),
0x2008,
0x1001,
0x0400,
0x0400,
0x2000,
0x800E,
0x0800,
0x0B88,
0x0800,
};
#endif
#define SET_PHY_INFO(_ctsdur,_ba_rate_idx,_ack_rate_idx,_llength_idx,_llength_enable) \
(_ctsdur<<16| \
_ba_rate_idx <<10| \
_ack_rate_idx<<4| \
_llength_idx<<1| \
_llength_enable)
#define SET_PHY_L_LENGTH(_l_ba,_l_rts,_l_cts_ack) (_l_ba<<12|_l_rts<<6 |_l_cts_ack)
#ifdef CONFIG_SSV_CABRIO_E
static u32 phy_info_6051z[] =
{
0x18000000, 0x18000100, 0x18000200, 0x18000300, 0x18000140,
0x18000240, 0x18000340, 0x0C000001, 0x0C000101, 0x0C000201,
0x0C000301, 0x18000401, 0x18000501, 0x18000601, 0x18000701,
0x0C030002, 0x0C030102, 0x0C030202, 0x18030302, 0x18030402,
0x18030502, 0x18030602, 0x1C030702, 0x0C030082, 0x0C030182,
0x0C030282, 0x18030382, 0x18030482, 0x18030582, 0x18030682,
0x1C030782, 0x0C030042, 0x0C030142, 0x0C030242, 0x18030342,
0x18030442, 0x18030542, 0x18030642, 0x1C030742
};
#endif
static u32 phy_info_tbl[] =
{
0x0C000000, 0x0C000100, 0x0C000200, 0x0C000300, 0x0C000140,
0x0C000240, 0x0C000340, 0x00000001, 0x00000101, 0x00000201,
0x00000301, 0x0C000401, 0x0C000501, 0x0C000601, 0x0C000701,
0x00030002, 0x00030102, 0x00030202, 0x0C030302, 0x0C030402,
0x0C030502, 0x0C030602, 0x10030702, 0x00030082, 0x00030182,
0x00030282, 0x0C030382, 0x0C030482, 0x0C030582, 0x0C030682,
0x10030782, 0x00030042, 0x00030142, 0x00030242, 0x0C030342,
0x0C030442, 0x0C030542, 0x0C030642, 0x10030742,
SET_PHY_INFO(314, 0, 0, 0, 0),
SET_PHY_INFO(258, 0, 1, 0, 0),
SET_PHY_INFO(223, 0, 1, 0, 0),
SET_PHY_INFO(213, 0, 1, 0, 0),
SET_PHY_INFO(162, 0, 4, 0, 0),
SET_PHY_INFO(127, 0, 4, 0, 0),
SET_PHY_INFO(117, 0, 4, 0, 0),
SET_PHY_INFO(60, 7, 7, 0, 0),
SET_PHY_INFO(52, 7, 7, 0, 0),
SET_PHY_INFO(48, 9, 9, 0, 0),
SET_PHY_INFO(44, 9, 9, 0, 0),
SET_PHY_INFO(44, 11, 11, 0, 0),
SET_PHY_INFO(40, 11, 11, 0, 0),
SET_PHY_INFO(40, 11, 11, 0, 0),
SET_PHY_INFO(40, 11, 11, 0, 0),
SET_PHY_INFO(76, 7, 7, 0, 1),
SET_PHY_INFO(64, 9, 9, 1, 1),
SET_PHY_INFO(60, 9, 9, 2, 1),
SET_PHY_INFO(60, 11, 11, 3, 1),
SET_PHY_INFO(56, 11, 11, 4, 1),
SET_PHY_INFO(56, 11, 11, 5, 1),
SET_PHY_INFO(56, 11, 11, 5, 1),
SET_PHY_INFO(56, 11, 11, 5, 1),
SET_PHY_INFO(76, 7, 7, 6, 1),
SET_PHY_INFO(64, 9, 9, 1, 1),
SET_PHY_INFO(60, 9, 9, 2, 1),
SET_PHY_INFO(60, 11, 11, 3, 1),
SET_PHY_INFO(56, 11, 11, 4, 1),
SET_PHY_INFO(56, 11, 11, 5, 1),
SET_PHY_INFO(56, 11, 11, 5, 1),
SET_PHY_INFO(56, 11, 11, 5, 1),
SET_PHY_INFO(64, 7, 7, 0, 0),
SET_PHY_INFO(52, 9, 9, 0, 0),
SET_PHY_INFO(48, 9, 9, 0, 0),
SET_PHY_INFO(48, 11, 11, 0, 0),
SET_PHY_INFO(44, 11, 11, 0, 0),
SET_PHY_INFO(44, 11, 11, 0, 0),
SET_PHY_INFO(44, 11, 11, 0, 0),
SET_PHY_INFO(44, 11, 11, 0, 0),
SET_PHY_L_LENGTH(50, 38, 35),
SET_PHY_L_LENGTH(35, 29, 26),
SET_PHY_L_LENGTH(29, 26, 23),
SET_PHY_L_LENGTH(26, 23, 23),
SET_PHY_L_LENGTH(23, 23, 20),
SET_PHY_L_LENGTH(23, 20, 20),
SET_PHY_L_LENGTH(47, 38, 35),
SET_PHY_L_LENGTH( 0, 0, 0),
};
#endif