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