at v5.13 3.8 kB view raw
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 11struct ishtp_cl_device; 12struct ishtp_device; 13struct ishtp_cl; 14struct ishtp_fw_client; 15 16/* Client state */ 17enum 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 */ 34struct 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 */ 49struct 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 */ 62struct 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 70int ishtp_cl_driver_register(struct ishtp_cl_driver *driver, 71 struct module *owner); 72void ishtp_cl_driver_unregister(struct ishtp_cl_driver *driver); 73int 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 */ 77struct device *ishtp_device(struct ishtp_cl_device *cl_device); 78/* Trace interface for clients */ 79void *ishtp_trace_callback(struct ishtp_cl_device *cl_device); 80/* Get device pointer of PCI device for DMA acces */ 81struct device *ishtp_get_pci_device(struct ishtp_cl_device *cl_device); 82 83struct ishtp_cl *ishtp_cl_allocate(struct ishtp_cl_device *cl_device); 84void ishtp_cl_free(struct ishtp_cl *cl); 85int ishtp_cl_link(struct ishtp_cl *cl); 86void ishtp_cl_unlink(struct ishtp_cl *cl); 87int ishtp_cl_disconnect(struct ishtp_cl *cl); 88int ishtp_cl_connect(struct ishtp_cl *cl); 89int ishtp_cl_send(struct ishtp_cl *cl, uint8_t *buf, size_t length); 90int ishtp_cl_flush_queues(struct ishtp_cl *cl); 91int ishtp_cl_io_rb_recycle(struct ishtp_cl_rb *rb); 92bool ishtp_cl_tx_empty(struct ishtp_cl *cl); 93struct ishtp_cl_rb *ishtp_cl_rx_get_rb(struct ishtp_cl *cl); 94void *ishtp_get_client_data(struct ishtp_cl *cl); 95void ishtp_set_client_data(struct ishtp_cl *cl, void *data); 96struct ishtp_device *ishtp_get_ishtp_device(struct ishtp_cl *cl); 97void ishtp_set_tx_ring_size(struct ishtp_cl *cl, int size); 98void ishtp_set_rx_ring_size(struct ishtp_cl *cl, int size); 99void ishtp_set_connection_state(struct ishtp_cl *cl, int state); 100void ishtp_cl_set_fw_client_id(struct ishtp_cl *cl, int fw_client_id); 101 102void ishtp_put_device(struct ishtp_cl_device *cl_dev); 103void ishtp_get_device(struct ishtp_cl_device *cl_dev); 104void ishtp_set_drvdata(struct ishtp_cl_device *cl_device, void *data); 105void *ishtp_get_drvdata(struct ishtp_cl_device *cl_device); 106struct ishtp_cl_device *ishtp_dev_to_cl_device(struct device *dev); 107int ishtp_register_event_cb(struct ishtp_cl_device *device, 108 void (*read_cb)(struct ishtp_cl_device *)); 109struct ishtp_fw_client *ishtp_fw_cl_get_client(struct ishtp_device *dev, 110 const guid_t *uuid); 111int ishtp_get_fw_client_id(struct ishtp_fw_client *fw_client); 112int ish_hw_reset(struct ishtp_device *dev); 113#endif /* _INTEL_ISH_CLIENT_IF_H_ */