162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * Shared Atheros AR9170 Header
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Firmware command interface definitions
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Copyright 2008, Johannes Berg <johannes@sipsolutions.net>
762306a36Sopenharmony_ci * Copyright 2009-2011 Christian Lamparter <chunkeey@googlemail.com>
862306a36Sopenharmony_ci *
962306a36Sopenharmony_ci * This program is free software; you can redistribute it and/or modify
1062306a36Sopenharmony_ci * it under the terms of the GNU General Public License as published by
1162306a36Sopenharmony_ci * the Free Software Foundation; either version 2 of the License.
1262306a36Sopenharmony_ci *
1362306a36Sopenharmony_ci * This program is distributed in the hope that it will be useful,
1462306a36Sopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
1562306a36Sopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1662306a36Sopenharmony_ci * GNU General Public License for more details.
1762306a36Sopenharmony_ci *
1862306a36Sopenharmony_ci * You should have received a copy of the GNU General Public License
1962306a36Sopenharmony_ci * along with this program; see the file COPYING.  If not, see
2062306a36Sopenharmony_ci * http://www.gnu.org/licenses/.
2162306a36Sopenharmony_ci *
2262306a36Sopenharmony_ci * This file incorporates work covered by the following copyright and
2362306a36Sopenharmony_ci * permission notice:
2462306a36Sopenharmony_ci *    Copyright (c) 2007-2008 Atheros Communications, Inc.
2562306a36Sopenharmony_ci *
2662306a36Sopenharmony_ci *    Permission to use, copy, modify, and/or distribute this software for any
2762306a36Sopenharmony_ci *    purpose with or without fee is hereby granted, provided that the above
2862306a36Sopenharmony_ci *    copyright notice and this permission notice appear in all copies.
2962306a36Sopenharmony_ci *
3062306a36Sopenharmony_ci *    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3162306a36Sopenharmony_ci *    WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3262306a36Sopenharmony_ci *    MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3362306a36Sopenharmony_ci *    ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3462306a36Sopenharmony_ci *    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3562306a36Sopenharmony_ci *    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3662306a36Sopenharmony_ci *    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3762306a36Sopenharmony_ci */
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci#ifndef __CARL9170_SHARED_FWCMD_H
4062306a36Sopenharmony_ci#define __CARL9170_SHARED_FWCMD_H
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci#define	CARL9170_MAX_CMD_LEN		64
4362306a36Sopenharmony_ci#define	CARL9170_MAX_CMD_PAYLOAD_LEN	60
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci#define CARL9170FW_API_MIN_VER		1
4662306a36Sopenharmony_ci#define CARL9170FW_API_MAX_VER		1
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_cienum carl9170_cmd_oids {
4962306a36Sopenharmony_ci	CARL9170_CMD_RREG		= 0x00,
5062306a36Sopenharmony_ci	CARL9170_CMD_WREG		= 0x01,
5162306a36Sopenharmony_ci	CARL9170_CMD_ECHO		= 0x02,
5262306a36Sopenharmony_ci	CARL9170_CMD_SWRST		= 0x03,
5362306a36Sopenharmony_ci	CARL9170_CMD_REBOOT		= 0x04,
5462306a36Sopenharmony_ci	CARL9170_CMD_BCN_CTRL		= 0x05,
5562306a36Sopenharmony_ci	CARL9170_CMD_READ_TSF		= 0x06,
5662306a36Sopenharmony_ci	CARL9170_CMD_RX_FILTER		= 0x07,
5762306a36Sopenharmony_ci	CARL9170_CMD_WOL		= 0x08,
5862306a36Sopenharmony_ci	CARL9170_CMD_TALLY		= 0x09,
5962306a36Sopenharmony_ci	CARL9170_CMD_WREGB		= 0x0a,
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci	/* CAM */
6262306a36Sopenharmony_ci	CARL9170_CMD_EKEY		= 0x10,
6362306a36Sopenharmony_ci	CARL9170_CMD_DKEY		= 0x11,
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci	/* RF / PHY */
6662306a36Sopenharmony_ci	CARL9170_CMD_FREQUENCY		= 0x20,
6762306a36Sopenharmony_ci	CARL9170_CMD_RF_INIT		= 0x21,
6862306a36Sopenharmony_ci	CARL9170_CMD_SYNTH		= 0x22,
6962306a36Sopenharmony_ci	CARL9170_CMD_FREQ_START		= 0x23,
7062306a36Sopenharmony_ci	CARL9170_CMD_PSM		= 0x24,
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci	/* Asychronous command flag */
7362306a36Sopenharmony_ci	CARL9170_CMD_ASYNC_FLAG		= 0x40,
7462306a36Sopenharmony_ci	CARL9170_CMD_WREG_ASYNC		= (CARL9170_CMD_WREG |
7562306a36Sopenharmony_ci					   CARL9170_CMD_ASYNC_FLAG),
7662306a36Sopenharmony_ci	CARL9170_CMD_REBOOT_ASYNC	= (CARL9170_CMD_REBOOT |
7762306a36Sopenharmony_ci					   CARL9170_CMD_ASYNC_FLAG),
7862306a36Sopenharmony_ci	CARL9170_CMD_BCN_CTRL_ASYNC	= (CARL9170_CMD_BCN_CTRL |
7962306a36Sopenharmony_ci					   CARL9170_CMD_ASYNC_FLAG),
8062306a36Sopenharmony_ci	CARL9170_CMD_PSM_ASYNC		= (CARL9170_CMD_PSM |
8162306a36Sopenharmony_ci					   CARL9170_CMD_ASYNC_FLAG),
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci	/* responses and traps */
8462306a36Sopenharmony_ci	CARL9170_RSP_FLAG		= 0xc0,
8562306a36Sopenharmony_ci	CARL9170_RSP_PRETBTT		= 0xc0,
8662306a36Sopenharmony_ci	CARL9170_RSP_TXCOMP		= 0xc1,
8762306a36Sopenharmony_ci	CARL9170_RSP_BEACON_CONFIG	= 0xc2,
8862306a36Sopenharmony_ci	CARL9170_RSP_ATIM		= 0xc3,
8962306a36Sopenharmony_ci	CARL9170_RSP_WATCHDOG		= 0xc6,
9062306a36Sopenharmony_ci	CARL9170_RSP_TEXT		= 0xca,
9162306a36Sopenharmony_ci	CARL9170_RSP_HEXDUMP		= 0xcc,
9262306a36Sopenharmony_ci	CARL9170_RSP_RADAR		= 0xcd,
9362306a36Sopenharmony_ci	CARL9170_RSP_GPIO		= 0xce,
9462306a36Sopenharmony_ci	CARL9170_RSP_BOOT		= 0xcf,
9562306a36Sopenharmony_ci};
9662306a36Sopenharmony_ci
9762306a36Sopenharmony_cistruct carl9170_set_key_cmd {
9862306a36Sopenharmony_ci	__le16		user;
9962306a36Sopenharmony_ci	__le16		keyId;
10062306a36Sopenharmony_ci	__le16		type;
10162306a36Sopenharmony_ci	u8		macAddr[6];
10262306a36Sopenharmony_ci	u32		key[4];
10362306a36Sopenharmony_ci} __packed __aligned(4);
10462306a36Sopenharmony_ci#define CARL9170_SET_KEY_CMD_SIZE		28
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_cistruct carl9170_disable_key_cmd {
10762306a36Sopenharmony_ci	__le16		user;
10862306a36Sopenharmony_ci	__le16		padding;
10962306a36Sopenharmony_ci} __packed __aligned(4);
11062306a36Sopenharmony_ci#define CARL9170_DISABLE_KEY_CMD_SIZE		4
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_cistruct carl9170_u32_list {
11362306a36Sopenharmony_ci	u32	vals[0];
11462306a36Sopenharmony_ci} __packed;
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_cistruct carl9170_reg_list {
11762306a36Sopenharmony_ci	__le32		regs[0];
11862306a36Sopenharmony_ci} __packed;
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_cistruct carl9170_write_reg {
12162306a36Sopenharmony_ci	DECLARE_FLEX_ARRAY(struct {
12262306a36Sopenharmony_ci		__le32		addr;
12362306a36Sopenharmony_ci		__le32		val;
12462306a36Sopenharmony_ci	} __packed, regs);
12562306a36Sopenharmony_ci} __packed;
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_cistruct carl9170_write_reg_byte {
12862306a36Sopenharmony_ci	__le32	addr;
12962306a36Sopenharmony_ci	__le32  count;
13062306a36Sopenharmony_ci	u8	val[];
13162306a36Sopenharmony_ci} __packed;
13262306a36Sopenharmony_ci
13362306a36Sopenharmony_ci#define	CARL9170FW_PHY_HT_ENABLE		0x4
13462306a36Sopenharmony_ci#define	CARL9170FW_PHY_HT_DYN2040		0x8
13562306a36Sopenharmony_ci#define	CARL9170FW_PHY_HT_EXT_CHAN_OFF		0x3
13662306a36Sopenharmony_ci#define	CARL9170FW_PHY_HT_EXT_CHAN_OFF_S	2
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_cistruct carl9170_rf_init {
13962306a36Sopenharmony_ci	__le32		freq;
14062306a36Sopenharmony_ci	u8		ht_settings;
14162306a36Sopenharmony_ci	u8		padding2[3];
14262306a36Sopenharmony_ci	__le32		delta_slope_coeff_exp;
14362306a36Sopenharmony_ci	__le32		delta_slope_coeff_man;
14462306a36Sopenharmony_ci	__le32		delta_slope_coeff_exp_shgi;
14562306a36Sopenharmony_ci	__le32		delta_slope_coeff_man_shgi;
14662306a36Sopenharmony_ci	__le32		finiteLoopCount;
14762306a36Sopenharmony_ci} __packed;
14862306a36Sopenharmony_ci#define CARL9170_RF_INIT_SIZE		28
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_cistruct carl9170_rf_init_result {
15162306a36Sopenharmony_ci	__le32		ret;		/* AR9170_PHY_REG_AGC_CONTROL */
15262306a36Sopenharmony_ci} __packed;
15362306a36Sopenharmony_ci#define	CARL9170_RF_INIT_RESULT_SIZE	4
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_ci#define	CARL9170_PSM_SLEEP		0x1000
15662306a36Sopenharmony_ci#define	CARL9170_PSM_SOFTWARE		0
15762306a36Sopenharmony_ci#define	CARL9170_PSM_WAKE		0 /* internally used. */
15862306a36Sopenharmony_ci#define	CARL9170_PSM_COUNTER		0xfff
15962306a36Sopenharmony_ci#define	CARL9170_PSM_COUNTER_S		0
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_cistruct carl9170_psm {
16262306a36Sopenharmony_ci	__le32		state;
16362306a36Sopenharmony_ci} __packed;
16462306a36Sopenharmony_ci#define CARL9170_PSM_SIZE		4
16562306a36Sopenharmony_ci
16662306a36Sopenharmony_ci/*
16762306a36Sopenharmony_ci * Note: If a bit in rx_filter is set, then it
16862306a36Sopenharmony_ci * means that the particular frames which matches
16962306a36Sopenharmony_ci * the condition are FILTERED/REMOVED/DISCARDED!
17062306a36Sopenharmony_ci * (This is can be a bit confusing, especially
17162306a36Sopenharmony_ci * because someone people think it's the exact
17262306a36Sopenharmony_ci * opposite way, so watch out!)
17362306a36Sopenharmony_ci */
17462306a36Sopenharmony_cistruct carl9170_rx_filter_cmd {
17562306a36Sopenharmony_ci	__le32		rx_filter;
17662306a36Sopenharmony_ci} __packed;
17762306a36Sopenharmony_ci#define CARL9170_RX_FILTER_CMD_SIZE	4
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci#define CARL9170_RX_FILTER_BAD		0x01
18062306a36Sopenharmony_ci#define CARL9170_RX_FILTER_OTHER_RA	0x02
18162306a36Sopenharmony_ci#define CARL9170_RX_FILTER_DECRY_FAIL	0x04
18262306a36Sopenharmony_ci#define CARL9170_RX_FILTER_CTL_OTHER	0x08
18362306a36Sopenharmony_ci#define CARL9170_RX_FILTER_CTL_PSPOLL	0x10
18462306a36Sopenharmony_ci#define CARL9170_RX_FILTER_CTL_BACKR	0x20
18562306a36Sopenharmony_ci#define CARL9170_RX_FILTER_MGMT		0x40
18662306a36Sopenharmony_ci#define CARL9170_RX_FILTER_DATA		0x80
18762306a36Sopenharmony_ci#define CARL9170_RX_FILTER_EVERYTHING	(~0)
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_cistruct carl9170_bcn_ctrl_cmd {
19062306a36Sopenharmony_ci	__le32		vif_id;
19162306a36Sopenharmony_ci	__le32		mode;
19262306a36Sopenharmony_ci	__le32		bcn_addr;
19362306a36Sopenharmony_ci	__le32		bcn_len;
19462306a36Sopenharmony_ci} __packed;
19562306a36Sopenharmony_ci#define CARL9170_BCN_CTRL_CMD_SIZE	16
19662306a36Sopenharmony_ci
19762306a36Sopenharmony_ci#define CARL9170_BCN_CTRL_DRAIN	0
19862306a36Sopenharmony_ci#define CARL9170_BCN_CTRL_CAB_TRIGGER	1
19962306a36Sopenharmony_ci
20062306a36Sopenharmony_cistruct carl9170_wol_cmd {
20162306a36Sopenharmony_ci	__le32		flags;
20262306a36Sopenharmony_ci	u8		mac[6];
20362306a36Sopenharmony_ci	u8		bssid[6];
20462306a36Sopenharmony_ci	__le32		null_interval;
20562306a36Sopenharmony_ci	__le32		free_for_use2;
20662306a36Sopenharmony_ci	__le32		mask;
20762306a36Sopenharmony_ci	u8		pattern[32];
20862306a36Sopenharmony_ci} __packed;
20962306a36Sopenharmony_ci
21062306a36Sopenharmony_ci#define CARL9170_WOL_CMD_SIZE		60
21162306a36Sopenharmony_ci
21262306a36Sopenharmony_ci#define CARL9170_WOL_DISCONNECT		1
21362306a36Sopenharmony_ci#define CARL9170_WOL_MAGIC_PKT		2
21462306a36Sopenharmony_ci
21562306a36Sopenharmony_cistruct carl9170_cmd_head {
21662306a36Sopenharmony_ci	union {
21762306a36Sopenharmony_ci		struct {
21862306a36Sopenharmony_ci			u8	len;
21962306a36Sopenharmony_ci			u8	cmd;
22062306a36Sopenharmony_ci			u8	seq;
22162306a36Sopenharmony_ci			u8	ext;
22262306a36Sopenharmony_ci		} __packed;
22362306a36Sopenharmony_ci
22462306a36Sopenharmony_ci		u32 hdr_data;
22562306a36Sopenharmony_ci	} __packed;
22662306a36Sopenharmony_ci} __packed;
22762306a36Sopenharmony_ci
22862306a36Sopenharmony_cistruct carl9170_cmd {
22962306a36Sopenharmony_ci	struct carl9170_cmd_head hdr;
23062306a36Sopenharmony_ci	union {
23162306a36Sopenharmony_ci		struct carl9170_set_key_cmd	setkey;
23262306a36Sopenharmony_ci		struct carl9170_disable_key_cmd	disablekey;
23362306a36Sopenharmony_ci		struct carl9170_u32_list	echo;
23462306a36Sopenharmony_ci		struct carl9170_reg_list	rreg;
23562306a36Sopenharmony_ci		struct carl9170_write_reg	wreg;
23662306a36Sopenharmony_ci		struct carl9170_write_reg_byte	wregb;
23762306a36Sopenharmony_ci		struct carl9170_rf_init		rf_init;
23862306a36Sopenharmony_ci		struct carl9170_psm		psm;
23962306a36Sopenharmony_ci		struct carl9170_wol_cmd		wol;
24062306a36Sopenharmony_ci		struct carl9170_bcn_ctrl_cmd	bcn_ctrl;
24162306a36Sopenharmony_ci		struct carl9170_rx_filter_cmd	rx_filter;
24262306a36Sopenharmony_ci		u8 data[CARL9170_MAX_CMD_PAYLOAD_LEN];
24362306a36Sopenharmony_ci	} __packed __aligned(4);
24462306a36Sopenharmony_ci} __packed __aligned(4);
24562306a36Sopenharmony_ci
24662306a36Sopenharmony_ci#define	CARL9170_TX_STATUS_QUEUE	3
24762306a36Sopenharmony_ci#define	CARL9170_TX_STATUS_QUEUE_S	0
24862306a36Sopenharmony_ci#define	CARL9170_TX_STATUS_RIX_S	2
24962306a36Sopenharmony_ci#define	CARL9170_TX_STATUS_RIX		(3 << CARL9170_TX_STATUS_RIX_S)
25062306a36Sopenharmony_ci#define	CARL9170_TX_STATUS_TRIES_S	4
25162306a36Sopenharmony_ci#define	CARL9170_TX_STATUS_TRIES	(7 << CARL9170_TX_STATUS_TRIES_S)
25262306a36Sopenharmony_ci#define	CARL9170_TX_STATUS_SUCCESS	0x80
25362306a36Sopenharmony_ci
25462306a36Sopenharmony_ci#ifdef __CARL9170FW__
25562306a36Sopenharmony_ci/*
25662306a36Sopenharmony_ci * NOTE:
25762306a36Sopenharmony_ci * Both structs [carl9170_tx_status and _carl9170_tx_status]
25862306a36Sopenharmony_ci * need to be "bit for bit" in sync.
25962306a36Sopenharmony_ci */
26062306a36Sopenharmony_cistruct carl9170_tx_status {
26162306a36Sopenharmony_ci	/*
26262306a36Sopenharmony_ci	 * Beware of compiler bugs in all gcc pre 4.4!
26362306a36Sopenharmony_ci	 */
26462306a36Sopenharmony_ci
26562306a36Sopenharmony_ci	u8 cookie;
26662306a36Sopenharmony_ci	u8 queue:2;
26762306a36Sopenharmony_ci	u8 rix:2;
26862306a36Sopenharmony_ci	u8 tries:3;
26962306a36Sopenharmony_ci	u8 success:1;
27062306a36Sopenharmony_ci} __packed;
27162306a36Sopenharmony_ci#endif /* __CARL9170FW__ */
27262306a36Sopenharmony_ci
27362306a36Sopenharmony_cistruct _carl9170_tx_status {
27462306a36Sopenharmony_ci	/*
27562306a36Sopenharmony_ci	 * This version should be immune to all alignment bugs.
27662306a36Sopenharmony_ci	 */
27762306a36Sopenharmony_ci
27862306a36Sopenharmony_ci	u8 cookie;
27962306a36Sopenharmony_ci	u8 info;
28062306a36Sopenharmony_ci} __packed;
28162306a36Sopenharmony_ci#define CARL9170_TX_STATUS_SIZE		2
28262306a36Sopenharmony_ci
28362306a36Sopenharmony_ci#define	CARL9170_RSP_TX_STATUS_NUM	(CARL9170_MAX_CMD_PAYLOAD_LEN /	\
28462306a36Sopenharmony_ci					 sizeof(struct _carl9170_tx_status))
28562306a36Sopenharmony_ci
28662306a36Sopenharmony_ci#define	CARL9170_TX_MAX_RATE_TRIES	7
28762306a36Sopenharmony_ci
28862306a36Sopenharmony_ci#define	CARL9170_TX_MAX_RATES		4
28962306a36Sopenharmony_ci#define	CARL9170_TX_MAX_RETRY_RATES	(CARL9170_TX_MAX_RATES - 1)
29062306a36Sopenharmony_ci#define	CARL9170_ERR_MAGIC		"ERR:"
29162306a36Sopenharmony_ci#define	CARL9170_BUG_MAGIC		"BUG:"
29262306a36Sopenharmony_ci
29362306a36Sopenharmony_cistruct carl9170_gpio {
29462306a36Sopenharmony_ci	__le32 gpio;
29562306a36Sopenharmony_ci} __packed;
29662306a36Sopenharmony_ci#define CARL9170_GPIO_SIZE		4
29762306a36Sopenharmony_ci
29862306a36Sopenharmony_cistruct carl9170_tsf_rsp {
29962306a36Sopenharmony_ci	union {
30062306a36Sopenharmony_ci		__le32 tsf[2];
30162306a36Sopenharmony_ci		__le64 tsf_64;
30262306a36Sopenharmony_ci	} __packed;
30362306a36Sopenharmony_ci} __packed;
30462306a36Sopenharmony_ci#define CARL9170_TSF_RSP_SIZE		8
30562306a36Sopenharmony_ci
30662306a36Sopenharmony_cistruct carl9170_tally_rsp {
30762306a36Sopenharmony_ci	__le32 active;
30862306a36Sopenharmony_ci	__le32 cca;
30962306a36Sopenharmony_ci	__le32 tx_time;
31062306a36Sopenharmony_ci	__le32 rx_total;
31162306a36Sopenharmony_ci	__le32 rx_overrun;
31262306a36Sopenharmony_ci	__le32 tick;
31362306a36Sopenharmony_ci} __packed;
31462306a36Sopenharmony_ci
31562306a36Sopenharmony_cistruct carl9170_rsp {
31662306a36Sopenharmony_ci	struct carl9170_cmd_head hdr;
31762306a36Sopenharmony_ci
31862306a36Sopenharmony_ci	union {
31962306a36Sopenharmony_ci		struct carl9170_rf_init_result	rf_init_res;
32062306a36Sopenharmony_ci		struct carl9170_u32_list	rreg_res;
32162306a36Sopenharmony_ci		struct carl9170_u32_list	echo;
32262306a36Sopenharmony_ci#ifdef __CARL9170FW__
32362306a36Sopenharmony_ci		DECLARE_FLEX_ARRAY(struct carl9170_tx_status, tx_status);
32462306a36Sopenharmony_ci#endif /* __CARL9170FW__ */
32562306a36Sopenharmony_ci		DECLARE_FLEX_ARRAY(struct _carl9170_tx_status, _tx_status);
32662306a36Sopenharmony_ci		struct carl9170_gpio		gpio;
32762306a36Sopenharmony_ci		struct carl9170_tsf_rsp		tsf;
32862306a36Sopenharmony_ci		struct carl9170_psm		psm;
32962306a36Sopenharmony_ci		struct carl9170_tally_rsp	tally;
33062306a36Sopenharmony_ci		u8 data[CARL9170_MAX_CMD_PAYLOAD_LEN];
33162306a36Sopenharmony_ci	} __packed;
33262306a36Sopenharmony_ci} __packed __aligned(4);
33362306a36Sopenharmony_ci
33462306a36Sopenharmony_ci#endif /* __CARL9170_SHARED_FWCMD_H */
335