forked from mirrors/linux
		
	platform/x86/intel/vsec: Add PMT read callbacks
Some PMT providers require device specific actions before their telemetry can be read. Provide assignable PMT read callbacks to allow providers to perform those actions. Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Reviewed-by: Michael J. Ruhl <michael.j.ruhl@intel.com> Signed-off-by: David E. Box <david.e.box@linux.intel.com> Link: https://lore.kernel.org/r/20240725122346.4063913-3-michael.j.ruhl@intel.com Signed-off-by: Hans de Goede <hdegoede@redhat.com>
This commit is contained in:
		
							parent
							
								
									fc9aef4382
								
							
						
					
					
						commit
						e92affc74c
					
				
					 2 changed files with 16 additions and 0 deletions
				
			
		|  | @ -212,6 +212,7 @@ static int intel_vsec_add_dev(struct pci_dev *pdev, struct intel_vsec_header *he | ||||||
| 	intel_vsec_dev->num_resources = header->num_entries; | 	intel_vsec_dev->num_resources = header->num_entries; | ||||||
| 	intel_vsec_dev->quirks = info->quirks; | 	intel_vsec_dev->quirks = info->quirks; | ||||||
| 	intel_vsec_dev->base_addr = info->base_addr; | 	intel_vsec_dev->base_addr = info->base_addr; | ||||||
|  | 	intel_vsec_dev->priv_data = info->priv_data; | ||||||
| 
 | 
 | ||||||
| 	if (header->id == VSEC_ID_SDSI) | 	if (header->id == VSEC_ID_SDSI) | ||||||
| 		intel_vsec_dev->ida = &intel_vsec_sdsi_ida; | 		intel_vsec_dev->ida = &intel_vsec_sdsi_ida; | ||||||
|  |  | ||||||
|  | @ -67,10 +67,24 @@ enum intel_vsec_quirks { | ||||||
| 	VSEC_QUIRK_EARLY_HW     = BIT(4), | 	VSEC_QUIRK_EARLY_HW     = BIT(4), | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * struct pmt_callbacks - Callback infrastructure for PMT devices | ||||||
|  |  * ->read_telem() when specified, called by client driver to access PMT data (instead | ||||||
|  |  * of direct copy). | ||||||
|  |  * @pdev:  PCI device reference for the callback's use | ||||||
|  |  * @guid:  ID of data to acccss | ||||||
|  |  * @data:  buffer for the data to be copied | ||||||
|  |  * @count: size of buffer | ||||||
|  |  */ | ||||||
|  | struct pmt_callbacks { | ||||||
|  | 	int (*read_telem)(struct pci_dev *pdev, u32 guid, u64 *data, u32 count); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| /**
 | /**
 | ||||||
|  * struct intel_vsec_platform_info - Platform specific data |  * struct intel_vsec_platform_info - Platform specific data | ||||||
|  * @parent:    parent device in the auxbus chain |  * @parent:    parent device in the auxbus chain | ||||||
|  * @headers:   list of headers to define the PMT client devices to create |  * @headers:   list of headers to define the PMT client devices to create | ||||||
|  |  * @priv_data: private data, usable by parent devices, currently a callback | ||||||
|  * @caps:      bitmask of PMT capabilities for the given headers |  * @caps:      bitmask of PMT capabilities for the given headers | ||||||
|  * @quirks:    bitmask of VSEC device quirks |  * @quirks:    bitmask of VSEC device quirks | ||||||
|  * @base_addr: allow a base address to be specified (rather than derived) |  * @base_addr: allow a base address to be specified (rather than derived) | ||||||
|  | @ -78,6 +92,7 @@ enum intel_vsec_quirks { | ||||||
| struct intel_vsec_platform_info { | struct intel_vsec_platform_info { | ||||||
| 	struct device *parent; | 	struct device *parent; | ||||||
| 	struct intel_vsec_header **headers; | 	struct intel_vsec_header **headers; | ||||||
|  | 	void *priv_data; | ||||||
| 	unsigned long caps; | 	unsigned long caps; | ||||||
| 	unsigned long quirks; | 	unsigned long quirks; | ||||||
| 	u64 base_addr; | 	u64 base_addr; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 David E. Box
						David E. Box