linux/drivers/net/wireless/ti/wl18xx/scan.h
<<
>>
Prefs
   1/*
   2 * This file is part of wl18xx
   3 *
   4 * Copyright (C) 2012 Texas Instruments. All rights reserved.
   5 *
   6 * This program is free software; you can redistribute it and/or
   7 * modify it under the terms of the GNU General Public License
   8 * version 2 as published by the Free Software Foundation.
   9 *
  10 * This program is distributed in the hope that it will be useful, but
  11 * WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13 * General Public License for more details.
  14 *
  15 * You should have received a copy of the GNU General Public License
  16 * along with this program; if not, write to the Free Software
  17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  18 * 02110-1301 USA
  19 *
  20 */
  21
  22#ifndef __WL18XX_SCAN_H__
  23#define __WL18XX_SCAN_H__
  24
  25#include "../wlcore/wlcore.h"
  26#include "../wlcore/cmd.h"
  27#include "../wlcore/scan.h"
  28
  29struct tracking_ch_params {
  30        struct conn_scan_ch_params channel;
  31
  32        __le32 bssid_lsb;
  33        __le16 bssid_msb;
  34
  35        u8 padding[2];
  36} __packed;
  37
  38/* probe request rate */
  39enum
  40{
  41        WL18XX_SCAN_RATE_1      = 0,
  42        WL18XX_SCAN_RATE_5_5    = 1,
  43        WL18XX_SCAN_RATE_6      = 2,
  44};
  45
  46#define WL18XX_MAX_CHANNELS_5GHZ 32
  47
  48struct wl18xx_cmd_scan_params {
  49        struct wl1271_cmd_header header;
  50
  51        u8 role_id;
  52        u8 scan_type;
  53
  54        s8 rssi_threshold; /* for filtering (in dBm) */
  55        s8 snr_threshold;  /* for filtering (in dB) */
  56
  57        u8 bss_type;       /* for filtering */
  58        u8 ssid_from_list; /* use ssid from configured ssid list */
  59        u8 filter;         /* forward only results with matching ssids */
  60
  61        /*
  62         * add broadcast ssid in addition to the configured ssids.
  63         * the driver should add dummy entry for it (?).
  64         */
  65        u8 add_broadcast;
  66
  67        u8 urgency;
  68        u8 protect;      /* ??? */
  69        u8 n_probe_reqs;    /* Number of probes requests per channel */
  70        u8 terminate_after; /* early terminate scan operation */
  71
  72        u8 passive[SCAN_MAX_BANDS]; /* number of passive scan channels */
  73        u8 active[SCAN_MAX_BANDS];  /* number of active scan channels */
  74        u8 dfs;            /* number of dfs channels in 5ghz */
  75        u8 passive_active; /* number of passive before active channels 2.4ghz */
  76
  77        __le16 short_cycles_msec;
  78        __le16 long_cycles_msec;
  79        u8 short_cycles_count;
  80        u8 total_cycles; /* 0 - infinite */
  81        u8 padding[2];
  82
  83        union {
  84                struct {
  85                        struct conn_scan_ch_params channels_2[MAX_CHANNELS_2GHZ];
  86                        struct conn_scan_ch_params channels_5[WL18XX_MAX_CHANNELS_5GHZ];
  87                        struct conn_scan_ch_params channels_4[MAX_CHANNELS_4GHZ];
  88                };
  89                struct tracking_ch_params channels_tracking[WL1271_SCAN_MAX_CHANNELS];
  90        } ;
  91
  92        u8 ssid[IEEE80211_MAX_SSID_LEN];
  93        u8 ssid_len;     /* For SCAN_SSID_FILTER_SPECIFIC */
  94        u8 tag;
  95        u8 rate;
  96
  97        /* send SCAN_REPORT_EVENT in periodic scans after each cycle
  98        * if number of results >= report_threshold. Must be 0 for
  99        * non periodic scans
 100        */
 101        u8 report_threshold;
 102
 103        /* Should periodic scan stop after a report event was created.
 104        * Must be 0 for non periodic scans.
 105        */
 106        u8 terminate_on_report;
 107
 108        u8 padding1[3];
 109} __packed;
 110
 111struct wl18xx_cmd_scan_stop {
 112        struct wl1271_cmd_header header;
 113
 114        u8 role_id;
 115        u8 scan_type;
 116        u8 padding[2];
 117} __packed;
 118
 119int wl18xx_scan_start(struct wl1271 *wl, struct wl12xx_vif *wlvif,
 120                      struct cfg80211_scan_request *req);
 121int wl18xx_scan_stop(struct wl1271 *wl, struct wl12xx_vif *wlvif);
 122void wl18xx_scan_completed(struct wl1271 *wl, struct wl12xx_vif *wlvif);
 123int wl18xx_sched_scan_start(struct wl1271 *wl, struct wl12xx_vif *wlvif,
 124                            struct cfg80211_sched_scan_request *req,
 125                            struct ieee80211_scan_ies *ies);
 126void wl18xx_scan_sched_scan_stop(struct wl1271 *wl, struct wl12xx_vif *wlvif);
 127#endif
 128