Commit | Line | Data |
---|---|---|
7ab21842 SP |
1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* | |
3 | * Intel ISH client Interface definitions | |
4 | * | |
5 | * Copyright (c) 2019, Intel Corporation. | |
6 | */ | |
7 | ||
8 | #ifndef _INTEL_ISH_CLIENT_IF_H_ | |
9 | #define _INTEL_ISH_CLIENT_IF_H_ | |
10 | ||
11 | struct ishtp_cl_device; | |
5f7224cf | 12 | struct ishtp_device; |
8991eb30 | 13 | struct ishtp_cl; |
5f7224cf | 14 | struct ishtp_fw_client; |
8991eb30 SP |
15 | |
16 | /* Client state */ | |
17 | enum cl_state { | |
18 | ISHTP_CL_INITIALIZING = 0, | |
19 | ISHTP_CL_CONNECTING, | |
20 | ISHTP_CL_CONNECTED, | |
21 | ISHTP_CL_DISCONNECTING, | |
22 | ISHTP_CL_DISCONNECTED | |
23 | }; | |
7ab21842 | 24 | |
e00a864f SP |
25 | /** |
26 | * struct ishtp_cl_device - ISHTP device handle | |
27 | * @driver: driver instance on a bus | |
28 | * @name: Name of the device for probe | |
29 | * @probe: driver callback for device probe | |
30 | * @remove: driver callback on device removal | |
31 | * | |
32 | * Client drivers defines to get probed/removed for ISHTP client device. | |
33 | */ | |
34 | struct ishtp_cl_driver { | |
35 | struct device_driver driver; | |
36 | const char *name; | |
37 | const guid_t *guid; | |
38 | int (*probe)(struct ishtp_cl_device *dev); | |
39 | int (*remove)(struct ishtp_cl_device *dev); | |
40 | int (*reset)(struct ishtp_cl_device *dev); | |
41 | const struct dev_pm_ops *pm; | |
42 | }; | |
43 | ||
8991eb30 SP |
44 | /** |
45 | * struct ishtp_msg_data - ISHTP message data struct | |
46 | * @size: Size of data in the *data | |
47 | * @data: Pointer to data | |
48 | */ | |
49 | struct ishtp_msg_data { | |
50 | uint32_t size; | |
51 | unsigned char *data; | |
52 | }; | |
53 | ||
54 | /* | |
55 | * struct ishtp_cl_rb - request block structure | |
56 | * @list: Link to list members | |
57 | * @cl: ISHTP client instance | |
58 | * @buffer: message header | |
59 | * @buf_idx: Index into buffer | |
60 | * @read_time: unused at this time | |
61 | */ | |
62 | struct ishtp_cl_rb { | |
63 | struct list_head list; | |
64 | struct ishtp_cl *cl; | |
65 | struct ishtp_msg_data buffer; | |
66 | unsigned long buf_idx; | |
67 | unsigned long read_time; | |
68 | }; | |
69 | ||
e00a864f SP |
70 | int ishtp_cl_driver_register(struct ishtp_cl_driver *driver, |
71 | struct module *owner); | |
72 | void ishtp_cl_driver_unregister(struct ishtp_cl_driver *driver); | |
73 | int ishtp_register_event_cb(struct ishtp_cl_device *device, | |
74 | void (*read_cb)(struct ishtp_cl_device *)); | |
75 | ||
7ab21842 SP |
76 | /* Get the device * from ishtp device instance */ |
77 | struct device *ishtp_device(struct ishtp_cl_device *cl_device); | |
78 | /* Trace interface for clients */ | |
79 | void *ishtp_trace_callback(struct ishtp_cl_device *cl_device); | |
0e568a16 SP |
80 | /* Get device pointer of PCI device for DMA acces */ |
81 | struct device *ishtp_get_pci_device(struct ishtp_cl_device *cl_device); | |
7ab21842 | 82 | |
8991eb30 SP |
83 | struct ishtp_cl *ishtp_cl_allocate(struct ishtp_cl_device *cl_device); |
84 | void ishtp_cl_free(struct ishtp_cl *cl); | |
85 | int ishtp_cl_link(struct ishtp_cl *cl); | |
86 | void ishtp_cl_unlink(struct ishtp_cl *cl); | |
87 | int ishtp_cl_disconnect(struct ishtp_cl *cl); | |
88 | int ishtp_cl_connect(struct ishtp_cl *cl); | |
89 | int ishtp_cl_send(struct ishtp_cl *cl, uint8_t *buf, size_t length); | |
90 | int ishtp_cl_flush_queues(struct ishtp_cl *cl); | |
91 | int ishtp_cl_io_rb_recycle(struct ishtp_cl_rb *rb); | |
92 | bool ishtp_cl_tx_empty(struct ishtp_cl *cl); | |
93 | struct ishtp_cl_rb *ishtp_cl_rx_get_rb(struct ishtp_cl *cl); | |
51cbc707 SP |
94 | void *ishtp_get_client_data(struct ishtp_cl *cl); |
95 | void ishtp_set_client_data(struct ishtp_cl *cl, void *data); | |
96 | struct ishtp_device *ishtp_get_ishtp_device(struct ishtp_cl *cl); | |
97 | void ishtp_set_tx_ring_size(struct ishtp_cl *cl, int size); | |
98 | void ishtp_set_rx_ring_size(struct ishtp_cl *cl, int size); | |
99 | void ishtp_set_connection_state(struct ishtp_cl *cl, int state); | |
100 | void ishtp_cl_set_fw_client_id(struct ishtp_cl *cl, int fw_client_id); | |
8991eb30 | 101 | |
5f7224cf SP |
102 | void ishtp_put_device(struct ishtp_cl_device *cl_dev); |
103 | void ishtp_get_device(struct ishtp_cl_device *cl_dev); | |
104 | void ishtp_set_drvdata(struct ishtp_cl_device *cl_device, void *data); | |
105 | void *ishtp_get_drvdata(struct ishtp_cl_device *cl_device); | |
106 | int ishtp_register_event_cb(struct ishtp_cl_device *device, | |
107 | void (*read_cb)(struct ishtp_cl_device *)); | |
108 | struct ishtp_fw_client *ishtp_fw_cl_get_client(struct ishtp_device *dev, | |
109 | const guid_t *uuid); | |
110 | int ishtp_get_fw_client_id(struct ishtp_fw_client *fw_client); | |
111 | int ish_hw_reset(struct ishtp_device *dev); | |
7ab21842 | 112 | #endif /* _INTEL_ISH_CLIENT_IF_H_ */ |