1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 29a58a333SSreedhara DS #ifndef _ASM_X86_INTEL_SCU_IPC_H_ 39a58a333SSreedhara DS #define _ASM_X86_INTEL_SCU_IPC_H_ 49a58a333SSreedhara DS 554b34aa0SMika Westerberg #include <linux/ioport.h> 635f2915cSFeng Tang 754b34aa0SMika Westerberg struct device; 854b34aa0SMika Westerberg struct intel_scu_ipc_dev; 954b34aa0SMika Westerberg 1054b34aa0SMika Westerberg /** 1154b34aa0SMika Westerberg * struct intel_scu_ipc_data - Data used to configure SCU IPC 1254b34aa0SMika Westerberg * @mem: Base address of SCU IPC MMIO registers 1354b34aa0SMika Westerberg * @irq: The IRQ number used for SCU (optional) 1454b34aa0SMika Westerberg */ 1554b34aa0SMika Westerberg struct intel_scu_ipc_data { 1654b34aa0SMika Westerberg struct resource mem; 1754b34aa0SMika Westerberg int irq; 1854b34aa0SMika Westerberg }; 1954b34aa0SMika Westerberg 2054b34aa0SMika Westerberg struct intel_scu_ipc_dev * 21f57fa185SMika Westerberg __intel_scu_ipc_register(struct device *parent, 22f57fa185SMika Westerberg const struct intel_scu_ipc_data *scu_data, 23f57fa185SMika Westerberg struct module *owner); 24f57fa185SMika Westerberg 25f57fa185SMika Westerberg #define intel_scu_ipc_register(parent, scu_data) \ 26f57fa185SMika Westerberg __intel_scu_ipc_register(parent, scu_data, THIS_MODULE) 27f57fa185SMika Westerberg 287e18c89dSMika Westerberg void intel_scu_ipc_unregister(struct intel_scu_ipc_dev *scu); 297e18c89dSMika Westerberg 307e18c89dSMika Westerberg struct intel_scu_ipc_dev * 317e18c89dSMika Westerberg __devm_intel_scu_ipc_register(struct device *parent, 327e18c89dSMika Westerberg const struct intel_scu_ipc_data *scu_data, 337e18c89dSMika Westerberg struct module *owner); 347e18c89dSMika Westerberg 357e18c89dSMika Westerberg #define devm_intel_scu_ipc_register(parent, scu_data) \ 367e18c89dSMika Westerberg __devm_intel_scu_ipc_register(parent, scu_data, THIS_MODULE) 377e18c89dSMika Westerberg 38f57fa185SMika Westerberg struct intel_scu_ipc_dev *intel_scu_ipc_dev_get(void); 39f57fa185SMika Westerberg void intel_scu_ipc_dev_put(struct intel_scu_ipc_dev *scu); 40f57fa185SMika Westerberg struct intel_scu_ipc_dev *devm_intel_scu_ipc_dev_get(struct device *dev); 41f57fa185SMika Westerberg 42f57fa185SMika Westerberg int intel_scu_ipc_dev_ioread8(struct intel_scu_ipc_dev *scu, u16 addr, 43f57fa185SMika Westerberg u8 *data); 44f57fa185SMika Westerberg int intel_scu_ipc_dev_iowrite8(struct intel_scu_ipc_dev *scu, u16 addr, 45f57fa185SMika Westerberg u8 data); 46f57fa185SMika Westerberg int intel_scu_ipc_dev_readv(struct intel_scu_ipc_dev *scu, u16 *addr, 47f57fa185SMika Westerberg u8 *data, size_t len); 48f57fa185SMika Westerberg int intel_scu_ipc_dev_writev(struct intel_scu_ipc_dev *scu, u16 *addr, 49f57fa185SMika Westerberg u8 *data, size_t len); 50f57fa185SMika Westerberg 51f57fa185SMika Westerberg int intel_scu_ipc_dev_update(struct intel_scu_ipc_dev *scu, u16 addr, 52f57fa185SMika Westerberg u8 data, u8 mask); 53f57fa185SMika Westerberg 54f57fa185SMika Westerberg int intel_scu_ipc_dev_simple_command(struct intel_scu_ipc_dev *scu, int cmd, 55f57fa185SMika Westerberg int sub); 56f57fa185SMika Westerberg int intel_scu_ipc_dev_command_with_size(struct intel_scu_ipc_dev *scu, int cmd, 57f57fa185SMika Westerberg int sub, const void *in, size_t inlen, 58f57fa185SMika Westerberg size_t size, void *out, size_t outlen); 59f57fa185SMika Westerberg 60f57fa185SMika Westerberg static inline int intel_scu_ipc_dev_command(struct intel_scu_ipc_dev *scu, int cmd, 61f57fa185SMika Westerberg int sub, const void *in, size_t inlen, 62f57fa185SMika Westerberg void *out, size_t outlen) 63f57fa185SMika Westerberg { 64f57fa185SMika Westerberg return intel_scu_ipc_dev_command_with_size(scu, cmd, sub, in, inlen, 65f57fa185SMika Westerberg inlen, out, outlen); 66f57fa185SMika Westerberg } 6754b34aa0SMika Westerberg 68dd885649SMika Westerberg #include <asm/intel_scu_ipc_legacy.h> 6942c2544bSAlan Cox 709a58a333SSreedhara DS #endif 71