intel-ish-client-if.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Intel ISH client Interface definitions
  4. *
  5. * Copyright (c) 2019, Intel Corporation.
  6. */
  7. #ifndef _INTEL_ISH_CLIENT_IF_H_
  8. #define _INTEL_ISH_CLIENT_IF_H_
  9. #include <linux/device.h>
  10. #include <linux/mod_devicetable.h>
  11. struct ishtp_cl_device;
  12. struct ishtp_device;
  13. struct ishtp_cl;
  14. struct ishtp_fw_client;
  15. typedef __printf(2, 3) void (*ishtp_print_log)(struct ishtp_device *dev,
  16. const char *format, ...);
  17. /* Client state */
  18. enum cl_state {
  19. ISHTP_CL_INITIALIZING = 0,
  20. ISHTP_CL_CONNECTING,
  21. ISHTP_CL_CONNECTED,
  22. ISHTP_CL_DISCONNECTING,
  23. ISHTP_CL_DISCONNECTED
  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. */
  34. struct ishtp_cl_driver {
  35. struct device_driver driver;
  36. const char *name;
  37. const struct ishtp_device_id *id;
  38. int (*probe)(struct ishtp_cl_device *dev);
  39. void (*remove)(struct ishtp_cl_device *dev);
  40. int (*reset)(struct ishtp_cl_device *dev);
  41. const struct dev_pm_ops *pm;
  42. };
  43. /**
  44. * struct ishtp_msg_data - ISHTP message data struct
  45. * @size: Size of data in the *data
  46. * @data: Pointer to data
  47. */
  48. struct ishtp_msg_data {
  49. uint32_t size;
  50. unsigned char *data;
  51. };
  52. /*
  53. * struct ishtp_cl_rb - request block structure
  54. * @list: Link to list members
  55. * @cl: ISHTP client instance
  56. * @buffer: message header
  57. * @buf_idx: Index into buffer
  58. * @read_time: unused at this time
  59. */
  60. struct ishtp_cl_rb {
  61. struct list_head list;
  62. struct ishtp_cl *cl;
  63. struct ishtp_msg_data buffer;
  64. unsigned long buf_idx;
  65. unsigned long read_time;
  66. };
  67. int ishtp_cl_driver_register(struct ishtp_cl_driver *driver,
  68. struct module *owner);
  69. void ishtp_cl_driver_unregister(struct ishtp_cl_driver *driver);
  70. int ishtp_register_event_cb(struct ishtp_cl_device *device,
  71. void (*read_cb)(struct ishtp_cl_device *));
  72. /* Get the device * from ishtp device instance */
  73. struct device *ishtp_device(struct ishtp_cl_device *cl_device);
  74. /* wait for IPC resume */
  75. bool ishtp_wait_resume(struct ishtp_device *dev);
  76. /* Trace interface for clients */
  77. ishtp_print_log ishtp_trace_callback(struct ishtp_cl_device *cl_device);
  78. /* Get device pointer of PCI device for DMA acces */
  79. struct device *ishtp_get_pci_device(struct ishtp_cl_device *cl_device);
  80. struct ishtp_cl *ishtp_cl_allocate(struct ishtp_cl_device *cl_device);
  81. void ishtp_cl_free(struct ishtp_cl *cl);
  82. int ishtp_cl_link(struct ishtp_cl *cl);
  83. void ishtp_cl_unlink(struct ishtp_cl *cl);
  84. int ishtp_cl_disconnect(struct ishtp_cl *cl);
  85. int ishtp_cl_connect(struct ishtp_cl *cl);
  86. int ishtp_cl_send(struct ishtp_cl *cl, uint8_t *buf, size_t length);
  87. int ishtp_cl_flush_queues(struct ishtp_cl *cl);
  88. int ishtp_cl_io_rb_recycle(struct ishtp_cl_rb *rb);
  89. bool ishtp_cl_tx_empty(struct ishtp_cl *cl);
  90. struct ishtp_cl_rb *ishtp_cl_rx_get_rb(struct ishtp_cl *cl);
  91. void *ishtp_get_client_data(struct ishtp_cl *cl);
  92. void ishtp_set_client_data(struct ishtp_cl *cl, void *data);
  93. struct ishtp_device *ishtp_get_ishtp_device(struct ishtp_cl *cl);
  94. void ishtp_set_tx_ring_size(struct ishtp_cl *cl, int size);
  95. void ishtp_set_rx_ring_size(struct ishtp_cl *cl, int size);
  96. void ishtp_set_connection_state(struct ishtp_cl *cl, int state);
  97. void ishtp_cl_set_fw_client_id(struct ishtp_cl *cl, int fw_client_id);
  98. void ishtp_put_device(struct ishtp_cl_device *cl_dev);
  99. void ishtp_get_device(struct ishtp_cl_device *cl_dev);
  100. void ishtp_set_drvdata(struct ishtp_cl_device *cl_device, void *data);
  101. void *ishtp_get_drvdata(struct ishtp_cl_device *cl_device);
  102. struct ishtp_cl_device *ishtp_dev_to_cl_device(struct device *dev);
  103. int ishtp_register_event_cb(struct ishtp_cl_device *device,
  104. void (*read_cb)(struct ishtp_cl_device *));
  105. struct ishtp_fw_client *ishtp_fw_cl_get_client(struct ishtp_device *dev,
  106. const guid_t *uuid);
  107. int ishtp_get_fw_client_id(struct ishtp_fw_client *fw_client);
  108. int ish_hw_reset(struct ishtp_device *dev);
  109. #endif /* _INTEL_ISH_CLIENT_IF_H_ */