1 #ifndef DCA_H 2 #define DCA_H 3 /* DCA Provider API */ 4 5 /* DCA Notifier Interface */ 6 void dca_register_notify(struct notifier_block *nb); 7 void dca_unregister_notify(struct notifier_block *nb); 8 9 #define DCA_PROVIDER_ADD 0x0001 10 #define DCA_PROVIDER_REMOVE 0x0002 11 12 struct dca_provider { 13 struct list_head node; 14 struct dca_ops *ops; 15 struct device *cd; 16 int id; 17 }; 18 19 struct dca_ops { 20 int (*add_requester) (struct dca_provider *, struct device *); 21 int (*remove_requester) (struct dca_provider *, struct device *); 22 u8 (*get_tag) (struct dca_provider *, struct device *, 23 int cpu); 24 int (*dev_managed) (struct dca_provider *, struct device *); 25 }; 26 27 struct dca_provider *alloc_dca_provider(struct dca_ops *ops, int priv_size); 28 void free_dca_provider(struct dca_provider *dca); 29 int register_dca_provider(struct dca_provider *dca, struct device *dev); 30 void unregister_dca_provider(struct dca_provider *dca); 31 32 static inline void *dca_priv(struct dca_provider *dca) 33 { 34 return (void *)dca + sizeof(struct dca_provider); 35 } 36 37 /* Requester API */ 38 #define DCA_GET_TAG_TWO_ARGS 39 int dca_add_requester(struct device *dev); 40 int dca_remove_requester(struct device *dev); 41 u8 dca_get_tag(int cpu); 42 u8 dca3_get_tag(struct device *dev, int cpu); 43 44 /* internal stuff */ 45 int __init dca_sysfs_init(void); 46 void __exit dca_sysfs_exit(void); 47 int dca_sysfs_add_provider(struct dca_provider *dca, struct device *dev); 48 void dca_sysfs_remove_provider(struct dca_provider *dca); 49 int dca_sysfs_add_req(struct dca_provider *dca, struct device *dev, int slot); 50 void dca_sysfs_remove_req(struct dca_provider *dca, int slot); 51 52 #endif /* DCA_H */ 53