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

#ifndef GAUDI_PACKETS_H
#define GAUDI_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_LOAD_AND_EXE = 0xF,
	MAX_PACKET_ID = (PACKET_HEADER_PACKET_ID_MASK >>
				PACKET_HEADER_PACKET_ID_SHIFT) + 1
};

#define GAUDI_PKT_CTL_OPCODE_SHIFT	24
#define GAUDI_PKT_CTL_OPCODE_MASK	0x1F000000

#define GAUDI_PKT_CTL_EB_SHIFT		29
#define GAUDI_PKT_CTL_EB_MASK		0x20000000

#define GAUDI_PKT_CTL_RB_SHIFT		30
#define GAUDI_PKT_CTL_RB_MASK		0x40000000

#define GAUDI_PKT_CTL_MB_SHIFT		31
#define GAUDI_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 gaudi_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[];
};

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[]; /* data starts here */
};

#define GAUDI_PKT_LONG_CTL_OP_SHIFT		20
#define GAUDI_PKT_LONG_CTL_OP_MASK		0x00300000

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

#define GAUDI_PKT_SHORT_VAL_SOB_SYNC_VAL_SHIFT	0
#define GAUDI_PKT_SHORT_VAL_SOB_SYNC_VAL_MASK	0x00007FFF

#define GAUDI_PKT_SHORT_VAL_SOB_MOD_SHIFT	31
#define GAUDI_PKT_SHORT_VAL_SOB_MOD_MASK	0x80000000

#define GAUDI_PKT_SHORT_VAL_MON_SYNC_GID_SHIFT	0
#define GAUDI_PKT_SHORT_VAL_MON_SYNC_GID_MASK	0x000000FF

#define GAUDI_PKT_SHORT_VAL_MON_MASK_SHIFT	8
#define GAUDI_PKT_SHORT_VAL_MON_MASK_MASK	0x0000FF00

#define GAUDI_PKT_SHORT_VAL_MON_MODE_SHIFT	16
#define GAUDI_PKT_SHORT_VAL_MON_MODE_MASK	0x00010000

#define GAUDI_PKT_SHORT_VAL_MON_SYNC_VAL_SHIFT	17
#define GAUDI_PKT_SHORT_VAL_MON_SYNC_VAL_MASK	0xFFFE0000

#define GAUDI_PKT_SHORT_CTL_ADDR_SHIFT		0
#define GAUDI_PKT_SHORT_CTL_ADDR_MASK		0x0000FFFF

#define GAUDI_PKT_SHORT_CTL_OP_SHIFT		20
#define GAUDI_PKT_SHORT_CTL_OP_MASK		0x00300000

#define GAUDI_PKT_SHORT_CTL_BASE_SHIFT		22
#define GAUDI_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 GAUDI_PKT_FENCE_CFG_DEC_VAL_SHIFT	0
#define GAUDI_PKT_FENCE_CFG_DEC_VAL_MASK	0x0000000F

#define GAUDI_PKT_FENCE_CFG_TARGET_VAL_SHIFT	16
#define GAUDI_PKT_FENCE_CFG_TARGET_VAL_MASK	0x00FF0000

#define GAUDI_PKT_FENCE_CFG_ID_SHIFT		30
#define GAUDI_PKT_FENCE_CFG_ID_MASK		0xC0000000

#define GAUDI_PKT_FENCE_CTL_PRED_SHIFT		0
#define GAUDI_PKT_FENCE_CTL_PRED_MASK		0x0000001F

struct packet_fence {
	__le32 cfg;
	__le32 ctl;
};

#define GAUDI_PKT_LIN_DMA_CTL_WRCOMP_EN_SHIFT	0
#define GAUDI_PKT_LIN_DMA_CTL_WRCOMP_EN_MASK	0x00000001

#define GAUDI_PKT_LIN_DMA_CTL_LIN_SHIFT		3
#define GAUDI_PKT_LIN_DMA_CTL_LIN_MASK		0x00000008

#define GAUDI_PKT_LIN_DMA_CTL_MEMSET_SHIFT	4
#define GAUDI_PKT_LIN_DMA_CTL_MEMSET_MASK	0x00000010

#define GAUDI_PKT_LIN_DMA_DST_ADDR_SHIFT	0
#define GAUDI_PKT_LIN_DMA_DST_ADDR_MASK		0x00FFFFFFFFFFFFFFull

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;
};

#define GAUDI_PKT_LOAD_AND_EXE_CFG_DST_SHIFT	0
#define GAUDI_PKT_LOAD_AND_EXE_CFG_DST_MASK	0x00000001

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

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

#endif /* GAUDI_PACKETS_H */
