blob: 5a61f05f49da5f2d6086ed58f1c3d25b8d444d50 [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 Skeggs330c5982010-09-16 15:39:49 +100050
51/* nouveau_volt.c */
52void nouveau_volt_init(struct drm_device *);
53void nouveau_volt_fini(struct drm_device *);
54int nouveau_volt_vid_lookup(struct drm_device *, int voltage);
55int nouveau_volt_lvl_lookup(struct drm_device *, int vid);
56int nouveau_voltage_gpio_get(struct drm_device *);
57int nouveau_voltage_gpio_set(struct drm_device *, int voltage);
58
59/* nouveau_perf.c */
60void nouveau_perf_init(struct drm_device *);
61void nouveau_perf_fini(struct drm_device *);
Ben Skeggsfd99fd62012-01-17 21:10:58 +100062u8 *nouveau_perf_timing(struct drm_device *, u32 freq, u8 *ver, u8 *len);
Ben Skeggs330c5982010-09-16 15:39:49 +100063
Roy Spliet7760fcb2010-09-17 23:17:24 +020064/* nouveau_mem.c */
65void nouveau_mem_timing_init(struct drm_device *);
66void nouveau_mem_timing_fini(struct drm_device *);
67
Ben Skeggs442b6262010-09-16 16:25:26 +100068/* nv04_pm.c */
Ben Skeggs36f13172011-10-27 10:24:12 +100069int nv04_pm_clocks_get(struct drm_device *, struct nouveau_pm_level *);
70void *nv04_pm_clocks_pre(struct drm_device *, struct nouveau_pm_level *);
71int nv04_pm_clocks_set(struct drm_device *, void *);
Ben Skeggs442b6262010-09-16 16:25:26 +100072
Ben Skeggs1262a202011-07-18 15:15:34 +100073/* nv40_pm.c */
74int nv40_pm_clocks_get(struct drm_device *, struct nouveau_pm_level *);
75void *nv40_pm_clocks_pre(struct drm_device *, struct nouveau_pm_level *);
Martin Peresdd1da8d2011-07-10 00:08:41 +020076int nv40_pm_clocks_set(struct drm_device *, void *);
Ben Skeggs675aac02011-11-21 21:28:28 +100077int nv40_pm_pwm_get(struct drm_device *, int, u32 *, u32 *);
78int nv40_pm_pwm_set(struct drm_device *, int, u32, u32);
Ben Skeggs1262a202011-07-18 15:15:34 +100079
Ben Skeggs02c30ca2010-09-16 16:17:35 +100080/* nv50_pm.c */
Ben Skeggsf3fbaf32011-10-26 09:11:02 +100081int nv50_pm_clocks_get(struct drm_device *, struct nouveau_pm_level *);
82void *nv50_pm_clocks_pre(struct drm_device *, struct nouveau_pm_level *);
83int nv50_pm_clocks_set(struct drm_device *, void *);
Ben Skeggs675aac02011-11-21 21:28:28 +100084int nv50_pm_pwm_get(struct drm_device *, int, u32 *, u32 *);
85int nv50_pm_pwm_set(struct drm_device *, int, u32, u32);
Ben Skeggs02c30ca2010-09-16 16:17:35 +100086
Ben Skeggsfade7ad2010-09-27 11:18:14 +100087/* nva3_pm.c */
Ben Skeggsca94a712011-06-17 15:38:48 +100088int nva3_pm_clocks_get(struct drm_device *, struct nouveau_pm_level *);
89void *nva3_pm_clocks_pre(struct drm_device *, struct nouveau_pm_level *);
Martin Peresdd1da8d2011-07-10 00:08:41 +020090int nva3_pm_clocks_set(struct drm_device *, void *);
Ben Skeggsfade7ad2010-09-27 11:18:14 +100091
Ben Skeggs354d0782011-06-19 01:44:36 +100092/* nvc0_pm.c */
93int nvc0_pm_clocks_get(struct drm_device *, struct nouveau_pm_level *);
Ben Skeggs045da4e2011-10-29 00:22:49 +100094void *nvc0_pm_clocks_pre(struct drm_device *, struct nouveau_pm_level *);
95int nvc0_pm_clocks_set(struct drm_device *, void *);
Ben Skeggs354d0782011-06-19 01:44:36 +100096
Martin Peres34e9d852010-09-22 20:54:22 +020097/* nouveau_temp.c */
98void nouveau_temp_init(struct drm_device *dev);
99void nouveau_temp_fini(struct drm_device *dev);
100void nouveau_temp_safety_checks(struct drm_device *dev);
Francisco Jerez8155cac2010-09-23 20:58:38 +0200101int nv40_temp_get(struct drm_device *dev);
102int nv84_temp_get(struct drm_device *dev);
Martin Peres34e9d852010-09-22 20:54:22 +0200103
Ben Skeggs330c5982010-09-16 15:39:49 +1000104#endif