Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * Copyright(c) 2007 - 2009 Intel Corporation. All rights reserved.
0004  */
0005 #ifndef DCA_H
0006 #define DCA_H
0007 
0008 #include <linux/pci.h>
0009 
0010 /* DCA Provider API */
0011 
0012 /* DCA Notifier Interface */
0013 void dca_register_notify(struct notifier_block *nb);
0014 void dca_unregister_notify(struct notifier_block *nb);
0015 
0016 #define DCA_PROVIDER_ADD     0x0001
0017 #define DCA_PROVIDER_REMOVE  0x0002
0018 
0019 struct dca_provider {
0020     struct list_head    node;
0021     const struct dca_ops    *ops;
0022     struct device       *cd;
0023     int          id;
0024 };
0025 
0026 struct dca_domain {
0027     struct list_head    node;
0028     struct list_head    dca_providers;
0029     struct pci_bus      *pci_rc;
0030 };
0031 
0032 struct dca_ops {
0033     int (*add_requester)    (struct dca_provider *, struct device *);
0034     int (*remove_requester) (struct dca_provider *, struct device *);
0035     u8  (*get_tag)      (struct dca_provider *, struct device *,
0036                      int cpu);
0037     int (*dev_managed)      (struct dca_provider *, struct device *);
0038 };
0039 
0040 struct dca_provider *alloc_dca_provider(const struct dca_ops *ops,
0041                     int priv_size);
0042 void free_dca_provider(struct dca_provider *dca);
0043 int register_dca_provider(struct dca_provider *dca, struct device *dev);
0044 void unregister_dca_provider(struct dca_provider *dca, struct device *dev);
0045 
0046 static inline void *dca_priv(struct dca_provider *dca)
0047 {
0048     return (void *)dca + sizeof(struct dca_provider);
0049 }
0050 
0051 /* Requester API */
0052 #define DCA_GET_TAG_TWO_ARGS
0053 int dca_add_requester(struct device *dev);
0054 int dca_remove_requester(struct device *dev);
0055 u8 dca_get_tag(int cpu);
0056 u8 dca3_get_tag(struct device *dev, int cpu);
0057 
0058 /* internal stuff */
0059 int __init dca_sysfs_init(void);
0060 void __exit dca_sysfs_exit(void);
0061 int dca_sysfs_add_provider(struct dca_provider *dca, struct device *dev);
0062 void dca_sysfs_remove_provider(struct dca_provider *dca);
0063 int dca_sysfs_add_req(struct dca_provider *dca, struct device *dev, int slot);
0064 void dca_sysfs_remove_req(struct dca_provider *dca, int slot);
0065 
0066 #endif /* DCA_H */