BigW Consortium Gitlab

Commit 36d344b1 by David Clark

MT7697 WiFi driver now works w/o any code updates to wpa-supplicant

parent 0a75741c
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
#define _MT7697_CORE_H_ #define _MT7697_CORE_H_
#include <net/cfg80211.h> #include <net/cfg80211.h>
#include <net/iw_handler.h> /* New driver API */
#include "wifi_api.h" #include "wifi_api.h"
#include "wmi.h" #include "wmi.h"
...@@ -107,12 +107,11 @@ struct mt7697_cfg80211_info { ...@@ -107,12 +107,11 @@ struct mt7697_cfg80211_info {
enum mt7697_wifi_phy_mode_t wireless_mode; enum mt7697_wifi_phy_mode_t wireless_mode;
enum mt7697_wifi_phy_mode_t hw_wireless_mode; enum mt7697_wifi_phy_mode_t hw_wireless_mode;
struct mac_address mac_addr; struct mac_address mac_addr;
struct mt7697_wifi_config_t wifi_config; struct mt7697_wifi_config_t wifi_cfg;
int listen_interval; int listen_interval;
enum mt7697_wifi_rx_filter_t rx_filter; enum mt7697_wifi_rx_filter_t rx_filter;
u8 smart_conn_filter; u8 smart_conn_filter;
u8 reg_rx_hndlr; u8 reg_rx_hndlr;
u8 psk[MT7697_PASSPHRASE_LEN];
struct list_head vif_list; struct list_head vif_list;
spinlock_t vif_list_lock; spinlock_t vif_list_lock;
...@@ -140,6 +139,7 @@ struct mt7697_vif { ...@@ -140,6 +139,7 @@ struct mt7697_vif {
struct wireless_dev wdev; struct wireless_dev wdev;
struct net_device *ndev; struct net_device *ndev;
struct mt7697_cfg80211_info *cfg; struct mt7697_cfg80211_info *cfg;
struct iw_public_data wireless_data;
/* Lock to protect vif specific net_stats and flags */ /* Lock to protect vif specific net_stats and flags */
spinlock_t if_lock; spinlock_t if_lock;
...@@ -150,6 +150,7 @@ struct mt7697_vif { ...@@ -150,6 +150,7 @@ struct mt7697_vif {
u8 ssid[IEEE80211_MAX_SSID_LEN]; u8 ssid[IEEE80211_MAX_SSID_LEN];
u8 bssid[ETH_ALEN]; u8 bssid[ETH_ALEN];
u8 req_bssid[ETH_ALEN]; u8 req_bssid[ETH_ALEN];
u8 pmk[MT7697_WIFI_LENGTH_PMK];
u16 ch_hint; u16 ch_hint;
struct work_struct disconnect_work; struct work_struct disconnect_work;
......
/*
* Copyright (c) 2017 Sierra Wireless Corporation
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef _MT7697_IOCTL_H_
#define _MT7697_IOCTL_H_
#include <net/iw_handler.h> /* New driver API */
#define SUPPORTED_WIRELESS_EXT 19
extern const struct iw_handler_def mt7697_wireless_hndlrs;
#endif
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <net/cfg80211.h> #include <net/cfg80211.h>
#include "queue_i.h" #include "queue_i.h"
#include "common.h" #include "common.h"
#include "ioctl.h"
#include "core.h" #include "core.h"
#include "cfg80211.h" #include "cfg80211.h"
...@@ -166,14 +167,6 @@ static void mt7697_init_hw_start(struct work_struct *work) ...@@ -166,14 +167,6 @@ static void mt7697_init_hw_start(struct work_struct *work)
goto failed; goto failed;
} }
err = mt7697_wr_get_psk_req(cfg, MT7697_PORT_STA);
if (err < 0) {
dev_err(cfg->dev,
"%s(): mt7697_wr_get_psk_req() failed(%d)\n",
__func__, err);
goto failed;
}
err = mt7697_wr_mac_addr_req(cfg, MT7697_PORT_STA); err = mt7697_wr_mac_addr_req(cfg, MT7697_PORT_STA);
if (err < 0) { if (err < 0) {
dev_err(cfg->dev, dev_err(cfg->dev,
...@@ -195,13 +188,15 @@ static const struct net_device_ops mt7697_netdev_ops = { ...@@ -195,13 +188,15 @@ static const struct net_device_ops mt7697_netdev_ops = {
.ndo_set_rx_mode = mt7697_set_multicast_list, .ndo_set_rx_mode = mt7697_set_multicast_list,
}; };
void mt7697_init_netdev(struct net_device *dev) void mt7697_init_netdev(struct net_device *ndev)
{ {
dev->netdev_ops = &mt7697_netdev_ops; ndev->netdev_ops = &mt7697_netdev_ops;
dev->destructor = free_netdev; ndev->wireless_handlers = &mt7697_wireless_hndlrs;
dev->watchdog_timeo = MT7697_TX_TIMEOUT; ndev->destructor = free_netdev;
dev->needed_headroom = sizeof(struct ieee80211_hdr) + sizeof(struct mt7697_llc_snap_hdr); ndev->watchdog_timeo = MT7697_TX_TIMEOUT;
dev->hw_features |= NETIF_F_HW_CSUM | NETIF_F_RXCSUM; ndev->needed_headroom = sizeof(struct ieee80211_hdr) +
sizeof(struct mt7697_llc_snap_hdr);
ndev->hw_features |= NETIF_F_HW_CSUM | NETIF_F_RXCSUM;
} }
static const struct mt7697q_if_ops if_ops = { static const struct mt7697q_if_ops if_ops = {
...@@ -371,15 +366,15 @@ int mt7697_disconnect(struct mt7697_vif *vif) ...@@ -371,15 +366,15 @@ int mt7697_disconnect(struct mt7697_vif *vif)
if (test_bit(CONNECTED, &vif->flags) || if (test_bit(CONNECTED, &vif->flags) ||
test_bit(CONNECT_PEND, &vif->flags)) { test_bit(CONNECT_PEND, &vif->flags)) {
if (vif->cfg->reg_rx_hndlr) { if (vif->cfg->reg_rx_hndlr) {
ret = mt7697_wr_set_op_mode_req(vif->cfg, /* ret = mt7697_wr_set_op_mode_req(vif->cfg,
vif->cfg->wifi_config.opmode); vif->cfg->wifi_cfg.opmode);
if (ret < 0) { if (ret < 0) {
dev_err(vif->cfg->dev, dev_err(vif->cfg->dev,
"%s(): mt7697_wr_set_op_mode_req() failed(%d)\n", "%s(): mt7697_wr_set_op_mode_req() failed(%d)\n",
__func__, ret); __func__, ret);
goto failed; goto failed;
} }
*/
ret = mt7697_wr_unreg_rx_hndlr_req(vif->cfg); ret = mt7697_wr_unreg_rx_hndlr_req(vif->cfg);
if (ret < 0) { if (ret < 0) {
dev_err(vif->cfg->dev, dev_err(vif->cfg->dev,
......
...@@ -4,10 +4,13 @@ sources: ...@@ -4,10 +4,13 @@ sources:
cfg80211.c cfg80211.c
main.c main.c
txrx.c txrx.c
ioctl.c
} }
cflags: cflags:
{ {
-DDEBUG -DDEBUG
-DCONFIG_WIRELESS_EXT
-DCONFIG_CFG80211_WEXT
-I$MANGOH_ROOT/linux_kernel_modules/mt7697q -I$MANGOH_ROOT/linux_kernel_modules/mt7697q
} }
...@@ -8,11 +8,10 @@ ...@@ -8,11 +8,10 @@
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tmp #export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tmp
mt_wifi_start() { mt_wifi_start() {
# insmod /tmp/spisvc.ko || exit 127 # TODO figure way to only call echo command once
lsmod | grep spi-cp2130 >/dev/null lsmod | grep 0-cp2130 >/dev/null
if [ $? -eq 1 ]; then if [ $? -eq 1 ]; then
insmod /tmp/spi-cp2130.ko || exit 127 insmod /tmp/0-cp2130.ko || exit 127
for f in `ls -d /sys/class/gpio/gpiochip*`; do echo $f `cat $f/label $f/base $f/ngpio` ; done
echo -n 0,2,-1,0,0,1,0,0,0,0,0,mt7697 > /sys/devices/platform/msm_hsic_host/usb1/1-1/1-1.1/1-1.1:1.0/channel_config echo -n 0,2,-1,0,0,1,0,0,0,0,0,mt7697 > /sys/devices/platform/msm_hsic_host/usb1/1-1/1-1.1/1-1.1:1.0/channel_config
fi fi
......
...@@ -82,7 +82,7 @@ cleanup: ...@@ -82,7 +82,7 @@ cleanup:
} }
static void mt7697_ethernet_to_80211(struct sk_buff *skb, static void mt7697_ethernet_to_80211(struct sk_buff *skb,
struct net_device *ndev) struct net_device *ndev)
{ {
struct ieee80211_hdr hdr; struct ieee80211_hdr hdr;
struct mt7697_cfg80211_info *cfg = mt7697_priv(ndev); struct mt7697_cfg80211_info *cfg = mt7697_priv(ndev);
...@@ -94,26 +94,26 @@ static void mt7697_ethernet_to_80211(struct sk_buff *skb, ...@@ -94,26 +94,26 @@ static void mt7697_ethernet_to_80211(struct sk_buff *skb,
__le16 fc; __le16 fc;
u16 hdrlen; u16 hdrlen;
dev_dbg(cfg->dev, "%s(): Tx 802.3 Frame len(%u)\n", __func__, skb->len); dev_dbg(cfg->dev, "%s(): Tx 802.3 Frame len(%u)\n",
__func__, skb->len);
print_hex_dump(KERN_DEBUG, DRVNAME" 802.3 Frame ", DUMP_PREFIX_OFFSET, print_hex_dump(KERN_DEBUG, DRVNAME" 802.3 Frame ", DUMP_PREFIX_OFFSET,
16, 1, skb->data, skb->len, 0); 16, 1, skb->data, skb->len, 0);
fc = cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA); fc = cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA);
// fc |= cpu_to_le16(IEEE80211_FCTL_FROMDS); fc |= cpu_to_le16(IEEE80211_FCTL_TODS);
fc |= cpu_to_le16(IEEE80211_FCTL_TODS);
/* DA BSSID SA */ /* DA BSSID SA */
hdr.frame_control = fc; hdr.frame_control = fc;
hdr.duration_id = 0; hdr.duration_id = 0;
// memcpy(hdr.addr1, eth_hdr->h_dest, ETH_ALEN); memcpy(hdr.addr1, vif->bssid, ETH_ALEN);
// memcpy(hdr.addr2, vif->bssid, ETH_ALEN); memcpy(hdr.addr2, eth_hdr->h_source, ETH_ALEN);
// memcpy(hdr.addr3, eth_hdr->h_source, ETH_ALEN); memcpy(hdr.addr3, eth_hdr->h_dest, ETH_ALEN);
memcpy(hdr.addr1, vif->bssid, ETH_ALEN);
memcpy(hdr.addr2, eth_hdr->h_source, ETH_ALEN);
memcpy(hdr.addr3, eth_hdr->h_dest, ETH_ALEN);
hdr.seq_ctrl = 0; hdr.seq_ctrl = 0;
hdrlen = sizeof(struct ieee80211_hdr_3addr); hdrlen = sizeof(struct ieee80211_hdr_3addr);
datap = skb_push(skb, hdrlen + sizeof(struct mt7697_llc_snap_hdr) - sizeof(struct ethhdr)); datap = skb_push(skb, hdrlen +
sizeof(struct mt7697_llc_snap_hdr) -
sizeof(struct ethhdr));
memcpy(datap, &hdr, hdrlen); memcpy(datap, &hdr, hdrlen);
llc_hdr = (struct mt7697_llc_snap_hdr*)(datap + hdrlen); llc_hdr = (struct mt7697_llc_snap_hdr*)(datap + hdrlen);
...@@ -127,8 +127,8 @@ memcpy(hdr.addr3, eth_hdr->h_dest, ETH_ALEN); ...@@ -127,8 +127,8 @@ memcpy(hdr.addr3, eth_hdr->h_dest, ETH_ALEN);
dev_dbg(cfg->dev, "%s(): Tx 802.11 Frame len(%u)\n", dev_dbg(cfg->dev, "%s(): Tx 802.11 Frame len(%u)\n",
__func__, skb->len); __func__, skb->len);
print_hex_dump(KERN_DEBUG, DRVNAME" <-- Tx 802.11 Frame ", DUMP_PREFIX_OFFSET, print_hex_dump(KERN_DEBUG, DRVNAME" <-- Tx 802.11 Frame ",
16, 1, skb->data, skb->len, 0); DUMP_PREFIX_OFFSET, 16, 1, skb->data, skb->len, 0);
} }
int mt7697_data_tx(struct sk_buff *skb, struct net_device *ndev) int mt7697_data_tx(struct sk_buff *skb, struct net_device *ndev)
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#define mt7697_scan_stop mt7697q_cmd_hdr #define mt7697_scan_stop mt7697q_cmd_hdr
#define mt7697_register_rx_hndlr_req mt7697q_cmd_hdr #define mt7697_register_rx_hndlr_req mt7697q_cmd_hdr
#define mt7697_unregister_rx_hndlr_req mt7697q_cmd_hdr #define mt7697_unregister_rx_hndlr_req mt7697q_cmd_hdr
#define mt7697_reload_settings_req mt7697q_cmd_hdr
#define mt7697_set_wireless_mode_rsp mt7697q_rsp_hdr #define mt7697_set_wireless_mode_rsp mt7697q_rsp_hdr
#define mt7697_set_radio_state_rsp mt7697q_rsp_hdr #define mt7697_set_radio_state_rsp mt7697q_rsp_hdr
...@@ -42,11 +43,15 @@ ...@@ -42,11 +43,15 @@
#define mt7697_set_rx_filter_rsp mt7697q_rsp_hdr #define mt7697_set_rx_filter_rsp mt7697q_rsp_hdr
#define mt7697_set_smart_conn_filter_rsp mt7697q_rsp_hdr #define mt7697_set_smart_conn_filter_rsp mt7697q_rsp_hdr
#define mt7697_set_listen_interval_rsp mt7697q_rsp_hdr #define mt7697_set_listen_interval_rsp mt7697q_rsp_hdr
#define mt7697_set_psk_rsp mt7697q_rsp_hdr #define mt7697_set_pmk_rsp mt7697q_rsp_hdr
#define mt7697_set_channel_rsp mt7697q_rsp_hdr
#define mt7697_set_bssid_rsp mt7697q_rsp_hdr
#define mt7697_set_ssid_rsp mt7697q_rsp_hdr
#define mt7697_set_security_mode_rsp mt7697q_rsp_hdr #define mt7697_set_security_mode_rsp mt7697q_rsp_hdr
#define mt7697_scan_stop_rsp mt7697q_rsp_hdr #define mt7697_scan_stop_rsp mt7697q_rsp_hdr
#define mt7697_register_rx_hndlr_rsp mt7697q_rsp_hdr #define mt7697_register_rx_hndlr_rsp mt7697q_rsp_hdr
#define mt7697_unregister_rx_hndlr_rsp mt7697q_rsp_hdr #define mt7697_unregister_rx_hndlr_rsp mt7697q_rsp_hdr
#define mt7697_reload_settings_rsp mt7697q_rsp_hdr
#define mt7697_disconnect_rsp mt7697q_rsp_hdr #define mt7697_disconnect_rsp mt7697q_rsp_hdr
enum mt7697_connect_ctrl_flags_bits { enum mt7697_connect_ctrl_flags_bits {
...@@ -102,13 +107,17 @@ enum mt7697_wifi_cmd_types { ...@@ -102,13 +107,17 @@ enum mt7697_wifi_cmd_types {
MT7697_CMD_SCAN_COMPLETE_IND, MT7697_CMD_SCAN_COMPLETE_IND,
MT7697_CMD_SCAN_STOP, MT7697_CMD_SCAN_STOP,
MT7697_CMD_SCAN_STOP_RSP, MT7697_CMD_SCAN_STOP_RSP,
MT7697_CMD_GET_PSK_REQ, MT7697_CMD_SET_PMK_REQ,
MT7697_CMD_GET_PSK_RSP, MT7697_CMD_SET_PMK_RSP,
MT7697_CMD_SET_PSK_REQ, MT7697_CMD_SET_CHANNEL_REQ,
MT7697_CMD_SET_PSK_RSP, MT7697_CMD_SET_CHANNEL_RSP,
MT7697_CMD_SET_BSSID_REQ,
MT7697_CMD_SET_BSSID_RSP,
MT7697_CMD_SET_SSID_REQ,
MT7697_CMD_SET_SSID_RSP,
MT7697_CMD_RELOAD_SETTINGS_REQ,
MT7697_CMD_RELOAD_SETTINGS_RSP,
MT7697_CMD_CONNECT_IND, MT7697_CMD_CONNECT_IND,
MT7697_CMD_CONNECT_REQ,
MT7697_CMD_CONNECT_RSP,
MT7697_CMD_DISCONNECT_IND, MT7697_CMD_DISCONNECT_IND,
MT7697_CMD_DISCONNECT_REQ, MT7697_CMD_DISCONNECT_REQ,
MT7697_CMD_DISCONNECT_RSP, MT7697_CMD_DISCONNECT_RSP,
...@@ -223,22 +232,28 @@ struct mt7697_scan_complete_ind { ...@@ -223,22 +232,28 @@ struct mt7697_scan_complete_ind {
__be32 if_idx; __be32 if_idx;
} __attribute__((packed, aligned(4))); } __attribute__((packed, aligned(4)));
struct mt7697_get_psk_req { struct mt7697_set_pmk_req {
struct mt7697q_cmd_hdr cmd; struct mt7697q_cmd_hdr cmd;
__be32 port; __be32 port;
u8 pmk[LEN32_ALIGNED(MT7697_WIFI_LENGTH_PMK)];
} __attribute__((packed, aligned(4))); } __attribute__((packed, aligned(4)));
struct mt7697_get_psk_rsp { struct mt7697_set_channel_req {
struct mt7697q_rsp_hdr rsp; struct mt7697q_cmd_hdr cmd;
__be32 len; __be32 port;
u8 psk[LEN32_ALIGNED(MT7697_PASSPHRASE_LEN)]; __be32 ch;
} __attribute__((packed, aligned(4))); } __attribute__((packed, aligned(4)));
struct mt7697_set_psk_req { struct mt7697_set_bssid_req {
struct mt7697q_cmd_hdr cmd;
u8 bssid[LEN32_ALIGNED(ETH_ALEN)];
} __attribute__((packed, aligned(4)));
struct mt7697_set_ssid_req {
struct mt7697q_cmd_hdr cmd; struct mt7697q_cmd_hdr cmd;
__be32 port; __be32 port;
__be32 len; __be32 len;
u8 psk[LEN32_ALIGNED(MT7697_PASSPHRASE_LEN)]; u8 ssid[LEN32_ALIGNED(IEEE80211_MAX_SSID_LEN)];
} __attribute__((packed, aligned(4))); } __attribute__((packed, aligned(4)));
struct mt7697_set_security_mode_req { struct mt7697_set_security_mode_req {
...@@ -261,16 +276,6 @@ struct mt7697_get_security_mode_rsp { ...@@ -261,16 +276,6 @@ struct mt7697_get_security_mode_rsp {
__be32 encrypt_type; __be32 encrypt_type;
} __attribute__((packed, aligned(4))); } __attribute__((packed, aligned(4)));
struct mt7697_connect_req {
struct mt7697q_cmd_hdr cmd;
__be32 if_idx;
__be32 port;
__be32 channel;
u8 bssid[LEN32_ALIGNED(ETH_ALEN)];
__be32 ssid_len;
u8 ssid[LEN32_ALIGNED(IEEE80211_MAX_SSID_LEN)];
} __attribute__((packed, aligned(4)));
struct mt7697_connect_ind { struct mt7697_connect_ind {
struct mt7697q_rsp_hdr rsp; struct mt7697q_rsp_hdr rsp;
__be32 if_idx; __be32 if_idx;
...@@ -278,12 +283,6 @@ struct mt7697_connect_ind { ...@@ -278,12 +283,6 @@ struct mt7697_connect_ind {
u8 bssid[LEN32_ALIGNED(ETH_ALEN)]; u8 bssid[LEN32_ALIGNED(ETH_ALEN)];
} __attribute__((packed, aligned(4))); } __attribute__((packed, aligned(4)));
struct mt7697_connect_rsp {
struct mt7697q_rsp_hdr rsp;
__be32 if_idx;
u8 bssid[LEN32_ALIGNED(ETH_ALEN)];
} __attribute__((packed, aligned(4)));
struct mt7697_disconnect_req { struct mt7697_disconnect_req {
struct mt7697q_cmd_hdr cmd; struct mt7697q_cmd_hdr cmd;
__be32 if_idx; __be32 if_idx;
...@@ -313,8 +312,11 @@ int mt7697_wr_reset(struct mt7697_cfg80211_info*); ...@@ -313,8 +312,11 @@ int mt7697_wr_reset(struct mt7697_cfg80211_info*);
int mt7697_wr_set_wireless_mode_req(struct mt7697_cfg80211_info*, u8, u8); int mt7697_wr_set_wireless_mode_req(struct mt7697_cfg80211_info*, u8, u8);
int mt7697_wr_get_wireless_mode_req(struct mt7697_cfg80211_info*, u8); int mt7697_wr_get_wireless_mode_req(struct mt7697_cfg80211_info*, u8);
int mt7697_wr_get_psk_req(struct mt7697_cfg80211_info*, u8); int mt7697_wr_set_pmk_req(struct mt7697_cfg80211_info*, u8, const u8[MT7697_WIFI_LENGTH_PMK]);
int mt7697_wr_set_psk_req(struct mt7697_cfg80211_info*, u8, const u8[]); int mt7697_wr_set_channel_req(struct mt7697_cfg80211_info*, u8, u8);
int mt7697_wr_set_bssid_req(struct mt7697_cfg80211_info*, const u8[ETH_ALEN]);
int mt7697_wr_set_ssid_req(struct mt7697_cfg80211_info*, u8, u8, const u8[]);
int mt7697_wr_reload_settings_req(struct mt7697_cfg80211_info*);
int mt7697_wr_mac_addr_req(struct mt7697_cfg80211_info*, u8); int mt7697_wr_mac_addr_req(struct mt7697_cfg80211_info*, u8);
int mt7697_wr_cfg_req(struct mt7697_cfg80211_info*); int mt7697_wr_cfg_req(struct mt7697_cfg80211_info*);
int mt7697_wr_reg_rx_hndlr_req(struct mt7697_cfg80211_info*); int mt7697_wr_reg_rx_hndlr_req(struct mt7697_cfg80211_info*);
...@@ -333,8 +335,6 @@ int mt7697_wr_scan_req(struct mt7697_cfg80211_info*, u32, ...@@ -333,8 +335,6 @@ int mt7697_wr_scan_req(struct mt7697_cfg80211_info*, u32,
int mt7697_wr_set_security_mode_req(struct mt7697_cfg80211_info*, u8, u8, u8); int mt7697_wr_set_security_mode_req(struct mt7697_cfg80211_info*, u8, u8, u8);
int mt7697_wr_get_security_mode_req(struct mt7697_cfg80211_info*, u32, u8); int mt7697_wr_get_security_mode_req(struct mt7697_cfg80211_info*, u32, u8);
int mt7697_wr_scan_stop_req(struct mt7697_cfg80211_info*); int mt7697_wr_scan_stop_req(struct mt7697_cfg80211_info*);
int mt7697_wr_connect_req(struct mt7697_cfg80211_info*,
u8, u32, const u8*, const u8*, u32, u32);
int mt7697_wr_disconnect_req(struct mt7697_cfg80211_info*, u32, const u8*); int mt7697_wr_disconnect_req(struct mt7697_cfg80211_info*, u32, const u8*);
int mt7697_wr_tx_raw_packet(struct mt7697_cfg80211_info*, const u8*, u32); int mt7697_wr_tx_raw_packet(struct mt7697_cfg80211_info*, const u8*, u32);
int mt7697_proc_data(void*); int mt7697_proc_data(void*);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment