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; 12 struct ishtp_device; 13 struct ishtp_cl; 14 struct ishtp_fw_client; 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 }; 24 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 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 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 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); 82 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); 101 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, 110 const guid_t *uuid); 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_ */ 114