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