Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 362b6460 authored by Thomas Renninger's avatar Thomas Renninger Committed by Len Brown
Browse files

ACPI: Export FADT pm_profile integer value to userspace



There are a lot userspace approaches to detect the usage of the
platform (laptop, workstation, server, ...) and adjust kernel tunables
accordingly (io/process scheduler, power management, ...).

These approaches need constant maintaining and are ugly to implement
(detect PCMCIA controller -> laptop,
does not work on recent systems anymore, ...)
On ACPI systems there is an easy and reliable way (if implemented
in BIOS and most recent platforms have this value set).
-> export it to userspace.

Signed-off-by: default avatarThomas Renninger <trenn@suse.de>
Acked-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent c3b92c87
Loading
Loading
Loading
Loading
+22 −0
Original line number Original line Diff line number Diff line
What: 		/sys/firmware/acpi/pm_profile
Date:		03-Nov-2011
KernelVersion:	v3.2
Contact:	linux-acpi@vger.kernel.org
Description: 	The ACPI pm_profile sysfs interface exports the platform
		power management (and performance) requirement expectations
		as provided by BIOS. The integer value is directly passed as
		retrieved from the FADT ACPI table.
Values:         For possible values see ACPI specification:
		5.2.9 Fixed ACPI Description Table (FADT)
		Field: Preferred_PM_Profile

		Currently these values are defined by spec:
		0 Unspecified
		1 Desktop
		2 Mobile
		3 Workstation
		4 Enterprise Server
		5 SOHO Server
		6 Appliance PC
		7 Performance Server
		>7 Reserved
+13 −1
Original line number Original line Diff line number Diff line
@@ -706,11 +706,23 @@ static void __exit interrupt_stats_exit(void)
	return;
	return;
}
}


static ssize_t
acpi_show_profile(struct device *dev, struct device_attribute *attr,
		  char *buf)
{
	return sprintf(buf, "%d\n", acpi_gbl_FADT.preferred_profile);
}

static const struct device_attribute pm_profile_attr =
	__ATTR(pm_profile, S_IRUGO, acpi_show_profile, NULL);

int __init acpi_sysfs_init(void)
int __init acpi_sysfs_init(void)
{
{
	int result;
	int result;


	result = acpi_tables_sysfs_init();
	result = acpi_tables_sysfs_init();

	if (result)
		return result;
	result = sysfs_create_file(acpi_kobj, &pm_profile_attr.attr);
	return result;
	return result;
}
}