162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef _VSEC_H 362306a36Sopenharmony_ci#define _VSEC_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <linux/auxiliary_bus.h> 662306a36Sopenharmony_ci#include <linux/bits.h> 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#define VSEC_CAP_TELEMETRY BIT(0) 962306a36Sopenharmony_ci#define VSEC_CAP_WATCHER BIT(1) 1062306a36Sopenharmony_ci#define VSEC_CAP_CRASHLOG BIT(2) 1162306a36Sopenharmony_ci#define VSEC_CAP_SDSI BIT(3) 1262306a36Sopenharmony_ci#define VSEC_CAP_TPMI BIT(4) 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cistruct pci_dev; 1562306a36Sopenharmony_cistruct resource; 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cienum intel_vsec_quirks { 1862306a36Sopenharmony_ci /* Watcher feature not supported */ 1962306a36Sopenharmony_ci VSEC_QUIRK_NO_WATCHER = BIT(0), 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci /* Crashlog feature not supported */ 2262306a36Sopenharmony_ci VSEC_QUIRK_NO_CRASHLOG = BIT(1), 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci /* Use shift instead of mask to read discovery table offset */ 2562306a36Sopenharmony_ci VSEC_QUIRK_TABLE_SHIFT = BIT(2), 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci /* DVSEC not present (provided in driver data) */ 2862306a36Sopenharmony_ci VSEC_QUIRK_NO_DVSEC = BIT(3), 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci /* Platforms requiring quirk in the auxiliary driver */ 3162306a36Sopenharmony_ci VSEC_QUIRK_EARLY_HW = BIT(4), 3262306a36Sopenharmony_ci}; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci/* Platform specific data */ 3562306a36Sopenharmony_cistruct intel_vsec_platform_info { 3662306a36Sopenharmony_ci struct intel_vsec_header **headers; 3762306a36Sopenharmony_ci unsigned long caps; 3862306a36Sopenharmony_ci unsigned long quirks; 3962306a36Sopenharmony_ci}; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_cistruct intel_vsec_device { 4262306a36Sopenharmony_ci struct auxiliary_device auxdev; 4362306a36Sopenharmony_ci struct pci_dev *pcidev; 4462306a36Sopenharmony_ci struct resource *resource; 4562306a36Sopenharmony_ci struct ida *ida; 4662306a36Sopenharmony_ci struct intel_vsec_platform_info *info; 4762306a36Sopenharmony_ci int num_resources; 4862306a36Sopenharmony_ci int id; /* xa */ 4962306a36Sopenharmony_ci void *priv_data; 5062306a36Sopenharmony_ci size_t priv_data_size; 5162306a36Sopenharmony_ci}; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ciint intel_vsec_add_aux(struct pci_dev *pdev, struct device *parent, 5462306a36Sopenharmony_ci struct intel_vsec_device *intel_vsec_dev, 5562306a36Sopenharmony_ci const char *name); 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_cistatic inline struct intel_vsec_device *dev_to_ivdev(struct device *dev) 5862306a36Sopenharmony_ci{ 5962306a36Sopenharmony_ci return container_of(dev, struct intel_vsec_device, auxdev.dev); 6062306a36Sopenharmony_ci} 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_cistatic inline struct intel_vsec_device *auxdev_to_ivdev(struct auxiliary_device *auxdev) 6362306a36Sopenharmony_ci{ 6462306a36Sopenharmony_ci return container_of(auxdev, struct intel_vsec_device, auxdev); 6562306a36Sopenharmony_ci} 6662306a36Sopenharmony_ci#endif 67