This source file includes following definitions.
- is_11b_rate
- is_ofdm_rate
- is_11bg_rate
- is_ofdm_ext_rate
- is_hif_ind
- is_hif_conf
- hif_align_size
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 #ifndef _KS_HOSTIF_H_
  10 #define _KS_HOSTIF_H_
  11 
  12 #include <linux/compiler.h>
  13 #include <linux/ieee80211.h>
  14 
  15 
  16 
  17 
  18 #define HIF_DATA_REQ            0xE001
  19 #define HIF_DATA_IND            0xE801
  20 #define HIF_MIB_GET_REQ         0xE002
  21 #define HIF_MIB_GET_CONF        0xE802
  22 #define HIF_MIB_SET_REQ         0xE003
  23 #define HIF_MIB_SET_CONF        0xE803
  24 #define HIF_POWER_MGMT_REQ      0xE004
  25 #define HIF_POWER_MGMT_CONF     0xE804
  26 #define HIF_START_REQ           0xE005
  27 #define HIF_START_CONF          0xE805
  28 #define HIF_CONNECT_IND         0xE806
  29 #define HIF_STOP_REQ            0xE006
  30 #define HIF_STOP_CONF           0xE807
  31 #define HIF_PS_ADH_SET_REQ      0xE007
  32 #define HIF_PS_ADH_SET_CONF     0xE808
  33 #define HIF_INFRA_SET_REQ       0xE008
  34 #define HIF_INFRA_SET_CONF      0xE809
  35 #define HIF_ADH_SET_REQ         0xE009
  36 #define HIF_ADH_SET_CONF        0xE80A
  37 #define HIF_AP_SET_REQ          0xE00A
  38 #define HIF_AP_SET_CONF         0xE80B
  39 #define HIF_ASSOC_INFO_IND      0xE80C
  40 #define HIF_MIC_FAILURE_REQ     0xE00B
  41 #define HIF_MIC_FAILURE_CONF    0xE80D
  42 #define HIF_SCAN_REQ            0xE00C
  43 #define HIF_SCAN_CONF           0xE80E
  44 #define HIF_PHY_INFO_REQ        0xE00D
  45 #define HIF_PHY_INFO_CONF       0xE80F
  46 #define HIF_SLEEP_REQ           0xE00E
  47 #define HIF_SLEEP_CONF          0xE810
  48 #define HIF_PHY_INFO_IND        0xE811
  49 #define HIF_SCAN_IND            0xE812
  50 #define HIF_INFRA_SET2_REQ      0xE00F
  51 #define HIF_INFRA_SET2_CONF     0xE813
  52 #define HIF_ADH_SET2_REQ        0xE010
  53 #define HIF_ADH_SET2_CONF       0xE814
  54 
  55 #define HIF_REQ_MAX             0xE010
  56 
  57 
  58 
  59 
  60 
  61 
  62 struct hostif_hdr {
  63         __le16 size;
  64         __le16 event;
  65 } __packed;
  66 
  67 struct hostif_data_request {
  68         struct hostif_hdr header;
  69         __le16 auth_type;
  70 #define TYPE_DATA 0x0000
  71 #define TYPE_AUTH 0x0001
  72         __le16 reserved;
  73         u8 data[0];
  74 } __packed;
  75 
  76 #define TYPE_PMK1 0x0001
  77 #define TYPE_GMK1 0x0002
  78 #define TYPE_GMK2 0x0003
  79 
  80 #define CHANNEL_LIST_MAX_SIZE 14
  81 struct channel_list {
  82         u8 size;
  83         u8 body[CHANNEL_LIST_MAX_SIZE];
  84         u8 pad;
  85 } __packed;
  86 
  87 
  88 
  89 
  90 
  91 
  92 
  93 
  94 
  95 
  96 
  97 
  98 
  99 
 100 
 101 
 102 
 103 
 104 
 105 
 106 
 107 
 108 
 109 
 110 
 111 
 112 
 113 
 114 
 115 
 116 
 117 
 118 
 119 
 120 
 121 
 122 
 123 
 124 
 125 
 126 
 127 
 128 
 129 
 130 
 131 enum mib_attribute {
 132         DOT11_MAC_ADDRESS                 = 0x21010100,
 133         DOT11_PRODUCT_VERSION             = 0x31024100,
 134         DOT11_RTS_THRESHOLD               = 0x21020100,
 135         DOT11_FRAGMENTATION_THRESHOLD     = 0x21050100,
 136         DOT11_PRIVACY_INVOKED             = 0x15010100,
 137         DOT11_WEP_DEFAULT_KEY_ID          = 0x15020100,
 138         DOT11_WEP_DEFAULT_KEY_VALUE1      = 0x13020101,
 139         DOT11_WEP_DEFAULT_KEY_VALUE2      = 0x13020102,
 140         DOT11_WEP_DEFAULT_KEY_VALUE3      = 0x13020103,
 141         DOT11_WEP_DEFAULT_KEY_VALUE4      = 0x13020104,
 142         DOT11_WEP_LIST                    = 0x13020100,
 143         DOT11_DESIRED_SSID                = 0x11090100,
 144         DOT11_CURRENT_CHANNEL             = 0x45010100,
 145         DOT11_OPERATION_RATE_SET          = 0x11110100,
 146         LOCAL_AP_SEARCH_INTERVAL          = 0xF1010100,
 147         LOCAL_CURRENTADDRESS              = 0xF1050100,
 148         LOCAL_MULTICAST_ADDRESS           = 0xF1060100,
 149         LOCAL_MULTICAST_FILTER            = 0xF1060200,
 150         LOCAL_SEARCHED_AP_LIST            = 0xF1030100,
 151         LOCAL_LINK_AP_STATUS              = 0xF1040100,
 152         LOCAL_PACKET_STATISTICS           = 0xF1020100,
 153         LOCAL_AP_SCAN_LIST_TYPE_SET       = 0xF1030200,
 154         DOT11_RSN_ENABLED                 = 0x15070100,
 155         LOCAL_RSN_MODE                    = 0x56010100,
 156         DOT11_RSN_CONFIG_MULTICAST_CIPHER = 0x51040100,
 157         DOT11_RSN_CONFIG_UNICAST_CIPHER   = 0x52020100,
 158         DOT11_RSN_CONFIG_AUTH_SUITE       = 0x53020100,
 159         DOT11_RSN_CONFIG_VERSION          = 0x51020100,
 160         LOCAL_RSN_CONFIG_ALL              = 0x5F010100,
 161         DOT11_PMK_TSC                     = 0x55010100,
 162         DOT11_GMK1_TSC                    = 0x55010101,
 163         DOT11_GMK2_TSC                    = 0x55010102,
 164         DOT11_GMK3_TSC                    = 0x55010103,
 165         LOCAL_PMK                         = 0x58010100,
 166         LOCAL_REGION                      = 0xF10A0100,
 167         LOCAL_WPS_ENABLE                  = 0xF10B0100,
 168         LOCAL_WPS_PROBE_REQ               = 0xF10C0100,
 169         LOCAL_GAIN                        = 0xF10D0100,
 170         LOCAL_EEPROM_SUM                  = 0xF10E0100
 171 };
 172 
 173 struct hostif_mib_get_request {
 174         struct hostif_hdr header;
 175         __le32 mib_attribute;
 176 } __packed;
 177 
 178 
 179 
 180 
 181 
 182 
 183 
 184 
 185 
 186 enum mib_data_type {
 187         MIB_VALUE_TYPE_NULL = 0,
 188         MIB_VALUE_TYPE_INT,
 189         MIB_VALUE_TYPE_BOOL,
 190         MIB_VALUE_TYPE_COUNT32,
 191         MIB_VALUE_TYPE_OSTRING
 192 };
 193 
 194 struct hostif_mib_value {
 195         __le16 size;
 196         __le16 type;
 197         u8 body[0];
 198 } __packed;
 199 
 200 struct hostif_mib_get_confirm_t {
 201         struct hostif_hdr header;
 202         __le32 mib_status;
 203 #define MIB_SUCCESS    0
 204 #define MIB_INVALID    1
 205 #define MIB_READ_ONLY  2
 206 #define MIB_WRITE_ONLY 3
 207         __le32 mib_attribute;
 208         struct hostif_mib_value mib_value;
 209 } __packed;
 210 
 211 struct hostif_mib_set_request_t {
 212         struct hostif_hdr header;
 213         __le32 mib_attribute;
 214         struct hostif_mib_value mib_value;
 215 } __packed;
 216 
 217 struct hostif_power_mgmt_request {
 218         struct hostif_hdr header;
 219         __le32 mode;
 220 #define POWER_ACTIVE  1
 221 #define POWER_SAVE    2
 222         __le32 wake_up;
 223 #define SLEEP_FALSE 0
 224 #define SLEEP_TRUE  1   
 225         __le32 receive_dtims;
 226 #define DTIM_FALSE 0
 227 #define DTIM_TRUE  1
 228 } __packed;
 229 
 230 enum power_mgmt_mode_type {
 231         POWER_MGMT_ACTIVE,
 232         POWER_MGMT_SAVE1,
 233         POWER_MGMT_SAVE2
 234 };
 235 
 236 #define RESULT_SUCCESS            0
 237 #define RESULT_INVALID_PARAMETERS 1
 238 #define RESULT_NOT_SUPPORTED      2
 239 
 240 #define RESULT_ALREADY_RUNNING    7
 241 
 242 struct hostif_start_request {
 243         struct hostif_hdr header;
 244         __le16 mode;
 245 #define MODE_PSEUDO_ADHOC   0
 246 #define MODE_INFRASTRUCTURE 1
 247 #define MODE_AP             2   
 248 #define MODE_ADHOC          3
 249 } __packed;
 250 
 251 struct ssid {
 252         u8 size;
 253         u8 body[IEEE80211_MAX_SSID_LEN];
 254         u8 ssid_pad;
 255 } __packed;
 256 
 257 #define RATE_SET_MAX_SIZE 16
 258 struct rate_set8 {
 259         u8 size;
 260         u8 body[8];
 261         u8 rate_pad;
 262 } __packed;
 263 
 264 struct fh_parms {
 265         __le16 dwell_time;
 266         u8 hop_set;
 267         u8 hop_pattern;
 268         u8 hop_index;
 269 } __packed;
 270 
 271 struct ds_parms {
 272         u8 channel;
 273 } __packed;
 274 
 275 struct cf_parms {
 276         u8 count;
 277         u8 period;
 278         __le16 max_duration;
 279         __le16 dur_remaining;
 280 } __packed;
 281 
 282 struct ibss_parms {
 283         __le16 atim_window;
 284 } __packed;
 285 
 286 struct rsn_t {
 287         u8 size;
 288 #define RSN_BODY_SIZE 64
 289         u8 body[RSN_BODY_SIZE];
 290 } __packed;
 291 
 292 struct erp_params_t {
 293         u8 erp_info;
 294 } __packed;
 295 
 296 struct rate_set16 {
 297         u8 size;
 298         u8 body[16];
 299         u8 rate_pad;
 300 } __packed;
 301 
 302 struct ap_info {
 303         u8 bssid[6];    
 304         u8 rssi;        
 305         u8 sq;  
 306         u8 noise;       
 307         u8 pad0;        
 308         __le16 beacon_period;   
 309         __le16 capability;      
 310         u8 frame_type;  
 311         u8 ch_info;     
 312         __le16 body_size;       
 313         u8 body[1024];  
 314         
 315 } __packed;
 316 
 317 struct link_ap_info {
 318         u8 bssid[6];    
 319         u8 rssi;        
 320         u8 sq;  
 321         u8 noise;       
 322         u8 pad0;        
 323         __le16 beacon_period;   
 324         __le16 capability;      
 325         struct rate_set8 rate_set;      
 326         struct fh_parms fh_parameter;   
 327         struct ds_parms ds_parameter;   
 328         struct cf_parms cf_parameter;   
 329         struct ibss_parms ibss_parameter;       
 330         struct erp_params_t erp_parameter;      
 331         u8 pad1;        
 332         struct rate_set8 ext_rate_set;  
 333         u8 DTIM_period; 
 334         u8 rsn_mode;    
 335 #define RSN_MODE_NONE   0
 336 #define RSN_MODE_WPA    1
 337 #define RSN_MODE_WPA2   2
 338         struct {
 339                 u8 size;        
 340                 u8 body[128];   
 341         } __packed rsn;
 342 } __packed;
 343 
 344 #define RESULT_CONNECT    0
 345 #define RESULT_DISCONNECT 1
 346 
 347 struct hostif_stop_request {
 348         struct hostif_hdr header;
 349 } __packed;
 350 
 351 #define D_11B_ONLY_MODE         0
 352 #define D_11G_ONLY_MODE         1
 353 #define D_11BG_COMPATIBLE_MODE  2
 354 #define D_11A_ONLY_MODE         3
 355 
 356 #define CTS_MODE_FALSE  0
 357 #define CTS_MODE_TRUE   1
 358 
 359 struct hostif_request {
 360         __le16 phy_type;
 361         __le16 cts_mode;
 362         __le16 scan_type;
 363         __le16 capability;
 364         struct rate_set16 rate_set;
 365 } __packed;
 366 
 367 
 368 
 369 
 370 
 371 
 372 
 373 
 374 struct hostif_ps_adhoc_set_request {
 375         struct hostif_hdr header;
 376         struct hostif_request request;
 377         __le16 channel;
 378 } __packed;
 379 
 380 #define AUTH_TYPE_OPEN_SYSTEM 0
 381 #define AUTH_TYPE_SHARED_KEY  1
 382 
 383 
 384 
 385 
 386 
 387 
 388 
 389 
 390 struct hostif_infrastructure_set_request {
 391         struct hostif_hdr header;
 392         struct hostif_request request;
 393         struct ssid ssid;
 394         __le16 beacon_lost_count;
 395         __le16 auth_type;
 396         struct channel_list channel_list;
 397         u8 bssid[ETH_ALEN];
 398 } __packed;
 399 
 400 
 401 
 402 
 403 
 404 
 405 
 406 
 407 struct hostif_adhoc_set_request {
 408         struct hostif_hdr header;
 409         struct hostif_request request;
 410         struct ssid ssid;
 411         __le16 channel;
 412 } __packed;
 413 
 414 
 415 
 416 
 417 
 418 
 419 
 420 
 421 struct hostif_adhoc_set2_request {
 422         struct hostif_hdr header;
 423         struct hostif_request request;
 424         __le16 reserved;
 425         struct ssid ssid;
 426         struct channel_list channel_list;
 427         u8 bssid[ETH_ALEN];
 428 } __packed;
 429 
 430 struct association_request {
 431         u8 type;
 432         u8 pad;
 433         __le16 capability;
 434         __le16 listen_interval;
 435         u8 ap_address[6];
 436         __le16 req_ies_size;
 437 } __packed;
 438 
 439 struct association_response {
 440         u8 type;
 441         u8 pad;
 442         __le16 capability;
 443         __le16 status;
 444         __le16 association_id;
 445         __le16 resp_ies_size;
 446 } __packed;
 447 
 448 struct hostif_bss_scan_request {
 449         struct hostif_hdr header;
 450         u8 scan_type;
 451 #define ACTIVE_SCAN  0
 452 #define PASSIVE_SCAN 1
 453         u8 pad[3];
 454         __le32 ch_time_min;
 455         __le32 ch_time_max;
 456         struct channel_list channel_list;
 457         struct ssid ssid;
 458 } __packed;
 459 
 460 struct hostif_phy_information_request {
 461         struct hostif_hdr header;
 462         __le16 type;
 463 #define NORMAL_TYPE     0
 464 #define TIME_TYPE       1
 465         __le16 time;    
 466 } __packed;
 467 
 468 enum sleep_mode_type {
 469         SLP_ACTIVE,
 470         SLP_SLEEP
 471 };
 472 
 473 struct hostif_sleep_request {
 474         struct hostif_hdr header;
 475 } __packed;
 476 
 477 struct hostif_mic_failure_request {
 478         struct hostif_hdr header;
 479         __le16 failure_count;
 480         __le16 timer;
 481 } __packed;
 482 
 483 #define BASIC_RATE      0x80
 484 #define RATE_MASK       0x7F
 485 
 486 #define TX_RATE_AUTO      0xff
 487 #define TX_RATE_1M_FIXED  0
 488 #define TX_RATE_2M_FIXED  1
 489 #define TX_RATE_1_2M_AUTO 2
 490 #define TX_RATE_5M_FIXED  3
 491 #define TX_RATE_11M_FIXED 4
 492 
 493 #define TX_RATE_FULL_AUTO       0
 494 #define TX_RATE_11_AUTO         1
 495 #define TX_RATE_11B_AUTO        2
 496 #define TX_RATE_11BG_AUTO       3
 497 #define TX_RATE_MANUAL_AUTO     4
 498 #define TX_RATE_FIXED           5
 499 
 500 
 501 #define TX_RATE_1M      (u8)(10 / 5)    
 502 #define TX_RATE_2M      (u8)(20 / 5)    
 503 #define TX_RATE_5M      (u8)(55 / 5)    
 504 #define TX_RATE_11M     (u8)(110 / 5)   
 505 
 506 
 507 #define TX_RATE_6M      (u8)(60 / 5)    
 508 #define TX_RATE_12M     (u8)(120 / 5)   
 509 #define TX_RATE_24M     (u8)(240 / 5)   
 510 #define TX_RATE_9M      (u8)(90 / 5)
 511 #define TX_RATE_18M     (u8)(180 / 5)
 512 #define TX_RATE_36M     (u8)(360 / 5)
 513 #define TX_RATE_48M     (u8)(480 / 5)
 514 #define TX_RATE_54M     (u8)(540 / 5)
 515 
 516 static inline bool is_11b_rate(u8 rate)
 517 {
 518         return (((rate & RATE_MASK) == TX_RATE_1M) ||
 519                 ((rate & RATE_MASK) == TX_RATE_2M) ||
 520                 ((rate & RATE_MASK) == TX_RATE_5M) ||
 521                 ((rate & RATE_MASK) == TX_RATE_11M));
 522 }
 523 
 524 static inline bool is_ofdm_rate(u8 rate)
 525 {
 526         return (((rate & RATE_MASK) == TX_RATE_6M)  ||
 527                 ((rate & RATE_MASK) == TX_RATE_12M) ||
 528                 ((rate & RATE_MASK) == TX_RATE_24M) ||
 529                 ((rate & RATE_MASK) == TX_RATE_9M)  ||
 530                 ((rate & RATE_MASK) == TX_RATE_18M) ||
 531                 ((rate & RATE_MASK) == TX_RATE_36M) ||
 532                 ((rate & RATE_MASK) == TX_RATE_48M) ||
 533                 ((rate & RATE_MASK) == TX_RATE_54M));
 534 }
 535 
 536 static inline bool is_11bg_rate(u8 rate)
 537 {
 538         return (is_11b_rate(rate) || is_ofdm_rate(rate));
 539 }
 540 
 541 static inline bool is_ofdm_ext_rate(u8 rate)
 542 {
 543         return (((rate & RATE_MASK) == TX_RATE_9M)  ||
 544                 ((rate & RATE_MASK) == TX_RATE_18M) ||
 545                 ((rate & RATE_MASK) == TX_RATE_36M) ||
 546                 ((rate & RATE_MASK) == TX_RATE_48M) ||
 547                 ((rate & RATE_MASK) == TX_RATE_54M));
 548 }
 549 
 550 enum connect_status_type {
 551         CONNECT_STATUS,
 552         DISCONNECT_STATUS
 553 };
 554 
 555 enum preamble_type {
 556         LONG_PREAMBLE,
 557         SHORT_PREAMBLE
 558 };
 559 
 560 enum multicast_filter_type {
 561         MCAST_FILTER_MCAST,
 562         MCAST_FILTER_MCASTALL,
 563         MCAST_FILTER_PROMISC,
 564 };
 565 
 566 #define NIC_MAX_MCAST_LIST 32
 567 
 568 #define HIF_EVENT_MASK 0xE800
 569 
 570 static inline bool is_hif_ind(unsigned short event)
 571 {
 572         return (((event & HIF_EVENT_MASK) == HIF_EVENT_MASK) &&
 573                 (((event & ~HIF_EVENT_MASK) == 0x0001) ||
 574                  ((event & ~HIF_EVENT_MASK) == 0x0006) ||
 575                  ((event & ~HIF_EVENT_MASK) == 0x000C) ||
 576                  ((event & ~HIF_EVENT_MASK) == 0x0011) ||
 577                  ((event & ~HIF_EVENT_MASK) == 0x0012)));
 578 }
 579 
 580 static inline bool is_hif_conf(unsigned short event)
 581 {
 582         return (((event & HIF_EVENT_MASK) == HIF_EVENT_MASK) &&
 583                 ((event & ~HIF_EVENT_MASK) > 0x0000) &&
 584                 ((event & ~HIF_EVENT_MASK) < 0x0012) &&
 585                 !is_hif_ind(event));
 586 }
 587 
 588 #ifdef __KERNEL__
 589 
 590 #include "ks_wlan.h"
 591 
 592 
 593 int hostif_data_request(struct ks_wlan_private *priv, struct sk_buff *skb);
 594 void hostif_receive(struct ks_wlan_private *priv, unsigned char *p,
 595                     unsigned int size);
 596 void hostif_sme_enqueue(struct ks_wlan_private *priv, u16 event);
 597 int hostif_init(struct ks_wlan_private *priv);
 598 void hostif_exit(struct ks_wlan_private *priv);
 599 int ks_wlan_hw_tx(struct ks_wlan_private *priv, void *p, unsigned long size,
 600                   void (*complete_handler)(struct ks_wlan_private *priv,
 601                                            struct sk_buff *skb),
 602                   struct sk_buff *skb);
 603 void send_packet_complete(struct ks_wlan_private *priv, struct sk_buff *skb);
 604 
 605 void ks_wlan_hw_wakeup_request(struct ks_wlan_private *priv);
 606 int ks_wlan_hw_power_save(struct ks_wlan_private *priv);
 607 
 608 #define KS7010_SIZE_ALIGNMENT   32
 609 
 610 static inline size_t hif_align_size(size_t size)
 611 {
 612         return ALIGN(size, KS7010_SIZE_ALIGNMENT);
 613 }
 614 
 615 #endif 
 616 
 617 #endif