1330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs/*
2330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs * Copyright 2010 Red Hat Inc.
3330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs *
4330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs * Permission is hereby granted, free of charge, to any person obtaining a
5330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs * copy of this software and associated documentation files (the "Software"),
6330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs * to deal in the Software without restriction, including without limitation
7330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs * and/or sell copies of the Software, and to permit persons to whom the
9330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs * Software is furnished to do so, subject to the following conditions:
10330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs *
11330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs * The above copyright notice and this permission notice shall be included in
12330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs * all copies or substantial portions of the Software.
13330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs *
14330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs * OTHER DEALINGS IN THE SOFTWARE.
21330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs *
22330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs * Authors: Ben Skeggs
23330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs */
24330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs
25330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs#ifndef __NOUVEAU_PM_H__
26330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs#define __NOUVEAU_PM_H__
27330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs
282d85bc8855d2734f5585861b261c5fe7a7ed92c1Ben Skeggsstruct nouveau_mem_exec_func {
292d85bc8855d2734f5585861b261c5fe7a7ed92c1Ben Skeggs	struct drm_device *dev;
302d85bc8855d2734f5585861b261c5fe7a7ed92c1Ben Skeggs	void (*precharge)(struct nouveau_mem_exec_func *);
312d85bc8855d2734f5585861b261c5fe7a7ed92c1Ben Skeggs	void (*refresh)(struct nouveau_mem_exec_func *);
322d85bc8855d2734f5585861b261c5fe7a7ed92c1Ben Skeggs	void (*refresh_auto)(struct nouveau_mem_exec_func *, bool);
332d85bc8855d2734f5585861b261c5fe7a7ed92c1Ben Skeggs	void (*refresh_self)(struct nouveau_mem_exec_func *, bool);
342d85bc8855d2734f5585861b261c5fe7a7ed92c1Ben Skeggs	void (*wait)(struct nouveau_mem_exec_func *, u32 nsec);
352d85bc8855d2734f5585861b261c5fe7a7ed92c1Ben Skeggs	u32  (*mrg)(struct nouveau_mem_exec_func *, int mr);
362d85bc8855d2734f5585861b261c5fe7a7ed92c1Ben Skeggs	void (*mrs)(struct nouveau_mem_exec_func *, int mr, u32 data);
372d85bc8855d2734f5585861b261c5fe7a7ed92c1Ben Skeggs	void (*clock_set)(struct nouveau_mem_exec_func *);
382d85bc8855d2734f5585861b261c5fe7a7ed92c1Ben Skeggs	void (*timing_set)(struct nouveau_mem_exec_func *);
392d85bc8855d2734f5585861b261c5fe7a7ed92c1Ben Skeggs	void *priv;
402d85bc8855d2734f5585861b261c5fe7a7ed92c1Ben Skeggs};
412d85bc8855d2734f5585861b261c5fe7a7ed92c1Ben Skeggs
422d85bc8855d2734f5585861b261c5fe7a7ed92c1Ben Skeggs/* nouveau_mem.c */
432d85bc8855d2734f5585861b261c5fe7a7ed92c1Ben Skeggsint  nouveau_mem_exec(struct nouveau_mem_exec_func *,
442d85bc8855d2734f5585861b261c5fe7a7ed92c1Ben Skeggs		      struct nouveau_pm_level *);
452d85bc8855d2734f5585861b261c5fe7a7ed92c1Ben Skeggs
46330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs/* nouveau_pm.c */
47330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggsint  nouveau_pm_init(struct drm_device *dev);
48330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggsvoid nouveau_pm_fini(struct drm_device *dev);
4964f1c11a477cb76e1572ee0793234739e045b3d5Ben Skeggsvoid nouveau_pm_resume(struct drm_device *dev);
508d7bb400638906075c38cb07891993cf95076aa7Ben Skeggsextern const struct nouveau_pm_profile_func nouveau_pm_static_profile_func;
518d7bb400638906075c38cb07891993cf95076aa7Ben Skeggsvoid nouveau_pm_trigger(struct drm_device *dev);
52330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs
53330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs/* nouveau_volt.c */
54330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggsvoid nouveau_volt_init(struct drm_device *);
55330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggsvoid nouveau_volt_fini(struct drm_device *);
56330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggsint  nouveau_volt_vid_lookup(struct drm_device *, int voltage);
57330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggsint  nouveau_volt_lvl_lookup(struct drm_device *, int vid);
58330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggsint  nouveau_voltage_gpio_get(struct drm_device *);
59330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggsint  nouveau_voltage_gpio_set(struct drm_device *, int voltage);
60330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs
61330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs/* nouveau_perf.c */
62330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggsvoid nouveau_perf_init(struct drm_device *);
63330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggsvoid nouveau_perf_fini(struct drm_device *);
64fd99fd6100d3b7aaa8dc76888a38bbb15e8041bcBen Skeggsu8 *nouveau_perf_timing(struct drm_device *, u32 freq, u8 *ver, u8 *len);
65a9bc247cbbc6310d2aefe4db0a6e92defde4426bBen Skeggsu8 *nouveau_perf_ramcfg(struct drm_device *, u32 freq, u8 *ver, u8 *len);
66330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs
677760fcb020b41352af4e675ce65a6aa0e93c170fRoy Spliet/* nouveau_mem.c */
687760fcb020b41352af4e675ce65a6aa0e93c170fRoy Splietvoid nouveau_mem_timing_init(struct drm_device *);
697760fcb020b41352af4e675ce65a6aa0e93c170fRoy Splietvoid nouveau_mem_timing_fini(struct drm_device *);
707760fcb020b41352af4e675ce65a6aa0e93c170fRoy Spliet
71442b626ece6fbbe7f52c03a09f85ae5755f29eabBen Skeggs/* nv04_pm.c */
7236f1317ed05f76bfafb442f70575cdaed6da2d8cBen Skeggsint nv04_pm_clocks_get(struct drm_device *, struct nouveau_pm_level *);
7336f1317ed05f76bfafb442f70575cdaed6da2d8cBen Skeggsvoid *nv04_pm_clocks_pre(struct drm_device *, struct nouveau_pm_level *);
7436f1317ed05f76bfafb442f70575cdaed6da2d8cBen Skeggsint nv04_pm_clocks_set(struct drm_device *, void *);
75442b626ece6fbbe7f52c03a09f85ae5755f29eabBen Skeggs
761262a206da7d28340dfce954e31bd5fe5ae9e2ddBen Skeggs/* nv40_pm.c */
771262a206da7d28340dfce954e31bd5fe5ae9e2ddBen Skeggsint nv40_pm_clocks_get(struct drm_device *, struct nouveau_pm_level *);
781262a206da7d28340dfce954e31bd5fe5ae9e2ddBen Skeggsvoid *nv40_pm_clocks_pre(struct drm_device *, struct nouveau_pm_level *);
79dd1da8de172057b36860f427777ecfa293bb8f6cMartin Peresint nv40_pm_clocks_set(struct drm_device *, void *);
80675aac033e089833e763ea4fbabae66883d10574Ben Skeggsint nv40_pm_pwm_get(struct drm_device *, int, u32 *, u32 *);
81675aac033e089833e763ea4fbabae66883d10574Ben Skeggsint nv40_pm_pwm_set(struct drm_device *, int, u32, u32);
821262a206da7d28340dfce954e31bd5fe5ae9e2ddBen Skeggs
8302c30ca0a1d6d8b878fc32f47b3b25192ef4a8efBen Skeggs/* nv50_pm.c */
84f3fbaf34e2b1459eab248c5f0180928e7861120bBen Skeggsint nv50_pm_clocks_get(struct drm_device *, struct nouveau_pm_level *);
85f3fbaf34e2b1459eab248c5f0180928e7861120bBen Skeggsvoid *nv50_pm_clocks_pre(struct drm_device *, struct nouveau_pm_level *);
86f3fbaf34e2b1459eab248c5f0180928e7861120bBen Skeggsint nv50_pm_clocks_set(struct drm_device *, void *);
87675aac033e089833e763ea4fbabae66883d10574Ben Skeggsint nv50_pm_pwm_get(struct drm_device *, int, u32 *, u32 *);
88675aac033e089833e763ea4fbabae66883d10574Ben Skeggsint nv50_pm_pwm_set(struct drm_device *, int, u32, u32);
8902c30ca0a1d6d8b878fc32f47b3b25192ef4a8efBen Skeggs
90fade7ad56d929e168ead0f75e591468afa2fe97cBen Skeggs/* nva3_pm.c */
91ca94a71fc4d99c99871dfca528a88aab1557641cBen Skeggsint nva3_pm_clocks_get(struct drm_device *, struct nouveau_pm_level *);
92ca94a71fc4d99c99871dfca528a88aab1557641cBen Skeggsvoid *nva3_pm_clocks_pre(struct drm_device *, struct nouveau_pm_level *);
93dd1da8de172057b36860f427777ecfa293bb8f6cMartin Peresint nva3_pm_clocks_set(struct drm_device *, void *);
94fade7ad56d929e168ead0f75e591468afa2fe97cBen Skeggs
95354d0781e5cef1f227ee3064cb65053365177d3bBen Skeggs/* nvc0_pm.c */
96354d0781e5cef1f227ee3064cb65053365177d3bBen Skeggsint nvc0_pm_clocks_get(struct drm_device *, struct nouveau_pm_level *);
97045da4e55581d9b4de135bbdbdd1b7fa98dc18a9Ben Skeggsvoid *nvc0_pm_clocks_pre(struct drm_device *, struct nouveau_pm_level *);
98045da4e55581d9b4de135bbdbdd1b7fa98dc18a9Ben Skeggsint nvc0_pm_clocks_set(struct drm_device *, void *);
99354d0781e5cef1f227ee3064cb65053365177d3bBen Skeggs
10034e9d85a1aae28b090ec4e72a0f98a5483c198c4Martin Peres/* nouveau_temp.c */
10134e9d85a1aae28b090ec4e72a0f98a5483c198c4Martin Peresvoid nouveau_temp_init(struct drm_device *dev);
10234e9d85a1aae28b090ec4e72a0f98a5483c198c4Martin Peresvoid nouveau_temp_fini(struct drm_device *dev);
10334e9d85a1aae28b090ec4e72a0f98a5483c198c4Martin Peresvoid nouveau_temp_safety_checks(struct drm_device *dev);
1048155cac489eb8cc6fd96b9bdefacdf5a56e6ea32Francisco Jerezint nv40_temp_get(struct drm_device *dev);
1058155cac489eb8cc6fd96b9bdefacdf5a56e6ea32Francisco Jerezint nv84_temp_get(struct drm_device *dev);
10634e9d85a1aae28b090ec4e72a0f98a5483c198c4Martin Peres
107330c5988ee78045e6a731c3693251aaa5b0d14e3Ben Skeggs#endif
108