1 /* 2 * Copyright (c) 2015 South Silicon Valley Microelectronics Inc. 3 * Copyright (c) 2015 iComm Corporation 4 * 5 * This program is free software: you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation, either version 3 of the License, or 8 * (at your option) any later version. 9 * This program is distributed in the hope that it will be useful, but 10 * WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 * See the GNU General Public License for more details. 13 * You should have received a copy of the GNU General Public License 14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 15 */ 16 17 #ifndef _DEV_TBL_H_ 18 #define _DEV_TBL_H_ 19 #include "ssv6200_configuration.h" 20 #include "drv_comm.h" 21 struct ssv6xxx_dev_table { 22 u32 address; 23 u32 data; 24 }; 25 #define ssv6200_phy_tbl phy_setting 26 #ifdef CONFIG_SSV_CABRIO_E 27 #define ssv6200_rf_tbl asic_rf_setting 28 #else 29 #undef ssv6200_rf_tbl 30 #define ssv6200_rf_tbl fpga_rf_setting 31 #endif 32 #define ACTION_DO_NOTHING 0 33 #define ACTION_UPDATE_NAV 1 34 #define ACTION_RESET_NAV 2 35 #define ACTION_SIGNAL_ACK 3 36 #define FRAME_ACCEPT 0 37 #define FRAME_DROP 1 38 #define SET_DEC_TBL(_type,_mask,_action,_drop) \ 39 (_type<<9| \ 40 _mask <<3| \ 41 _action<<1| \ 42 _drop) 43 #ifndef USE_GENERIC_DECI_TBL 44 u16 sta_deci_tbl[] = 45 { 46 SET_DEC_TBL(0x1e, 0x3e, ACTION_RESET_NAV, FRAME_DROP), 47 SET_DEC_TBL(0x18, 0x3e, ACTION_SIGNAL_ACK, FRAME_ACCEPT), 48 SET_DEC_TBL(0x1a, 0x3f, ACTION_SIGNAL_ACK, FRAME_DROP), 49 SET_DEC_TBL(0x10, 0x38, ACTION_DO_NOTHING, FRAME_DROP), 50 SET_DEC_TBL(0x25, 0x3f, ACTION_DO_NOTHING, FRAME_DROP), 51 SET_DEC_TBL(0x26, 0x36, ACTION_DO_NOTHING, FRAME_DROP), 52 SET_DEC_TBL(0x08, 0x3f, ACTION_DO_NOTHING, FRAME_ACCEPT), 53 SET_DEC_TBL(0x05, 0x3f, ACTION_SIGNAL_ACK, FRAME_ACCEPT), 54 SET_DEC_TBL(0x0b, 0x3f, ACTION_SIGNAL_ACK, FRAME_ACCEPT), 55 SET_DEC_TBL(0x01, 0x3d, ACTION_SIGNAL_ACK, FRAME_ACCEPT), 56 SET_DEC_TBL(0x20, 0x30, ACTION_SIGNAL_ACK, FRAME_ACCEPT), 57 SET_DEC_TBL(0x00, 0x00, ACTION_SIGNAL_ACK, FRAME_ACCEPT), 58 SET_DEC_TBL(0x00, 0x00, ACTION_DO_NOTHING, FRAME_DROP), 59 SET_DEC_TBL(0x00, 0x00, ACTION_UPDATE_NAV, FRAME_DROP), 60 SET_DEC_TBL(0x00, 0x00, ACTION_RESET_NAV, FRAME_DROP), 61 SET_DEC_TBL(0x00, 0x00, ACTION_SIGNAL_ACK, FRAME_DROP), 62 0x2008, 63 0x1001, 64 #if 0 65 0x8408, 66 0x1000, 67 #else 68 0x0808, 69 0x1040, 70 #endif 71 0x2008, 72 0x800E, 73 0x0BB8, 74 0x2B88, 75 0x0800, 76 }; 77 u16 ap_deci_tbl[] = 78 { 79 SET_DEC_TBL(0x1e, 0x3e, ACTION_RESET_NAV, FRAME_DROP), 80 SET_DEC_TBL(0x18, 0x3e, ACTION_SIGNAL_ACK, FRAME_ACCEPT), 81 SET_DEC_TBL(0x1a, 0x3f, ACTION_SIGNAL_ACK, FRAME_ACCEPT), 82 SET_DEC_TBL(0x10, 0x38, ACTION_DO_NOTHING, FRAME_DROP), 83 SET_DEC_TBL(0x25, 0x3f, ACTION_DO_NOTHING, FRAME_DROP), 84 SET_DEC_TBL(0x26, 0x36, ACTION_DO_NOTHING, FRAME_DROP), 85 SET_DEC_TBL(0x08, 0x3f, ACTION_DO_NOTHING, FRAME_DROP), 86 SET_DEC_TBL(0x20, 0x30, ACTION_DO_NOTHING, FRAME_DROP), 87 SET_DEC_TBL(0x00, 0x00, ACTION_DO_NOTHING, FRAME_ACCEPT), 88 SET_DEC_TBL(0x00, 0x00, ACTION_DO_NOTHING, FRAME_ACCEPT), 89 SET_DEC_TBL(0x20, 0x30, ACTION_SIGNAL_ACK, FRAME_ACCEPT), 90 SET_DEC_TBL(0x00, 0x00, ACTION_SIGNAL_ACK, FRAME_ACCEPT), 91 SET_DEC_TBL(0x00, 0x00, ACTION_DO_NOTHING, FRAME_DROP), 92 SET_DEC_TBL(0x00, 0x00, ACTION_UPDATE_NAV, FRAME_DROP), 93 SET_DEC_TBL(0x00, 0x00, ACTION_RESET_NAV, FRAME_DROP), 94 SET_DEC_TBL(0x00, 0x00, ACTION_SIGNAL_ACK, FRAME_DROP), 95 0x2008, 96 0x1001, 97 0x0888, 98 0x1040, 99 0x2008, 100 0x800E, 101 0x0800, 102 0x2008, 103 0x0800, 104 }; 105 #else 106 u16 generic_deci_tbl[] = 107 { 108 SET_DEC_TBL(0x1e, 0x3e, ACTION_RESET_NAV, FRAME_DROP), 109 SET_DEC_TBL(0x18, 0x3e, ACTION_SIGNAL_ACK, FRAME_ACCEPT), 110 SET_DEC_TBL(0x1a, 0x3f, ACTION_DO_NOTHING, FRAME_ACCEPT), 111 SET_DEC_TBL(0x10, 0x38, ACTION_DO_NOTHING, FRAME_DROP), 112 0, 113 0, 114 0, 115 SET_DEC_TBL(0x05, 0x3f, ACTION_SIGNAL_ACK, FRAME_ACCEPT), 116 SET_DEC_TBL(0x0b, 0x3f, ACTION_SIGNAL_ACK, FRAME_ACCEPT), 117 SET_DEC_TBL(0x01, 0x3d, ACTION_SIGNAL_ACK, FRAME_ACCEPT), 118 SET_DEC_TBL(0x00, 0x00, ACTION_DO_NOTHING, FRAME_ACCEPT), 119 SET_DEC_TBL(0x00, 0x00, ACTION_SIGNAL_ACK, FRAME_ACCEPT), 120 SET_DEC_TBL(0x00, 0x00, ACTION_DO_NOTHING, FRAME_DROP), 121 SET_DEC_TBL(0x00, 0x00, ACTION_UPDATE_NAV, FRAME_DROP), 122 SET_DEC_TBL(0x00, 0x00, ACTION_RESET_NAV, FRAME_DROP), 123 SET_DEC_TBL(0x00, 0x00, ACTION_SIGNAL_ACK, FRAME_DROP), 124 0x2008, 125 0x1001, 126 0x0400, 127 0x0400, 128 0x2000, 129 0x800E, 130 0x0800, 131 0x0B88, 132 0x0800, 133 }; 134 #endif 135 #define SET_PHY_INFO(_ctsdur,_ba_rate_idx,_ack_rate_idx,_llength_idx,_llength_enable) \ 136 (_ctsdur<<16| \ 137 _ba_rate_idx <<10| \ 138 _ack_rate_idx<<4| \ 139 _llength_idx<<1| \ 140 _llength_enable) 141 #define SET_PHY_L_LENGTH(_l_ba,_l_rts,_l_cts_ack) (_l_ba<<12|_l_rts<<6 |_l_cts_ack) 142 #ifdef CONFIG_SSV_CABRIO_E 143 static u32 phy_info_6051z[] = 144 { 145 0x18000000, 0x18000100, 0x18000200, 0x18000300, 0x18000140, 146 0x18000240, 0x18000340, 0x0C000001, 0x0C000101, 0x0C000201, 147 0x0C000301, 0x18000401, 0x18000501, 0x18000601, 0x18000701, 148 0x0C030002, 0x0C030102, 0x0C030202, 0x18030302, 0x18030402, 149 0x18030502, 0x18030602, 0x1C030702, 0x0C030082, 0x0C030182, 150 0x0C030282, 0x18030382, 0x18030482, 0x18030582, 0x18030682, 151 0x1C030782, 0x0C030042, 0x0C030142, 0x0C030242, 0x18030342, 152 0x18030442, 0x18030542, 0x18030642, 0x1C030742 153 }; 154 #endif 155 static u32 phy_info_tbl[] = 156 { 157 0x0C000000, 0x0C000100, 0x0C000200, 0x0C000300, 0x0C000140, 158 0x0C000240, 0x0C000340, 0x00000001, 0x00000101, 0x00000201, 159 0x00000301, 0x0C000401, 0x0C000501, 0x0C000601, 0x0C000701, 160 0x00030002, 0x00030102, 0x00030202, 0x0C030302, 0x0C030402, 161 0x0C030502, 0x0C030602, 0x10030702, 0x00030082, 0x00030182, 162 0x00030282, 0x0C030382, 0x0C030482, 0x0C030582, 0x0C030682, 163 0x10030782, 0x00030042, 0x00030142, 0x00030242, 0x0C030342, 164 0x0C030442, 0x0C030542, 0x0C030642, 0x10030742, 165 SET_PHY_INFO(314, 0, 0, 0, 0), 166 SET_PHY_INFO(258, 0, 1, 0, 0), 167 SET_PHY_INFO(223, 0, 1, 0, 0), 168 SET_PHY_INFO(213, 0, 1, 0, 0), 169 SET_PHY_INFO(162, 0, 4, 0, 0), 170 SET_PHY_INFO(127, 0, 4, 0, 0), 171 SET_PHY_INFO(117, 0, 4, 0, 0), 172 SET_PHY_INFO(60, 7, 7, 0, 0), 173 SET_PHY_INFO(52, 7, 7, 0, 0), 174 SET_PHY_INFO(48, 9, 9, 0, 0), 175 SET_PHY_INFO(44, 9, 9, 0, 0), 176 SET_PHY_INFO(44, 11, 11, 0, 0), 177 SET_PHY_INFO(40, 11, 11, 0, 0), 178 SET_PHY_INFO(40, 11, 11, 0, 0), 179 SET_PHY_INFO(40, 11, 11, 0, 0), 180 SET_PHY_INFO(76, 7, 7, 0, 1), 181 SET_PHY_INFO(64, 9, 9, 1, 1), 182 SET_PHY_INFO(60, 9, 9, 2, 1), 183 SET_PHY_INFO(60, 11, 11, 3, 1), 184 SET_PHY_INFO(56, 11, 11, 4, 1), 185 SET_PHY_INFO(56, 11, 11, 5, 1), 186 SET_PHY_INFO(56, 11, 11, 5, 1), 187 SET_PHY_INFO(56, 11, 11, 5, 1), 188 SET_PHY_INFO(76, 7, 7, 6, 1), 189 SET_PHY_INFO(64, 9, 9, 1, 1), 190 SET_PHY_INFO(60, 9, 9, 2, 1), 191 SET_PHY_INFO(60, 11, 11, 3, 1), 192 SET_PHY_INFO(56, 11, 11, 4, 1), 193 SET_PHY_INFO(56, 11, 11, 5, 1), 194 SET_PHY_INFO(56, 11, 11, 5, 1), 195 SET_PHY_INFO(56, 11, 11, 5, 1), 196 SET_PHY_INFO(64, 7, 7, 0, 0), 197 SET_PHY_INFO(52, 9, 9, 0, 0), 198 SET_PHY_INFO(48, 9, 9, 0, 0), 199 SET_PHY_INFO(48, 11, 11, 0, 0), 200 SET_PHY_INFO(44, 11, 11, 0, 0), 201 SET_PHY_INFO(44, 11, 11, 0, 0), 202 SET_PHY_INFO(44, 11, 11, 0, 0), 203 SET_PHY_INFO(44, 11, 11, 0, 0), 204 SET_PHY_L_LENGTH(50, 38, 35), 205 SET_PHY_L_LENGTH(35, 29, 26), 206 SET_PHY_L_LENGTH(29, 26, 23), 207 SET_PHY_L_LENGTH(26, 23, 23), 208 SET_PHY_L_LENGTH(23, 23, 20), 209 SET_PHY_L_LENGTH(23, 20, 20), 210 SET_PHY_L_LENGTH(47, 38, 35), 211 SET_PHY_L_LENGTH( 0, 0, 0), 212 }; 213 #endif 214