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

Unified 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, 4 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 side-by-side diff with in-line comments
Download patch
Index: arch/arm/mach-tegra/nv/nvrm/dispatch/nvrm_power_dispatch.c
diff --git a/arch/arm/mach-tegra/nv/nvrm/dispatch/nvrm_power_dispatch.c b/arch/arm/mach-tegra/nv/nvrm/dispatch/nvrm_power_dispatch.c
new file mode 100644
index 0000000000000000000000000000000000000000..cf70ec5a9b45e59b4d81dc0b06286336b53a6d81
--- /dev/null
+++ b/arch/arm/mach-tegra/nv/nvrm/dispatch/nvrm_power_dispatch.c
@@ -0,0 +1,1916 @@
+/*
+ * Copyright (c) 2009 NVIDIA Corporation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * Neither the name of the NVIDIA Corporation nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#define NV_IDL_IS_DISPATCH
+
+#include "nvcommon.h"
+#include "nvos.h"
+#include "nvassert.h"
+#include "nvreftrack.h"
+#include "nvidlcmd.h"
+#include "nvrm_power.h"
+
+#define OFFSET( s, e ) (NvU32)(void *)(&(((s*)0)->e))
+
+
+typedef struct NvRmKernelPowerResume_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+} NV_ALIGN(4) NvRmKernelPowerResume_in;
+
+typedef struct NvRmKernelPowerResume_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmKernelPowerResume_inout;
+
+typedef struct NvRmKernelPowerResume_out_t
+{
+ NvError ret_;
+} NV_ALIGN(4) NvRmKernelPowerResume_out;
+
+typedef struct NvRmKernelPowerResume_params_t
+{
+ NvRmKernelPowerResume_in in;
+ NvRmKernelPowerResume_inout inout;
+ NvRmKernelPowerResume_out out;
+} NvRmKernelPowerResume_params;
+
+typedef struct NvRmKernelPowerSuspend_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+} NV_ALIGN(4) NvRmKernelPowerSuspend_in;
+
+typedef struct NvRmKernelPowerSuspend_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmKernelPowerSuspend_inout;
+
+typedef struct NvRmKernelPowerSuspend_out_t
+{
+ NvError ret_;
+} NV_ALIGN(4) NvRmKernelPowerSuspend_out;
+
+typedef struct NvRmKernelPowerSuspend_params_t
+{
+ NvRmKernelPowerSuspend_in in;
+ NvRmKernelPowerSuspend_inout inout;
+ NvRmKernelPowerSuspend_out out;
+} NvRmKernelPowerSuspend_params;
+
+typedef struct NvRmDfsSetLowVoltageThreshold_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvRmDfsVoltageRailId RailId;
+ NvRmMilliVolts LowMv;
+} NV_ALIGN(4) NvRmDfsSetLowVoltageThreshold_in;
+
+typedef struct NvRmDfsSetLowVoltageThreshold_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsSetLowVoltageThreshold_inout;
+
+typedef struct NvRmDfsSetLowVoltageThreshold_out_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsSetLowVoltageThreshold_out;
+
+typedef struct NvRmDfsSetLowVoltageThreshold_params_t
+{
+ NvRmDfsSetLowVoltageThreshold_in in;
+ NvRmDfsSetLowVoltageThreshold_inout inout;
+ NvRmDfsSetLowVoltageThreshold_out out;
+} NvRmDfsSetLowVoltageThreshold_params;
+
+typedef struct NvRmDfsGetLowVoltageThreshold_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvRmDfsVoltageRailId RailId;
+} NV_ALIGN(4) NvRmDfsGetLowVoltageThreshold_in;
+
+typedef struct NvRmDfsGetLowVoltageThreshold_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsGetLowVoltageThreshold_inout;
+
+typedef struct NvRmDfsGetLowVoltageThreshold_out_t
+{
+ NvRmMilliVolts pLowMv;
+ NvRmMilliVolts pPresentMv;
+} NV_ALIGN(4) NvRmDfsGetLowVoltageThreshold_out;
+
+typedef struct NvRmDfsGetLowVoltageThreshold_params_t
+{
+ NvRmDfsGetLowVoltageThreshold_in in;
+ NvRmDfsGetLowVoltageThreshold_inout inout;
+ NvRmDfsGetLowVoltageThreshold_out out;
+} NvRmDfsGetLowVoltageThreshold_params;
+
+typedef struct NvRmDfsLogBusyGetEntry_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvU32 EntryIndex;
+} NV_ALIGN(4) NvRmDfsLogBusyGetEntry_in;
+
+typedef struct NvRmDfsLogBusyGetEntry_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsLogBusyGetEntry_inout;
+
+typedef struct NvRmDfsLogBusyGetEntry_out_t
+{
+ NvError ret_;
+ NvU32 pSampleIndex;
+ NvU32 pClientId;
+ NvU32 pClientTag;
+ NvRmDfsBusyHint pBusyHint;
+} NV_ALIGN(4) NvRmDfsLogBusyGetEntry_out;
+
+typedef struct NvRmDfsLogBusyGetEntry_params_t
+{
+ NvRmDfsLogBusyGetEntry_in in;
+ NvRmDfsLogBusyGetEntry_inout inout;
+ NvRmDfsLogBusyGetEntry_out out;
+} NvRmDfsLogBusyGetEntry_params;
+
+typedef struct NvRmDfsLogStarvationGetEntry_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvU32 EntryIndex;
+} NV_ALIGN(4) NvRmDfsLogStarvationGetEntry_in;
+
+typedef struct NvRmDfsLogStarvationGetEntry_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsLogStarvationGetEntry_inout;
+
+typedef struct NvRmDfsLogStarvationGetEntry_out_t
+{
+ NvError ret_;
+ NvU32 pSampleIndex;
+ NvU32 pClientId;
+ NvU32 pClientTag;
+ NvRmDfsStarvationHint pStarvationHint;
+} NV_ALIGN(4) NvRmDfsLogStarvationGetEntry_out;
+
+typedef struct NvRmDfsLogStarvationGetEntry_params_t
+{
+ NvRmDfsLogStarvationGetEntry_in in;
+ NvRmDfsLogStarvationGetEntry_inout inout;
+ NvRmDfsLogStarvationGetEntry_out out;
+} NvRmDfsLogStarvationGetEntry_params;
+
+typedef struct NvRmDfsLogActivityGetEntry_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvU32 EntryIndex;
+ NvU32 LogDomainsCount;
+ NvU32 * pActiveCyclesList;
+ NvRmFreqKHz * pAveragesList;
+ NvRmFreqKHz * pFrequenciesList;
+} NV_ALIGN(4) NvRmDfsLogActivityGetEntry_in;
+
+typedef struct NvRmDfsLogActivityGetEntry_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsLogActivityGetEntry_inout;
+
+typedef struct NvRmDfsLogActivityGetEntry_out_t
+{
+ NvError ret_;
+ NvU32 pIntervalMs;
+ NvU32 pLp2TimeMs;
+} NV_ALIGN(4) NvRmDfsLogActivityGetEntry_out;
+
+typedef struct NvRmDfsLogActivityGetEntry_params_t
+{
+ NvRmDfsLogActivityGetEntry_in in;
+ NvRmDfsLogActivityGetEntry_inout inout;
+ NvRmDfsLogActivityGetEntry_out out;
+} NvRmDfsLogActivityGetEntry_params;
+
+typedef struct NvRmDfsLogGetMeanFrequencies_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvU32 LogMeanFreqListCount;
+ NvRmFreqKHz * pLogMeanFreqList;
+} NV_ALIGN(4) NvRmDfsLogGetMeanFrequencies_in;
+
+typedef struct NvRmDfsLogGetMeanFrequencies_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsLogGetMeanFrequencies_inout;
+
+typedef struct NvRmDfsLogGetMeanFrequencies_out_t
+{
+ NvError ret_;
+ NvU32 pLogLp2TimeMs;
+ NvU32 pLogLp2Entries;
+} NV_ALIGN(4) NvRmDfsLogGetMeanFrequencies_out;
+
+typedef struct NvRmDfsLogGetMeanFrequencies_params_t
+{
+ NvRmDfsLogGetMeanFrequencies_in in;
+ NvRmDfsLogGetMeanFrequencies_inout inout;
+ NvRmDfsLogGetMeanFrequencies_out out;
+} NvRmDfsLogGetMeanFrequencies_params;
+
+typedef struct NvRmDfsLogStart_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+} NV_ALIGN(4) NvRmDfsLogStart_in;
+
+typedef struct NvRmDfsLogStart_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsLogStart_inout;
+
+typedef struct NvRmDfsLogStart_out_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsLogStart_out;
+
+typedef struct NvRmDfsLogStart_params_t
+{
+ NvRmDfsLogStart_in in;
+ NvRmDfsLogStart_inout inout;
+ NvRmDfsLogStart_out out;
+} NvRmDfsLogStart_params;
+
+typedef struct NvRmDfsGetProfileData_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvU32 DfsProfileCount;
+ NvU32 * pSamplesNoList;
+ NvU32 * pProfileTimeUsList;
+} NV_ALIGN(4) NvRmDfsGetProfileData_in;
+
+typedef struct NvRmDfsGetProfileData_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsGetProfileData_inout;
+
+typedef struct NvRmDfsGetProfileData_out_t
+{
+ NvError ret_;
+ NvU32 pDfsPeriodUs;
+} NV_ALIGN(4) NvRmDfsGetProfileData_out;
+
+typedef struct NvRmDfsGetProfileData_params_t
+{
+ NvRmDfsGetProfileData_in in;
+ NvRmDfsGetProfileData_inout inout;
+ NvRmDfsGetProfileData_out out;
+} NvRmDfsGetProfileData_params;
+
+typedef struct NvRmDfsSetAvHighCorner_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvRmFreqKHz DfsSystemHighKHz;
+ NvRmFreqKHz DfsAvpHighKHz;
+ NvRmFreqKHz DfsVpipeHighKHz;
+} NV_ALIGN(4) NvRmDfsSetAvHighCorner_in;
+
+typedef struct NvRmDfsSetAvHighCorner_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsSetAvHighCorner_inout;
+
+typedef struct NvRmDfsSetAvHighCorner_out_t
+{
+ NvError ret_;
+} NV_ALIGN(4) NvRmDfsSetAvHighCorner_out;
+
+typedef struct NvRmDfsSetAvHighCorner_params_t
+{
+ NvRmDfsSetAvHighCorner_in in;
+ NvRmDfsSetAvHighCorner_inout inout;
+ NvRmDfsSetAvHighCorner_out out;
+} NvRmDfsSetAvHighCorner_params;
+
+typedef struct NvRmDfsSetCpuEmcHighCorner_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvRmFreqKHz DfsCpuHighKHz;
+ NvRmFreqKHz DfsEmcHighKHz;
+} NV_ALIGN(4) NvRmDfsSetCpuEmcHighCorner_in;
+
+typedef struct NvRmDfsSetCpuEmcHighCorner_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsSetCpuEmcHighCorner_inout;
+
+typedef struct NvRmDfsSetCpuEmcHighCorner_out_t
+{
+ NvError ret_;
+} NV_ALIGN(4) NvRmDfsSetCpuEmcHighCorner_out;
+
+typedef struct NvRmDfsSetCpuEmcHighCorner_params_t
+{
+ NvRmDfsSetCpuEmcHighCorner_in in;
+ NvRmDfsSetCpuEmcHighCorner_inout inout;
+ NvRmDfsSetCpuEmcHighCorner_out out;
+} NvRmDfsSetCpuEmcHighCorner_params;
+
+typedef struct NvRmDfsSetEmcEnvelope_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvRmFreqKHz DfsEmcLowCornerKHz;
+ NvRmFreqKHz DfsEmcHighCornerKHz;
+} NV_ALIGN(4) NvRmDfsSetEmcEnvelope_in;
+
+typedef struct NvRmDfsSetEmcEnvelope_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsSetEmcEnvelope_inout;
+
+typedef struct NvRmDfsSetEmcEnvelope_out_t
+{
+ NvError ret_;
+} NV_ALIGN(4) NvRmDfsSetEmcEnvelope_out;
+
+typedef struct NvRmDfsSetEmcEnvelope_params_t
+{
+ NvRmDfsSetEmcEnvelope_in in;
+ NvRmDfsSetEmcEnvelope_inout inout;
+ NvRmDfsSetEmcEnvelope_out out;
+} NvRmDfsSetEmcEnvelope_params;
+
+typedef struct NvRmDfsSetCpuEnvelope_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvRmFreqKHz DfsCpuLowCornerKHz;
+ NvRmFreqKHz DfsCpuHighCornerKHz;
+} NV_ALIGN(4) NvRmDfsSetCpuEnvelope_in;
+
+typedef struct NvRmDfsSetCpuEnvelope_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsSetCpuEnvelope_inout;
+
+typedef struct NvRmDfsSetCpuEnvelope_out_t
+{
+ NvError ret_;
+} NV_ALIGN(4) NvRmDfsSetCpuEnvelope_out;
+
+typedef struct NvRmDfsSetCpuEnvelope_params_t
+{
+ NvRmDfsSetCpuEnvelope_in in;
+ NvRmDfsSetCpuEnvelope_inout inout;
+ NvRmDfsSetCpuEnvelope_out out;
+} NvRmDfsSetCpuEnvelope_params;
+
+typedef struct NvRmDfsSetTarget_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvU32 DfsFreqListCount;
+ NvRmFreqKHz * pDfsTargetFreqList;
+} NV_ALIGN(4) NvRmDfsSetTarget_in;
+
+typedef struct NvRmDfsSetTarget_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsSetTarget_inout;
+
+typedef struct NvRmDfsSetTarget_out_t
+{
+ NvError ret_;
+} NV_ALIGN(4) NvRmDfsSetTarget_out;
+
+typedef struct NvRmDfsSetTarget_params_t
+{
+ NvRmDfsSetTarget_in in;
+ NvRmDfsSetTarget_inout inout;
+ NvRmDfsSetTarget_out out;
+} NvRmDfsSetTarget_params;
+
+typedef struct NvRmDfsSetLowCorner_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvU32 DfsFreqListCount;
+ NvRmFreqKHz * pDfsLowFreqList;
+} NV_ALIGN(4) NvRmDfsSetLowCorner_in;
+
+typedef struct NvRmDfsSetLowCorner_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsSetLowCorner_inout;
+
+typedef struct NvRmDfsSetLowCorner_out_t
+{
+ NvError ret_;
+} NV_ALIGN(4) NvRmDfsSetLowCorner_out;
+
+typedef struct NvRmDfsSetLowCorner_params_t
+{
+ NvRmDfsSetLowCorner_in in;
+ NvRmDfsSetLowCorner_inout inout;
+ NvRmDfsSetLowCorner_out out;
+} NvRmDfsSetLowCorner_params;
+
+typedef struct NvRmDfsSetState_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvRmDfsRunState NewDfsRunState;
+} NV_ALIGN(4) NvRmDfsSetState_in;
+
+typedef struct NvRmDfsSetState_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsSetState_inout;
+
+typedef struct NvRmDfsSetState_out_t
+{
+ NvError ret_;
+} NV_ALIGN(4) NvRmDfsSetState_out;
+
+typedef struct NvRmDfsSetState_params_t
+{
+ NvRmDfsSetState_in in;
+ NvRmDfsSetState_inout inout;
+ NvRmDfsSetState_out out;
+} NvRmDfsSetState_params;
+
+typedef struct NvRmDfsGetClockUtilization_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvRmDfsClockId ClockId;
+} NV_ALIGN(4) NvRmDfsGetClockUtilization_in;
+
+typedef struct NvRmDfsGetClockUtilization_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsGetClockUtilization_inout;
+
+typedef struct NvRmDfsGetClockUtilization_out_t
+{
+ NvError ret_;
+ NvRmDfsClockUsage pClockUsage;
+} NV_ALIGN(4) NvRmDfsGetClockUtilization_out;
+
+typedef struct NvRmDfsGetClockUtilization_params_t
+{
+ NvRmDfsGetClockUtilization_in in;
+ NvRmDfsGetClockUtilization_inout inout;
+ NvRmDfsGetClockUtilization_out out;
+} NvRmDfsGetClockUtilization_params;
+
+typedef struct NvRmDfsGetState_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+} NV_ALIGN(4) NvRmDfsGetState_in;
+
+typedef struct NvRmDfsGetState_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmDfsGetState_inout;
+
+typedef struct NvRmDfsGetState_out_t
+{
+ NvRmDfsRunState ret_;
+} NV_ALIGN(4) NvRmDfsGetState_out;
+
+typedef struct NvRmDfsGetState_params_t
+{
+ NvRmDfsGetState_in in;
+ NvRmDfsGetState_inout inout;
+ NvRmDfsGetState_out out;
+} NvRmDfsGetState_params;
+
+typedef struct NvRmPowerActivityHint_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvRmModuleID ModuleId;
+ NvU32 ClientId;
+ NvU32 ActivityDurationMs;
+} NV_ALIGN(4) NvRmPowerActivityHint_in;
+
+typedef struct NvRmPowerActivityHint_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmPowerActivityHint_inout;
+
+typedef struct NvRmPowerActivityHint_out_t
+{
+ NvError ret_;
+} NV_ALIGN(4) NvRmPowerActivityHint_out;
+
+typedef struct NvRmPowerActivityHint_params_t
+{
+ NvRmPowerActivityHint_in in;
+ NvRmPowerActivityHint_inout inout;
+ NvRmPowerActivityHint_out out;
+} NvRmPowerActivityHint_params;
+
+typedef struct NvRmPowerStarvationHintMulti_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvU32 ClientId;
+ NvRmDfsStarvationHint * pMultiHint;
+ NvU32 NumHints;
+} NV_ALIGN(4) NvRmPowerStarvationHintMulti_in;
+
+typedef struct NvRmPowerStarvationHintMulti_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmPowerStarvationHintMulti_inout;
+
+typedef struct NvRmPowerStarvationHintMulti_out_t
+{
+ NvError ret_;
+} NV_ALIGN(4) NvRmPowerStarvationHintMulti_out;
+
+typedef struct NvRmPowerStarvationHintMulti_params_t
+{
+ NvRmPowerStarvationHintMulti_in in;
+ NvRmPowerStarvationHintMulti_inout inout;
+ NvRmPowerStarvationHintMulti_out out;
+} NvRmPowerStarvationHintMulti_params;
+
+typedef struct NvRmPowerStarvationHint_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvRmDfsClockId ClockId;
+ NvU32 ClientId;
+ NvBool Starving;
+} NV_ALIGN(4) NvRmPowerStarvationHint_in;
+
+typedef struct NvRmPowerStarvationHint_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmPowerStarvationHint_inout;
+
+typedef struct NvRmPowerStarvationHint_out_t
+{
+ NvError ret_;
+} NV_ALIGN(4) NvRmPowerStarvationHint_out;
+
+typedef struct NvRmPowerStarvationHint_params_t
+{
+ NvRmPowerStarvationHint_in in;
+ NvRmPowerStarvationHint_inout inout;
+ NvRmPowerStarvationHint_out out;
+} NvRmPowerStarvationHint_params;
+
+typedef struct NvRmPowerBusyHintMulti_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvU32 ClientId;
+ NvRmDfsBusyHint * pMultiHint;
+ NvU32 NumHints;
+ NvRmDfsBusyHintSyncMode Mode;
+} NV_ALIGN(4) NvRmPowerBusyHintMulti_in;
+
+typedef struct NvRmPowerBusyHintMulti_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmPowerBusyHintMulti_inout;
+
+typedef struct NvRmPowerBusyHintMulti_out_t
+{
+ NvError ret_;
+} NV_ALIGN(4) NvRmPowerBusyHintMulti_out;
+
+typedef struct NvRmPowerBusyHintMulti_params_t
+{
+ NvRmPowerBusyHintMulti_in in;
+ NvRmPowerBusyHintMulti_inout inout;
+ NvRmPowerBusyHintMulti_out out;
+} NvRmPowerBusyHintMulti_params;
+
+typedef struct NvRmPowerBusyHint_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvRmDfsClockId ClockId;
+ NvU32 ClientId;
+ NvU32 BoostDurationMs;
+ NvRmFreqKHz BoostKHz;
+} NV_ALIGN(4) NvRmPowerBusyHint_in;
+
+typedef struct NvRmPowerBusyHint_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmPowerBusyHint_inout;
+
+typedef struct NvRmPowerBusyHint_out_t
+{
+ NvError ret_;
+} NV_ALIGN(4) NvRmPowerBusyHint_out;
+
+typedef struct NvRmPowerBusyHint_params_t
+{
+ NvRmPowerBusyHint_in in;
+ NvRmPowerBusyHint_inout inout;
+ NvRmPowerBusyHint_out out;
+} NvRmPowerBusyHint_params;
+
+typedef struct NvRmListPowerAwareModules_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvRmModuleID * pIdList;
+ NvBool * pActiveList;
+} NV_ALIGN(4) NvRmListPowerAwareModules_in;
+
+typedef struct NvRmListPowerAwareModules_inout_t
+{
+ NvU32 pListSize;
+} NV_ALIGN(4) NvRmListPowerAwareModules_inout;
+
+typedef struct NvRmListPowerAwareModules_out_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmListPowerAwareModules_out;
+
+typedef struct NvRmListPowerAwareModules_params_t
+{
+ NvRmListPowerAwareModules_in in;
+ NvRmListPowerAwareModules_inout inout;
+ NvRmListPowerAwareModules_out out;
+} NvRmListPowerAwareModules_params;
+
+typedef struct NvRmPowerVoltageControl_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvRmModuleID ModuleId;
+ NvU32 ClientId;
+ NvRmMilliVolts MinVolts;
+ NvRmMilliVolts MaxVolts;
+ NvRmMilliVolts * PrefVoltageList;
+ NvU32 PrefVoltageListCount;
+} NV_ALIGN(4) NvRmPowerVoltageControl_in;
+
+typedef struct NvRmPowerVoltageControl_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmPowerVoltageControl_inout;
+
+typedef struct NvRmPowerVoltageControl_out_t
+{
+ NvError ret_;
+ NvRmMilliVolts CurrentVolts;
+} NV_ALIGN(4) NvRmPowerVoltageControl_out;
+
+typedef struct NvRmPowerVoltageControl_params_t
+{
+ NvRmPowerVoltageControl_in in;
+ NvRmPowerVoltageControl_inout inout;
+ NvRmPowerVoltageControl_out out;
+} NvRmPowerVoltageControl_params;
+
+typedef struct NvRmPowerModuleClockControl_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvRmModuleID ModuleId;
+ NvU32 ClientId;
+ NvBool Enable;
+} NV_ALIGN(4) NvRmPowerModuleClockControl_in;
+
+typedef struct NvRmPowerModuleClockControl_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmPowerModuleClockControl_inout;
+
+typedef struct NvRmPowerModuleClockControl_out_t
+{
+ NvError ret_;
+} NV_ALIGN(4) NvRmPowerModuleClockControl_out;
+
+typedef struct NvRmPowerModuleClockControl_params_t
+{
+ NvRmPowerModuleClockControl_in in;
+ NvRmPowerModuleClockControl_inout inout;
+ NvRmPowerModuleClockControl_out out;
+} NvRmPowerModuleClockControl_params;
+
+typedef struct NvRmPowerModuleClockConfig_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvRmModuleID ModuleId;
+ NvU32 ClientId;
+ NvRmFreqKHz MinFreq;
+ NvRmFreqKHz MaxFreq;
+ NvRmFreqKHz * PrefFreqList;
+ NvU32 PrefFreqListCount;
+ NvU32 flags;
+} NV_ALIGN(4) NvRmPowerModuleClockConfig_in;
+
+typedef struct NvRmPowerModuleClockConfig_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmPowerModuleClockConfig_inout;
+
+typedef struct NvRmPowerModuleClockConfig_out_t
+{
+ NvError ret_;
+ NvRmFreqKHz CurrentFreq;
+} NV_ALIGN(4) NvRmPowerModuleClockConfig_out;
+
+typedef struct NvRmPowerModuleClockConfig_params_t
+{
+ NvRmPowerModuleClockConfig_in in;
+ NvRmPowerModuleClockConfig_inout inout;
+ NvRmPowerModuleClockConfig_out out;
+} NvRmPowerModuleClockConfig_params;
+
+typedef struct NvRmPowerModuleGetMaxFrequency_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvRmModuleID ModuleId;
+} NV_ALIGN(4) NvRmPowerModuleGetMaxFrequency_in;
+
+typedef struct NvRmPowerModuleGetMaxFrequency_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmPowerModuleGetMaxFrequency_inout;
+
+typedef struct NvRmPowerModuleGetMaxFrequency_out_t
+{
+ NvRmFreqKHz ret_;
+} NV_ALIGN(4) NvRmPowerModuleGetMaxFrequency_out;
+
+typedef struct NvRmPowerModuleGetMaxFrequency_params_t
+{
+ NvRmPowerModuleGetMaxFrequency_in in;
+ NvRmPowerModuleGetMaxFrequency_inout inout;
+ NvRmPowerModuleGetMaxFrequency_out out;
+} NvRmPowerModuleGetMaxFrequency_params;
+
+typedef struct NvRmPowerGetPrimaryFrequency_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+} NV_ALIGN(4) NvRmPowerGetPrimaryFrequency_in;
+
+typedef struct NvRmPowerGetPrimaryFrequency_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmPowerGetPrimaryFrequency_inout;
+
+typedef struct NvRmPowerGetPrimaryFrequency_out_t
+{
+ NvRmFreqKHz ret_;
+} NV_ALIGN(4) NvRmPowerGetPrimaryFrequency_out;
+
+typedef struct NvRmPowerGetPrimaryFrequency_params_t
+{
+ NvRmPowerGetPrimaryFrequency_in in;
+ NvRmPowerGetPrimaryFrequency_inout inout;
+ NvRmPowerGetPrimaryFrequency_out out;
+} NvRmPowerGetPrimaryFrequency_params;
+
+typedef struct NvRmPowerGetState_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+} NV_ALIGN(4) NvRmPowerGetState_in;
+
+typedef struct NvRmPowerGetState_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmPowerGetState_inout;
+
+typedef struct NvRmPowerGetState_out_t
+{
+ NvError ret_;
+ NvRmPowerState pState;
+} NV_ALIGN(4) NvRmPowerGetState_out;
+
+typedef struct NvRmPowerGetState_params_t
+{
+ NvRmPowerGetState_in in;
+ NvRmPowerGetState_inout inout;
+ NvRmPowerGetState_out out;
+} NvRmPowerGetState_params;
+
+typedef struct NvRmPowerEventNotify_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvRmPowerEvent Event;
+} NV_ALIGN(4) NvRmPowerEventNotify_in;
+
+typedef struct NvRmPowerEventNotify_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmPowerEventNotify_inout;
+
+typedef struct NvRmPowerEventNotify_out_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmPowerEventNotify_out;
+
+typedef struct NvRmPowerEventNotify_params_t
+{
+ NvRmPowerEventNotify_in in;
+ NvRmPowerEventNotify_inout inout;
+ NvRmPowerEventNotify_out out;
+} NvRmPowerEventNotify_params;
+
+typedef struct NvRmPowerGetEvent_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvU32 ClientId;
+} NV_ALIGN(4) NvRmPowerGetEvent_in;
+
+typedef struct NvRmPowerGetEvent_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmPowerGetEvent_inout;
+
+typedef struct NvRmPowerGetEvent_out_t
+{
+ NvError ret_;
+ NvRmPowerEvent pEvent;
+} NV_ALIGN(4) NvRmPowerGetEvent_out;
+
+typedef struct NvRmPowerGetEvent_params_t
+{
+ NvRmPowerGetEvent_in in;
+ NvRmPowerGetEvent_inout inout;
+ NvRmPowerGetEvent_out out;
+} NvRmPowerGetEvent_params;
+
+typedef struct NvRmPowerUnRegister_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvU32 ClientId;
+} NV_ALIGN(4) NvRmPowerUnRegister_in;
+
+typedef struct NvRmPowerUnRegister_inout_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmPowerUnRegister_inout;
+
+typedef struct NvRmPowerUnRegister_out_t
+{
+ NvU32 dummy_;
+} NV_ALIGN(4) NvRmPowerUnRegister_out;
+
+typedef struct NvRmPowerUnRegister_params_t
+{
+ NvRmPowerUnRegister_in in;
+ NvRmPowerUnRegister_inout inout;
+ NvRmPowerUnRegister_out out;
+} NvRmPowerUnRegister_params;
+
+typedef struct NvRmPowerRegister_in_t
+{
+ NvU32 package_;
+ NvU32 function_;
+ NvRmDeviceHandle hRmDeviceHandle;
+ NvOsSemaphoreHandle hEventSemaphore;
+} NV_ALIGN(4) NvRmPowerRegister_in;
+
+typedef struct NvRmPowerRegister_inout_t
+{
+ NvU32 pClientId;
+} NV_ALIGN(4) NvRmPowerRegister_inout;
+
+typedef struct NvRmPowerRegister_out_t
+{
+ NvError ret_;
+} NV_ALIGN(4) NvRmPowerRegister_out;
+
+typedef struct NvRmPowerRegister_params_t
+{
+ NvRmPowerRegister_in in;
+ NvRmPowerRegister_inout inout;
+ NvRmPowerRegister_out out;
+} NvRmPowerRegister_params;
+
+static NvError NvRmKernelPowerResume_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmKernelPowerResume_in *p_in;
+ NvRmKernelPowerResume_out *p_out;
+
+ p_in = (NvRmKernelPowerResume_in *)InBuffer;
+ p_out = (NvRmKernelPowerResume_out *)((NvU8 *)OutBuffer + OFFSET(NvRmKernelPowerResume_params, out) - OFFSET(NvRmKernelPowerResume_params, inout));
+
+
+ p_out->ret_ = NvRmKernelPowerResume( p_in->hRmDeviceHandle );
+
+ return err_;
+}
+
+static NvError NvRmKernelPowerSuspend_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmKernelPowerSuspend_in *p_in;
+ NvRmKernelPowerSuspend_out *p_out;
+
+ p_in = (NvRmKernelPowerSuspend_in *)InBuffer;
+ p_out = (NvRmKernelPowerSuspend_out *)((NvU8 *)OutBuffer + OFFSET(NvRmKernelPowerSuspend_params, out) - OFFSET(NvRmKernelPowerSuspend_params, inout));
+
+
+ p_out->ret_ = NvRmKernelPowerSuspend( p_in->hRmDeviceHandle );
+
+ return err_;
+}
+
+static NvError NvRmDfsSetLowVoltageThreshold_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmDfsSetLowVoltageThreshold_in *p_in;
+
+ p_in = (NvRmDfsSetLowVoltageThreshold_in *)InBuffer;
+
+
+ NvRmDfsSetLowVoltageThreshold( p_in->hRmDeviceHandle, p_in->RailId, p_in->LowMv );
+
+ return err_;
+}
+
+static NvError NvRmDfsGetLowVoltageThreshold_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmDfsGetLowVoltageThreshold_in *p_in;
+ NvRmDfsGetLowVoltageThreshold_out *p_out;
+
+ p_in = (NvRmDfsGetLowVoltageThreshold_in *)InBuffer;
+ p_out = (NvRmDfsGetLowVoltageThreshold_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsGetLowVoltageThreshold_params, out) - OFFSET(NvRmDfsGetLowVoltageThreshold_params, inout));
+
+
+ NvRmDfsGetLowVoltageThreshold( p_in->hRmDeviceHandle, p_in->RailId, &p_out->pLowMv, &p_out->pPresentMv );
+
+ return err_;
+}
+
+static NvError NvRmDfsLogBusyGetEntry_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmDfsLogBusyGetEntry_in *p_in;
+ NvRmDfsLogBusyGetEntry_out *p_out;
+
+ p_in = (NvRmDfsLogBusyGetEntry_in *)InBuffer;
+ p_out = (NvRmDfsLogBusyGetEntry_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsLogBusyGetEntry_params, out) - OFFSET(NvRmDfsLogBusyGetEntry_params, inout));
+
+
+ p_out->ret_ = NvRmDfsLogBusyGetEntry( p_in->hRmDeviceHandle, p_in->EntryIndex, &p_out->pSampleIndex, &p_out->pClientId, &p_out->pClientTag, &p_out->pBusyHint );
+
+ return err_;
+}
+
+static NvError NvRmDfsLogStarvationGetEntry_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmDfsLogStarvationGetEntry_in *p_in;
+ NvRmDfsLogStarvationGetEntry_out *p_out;
+
+ p_in = (NvRmDfsLogStarvationGetEntry_in *)InBuffer;
+ p_out = (NvRmDfsLogStarvationGetEntry_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsLogStarvationGetEntry_params, out) - OFFSET(NvRmDfsLogStarvationGetEntry_params, inout));
+
+
+ p_out->ret_ = NvRmDfsLogStarvationGetEntry( p_in->hRmDeviceHandle, p_in->EntryIndex, &p_out->pSampleIndex, &p_out->pClientId, &p_out->pClientTag, &p_out->pStarvationHint );
+
+ return err_;
+}
+
+static NvError NvRmDfsLogActivityGetEntry_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmDfsLogActivityGetEntry_in *p_in;
+ NvRmDfsLogActivityGetEntry_out *p_out;
+ NvU32 *pActiveCyclesList = NULL;
+ NvRmFreqKHz *pAveragesList = NULL;
+ NvRmFreqKHz *pFrequenciesList = NULL;
+
+ p_in = (NvRmDfsLogActivityGetEntry_in *)InBuffer;
+ p_out = (NvRmDfsLogActivityGetEntry_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsLogActivityGetEntry_params, out) - OFFSET(NvRmDfsLogActivityGetEntry_params, inout));
+
+ if( p_in->LogDomainsCount && p_in->pActiveCyclesList )
+ {
+ pActiveCyclesList = (NvU32 *)NvOsAlloc( p_in->LogDomainsCount * sizeof( NvU32 ) );
+ if( !pActiveCyclesList )
+ {
+ err_ = NvError_InsufficientMemory;
+ goto clean;
+ }
+ }
+ if( p_in->LogDomainsCount && p_in->pAveragesList )
+ {
+ pAveragesList = (NvRmFreqKHz *)NvOsAlloc( p_in->LogDomainsCount * sizeof( NvRmFreqKHz ) );
+ if( !pAveragesList )
+ {
+ err_ = NvError_InsufficientMemory;
+ goto clean;
+ }
+ }
+ if( p_in->LogDomainsCount && p_in->pFrequenciesList )
+ {
+ pFrequenciesList = (NvRmFreqKHz *)NvOsAlloc( p_in->LogDomainsCount * sizeof( NvRmFreqKHz ) );
+ if( !pFrequenciesList )
+ {
+ err_ = NvError_InsufficientMemory;
+ goto clean;
+ }
+ }
+
+ p_out->ret_ = NvRmDfsLogActivityGetEntry( p_in->hRmDeviceHandle, p_in->EntryIndex, p_in->LogDomainsCount, &p_out->pIntervalMs, &p_out->pLp2TimeMs, pActiveCyclesList, pAveragesList, pFrequenciesList );
+
+ if(p_in->pActiveCyclesList && pActiveCyclesList)
+ {
+ err_ = NvOsCopyOut( p_in->pActiveCyclesList, pActiveCyclesList, p_in->LogDomainsCount * sizeof( NvU32 ) );
+ if( err_ != NvSuccess )
+ {
+ err_ = NvError_BadParameter;
+ }
+ }
+ if(p_in->pAveragesList && pAveragesList)
+ {
+ err_ = NvOsCopyOut( p_in->pAveragesList, pAveragesList, p_in->LogDomainsCount * sizeof( NvRmFreqKHz ) );
+ if( err_ != NvSuccess )
+ {
+ err_ = NvError_BadParameter;
+ }
+ }
+ if(p_in->pFrequenciesList && pFrequenciesList)
+ {
+ err_ = NvOsCopyOut( p_in->pFrequenciesList, pFrequenciesList, p_in->LogDomainsCount * sizeof( NvRmFreqKHz ) );
+ if( err_ != NvSuccess )
+ {
+ err_ = NvError_BadParameter;
+ }
+ }
+clean:
+ NvOsFree( pActiveCyclesList );
+ NvOsFree( pAveragesList );
+ NvOsFree( pFrequenciesList );
+ return err_;
+}
+
+static NvError NvRmDfsLogGetMeanFrequencies_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmDfsLogGetMeanFrequencies_in *p_in;
+ NvRmDfsLogGetMeanFrequencies_out *p_out;
+ NvRmFreqKHz *pLogMeanFreqList = NULL;
+
+ p_in = (NvRmDfsLogGetMeanFrequencies_in *)InBuffer;
+ p_out = (NvRmDfsLogGetMeanFrequencies_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsLogGetMeanFrequencies_params, out) - OFFSET(NvRmDfsLogGetMeanFrequencies_params, inout));
+
+ if( p_in->LogMeanFreqListCount && p_in->pLogMeanFreqList )
+ {
+ pLogMeanFreqList = (NvRmFreqKHz *)NvOsAlloc( p_in->LogMeanFreqListCount * sizeof( NvRmFreqKHz ) );
+ if( !pLogMeanFreqList )
+ {
+ err_ = NvError_InsufficientMemory;
+ goto clean;
+ }
+ }
+
+ p_out->ret_ = NvRmDfsLogGetMeanFrequencies( p_in->hRmDeviceHandle, p_in->LogMeanFreqListCount, pLogMeanFreqList, &p_out->pLogLp2TimeMs, &p_out->pLogLp2Entries );
+
+ if(p_in->pLogMeanFreqList && pLogMeanFreqList)
+ {
+ err_ = NvOsCopyOut( p_in->pLogMeanFreqList, pLogMeanFreqList, p_in->LogMeanFreqListCount * sizeof( NvRmFreqKHz ) );
+ if( err_ != NvSuccess )
+ {
+ err_ = NvError_BadParameter;
+ }
+ }
+clean:
+ NvOsFree( pLogMeanFreqList );
+ return err_;
+}
+
+static NvError NvRmDfsLogStart_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmDfsLogStart_in *p_in;
+
+ p_in = (NvRmDfsLogStart_in *)InBuffer;
+
+
+ NvRmDfsLogStart( p_in->hRmDeviceHandle );
+
+ return err_;
+}
+
+static NvError NvRmDfsGetProfileData_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmDfsGetProfileData_in *p_in;
+ NvRmDfsGetProfileData_out *p_out;
+ NvU32 *pSamplesNoList = NULL;
+ NvU32 *pProfileTimeUsList = NULL;
+
+ p_in = (NvRmDfsGetProfileData_in *)InBuffer;
+ p_out = (NvRmDfsGetProfileData_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsGetProfileData_params, out) - OFFSET(NvRmDfsGetProfileData_params, inout));
+
+ if( p_in->DfsProfileCount && p_in->pSamplesNoList )
+ {
+ pSamplesNoList = (NvU32 *)NvOsAlloc( p_in->DfsProfileCount * sizeof( NvU32 ) );
+ if( !pSamplesNoList )
+ {
+ err_ = NvError_InsufficientMemory;
+ goto clean;
+ }
+ }
+ if( p_in->DfsProfileCount && p_in->pProfileTimeUsList )
+ {
+ pProfileTimeUsList = (NvU32 *)NvOsAlloc( p_in->DfsProfileCount * sizeof( NvU32 ) );
+ if( !pProfileTimeUsList )
+ {
+ err_ = NvError_InsufficientMemory;
+ goto clean;
+ }
+ }
+
+ p_out->ret_ = NvRmDfsGetProfileData( p_in->hRmDeviceHandle, p_in->DfsProfileCount, pSamplesNoList, pProfileTimeUsList, &p_out->pDfsPeriodUs );
+
+ if(p_in->pSamplesNoList && pSamplesNoList)
+ {
+ err_ = NvOsCopyOut( p_in->pSamplesNoList, pSamplesNoList, p_in->DfsProfileCount * sizeof( NvU32 ) );
+ if( err_ != NvSuccess )
+ {
+ err_ = NvError_BadParameter;
+ }
+ }
+ if(p_in->pProfileTimeUsList && pProfileTimeUsList)
+ {
+ err_ = NvOsCopyOut( p_in->pProfileTimeUsList, pProfileTimeUsList, p_in->DfsProfileCount * sizeof( NvU32 ) );
+ if( err_ != NvSuccess )
+ {
+ err_ = NvError_BadParameter;
+ }
+ }
+clean:
+ NvOsFree( pSamplesNoList );
+ NvOsFree( pProfileTimeUsList );
+ return err_;
+}
+
+static NvError NvRmDfsSetAvHighCorner_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmDfsSetAvHighCorner_in *p_in;
+ NvRmDfsSetAvHighCorner_out *p_out;
+
+ p_in = (NvRmDfsSetAvHighCorner_in *)InBuffer;
+ p_out = (NvRmDfsSetAvHighCorner_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsSetAvHighCorner_params, out) - OFFSET(NvRmDfsSetAvHighCorner_params, inout));
+
+
+ p_out->ret_ = NvRmDfsSetAvHighCorner( p_in->hRmDeviceHandle, p_in->DfsSystemHighKHz, p_in->DfsAvpHighKHz, p_in->DfsVpipeHighKHz );
+
+ return err_;
+}
+
+static NvError NvRmDfsSetCpuEmcHighCorner_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmDfsSetCpuEmcHighCorner_in *p_in;
+ NvRmDfsSetCpuEmcHighCorner_out *p_out;
+
+ p_in = (NvRmDfsSetCpuEmcHighCorner_in *)InBuffer;
+ p_out = (NvRmDfsSetCpuEmcHighCorner_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsSetCpuEmcHighCorner_params, out) - OFFSET(NvRmDfsSetCpuEmcHighCorner_params, inout));
+
+
+ p_out->ret_ = NvRmDfsSetCpuEmcHighCorner( p_in->hRmDeviceHandle, p_in->DfsCpuHighKHz, p_in->DfsEmcHighKHz );
+
+ return err_;
+}
+
+static NvError NvRmDfsSetEmcEnvelope_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmDfsSetEmcEnvelope_in *p_in;
+ NvRmDfsSetEmcEnvelope_out *p_out;
+
+ p_in = (NvRmDfsSetEmcEnvelope_in *)InBuffer;
+ p_out = (NvRmDfsSetEmcEnvelope_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsSetEmcEnvelope_params, out) - OFFSET(NvRmDfsSetEmcEnvelope_params, inout));
+
+
+ p_out->ret_ = NvRmDfsSetEmcEnvelope( p_in->hRmDeviceHandle, p_in->DfsEmcLowCornerKHz, p_in->DfsEmcHighCornerKHz );
+
+ return err_;
+}
+
+static NvError NvRmDfsSetCpuEnvelope_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmDfsSetCpuEnvelope_in *p_in;
+ NvRmDfsSetCpuEnvelope_out *p_out;
+
+ p_in = (NvRmDfsSetCpuEnvelope_in *)InBuffer;
+ p_out = (NvRmDfsSetCpuEnvelope_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsSetCpuEnvelope_params, out) - OFFSET(NvRmDfsSetCpuEnvelope_params, inout));
+
+
+ p_out->ret_ = NvRmDfsSetCpuEnvelope( p_in->hRmDeviceHandle, p_in->DfsCpuLowCornerKHz, p_in->DfsCpuHighCornerKHz );
+
+ return err_;
+}
+
+static NvError NvRmDfsSetTarget_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmDfsSetTarget_in *p_in;
+ NvRmDfsSetTarget_out *p_out;
+ NvRmFreqKHz *pDfsTargetFreqList = NULL;
+
+ p_in = (NvRmDfsSetTarget_in *)InBuffer;
+ p_out = (NvRmDfsSetTarget_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsSetTarget_params, out) - OFFSET(NvRmDfsSetTarget_params, inout));
+
+ if( p_in->DfsFreqListCount && p_in->pDfsTargetFreqList )
+ {
+ pDfsTargetFreqList = (NvRmFreqKHz *)NvOsAlloc( p_in->DfsFreqListCount * sizeof( NvRmFreqKHz ) );
+ if( !pDfsTargetFreqList )
+ {
+ err_ = NvError_InsufficientMemory;
+ goto clean;
+ }
+ if( p_in->pDfsTargetFreqList )
+ {
+ err_ = NvOsCopyIn( pDfsTargetFreqList, p_in->pDfsTargetFreqList, p_in->DfsFreqListCount * sizeof( NvRmFreqKHz ) );
+ if( err_ != NvSuccess )
+ {
+ err_ = NvError_BadParameter;
+ goto clean;
+ }
+ }
+ }
+
+ p_out->ret_ = NvRmDfsSetTarget( p_in->hRmDeviceHandle, p_in->DfsFreqListCount, pDfsTargetFreqList );
+
+clean:
+ NvOsFree( pDfsTargetFreqList );
+ return err_;
+}
+
+static NvError NvRmDfsSetLowCorner_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmDfsSetLowCorner_in *p_in;
+ NvRmDfsSetLowCorner_out *p_out;
+ NvRmFreqKHz *pDfsLowFreqList = NULL;
+
+ p_in = (NvRmDfsSetLowCorner_in *)InBuffer;
+ p_out = (NvRmDfsSetLowCorner_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsSetLowCorner_params, out) - OFFSET(NvRmDfsSetLowCorner_params, inout));
+
+ if( p_in->DfsFreqListCount && p_in->pDfsLowFreqList )
+ {
+ pDfsLowFreqList = (NvRmFreqKHz *)NvOsAlloc( p_in->DfsFreqListCount * sizeof( NvRmFreqKHz ) );
+ if( !pDfsLowFreqList )
+ {
+ err_ = NvError_InsufficientMemory;
+ goto clean;
+ }
+ if( p_in->pDfsLowFreqList )
+ {
+ err_ = NvOsCopyIn( pDfsLowFreqList, p_in->pDfsLowFreqList, p_in->DfsFreqListCount * sizeof( NvRmFreqKHz ) );
+ if( err_ != NvSuccess )
+ {
+ err_ = NvError_BadParameter;
+ goto clean;
+ }
+ }
+ }
+
+ p_out->ret_ = NvRmDfsSetLowCorner( p_in->hRmDeviceHandle, p_in->DfsFreqListCount, pDfsLowFreqList );
+
+clean:
+ NvOsFree( pDfsLowFreqList );
+ return err_;
+}
+
+static NvError NvRmDfsSetState_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmDfsSetState_in *p_in;
+ NvRmDfsSetState_out *p_out;
+
+ p_in = (NvRmDfsSetState_in *)InBuffer;
+ p_out = (NvRmDfsSetState_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsSetState_params, out) - OFFSET(NvRmDfsSetState_params, inout));
+
+
+ p_out->ret_ = NvRmDfsSetState( p_in->hRmDeviceHandle, p_in->NewDfsRunState );
+
+ return err_;
+}
+
+static NvError NvRmDfsGetClockUtilization_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmDfsGetClockUtilization_in *p_in;
+ NvRmDfsGetClockUtilization_out *p_out;
+
+ p_in = (NvRmDfsGetClockUtilization_in *)InBuffer;
+ p_out = (NvRmDfsGetClockUtilization_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsGetClockUtilization_params, out) - OFFSET(NvRmDfsGetClockUtilization_params, inout));
+
+
+ p_out->ret_ = NvRmDfsGetClockUtilization( p_in->hRmDeviceHandle, p_in->ClockId, &p_out->pClockUsage );
+
+ return err_;
+}
+
+static NvError NvRmDfsGetState_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmDfsGetState_in *p_in;
+ NvRmDfsGetState_out *p_out;
+
+ p_in = (NvRmDfsGetState_in *)InBuffer;
+ p_out = (NvRmDfsGetState_out *)((NvU8 *)OutBuffer + OFFSET(NvRmDfsGetState_params, out) - OFFSET(NvRmDfsGetState_params, inout));
+
+
+ p_out->ret_ = NvRmDfsGetState( p_in->hRmDeviceHandle );
+
+ return err_;
+}
+
+static NvError NvRmPowerActivityHint_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmPowerActivityHint_in *p_in;
+ NvRmPowerActivityHint_out *p_out;
+
+ p_in = (NvRmPowerActivityHint_in *)InBuffer;
+ p_out = (NvRmPowerActivityHint_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerActivityHint_params, out) - OFFSET(NvRmPowerActivityHint_params, inout));
+
+
+ p_out->ret_ = NvRmPowerActivityHint( p_in->hRmDeviceHandle, p_in->ModuleId, p_in->ClientId, p_in->ActivityDurationMs );
+
+ return err_;
+}
+
+static NvError NvRmPowerStarvationHintMulti_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmPowerStarvationHintMulti_in *p_in;
+ NvRmPowerStarvationHintMulti_out *p_out;
+ NvRmDfsStarvationHint *pMultiHint = NULL;
+
+ p_in = (NvRmPowerStarvationHintMulti_in *)InBuffer;
+ p_out = (NvRmPowerStarvationHintMulti_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerStarvationHintMulti_params, out) - OFFSET(NvRmPowerStarvationHintMulti_params, inout));
+
+ if( p_in->NumHints && p_in->pMultiHint )
+ {
+ pMultiHint = (NvRmDfsStarvationHint *)NvOsAlloc( p_in->NumHints * sizeof( NvRmDfsStarvationHint ) );
+ if( !pMultiHint )
+ {
+ err_ = NvError_InsufficientMemory;
+ goto clean;
+ }
+ if( p_in->pMultiHint )
+ {
+ err_ = NvOsCopyIn( pMultiHint, p_in->pMultiHint, p_in->NumHints * sizeof( NvRmDfsStarvationHint ) );
+ if( err_ != NvSuccess )
+ {
+ err_ = NvError_BadParameter;
+ goto clean;
+ }
+ }
+ }
+
+ p_out->ret_ = NvRmPowerStarvationHintMulti( p_in->hRmDeviceHandle, p_in->ClientId, pMultiHint, p_in->NumHints );
+
+clean:
+ NvOsFree( pMultiHint );
+ return err_;
+}
+
+static NvError NvRmPowerStarvationHint_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmPowerStarvationHint_in *p_in;
+ NvRmPowerStarvationHint_out *p_out;
+
+ p_in = (NvRmPowerStarvationHint_in *)InBuffer;
+ p_out = (NvRmPowerStarvationHint_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerStarvationHint_params, out) - OFFSET(NvRmPowerStarvationHint_params, inout));
+
+
+ p_out->ret_ = NvRmPowerStarvationHint( p_in->hRmDeviceHandle, p_in->ClockId, p_in->ClientId, p_in->Starving );
+
+ return err_;
+}
+
+static NvError NvRmPowerBusyHintMulti_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmPowerBusyHintMulti_in *p_in;
+ NvRmPowerBusyHintMulti_out *p_out;
+ NvRmDfsBusyHint *pMultiHint = NULL;
+
+ p_in = (NvRmPowerBusyHintMulti_in *)InBuffer;
+ p_out = (NvRmPowerBusyHintMulti_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerBusyHintMulti_params, out) - OFFSET(NvRmPowerBusyHintMulti_params, inout));
+
+ if( p_in->NumHints && p_in->pMultiHint )
+ {
+ pMultiHint = (NvRmDfsBusyHint *)NvOsAlloc( p_in->NumHints * sizeof( NvRmDfsBusyHint ) );
+ if( !pMultiHint )
+ {
+ err_ = NvError_InsufficientMemory;
+ goto clean;
+ }
+ if( p_in->pMultiHint )
+ {
+ err_ = NvOsCopyIn( pMultiHint, p_in->pMultiHint, p_in->NumHints * sizeof( NvRmDfsBusyHint ) );
+ if( err_ != NvSuccess )
+ {
+ err_ = NvError_BadParameter;
+ goto clean;
+ }
+ }
+ }
+
+ p_out->ret_ = NvRmPowerBusyHintMulti( p_in->hRmDeviceHandle, p_in->ClientId, pMultiHint, p_in->NumHints, p_in->Mode );
+
+clean:
+ NvOsFree( pMultiHint );
+ return err_;
+}
+
+static NvError NvRmPowerBusyHint_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmPowerBusyHint_in *p_in;
+ NvRmPowerBusyHint_out *p_out;
+
+ p_in = (NvRmPowerBusyHint_in *)InBuffer;
+ p_out = (NvRmPowerBusyHint_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerBusyHint_params, out) - OFFSET(NvRmPowerBusyHint_params, inout));
+
+
+ p_out->ret_ = NvRmPowerBusyHint( p_in->hRmDeviceHandle, p_in->ClockId, p_in->ClientId, p_in->BoostDurationMs, p_in->BoostKHz );
+
+ return err_;
+}
+
+static NvError NvRmListPowerAwareModules_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmListPowerAwareModules_in *p_in;
+ NvRmListPowerAwareModules_inout *p_inout;
+ NvRmListPowerAwareModules_inout inout;
+ NvRmModuleID *pIdList = NULL;
+ NvBool *pActiveList = NULL;
+
+ p_in = (NvRmListPowerAwareModules_in *)InBuffer;
+ p_inout = (NvRmListPowerAwareModules_inout *)((NvU8 *)InBuffer + OFFSET(NvRmListPowerAwareModules_params, inout));
+
+ (void)inout;
+ inout.pListSize = p_inout->pListSize;
+ if( p_inout->pListSize && p_in->pIdList )
+ {
+ pIdList = (NvRmModuleID *)NvOsAlloc( p_inout->pListSize * sizeof( NvRmModuleID ) );
+ if( !pIdList )
+ {
+ err_ = NvError_InsufficientMemory;
+ goto clean;
+ }
+ }
+ if( p_inout->pListSize && p_in->pActiveList )
+ {
+ pActiveList = (NvBool *)NvOsAlloc( p_inout->pListSize * sizeof( NvBool ) );
+ if( !pActiveList )
+ {
+ err_ = NvError_InsufficientMemory;
+ goto clean;
+ }
+ }
+
+ NvRmListPowerAwareModules( p_in->hRmDeviceHandle, &inout.pListSize, pIdList, pActiveList );
+
+
+ p_inout = (NvRmListPowerAwareModules_inout *)OutBuffer;
+ p_inout->pListSize = inout.pListSize;
+ if(p_in->pIdList && pIdList)
+ {
+ err_ = NvOsCopyOut( p_in->pIdList, pIdList, p_inout->pListSize * sizeof( NvRmModuleID ) );
+ if( err_ != NvSuccess )
+ {
+ err_ = NvError_BadParameter;
+ }
+ }
+ if(p_in->pActiveList && pActiveList)
+ {
+ err_ = NvOsCopyOut( p_in->pActiveList, pActiveList, p_inout->pListSize * sizeof( NvBool ) );
+ if( err_ != NvSuccess )
+ {
+ err_ = NvError_BadParameter;
+ }
+ }
+clean:
+ NvOsFree( pIdList );
+ NvOsFree( pActiveList );
+ return err_;
+}
+
+static NvError NvRmPowerVoltageControl_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmPowerVoltageControl_in *p_in;
+ NvRmPowerVoltageControl_out *p_out;
+ NvRmMilliVolts *PrefVoltageList = NULL;
+
+ p_in = (NvRmPowerVoltageControl_in *)InBuffer;
+ p_out = (NvRmPowerVoltageControl_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerVoltageControl_params, out) - OFFSET(NvRmPowerVoltageControl_params, inout));
+
+ if( p_in->PrefVoltageListCount && p_in->PrefVoltageList )
+ {
+ PrefVoltageList = (NvRmMilliVolts *)NvOsAlloc( p_in->PrefVoltageListCount * sizeof( NvRmMilliVolts ) );
+ if( !PrefVoltageList )
+ {
+ err_ = NvError_InsufficientMemory;
+ goto clean;
+ }
+ if( p_in->PrefVoltageList )
+ {
+ err_ = NvOsCopyIn( PrefVoltageList, p_in->PrefVoltageList, p_in->PrefVoltageListCount * sizeof( NvRmMilliVolts ) );
+ if( err_ != NvSuccess )
+ {
+ err_ = NvError_BadParameter;
+ goto clean;
+ }
+ }
+ }
+
+ p_out->ret_ = NvRmPowerVoltageControl( p_in->hRmDeviceHandle, p_in->ModuleId, p_in->ClientId, p_in->MinVolts, p_in->MaxVolts, PrefVoltageList, p_in->PrefVoltageListCount, &p_out->CurrentVolts );
+
+clean:
+ NvOsFree( PrefVoltageList );
+ return err_;
+}
+
+static NvError NvRmPowerModuleClockControl_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmPowerModuleClockControl_in *p_in;
+ NvRmPowerModuleClockControl_out *p_out;
+
+ p_in = (NvRmPowerModuleClockControl_in *)InBuffer;
+ p_out = (NvRmPowerModuleClockControl_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerModuleClockControl_params, out) - OFFSET(NvRmPowerModuleClockControl_params, inout));
+
+
+ p_out->ret_ = NvRmPowerModuleClockControl( p_in->hRmDeviceHandle, p_in->ModuleId, p_in->ClientId, p_in->Enable );
+
+ return err_;
+}
+
+static NvError NvRmPowerModuleClockConfig_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmPowerModuleClockConfig_in *p_in;
+ NvRmPowerModuleClockConfig_out *p_out;
+ NvRmFreqKHz *PrefFreqList = NULL;
+
+ p_in = (NvRmPowerModuleClockConfig_in *)InBuffer;
+ p_out = (NvRmPowerModuleClockConfig_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerModuleClockConfig_params, out) - OFFSET(NvRmPowerModuleClockConfig_params, inout));
+
+ if( p_in->PrefFreqListCount && p_in->PrefFreqList )
+ {
+ PrefFreqList = (NvRmFreqKHz *)NvOsAlloc( p_in->PrefFreqListCount * sizeof( NvRmFreqKHz ) );
+ if( !PrefFreqList )
+ {
+ err_ = NvError_InsufficientMemory;
+ goto clean;
+ }
+ if( p_in->PrefFreqList )
+ {
+ err_ = NvOsCopyIn( PrefFreqList, p_in->PrefFreqList, p_in->PrefFreqListCount * sizeof( NvRmFreqKHz ) );
+ if( err_ != NvSuccess )
+ {
+ err_ = NvError_BadParameter;
+ goto clean;
+ }
+ }
+ }
+
+ p_out->ret_ = NvRmPowerModuleClockConfig( p_in->hRmDeviceHandle, p_in->ModuleId, p_in->ClientId, p_in->MinFreq, p_in->MaxFreq, PrefFreqList, p_in->PrefFreqListCount, &p_out->CurrentFreq, p_in->flags );
+
+clean:
+ NvOsFree( PrefFreqList );
+ return err_;
+}
+
+static NvError NvRmPowerModuleGetMaxFrequency_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmPowerModuleGetMaxFrequency_in *p_in;
+ NvRmPowerModuleGetMaxFrequency_out *p_out;
+
+ p_in = (NvRmPowerModuleGetMaxFrequency_in *)InBuffer;
+ p_out = (NvRmPowerModuleGetMaxFrequency_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerModuleGetMaxFrequency_params, out) - OFFSET(NvRmPowerModuleGetMaxFrequency_params, inout));
+
+
+ p_out->ret_ = NvRmPowerModuleGetMaxFrequency( p_in->hRmDeviceHandle, p_in->ModuleId );
+
+ return err_;
+}
+
+static NvError NvRmPowerGetPrimaryFrequency_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmPowerGetPrimaryFrequency_in *p_in;
+ NvRmPowerGetPrimaryFrequency_out *p_out;
+
+ p_in = (NvRmPowerGetPrimaryFrequency_in *)InBuffer;
+ p_out = (NvRmPowerGetPrimaryFrequency_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerGetPrimaryFrequency_params, out) - OFFSET(NvRmPowerGetPrimaryFrequency_params, inout));
+
+
+ p_out->ret_ = NvRmPowerGetPrimaryFrequency( p_in->hRmDeviceHandle );
+
+ return err_;
+}
+
+static NvError NvRmPowerGetState_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmPowerGetState_in *p_in;
+ NvRmPowerGetState_out *p_out;
+
+ p_in = (NvRmPowerGetState_in *)InBuffer;
+ p_out = (NvRmPowerGetState_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerGetState_params, out) - OFFSET(NvRmPowerGetState_params, inout));
+
+
+ p_out->ret_ = NvRmPowerGetState( p_in->hRmDeviceHandle, &p_out->pState );
+
+ return err_;
+}
+
+static NvError NvRmPowerEventNotify_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmPowerEventNotify_in *p_in;
+
+ p_in = (NvRmPowerEventNotify_in *)InBuffer;
+
+
+ NvRmPowerEventNotify( p_in->hRmDeviceHandle, p_in->Event );
+
+ return err_;
+}
+
+static NvError NvRmPowerGetEvent_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmPowerGetEvent_in *p_in;
+ NvRmPowerGetEvent_out *p_out;
+
+ p_in = (NvRmPowerGetEvent_in *)InBuffer;
+ p_out = (NvRmPowerGetEvent_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerGetEvent_params, out) - OFFSET(NvRmPowerGetEvent_params, inout));
+
+
+ p_out->ret_ = NvRmPowerGetEvent( p_in->hRmDeviceHandle, p_in->ClientId, &p_out->pEvent );
+
+ return err_;
+}
+
+static NvError NvRmPowerUnRegister_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmPowerUnRegister_in *p_in;
+
+ p_in = (NvRmPowerUnRegister_in *)InBuffer;
+
+
+ NvRmPowerUnRegister( p_in->hRmDeviceHandle, p_in->ClientId );
+
+ return err_;
+}
+
+static NvError NvRmPowerRegister_dispatch_( void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+ NvRmPowerRegister_in *p_in;
+ NvRmPowerRegister_inout *p_inout;
+ NvRmPowerRegister_out *p_out;
+ NvRmPowerRegister_inout inout;
+ NvOsSemaphoreHandle hEventSemaphore = NULL;
+
+ p_in = (NvRmPowerRegister_in *)InBuffer;
+ p_inout = (NvRmPowerRegister_inout *)((NvU8 *)InBuffer + OFFSET(NvRmPowerRegister_params, inout));
+ p_out = (NvRmPowerRegister_out *)((NvU8 *)OutBuffer + OFFSET(NvRmPowerRegister_params, out) - OFFSET(NvRmPowerRegister_params, inout));
+
+ (void)inout;
+ if( p_in->hEventSemaphore )
+ {
+ err_ = NvOsSemaphoreUnmarshal( p_in->hEventSemaphore, &hEventSemaphore );
+ if( err_ != NvSuccess )
+ {
+ err_ = NvError_BadParameter;
+ goto clean;
+ }
+ }
+ inout.pClientId = p_inout->pClientId;
+
+ p_out->ret_ = NvRmPowerRegister( p_in->hRmDeviceHandle, hEventSemaphore, &inout.pClientId );
+
+
+ p_inout = (NvRmPowerRegister_inout *)OutBuffer;
+ p_inout->pClientId = inout.pClientId;
+clean:
+ NvOsSemaphoreDestroy( hEventSemaphore );
+ return err_;
+}
+
+NvError nvrm_power_Dispatch( NvU32 function, void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx );
+NvError nvrm_power_Dispatch( NvU32 function, void *InBuffer, NvU32 InSize, void *OutBuffer, NvU32 OutSize, NvDispatchCtx* Ctx )
+{
+ NvError err_ = NvSuccess;
+
+ switch( function ) {
+ case 34:
+ err_ = NvRmKernelPowerResume_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 33:
+ err_ = NvRmKernelPowerSuspend_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 32:
+ err_ = NvRmDfsSetLowVoltageThreshold_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 31:
+ err_ = NvRmDfsGetLowVoltageThreshold_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 30:
+ err_ = NvRmDfsLogBusyGetEntry_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 29:
+ err_ = NvRmDfsLogStarvationGetEntry_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 28:
+ err_ = NvRmDfsLogActivityGetEntry_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 27:
+ err_ = NvRmDfsLogGetMeanFrequencies_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 26:
+ err_ = NvRmDfsLogStart_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 25:
+ err_ = NvRmDfsGetProfileData_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 24:
+ err_ = NvRmDfsSetAvHighCorner_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 23:
+ err_ = NvRmDfsSetCpuEmcHighCorner_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 22:
+ err_ = NvRmDfsSetEmcEnvelope_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 21:
+ err_ = NvRmDfsSetCpuEnvelope_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 20:
+ err_ = NvRmDfsSetTarget_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 19:
+ err_ = NvRmDfsSetLowCorner_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 18:
+ err_ = NvRmDfsSetState_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 17:
+ err_ = NvRmDfsGetClockUtilization_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 16:
+ err_ = NvRmDfsGetState_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 15:
+ err_ = NvRmPowerActivityHint_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 14:
+ err_ = NvRmPowerStarvationHintMulti_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 13:
+ err_ = NvRmPowerStarvationHint_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 12:
+ err_ = NvRmPowerBusyHintMulti_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 11:
+ err_ = NvRmPowerBusyHint_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 10:
+ err_ = NvRmListPowerAwareModules_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 9:
+ err_ = NvRmPowerVoltageControl_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 8:
+ err_ = NvRmPowerModuleClockControl_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 7:
+ err_ = NvRmPowerModuleClockConfig_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 6:
+ err_ = NvRmPowerModuleGetMaxFrequency_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 5:
+ err_ = NvRmPowerGetPrimaryFrequency_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 4:
+ err_ = NvRmPowerGetState_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 3:
+ err_ = NvRmPowerEventNotify_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 2:
+ err_ = NvRmPowerGetEvent_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 1:
+ err_ = NvRmPowerUnRegister_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ case 0:
+ err_ = NvRmPowerRegister_dispatch_( InBuffer, InSize, OutBuffer, OutSize, Ctx );
+ break;
+ default:
+ err_ = NvError_BadParameter;
+ break;
+ }
+
+ return err_;
+}
« 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