1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 #ifndef _BRCM_PUB_H_
  18 #define _BRCM_PUB_H_
  19 
  20 #include <linux/bcma/bcma.h>
  21 #include <brcmu_wifi.h>
  22 #include "types.h"
  23 #include "defs.h"
  24 
  25 #define BRCMS_NUMRATES  16      
  26 
  27 
  28 #define PHY_TYPE_A      0       
  29 #define PHY_TYPE_G      2       
  30 #define PHY_TYPE_N      4       
  31 #define PHY_TYPE_LP     5       
  32 #define PHY_TYPE_SSN    6       
  33 #define PHY_TYPE_LCN    8       
  34 #define PHY_TYPE_LCNXN  9       
  35 #define PHY_TYPE_HT     7       
  36 
  37 
  38 #define BRCMS_10_MHZ    10      
  39 #define BRCMS_20_MHZ    20      
  40 #define BRCMS_40_MHZ    40      
  41 
  42 #define BRCMS_RSSI_MINVAL       -200    
  43 #define BRCMS_RSSI_NO_SIGNAL    -91     
  44 #define BRCMS_RSSI_VERY_LOW     -80     
  45 #define BRCMS_RSSI_LOW          -70     
  46 #define BRCMS_RSSI_GOOD         -68     
  47 #define BRCMS_RSSI_VERY_GOOD    -58     
  48 #define BRCMS_RSSI_EXCELLENT    -57     
  49 
  50 
  51 
  52 
  53 #define BRCMS_TXPWR_MAX         (127)   
  54 
  55 
  56 #define BRCMS_RATE_FLAG 0x80    
  57 #define BRCMS_RATE_MASK 0x7f    
  58 
  59 
  60 #define ANT_RX_DIV_FORCE_0      0       
  61 #define ANT_RX_DIV_FORCE_1      1       
  62 #define ANT_RX_DIV_START_1      2       
  63 #define ANT_RX_DIV_START_0      3       
  64 #define ANT_RX_DIV_ENABLE       3       
  65 
  66 #define ANT_RX_DIV_DEF          ANT_RX_DIV_START_0
  67 
  68 
  69 
  70 #define ANT_TX_FORCE_0          0
  71 
  72 #define ANT_TX_FORCE_1          1
  73 
  74 #define ANT_TX_LAST_RX          3
  75 
  76 #define ANT_TX_DEF              3
  77 
  78 
  79 
  80 #define TXCHAIN_DEF             0x1
  81 
  82 #define TXCHAIN_DEF_NPHY        0x3
  83 
  84 #define TXCHAIN_DEF_HTPHY       0x7
  85 
  86 #define RXCHAIN_DEF             0x1
  87 
  88 #define RXCHAIN_DEF_NPHY        0x3
  89 
  90 #define RXCHAIN_DEF_HTPHY       0x7
  91 
  92 #define ANTSWITCH_NONE          0
  93 
  94 #define ANTSWITCH_TYPE_1        1
  95 
  96 #define ANTSWITCH_TYPE_2        2
  97 
  98 #define ANTSWITCH_TYPE_3        3
  99 
 100 #define RXBUFSZ         PKTBUFSZ
 101 
 102 #define MAX_STREAMS_SUPPORTED   4       
 103 
 104 struct brcm_rateset {
 105         
 106         u32 count;
 107         
 108         u8 rates[WL_NUMRATES];
 109 };
 110 
 111 struct brcms_c_rateset {
 112         uint count;             
 113          
 114         u8 rates[BRCMS_NUMRATES];
 115         u8 htphy_membership;    
 116         u8 mcs[MCSSET_LEN];     
 117 };
 118 
 119 
 120 
 121 
 122 #define AMPDU_DEF_MPDU_DENSITY  6       
 123 
 124 
 125 struct brcms_bss_info {
 126         u8 BSSID[ETH_ALEN];     
 127         u16 flags;              
 128         u8 SSID_len;            
 129         u8 SSID[32];            
 130         s16 RSSI;               
 131         s16 SNR;                
 132         u16 beacon_period;      
 133         u16 chanspec;   
 134         struct brcms_c_rateset rateset; 
 135 };
 136 
 137 #define MAC80211_PROMISC_BCNS   (1 << 0)
 138 #define MAC80211_SCAN           (1 << 1)
 139 
 140 
 141 
 142 
 143 
 144 struct brcms_pub {
 145         struct brcms_c_info *wlc;
 146         struct ieee80211_hw *ieee_hw;
 147         struct scb_ampdu *global_ampdu;
 148         uint mac80211_state;
 149         uint unit;              
 150         uint corerev;           
 151         struct si_pub *sih;     
 152         bool up;                
 153         bool hw_off;            
 154         bool hw_up;             
 155         bool _piomode;          
 156         uint _nbands;           
 157         uint now;               
 158 
 159         bool delayed_down;      
 160         bool associated;        
 161         
 162         bool _ampdu;            
 163         u8 _n_enab;             
 164 
 165         u8 cur_etheraddr[ETH_ALEN];     
 166 
 167         u32 radio_disabled;     
 168 
 169         u16 boardrev;   
 170         u8 sromrev;             
 171         char srom_ccode[BRCM_CNTRY_BUF_SZ];     
 172         u32 boardflags; 
 173         u32 boardflags2;        
 174         bool phy_11ncapable;    
 175 
 176         struct wl_cnt *_cnt;    
 177         struct dentry *dbgfs_dir;
 178 };
 179 
 180 enum wlc_par_id {
 181         IOV_MPC = 1,
 182         IOV_RTSTHRESH,
 183         IOV_QTXPOWER,
 184         IOV_BCN_LI_BCN          
 185 };
 186 
 187 
 188 
 189 
 190 
 191 
 192 #define ENAB_1x1        0x01
 193 #define ENAB_2x2        0x02
 194 #define ENAB_3x3        0x04
 195 #define ENAB_4x4        0x08
 196 #define SUPPORT_11N     (ENAB_1x1|ENAB_2x2)
 197 #define SUPPORT_HT      (ENAB_1x1|ENAB_2x2|ENAB_3x3)
 198 
 199 
 200 #define AMPDU_AGG_HOST  1
 201 
 202 
 203 #define BRCMS_PROT_G_SPEC               1       
 204 #define BRCMS_PROT_G_OVR                2       
 205 #define BRCMS_PROT_G_USER               3       
 206 #define BRCMS_PROT_OVERLAP      4       
 207 #define BRCMS_PROT_N_USER               10      
 208 #define BRCMS_PROT_N_CFG                11      
 209 #define BRCMS_PROT_N_CFG_OVR    12      
 210 #define BRCMS_PROT_N_NONGF      13      
 211 #define BRCMS_PROT_N_NONGF_OVR  14      
 212 #define BRCMS_PROT_N_PAM_OVR    15      
 213 #define BRCMS_PROT_N_OBSS               16      
 214 
 215 
 216 
 217 
 218 
 219 
 220 
 221 
 222 
 223 
 224 
 225 
 226 
 227 
 228 
 229 
 230 
 231 
 232 
 233 
 234 
 235 
 236 
 237 
 238 
 239 
 240 
 241 
 242 
 243 
 244 
 245 
 246 
 247 #define GMODE_LEGACY_B          0
 248 #define GMODE_AUTO              1
 249 #define GMODE_ONLY              2
 250 #define GMODE_B_DEFERRED        3
 251 #define GMODE_PERFORMANCE       4
 252 #define GMODE_LRS               5
 253 #define GMODE_MAX               6
 254 
 255 
 256 #define HIGHEST_SINGLE_STREAM_MCS       7
 257 
 258 #define MAXBANDS                2       
 259 
 260 
 261 #define ANT_SELCFG_MAX          4
 262 
 263 struct brcms_antselcfg {
 264         u8 ant_config[ANT_SELCFG_MAX];  
 265         u8 num_antcfg;  
 266 };
 267 
 268 
 269 struct brcms_c_info *brcms_c_attach(struct brcms_info *wl,
 270                                     struct bcma_device *core, uint unit,
 271                                     bool piomode, uint *perr);
 272 uint brcms_c_detach(struct brcms_c_info *wlc);
 273 int brcms_c_up(struct brcms_c_info *wlc);
 274 uint brcms_c_down(struct brcms_c_info *wlc);
 275 
 276 bool brcms_c_chipmatch(struct bcma_device *core);
 277 void brcms_c_init(struct brcms_c_info *wlc, bool mute_tx);
 278 void brcms_c_reset(struct brcms_c_info *wlc);
 279 
 280 void brcms_c_intrson(struct brcms_c_info *wlc);
 281 u32 brcms_c_intrsoff(struct brcms_c_info *wlc);
 282 void brcms_c_intrsrestore(struct brcms_c_info *wlc, u32 macintmask);
 283 bool brcms_c_intrsupd(struct brcms_c_info *wlc);
 284 bool brcms_c_isr(struct brcms_c_info *wlc);
 285 bool brcms_c_dpc(struct brcms_c_info *wlc, bool bounded);
 286 bool brcms_c_sendpkt_mac80211(struct brcms_c_info *wlc, struct sk_buff *sdu,
 287                               struct ieee80211_hw *hw);
 288 bool brcms_c_aggregatable(struct brcms_c_info *wlc, u8 tid);
 289 void brcms_c_protection_upd(struct brcms_c_info *wlc, uint idx, int val);
 290 int brcms_c_get_header_len(void);
 291 void brcms_c_set_addrmatch(struct brcms_c_info *wlc, int match_reg_offset,
 292                            const u8 *addr);
 293 void brcms_c_wme_setparams(struct brcms_c_info *wlc, u16 aci,
 294                            const struct ieee80211_tx_queue_params *arg,
 295                            bool suspend);
 296 struct brcms_pub *brcms_c_pub(struct brcms_c_info *wlc);
 297 void brcms_c_ampdu_flush(struct brcms_c_info *wlc, struct ieee80211_sta *sta,
 298                          u16 tid);
 299 void brcms_c_ampdu_tx_operational(struct brcms_c_info *wlc, u8 tid,
 300                                   u8 ba_wsize, uint max_rx_ampdu_bytes);
 301 int brcms_c_module_register(struct brcms_pub *pub, const char *name,
 302                             struct brcms_info *hdl,
 303                             int (*down_fn)(void *handle));
 304 int brcms_c_module_unregister(struct brcms_pub *pub, const char *name,
 305                               struct brcms_info *hdl);
 306 void brcms_c_suspend_mac_and_wait(struct brcms_c_info *wlc);
 307 void brcms_c_enable_mac(struct brcms_c_info *wlc);
 308 void brcms_c_associate_upd(struct brcms_c_info *wlc, bool state);
 309 void brcms_c_scan_start(struct brcms_c_info *wlc);
 310 void brcms_c_scan_stop(struct brcms_c_info *wlc);
 311 int brcms_c_get_curband(struct brcms_c_info *wlc);
 312 int brcms_c_set_channel(struct brcms_c_info *wlc, u16 channel);
 313 int brcms_c_set_rate_limit(struct brcms_c_info *wlc, u16 srl, u16 lrl);
 314 void brcms_c_get_current_rateset(struct brcms_c_info *wlc,
 315                                  struct brcm_rateset *currs);
 316 int brcms_c_set_rateset(struct brcms_c_info *wlc, struct brcm_rateset *rs);
 317 int brcms_c_set_beacon_period(struct brcms_c_info *wlc, u16 period);
 318 u16 brcms_c_get_phy_type(struct brcms_c_info *wlc, int phyidx);
 319 void brcms_c_set_shortslot_override(struct brcms_c_info *wlc,
 320                                     s8 sslot_override);
 321 void brcms_c_set_beacon_listen_interval(struct brcms_c_info *wlc, u8 interval);
 322 u64 brcms_c_tsf_get(struct brcms_c_info *wlc);
 323 void brcms_c_tsf_set(struct brcms_c_info *wlc, u64 tsf);
 324 int brcms_c_set_tx_power(struct brcms_c_info *wlc, int txpwr);
 325 int brcms_c_get_tx_power(struct brcms_c_info *wlc);
 326 bool brcms_c_check_radio_disabled(struct brcms_c_info *wlc);
 327 void brcms_c_mute(struct brcms_c_info *wlc, bool on);
 328 bool brcms_c_tx_flush_completed(struct brcms_c_info *wlc);
 329 void brcms_c_start_station(struct brcms_c_info *wlc, u8 *addr);
 330 void brcms_c_start_ap(struct brcms_c_info *wlc, u8 *addr, const u8 *bssid,
 331                       u8 *ssid, size_t ssid_len);
 332 void brcms_c_start_adhoc(struct brcms_c_info *wlc, u8 *addr);
 333 void brcms_c_update_beacon(struct brcms_c_info *wlc);
 334 void brcms_c_set_new_beacon(struct brcms_c_info *wlc, struct sk_buff *beacon,
 335                             u16 tim_offset, u16 dtim_period);
 336 void brcms_c_set_new_probe_resp(struct brcms_c_info *wlc,
 337                                 struct sk_buff *probe_resp);
 338 void brcms_c_enable_probe_resp(struct brcms_c_info *wlc, bool enable);
 339 void brcms_c_set_ssid(struct brcms_c_info *wlc, u8 *ssid, size_t ssid_len);
 340 
 341 #endif