root/drivers/misc/habanalabs/include/goya/goya_packets.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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 
  16 enum 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 enum goya_dma_direction {
  32         DMA_HOST_TO_DRAM,
  33         DMA_HOST_TO_SRAM,
  34         DMA_DRAM_TO_SRAM,
  35         DMA_SRAM_TO_DRAM,
  36         DMA_SRAM_TO_HOST,
  37         DMA_DRAM_TO_HOST,
  38         DMA_DRAM_TO_DRAM,
  39         DMA_SRAM_TO_SRAM,
  40         DMA_ENUM_MAX
  41 };
  42 
  43 #define GOYA_PKT_CTL_OPCODE_SHIFT       24
  44 #define GOYA_PKT_CTL_OPCODE_MASK        0x1F000000
  45 
  46 #define GOYA_PKT_CTL_EB_SHIFT           29
  47 #define GOYA_PKT_CTL_EB_MASK            0x20000000
  48 
  49 #define GOYA_PKT_CTL_RB_SHIFT           30
  50 #define GOYA_PKT_CTL_RB_MASK            0x40000000
  51 
  52 #define GOYA_PKT_CTL_MB_SHIFT           31
  53 #define GOYA_PKT_CTL_MB_MASK            0x80000000
  54 
  55 /* All packets have, at least, an 8-byte header, which contains
  56  * the packet type. The kernel driver uses the packet header for packet
  57  * validation and to perform any necessary required preparation before
  58  * sending them off to the hardware.
  59  */
  60 struct goya_packet {
  61         __le64 header;
  62         /* The rest of the packet data follows. Use the corresponding
  63          * packet_XXX struct to deference the data, based on packet type
  64          */
  65         u8 contents[0];
  66 };
  67 
  68 struct packet_nop {
  69         __le32 reserved;
  70         __le32 ctl;
  71 };
  72 
  73 struct packet_stop {
  74         __le32 reserved;
  75         __le32 ctl;
  76 };
  77 
  78 #define GOYA_PKT_WREG32_CTL_REG_OFFSET_SHIFT    0
  79 #define GOYA_PKT_WREG32_CTL_REG_OFFSET_MASK     0x0000FFFF
  80 
  81 struct packet_wreg32 {
  82         __le32 value;
  83         __le32 ctl;
  84 };
  85 
  86 struct packet_wreg_bulk {
  87         __le32 size64;
  88         __le32 ctl;
  89         __le64 values[0]; /* data starts here */
  90 };
  91 
  92 struct packet_msg_long {
  93         __le32 value;
  94         __le32 ctl;
  95         __le64 addr;
  96 };
  97 
  98 struct packet_msg_short {
  99         __le32 value;
 100         __le32 ctl;
 101 };
 102 
 103 struct packet_msg_prot {
 104         __le32 value;
 105         __le32 ctl;
 106         __le64 addr;
 107 };
 108 
 109 struct packet_fence {
 110         __le32 cfg;
 111         __le32 ctl;
 112 };
 113 
 114 #define GOYA_PKT_LIN_DMA_CTL_WO_SHIFT           0
 115 #define GOYA_PKT_LIN_DMA_CTL_WO_MASK            0x00000001
 116 
 117 #define GOYA_PKT_LIN_DMA_CTL_RDCOMP_SHIFT       1
 118 #define GOYA_PKT_LIN_DMA_CTL_RDCOMP_MASK        0x00000002
 119 
 120 #define GOYA_PKT_LIN_DMA_CTL_WRCOMP_SHIFT       2
 121 #define GOYA_PKT_LIN_DMA_CTL_WRCOMP_MASK        0x00000004
 122 
 123 #define GOYA_PKT_LIN_DMA_CTL_MEMSET_SHIFT       6
 124 #define GOYA_PKT_LIN_DMA_CTL_MEMSET_MASK        0x00000040
 125 
 126 #define GOYA_PKT_LIN_DMA_CTL_DMA_DIR_SHIFT      20
 127 #define GOYA_PKT_LIN_DMA_CTL_DMA_DIR_MASK       0x00700000
 128 
 129 struct packet_lin_dma {
 130         __le32 tsize;
 131         __le32 ctl;
 132         __le64 src_addr;
 133         __le64 dst_addr;
 134 };
 135 
 136 struct packet_cp_dma {
 137         __le32 tsize;
 138         __le32 ctl;
 139         __le64 src_addr;
 140 };
 141 
 142 #endif /* GOYA_PACKETS_H */

/* [<][>][^][v][top][bottom][index][help] */