1 /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) */
2 /* Copyright(c) 2015 - 2020 Intel Corporation */
3 #ifndef ADF_PF2VF_MSG_H
4 #define ADF_PF2VF_MSG_H
5 
6 /*
7  * PF<->VF Messaging
8  * The PF has an array of 32-bit PF2VF registers, one for each VF.  The
9  * PF can access all these registers; each VF can access only the one
10  * register associated with that particular VF.
11  *
12  * The register functionally is split into two parts:
13  * The bottom half is for PF->VF messages. In particular when the first
14  * bit of this register (bit 0) gets set an interrupt will be triggered
15  * in the respective VF.
16  * The top half is for VF->PF messages. In particular when the first bit
17  * of this half of register (bit 16) gets set an interrupt will be triggered
18  * in the PF.
19  *
20  * The remaining bits within this register are available to encode messages.
21  * and implement a collision control mechanism to prevent concurrent use of
22  * the PF2VF register by both the PF and VF.
23  *
24  *  31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
25  *  _______________________________________________
26  * |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
27  * +-----------------------------------------------+
28  *  \___________________________/ \_________/ ^   ^
29  *                ^                    ^      |   |
30  *                |                    |      |   VF2PF Int
31  *                |                    |      Message Origin
32  *                |                    Message Type
33  *                Message-specific Data/Reserved
34  *
35  *  15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
36  *  _______________________________________________
37  * |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
38  * +-----------------------------------------------+
39  *  \___________________________/ \_________/ ^   ^
40  *                ^                    ^      |   |
41  *                |                    |      |   PF2VF Int
42  *                |                    |      Message Origin
43  *                |                    Message Type
44  *                Message-specific Data/Reserved
45  *
46  * Message Origin (Should always be 1)
47  * A legacy out-of-tree QAT driver allowed for a set of messages not supported
48  * by this driver; these had a Msg Origin of 0 and are ignored by this driver.
49  *
50  * When a PF or VF attempts to send a message in the lower or upper 16 bits,
51  * respectively, the other 16 bits are written to first with a defined
52  * IN_USE_BY pattern as part of a collision control scheme (see adf_iov_putmsg).
53  */
54 
55 #define ADF_PFVF_COMPAT_THIS_VERSION		0x1	/* PF<->VF compat */
56 
57 /* PF->VF messages */
58 #define ADF_PF2VF_INT				BIT(0)
59 #define ADF_PF2VF_MSGORIGIN_SYSTEM		BIT(1)
60 #define ADF_PF2VF_MSGTYPE_MASK			0x0000003C
61 #define ADF_PF2VF_MSGTYPE_SHIFT			2
62 #define ADF_PF2VF_MSGTYPE_RESTARTING		0x01
63 #define ADF_PF2VF_MSGTYPE_VERSION_RESP		0x02
64 #define ADF_PF2VF_IN_USE_BY_PF			0x6AC20000
65 #define ADF_PF2VF_IN_USE_BY_PF_MASK		0xFFFE0000
66 
67 /* PF->VF Version Response */
68 #define ADF_PF2VF_VERSION_RESP_VERS_MASK	0x00003FC0
69 #define ADF_PF2VF_VERSION_RESP_VERS_SHIFT	6
70 #define ADF_PF2VF_VERSION_RESP_RESULT_MASK	0x0000C000
71 #define ADF_PF2VF_VERSION_RESP_RESULT_SHIFT	14
72 #define ADF_PF2VF_MINORVERSION_SHIFT		6
73 #define ADF_PF2VF_MAJORVERSION_SHIFT		10
74 #define ADF_PF2VF_VF_COMPATIBLE			1
75 #define ADF_PF2VF_VF_INCOMPATIBLE		2
76 #define ADF_PF2VF_VF_COMPAT_UNKNOWN		3
77 
78 /* VF->PF messages */
79 #define ADF_VF2PF_IN_USE_BY_VF			0x00006AC2
80 #define ADF_VF2PF_IN_USE_BY_VF_MASK		0x0000FFFE
81 #define ADF_VF2PF_INT				BIT(16)
82 #define ADF_VF2PF_MSGORIGIN_SYSTEM		BIT(17)
83 #define ADF_VF2PF_MSGTYPE_MASK			0x003C0000
84 #define ADF_VF2PF_MSGTYPE_SHIFT			18
85 #define ADF_VF2PF_MSGTYPE_INIT			0x3
86 #define ADF_VF2PF_MSGTYPE_SHUTDOWN		0x4
87 #define ADF_VF2PF_MSGTYPE_VERSION_REQ		0x5
88 #define ADF_VF2PF_MSGTYPE_COMPAT_VER_REQ	0x6
89 
90 /* VF->PF Compatible Version Request */
91 #define ADF_VF2PF_COMPAT_VER_REQ_SHIFT		22
92 
93 #endif /* ADF_IOV_MSG_H */
94