mirror of
https://github.com/torvalds/linux.git
synced 2026-05-22 14:12:07 +02:00
wifi: cfg80211: move away from using a fake platform device
Downloading regulatory "firmware" needs a device to hang off of, and so a platform device seemed like the simplest way to do this. Now that we have a faux device interface, use that instead as this "regulatory device" is not anything resembling a platform device at all. Cc: Johannes Berg <johannes@sipsolutions.net> Cc: <linux-wireless@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Link: https://patch.msgid.link/2025070116-growing-skeptic-494c@gregkh Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
aa49388151
commit
f440a12d26
|
|
@ -53,7 +53,7 @@
|
|||
#include <linux/list.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/nl80211.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/device/faux.h>
|
||||
#include <linux/verification.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/firmware.h>
|
||||
|
|
@ -105,7 +105,7 @@ static struct regulatory_request __rcu *last_request =
|
|||
(void __force __rcu *)&core_request_world;
|
||||
|
||||
/* To trigger userspace events and load firmware */
|
||||
static struct platform_device *reg_pdev;
|
||||
static struct faux_device *reg_fdev;
|
||||
|
||||
/*
|
||||
* Central wireless core regulatory domains, we only need two,
|
||||
|
|
@ -583,7 +583,7 @@ static int call_crda(const char *alpha2)
|
|||
else
|
||||
pr_debug("Calling CRDA to update world regulatory domain\n");
|
||||
|
||||
ret = kobject_uevent_env(®_pdev->dev.kobj, KOBJ_CHANGE, env);
|
||||
ret = kobject_uevent_env(®_fdev->dev.kobj, KOBJ_CHANGE, env);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
|
@ -779,7 +779,7 @@ static bool regdb_has_valid_signature(const u8 *data, unsigned int size)
|
|||
const struct firmware *sig;
|
||||
bool result;
|
||||
|
||||
if (request_firmware(&sig, "regulatory.db.p7s", ®_pdev->dev))
|
||||
if (request_firmware(&sig, "regulatory.db.p7s", ®_fdev->dev))
|
||||
return false;
|
||||
|
||||
result = verify_pkcs7_signature(data, size, sig->data, sig->size,
|
||||
|
|
@ -1061,7 +1061,7 @@ static int query_regdb_file(const char *alpha2)
|
|||
return -ENOMEM;
|
||||
|
||||
err = request_firmware_nowait(THIS_MODULE, true, "regulatory.db",
|
||||
®_pdev->dev, GFP_KERNEL,
|
||||
®_fdev->dev, GFP_KERNEL,
|
||||
(void *)alpha2, regdb_fw_cb);
|
||||
if (err)
|
||||
kfree(alpha2);
|
||||
|
|
@ -1077,7 +1077,7 @@ int reg_reload_regdb(void)
|
|||
const struct ieee80211_regdomain *current_regdomain;
|
||||
struct regulatory_request *request;
|
||||
|
||||
err = request_firmware(&fw, "regulatory.db", ®_pdev->dev);
|
||||
err = request_firmware(&fw, "regulatory.db", ®_fdev->dev);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
|
@ -4300,12 +4300,12 @@ static int __init regulatory_init_db(void)
|
|||
* in that case, don't try to do any further work here as
|
||||
* it's doomed to lead to crashes.
|
||||
*/
|
||||
if (IS_ERR_OR_NULL(reg_pdev))
|
||||
if (!reg_fdev)
|
||||
return -EINVAL;
|
||||
|
||||
err = load_builtin_regdb_keys();
|
||||
if (err) {
|
||||
platform_device_unregister(reg_pdev);
|
||||
faux_device_destroy(reg_fdev);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
@ -4313,7 +4313,7 @@ static int __init regulatory_init_db(void)
|
|||
err = regulatory_hint_core(cfg80211_world_regdom->alpha2);
|
||||
if (err) {
|
||||
if (err == -ENOMEM) {
|
||||
platform_device_unregister(reg_pdev);
|
||||
faux_device_destroy(reg_fdev);
|
||||
return err;
|
||||
}
|
||||
/*
|
||||
|
|
@ -4342,9 +4342,9 @@ late_initcall(regulatory_init_db);
|
|||
|
||||
int __init regulatory_init(void)
|
||||
{
|
||||
reg_pdev = platform_device_register_simple("regulatory", 0, NULL, 0);
|
||||
if (IS_ERR(reg_pdev))
|
||||
return PTR_ERR(reg_pdev);
|
||||
reg_fdev = faux_device_create("regulatory", NULL, NULL);
|
||||
if (!reg_fdev)
|
||||
return -ENODEV;
|
||||
|
||||
rcu_assign_pointer(cfg80211_regdomain, cfg80211_world_regdom);
|
||||
|
||||
|
|
@ -4372,9 +4372,9 @@ void regulatory_exit(void)
|
|||
reset_regdomains(true, NULL);
|
||||
rtnl_unlock();
|
||||
|
||||
dev_set_uevent_suppress(®_pdev->dev, true);
|
||||
dev_set_uevent_suppress(®_fdev->dev, true);
|
||||
|
||||
platform_device_unregister(reg_pdev);
|
||||
faux_device_destroy(reg_fdev);
|
||||
|
||||
list_for_each_entry_safe(reg_beacon, btmp, ®_pending_beacons, list) {
|
||||
list_del(®_beacon->list);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user