1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2022-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
3  * SPDX-License-Identifier: MIT
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be included in
13  * all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21  * DEALINGS IN THE SOFTWARE.
22  */
23 
24 #include "nvtypes.h"
25 
26 #ifndef _clcba2_h_
27 #define _clcba2_h_
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
33 #define HOPPER_SEC2_WORK_LAUNCH_A                                               (0x0000CBA2)
34 
35 typedef volatile struct _clcba2_tag0 {
36     NvV32 Reserved00[0x100];
37     NvV32 DecryptCopySrcAddrHi;                                                 // 0x00000400 - 0x00000403
38     NvV32 DecryptCopySrcAddrLo;                                                 // 0x00000404 - 0x00000407
39     NvV32 DecryptCopyDstAddrHi;                                                 // 0x00000408 - 0x0000040B
40     NvV32 DecryptCopyDstAddrLo;                                                 // 0x0000040c - 0x0000040F
41     NvU32 DecryptCopySize;                                                      // 0x00000410 - 0x00000413
42     NvU32 DecryptCopyAuthTagAddrHi;                                             // 0x00000414 - 0x00000417
43     NvU32 DecryptCopyAuthTagAddrLo;                                             // 0x00000418 - 0x0000041B
44     NvV32 DigestAddrHi;                                                         // 0x0000041C - 0x0000041F
45     NvV32 DigestAddrLo;                                                         // 0x00000420 - 0x00000423
46     NvV32 Reserved01[0x7];
47     NvV32 SemaphoreA;                                                           // 0x00000440 - 0x00000443
48     NvV32 SemaphoreB;                                                           // 0x00000444 - 0x00000447
49     NvV32 SemaphoreSetPayloadLower;                                             // 0x00000448 - 0x0000044B
50     NvV32 SemaphoreSetPayloadUppper;                                            // 0x0000044C - 0x0000044F
51     NvV32 SemaphoreD;                                                           // 0x00000450 - 0x00000453
52     NvU32 Reserved02[0x7];
53     NvV32 Execute;                                                              // 0x00000470 - 0x00000473
54     NvV32 Reserved03[0x23];
55 } NVCBA2_HOPPER_SEC2_WORK_LAUNCH_AControlPio;
56 
57 #define NVCBA2_DECRYPT_COPY_SRC_ADDR_HI                                         (0x00000400)
58 #define NVCBA2_DECRYPT_COPY_SRC_ADDR_HI_DATA                                    24:0
59 #define NVCBA2_DECRYPT_COPY_SRC_ADDR_LO                                         (0x00000404)
60 #define NVCBA2_DECRYPT_COPY_SRC_ADDR_LO_DATA                                    31:4
61 #define NVCBA2_DECRYPT_COPY_DST_ADDR_HI                                         (0x00000408)
62 #define NVCBA2_DECRYPT_COPY_DST_ADDR_HI_DATA                                    24:0
63 #define NVCBA2_DECRYPT_COPY_DST_ADDR_LO                                         (0x0000040c)
64 #define NVCBA2_DECRYPT_COPY_DST_ADDR_LO_DATA                                    31:4
65 #define NVCBA2_DECRYPT_COPY_SIZE                                                (0x00000410)
66 #define NVCBA2_DECRYPT_COPY_SIZE_DATA                                           31:2
67 #define NVCBA2_DECRYPT_COPY_AUTH_TAG_ADDR_HI                                    (0x00000414)
68 #define NVCBA2_DECRYPT_COPY_AUTH_TAG_ADDR_HI_DATA                               24:0
69 #define NVCBA2_DECRYPT_COPY_AUTH_TAG_ADDR_LO                                    (0x00000418)
70 #define NVCBA2_DECRYPT_COPY_AUTH_TAG_ADDR_LO_DATA                               31:4
71 #define NVCBA2_METHOD_STREAM_AUTH_TAG_ADDR_HI                                   (0x0000041C)
72 #define NVCBA2_METHOD_STREAM_AUTH_TAG_ADDR_HI_DATA                              24:0
73 #define NVCBA2_METHOD_STREAM_AUTH_TAG_ADDR_LO                                   (0x00000420)
74 #define NVCBA2_METHOD_STREAM_AUTH_TAG_ADDR_LO_DATA                              31:4
75 #define NVCBA2_SEMAPHORE_A                                                      (0x00000440)
76 #define NVCBA2_SEMAPHORE_A_UPPER                                                24:0
77 #define NVCBA2_SEMAPHORE_B                                                      (0x00000444)
78 #define NVCBA2_SEMAPHORE_B_LOWER                                                31:2
79 #define NVCBA2_SET_SEMAPHORE_PAYLOAD_LOWER                                      (0x00000448)
80 #define NVCBA2_SET_SEMAPHORE_PAYLOAD_LOWER_DATA                                 31:0
81 #define NVCBA2_SET_SEMAPHORE_PAYLOAD_UPPER                                      (0x0000044C)
82 #define NVCBA2_SET_SEMAPHORE_PAYLOAD_UPPER_DATA                                 31:0
83 #define NVCBA2_SEMAPHORE_D                                                      (0x00000450)
84 #define NVCBA2_SEMAPHORE_D_NOTIFY_INTR                                          0:0
85 #define NVCBA2_SEMAPHORE_D_NOTIFY_INTR_DISABLE                                  (0x00000000)
86 #define NVCBA2_SEMAPHORE_D_NOTIFY_INTR_ENABLE                                   (0x00000001)
87 #define NVCBA2_SEMAPHORE_D_PAYLOAD_SIZE                                         1:1
88 #define NVCBA2_SEMAPHORE_D_PAYLOAD_SIZE_32_BIT                                  (0x00000000)
89 #define NVCBA2_SEMAPHORE_D_PAYLOAD_SIZE_64_BIT                                  (0x00000001)
90 #define NVCBA2_SEMAPHORE_D_TIMESTAMP                                            2:2
91 #define NVCBA2_SEMAPHORE_D_TIMESTAMP_DISABLE                                    (0x00000000)
92 #define NVCBA2_SEMAPHORE_D_TIMESTAMP_ENABLE                                     (0x00000001)
93 #define NVCBA2_SEMAPHORE_D_FLUSH_DISABLE                                        3:3
94 #define NVCBA2_SEMAPHORE_D_FLUSH_DISABLE_FALSE                                  (0x00000000)
95 #define NVCBA2_SEMAPHORE_D_FLUSH_DISABLE_TRUE                                   (0x00000001)
96 #define NVCBA2_EXECUTE                                                          (0x00000470)
97 #define NVCBA2_EXECUTE_NOTIFY                                                   0:0
98 #define NVCBA2_EXECUTE_NOTIFY_DISABLE                                           (0x00000000)
99 #define NVCBA2_EXECUTE_NOTIFY_ENABLE                                            (0x00000001)
100 #define NVCBA2_EXECUTE_NOTIFY_ON                                                1:1
101 #define NVCBA2_EXECUTE_NOTIFY_ON_END                                            (0x00000000)
102 #define NVCBA2_EXECUTE_NOTIFY_ON_BEGIN                                          (0x00000001)
103 #define NVCBA2_EXECUTE_FLUSH_DISABLE                                            2:2
104 #define NVCBA2_EXECUTE_FLUSH_DISABLE_FALSE                                      (0x00000000)
105 #define NVCBA2_EXECUTE_FLUSH_DISABLE_TRUE                                       (0x00000001)
106 #define NVCBA2_EXECUTE_NOTIFY_INTR                                              3:3
107 #define NVCBA2_EXECUTE_NOTIFY_INTR_DISABLE                                      (0x00000000)
108 #define NVCBA2_EXECUTE_NOTIFY_INTR_ENABLE                                       (0x00000001)
109 #define NVCBA2_EXECUTE_PAYLOAD_SIZE                                             4:4
110 #define NVCBA2_EXECUTE_PAYLOAD_SIZE_32_BIT                                      (0x00000000)
111 #define NVCBA2_EXECUTE_PAYLOAD_SIZE_64_BIT                                      (0x00000001)
112 #define NVCBA2_EXECUTE_TIMESTAMP                                                5:5
113 #define NVCBA2_EXECUTE_TIMESTAMP_DISABLE                                        (0x00000000)
114 #define NVCBA2_EXECUTE_TIMESTAMP_ENABLE                                         (0x00000001)
115 #define NVCBA2_EXECUTE_PHYSICAL_SCRUBBER                                        6:6
116 #define NVCBA2_EXECUTE_PHYSICAL_SCRUBBER_DISABLE                                (0x00000000)
117 #define NVCBA2_EXECUTE_PHYSICAL_SCRUBBER_ENABLE                                 (0x00000001)
118 
119 // Class definitions
120 #define NVCBA2_DECRYPT_COPY_SIZE_MAX_BYTES                                      (2*1024*1024)
121 
122 // Errors
123 #define NVCBA2_ERROR_NONE                                                       (0x00000000)
124 #define NVCBA2_ERROR_DECRYPT_COPY_SRC_ADDR_MISALIGNED_POINTER                   (0x00000001)
125 #define NVCBA2_ERROR_DECRYPT_COPY_DEST_ADDR_MISALIGNED_POINTER                  (0x00000002)
126 #define NVCBA2_ERROR_DECRYPT_COPY_AUTH_TAG_ADDR_MISALIGNED_POINTER              (0x00000003)
127 #define NVCBA2_ERROR_DECRYPT_COPY_DMA_NACK                                      (0x00000004)
128 #define NVCBA2_ERROR_DECRYPT_COPY_AUTH_TAG_MISMATCH                             (0x00000005)
129 #define NVCBA2_ERROR_METHOD_STREAM_AUTH_TAG_ADDR_MISALIGNED_POINTER             (0x00000006)
130 #define NVCBA2_ERROR_METHOD_STREAM_AUTH_TAG_ADDR_DMA_NACK                       (0x00000007)
131 #define NVCBA2_ERROR_METHOD_STREAM_AUTH_TAG_CHECK_FAILURE                       (0x00000008)
132 #define NVCBA2_ERROR_MISALIGNED_SIZE                                            (0x00000009)
133 #define NVCBA2_ERROR_MISSING_METHODS                                            (0x0000000A)
134 #define NVCBA2_ERROR_SEMAPHORE_RELEASE_DMA_NACK                                 (0x0000000B)
135 #define NVCBA2_ERROR_DECRYPT_SIZE_MAX_EXCEEDED                                  (0x0000000C)
136 #define NVCBA2_ERROR_OS_APPLICATION                                             (0x0000000D)
137 #define NVCBA2_ERROR_INVALID_CTXSW_REQUEST                                      (0x0000000E)
138 #define NVCBA2_ERROR_BUFFER_OVERFLOW                                            (0x0000000F)
139 #define NVCBA2_ERROR_IV_OVERFLOW                                                (0x00000010)
140 #define NVCBA2_ERROR_INTERNAL_SETUP_FAILURE                                     (0x00000011)
141 #define NVCBA2_ERROR_DECRYPT_COPY_INTERNAL_DMA_FAILURE                          (0x00000012)
142 #define NVCBA2_ERROR_METHOD_STREAM_AUTH_TAG_ADDR_INTERNAL_DMA_FAILURE           (0x00000013)
143 #define NVCBA2_ERROR_METHOD_STREAM_AUTH_TAG_HMAC_CALC_FAILURE                   (0x00000014)
144 #define NVCBA2_ERROR_NONCE_OVERFLOW                                             (0x00000015)
145 #define NVCBA2_ERROR_AES_GCM_DECRYPTION_FAILURE                                 (0x00000016)
146 #define NVCBA2_ERROR_SEMAPHORE_RELEASE_INTERNAL_DMA_FAILURE                     (0x00000017)
147 #define NVCBA2_ERROR_KEY_DERIVATION_FAILURE                                     (0x00000018)
148 #define NVCBA2_ERROR_SCRUBBER_FAILURE                                           (0x00000019)
149 #define NVCBA2_ERROR_SCRUBBER_INVALD_ADDRESS                                    (0x0000001a)
150 #define NVCBA2_ERROR_SCRUBBER_INSUFFICIENT_PERMISSIONS                          (0x0000001b)
151 #define NVCBA2_ERROR_SCRUBBER_MUTEX_ACQUIRE_FAILURE                             (0x0000001c)
152 
153 #ifdef __cplusplus
154 };     /* extern "C" */
155 #endif
156 #endif // _clcba2_h
157