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; 12*8991eb30SSrinivas Pandruvada struct ishtp_cl; 13*8991eb30SSrinivas Pandruvada 14*8991eb30SSrinivas Pandruvada /* Client state */ 15*8991eb30SSrinivas Pandruvada enum cl_state { 16*8991eb30SSrinivas Pandruvada ISHTP_CL_INITIALIZING = 0, 17*8991eb30SSrinivas Pandruvada ISHTP_CL_CONNECTING, 18*8991eb30SSrinivas Pandruvada ISHTP_CL_CONNECTED, 19*8991eb30SSrinivas Pandruvada ISHTP_CL_DISCONNECTING, 20*8991eb30SSrinivas Pandruvada ISHTP_CL_DISCONNECTED 21*8991eb30SSrinivas 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 42*8991eb30SSrinivas Pandruvada /** 43*8991eb30SSrinivas Pandruvada * struct ishtp_msg_data - ISHTP message data struct 44*8991eb30SSrinivas Pandruvada * @size: Size of data in the *data 45*8991eb30SSrinivas Pandruvada * @data: Pointer to data 46*8991eb30SSrinivas Pandruvada */ 47*8991eb30SSrinivas Pandruvada struct ishtp_msg_data { 48*8991eb30SSrinivas Pandruvada uint32_t size; 49*8991eb30SSrinivas Pandruvada unsigned char *data; 50*8991eb30SSrinivas Pandruvada }; 51*8991eb30SSrinivas Pandruvada 52*8991eb30SSrinivas Pandruvada /* 53*8991eb30SSrinivas Pandruvada * struct ishtp_cl_rb - request block structure 54*8991eb30SSrinivas Pandruvada * @list: Link to list members 55*8991eb30SSrinivas Pandruvada * @cl: ISHTP client instance 56*8991eb30SSrinivas Pandruvada * @buffer: message header 57*8991eb30SSrinivas Pandruvada * @buf_idx: Index into buffer 58*8991eb30SSrinivas Pandruvada * @read_time: unused at this time 59*8991eb30SSrinivas Pandruvada */ 60*8991eb30SSrinivas Pandruvada struct ishtp_cl_rb { 61*8991eb30SSrinivas Pandruvada struct list_head list; 62*8991eb30SSrinivas Pandruvada struct ishtp_cl *cl; 63*8991eb30SSrinivas Pandruvada struct ishtp_msg_data buffer; 64*8991eb30SSrinivas Pandruvada unsigned long buf_idx; 65*8991eb30SSrinivas Pandruvada unsigned long read_time; 66*8991eb30SSrinivas Pandruvada }; 67*8991eb30SSrinivas 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 79*8991eb30SSrinivas Pandruvada struct ishtp_cl *ishtp_cl_allocate(struct ishtp_cl_device *cl_device); 80*8991eb30SSrinivas Pandruvada void ishtp_cl_free(struct ishtp_cl *cl); 81*8991eb30SSrinivas Pandruvada int ishtp_cl_link(struct ishtp_cl *cl); 82*8991eb30SSrinivas Pandruvada void ishtp_cl_unlink(struct ishtp_cl *cl); 83*8991eb30SSrinivas Pandruvada int ishtp_cl_disconnect(struct ishtp_cl *cl); 84*8991eb30SSrinivas Pandruvada int ishtp_cl_connect(struct ishtp_cl *cl); 85*8991eb30SSrinivas Pandruvada int ishtp_cl_send(struct ishtp_cl *cl, uint8_t *buf, size_t length); 86*8991eb30SSrinivas Pandruvada int ishtp_cl_flush_queues(struct ishtp_cl *cl); 87*8991eb30SSrinivas Pandruvada int ishtp_cl_io_rb_recycle(struct ishtp_cl_rb *rb); 88*8991eb30SSrinivas Pandruvada bool ishtp_cl_tx_empty(struct ishtp_cl *cl); 89*8991eb30SSrinivas Pandruvada struct ishtp_cl_rb *ishtp_cl_rx_get_rb(struct ishtp_cl *cl); 90*8991eb30SSrinivas Pandruvada 917ab21842SSrinivas Pandruvada #endif /* _INTEL_ISH_CLIENT_IF_H_ */ 92