Path: blob/master/drivers/accel/habanalabs/include/goya/goya_packets.h
26393 views
/* SPDX-License-Identifier: GPL-2.01*2* Copyright 2017-2018 HabanaLabs, Ltd.3* All Rights Reserved.4*5*/67#ifndef GOYA_PACKETS_H8#define GOYA_PACKETS_H910#include <linux/types.h>1112#define PACKET_HEADER_PACKET_ID_SHIFT 5613#define PACKET_HEADER_PACKET_ID_MASK 0x1F00000000000000ull1415enum packet_id {16PACKET_WREG_32 = 0x1,17PACKET_WREG_BULK = 0x2,18PACKET_MSG_LONG = 0x3,19PACKET_MSG_SHORT = 0x4,20PACKET_CP_DMA = 0x5,21PACKET_MSG_PROT = 0x7,22PACKET_FENCE = 0x8,23PACKET_LIN_DMA = 0x9,24PACKET_NOP = 0xA,25PACKET_STOP = 0xB,26MAX_PACKET_ID = (PACKET_HEADER_PACKET_ID_MASK >>27PACKET_HEADER_PACKET_ID_SHIFT) + 128};2930#define GOYA_PKT_CTL_OPCODE_SHIFT 2431#define GOYA_PKT_CTL_OPCODE_MASK 0x1F0000003233#define GOYA_PKT_CTL_EB_SHIFT 2934#define GOYA_PKT_CTL_EB_MASK 0x200000003536#define GOYA_PKT_CTL_RB_SHIFT 3037#define GOYA_PKT_CTL_RB_MASK 0x400000003839#define GOYA_PKT_CTL_MB_SHIFT 3140#define GOYA_PKT_CTL_MB_MASK 0x800000004142/* All packets have, at least, an 8-byte header, which contains43* the packet type. The kernel driver uses the packet header for packet44* validation and to perform any necessary required preparation before45* sending them off to the hardware.46*/47struct goya_packet {48__le64 header;49/* The rest of the packet data follows. Use the corresponding50* packet_XXX struct to deference the data, based on packet type51*/52u8 contents[];53};5455struct packet_nop {56__le32 reserved;57__le32 ctl;58};5960struct packet_stop {61__le32 reserved;62__le32 ctl;63};6465#define GOYA_PKT_WREG32_CTL_REG_OFFSET_SHIFT 066#define GOYA_PKT_WREG32_CTL_REG_OFFSET_MASK 0x0000FFFF6768struct packet_wreg32 {69__le32 value;70__le32 ctl;71};7273struct packet_wreg_bulk {74__le32 size64;75__le32 ctl;76__le64 values[]; /* data starts here */77};7879struct packet_msg_long {80__le32 value;81__le32 ctl;82__le64 addr;83};8485struct packet_msg_short {86__le32 value;87__le32 ctl;88};8990struct packet_msg_prot {91__le32 value;92__le32 ctl;93__le64 addr;94};9596struct packet_fence {97__le32 cfg;98__le32 ctl;99};100101#define GOYA_PKT_LIN_DMA_CTL_WO_SHIFT 0102#define GOYA_PKT_LIN_DMA_CTL_WO_MASK 0x00000001103104#define GOYA_PKT_LIN_DMA_CTL_RDCOMP_SHIFT 1105#define GOYA_PKT_LIN_DMA_CTL_RDCOMP_MASK 0x00000002106107#define GOYA_PKT_LIN_DMA_CTL_WRCOMP_SHIFT 2108#define GOYA_PKT_LIN_DMA_CTL_WRCOMP_MASK 0x00000004109110#define GOYA_PKT_LIN_DMA_CTL_MEMSET_SHIFT 6111#define GOYA_PKT_LIN_DMA_CTL_MEMSET_MASK 0x00000040112113#define GOYA_PKT_LIN_DMA_CTL_DMA_DIR_SHIFT 20114#define GOYA_PKT_LIN_DMA_CTL_DMA_DIR_MASK 0x00700000115116struct packet_lin_dma {117__le32 tsize;118__le32 ctl;119__le64 src_addr;120__le64 dst_addr;121};122123struct packet_cp_dma {124__le32 tsize;125__le32 ctl;126__le64 src_addr;127};128129#endif /* GOYA_PACKETS_H */130131132