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