Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1230b16b authored by Avraham Stern's avatar Avraham Stern Committed by Emmanuel Grumbach
Browse files

iwlwifi: mvm: add wide firmware command infrastructure for RX



Add support for extended firmware event header that contains
a group id as well as the command id.

Signed-off-by: default avatarAvraham Stern <avraham.stern@intel.com>
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
parent 6eb031d2
Loading
Loading
Loading
Loading
+5 −2
Original line number Original line Diff line number Diff line
@@ -201,13 +201,15 @@ static void iwl_mvm_nic_config(struct iwl_op_mode *op_mode)
}
}


struct iwl_rx_handlers {
struct iwl_rx_handlers {
	u8 cmd_id;
	u16 cmd_id;
	bool async;
	bool async;
	void (*fn)(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb);
	void (*fn)(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb);
};
};


#define RX_HANDLER(_cmd_id, _fn, _async)	\
#define RX_HANDLER(_cmd_id, _fn, _async)	\
	{ .cmd_id = _cmd_id , .fn = _fn , .async = _async }
	{ .cmd_id = _cmd_id , .fn = _fn , .async = _async }
#define RX_HANDLER_GRP(_grp, _cmd, _fn, _async)	\
	{ .cmd_id = WIDE_ID(_grp, _cmd), .fn = _fn, .async = _async }


/*
/*
 * Handlers for fw notifications
 * Handlers for fw notifications
@@ -263,6 +265,7 @@ static const struct iwl_rx_handlers iwl_mvm_rx_handlers[] = {


};
};
#undef RX_HANDLER
#undef RX_HANDLER
#undef RX_HANDLER_GRP
#define CMD(x) [x] = #x
#define CMD(x) [x] = #x


static const char *const iwl_mvm_cmd_strings[REPLY_MAX] = {
static const char *const iwl_mvm_cmd_strings[REPLY_MAX] = {
@@ -735,7 +738,7 @@ static void iwl_mvm_rx_dispatch(struct iwl_op_mode *op_mode,
		const struct iwl_rx_handlers *rx_h = &iwl_mvm_rx_handlers[i];
		const struct iwl_rx_handlers *rx_h = &iwl_mvm_rx_handlers[i];
		struct iwl_async_handler_entry *entry;
		struct iwl_async_handler_entry *entry;


		if (rx_h->cmd_id != pkt->hdr.cmd)
		if (rx_h->cmd_id != WIDE_ID(pkt->hdr.group_id, pkt->hdr.cmd))
			continue;
			continue;


		if (!rx_h->async) {
		if (!rx_h->async) {