Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(272)

Side by Side Diff: arch/arm/mach-tegra/nv/nvrm/dispatch/nvrm_power_dispatch.c

Issue 3256004: [ARM] tegra: add nvos/nvrm/nvmap drivers (Closed) Base URL: ssh://git@gitrw.chromium.org/kernel.git
Patch Set: remove ap15 headers Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2009 NVIDIA Corporation.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 *
11 * Redistributions in binary form must reproduce the above copyright notice,
12 * this list of conditions and the following disclaimer in the documentation
13 * and/or other materials provided with the distribution.
14 *
15 * Neither the name of the NVIDIA Corporation nor the names of its contributors
16 * may be used to endorse or promote products derived from this software
17 * without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 *
31 */
32
33 #define NV_IDL_IS_DISPATCH
34
35 #include "nvcommon.h"
36 #include "nvos.h"
37 #include "nvassert.h"
38 #include "nvreftrack.h"
39 #include "nvidlcmd.h"
40 #include "nvrm_power.h"
41
42 #define OFFSET( s, e ) (NvU32)(void *)(&(((s*)0)->e))
43
44
45 typedef struct NvRmKernelPowerResume_in_t
46 {
47 NvU32 package_;
48 NvU32 function_;
49 NvRmDeviceHandle hRmDeviceHandle;
50 } NV_ALIGN(4) NvRmKernelPowerResume_in;
51
52 typedef struct NvRmKernelPowerResume_inout_t
53 {
54 NvU32 dummy_;
55 } NV_ALIGN(4) NvRmKernelPowerResume_inout;
56
57 typedef struct NvRmKernelPowerResume_out_t
58 {
59 NvError ret_;
60 } NV_ALIGN(4) NvRmKernelPowerResume_out;
61
62 typedef struct NvRmKernelPowerResume_params_t
63 {
64 NvRmKernelPowerResume_in in;
65 NvRmKernelPowerResume_inout inout;
66 NvRmKernelPowerResume_out out;
67 } NvRmKernelPowerResume_params;
68
69 typedef struct NvRmKernelPowerSuspend_in_t
70 {
71 NvU32 package_;
72 NvU32 function_;
73 NvRmDeviceHandle hRmDeviceHandle;
74 } NV_ALIGN(4) NvRmKernelPowerSuspend_in;
75
76 typedef struct NvRmKernelPowerSuspend_inout_t
77 {
78 NvU32 dummy_;
79 } NV_ALIGN(4) NvRmKernelPowerSuspend_inout;
80
81 typedef struct NvRmKernelPowerSuspend_out_t
82 {
83 NvError ret_;
84 } NV_ALIGN(4) NvRmKernelPowerSuspend_out;
85
86 typedef struct NvRmKernelPowerSuspend_params_t
87 {
88 NvRmKernelPowerSuspend_in in;
89 NvRmKernelPowerSuspend_inout inout;
90 NvRmKernelPowerSuspend_out out;
91 } NvRmKernelPowerSuspend_params;
92
93 typedef struct NvRmDfsSetLowVoltageThreshold_in_t
94 {
95 NvU32 package_;
96 NvU32 function_;
97 NvRmDeviceHandle hRmDeviceHandle;
98 NvRmDfsVoltageRailId RailId;
99 NvRmMilliVolts LowMv;
100 } NV_ALIGN(4) NvRmDfsSetLowVoltageThreshold_in;
101
102 typedef struct NvRmDfsSetLowVoltageThreshold_inout_t
103 {
104 NvU32 dummy_;
105 } NV_ALIGN(4) NvRmDfsSetLowVoltageThreshold_inout;
106
107 typedef struct NvRmDfsSetLowVoltageThreshold_out_t
108 {
109 NvU32 dummy_;
110 } NV_ALIGN(4) NvRmDfsSetLowVoltageThreshold_out;
111
112 typedef struct NvRmDfsSetLowVoltageThreshold_params_t
113 {
114 NvRmDfsSetLowVoltageThreshold_in in;
115 NvRmDfsSetLowVoltageThreshold_inout inout;
116 NvRmDfsSetLowVoltageThreshold_out out;
117 } NvRmDfsSetLowVoltageThreshold_params;
118
119 typedef struct NvRmDfsGetLowVoltageThreshold_in_t
120 {
121 NvU32 package_;
122 NvU32 function_;
123 NvRmDeviceHandle hRmDeviceHandle;
124 NvRmDfsVoltageRailId RailId;
125 } NV_ALIGN(4) NvRmDfsGetLowVoltageThreshold_in;
126
127 typedef struct NvRmDfsGetLowVoltageThreshold_inout_t
128 {
129 NvU32 dummy_;
130 } NV_ALIGN(4) NvRmDfsGetLowVoltageThreshold_inout;
131
132 typedef struct NvRmDfsGetLowVoltageThreshold_out_t
133 {
134 NvRmMilliVolts pLowMv;
135 NvRmMilliVolts pPresentMv;
136 } NV_ALIGN(4) NvRmDfsGetLowVoltageThreshold_out;
137
138 typedef struct NvRmDfsGetLowVoltageThreshold_params_t
139 {
140 NvRmDfsGetLowVoltageThreshold_in in;
141 NvRmDfsGetLowVoltageThreshold_inout inout;
142 NvRmDfsGetLowVoltageThreshold_out out;
143 } NvRmDfsGetLowVoltageThreshold_params;
144
145 typedef struct NvRmDfsLogBusyGetEntry_in_t
146 {
147 NvU32 package_;
148 NvU32 function_;
149 NvRmDeviceHandle hRmDeviceHandle;
150 NvU32 EntryIndex;
151 } NV_ALIGN(4) NvRmDfsLogBusyGetEntry_in;
152
153 typedef struct NvRmDfsLogBusyGetEntry_inout_t
154 {
155 NvU32 dummy_;
156 } NV_ALIGN(4) NvRmDfsLogBusyGetEntry_inout;
157
158 typedef struct NvRmDfsLogBusyGetEntry_out_t
159 {
160 NvError ret_;
161 NvU32 pSampleIndex;
162 NvU32 pClientId;
163 NvU32 pClientTag;
164 NvRmDfsBusyHint pBusyHint;
165 } NV_ALIGN(4) NvRmDfsLogBusyGetEntry_out;
166
167 typedef struct NvRmDfsLogBusyGetEntry_params_t
168 {
169 NvRmDfsLogBusyGetEntry_in in;
170 NvRmDfsLogBusyGetEntry_inout inout;
171 NvRmDfsLogBusyGetEntry_out out;
172 } NvRmDfsLogBusyGetEntry_params;
173
174 typedef struct NvRmDfsLogStarvationGetEntry_in_t
175 {
176 NvU32 package_;
177 NvU32 function_;
178 NvRmDeviceHandle hRmDeviceHandle;
179 NvU32 EntryIndex;
180 } NV_ALIGN(4) NvRmDfsLogStarvationGetEntry_in;
181
182 typedef struct NvRmDfsLogStarvationGetEntry_inout_t
183 {
184 NvU32 dummy_;
185 } NV_ALIGN(4) NvRmDfsLogStarvationGetEntry_inout;
186
187 typedef struct NvRmDfsLogStarvationGetEntry_out_t
188 {
189 NvError ret_;
190 NvU32 pSampleIndex;
191 NvU32 pClientId;
192 NvU32 pClientTag;
193 NvRmDfsStarvationHint pStarvationHint;
194 } NV_ALIGN(4) NvRmDfsLogStarvationGetEntry_out;
195
196 typedef struct NvRmDfsLogStarvationGetEntry_params_t
197 {
198 NvRmDfsLogStarvationGetEntry_in in;
199 NvRmDfsLogStarvationGetEntry_inout inout;
200 NvRmDfsLogStarvationGetEntry_out out;
201 } NvRmDfsLogStarvationGetEntry_params;
202
203 typedef struct NvRmDfsLogActivityGetEntry_in_t
204 {
205 NvU32 package_;
206 NvU32 function_;
207 NvRmDeviceHandle hRmDeviceHandle;
208 NvU32 EntryIndex;
209 NvU32 LogDomainsCount;
210 NvU32 * pActiveCyclesList;
211 NvRmFreqKHz * pAveragesList;
212 NvRmFreqKHz * pFrequenciesList;
213 } NV_ALIGN(4) NvRmDfsLogActivityGetEntry_in;
214
215 typedef struct NvRmDfsLogActivityGetEntry_inout_t
216 {
217 NvU32 dummy_;
218 } NV_ALIGN(4) NvRmDfsLogActivityGetEntry_inout;
219
220 typedef struct NvRmDfsLogActivityGetEntry_out_t
221 {
222 NvError ret_;
223 NvU32 pIntervalMs;
224 NvU32 pLp2TimeMs;
225 } NV_ALIGN(4) NvRmDfsLogActivityGetEntry_out;
226
227 typedef struct NvRmDfsLogActivityGetEntry_params_t
228 {
229 NvRmDfsLogActivityGetEntry_in in;
230 NvRmDfsLogActivityGetEntry_inout inout;
231 NvRmDfsLogActivityGetEntry_out out;
232 } NvRmDfsLogActivityGetEntry_params;
233
234 typedef struct NvRmDfsLogGetMeanFrequencies_in_t
235 {
236 NvU32 package_;
237 NvU32 function_;
238 NvRmDeviceHandle hRmDeviceHandle;
239 NvU32 LogMeanFreqListCount;
240 NvRmFreqKHz * pLogMeanFreqList;
241 } NV_ALIGN(4) NvRmDfsLogGetMeanFrequencies_in;
242
243 typedef struct NvRmDfsLogGetMeanFrequencies_inout_t
244 {
245 NvU32 dummy_;
246 } NV_ALIGN(4) NvRmDfsLogGetMeanFrequencies_inout;
247
248 typedef struct NvRmDfsLogGetMeanFrequencies_out_t
249 {
250 NvError ret_;
251 NvU32 pLogLp2TimeMs;
252 NvU32 pLogLp2Entries;
253 } NV_ALIGN(4) NvRmDfsLogGetMeanFrequencies_out;
254
255 typedef struct NvRmDfsLogGetMeanFrequencies_params_t
256 {
257 NvRmDfsLogGetMeanFrequencies_in in;
258 NvRmDfsLogGetMeanFrequencies_inout inout;
259 NvRmDfsLogGetMeanFrequencies_out out;
260 } NvRmDfsLogGetMeanFrequencies_params;
261
262 typedef struct NvRmDfsLogStart_in_t
263 {
264 NvU32 package_;
265 NvU32 function_;
266 NvRmDeviceHandle hRmDeviceHandle;
267 } NV_ALIGN(4) NvRmDfsLogStart_in;
268
269 typedef struct NvRmDfsLogStart_inout_t
270 {
271 NvU32 dummy_;
272 } NV_ALIGN(4) NvRmDfsLogStart_inout;
273
274 typedef struct NvRmDfsLogStart_out_t
275 {
276 NvU32 dummy_;
277 } NV_ALIGN(4) NvRmDfsLogStart_out;
278
279 typedef struct NvRmDfsLogStart_params_t
280 {
281 NvRmDfsLogStart_in in;
282 NvRmDfsLogStart_inout inout;
283 NvRmDfsLogStart_out out;
284 } NvRmDfsLogStart_params;
285
286 typedef struct NvRmDfsGetProfileData_in_t
287 {
288 NvU32 package_;
289 NvU32 function_;
290 NvRmDeviceHandle hRmDeviceHandle;
291 NvU32 DfsProfileCount;
292 NvU32 * pSamplesNoList;
293 NvU32 * pProfileTimeUsList;
294 } NV_ALIGN(4) NvRmDfsGetProfileData_in;
295
296 typedef struct NvRmDfsGetProfileData_inout_t
297 {
298 NvU32 dummy_;
299 } NV_ALIGN(4) NvRmDfsGetProfileData_inout;
300
301 typedef struct NvRmDfsGetProfileData_out_t
302 {
303 NvError ret_;
304 NvU32 pDfsPeriodUs;
305 } NV_ALIGN(4) NvRmDfsGetProfileData_out;
306
307 typedef struct NvRmDfsGetProfileData_params_t
308 {
309 NvRmDfsGetProfileData_in in;
310 NvRmDfsGetProfileData_inout inout;
311 NvRmDfsGetProfileData_out out;
312 } NvRmDfsGetProfileData_params;
313
314 typedef struct NvRmDfsSetAvHighCorner_in_t
315 {
316 NvU32 package_;
317 NvU32 function_;
318 NvRmDeviceHandle hRmDeviceHandle;
319 NvRmFreqKHz DfsSystemHighKHz;
320 NvRmFreqKHz DfsAvpHighKHz;
321 NvRmFreqKHz DfsVpipeHighKHz;
322 } NV_ALIGN(4) NvRmDfsSetAvHighCorner_in;
323
324 typedef struct NvRmDfsSetAvHighCorner_inout_t
325 {
326 NvU32 dummy_;
327 } NV_ALIGN(4) NvRmDfsSetAvHighCorner_inout;
328
329 typedef struct NvRmDfsSetAvHighCorner_out_t
330 {
331 NvError ret_;
332 } NV_ALIGN(4) NvRmDfsSetAvHighCorner_out;
333
334 typedef struct NvRmDfsSetAvHighCorner_params_t
335 {
336 NvRmDfsSetAvHighCorner_in in;
337 NvRmDfsSetAvHighCorner_inout inout;
338 NvRmDfsSetAvHighCorner_out out;
339 } NvRmDfsSetAvHighCorner_params;
340
341 typedef struct NvRmDfsSetCpuEmcHighCorner_in_t
342 {
343 NvU32 package_;
344 NvU32 function_;
345 NvRmDeviceHandle hRmDeviceHandle;
346 NvRmFreqKHz DfsCpuHighKHz;
347 NvRmFreqKHz DfsEmcHighKHz;
348 } NV_ALIGN(4) NvRmDfsSetCpuEmcHighCorner_in;
349
350 typedef struct NvRmDfsSetCpuEmcHighCorner_inout_t
351 {
352 NvU32 dummy_;
353 } NV_ALIGN(4) NvRmDfsSetCpuEmcHighCorner_inout;
354
355 typedef struct NvRmDfsSetCpuEmcHighCorner_out_t
356 {
357 NvError ret_;
358 } NV_ALIGN(4) NvRmDfsSetCpuEmcHighCorner_out;
359
360 typedef struct NvRmDfsSetCpuEmcHighCorner_params_t
361 {
362 NvRmDfsSetCpuEmcHighCorner_in in;
363 NvRmDfsSetCpuEmcHighCorner_inout inout;
364 NvRmDfsSetCpuEmcHighCorner_out out;
365 } NvRmDfsSetCpuEmcHighCorner_params;
366
367 typedef struct NvRmDfsSetEmcEnvelope_in_t
368 {
369 NvU32 package_;
370 NvU32 function_;
371 NvRmDeviceHandle hRmDeviceHandle;
372 NvRmFreqKHz DfsEmcLowCornerKHz;
373 NvRmFreqKHz DfsEmcHighCornerKHz;
374 } NV_ALIGN(4) NvRmDfsSetEmcEnvelope_in;
375
376 typedef struct NvRmDfsSetEmcEnvelope_inout_t
377 {
378 NvU32 dummy_;
379 } NV_ALIGN(4) NvRmDfsSetEmcEnvelope_inout;
380
381 typedef struct NvRmDfsSetEmcEnvelope_out_t
382 {
383 NvError ret_;
384 } NV_ALIGN(4) NvRmDfsSetEmcEnvelope_out;
385
386 typedef struct NvRmDfsSetEmcEnvelope_params_t
387 {
388 NvRmDfsSetEmcEnvelope_in in;
389 NvRmDfsSetEmcEnvelope_inout inout;
390 NvRmDfsSetEmcEnvelope_out out;
391 } NvRmDfsSetEmcEnvelope_params;
392
393 typedef struct NvRmDfsSetCpuEnvelope_in_t
394 {
395 NvU32 package_;
396 NvU32 function_;
397 NvRmDeviceHandle hRmDeviceHandle;
398 NvRmFreqKHz DfsCpuLowCornerKHz;
399 NvRmFreqKHz DfsCpuHighCornerKHz;
400 } NV_ALIGN(4) NvRmDfsSetCpuEnvelope_in;
401
402 typedef struct NvRmDfsSetCpuEnvelope_inout_t
403 {
404 NvU32 dummy_;
405 } NV_ALIGN(4) NvRmDfsSetCpuEnvelope_inout;
406
407 typedef struct NvRmDfsSetCpuEnvelope_out_t
408 {
409 NvError ret_;
410 } NV_ALIGN(4) NvRmDfsSetCpuEnvelope_out;
411
412 typedef struct NvRmDfsSetCpuEnvelope_params_t
413 {
414 NvRmDfsSetCpuEnvelope_in in;
415 NvRmDfsSetCpuEnvelope_inout inout;
416 NvRmDfsSetCpuEnvelope_out out;
417 } NvRmDfsSetCpuEnvelope_params;
418
419 typedef struct NvRmDfsSetTarget_in_t
420 {
421 NvU32 package_;
422 NvU32 function_;
423 NvRmDeviceHandle hRmDeviceHandle;
424 NvU32 DfsFreqListCount;
425 NvRmFreqKHz * pDfsTargetFreqList;
426 } NV_ALIGN(4) NvRmDfsSetTarget_in;
427
428 typedef struct NvRmDfsSetTarget_inout_t
429 {
430 NvU32 dummy_;
431 } NV_ALIGN(4) NvRmDfsSetTarget_inout;
432
433 typedef struct NvRmDfsSetTarget_out_t
434 {
435 NvError ret_;
436 } NV_ALIGN(4) NvRmDfsSetTarget_out;
437
438 typedef struct NvRmDfsSetTarget_params_t
439 {
440 NvRmDfsSetTarget_in in;
441 NvRmDfsSetTarget_inout inout;
442 NvRmDfsSetTarget_out out;
443 } NvRmDfsSetTarget_params;
444
445 typedef struct NvRmDfsSetLowCorner_in_t
446 {
447 NvU32 package_;
448 NvU32 function_;
449 NvRmDeviceHandle hRmDeviceHandle;
450 NvU32 DfsFreqListCount;
451 NvRmFreqKHz * pDfsLowFreqList;
452 } NV_ALIGN(4) NvRmDfsSetLowCorner_in;
453
454 typedef struct NvRmDfsSetLowCorner_inout_t
455 {
456 NvU32 dummy_;
457 } NV_ALIGN(4) NvRmDfsSetLowCorner_inout;
458
459 typedef struct NvRmDfsSetLowCorner_out_t
460 {
461 NvError ret_;
462 } NV_ALIGN(4) NvRmDfsSetLowCorner_out;
463
464 typedef struct NvRmDfsSetLowCorner_params_t
465 {
466 NvRmDfsSetLowCorner_in in;
467 NvRmDfsSetLowCorner_inout inout;
468 NvRmDfsSetLowCorner_out out;
469 } NvRmDfsSetLowCorner_params;
470
471 typedef struct NvRmDfsSetState_in_t
472 {
473 NvU32 package_;
474 NvU32 function_;
475 NvRmDeviceHandle hRmDeviceHandle;
476 NvRmDfsRunState NewDfsRunState;
477 } NV_ALIGN(4) NvRmDfsSetState_in;
478
479 typedef struct NvRmDfsSetState_inout_t
480 {
481 NvU32 dummy_;
482 } NV_ALIGN(4) NvRmDfsSetState_inout;
483
484 typedef struct NvRmDfsSetState_out_t
485 {
486 NvError ret_;
487 } NV_ALIGN(4) NvRmDfsSetState_out;
488
489 typedef struct NvRmDfsSetState_params_t
490 {
491 NvRmDfsSetState_in in;
492 NvRmDfsSetState_inout inout;
493 NvRmDfsSetState_out out;
494 } NvRmDfsSetState_params;
495
496 typedef struct NvRmDfsGetClockUtilization_in_t
497 {
498 NvU32 package_;
499 NvU32 function_;
500 NvRmDeviceHandle hRmDeviceHandle;
501 NvRmDfsClockId ClockId;
502 } NV_ALIGN(4) NvRmDfsGetClockUtilization_in;
503
504 typedef struct NvRmDfsGetClockUtilization_inout_t
505 {
506 NvU32 dummy_;
507 } NV_ALIGN(4) NvRmDfsGetClockUtilization_inout;
508
509 typedef struct NvRmDfsGetClockUtilization_out_t
510 {
511 NvError ret_;
512 NvRmDfsClockUsage pClockUsage;
513 } NV_ALIGN(4) NvRmDfsGetClockUtilization_out;
514
515 typedef struct NvRmDfsGetClockUtilization_params_t
516 {
517 NvRmDfsGetClockUtilization_in in;
518 NvRmDfsGetClockUtilization_inout inout;
519 NvRmDfsGetClockUtilization_out out;
520 } NvRmDfsGetClockUtilization_params;
521
522 typedef struct NvRmDfsGetState_in_t
523 {
524 NvU32 package_;
525 NvU32 function_;
526 NvRmDeviceHandle hRmDeviceHandle;
527 } NV_ALIGN(4) NvRmDfsGetState_in;
528
529 typedef struct NvRmDfsGetState_inout_t
530 {
531 NvU32 dummy_;
532 } NV_ALIGN(4) NvRmDfsGetState_inout;
533
534 typedef struct NvRmDfsGetState_out_t
535 {
536 NvRmDfsRunState ret_;
537 } NV_ALIGN(4) NvRmDfsGetState_out;
538
539 typedef struct NvRmDfsGetState_params_t
540 {
541 NvRmDfsGetState_in in;
542 NvRmDfsGetState_inout inout;
543 NvRmDfsGetState_out out;
544 } NvRmDfsGetState_params;
545
546 typedef struct NvRmPowerActivityHint_in_t
547 {
548 NvU32 package_;
549 NvU32 function_;
550 NvRmDeviceHandle hRmDeviceHandle;
551 NvRmModuleID ModuleId;
552 NvU32 ClientId;
553 NvU32 ActivityDurationMs;
554 } NV_ALIGN(4) NvRmPowerActivityHint_in;
555
556 typedef struct NvRmPowerActivityHint_inout_t
557 {
558 NvU32 dummy_;
559 } NV_ALIGN(4) NvRmPowerActivityHint_inout;
560
561 typedef struct NvRmPowerActivityHint_out_t
562 {
563 NvError ret_;
564 } NV_ALIGN(4) NvRmPowerActivityHint_out;
565
566 typedef struct NvRmPowerActivityHint_params_t
567 {
568 NvRmPowerActivityHint_in in;
569 NvRmPowerActivityHint_inout inout;
570 NvRmPowerActivityHint_out out;
571 } NvRmPowerActivityHint_params;
572
573 typedef struct NvRmPowerStarvationHintMulti_in_t
574 {
575 NvU32 package_;
576 NvU32 function_;
577 NvRmDeviceHandle hRmDeviceHandle;
578 NvU32 ClientId;
579 NvRmDfsStarvationHint * pMultiHint;
580 NvU32 NumHints;
581 } NV_ALIGN(4) NvRmPowerStarvationHintMulti_in;
582
583 typedef struct NvRmPowerStarvationHintMulti_inout_t
584 {
585 NvU32 dummy_;
586 } NV_ALIGN(4) NvRmPowerStarvationHintMulti_inout;
587
588 typedef struct NvRmPowerStarvationHintMulti_out_t
589 {
590 NvError ret_;
591 } NV_ALIGN(4) NvRmPowerStarvationHintMulti_out;
592
593 typedef struct NvRmPowerStarvationHintMulti_params_t
594 {
595 NvRmPowerStarvationHintMulti_in in;
596 NvRmPowerStarvationHintMulti_inout inout;
597 NvRmPowerStarvationHintMulti_out out;
598 } NvRmPowerStarvationHintMulti_params;
599
600 typedef struct NvRmPowerStarvationHint_in_t
601 {
602 NvU32 package_;
603 NvU32 function_;
604 NvRmDeviceHandle hRmDeviceHandle;
605 NvRmDfsClockId ClockId;
606 NvU32 ClientId;
607 NvBool Starving;
608 } NV_ALIGN(4) NvRmPowerStarvationHint_in;
609
610 typedef struct NvRmPowerStarvationHint_inout_t
611 {
612 NvU32 dummy_;
613 } NV_ALIGN(4) NvRmPowerStarvationHint_inout;
614
615 typedef struct NvRmPowerStarvationHint_out_t
616 {
617 NvError ret_;
618 } NV_ALIGN(4) NvRmPowerStarvationHint_out;
619
620 typedef struct NvRmPowerStarvationHint_params_t
621 {
622 NvRmPowerStarvationHint_in in;
623 NvRmPowerStarvationHint_inout inout;
624 NvRmPowerStarvationHint_out out;
625 } NvRmPowerStarvationHint_params;
626
627 typedef struct NvRmPowerBusyHintMulti_in_t
628 {
629 NvU32 package_;
630 NvU32 function_;
631 NvRmDeviceHandle hRmDeviceHandle;
632 NvU32 ClientId;
633 NvRmDfsBusyHint * pMultiHint;
634 NvU32 NumHints;
635 NvRmDfsBusyHintSyncMode Mode;
636 } NV_ALIGN(4) NvRmPowerBusyHintMulti_in;
637
638 typedef struct NvRmPowerBusyHintMulti_inout_t
639 {
640 NvU32 dummy_;
641 } NV_ALIGN(4) NvRmPowerBusyHintMulti_inout;
642
643 typedef struct NvRmPowerBusyHintMulti_out_t
644 {
645 NvError ret_;
646 } NV_ALIGN(4) NvRmPowerBusyHintMulti_out;
647
648 typedef struct NvRmPowerBusyHintMulti_params_t
649 {
650 NvRmPowerBusyHintMulti_in in;
651 NvRmPowerBusyHintMulti_inout inout;
652 NvRmPowerBusyHintMulti_out out;
653 } NvRmPowerBusyHintMulti_params;
654
655 typedef struct NvRmPowerBusyHint_in_t
656 {
657 NvU32 package_;
658 NvU32 function_;
659 NvRmDeviceHandle hRmDeviceHandle;
660 NvRmDfsClockId ClockId;
661 NvU32 ClientId;
662 NvU32 BoostDurationMs;
663 NvRmFreqKHz BoostKHz;
664 } NV_ALIGN(4) NvRmPowerBusyHint_in;
665
666 typedef struct NvRmPowerBusyHint_inout_t
667 {
668 NvU32 dummy_;
669 } NV_ALIGN(4) NvRmPowerBusyHint_inout;
670
671 typedef struct NvRmPowerBusyHint_out_t
672 {
673 NvError ret_;
674 } NV_ALIGN(4) NvRmPowerBusyHint_out;
675
676 typedef struct NvRmPowerBusyHint_params_t
677 {
678 NvRmPowerBusyHint_in in;
679 NvRmPowerBusyHint_inout inout;
680 NvRmPowerBusyHint_out out;
681 } NvRmPowerBusyHint_params;
682
683 typedef struct NvRmListPowerAwareModules_in_t
684 {
685 NvU32 package_;
686 NvU32 function_;
687 NvRmDeviceHandle hRmDeviceHandle;
688 NvRmModuleID * pIdList;
689 NvBool * pActiveList;
690 } NV_ALIGN(4) NvRmListPowerAwareModules_in;
691
692 typedef struct NvRmListPowerAwareModules_inout_t
693 {
694 NvU32 pListSize;
695 } NV_ALIGN(4) NvRmListPowerAwareModules_inout;
696
697 typedef struct NvRmListPowerAwareModules_out_t
698 {
699 NvU32 dummy_;
700 } NV_ALIGN(4) NvRmListPowerAwareModules_out;
701
702 typedef struct NvRmListPowerAwareModules_params_t
703 {
704 NvRmListPowerAwareModules_in in;
705 NvRmListPowerAwareModules_inout inout;
706 NvRmListPowerAwareModules_out out;
707 } NvRmListPowerAwareModules_params;
708
709 typedef struct NvRmPowerVoltageControl_in_t
710 {
711 NvU32 package_;
712 NvU32 function_;
713 NvRmDeviceHandle hRmDeviceHandle;
714 NvRmModuleID ModuleId;
715 NvU32 ClientId;
716 NvRmMilliVolts MinVolts;
717 NvRmMilliVolts MaxVolts;
718 NvRmMilliVolts * PrefVoltageList;
719 NvU32 PrefVoltageListCount;
720 } NV_ALIGN(4) NvRmPowerVoltageControl_in;
721
722 typedef struct NvRmPowerVoltageControl_inout_t
723 {
724 NvU32 dummy_;
725 } NV_ALIGN(4) NvRmPowerVoltageControl_inout;
726
727 typedef struct NvRmPowerVoltageControl_out_t
728 {
729 NvError ret_;
730 NvRmMilliVolts CurrentVolts;
731 } NV_ALIGN(4) NvRmPowerVoltageControl_out;
732
733 typedef struct NvRmPowerVoltageControl_params_t
734 {
735 NvRmPowerVoltageControl_in in;
736 NvRmPowerVoltageControl_inout inout;
737 NvRmPowerVoltageControl_out out;
738 } NvRmPowerVoltageControl_params;
739
740 typedef struct NvRmPowerModuleClockControl_in_t
741 {
742 NvU32 package_;
743 NvU32 function_;
744 NvRmDeviceHandle hRmDeviceHandle;
745 NvRmModuleID ModuleId;
746 NvU32 ClientId;
747 NvBool Enable;
748 } NV_ALIGN(4) NvRmPowerModuleClockControl_in;
749
750 typedef struct NvRmPowerModuleClockControl_inout_t
751 {
752 NvU32 dummy_;
753 } NV_ALIGN(4) NvRmPowerModuleClockControl_inout;
754
755 typedef struct NvRmPowerModuleClockControl_out_t
756 {
757 NvError ret_;
758 } NV_ALIGN(4) NvRmPowerModuleClockControl_out;
759
760 typedef struct NvRmPowerModuleClockControl_params_t
761 {
762 NvRmPowerModuleClockControl_in in;
763 NvRmPowerModuleClockControl_inout inout;
764 NvRmPowerModuleClockControl_out out;
765 } NvRmPowerModuleClockControl_params;
766
767 typedef struct NvRmPowerModuleClockConfig_in_t
768 {
769 NvU32 package_;
770 NvU32 function_;
771 NvRmDeviceHandle hRmDeviceHandle;
772 NvRmModuleID ModuleId;
773 NvU32 ClientId;
774 NvRmFreqKHz MinFreq;
775 NvRmFreqKHz MaxFreq;
776 NvRmFreqKHz * PrefFreqList;
777 NvU32 PrefFreqListCount;
778 NvU32 flags;
779 } NV_ALIGN(4) NvRmPowerModuleClockConfig_in;
780
781 typedef struct NvRmPowerModuleClockConfig_inout_t
782 {
783 NvU32 dummy_;
784 } NV_ALIGN(4) NvRmPowerModuleClockConfig_inout;
785
786 typedef struct NvRmPowerModuleClockConfig_out_t
787 {
788 NvError ret_;
789 NvRmFreqKHz CurrentFreq;
790 } NV_ALIGN(4) NvRmPowerModuleClockConfig_out;
791
792 typedef struct NvRmPowerModuleClockConfig_params_t
793 {
794 NvRmPowerModuleClockConfig_in in;
795 NvRmPowerModuleClockConfig_inout inout;
796 NvRmPowerModuleClockConfig_out out;
797 } NvRmPowerModuleClockConfig_params;
798
799 typedef struct NvRmPowerModuleGetMaxFrequency_in_t
800 {
801 NvU32 package_;
802 NvU32 function_;
803 NvRmDeviceHandle hRmDeviceHandle;
804 NvRmModuleID ModuleId;
805 } NV_ALIGN(4) NvRmPowerModuleGetMaxFrequency_in;
806
807 typedef struct NvRmPowerModuleGetMaxFrequency_inout_t
808 {
809 NvU32 dummy_;
810 } NV_ALIGN(4) NvRmPowerModuleGetMaxFrequency_inout;
811
812 typedef struct NvRmPowerModuleGetMaxFrequency_out_t
813 {
814 NvRmFreqKHz ret_;
815 } NV_ALIGN(4) NvRmPowerModuleGetMaxFrequency_out;
816
817 typedef struct NvRmPowerModuleGetMaxFrequency_params_t
818 {
819 NvRmPowerModuleGetMaxFrequency_in in;
820 NvRmPowerModuleGetMaxFrequency_inout inout;
821 NvRmPowerModuleGetMaxFrequency_out out;
822 } NvRmPowerModuleGetMaxFrequency_params;
823
824 typedef struct NvRmPowerGetPrimaryFrequency_in_t
825 {
826 NvU32 package_;
827 NvU32 function_;
828 NvRmDeviceHandle hRmDeviceHandle;
829 } NV_ALIGN(4) NvRmPowerGetPrimaryFrequency_in;
830
831 typedef struct NvRmPowerGetPrimaryFrequency_inout_t
832 {
833 NvU32 dummy_;
834 } NV_ALIGN(4) NvRmPowerGetPrimaryFrequency_inout;
835
836 typedef struct NvRmPowerGetPrimaryFrequency_out_t
837 {
838 NvRmFreqKHz ret_;
839 } NV_ALIGN(4) NvRmPowerGetPrimaryFrequency_out;
840
841 typedef struct NvRmPowerGetPrimaryFrequency_params_t
842 {
843 NvRmPowerGetPrimaryFrequency_in in;
844 NvRmPowerGetPrimaryFrequency_inout inout;
845 NvRmPowerGetPrimaryFrequency_out out;
846 } NvRmPowerGetPrimaryFrequency_params;
847
848 typedef struct NvRmPowerGetState_in_t
849 {
850 NvU32 package_;
851 NvU32 function_;
852 NvRmDeviceHandle hRmDeviceHandle;
853 } NV_ALIGN(4) NvRmPowerGetState_in;
854
855 typedef struct NvRmPowerGetState_inout_t
856 {
857 NvU32 dummy_;
858 } NV_ALIGN(4) NvRmPowerGetState_inout;
859
860 typedef struct NvRmPowerGetState_out_t
861 {
862 NvError ret_;
863 NvRmPowerState pState;
864 } NV_ALIGN(4) NvRmPowerGetState_out;
865
866 typedef struct NvRmPowerGetState_params_t
867 {
868 NvRmPowerGetState_in in;
869 NvRmPowerGetState_inout inout;
870 NvRmPowerGetState_out out;
871 } NvRmPowerGetState_params;
872
873 typedef struct NvRmPowerEventNotify_in_t
874 {
875 NvU32 package_;
876 NvU32 function_;
877 NvRmDeviceHandle hRmDeviceHandle;
878 NvRmPowerEvent Event;
879 } NV_ALIGN(4) NvRmPowerEventNotify_in;
880
881 typedef struct NvRmPowerEventNotify_inout_t
882 {
883 NvU32 dummy_;
884 } NV_ALIGN(4) NvRmPowerEventNotify_inout;
885
886 typedef struct NvRmPowerEventNotify_out_t
887 {
888 NvU32 dummy_;
889 } NV_ALIGN(4) NvRmPowerEventNotify_out;
890
891 typedef struct NvRmPowerEventNotify_params_t
892 {
893 NvRmPowerEventNotify_in in;
894 NvRmPowerEventNotify_inout inout;
895 NvRmPowerEventNotify_out out;
896 } NvRmPowerEventNotify_params;
897
898 typedef struct NvRmPowerGetEvent_in_t
899 {
900 NvU32 package_;
901 NvU32 function_;
902 NvRmDeviceHandle hRmDeviceHandle;
903 NvU32 ClientId;
904 } NV_ALIGN(4) NvRmPowerGetEvent_in;
905
906 typedef struct NvRmPowerGetEvent_inout_t
907 {
908 NvU32 dummy_;
909 } NV_ALIGN(4) NvRmPowerGetEvent_inout;
910
911 typedef struct NvRmPowerGetEvent_out_t
912 {
913 NvError ret_;
914 NvRmPowerEvent pEvent;
915 } NV_ALIGN(4) NvRmPowerGetEvent_out;
916
917 typedef struct NvRmPowerGetEvent_params_t
918 {
919 NvRmPowerGetEvent_in in;
920 NvRmPowerGetEvent_inout inout;
921 NvRmPowerGetEvent_out out;
922 } NvRmPowerGetEvent_params;
923
924 typedef struct NvRmPowerUnRegister_in_t
925 {
926 NvU32 package_;
927 NvU32 function_;
928 NvRmDeviceHandle hRmDeviceHandle;
929 NvU32 ClientId;
930 } NV_ALIGN(4) NvRmPowerUnRegister_in;
931
932 typedef struct NvRmPowerUnRegister_inout_t
933 {
934 NvU32 dummy_;
935 } NV_ALIGN(4) NvRmPowerUnRegister_inout;
936
937 typedef struct NvRmPowerUnRegister_out_t
938 {
939 NvU32 dummy_;
940 } NV_ALIGN(4) NvRmPowerUnRegister_out;
941
942 typedef struct NvRmPowerUnRegister_params_t
943 {
944 NvRmPowerUnRegister_in in;
945 NvRmPowerUnRegister_inout inout;
946 NvRmPowerUnRegister_out out;
947 } NvRmPowerUnRegister_params;
948
949 typedef struct NvRmPowerRegister_in_t
950 {
951 NvU32 package_;
952 NvU32 function_;
953 NvRmDeviceHandle hRmDeviceHandle;
954 NvOsSemaphoreHandle hEventSemaphore;
955 } NV_ALIGN(4) NvRmPowerRegister_in;
956
957 typedef struct NvRmPowerRegister_inout_t
958 {
959 NvU32 pClientId;
960 } NV_ALIGN(4) NvRmPowerRegister_inout;
961
962 typedef struct NvRmPowerRegister_out_t
963 {
964 NvError ret_;
965 } NV_ALIGN(4) NvRmPowerRegister_out;
966
967 typedef struct NvRmPowerRegister_params_t
968 {
969 NvRmPowerRegister_in in;
970 NvRmPowerRegister_inout inout;
971 NvRmPowerRegister_out out;
972 } NvRmPowerRegister_params;
973
974 static NvError NvRmKernelPowerResume_dispatch_( void *InBuffer, NvU32 InSize, vo id *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
975 {
976 NvError err_ = NvSuccess;
977 NvRmKernelPowerResume_in *p_in;
978 NvRmKernelPowerResume_out *p_out;
979
980 p_in = (NvRmKernelPowerResume_in *)InBuffer;
981 p_out = (NvRmKernelPowerResume_out *)((NvU8 *)OutBuffer + OFFSET(NvRmKernelP owerResume_params, out) - OFFSET(NvRmKernelPowerResume_params, inout));
982
983
984 p_out->ret_ = NvRmKernelPowerResume( p_in->hRmDeviceHandle );
985
986 return err_;
987 }
988
989 static NvError NvRmKernelPowerSuspend_dispatch_( void *InBuffer, NvU32 InSize, v oid *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
990 {
991 NvError err_ = NvSuccess;
992 NvRmKernelPowerSuspend_in *p_in;
993 NvRmKernelPowerSuspend_out *p_out;
994
995 p_in = (NvRmKernelPowerSuspend_in *)InBuffer;
996 p_out = (NvRmKernelPowerSuspend_out *)((NvU8 *)OutBuffer + OFFSET(NvRmKernel PowerSuspend_params, out) - OFFSET(NvRmKernelPowerSuspend_params, inout));
997
998
999 p_out->ret_ = NvRmKernelPowerSuspend( p_in->hRmDeviceHandle );
1000
1001 return err_;
1002 }
1003
1004 static NvError NvRmDfsSetLowVoltageThreshold_dispatch_( void *InBuffer, NvU32 In Size, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1005 {
1006 NvError err_ = NvSuccess;
1007 NvRmDfsSetLowVoltageThreshold_in *p_in;
1008
1009 p_in = (NvRmDfsSetLowVoltageThreshold_in *)InBuffer;
1010
1011
1012 NvRmDfsSetLowVoltageThreshold( p_in->hRmDeviceHandle, p_in->RailId, p_in->Lo wMv );
1013
1014 return err_;
1015 }
1016
1017 static NvError NvRmDfsGetLowVoltageThreshold_dispatch_( void *InBuffer, NvU32 In Size, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1018 {
1019 NvError err_ = NvSuccess;
1020 NvRmDfsGetLowVoltageThreshold_in *p_in;
1021 NvRmDfsGetLowVoltageThreshold_out *p_out;
1022
1023 p_in = (NvRmDfsGetLowVoltageThreshold_in *)InBuffer;
1024 p_out = (NvRmDfsGetLowVoltageThreshold_out *)((NvU8 *)OutBuffer + OFFSET(NvR mDfsGetLowVoltageThreshold_params, out) - OFFSET(NvRmDfsGetLowVoltageThreshold_p arams, inout));
1025
1026
1027 NvRmDfsGetLowVoltageThreshold( p_in->hRmDeviceHandle, p_in->RailId, &p_out-> pLowMv, &p_out->pPresentMv );
1028
1029 return err_;
1030 }
1031
1032 static NvError NvRmDfsLogBusyGetEntry_dispatch_( void *InBuffer, NvU32 InSize, v oid *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1033 {
1034 NvError err_ = NvSuccess;
1035 NvRmDfsLogBusyGetEntry_in *p_in;
1036 NvRmDfsLogBusyGetEntry_out *p_out;
1037
1038 p_in = (NvRmDfsLogBusyGetEntry_in *)InBuffer;
1039 p_out = (NvRmDfsLogBusyGetEntry_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsLog BusyGetEntry_params, out) - OFFSET(NvRmDfsLogBusyGetEntry_params, inout));
1040
1041
1042 p_out->ret_ = NvRmDfsLogBusyGetEntry( p_in->hRmDeviceHandle, p_in->EntryInde x, &p_out->pSampleIndex, &p_out->pClientId, &p_out->pClientTag, &p_out->pBusyHin t );
1043
1044 return err_;
1045 }
1046
1047 static NvError NvRmDfsLogStarvationGetEntry_dispatch_( void *InBuffer, NvU32 InS ize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1048 {
1049 NvError err_ = NvSuccess;
1050 NvRmDfsLogStarvationGetEntry_in *p_in;
1051 NvRmDfsLogStarvationGetEntry_out *p_out;
1052
1053 p_in = (NvRmDfsLogStarvationGetEntry_in *)InBuffer;
1054 p_out = (NvRmDfsLogStarvationGetEntry_out *)((NvU8 *)OutBuffer + OFFSET(NvRm DfsLogStarvationGetEntry_params, out) - OFFSET(NvRmDfsLogStarvationGetEntry_para ms, inout));
1055
1056
1057 p_out->ret_ = NvRmDfsLogStarvationGetEntry( p_in->hRmDeviceHandle, p_in->Ent ryIndex, &p_out->pSampleIndex, &p_out->pClientId, &p_out->pClientTag, &p_out->pS tarvationHint );
1058
1059 return err_;
1060 }
1061
1062 static NvError NvRmDfsLogActivityGetEntry_dispatch_( void *InBuffer, NvU32 InSiz e, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1063 {
1064 NvError err_ = NvSuccess;
1065 NvRmDfsLogActivityGetEntry_in *p_in;
1066 NvRmDfsLogActivityGetEntry_out *p_out;
1067 NvU32 *pActiveCyclesList = NULL;
1068 NvRmFreqKHz *pAveragesList = NULL;
1069 NvRmFreqKHz *pFrequenciesList = NULL;
1070
1071 p_in = (NvRmDfsLogActivityGetEntry_in *)InBuffer;
1072 p_out = (NvRmDfsLogActivityGetEntry_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDf sLogActivityGetEntry_params, out) - OFFSET(NvRmDfsLogActivityGetEntry_params, in out));
1073
1074 if( p_in->LogDomainsCount && p_in->pActiveCyclesList )
1075 {
1076 pActiveCyclesList = (NvU32 *)NvOsAlloc( p_in->LogDomainsCount * sizeof( NvU32 ) );
1077 if( !pActiveCyclesList )
1078 {
1079 err_ = NvError_InsufficientMemory;
1080 goto clean;
1081 }
1082 }
1083 if( p_in->LogDomainsCount && p_in->pAveragesList )
1084 {
1085 pAveragesList = (NvRmFreqKHz *)NvOsAlloc( p_in->LogDomainsCount * sizeo f( NvRmFreqKHz ) );
1086 if( !pAveragesList )
1087 {
1088 err_ = NvError_InsufficientMemory;
1089 goto clean;
1090 }
1091 }
1092 if( p_in->LogDomainsCount && p_in->pFrequenciesList )
1093 {
1094 pFrequenciesList = (NvRmFreqKHz *)NvOsAlloc( p_in->LogDomainsCount * si zeof( NvRmFreqKHz ) );
1095 if( !pFrequenciesList )
1096 {
1097 err_ = NvError_InsufficientMemory;
1098 goto clean;
1099 }
1100 }
1101
1102 p_out->ret_ = NvRmDfsLogActivityGetEntry( p_in->hRmDeviceHandle, p_in->Entry Index, p_in->LogDomainsCount, &p_out->pIntervalMs, &p_out->pLp2TimeMs, pActiveCy clesList, pAveragesList, pFrequenciesList );
1103
1104 if(p_in->pActiveCyclesList && pActiveCyclesList)
1105 {
1106 err_ = NvOsCopyOut( p_in->pActiveCyclesList, pActiveCyclesList, p_in->Lo gDomainsCount * sizeof( NvU32 ) );
1107 if( err_ != NvSuccess )
1108 {
1109 err_ = NvError_BadParameter;
1110 }
1111 }
1112 if(p_in->pAveragesList && pAveragesList)
1113 {
1114 err_ = NvOsCopyOut( p_in->pAveragesList, pAveragesList, p_in->LogDomains Count * sizeof( NvRmFreqKHz ) );
1115 if( err_ != NvSuccess )
1116 {
1117 err_ = NvError_BadParameter;
1118 }
1119 }
1120 if(p_in->pFrequenciesList && pFrequenciesList)
1121 {
1122 err_ = NvOsCopyOut( p_in->pFrequenciesList, pFrequenciesList, p_in->LogD omainsCount * sizeof( NvRmFreqKHz ) );
1123 if( err_ != NvSuccess )
1124 {
1125 err_ = NvError_BadParameter;
1126 }
1127 }
1128 clean:
1129 NvOsFree( pActiveCyclesList );
1130 NvOsFree( pAveragesList );
1131 NvOsFree( pFrequenciesList );
1132 return err_;
1133 }
1134
1135 static NvError NvRmDfsLogGetMeanFrequencies_dispatch_( void *InBuffer, NvU32 InS ize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1136 {
1137 NvError err_ = NvSuccess;
1138 NvRmDfsLogGetMeanFrequencies_in *p_in;
1139 NvRmDfsLogGetMeanFrequencies_out *p_out;
1140 NvRmFreqKHz *pLogMeanFreqList = NULL;
1141
1142 p_in = (NvRmDfsLogGetMeanFrequencies_in *)InBuffer;
1143 p_out = (NvRmDfsLogGetMeanFrequencies_out *)((NvU8 *)OutBuffer + OFFSET(NvRm DfsLogGetMeanFrequencies_params, out) - OFFSET(NvRmDfsLogGetMeanFrequencies_para ms, inout));
1144
1145 if( p_in->LogMeanFreqListCount && p_in->pLogMeanFreqList )
1146 {
1147 pLogMeanFreqList = (NvRmFreqKHz *)NvOsAlloc( p_in->LogMeanFreqListCount * sizeof( NvRmFreqKHz ) );
1148 if( !pLogMeanFreqList )
1149 {
1150 err_ = NvError_InsufficientMemory;
1151 goto clean;
1152 }
1153 }
1154
1155 p_out->ret_ = NvRmDfsLogGetMeanFrequencies( p_in->hRmDeviceHandle, p_in->Log MeanFreqListCount, pLogMeanFreqList, &p_out->pLogLp2TimeMs, &p_out->pLogLp2Entri es );
1156
1157 if(p_in->pLogMeanFreqList && pLogMeanFreqList)
1158 {
1159 err_ = NvOsCopyOut( p_in->pLogMeanFreqList, pLogMeanFreqList, p_in->LogM eanFreqListCount * sizeof( NvRmFreqKHz ) );
1160 if( err_ != NvSuccess )
1161 {
1162 err_ = NvError_BadParameter;
1163 }
1164 }
1165 clean:
1166 NvOsFree( pLogMeanFreqList );
1167 return err_;
1168 }
1169
1170 static NvError NvRmDfsLogStart_dispatch_( void *InBuffer, NvU32 InSize, void *Ou tBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1171 {
1172 NvError err_ = NvSuccess;
1173 NvRmDfsLogStart_in *p_in;
1174
1175 p_in = (NvRmDfsLogStart_in *)InBuffer;
1176
1177
1178 NvRmDfsLogStart( p_in->hRmDeviceHandle );
1179
1180 return err_;
1181 }
1182
1183 static NvError NvRmDfsGetProfileData_dispatch_( void *InBuffer, NvU32 InSize, vo id *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1184 {
1185 NvError err_ = NvSuccess;
1186 NvRmDfsGetProfileData_in *p_in;
1187 NvRmDfsGetProfileData_out *p_out;
1188 NvU32 *pSamplesNoList = NULL;
1189 NvU32 *pProfileTimeUsList = NULL;
1190
1191 p_in = (NvRmDfsGetProfileData_in *)InBuffer;
1192 p_out = (NvRmDfsGetProfileData_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsGetP rofileData_params, out) - OFFSET(NvRmDfsGetProfileData_params, inout));
1193
1194 if( p_in->DfsProfileCount && p_in->pSamplesNoList )
1195 {
1196 pSamplesNoList = (NvU32 *)NvOsAlloc( p_in->DfsProfileCount * sizeof( Nv U32 ) );
1197 if( !pSamplesNoList )
1198 {
1199 err_ = NvError_InsufficientMemory;
1200 goto clean;
1201 }
1202 }
1203 if( p_in->DfsProfileCount && p_in->pProfileTimeUsList )
1204 {
1205 pProfileTimeUsList = (NvU32 *)NvOsAlloc( p_in->DfsProfileCount * sizeof ( NvU32 ) );
1206 if( !pProfileTimeUsList )
1207 {
1208 err_ = NvError_InsufficientMemory;
1209 goto clean;
1210 }
1211 }
1212
1213 p_out->ret_ = NvRmDfsGetProfileData( p_in->hRmDeviceHandle, p_in->DfsProfile Count, pSamplesNoList, pProfileTimeUsList, &p_out->pDfsPeriodUs );
1214
1215 if(p_in->pSamplesNoList && pSamplesNoList)
1216 {
1217 err_ = NvOsCopyOut( p_in->pSamplesNoList, pSamplesNoList, p_in->DfsProfi leCount * sizeof( NvU32 ) );
1218 if( err_ != NvSuccess )
1219 {
1220 err_ = NvError_BadParameter;
1221 }
1222 }
1223 if(p_in->pProfileTimeUsList && pProfileTimeUsList)
1224 {
1225 err_ = NvOsCopyOut( p_in->pProfileTimeUsList, pProfileTimeUsList, p_in-> DfsProfileCount * sizeof( NvU32 ) );
1226 if( err_ != NvSuccess )
1227 {
1228 err_ = NvError_BadParameter;
1229 }
1230 }
1231 clean:
1232 NvOsFree( pSamplesNoList );
1233 NvOsFree( pProfileTimeUsList );
1234 return err_;
1235 }
1236
1237 static NvError NvRmDfsSetAvHighCorner_dispatch_( void *InBuffer, NvU32 InSize, v oid *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1238 {
1239 NvError err_ = NvSuccess;
1240 NvRmDfsSetAvHighCorner_in *p_in;
1241 NvRmDfsSetAvHighCorner_out *p_out;
1242
1243 p_in = (NvRmDfsSetAvHighCorner_in *)InBuffer;
1244 p_out = (NvRmDfsSetAvHighCorner_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsSet AvHighCorner_params, out) - OFFSET(NvRmDfsSetAvHighCorner_params, inout));
1245
1246
1247 p_out->ret_ = NvRmDfsSetAvHighCorner( p_in->hRmDeviceHandle, p_in->DfsSystem HighKHz, p_in->DfsAvpHighKHz, p_in->DfsVpipeHighKHz );
1248
1249 return err_;
1250 }
1251
1252 static NvError NvRmDfsSetCpuEmcHighCorner_dispatch_( void *InBuffer, NvU32 InSiz e, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1253 {
1254 NvError err_ = NvSuccess;
1255 NvRmDfsSetCpuEmcHighCorner_in *p_in;
1256 NvRmDfsSetCpuEmcHighCorner_out *p_out;
1257
1258 p_in = (NvRmDfsSetCpuEmcHighCorner_in *)InBuffer;
1259 p_out = (NvRmDfsSetCpuEmcHighCorner_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDf sSetCpuEmcHighCorner_params, out) - OFFSET(NvRmDfsSetCpuEmcHighCorner_params, in out));
1260
1261
1262 p_out->ret_ = NvRmDfsSetCpuEmcHighCorner( p_in->hRmDeviceHandle, p_in->DfsCp uHighKHz, p_in->DfsEmcHighKHz );
1263
1264 return err_;
1265 }
1266
1267 static NvError NvRmDfsSetEmcEnvelope_dispatch_( void *InBuffer, NvU32 InSize, vo id *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1268 {
1269 NvError err_ = NvSuccess;
1270 NvRmDfsSetEmcEnvelope_in *p_in;
1271 NvRmDfsSetEmcEnvelope_out *p_out;
1272
1273 p_in = (NvRmDfsSetEmcEnvelope_in *)InBuffer;
1274 p_out = (NvRmDfsSetEmcEnvelope_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsSetE mcEnvelope_params, out) - OFFSET(NvRmDfsSetEmcEnvelope_params, inout));
1275
1276
1277 p_out->ret_ = NvRmDfsSetEmcEnvelope( p_in->hRmDeviceHandle, p_in->DfsEmcLowC ornerKHz, p_in->DfsEmcHighCornerKHz );
1278
1279 return err_;
1280 }
1281
1282 static NvError NvRmDfsSetCpuEnvelope_dispatch_( void *InBuffer, NvU32 InSize, vo id *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1283 {
1284 NvError err_ = NvSuccess;
1285 NvRmDfsSetCpuEnvelope_in *p_in;
1286 NvRmDfsSetCpuEnvelope_out *p_out;
1287
1288 p_in = (NvRmDfsSetCpuEnvelope_in *)InBuffer;
1289 p_out = (NvRmDfsSetCpuEnvelope_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsSetC puEnvelope_params, out) - OFFSET(NvRmDfsSetCpuEnvelope_params, inout));
1290
1291
1292 p_out->ret_ = NvRmDfsSetCpuEnvelope( p_in->hRmDeviceHandle, p_in->DfsCpuLowC ornerKHz, p_in->DfsCpuHighCornerKHz );
1293
1294 return err_;
1295 }
1296
1297 static NvError NvRmDfsSetTarget_dispatch_( void *InBuffer, NvU32 InSize, void *O utBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1298 {
1299 NvError err_ = NvSuccess;
1300 NvRmDfsSetTarget_in *p_in;
1301 NvRmDfsSetTarget_out *p_out;
1302 NvRmFreqKHz *pDfsTargetFreqList = NULL;
1303
1304 p_in = (NvRmDfsSetTarget_in *)InBuffer;
1305 p_out = (NvRmDfsSetTarget_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsSetTarget _params, out) - OFFSET(NvRmDfsSetTarget_params, inout));
1306
1307 if( p_in->DfsFreqListCount && p_in->pDfsTargetFreqList )
1308 {
1309 pDfsTargetFreqList = (NvRmFreqKHz *)NvOsAlloc( p_in->DfsFreqListCount * sizeof( NvRmFreqKHz ) );
1310 if( !pDfsTargetFreqList )
1311 {
1312 err_ = NvError_InsufficientMemory;
1313 goto clean;
1314 }
1315 if( p_in->pDfsTargetFreqList )
1316 {
1317 err_ = NvOsCopyIn( pDfsTargetFreqList, p_in->pDfsTargetFreqList, p_i n->DfsFreqListCount * sizeof( NvRmFreqKHz ) );
1318 if( err_ != NvSuccess )
1319 {
1320 err_ = NvError_BadParameter;
1321 goto clean;
1322 }
1323 }
1324 }
1325
1326 p_out->ret_ = NvRmDfsSetTarget( p_in->hRmDeviceHandle, p_in->DfsFreqListCoun t, pDfsTargetFreqList );
1327
1328 clean:
1329 NvOsFree( pDfsTargetFreqList );
1330 return err_;
1331 }
1332
1333 static NvError NvRmDfsSetLowCorner_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1334 {
1335 NvError err_ = NvSuccess;
1336 NvRmDfsSetLowCorner_in *p_in;
1337 NvRmDfsSetLowCorner_out *p_out;
1338 NvRmFreqKHz *pDfsLowFreqList = NULL;
1339
1340 p_in = (NvRmDfsSetLowCorner_in *)InBuffer;
1341 p_out = (NvRmDfsSetLowCorner_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsSetLow Corner_params, out) - OFFSET(NvRmDfsSetLowCorner_params, inout));
1342
1343 if( p_in->DfsFreqListCount && p_in->pDfsLowFreqList )
1344 {
1345 pDfsLowFreqList = (NvRmFreqKHz *)NvOsAlloc( p_in->DfsFreqListCount * si zeof( NvRmFreqKHz ) );
1346 if( !pDfsLowFreqList )
1347 {
1348 err_ = NvError_InsufficientMemory;
1349 goto clean;
1350 }
1351 if( p_in->pDfsLowFreqList )
1352 {
1353 err_ = NvOsCopyIn( pDfsLowFreqList, p_in->pDfsLowFreqList, p_in->Dfs FreqListCount * sizeof( NvRmFreqKHz ) );
1354 if( err_ != NvSuccess )
1355 {
1356 err_ = NvError_BadParameter;
1357 goto clean;
1358 }
1359 }
1360 }
1361
1362 p_out->ret_ = NvRmDfsSetLowCorner( p_in->hRmDeviceHandle, p_in->DfsFreqListC ount, pDfsLowFreqList );
1363
1364 clean:
1365 NvOsFree( pDfsLowFreqList );
1366 return err_;
1367 }
1368
1369 static NvError NvRmDfsSetState_dispatch_( void *InBuffer, NvU32 InSize, void *Ou tBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1370 {
1371 NvError err_ = NvSuccess;
1372 NvRmDfsSetState_in *p_in;
1373 NvRmDfsSetState_out *p_out;
1374
1375 p_in = (NvRmDfsSetState_in *)InBuffer;
1376 p_out = (NvRmDfsSetState_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsSetState_p arams, out) - OFFSET(NvRmDfsSetState_params, inout));
1377
1378
1379 p_out->ret_ = NvRmDfsSetState( p_in->hRmDeviceHandle, p_in->NewDfsRunState ) ;
1380
1381 return err_;
1382 }
1383
1384 static NvError NvRmDfsGetClockUtilization_dispatch_( void *InBuffer, NvU32 InSiz e, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1385 {
1386 NvError err_ = NvSuccess;
1387 NvRmDfsGetClockUtilization_in *p_in;
1388 NvRmDfsGetClockUtilization_out *p_out;
1389
1390 p_in = (NvRmDfsGetClockUtilization_in *)InBuffer;
1391 p_out = (NvRmDfsGetClockUtilization_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDf sGetClockUtilization_params, out) - OFFSET(NvRmDfsGetClockUtilization_params, in out));
1392
1393
1394 p_out->ret_ = NvRmDfsGetClockUtilization( p_in->hRmDeviceHandle, p_in->Clock Id, &p_out->pClockUsage );
1395
1396 return err_;
1397 }
1398
1399 static NvError NvRmDfsGetState_dispatch_( void *InBuffer, NvU32 InSize, void *Ou tBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1400 {
1401 NvError err_ = NvSuccess;
1402 NvRmDfsGetState_in *p_in;
1403 NvRmDfsGetState_out *p_out;
1404
1405 p_in = (NvRmDfsGetState_in *)InBuffer;
1406 p_out = (NvRmDfsGetState_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsGetState_p arams, out) - OFFSET(NvRmDfsGetState_params, inout));
1407
1408
1409 p_out->ret_ = NvRmDfsGetState( p_in->hRmDeviceHandle );
1410
1411 return err_;
1412 }
1413
1414 static NvError NvRmPowerActivityHint_dispatch_( void *InBuffer, NvU32 InSize, vo id *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1415 {
1416 NvError err_ = NvSuccess;
1417 NvRmPowerActivityHint_in *p_in;
1418 NvRmPowerActivityHint_out *p_out;
1419
1420 p_in = (NvRmPowerActivityHint_in *)InBuffer;
1421 p_out = (NvRmPowerActivityHint_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerAc tivityHint_params, out) - OFFSET(NvRmPowerActivityHint_params, inout));
1422
1423
1424 p_out->ret_ = NvRmPowerActivityHint( p_in->hRmDeviceHandle, p_in->ModuleId, p_in->ClientId, p_in->ActivityDurationMs );
1425
1426 return err_;
1427 }
1428
1429 static NvError NvRmPowerStarvationHintMulti_dispatch_( void *InBuffer, NvU32 InS ize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1430 {
1431 NvError err_ = NvSuccess;
1432 NvRmPowerStarvationHintMulti_in *p_in;
1433 NvRmPowerStarvationHintMulti_out *p_out;
1434 NvRmDfsStarvationHint *pMultiHint = NULL;
1435
1436 p_in = (NvRmPowerStarvationHintMulti_in *)InBuffer;
1437 p_out = (NvRmPowerStarvationHintMulti_out *)((NvU8 *)OutBuffer + OFFSET(NvRm PowerStarvationHintMulti_params, out) - OFFSET(NvRmPowerStarvationHintMulti_para ms, inout));
1438
1439 if( p_in->NumHints && p_in->pMultiHint )
1440 {
1441 pMultiHint = (NvRmDfsStarvationHint *)NvOsAlloc( p_in->NumHints * sizeo f( NvRmDfsStarvationHint ) );
1442 if( !pMultiHint )
1443 {
1444 err_ = NvError_InsufficientMemory;
1445 goto clean;
1446 }
1447 if( p_in->pMultiHint )
1448 {
1449 err_ = NvOsCopyIn( pMultiHint, p_in->pMultiHint, p_in->NumHints * si zeof( NvRmDfsStarvationHint ) );
1450 if( err_ != NvSuccess )
1451 {
1452 err_ = NvError_BadParameter;
1453 goto clean;
1454 }
1455 }
1456 }
1457
1458 p_out->ret_ = NvRmPowerStarvationHintMulti( p_in->hRmDeviceHandle, p_in->Cli entId, pMultiHint, p_in->NumHints );
1459
1460 clean:
1461 NvOsFree( pMultiHint );
1462 return err_;
1463 }
1464
1465 static NvError NvRmPowerStarvationHint_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1466 {
1467 NvError err_ = NvSuccess;
1468 NvRmPowerStarvationHint_in *p_in;
1469 NvRmPowerStarvationHint_out *p_out;
1470
1471 p_in = (NvRmPowerStarvationHint_in *)InBuffer;
1472 p_out = (NvRmPowerStarvationHint_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPower StarvationHint_params, out) - OFFSET(NvRmPowerStarvationHint_params, inout));
1473
1474
1475 p_out->ret_ = NvRmPowerStarvationHint( p_in->hRmDeviceHandle, p_in->ClockId, p_in->ClientId, p_in->Starving );
1476
1477 return err_;
1478 }
1479
1480 static NvError NvRmPowerBusyHintMulti_dispatch_( void *InBuffer, NvU32 InSize, v oid *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1481 {
1482 NvError err_ = NvSuccess;
1483 NvRmPowerBusyHintMulti_in *p_in;
1484 NvRmPowerBusyHintMulti_out *p_out;
1485 NvRmDfsBusyHint *pMultiHint = NULL;
1486
1487 p_in = (NvRmPowerBusyHintMulti_in *)InBuffer;
1488 p_out = (NvRmPowerBusyHintMulti_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerB usyHintMulti_params, out) - OFFSET(NvRmPowerBusyHintMulti_params, inout));
1489
1490 if( p_in->NumHints && p_in->pMultiHint )
1491 {
1492 pMultiHint = (NvRmDfsBusyHint *)NvOsAlloc( p_in->NumHints * sizeof( NvR mDfsBusyHint ) );
1493 if( !pMultiHint )
1494 {
1495 err_ = NvError_InsufficientMemory;
1496 goto clean;
1497 }
1498 if( p_in->pMultiHint )
1499 {
1500 err_ = NvOsCopyIn( pMultiHint, p_in->pMultiHint, p_in->NumHints * si zeof( NvRmDfsBusyHint ) );
1501 if( err_ != NvSuccess )
1502 {
1503 err_ = NvError_BadParameter;
1504 goto clean;
1505 }
1506 }
1507 }
1508
1509 p_out->ret_ = NvRmPowerBusyHintMulti( p_in->hRmDeviceHandle, p_in->ClientId, pMultiHint, p_in->NumHints, p_in->Mode );
1510
1511 clean:
1512 NvOsFree( pMultiHint );
1513 return err_;
1514 }
1515
1516 static NvError NvRmPowerBusyHint_dispatch_( void *InBuffer, NvU32 InSize, void * OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1517 {
1518 NvError err_ = NvSuccess;
1519 NvRmPowerBusyHint_in *p_in;
1520 NvRmPowerBusyHint_out *p_out;
1521
1522 p_in = (NvRmPowerBusyHint_in *)InBuffer;
1523 p_out = (NvRmPowerBusyHint_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerBusyHi nt_params, out) - OFFSET(NvRmPowerBusyHint_params, inout));
1524
1525
1526 p_out->ret_ = NvRmPowerBusyHint( p_in->hRmDeviceHandle, p_in->ClockId, p_in- >ClientId, p_in->BoostDurationMs, p_in->BoostKHz );
1527
1528 return err_;
1529 }
1530
1531 static NvError NvRmListPowerAwareModules_dispatch_( void *InBuffer, NvU32 InSize , void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1532 {
1533 NvError err_ = NvSuccess;
1534 NvRmListPowerAwareModules_in *p_in;
1535 NvRmListPowerAwareModules_inout *p_inout;
1536 NvRmListPowerAwareModules_inout inout;
1537 NvRmModuleID *pIdList = NULL;
1538 NvBool *pActiveList = NULL;
1539
1540 p_in = (NvRmListPowerAwareModules_in *)InBuffer;
1541 p_inout = (NvRmListPowerAwareModules_inout *)((NvU8 *)InBuffer + OFFSET(NvRm ListPowerAwareModules_params, inout));
1542
1543 (void)inout;
1544 inout.pListSize = p_inout->pListSize;
1545 if( p_inout->pListSize && p_in->pIdList )
1546 {
1547 pIdList = (NvRmModuleID *)NvOsAlloc( p_inout->pListSize * sizeof( NvRmM oduleID ) );
1548 if( !pIdList )
1549 {
1550 err_ = NvError_InsufficientMemory;
1551 goto clean;
1552 }
1553 }
1554 if( p_inout->pListSize && p_in->pActiveList )
1555 {
1556 pActiveList = (NvBool *)NvOsAlloc( p_inout->pListSize * sizeof( NvBool ) );
1557 if( !pActiveList )
1558 {
1559 err_ = NvError_InsufficientMemory;
1560 goto clean;
1561 }
1562 }
1563
1564 NvRmListPowerAwareModules( p_in->hRmDeviceHandle, &inout.pListSize, pIdList, pActiveList );
1565
1566
1567 p_inout = (NvRmListPowerAwareModules_inout *)OutBuffer;
1568 p_inout->pListSize = inout.pListSize;
1569 if(p_in->pIdList && pIdList)
1570 {
1571 err_ = NvOsCopyOut( p_in->pIdList, pIdList, p_inout->pListSize * sizeof( NvRmModuleID ) );
1572 if( err_ != NvSuccess )
1573 {
1574 err_ = NvError_BadParameter;
1575 }
1576 }
1577 if(p_in->pActiveList && pActiveList)
1578 {
1579 err_ = NvOsCopyOut( p_in->pActiveList, pActiveList, p_inout->pListSize * sizeof( NvBool ) );
1580 if( err_ != NvSuccess )
1581 {
1582 err_ = NvError_BadParameter;
1583 }
1584 }
1585 clean:
1586 NvOsFree( pIdList );
1587 NvOsFree( pActiveList );
1588 return err_;
1589 }
1590
1591 static NvError NvRmPowerVoltageControl_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1592 {
1593 NvError err_ = NvSuccess;
1594 NvRmPowerVoltageControl_in *p_in;
1595 NvRmPowerVoltageControl_out *p_out;
1596 NvRmMilliVolts *PrefVoltageList = NULL;
1597
1598 p_in = (NvRmPowerVoltageControl_in *)InBuffer;
1599 p_out = (NvRmPowerVoltageControl_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPower VoltageControl_params, out) - OFFSET(NvRmPowerVoltageControl_params, inout));
1600
1601 if( p_in->PrefVoltageListCount && p_in->PrefVoltageList )
1602 {
1603 PrefVoltageList = (NvRmMilliVolts *)NvOsAlloc( p_in->PrefVoltageListCou nt * sizeof( NvRmMilliVolts ) );
1604 if( !PrefVoltageList )
1605 {
1606 err_ = NvError_InsufficientMemory;
1607 goto clean;
1608 }
1609 if( p_in->PrefVoltageList )
1610 {
1611 err_ = NvOsCopyIn( PrefVoltageList, p_in->PrefVoltageList, p_in->Pre fVoltageListCount * sizeof( NvRmMilliVolts ) );
1612 if( err_ != NvSuccess )
1613 {
1614 err_ = NvError_BadParameter;
1615 goto clean;
1616 }
1617 }
1618 }
1619
1620 p_out->ret_ = NvRmPowerVoltageControl( p_in->hRmDeviceHandle, p_in->ModuleId , p_in->ClientId, p_in->MinVolts, p_in->MaxVolts, PrefVoltageList, p_in->PrefVol tageListCount, &p_out->CurrentVolts );
1621
1622 clean:
1623 NvOsFree( PrefVoltageList );
1624 return err_;
1625 }
1626
1627 static NvError NvRmPowerModuleClockControl_dispatch_( void *InBuffer, NvU32 InSi ze, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1628 {
1629 NvError err_ = NvSuccess;
1630 NvRmPowerModuleClockControl_in *p_in;
1631 NvRmPowerModuleClockControl_out *p_out;
1632
1633 p_in = (NvRmPowerModuleClockControl_in *)InBuffer;
1634 p_out = (NvRmPowerModuleClockControl_out *)((NvU8 *)OutBuffer + OFFSET(NvRmP owerModuleClockControl_params, out) - OFFSET(NvRmPowerModuleClockControl_params, inout));
1635
1636
1637 p_out->ret_ = NvRmPowerModuleClockControl( p_in->hRmDeviceHandle, p_in->Modu leId, p_in->ClientId, p_in->Enable );
1638
1639 return err_;
1640 }
1641
1642 static NvError NvRmPowerModuleClockConfig_dispatch_( void *InBuffer, NvU32 InSiz e, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1643 {
1644 NvError err_ = NvSuccess;
1645 NvRmPowerModuleClockConfig_in *p_in;
1646 NvRmPowerModuleClockConfig_out *p_out;
1647 NvRmFreqKHz *PrefFreqList = NULL;
1648
1649 p_in = (NvRmPowerModuleClockConfig_in *)InBuffer;
1650 p_out = (NvRmPowerModuleClockConfig_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPo werModuleClockConfig_params, out) - OFFSET(NvRmPowerModuleClockConfig_params, in out));
1651
1652 if( p_in->PrefFreqListCount && p_in->PrefFreqList )
1653 {
1654 PrefFreqList = (NvRmFreqKHz *)NvOsAlloc( p_in->PrefFreqListCount * size of( NvRmFreqKHz ) );
1655 if( !PrefFreqList )
1656 {
1657 err_ = NvError_InsufficientMemory;
1658 goto clean;
1659 }
1660 if( p_in->PrefFreqList )
1661 {
1662 err_ = NvOsCopyIn( PrefFreqList, p_in->PrefFreqList, p_in->PrefFreqL istCount * sizeof( NvRmFreqKHz ) );
1663 if( err_ != NvSuccess )
1664 {
1665 err_ = NvError_BadParameter;
1666 goto clean;
1667 }
1668 }
1669 }
1670
1671 p_out->ret_ = NvRmPowerModuleClockConfig( p_in->hRmDeviceHandle, p_in->Modul eId, p_in->ClientId, p_in->MinFreq, p_in->MaxFreq, PrefFreqList, p_in->PrefFreqL istCount, &p_out->CurrentFreq, p_in->flags );
1672
1673 clean:
1674 NvOsFree( PrefFreqList );
1675 return err_;
1676 }
1677
1678 static NvError NvRmPowerModuleGetMaxFrequency_dispatch_( void *InBuffer, NvU32 I nSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1679 {
1680 NvError err_ = NvSuccess;
1681 NvRmPowerModuleGetMaxFrequency_in *p_in;
1682 NvRmPowerModuleGetMaxFrequency_out *p_out;
1683
1684 p_in = (NvRmPowerModuleGetMaxFrequency_in *)InBuffer;
1685 p_out = (NvRmPowerModuleGetMaxFrequency_out *)((NvU8 *)OutBuffer + OFFSET(Nv RmPowerModuleGetMaxFrequency_params, out) - OFFSET(NvRmPowerModuleGetMaxFrequenc y_params, inout));
1686
1687
1688 p_out->ret_ = NvRmPowerModuleGetMaxFrequency( p_in->hRmDeviceHandle, p_in->M oduleId );
1689
1690 return err_;
1691 }
1692
1693 static NvError NvRmPowerGetPrimaryFrequency_dispatch_( void *InBuffer, NvU32 InS ize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1694 {
1695 NvError err_ = NvSuccess;
1696 NvRmPowerGetPrimaryFrequency_in *p_in;
1697 NvRmPowerGetPrimaryFrequency_out *p_out;
1698
1699 p_in = (NvRmPowerGetPrimaryFrequency_in *)InBuffer;
1700 p_out = (NvRmPowerGetPrimaryFrequency_out *)((NvU8 *)OutBuffer + OFFSET(NvRm PowerGetPrimaryFrequency_params, out) - OFFSET(NvRmPowerGetPrimaryFrequency_para ms, inout));
1701
1702
1703 p_out->ret_ = NvRmPowerGetPrimaryFrequency( p_in->hRmDeviceHandle );
1704
1705 return err_;
1706 }
1707
1708 static NvError NvRmPowerGetState_dispatch_( void *InBuffer, NvU32 InSize, void * OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1709 {
1710 NvError err_ = NvSuccess;
1711 NvRmPowerGetState_in *p_in;
1712 NvRmPowerGetState_out *p_out;
1713
1714 p_in = (NvRmPowerGetState_in *)InBuffer;
1715 p_out = (NvRmPowerGetState_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerGetSta te_params, out) - OFFSET(NvRmPowerGetState_params, inout));
1716
1717
1718 p_out->ret_ = NvRmPowerGetState( p_in->hRmDeviceHandle, &p_out->pState );
1719
1720 return err_;
1721 }
1722
1723 static NvError NvRmPowerEventNotify_dispatch_( void *InBuffer, NvU32 InSize, voi d *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1724 {
1725 NvError err_ = NvSuccess;
1726 NvRmPowerEventNotify_in *p_in;
1727
1728 p_in = (NvRmPowerEventNotify_in *)InBuffer;
1729
1730
1731 NvRmPowerEventNotify( p_in->hRmDeviceHandle, p_in->Event );
1732
1733 return err_;
1734 }
1735
1736 static NvError NvRmPowerGetEvent_dispatch_( void *InBuffer, NvU32 InSize, void * OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1737 {
1738 NvError err_ = NvSuccess;
1739 NvRmPowerGetEvent_in *p_in;
1740 NvRmPowerGetEvent_out *p_out;
1741
1742 p_in = (NvRmPowerGetEvent_in *)InBuffer;
1743 p_out = (NvRmPowerGetEvent_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerGetEve nt_params, out) - OFFSET(NvRmPowerGetEvent_params, inout));
1744
1745
1746 p_out->ret_ = NvRmPowerGetEvent( p_in->hRmDeviceHandle, p_in->ClientId, &p_o ut->pEvent );
1747
1748 return err_;
1749 }
1750
1751 static NvError NvRmPowerUnRegister_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1752 {
1753 NvError err_ = NvSuccess;
1754 NvRmPowerUnRegister_in *p_in;
1755
1756 p_in = (NvRmPowerUnRegister_in *)InBuffer;
1757
1758
1759 NvRmPowerUnRegister( p_in->hRmDeviceHandle, p_in->ClientId );
1760
1761 return err_;
1762 }
1763
1764 static NvError NvRmPowerRegister_dispatch_( void *InBuffer, NvU32 InSize, void * OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1765 {
1766 NvError err_ = NvSuccess;
1767 NvRmPowerRegister_in *p_in;
1768 NvRmPowerRegister_inout *p_inout;
1769 NvRmPowerRegister_out *p_out;
1770 NvRmPowerRegister_inout inout;
1771 NvOsSemaphoreHandle hEventSemaphore = NULL;
1772
1773 p_in = (NvRmPowerRegister_in *)InBuffer;
1774 p_inout = (NvRmPowerRegister_inout *)((NvU8 *)InBuffer + OFFSET(NvRmPowerReg ister_params, inout));
1775 p_out = (NvRmPowerRegister_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerRegist er_params, out) - OFFSET(NvRmPowerRegister_params, inout));
1776
1777 (void)inout;
1778 if( p_in->hEventSemaphore )
1779 {
1780 err_ = NvOsSemaphoreUnmarshal( p_in->hEventSemaphore, &hEventSemaphore ) ;
1781 if( err_ != NvSuccess )
1782 {
1783 err_ = NvError_BadParameter;
1784 goto clean;
1785 }
1786 }
1787 inout.pClientId = p_inout->pClientId;
1788
1789 p_out->ret_ = NvRmPowerRegister( p_in->hRmDeviceHandle, hEventSemaphore, &in out.pClientId );
1790
1791
1792 p_inout = (NvRmPowerRegister_inout *)OutBuffer;
1793 p_inout->pClientId = inout.pClientId;
1794 clean:
1795 NvOsSemaphoreDestroy( hEventSemaphore );
1796 return err_;
1797 }
1798
1799 NvError nvrm_power_Dispatch( NvU32 function, void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx );
1800 NvError nvrm_power_Dispatch( NvU32 function, void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
1801 {
1802 NvError err_ = NvSuccess;
1803
1804 switch( function ) {
1805 case 34:
1806 err_ = NvRmKernelPowerResume_dispatch_( InBuffer, InSize, OutBuffer, Out Size, Ctx );
1807 break;
1808 case 33:
1809 err_ = NvRmKernelPowerSuspend_dispatch_( InBuffer, InSize, OutBuffer, Ou tSize, Ctx );
1810 break;
1811 case 32:
1812 err_ = NvRmDfsSetLowVoltageThreshold_dispatch_( InBuffer, InSize, OutBuf fer, OutSize, Ctx );
1813 break;
1814 case 31:
1815 err_ = NvRmDfsGetLowVoltageThreshold_dispatch_( InBuffer, InSize, OutBuf fer, OutSize, Ctx );
1816 break;
1817 case 30:
1818 err_ = NvRmDfsLogBusyGetEntry_dispatch_( InBuffer, InSize, OutBuffer, Ou tSize, Ctx );
1819 break;
1820 case 29:
1821 err_ = NvRmDfsLogStarvationGetEntry_dispatch_( InBuffer, InSize, OutBuff er, OutSize, Ctx );
1822 break;
1823 case 28:
1824 err_ = NvRmDfsLogActivityGetEntry_dispatch_( InBuffer, InSize, OutBuffer , OutSize, Ctx );
1825 break;
1826 case 27:
1827 err_ = NvRmDfsLogGetMeanFrequencies_dispatch_( InBuffer, InSize, OutBuff er, OutSize, Ctx );
1828 break;
1829 case 26:
1830 err_ = NvRmDfsLogStart_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
1831 break;
1832 case 25:
1833 err_ = NvRmDfsGetProfileData_dispatch_( InBuffer, InSize, OutBuffer, Out Size, Ctx );
1834 break;
1835 case 24:
1836 err_ = NvRmDfsSetAvHighCorner_dispatch_( InBuffer, InSize, OutBuffer, Ou tSize, Ctx );
1837 break;
1838 case 23:
1839 err_ = NvRmDfsSetCpuEmcHighCorner_dispatch_( InBuffer, InSize, OutBuffer , OutSize, Ctx );
1840 break;
1841 case 22:
1842 err_ = NvRmDfsSetEmcEnvelope_dispatch_( InBuffer, InSize, OutBuffer, Out Size, Ctx );
1843 break;
1844 case 21:
1845 err_ = NvRmDfsSetCpuEnvelope_dispatch_( InBuffer, InSize, OutBuffer, Out Size, Ctx );
1846 break;
1847 case 20:
1848 err_ = NvRmDfsSetTarget_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
1849 break;
1850 case 19:
1851 err_ = NvRmDfsSetLowCorner_dispatch_( InBuffer, InSize, OutBuffer, OutSi ze, Ctx );
1852 break;
1853 case 18:
1854 err_ = NvRmDfsSetState_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
1855 break;
1856 case 17:
1857 err_ = NvRmDfsGetClockUtilization_dispatch_( InBuffer, InSize, OutBuffer , OutSize, Ctx );
1858 break;
1859 case 16:
1860 err_ = NvRmDfsGetState_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
1861 break;
1862 case 15:
1863 err_ = NvRmPowerActivityHint_dispatch_( InBuffer, InSize, OutBuffer, Out Size, Ctx );
1864 break;
1865 case 14:
1866 err_ = NvRmPowerStarvationHintMulti_dispatch_( InBuffer, InSize, OutBuff er, OutSize, Ctx );
1867 break;
1868 case 13:
1869 err_ = NvRmPowerStarvationHint_dispatch_( InBuffer, InSize, OutBuffer, O utSize, Ctx );
1870 break;
1871 case 12:
1872 err_ = NvRmPowerBusyHintMulti_dispatch_( InBuffer, InSize, OutBuffer, Ou tSize, Ctx );
1873 break;
1874 case 11:
1875 err_ = NvRmPowerBusyHint_dispatch_( InBuffer, InSize, OutBuffer, OutSize , Ctx );
1876 break;
1877 case 10:
1878 err_ = NvRmListPowerAwareModules_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
1879 break;
1880 case 9:
1881 err_ = NvRmPowerVoltageControl_dispatch_( InBuffer, InSize, OutBuffer, O utSize, Ctx );
1882 break;
1883 case 8:
1884 err_ = NvRmPowerModuleClockControl_dispatch_( InBuffer, InSize, OutBuffe r, OutSize, Ctx );
1885 break;
1886 case 7:
1887 err_ = NvRmPowerModuleClockConfig_dispatch_( InBuffer, InSize, OutBuffer , OutSize, Ctx );
1888 break;
1889 case 6:
1890 err_ = NvRmPowerModuleGetMaxFrequency_dispatch_( InBuffer, InSize, OutBu ffer, OutSize, Ctx );
1891 break;
1892 case 5:
1893 err_ = NvRmPowerGetPrimaryFrequency_dispatch_( InBuffer, InSize, OutBuff er, OutSize, Ctx );
1894 break;
1895 case 4:
1896 err_ = NvRmPowerGetState_dispatch_( InBuffer, InSize, OutBuffer, OutSize , Ctx );
1897 break;
1898 case 3:
1899 err_ = NvRmPowerEventNotify_dispatch_( InBuffer, InSize, OutBuffer, OutS ize, Ctx );
1900 break;
1901 case 2:
1902 err_ = NvRmPowerGetEvent_dispatch_( InBuffer, InSize, OutBuffer, OutSize , Ctx );
1903 break;
1904 case 1:
1905 err_ = NvRmPowerUnRegister_dispatch_( InBuffer, InSize, OutBuffer, OutSi ze, Ctx );
1906 break;
1907 case 0:
1908 err_ = NvRmPowerRegister_dispatch_( InBuffer, InSize, OutBuffer, OutSize , Ctx );
1909 break;
1910 default:
1911 err_ = NvError_BadParameter;
1912 break;
1913 }
1914
1915 return err_;
1916 }
OLDNEW
« no previous file with comments | « arch/arm/mach-tegra/nv/nvrm/dispatch/nvrm_pmu_dispatch.c ('k') | arch/arm/mach-tegra/nv/nvrm/dispatch/nvrm_pwm_dispatch.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698