mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 08:33:17 +02:00
wifi: brcmfmac: support per-vendor cfg80211 callbacks and firmware events
Adding two vendor operations that can be used to provide per-vendor cfg80211 callbacks and per-vendor handlers for firmware events. These two are often related to handling interactions from user-space through nl80211. Exporting brcmf_fweh_register() for registering the per-vendor event handler callbacks. Some other exports for get event name string and allowing use of brcmf_dbg() in per-vendor module. Tested-by: James Prestwood <prestwoj@gmail.com> Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com> Link: https://patch.msgid.link/20250425085519.492267-2-arend.vanspriel@broadcom.com Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
cf1b684a06
commit
42f7e5bf30
|
|
@ -6760,6 +6760,8 @@ static void brcmf_register_event_handlers(struct brcmf_cfg80211_info *cfg)
|
|||
brcmf_fweh_register(cfg->pub, BRCMF_E_PSK_SUP,
|
||||
brcmf_notify_connect_status);
|
||||
brcmf_fweh_register(cfg->pub, BRCMF_E_RSSI, brcmf_notify_rssi);
|
||||
|
||||
brcmf_fwvid_register_event_handlers(cfg->pub);
|
||||
}
|
||||
|
||||
static void brcmf_deinit_priv_mem(struct brcmf_cfg80211_info *cfg)
|
||||
|
|
|
|||
|
|
@ -491,6 +491,7 @@ void __brcmf_dbg(u32 level, const char *func, const char *fmt, ...)
|
|||
trace_brcmf_dbg(level, func, &vaf);
|
||||
va_end(args);
|
||||
}
|
||||
BRCMF_EXPORT_SYMBOL_GPL(__brcmf_dbg);
|
||||
#endif
|
||||
|
||||
static void brcmf_mp_attach(void)
|
||||
|
|
|
|||
|
|
@ -1363,6 +1363,8 @@ int brcmf_attach(struct device *dev)
|
|||
brcmf_fweh_register(drvr, BRCMF_E_PSM_WATCHDOG,
|
||||
brcmf_psm_watchdog_notify);
|
||||
|
||||
brcmf_fwvid_get_cfg80211_ops(drvr);
|
||||
|
||||
ret = brcmf_bus_started(drvr, drvr->ops);
|
||||
if (ret != 0) {
|
||||
bphy_err(drvr, "dongle is not responding: err=%d\n", ret);
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@ const char *brcmf_fweh_event_name(enum brcmf_fweh_event_code code)
|
|||
return "nodebug";
|
||||
}
|
||||
#endif
|
||||
BRCMF_EXPORT_SYMBOL_GPL(brcmf_fweh_event_name);
|
||||
|
||||
/**
|
||||
* brcmf_fweh_queue_event() - create and queue event.
|
||||
|
|
@ -405,6 +406,7 @@ int brcmf_fweh_register(struct brcmf_pub *drvr, enum brcmf_fweh_event_code code,
|
|||
brcmf_fweh_event_name(code));
|
||||
return 0;
|
||||
}
|
||||
BRCMF_EXPORT_SYMBOL_GPL(brcmf_fweh_register);
|
||||
|
||||
/**
|
||||
* brcmf_fweh_unregister() - remove handler for given code.
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@ struct brcmf_fwvid_ops {
|
|||
void (*feat_attach)(struct brcmf_if *ifp);
|
||||
int (*set_sae_password)(struct brcmf_if *ifp, struct cfg80211_crypto_settings *crypto);
|
||||
int (*alloc_fweh_info)(struct brcmf_pub *drvr);
|
||||
void (*get_cfg80211_ops)(struct brcmf_pub *drvr);
|
||||
void (*register_event_handlers)(struct brcmf_pub *drvr);
|
||||
};
|
||||
|
||||
/* exported functions */
|
||||
|
|
@ -56,4 +58,20 @@ static inline int brcmf_fwvid_alloc_fweh_info(struct brcmf_pub *drvr)
|
|||
return drvr->vops->alloc_fweh_info(drvr);
|
||||
}
|
||||
|
||||
static inline void brcmf_fwvid_get_cfg80211_ops(struct brcmf_pub *drvr)
|
||||
{
|
||||
if (!drvr->vops || !drvr->vops->get_cfg80211_ops)
|
||||
return;
|
||||
|
||||
drvr->vops->get_cfg80211_ops(drvr);
|
||||
}
|
||||
|
||||
static inline void brcmf_fwvid_register_event_handlers(struct brcmf_pub *drvr)
|
||||
{
|
||||
if (!drvr->vops || !drvr->vops->register_event_handlers)
|
||||
return;
|
||||
|
||||
drvr->vops->register_event_handlers(drvr);
|
||||
}
|
||||
|
||||
#endif /* FWVID_H_ */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user