0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #ifndef __DFL_AFU_H
0018 #define __DFL_AFU_H
0019
0020 #include <linux/mm.h>
0021
0022 #include "dfl.h"
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034 struct dfl_afu_mmio_region {
0035 u32 index;
0036 u32 flags;
0037 u64 size;
0038 u64 offset;
0039 u64 phys;
0040 struct list_head node;
0041 };
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053 struct dfl_afu_dma_region {
0054 u64 user_addr;
0055 u64 length;
0056 u64 iova;
0057 struct page **pages;
0058 struct rb_node node;
0059 bool in_use;
0060 };
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072 struct dfl_afu {
0073 u64 region_cur_offset;
0074 int num_regions;
0075 u8 num_umsgs;
0076 struct list_head regions;
0077 struct rb_root dma_regions;
0078
0079 struct dfl_feature_platform_data *pdata;
0080 };
0081
0082
0083 int __afu_port_enable(struct platform_device *pdev);
0084 int __afu_port_disable(struct platform_device *pdev);
0085
0086 void afu_mmio_region_init(struct dfl_feature_platform_data *pdata);
0087 int afu_mmio_region_add(struct dfl_feature_platform_data *pdata,
0088 u32 region_index, u64 region_size, u64 phys, u32 flags);
0089 void afu_mmio_region_destroy(struct dfl_feature_platform_data *pdata);
0090 int afu_mmio_region_get_by_index(struct dfl_feature_platform_data *pdata,
0091 u32 region_index,
0092 struct dfl_afu_mmio_region *pregion);
0093 int afu_mmio_region_get_by_offset(struct dfl_feature_platform_data *pdata,
0094 u64 offset, u64 size,
0095 struct dfl_afu_mmio_region *pregion);
0096 void afu_dma_region_init(struct dfl_feature_platform_data *pdata);
0097 void afu_dma_region_destroy(struct dfl_feature_platform_data *pdata);
0098 int afu_dma_map_region(struct dfl_feature_platform_data *pdata,
0099 u64 user_addr, u64 length, u64 *iova);
0100 int afu_dma_unmap_region(struct dfl_feature_platform_data *pdata, u64 iova);
0101 struct dfl_afu_dma_region *
0102 afu_dma_region_find(struct dfl_feature_platform_data *pdata,
0103 u64 iova, u64 size);
0104
0105 extern const struct dfl_feature_ops port_err_ops;
0106 extern const struct dfl_feature_id port_err_id_table[];
0107 extern const struct attribute_group port_err_group;
0108
0109 #endif