dca.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. /* DCA Provider API */
  24. /* DCA Notifier Interface */
  25. void dca_register_notify(struct notifier_block *nb);
  26. void dca_unregister_notify(struct notifier_block *nb);
  27. #define DCA_PROVIDER_ADD 0x0001
  28. #define DCA_PROVIDER_REMOVE 0x0002
  29. struct dca_provider {
  30. struct list_head node;
  31. struct dca_ops *ops;
  32. struct device *cd;
  33. int id;
  34. };
  35. struct dca_ops {
  36. int (*add_requester) (struct dca_provider *, struct device *);
  37. int (*remove_requester) (struct dca_provider *, struct device *);
  38. u8 (*get_tag) (struct dca_provider *, struct device *,
  39. int cpu);
  40. int (*dev_managed) (struct dca_provider *, struct device *);
  41. };
  42. struct dca_provider *alloc_dca_provider(struct dca_ops *ops, int priv_size);
  43. void free_dca_provider(struct dca_provider *dca);
  44. int register_dca_provider(struct dca_provider *dca, struct device *dev);
  45. void unregister_dca_provider(struct dca_provider *dca);
  46. static inline void *dca_priv(struct dca_provider *dca)
  47. {
  48. return (void *)dca + sizeof(struct dca_provider);
  49. }
  50. /* Requester API */
  51. #define DCA_GET_TAG_TWO_ARGS
  52. int dca_add_requester(struct device *dev);
  53. int dca_remove_requester(struct device *dev);
  54. u8 dca_get_tag(int cpu);
  55. u8 dca3_get_tag(struct device *dev, int cpu);
  56. /* internal stuff */
  57. int __init dca_sysfs_init(void);
  58. void __exit dca_sysfs_exit(void);
  59. int dca_sysfs_add_provider(struct dca_provider *dca, struct device *dev);
  60. void dca_sysfs_remove_provider(struct dca_provider *dca);
  61. int dca_sysfs_add_req(struct dca_provider *dca, struct device *dev, int slot);
  62. void dca_sysfs_remove_req(struct dca_provider *dca, int slot);
  63. #endif /* DCA_H */