dca.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * Copyright(c) 2007 - 2009 Intel Corporation. All rights reserved.
  4. */
  5. #ifndef DCA_H
  6. #define DCA_H
  7. #include <linux/pci.h>
  8. /* DCA Provider API */
  9. /* DCA Notifier Interface */
  10. void dca_register_notify(struct notifier_block *nb);
  11. void dca_unregister_notify(struct notifier_block *nb);
  12. #define DCA_PROVIDER_ADD 0x0001
  13. #define DCA_PROVIDER_REMOVE 0x0002
  14. struct dca_provider {
  15. struct list_head node;
  16. const struct dca_ops *ops;
  17. struct device *cd;
  18. int id;
  19. };
  20. struct dca_domain {
  21. struct list_head node;
  22. struct list_head dca_providers;
  23. struct pci_bus *pci_rc;
  24. };
  25. struct dca_ops {
  26. int (*add_requester) (struct dca_provider *, struct device *);
  27. int (*remove_requester) (struct dca_provider *, struct device *);
  28. u8 (*get_tag) (struct dca_provider *, struct device *,
  29. int cpu);
  30. int (*dev_managed) (struct dca_provider *, struct device *);
  31. };
  32. struct dca_provider *alloc_dca_provider(const struct dca_ops *ops,
  33. int priv_size);
  34. void free_dca_provider(struct dca_provider *dca);
  35. int register_dca_provider(struct dca_provider *dca, struct device *dev);
  36. void unregister_dca_provider(struct dca_provider *dca, struct device *dev);
  37. static inline void *dca_priv(struct dca_provider *dca)
  38. {
  39. return (void *)dca + sizeof(struct dca_provider);
  40. }
  41. /* Requester API */
  42. #define DCA_GET_TAG_TWO_ARGS
  43. int dca_add_requester(struct device *dev);
  44. int dca_remove_requester(struct device *dev);
  45. u8 dca_get_tag(int cpu);
  46. u8 dca3_get_tag(struct device *dev, int cpu);
  47. /* internal stuff */
  48. int __init dca_sysfs_init(void);
  49. void __exit dca_sysfs_exit(void);
  50. int dca_sysfs_add_provider(struct dca_provider *dca, struct device *dev);
  51. void dca_sysfs_remove_provider(struct dca_provider *dca);
  52. int dca_sysfs_add_req(struct dca_provider *dca, struct device *dev, int slot);
  53. void dca_sysfs_remove_req(struct dca_provider *dca, int slot);
  54. #endif /* DCA_H */