diff options
Diffstat (limited to 'sys/contrib/dev/iwlwifi/mld/hcmd.h')
| -rw-r--r-- | sys/contrib/dev/iwlwifi/mld/hcmd.h | 56 | 
1 files changed, 56 insertions, 0 deletions
| diff --git a/sys/contrib/dev/iwlwifi/mld/hcmd.h b/sys/contrib/dev/iwlwifi/mld/hcmd.h new file mode 100644 index 000000000000..64a8d4248324 --- /dev/null +++ b/sys/contrib/dev/iwlwifi/mld/hcmd.h @@ -0,0 +1,56 @@ +/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ +/* + * Copyright (C) 2024-2025 Intel Corporation + */ +#ifndef __iwl_mld_hcmd_h__ +#define __iwl_mld_hcmd_h__ + +static inline int iwl_mld_send_cmd(struct iwl_mld *mld, struct iwl_host_cmd *cmd) +{ +	/* No commands, including the d3 related commands, should be sent +	 * after entering d3 +	 */ +#ifdef CONFIG_PM_SLEEP +	if (WARN_ON(mld->fw_status.in_d3)) +		return -EIO; +#endif + +	if (!(cmd->flags & CMD_ASYNC)) +		lockdep_assert_wiphy(mld->wiphy); + +	/* Devices that need to shutdown immediately on rfkill are not +	 * supported, so we can send all the cmds in rfkill +	 */ +	cmd->flags |= CMD_SEND_IN_RFKILL; + +	return iwl_trans_send_cmd(mld->trans, cmd); +} + +static inline int +__iwl_mld_send_cmd_with_flags_pdu(struct iwl_mld *mld, u32 id, +				  u32 flags, const void *data, u16 len) +{ +	struct iwl_host_cmd cmd = { +		.id = id, +		.len = { data ? len : 0, }, +		.data = { data, }, +		.flags = flags, +	}; + +	return iwl_mld_send_cmd(mld, &cmd); +} + +#define _iwl_mld_send_cmd_with_flags_pdu(mld, id, flags, data, len,	\ +					 ignored...)			\ +	__iwl_mld_send_cmd_with_flags_pdu(mld, id, flags, data, len) +#define iwl_mld_send_cmd_with_flags_pdu(mld, id, flags, data, len...)	\ +	_iwl_mld_send_cmd_with_flags_pdu(mld, id, flags, data, ##len,	\ +					 sizeof(*(data))) + +#define iwl_mld_send_cmd_pdu(mld, id, ...)				\ +	iwl_mld_send_cmd_with_flags_pdu(mld, id, 0, __VA_ARGS__) + +#define iwl_mld_send_cmd_empty(mld, id)					\ +	iwl_mld_send_cmd_with_flags_pdu(mld, id, 0, NULL, 0) + +#endif /* __iwl_mld_hcmd_h__ */ | 
