1 // SPDX-License-Identifier: GPL-2.0
3 * Generic DFL driver for Userspace I/O devicess
5 * Copyright (C) 2021 Intel Corporation, Inc.
8 #include <linux/errno.h>
9 #include <linux/module.h>
10 #include <linux/uio_driver.h>
12 #define DRIVER_NAME "uio_dfl"
14 static int uio_dfl_probe(struct dfl_device
*ddev
)
16 struct resource
*r
= &ddev
->mmio_res
;
17 struct device
*dev
= &ddev
->dev
;
18 struct uio_info
*uioinfo
;
19 struct uio_mem
*uiomem
;
22 uioinfo
= devm_kzalloc(dev
, sizeof(struct uio_info
), GFP_KERNEL
);
26 uioinfo
->name
= DRIVER_NAME
;
27 uioinfo
->version
= "0";
29 uiomem
= &uioinfo
->mem
[0];
30 uiomem
->memtype
= UIO_MEM_PHYS
;
31 uiomem
->addr
= r
->start
& PAGE_MASK
;
32 uiomem
->offs
= r
->start
& ~PAGE_MASK
;
33 uiomem
->size
= (uiomem
->offs
+ resource_size(r
)
34 + PAGE_SIZE
- 1) & PAGE_MASK
;
35 uiomem
->name
= r
->name
;
37 /* Irq is yet to be supported */
38 uioinfo
->irq
= UIO_IRQ_NONE
;
40 ret
= devm_uio_register_device(dev
, uioinfo
);
42 dev_err(dev
, "unable to register uio device\n");
47 #define FME_FEATURE_ID_ETH_GROUP 0x10
49 static const struct dfl_device_id uio_dfl_ids
[] = {
50 { FME_ID
, FME_FEATURE_ID_ETH_GROUP
},
53 MODULE_DEVICE_TABLE(dfl
, uio_dfl_ids
);
55 static struct dfl_driver uio_dfl_driver
= {
59 .id_table
= uio_dfl_ids
,
60 .probe
= uio_dfl_probe
,
62 module_dfl_driver(uio_dfl_driver
);
64 MODULE_DESCRIPTION("Generic DFL driver for Userspace I/O devices");
65 MODULE_AUTHOR("Intel Corporation");
66 MODULE_LICENSE("GPL v2");