linux/include/linux/intel-ish-client-if.h
<<
>>
Prefs
   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_ */
 114