uncore-frequency-common.h (2403B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Intel Uncore Frequency Control: Common defines and prototypes 4 * Copyright (c) 2022, Intel Corporation. 5 * All rights reserved. 6 * 7 */ 8 9#ifndef __INTEL_UNCORE_FREQ_COMMON_H 10#define __INTEL_UNCORE_FREQ_COMMON_H 11 12#include <linux/device.h> 13 14/** 15 * struct uncore_data - Encapsulate all uncore data 16 * @stored_uncore_data: Last user changed MSR 620 value, which will be restored 17 * on system resume. 18 * @initial_min_freq_khz: Sampled minimum uncore frequency at driver init 19 * @initial_max_freq_khz: Sampled maximum uncore frequency at driver init 20 * @control_cpu: Designated CPU for a die to read/write 21 * @valid: Mark the data valid/invalid 22 * @package_id: Package id for this instance 23 * @die_id: Die id for this instance 24 * @name: Sysfs entry name for this instance 25 * @uncore_attr_group: Attribute group storage 26 * @max_freq_khz_dev_attr: Storage for device attribute max_freq_khz 27 * @mix_freq_khz_dev_attr: Storage for device attribute min_freq_khz 28 * @initial_max_freq_khz_dev_attr: Storage for device attribute initial_max_freq_khz 29 * @initial_min_freq_khz_dev_attr: Storage for device attribute initial_min_freq_khz 30 * @current_freq_khz_dev_attr: Storage for device attribute current_freq_khz 31 * @uncore_attrs: Attribute storage for group creation 32 * 33 * This structure is used to encapsulate all data related to uncore sysfs 34 * settings for a die/package. 35 */ 36struct uncore_data { 37 u64 stored_uncore_data; 38 u32 initial_min_freq_khz; 39 u32 initial_max_freq_khz; 40 int control_cpu; 41 bool valid; 42 int package_id; 43 int die_id; 44 char name[32]; 45 46 struct attribute_group uncore_attr_group; 47 struct device_attribute max_freq_khz_dev_attr; 48 struct device_attribute min_freq_khz_dev_attr; 49 struct device_attribute initial_max_freq_khz_dev_attr; 50 struct device_attribute initial_min_freq_khz_dev_attr; 51 struct device_attribute current_freq_khz_dev_attr; 52 struct attribute *uncore_attrs[6]; 53}; 54 55int uncore_freq_common_init(int (*read_control_freq)(struct uncore_data *data, unsigned int *min, unsigned int *max), 56 int (*write_control_freq)(struct uncore_data *data, unsigned int input, unsigned int min_max), 57 int (*uncore_read_freq)(struct uncore_data *data, unsigned int *freq)); 58void uncore_freq_common_exit(void); 59int uncore_freq_add_entry(struct uncore_data *data, int cpu); 60void uncore_freq_remove_die_entry(struct uncore_data *data); 61 62#endif