mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-22 13:02:44 +01:00
wiphy: add [DriverQuirks].PowerSaveDisable flag
Certain drivers do not handle power save very well resulting in missed frames, firmware crashes, or other bad behavior. Its easy enough to disable power save via iw, iwconfig, etc but since IWD removes and creates the interface on startup it blows away any previous power save setting. The setting must be done *after* IWD creates the interface which can be done, but needs to be via some external daemon monitoring IWD's state. For minimal systems, e.g. without NetworkManager, it becomes difficult and annoying to persistently disable power save. For this reason a new driver flag POWER_SAVE_DISABLE is being added. This can then be referenced when creating the interfaces and if set, disable power save.
This commit is contained in:
parent
0b4dc9d8a5
commit
a50605a456
13
src/wiphy.c
13
src/wiphy.c
@ -71,6 +71,7 @@ static unsigned int wiphy_dump_id;
|
||||
enum driver_flag {
|
||||
DEFAULT_IF = 0x1,
|
||||
FORCE_PAE = 0x2,
|
||||
POWER_SAVE_DISABLE = 0x4,
|
||||
};
|
||||
|
||||
struct driver_flag_name {
|
||||
@ -101,6 +102,7 @@ static const struct driver_info driver_infos[] = {
|
||||
static const struct driver_flag_name driver_flag_names[] = {
|
||||
{ "DefaultInterface", DEFAULT_IF },
|
||||
{ "ForcePae", FORCE_PAE },
|
||||
{ "PowerSaveDisable", POWER_SAVE_DISABLE },
|
||||
};
|
||||
|
||||
struct wiphy {
|
||||
@ -723,6 +725,17 @@ bool wiphy_control_port_enabled(struct wiphy *wiphy)
|
||||
return enabled;
|
||||
}
|
||||
|
||||
bool wiphy_power_save_disabled(struct wiphy *wiphy)
|
||||
{
|
||||
if (wiphy->driver_flags & POWER_SAVE_DISABLE) {
|
||||
l_info("Disabling power save due to driver quirks: %s",
|
||||
wiphy_get_driver(wiphy));
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
const uint8_t *wiphy_get_permanent_address(struct wiphy *wiphy)
|
||||
{
|
||||
return wiphy->permanent_addr;
|
||||
|
@ -135,6 +135,7 @@ const char *wiphy_get_driver(struct wiphy *wiphy);
|
||||
const char *wiphy_get_name(struct wiphy *wiphy);
|
||||
bool wiphy_uses_default_if(struct wiphy *wiphy);
|
||||
bool wiphy_control_port_enabled(struct wiphy *wiphy);
|
||||
bool wiphy_power_save_disabled(struct wiphy *wiphy);
|
||||
const uint8_t *wiphy_get_permanent_address(struct wiphy *wiphy);
|
||||
const uint8_t *wiphy_get_extended_capabilities(struct wiphy *wiphy,
|
||||
uint32_t iftype);
|
||||
|
Loading…
Reference in New Issue
Block a user