LinuxKPI: 802.11: fill regulatory_hint() with some life

Start implementing regulatory_hint() using a .c file based allocation
helper function so we could change structures in the future with
better chances to keep compatibility.
This sets wiphy->regd needed by various LinuxKPI based WiFi drivers.

Sponsored by:	The FreeBSD Foundation
MFC after:	3 days
This commit is contained in:
Bjoern A. Zeeb
2023-09-25 17:54:20 +00:00
parent c5e2579850
commit 673d62fc35
2 changed files with 28 additions and 2 deletions
@@ -1260,6 +1260,8 @@ struct cfg80211_bss *linuxkpi_cfg80211_get_bss(struct wiphy *,
const uint8_t *, size_t, enum ieee80211_bss_type, enum ieee80211_privacy);
void linuxkpi_cfg80211_put_bss(struct wiphy *, struct cfg80211_bss *);
void linuxkpi_cfg80211_bss_flush(struct wiphy *);
struct linuxkpi_ieee80211_regdomain *
lkpi_get_linuxkpi_ieee80211_regdomain(size_t);
/* -------------------------------------------------------------------------- */
@@ -1587,8 +1589,22 @@ regulatory_set_wiphy_regd(struct wiphy *wiphy,
static __inline int
regulatory_hint(struct wiphy *wiphy, const uint8_t *alpha2)
{
TODO();
return (-ENXIO);
struct linuxkpi_ieee80211_regdomain *regd;
if (wiphy->regd != NULL)
return (-EBUSY);
regd = lkpi_get_linuxkpi_ieee80211_regdomain(0);
if (regd == NULL)
return (-ENOMEM);
regd->alpha2[0] = alpha2[0];
regd->alpha2[1] = alpha2[1];
wiphy->regd = regd;
IMPROVE("are there flags who is managing? update net8011?");
return (0);
}
static __inline const char *
@@ -4028,6 +4028,16 @@ linuxkpi_ieee80211_iterate_stations_atomic(struct ieee80211_hw *hw,
LKPI_80211_LHW_LVIF_UNLOCK(lhw);
}
struct linuxkpi_ieee80211_regdomain *
lkpi_get_linuxkpi_ieee80211_regdomain(size_t n)
{
struct linuxkpi_ieee80211_regdomain *regd;
regd = kzalloc(sizeof(*regd) + n * sizeof(struct ieee80211_reg_rule),
GFP_KERNEL);
return (regd);
}
int
linuxkpi_regulatory_set_wiphy_regd_sync(struct wiphy *wiphy,
struct linuxkpi_ieee80211_regdomain *regd)