/* SPDX-License-Identifier: GPL-2.0
 *
 * Copyright 2020 HabanaLabs, Ltd.
 * All Rights Reserved.
 *
 */

#ifndef GAUDI2_PACKETS_H
#define GAUDI2_PACKETS_H

#include <linux/types.h>

#define PACKET_HEADER_PACKET_ID_SHIFT		56
#define PACKET_HEADER_PACKET_ID_MASK		0x1F00000000000000ull

enum packet_id {
	PACKET_WREG_32 = 0x1,
	PACKET_WREG_BULK = 0x2,
	PACKET_MSG_LONG = 0x3,
	PACKET_MSG_SHORT = 0x4,
	PACKET_CP_DMA = 0x5,
	PACKET_REPEAT = 0x6,
	PACKET_MSG_PROT = 0x7,
	PACKET_FENCE = 0x8,
	PACKET_LIN_DMA = 0x9,
	PACKET_NOP = 0xA,
	PACKET_STOP = 0xB,
	PACKET_ARB_POINT = 0xC,
	PACKET_WAIT = 0xD,
	PACKET_CB_LIST = 0xE,
	PACKET_LOAD_AND_EXE = 0xF,
	PACKET_WRITE_ARC_STREAM = 0x10,
	PACKET_LAST_READ_FROM_ARC = 0x11,
	PACKET_WREG_64_SHORT = 0x12,
	PACKET_WREG_64_LONG = 0x13,
	MAX_PACKET_ID = (PACKET_HEADER_PACKET_ID_MASK >>
				PACKET_HEADER_PACKET_ID_SHIFT) + 1
};

#define GAUDI2_PKT_CTL_OPCODE_SHIFT	24
#define GAUDI2_PKT_CTL_OPCODE_MASK	0x1F000000

#define GAUDI2_PKT_CTL_EB_SHIFT		29
#define GAUDI2_PKT_CTL_EB_MASK		0x20000000

#define GAUDI2_PKT_CTL_RB_SHIFT		30
#define GAUDI2_PKT_CTL_RB_MASK		0x40000000

#define GAUDI2_PKT_CTL_MB_SHIFT		31
#define GAUDI2_PKT_CTL_MB_MASK		0x80000000

/* All packets have, at least, an 8-byte header, which contains
 * the packet type. The kernel driver uses the packet header for packet
 * validation and to perform any necessary required preparation before
 * sending them off to the hardware.
 */
struct gaudi2_packet {
	__le64 header;
	/* The rest of the packet data follows. Use the corresponding
	 * packet_XXX struct to deference the data, based on packet type
	 */
	u8 contents[0];
};

struct packet_nop {
	__le32 reserved;
	__le32 ctl;
};

struct packet_stop {
	__le32 reserved;
	__le32 ctl;
};

struct packet_wreg32 {
	__le32 value;
	__le32 ctl;
};

struct packet_wreg_bulk {
	__le32 size64;
	__le32 ctl;
	__le64 values[0]; /* data starts here */
};

struct packet_msg_long {
	__le32 value;
	__le32 ctl;
	__le64 addr;
};

#define GAUDI2_PKT_SHORT_VAL_SOB_SYNC_VAL_SHIFT	0
#define GAUDI2_PKT_SHORT_VAL_SOB_SYNC_VAL_MASK	0x00007FFF

#define GAUDI2_PKT_SHORT_VAL_SOB_MOD_SHIFT	31
#define GAUDI2_PKT_SHORT_VAL_SOB_MOD_MASK	0x80000000

#define GAUDI2_PKT_SHORT_VAL_MON_SYNC_GID_SHIFT	0
#define GAUDI2_PKT_SHORT_VAL_MON_SYNC_GID_MASK	0x000000FF

#define GAUDI2_PKT_SHORT_VAL_MON_MASK_SHIFT	8
#define GAUDI2_PKT_SHORT_VAL_MON_MASK_MASK	0x0000FF00

#define GAUDI2_PKT_SHORT_VAL_MON_MODE_SHIFT	16
#define GAUDI2_PKT_SHORT_VAL_MON_MODE_MASK	0x00010000

#define GAUDI2_PKT_SHORT_VAL_MON_SYNC_VAL_SHIFT	17
#define GAUDI2_PKT_SHORT_VAL_MON_SYNC_VAL_MASK	0xFFFE0000

#define GAUDI2_PKT_SHORT_CTL_ADDR_SHIFT		0
#define GAUDI2_PKT_SHORT_CTL_ADDR_MASK		0x0000FFFF

#define GAUDI2_PKT_SHORT_CTL_BASE_SHIFT		22
#define GAUDI2_PKT_SHORT_CTL_BASE_MASK		0x00C00000

struct packet_msg_short {
	__le32 value;
	__le32 ctl;
};

struct packet_msg_prot {
	__le32 value;
	__le32 ctl;
	__le64 addr;
};

#define GAUDI2_PKT_FENCE_CFG_DEC_VAL_SHIFT	0
#define GAUDI2_PKT_FENCE_CFG_DEC_VAL_MASK	0x0000000F

#define GAUDI2_PKT_FENCE_CFG_TARGET_VAL_SHIFT	16
#define GAUDI2_PKT_FENCE_CFG_TARGET_VAL_MASK	0x00FF0000

#define GAUDI2_PKT_FENCE_CFG_ID_SHIFT		30
#define GAUDI2_PKT_FENCE_CFG_ID_MASK		0xC0000000

#define GAUDI2_PKT_FENCE_CTL_PRED_SHIFT		0
#define GAUDI2_PKT_FENCE_CTL_PRED_MASK		0x0000001F

struct packet_fence {
	__le32 cfg;
	__le32 ctl;
};

#define GAUDI2_PKT_LIN_DMA_CTL_WRCOMP_SHIFT	0
#define GAUDI2_PKT_LIN_DMA_CTL_WRCOMP_MASK	0x00000001

#define GAUDI2_PKT_LIN_DMA_CTL_ENDIAN_SHIFT	1
#define GAUDI2_PKT_LIN_DMA_CTL_ENDIAN_MASK	0x00000006

#define GAUDI2_PKT_LIN_DMA_CTL_MEMSET_SHIFT	4
#define GAUDI2_PKT_LIN_DMA_CTL_MEMSET_MASK	0x00000010

#define GAUDI2_PKT_LIN_DMA_CTL_CONTEXT_ID_SHIFT	8
#define GAUDI2_PKT_LIN_DMA_CTL_CONTEXT_ID_MASK	0x00FFFF00

struct packet_lin_dma {
	__le32 tsize;
	__le32 ctl;
	__le64 src_addr;
	__le64 dst_addr;
};

struct packet_arb_point {
	__le32 cfg;
	__le32 ctl;
};

struct packet_repeat {
	__le32 cfg;
	__le32 ctl;
};

struct packet_wait {
	__le32 cfg;
	__le32 ctl;
};

struct packet_cb_list {
	__le32 reserved;
	__le32 ctl;
	__le64 index_addr;
	__le64 table_addr;
};

struct packet_load_and_exe {
	__le32 cfg;
	__le32 ctl;
	__le64 src_addr;
};

struct packet_cp_dma {
	__le32 tsize;
	__le32 ctl;
	__le64 src_addr;
};

#endif /* GAUDI2_PACKETS_H */
