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