/*
 * Copyright (c) 2024, Arm Limited. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 *
 */

/*
 * Packing scheme of the control parameter
 *
 *  31           30-28   27    26-24  23-20   19     18-16   15-0
 * +------------+-----+------+-------+-----+-------+-------+------+
 * |            |     |      | invec |     |       | outvec| type |
 * | Res        | Res | Res  | number| Res | Res   | number|      |
 * +------------+-----+------+-------+-----+-------+-------+------+
 *
 * Res: Reserved.
 */

#ifndef RSS_COMMS_PROTOCOL_COMMON
#define RSS_COMMS_PROTOCOL_COMMON

#define TYPE_OFFSET	(0U)
#define TYPE_MASK	(0xFFFFUL << TYPE_OFFSET)
#define IN_LEN_OFFSET	(24U)
#define IN_LEN_MASK	(0x7UL << IN_LEN_OFFSET)
#define OUT_LEN_OFFSET	(16U)
#define OUT_LEN_MASK	(0x7UL << OUT_LEN_OFFSET)

#define PARAM_PACK(type, in_len, out_len)			   \
	(((((uint32_t)(type)) << TYPE_OFFSET) & TYPE_MASK)	 | \
	 ((((uint32_t)(in_len)) << IN_LEN_OFFSET) & IN_LEN_MASK) | \
	 ((((uint32_t)(out_len)) << OUT_LEN_OFFSET) & OUT_LEN_MASK))

#endif /* RSS_COMMS_PROTOCOL_COMMON */
