static int tz_osl_proc_write_info ( struct file *file, const char *buffer, unsigned long count, void *data) { TZ_CONTEXT *tz = NULL; u32 state = 0; u32 size = 0; if (!buffer || (count==0) || !data) { goto end; } tz = (TZ_CONTEXT*)data; size = strlen(buffer); if (size < 4) goto end; /* Cooling preference: "scp=0" (active) or "scp=1" (passive) */ if (0 == strncmp(buffer, "scp=", 4)) { tz_set_cooling_preference(tz, (buffer[4] - '0')); } /* Polling frequency: "tzp=X" (poll every X [0-9] seconds) */ else if (0 == strncmp(buffer, "tzp=", 4)) { tz->policy.polling_freq = (buffer[4] - '0') * 10; tz_policy_check(tz); } end: return count; }
acpi_status tz_policy_add_device ( TZ_CONTEXT *tz) { acpi_status status = AE_OK; TZ_THRESHOLDS *thresholds = NULL; u32 i,j = 0; FUNCTION_TRACE("tz_policy_add_device"); if (!tz) { return_ACPI_STATUS(AE_BAD_PARAMETER); } ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Adding policy for thermal zone [%02x].\n", tz->device_handle)); /* * Get Thresholds: * --------------- */ status = tz_get_thresholds(tz); if (ACPI_FAILURE(status)) { return_ACPI_STATUS(status); } /* * Initialize Policies: * -------------------- */ if (tz->policy.thresholds.passive.is_valid) { for (i=0; i<tz->policy.thresholds.passive.devices.count; i++) set_performance_limit(tz->policy.thresholds.passive.devices.handles[i], PR_PERF_MAX); tz_policy_passive(tz); } if (tz->policy.thresholds.active[0].is_valid) tz_policy_active(tz); /* * Initialize Policy Timer: * ------------------------ */ init_timer(&(tz->policy.timer)); /* * Start Policy: * ------------- * Run an initial check using this zone's policy. */ tz_policy_check(tz); return_ACPI_STATUS(AE_OK); }
acpi_status tz_notify ( BM_NOTIFY notify_type, BM_HANDLE device_handle, void **context) { acpi_status status = AE_OK; TZ_CONTEXT *tz = NULL; FUNCTION_TRACE("tz_notify"); if (!context) { return_ACPI_STATUS(AE_BAD_PARAMETER); } tz = (TZ_CONTEXT*)*context; switch (notify_type) { case BM_NOTIFY_DEVICE_ADDED: status = tz_add_device(device_handle, context); break; case BM_NOTIFY_DEVICE_REMOVED: status = tz_remove_device(context); break; case TZ_NOTIFY_TEMPERATURE_CHANGE: ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Temperature (_TMP) change event detected.\n")); tz_policy_check(*context); status = tz_get_temperature(tz); if (ACPI_SUCCESS(status)) { status = tz_osl_generate_event(notify_type, tz); } break; case TZ_NOTIFY_THRESHOLD_CHANGE: ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Threshold (_SCP) change event detected.\n")); status = tz_policy_remove_device(tz); if (ACPI_SUCCESS(status)) { status = tz_policy_add_device(tz); } status = tz_osl_generate_event(notify_type, tz); break; case TZ_NOTIFY_DEVICE_LISTS_CHANGE: ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Device lists (_ALx, _PSL, _TZD) change event detected.\n")); status = tz_policy_remove_device(tz); if (ACPI_SUCCESS(status)) { status = tz_policy_add_device(tz); } status = tz_osl_generate_event(notify_type, tz); break; default: status = AE_SUPPORT; break; } return_ACPI_STATUS(status); }