diff --git a/src/add-ons/kernel/drivers/power/acpi_thermal/acpi_thermal.c b/src/add-ons/kernel/drivers/power/acpi_thermal/acpi_thermal.c index 5b19299fdb..04399801a6 100644 --- a/src/add-ons/kernel/drivers/power/acpi_thermal/acpi_thermal.c +++ b/src/add-ons/kernel/drivers/power/acpi_thermal/acpi_thermal.c @@ -55,13 +55,13 @@ acpi_thermal_read(void* _cookie, off_t position, void *buf, size_t* num_bytes) { acpi_thermal_device_info* device = (acpi_thermal_device_info*)_cookie; acpi_thermal_type therm_info; + if (*num_bytes < 1) return B_IO_ERROR; - + if (position == 0) { size_t max_len = *num_bytes; char *str = (char *)buf; - dprintf("acpi_thermal: read()\n"); acpi_thermal_control(device, drvOpGetThermalType, &therm_info, 0); snprintf(str, max_len, " Critical Temperature: %lu.%lu K\n", @@ -120,29 +120,29 @@ acpi_thermal_control(void* _cookie, uint32 op, void* arg, size_t len) acpi_thermal_type *att = NULL; - uint32 integer; + acpi_object_type object; + acpi_data buffer; - buffer.pointer = &integer; - buffer.length = sizeof(integer); + buffer.pointer = &object; + buffer.length = sizeof(object); switch (op) { case drvOpGetThermalType: { - dprintf("acpi_thermal: GetThermalType()\n"); att = (acpi_thermal_type *)arg; // Read basic temperature thresholds. err = device->acpi->evaluate_method(device->acpi_cookie, "_CRT", NULL, &buffer); - att->critical_temp = (err == B_OK) ? integer : 0; + att->critical_temp = (err == B_OK && object.object_type == ACPI_TYPE_INTEGER) ? object.integer.integer : 0; + err = device->acpi->evaluate_method(device->acpi_cookie, "_TMP", NULL, &buffer); - att->current_temp = (err == B_OK) ? integer : 0; + att->current_temp = (err == B_OK && object.object_type == ACPI_TYPE_INTEGER) ? object.integer.integer : 0; + err = device->acpi->evaluate_method(device->acpi_cookie, "_HOT", NULL, &buffer); - att->hot_temp = (err == B_OK) ? integer : 0; - - dprintf("acpi_thermal: GotBasicTemperatures()\n"); + att->hot_temp = (err == B_OK && object.object_type == ACPI_TYPE_INTEGER) ? object.integer.integer : 0; // Read Passive Cooling devices att->passive_package = NULL; - err = device->acpi->get_object(device->acpi_cookie, "_PSL", &(att->passive_package)); + //err = device->acpi->get_object(device->acpi_cookie, "_PSL", &(att->passive_package)); att->active_count = 0; att->active_devices = NULL; @@ -186,8 +186,8 @@ acpi_thermal_support(device_node *parent) return 0.0; // check whether it's really a thermal Device - if (sDeviceManager->get_attr_uint32(parent, ACPI_DEVICE_TYPE_ITEM, &device_type, false) != B_OK - || device_type != ACPI_TYPE_THERMAL) { + if (sDeviceManager->get_attr_uint32(parent, ACPI_DEVICE_TYPE_ITEM, + &device_type, false) != B_OK || device_type != ACPI_TYPE_THERMAL) { return 0.0; }