[RFC PATCH] _TPC support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



adds _TPC support which support Throttling Present Capabilities
change for ACPI processor driver

signed-off-by: Luming Yu <Luming.yu@xxxxxxxxx>
--

drivers/acpi/processor_core.c       |    4 ++++
drivers/acpi/processor_throttling.c |   30 ++++++++++++++++++++++++++++--
include/acpi/processor.h            |    3 +++
3 files changed, 35 insertions(+), 2 deletions(-)


diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c
index ddc9e20..b2093ca 100644
--- a/drivers/acpi/processor_core.c
+++ b/drivers/acpi/processor_core.c
@@ -67,6 +67,7 @@ #define ACPI_PROCESSOR_FILE_THROTTLING	"
#define ACPI_PROCESSOR_FILE_LIMIT	"limit"
#define ACPI_PROCESSOR_NOTIFY_PERFORMANCE 0x80
#define ACPI_PROCESSOR_NOTIFY_POWER	0x81
+#define ACPI_PROCESSOR_NOTIFY_THROTTLING	0x82

#define ACPI_PROCESSOR_LIMIT_USER	0
#define ACPI_PROCESSOR_LIMIT_THERMAL	1
@@ -702,6 +703,9 @@ static void acpi_processor_notify(acpi_h
		acpi_processor_cst_has_changed(pr);
		acpi_bus_generate_event(device, event, 0);
		break;
+	case ACPI_PROCESSOR_NOTIFY_THROTTLING:
+		acpi_processor_tstate_has_changed(pr);
+		acpi_bus_generate_event(device, event, 0);
	default:
		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
				  "Unsupported event [0x%x]\n", event));
diff --git a/drivers/acpi/processor_throttling.c
b/drivers/acpi/processor_throttling.c
index b334860..0528b27 100644
--- a/drivers/acpi/processor_throttling.c
+++ b/drivers/acpi/processor_throttling.c
@@ -44,6 +44,27 @@ #define ACPI_PROCESSOR_CLASS
#define _COMPONENT              ACPI_PROCESSOR_COMPONENT
ACPI_MODULE_NAME("processor_throttling");

+static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
+{
+	acpi_status status = 0;
+	unsigned long tpc = 0;
+
+	if(!pr)
+		return -EINVAL;
+	status = acpi_evaluate_integer(pr->handle, "_TPC", NULL, &tpc);
+	if(ACPI_FAILURE(status) && status != AE_NOT_FOUND){
+		ACPI_EXCEPTION((AE_INFO, status, "Evaluating _TPC"));
+		return -ENODEV;
+	}
+	pr->throttling_platform_limit = (int)tpc;
+	return 0;
+}
+
+int acpi_processor_tstate_has_changed(struct acpi_processor *pr)
+{
+	return acpi_processor_get_platform_limit(pr);
+}
+
/* --------------------------------------------------------------------------
                              Throttling Control
   --------------------------------------------------------------------------
*/
@@ -113,6 +134,8 @@ int acpi_processor_set_throttling(struct
	if (state == pr->throttling.state)
		return 0;

+	if (state < pr->throttling_platform_limit)
+		return -EPERM;
	/*
	 * Calculate the duty_value and duty_mask.
	 */
@@ -280,8 +303,11 @@ static int acpi_processor_throttling_seq
	}

	seq_printf(seq, "state count:             %d\n"
-		   "active state:            T%d\n",
-		   pr->throttling.state_count, pr->throttling.state);
+		   "active state:            T%d\n"
+			"state available: T%d to T%d\n",
+		   pr->throttling.state_count, pr->throttling.state,
+			pr->throttling_platform_limit,
+			pr->throttling.state_count-1);

	seq_puts(seq, "states:\n");
	for (i = 0; i < pr->throttling.state_count; i++)
diff --git a/include/acpi/processor.h b/include/acpi/processor.h
index e375570..4f4372a 100644
--- a/include/acpi/processor.h
+++ b/include/acpi/processor.h
@@ -170,6 +170,9 @@ struct acpi_processor {
	u32 id;
	u32 pblk;
	int performance_platform_limit;
+	int throttling_platform_limit;
+		/*0 - states 0..n-th satte available*/
+
	struct acpi_processor_flags flags;
	struct acpi_processor_power power;
	struct acpi_processor_performance *performance;

Attachment: _TPC.patch
Description: Binary data


[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux