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