1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2022 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 #ifndef _cl2080_notification_h_
25 #define _cl2080_notification_h_
26 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30 
31 /* event values */
32 #define NV2080_NOTIFIERS_SW                                        (0)
33 #define NV2080_NOTIFIERS_HOTPLUG                                   (1)
34 #define NV2080_NOTIFIERS_POWER_CONNECTOR                           (2)
35 #define NV2080_NOTIFIERS_THERMAL_SW                                (3)
36 #define NV2080_NOTIFIERS_THERMAL_HW                                (4)
37 #define NV2080_NOTIFIERS_FULL_SCREEN_CHANGE                        (5)
38 #define NV2080_NOTIFIERS_EVENTBUFFER                               (6)
39 #define NV2080_NOTIFIERS_DP_IRQ                                    (7)
40 #define NV2080_NOTIFIERS_GR_DEBUG_INTR                             (8)
41 #define NV2080_NOTIFIERS_PMU_EVENT                                 (9)
42 #define NV2080_NOTIFIERS_PMU_COMMAND                               (10)
43 #define NV2080_NOTIFIERS_TIMER                                     (11)
44 #define NV2080_NOTIFIERS_GRAPHICS                                  (12)
45 #define NV2080_NOTIFIERS_PPP                                       (13)
46 #define NV2080_NOTIFIERS_VLD                                       (14) // also known as BSP
47 #define NV2080_NOTIFIERS_NVDEC0                                    NV2080_NOTIFIERS_VLD
48 #define NV2080_NOTIFIERS_NVDEC1                                    (15)
49 #define NV2080_NOTIFIERS_NVDEC2                                    (16)
50 #define NV2080_NOTIFIERS_NVDEC3                                    (17)
51 #define NV2080_NOTIFIERS_NVDEC4                                    (18)
52 #define NV2080_NOTIFIERS_NVDEC5                                    (19)
53 #define NV2080_NOTIFIERS_NVDEC6                                    (20)
54 #define NV2080_NOTIFIERS_NVDEC7                                    (21)
55 #define NV2080_NOTIFIERS_PDEC                                      (22) // also known as VP
56 #define NV2080_NOTIFIERS_CE0                                       (23)
57 #define NV2080_NOTIFIERS_CE1                                       (24)
58 #define NV2080_NOTIFIERS_CE2                                       (25)
59 #define NV2080_NOTIFIERS_CE3                                       (26)
60 #define NV2080_NOTIFIERS_CE4                                       (27)
61 #define NV2080_NOTIFIERS_CE5                                       (28)
62 #define NV2080_NOTIFIERS_CE6                                       (29)
63 #define NV2080_NOTIFIERS_CE7                                       (30)
64 #define NV2080_NOTIFIERS_CE8                                       (31)
65 #define NV2080_NOTIFIERS_CE9                                       (32)
66 #define NV2080_NOTIFIERS_PSTATE_CHANGE                             (33)
67 #define NV2080_NOTIFIERS_HDCP_STATUS_CHANGE                        (34)
68 #define NV2080_NOTIFIERS_FIFO_EVENT_MTHD                           (35)
69 #define NV2080_NOTIFIERS_PRIV_RING_HANG                            (36)
70 #define NV2080_NOTIFIERS_RC_ERROR                                  (37)
71 #define NV2080_NOTIFIERS_MSENC                                     (38)
72 #define NV2080_NOTIFIERS_NVENC0                                    NV2080_NOTIFIERS_MSENC
73 #define NV2080_NOTIFIERS_NVENC1                                    (39)
74 #define NV2080_NOTIFIERS_NVENC2                                    (40)
75 #define NV2080_NOTIFIERS_UNUSED_0                                  (41) // Unused
76 #define NV2080_NOTIFIERS_ACPI_NOTIFY                               (42)
77 #define NV2080_NOTIFIERS_COOLER_DIAG_ZONE                          (43)
78 #define NV2080_NOTIFIERS_THERMAL_DIAG_ZONE                         (44)
79 #define NV2080_NOTIFIERS_AUDIO_HDCP_REQUEST                        (45)
80 #define NV2080_NOTIFIERS_WORKLOAD_MODULATION_CHANGE                (46)
81 #define NV2080_NOTIFIERS_GPIO_0_RISING_INTERRUPT                   (47)
82 #define NV2080_NOTIFIERS_GPIO_1_RISING_INTERRUPT                   (48)
83 #define NV2080_NOTIFIERS_GPIO_2_RISING_INTERRUPT                   (49)
84 #define NV2080_NOTIFIERS_GPIO_3_RISING_INTERRUPT                   (50)
85 #define NV2080_NOTIFIERS_GPIO_4_RISING_INTERRUPT                   (51)
86 #define NV2080_NOTIFIERS_GPIO_5_RISING_INTERRUPT                   (52)
87 #define NV2080_NOTIFIERS_GPIO_6_RISING_INTERRUPT                   (53)
88 #define NV2080_NOTIFIERS_GPIO_7_RISING_INTERRUPT                   (54)
89 #define NV2080_NOTIFIERS_GPIO_8_RISING_INTERRUPT                   (55)
90 #define NV2080_NOTIFIERS_GPIO_9_RISING_INTERRUPT                   (56)
91 #define NV2080_NOTIFIERS_GPIO_10_RISING_INTERRUPT                  (57)
92 #define NV2080_NOTIFIERS_GPIO_11_RISING_INTERRUPT                  (58)
93 #define NV2080_NOTIFIERS_GPIO_12_RISING_INTERRUPT                  (59)
94 #define NV2080_NOTIFIERS_GPIO_13_RISING_INTERRUPT                  (60)
95 #define NV2080_NOTIFIERS_GPIO_14_RISING_INTERRUPT                  (61)
96 #define NV2080_NOTIFIERS_GPIO_15_RISING_INTERRUPT                  (62)
97 #define NV2080_NOTIFIERS_GPIO_16_RISING_INTERRUPT                  (63)
98 #define NV2080_NOTIFIERS_GPIO_17_RISING_INTERRUPT                  (64)
99 #define NV2080_NOTIFIERS_GPIO_18_RISING_INTERRUPT                  (65)
100 #define NV2080_NOTIFIERS_GPIO_19_RISING_INTERRUPT                  (66)
101 #define NV2080_NOTIFIERS_GPIO_20_RISING_INTERRUPT                  (67)
102 #define NV2080_NOTIFIERS_GPIO_21_RISING_INTERRUPT                  (68)
103 #define NV2080_NOTIFIERS_GPIO_22_RISING_INTERRUPT                  (69)
104 #define NV2080_NOTIFIERS_GPIO_23_RISING_INTERRUPT                  (70)
105 #define NV2080_NOTIFIERS_GPIO_24_RISING_INTERRUPT                  (71)
106 #define NV2080_NOTIFIERS_GPIO_25_RISING_INTERRUPT                  (72)
107 #define NV2080_NOTIFIERS_GPIO_26_RISING_INTERRUPT                  (73)
108 #define NV2080_NOTIFIERS_GPIO_27_RISING_INTERRUPT                  (74)
109 #define NV2080_NOTIFIERS_GPIO_28_RISING_INTERRUPT                  (75)
110 #define NV2080_NOTIFIERS_GPIO_29_RISING_INTERRUPT                  (76)
111 #define NV2080_NOTIFIERS_GPIO_30_RISING_INTERRUPT                  (77)
112 #define NV2080_NOTIFIERS_GPIO_31_RISING_INTERRUPT                  (78)
113 #define NV2080_NOTIFIERS_GPIO_0_FALLING_INTERRUPT                  (79)
114 #define NV2080_NOTIFIERS_GPIO_1_FALLING_INTERRUPT                  (80)
115 #define NV2080_NOTIFIERS_GPIO_2_FALLING_INTERRUPT                  (81)
116 #define NV2080_NOTIFIERS_GPIO_3_FALLING_INTERRUPT                  (82)
117 #define NV2080_NOTIFIERS_GPIO_4_FALLING_INTERRUPT                  (83)
118 #define NV2080_NOTIFIERS_GPIO_5_FALLING_INTERRUPT                  (84)
119 #define NV2080_NOTIFIERS_GPIO_6_FALLING_INTERRUPT                  (85)
120 #define NV2080_NOTIFIERS_GPIO_7_FALLING_INTERRUPT                  (86)
121 #define NV2080_NOTIFIERS_GPIO_8_FALLING_INTERRUPT                  (87)
122 #define NV2080_NOTIFIERS_GPIO_9_FALLING_INTERRUPT                  (88)
123 #define NV2080_NOTIFIERS_GPIO_10_FALLING_INTERRUPT                 (89)
124 #define NV2080_NOTIFIERS_GPIO_11_FALLING_INTERRUPT                 (90)
125 #define NV2080_NOTIFIERS_GPIO_12_FALLING_INTERRUPT                 (91)
126 #define NV2080_NOTIFIERS_GPIO_13_FALLING_INTERRUPT                 (92)
127 #define NV2080_NOTIFIERS_GPIO_14_FALLING_INTERRUPT                 (93)
128 #define NV2080_NOTIFIERS_GPIO_15_FALLING_INTERRUPT                 (94)
129 #define NV2080_NOTIFIERS_GPIO_16_FALLING_INTERRUPT                 (95)
130 #define NV2080_NOTIFIERS_GPIO_17_FALLING_INTERRUPT                 (96)
131 #define NV2080_NOTIFIERS_GPIO_18_FALLING_INTERRUPT                 (97)
132 #define NV2080_NOTIFIERS_GPIO_19_FALLING_INTERRUPT                 (98)
133 #define NV2080_NOTIFIERS_GPIO_20_FALLING_INTERRUPT                 (99)
134 #define NV2080_NOTIFIERS_GPIO_21_FALLING_INTERRUPT                 (100)
135 #define NV2080_NOTIFIERS_GPIO_22_FALLING_INTERRUPT                 (101)
136 #define NV2080_NOTIFIERS_GPIO_23_FALLING_INTERRUPT                 (102)
137 #define NV2080_NOTIFIERS_GPIO_24_FALLING_INTERRUPT                 (103)
138 #define NV2080_NOTIFIERS_GPIO_25_FALLING_INTERRUPT                 (104)
139 #define NV2080_NOTIFIERS_GPIO_26_FALLING_INTERRUPT                 (105)
140 #define NV2080_NOTIFIERS_GPIO_27_FALLING_INTERRUPT                 (106)
141 #define NV2080_NOTIFIERS_GPIO_28_FALLING_INTERRUPT                 (107)
142 #define NV2080_NOTIFIERS_GPIO_29_FALLING_INTERRUPT                 (108)
143 #define NV2080_NOTIFIERS_GPIO_30_FALLING_INTERRUPT                 (109)
144 #define NV2080_NOTIFIERS_GPIO_31_FALLING_INTERRUPT                 (110)
145 #define NV2080_NOTIFIERS_ECC_SBE                                   (111)
146 #define NV2080_NOTIFIERS_ECC_DBE                                   (112)
147 #define NV2080_NOTIFIERS_STEREO_EMITTER_DETECTION                  (113)
148 #define NV2080_NOTIFIERS_GC5_GPU_READY                             (114)
149 #define NV2080_NOTIFIERS_SEC2                                      (115)
150 #define NV2080_NOTIFIERS_GC6_REFCOUNT_INC                          (116)
151 #define NV2080_NOTIFIERS_GC6_REFCOUNT_DEC                          (117)
152 #define NV2080_NOTIFIERS_POWER_EVENT                               (118)
153 #define NV2080_NOTIFIERS_CLOCKS_CHANGE                             (119)
154 #define NV2080_NOTIFIERS_HOTPLUG_PROCESSING_COMPLETE               (120)
155 #define NV2080_NOTIFIERS_PHYSICAL_PAGE_FAULT                       (121)
156 #define NV2080_NOTIFIERS_RESERVED122                               (122)
157 #define NV2080_NOTIFIERS_NVLINK_ERROR_FATAL                        (123)
158 #define NV2080_NOTIFIERS_PRIV_REG_ACCESS_FAULT                     (124)
159 #define NV2080_NOTIFIERS_NVLINK_ERROR_RECOVERY_REQUIRED            (125)
160 #define NV2080_NOTIFIERS_NVJPG                                     (126)
161 #define NV2080_NOTIFIERS_NVJPEG0                                   NV2080_NOTIFIERS_NVJPG
162 #define NV2080_NOTIFIERS_NVJPEG1                                   (127)
163 #define NV2080_NOTIFIERS_NVJPEG2                                   (128)
164 #define NV2080_NOTIFIERS_NVJPEG3                                   (129)
165 #define NV2080_NOTIFIERS_NVJPEG4                                   (130)
166 #define NV2080_NOTIFIERS_NVJPEG5                                   (131)
167 #define NV2080_NOTIFIERS_NVJPEG6                                   (132)
168 #define NV2080_NOTIFIERS_NVJPEG7                                   (133)
169 #define NV2080_NOTIFIERS_RUNLIST_AND_ENG_IDLE                      (134)
170 #define NV2080_NOTIFIERS_RUNLIST_ACQUIRE                           (135)
171 #define NV2080_NOTIFIERS_RUNLIST_ACQUIRE_AND_ENG_IDLE              (136)
172 #define NV2080_NOTIFIERS_RUNLIST_IDLE                              (137)
173 #define NV2080_NOTIFIERS_TSG_PREEMPT_COMPLETE                      (138)
174 #define NV2080_NOTIFIERS_RUNLIST_PREEMPT_COMPLETE                  (139)
175 #define NV2080_NOTIFIERS_CTXSW_TIMEOUT                             (140)
176 #define NV2080_NOTIFIERS_INFOROM_ECC_OBJECT_UPDATED                (141)
177 #define NV2080_NOTIFIERS_NVTELEMETRY_REPORT_EVENT                  (142)
178 #define NV2080_NOTIFIERS_DSTATE_XUSB_PPC                           (143)
179 #define NV2080_NOTIFIERS_FECS_CTX_SWITCH                           (144)
180 #define NV2080_NOTIFIERS_XUSB_PPC_CONNECTED                        (145)
181 #define NV2080_NOTIFIERS_GR0                                       NV2080_NOTIFIERS_GRAPHICS
182 #define NV2080_NOTIFIERS_GR1                                       (146)
183 #define NV2080_NOTIFIERS_GR2                                       (147)
184 #define NV2080_NOTIFIERS_GR3                                       (148)
185 #define NV2080_NOTIFIERS_GR4                                       (149)
186 #define NV2080_NOTIFIERS_GR5                                       (150)
187 #define NV2080_NOTIFIERS_GR6                                       (151)
188 #define NV2080_NOTIFIERS_GR7                                       (152)
189 #define NV2080_NOTIFIERS_OFA                                       (153)
190 #define NV2080_NOTIFIERS_DSTATE_HDA                                (154)
191 #define NV2080_NOTIFIERS_POISON_ERROR_NON_FATAL                    (155)
192 #define NV2080_NOTIFIERS_POISON_ERROR_FATAL                        (156)
193 #define NV2080_NOTIFIERS_UCODE_RESET                               (157)
194 #define NV2080_NOTIFIERS_PLATFORM_POWER_MODE_CHANGE                (158)
195 #define NV2080_NOTIFIERS_SMC_CONFIG_UPDATE                         (159)
196 #define NV2080_NOTIFIERS_INFOROM_RRL_OBJECT_UPDATED                (160)
197 #define NV2080_NOTIFIERS_INFOROM_PBL_OBJECT_UPDATED                (161)
198 #define NV2080_NOTIFIERS_LPWR_DIFR_PREFETCH_REQUEST                (162)
199 #define NV2080_NOTIFIERS_SEC_FAULT_ERROR                           (163)
200 #define NV2080_NOTIFIERS_POSSIBLE_ERROR                            (164)
201 #define NV2080_NOTIFIERS_NVLINK_INFO_LINK_UP                       (165)
202 #define NV2080_NOTIFIERS_NVLINK_INFO_LINK_DOWN                     (176)
203 #define NV2080_NOTIFIERS_NVPCF_EVENTS                              (177)
204 #define NV2080_NOTIFIERS_HDMI_FRL_RETRAINING_REQUEST               (178)
205 #define NV2080_NOTIFIERS_VRR_SET_TIMEOUT                           (179)
206 #define NV2080_NOTIFIERS_AUX_POWER_STATE_CHANGE                    (180)
207 #define NV2080_NOTIFIERS_MAXCOUNT                                  (181)
208 
209 // Indexed GR notifier reference
210 #define NV2080_NOTIFIERS_GR(x)         ((x == 0) ? (NV2080_NOTIFIERS_GR0) : (NV2080_NOTIFIERS_GR1 + (x - 1)))
211 #define NV2080_NOTIFIERS_GR_IDX(x)     ((x) - NV2080_NOTIFIERS_GR0)
212 #define NV2080_NOTIFIER_TYPE_IS_GR(x)  (((x) == NV2080_NOTIFIERS_GR0) || (((x) >= NV2080_NOTIFIERS_GR1) && ((x) <= NV2080_NOTIFIERS_GR7)))
213 
214 #define NV2080_NOTIFIERS_CE(x)         (NV2080_NOTIFIERS_CE0 + (x))
215 #define NV2080_NOTIFIERS_CE_IDX(x)     ((x) - NV2080_NOTIFIERS_CE0)
216 #define NV2080_NOTIFIER_TYPE_IS_CE(x)  (((x) >= NV2080_NOTIFIERS_CE0) && ((x) <= NV2080_NOTIFIERS_CE9))
217 
218 // Indexed MSENC notifier reference
219 #define NV2080_NOTIFIERS_NVENC(x)         (NV2080_NOTIFIERS_NVENC0 + (x))
220 #define NV2080_NOTIFIERS_NVENC_IDX(x)     ((x) - NV2080_NOTIFIERS_NVENC0)
221 #define NV2080_NOTIFIER_TYPE_IS_NVENC(x)  (((x) >= NV2080_NOTIFIERS_NVENC0) && ((x) <= NV2080_NOTIFIERS_NVENC2))
222 // Indexed NVDEC notifier reference
223 #define NV2080_NOTIFIERS_NVDEC(x)         (NV2080_NOTIFIERS_NVDEC0 + (x))
224 #define NV2080_NOTIFIERS_NVDEC_IDX(x)     ((x) - NV2080_NOTIFIERS_NVDEC0)
225 #define NV2080_NOTIFIER_TYPE_IS_NVDEC(x)  (((x) >= NV2080_NOTIFIERS_NVDEC0) && ((x) <= NV2080_NOTIFIERS_NVDEC7))
226 // Indexed NVJPEG notifier reference
227 #define NV2080_NOTIFIERS_NVJPEG(x)         (NV2080_NOTIFIERS_NVJPEG0 + (x))
228 #define NV2080_NOTIFIERS_NVJPEG_IDX(x)     ((x) - NV2080_NOTIFIERS_NVJPEG0)
229 #define NV2080_NOTIFIER_TYPE_IS_NVJPEG(x)  (((x) >= NV2080_NOTIFIERS_NVJPEG0) && ((x) <= NV2080_NOTIFIERS_NVJPEG7))
230 
231 #define NV2080_NOTIFIERS_GPIO_RISING_INTERRUPT(pin)                (NV2080_NOTIFIERS_GPIO_0_RISING_INTERRUPT + (pin))
232 #define NV2080_NOTIFIERS_GPIO_FALLING_INTERRUPT(pin)               (NV2080_NOTIFIERS_GPIO_0_FALLING_INTERRUPT + (pin))
233 
234 #define NV2080_SUBDEVICE_NOTIFICATION_STATUS_IN_PROGRESS              (0x8000)
235 #define NV2080_SUBDEVICE_NOTIFICATION_STATUS_BAD_ARGUMENT             (0x4000)
236 #define NV2080_SUBDEVICE_NOTIFICATION_STATUS_ERROR_INVALID_STATE      (0x2000)
237 #define NV2080_SUBDEVICE_NOTIFICATION_STATUS_ERROR_STATE_IN_USE       (0x1000)
238 #define NV2080_SUBDEVICE_NOTIFICATION_STATUS_DONE_SUCCESS             (0x0000)
239 
240 /* exported engine defines */
241 #define NV2080_ENGINE_TYPE_NULL                       (0x00000000)
242 #define NV2080_ENGINE_TYPE_GRAPHICS                   (0x00000001)
243 #define NV2080_ENGINE_TYPE_GR0                        NV2080_ENGINE_TYPE_GRAPHICS
244 #define NV2080_ENGINE_TYPE_GR1                        (0x00000002)
245 #define NV2080_ENGINE_TYPE_GR2                        (0x00000003)
246 #define NV2080_ENGINE_TYPE_GR3                        (0x00000004)
247 #define NV2080_ENGINE_TYPE_GR4                        (0x00000005)
248 #define NV2080_ENGINE_TYPE_GR5                        (0x00000006)
249 #define NV2080_ENGINE_TYPE_GR6                        (0x00000007)
250 #define NV2080_ENGINE_TYPE_GR7                        (0x00000008)
251 #define NV2080_ENGINE_TYPE_COPY0                      (0x00000009)
252 #define NV2080_ENGINE_TYPE_COPY1                      (0x0000000a)
253 #define NV2080_ENGINE_TYPE_COPY2                      (0x0000000b)
254 #define NV2080_ENGINE_TYPE_COPY3                      (0x0000000c)
255 #define NV2080_ENGINE_TYPE_COPY4                      (0x0000000d)
256 #define NV2080_ENGINE_TYPE_COPY5                      (0x0000000e)
257 #define NV2080_ENGINE_TYPE_COPY6                      (0x0000000f)
258 #define NV2080_ENGINE_TYPE_COPY7                      (0x00000010)
259 #define NV2080_ENGINE_TYPE_COPY8                      (0x00000011)
260 #define NV2080_ENGINE_TYPE_COPY9                      (0x00000012)
261 #define NV2080_ENGINE_TYPE_BSP                        (0x00000013)
262 #define NV2080_ENGINE_TYPE_NVDEC0                     NV2080_ENGINE_TYPE_BSP
263 #define NV2080_ENGINE_TYPE_NVDEC1                     (0x00000014)
264 #define NV2080_ENGINE_TYPE_NVDEC2                     (0x00000015)
265 #define NV2080_ENGINE_TYPE_NVDEC3                     (0x00000016)
266 #define NV2080_ENGINE_TYPE_NVDEC4                     (0x00000017)
267 #define NV2080_ENGINE_TYPE_NVDEC5                     (0x00000018)
268 #define NV2080_ENGINE_TYPE_NVDEC6                     (0x00000019)
269 #define NV2080_ENGINE_TYPE_NVDEC7                     (0x0000001a)
270 #define NV2080_ENGINE_TYPE_MSENC                      (0x0000001b)
271 #define NV2080_ENGINE_TYPE_NVENC0                      NV2080_ENGINE_TYPE_MSENC  /* Mutually exclusive alias */
272 #define NV2080_ENGINE_TYPE_NVENC1                     (0x0000001c)
273 #define NV2080_ENGINE_TYPE_NVENC2                     (0x0000001d)
274 #define NV2080_ENGINE_TYPE_VP                         (0x0000001e)
275 #define NV2080_ENGINE_TYPE_ME                         (0x0000001f)
276 #define NV2080_ENGINE_TYPE_PPP                        (0x00000020)
277 #define NV2080_ENGINE_TYPE_MPEG                       (0x00000021)
278 #define NV2080_ENGINE_TYPE_SW                         (0x00000022)
279 #define NV2080_ENGINE_TYPE_CIPHER                     (0x00000023)
280 #define NV2080_ENGINE_TYPE_TSEC                       NV2080_ENGINE_TYPE_CIPHER
281 #define NV2080_ENGINE_TYPE_VIC                        (0x00000024)
282 #define NV2080_ENGINE_TYPE_MP                         (0x00000025)
283 #define NV2080_ENGINE_TYPE_SEC2                       (0x00000026)
284 #define NV2080_ENGINE_TYPE_HOST                       (0x00000027)
285 #define NV2080_ENGINE_TYPE_DPU                        (0x00000028)
286 #define NV2080_ENGINE_TYPE_PMU                        (0x00000029)
287 #define NV2080_ENGINE_TYPE_FBFLCN                     (0x0000002a)
288 #define NV2080_ENGINE_TYPE_NVJPG                      (0x0000002b)
289 #define NV2080_ENGINE_TYPE_NVJPEG0                     NV2080_ENGINE_TYPE_NVJPG
290 #define NV2080_ENGINE_TYPE_NVJPEG1                    (0x0000002c)
291 #define NV2080_ENGINE_TYPE_NVJPEG2                    (0x0000002d)
292 #define NV2080_ENGINE_TYPE_NVJPEG3                    (0x0000002e)
293 #define NV2080_ENGINE_TYPE_NVJPEG4                    (0x0000002f)
294 #define NV2080_ENGINE_TYPE_NVJPEG5                    (0x00000030)
295 #define NV2080_ENGINE_TYPE_NVJPEG6                    (0x00000031)
296 #define NV2080_ENGINE_TYPE_NVJPEG7                    (0x00000032)
297 #define NV2080_ENGINE_TYPE_OFA                        (0x00000033)
298 #define NV2080_ENGINE_TYPE_LAST                       (0x0000003e)
299 #define NV2080_ENGINE_TYPE_ALLENGINES                 (0xffffffff)
300 
301 #define NV2080_ENGINE_TYPE_COPY_SIZE 10
302 #define NV2080_ENGINE_TYPE_NVENC_SIZE 3
303 #define NV2080_ENGINE_TYPE_NVJPEG_SIZE 8
304 #define NV2080_ENGINE_TYPE_NVDEC_SIZE 8
305 #define NV2080_ENGINE_TYPE_GR_SIZE 8
306 
307 // Indexed engines
308 #define NV2080_ENGINE_TYPE_COPY(i)     (NV2080_ENGINE_TYPE_COPY0+(i))
309 #define NV2080_ENGINE_TYPE_IS_COPY(i)  (((i) >= NV2080_ENGINE_TYPE_COPY0) && ((i) <= NV2080_ENGINE_TYPE_COPY9))
310 #define NV2080_ENGINE_TYPE_COPY_IDX(i) ((i) - NV2080_ENGINE_TYPE_COPY0)
311 
312 #define NV2080_ENGINE_TYPE_NVENC(i)    (NV2080_ENGINE_TYPE_NVENC0+(i))
313 #define NV2080_ENGINE_TYPE_IS_NVENC(i)  (((i) >= NV2080_ENGINE_TYPE_NVENC0) && ((i) < NV2080_ENGINE_TYPE_NVENC(NV2080_ENGINE_TYPE_NVENC_SIZE)))
314 #define NV2080_ENGINE_TYPE_NVENC_IDX(i) ((i) - NV2080_ENGINE_TYPE_NVENC0)
315 
316 #define NV2080_ENGINE_TYPE_NVDEC(i)    (NV2080_ENGINE_TYPE_NVDEC0+(i))
317 #define NV2080_ENGINE_TYPE_IS_NVDEC(i)  (((i) >= NV2080_ENGINE_TYPE_NVDEC0) && ((i) < NV2080_ENGINE_TYPE_NVDEC(NV2080_ENGINE_TYPE_NVDEC_SIZE)))
318 #define NV2080_ENGINE_TYPE_NVDEC_IDX(i) ((i) - NV2080_ENGINE_TYPE_NVDEC0)
319 
320 #define NV2080_ENGINE_TYPE_NVJPEG(i)    (NV2080_ENGINE_TYPE_NVJPEG0+(i))
321 #define NV2080_ENGINE_TYPE_IS_NVJPEG(i)  (((i) >= NV2080_ENGINE_TYPE_NVJPEG0) && ((i) < NV2080_ENGINE_TYPE_NVJPEG(NV2080_ENGINE_TYPE_NVJPEG_SIZE)))
322 #define NV2080_ENGINE_TYPE_NVJPEG_IDX(i) ((i) - NV2080_ENGINE_TYPE_NVJPEG0)
323 
324 #define NV2080_ENGINE_TYPE_GR(i)       (NV2080_ENGINE_TYPE_GR0 + (i))
325 #define NV2080_ENGINE_TYPE_IS_GR(i)    (((i) >= NV2080_ENGINE_TYPE_GR0) && ((i) < NV2080_ENGINE_TYPE_GR(NV2080_ENGINE_TYPE_GR_SIZE)))
326 #define NV2080_ENGINE_TYPE_GR_IDX(i)   ((i) - NV2080_ENGINE_TYPE_GR0)
327 
328 #define NV2080_ENGINE_TYPE_IS_VALID(i) (((i) > (NV2080_ENGINE_TYPE_NULL)) && ((i) < (NV2080_ENGINE_TYPE_LAST)))
329 
330 /* exported client defines */
331 #define NV2080_CLIENT_TYPE_TEX                        (0x00000001)
332 #define NV2080_CLIENT_TYPE_COLOR                      (0x00000002)
333 #define NV2080_CLIENT_TYPE_DEPTH                      (0x00000003)
334 #define NV2080_CLIENT_TYPE_DA                         (0x00000004)
335 #define NV2080_CLIENT_TYPE_FE                         (0x00000005)
336 #define NV2080_CLIENT_TYPE_SCC                        (0x00000006)
337 #define NV2080_CLIENT_TYPE_WID                        (0x00000007)
338 #define NV2080_CLIENT_TYPE_MSVLD                      (0x00000008)
339 #define NV2080_CLIENT_TYPE_MSPDEC                     (0x00000009)
340 #define NV2080_CLIENT_TYPE_MSPPP                      (0x0000000a)
341 #define NV2080_CLIENT_TYPE_VIC                        (0x0000000b)
342 #define NV2080_CLIENT_TYPE_ALLCLIENTS                 (0xffffffff)
343 
344 /* GC5 Gpu Ready event defines */
345 #define NV2080_GC5_EXIT_COMPLETE                      (0x00000001)
346 #define NV2080_GC5_ENTRY_ABORTED                      (0x00000002)
347 
348 /* Platform Power Mode event defines */
349 #define NV2080_PLATFORM_POWER_MODE_CHANGE_COMPLETION        (0x00000000)
350 #define NV2080_PLATFORM_POWER_MODE_CHANGE_ACPI_NOTIFICATION (0x00000001)
351 
352 /* NvNotification[] fields and values */
353 #define NV2080_NOTIFICATION_STATUS_ERROR_PROTECTION_FAULT          (0x4000)
354 /* pio method data structure */
355 typedef volatile struct _cl2080_tag0 {
356     NvV32 Reserved00[0x7c0];
357 } Nv2080Typedef, Nv20Subdevice0;
358 #define  NV2080_TYPEDEF                                          Nv20Subdevice0
359 
360 /* HDCP Status change notification information */
361 typedef struct Nv2080HdcpStatusChangeNotificationRec {
362     NvU32 displayId;
363     NvU32 hdcpStatusChangeNotif;
364 } Nv2080HdcpStatusChangeNotification;
365 
366 /* Pstate change notification information */
367 typedef struct Nv2080PStateChangeNotificationRec {
368     struct {
369         NvU32 nanoseconds[2];  /* nanoseconds since Jan. 1, 1970       0-   7*/
370     } timeStamp;               /*                                       -0007*/
371     NvU32 NewPstate;
372 } Nv2080PStateChangeNotification;
373 
374 /* Clocks change notification information */
375 typedef struct Nv2080ClocksChangeNotificationRec {
376     struct {
377         NvU32 nanoseconds[2];  /* nanoseconds since Jan. 1, 1970       0-   7*/
378     } timeStamp;               /*                                       -0007*/
379 } Nv2080ClocksChangeNotification;
380 
381 /* WorkLoad Modulation state change notification information*/
382 typedef struct Nv2080WorkloadModulationChangeNotificationRec {
383     struct {
384         NvU32 nanoseconds[2];  /* nanoseconds since Jan. 1, 1970       0-   7*/
385     } timeStamp;               /*                                       -0007*/
386     NvBool WorkloadModulationEnabled;
387 } Nv2080WorkloadModulationChangeNotification;
388 
389 /* Hotplug notification information */
390 typedef struct {
391     NvU32 plugDisplayMask;
392     NvU32 unplugDisplayMask;
393 } Nv2080HotplugNotification;
394 
395 /* Power state changing notification information */
396 typedef struct {
397     NvBool bSwitchToAC;
398     NvBool bGPUCapabilityChanged;
399     NvU32  displayMaskAffected;
400 } Nv2080PowerEventNotification;
401 
402 /* DP IRQ notification information */
403 typedef struct Nv2080DpIrqNotificationRec {
404     NvU32 displayId;
405 } Nv2080DpIrqNotification;
406 
407 /* XUSB/PPC D-State change notification information */
408 typedef struct Nv2080DstateXusbPpcNotificationRec {
409     NvU32 dstateXusb;
410     NvU32 dstatePpc;
411 } Nv2080DstateXusbPpcNotification;
412 
413 /* XUSB/PPC Connection status notification information */
414 typedef struct Nv2080XusbPpcConnectStateNotificationRec {
415     NvBool bConnected;
416 } Nv2080XusbPpcConnectStateNotification;
417 
418 /* ACPI event notification information */
419 typedef struct Nv2080ACPIEvent {
420     NvU32 event;
421 } Nv2080ACPIEvent;
422 
423 /* Cooler Zone notification information */
424 typedef struct _NV2080_COOLER_DIAG_ZONE_NOTIFICATION_REC {
425     NvU32 currentZone;
426 } NV2080_COOLER_DIAG_ZONE_NOTIFICATION_REC;
427 
428 /* Thermal Zone notification information */
429 typedef struct _NV2080_THERM_DIAG_ZONE_NOTIFICATION_REC {
430     NvU32 currentZone;
431 } NV2080_THERM_DIAG_ZONE_NOTIFICATION_REC;
432 
433 /* HDCP ref count change notification information */
434 typedef struct Nv2080AudioHdcpRequestRec {
435     NvU32 displayId;
436     NvU32 requestedState;
437 } Nv2080AudioHdcpRequest;
438 
439 /* Gpu ready event information */
440 typedef struct Nv2080GC5GpuReadyParams {
441     NvU32 event;
442     NvU32 sciIntr0;
443     NvU32 sciIntr1;
444 } Nv2080GC5GpuReadyParams;
445 
446 /* Priv reg access fault notification information */
447 typedef struct {
448     NvU32 errAddr;
449 } Nv2080PrivRegAccessFaultNotification;
450 
451 /* HDA D-State change notification information
452  * See @HDACODEC_DSTATE for definitions
453  */
454 typedef struct Nv2080DstateHdaCodecNotificationRec {
455     NvU32 dstateHdaCodec;
456 } Nv2080DstateHdaCodecNotification;
457 
458 /* HDMI FRL retraining request notification information */
459 typedef struct Nv2080HdmiFrlRequestNotificationRec {
460     NvU32 displayId;
461 } Nv2080HdmiFrlRequestNotification;
462 
463 /*
464  * Platform Power Mode event information
465  */
466 typedef struct _NV2080_PLATFORM_POWER_MODE_CHANGE_STATUS {
467     NvU8 platformPowerModeIndex;
468     NvU8 platformPowerModeMask;
469     NvU8 eventReason;
470 } NV2080_PLATFORM_POWER_MODE_CHANGE_STATUS;
471 
472 #define NV2080_PLATFORM_POWER_MODE_CHANGE_INFO_INDEX                         7:0
473 #define NV2080_PLATFORM_POWER_MODE_CHANGE_INFO_MASK                          15:8
474 #define NV2080_PLATFORM_POWER_MODE_CHANGE_INFO_REASON                        23:16
475 
476 /*
477  * ENGINE_INFO_TYPE_NV2080 of the engine for which the QOS interrupt has been raised
478  */
479 typedef struct {
480     NvU32 engineType;
481 } Nv2080QosIntrNotification;
482 
483 typedef struct {
484     NvU64 physAddress  NV_ALIGN_BYTES(8);
485 } Nv2080EccDbeNotification;
486 
487 /*
488  * LPWR DIFR Prefetch Request - Size of L2 Cache
489  */
490 typedef struct {
491     NvU32 l2CacheSize;
492 } Nv2080LpwrDifrPrefetchNotification;
493 
494 /*
495  * Nvlink Link status change Notification
496  */
497 typedef struct {
498     NvU32 GpuId;
499     NvU32 linkId;
500 } Nv2080NvlinkLnkChangeNotification;
501 
502 typedef struct {
503     NvU32 head;
504 } Nv2080VrrSetTimeoutNotification;
505 
506 #ifdef __cplusplus
507 };     /* extern "C" */
508 #endif
509 
510 #endif /* _cl2080_notification_h_ */
511