From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752017AbXBVWaX (ORCPT ); Thu, 22 Feb 2007 17:30:23 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752015AbXBVWaW (ORCPT ); Thu, 22 Feb 2007 17:30:22 -0500 Received: from mga07.intel.com ([143.182.124.22]:7983 "EHLO azsmga101.ch.intel.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752010AbXBVWaV (ORCPT ); Thu, 22 Feb 2007 17:30:21 -0500 X-ExtLoop1: 1 X-IronPort-AV: i="4.14,207,1170662400"; d="scan'208"; a="185891394:sNHT74803470" Date: Thu, 22 Feb 2007 13:54:57 -0800 From: Venkatesh Pallipadi To: linux-kernel , Andrew Morton , Dave Jones , linux-acpi@vger.kernel.org Cc: Adam Belay , Shaohua Li , Len Brown Subject: [PATCH 3/3]cpuidle take2: Basic documentation for cpuidle Message-ID: <20070222135457.C26335@unix-os.sc.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5.1i Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Documentation for cpuidle infrastructure Signed-off-by: Venkatesh Pallipadi Signed-off-by: Adam Belay Signed-off-by: Shaohua Li Index: linux-2.6.21-rc-mm/Documentation/cpuidle/core.txt =================================================================== --- /dev/null +++ linux-2.6.21-rc-mm/Documentation/cpuidle/core.txt @@ -0,0 +1,17 @@ + + Supporting multiple CPU idle levels in kernel + + cpuidle + +General Information: + +Various CPUs today support multiple idle levels that are differentiated +by varying exit latencies and power consumption during idle. +cpuidle is a generic in-kernel infrastructure that separates +idle policy (governor) from idle mechanism (driver) and provides a +standardized infrastructure to support independent development of +governors and drivers. + +cpuidle resides under /drivers/cpuidle. + + Index: linux-2.6.21-rc-mm/Documentation/cpuidle/driver.txt =================================================================== --- /dev/null +++ linux-2.6.21-rc-mm/Documentation/cpuidle/driver.txt @@ -0,0 +1,24 @@ + + + Supporting multiple CPU idle levels in kernel + + cpuidle drivers + + + + +cpuidle driver supports capability detection for a particular system. The +init and exit routines will be called for each online CPU, with a percpu +cpuidle_driver object and driver should fill in cpuidle_states inside +cpuidle_driver depending on the CPU capability. + +Driver can handle dynamic state changes (like battery<->AC), by calling +force_redetect interface. + +It is possible to have more than one driver registered at the same time and +user can switch between drivers using /sysfs interface. + +Interfaces: +int cpuidle_register_driver(struct cpuidle_driver *drv); +void cpuidle_unregister_driver(struct cpuidle_driver *drv); +int cpuidle_force_redetect(struct cpuidle_device *dev); Index: linux-2.6.21-rc-mm/Documentation/cpuidle/sysfs.txt =================================================================== --- /dev/null +++ linux-2.6.21-rc-mm/Documentation/cpuidle/sysfs.txt @@ -0,0 +1,27 @@ + + + Supporting multiple CPU idle levels in kernel + + cpuidle sysfs + +System global cpuidle information are under +/sys/devices/system/cpu/cpuidle + +The current interfaces in this directory has self-explanatory names: +* available_drivers +* available_governors +* current_driver +* current_governor + +Per logical CPU specific cpuidle information are under +/sys/devices/system/cpu/cpuX/cpuidle +for each online cpu X + +Under this percpu directory, there is a directory for each idle state supported +by the driver, which in turn has +* latency +* power +* time +* usage + + Index: linux-2.6.21-rc-mm/Documentation/cpuidle/governor.txt =================================================================== --- /dev/null +++ linux-2.6.21-rc-mm/Documentation/cpuidle/governor.txt @@ -0,0 +1,24 @@ + + + + Supporting multiple CPU idle levels in kernel + + cpuidle governors + + + + +cpuidle governor is policy routine that decides what idle state to enter at +any given time. cpuidle core uses different callbacks to governor while +handling idle entry. +* select_state callback where governor can determine next idle state to enter +* prepare_idle callback is called before entering an idle state +* scan callback is called after a driver forces redetection of the states + +More than one governor can be registered at the same time and +user can switch between drivers using /sysfs interface. + +Interfaces: +int cpuidle_register_governor(struct cpuidle_governor *gov); +void cpuidle_unregister_governor(struct cpuidle_governor *gov); +