1#ifndef __NVBIOS_THERM_H__ 2#define __NVBIOS_THERM_H__ 3struct nvbios_therm_threshold { 4 u8 temp; 5 u8 hysteresis; 6}; 7 8struct nvbios_therm_sensor { 9 /* diode */ 10 s16 slope_mult; 11 s16 slope_div; 12 s16 offset_num; 13 s16 offset_den; 14 s8 offset_constant; 15 16 /* thresholds */ 17 struct nvbios_therm_threshold thrs_fan_boost; 18 struct nvbios_therm_threshold thrs_down_clock; 19 struct nvbios_therm_threshold thrs_critical; 20 struct nvbios_therm_threshold thrs_shutdown; 21}; 22 23enum nvbios_therm_fan_type { 24 NVBIOS_THERM_FAN_UNK = 0, 25 NVBIOS_THERM_FAN_TOGGLE = 1, 26 NVBIOS_THERM_FAN_PWM = 2, 27}; 28 29/* no vbios have more than 6 */ 30#define NVKM_TEMP_FAN_TRIP_MAX 10 31struct nvbios_therm_trip_point { 32 int fan_duty; 33 int temp; 34 int hysteresis; 35}; 36 37enum nvbios_therm_fan_mode { 38 NVBIOS_THERM_FAN_TRIP = 0, 39 NVBIOS_THERM_FAN_LINEAR = 1, 40 NVBIOS_THERM_FAN_OTHER = 2, 41}; 42 43struct nvbios_therm_fan { 44 enum nvbios_therm_fan_type type; 45 46 u32 pwm_freq; 47 48 u8 min_duty; 49 u8 max_duty; 50 51 u16 bump_period; 52 u16 slow_down_period; 53 54 enum nvbios_therm_fan_mode fan_mode; 55 struct nvbios_therm_trip_point trip[NVKM_TEMP_FAN_TRIP_MAX]; 56 u8 nr_fan_trip; 57 u8 linear_min_temp; 58 u8 linear_max_temp; 59}; 60 61enum nvbios_therm_domain { 62 NVBIOS_THERM_DOMAIN_CORE, 63 NVBIOS_THERM_DOMAIN_AMBIENT, 64}; 65 66int 67nvbios_therm_sensor_parse(struct nvkm_bios *, enum nvbios_therm_domain, 68 struct nvbios_therm_sensor *); 69 70int 71nvbios_therm_fan_parse(struct nvkm_bios *, struct nvbios_therm_fan *); 72#endif 73