mirror of
https://github.com/armbian/build.git
synced 2025-12-19 08:12:09 +01:00
577 lines
21 KiB
Diff
577 lines
21 KiB
Diff
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
|
index 1a7ab4929..46346cb3b 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
|
|
@@ -863,7 +863,7 @@ static void brcmf_sdiod_freezer_detach(struct brcmf_sdio_dev *sdiodev)
|
|
}
|
|
#endif /* CONFIG_PM_SLEEP */
|
|
|
|
-int brcmf_sdiod_remove(struct brcmf_sdio_dev *sdiodev)
|
|
+static int brcmf_sdiod_remove(struct brcmf_sdio_dev *sdiodev)
|
|
{
|
|
sdiodev->state = BRCMF_SDIOD_DOWN;
|
|
if (sdiodev->bus) {
|
|
@@ -898,7 +898,7 @@ static void brcmf_sdiod_host_fixup(struct mmc_host *host)
|
|
host->caps |= MMC_CAP_NONREMOVABLE;
|
|
}
|
|
|
|
-int brcmf_sdiod_probe(struct brcmf_sdio_dev *sdiodev)
|
|
+static int brcmf_sdiod_probe(struct brcmf_sdio_dev *sdiodev)
|
|
{
|
|
int ret = 0;
|
|
unsigned int f2_blksz = SDIO_FUNC2_BLOCKSIZE;
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
index ab0da2ff9..a757abd7a 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
@@ -84,8 +84,6 @@
|
|
|
|
#define BRCMF_ND_INFO_TIMEOUT msecs_to_jiffies(2000)
|
|
|
|
-#define BRCMF_PS_MAX_TIMEOUT_MS 2000
|
|
-
|
|
#define BRCMF_ASSOC_PARAMS_FIXED_SIZE \
|
|
(sizeof(struct brcmf_assoc_params_le) - sizeof(u16))
|
|
|
|
@@ -1389,8 +1387,7 @@ static int brcmf_set_sae_password(struct brcmf_if *ifp, const u8 *pwd_data,
|
|
return err;
|
|
}
|
|
|
|
-static void brcmf_link_down(struct brcmf_cfg80211_vif *vif, u16 reason,
|
|
- bool locally_generated)
|
|
+static void brcmf_link_down(struct brcmf_cfg80211_vif *vif, u16 reason)
|
|
{
|
|
struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(vif->wdev.wiphy);
|
|
struct brcmf_pub *drvr = cfg->pub;
|
|
@@ -1412,7 +1409,7 @@ static void brcmf_link_down(struct brcmf_cfg80211_vif *vif, u16 reason,
|
|
if ((vif->wdev.iftype == NL80211_IFTYPE_STATION) ||
|
|
(vif->wdev.iftype == NL80211_IFTYPE_P2P_CLIENT))
|
|
cfg80211_disconnected(vif->wdev.netdev, reason, NULL, 0,
|
|
- locally_generated, GFP_KERNEL);
|
|
+ true, GFP_KERNEL);
|
|
}
|
|
clear_bit(BRCMF_VIF_STATUS_CONNECTING, &vif->sme_state);
|
|
clear_bit(BRCMF_SCAN_STATUS_SUPPRESS, &cfg->scan_status);
|
|
@@ -1591,7 +1588,7 @@ brcmf_cfg80211_leave_ibss(struct wiphy *wiphy, struct net_device *ndev)
|
|
return 0;
|
|
}
|
|
|
|
- brcmf_link_down(ifp->vif, WLAN_REASON_DEAUTH_LEAVING, true);
|
|
+ brcmf_link_down(ifp->vif, WLAN_REASON_DEAUTH_LEAVING);
|
|
brcmf_net_setcarrier(ifp, false);
|
|
|
|
brcmf_dbg(TRACE, "Exit\n");
|
|
@@ -2944,12 +2941,6 @@ brcmf_cfg80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *ndev,
|
|
else
|
|
bphy_err(drvr, "error (%d)\n", err);
|
|
}
|
|
-
|
|
- err = brcmf_fil_iovar_int_set(ifp, "pm2_sleep_ret",
|
|
- min_t(u32, timeout, BRCMF_PS_MAX_TIMEOUT_MS));
|
|
- if (err)
|
|
- bphy_err(drvr, "Unable to set pm timeout, (%d)\n", err);
|
|
-
|
|
done:
|
|
brcmf_dbg(TRACE, "Exit\n");
|
|
return err;
|
|
@@ -3916,7 +3907,7 @@ static s32 brcmf_cfg80211_suspend(struct wiphy *wiphy,
|
|
* disassociate from AP to save power while system is
|
|
* in suspended state
|
|
*/
|
|
- brcmf_link_down(vif, WLAN_REASON_UNSPECIFIED, true);
|
|
+ brcmf_link_down(vif, WLAN_REASON_UNSPECIFIED);
|
|
/* Make sure WPA_Supplicant receives all the event
|
|
* generated due to DISASSOC call to the fw to keep
|
|
* the state fw and WPA_Supplicant state consistent
|
|
@@ -4844,14 +4835,12 @@ brcmf_cfg80211_start_ap(struct wiphy *wiphy, struct net_device *ndev,
|
|
goto exit;
|
|
}
|
|
|
|
- err = brcmf_fil_iovar_int_set(ifp, "closednet",
|
|
- settings->hidden_ssid);
|
|
- if (err) {
|
|
- bphy_err(drvr, "%s closednet error (%d)\n",
|
|
- settings->hidden_ssid ?
|
|
- "enabled" : "disabled",
|
|
- err);
|
|
- goto exit;
|
|
+ if (settings->hidden_ssid) {
|
|
+ err = brcmf_fil_iovar_int_set(ifp, "closednet", 1);
|
|
+ if (err) {
|
|
+ bphy_err(drvr, "closednet error (%d)\n", err);
|
|
+ goto exit;
|
|
+ }
|
|
}
|
|
|
|
brcmf_dbg(TRACE, "AP mode configuration complete\n");
|
|
@@ -5140,7 +5129,7 @@ brcmf_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
|
|
&freq);
|
|
chan_nr = ieee80211_frequency_to_channel(freq);
|
|
af_params->channel = cpu_to_le32(chan_nr);
|
|
- af_params->dwell_time = cpu_to_le32(params->wait);
|
|
+
|
|
memcpy(action_frame->data, &buf[DOT11_MGMT_HDR_LEN],
|
|
le16_to_cpu(action_frame->len));
|
|
|
|
@@ -6035,19 +6024,10 @@ brcmf_notify_connect_status(struct brcmf_if *ifp,
|
|
brcmf_net_setcarrier(ifp, true);
|
|
} else if (brcmf_is_linkdown(e)) {
|
|
brcmf_dbg(CONN, "Linkdown\n");
|
|
- if (!brcmf_is_ibssmode(ifp->vif) &&
|
|
- test_bit(BRCMF_VIF_STATUS_CONNECTED,
|
|
- &ifp->vif->sme_state)) {
|
|
- if (memcmp(profile->bssid, e->addr, ETH_ALEN))
|
|
- return err;
|
|
-
|
|
+ if (!brcmf_is_ibssmode(ifp->vif)) {
|
|
brcmf_bss_connect_done(cfg, ndev, e, false);
|
|
brcmf_link_down(ifp->vif,
|
|
- brcmf_map_fw_linkdown_reason(e),
|
|
- e->event_code &
|
|
- (BRCMF_E_DEAUTH_IND |
|
|
- BRCMF_E_DISASSOC_IND)
|
|
- ? false : true);
|
|
+ brcmf_map_fw_linkdown_reason(e));
|
|
brcmf_init_prof(ndev_to_prof(ndev));
|
|
if (ndev != cfg_to_ndev(cfg))
|
|
complete(&cfg->vif_disabled);
|
|
@@ -6821,7 +6801,7 @@ brcmf_txrx_stypes[NUM_NL80211_IFTYPES] = {
|
|
* #AP <= 4, matching BI, channels = 1, 4 total
|
|
*
|
|
* no p2p and rsdb:
|
|
- * #STA <= 1, #AP <= 2, channels = 2, 4 total
|
|
+ * #STA <= 2, #AP <= 2, channels = 2, 4 total
|
|
*
|
|
* p2p, no mchan, and mbss:
|
|
*
|
|
@@ -6836,7 +6816,7 @@ brcmf_txrx_stypes[NUM_NL80211_IFTYPES] = {
|
|
* #AP <= 4, matching BI, channels = 1, 4 total
|
|
*
|
|
* p2p, rsdb, and no mbss:
|
|
- * #STA <= 1, #P2P-DEV <= 1, #{P2P-CL, P2P-GO} <= 2, AP <= 2,
|
|
+ * #STA <= 2, #P2P-DEV <= 1, #{P2P-CL, P2P-GO} <= 2, AP <= 2,
|
|
* channels = 2, 4 total
|
|
*/
|
|
static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp)
|
|
@@ -6877,7 +6857,7 @@ static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp)
|
|
goto err;
|
|
|
|
combo[c].num_different_channels = 1 + (rsdb || (p2p && mchan));
|
|
- c0_limits[i].max = 1;
|
|
+ c0_limits[i].max = 1 + rsdb;
|
|
c0_limits[i++].types = BIT(NL80211_IFTYPE_STATION);
|
|
if (mon_flag) {
|
|
c0_limits[i].max = 1;
|
|
@@ -6893,7 +6873,7 @@ static int brcmf_setup_ifmodes(struct wiphy *wiphy, struct brcmf_if *ifp)
|
|
if (p2p && rsdb) {
|
|
c0_limits[i].max = 2;
|
|
c0_limits[i++].types = BIT(NL80211_IFTYPE_AP);
|
|
- combo[c].max_interfaces = 4;
|
|
+ combo[c].max_interfaces = 5;
|
|
} else if (p2p) {
|
|
combo[c].max_interfaces = i;
|
|
} else if (rsdb) {
|
|
@@ -7200,7 +7180,7 @@ static s32 __brcmf_cfg80211_down(struct brcmf_if *ifp)
|
|
* from AP to save power
|
|
*/
|
|
if (check_vif_up(ifp->vif)) {
|
|
- brcmf_link_down(ifp->vif, WLAN_REASON_UNSPECIFIED, true);
|
|
+ brcmf_link_down(ifp->vif, WLAN_REASON_UNSPECIFIED);
|
|
|
|
/* Make sure WPA_Supplicant receives all the event
|
|
generated due to DISASSOC call to the fw to keep
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
|
index e3758bd86..dec25e415 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
|
|
@@ -209,8 +209,8 @@ int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
|
|
bphy_err(drvr, "Retrieving cur_etheraddr failed, %d\n", err);
|
|
goto done;
|
|
}
|
|
- memcpy(ifp->drvr->mac, ifp->mac_addr, sizeof(ifp->drvr->mac));
|
|
memcpy(ifp->drvr->wiphy->perm_addr, ifp->drvr->mac, ETH_ALEN);
|
|
+ memcpy(ifp->drvr->mac, ifp->mac_addr, sizeof(ifp->drvr->mac));
|
|
|
|
bus = ifp->drvr->bus_if;
|
|
ri = &ifp->drvr->revinfo;
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
|
index f89010a81..c88655acc 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
|
@@ -352,9 +352,6 @@ static netdev_tx_t brcmf_netdev_start_xmit(struct sk_buff *skb,
|
|
if ((skb->priority == 0) || (skb->priority > 7))
|
|
skb->priority = cfg80211_classify8021d(skb, NULL);
|
|
|
|
- /* set pacing shift for packet aggregation */
|
|
- sk_pacing_shift_update(skb->sk, 8);
|
|
-
|
|
ret = brcmf_proto_tx_queue_data(drvr, ifp->ifidx, skb);
|
|
if (ret < 0)
|
|
brcmf_txfinalize(ifp, skb, false);
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
|
index 2df6811c0..babaac682 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
|
@@ -323,10 +323,6 @@ struct brcmf_skbuff_cb {
|
|
* firmware suppress the packet as device is already in PS mode.
|
|
* @BRCMF_FWS_TXSTATUS_FW_TOSSED:
|
|
* firmware tossed the packet.
|
|
- * @BRCMF_FWS_TXSTATUS_FW_DISCARD_NOACK:
|
|
- * firmware tossed the packet after retries.
|
|
- * @BRCMF_FWS_TXSTATUS_FW_SUPPRESS_ACKED:
|
|
- * firmware wrongly reported suppressed previously, now fixing to acked.
|
|
* @BRCMF_FWS_TXSTATUS_HOST_TOSSED:
|
|
* host tossed the packet.
|
|
*/
|
|
@@ -335,8 +331,6 @@ enum brcmf_fws_txstatus {
|
|
BRCMF_FWS_TXSTATUS_CORE_SUPPRESS,
|
|
BRCMF_FWS_TXSTATUS_FW_PS_SUPPRESS,
|
|
BRCMF_FWS_TXSTATUS_FW_TOSSED,
|
|
- BRCMF_FWS_TXSTATUS_FW_DISCARD_NOACK,
|
|
- BRCMF_FWS_TXSTATUS_FW_SUPPRESS_ACKED,
|
|
BRCMF_FWS_TXSTATUS_HOST_TOSSED
|
|
};
|
|
|
|
@@ -389,7 +383,6 @@ struct brcmf_fws_mac_descriptor {
|
|
};
|
|
|
|
#define BRCMF_FWS_HANGER_MAXITEMS 3072
|
|
-#define BRCMF_BORROW_RATIO 3
|
|
|
|
/**
|
|
* enum brcmf_fws_hanger_item_state - state of hanger item.
|
|
@@ -486,8 +479,7 @@ struct brcmf_fws_info {
|
|
u32 fifo_enqpkt[BRCMF_FWS_FIFO_COUNT];
|
|
int fifo_credit[BRCMF_FWS_FIFO_COUNT];
|
|
int init_fifo_credit[BRCMF_FWS_FIFO_COUNT];
|
|
- int credits_borrowed[BRCMF_FWS_FIFO_AC_VO + 1]
|
|
- [BRCMF_FWS_FIFO_AC_VO + 1];
|
|
+ int credits_borrowed[BRCMF_FWS_FIFO_AC_VO + 1];
|
|
int deq_node_pos[BRCMF_FWS_FIFO_COUNT];
|
|
u32 fifo_credit_map;
|
|
u32 fifo_delay_map;
|
|
@@ -1199,11 +1191,11 @@ static void brcmf_fws_return_credits(struct brcmf_fws_info *fws,
|
|
|
|
fws->fifo_credit_map |= 1 << fifo;
|
|
|
|
- if (fifo > BRCMF_FWS_FIFO_AC_BK &&
|
|
- fifo <= BRCMF_FWS_FIFO_AC_VO) {
|
|
+ if ((fifo == BRCMF_FWS_FIFO_AC_BE) &&
|
|
+ (fws->credits_borrowed[0])) {
|
|
for (lender_ac = BRCMF_FWS_FIFO_AC_VO; lender_ac >= 0;
|
|
lender_ac--) {
|
|
- borrowed = &fws->credits_borrowed[fifo][lender_ac];
|
|
+ borrowed = &fws->credits_borrowed[lender_ac];
|
|
if (*borrowed) {
|
|
fws->fifo_credit_map |= (1 << lender_ac);
|
|
fifo_credit = &fws->fifo_credit[lender_ac];
|
|
@@ -1220,10 +1212,7 @@ static void brcmf_fws_return_credits(struct brcmf_fws_info *fws,
|
|
}
|
|
}
|
|
|
|
- if (credits) {
|
|
- fws->fifo_credit[fifo] += credits;
|
|
- }
|
|
-
|
|
+ fws->fifo_credit[fifo] += credits;
|
|
if (fws->fifo_credit[fifo] > fws->init_fifo_credit[fifo])
|
|
fws->fifo_credit[fifo] = fws->init_fifo_credit[fifo];
|
|
|
|
@@ -1466,10 +1455,6 @@ brcmf_fws_txs_process(struct brcmf_fws_info *fws, u8 flags, u32 hslot,
|
|
remove_from_hanger = false;
|
|
} else if (flags == BRCMF_FWS_TXSTATUS_FW_TOSSED)
|
|
fws->stats.txs_tossed += compcnt;
|
|
- else if (flags == BRCMF_FWS_TXSTATUS_FW_DISCARD_NOACK)
|
|
- fws->stats.txs_discard += compcnt;
|
|
- else if (flags == BRCMF_FWS_TXSTATUS_FW_SUPPRESS_ACKED)
|
|
- fws->stats.txs_discard += compcnt;
|
|
else if (flags == BRCMF_FWS_TXSTATUS_HOST_TOSSED)
|
|
fws->stats.txs_host_tossed += compcnt;
|
|
else
|
|
@@ -1862,9 +1847,6 @@ void brcmf_fws_hdrpull(struct brcmf_if *ifp, s16 siglen, struct sk_buff *skb)
|
|
|
|
WARN_ON(siglen > skb->len);
|
|
|
|
- if (siglen > skb->len)
|
|
- siglen = skb->len;
|
|
-
|
|
if (!siglen)
|
|
return;
|
|
/* if flow control disabled, skip to packet data and leave */
|
|
@@ -2027,31 +2009,27 @@ static void brcmf_fws_rollback_toq(struct brcmf_fws_info *fws,
|
|
}
|
|
}
|
|
|
|
-static int brcmf_fws_borrow_credit(struct brcmf_fws_info *fws,
|
|
- int highest_lender_ac, int borrower_ac,
|
|
- bool borrow_all)
|
|
+static int brcmf_fws_borrow_credit(struct brcmf_fws_info *fws)
|
|
{
|
|
- int lender_ac, borrow_limit = 0;
|
|
-
|
|
- for (lender_ac = 0; lender_ac <= highest_lender_ac; lender_ac++) {
|
|
+ int lender_ac;
|
|
|
|
- if (!borrow_all)
|
|
- borrow_limit =
|
|
- fws->init_fifo_credit[lender_ac] / BRCMF_BORROW_RATIO;
|
|
- else
|
|
- borrow_limit = 0;
|
|
+ if (time_after(fws->borrow_defer_timestamp, jiffies)) {
|
|
+ fws->fifo_credit_map &= ~(1 << BRCMF_FWS_FIFO_AC_BE);
|
|
+ return -ENAVAIL;
|
|
+ }
|
|
|
|
- if (fws->fifo_credit[lender_ac] > borrow_limit) {
|
|
- fws->credits_borrowed[borrower_ac][lender_ac]++;
|
|
+ for (lender_ac = 0; lender_ac <= BRCMF_FWS_FIFO_AC_VO; lender_ac++) {
|
|
+ if (fws->fifo_credit[lender_ac] > 0) {
|
|
+ fws->credits_borrowed[lender_ac]++;
|
|
fws->fifo_credit[lender_ac]--;
|
|
if (fws->fifo_credit[lender_ac] == 0)
|
|
fws->fifo_credit_map &= ~(1 << lender_ac);
|
|
- fws->fifo_credit_map |= (1 << borrower_ac);
|
|
+ fws->fifo_credit_map |= (1 << BRCMF_FWS_FIFO_AC_BE);
|
|
brcmf_dbg(DATA, "borrow credit from: %d\n", lender_ac);
|
|
return 0;
|
|
}
|
|
}
|
|
- fws->fifo_credit_map &= ~(1 << borrower_ac);
|
|
+ fws->fifo_credit_map &= ~(1 << BRCMF_FWS_FIFO_AC_BE);
|
|
return -ENAVAIL;
|
|
}
|
|
|
|
@@ -2242,10 +2220,9 @@ static void brcmf_fws_dequeue_worker(struct work_struct *worker)
|
|
}
|
|
continue;
|
|
}
|
|
-
|
|
- while ((fws->fifo_credit[fifo]) ||
|
|
+ while ((fws->fifo_credit[fifo] > 0) ||
|
|
((!fws->bcmc_credit_check) &&
|
|
- (fifo == BRCMF_FWS_FIFO_BCMC))) {
|
|
+ (fifo == BRCMF_FWS_FIFO_BCMC))) {
|
|
skb = brcmf_fws_deq(fws, fifo);
|
|
if (!skb)
|
|
break;
|
|
@@ -2255,14 +2232,10 @@ static void brcmf_fws_dequeue_worker(struct work_struct *worker)
|
|
if (fws->bus_flow_blocked)
|
|
break;
|
|
}
|
|
-
|
|
- if (fifo >= BRCMF_FWS_FIFO_AC_BE &&
|
|
- fifo <= BRCMF_FWS_FIFO_AC_VO &&
|
|
- fws->fifo_credit[fifo] == 0 &&
|
|
- !fws->bus_flow_blocked) {
|
|
- while (brcmf_fws_borrow_credit(fws,
|
|
- fifo - 1, fifo,
|
|
- true) == 0) {
|
|
+ if ((fifo == BRCMF_FWS_FIFO_AC_BE) &&
|
|
+ (fws->fifo_credit[fifo] <= 0) &&
|
|
+ (!fws->bus_flow_blocked)) {
|
|
+ while (brcmf_fws_borrow_credit(fws) == 0) {
|
|
skb = brcmf_fws_deq(fws, fifo);
|
|
if (!skb) {
|
|
brcmf_fws_return_credits(fws, fifo, 1);
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
|
index f1a20db8d..8bb4f1fa7 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
|
|
@@ -54,7 +54,6 @@
|
|
#define BRCMF_IOCTL_REQ_PKTID 0xFFFE
|
|
|
|
#define BRCMF_MSGBUF_MAX_PKT_SIZE 2048
|
|
-#define BRCMF_MSGBUF_MAX_CTL_PKT_SIZE 8192
|
|
#define BRCMF_MSGBUF_RXBUFPOST_THRESHOLD 32
|
|
#define BRCMF_MSGBUF_MAX_IOCTLRESPBUF_POST 8
|
|
#define BRCMF_MSGBUF_MAX_EVENTBUF_POST 8
|
|
@@ -1029,7 +1028,7 @@ brcmf_msgbuf_rxbuf_ctrl_post(struct brcmf_msgbuf *msgbuf, bool event_buf,
|
|
rx_bufpost = (struct msgbuf_rx_ioctl_resp_or_event *)ret_ptr;
|
|
memset(rx_bufpost, 0, sizeof(*rx_bufpost));
|
|
|
|
- skb = brcmu_pkt_buf_get_skb(BRCMF_MSGBUF_MAX_CTL_PKT_SIZE);
|
|
+ skb = brcmu_pkt_buf_get_skb(BRCMF_MSGBUF_MAX_PKT_SIZE);
|
|
|
|
if (skb == NULL) {
|
|
bphy_err(drvr, "Failed to alloc SKB\n");
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c
|
|
index a7554265f..b886b56a5 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/of.c
|
|
@@ -17,6 +17,7 @@ void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
|
|
{
|
|
struct brcmfmac_sdio_pd *sdio = &settings->bus.sdio;
|
|
struct device_node *root, *np = dev->of_node;
|
|
+ struct property *prop;
|
|
int irq;
|
|
u32 irqf;
|
|
u32 val;
|
|
@@ -24,22 +25,8 @@ void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
|
|
/* Set board-type to the first string of the machine compatible prop */
|
|
root = of_find_node_by_path("/");
|
|
if (root) {
|
|
- int i, len;
|
|
- char *board_type;
|
|
- const char *tmp;
|
|
-
|
|
- of_property_read_string_index(root, "compatible", 0, &tmp);
|
|
-
|
|
- /* get rid of '/' in the compatible string to be able to find the FW */
|
|
- len = strlen(tmp) + 1;
|
|
- board_type = devm_kzalloc(dev, len, GFP_KERNEL);
|
|
- strscpy(board_type, tmp, len);
|
|
- for (i = 0; i < board_type[i]; i++) {
|
|
- if (board_type[i] == '/')
|
|
- board_type[i] = '-';
|
|
- }
|
|
- settings->board_type = board_type;
|
|
-
|
|
+ prop = of_find_property(root, "compatible", NULL);
|
|
+ settings->board_type = of_prop_next_string(prop, NULL);
|
|
of_node_put(root);
|
|
}
|
|
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
|
|
index debd887e1..d2795dc17 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
|
|
@@ -1700,7 +1700,7 @@ static s32 brcmf_p2p_pub_af_tx(struct brcmf_cfg80211_info *cfg,
|
|
return err;
|
|
}
|
|
|
|
-static bool brcmf_p2p_check_dwell_overflow(u32 requested_dwell,
|
|
+static bool brcmf_p2p_check_dwell_overflow(s32 requested_dwell,
|
|
unsigned long dwell_jiffies)
|
|
{
|
|
if ((requested_dwell & CUSTOM_RETRY_MASK) &&
|
|
@@ -1738,7 +1738,8 @@ bool brcmf_p2p_send_action_frame(struct brcmf_cfg80211_info *cfg,
|
|
unsigned long dwell_jiffies = 0;
|
|
bool dwell_overflow = false;
|
|
|
|
- u32 requested_dwell = le32_to_cpu(af_params->dwell_time);
|
|
+ s32 requested_dwell = af_params->dwell_time;
|
|
+
|
|
action_frame = &af_params->action_frame;
|
|
action_frame_len = le16_to_cpu(action_frame->len);
|
|
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
|
index e8712ad3a..bc02168eb 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
|
@@ -16,7 +16,6 @@
|
|
#include <linux/mmc/sdio_ids.h>
|
|
#include <linux/mmc/sdio_func.h>
|
|
#include <linux/mmc/card.h>
|
|
-#include <linux/mmc/core.h>
|
|
#include <linux/semaphore.h>
|
|
#include <linux/firmware.h>
|
|
#include <linux/module.h>
|
|
@@ -649,8 +648,6 @@ static const struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = {
|
|
BRCMF_FW_ENTRY(CY_CC_43012_CHIP_ID, 0xFFFFFFFF, 43012)
|
|
};
|
|
|
|
-#define TXCTL_CREDITS 2
|
|
-
|
|
static void pkt_align(struct sk_buff *p, int len, int align)
|
|
{
|
|
uint datalign;
|
|
@@ -664,16 +661,8 @@ static void pkt_align(struct sk_buff *p, int len, int align)
|
|
/* To check if there's window offered */
|
|
static bool data_ok(struct brcmf_sdio *bus)
|
|
{
|
|
- /* Reserve TXCTL_CREDITS credits for txctl */
|
|
- return (bus->tx_max - bus->tx_seq) > TXCTL_CREDITS &&
|
|
- ((bus->tx_max - bus->tx_seq) & 0x80) == 0;
|
|
-}
|
|
-
|
|
-/* To check if there's window offered */
|
|
-static bool txctl_ok(struct brcmf_sdio *bus)
|
|
-{
|
|
- return (bus->tx_max - bus->tx_seq) != 0 &&
|
|
- ((bus->tx_max - bus->tx_seq) & 0x80) == 0;
|
|
+ return (u8)(bus->tx_max - bus->tx_seq) != 0 &&
|
|
+ ((u8)(bus->tx_max - bus->tx_seq) & 0x80) == 0;
|
|
}
|
|
|
|
static int
|
|
@@ -2679,7 +2668,7 @@ static void brcmf_sdio_dpc(struct brcmf_sdio *bus)
|
|
brcmf_sdio_clrintr(bus);
|
|
|
|
if (bus->ctrl_frame_stat && (bus->clkstate == CLK_AVAIL) &&
|
|
- txctl_ok(bus)) {
|
|
+ data_ok(bus)) {
|
|
sdio_claim_host(bus->sdiodev->func1);
|
|
if (bus->ctrl_frame_stat) {
|
|
err = brcmf_sdio_tx_ctrlframe(bus, bus->ctrl_frame_buf,
|
|
@@ -2687,9 +2676,6 @@ static void brcmf_sdio_dpc(struct brcmf_sdio *bus)
|
|
bus->ctrl_frame_err = err;
|
|
wmb();
|
|
bus->ctrl_frame_stat = false;
|
|
- if (err)
|
|
- brcmf_err("sdio ctrlframe tx failed err=%d\n",
|
|
- err);
|
|
}
|
|
sdio_release_host(bus->sdiodev->func1);
|
|
brcmf_sdio_wait_event_wakeup(bus);
|
|
@@ -4127,36 +4113,6 @@ int brcmf_sdio_get_fwname(struct device *dev, const char *ext, u8 *fw_name)
|
|
return 0;
|
|
}
|
|
|
|
-static int brcmf_sdio_bus_reset(struct device *dev)
|
|
-{
|
|
- int ret = 0;
|
|
- struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
|
- struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
|
|
-
|
|
- brcmf_dbg(SDIO, "Enter\n");
|
|
-
|
|
- /* start by unregistering irqs */
|
|
- brcmf_sdiod_intr_unregister(sdiodev);
|
|
-
|
|
- brcmf_sdiod_remove(sdiodev);
|
|
-
|
|
- /* reset the adapter */
|
|
- sdio_claim_host(sdiodev->func1);
|
|
- mmc_hw_reset(sdiodev->func1->card->host);
|
|
- sdio_release_host(sdiodev->func1);
|
|
-
|
|
- brcmf_bus_change_state(sdiodev->bus_if, BRCMF_BUS_DOWN);
|
|
-
|
|
- ret = brcmf_sdiod_probe(sdiodev);
|
|
- if (ret) {
|
|
- brcmf_err("Failed to probe after sdio device reset: ret %d\n",
|
|
- ret);
|
|
- brcmf_sdiod_remove(sdiodev);
|
|
- }
|
|
-
|
|
- return ret;
|
|
-}
|
|
-
|
|
static const struct brcmf_bus_ops brcmf_sdio_bus_ops = {
|
|
.stop = brcmf_sdio_bus_stop,
|
|
.preinit = brcmf_sdio_bus_preinit,
|
|
@@ -4168,8 +4124,7 @@ static const struct brcmf_bus_ops brcmf_sdio_bus_ops = {
|
|
.get_ramsize = brcmf_sdio_bus_get_ramsize,
|
|
.get_memdump = brcmf_sdio_bus_get_memdump,
|
|
.get_fwname = brcmf_sdio_get_fwname,
|
|
- .debugfs_create = brcmf_sdio_debugfs_create,
|
|
- .reset = brcmf_sdio_bus_reset
|
|
+ .debugfs_create = brcmf_sdio_debugfs_create
|
|
};
|
|
|
|
#define BRCMF_SDIO_FW_CODE 0
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
|
|
index 12108927f..163fd6647 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
|
|
@@ -367,9 +367,6 @@ static inline void brcmf_sdiod_freezer_uncount(struct brcmf_sdio_dev *sdiodev)
|
|
}
|
|
#endif /* CONFIG_PM_SLEEP */
|
|
|
|
-int brcmf_sdiod_probe(struct brcmf_sdio_dev *sdiodev);
|
|
-int brcmf_sdiod_remove(struct brcmf_sdio_dev *sdiodev);
|
|
-
|
|
struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev);
|
|
void brcmf_sdio_remove(struct brcmf_sdio *bus);
|
|
void brcmf_sdio_isr(struct brcmf_sdio *bus);
|