1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __PLATFORM_X86_INTEL_SCU_IPC_H_
3 #define __PLATFORM_X86_INTEL_SCU_IPC_H_
5 #include <linux/init.h>
6 #include <linux/ioport.h>
7 #include <linux/types.h>
12 struct intel_scu_ipc_dev
;
15 * struct intel_scu_ipc_data - Data used to configure SCU IPC
16 * @mem: Base address of SCU IPC MMIO registers
17 * @irq: The IRQ number used for SCU (optional)
19 struct intel_scu_ipc_data
{
24 struct intel_scu_ipc_dev
*
25 __intel_scu_ipc_register(struct device
*parent
,
26 const struct intel_scu_ipc_data
*scu_data
,
27 struct module
*owner
);
29 #define intel_scu_ipc_register(parent, scu_data) \
30 __intel_scu_ipc_register(parent, scu_data, THIS_MODULE)
32 void intel_scu_ipc_unregister(struct intel_scu_ipc_dev
*scu
);
34 struct intel_scu_ipc_dev
*
35 __devm_intel_scu_ipc_register(struct device
*parent
,
36 const struct intel_scu_ipc_data
*scu_data
,
37 struct module
*owner
);
39 #define devm_intel_scu_ipc_register(parent, scu_data) \
40 __devm_intel_scu_ipc_register(parent, scu_data, THIS_MODULE)
42 struct intel_scu_ipc_dev
*intel_scu_ipc_dev_get(void);
43 void intel_scu_ipc_dev_put(struct intel_scu_ipc_dev
*scu
);
44 struct intel_scu_ipc_dev
*devm_intel_scu_ipc_dev_get(struct device
*dev
);
46 int intel_scu_ipc_dev_ioread8(struct intel_scu_ipc_dev
*scu
, u16 addr
,
48 int intel_scu_ipc_dev_iowrite8(struct intel_scu_ipc_dev
*scu
, u16 addr
,
50 int intel_scu_ipc_dev_readv(struct intel_scu_ipc_dev
*scu
, u16
*addr
,
51 u8
*data
, size_t len
);
52 int intel_scu_ipc_dev_writev(struct intel_scu_ipc_dev
*scu
, u16
*addr
,
53 u8
*data
, size_t len
);
55 int intel_scu_ipc_dev_update(struct intel_scu_ipc_dev
*scu
, u16 addr
,
58 int intel_scu_ipc_dev_simple_command(struct intel_scu_ipc_dev
*scu
, int cmd
,
60 int intel_scu_ipc_dev_command_with_size(struct intel_scu_ipc_dev
*scu
, int cmd
,
61 int sub
, const void *in
, size_t inlen
,
62 size_t size
, void *out
, size_t outlen
);
64 static inline int intel_scu_ipc_dev_command(struct intel_scu_ipc_dev
*scu
, int cmd
,
65 int sub
, const void *in
, size_t inlen
,
66 void *out
, size_t outlen
)
68 return intel_scu_ipc_dev_command_with_size(scu
, cmd
, sub
, in
, inlen
,