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 117ab21842SSrinivas Pandruvada struct ishtp_cl_device; 128991eb30SSrinivas Pandruvada struct ishtp_cl; 138991eb30SSrinivas Pandruvada 148991eb30SSrinivas Pandruvada /* Client state */ 158991eb30SSrinivas Pandruvada enum cl_state { 168991eb30SSrinivas Pandruvada ISHTP_CL_INITIALIZING = 0, 178991eb30SSrinivas Pandruvada ISHTP_CL_CONNECTING, 188991eb30SSrinivas Pandruvada ISHTP_CL_CONNECTED, 198991eb30SSrinivas Pandruvada ISHTP_CL_DISCONNECTING, 208991eb30SSrinivas Pandruvada ISHTP_CL_DISCONNECTED 218991eb30SSrinivas Pandruvada }; 227ab21842SSrinivas Pandruvada 23e00a864fSSrinivas Pandruvada /** 24e00a864fSSrinivas Pandruvada * struct ishtp_cl_device - ISHTP device handle 25e00a864fSSrinivas Pandruvada * @driver: driver instance on a bus 26e00a864fSSrinivas Pandruvada * @name: Name of the device for probe 27e00a864fSSrinivas Pandruvada * @probe: driver callback for device probe 28e00a864fSSrinivas Pandruvada * @remove: driver callback on device removal 29e00a864fSSrinivas Pandruvada * 30e00a864fSSrinivas Pandruvada * Client drivers defines to get probed/removed for ISHTP client device. 31e00a864fSSrinivas Pandruvada */ 32e00a864fSSrinivas Pandruvada struct ishtp_cl_driver { 33e00a864fSSrinivas Pandruvada struct device_driver driver; 34e00a864fSSrinivas Pandruvada const char *name; 35e00a864fSSrinivas Pandruvada const guid_t *guid; 36e00a864fSSrinivas Pandruvada int (*probe)(struct ishtp_cl_device *dev); 37e00a864fSSrinivas Pandruvada int (*remove)(struct ishtp_cl_device *dev); 38e00a864fSSrinivas Pandruvada int (*reset)(struct ishtp_cl_device *dev); 39e00a864fSSrinivas Pandruvada const struct dev_pm_ops *pm; 40e00a864fSSrinivas Pandruvada }; 41e00a864fSSrinivas Pandruvada 428991eb30SSrinivas Pandruvada /** 438991eb30SSrinivas Pandruvada * struct ishtp_msg_data - ISHTP message data struct 448991eb30SSrinivas Pandruvada * @size: Size of data in the *data 458991eb30SSrinivas Pandruvada * @data: Pointer to data 468991eb30SSrinivas Pandruvada */ 478991eb30SSrinivas Pandruvada struct ishtp_msg_data { 488991eb30SSrinivas Pandruvada uint32_t size; 498991eb30SSrinivas Pandruvada unsigned char *data; 508991eb30SSrinivas Pandruvada }; 518991eb30SSrinivas Pandruvada 528991eb30SSrinivas Pandruvada /* 538991eb30SSrinivas Pandruvada * struct ishtp_cl_rb - request block structure 548991eb30SSrinivas Pandruvada * @list: Link to list members 558991eb30SSrinivas Pandruvada * @cl: ISHTP client instance 568991eb30SSrinivas Pandruvada * @buffer: message header 578991eb30SSrinivas Pandruvada * @buf_idx: Index into buffer 588991eb30SSrinivas Pandruvada * @read_time: unused at this time 598991eb30SSrinivas Pandruvada */ 608991eb30SSrinivas Pandruvada struct ishtp_cl_rb { 618991eb30SSrinivas Pandruvada struct list_head list; 628991eb30SSrinivas Pandruvada struct ishtp_cl *cl; 638991eb30SSrinivas Pandruvada struct ishtp_msg_data buffer; 648991eb30SSrinivas Pandruvada unsigned long buf_idx; 658991eb30SSrinivas Pandruvada unsigned long read_time; 668991eb30SSrinivas Pandruvada }; 678991eb30SSrinivas Pandruvada 68e00a864fSSrinivas Pandruvada int ishtp_cl_driver_register(struct ishtp_cl_driver *driver, 69e00a864fSSrinivas Pandruvada struct module *owner); 70e00a864fSSrinivas Pandruvada void ishtp_cl_driver_unregister(struct ishtp_cl_driver *driver); 71e00a864fSSrinivas Pandruvada int ishtp_register_event_cb(struct ishtp_cl_device *device, 72e00a864fSSrinivas Pandruvada void (*read_cb)(struct ishtp_cl_device *)); 73e00a864fSSrinivas Pandruvada 747ab21842SSrinivas Pandruvada /* Get the device * from ishtp device instance */ 757ab21842SSrinivas Pandruvada struct device *ishtp_device(struct ishtp_cl_device *cl_device); 767ab21842SSrinivas Pandruvada /* Trace interface for clients */ 777ab21842SSrinivas Pandruvada void *ishtp_trace_callback(struct ishtp_cl_device *cl_device); 787ab21842SSrinivas Pandruvada 798991eb30SSrinivas Pandruvada struct ishtp_cl *ishtp_cl_allocate(struct ishtp_cl_device *cl_device); 808991eb30SSrinivas Pandruvada void ishtp_cl_free(struct ishtp_cl *cl); 818991eb30SSrinivas Pandruvada int ishtp_cl_link(struct ishtp_cl *cl); 828991eb30SSrinivas Pandruvada void ishtp_cl_unlink(struct ishtp_cl *cl); 838991eb30SSrinivas Pandruvada int ishtp_cl_disconnect(struct ishtp_cl *cl); 848991eb30SSrinivas Pandruvada int ishtp_cl_connect(struct ishtp_cl *cl); 858991eb30SSrinivas Pandruvada int ishtp_cl_send(struct ishtp_cl *cl, uint8_t *buf, size_t length); 868991eb30SSrinivas Pandruvada int ishtp_cl_flush_queues(struct ishtp_cl *cl); 878991eb30SSrinivas Pandruvada int ishtp_cl_io_rb_recycle(struct ishtp_cl_rb *rb); 888991eb30SSrinivas Pandruvada bool ishtp_cl_tx_empty(struct ishtp_cl *cl); 898991eb30SSrinivas Pandruvada struct ishtp_cl_rb *ishtp_cl_rx_get_rb(struct ishtp_cl *cl); 90*51cbc707SSrinivas Pandruvada void *ishtp_get_client_data(struct ishtp_cl *cl); 91*51cbc707SSrinivas Pandruvada void ishtp_set_client_data(struct ishtp_cl *cl, void *data); 92*51cbc707SSrinivas Pandruvada struct ishtp_device *ishtp_get_ishtp_device(struct ishtp_cl *cl); 93*51cbc707SSrinivas Pandruvada void ishtp_set_tx_ring_size(struct ishtp_cl *cl, int size); 94*51cbc707SSrinivas Pandruvada void ishtp_set_rx_ring_size(struct ishtp_cl *cl, int size); 95*51cbc707SSrinivas Pandruvada void ishtp_set_connection_state(struct ishtp_cl *cl, int state); 96*51cbc707SSrinivas Pandruvada void ishtp_cl_set_fw_client_id(struct ishtp_cl *cl, int fw_client_id); 978991eb30SSrinivas Pandruvada 987ab21842SSrinivas Pandruvada #endif /* _INTEL_ISH_CLIENT_IF_H_ */ 99