Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 028e7243 authored by Eliad Peller's avatar Eliad Peller Committed by John W. Linville
Browse files

wl18xx: move to new firmware (wl18xx-fw-3.bin)



Bump the min wl18xx fw version to 8.8.0.0.13

This fw is not backward compatible with older
firmware (due to api changes), so use bump
the firmware name as well.

Some modifications were done to the driver-fw api
in order to support multiple APs.

Additionally, some of the consts (such as max stations,
max links and max RX BA sessions) were changed.

Signed-off-by: default avatarArik Nemtsov <arik@wizery.com>
Signed-off-by: default avatarEliad Peller <eliad@wizery.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent abf0b249
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -648,7 +648,7 @@ static const struct wl18xx_clk_cfg wl18xx_clk_table[NUM_CLOCK_CONFIGS] = {
};
};


/* TODO: maybe move to a new header file? */
/* TODO: maybe move to a new header file? */
#define WL18XX_FW_NAME "ti-connectivity/wl18xx-fw-2.bin"
#define WL18XX_FW_NAME "ti-connectivity/wl18xx-fw-3.bin"


static int wl18xx_identify_chip(struct wl1271 *wl)
static int wl18xx_identify_chip(struct wl1271 *wl)
{
{
+5 −5
Original line number Original line Diff line number Diff line
@@ -26,10 +26,10 @@


/* minimum FW required for driver */
/* minimum FW required for driver */
#define WL18XX_CHIP_VER		8
#define WL18XX_CHIP_VER		8
#define WL18XX_IFTYPE_VER	5
#define WL18XX_IFTYPE_VER	8
#define WL18XX_MAJOR_VER	WLCORE_FW_VER_IGNORE
#define WL18XX_MAJOR_VER	WLCORE_FW_VER_IGNORE
#define WL18XX_SUBTYPE_VER	WLCORE_FW_VER_IGNORE
#define WL18XX_SUBTYPE_VER	WLCORE_FW_VER_IGNORE
#define WL18XX_MINOR_VER	39
#define WL18XX_MINOR_VER	13


#define WL18XX_CMD_MAX_SIZE          740
#define WL18XX_CMD_MAX_SIZE          740


@@ -40,10 +40,10 @@


#define WL18XX_NUM_MAC_ADDRESSES 3
#define WL18XX_NUM_MAC_ADDRESSES 3


#define WL18XX_RX_BA_MAX_SESSIONS 5
#define WL18XX_RX_BA_MAX_SESSIONS 13


#define WL18XX_MAX_AP_STATIONS 8
#define WL18XX_MAX_AP_STATIONS 10
#define WL18XX_MAX_LINKS 12
#define WL18XX_MAX_LINKS 16


struct wl18xx_priv {
struct wl18xx_priv {
	/* buffer for sending commands to FW */
	/* buffer for sending commands to FW */
+3 −1
Original line number Original line Diff line number Diff line
@@ -1591,7 +1591,8 @@ int wl12xx_acx_config_ps(struct wl1271 *wl, struct wl12xx_vif *wlvif)
	return ret;
	return ret;
}
}


int wl1271_acx_set_inconnection_sta(struct wl1271 *wl, u8 *addr)
int wl1271_acx_set_inconnection_sta(struct wl1271 *wl,
				    struct wl12xx_vif *wlvif, u8 *addr)
{
{
	struct wl1271_acx_inconnection_sta *acx = NULL;
	struct wl1271_acx_inconnection_sta *acx = NULL;
	int ret;
	int ret;
@@ -1603,6 +1604,7 @@ int wl1271_acx_set_inconnection_sta(struct wl1271 *wl, u8 *addr)
		return -ENOMEM;
		return -ENOMEM;


	memcpy(acx->addr, addr, ETH_ALEN);
	memcpy(acx->addr, addr, ETH_ALEN);
	acx->role_id = wlvif->role_id;


	ret = wl1271_cmd_configure(wl, ACX_UPDATE_INCONNECTION_STA_LIST,
	ret = wl1271_cmd_configure(wl, ACX_UPDATE_INCONNECTION_STA_LIST,
				   acx, sizeof(*acx));
				   acx, sizeof(*acx));
+4 −2
Original line number Original line Diff line number Diff line
@@ -824,7 +824,8 @@ struct wl1271_acx_inconnection_sta {
	struct acx_header header;
	struct acx_header header;


	u8 addr[ETH_ALEN];
	u8 addr[ETH_ALEN];
	u8 padding1[2];
	u8 role_id;
	u8 padding;
} __packed;
} __packed;


/*
/*
@@ -1118,7 +1119,8 @@ int wl1271_acx_ps_rx_streaming(struct wl1271 *wl, struct wl12xx_vif *wlvif,
			       bool enable);
			       bool enable);
int wl1271_acx_ap_max_tx_retry(struct wl1271 *wl, struct wl12xx_vif *wlvif);
int wl1271_acx_ap_max_tx_retry(struct wl1271 *wl, struct wl12xx_vif *wlvif);
int wl12xx_acx_config_ps(struct wl1271 *wl, struct wl12xx_vif *wlvif);
int wl12xx_acx_config_ps(struct wl1271 *wl, struct wl12xx_vif *wlvif);
int wl1271_acx_set_inconnection_sta(struct wl1271 *wl, u8 *addr);
int wl1271_acx_set_inconnection_sta(struct wl1271 *wl,
				    struct wl12xx_vif *wlvif, u8 *addr);
int wl1271_acx_fm_coex(struct wl1271 *wl);
int wl1271_acx_fm_coex(struct wl1271 *wl);
int wl12xx_acx_set_rate_mgmt_params(struct wl1271 *wl);
int wl12xx_acx_set_rate_mgmt_params(struct wl1271 *wl);
int wl12xx_acx_config_hangover(struct wl1271 *wl);
int wl12xx_acx_config_hangover(struct wl1271 *wl);
+4 −1
Original line number Original line Diff line number Diff line
@@ -1532,6 +1532,7 @@ int wl12xx_cmd_add_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif,
	cmd->sp_len = sta->max_sp;
	cmd->sp_len = sta->max_sp;
	cmd->wmm = sta->wme ? 1 : 0;
	cmd->wmm = sta->wme ? 1 : 0;
	cmd->session_id = wl->session_ids[hlid];
	cmd->session_id = wl->session_ids[hlid];
	cmd->role_id = wlvif->role_id;


	for (i = 0; i < NUM_ACCESS_CATEGORIES_COPY; i++)
	for (i = 0; i < NUM_ACCESS_CATEGORIES_COPY; i++)
		if (sta->wme && (sta->uapsd_queues & BIT(i)))
		if (sta->wme && (sta->uapsd_queues & BIT(i)))
@@ -1568,7 +1569,8 @@ int wl12xx_cmd_add_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif,
	return ret;
	return ret;
}
}


int wl12xx_cmd_remove_peer(struct wl1271 *wl, u8 hlid)
int wl12xx_cmd_remove_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif,
			   u8 hlid)
{
{
	struct wl12xx_cmd_remove_peer *cmd;
	struct wl12xx_cmd_remove_peer *cmd;
	int ret;
	int ret;
@@ -1586,6 +1588,7 @@ int wl12xx_cmd_remove_peer(struct wl1271 *wl, u8 hlid)
	/* We never send a deauth, mac80211 is in charge of this */
	/* We never send a deauth, mac80211 is in charge of this */
	cmd->reason_opcode = 0;
	cmd->reason_opcode = 0;
	cmd->send_deauth_flag = 0;
	cmd->send_deauth_flag = 0;
	cmd->role_id = wlvif->role_id;


	ret = wl1271_cmd_send(wl, CMD_REMOVE_PEER, cmd, sizeof(*cmd), 0);
	ret = wl1271_cmd_send(wl, CMD_REMOVE_PEER, cmd, sizeof(*cmd), 0);
	if (ret < 0) {
	if (ret < 0) {
Loading