Skip to content

Commit

Permalink
staging: ath6kl: Add configuration for excessive TX retry threshold
Browse files Browse the repository at this point in the history
Adding host side interface to configure the excessive TX retry threshold.
It is used by the target to determine disconnection triggers. Additionally,
some definitions have been added to header file wmi.h to bridge the gap
for the newly added command.

Signed-off-by: Vipin Mehta <vmehta@atheros.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Vipin Mehta authored and Greg Kroah-Hartman committed Feb 18, 2011
1 parent 1581595 commit 711a1bc
Show file tree
Hide file tree
Showing 6 changed files with 85 additions and 11 deletions.
36 changes: 25 additions & 11 deletions drivers/staging/ath6kl/include/common/wmi.h
Original file line number Diff line number Diff line change
Expand Up @@ -422,17 +422,24 @@ typedef enum {
WMI_AP_SET_11BG_RATESET_CMDID,
WMI_SET_PMK_CMDID,
WMI_MCAST_FILTER_CMDID,
/* COEX CMDID AR6003*/
WMI_SET_BTCOEX_FE_ANT_CMDID,
WMI_SET_BTCOEX_COLOCATED_BT_DEV_CMDID,
WMI_SET_BTCOEX_SCO_CONFIG_CMDID,
WMI_SET_BTCOEX_A2DP_CONFIG_CMDID,
WMI_SET_BTCOEX_ACLCOEX_CONFIG_CMDID,
WMI_SET_BTCOEX_BTINQUIRY_PAGE_CONFIG_CMDID,
WMI_SET_BTCOEX_DEBUG_CMDID,
WMI_SET_BTCOEX_BT_OPERATING_STATUS_CMDID,
WMI_GET_BTCOEX_STATS_CMDID,
WMI_GET_BTCOEX_CONFIG_CMDID,
/* COEX CMDID AR6003*/
WMI_SET_BTCOEX_FE_ANT_CMDID,
WMI_SET_BTCOEX_COLOCATED_BT_DEV_CMDID,
WMI_SET_BTCOEX_SCO_CONFIG_CMDID,
WMI_SET_BTCOEX_A2DP_CONFIG_CMDID,
WMI_SET_BTCOEX_ACLCOEX_CONFIG_CMDID,
WMI_SET_BTCOEX_BTINQUIRY_PAGE_CONFIG_CMDID,
WMI_SET_BTCOEX_DEBUG_CMDID,
WMI_SET_BTCOEX_BT_OPERATING_STATUS_CMDID,
WMI_GET_BTCOEX_STATS_CMDID,
WMI_GET_BTCOEX_CONFIG_CMDID,
WMI_GET_PMK_CMDID,
WMI_SET_PASSPHRASE_CMDID,
WMI_ENABLE_WAC_CMDID,
WMI_WAC_SCAN_REPLY_CMDID,
WMI_WAC_CTRL_REQ_CMDID,
WMI_SET_DIV_PARAMS_CMDID,
WMI_SET_EXCESS_TX_RETRY_THRES_CMDID,
} WMI_COMMAND_ID;

/*
Expand Down Expand Up @@ -549,6 +556,13 @@ typedef PREPACK struct {
u8 pmk[WMI_PMK_LEN];
} POSTPACK WMI_SET_PMK_CMD;

/*
* WMI_SET_EXCESS_TX_RETRY_THRES_CMDID
*/
typedef PREPACK struct {
A_UINT32 threshold;
} POSTPACK WMI_SET_EXCESS_TX_RETRY_THRES_CMD;

/*
* WMI_ADD_CIPHER_KEY_CMDID
*/
Expand Down
3 changes: 3 additions & 0 deletions drivers/staging/ath6kl/include/wmi_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -421,6 +421,9 @@ wmi_set_wlan_conn_precedence_cmd(struct wmi_t *wmip, BT_WLAN_CONN_PRECEDENCE pre
int
wmi_set_pmk_cmd(struct wmi_t *wmip, u8 *pmk);

int
wmi_set_excess_tx_retry_thres_cmd(struct wmi_t *wmip, WMI_SET_EXCESS_TX_RETRY_THRES_CMD *cmd);

u16 wmi_ieee2freq (int chan);

u32 wmi_freq2ieee (u16 freq);
Expand Down
1 change: 1 addition & 0 deletions drivers/staging/ath6kl/os/linux/include/athdrv_linux.h
Original file line number Diff line number Diff line change
Expand Up @@ -997,6 +997,7 @@ typedef enum {

#define AR6000_XIOCTL_WMI_SET_TX_SGI_PARAM 154

#define AR6000_XIOCTL_WMI_SET_EXCESS_TX_RETRY_THRES 161

/* used by AR6000_IOCTL_WMI_GETREV */
struct ar6000_version {
Expand Down
7 changes: 7 additions & 0 deletions drivers/staging/ath6kl/os/linux/include/wmi_filter_linux.h
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,13 @@ u8 xioctl_filter[] = {
(0xFF), /* AR6000_XIOCTL_ADD_AP_INTERFACE 152 */
(0xFF), /* AR6000_XIOCTL_REMOVE_AP_INTERFACE 153 */
(0xFF), /* AR6000_XIOCTL_WMI_SET_TX_SGI_PARAM 154 */
(INFRA_NETWORK | ADHOC_NETWORK), /* AR6000_XIOCTL_WMI_SET_WPA_OFFLOAD_STATE 155 */
(INFRA_NETWORK | ADHOC_NETWORK), /* AR6000_XIOCTL_WMI_SET_PASSPHRASE 156 */
(0xFF),
(0xFF),
(0xFF),
(0xFF),
(INFRA_NETWORK | ADHOC_NETWORK), /* AR6000_XIOCTL_WMI_SET_EXCESS_TX_RETRY_THRES 161 */
};

#endif /*_WMI_FILTER_LINUX_H_*/
28 changes: 28 additions & 0 deletions drivers/staging/ath6kl/os/linux/ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -1329,6 +1329,28 @@ ar6000_xioctl_get_btcoex_stats_cmd(struct net_device * dev, char *userdata, stru
return(ret);
}

static int
ar6000_xioctl_set_excess_tx_retry_thres_cmd(struct net_device * dev, char * userdata)
{
AR_SOFTC_T *ar = (AR_SOFTC_T *)ar6k_priv(dev);
WMI_SET_EXCESS_TX_RETRY_THRES_CMD cmd;
int ret = 0;

if (ar->arWmiReady == false) {
return -EIO;
}

if (copy_from_user(&cmd, userdata, sizeof(cmd))) {
return -EFAULT;
}

if (wmi_set_excess_tx_retry_thres_cmd(ar->arWmi, &cmd) != 0)
{
ret = -EINVAL;
}
return(ret);
}

#ifdef CONFIG_HOST_GPIO_SUPPORT
struct ar6000_gpio_intr_wait_cmd_s gpio_intr_results;
/* gpio_reg_results and gpio_data_available are protected by arSem */
Expand Down Expand Up @@ -4660,6 +4682,12 @@ int ar6000_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
#endif
break;

case AR6000_XIOCTL_WMI_SET_EXCESS_TX_RETRY_THRES:
{
ret = ar6000_xioctl_set_excess_tx_retry_thres_cmd(dev, userdata);
break;
}

default:
ret = -EOPNOTSUPP;
}
Expand Down
21 changes: 21 additions & 0 deletions drivers/staging/ath6kl/wmi/wmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -6609,6 +6609,27 @@ wmi_set_pmk_cmd(struct wmi_t *wmip, u8 *pmk)
return (wmi_cmd_send(wmip, osbuf, WMI_SET_PMK_CMDID, NO_SYNC_WMIFLAG));
}

int
wmi_set_excess_tx_retry_thres_cmd(struct wmi_t *wmip, WMI_SET_EXCESS_TX_RETRY_THRES_CMD *cmd)
{
void *osbuf;
WMI_SET_EXCESS_TX_RETRY_THRES_CMD *p;

osbuf = A_NETBUF_ALLOC(sizeof(WMI_SET_EXCESS_TX_RETRY_THRES_CMD));
if (osbuf == NULL) {
return A_NO_MEMORY;
}

A_NETBUF_PUT(osbuf, sizeof(WMI_SET_EXCESS_TX_RETRY_THRES_CMD));

p = (WMI_SET_EXCESS_TX_RETRY_THRES_CMD *)(A_NETBUF_DATA(osbuf));
memset(p, 0, sizeof(*p));

p->threshold = cmd->threshold;

return (wmi_cmd_send(wmip, osbuf, WMI_SET_EXCESS_TX_RETRY_THRES_CMDID, NO_SYNC_WMIFLAG));
}

int
wmi_SGI_cmd(struct wmi_t *wmip, u32 sgiMask, u8 sgiPERThreshold)
{
Expand Down

0 comments on commit 711a1bc

Please sign in to comment.