root/drivers/staging/ks7010/ks_wlan.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. inc_txqhead
  2. inc_txqtail
  3. txq_has_space
  4. inc_rxqhead
  5. inc_rxqtail
  6. rxq_has_space
  7. txq_count
  8. rxq_count

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /*
   3  *   Driver for KeyStream IEEE802.11 b/g wireless LAN cards.
   4  *
   5  *   Copyright (C) 2006-2008 KeyStream Corp.
   6  *   Copyright (C) 2009 Renesas Technology Corp.
   7  */
   8 
   9 #ifndef _KS_WLAN_H
  10 #define _KS_WLAN_H
  11 
  12 #include <linux/atomic.h>
  13 #include <linux/circ_buf.h>
  14 #include <linux/completion.h>
  15 #include <linux/netdevice.h>
  16 #include <linux/sched.h>
  17 #include <linux/spinlock.h>
  18 #include <linux/wireless.h>
  19 
  20 struct ks_wlan_parameter {
  21         u8 operation_mode;
  22         u8 channel;
  23         u8 tx_rate;
  24         struct {
  25                 u8 size;
  26                 u8 body[16];
  27         } rate_set;
  28         u8 bssid[ETH_ALEN];
  29         struct {
  30                 u8 size;
  31                 u8 body[32 + 1];
  32         } ssid;
  33         u8 preamble;
  34         u8 power_mgmt;
  35         u32 scan_type;
  36 #define BEACON_LOST_COUNT_MAX 65535
  37         u32 beacon_lost_count;
  38         u32 rts;
  39         u32 fragment;
  40         u32 privacy_invoked;
  41         u32 wep_index;
  42         struct {
  43                 u8 size;
  44                 u8 val[13 * 2 + 1];
  45         } wep_key[4];
  46         u16 authenticate_type;
  47         u16 phy_type;
  48         u16 cts_mode;
  49         u16 phy_info_timer;
  50 };
  51 
  52 enum {
  53         DEVICE_STATE_OFF = 0,   /* this means hw_unavailable is != 0 */
  54         DEVICE_STATE_PREBOOT,   /* we are in a pre-boot state (empty RAM) */
  55         DEVICE_STATE_BOOT,      /* boot state (fw upload, run fw) */
  56         DEVICE_STATE_PREINIT,   /* pre-init state */
  57         DEVICE_STATE_INIT,      /* init state (restore MIB backup to device) */
  58         DEVICE_STATE_READY,     /* driver&device are in operational state */
  59         DEVICE_STATE_SLEEP      /* device in sleep mode */
  60 };
  61 
  62 /* SME flag */
  63 #define SME_MODE_SET        BIT(0)
  64 #define SME_RTS             BIT(1)
  65 #define SME_FRAG            BIT(2)
  66 #define SME_WEP_FLAG        BIT(3)
  67 #define SME_WEP_INDEX       BIT(4)
  68 #define SME_WEP_VAL1        BIT(5)
  69 #define SME_WEP_VAL2        BIT(6)
  70 #define SME_WEP_VAL3        BIT(7)
  71 #define SME_WEP_VAL4        BIT(8)
  72 #define SME_WEP_VAL_MASK    GENMASK(8, 5)
  73 #define SME_RSN             BIT(9)
  74 #define SME_RSN_MULTICAST   BIT(10)
  75 #define SME_RSN_UNICAST     BIT(11)
  76 #define SME_RSN_AUTH        BIT(12)
  77 
  78 #define SME_AP_SCAN         BIT(13)
  79 #define SME_MULTICAST       BIT(14)
  80 
  81 /* SME Event */
  82 enum {
  83         SME_START,
  84 
  85         SME_MULTICAST_REQUEST,
  86         SME_MACADDRESS_SET_REQUEST,
  87         SME_BSS_SCAN_REQUEST,
  88         SME_SET_FLAG,
  89         SME_SET_TXKEY,
  90         SME_SET_KEY1,
  91         SME_SET_KEY2,
  92         SME_SET_KEY3,
  93         SME_SET_KEY4,
  94         SME_SET_PMK_TSC,
  95         SME_SET_GMK1_TSC,
  96         SME_SET_GMK2_TSC,
  97         SME_SET_GMK3_TSC,
  98         SME_SET_PMKSA,
  99         SME_POW_MNGMT_REQUEST,
 100         SME_PHY_INFO_REQUEST,
 101         SME_MIC_FAILURE_REQUEST,
 102         SME_GET_MAC_ADDRESS,
 103         SME_GET_PRODUCT_VERSION,
 104         SME_STOP_REQUEST,
 105         SME_RTS_THRESHOLD_REQUEST,
 106         SME_FRAGMENTATION_THRESHOLD_REQUEST,
 107         SME_WEP_INDEX_REQUEST,
 108         SME_WEP_KEY1_REQUEST,
 109         SME_WEP_KEY2_REQUEST,
 110         SME_WEP_KEY3_REQUEST,
 111         SME_WEP_KEY4_REQUEST,
 112         SME_WEP_FLAG_REQUEST,
 113         SME_RSN_UCAST_REQUEST,
 114         SME_RSN_MCAST_REQUEST,
 115         SME_RSN_AUTH_REQUEST,
 116         SME_RSN_ENABLED_REQUEST,
 117         SME_RSN_MODE_REQUEST,
 118         SME_WPS_ENABLE_REQUEST,
 119         SME_WPS_PROBE_REQUEST,
 120         SME_SET_GAIN,
 121         SME_GET_GAIN,
 122         SME_SLEEP_REQUEST,
 123         SME_SET_REGION,
 124         SME_MODE_SET_REQUEST,
 125         SME_START_REQUEST,
 126         SME_GET_EEPROM_CKSUM,
 127 
 128         SME_MIC_FAILURE_CONFIRM,
 129         SME_START_CONFIRM,
 130 
 131         SME_MULTICAST_CONFIRM,
 132         SME_BSS_SCAN_CONFIRM,
 133         SME_GET_CURRENT_AP,
 134         SME_POW_MNGMT_CONFIRM,
 135         SME_PHY_INFO_CONFIRM,
 136         SME_STOP_CONFIRM,
 137         SME_RTS_THRESHOLD_CONFIRM,
 138         SME_FRAGMENTATION_THRESHOLD_CONFIRM,
 139         SME_WEP_INDEX_CONFIRM,
 140         SME_WEP_KEY1_CONFIRM,
 141         SME_WEP_KEY2_CONFIRM,
 142         SME_WEP_KEY3_CONFIRM,
 143         SME_WEP_KEY4_CONFIRM,
 144         SME_WEP_FLAG_CONFIRM,
 145         SME_RSN_UCAST_CONFIRM,
 146         SME_RSN_MCAST_CONFIRM,
 147         SME_RSN_AUTH_CONFIRM,
 148         SME_RSN_ENABLED_CONFIRM,
 149         SME_RSN_MODE_CONFIRM,
 150         SME_MODE_SET_CONFIRM,
 151         SME_SLEEP_CONFIRM,
 152 
 153         SME_RSN_SET_CONFIRM,
 154         SME_WEP_SET_CONFIRM,
 155         SME_TERMINATE,
 156 
 157         SME_EVENT_SIZE
 158 };
 159 
 160 /* SME Status */
 161 enum {
 162         SME_IDLE,
 163         SME_SETUP,
 164         SME_DISCONNECT,
 165         SME_CONNECT
 166 };
 167 
 168 #define SME_EVENT_BUFF_SIZE     128
 169 
 170 struct sme_info {
 171         int sme_status;
 172         int event_buff[SME_EVENT_BUFF_SIZE];
 173         unsigned int qhead;
 174         unsigned int qtail;
 175         spinlock_t sme_spin;
 176         unsigned long sme_flag;
 177 };
 178 
 179 struct hostt {
 180         int buff[SME_EVENT_BUFF_SIZE];
 181         unsigned int qhead;
 182         unsigned int qtail;
 183 };
 184 
 185 #define RSN_IE_BODY_MAX 64
 186 struct rsn_ie {
 187         u8 id;  /* 0xdd = WPA or 0x30 = RSN */
 188         u8 size;        /* max ? 255 ? */
 189         u8 body[RSN_IE_BODY_MAX];
 190 } __packed;
 191 
 192 #define WPA_INFO_ELEM_ID 0xdd
 193 #define RSN_INFO_ELEM_ID 0x30
 194 
 195 #define WPS_IE_BODY_MAX 255
 196 struct wps_ie {
 197         u8 id;  /* 221 'dd <len> 00 50 F2 04' */
 198         u8 size;        /* max ? 255 ? */
 199         u8 body[WPS_IE_BODY_MAX];
 200 } __packed;
 201 
 202 struct local_ap {
 203         u8 bssid[6];
 204         u8 rssi;
 205         u8 sq;
 206         struct {
 207                 u8 size;
 208                 u8 body[32];
 209                 u8 ssid_pad;
 210         } ssid;
 211         struct {
 212                 u8 size;
 213                 u8 body[16];
 214                 u8 rate_pad;
 215         } rate_set;
 216         u16 capability;
 217         u8 channel;
 218         u8 noise;
 219         struct rsn_ie wpa_ie;
 220         struct rsn_ie rsn_ie;
 221         struct wps_ie wps_ie;
 222 };
 223 
 224 #define LOCAL_APLIST_MAX 31
 225 #define LOCAL_CURRENT_AP LOCAL_APLIST_MAX
 226 struct local_aplist {
 227         int size;
 228         struct local_ap ap[LOCAL_APLIST_MAX + 1];
 229 };
 230 
 231 struct local_gain {
 232         u8 tx_mode;
 233         u8 rx_mode;
 234         u8 tx_gain;
 235         u8 rx_gain;
 236 };
 237 
 238 struct local_eeprom_sum {
 239         u8 type;
 240         u8 result;
 241 };
 242 
 243 enum {
 244         EEPROM_OK,
 245         EEPROM_CHECKSUM_NONE,
 246         EEPROM_FW_NOT_SUPPORT,
 247         EEPROM_NG,
 248 };
 249 
 250 /* Power Save Status */
 251 enum {
 252         PS_NONE,
 253         PS_ACTIVE_SET,
 254         PS_SAVE_SET,
 255         PS_CONF_WAIT,
 256         PS_SNOOZE,
 257         PS_WAKEUP
 258 };
 259 
 260 struct power_save_status {
 261         atomic_t status;        /* initialvalue 0 */
 262         struct completion wakeup_wait;
 263         atomic_t confirm_wait;
 264         atomic_t snooze_guard;
 265 };
 266 
 267 struct sleep_status {
 268         atomic_t status;        /* initialvalue 0 */
 269         atomic_t doze_request;
 270         atomic_t wakeup_request;
 271 };
 272 
 273 /* WPA */
 274 struct scan_ext {
 275         unsigned int flag;
 276         char ssid[IW_ESSID_MAX_SIZE + 1];
 277 };
 278 
 279 #define CIPHER_ID_WPA_NONE    "\x00\x50\xf2\x00"
 280 #define CIPHER_ID_WPA_WEP40   "\x00\x50\xf2\x01"
 281 #define CIPHER_ID_WPA_TKIP    "\x00\x50\xf2\x02"
 282 #define CIPHER_ID_WPA_CCMP    "\x00\x50\xf2\x04"
 283 #define CIPHER_ID_WPA_WEP104  "\x00\x50\xf2\x05"
 284 
 285 #define CIPHER_ID_WPA2_NONE   "\x00\x0f\xac\x00"
 286 #define CIPHER_ID_WPA2_WEP40  "\x00\x0f\xac\x01"
 287 #define CIPHER_ID_WPA2_TKIP   "\x00\x0f\xac\x02"
 288 #define CIPHER_ID_WPA2_CCMP   "\x00\x0f\xac\x04"
 289 #define CIPHER_ID_WPA2_WEP104 "\x00\x0f\xac\x05"
 290 
 291 #define CIPHER_ID_LEN    4
 292 
 293 enum {
 294         KEY_MGMT_802_1X,
 295         KEY_MGMT_PSK,
 296         KEY_MGMT_WPANONE,
 297 };
 298 
 299 #define KEY_MGMT_ID_WPA_NONE     "\x00\x50\xf2\x00"
 300 #define KEY_MGMT_ID_WPA_1X       "\x00\x50\xf2\x01"
 301 #define KEY_MGMT_ID_WPA_PSK      "\x00\x50\xf2\x02"
 302 #define KEY_MGMT_ID_WPA_WPANONE  "\x00\x50\xf2\xff"
 303 
 304 #define KEY_MGMT_ID_WPA2_NONE    "\x00\x0f\xac\x00"
 305 #define KEY_MGMT_ID_WPA2_1X      "\x00\x0f\xac\x01"
 306 #define KEY_MGMT_ID_WPA2_PSK     "\x00\x0f\xac\x02"
 307 #define KEY_MGMT_ID_WPA2_WPANONE "\x00\x0f\xac\xff"
 308 
 309 #define KEY_MGMT_ID_LEN  4
 310 
 311 #define MIC_KEY_SIZE 8
 312 
 313 struct wpa_key {
 314         u32 ext_flags;  /* IW_ENCODE_EXT_xxx */
 315         u8 tx_seq[IW_ENCODE_SEQ_MAX_SIZE];      /* LSB first */
 316         u8 rx_seq[IW_ENCODE_SEQ_MAX_SIZE];      /* LSB first */
 317         struct sockaddr addr;   /* ff:ff:ff:ff:ff:ff for broadcast/multicast
 318                                  * (group) keys or unicast address for
 319                                  * individual keys
 320                                  */
 321         u16 alg;
 322         u16 key_len;    /* WEP: 5 or 13, TKIP: 32, CCMP: 16 */
 323         u8 key_val[IW_ENCODING_TOKEN_MAX];
 324         u8 tx_mic_key[MIC_KEY_SIZE];
 325         u8 rx_mic_key[MIC_KEY_SIZE];
 326 };
 327 
 328 #define WPA_KEY_INDEX_MAX 4
 329 #define WPA_RX_SEQ_LEN 6
 330 
 331 struct mic_failure {
 332         u16 failure;    /* MIC Failure counter 0 or 1 or 2 */
 333         u16 counter;    /* 1sec counter 0-60 */
 334         u32 last_failure_time;
 335         int stop;
 336 };
 337 
 338 struct wpa_status {
 339         int wpa_enabled;
 340         bool rsn_enabled;
 341         int version;
 342         int pairwise_suite;     /* unicast cipher */
 343         int group_suite;        /* multicast cipher */
 344         int key_mgmt_suite;
 345         int auth_alg;
 346         int txkey;
 347         struct wpa_key key[WPA_KEY_INDEX_MAX];
 348         struct scan_ext scan_ext;
 349         struct mic_failure mic_failure;
 350 };
 351 
 352 #include <linux/list.h>
 353 #define PMK_LIST_MAX 8
 354 struct pmk_list {
 355         u16 size;
 356         struct list_head head;
 357         struct pmk {
 358                 struct list_head list;
 359                 u8 bssid[ETH_ALEN];
 360                 u8 pmkid[IW_PMKID_LEN];
 361         } pmk[PMK_LIST_MAX];
 362 };
 363 
 364 struct wps_status {
 365         int wps_enabled;
 366         int ielen;
 367         u8 ie[255];
 368 };
 369 
 370 /* Tx Device struct */
 371 #define TX_DEVICE_BUFF_SIZE     1024
 372 
 373 struct ks_wlan_private;
 374 
 375 /**
 376  * struct tx_device_buffer - Queue item for the tx queue.
 377  * @sendp: Pointer to the send request data.
 378  * @size: Size of @sendp data.
 379  * @complete_handler: Function called once data write to device is complete.
 380  * @arg1: First argument to @complete_handler.
 381  * @arg2: Second argument to @complete_handler.
 382  */
 383 struct tx_device_buffer {
 384         unsigned char *sendp;
 385         unsigned int size;
 386         void (*complete_handler)(struct ks_wlan_private *priv,
 387                                  struct sk_buff *skb);
 388         struct sk_buff *skb;
 389 };
 390 
 391 /**
 392  * struct tx_device - Tx buffer queue.
 393  * @tx_device_buffer: Queue buffer.
 394  * @qhead: Head of tx queue.
 395  * @qtail: Tail of tx queue.
 396  * @tx_dev_lock: Queue lock.
 397  */
 398 struct tx_device {
 399         struct tx_device_buffer tx_dev_buff[TX_DEVICE_BUFF_SIZE];
 400         unsigned int qhead;
 401         unsigned int qtail;
 402         spinlock_t tx_dev_lock; /* protect access to the queue */
 403 };
 404 
 405 /* Rx Device struct */
 406 #define RX_DATA_SIZE    (2 + 2 + 2347 + 1)
 407 #define RX_DEVICE_BUFF_SIZE     32
 408 
 409 /**
 410  * struct rx_device_buffer - Queue item for the rx queue.
 411  * @data: rx data.
 412  * @size: Size of @data.
 413  */
 414 struct rx_device_buffer {
 415         unsigned char data[RX_DATA_SIZE];
 416         unsigned int size;
 417 };
 418 
 419 /**
 420  * struct rx_device - Rx buffer queue.
 421  * @rx_device_buffer: Queue buffer.
 422  * @qhead: Head of rx queue.
 423  * @qtail: Tail of rx queue.
 424  * @rx_dev_lock: Queue lock.
 425  */
 426 struct rx_device {
 427         struct rx_device_buffer rx_dev_buff[RX_DEVICE_BUFF_SIZE];
 428         unsigned int qhead;
 429         unsigned int qtail;
 430         spinlock_t rx_dev_lock; /* protect access to the queue */
 431 };
 432 
 433 struct ks_wlan_private {
 434         /* hardware information */
 435         void *if_hw;
 436         struct workqueue_struct *wq;
 437         struct delayed_work rw_dwork;
 438         struct tasklet_struct rx_bh_task;
 439 
 440         struct net_device *net_dev;
 441         struct net_device_stats nstats;
 442         struct iw_statistics wstats;
 443 
 444         struct completion confirm_wait;
 445 
 446         /* trx device & sme */
 447         struct tx_device tx_dev;
 448         struct rx_device rx_dev;
 449         struct sme_info sme_i;
 450         u8 *rxp;
 451         unsigned int rx_size;
 452         struct tasklet_struct sme_task;
 453         struct work_struct wakeup_work;
 454         int scan_ind_count;
 455 
 456         unsigned char eth_addr[ETH_ALEN];
 457 
 458         struct local_aplist aplist;
 459         struct local_ap current_ap;
 460         struct power_save_status psstatus;
 461         struct sleep_status sleepstatus;
 462         struct wpa_status wpa;
 463         struct pmk_list pmklist;
 464         /* wireless parameter */
 465         struct ks_wlan_parameter reg;
 466         u8 current_rate;
 467 
 468         char nick[IW_ESSID_MAX_SIZE + 1];
 469 
 470         spinlock_t multicast_spin;
 471 
 472         spinlock_t dev_read_lock;
 473         wait_queue_head_t devread_wait;
 474 
 475         unsigned int need_commit;       /* for ioctl */
 476 
 477         /* DeviceIoControl */
 478         bool is_device_open;
 479         atomic_t event_count;
 480         atomic_t rec_count;
 481         int dev_count;
 482 #define DEVICE_STOCK_COUNT 20
 483         unsigned char *dev_data[DEVICE_STOCK_COUNT];
 484         int dev_size[DEVICE_STOCK_COUNT];
 485 
 486         /* ioctl : IOCTL_FIRMWARE_VERSION */
 487         unsigned char firmware_version[128 + 1];
 488         int version_size;
 489 
 490         bool mac_address_valid;
 491 
 492         int dev_state;
 493 
 494         struct sk_buff *skb;
 495         unsigned int cur_rx;    /* Index into the Rx buffer of next Rx pkt. */
 496 #define FORCE_DISCONNECT    0x80000000
 497 #define CONNECT_STATUS_MASK 0x7FFFFFFF
 498         u32 connect_status;
 499         int infra_status;
 500         u8 scan_ssid_len;
 501         u8 scan_ssid[IW_ESSID_MAX_SIZE + 1];
 502         struct local_gain gain;
 503         struct wps_status wps;
 504         u8 sleep_mode;
 505 
 506         u8 region;
 507         struct local_eeprom_sum eeprom_sum;
 508         u8 eeprom_checksum;
 509 
 510         struct hostt hostt;
 511 
 512         unsigned long last_doze;
 513         unsigned long last_wakeup;
 514 
 515         unsigned int wakeup_count;      /* for detect wakeup loop */
 516 };
 517 
 518 static inline void inc_txqhead(struct ks_wlan_private *priv)
 519 {
 520         priv->tx_dev.qhead = (priv->tx_dev.qhead + 1) % TX_DEVICE_BUFF_SIZE;
 521 }
 522 
 523 static inline void inc_txqtail(struct ks_wlan_private *priv)
 524 {
 525         priv->tx_dev.qtail = (priv->tx_dev.qtail + 1) % TX_DEVICE_BUFF_SIZE;
 526 }
 527 
 528 static inline bool txq_has_space(struct ks_wlan_private *priv)
 529 {
 530         return (CIRC_SPACE(priv->tx_dev.qhead, priv->tx_dev.qtail,
 531                            TX_DEVICE_BUFF_SIZE) > 0);
 532 }
 533 
 534 static inline void inc_rxqhead(struct ks_wlan_private *priv)
 535 {
 536         priv->rx_dev.qhead = (priv->rx_dev.qhead + 1) % RX_DEVICE_BUFF_SIZE;
 537 }
 538 
 539 static inline void inc_rxqtail(struct ks_wlan_private *priv)
 540 {
 541         priv->rx_dev.qtail = (priv->rx_dev.qtail + 1) % RX_DEVICE_BUFF_SIZE;
 542 }
 543 
 544 static inline bool rxq_has_space(struct ks_wlan_private *priv)
 545 {
 546         return (CIRC_SPACE(priv->rx_dev.qhead, priv->rx_dev.qtail,
 547                            RX_DEVICE_BUFF_SIZE) > 0);
 548 }
 549 
 550 static inline unsigned int txq_count(struct ks_wlan_private *priv)
 551 {
 552         return CIRC_CNT_TO_END(priv->tx_dev.qhead, priv->tx_dev.qtail,
 553                                TX_DEVICE_BUFF_SIZE);
 554 }
 555 
 556 static inline unsigned int rxq_count(struct ks_wlan_private *priv)
 557 {
 558         return CIRC_CNT_TO_END(priv->rx_dev.qhead, priv->rx_dev.qtail,
 559                                RX_DEVICE_BUFF_SIZE);
 560 }
 561 
 562 int ks_wlan_net_start(struct net_device *dev);
 563 int ks_wlan_net_stop(struct net_device *dev);
 564 bool is_connect_status(u32 status);
 565 bool is_disconnect_status(u32 status);
 566 
 567 #endif /* _KS_WLAN_H */

/* [<][>][^][v][top][bottom][index][help] */