--- /dev/null
+use crate::wrapper_winring0;
+
+const OLS_TYPE: u32 = 40000;
+
+const F17H_M01H_THM_TCON_CUR_TMP: u32 = 0x00059800;
+const F17H_TEMP_OFFSET_FLAG: u32 = 0x80000;
+const FAMILY_17H_PCI_CONTROL_REGISTER: u32 = 0x60;
+
+pub fn read() -> f32 {
+ unsafe {
+ wrapper_winring0::WritePciConfigDwordEx(
+ 0x00,
+ FAMILY_17H_PCI_CONTROL_REGISTER,
+ F17H_M01H_THM_TCON_CUR_TMP,
+ );
+
+ let output: &mut u32 = &mut 0;
+ let ok = wrapper_winring0::ReadPciConfigDwordEx(
+ 0x00,
+ FAMILY_17H_PCI_CONTROL_REGISTER + 4,
+ output,
+ );
+ let offset_flag = *output & F17H_TEMP_OFFSET_FLAG != 0;
+ let mut temperature = ((*output >> 21) * 125) as f32 * 0.001;
+ if offset_flag {
+ temperature -= 49.;
+ }
+
+ // dbg!(ok);
+ // dbg!(temperature);
+
+ temperature
+ }
+}