dca.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /*
  2. * Copyright(c) 2007 - 2009 Intel Corporation. All rights reserved.
  3. *
  4. * This program is free software; you can redistribute it and/or modify it
  5. * under the terms of the GNU General Public License as published by the Free
  6. * Software Foundation; either version 2 of the License, or (at your option)
  7. * any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful, but WITHOUT
  10. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  12. * more details.
  13. *
  14. * You should have received a copy of the GNU General Public License along with
  15. * this program; if not, write to the Free Software Foundation, Inc., 59
  16. * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  17. *
  18. * The full GNU General Public License is included in this distribution in the
  19. * file called COPYING.
  20. */
  21. #ifndef DCA_H
  22. #define DCA_H
  23. #include <linux/pci.h>
  24. /* DCA Provider API */
  25. /* DCA Notifier Interface */
  26. void dca_register_notify(struct notifier_block *nb);
  27. void dca_unregister_notify(struct notifier_block *nb);
  28. #define DCA_PROVIDER_ADD 0x0001
  29. #define DCA_PROVIDER_REMOVE 0x0002
  30. struct dca_provider {
  31. struct list_head node;
  32. const struct dca_ops *ops;
  33. struct device *cd;
  34. int id;
  35. };
  36. struct dca_domain {
  37. struct list_head node;
  38. struct list_head dca_providers;
  39. struct pci_bus *pci_rc;
  40. };
  41. struct dca_ops {
  42. int (*add_requester) (struct dca_provider *, struct device *);
  43. int (*remove_requester) (struct dca_provider *, struct device *);
  44. u8 (*get_tag) (struct dca_provider *, struct device *,
  45. int cpu);
  46. int (*dev_managed) (struct dca_provider *, struct device *);
  47. };
  48. struct dca_provider *alloc_dca_provider(const struct dca_ops *ops,
  49. int priv_size);
  50. void free_dca_provider(struct dca_provider *dca);
  51. int register_dca_provider(struct dca_provider *dca, struct device *dev);
  52. void unregister_dca_provider(struct dca_provider *dca, struct device *dev);
  53. static inline void *dca_priv(struct dca_provider *dca)
  54. {
  55. return (void *)dca + sizeof(struct dca_provider);
  56. }
  57. /* Requester API */
  58. #define DCA_GET_TAG_TWO_ARGS
  59. int dca_add_requester(struct device *dev);
  60. int dca_remove_requester(struct device *dev);
  61. u8 dca_get_tag(int cpu);
  62. u8 dca3_get_tag(struct device *dev, int cpu);
  63. /* internal stuff */
  64. int __init dca_sysfs_init(void);
  65. void __exit dca_sysfs_exit(void);
  66. int dca_sysfs_add_provider(struct dca_provider *dca, struct device *dev);
  67. void dca_sysfs_remove_provider(struct dca_provider *dca);
  68. int dca_sysfs_add_req(struct dca_provider *dca, struct device *dev, int slot);
  69. void dca_sysfs_remove_req(struct dca_provider *dca, int slot);
  70. #endif /* DCA_H */