File Index
Files and directories
Sign in
FILE

goya_packets.h

File preview with syntax highlighting.

linux-6.19.14/drivers/accel/habanalabs/include/goya/goya_packets.h C
  1/* SPDX-License-Identifier: GPL-2.0
  2 *
  3 * Copyright 2017-2018 HabanaLabs, Ltd.
  4 * All Rights Reserved.
  5 *
  6 */
  7
  8#ifndef GOYA_PACKETS_H
  9#define GOYA_PACKETS_H
 10
 11#include <linux/types.h>
 12
 13#define PACKET_HEADER_PACKET_ID_SHIFT		56
 14#define PACKET_HEADER_PACKET_ID_MASK		0x1F00000000000000ull
 15
 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) + 1
 29};
 30
 31#define GOYA_PKT_CTL_OPCODE_SHIFT	24
 32#define GOYA_PKT_CTL_OPCODE_MASK	0x1F000000
 33
 34#define GOYA_PKT_CTL_EB_SHIFT		29
 35#define GOYA_PKT_CTL_EB_MASK		0x20000000
 36
 37#define GOYA_PKT_CTL_RB_SHIFT		30
 38#define GOYA_PKT_CTL_RB_MASK		0x40000000
 39
 40#define GOYA_PKT_CTL_MB_SHIFT		31
 41#define GOYA_PKT_CTL_MB_MASK		0x80000000
 42
 43/* All packets have, at least, an 8-byte header, which contains
 44 * the packet type. The kernel driver uses the packet header for packet
 45 * validation and to perform any necessary required preparation before
 46 * sending them off to the hardware.
 47 */
 48struct goya_packet {
 49	__le64 header;
 50	/* The rest of the packet data follows. Use the corresponding
 51	 * packet_XXX struct to deference the data, based on packet type
 52	 */
 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	0
 67#define GOYA_PKT_WREG32_CTL_REG_OFFSET_MASK	0x0000FFFF
 68
 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		0
103#define GOYA_PKT_LIN_DMA_CTL_WO_MASK		0x00000001
104
105#define GOYA_PKT_LIN_DMA_CTL_RDCOMP_SHIFT	1
106#define GOYA_PKT_LIN_DMA_CTL_RDCOMP_MASK	0x00000002
107
108#define GOYA_PKT_LIN_DMA_CTL_WRCOMP_SHIFT	2
109#define GOYA_PKT_LIN_DMA_CTL_WRCOMP_MASK	0x00000004
110
111#define GOYA_PKT_LIN_DMA_CTL_MEMSET_SHIFT	6
112#define GOYA_PKT_LIN_DMA_CTL_MEMSET_MASK	0x00000040
113
114#define GOYA_PKT_LIN_DMA_CTL_DMA_DIR_SHIFT	20
115#define GOYA_PKT_LIN_DMA_CTL_DMA_DIR_MASK	0x00700000
116
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 */
~/ Read-only file preview.