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; 125f7224cfSSrinivas Pandruvada struct ishtp_device; 138991eb30SSrinivas Pandruvada struct ishtp_cl; 145f7224cfSSrinivas Pandruvada struct ishtp_fw_client; 158991eb30SSrinivas Pandruvada 168991eb30SSrinivas Pandruvada /* Client state */ 178991eb30SSrinivas Pandruvada enum cl_state { 188991eb30SSrinivas Pandruvada ISHTP_CL_INITIALIZING = 0, 198991eb30SSrinivas Pandruvada ISHTP_CL_CONNECTING, 208991eb30SSrinivas Pandruvada ISHTP_CL_CONNECTED, 218991eb30SSrinivas Pandruvada ISHTP_CL_DISCONNECTING, 228991eb30SSrinivas Pandruvada ISHTP_CL_DISCONNECTED 238991eb30SSrinivas Pandruvada }; 247ab21842SSrinivas Pandruvada 25e00a864fSSrinivas Pandruvada /** 26e00a864fSSrinivas Pandruvada * struct ishtp_cl_device - ISHTP device handle 27e00a864fSSrinivas Pandruvada * @driver: driver instance on a bus 28e00a864fSSrinivas Pandruvada * @name: Name of the device for probe 29e00a864fSSrinivas Pandruvada * @probe: driver callback for device probe 30e00a864fSSrinivas Pandruvada * @remove: driver callback on device removal 31e00a864fSSrinivas Pandruvada * 32e00a864fSSrinivas Pandruvada * Client drivers defines to get probed/removed for ISHTP client device. 33e00a864fSSrinivas Pandruvada */ 34e00a864fSSrinivas Pandruvada struct ishtp_cl_driver { 35e00a864fSSrinivas Pandruvada struct device_driver driver; 36e00a864fSSrinivas Pandruvada const char *name; 37e00a864fSSrinivas Pandruvada const guid_t *guid; 38e00a864fSSrinivas Pandruvada int (*probe)(struct ishtp_cl_device *dev); 39e00a864fSSrinivas Pandruvada int (*remove)(struct ishtp_cl_device *dev); 40e00a864fSSrinivas Pandruvada int (*reset)(struct ishtp_cl_device *dev); 41e00a864fSSrinivas Pandruvada const struct dev_pm_ops *pm; 42e00a864fSSrinivas Pandruvada }; 43e00a864fSSrinivas Pandruvada 448991eb30SSrinivas Pandruvada /** 458991eb30SSrinivas Pandruvada * struct ishtp_msg_data - ISHTP message data struct 468991eb30SSrinivas Pandruvada * @size: Size of data in the *data 478991eb30SSrinivas Pandruvada * @data: Pointer to data 488991eb30SSrinivas Pandruvada */ 498991eb30SSrinivas Pandruvada struct ishtp_msg_data { 508991eb30SSrinivas Pandruvada uint32_t size; 518991eb30SSrinivas Pandruvada unsigned char *data; 528991eb30SSrinivas Pandruvada }; 538991eb30SSrinivas Pandruvada 548991eb30SSrinivas Pandruvada /* 558991eb30SSrinivas Pandruvada * struct ishtp_cl_rb - request block structure 568991eb30SSrinivas Pandruvada * @list: Link to list members 578991eb30SSrinivas Pandruvada * @cl: ISHTP client instance 588991eb30SSrinivas Pandruvada * @buffer: message header 598991eb30SSrinivas Pandruvada * @buf_idx: Index into buffer 608991eb30SSrinivas Pandruvada * @read_time: unused at this time 618991eb30SSrinivas Pandruvada */ 628991eb30SSrinivas Pandruvada struct ishtp_cl_rb { 638991eb30SSrinivas Pandruvada struct list_head list; 648991eb30SSrinivas Pandruvada struct ishtp_cl *cl; 658991eb30SSrinivas Pandruvada struct ishtp_msg_data buffer; 668991eb30SSrinivas Pandruvada unsigned long buf_idx; 678991eb30SSrinivas Pandruvada unsigned long read_time; 688991eb30SSrinivas Pandruvada }; 698991eb30SSrinivas Pandruvada 70e00a864fSSrinivas Pandruvada int ishtp_cl_driver_register(struct ishtp_cl_driver *driver, 71e00a864fSSrinivas Pandruvada struct module *owner); 72e00a864fSSrinivas Pandruvada void ishtp_cl_driver_unregister(struct ishtp_cl_driver *driver); 73e00a864fSSrinivas Pandruvada int ishtp_register_event_cb(struct ishtp_cl_device *device, 74e00a864fSSrinivas Pandruvada void (*read_cb)(struct ishtp_cl_device *)); 75e00a864fSSrinivas Pandruvada 767ab21842SSrinivas Pandruvada /* Get the device * from ishtp device instance */ 777ab21842SSrinivas Pandruvada struct device *ishtp_device(struct ishtp_cl_device *cl_device); 787ab21842SSrinivas Pandruvada /* Trace interface for clients */ 797ab21842SSrinivas Pandruvada void *ishtp_trace_callback(struct ishtp_cl_device *cl_device); 80*0e568a16SSrinivas Pandruvada /* Get device pointer of PCI device for DMA acces */ 81*0e568a16SSrinivas Pandruvada struct device *ishtp_get_pci_device(struct ishtp_cl_device *cl_device); 827ab21842SSrinivas Pandruvada 838991eb30SSrinivas Pandruvada struct ishtp_cl *ishtp_cl_allocate(struct ishtp_cl_device *cl_device); 848991eb30SSrinivas Pandruvada void ishtp_cl_free(struct ishtp_cl *cl); 858991eb30SSrinivas Pandruvada int ishtp_cl_link(struct ishtp_cl *cl); 868991eb30SSrinivas Pandruvada void ishtp_cl_unlink(struct ishtp_cl *cl); 878991eb30SSrinivas Pandruvada int ishtp_cl_disconnect(struct ishtp_cl *cl); 888991eb30SSrinivas Pandruvada int ishtp_cl_connect(struct ishtp_cl *cl); 898991eb30SSrinivas Pandruvada int ishtp_cl_send(struct ishtp_cl *cl, uint8_t *buf, size_t length); 908991eb30SSrinivas Pandruvada int ishtp_cl_flush_queues(struct ishtp_cl *cl); 918991eb30SSrinivas Pandruvada int ishtp_cl_io_rb_recycle(struct ishtp_cl_rb *rb); 928991eb30SSrinivas Pandruvada bool ishtp_cl_tx_empty(struct ishtp_cl *cl); 938991eb30SSrinivas Pandruvada struct ishtp_cl_rb *ishtp_cl_rx_get_rb(struct ishtp_cl *cl); 9451cbc707SSrinivas Pandruvada void *ishtp_get_client_data(struct ishtp_cl *cl); 9551cbc707SSrinivas Pandruvada void ishtp_set_client_data(struct ishtp_cl *cl, void *data); 9651cbc707SSrinivas Pandruvada struct ishtp_device *ishtp_get_ishtp_device(struct ishtp_cl *cl); 9751cbc707SSrinivas Pandruvada void ishtp_set_tx_ring_size(struct ishtp_cl *cl, int size); 9851cbc707SSrinivas Pandruvada void ishtp_set_rx_ring_size(struct ishtp_cl *cl, int size); 9951cbc707SSrinivas Pandruvada void ishtp_set_connection_state(struct ishtp_cl *cl, int state); 10051cbc707SSrinivas Pandruvada void ishtp_cl_set_fw_client_id(struct ishtp_cl *cl, int fw_client_id); 1018991eb30SSrinivas Pandruvada 1025f7224cfSSrinivas Pandruvada void ishtp_put_device(struct ishtp_cl_device *cl_dev); 1035f7224cfSSrinivas Pandruvada void ishtp_get_device(struct ishtp_cl_device *cl_dev); 1045f7224cfSSrinivas Pandruvada void ishtp_set_drvdata(struct ishtp_cl_device *cl_device, void *data); 1055f7224cfSSrinivas Pandruvada void *ishtp_get_drvdata(struct ishtp_cl_device *cl_device); 1065f7224cfSSrinivas Pandruvada int ishtp_register_event_cb(struct ishtp_cl_device *device, 1075f7224cfSSrinivas Pandruvada void (*read_cb)(struct ishtp_cl_device *)); 1085f7224cfSSrinivas Pandruvada struct ishtp_fw_client *ishtp_fw_cl_get_client(struct ishtp_device *dev, 1095f7224cfSSrinivas Pandruvada const guid_t *uuid); 1105f7224cfSSrinivas Pandruvada int ishtp_get_fw_client_id(struct ishtp_fw_client *fw_client); 1115f7224cfSSrinivas Pandruvada int ish_hw_reset(struct ishtp_device *dev); 1127ab21842SSrinivas Pandruvada #endif /* _INTEL_ISH_CLIENT_IF_H_ */ 113