brintos

brintos / linux-shallow public Read only

0
0
Text · 2.6 KiB · 8967992 Raw
131 lines · c
1/* SPDX-License-Identifier: GPL-2.02 *3 * Copyright 2017-2018 HabanaLabs, Ltd.4 * All Rights Reserved.5 *6 */7 8#ifndef GOYA_PACKETS_H9#define GOYA_PACKETS_H10 11#include <linux/types.h>12 13#define PACKET_HEADER_PACKET_ID_SHIFT		5614#define PACKET_HEADER_PACKET_ID_MASK		0x1F00000000000000ull15 16enum packet_id {17	PACKET_WREG_32 = 0x1,18	PACKET_WREG_BULK = 0x2,19	PACKET_MSG_LONG = 0x3,20	PACKET_MSG_SHORT = 0x4,21	PACKET_CP_DMA = 0x5,22	PACKET_MSG_PROT = 0x7,23	PACKET_FENCE = 0x8,24	PACKET_LIN_DMA = 0x9,25	PACKET_NOP = 0xA,26	PACKET_STOP = 0xB,27	MAX_PACKET_ID = (PACKET_HEADER_PACKET_ID_MASK >>28				PACKET_HEADER_PACKET_ID_SHIFT) + 129};30 31#define GOYA_PKT_CTL_OPCODE_SHIFT	2432#define GOYA_PKT_CTL_OPCODE_MASK	0x1F00000033 34#define GOYA_PKT_CTL_EB_SHIFT		2935#define GOYA_PKT_CTL_EB_MASK		0x2000000036 37#define GOYA_PKT_CTL_RB_SHIFT		3038#define GOYA_PKT_CTL_RB_MASK		0x4000000039 40#define GOYA_PKT_CTL_MB_SHIFT		3141#define GOYA_PKT_CTL_MB_MASK		0x8000000042 43/* All packets have, at least, an 8-byte header, which contains44 * the packet type. The kernel driver uses the packet header for packet45 * validation and to perform any necessary required preparation before46 * sending them off to the hardware.47 */48struct goya_packet {49	__le64 header;50	/* The rest of the packet data follows. Use the corresponding51	 * packet_XXX struct to deference the data, based on packet type52	 */53	u8 contents[];54};55 56struct packet_nop {57	__le32 reserved;58	__le32 ctl;59};60 61struct packet_stop {62	__le32 reserved;63	__le32 ctl;64};65 66#define GOYA_PKT_WREG32_CTL_REG_OFFSET_SHIFT	067#define GOYA_PKT_WREG32_CTL_REG_OFFSET_MASK	0x0000FFFF68 69struct packet_wreg32 {70	__le32 value;71	__le32 ctl;72};73 74struct packet_wreg_bulk {75	__le32 size64;76	__le32 ctl;77	__le64 values[]; /* data starts here */78};79 80struct packet_msg_long {81	__le32 value;82	__le32 ctl;83	__le64 addr;84};85 86struct packet_msg_short {87	__le32 value;88	__le32 ctl;89};90 91struct packet_msg_prot {92	__le32 value;93	__le32 ctl;94	__le64 addr;95};96 97struct packet_fence {98	__le32 cfg;99	__le32 ctl;100};101 102#define GOYA_PKT_LIN_DMA_CTL_WO_SHIFT		0103#define GOYA_PKT_LIN_DMA_CTL_WO_MASK		0x00000001104 105#define GOYA_PKT_LIN_DMA_CTL_RDCOMP_SHIFT	1106#define GOYA_PKT_LIN_DMA_CTL_RDCOMP_MASK	0x00000002107 108#define GOYA_PKT_LIN_DMA_CTL_WRCOMP_SHIFT	2109#define GOYA_PKT_LIN_DMA_CTL_WRCOMP_MASK	0x00000004110 111#define GOYA_PKT_LIN_DMA_CTL_MEMSET_SHIFT	6112#define GOYA_PKT_LIN_DMA_CTL_MEMSET_MASK	0x00000040113 114#define GOYA_PKT_LIN_DMA_CTL_DMA_DIR_SHIFT	20115#define GOYA_PKT_LIN_DMA_CTL_DMA_DIR_MASK	0x00700000116 117struct packet_lin_dma {118	__le32 tsize;119	__le32 ctl;120	__le64 src_addr;121	__le64 dst_addr;122};123 124struct packet_cp_dma {125	__le32 tsize;126	__le32 ctl;127	__le64 src_addr;128};129 130#endif /* GOYA_PACKETS_H */131