Files
linux-stable-mirror/include/uapi/linux/amd-pmf.h
T
Shyam Sundar S K c7bdedfcb8 platform/x86/amd/pmf: Move debug helper functions to UAPI header
These debug helper functions convert enumerated values to appropriate
message and can be useful for userspace tools and other kernel components
that need to interpret AMD PMF state values.

By making them inline functions in the UAPI header, they become available
to both kernel and userspace without code duplication. Also, prefix the
function names with amd_pmf_.

Also, include a case to cover unused enum entries.

Co-developed-by: Sanket Goswami <Sanket.Goswami@amd.com>
Signed-off-by: Sanket Goswami <Sanket.Goswami@amd.com>
Signed-off-by: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
Link: https://patch.msgid.link/20260609081044.2416731-5-Shyam-sundar.S-k@amd.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
2026-07-10 15:13:47 +03:00

205 lines
5.9 KiB
C

/* SPDX-License-Identifier: GPL-2.0-or-later WITH Linux-syscall-note */
/*
* AMD Platform Management Framework (PMF) UAPI Header
*
* Copyright (c) 2026, Advanced Micro Devices, Inc.
* All Rights Reserved.
*
* This file defines the user-space API for interacting with the AMD PMF
* driver. It provides ioctl interfaces to query platform-specific metrics
* such as power source, slider position, platform type, laptop placement,
* and various BIOS input/output parameters.
*/
#ifndef _UAPI_LINUX_AMD_PMF_H
#define _UAPI_LINUX_AMD_PMF_H
#include <linux/bits.h>
#include <linux/ioctl.h>
#include <linux/types.h>
/**
* AMD_PMF_IOC_MAGIC - Magic number for AMD PMF ioctl commands
*
* This magic number uniquely identifies AMD PMF ioctl operations.
*/
#define AMD_PMF_IOC_MAGIC 'p'
/**
* IOCTL_AMD_PMF_POPULATE_DATA - ioctl command to retrieve PMF metrics data
*
* This ioctl command is used to populate the amd_pmf_info structure
* with the requested PMF metrics information.
*/
#define IOCTL_AMD_PMF_POPULATE_DATA _IOWR(AMD_PMF_IOC_MAGIC, 0x00, __u64)
#define AMD_PMF_BIOS_PARAMS_MAX 10
/* AMD PMF feature flags - bitmask indicating supported features */
#define AMD_PMF_FEAT_AUTO_MODE BIT(0)
#define AMD_PMF_FEAT_STATIC_POWER_SLIDER BIT(1)
#define AMD_PMF_FEAT_POLICY_BUILDER BIT(2)
#define AMD_PMF_FEAT_DYNAMIC_POWER_SLIDER_AC BIT(3)
#define AMD_PMF_FEAT_DYNAMIC_POWER_SLIDER_DC BIT(4)
/**
* enum amd_pmf_laptop_placement - Describes the physical placement of the laptop
* @AMD_PMF_LP_UNKNOWN: Placement cannot be determined
* @AMD_PMF_ON_TABLE: Laptop is placed on a stable surface like a table or desk
* @AMD_PMF_ON_LAP_MOTION: Laptop is on a lap with detected motion
* @AMD_PMF_IN_BAG: Laptop is detected to be inside a bag or case
* @AMD_PMF_OUT_OF_BAG: Laptop has been removed from bag or case
* @AMD_PMF_LP_UNDEFINED: Placement state is undefined
*
* This enumeration represents the physical placement state of the laptop
* as detected by platform sensors. Used for adaptive power management
* and thermal policies.
*/
enum amd_pmf_laptop_placement {
AMD_PMF_LP_UNKNOWN,
AMD_PMF_ON_TABLE,
AMD_PMF_ON_LAP_MOTION,
AMD_PMF_IN_BAG,
AMD_PMF_OUT_OF_BAG,
AMD_PMF_LP_UNDEFINED,
};
/**
* enum amd_pmf_ta_slider - Trusted Application power slider positions
* @AMD_PMF_TA_BEST_BATTERY: Maximum battery savings, minimal performance
* @AMD_PMF_TA_BETTER_BATTERY: Balanced towards battery life
* @AMD_PMF_TA_BETTER_PERFORMANCE: Balanced towards performance
* @AMD_PMF_TA_BEST_PERFORMANCE: Maximum performance, higher power consumption
* @AMD_PMF_TA_MAX: Sentinel value indicating maximum enum value
*
* This enumeration defines the power slider positions used by the
* AMD PMF Trusted Application for dynamic power management decisions.
* These correspond to the Windows power slider UI positions.
*/
enum amd_pmf_ta_slider {
AMD_PMF_TA_BEST_BATTERY,
AMD_PMF_TA_BETTER_BATTERY,
AMD_PMF_TA_BETTER_PERFORMANCE,
AMD_PMF_TA_BEST_PERFORMANCE,
AMD_PMF_TA_MAX,
};
/**
* enum amd_pmf_platform_type - Describes the physical form factor orientation
* @AMD_PMF_PTYPE_UNKNOWN: Platform type cannot be determined
* @AMD_PMF_LID_CLOSE: Laptop lid is closed
* @AMD_PMF_CLAMSHELL: Traditional laptop mode with keyboard and screen
* @AMD_PMF_FLAT: Device is lying flat on a surface
* @AMD_PMF_TENT: Device is in tent mode (keyboard folded back, standing)
* @AMD_PMF_STAND: Device is propped up in stand orientation
* @AMD_PMF_TABLET: Device is in tablet mode with keyboard hidden
* @AMD_PMF_BOOK: Device is in book reading orientation
* @AMD_PMF_PRESENTATION: Device is in presentation mode
* @AMD_PMF_PULL_FWD: Screen is pulled forward towards user
* @AMD_PMF_PTYPE_INVALID: Invalid platform type marker
*
* This enumeration describes the current physical orientation or form
* factor of convertible/2-in-1 devices. Used for optimizing power and
* thermal management based on device posture.
*/
enum amd_pmf_platform_type {
AMD_PMF_PTYPE_UNKNOWN,
AMD_PMF_LID_CLOSE,
AMD_PMF_CLAMSHELL,
AMD_PMF_FLAT,
AMD_PMF_TENT,
AMD_PMF_STAND,
AMD_PMF_TABLET,
AMD_PMF_BOOK,
AMD_PMF_PRESENTATION,
AMD_PMF_PULL_FWD,
AMD_PMF_PTYPE_INVALID = 0xf,
};
static inline const char *amd_pmf_get_platform_type(unsigned int platform_type)
{
switch (platform_type) {
case AMD_PMF_CLAMSHELL:
return "CLAMSHELL";
case AMD_PMF_LID_CLOSE:
return "LID_CLOSE";
case AMD_PMF_FLAT:
return "FLAT";
case AMD_PMF_TENT:
return "TENT";
case AMD_PMF_STAND:
return "STAND";
case AMD_PMF_TABLET:
return "TABLET";
case AMD_PMF_BOOK:
return "BOOK";
case AMD_PMF_PRESENTATION:
return "PRESENTATION";
case AMD_PMF_PULL_FWD:
return "PULL_FWD";
default:
return "UNKNOWN";
}
}
static inline const char *amd_pmf_get_laptop_placement(unsigned int device_state)
{
switch (device_state) {
case AMD_PMF_ON_TABLE:
return "ON_TABLE";
case AMD_PMF_ON_LAP_MOTION:
return "ON_LAP_MOTION";
case AMD_PMF_IN_BAG:
return "IN_BAG";
case AMD_PMF_OUT_OF_BAG:
return "OUT_OF_BAG";
default:
return "UNKNOWN";
}
}
static inline const char *amd_pmf_get_slider_position(unsigned int state)
{
switch (state) {
case AMD_PMF_TA_BEST_PERFORMANCE:
return "PERFORMANCE";
case AMD_PMF_TA_BETTER_PERFORMANCE:
return "BALANCED";
case AMD_PMF_TA_BEST_BATTERY:
return "POWER_SAVER";
case AMD_PMF_TA_BETTER_BATTERY:
return "BALANCED_BATTERY";
default:
return "Unknown TA Slider State";
}
}
struct amd_pmf_info {
__u64 size;
/* Feature info */
__u32 features_supported;
/* Power and state info */
__u32 platform_type;
__u32 power_source;
__u32 laptop_placement;
__u32 lid_state;
__u32 user_presence;
__u32 slider_position;
/* Thermal and power metrics */
__s32 skin_temp;
__u32 gfx_busy;
__s32 ambient_light;
__u32 avg_c0_residency;
__u32 max_c0_residency;
__u32 socket_power;
/* BIOS parameters */
__u32 bios_input[AMD_PMF_BIOS_PARAMS_MAX];
__u32 bios_output[AMD_PMF_BIOS_PARAMS_MAX];
};
#endif /* _UAPI_LINUX_AMD_PMF_H */