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 
intel_scu_ipc_dev_command(struct intel_scu_ipc_dev * scu,int cmd,int sub,const void * in,size_t inlen,void * out,size_t outlen)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 
689a58a333SSreedhara DS #endif
69