|
@@ -204,6 +204,26 @@ struct iommu_ops {
|
|
|
unsigned long pgsize_bitmap;
|
|
|
};
|
|
|
|
|
|
+/**
|
|
|
+ * struct iommu_device - IOMMU core representation of one IOMMU hardware
|
|
|
+ * instance
|
|
|
+ * @list: Used by the iommu-core to keep a list of registered iommus
|
|
|
+ * @ops: iommu-ops for talking to this iommu
|
|
|
+ */
|
|
|
+struct iommu_device {
|
|
|
+ struct list_head list;
|
|
|
+ const struct iommu_ops *ops;
|
|
|
+};
|
|
|
+
|
|
|
+int iommu_device_register(struct iommu_device *iommu);
|
|
|
+void iommu_device_unregister(struct iommu_device *iommu);
|
|
|
+
|
|
|
+static inline void iommu_device_set_ops(struct iommu_device *iommu,
|
|
|
+ const struct iommu_ops *ops)
|
|
|
+{
|
|
|
+ iommu->ops = ops;
|
|
|
+}
|
|
|
+
|
|
|
#define IOMMU_GROUP_NOTIFY_ADD_DEVICE 1 /* Device added */
|
|
|
#define IOMMU_GROUP_NOTIFY_DEL_DEVICE 2 /* Pre Device removed */
|
|
|
#define IOMMU_GROUP_NOTIFY_BIND_DRIVER 3 /* Pre Driver bind */
|
|
@@ -361,6 +381,7 @@ const struct iommu_ops *iommu_ops_from_fwnode(struct fwnode_handle *fwnode);
|
|
|
struct iommu_ops {};
|
|
|
struct iommu_group {};
|
|
|
struct iommu_fwspec {};
|
|
|
+struct iommu_device {};
|
|
|
|
|
|
static inline bool iommu_present(struct bus_type *bus)
|
|
|
{
|
|
@@ -558,6 +579,20 @@ static inline void iommu_device_destroy(struct device *dev)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
+static inline int iommu_device_register(struct iommu_device *iommu)
|
|
|
+{
|
|
|
+ return -ENODEV;
|
|
|
+}
|
|
|
+
|
|
|
+static inline void iommu_device_set_ops(struct iommu_device *iommu,
|
|
|
+ const struct iommu_ops *ops)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+static inline void iommu_device_unregister(struct iommu_device *iommu)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
static inline int iommu_device_link(struct device *dev, struct device *link)
|
|
|
{
|
|
|
return -EINVAL;
|