virtio_spmi.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. */
  3. #ifndef _LINUX_VIRTIO_SPMI_H
  4. #define _LINUX_VIRTIO_SPMI_H
  5. #include <linux/types.h>
  6. #include <linux/virtio_ids.h>
  7. #include <linux/virtio_config.h>
  8. #include <linux/virtio_types.h>
  9. /* Feature bits */
  10. #define VIRTIO_SPMI_F_INT 1 /* Support interrupt */
  11. #define VM_MAX_PERIPHS 512
  12. /* Configuration layout */
  13. struct virtio_spmi_config {
  14. __u16 ppid_allowed[VM_MAX_PERIPHS];
  15. } __packed;
  16. struct payload_cmd {
  17. __virtio32 cmd;
  18. __virtio32 data[2];
  19. };
  20. struct payload_irq {
  21. __virtio16 ppid;
  22. __virtio32 regval;
  23. };
  24. union payload_data {
  25. struct payload_cmd cmdd;
  26. struct payload_irq irqd;
  27. };
  28. struct virtio_spmi_msg {
  29. __virtio32 type;
  30. __virtio32 res;
  31. union payload_data payload;
  32. };
  33. /* Virtio SPMI message type */
  34. enum vio_spmi_msg_type {
  35. VIO_SPMI_BUS_WRITE = 0,
  36. VIO_SPMI_BUS_READ = 1,
  37. VIO_SPMI_BUS_CMDMAX = 1,
  38. VIO_ACC_ENABLE_WR = 2,
  39. VIO_ACC_ENABLE_RD = 3,
  40. VIO_IRQ_CLEAR = 4,
  41. VIO_IRQ_STATUS = 5,
  42. };
  43. /* Virtio SPMI message type */
  44. enum vio_spmi_msg_res {
  45. VIO_SPMI_DONE = 0,
  46. VIO_SPMI_ERR = 1,
  47. };
  48. #endif /* _LINUX_VIRTIO_SPMI_H */