dca.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. 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(struct dca_ops *ops, int priv_size);
  49. void free_dca_provider(struct dca_provider *dca);
  50. int register_dca_provider(struct dca_provider *dca, struct device *dev);
  51. void unregister_dca_provider(struct dca_provider *dca, struct device *dev);
  52. static inline void *dca_priv(struct dca_provider *dca)
  53. {
  54. return (void *)dca + sizeof(struct dca_provider);
  55. }
  56. /* Requester API */
  57. #define DCA_GET_TAG_TWO_ARGS
  58. int dca_add_requester(struct device *dev);
  59. int dca_remove_requester(struct device *dev);
  60. u8 dca_get_tag(int cpu);
  61. u8 dca3_get_tag(struct device *dev, int cpu);
  62. /* internal stuff */
  63. int __init dca_sysfs_init(void);
  64. void __exit dca_sysfs_exit(void);
  65. int dca_sysfs_add_provider(struct dca_provider *dca, struct device *dev);
  66. void dca_sysfs_remove_provider(struct dca_provider *dca);
  67. int dca_sysfs_add_req(struct dca_provider *dca, struct device *dev, int slot);
  68. void dca_sysfs_remove_req(struct dca_provider *dca, int slot);
  69. #endif /* DCA_H */