xref: /dpdk/drivers/net/enetfec/enet_uio.h (revision b84fdd39638bc5c00d8ae3c5af962246d46c96c1)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright 2021 NXP
3  */
4 
5 #include "enet_ethdev.h"
6 
7 /* Prefix path to sysfs directory where UIO device attributes are exported.
8  * Path for UIO device X is /sys/class/uio/uioX
9  */
10 #define FEC_UIO_DEVICE_SYS_ATTR_PATH	"/sys/class/uio"
11 
12 /* Subfolder in sysfs where mapping attributes are exported
13  * for each UIO device. Path for mapping Y for device X is:
14  * /sys/class/uio/uioX/maps/mapY
15  */
16 #define FEC_UIO_DEVICE_SYS_MAP_ATTR	"maps/map"
17 
18 /* Name of UIO device file prefix. Each UIO device will have a device file
19  * /dev/uioX, where X is the minor device number.
20  */
21 #define FEC_UIO_DEVICE_FILE_NAME	"/dev/uio"
22 /*
23  * Name of UIO device. User space FEC will have a corresponding
24  * UIO device.
25  * Maximum length is #FEC_UIO_MAX_DEVICE_NAME_LENGTH.
26  *
27  * @note  Must be kept in sync with FEC kernel driver
28  * define #FEC_UIO_DEVICE_NAME !
29  */
30 #define FEC_UIO_DEVICE_NAME     "imx-fec-uio"
31 
32 /* Maximum length for the name of an UIO device file.
33  * Device file name format is: /dev/uioX.
34  */
35 #define FEC_UIO_MAX_DEVICE_FILE_NAME_LENGTH	30
36 
37 /* Maximum length for the name of an attribute file for an UIO device.
38  * Attribute files are exported in sysfs and have the name formatted as:
39  * /sys/class/uio/uioX/<attribute_file_name>
40  */
41 #define FEC_UIO_MAX_ATTR_FILE_NAME	100
42 
43 /* The id for the mapping used to export ENETFEC registers and BD memory to
44  * user space through UIO device.
45  */
46 #define FEC_UIO_REG_MAP_ID		0
47 #define FEC_UIO_BD_MAP_ID		1
48 
49 #define MAP_PAGE_SIZE			4096
50 
51 struct uio_job {
52 	uint32_t fec_id;
53 	int uio_fd;
54 	void *bd_start_addr;
55 	void *register_base_addr;
56 	int map_size;
57 	uint64_t map_addr;
58 	int uio_minor_number;
59 };
60 
61 int enetfec_configure(void);
62 int config_enetfec_uio(struct enetfec_private *fep);
63 void enetfec_uio_init(void);
64 void enetfec_cleanup(struct enetfec_private *fep);
65