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