ath6kl: remove all the wext and super extended private ioctl crap

This removes all the wext and super extended ioctl crap.
The wext interfaces are already provided by cfg80211 and
the "private" ioctl stuff defined here is not even using
private wext, they are using netdev private ioctls!
This is completely unacceptable upstream. Die. Die Die.

As part of all this we end up removing the
CONFIG_HOST_GPIO_SUPPORT which ended up being heavily
abused by the internal ioctl work.

Cc: Naveen Singh <nsingh@atheros.com>
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Luis R. Rodriguez 2011-03-29 17:56:06 -07:00 committed by Greg Kroah-Hartman
parent 8efba264d4
commit 69e87c22b6
9 changed files with 25 additions and 7785 deletions

View File

@ -100,12 +100,6 @@ config AR600x_BT_RESET_PIN
help
WLAN GPIO to be used for resetting BT
config ATH6KL_CFG80211
bool "CFG80211 support"
depends on ATH6K_LEGACY && CFG80211
help
Enables support for CFG80211 APIs. The default option is to use WEXT. Even with this option enabled, WEXT is not explicitly disabled and the onus of not exercising WEXT lies on the application(s) running in the user space.
config ATH6KL_HTC_RAW_INTERFACE
bool "RAW HTC support"
depends on ATH6K_LEGACY

View File

@ -85,11 +85,6 @@ ifeq ($(CONFIG_ATH6KL_CONFIG_GPIO_BT_RESET),y)
ccflags-y += -DATH6KL_CONFIG_GPIO_BT_RESET
endif
ifeq ($(CONFIG_ATH6KL_CFG80211),y)
ccflags-y += -DATH6K_CONFIG_CFG80211
ath6kl-y += os/linux/cfg80211.o
endif
ifeq ($(CONFIG_ATH6KL_HTC_RAW_INTERFACE),y)
ccflags-y += -DHTC_RAW_INTERFACE
endif
@ -135,12 +130,11 @@ ath6kl-y += htc2/htc_recv.o
ath6kl-y += htc2/htc_services.o
ath6kl-y += htc2/htc.o
ath6kl-y += bmi/src/bmi.o
ath6kl-y += os/linux/cfg80211.o
ath6kl-y += os/linux/ar6000_drv.o
ath6kl-y += os/linux/ar6000_raw_if.o
ath6kl-y += os/linux/ar6000_pm.o
ath6kl-y += os/linux/netbuf.o
ath6kl-y += os/linux/wireless_ext.o
ath6kl-y += os/linux/ioctl.o
ath6kl-y += os/linux/hci_bridge.o
ath6kl-y += miscdrv/common_drv.o
ath6kl-y += miscdrv/credit_dist.o

View File

@ -130,19 +130,6 @@ extern "C" {
#define A_WMI_PEER_EVENT(devt, eventCode, bssid) \
ar6000_peer_event ((devt), (eventCode), (bssid))
#ifdef CONFIG_HOST_GPIO_SUPPORT
#define A_WMI_GPIO_INTR_RX(intr_mask, input_values) \
ar6000_gpio_intr_rx((intr_mask), (input_values))
#define A_WMI_GPIO_DATA_RX(reg_id, value) \
ar6000_gpio_data_rx((reg_id), (value))
#define A_WMI_GPIO_ACK_RX() \
ar6000_gpio_ack_rx()
#endif
#ifdef SEND_EVENT_TO_APP
#define A_WMI_SEND_EVENT_TO_APP(ar, eventId, datap, len) \
@ -158,11 +145,6 @@ extern "C" {
#endif
#ifdef CONFIG_HOST_TCMD_SUPPORT
#define A_WMI_TCMD_RX_REPORT_EVENT(devt, results, len) \
ar6000_tcmd_rx_report_event((devt), (results), (len))
#endif
#define A_WMI_HBCHALLENGERESP_EVENT(devt, cookie, source) \
ar6000_hbChallengeResp_event((devt), (cookie), (source))

View File

@ -27,9 +27,7 @@
*/
#include "ar6000_drv.h"
#ifdef ATH6K_CONFIG_CFG80211
#include "cfg80211.h"
#endif /* ATH6K_CONFIG_CFG80211 */
#include "htc.h"
#include "wmi_filter_linux.h"
#include "epping_test.h"
@ -284,7 +282,6 @@ void ar6000_destroy(struct net_device *dev, unsigned int unregister);
static void ar6000_detect_error(unsigned long ptr);
static void ar6000_set_multicast_list(struct net_device *dev);
static struct net_device_stats *ar6000_get_stats(struct net_device *dev);
static struct iw_statistics *ar6000_get_iwstats(struct net_device * dev);
static void disconnect_timer_handler(unsigned long ptr);
@ -348,7 +345,6 @@ ar6000_sysfs_bmi_get_config(struct ar6_softc *ar, u32 mode);
struct net_device *ar6000_devices[MAX_AR6000];
static int is_netdev_registered;
extern struct iw_handler_def ath_iw_handler_def;
DECLARE_WAIT_QUEUE_HEAD(arEvent);
static void ar6000_cookie_init(struct ar6_softc *ar);
static void ar6000_cookie_cleanup(struct ar6_softc *ar);
@ -375,7 +371,6 @@ static struct net_device_ops ar6000_netdev_ops = {
.ndo_open = ar6000_open,
.ndo_stop = ar6000_close,
.ndo_get_stats = ar6000_get_stats,
.ndo_do_ioctl = ar6000_ioctl,
.ndo_start_xmit = ar6000_data_tx,
.ndo_set_multicast_list = ar6000_set_multicast_list,
};
@ -669,10 +664,6 @@ ar6000_init_module(void)
memset(&aptcTR, 0, sizeof(APTC_TRAFFIC_RECORD));
#endif /* ADAPTIVE_POWER_THROUGHPUT_CONTROL */
#ifdef CONFIG_HOST_GPIO_SUPPORT
ar6000_gpio_init();
#endif /* CONFIG_HOST_GPIO_SUPPORT */
status = HIFInit(&osdrvCallbacks);
if (status)
return -ENODEV;
@ -1533,9 +1524,6 @@ init_netdev(struct net_device *dev, char *name)
{
dev->netdev_ops = &ar6000_netdev_ops;
dev->watchdog_timeo = AR6000_TX_TIMEOUT;
dev->wireless_handlers = &ath_iw_handler_def;
ath_iw_handler_def.get_wireless_stats = ar6000_get_iwstats; /*Displayed via proc fs */
/*
* We need the OS to provide us with more headroom in order to
@ -1620,9 +1608,7 @@ ar6000_avail_ev(void *context, void *hif_handle)
struct ar6_softc *ar;
int device_index = 0;
struct htc_init_info htcInfo;
#ifdef ATH6K_CONFIG_CFG80211
struct wireless_dev *wdev;
#endif /* ATH6K_CONFIG_CFG80211 */
int r = 0;
struct hif_device_os_device_info osDevInfo;
@ -1650,23 +1636,12 @@ ar6000_avail_ev(void *context, void *hif_handle)
/* we use another local "i" variable below. */
device_index = i;
#ifdef ATH6K_CONFIG_CFG80211
wdev = ar6k_cfg80211_init(osDevInfo.pOSDevice);
if (IS_ERR(wdev)) {
AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: ar6k_cfg80211_init failed\n", __func__));
return A_ERROR;
}
ar_netif = wdev_priv(wdev);
#else
dev = alloc_etherdev(sizeof(struct ar6_softc));
if (dev == NULL) {
AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("ar6000_available: can't alloc etherdev\n"));
return A_ERROR;
}
ether_setup(dev);
ar_netif = ar6k_priv(dev);
SET_NETDEV_DEV(dev, osDevInfo.pOSDevice);
#endif /* ATH6K_CONFIG_CFG80211 */
if (ar_netif == NULL) {
AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: Can't allocate ar6k priv memory\n", __func__));
@ -1676,7 +1651,6 @@ ar6000_avail_ev(void *context, void *hif_handle)
A_MEMZERO(ar_netif, sizeof(struct ar6_softc));
ar = (struct ar6_softc *)ar_netif;
#ifdef ATH6K_CONFIG_CFG80211
ar->wdev = wdev;
wdev->iftype = NL80211_IFTYPE_STATION;
@ -1692,7 +1666,6 @@ ar6000_avail_ev(void *context, void *hif_handle)
wdev->netdev = dev;
ar->arNetworkType = INFRA_NETWORK;
ar->smeState = SME_DISCONNECTED;
#endif /* ATH6K_CONFIG_CFG80211 */
init_netdev(dev, ifname);
@ -2117,9 +2090,7 @@ ar6000_destroy(struct net_device *dev, unsigned int unregister)
}
free_netdev(dev);
#ifdef ATH6K_CONFIG_CFG80211
ar6k_cfg80211_deinit(ar);
#endif /* ATH6K_CONFIG_CFG80211 */
#ifdef CONFIG_AP_VIRTUL_ADAPTER_SUPPORT
ar6000_remove_ap_interface();
@ -2267,11 +2238,9 @@ ar6000_open(struct net_device *dev)
spin_lock_irqsave(&ar->arLock, flags);
#ifdef ATH6K_CONFIG_CFG80211
if(ar->arWlanState == WLAN_DISABLED) {
ar->arWlanState = WLAN_ENABLED;
}
#endif /* ATH6K_CONFIG_CFG80211 */
if( ar->arConnected || bypasswmi) {
netif_carrier_on(dev);
@ -2288,12 +2257,9 @@ ar6000_open(struct net_device *dev)
static int
ar6000_close(struct net_device *dev)
{
#ifdef ATH6K_CONFIG_CFG80211
struct ar6_softc *ar = (struct ar6_softc *)ar6k_priv(dev);
#endif /* ATH6K_CONFIG_CFG80211 */
netif_stop_queue(dev);
#ifdef ATH6K_CONFIG_CFG80211
ar6000_disconnect(ar);
if(ar->arWmiReady == true) {
@ -2304,7 +2270,6 @@ ar6000_close(struct net_device *dev)
ar->arWlanState = WLAN_DISABLED;
}
ar6k_cfg80211_scanComplete_event(ar, A_ECANCELED);
#endif /* ATH6K_CONFIG_CFG80211 */
return 0;
}
@ -4116,93 +4081,6 @@ ar6000_get_stats(struct net_device *dev)
return &ar->arNetStats;
}
static struct iw_statistics *
ar6000_get_iwstats(struct net_device * dev)
{
struct ar6_softc *ar = (struct ar6_softc *)ar6k_priv(dev);
TARGET_STATS *pStats = &ar->arTargetStats;
struct iw_statistics * pIwStats = &ar->arIwStats;
int rtnllocked;
if (ar->bIsDestroyProgress || ar->arWmiReady == false || ar->arWlanState == WLAN_DISABLED)
{
pIwStats->status = 0;
pIwStats->qual.qual = 0;
pIwStats->qual.level =0;
pIwStats->qual.noise = 0;
pIwStats->discard.code =0;
pIwStats->discard.retries=0;
pIwStats->miss.beacon =0;
return pIwStats;
}
/*
* The in_atomic function is used to determine if the scheduling is
* allowed in the current context or not. This was introduced in 2.6
* From what I have read on the differences between 2.4 and 2.6, the
* 2.4 kernel did not support preemption and so this check might not
* be required for 2.4 kernels.
*/
if (in_atomic())
{
wmi_get_stats_cmd(ar->arWmi);
pIwStats->status = 1 ;
pIwStats->qual.qual = pStats->cs_aveBeacon_rssi - 161;
pIwStats->qual.level =pStats->cs_aveBeacon_rssi; /* noise is -95 dBm */
pIwStats->qual.noise = pStats->noise_floor_calibation;
pIwStats->discard.code = pStats->rx_decrypt_err;
pIwStats->discard.retries = pStats->tx_retry_cnt;
pIwStats->miss.beacon = pStats->cs_bmiss_cnt;
return pIwStats;
}
dev_hold(dev);
rtnllocked = rtnl_is_locked();
if (rtnllocked) {
rtnl_unlock();
}
pIwStats->status = 0;
if (down_interruptible(&ar->arSem)) {
goto err_exit;
}
do {
if (ar->bIsDestroyProgress || ar->arWlanState == WLAN_DISABLED) {
break;
}
ar->statsUpdatePending = true;
if(wmi_get_stats_cmd(ar->arWmi) != 0) {
break;
}
wait_event_interruptible_timeout(arEvent, ar->statsUpdatePending == false, wmitimeout * HZ);
if (signal_pending(current)) {
AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("ar6000 : WMI get stats timeout \n"));
break;
}
pIwStats->status = 1 ;
pIwStats->qual.qual = pStats->cs_aveBeacon_rssi - 161;
pIwStats->qual.level =pStats->cs_aveBeacon_rssi; /* noise is -95 dBm */
pIwStats->qual.noise = pStats->noise_floor_calibation;
pIwStats->discard.code = pStats->rx_decrypt_err;
pIwStats->discard.retries = pStats->tx_retry_cnt;
pIwStats->miss.beacon = pStats->cs_bmiss_cnt;
} while (0);
up(&ar->arSem);
err_exit:
if (rtnllocked) {
rtnl_lock();
}
dev_put(dev);
return pIwStats;
}
void
ar6000_ready_event(void *devt, u8 *datap, u8 phyCap, u32 sw_ver, u32 abi_ver)
{
@ -4224,6 +4102,29 @@ ar6000_ready_event(void *devt, u8 *datap, u8 phyCap, u32 sw_ver, u32 abi_ver)
wake_up(&arEvent);
}
void ar6000_install_static_wep_keys(struct ar6_softc *ar)
{
u8 index;
u8 keyUsage;
for (index = WMI_MIN_KEY_INDEX; index <= WMI_MAX_KEY_INDEX; index++) {
if (ar->arWepKeyList[index].arKeyLen) {
keyUsage = GROUP_USAGE;
if (index == ar->arDefTxKeyIndex) {
keyUsage |= TX_USAGE;
}
wmi_addKey_cmd(ar->arWmi,
index,
WEP_CRYPT,
keyUsage,
ar->arWepKeyList[index].arKeyLen,
NULL,
ar->arWepKeyList[index].arKey, KEY_OP_INIT_VAL, NULL,
NO_SYNC_WMIFLAG);
}
}
}
void
add_new_sta(struct ar6_softc *ar, u8 *mac, u16 aid, u8 *wpaie,
u8 ielen, u8 keymgmt, u8 ucipher, u8 auth)
@ -4362,13 +4263,11 @@ skip_key:
return;
}
#ifdef ATH6K_CONFIG_CFG80211
ar6k_cfg80211_connect_event(ar, channel, bssid,
listenInterval, beaconInterval,
networkType, beaconIeLen,
assocReqLen, assocRespLen,
assocInfo);
#endif /* ATH6K_CONFIG_CFG80211 */
memcpy(ar->arBssid, bssid, sizeof(ar->arBssid));
ar->arBssChannel = channel;
@ -4482,26 +4381,6 @@ skip_key:
netif_wake_queue(ar->arNetDev);
/* For CFG80211 the key configuration and the default key comes in after connect so no point in plumbing invalid keys */
#ifndef ATH6K_CONFIG_CFG80211
if ((networkType & ADHOC_NETWORK) &&
(OPEN_AUTH == ar->arDot11AuthMode) &&
(NONE_AUTH == ar->arAuthMode) &&
(WEP_CRYPT == ar->arPairwiseCrypto))
{
if (!ar->arConnected) {
wmi_addKey_cmd(ar->arWmi,
ar->arDefTxKeyIndex,
WEP_CRYPT,
GROUP_USAGE | TX_USAGE,
ar->arWepKeyList[ar->arDefTxKeyIndex].arKeyLen,
NULL,
ar->arWepKeyList[ar->arDefTxKeyIndex].arKey, KEY_OP_INIT_VAL, NULL,
NO_SYNC_WMIFLAG);
}
}
#endif /* ATH6K_CONFIG_CFG80211 */
/* Update connect & link status atomically */
spin_lock_irqsave(&ar->arLock, flags);
ar->arConnected = true;
@ -4631,11 +4510,9 @@ ar6000_disconnect_event(struct ar6_softc *ar, u8 reason, u8 *bssid,
return;
}
#ifdef ATH6K_CONFIG_CFG80211
ar6k_cfg80211_disconnect_event(ar, reason, bssid,
assocRespLen, assocInfo,
protocolReasonStatus);
#endif /* ATH6K_CONFIG_CFG80211 */
/* Send disconnect event to supplicant */
A_MEMZERO(&wrqu, sizeof(wrqu));
@ -4882,9 +4759,7 @@ ar6000_tkip_micerr_event(struct ar6_softc *ar, u8 keyid, bool ismcast)
tag, s->mac[0],s->mac[1],s->mac[2],s->mac[3],s->mac[4],s->mac[5]);
} else {
#ifdef ATH6K_CONFIG_CFG80211
ar6k_cfg80211_tkip_micerr_event(ar, keyid, ismcast);
#endif /* ATH6K_CONFIG_CFG80211 */
A_PRINTF("AR6000 TKIP MIC error received for keyid %d %scast\n",
keyid & 0x3, ismcast ? "multi": "uni");
@ -4901,9 +4776,7 @@ void
ar6000_scanComplete_event(struct ar6_softc *ar, int status)
{
#ifdef ATH6K_CONFIG_CFG80211
ar6k_cfg80211_scanComplete_event(ar, status);
#endif /* ATH6K_CONFIG_CFG80211 */
if (!ar->arUserBssFilter) {
wmi_bssfilter_cmd(ar->arWmi, NONE_BSS_FILTER, 0);

View File

@ -33,9 +33,7 @@
#include <linux/if_arp.h>
#include <linux/ip.h>
#include <linux/wireless.h>
#ifdef ATH6K_CONFIG_CFG80211
#include <net/cfg80211.h>
#endif /* ATH6K_CONFIG_CFG80211 */
#include <linux/module.h>
#include <asm/io.h>
@ -373,7 +371,6 @@ struct ar_wep_key {
u8 arKey[64];
} ;
#ifdef ATH6K_CONFIG_CFG80211
struct ar_key {
u8 key[WLAN_MAX_KEY_LEN];
u8 key_len;
@ -387,8 +384,6 @@ enum {
SME_CONNECTING,
SME_CONNECTED
};
#endif /* ATH6K_CONFIG_CFG80211 */
struct ar_node_mapping {
u8 macAddress[6];
@ -584,12 +579,10 @@ struct ar6_softc {
WMI_BTCOEX_STATS_EVENT arBtcoexStats;
s32 (*exitCallback)(void *config); /* generic callback at AR6K exit */
struct hif_device_os_device_info osDevInfo;
#ifdef ATH6K_CONFIG_CFG80211
struct wireless_dev *wdev;
struct cfg80211_scan_request *scan_request;
struct ar_key keys[WMI_MAX_KEY_INDEX + 1];
u32 smeState;
#endif /* ATH6K_CONFIG_CFG80211 */
u16 arWlanPowerState;
bool arWlanOff;
#ifdef CONFIG_PM
@ -619,30 +612,10 @@ struct ar_virtual_interface {
};
#endif /* CONFIG_AP_VIRTUAL_ADAPTER_SUPPORT */
#ifdef ATH6K_CONFIG_CFG80211
static inline void *ar6k_priv(struct net_device *dev)
{
return (wdev_priv(dev->ieee80211_ptr));
}
#else
#ifdef CONFIG_AP_VIRTUAL_ADAPTER_SUPPORT
static inline void *ar6k_priv(struct net_device *dev)
{
extern struct net_device *arApNetDev;
if (arApNetDev == dev) {
/* return arDev saved in virtual interface context */
struct ar_virtual_interface *arVirDev;
arVirDev = netdev_priv(dev);
return arVirDev->arDev;
} else {
return netdev_priv(dev);
}
}
#else
#define ar6k_priv netdev_priv
#endif /* CONFIG_AP_VIRTUAL_ADAPTER_SUPPORT */
#endif /* ATH6K_CONFIG_CFG80211 */
#define SET_HCI_BUS_TYPE(pHciDev, __bus, __type) do { \
(pHciDev)->bus = (__bus); \
@ -688,9 +661,6 @@ struct ar_giwscan_param {
spin_unlock_bh(lock); \
} while (0)
int ar6000_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
int ar6000_ioctl_dispatcher(struct net_device *dev, struct ifreq *rq, int cmd);
void ar6000_gpio_init(void);
void ar6000_init_profile_info(struct ar6_softc *ar);
void ar6000_install_static_wep_keys(struct ar6_softc *ar);
int ar6000_init(struct net_device *dev);

View File

@ -30,13 +30,6 @@ extern "C" {
#include <linux/version.h>
/*
* Host-side GPIO support is optional.
* If run-time access to GPIO pins is not required, then
* this should be changed to #undef.
*/
#define CONFIG_HOST_GPIO_SUPPORT
/*
* Host side Test Command support
*/

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -132,12 +132,6 @@ wmi_set_params_event_rx(struct wmi_t *wmip, u8 *datap, u32 len);
static int
wmi_acm_reject_event_rx(struct wmi_t *wmip, u8 *datap, u32 len);
#ifdef CONFIG_HOST_GPIO_SUPPORT
static int wmi_gpio_intr_rx(struct wmi_t *wmip, u8 *datap, int len);
static int wmi_gpio_data_rx(struct wmi_t *wmip, u8 *datap, int len);
static int wmi_gpio_ack_rx(struct wmi_t *wmip, u8 *datap, int len);
#endif /* CONFIG_HOST_GPIO_SUPPORT */
#ifdef CONFIG_HOST_TCMD_SUPPORT
static int
wmi_tcmd_test_report_rx(struct wmi_t *wmip, u8 *datap, int len);
@ -865,17 +859,6 @@ wmi_control_rx_xtnd(struct wmi_t *wmip, void *osbuf)
status = wmi_dset_data_req_rx(wmip, datap, len);
break;
#endif /* CONFIG_HOST_DSET_SUPPORT */
#ifdef CONFIG_HOST_GPIO_SUPPORT
case (WMIX_GPIO_INTR_EVENTID):
wmi_gpio_intr_rx(wmip, datap, len);
break;
case (WMIX_GPIO_DATA_EVENTID):
wmi_gpio_data_rx(wmip, datap, len);
break;
case (WMIX_GPIO_ACK_EVENTID):
wmi_gpio_ack_rx(wmip, datap, len);
break;
#endif /* CONFIG_HOST_GPIO_SUPPORT */
case (WMIX_HB_CHALLENGE_RESP_EVENTID):
wmi_hbChallengeResp_rx(wmip, datap, len);
break;
@ -1208,7 +1191,7 @@ wmi_simple_cmd(struct wmi_t *wmip, WMI_COMMAND_ID cmdid)
/* Send a "simple" extended wmi command -- one with no arguments.
Enabling this command only if GPIO or profiling support is enabled.
This is to suppress warnings on some platforms */
#if defined(CONFIG_HOST_GPIO_SUPPORT) || defined(CONFIG_TARGET_PROFILE_SUPPORT)
#if defined(CONFIG_TARGET_PROFILE_SUPPORT)
static int
wmi_simple_cmd_xtnd(struct wmi_t *wmip, WMIX_COMMAND_ID cmdid)
{
@ -2298,46 +2281,6 @@ wmi_dbglog_event_rx(struct wmi_t *wmip, u8 *datap, int len)
return 0;
}
#ifdef CONFIG_HOST_GPIO_SUPPORT
static int
wmi_gpio_intr_rx(struct wmi_t *wmip, u8 *datap, int len)
{
WMIX_GPIO_INTR_EVENT *gpio_intr = (WMIX_GPIO_INTR_EVENT *)datap;
A_DPRINTF(DBG_WMI,
(DBGFMT "Enter - intrmask=0x%x input=0x%x.\n", DBGARG,
gpio_intr->intr_mask, gpio_intr->input_values));
A_WMI_GPIO_INTR_RX(gpio_intr->intr_mask, gpio_intr->input_values);
return 0;
}
static int
wmi_gpio_data_rx(struct wmi_t *wmip, u8 *datap, int len)
{
WMIX_GPIO_DATA_EVENT *gpio_data = (WMIX_GPIO_DATA_EVENT *)datap;
A_DPRINTF(DBG_WMI,
(DBGFMT "Enter - reg=%d value=0x%x\n", DBGARG,
gpio_data->reg_id, gpio_data->value));
A_WMI_GPIO_DATA_RX(gpio_data->reg_id, gpio_data->value);
return 0;
}
static int
wmi_gpio_ack_rx(struct wmi_t *wmip, u8 *datap, int len)
{
A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
A_WMI_GPIO_ACK_RX();
return 0;
}
#endif /* CONFIG_HOST_GPIO_SUPPORT */
/*
* Called to send a wmi command. Command specific data is already built
* on osbuf and current osbuf->data points to it.
@ -4282,132 +4225,6 @@ wmi_set_powersave_timers_cmd(struct wmi_t *wmip,
NO_SYNC_WMIFLAG));
}
#ifdef CONFIG_HOST_GPIO_SUPPORT
/* Send a command to Target to change GPIO output pins. */
int
wmi_gpio_output_set(struct wmi_t *wmip,
u32 set_mask,
u32 clear_mask,
u32 enable_mask,
u32 disable_mask)
{
void *osbuf;
WMIX_GPIO_OUTPUT_SET_CMD *output_set;
int size;
size = sizeof(*output_set);
A_DPRINTF(DBG_WMI,
(DBGFMT "Enter - set=0x%x clear=0x%x enb=0x%x dis=0x%x\n", DBGARG,
set_mask, clear_mask, enable_mask, disable_mask));
osbuf = A_NETBUF_ALLOC(size);
if (osbuf == NULL) {
return A_NO_MEMORY;
}
A_NETBUF_PUT(osbuf, size);
output_set = (WMIX_GPIO_OUTPUT_SET_CMD *)(A_NETBUF_DATA(osbuf));
output_set->set_mask = set_mask;
output_set->clear_mask = clear_mask;
output_set->enable_mask = enable_mask;
output_set->disable_mask = disable_mask;
return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_GPIO_OUTPUT_SET_CMDID,
NO_SYNC_WMIFLAG));
}
/* Send a command to the Target requesting state of the GPIO input pins */
int
wmi_gpio_input_get(struct wmi_t *wmip)
{
A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
return wmi_simple_cmd_xtnd(wmip, WMIX_GPIO_INPUT_GET_CMDID);
}
/* Send a command to the Target that changes the value of a GPIO register. */
int
wmi_gpio_register_set(struct wmi_t *wmip,
u32 gpioreg_id,
u32 value)
{
void *osbuf;
WMIX_GPIO_REGISTER_SET_CMD *register_set;
int size;
size = sizeof(*register_set);
A_DPRINTF(DBG_WMI,
(DBGFMT "Enter - reg=%d value=0x%x\n", DBGARG, gpioreg_id, value));
osbuf = A_NETBUF_ALLOC(size);
if (osbuf == NULL) {
return A_NO_MEMORY;
}
A_NETBUF_PUT(osbuf, size);
register_set = (WMIX_GPIO_REGISTER_SET_CMD *)(A_NETBUF_DATA(osbuf));
register_set->gpioreg_id = gpioreg_id;
register_set->value = value;
return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_GPIO_REGISTER_SET_CMDID,
NO_SYNC_WMIFLAG));
}
/* Send a command to the Target to fetch the value of a GPIO register. */
int
wmi_gpio_register_get(struct wmi_t *wmip,
u32 gpioreg_id)
{
void *osbuf;
WMIX_GPIO_REGISTER_GET_CMD *register_get;
int size;
size = sizeof(*register_get);
A_DPRINTF(DBG_WMI, (DBGFMT "Enter - reg=%d\n", DBGARG, gpioreg_id));
osbuf = A_NETBUF_ALLOC(size);
if (osbuf == NULL) {
return A_NO_MEMORY;
}
A_NETBUF_PUT(osbuf, size);
register_get = (WMIX_GPIO_REGISTER_GET_CMD *)(A_NETBUF_DATA(osbuf));
register_get->gpioreg_id = gpioreg_id;
return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_GPIO_REGISTER_GET_CMDID,
NO_SYNC_WMIFLAG));
}
/* Send a command to the Target acknowledging some GPIO interrupts. */
int
wmi_gpio_intr_ack(struct wmi_t *wmip,
u32 ack_mask)
{
void *osbuf;
WMIX_GPIO_INTR_ACK_CMD *intr_ack;
int size;
size = sizeof(*intr_ack);
A_DPRINTF(DBG_WMI, (DBGFMT "Enter ack_mask=0x%x\n", DBGARG, ack_mask));
osbuf = A_NETBUF_ALLOC(size);
if (osbuf == NULL) {
return A_NO_MEMORY;
}
A_NETBUF_PUT(osbuf, size);
intr_ack = (WMIX_GPIO_INTR_ACK_CMD *)(A_NETBUF_DATA(osbuf));
intr_ack->ack_mask = ack_mask;
return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_GPIO_INTR_ACK_CMDID,
NO_SYNC_WMIFLAG));
}
#endif /* CONFIG_HOST_GPIO_SUPPORT */
int
wmi_set_access_params_cmd(struct wmi_t *wmip, u8 ac, u16 txop, u8 eCWmin,
u8 eCWmax, u8 aifsn)
@ -4683,8 +4500,6 @@ wmi_tcmd_test_report_rx(struct wmi_t *wmip, u8 *datap, int len)
A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
A_WMI_TCMD_RX_REPORT_EVENT(wmip->wmi_devt, datap, len);
return 0;
}