hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/arch/x86/include/asm/intel_scu_ipc.h
....@@ -2,81 +2,69 @@
22 #ifndef _ASM_X86_INTEL_SCU_IPC_H_
33 #define _ASM_X86_INTEL_SCU_IPC_H_
44
5
-#include <linux/notifier.h>
5
+#include <linux/ioport.h>
66
7
-#define IPCMSG_INDIRECT_READ 0x02
8
-#define IPCMSG_INDIRECT_WRITE 0x05
7
+struct device;
8
+struct intel_scu_ipc_dev;
99
10
-#define IPCMSG_COLD_OFF 0x80 /* Only for Tangier */
10
+/**
11
+ * struct intel_scu_ipc_data - Data used to configure SCU IPC
12
+ * @mem: Base address of SCU IPC MMIO registers
13
+ * @irq: The IRQ number used for SCU (optional)
14
+ */
15
+struct intel_scu_ipc_data {
16
+ struct resource mem;
17
+ int irq;
18
+};
1119
12
-#define IPCMSG_WARM_RESET 0xF0
13
-#define IPCMSG_COLD_RESET 0xF1
14
-#define IPCMSG_SOFT_RESET 0xF2
15
-#define IPCMSG_COLD_BOOT 0xF3
20
+struct intel_scu_ipc_dev *
21
+__intel_scu_ipc_register(struct device *parent,
22
+ const struct intel_scu_ipc_data *scu_data,
23
+ struct module *owner);
1624
17
-#define IPCMSG_VRTC 0xFA /* Set vRTC device */
18
- /* Command id associated with message IPCMSG_VRTC */
19
- #define IPC_CMD_VRTC_SETTIME 1 /* Set time */
20
- #define IPC_CMD_VRTC_SETALARM 2 /* Set alarm */
25
+#define intel_scu_ipc_register(parent, scu_data) \
26
+ __intel_scu_ipc_register(parent, scu_data, THIS_MODULE)
2127
22
-/* Read single register */
23
-int intel_scu_ipc_ioread8(u16 addr, u8 *data);
28
+void intel_scu_ipc_unregister(struct intel_scu_ipc_dev *scu);
2429
25
-/* Read two sequential registers */
26
-int intel_scu_ipc_ioread16(u16 addr, u16 *data);
30
+struct intel_scu_ipc_dev *
31
+__devm_intel_scu_ipc_register(struct device *parent,
32
+ const struct intel_scu_ipc_data *scu_data,
33
+ struct module *owner);
2734
28
-/* Read four sequential registers */
29
-int intel_scu_ipc_ioread32(u16 addr, u32 *data);
35
+#define devm_intel_scu_ipc_register(parent, scu_data) \
36
+ __devm_intel_scu_ipc_register(parent, scu_data, THIS_MODULE)
3037
31
-/* Read a vector */
32
-int intel_scu_ipc_readv(u16 *addr, u8 *data, int len);
38
+struct intel_scu_ipc_dev *intel_scu_ipc_dev_get(void);
39
+void intel_scu_ipc_dev_put(struct intel_scu_ipc_dev *scu);
40
+struct intel_scu_ipc_dev *devm_intel_scu_ipc_dev_get(struct device *dev);
3341
34
-/* Write single register */
35
-int intel_scu_ipc_iowrite8(u16 addr, u8 data);
42
+int intel_scu_ipc_dev_ioread8(struct intel_scu_ipc_dev *scu, u16 addr,
43
+ u8 *data);
44
+int intel_scu_ipc_dev_iowrite8(struct intel_scu_ipc_dev *scu, u16 addr,
45
+ u8 data);
46
+int intel_scu_ipc_dev_readv(struct intel_scu_ipc_dev *scu, u16 *addr,
47
+ u8 *data, size_t len);
48
+int intel_scu_ipc_dev_writev(struct intel_scu_ipc_dev *scu, u16 *addr,
49
+ u8 *data, size_t len);
3650
37
-/* Write two sequential registers */
38
-int intel_scu_ipc_iowrite16(u16 addr, u16 data);
51
+int intel_scu_ipc_dev_update(struct intel_scu_ipc_dev *scu, u16 addr,
52
+ u8 data, u8 mask);
3953
40
-/* Write four sequential registers */
41
-int intel_scu_ipc_iowrite32(u16 addr, u32 data);
54
+int intel_scu_ipc_dev_simple_command(struct intel_scu_ipc_dev *scu, int cmd,
55
+ int sub);
56
+int intel_scu_ipc_dev_command_with_size(struct intel_scu_ipc_dev *scu, int cmd,
57
+ int sub, const void *in, size_t inlen,
58
+ size_t size, void *out, size_t outlen);
4259
43
-/* Write a vector */
44
-int intel_scu_ipc_writev(u16 *addr, u8 *data, int len);
45
-
46
-/* Update single register based on the mask */
47
-int intel_scu_ipc_update_register(u16 addr, u8 data, u8 mask);
48
-
49
-/* Issue commands to the SCU with or without data */
50
-int intel_scu_ipc_simple_command(int cmd, int sub);
51
-int intel_scu_ipc_command(int cmd, int sub, u32 *in, int inlen,
52
- u32 *out, int outlen);
53
-int intel_scu_ipc_raw_command(int cmd, int sub, u8 *in, int inlen,
54
- u32 *out, int outlen, u32 dptr, u32 sptr);
55
-
56
-/* I2C control api */
57
-int intel_scu_ipc_i2c_cntrl(u32 addr, u32 *data);
58
-
59
-/* Update FW version */
60
-int intel_scu_ipc_fw_update(u8 *buffer, u32 length);
61
-
62
-extern struct blocking_notifier_head intel_scu_notifier;
63
-
64
-static inline void intel_scu_notifier_add(struct notifier_block *nb)
60
+static inline int intel_scu_ipc_dev_command(struct intel_scu_ipc_dev *scu, int cmd,
61
+ int sub, const void *in, size_t inlen,
62
+ void *out, size_t outlen)
6563 {
66
- blocking_notifier_chain_register(&intel_scu_notifier, nb);
64
+ return intel_scu_ipc_dev_command_with_size(scu, cmd, sub, in, inlen,
65
+ inlen, out, outlen);
6766 }
6867
69
-static inline void intel_scu_notifier_remove(struct notifier_block *nb)
70
-{
71
- blocking_notifier_chain_unregister(&intel_scu_notifier, nb);
72
-}
73
-
74
-static inline int intel_scu_notifier_post(unsigned long v, void *p)
75
-{
76
- return blocking_notifier_call_chain(&intel_scu_notifier, v, p);
77
-}
78
-
79
-#define SCU_AVAILABLE 1
80
-#define SCU_DOWN 2
68
+#include <asm/intel_scu_ipc_legacy.h>
8169
8270 #endif