mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-05-07 15:53:49 +00:00
brcmfmac: remove reference to fwsignal data from struct brcmf_pub
The fwsignal module is part of the bcdc protocol and as such does its instance data is not needed in core structure. Moving it into struct brcmf_bcdc instead. Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com> Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com> Reviewed-by: Franky Lin <franky.lin@broadcom.com> Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
fc0471e3e8
commit
acf8ac41dd
5 changed files with 54 additions and 39 deletions
|
@ -103,9 +103,17 @@ struct brcmf_bcdc {
|
||||||
u8 bus_header[BUS_HEADER_LEN];
|
u8 bus_header[BUS_HEADER_LEN];
|
||||||
struct brcmf_proto_bcdc_dcmd msg;
|
struct brcmf_proto_bcdc_dcmd msg;
|
||||||
unsigned char buf[BRCMF_DCMD_MAXLEN];
|
unsigned char buf[BRCMF_DCMD_MAXLEN];
|
||||||
|
struct brcmf_fws_info *fws;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct brcmf_fws_info *drvr_to_fws(struct brcmf_pub *drvr)
|
||||||
|
{
|
||||||
|
struct brcmf_bcdc *bcdc = drvr->proto->pd;
|
||||||
|
|
||||||
|
return bcdc->fws;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
brcmf_proto_bcdc_msg(struct brcmf_pub *drvr, int ifidx, uint cmd, void *buf,
|
brcmf_proto_bcdc_msg(struct brcmf_pub *drvr, int ifidx, uint cmd, void *buf,
|
||||||
uint len, bool set)
|
uint len, bool set)
|
||||||
|
@ -330,8 +338,9 @@ static int brcmf_proto_bcdc_tx_queue_data(struct brcmf_pub *drvr, int ifidx,
|
||||||
struct sk_buff *skb)
|
struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
struct brcmf_if *ifp = brcmf_get_ifp(drvr, ifidx);
|
struct brcmf_if *ifp = brcmf_get_ifp(drvr, ifidx);
|
||||||
|
struct brcmf_bcdc *bcdc = drvr->proto->pd;
|
||||||
|
|
||||||
if (!brcmf_fws_queue_skbs(drvr->fws))
|
if (!brcmf_fws_queue_skbs(bcdc->fws))
|
||||||
return brcmf_proto_txdata(drvr, ifidx, 0, skb);
|
return brcmf_proto_txdata(drvr, ifidx, 0, skb);
|
||||||
|
|
||||||
return brcmf_fws_process_skb(ifp, skb);
|
return brcmf_fws_process_skb(ifp, skb);
|
||||||
|
@ -360,15 +369,15 @@ brcmf_proto_bcdc_txcomplete(struct device *dev, struct sk_buff *txp,
|
||||||
bool success)
|
bool success)
|
||||||
{
|
{
|
||||||
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
struct brcmf_bus *bus_if = dev_get_drvdata(dev);
|
||||||
struct brcmf_pub *drvr = bus_if->drvr;
|
struct brcmf_bcdc *bcdc = bus_if->drvr->proto->pd;
|
||||||
struct brcmf_if *ifp;
|
struct brcmf_if *ifp;
|
||||||
|
|
||||||
/* await txstatus signal for firmware if active */
|
/* await txstatus signal for firmware if active */
|
||||||
if (brcmf_fws_fc_active(drvr->fws)) {
|
if (brcmf_fws_fc_active(bcdc->fws)) {
|
||||||
if (!success)
|
if (!success)
|
||||||
brcmf_fws_bustxfail(drvr->fws, txp);
|
brcmf_fws_bustxfail(bcdc->fws, txp);
|
||||||
} else {
|
} else {
|
||||||
if (brcmf_proto_bcdc_hdrpull(drvr, false, txp, &ifp))
|
if (brcmf_proto_bcdc_hdrpull(bus_if->drvr, false, txp, &ifp))
|
||||||
brcmu_pkt_buf_free_skb(txp);
|
brcmu_pkt_buf_free_skb(txp);
|
||||||
else
|
else
|
||||||
brcmf_txfinalize(ifp, txp, success);
|
brcmf_txfinalize(ifp, txp, success);
|
||||||
|
@ -420,7 +429,15 @@ brcmf_proto_bcdc_reset_if(struct brcmf_if *ifp)
|
||||||
static int
|
static int
|
||||||
brcmf_proto_bcdc_init_done(struct brcmf_pub *drvr)
|
brcmf_proto_bcdc_init_done(struct brcmf_pub *drvr)
|
||||||
{
|
{
|
||||||
return brcmf_fws_attach(drvr);
|
struct brcmf_bcdc *bcdc = drvr->proto->pd;
|
||||||
|
struct brcmf_fws_info *fws;
|
||||||
|
|
||||||
|
fws = brcmf_fws_attach(drvr);
|
||||||
|
if (IS_ERR(fws))
|
||||||
|
return PTR_ERR(fws);
|
||||||
|
|
||||||
|
bcdc->fws = fws;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr)
|
int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr)
|
||||||
|
@ -464,7 +481,9 @@ fail:
|
||||||
|
|
||||||
void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr)
|
void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr)
|
||||||
{
|
{
|
||||||
brcmf_fws_detach(drvr);
|
struct brcmf_bcdc *bcdc = drvr->proto->pd;
|
||||||
kfree(drvr->proto->pd);
|
|
||||||
drvr->proto->pd = NULL;
|
drvr->proto->pd = NULL;
|
||||||
|
brcmf_fws_detach(bcdc->fws);
|
||||||
|
kfree(bcdc);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@ void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr);
|
||||||
void brcmf_proto_bcdc_txflowblock(struct device *dev, bool state);
|
void brcmf_proto_bcdc_txflowblock(struct device *dev, bool state);
|
||||||
void brcmf_proto_bcdc_txcomplete(struct device *dev, struct sk_buff *txp,
|
void brcmf_proto_bcdc_txcomplete(struct device *dev, struct sk_buff *txp,
|
||||||
bool success);
|
bool success);
|
||||||
|
struct brcmf_fws_info *drvr_to_fws(struct brcmf_pub *drvr);
|
||||||
#else
|
#else
|
||||||
static inline int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr) { return 0; }
|
static inline int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr) { return 0; }
|
||||||
static inline void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr) {}
|
static inline void brcmf_proto_bcdc_detach(struct brcmf_pub *drvr) {}
|
||||||
|
|
|
@ -127,8 +127,6 @@ struct brcmf_pub {
|
||||||
|
|
||||||
struct brcmf_fweh_info fweh;
|
struct brcmf_fweh_info fweh;
|
||||||
|
|
||||||
struct brcmf_fws_info *fws;
|
|
||||||
|
|
||||||
struct brcmf_ampdu_rx_reorder
|
struct brcmf_ampdu_rx_reorder
|
||||||
*reorder_flows[BRCMF_AMPDU_RX_REORDER_MAXFLOWS];
|
*reorder_flows[BRCMF_AMPDU_RX_REORDER_MAXFLOWS];
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
#include "p2p.h"
|
#include "p2p.h"
|
||||||
#include "cfg80211.h"
|
#include "cfg80211.h"
|
||||||
#include "proto.h"
|
#include "proto.h"
|
||||||
|
#include "bcdc.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1586,7 +1587,7 @@ static int brcmf_fws_notify_credit_map(struct brcmf_if *ifp,
|
||||||
const struct brcmf_event_msg *e,
|
const struct brcmf_event_msg *e,
|
||||||
void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
struct brcmf_fws_info *fws = ifp->drvr->fws;
|
struct brcmf_fws_info *fws = drvr_to_fws(ifp->drvr);
|
||||||
int i;
|
int i;
|
||||||
u8 *credits = data;
|
u8 *credits = data;
|
||||||
|
|
||||||
|
@ -1617,7 +1618,7 @@ static int brcmf_fws_notify_bcmc_credit_support(struct brcmf_if *ifp,
|
||||||
const struct brcmf_event_msg *e,
|
const struct brcmf_event_msg *e,
|
||||||
void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
struct brcmf_fws_info *fws = ifp->drvr->fws;
|
struct brcmf_fws_info *fws = drvr_to_fws(ifp->drvr);
|
||||||
|
|
||||||
if (fws) {
|
if (fws) {
|
||||||
brcmf_fws_lock(fws);
|
brcmf_fws_lock(fws);
|
||||||
|
@ -1826,7 +1827,7 @@ netif_rx:
|
||||||
void brcmf_fws_hdrpull(struct brcmf_if *ifp, s16 siglen, struct sk_buff *skb)
|
void brcmf_fws_hdrpull(struct brcmf_if *ifp, s16 siglen, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
struct brcmf_skb_reorder_data *rd;
|
struct brcmf_skb_reorder_data *rd;
|
||||||
struct brcmf_fws_info *fws = ifp->drvr->fws;
|
struct brcmf_fws_info *fws = drvr_to_fws(ifp->drvr);
|
||||||
u8 *signal_data;
|
u8 *signal_data;
|
||||||
s16 data_len;
|
s16 data_len;
|
||||||
u8 type;
|
u8 type;
|
||||||
|
@ -2091,8 +2092,7 @@ static int brcmf_fws_assign_htod(struct brcmf_fws_info *fws, struct sk_buff *p,
|
||||||
|
|
||||||
int brcmf_fws_process_skb(struct brcmf_if *ifp, struct sk_buff *skb)
|
int brcmf_fws_process_skb(struct brcmf_if *ifp, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
struct brcmf_pub *drvr = ifp->drvr;
|
struct brcmf_fws_info *fws = drvr_to_fws(ifp->drvr);
|
||||||
struct brcmf_fws_info *fws = drvr->fws;
|
|
||||||
struct brcmf_skbuff_cb *skcb = brcmf_skbcb(skb);
|
struct brcmf_skbuff_cb *skcb = brcmf_skbcb(skb);
|
||||||
struct ethhdr *eh = (struct ethhdr *)(skb->data);
|
struct ethhdr *eh = (struct ethhdr *)(skb->data);
|
||||||
int fifo = BRCMF_FWS_FIFO_BCMC;
|
int fifo = BRCMF_FWS_FIFO_BCMC;
|
||||||
|
@ -2142,7 +2142,7 @@ void brcmf_fws_reset_interface(struct brcmf_if *ifp)
|
||||||
|
|
||||||
void brcmf_fws_add_interface(struct brcmf_if *ifp)
|
void brcmf_fws_add_interface(struct brcmf_if *ifp)
|
||||||
{
|
{
|
||||||
struct brcmf_fws_info *fws = ifp->drvr->fws;
|
struct brcmf_fws_info *fws = drvr_to_fws(ifp->drvr);
|
||||||
struct brcmf_fws_mac_descriptor *entry;
|
struct brcmf_fws_mac_descriptor *entry;
|
||||||
|
|
||||||
if (!ifp->ndev || fws->fcmode == BRCMF_FWS_FCMODE_NONE)
|
if (!ifp->ndev || fws->fcmode == BRCMF_FWS_FCMODE_NONE)
|
||||||
|
@ -2160,16 +2160,17 @@ void brcmf_fws_add_interface(struct brcmf_if *ifp)
|
||||||
void brcmf_fws_del_interface(struct brcmf_if *ifp)
|
void brcmf_fws_del_interface(struct brcmf_if *ifp)
|
||||||
{
|
{
|
||||||
struct brcmf_fws_mac_descriptor *entry = ifp->fws_desc;
|
struct brcmf_fws_mac_descriptor *entry = ifp->fws_desc;
|
||||||
|
struct brcmf_fws_info *fws = drvr_to_fws(ifp->drvr);
|
||||||
|
|
||||||
if (!entry)
|
if (!entry)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
brcmf_fws_lock(ifp->drvr->fws);
|
brcmf_fws_lock(fws);
|
||||||
ifp->fws_desc = NULL;
|
ifp->fws_desc = NULL;
|
||||||
brcmf_dbg(TRACE, "deleting %s\n", entry->name);
|
brcmf_dbg(TRACE, "deleting %s\n", entry->name);
|
||||||
brcmf_fws_macdesc_deinit(entry);
|
brcmf_fws_macdesc_deinit(entry);
|
||||||
brcmf_fws_cleanup(ifp->drvr->fws, ifp->ifidx);
|
brcmf_fws_cleanup(fws, ifp->ifidx);
|
||||||
brcmf_fws_unlock(ifp->drvr->fws);
|
brcmf_fws_unlock(fws);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void brcmf_fws_dequeue_worker(struct work_struct *worker)
|
static void brcmf_fws_dequeue_worker(struct work_struct *worker)
|
||||||
|
@ -2243,7 +2244,7 @@ static void brcmf_fws_dequeue_worker(struct work_struct *worker)
|
||||||
static int brcmf_debugfs_fws_stats_read(struct seq_file *seq, void *data)
|
static int brcmf_debugfs_fws_stats_read(struct seq_file *seq, void *data)
|
||||||
{
|
{
|
||||||
struct brcmf_bus *bus_if = dev_get_drvdata(seq->private);
|
struct brcmf_bus *bus_if = dev_get_drvdata(seq->private);
|
||||||
struct brcmf_fws_stats *fwstats = &bus_if->drvr->fws->stats;
|
struct brcmf_fws_stats *fwstats = &(drvr_to_fws(bus_if->drvr)->stats);
|
||||||
|
|
||||||
seq_printf(seq,
|
seq_printf(seq,
|
||||||
"header_pulls: %u\n"
|
"header_pulls: %u\n"
|
||||||
|
@ -2308,7 +2309,7 @@ static int brcmf_debugfs_fws_stats_read(struct seq_file *seq, void *data)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int brcmf_fws_attach(struct brcmf_pub *drvr)
|
struct brcmf_fws_info *brcmf_fws_attach(struct brcmf_pub *drvr)
|
||||||
{
|
{
|
||||||
struct brcmf_fws_info *fws;
|
struct brcmf_fws_info *fws;
|
||||||
struct brcmf_if *ifp;
|
struct brcmf_if *ifp;
|
||||||
|
@ -2316,17 +2317,15 @@ int brcmf_fws_attach(struct brcmf_pub *drvr)
|
||||||
int rc;
|
int rc;
|
||||||
u32 mode;
|
u32 mode;
|
||||||
|
|
||||||
drvr->fws = kzalloc(sizeof(*(drvr->fws)), GFP_KERNEL);
|
fws = kzalloc(sizeof(*fws), GFP_KERNEL);
|
||||||
if (!drvr->fws) {
|
if (!fws) {
|
||||||
rc = -ENOMEM;
|
rc = -ENOMEM;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
fws = drvr->fws;
|
|
||||||
|
|
||||||
spin_lock_init(&fws->spinlock);
|
spin_lock_init(&fws->spinlock);
|
||||||
|
|
||||||
/* set linkage back */
|
/* store drvr reference */
|
||||||
fws->drvr = drvr;
|
fws->drvr = drvr;
|
||||||
fws->fcmode = drvr->settings->fcmode;
|
fws->fcmode = drvr->settings->fcmode;
|
||||||
|
|
||||||
|
@ -2334,7 +2333,7 @@ int brcmf_fws_attach(struct brcmf_pub *drvr)
|
||||||
(fws->fcmode == BRCMF_FWS_FCMODE_NONE)) {
|
(fws->fcmode == BRCMF_FWS_FCMODE_NONE)) {
|
||||||
fws->avoid_queueing = true;
|
fws->avoid_queueing = true;
|
||||||
brcmf_dbg(INFO, "FWS queueing will be avoided\n");
|
brcmf_dbg(INFO, "FWS queueing will be avoided\n");
|
||||||
return 0;
|
return fws;
|
||||||
}
|
}
|
||||||
|
|
||||||
fws->fws_wq = create_singlethread_workqueue("brcmf_fws_wq");
|
fws->fws_wq = create_singlethread_workqueue("brcmf_fws_wq");
|
||||||
|
@ -2396,6 +2395,7 @@ int brcmf_fws_attach(struct brcmf_pub *drvr)
|
||||||
brcmf_fws_hanger_init(&fws->hanger);
|
brcmf_fws_hanger_init(&fws->hanger);
|
||||||
brcmf_fws_macdesc_init(&fws->desc.other, NULL, 0);
|
brcmf_fws_macdesc_init(&fws->desc.other, NULL, 0);
|
||||||
brcmf_fws_macdesc_set_name(fws, &fws->desc.other);
|
brcmf_fws_macdesc_set_name(fws, &fws->desc.other);
|
||||||
|
brcmf_dbg(INFO, "added %s\n", fws->desc.other.name);
|
||||||
brcmu_pktq_init(&fws->desc.other.psq, BRCMF_FWS_PSQ_PREC_COUNT,
|
brcmu_pktq_init(&fws->desc.other.psq, BRCMF_FWS_PSQ_PREC_COUNT,
|
||||||
BRCMF_FWS_PSQ_LEN);
|
BRCMF_FWS_PSQ_LEN);
|
||||||
|
|
||||||
|
@ -2405,27 +2405,24 @@ int brcmf_fws_attach(struct brcmf_pub *drvr)
|
||||||
|
|
||||||
brcmf_dbg(INFO, "%s bdcv2 tlv signaling [%x]\n",
|
brcmf_dbg(INFO, "%s bdcv2 tlv signaling [%x]\n",
|
||||||
fws->fw_signals ? "enabled" : "disabled", tlv);
|
fws->fw_signals ? "enabled" : "disabled", tlv);
|
||||||
return 0;
|
return fws;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
brcmf_fws_detach(drvr);
|
brcmf_fws_detach(fws);
|
||||||
return rc;
|
return ERR_PTR(rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void brcmf_fws_detach(struct brcmf_pub *drvr)
|
void brcmf_fws_detach(struct brcmf_fws_info *fws)
|
||||||
{
|
{
|
||||||
struct brcmf_fws_info *fws = drvr->fws;
|
|
||||||
|
|
||||||
if (!fws)
|
if (!fws)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (drvr->fws->fws_wq)
|
if (fws->fws_wq)
|
||||||
destroy_workqueue(drvr->fws->fws_wq);
|
destroy_workqueue(fws->fws_wq);
|
||||||
|
|
||||||
/* cleanup */
|
/* cleanup */
|
||||||
brcmf_fws_lock(fws);
|
brcmf_fws_lock(fws);
|
||||||
brcmf_fws_cleanup(fws, -1);
|
brcmf_fws_cleanup(fws, -1);
|
||||||
drvr->fws = NULL;
|
|
||||||
brcmf_fws_unlock(fws);
|
brcmf_fws_unlock(fws);
|
||||||
|
|
||||||
/* free top structure */
|
/* free top structure */
|
||||||
|
@ -2461,7 +2458,7 @@ void brcmf_fws_bustxfail(struct brcmf_fws_info *fws, struct sk_buff *skb)
|
||||||
|
|
||||||
void brcmf_fws_bus_blocked(struct brcmf_pub *drvr, bool flow_blocked)
|
void brcmf_fws_bus_blocked(struct brcmf_pub *drvr, bool flow_blocked)
|
||||||
{
|
{
|
||||||
struct brcmf_fws_info *fws = drvr->fws;
|
struct brcmf_fws_info *fws = drvr_to_fws(drvr);
|
||||||
struct brcmf_if *ifp;
|
struct brcmf_if *ifp;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
|
|
@ -18,8 +18,8 @@
|
||||||
#ifndef FWSIGNAL_H_
|
#ifndef FWSIGNAL_H_
|
||||||
#define FWSIGNAL_H_
|
#define FWSIGNAL_H_
|
||||||
|
|
||||||
int brcmf_fws_attach(struct brcmf_pub *drvr);
|
struct brcmf_fws_info *brcmf_fws_attach(struct brcmf_pub *drvr);
|
||||||
void brcmf_fws_detach(struct brcmf_pub *drvr);
|
void brcmf_fws_detach(struct brcmf_fws_info *fws);
|
||||||
bool brcmf_fws_queue_skbs(struct brcmf_fws_info *fws);
|
bool brcmf_fws_queue_skbs(struct brcmf_fws_info *fws);
|
||||||
bool brcmf_fws_fc_active(struct brcmf_fws_info *fws);
|
bool brcmf_fws_fc_active(struct brcmf_fws_info *fws);
|
||||||
void brcmf_fws_hdrpull(struct brcmf_if *ifp, s16 siglen, struct sk_buff *skb);
|
void brcmf_fws_hdrpull(struct brcmf_if *ifp, s16 siglen, struct sk_buff *skb);
|
||||||
|
|
Loading…
Add table
Reference in a new issue