xref: /openbmc/linux/drivers/accel/habanalabs/include/common/qman_if.h (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
1*e65e175bSOded Gabbay /* SPDX-License-Identifier: GPL-2.0
2*e65e175bSOded Gabbay  *
3*e65e175bSOded Gabbay  * Copyright 2016-2018 HabanaLabs, Ltd.
4*e65e175bSOded Gabbay  * All Rights Reserved.
5*e65e175bSOded Gabbay  *
6*e65e175bSOded Gabbay  */
7*e65e175bSOded Gabbay 
8*e65e175bSOded Gabbay #ifndef QMAN_IF_H
9*e65e175bSOded Gabbay #define QMAN_IF_H
10*e65e175bSOded Gabbay 
11*e65e175bSOded Gabbay #include <linux/types.h>
12*e65e175bSOded Gabbay 
13*e65e175bSOded Gabbay /*
14*e65e175bSOded Gabbay  * PRIMARY QUEUE
15*e65e175bSOded Gabbay  */
16*e65e175bSOded Gabbay 
17*e65e175bSOded Gabbay struct hl_bd {
18*e65e175bSOded Gabbay 	__le64	ptr;
19*e65e175bSOded Gabbay 	__le32	len;
20*e65e175bSOded Gabbay 	__le32	ctl;
21*e65e175bSOded Gabbay };
22*e65e175bSOded Gabbay 
23*e65e175bSOded Gabbay #define HL_BD_SIZE			sizeof(struct hl_bd)
24*e65e175bSOded Gabbay 
25*e65e175bSOded Gabbay /*
26*e65e175bSOded Gabbay  * S/W CTL FIELDS.
27*e65e175bSOded Gabbay  *
28*e65e175bSOded Gabbay  * BD_CTL_REPEAT_VALID tells the CP whether the repeat field in the BD CTL is
29*e65e175bSOded Gabbay  * valid. 1 means the repeat field is valid, 0 means not-valid,
30*e65e175bSOded Gabbay  * i.e. repeat == 1
31*e65e175bSOded Gabbay  */
32*e65e175bSOded Gabbay #define BD_CTL_REPEAT_VALID_SHIFT	24
33*e65e175bSOded Gabbay #define BD_CTL_REPEAT_VALID_MASK	0x01000000
34*e65e175bSOded Gabbay 
35*e65e175bSOded Gabbay #define BD_CTL_SHADOW_INDEX_SHIFT	0
36*e65e175bSOded Gabbay #define BD_CTL_SHADOW_INDEX_MASK	0x00000FFF
37*e65e175bSOded Gabbay 
38*e65e175bSOded Gabbay /*
39*e65e175bSOded Gabbay  * H/W CTL FIELDS
40*e65e175bSOded Gabbay  */
41*e65e175bSOded Gabbay 
42*e65e175bSOded Gabbay #define BD_CTL_COMP_OFFSET_SHIFT	16
43*e65e175bSOded Gabbay #define BD_CTL_COMP_OFFSET_MASK		0x0FFF0000
44*e65e175bSOded Gabbay 
45*e65e175bSOded Gabbay #define BD_CTL_COMP_DATA_SHIFT		0
46*e65e175bSOded Gabbay #define BD_CTL_COMP_DATA_MASK		0x0000FFFF
47*e65e175bSOded Gabbay 
48*e65e175bSOded Gabbay /*
49*e65e175bSOded Gabbay  * COMPLETION QUEUE
50*e65e175bSOded Gabbay  */
51*e65e175bSOded Gabbay 
52*e65e175bSOded Gabbay struct hl_cq_entry {
53*e65e175bSOded Gabbay 	__le32	data;
54*e65e175bSOded Gabbay };
55*e65e175bSOded Gabbay 
56*e65e175bSOded Gabbay #define HL_CQ_ENTRY_SIZE		sizeof(struct hl_cq_entry)
57*e65e175bSOded Gabbay 
58*e65e175bSOded Gabbay #define CQ_ENTRY_READY_SHIFT			31
59*e65e175bSOded Gabbay #define CQ_ENTRY_READY_MASK			0x80000000
60*e65e175bSOded Gabbay 
61*e65e175bSOded Gabbay #define CQ_ENTRY_SHADOW_INDEX_VALID_SHIFT	30
62*e65e175bSOded Gabbay #define CQ_ENTRY_SHADOW_INDEX_VALID_MASK	0x40000000
63*e65e175bSOded Gabbay 
64*e65e175bSOded Gabbay #define CQ_ENTRY_SHADOW_INDEX_SHIFT		BD_CTL_SHADOW_INDEX_SHIFT
65*e65e175bSOded Gabbay #define CQ_ENTRY_SHADOW_INDEX_MASK		BD_CTL_SHADOW_INDEX_MASK
66*e65e175bSOded Gabbay 
67*e65e175bSOded Gabbay 
68*e65e175bSOded Gabbay #endif /* QMAN_IF_H */
69