blob: 3f82dfea61dd77ed2b543269d6b31624de5ddfba [file] [log] [blame]
Ben Skeggs330c5982010-09-16 15:39:49 +10001/*
2 * Copyright 2010 Red Hat Inc.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 *
22 * Authors: Ben Skeggs
23 */
24
25#ifndef __NOUVEAU_PM_H__
26#define __NOUVEAU_PM_H__
27
Ben Skeggs2d85bc82012-01-23 13:12:09 +100028struct nouveau_mem_exec_func {
29 struct drm_device *dev;
30 void (*precharge)(struct nouveau_mem_exec_func *);
31 void (*refresh)(struct nouveau_mem_exec_func *);
32 void (*refresh_auto)(struct nouveau_mem_exec_func *, bool);
33 void (*refresh_self)(struct nouveau_mem_exec_func *, bool);
34 void (*wait)(struct nouveau_mem_exec_func *, u32 nsec);
35 u32 (*mrg)(struct nouveau_mem_exec_func *, int mr);
36 void (*mrs)(struct nouveau_mem_exec_func *, int mr, u32 data);
37 void (*clock_set)(struct nouveau_mem_exec_func *);
38 void (*timing_set)(struct nouveau_mem_exec_func *);
39 void *priv;
40};
41
42/* nouveau_mem.c */
43int nouveau_mem_exec(struct nouveau_mem_exec_func *,
44 struct nouveau_pm_level *);
45
Ben Skeggs330c5982010-09-16 15:39:49 +100046/* nouveau_pm.c */
47int nouveau_pm_init(struct drm_device *dev);
48void nouveau_pm_fini(struct drm_device *dev);
Ben Skeggs64f1c112010-09-17 13:35:25 +100049void nouveau_pm_resume(struct drm_device *dev);
Ben Skeggs8d7bb402012-01-24 15:59:07 +100050extern const struct nouveau_pm_profile_func nouveau_pm_static_profile_func;
51void nouveau_pm_trigger(struct drm_device *dev);
Ben Skeggs330c5982010-09-16 15:39:49 +100052
53/* nouveau_volt.c */
54void nouveau_volt_init(struct drm_device *);
55void nouveau_volt_fini(struct drm_device *);
56int nouveau_volt_vid_lookup(struct drm_device *, int voltage);
57int nouveau_volt_lvl_lookup(struct drm_device *, int vid);
58int nouveau_voltage_gpio_get(struct drm_device *);
59int nouveau_voltage_gpio_set(struct drm_device *, int voltage);
60
61/* nouveau_perf.c */
62void nouveau_perf_init(struct drm_device *);
63void nouveau_perf_fini(struct drm_device *);
Ben Skeggsfd99fd62012-01-17 21:10:58 +100064u8 *nouveau_perf_timing(struct drm_device *, u32 freq, u8 *ver, u8 *len);
Ben Skeggsa9bc2472012-01-24 11:26:40 +100065u8 *nouveau_perf_ramcfg(struct drm_device *, u32 freq, u8 *ver, u8 *len);
Ben Skeggs330c5982010-09-16 15:39:49 +100066
Roy Spliet7760fcb2010-09-17 23:17:24 +020067/* nouveau_mem.c */
68void nouveau_mem_timing_init(struct drm_device *);
69void nouveau_mem_timing_fini(struct drm_device *);
70
Ben Skeggs442b6262010-09-16 16:25:26 +100071/* nv04_pm.c */
Ben Skeggs36f13172011-10-27 10:24:12 +100072int nv04_pm_clocks_get(struct drm_device *, struct nouveau_pm_level *);
73void *nv04_pm_clocks_pre(struct drm_device *, struct nouveau_pm_level *);
74int nv04_pm_clocks_set(struct drm_device *, void *);
Ben Skeggs442b6262010-09-16 16:25:26 +100075
Ben Skeggs1262a202011-07-18 15:15:34 +100076/* nv40_pm.c */
77int nv40_pm_clocks_get(struct drm_device *, struct nouveau_pm_level *);
78void *nv40_pm_clocks_pre(struct drm_device *, struct nouveau_pm_level *);
Martin Peresdd1da8d2011-07-10 00:08:41 +020079int nv40_pm_clocks_set(struct drm_device *, void *);
Ben Skeggs675aac02011-11-21 21:28:28 +100080int nv40_pm_pwm_get(struct drm_device *, int, u32 *, u32 *);
81int nv40_pm_pwm_set(struct drm_device *, int, u32, u32);
Ben Skeggs1262a202011-07-18 15:15:34 +100082
Ben Skeggs02c30ca2010-09-16 16:17:35 +100083/* nv50_pm.c */
Ben Skeggsf3fbaf32011-10-26 09:11:02 +100084int nv50_pm_clocks_get(struct drm_device *, struct nouveau_pm_level *);
85void *nv50_pm_clocks_pre(struct drm_device *, struct nouveau_pm_level *);
86int nv50_pm_clocks_set(struct drm_device *, void *);
Ben Skeggs675aac02011-11-21 21:28:28 +100087int nv50_pm_pwm_get(struct drm_device *, int, u32 *, u32 *);
88int nv50_pm_pwm_set(struct drm_device *, int, u32, u32);
Ben Skeggs02c30ca2010-09-16 16:17:35 +100089
Ben Skeggsfade7ad2010-09-27 11:18:14 +100090/* nva3_pm.c */
Ben Skeggsca94a712011-06-17 15:38:48 +100091int nva3_pm_clocks_get(struct drm_device *, struct nouveau_pm_level *);
92void *nva3_pm_clocks_pre(struct drm_device *, struct nouveau_pm_level *);
Martin Peresdd1da8d2011-07-10 00:08:41 +020093int nva3_pm_clocks_set(struct drm_device *, void *);
Ben Skeggsfade7ad2010-09-27 11:18:14 +100094
Ben Skeggs354d0782011-06-19 01:44:36 +100095/* nvc0_pm.c */
96int nvc0_pm_clocks_get(struct drm_device *, struct nouveau_pm_level *);
Ben Skeggs045da4e2011-10-29 00:22:49 +100097void *nvc0_pm_clocks_pre(struct drm_device *, struct nouveau_pm_level *);
98int nvc0_pm_clocks_set(struct drm_device *, void *);
Ben Skeggs354d0782011-06-19 01:44:36 +100099
Martin Peres34e9d852010-09-22 20:54:22 +0200100/* nouveau_temp.c */
101void nouveau_temp_init(struct drm_device *dev);
102void nouveau_temp_fini(struct drm_device *dev);
103void nouveau_temp_safety_checks(struct drm_device *dev);
Francisco Jerez8155cac2010-09-23 20:58:38 +0200104int nv40_temp_get(struct drm_device *dev);
105int nv84_temp_get(struct drm_device *dev);
Martin Peres34e9d852010-09-22 20:54:22 +0200106
Ben Skeggs330c5982010-09-16 15:39:49 +1000107#endif