cdx.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /* SPDX-License-Identifier: GPL-2.0
  2. *
  3. * Header file for the CDX Bus
  4. *
  5. * Copyright (C) 2022-2023, Advanced Micro Devices, Inc.
  6. */
  7. #ifndef _CDX_H_
  8. #define _CDX_H_
  9. #include <linux/cdx/cdx_bus.h>
  10. /**
  11. * struct cdx_dev_params - CDX device parameters
  12. * @cdx: CDX controller associated with the device
  13. * @parent: Associated CDX Bus device
  14. * @vendor: Vendor ID for CDX device
  15. * @device: Device ID for CDX device
  16. * @subsys_vendor: Sub vendor ID for CDX device
  17. * @subsys_device: Sub device ID for CDX device
  18. * @bus_num: Bus number for this CDX device
  19. * @dev_num: Device number for this device
  20. * @res: array of MMIO region entries
  21. * @res_count: number of valid MMIO regions
  22. * @req_id: Requestor ID associated with CDX device
  23. * @class: Class of the CDX Device
  24. * @revision: Revision of the CDX device
  25. * @msi_dev_id: MSI device ID associated with CDX device
  26. * @num_msi: Number of MSI's supported by the device
  27. */
  28. struct cdx_dev_params {
  29. struct cdx_controller *cdx;
  30. struct device *parent;
  31. u16 vendor;
  32. u16 device;
  33. u16 subsys_vendor;
  34. u16 subsys_device;
  35. u8 bus_num;
  36. u8 dev_num;
  37. struct resource res[MAX_CDX_DEV_RESOURCES];
  38. u8 res_count;
  39. u32 req_id;
  40. u32 class;
  41. u8 revision;
  42. u32 msi_dev_id;
  43. u32 num_msi;
  44. };
  45. /**
  46. * cdx_register_controller - Register a CDX controller and its ports
  47. * on the CDX bus.
  48. * @cdx: The CDX controller to register
  49. *
  50. * Return: -errno on failure, 0 on success.
  51. */
  52. int cdx_register_controller(struct cdx_controller *cdx);
  53. /**
  54. * cdx_unregister_controller - Unregister a CDX controller
  55. * @cdx: The CDX controller to unregister
  56. */
  57. void cdx_unregister_controller(struct cdx_controller *cdx);
  58. /**
  59. * cdx_device_add - Add a CDX device. This function adds a CDX device
  60. * on the CDX bus as per the device parameters provided
  61. * by caller. It also creates and registers an associated
  62. * Linux generic device.
  63. * @dev_params: device parameters associated with the device to be created.
  64. *
  65. * Return: -errno on failure, 0 on success.
  66. */
  67. int cdx_device_add(struct cdx_dev_params *dev_params);
  68. /**
  69. * cdx_bus_add - Add a CDX bus. This function adds a bus on the CDX bus
  70. * subsystem. It creates a CDX device for the corresponding bus and
  71. * also registers an associated Linux generic device.
  72. * @cdx: Associated CDX controller
  73. * @us_num: Bus number
  74. *
  75. * Return: associated Linux generic device pointer on success or NULL on failure.
  76. */
  77. struct device *cdx_bus_add(struct cdx_controller *cdx, u8 bus_num);
  78. /**
  79. * cdx_msi_domain_init - Init the CDX bus MSI domain.
  80. * @dev: Device of the CDX bus controller
  81. *
  82. * Return: CDX MSI domain, NULL on failure
  83. */
  84. struct irq_domain *cdx_msi_domain_init(struct device *dev);
  85. #endif /* _CDX_H_ */