mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2025-02-20 03:00:53 +01:00
manager: Split up new_wiphy dumps & events
Separate out the two types of NEW_WIPHY handlers into separate paths and factor out the common code into a utility function. Dumps of CMD_NEW_WIPHY can be split up over several messages, while CMD_NEW_WIPHY events (generated when a new card is plugged in) are stuffed into a single message. This also prepares ground for follow-on commits where we will handle the two types of events differently.
This commit is contained in:
parent
1b08602727
commit
d99242846c
@ -381,30 +381,20 @@ static void manager_wiphy_dump_interfaces(struct wiphy_setup_state *state)
|
|||||||
state->use_default = true;
|
state->use_default = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void manager_wiphy_setup_timeout(struct l_timeout *timeout,
|
static struct wiphy_setup_state *manager_rx_cmd_new_wiphy(
|
||||||
void *user_data)
|
struct l_genl_msg *msg)
|
||||||
{
|
{
|
||||||
struct wiphy_setup_state *state = user_data;
|
struct wiphy_setup_state *state = NULL;
|
||||||
|
|
||||||
manager_wiphy_dump_interfaces(state);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void manager_new_wiphy_event(struct l_genl_msg *msg)
|
|
||||||
{
|
|
||||||
struct wiphy_setup_state *state;
|
|
||||||
struct wiphy *wiphy;
|
struct wiphy *wiphy;
|
||||||
struct l_genl_attr attr;
|
struct l_genl_attr attr;
|
||||||
uint32_t id;
|
uint32_t id;
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
if (!pending_wiphys)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!l_genl_attr_init(&attr, msg))
|
if (!l_genl_attr_init(&attr, msg))
|
||||||
return;
|
return NULL;
|
||||||
|
|
||||||
if (!wiphy_parse_id_and_name(&attr, &id, &name))
|
if (!wiphy_parse_id_and_name(&attr, &id, &name))
|
||||||
return;
|
return NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A Wiphy split dump can generate many (6+) NEW_WIPHY messages
|
* A Wiphy split dump can generate many (6+) NEW_WIPHY messages
|
||||||
@ -417,7 +407,7 @@ static void manager_new_wiphy_event(struct l_genl_msg *msg)
|
|||||||
|
|
||||||
wiphy = wiphy_create(id, name);
|
wiphy = wiphy_create(id, name);
|
||||||
if (!wiphy)
|
if (!wiphy)
|
||||||
return;
|
return NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We've got a new wiphy, flag it as new and wait for a
|
* We've got a new wiphy, flag it as new and wait for a
|
||||||
@ -433,12 +423,35 @@ static void manager_new_wiphy_event(struct l_genl_msg *msg)
|
|||||||
state = l_new(struct wiphy_setup_state, 1);
|
state = l_new(struct wiphy_setup_state, 1);
|
||||||
state->id = id;
|
state->id = id;
|
||||||
state->wiphy = wiphy;
|
state->wiphy = wiphy;
|
||||||
state->setup_timeout = l_timeout_create(1, manager_wiphy_setup_timeout,
|
|
||||||
state, NULL);
|
|
||||||
l_queue_push_tail(pending_wiphys, state);
|
l_queue_push_tail(pending_wiphys, state);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
wiphy_update_from_genl(wiphy, msg);
|
wiphy_update_from_genl(wiphy, msg);
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void manager_wiphy_setup_timeout(struct l_timeout *timeout,
|
||||||
|
void *user_data)
|
||||||
|
{
|
||||||
|
struct wiphy_setup_state *state = user_data;
|
||||||
|
|
||||||
|
manager_wiphy_dump_interfaces(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void manager_new_wiphy_event(struct l_genl_msg *msg)
|
||||||
|
{
|
||||||
|
struct wiphy_setup_state *state;
|
||||||
|
|
||||||
|
if (!pending_wiphys)
|
||||||
|
return;
|
||||||
|
|
||||||
|
state = manager_rx_cmd_new_wiphy(msg);
|
||||||
|
if (!state)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Setup a timer just in case a default interface is not created */
|
||||||
|
state->setup_timeout = l_timeout_create(1, manager_wiphy_setup_timeout,
|
||||||
|
state, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool manager_wiphy_state_match(const void *a, const void *b)
|
static bool manager_wiphy_state_match(const void *a, const void *b)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user