Loading drivers/net/wireless/wl12xx/acx.c +76 −10 Original line number Diff line number Diff line Loading @@ -783,6 +783,10 @@ int wl1271_acx_sta_rate_policies(struct wl1271 *wl) acx->rate_class_cnt = cpu_to_le32(ACX_TX_RATE_POLICY_CNT); wl1271_debug(DEBUG_ACX, "basic_rate: 0x%x, full_rate: 0x%x", acx->rate_class[ACX_TX_BASIC_RATE].enabled_rates, acx->rate_class[ACX_TX_AP_FULL_RATE].enabled_rates); ret = wl1271_cmd_configure(wl, ACX_RATE_POLICY, acx, sizeof(*acx)); if (ret < 0) { wl1271_warning("Setting of rate policies failed: %d", ret); Loading Loading @@ -947,9 +951,9 @@ out: return ret; } int wl1271_acx_mem_cfg(struct wl1271 *wl) int wl1271_acx_ap_mem_cfg(struct wl1271 *wl) { struct wl1271_acx_config_memory *mem_conf; struct wl1271_acx_ap_config_memory *mem_conf; int ret; wl1271_debug(DEBUG_ACX, "wl1271 mem cfg"); Loading @@ -961,10 +965,10 @@ int wl1271_acx_mem_cfg(struct wl1271 *wl) } /* memory config */ mem_conf->num_stations = DEFAULT_NUM_STATIONS; mem_conf->rx_mem_block_num = ACX_RX_MEM_BLOCKS; mem_conf->tx_min_mem_block_num = ACX_TX_MIN_MEM_BLOCKS; mem_conf->num_ssid_profiles = ACX_NUM_SSID_PROFILES; mem_conf->num_stations = wl->conf.mem.num_stations; mem_conf->rx_mem_block_num = wl->conf.mem.rx_block_num; mem_conf->tx_min_mem_block_num = wl->conf.mem.tx_min_block_num; mem_conf->num_ssid_profiles = wl->conf.mem.ssid_profiles; mem_conf->total_tx_descriptors = cpu_to_le32(ACX_TX_DESCRIPTORS); ret = wl1271_cmd_configure(wl, ACX_MEM_CFG, mem_conf, Loading @@ -979,13 +983,45 @@ out: return ret; } int wl1271_acx_init_mem_config(struct wl1271 *wl) int wl1271_acx_sta_mem_cfg(struct wl1271 *wl) { struct wl1271_acx_sta_config_memory *mem_conf; int ret; ret = wl1271_acx_mem_cfg(wl); if (ret < 0) wl1271_debug(DEBUG_ACX, "wl1271 mem cfg"); mem_conf = kzalloc(sizeof(*mem_conf), GFP_KERNEL); if (!mem_conf) { ret = -ENOMEM; goto out; } /* memory config */ mem_conf->num_stations = wl->conf.mem.num_stations; mem_conf->rx_mem_block_num = wl->conf.mem.rx_block_num; mem_conf->tx_min_mem_block_num = wl->conf.mem.tx_min_block_num; mem_conf->num_ssid_profiles = wl->conf.mem.ssid_profiles; mem_conf->total_tx_descriptors = cpu_to_le32(ACX_TX_DESCRIPTORS); mem_conf->dyn_mem_enable = wl->conf.mem.dynamic_memory; mem_conf->tx_free_req = wl->conf.mem.min_req_tx_blocks; mem_conf->rx_free_req = wl->conf.mem.min_req_rx_blocks; mem_conf->tx_min = wl->conf.mem.tx_min; ret = wl1271_cmd_configure(wl, ACX_MEM_CFG, mem_conf, sizeof(*mem_conf)); if (ret < 0) { wl1271_warning("wl1271 mem config failed: %d", ret); goto out; } out: kfree(mem_conf); return ret; } int wl1271_acx_init_mem_config(struct wl1271 *wl) { int ret; wl->target_mem_map = kzalloc(sizeof(struct wl1271_acx_mem_map), GFP_KERNEL); Loading Loading @@ -1476,3 +1512,33 @@ out: kfree(acx); return ret; } int wl1271_acx_config_ps(struct wl1271 *wl) { struct wl1271_acx_config_ps *config_ps; int ret; wl1271_debug(DEBUG_ACX, "acx config ps"); config_ps = kzalloc(sizeof(*config_ps), GFP_KERNEL); if (!config_ps) { ret = -ENOMEM; goto out; } config_ps->exit_retries = wl->conf.conn.psm_exit_retries; config_ps->enter_retries = wl->conf.conn.psm_entry_retries; config_ps->null_data_rate = cpu_to_le32(wl->basic_rate); ret = wl1271_cmd_configure(wl, ACX_CONFIG_PS, config_ps, sizeof(*config_ps)); if (ret < 0) { wl1271_warning("acx config ps failed: %d", ret); goto out; } out: kfree(config_ps); return ret; } drivers/net/wireless/wl12xx/acx.h +31 −10 Original line number Diff line number Diff line Loading @@ -133,7 +133,6 @@ enum { #define DEFAULT_UCAST_PRIORITY 0 #define DEFAULT_RX_Q_PRIORITY 0 #define DEFAULT_NUM_STATIONS 1 #define DEFAULT_RXQ_PRIORITY 0 /* low 0 .. 15 high */ #define DEFAULT_RXQ_TYPE 0x07 /* All frames, Data/Ctrl/Mgmt */ #define TRACE_BUFFER_MAX_SIZE 256 Loading Loading @@ -797,12 +796,9 @@ struct acx_tx_config_options { __le16 tx_compl_threshold; /* number of packets */ } __packed; #define ACX_RX_MEM_BLOCKS 70 #define ACX_TX_MIN_MEM_BLOCKS 40 #define ACX_TX_DESCRIPTORS 32 #define ACX_NUM_SSID_PROFILES 1 struct wl1271_acx_config_memory { struct wl1271_acx_ap_config_memory { struct acx_header header; u8 rx_mem_block_num; Loading @@ -812,6 +808,20 @@ struct wl1271_acx_config_memory { __le32 total_tx_descriptors; } __packed; struct wl1271_acx_sta_config_memory { struct acx_header header; u8 rx_mem_block_num; u8 tx_min_mem_block_num; u8 num_stations; u8 num_ssid_profiles; __le32 total_tx_descriptors; u8 dyn_mem_enable; u8 tx_free_req; u8 rx_free_req; u8 tx_min; } __packed; struct wl1271_acx_mem_map { struct acx_header header; Loading Loading @@ -1136,6 +1146,15 @@ struct wl1271_acx_max_tx_retry { u8 padding_1[2]; } __packed; struct wl1271_acx_config_ps { struct acx_header header; u8 exit_retries; u8 enter_retries; u8 padding[2]; __le32 null_data_rate; } __packed; enum { ACX_WAKE_UP_CONDITIONS = 0x0002, ACX_MEM_CFG = 0x0003, Loading Loading @@ -1193,6 +1212,8 @@ enum { ACX_HT_BSS_OPERATION = 0x0058, ACX_COEX_ACTIVITY = 0x0059, ACX_SET_DCO_ITRIM_PARAMS = 0x0061, ACX_GEN_FW_CMD = 0x0070, ACX_HOST_IF_CFG_BITMAP = 0x0071, ACX_MAX_TX_FAILURE = 0x0072, DOT11_RX_MSDU_LIFE_TIME = 0x1004, DOT11_CUR_TX_PWR = 0x100D, Loading @@ -1200,10 +1221,8 @@ enum { DOT11_RTS_THRESHOLD = 0x1013, DOT11_GROUP_ADDRESS_TBL = 0x1014, ACX_PM_CONFIG = 0x1016, MAX_DOT11_IE = DOT11_GROUP_ADDRESS_TBL, MAX_IE = 0xFFFF ACX_CONFIG_PS = 0x1017, ACX_CONFIG_HANGOVER = 0x1018, }; Loading Loading @@ -1245,7 +1264,8 @@ int wl1271_acx_tid_cfg(struct wl1271 *wl, u8 queue_id, u8 channel_type, u32 apsd_conf0, u32 apsd_conf1); int wl1271_acx_frag_threshold(struct wl1271 *wl, u16 frag_threshold); int wl1271_acx_tx_config_options(struct wl1271 *wl); int wl1271_acx_mem_cfg(struct wl1271 *wl); int wl1271_acx_ap_mem_cfg(struct wl1271 *wl); int wl1271_acx_sta_mem_cfg(struct wl1271 *wl); int wl1271_acx_init_mem_config(struct wl1271 *wl); int wl1271_acx_init_rx_interrupt(struct wl1271 *wl); int wl1271_acx_smart_reflex(struct wl1271 *wl); Loading @@ -1269,5 +1289,6 @@ int wl1271_acx_set_ba_receiver_session(struct wl1271 *wl, u8 tid_index, u16 ssn, bool enable); int wl1271_acx_tsf_info(struct wl1271 *wl, u64 *mactime); int wl1271_acx_max_tx_retry(struct wl1271 *wl); int wl1271_acx_config_ps(struct wl1271 *wl); #endif /* __WL1271_ACX_H__ */ drivers/net/wireless/wl12xx/cmd.c +5 −5 Original line number Diff line number Diff line Loading @@ -286,6 +286,7 @@ int wl1271_cmd_join(struct wl1271 *wl, u8 bss_type) join->rx_filter_options = cpu_to_le32(wl->rx_filter); join->bss_type = bss_type; join->basic_rate_set = cpu_to_le32(wl->basic_rate_set); join->supported_rate_set = cpu_to_le32(wl->rate_set); if (wl->band == IEEE80211_BAND_5GHZ) join->bss_type |= WL1271_JOIN_CMD_BSS_TYPE_5GHZ; Loading @@ -303,6 +304,9 @@ int wl1271_cmd_join(struct wl1271 *wl, u8 bss_type) wl->tx_security_last_seq = 0; wl->tx_security_seq = 0; wl1271_debug(DEBUG_CMD, "cmd join: basic_rate_set=0x%x, rate_set=0x%x", join->basic_rate_set, join->supported_rate_set); ret = wl1271_cmd_send(wl, CMD_START_JOIN, join, sizeof(*join), 0); if (ret < 0) { wl1271_error("failed to initiate cmd join"); Loading Loading @@ -454,7 +458,7 @@ out: return ret; } int wl1271_cmd_ps_mode(struct wl1271 *wl, u8 ps_mode, u32 rates, bool send) int wl1271_cmd_ps_mode(struct wl1271 *wl, u8 ps_mode) { struct wl1271_cmd_ps_params *ps_params = NULL; int ret = 0; Loading @@ -468,10 +472,6 @@ int wl1271_cmd_ps_mode(struct wl1271 *wl, u8 ps_mode, u32 rates, bool send) } ps_params->ps_mode = ps_mode; ps_params->send_null_data = send; ps_params->retries = wl->conf.conn.psm_entry_nullfunc_retries; ps_params->hang_over_period = wl->conf.conn.psm_entry_hangover_period; ps_params->null_data_rate = cpu_to_le32(rates); ret = wl1271_cmd_send(wl, CMD_SET_PS_MODE, ps_params, sizeof(*ps_params), 0); Loading drivers/net/wireless/wl12xx/cmd.h +4 −10 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ int wl1271_cmd_test(struct wl1271 *wl, void *buf, size_t buf_len, u8 answer); int wl1271_cmd_interrogate(struct wl1271 *wl, u16 id, void *buf, size_t len); int wl1271_cmd_configure(struct wl1271 *wl, u16 id, void *buf, size_t len); int wl1271_cmd_data_path(struct wl1271 *wl, bool enable); int wl1271_cmd_ps_mode(struct wl1271 *wl, u8 ps_mode, u32 rates, bool send); int wl1271_cmd_ps_mode(struct wl1271 *wl, u8 ps_mode); int wl1271_cmd_read_memory(struct wl1271 *wl, u32 addr, void *answer, size_t len); int wl1271_cmd_template_set(struct wl1271 *wl, u16 template_id, Loading Loading @@ -140,6 +140,7 @@ enum cmd_templ { * For CTS-to-self (FastCTS) mechanism * for BT/WLAN coexistence (SoftGemini). */ CMD_TEMPL_ARP_RSP, CMD_TEMPL_LINK_MEASUREMENT_REPORT, /* AP-mode specific */ CMD_TEMPL_AP_BEACON = 13, Loading Loading @@ -216,6 +217,7 @@ struct wl1271_cmd_join { * ACK or CTS frames). */ __le32 basic_rate_set; __le32 supported_rate_set; u8 dtim_interval; /* * bits 0-2: This bitwise field specifies the type Loading Loading @@ -278,15 +280,7 @@ struct wl1271_cmd_ps_params { struct wl1271_cmd_header header; u8 ps_mode; /* STATION_* */ u8 send_null_data; /* Do we have to send NULL data packet ? */ u8 retries; /* Number of retires for the initial NULL data packet */ /* * TUs during which the target stays awake after switching * to power save mode. */ u8 hang_over_period; __le32 null_data_rate; u8 padding[3]; } __packed; /* HW encryption keys */ Loading drivers/net/wireless/wl12xx/conf.h +49 −0 Original line number Diff line number Diff line Loading @@ -959,6 +959,14 @@ struct conf_conn_settings { */ u8 psm_entry_retries; /* * Specifies the maximum number of times to try PSM exit if it fails * (if sending the appropriate null-func message fails.) * * Range 0 - 255 */ u8 psm_exit_retries; /* * Specifies the maximum number of times to try transmit the PSM entry * null-func frame for each PSM entry attempt Loading Loading @@ -1143,6 +1151,46 @@ struct conf_ht_setting { u16 inactivity_timeout; }; struct conf_memory_settings { /* Number of stations supported in IBSS mode */ u8 num_stations; /* Number of ssid profiles used in IBSS mode */ u8 ssid_profiles; /* Number of memory buffers allocated to rx pool */ u8 rx_block_num; /* Minimum number of blocks allocated to tx pool */ u8 tx_min_block_num; /* Disable/Enable dynamic memory */ u8 dynamic_memory; /* * Minimum required free tx memory blocks in order to assure optimum * performence * * Range: 0-120 */ u8 min_req_tx_blocks; /* * Minimum required free rx memory blocks in order to assure optimum * performence * * Range: 0-120 */ u8 min_req_rx_blocks; /* * Minimum number of mem blocks (free+used) guaranteed for TX * * Range: 0-120 */ u8 tx_min; }; struct conf_drv_settings { struct conf_sg_settings sg; struct conf_rx_settings rx; Loading @@ -1154,6 +1202,7 @@ struct conf_drv_settings { struct conf_scan_settings scan; struct conf_rf_settings rf; struct conf_ht_setting ht; struct conf_memory_settings mem; }; #endif Loading
drivers/net/wireless/wl12xx/acx.c +76 −10 Original line number Diff line number Diff line Loading @@ -783,6 +783,10 @@ int wl1271_acx_sta_rate_policies(struct wl1271 *wl) acx->rate_class_cnt = cpu_to_le32(ACX_TX_RATE_POLICY_CNT); wl1271_debug(DEBUG_ACX, "basic_rate: 0x%x, full_rate: 0x%x", acx->rate_class[ACX_TX_BASIC_RATE].enabled_rates, acx->rate_class[ACX_TX_AP_FULL_RATE].enabled_rates); ret = wl1271_cmd_configure(wl, ACX_RATE_POLICY, acx, sizeof(*acx)); if (ret < 0) { wl1271_warning("Setting of rate policies failed: %d", ret); Loading Loading @@ -947,9 +951,9 @@ out: return ret; } int wl1271_acx_mem_cfg(struct wl1271 *wl) int wl1271_acx_ap_mem_cfg(struct wl1271 *wl) { struct wl1271_acx_config_memory *mem_conf; struct wl1271_acx_ap_config_memory *mem_conf; int ret; wl1271_debug(DEBUG_ACX, "wl1271 mem cfg"); Loading @@ -961,10 +965,10 @@ int wl1271_acx_mem_cfg(struct wl1271 *wl) } /* memory config */ mem_conf->num_stations = DEFAULT_NUM_STATIONS; mem_conf->rx_mem_block_num = ACX_RX_MEM_BLOCKS; mem_conf->tx_min_mem_block_num = ACX_TX_MIN_MEM_BLOCKS; mem_conf->num_ssid_profiles = ACX_NUM_SSID_PROFILES; mem_conf->num_stations = wl->conf.mem.num_stations; mem_conf->rx_mem_block_num = wl->conf.mem.rx_block_num; mem_conf->tx_min_mem_block_num = wl->conf.mem.tx_min_block_num; mem_conf->num_ssid_profiles = wl->conf.mem.ssid_profiles; mem_conf->total_tx_descriptors = cpu_to_le32(ACX_TX_DESCRIPTORS); ret = wl1271_cmd_configure(wl, ACX_MEM_CFG, mem_conf, Loading @@ -979,13 +983,45 @@ out: return ret; } int wl1271_acx_init_mem_config(struct wl1271 *wl) int wl1271_acx_sta_mem_cfg(struct wl1271 *wl) { struct wl1271_acx_sta_config_memory *mem_conf; int ret; ret = wl1271_acx_mem_cfg(wl); if (ret < 0) wl1271_debug(DEBUG_ACX, "wl1271 mem cfg"); mem_conf = kzalloc(sizeof(*mem_conf), GFP_KERNEL); if (!mem_conf) { ret = -ENOMEM; goto out; } /* memory config */ mem_conf->num_stations = wl->conf.mem.num_stations; mem_conf->rx_mem_block_num = wl->conf.mem.rx_block_num; mem_conf->tx_min_mem_block_num = wl->conf.mem.tx_min_block_num; mem_conf->num_ssid_profiles = wl->conf.mem.ssid_profiles; mem_conf->total_tx_descriptors = cpu_to_le32(ACX_TX_DESCRIPTORS); mem_conf->dyn_mem_enable = wl->conf.mem.dynamic_memory; mem_conf->tx_free_req = wl->conf.mem.min_req_tx_blocks; mem_conf->rx_free_req = wl->conf.mem.min_req_rx_blocks; mem_conf->tx_min = wl->conf.mem.tx_min; ret = wl1271_cmd_configure(wl, ACX_MEM_CFG, mem_conf, sizeof(*mem_conf)); if (ret < 0) { wl1271_warning("wl1271 mem config failed: %d", ret); goto out; } out: kfree(mem_conf); return ret; } int wl1271_acx_init_mem_config(struct wl1271 *wl) { int ret; wl->target_mem_map = kzalloc(sizeof(struct wl1271_acx_mem_map), GFP_KERNEL); Loading Loading @@ -1476,3 +1512,33 @@ out: kfree(acx); return ret; } int wl1271_acx_config_ps(struct wl1271 *wl) { struct wl1271_acx_config_ps *config_ps; int ret; wl1271_debug(DEBUG_ACX, "acx config ps"); config_ps = kzalloc(sizeof(*config_ps), GFP_KERNEL); if (!config_ps) { ret = -ENOMEM; goto out; } config_ps->exit_retries = wl->conf.conn.psm_exit_retries; config_ps->enter_retries = wl->conf.conn.psm_entry_retries; config_ps->null_data_rate = cpu_to_le32(wl->basic_rate); ret = wl1271_cmd_configure(wl, ACX_CONFIG_PS, config_ps, sizeof(*config_ps)); if (ret < 0) { wl1271_warning("acx config ps failed: %d", ret); goto out; } out: kfree(config_ps); return ret; }
drivers/net/wireless/wl12xx/acx.h +31 −10 Original line number Diff line number Diff line Loading @@ -133,7 +133,6 @@ enum { #define DEFAULT_UCAST_PRIORITY 0 #define DEFAULT_RX_Q_PRIORITY 0 #define DEFAULT_NUM_STATIONS 1 #define DEFAULT_RXQ_PRIORITY 0 /* low 0 .. 15 high */ #define DEFAULT_RXQ_TYPE 0x07 /* All frames, Data/Ctrl/Mgmt */ #define TRACE_BUFFER_MAX_SIZE 256 Loading Loading @@ -797,12 +796,9 @@ struct acx_tx_config_options { __le16 tx_compl_threshold; /* number of packets */ } __packed; #define ACX_RX_MEM_BLOCKS 70 #define ACX_TX_MIN_MEM_BLOCKS 40 #define ACX_TX_DESCRIPTORS 32 #define ACX_NUM_SSID_PROFILES 1 struct wl1271_acx_config_memory { struct wl1271_acx_ap_config_memory { struct acx_header header; u8 rx_mem_block_num; Loading @@ -812,6 +808,20 @@ struct wl1271_acx_config_memory { __le32 total_tx_descriptors; } __packed; struct wl1271_acx_sta_config_memory { struct acx_header header; u8 rx_mem_block_num; u8 tx_min_mem_block_num; u8 num_stations; u8 num_ssid_profiles; __le32 total_tx_descriptors; u8 dyn_mem_enable; u8 tx_free_req; u8 rx_free_req; u8 tx_min; } __packed; struct wl1271_acx_mem_map { struct acx_header header; Loading Loading @@ -1136,6 +1146,15 @@ struct wl1271_acx_max_tx_retry { u8 padding_1[2]; } __packed; struct wl1271_acx_config_ps { struct acx_header header; u8 exit_retries; u8 enter_retries; u8 padding[2]; __le32 null_data_rate; } __packed; enum { ACX_WAKE_UP_CONDITIONS = 0x0002, ACX_MEM_CFG = 0x0003, Loading Loading @@ -1193,6 +1212,8 @@ enum { ACX_HT_BSS_OPERATION = 0x0058, ACX_COEX_ACTIVITY = 0x0059, ACX_SET_DCO_ITRIM_PARAMS = 0x0061, ACX_GEN_FW_CMD = 0x0070, ACX_HOST_IF_CFG_BITMAP = 0x0071, ACX_MAX_TX_FAILURE = 0x0072, DOT11_RX_MSDU_LIFE_TIME = 0x1004, DOT11_CUR_TX_PWR = 0x100D, Loading @@ -1200,10 +1221,8 @@ enum { DOT11_RTS_THRESHOLD = 0x1013, DOT11_GROUP_ADDRESS_TBL = 0x1014, ACX_PM_CONFIG = 0x1016, MAX_DOT11_IE = DOT11_GROUP_ADDRESS_TBL, MAX_IE = 0xFFFF ACX_CONFIG_PS = 0x1017, ACX_CONFIG_HANGOVER = 0x1018, }; Loading Loading @@ -1245,7 +1264,8 @@ int wl1271_acx_tid_cfg(struct wl1271 *wl, u8 queue_id, u8 channel_type, u32 apsd_conf0, u32 apsd_conf1); int wl1271_acx_frag_threshold(struct wl1271 *wl, u16 frag_threshold); int wl1271_acx_tx_config_options(struct wl1271 *wl); int wl1271_acx_mem_cfg(struct wl1271 *wl); int wl1271_acx_ap_mem_cfg(struct wl1271 *wl); int wl1271_acx_sta_mem_cfg(struct wl1271 *wl); int wl1271_acx_init_mem_config(struct wl1271 *wl); int wl1271_acx_init_rx_interrupt(struct wl1271 *wl); int wl1271_acx_smart_reflex(struct wl1271 *wl); Loading @@ -1269,5 +1289,6 @@ int wl1271_acx_set_ba_receiver_session(struct wl1271 *wl, u8 tid_index, u16 ssn, bool enable); int wl1271_acx_tsf_info(struct wl1271 *wl, u64 *mactime); int wl1271_acx_max_tx_retry(struct wl1271 *wl); int wl1271_acx_config_ps(struct wl1271 *wl); #endif /* __WL1271_ACX_H__ */
drivers/net/wireless/wl12xx/cmd.c +5 −5 Original line number Diff line number Diff line Loading @@ -286,6 +286,7 @@ int wl1271_cmd_join(struct wl1271 *wl, u8 bss_type) join->rx_filter_options = cpu_to_le32(wl->rx_filter); join->bss_type = bss_type; join->basic_rate_set = cpu_to_le32(wl->basic_rate_set); join->supported_rate_set = cpu_to_le32(wl->rate_set); if (wl->band == IEEE80211_BAND_5GHZ) join->bss_type |= WL1271_JOIN_CMD_BSS_TYPE_5GHZ; Loading @@ -303,6 +304,9 @@ int wl1271_cmd_join(struct wl1271 *wl, u8 bss_type) wl->tx_security_last_seq = 0; wl->tx_security_seq = 0; wl1271_debug(DEBUG_CMD, "cmd join: basic_rate_set=0x%x, rate_set=0x%x", join->basic_rate_set, join->supported_rate_set); ret = wl1271_cmd_send(wl, CMD_START_JOIN, join, sizeof(*join), 0); if (ret < 0) { wl1271_error("failed to initiate cmd join"); Loading Loading @@ -454,7 +458,7 @@ out: return ret; } int wl1271_cmd_ps_mode(struct wl1271 *wl, u8 ps_mode, u32 rates, bool send) int wl1271_cmd_ps_mode(struct wl1271 *wl, u8 ps_mode) { struct wl1271_cmd_ps_params *ps_params = NULL; int ret = 0; Loading @@ -468,10 +472,6 @@ int wl1271_cmd_ps_mode(struct wl1271 *wl, u8 ps_mode, u32 rates, bool send) } ps_params->ps_mode = ps_mode; ps_params->send_null_data = send; ps_params->retries = wl->conf.conn.psm_entry_nullfunc_retries; ps_params->hang_over_period = wl->conf.conn.psm_entry_hangover_period; ps_params->null_data_rate = cpu_to_le32(rates); ret = wl1271_cmd_send(wl, CMD_SET_PS_MODE, ps_params, sizeof(*ps_params), 0); Loading
drivers/net/wireless/wl12xx/cmd.h +4 −10 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ int wl1271_cmd_test(struct wl1271 *wl, void *buf, size_t buf_len, u8 answer); int wl1271_cmd_interrogate(struct wl1271 *wl, u16 id, void *buf, size_t len); int wl1271_cmd_configure(struct wl1271 *wl, u16 id, void *buf, size_t len); int wl1271_cmd_data_path(struct wl1271 *wl, bool enable); int wl1271_cmd_ps_mode(struct wl1271 *wl, u8 ps_mode, u32 rates, bool send); int wl1271_cmd_ps_mode(struct wl1271 *wl, u8 ps_mode); int wl1271_cmd_read_memory(struct wl1271 *wl, u32 addr, void *answer, size_t len); int wl1271_cmd_template_set(struct wl1271 *wl, u16 template_id, Loading Loading @@ -140,6 +140,7 @@ enum cmd_templ { * For CTS-to-self (FastCTS) mechanism * for BT/WLAN coexistence (SoftGemini). */ CMD_TEMPL_ARP_RSP, CMD_TEMPL_LINK_MEASUREMENT_REPORT, /* AP-mode specific */ CMD_TEMPL_AP_BEACON = 13, Loading Loading @@ -216,6 +217,7 @@ struct wl1271_cmd_join { * ACK or CTS frames). */ __le32 basic_rate_set; __le32 supported_rate_set; u8 dtim_interval; /* * bits 0-2: This bitwise field specifies the type Loading Loading @@ -278,15 +280,7 @@ struct wl1271_cmd_ps_params { struct wl1271_cmd_header header; u8 ps_mode; /* STATION_* */ u8 send_null_data; /* Do we have to send NULL data packet ? */ u8 retries; /* Number of retires for the initial NULL data packet */ /* * TUs during which the target stays awake after switching * to power save mode. */ u8 hang_over_period; __le32 null_data_rate; u8 padding[3]; } __packed; /* HW encryption keys */ Loading
drivers/net/wireless/wl12xx/conf.h +49 −0 Original line number Diff line number Diff line Loading @@ -959,6 +959,14 @@ struct conf_conn_settings { */ u8 psm_entry_retries; /* * Specifies the maximum number of times to try PSM exit if it fails * (if sending the appropriate null-func message fails.) * * Range 0 - 255 */ u8 psm_exit_retries; /* * Specifies the maximum number of times to try transmit the PSM entry * null-func frame for each PSM entry attempt Loading Loading @@ -1143,6 +1151,46 @@ struct conf_ht_setting { u16 inactivity_timeout; }; struct conf_memory_settings { /* Number of stations supported in IBSS mode */ u8 num_stations; /* Number of ssid profiles used in IBSS mode */ u8 ssid_profiles; /* Number of memory buffers allocated to rx pool */ u8 rx_block_num; /* Minimum number of blocks allocated to tx pool */ u8 tx_min_block_num; /* Disable/Enable dynamic memory */ u8 dynamic_memory; /* * Minimum required free tx memory blocks in order to assure optimum * performence * * Range: 0-120 */ u8 min_req_tx_blocks; /* * Minimum required free rx memory blocks in order to assure optimum * performence * * Range: 0-120 */ u8 min_req_rx_blocks; /* * Minimum number of mem blocks (free+used) guaranteed for TX * * Range: 0-120 */ u8 tx_min; }; struct conf_drv_settings { struct conf_sg_settings sg; struct conf_rx_settings rx; Loading @@ -1154,6 +1202,7 @@ struct conf_drv_settings { struct conf_scan_settings scan; struct conf_rf_settings rf; struct conf_ht_setting ht; struct conf_memory_settings mem; }; #endif