1c39f472eSBen Skeggs #ifndef __NVTHERM_PRIV_H__ 2c39f472eSBen Skeggs #define __NVTHERM_PRIV_H__ 357113c01SBen Skeggs #define nvkm_therm(p) container_of((p), struct nvkm_therm, subdev) 4c39f472eSBen Skeggs /* 5c39f472eSBen Skeggs * Copyright 2012 The Nouveau community 6c39f472eSBen Skeggs * 7c39f472eSBen Skeggs * Permission is hereby granted, free of charge, to any person obtaining a 8c39f472eSBen Skeggs * copy of this software and associated documentation files (the "Software"), 9c39f472eSBen Skeggs * to deal in the Software without restriction, including without limitation 10c39f472eSBen Skeggs * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11c39f472eSBen Skeggs * and/or sell copies of the Software, and to permit persons to whom the 12c39f472eSBen Skeggs * Software is furnished to do so, subject to the following conditions: 13c39f472eSBen Skeggs * 14c39f472eSBen Skeggs * The above copyright notice and this permission notice shall be included in 15c39f472eSBen Skeggs * all copies or substantial portions of the Software. 16c39f472eSBen Skeggs * 17c39f472eSBen Skeggs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18c39f472eSBen Skeggs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19c39f472eSBen Skeggs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20c39f472eSBen Skeggs * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 21c39f472eSBen Skeggs * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 22c39f472eSBen Skeggs * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23c39f472eSBen Skeggs * OTHER DEALINGS IN THE SOFTWARE. 24c39f472eSBen Skeggs * 25c39f472eSBen Skeggs * Authors: Martin Peres 26c39f472eSBen Skeggs */ 27c39f472eSBen Skeggs #include <subdev/therm.h> 28d390b480SBen Skeggs #include <subdev/bios.h> 29c39f472eSBen Skeggs #include <subdev/bios/extdev.h> 30c39f472eSBen Skeggs #include <subdev/bios/gpio.h> 31c39f472eSBen Skeggs #include <subdev/bios/perf.h> 3257113c01SBen Skeggs 33*0aec69c7SBen Skeggs int nvkm_therm_new_(const struct nvkm_therm_func *, struct nvkm_device *, enum nvkm_subdev_type, 34*0aec69c7SBen Skeggs int, struct nvkm_therm **); 35*0aec69c7SBen Skeggs void nvkm_therm_ctor(struct nvkm_therm *, struct nvkm_device *, enum nvkm_subdev_type, int, 36*0aec69c7SBen Skeggs const struct nvkm_therm_func *); 37c39f472eSBen Skeggs 38e1404611SBen Skeggs struct nvkm_fan { 39e1404611SBen Skeggs struct nvkm_therm *parent; 40c39f472eSBen Skeggs const char *type; 41c39f472eSBen Skeggs 42c39f472eSBen Skeggs struct nvbios_therm_fan bios; 43c39f472eSBen Skeggs struct nvbios_perf_fan perf; 44c39f472eSBen Skeggs 45e1404611SBen Skeggs struct nvkm_alarm alarm; 46c39f472eSBen Skeggs spinlock_t lock; 47c39f472eSBen Skeggs int percent; 48c39f472eSBen Skeggs 49e1404611SBen Skeggs int (*get)(struct nvkm_therm *); 50e1404611SBen Skeggs int (*set)(struct nvkm_therm *, int percent); 51c39f472eSBen Skeggs 52c39f472eSBen Skeggs struct dcb_gpio_func tach; 53c39f472eSBen Skeggs }; 54c39f472eSBen Skeggs 55e1404611SBen Skeggs int nvkm_therm_fan_mode(struct nvkm_therm *, int mode); 56e1404611SBen Skeggs int nvkm_therm_attr_get(struct nvkm_therm *, enum nvkm_therm_attr_type); 57e1404611SBen Skeggs int nvkm_therm_attr_set(struct nvkm_therm *, enum nvkm_therm_attr_type, int); 58c39f472eSBen Skeggs 59e1404611SBen Skeggs void nvkm_therm_ic_ctor(struct nvkm_therm *); 60c39f472eSBen Skeggs 61e1404611SBen Skeggs int nvkm_therm_sensor_ctor(struct nvkm_therm *); 62c39f472eSBen Skeggs 63e1404611SBen Skeggs int nvkm_therm_fan_ctor(struct nvkm_therm *); 64e1404611SBen Skeggs int nvkm_therm_fan_init(struct nvkm_therm *); 65e1404611SBen Skeggs int nvkm_therm_fan_fini(struct nvkm_therm *, bool suspend); 66e1404611SBen Skeggs int nvkm_therm_fan_get(struct nvkm_therm *); 67e1404611SBen Skeggs int nvkm_therm_fan_set(struct nvkm_therm *, bool now, int percent); 68e1404611SBen Skeggs int nvkm_therm_fan_user_get(struct nvkm_therm *); 69e1404611SBen Skeggs int nvkm_therm_fan_user_set(struct nvkm_therm *, int percent); 70c39f472eSBen Skeggs 71e1404611SBen Skeggs int nvkm_therm_sensor_init(struct nvkm_therm *); 72e1404611SBen Skeggs int nvkm_therm_sensor_fini(struct nvkm_therm *, bool suspend); 73e1404611SBen Skeggs void nvkm_therm_sensor_preinit(struct nvkm_therm *); 74e1404611SBen Skeggs void nvkm_therm_sensor_set_threshold_state(struct nvkm_therm *, 75e1404611SBen Skeggs enum nvkm_therm_thrs, 76e1404611SBen Skeggs enum nvkm_therm_thrs_state); 77e1404611SBen Skeggs enum nvkm_therm_thrs_state 78e1404611SBen Skeggs nvkm_therm_sensor_get_threshold_state(struct nvkm_therm *, 79e1404611SBen Skeggs enum nvkm_therm_thrs); 80e1404611SBen Skeggs void nvkm_therm_sensor_event(struct nvkm_therm *, enum nvkm_therm_thrs, 81e1404611SBen Skeggs enum nvkm_therm_thrs_direction); 82e1404611SBen Skeggs void nvkm_therm_program_alarms_polling(struct nvkm_therm *); 83c39f472eSBen Skeggs 8457113c01SBen Skeggs struct nvkm_therm_func { 8557113c01SBen Skeggs void (*init)(struct nvkm_therm *); 8657113c01SBen Skeggs void (*fini)(struct nvkm_therm *); 8757113c01SBen Skeggs void (*intr)(struct nvkm_therm *); 8857113c01SBen Skeggs 8957113c01SBen Skeggs int (*pwm_ctrl)(struct nvkm_therm *, int line, bool); 9057113c01SBen Skeggs int (*pwm_get)(struct nvkm_therm *, int line, u32 *, u32 *); 9157113c01SBen Skeggs int (*pwm_set)(struct nvkm_therm *, int line, u32, u32); 9257113c01SBen Skeggs int (*pwm_clock)(struct nvkm_therm *, int line); 9357113c01SBen Skeggs 9457113c01SBen Skeggs int (*temp_get)(struct nvkm_therm *); 9557113c01SBen Skeggs 9657113c01SBen Skeggs int (*fan_sense)(struct nvkm_therm *); 9757113c01SBen Skeggs 9857113c01SBen Skeggs void (*program_alarms)(struct nvkm_therm *); 99b138eca6SLyude Paul 1001bab09acSLyude Paul void (*clkgate_init)(struct nvkm_therm *, 1011bab09acSLyude Paul const struct nvkm_therm_clkgate_pack *); 102b138eca6SLyude Paul void (*clkgate_enable)(struct nvkm_therm *); 103b138eca6SLyude Paul void (*clkgate_fini)(struct nvkm_therm *, bool); 10457113c01SBen Skeggs }; 10557113c01SBen Skeggs 10657113c01SBen Skeggs void nv40_therm_intr(struct nvkm_therm *); 10757113c01SBen Skeggs 108e1404611SBen Skeggs int nv50_fan_pwm_ctrl(struct nvkm_therm *, int, bool); 109e1404611SBen Skeggs int nv50_fan_pwm_get(struct nvkm_therm *, int, u32 *, u32 *); 110e1404611SBen Skeggs int nv50_fan_pwm_set(struct nvkm_therm *, int, u32, u32); 111e1404611SBen Skeggs int nv50_fan_pwm_clock(struct nvkm_therm *, int); 11257113c01SBen Skeggs 113e1404611SBen Skeggs int g84_temp_get(struct nvkm_therm *); 114e1404611SBen Skeggs void g84_sensor_setup(struct nvkm_therm *); 11557113c01SBen Skeggs void g84_therm_fini(struct nvkm_therm *); 116c39f472eSBen Skeggs 117e1404611SBen Skeggs int gt215_therm_fan_sense(struct nvkm_therm *); 118c39f472eSBen Skeggs 1191bab09acSLyude Paul void gf100_clkgate_init(struct nvkm_therm *, 1201bab09acSLyude Paul const struct nvkm_therm_clkgate_pack *); 1211bab09acSLyude Paul 1229d60b9c9SKarol Herbst void g84_therm_init(struct nvkm_therm *); 123b138eca6SLyude Paul 124b138eca6SLyude Paul int gf119_fan_pwm_ctrl(struct nvkm_therm *, int, bool); 125b138eca6SLyude Paul int gf119_fan_pwm_get(struct nvkm_therm *, int, u32 *, u32 *); 126b138eca6SLyude Paul int gf119_fan_pwm_set(struct nvkm_therm *, int, u32, u32); 127b138eca6SLyude Paul int gf119_fan_pwm_clock(struct nvkm_therm *, int); 12857113c01SBen Skeggs void gf119_therm_init(struct nvkm_therm *); 129c39f472eSBen Skeggs 1301bab09acSLyude Paul void gk104_therm_init(struct nvkm_therm *); 131b138eca6SLyude Paul void gk104_clkgate_enable(struct nvkm_therm *); 132b138eca6SLyude Paul void gk104_clkgate_fini(struct nvkm_therm *, bool); 133b138eca6SLyude Paul 134e1404611SBen Skeggs int nvkm_fanpwm_create(struct nvkm_therm *, struct dcb_gpio_func *); 135e1404611SBen Skeggs int nvkm_fantog_create(struct nvkm_therm *, struct dcb_gpio_func *); 136e1404611SBen Skeggs int nvkm_fannil_create(struct nvkm_therm *); 137c39f472eSBen Skeggs #endif 138