]>
git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blob - include/linux/intel-ish-client-if.h
1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Intel ISH client Interface definitions
5 * Copyright (c) 2019, Intel Corporation.
8 #ifndef _INTEL_ISH_CLIENT_IF_H_
9 #define _INTEL_ISH_CLIENT_IF_H_
11 struct ishtp_cl_device
;
14 struct ishtp_fw_client
;
18 ISHTP_CL_INITIALIZING
= 0,
21 ISHTP_CL_DISCONNECTING
,
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
32 * Client drivers defines to get probed/removed for ISHTP client device.
34 struct ishtp_cl_driver
{
35 struct device_driver driver
;
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
;
45 * struct ishtp_msg_data - ISHTP message data struct
46 * @size: Size of data in the *data
47 * @data: Pointer to data
49 struct ishtp_msg_data
{
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
63 struct list_head list
;
65 struct ishtp_msg_data buffer
;
66 unsigned long buf_idx
;
67 unsigned long read_time
;
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
*));
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
);
80 /* Get device pointer of PCI device for DMA acces */
81 struct device
*ishtp_get_pci_device(struct ishtp_cl_device
*cl_device
);
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
);
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
);
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 struct ishtp_cl_device
*ishtp_dev_to_cl_device(struct device
*dev
);
107 int ishtp_register_event_cb(struct ishtp_cl_device
*device
,
108 void (*read_cb
)(struct ishtp_cl_device
*));
109 struct ishtp_fw_client
*ishtp_fw_cl_get_client(struct ishtp_device
*dev
,
111 int ishtp_get_fw_client_id(struct ishtp_fw_client
*fw_client
);
112 int ish_hw_reset(struct ishtp_device
*dev
);
113 #endif /* _INTEL_ISH_CLIENT_IF_H_ */