I/OAT: I/OAT version 3.0 support
This patch adds to ioatdma and dca modules support for Intel I/OAT DMA engine ver.3 (aka CB3 device). The main features of I/OAT ver.3 are: * 8 single channel DMA devices (8 channels total) * 8 DCA providers, each can accept 2 requesters * 8-bit TAG values and 32-bit extended APIC IDs Signed-off-by: Maciej Sosnowski <maciej.sosnowski@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
16a37acaaf
commit
7f1b358a23
10 changed files with 482 additions and 50 deletions
|
|
@ -10,6 +10,7 @@ void dca_unregister_notify(struct notifier_block *nb);
|
|||
#define DCA_PROVIDER_REMOVE 0x0002
|
||||
|
||||
struct dca_provider {
|
||||
struct list_head node;
|
||||
struct dca_ops *ops;
|
||||
struct device *cd;
|
||||
int id;
|
||||
|
|
@ -18,7 +19,9 @@ struct dca_provider {
|
|||
struct dca_ops {
|
||||
int (*add_requester) (struct dca_provider *, struct device *);
|
||||
int (*remove_requester) (struct dca_provider *, struct device *);
|
||||
u8 (*get_tag) (struct dca_provider *, int cpu);
|
||||
u8 (*get_tag) (struct dca_provider *, struct device *,
|
||||
int cpu);
|
||||
int (*dev_managed) (struct dca_provider *, struct device *);
|
||||
};
|
||||
|
||||
struct dca_provider *alloc_dca_provider(struct dca_ops *ops, int priv_size);
|
||||
|
|
@ -32,9 +35,11 @@ static inline void *dca_priv(struct dca_provider *dca)
|
|||
}
|
||||
|
||||
/* Requester API */
|
||||
#define DCA_GET_TAG_TWO_ARGS
|
||||
int dca_add_requester(struct device *dev);
|
||||
int dca_remove_requester(struct device *dev);
|
||||
u8 dca_get_tag(int cpu);
|
||||
u8 dca3_get_tag(struct device *dev, int cpu);
|
||||
|
||||
/* internal stuff */
|
||||
int __init dca_sysfs_init(void);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue