1d9c52522SMasahiro Yamada /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 235f2c14dSSrinivas Pandruvada /* 335f2c14dSSrinivas Pandruvada * Intel Speed Select Interface: OS to hardware Interface 435f2c14dSSrinivas Pandruvada * Copyright (c) 2019, Intel Corporation. 535f2c14dSSrinivas Pandruvada * All rights reserved. 635f2c14dSSrinivas Pandruvada * 735f2c14dSSrinivas Pandruvada * Author: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> 835f2c14dSSrinivas Pandruvada */ 935f2c14dSSrinivas Pandruvada 1035f2c14dSSrinivas Pandruvada #ifndef __ISST_IF_H 1135f2c14dSSrinivas Pandruvada #define __ISST_IF_H 1235f2c14dSSrinivas Pandruvada 1335f2c14dSSrinivas Pandruvada #include <linux/types.h> 1435f2c14dSSrinivas Pandruvada 1535f2c14dSSrinivas Pandruvada /** 1635f2c14dSSrinivas Pandruvada * struct isst_if_platform_info - Define platform information 1735f2c14dSSrinivas Pandruvada * @api_version: Version of the firmware document, which this driver 1835f2c14dSSrinivas Pandruvada * can communicate 1935f2c14dSSrinivas Pandruvada * @driver_version: Driver version, which will help user to send right 2035f2c14dSSrinivas Pandruvada * commands. Even if the firmware is capable, driver may 2135f2c14dSSrinivas Pandruvada * not be ready 2235f2c14dSSrinivas Pandruvada * @max_cmds_per_ioctl: Returns the maximum number of commands driver will 2335f2c14dSSrinivas Pandruvada * accept in a single ioctl 2435f2c14dSSrinivas Pandruvada * @mbox_supported: Support of mail box interface 2535f2c14dSSrinivas Pandruvada * @mmio_supported: Support of mmio interface for core-power feature 2635f2c14dSSrinivas Pandruvada * 2735f2c14dSSrinivas Pandruvada * Used to return output of IOCTL ISST_IF_GET_PLATFORM_INFO. This 2835f2c14dSSrinivas Pandruvada * information can be used by the user space, to get the driver, firmware 2935f2c14dSSrinivas Pandruvada * support and also number of commands to send in a single IOCTL request. 3035f2c14dSSrinivas Pandruvada */ 3135f2c14dSSrinivas Pandruvada struct isst_if_platform_info { 3235f2c14dSSrinivas Pandruvada __u16 api_version; 3335f2c14dSSrinivas Pandruvada __u16 driver_version; 3435f2c14dSSrinivas Pandruvada __u16 max_cmds_per_ioctl; 3535f2c14dSSrinivas Pandruvada __u8 mbox_supported; 3635f2c14dSSrinivas Pandruvada __u8 mmio_supported; 3735f2c14dSSrinivas Pandruvada }; 3835f2c14dSSrinivas Pandruvada 39fb5b36a4SSrinivas Pandruvada /** 40fb5b36a4SSrinivas Pandruvada * struct isst_if_cpu_map - CPU mapping between logical and physical CPU 41fb5b36a4SSrinivas Pandruvada * @logical_cpu: Linux logical CPU number 42fb5b36a4SSrinivas Pandruvada * @physical_cpu: PUNIT CPU number 43fb5b36a4SSrinivas Pandruvada * 44fb5b36a4SSrinivas Pandruvada * Used to convert from Linux logical CPU to PUNIT CPU numbering scheme. 45fb5b36a4SSrinivas Pandruvada * The PUNIT CPU number is different than APIC ID based CPU numbering. 46fb5b36a4SSrinivas Pandruvada */ 47fb5b36a4SSrinivas Pandruvada struct isst_if_cpu_map { 48fb5b36a4SSrinivas Pandruvada __u32 logical_cpu; 49fb5b36a4SSrinivas Pandruvada __u32 physical_cpu; 50fb5b36a4SSrinivas Pandruvada }; 51fb5b36a4SSrinivas Pandruvada 52fb5b36a4SSrinivas Pandruvada /** 53fb5b36a4SSrinivas Pandruvada * struct isst_if_cpu_maps - structure for CPU map IOCTL 54fb5b36a4SSrinivas Pandruvada * @cmd_count: Number of CPU mapping command in cpu_map[] 55fb5b36a4SSrinivas Pandruvada * @cpu_map[]: Holds one or more CPU map data structure 56fb5b36a4SSrinivas Pandruvada * 57fb5b36a4SSrinivas Pandruvada * This structure used with ioctl ISST_IF_GET_PHY_ID to send 58fb5b36a4SSrinivas Pandruvada * one or more CPU mapping commands. Here IOCTL return value indicates 59fb5b36a4SSrinivas Pandruvada * number of commands sent or error number if no commands have been sent. 60fb5b36a4SSrinivas Pandruvada */ 61fb5b36a4SSrinivas Pandruvada struct isst_if_cpu_maps { 62fb5b36a4SSrinivas Pandruvada __u32 cmd_count; 63fb5b36a4SSrinivas Pandruvada struct isst_if_cpu_map cpu_map[1]; 64fb5b36a4SSrinivas Pandruvada }; 65fb5b36a4SSrinivas Pandruvada 66d3a23584SSrinivas Pandruvada /** 67d3a23584SSrinivas Pandruvada * struct isst_if_io_reg - Read write PUNIT IO register 68d3a23584SSrinivas Pandruvada * @read_write: Value 0: Read, 1: Write 69d3a23584SSrinivas Pandruvada * @logical_cpu: Logical CPU number to get target PCI device. 70d3a23584SSrinivas Pandruvada * @reg: PUNIT register offset 71d3a23584SSrinivas Pandruvada * @value: For write operation value to write and for 7250c8a002SRandy Dunlap * read placeholder read value 73d3a23584SSrinivas Pandruvada * 74d3a23584SSrinivas Pandruvada * Structure to specify read/write data to PUNIT registers. 75d3a23584SSrinivas Pandruvada */ 76d3a23584SSrinivas Pandruvada struct isst_if_io_reg { 77d3a23584SSrinivas Pandruvada __u32 read_write; /* Read:0, Write:1 */ 78d3a23584SSrinivas Pandruvada __u32 logical_cpu; 79d3a23584SSrinivas Pandruvada __u32 reg; 80d3a23584SSrinivas Pandruvada __u32 value; 81d3a23584SSrinivas Pandruvada }; 82d3a23584SSrinivas Pandruvada 83d3a23584SSrinivas Pandruvada /** 84d3a23584SSrinivas Pandruvada * struct isst_if_io_regs - structure for IO register commands 85d3a23584SSrinivas Pandruvada * @cmd_count: Number of io reg commands in io_reg[] 86d3a23584SSrinivas Pandruvada * @io_reg[]: Holds one or more io_reg command structure 87d3a23584SSrinivas Pandruvada * 88d3a23584SSrinivas Pandruvada * This structure used with ioctl ISST_IF_IO_CMD to send 89d3a23584SSrinivas Pandruvada * one or more read/write commands to PUNIT. Here IOCTL return value 90d3a23584SSrinivas Pandruvada * indicates number of requests sent or error number if no requests have 91d3a23584SSrinivas Pandruvada * been sent. 92d3a23584SSrinivas Pandruvada */ 93d3a23584SSrinivas Pandruvada struct isst_if_io_regs { 94d3a23584SSrinivas Pandruvada __u32 req_count; 95d3a23584SSrinivas Pandruvada struct isst_if_io_reg io_reg[1]; 96d3a23584SSrinivas Pandruvada }; 97d3a23584SSrinivas Pandruvada 9831a166feSSrinivas Pandruvada /** 9931a166feSSrinivas Pandruvada * struct isst_if_mbox_cmd - Structure to define mail box command 10031a166feSSrinivas Pandruvada * @logical_cpu: Logical CPU number to get target PCI device 10131a166feSSrinivas Pandruvada * @parameter: Mailbox parameter value 10231a166feSSrinivas Pandruvada * @req_data: Request data for the mailbox 10331a166feSSrinivas Pandruvada * @resp_data: Response data for mailbox command response 10431a166feSSrinivas Pandruvada * @command: Mailbox command value 10531a166feSSrinivas Pandruvada * @sub_command: Mailbox sub command value 10631a166feSSrinivas Pandruvada * @reserved: Unused, set to 0 10731a166feSSrinivas Pandruvada * 10831a166feSSrinivas Pandruvada * Structure to specify mailbox command to be sent to PUNIT. 10931a166feSSrinivas Pandruvada */ 11031a166feSSrinivas Pandruvada struct isst_if_mbox_cmd { 11131a166feSSrinivas Pandruvada __u32 logical_cpu; 11231a166feSSrinivas Pandruvada __u32 parameter; 11331a166feSSrinivas Pandruvada __u32 req_data; 11431a166feSSrinivas Pandruvada __u32 resp_data; 11531a166feSSrinivas Pandruvada __u16 command; 11631a166feSSrinivas Pandruvada __u16 sub_command; 11731a166feSSrinivas Pandruvada __u32 reserved; 11831a166feSSrinivas Pandruvada }; 11931a166feSSrinivas Pandruvada 12031a166feSSrinivas Pandruvada /** 12131a166feSSrinivas Pandruvada * struct isst_if_mbox_cmds - structure for mailbox commands 12231a166feSSrinivas Pandruvada * @cmd_count: Number of mailbox commands in mbox_cmd[] 12331a166feSSrinivas Pandruvada * @mbox_cmd[]: Holds one or more mbox commands 12431a166feSSrinivas Pandruvada * 12531a166feSSrinivas Pandruvada * This structure used with ioctl ISST_IF_MBOX_COMMAND to send 12631a166feSSrinivas Pandruvada * one or more mailbox commands to PUNIT. Here IOCTL return value 12731a166feSSrinivas Pandruvada * indicates number of commands sent or error number if no commands have 12831a166feSSrinivas Pandruvada * been sent. 12931a166feSSrinivas Pandruvada */ 13031a166feSSrinivas Pandruvada struct isst_if_mbox_cmds { 13131a166feSSrinivas Pandruvada __u32 cmd_count; 13231a166feSSrinivas Pandruvada struct isst_if_mbox_cmd mbox_cmd[1]; 13331a166feSSrinivas Pandruvada }; 13431a166feSSrinivas Pandruvada 135e765f37bSSrinivas Pandruvada /** 136e765f37bSSrinivas Pandruvada * struct isst_if_msr_cmd - Structure to define msr command 137e765f37bSSrinivas Pandruvada * @read_write: Value 0: Read, 1: Write 138e765f37bSSrinivas Pandruvada * @logical_cpu: Logical CPU number 139e765f37bSSrinivas Pandruvada * @msr: MSR number 140e765f37bSSrinivas Pandruvada * @data: For write operation, data to write, for read 141e765f37bSSrinivas Pandruvada * place holder 142e765f37bSSrinivas Pandruvada * 143e765f37bSSrinivas Pandruvada * Structure to specify MSR command related to PUNIT. 144e765f37bSSrinivas Pandruvada */ 145e765f37bSSrinivas Pandruvada struct isst_if_msr_cmd { 146e765f37bSSrinivas Pandruvada __u32 read_write; /* Read:0, Write:1 */ 147e765f37bSSrinivas Pandruvada __u32 logical_cpu; 148e765f37bSSrinivas Pandruvada __u64 msr; 149e765f37bSSrinivas Pandruvada __u64 data; 150e765f37bSSrinivas Pandruvada }; 151e765f37bSSrinivas Pandruvada 152e765f37bSSrinivas Pandruvada /** 153e765f37bSSrinivas Pandruvada * struct isst_if_msr_cmds - structure for msr commands 154e765f37bSSrinivas Pandruvada * @cmd_count: Number of mailbox commands in msr_cmd[] 155e765f37bSSrinivas Pandruvada * @msr_cmd[]: Holds one or more msr commands 156e765f37bSSrinivas Pandruvada * 157e765f37bSSrinivas Pandruvada * This structure used with ioctl ISST_IF_MSR_COMMAND to send 158e765f37bSSrinivas Pandruvada * one or more MSR commands. IOCTL return value indicates number of 159e765f37bSSrinivas Pandruvada * commands sent or error number if no commands have been sent. 160e765f37bSSrinivas Pandruvada */ 161e765f37bSSrinivas Pandruvada struct isst_if_msr_cmds { 162e765f37bSSrinivas Pandruvada __u32 cmd_count; 163e765f37bSSrinivas Pandruvada struct isst_if_msr_cmd msr_cmd[1]; 164e765f37bSSrinivas Pandruvada }; 165e765f37bSSrinivas Pandruvada 166d805456cSSrinivas Pandruvada /** 16712a7d2cbSSrinivas Pandruvada * struct isst_core_power - Structure to get/set core_power feature 16812a7d2cbSSrinivas Pandruvada * @get_set: 0: Get, 1: Set 16912a7d2cbSSrinivas Pandruvada * @socket_id: Socket/package id 17012a7d2cbSSrinivas Pandruvada * @power_domain: Power Domain id 17112a7d2cbSSrinivas Pandruvada * @enable: Feature enable status 17212a7d2cbSSrinivas Pandruvada * @priority_type: Priority type for the feature (ordered/proportional) 17312a7d2cbSSrinivas Pandruvada * 17412a7d2cbSSrinivas Pandruvada * Structure to get/set core_power feature state using IOCTL 17512a7d2cbSSrinivas Pandruvada * ISST_IF_CORE_POWER_STATE. 17612a7d2cbSSrinivas Pandruvada */ 17712a7d2cbSSrinivas Pandruvada struct isst_core_power { 17812a7d2cbSSrinivas Pandruvada __u8 get_set; 17912a7d2cbSSrinivas Pandruvada __u8 socket_id; 18012a7d2cbSSrinivas Pandruvada __u8 power_domain_id; 18112a7d2cbSSrinivas Pandruvada __u8 enable; 18212a7d2cbSSrinivas Pandruvada __u8 supported; 18312a7d2cbSSrinivas Pandruvada __u8 priority_type; 18412a7d2cbSSrinivas Pandruvada }; 18512a7d2cbSSrinivas Pandruvada 18612a7d2cbSSrinivas Pandruvada /** 18712a7d2cbSSrinivas Pandruvada * struct isst_clos_param - Structure to get/set clos praram 18812a7d2cbSSrinivas Pandruvada * @get_set: 0: Get, 1: Set 18912a7d2cbSSrinivas Pandruvada * @socket_id: Socket/package id 19012a7d2cbSSrinivas Pandruvada * @power_domain: Power Domain id 19112a7d2cbSSrinivas Pandruvada * clos: Clos ID for the parameters 19212a7d2cbSSrinivas Pandruvada * min_freq_mhz: Minimum frequency in MHz 19312a7d2cbSSrinivas Pandruvada * max_freq_mhz: Maximum frequency in MHz 19412a7d2cbSSrinivas Pandruvada * prop_prio: Proportional priority from 0-15 19512a7d2cbSSrinivas Pandruvada * 19612a7d2cbSSrinivas Pandruvada * Structure to get/set per clos property using IOCTL 19712a7d2cbSSrinivas Pandruvada * ISST_IF_CLOS_PARAM. 19812a7d2cbSSrinivas Pandruvada */ 19912a7d2cbSSrinivas Pandruvada struct isst_clos_param { 20012a7d2cbSSrinivas Pandruvada __u8 get_set; 20112a7d2cbSSrinivas Pandruvada __u8 socket_id; 20212a7d2cbSSrinivas Pandruvada __u8 power_domain_id; 20312a7d2cbSSrinivas Pandruvada __u8 clos; 20412a7d2cbSSrinivas Pandruvada __u16 min_freq_mhz; 20512a7d2cbSSrinivas Pandruvada __u16 max_freq_mhz; 20612a7d2cbSSrinivas Pandruvada __u8 prop_prio; 20712a7d2cbSSrinivas Pandruvada }; 20812a7d2cbSSrinivas Pandruvada 20912a7d2cbSSrinivas Pandruvada /** 21012a7d2cbSSrinivas Pandruvada * struct isst_if_clos_assoc - Structure to assign clos to a CPU 21112a7d2cbSSrinivas Pandruvada * @socket_id: Socket/package id 21212a7d2cbSSrinivas Pandruvada * @power_domain: Power Domain id 21312a7d2cbSSrinivas Pandruvada * @logical_cpu: CPU number 21412a7d2cbSSrinivas Pandruvada * @clos: Clos ID to assign to the logical CPU 21512a7d2cbSSrinivas Pandruvada * 21612a7d2cbSSrinivas Pandruvada * Structure to get/set core_power feature. 21712a7d2cbSSrinivas Pandruvada */ 21812a7d2cbSSrinivas Pandruvada struct isst_if_clos_assoc { 21912a7d2cbSSrinivas Pandruvada __u8 socket_id; 22012a7d2cbSSrinivas Pandruvada __u8 power_domain_id; 22112a7d2cbSSrinivas Pandruvada __u16 logical_cpu; 22212a7d2cbSSrinivas Pandruvada __u16 clos; 22312a7d2cbSSrinivas Pandruvada }; 22412a7d2cbSSrinivas Pandruvada 22512a7d2cbSSrinivas Pandruvada /** 22612a7d2cbSSrinivas Pandruvada * struct isst_if_clos_assoc_cmds - Structure to assign clos to CPUs 22712a7d2cbSSrinivas Pandruvada * @cmd_count: Number of cmds (cpus) in this request 22812a7d2cbSSrinivas Pandruvada * @get_set: Request is for get or set 22912a7d2cbSSrinivas Pandruvada * @punit_cpu_map: Set to 1 if the CPU number is punit numbering not 23012a7d2cbSSrinivas Pandruvada * Linux CPU number 23112a7d2cbSSrinivas Pandruvada * 23212a7d2cbSSrinivas Pandruvada * Structure used to get/set associate CPUs to clos using IOCTL 23312a7d2cbSSrinivas Pandruvada * ISST_IF_CLOS_ASSOC. 23412a7d2cbSSrinivas Pandruvada */ 23512a7d2cbSSrinivas Pandruvada struct isst_if_clos_assoc_cmds { 23612a7d2cbSSrinivas Pandruvada __u16 cmd_count; 23712a7d2cbSSrinivas Pandruvada __u16 get_set; 23812a7d2cbSSrinivas Pandruvada __u16 punit_cpu_map; 23912a7d2cbSSrinivas Pandruvada struct isst_if_clos_assoc assoc_info[1]; 24012a7d2cbSSrinivas Pandruvada }; 24112a7d2cbSSrinivas Pandruvada 24212a7d2cbSSrinivas Pandruvada /** 243d805456cSSrinivas Pandruvada * struct isst_tpmi_instance_count - Get number of TPMI instances per socket 244d805456cSSrinivas Pandruvada * @socket_id: Socket/package id 245d805456cSSrinivas Pandruvada * @count: Number of instances 246d805456cSSrinivas Pandruvada * @valid_mask: Mask of instances as there can be holes 247d805456cSSrinivas Pandruvada * 248d805456cSSrinivas Pandruvada * Structure used to get TPMI instances information using 249d805456cSSrinivas Pandruvada * IOCTL ISST_IF_COUNT_TPMI_INSTANCES. 250d805456cSSrinivas Pandruvada */ 251d805456cSSrinivas Pandruvada struct isst_tpmi_instance_count { 252d805456cSSrinivas Pandruvada __u8 socket_id; 253d805456cSSrinivas Pandruvada __u8 count; 254d805456cSSrinivas Pandruvada __u16 valid_mask; 255d805456cSSrinivas Pandruvada }; 256d805456cSSrinivas Pandruvada 257ea009e47SSrinivas Pandruvada /** 258ea009e47SSrinivas Pandruvada * struct isst_perf_level_info - Structure to get information on SST-PP levels 259ea009e47SSrinivas Pandruvada * @socket_id: Socket/package id 260ea009e47SSrinivas Pandruvada * @power_domain: Power Domain id 261ea009e47SSrinivas Pandruvada * @logical_cpu: CPU number 262ea009e47SSrinivas Pandruvada * @clos: Clos ID to assign to the logical CPU 263ea009e47SSrinivas Pandruvada * @max_level: Maximum performance level supported by the platform 264ea009e47SSrinivas Pandruvada * @feature_rev: The feature revision for SST-PP supported by the platform 265ea009e47SSrinivas Pandruvada * @level_mask: Mask of supported performance levels 266ea009e47SSrinivas Pandruvada * @current_level: Current performance level 267ea009e47SSrinivas Pandruvada * @feature_state: SST-BF and SST-TF (enabled/disabled) status at current level 268ea009e47SSrinivas Pandruvada * @locked: SST-PP performance level change is locked/unlocked 269ea009e47SSrinivas Pandruvada * @enabled: SST-PP feature is enabled or not 270ea009e47SSrinivas Pandruvada * @sst-tf_support: SST-TF support status at this level 271ea009e47SSrinivas Pandruvada * @sst-bf_support: SST-BF support status at this level 272ea009e47SSrinivas Pandruvada * 273ea009e47SSrinivas Pandruvada * Structure to get SST-PP details using IOCTL ISST_IF_PERF_LEVELS. 274ea009e47SSrinivas Pandruvada */ 275ea009e47SSrinivas Pandruvada struct isst_perf_level_info { 276ea009e47SSrinivas Pandruvada __u8 socket_id; 277ea009e47SSrinivas Pandruvada __u8 power_domain_id; 278ea009e47SSrinivas Pandruvada __u8 max_level; 279ea009e47SSrinivas Pandruvada __u8 feature_rev; 280ea009e47SSrinivas Pandruvada __u8 level_mask; 281ea009e47SSrinivas Pandruvada __u8 current_level; 282ea009e47SSrinivas Pandruvada __u8 feature_state; 283ea009e47SSrinivas Pandruvada __u8 locked; 284ea009e47SSrinivas Pandruvada __u8 enabled; 285ea009e47SSrinivas Pandruvada __u8 sst_tf_support; 286ea009e47SSrinivas Pandruvada __u8 sst_bf_support; 287ea009e47SSrinivas Pandruvada }; 288ea009e47SSrinivas Pandruvada 289ea009e47SSrinivas Pandruvada /** 290ea009e47SSrinivas Pandruvada * struct isst_perf_level_control - Structure to set SST-PP level 291ea009e47SSrinivas Pandruvada * @socket_id: Socket/package id 292ea009e47SSrinivas Pandruvada * @power_domain: Power Domain id 293ea009e47SSrinivas Pandruvada * @level: level to set 294ea009e47SSrinivas Pandruvada * 295ea009e47SSrinivas Pandruvada * Structure used change SST-PP level using IOCTL ISST_IF_PERF_SET_LEVEL. 296ea009e47SSrinivas Pandruvada */ 297ea009e47SSrinivas Pandruvada struct isst_perf_level_control { 298ea009e47SSrinivas Pandruvada __u8 socket_id; 299ea009e47SSrinivas Pandruvada __u8 power_domain_id; 300ea009e47SSrinivas Pandruvada __u8 level; 301ea009e47SSrinivas Pandruvada }; 302ea009e47SSrinivas Pandruvada 303ea009e47SSrinivas Pandruvada /** 304ea009e47SSrinivas Pandruvada * struct isst_perf_feature_control - Structure to activate SST-BF/SST-TF 305ea009e47SSrinivas Pandruvada * @socket_id: Socket/package id 306ea009e47SSrinivas Pandruvada * @power_domain: Power Domain id 307ea009e47SSrinivas Pandruvada * @feature: bit 0 = SST-BF state, bit 1 = SST-TF state 308ea009e47SSrinivas Pandruvada * 309ea009e47SSrinivas Pandruvada * Structure used to enable SST-BF/SST-TF using IOCTL ISST_IF_PERF_SET_FEATURE. 310ea009e47SSrinivas Pandruvada */ 311ea009e47SSrinivas Pandruvada struct isst_perf_feature_control { 312ea009e47SSrinivas Pandruvada __u8 socket_id; 313ea009e47SSrinivas Pandruvada __u8 power_domain_id; 314ea009e47SSrinivas Pandruvada __u8 feature; 315ea009e47SSrinivas Pandruvada }; 316ea009e47SSrinivas Pandruvada 317ea009e47SSrinivas Pandruvada #define TRL_MAX_BUCKETS 8 318ea009e47SSrinivas Pandruvada #define TRL_MAX_LEVELS 6 319ea009e47SSrinivas Pandruvada 320ea009e47SSrinivas Pandruvada /** 321ea009e47SSrinivas Pandruvada * struct isst_perf_level_data_info - Structure to get SST-PP level details 322ea009e47SSrinivas Pandruvada * @socket_id: Socket/package id 323ea009e47SSrinivas Pandruvada * @power_domain: Power Domain id 324ea009e47SSrinivas Pandruvada * @level: SST-PP level for which caller wants to get information 325ea009e47SSrinivas Pandruvada * @tdp_ratio: TDP Ratio 326ea009e47SSrinivas Pandruvada * @base_freq_mhz: Base frequency in MHz 327ea009e47SSrinivas Pandruvada * @base_freq_avx2_mhz: AVX2 Base frequency in MHz 328ea009e47SSrinivas Pandruvada * @base_freq_avx512_mhz: AVX512 base frequency in MHz 329ea009e47SSrinivas Pandruvada * @base_freq_amx_mhz: AMX base frequency in MHz 330ea009e47SSrinivas Pandruvada * @thermal_design_power_w: Thermal design (TDP) power 331ea009e47SSrinivas Pandruvada * @tjunction_max_c: Max junction temperature 332ea009e47SSrinivas Pandruvada * @max_memory_freq_mhz: Max memory frequency in MHz 333ea009e47SSrinivas Pandruvada * @cooling_type: Type of cooling is used 334ea009e47SSrinivas Pandruvada * @p0_freq_mhz: core maximum frequency 335ea009e47SSrinivas Pandruvada * @p1_freq_mhz: Core TDP frequency 336ea009e47SSrinivas Pandruvada * @pn_freq_mhz: Core maximum efficiency frequency 337ea009e47SSrinivas Pandruvada * @pm_freq_mhz: Core minimum frequency 338ea009e47SSrinivas Pandruvada * @p0_fabric_freq_mhz: Fabric (Uncore) maximum frequency 339ea009e47SSrinivas Pandruvada * @p1_fabric_freq_mhz: Fabric (Uncore) TDP frequency 340ea009e47SSrinivas Pandruvada * @pn_fabric_freq_mhz: Fabric (Uncore) minimum efficiency frequency 341ea009e47SSrinivas Pandruvada * @pm_fabric_freq_mhz: Fabric (Uncore) minimum frequency 342ea009e47SSrinivas Pandruvada * @max_buckets: Maximum trl buckets 343ea009e47SSrinivas Pandruvada * @max_trl_levels: Maximum trl levels 344ea009e47SSrinivas Pandruvada * @bucket_core_counts[TRL_MAX_BUCKETS]: Number of cores per bucket 345ea009e47SSrinivas Pandruvada * @trl_freq_mhz[TRL_MAX_LEVELS][TRL_MAX_BUCKETS]: maximum frequency 346ea009e47SSrinivas Pandruvada * for a bucket and trl level 347ea009e47SSrinivas Pandruvada * 348ea009e47SSrinivas Pandruvada * Structure used to get information on frequencies and TDP for a SST-PP 349ea009e47SSrinivas Pandruvada * level using ISST_IF_GET_PERF_LEVEL_INFO. 350ea009e47SSrinivas Pandruvada */ 351ea009e47SSrinivas Pandruvada struct isst_perf_level_data_info { 352ea009e47SSrinivas Pandruvada __u8 socket_id; 353ea009e47SSrinivas Pandruvada __u8 power_domain_id; 354ea009e47SSrinivas Pandruvada __u16 level; 355ea009e47SSrinivas Pandruvada __u16 tdp_ratio; 356ea009e47SSrinivas Pandruvada __u16 base_freq_mhz; 357ea009e47SSrinivas Pandruvada __u16 base_freq_avx2_mhz; 358ea009e47SSrinivas Pandruvada __u16 base_freq_avx512_mhz; 359ea009e47SSrinivas Pandruvada __u16 base_freq_amx_mhz; 360ea009e47SSrinivas Pandruvada __u16 thermal_design_power_w; 361ea009e47SSrinivas Pandruvada __u16 tjunction_max_c; 362ea009e47SSrinivas Pandruvada __u16 max_memory_freq_mhz; 363ea009e47SSrinivas Pandruvada __u16 cooling_type; 364ea009e47SSrinivas Pandruvada __u16 p0_freq_mhz; 365ea009e47SSrinivas Pandruvada __u16 p1_freq_mhz; 366ea009e47SSrinivas Pandruvada __u16 pn_freq_mhz; 367ea009e47SSrinivas Pandruvada __u16 pm_freq_mhz; 368ea009e47SSrinivas Pandruvada __u16 p0_fabric_freq_mhz; 369ea009e47SSrinivas Pandruvada __u16 p1_fabric_freq_mhz; 370ea009e47SSrinivas Pandruvada __u16 pn_fabric_freq_mhz; 371ea009e47SSrinivas Pandruvada __u16 pm_fabric_freq_mhz; 372ea009e47SSrinivas Pandruvada __u16 max_buckets; 373ea009e47SSrinivas Pandruvada __u16 max_trl_levels; 374ea009e47SSrinivas Pandruvada __u16 bucket_core_counts[TRL_MAX_BUCKETS]; 375ea009e47SSrinivas Pandruvada __u16 trl_freq_mhz[TRL_MAX_LEVELS][TRL_MAX_BUCKETS]; 376ea009e47SSrinivas Pandruvada }; 377ea009e47SSrinivas Pandruvada 378ea009e47SSrinivas Pandruvada /** 379ea009e47SSrinivas Pandruvada * struct isst_perf_level_cpu_mask - Structure to get SST-PP level CPU mask 380ea009e47SSrinivas Pandruvada * @socket_id: Socket/package id 381ea009e47SSrinivas Pandruvada * @power_domain: Power Domain id 382ea009e47SSrinivas Pandruvada * @level: SST-PP level for which caller wants to get information 383ea009e47SSrinivas Pandruvada * @punit_cpu_map: Set to 1 if the CPU number is punit numbering not 384ea009e47SSrinivas Pandruvada * Linux CPU number. If 0 CPU buffer is copied to user space 385ea009e47SSrinivas Pandruvada * supplied cpu_buffer of size cpu_buffer_size. Punit 386ea009e47SSrinivas Pandruvada * cpu mask is copied to "mask" field. 387ea009e47SSrinivas Pandruvada * @mask: cpu mask for this PP level (punit CPU numbering) 388ea009e47SSrinivas Pandruvada * @cpu_buffer_size: size of cpu_buffer also used to return the copied CPU 389ea009e47SSrinivas Pandruvada * buffer size. 390ea009e47SSrinivas Pandruvada * @cpu_buffer: Buffer to copy CPU mask when punit_cpu_map is 0 391ea009e47SSrinivas Pandruvada * 392ea009e47SSrinivas Pandruvada * Structure used to get cpumask for a SST-PP level using 393ea009e47SSrinivas Pandruvada * IOCTL ISST_IF_GET_PERF_LEVEL_CPU_MASK. Also used to get CPU mask for 394ea009e47SSrinivas Pandruvada * IOCTL ISST_IF_GET_BASE_FREQ_CPU_MASK for SST-BF. 395ea009e47SSrinivas Pandruvada */ 396ea009e47SSrinivas Pandruvada struct isst_perf_level_cpu_mask { 397ea009e47SSrinivas Pandruvada __u8 socket_id; 398ea009e47SSrinivas Pandruvada __u8 power_domain_id; 399ea009e47SSrinivas Pandruvada __u8 level; 400ea009e47SSrinivas Pandruvada __u8 punit_cpu_map; 401ea009e47SSrinivas Pandruvada __u64 mask; 402ea009e47SSrinivas Pandruvada __u16 cpu_buffer_size; 403ea009e47SSrinivas Pandruvada __s8 cpu_buffer[1]; 404ea009e47SSrinivas Pandruvada }; 405ea009e47SSrinivas Pandruvada 406ea009e47SSrinivas Pandruvada /** 407ea009e47SSrinivas Pandruvada * struct isst_base_freq_info - Structure to get SST-BF frequencies 408ea009e47SSrinivas Pandruvada * @socket_id: Socket/package id 409ea009e47SSrinivas Pandruvada * @power_domain: Power Domain id 410ea009e47SSrinivas Pandruvada * @level: SST-PP level for which caller wants to get information 411ea009e47SSrinivas Pandruvada * @high_base_freq_mhz: High priority CPU base frequency 412ea009e47SSrinivas Pandruvada * @low_base_freq_mhz: Low priority CPU base frequency 413ea009e47SSrinivas Pandruvada * @tjunction_max_c: Max junction temperature 414ea009e47SSrinivas Pandruvada * @thermal_design_power_w: Thermal design power in watts 415ea009e47SSrinivas Pandruvada * 416ea009e47SSrinivas Pandruvada * Structure used to get SST-BF information using 417ea009e47SSrinivas Pandruvada * IOCTL ISST_IF_GET_BASE_FREQ_INFO. 418ea009e47SSrinivas Pandruvada */ 419ea009e47SSrinivas Pandruvada struct isst_base_freq_info { 420ea009e47SSrinivas Pandruvada __u8 socket_id; 421ea009e47SSrinivas Pandruvada __u8 power_domain_id; 422ea009e47SSrinivas Pandruvada __u16 level; 423ea009e47SSrinivas Pandruvada __u16 high_base_freq_mhz; 424ea009e47SSrinivas Pandruvada __u16 low_base_freq_mhz; 425ea009e47SSrinivas Pandruvada __u16 tjunction_max_c; 426ea009e47SSrinivas Pandruvada __u16 thermal_design_power_w; 427ea009e47SSrinivas Pandruvada }; 428ea009e47SSrinivas Pandruvada 429*f8e0077aSSrinivas Pandruvada /** 430*f8e0077aSSrinivas Pandruvada * struct isst_turbo_freq_info - Structure to get SST-TF frequencies 431*f8e0077aSSrinivas Pandruvada * @socket_id: Socket/package id 432*f8e0077aSSrinivas Pandruvada * @power_domain: Power Domain id 433*f8e0077aSSrinivas Pandruvada * @level: SST-PP level for which caller wants to get information 434*f8e0077aSSrinivas Pandruvada * @max_clip_freqs: Maximum number of low priority core clipping frequencies 435*f8e0077aSSrinivas Pandruvada * @lp_clip_freq_mhz: Clip frequencies per trl level 436*f8e0077aSSrinivas Pandruvada * @bucket_core_counts: Maximum number of cores for a bucket 437*f8e0077aSSrinivas Pandruvada * @trl_freq_mhz: Frequencies per trl level for each bucket 438*f8e0077aSSrinivas Pandruvada * 439*f8e0077aSSrinivas Pandruvada * Structure used to get SST-TF information using 440*f8e0077aSSrinivas Pandruvada * IOCTL ISST_IF_GET_TURBO_FREQ_INFO. 441*f8e0077aSSrinivas Pandruvada */ 442*f8e0077aSSrinivas Pandruvada struct isst_turbo_freq_info { 443*f8e0077aSSrinivas Pandruvada __u8 socket_id; 444*f8e0077aSSrinivas Pandruvada __u8 power_domain_id; 445*f8e0077aSSrinivas Pandruvada __u16 level; 446*f8e0077aSSrinivas Pandruvada __u16 max_clip_freqs; 447*f8e0077aSSrinivas Pandruvada __u16 max_buckets; 448*f8e0077aSSrinivas Pandruvada __u16 max_trl_levels; 449*f8e0077aSSrinivas Pandruvada __u16 lp_clip_freq_mhz[TRL_MAX_LEVELS]; 450*f8e0077aSSrinivas Pandruvada __u16 bucket_core_counts[TRL_MAX_BUCKETS]; 451*f8e0077aSSrinivas Pandruvada __u16 trl_freq_mhz[TRL_MAX_LEVELS][TRL_MAX_BUCKETS]; 452*f8e0077aSSrinivas Pandruvada }; 453*f8e0077aSSrinivas Pandruvada 45435f2c14dSSrinivas Pandruvada #define ISST_IF_MAGIC 0xFE 45535f2c14dSSrinivas Pandruvada #define ISST_IF_GET_PLATFORM_INFO _IOR(ISST_IF_MAGIC, 0, struct isst_if_platform_info *) 456fb5b36a4SSrinivas Pandruvada #define ISST_IF_GET_PHY_ID _IOWR(ISST_IF_MAGIC, 1, struct isst_if_cpu_map *) 457d3a23584SSrinivas Pandruvada #define ISST_IF_IO_CMD _IOW(ISST_IF_MAGIC, 2, struct isst_if_io_regs *) 45831a166feSSrinivas Pandruvada #define ISST_IF_MBOX_COMMAND _IOWR(ISST_IF_MAGIC, 3, struct isst_if_mbox_cmds *) 459e765f37bSSrinivas Pandruvada #define ISST_IF_MSR_COMMAND _IOWR(ISST_IF_MAGIC, 4, struct isst_if_msr_cmds *) 460d805456cSSrinivas Pandruvada 461d805456cSSrinivas Pandruvada #define ISST_IF_COUNT_TPMI_INSTANCES _IOR(ISST_IF_MAGIC, 5, struct isst_tpmi_instance_count *) 46212a7d2cbSSrinivas Pandruvada #define ISST_IF_CORE_POWER_STATE _IOWR(ISST_IF_MAGIC, 6, struct isst_core_power *) 46312a7d2cbSSrinivas Pandruvada #define ISST_IF_CLOS_PARAM _IOWR(ISST_IF_MAGIC, 7, struct isst_clos_param *) 46412a7d2cbSSrinivas Pandruvada #define ISST_IF_CLOS_ASSOC _IOWR(ISST_IF_MAGIC, 8, struct isst_if_clos_assoc_cmds *) 465d805456cSSrinivas Pandruvada 466ea009e47SSrinivas Pandruvada #define ISST_IF_PERF_LEVELS _IOWR(ISST_IF_MAGIC, 9, struct isst_perf_level_info *) 467ea009e47SSrinivas Pandruvada #define ISST_IF_PERF_SET_LEVEL _IOW(ISST_IF_MAGIC, 10, struct isst_perf_level_control *) 468ea009e47SSrinivas Pandruvada #define ISST_IF_PERF_SET_FEATURE _IOW(ISST_IF_MAGIC, 11, struct isst_perf_feature_control *) 469ea009e47SSrinivas Pandruvada #define ISST_IF_GET_PERF_LEVEL_INFO _IOR(ISST_IF_MAGIC, 12, struct isst_perf_level_data_info *) 470ea009e47SSrinivas Pandruvada #define ISST_IF_GET_PERF_LEVEL_CPU_MASK _IOR(ISST_IF_MAGIC, 13, struct isst_perf_level_cpu_mask *) 471ea009e47SSrinivas Pandruvada #define ISST_IF_GET_BASE_FREQ_INFO _IOR(ISST_IF_MAGIC, 14, struct isst_base_freq_info *) 472ea009e47SSrinivas Pandruvada #define ISST_IF_GET_BASE_FREQ_CPU_MASK _IOR(ISST_IF_MAGIC, 15, struct isst_perf_level_cpu_mask *) 473*f8e0077aSSrinivas Pandruvada #define ISST_IF_GET_TURBO_FREQ_INFO _IOR(ISST_IF_MAGIC, 16, struct isst_turbo_freq_info *) 474ea009e47SSrinivas Pandruvada 47535f2c14dSSrinivas Pandruvada #endif 476