17ab21842SSrinivas Pandruvada /* SPDX-License-Identifier: GPL-2.0 */ 27ab21842SSrinivas Pandruvada /* 37ab21842SSrinivas Pandruvada * Intel ISH client Interface definitions 47ab21842SSrinivas Pandruvada * 57ab21842SSrinivas Pandruvada * Copyright (c) 2019, Intel Corporation. 67ab21842SSrinivas Pandruvada */ 77ab21842SSrinivas Pandruvada 87ab21842SSrinivas Pandruvada #ifndef _INTEL_ISH_CLIENT_IF_H_ 97ab21842SSrinivas Pandruvada #define _INTEL_ISH_CLIENT_IF_H_ 107ab21842SSrinivas Pandruvada 11c57179c7SLee Jones #include <linux/device.h> 12*bf9167a8SArnd Bergmann #include <linux/mod_devicetable.h> 13c57179c7SLee Jones 147ab21842SSrinivas Pandruvada struct ishtp_cl_device; 155f7224cfSSrinivas Pandruvada struct ishtp_device; 168991eb30SSrinivas Pandruvada struct ishtp_cl; 175f7224cfSSrinivas Pandruvada struct ishtp_fw_client; 188991eb30SSrinivas Pandruvada 19c57179c7SLee Jones typedef __printf(2, 3) void (*ishtp_print_log)(struct ishtp_device *dev, 20c57179c7SLee Jones const char *format, ...); 21c57179c7SLee Jones 228991eb30SSrinivas Pandruvada /* Client state */ 238991eb30SSrinivas Pandruvada enum cl_state { 248991eb30SSrinivas Pandruvada ISHTP_CL_INITIALIZING = 0, 258991eb30SSrinivas Pandruvada ISHTP_CL_CONNECTING, 268991eb30SSrinivas Pandruvada ISHTP_CL_CONNECTED, 278991eb30SSrinivas Pandruvada ISHTP_CL_DISCONNECTING, 288991eb30SSrinivas Pandruvada ISHTP_CL_DISCONNECTED 298991eb30SSrinivas Pandruvada }; 307ab21842SSrinivas Pandruvada 31e00a864fSSrinivas Pandruvada /** 32e00a864fSSrinivas Pandruvada * struct ishtp_cl_device - ISHTP device handle 33e00a864fSSrinivas Pandruvada * @driver: driver instance on a bus 34e00a864fSSrinivas Pandruvada * @name: Name of the device for probe 35e00a864fSSrinivas Pandruvada * @probe: driver callback for device probe 36e00a864fSSrinivas Pandruvada * @remove: driver callback on device removal 37e00a864fSSrinivas Pandruvada * 38e00a864fSSrinivas Pandruvada * Client drivers defines to get probed/removed for ISHTP client device. 39e00a864fSSrinivas Pandruvada */ 40e00a864fSSrinivas Pandruvada struct ishtp_cl_driver { 41e00a864fSSrinivas Pandruvada struct device_driver driver; 42e00a864fSSrinivas Pandruvada const char *name; 43*bf9167a8SArnd Bergmann const struct ishtp_device_id *id; 44e00a864fSSrinivas Pandruvada int (*probe)(struct ishtp_cl_device *dev); 45e71da1fdSUwe Kleine-König void (*remove)(struct ishtp_cl_device *dev); 46e00a864fSSrinivas Pandruvada int (*reset)(struct ishtp_cl_device *dev); 47e00a864fSSrinivas Pandruvada const struct dev_pm_ops *pm; 48e00a864fSSrinivas Pandruvada }; 49e00a864fSSrinivas Pandruvada 508991eb30SSrinivas Pandruvada /** 518991eb30SSrinivas Pandruvada * struct ishtp_msg_data - ISHTP message data struct 528991eb30SSrinivas Pandruvada * @size: Size of data in the *data 538991eb30SSrinivas Pandruvada * @data: Pointer to data 548991eb30SSrinivas Pandruvada */ 558991eb30SSrinivas Pandruvada struct ishtp_msg_data { 568991eb30SSrinivas Pandruvada uint32_t size; 578991eb30SSrinivas Pandruvada unsigned char *data; 588991eb30SSrinivas Pandruvada }; 598991eb30SSrinivas Pandruvada 608991eb30SSrinivas Pandruvada /* 618991eb30SSrinivas Pandruvada * struct ishtp_cl_rb - request block structure 628991eb30SSrinivas Pandruvada * @list: Link to list members 638991eb30SSrinivas Pandruvada * @cl: ISHTP client instance 648991eb30SSrinivas Pandruvada * @buffer: message header 658991eb30SSrinivas Pandruvada * @buf_idx: Index into buffer 668991eb30SSrinivas Pandruvada * @read_time: unused at this time 678991eb30SSrinivas Pandruvada */ 688991eb30SSrinivas Pandruvada struct ishtp_cl_rb { 698991eb30SSrinivas Pandruvada struct list_head list; 708991eb30SSrinivas Pandruvada struct ishtp_cl *cl; 718991eb30SSrinivas Pandruvada struct ishtp_msg_data buffer; 728991eb30SSrinivas Pandruvada unsigned long buf_idx; 738991eb30SSrinivas Pandruvada unsigned long read_time; 748991eb30SSrinivas Pandruvada }; 758991eb30SSrinivas Pandruvada 76e00a864fSSrinivas Pandruvada int ishtp_cl_driver_register(struct ishtp_cl_driver *driver, 77e00a864fSSrinivas Pandruvada struct module *owner); 78e00a864fSSrinivas Pandruvada void ishtp_cl_driver_unregister(struct ishtp_cl_driver *driver); 79e00a864fSSrinivas Pandruvada int ishtp_register_event_cb(struct ishtp_cl_device *device, 80e00a864fSSrinivas Pandruvada void (*read_cb)(struct ishtp_cl_device *)); 81e00a864fSSrinivas Pandruvada 827ab21842SSrinivas Pandruvada /* Get the device * from ishtp device instance */ 837ab21842SSrinivas Pandruvada struct device *ishtp_device(struct ishtp_cl_device *cl_device); 84e48bf29cSYe Xiang /* wait for IPC resume */ 85e48bf29cSYe Xiang bool ishtp_wait_resume(struct ishtp_device *dev); 867ab21842SSrinivas Pandruvada /* Trace interface for clients */ 87c57179c7SLee Jones ishtp_print_log ishtp_trace_callback(struct ishtp_cl_device *cl_device); 880e568a16SSrinivas Pandruvada /* Get device pointer of PCI device for DMA acces */ 890e568a16SSrinivas Pandruvada struct device *ishtp_get_pci_device(struct ishtp_cl_device *cl_device); 907ab21842SSrinivas Pandruvada 918991eb30SSrinivas Pandruvada struct ishtp_cl *ishtp_cl_allocate(struct ishtp_cl_device *cl_device); 928991eb30SSrinivas Pandruvada void ishtp_cl_free(struct ishtp_cl *cl); 938991eb30SSrinivas Pandruvada int ishtp_cl_link(struct ishtp_cl *cl); 948991eb30SSrinivas Pandruvada void ishtp_cl_unlink(struct ishtp_cl *cl); 958991eb30SSrinivas Pandruvada int ishtp_cl_disconnect(struct ishtp_cl *cl); 968991eb30SSrinivas Pandruvada int ishtp_cl_connect(struct ishtp_cl *cl); 978991eb30SSrinivas Pandruvada int ishtp_cl_send(struct ishtp_cl *cl, uint8_t *buf, size_t length); 988991eb30SSrinivas Pandruvada int ishtp_cl_flush_queues(struct ishtp_cl *cl); 998991eb30SSrinivas Pandruvada int ishtp_cl_io_rb_recycle(struct ishtp_cl_rb *rb); 1008991eb30SSrinivas Pandruvada bool ishtp_cl_tx_empty(struct ishtp_cl *cl); 1018991eb30SSrinivas Pandruvada struct ishtp_cl_rb *ishtp_cl_rx_get_rb(struct ishtp_cl *cl); 10251cbc707SSrinivas Pandruvada void *ishtp_get_client_data(struct ishtp_cl *cl); 10351cbc707SSrinivas Pandruvada void ishtp_set_client_data(struct ishtp_cl *cl, void *data); 10451cbc707SSrinivas Pandruvada struct ishtp_device *ishtp_get_ishtp_device(struct ishtp_cl *cl); 10551cbc707SSrinivas Pandruvada void ishtp_set_tx_ring_size(struct ishtp_cl *cl, int size); 10651cbc707SSrinivas Pandruvada void ishtp_set_rx_ring_size(struct ishtp_cl *cl, int size); 10751cbc707SSrinivas Pandruvada void ishtp_set_connection_state(struct ishtp_cl *cl, int state); 10851cbc707SSrinivas Pandruvada void ishtp_cl_set_fw_client_id(struct ishtp_cl *cl, int fw_client_id); 1098991eb30SSrinivas Pandruvada 1105f7224cfSSrinivas Pandruvada void ishtp_put_device(struct ishtp_cl_device *cl_dev); 1115f7224cfSSrinivas Pandruvada void ishtp_get_device(struct ishtp_cl_device *cl_dev); 1125f7224cfSSrinivas Pandruvada void ishtp_set_drvdata(struct ishtp_cl_device *cl_device, void *data); 1135f7224cfSSrinivas Pandruvada void *ishtp_get_drvdata(struct ishtp_cl_device *cl_device); 114b12bbdc5SHyungwoo Yang struct ishtp_cl_device *ishtp_dev_to_cl_device(struct device *dev); 1155f7224cfSSrinivas Pandruvada int ishtp_register_event_cb(struct ishtp_cl_device *device, 1165f7224cfSSrinivas Pandruvada void (*read_cb)(struct ishtp_cl_device *)); 1175f7224cfSSrinivas Pandruvada struct ishtp_fw_client *ishtp_fw_cl_get_client(struct ishtp_device *dev, 1185f7224cfSSrinivas Pandruvada const guid_t *uuid); 1195f7224cfSSrinivas Pandruvada int ishtp_get_fw_client_id(struct ishtp_fw_client *fw_client); 1205f7224cfSSrinivas Pandruvada int ish_hw_reset(struct ishtp_device *dev); 1217ab21842SSrinivas Pandruvada #endif /* _INTEL_ISH_CLIENT_IF_H_ */ 122