diff --git a/Documentation/reference/user/10_filesystem.rst b/Documentation/reference/user/10_filesystem.rst index acbf64b0b5fd2..d567797dc62d1 100644 --- a/Documentation/reference/user/10_filesystem.rst +++ b/Documentation/reference/user/10_filesystem.rst @@ -458,12 +458,11 @@ are two conditions where ``mmap()`` can be supported: 1. ``mmap()`` can be used to support *eXecute In Place* (XIP) on random access media under the following very restrictive conditions: - a. The file-system supports the ``FIOC_MMAP`` ioctl command. Any file - system that maps files contiguously on the media should support - this ``ioctl`` command. By comparison, most file system scatter - files over the media in non-contiguous sectors. As of this - writing, ROMFS is the only file system that meets this - requirement. + a. Any file system that maps files contiguously on the media + should implement the mmap file operation. By comparison, most + file system scatter files over the media in non-contiguous + sectors. As of this writing, ROMFS is the only file system + that meets this requirement. b. The underlying block driver supports the ``BIOC_XIPBASE`` ``ioctl`` command that maps the underlying media to a randomly diff --git a/arch/arm/src/cxd56xx/cxd56_geofence.c b/arch/arm/src/cxd56xx/cxd56_geofence.c index f5b5bb7592c8b..ad040534f0b95 100644 --- a/arch/arm/src/cxd56xx/cxd56_geofence.c +++ b/arch/arm/src/cxd56xx/cxd56_geofence.c @@ -106,6 +106,8 @@ static const struct file_operations g_geofencefops = NULL, /* write */ NULL, /* seek */ cxd56_geofence_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ cxd56_geofence_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/arch/arm/src/cxd56xx/cxd56_gnss.c b/arch/arm/src/cxd56xx/cxd56_gnss.c index 826da673aae5d..9f9683a35c5f3 100644 --- a/arch/arm/src/cxd56xx/cxd56_gnss.c +++ b/arch/arm/src/cxd56xx/cxd56_gnss.c @@ -317,6 +317,8 @@ static const struct file_operations g_gnssfops = cxd56_gnss_write, /* write */ NULL, /* seek */ cxd56_gnss_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ cxd56_gnss_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/arch/arm/src/cxd56xx/cxd56_hostif.c b/arch/arm/src/cxd56xx/cxd56_hostif.c index ec217d03bd7ba..790506052c31e 100644 --- a/arch/arm/src/cxd56xx/cxd56_hostif.c +++ b/arch/arm/src/cxd56xx/cxd56_hostif.c @@ -145,6 +145,8 @@ static const struct file_operations g_hif_fops = hif_write, /* write */ hif_seek, /* seek */ hif_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ hif_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , hif_unlink /* unlink */ diff --git a/arch/arm/src/sama5/sam_tsd.c b/arch/arm/src/sama5/sam_tsd.c index 4c6e925f5bd14..888d4a34e6961 100644 --- a/arch/arm/src/sama5/sam_tsd.c +++ b/arch/arm/src/sama5/sam_tsd.c @@ -249,6 +249,8 @@ static const struct file_operations g_tsdops = NULL, /* write */ NULL, /* seek */ sam_tsd_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ sam_tsd_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/boards/arm/sam34/sam4l-xplained/src/sam_slcd.c b/boards/arm/sam34/sam4l-xplained/src/sam_slcd.c index 3dd6553b9b155..0002e3ca6fb09 100644 --- a/boards/arm/sam34/sam4l-xplained/src/sam_slcd.c +++ b/boards/arm/sam34/sam4l-xplained/src/sam_slcd.c @@ -296,6 +296,8 @@ static const struct file_operations g_slcdops = slcd_write, /* write */ NULL, /* seek */ slcd_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ slcd_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/boards/arm/stm32/mikroe-stm32f4/src/stm32_touchscreen.c b/boards/arm/stm32/mikroe-stm32f4/src/stm32_touchscreen.c index 5e3725e7edb67..b22be31a6edf5 100644 --- a/boards/arm/stm32/mikroe-stm32f4/src/stm32_touchscreen.c +++ b/boards/arm/stm32/mikroe-stm32f4/src/stm32_touchscreen.c @@ -268,6 +268,8 @@ static const struct file_operations tc_fops = NULL, /* write */ NULL, /* seek */ tc_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ tc_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/boards/arm/stm32/stm32ldiscovery/src/stm32_lcd.c b/boards/arm/stm32/stm32ldiscovery/src/stm32_lcd.c index d4859819c2076..e8c8bf90fed6a 100644 --- a/boards/arm/stm32/stm32ldiscovery/src/stm32_lcd.c +++ b/boards/arm/stm32/stm32ldiscovery/src/stm32_lcd.c @@ -346,6 +346,8 @@ static const struct file_operations g_slcdops = slcd_write, /* write */ NULL, /* seek */ slcd_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ slcd_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/boards/mips/pic32mx/pic32mx7mmb/src/pic32_touchscreen.c b/boards/mips/pic32mx/pic32mx7mmb/src/pic32_touchscreen.c index 7684c58e574bf..04786a968a106 100644 --- a/boards/mips/pic32mx/pic32mx7mmb/src/pic32_touchscreen.c +++ b/boards/mips/pic32mx/pic32mx7mmb/src/pic32_touchscreen.c @@ -249,6 +249,8 @@ static const struct file_operations tc_fops = NULL, /* write */ NULL, /* seek */ tc_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ tc_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/boards/mips/pic32mx/sure-pic32mx/src/pic32mx_lcd1602.c b/boards/mips/pic32mx/sure-pic32mx/src/pic32mx_lcd1602.c index 1baf1a8cf035f..9fe29b59baad6 100644 --- a/boards/mips/pic32mx/sure-pic32mx/src/pic32mx_lcd1602.c +++ b/boards/mips/pic32mx/sure-pic32mx/src/pic32mx_lcd1602.c @@ -181,6 +181,8 @@ static const struct file_operations g_lcdops = lcd_write, /* write */ NULL, /* seek */ lcd_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ lcd_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/crypto/cryptodev.c b/crypto/cryptodev.c index b524804b2f115..749e2c0120c50 100644 --- a/crypto/cryptodev.c +++ b/crypto/cryptodev.c @@ -125,6 +125,8 @@ static const struct file_operations g_cryptofops = cryptof_write, /* write */ NULL, /* seek */ cryptof_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ cryptof_poll /* poll */ }; @@ -136,6 +138,8 @@ static const struct file_operations g_cryptoops = NULL, /* write */ NULL, /* seek */ cryptoioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL /* poll */ }; diff --git a/drivers/analog/adc.c b/drivers/analog/adc.c index 0d9cc43bd5d97..f8df2343a68f8 100644 --- a/drivers/analog/adc.c +++ b/drivers/analog/adc.c @@ -72,6 +72,8 @@ static const struct file_operations g_adc_fops = NULL, /* write */ NULL, /* seek */ adc_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ adc_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/analog/comp.c b/drivers/analog/comp.c index 3bec7547437e7..0fc956d6c0f0d 100644 --- a/drivers/analog/comp.c +++ b/drivers/analog/comp.c @@ -65,6 +65,8 @@ static const struct file_operations comp_fops = NULL, /* write */ NULL, /* seek */ comp_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ comp_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/bch/bchdev_driver.c b/drivers/bch/bchdev_driver.c index d807822cce68c..9069d935963c5 100644 --- a/drivers/bch/bchdev_driver.c +++ b/drivers/bch/bchdev_driver.c @@ -78,6 +78,8 @@ const struct file_operations bch_fops = bch_write, /* write */ bch_seek, /* seek */ bch_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ bch_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , bch_unlink /* unlink */ diff --git a/drivers/can/can.c b/drivers/can/can.c index 69ca540382de9..78a72255ffd59 100644 --- a/drivers/can/can.c +++ b/drivers/can/can.c @@ -135,6 +135,8 @@ static const struct file_operations g_canops = can_write, /* write */ NULL, /* seek */ can_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ can_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/crypto/dev_urandom.c b/drivers/crypto/dev_urandom.c index 0137fdfaf3fb1..5496ab60d9662 100644 --- a/drivers/crypto/dev_urandom.c +++ b/drivers/crypto/dev_urandom.c @@ -100,6 +100,8 @@ static const struct file_operations g_urand_fops = devurand_write, /* write */ NULL, /* seek */ NULL, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ devurand_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/i2c/i2c_driver.c b/drivers/i2c/i2c_driver.c index 5a7c4c9f3b903..57fedcb2a6fc4 100644 --- a/drivers/i2c/i2c_driver.c +++ b/drivers/i2c/i2c_driver.c @@ -99,6 +99,8 @@ static const struct file_operations i2cdrvr_fops = i2cdrvr_write, /* write */ NULL, /* seek */ i2cdrvr_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , i2cdrvr_unlink /* unlink */ diff --git a/drivers/input/ads7843e.c b/drivers/input/ads7843e.c index 8cf4e9ff166d5..f7602f2b42672 100644 --- a/drivers/input/ads7843e.c +++ b/drivers/input/ads7843e.c @@ -122,6 +122,8 @@ static const struct file_operations ads7843e_fops = NULL, /* write */ NULL, /* seek */ ads7843e_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ ads7843e_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/input/ajoystick.c b/drivers/input/ajoystick.c index ef81fd867412b..e9acb48266967 100644 --- a/drivers/input/ajoystick.c +++ b/drivers/input/ajoystick.c @@ -135,6 +135,8 @@ static const struct file_operations ajoy_fops = NULL, /* write */ NULL, /* seek */ ajoy_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ ajoy_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/input/button_upper.c b/drivers/input/button_upper.c index 10117aa2d40c6..007a9ffc3023f 100644 --- a/drivers/input/button_upper.c +++ b/drivers/input/button_upper.c @@ -133,6 +133,8 @@ static const struct file_operations btn_fops = btn_write, /* write */ NULL, /* seek */ btn_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ btn_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/input/cypress_mbr3108.c b/drivers/input/cypress_mbr3108.c index 2fe4b6b584710..107bd814b3f60 100644 --- a/drivers/input/cypress_mbr3108.c +++ b/drivers/input/cypress_mbr3108.c @@ -224,6 +224,8 @@ static const struct file_operations g_mbr3108_fileops = mbr3108_write, /* write */ NULL, /* seek */ NULL, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ mbr3108_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/input/djoystick.c b/drivers/input/djoystick.c index d2ba83a841e94..06a8d82890359 100644 --- a/drivers/input/djoystick.c +++ b/drivers/input/djoystick.c @@ -135,6 +135,8 @@ static const struct file_operations djoy_fops = NULL, /* write */ NULL, /* seek */ djoy_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ djoy_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/input/ft5x06.c b/drivers/input/ft5x06.c index 478b362d0421b..59f94b9a7ad47 100644 --- a/drivers/input/ft5x06.c +++ b/drivers/input/ft5x06.c @@ -176,6 +176,8 @@ static const struct file_operations ft5x06_fops = NULL, /* write */ NULL, /* seek */ ft5x06_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ ft5x06_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/input/keyboard_upper.c b/drivers/input/keyboard_upper.c index 6ed9758ff1324..4ab770288db05 100644 --- a/drivers/input/keyboard_upper.c +++ b/drivers/input/keyboard_upper.c @@ -88,6 +88,8 @@ static const struct file_operations g_keyboard_fops = keyboard_write, /* write */ NULL, /* seek */ NULL, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ keyboard_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/input/max11802.c b/drivers/input/max11802.c index 517cc3d58e04a..0713c61d5696c 100644 --- a/drivers/input/max11802.c +++ b/drivers/input/max11802.c @@ -115,6 +115,8 @@ static const struct file_operations max11802_fops = NULL, /* write */ NULL, /* seek */ max11802_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ max11802_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/input/mxt.c b/drivers/input/mxt.c index 4daf8da771f83..50426a9646b13 100644 --- a/drivers/input/mxt.c +++ b/drivers/input/mxt.c @@ -280,6 +280,8 @@ static const struct file_operations mxt_fops = NULL, /* write */ NULL, /* seek */ mxt_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ mxt_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/input/spq10kbd.c b/drivers/input/spq10kbd.c index 6a9cab82ba999..427925f4d909a 100644 --- a/drivers/input/spq10kbd.c +++ b/drivers/input/spq10kbd.c @@ -255,6 +255,8 @@ static const struct file_operations g_hidkbd_fops = spq10kbd_write, /* write */ NULL, /* seek */ NULL, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ spq10kbd_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/input/stmpe811_tsc.c b/drivers/input/stmpe811_tsc.c index 89851b6070cd4..efc73437d2b15 100644 --- a/drivers/input/stmpe811_tsc.c +++ b/drivers/input/stmpe811_tsc.c @@ -124,6 +124,8 @@ static const struct file_operations g_stmpe811fops = NULL, /* write */ NULL, /* seek */ stmpe811_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ stmpe811_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/input/touchscreen_upper.c b/drivers/input/touchscreen_upper.c index a1239452e3f26..0f3a6c6c83ae4 100644 --- a/drivers/input/touchscreen_upper.c +++ b/drivers/input/touchscreen_upper.c @@ -90,6 +90,8 @@ static const struct file_operations g_touch_fops = touch_write, /* write */ NULL, /* seek */ touch_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ touch_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/input/tsc2007.c b/drivers/input/tsc2007.c index 2b799b0c07c13..5932578c07409 100644 --- a/drivers/input/tsc2007.c +++ b/drivers/input/tsc2007.c @@ -209,6 +209,8 @@ static const struct file_operations tsc2007_fops = NULL, /* write */ NULL, /* seek */ tsc2007_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ tsc2007_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/lcd/ft80x.c b/drivers/lcd/ft80x.c index 9880b52494185..c75aaeea4b044 100644 --- a/drivers/lcd/ft80x.c +++ b/drivers/lcd/ft80x.c @@ -134,6 +134,8 @@ static const struct file_operations g_ft80x_fops = ft80x_write, /* write */ NULL, /* seek */ ft80x_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , ft80x_unlink /* unlink */ diff --git a/drivers/lcd/pcf8574_lcd_backpack.c b/drivers/lcd/pcf8574_lcd_backpack.c index 07dd614bafc96..0a0ec4dbf2ccb 100644 --- a/drivers/lcd/pcf8574_lcd_backpack.c +++ b/drivers/lcd/pcf8574_lcd_backpack.c @@ -117,6 +117,8 @@ static const struct file_operations g_pcf8574_lcd_fops = pcf8574_lcd_write, /* write */ pcf8574_lcd_seek, /* seek */ pcf8574_lcd_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ pcf8574_lcd_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , pcf8574_lcd_unlink /* unlink */ diff --git a/drivers/lcd/tda19988.c b/drivers/lcd/tda19988.c index f07c662a09cf8..16a00010895fd 100644 --- a/drivers/lcd/tda19988.c +++ b/drivers/lcd/tda19988.c @@ -170,6 +170,8 @@ static const struct file_operations tda19988_fops = tda19988_write, /* write */ tda19988_seek, /* seek */ tda19988_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ tda19988_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , tda19988_unlink /* unlink */ diff --git a/drivers/leds/ws2812.c b/drivers/leds/ws2812.c index b239ba56596cc..235df171f135c 100644 --- a/drivers/leds/ws2812.c +++ b/drivers/leds/ws2812.c @@ -182,8 +182,8 @@ static const struct file_operations g_ws2812fops = /**************************************************************************** * #### TODO #### * - * Consider supporting mmap by returning memory buffer using... - * file_ioctl(filep, FIOC_MMAP, (unsigned long)((uintptr_t)&addr)); + * Consider supporting mmap by returning memory buffer using file_operations' + * mmap * Code using this would be non-portable across architectures as the format * of the buffer can be different. * diff --git a/drivers/misc/dev_null.c b/drivers/misc/dev_null.c index da6fc34863777..8067011275359 100644 --- a/drivers/misc/dev_null.c +++ b/drivers/misc/dev_null.c @@ -57,6 +57,8 @@ static const struct file_operations devnull_fops = devnull_write, /* write */ NULL, /* seek */ NULL, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ devnull_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/misc/dev_zero.c b/drivers/misc/dev_zero.c index 097e79d1c5cdf..998aaa394fc27 100644 --- a/drivers/misc/dev_zero.c +++ b/drivers/misc/dev_zero.c @@ -57,6 +57,8 @@ static const struct file_operations devzero_fops = devzero_write, /* write */ NULL, /* seek */ NULL, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ devzero_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/misc/rpmsgdev.c b/drivers/misc/rpmsgdev.c index 9df1ba0c8651e..3be631336f8c4 100644 --- a/drivers/misc/rpmsgdev.c +++ b/drivers/misc/rpmsgdev.c @@ -165,6 +165,8 @@ const struct file_operations g_rpmsgdev_ops = rpmsgdev_write, /* write */ rpmsgdev_seek, /* seek */ rpmsgdev_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ rpmsgdev_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/modem/alt1250/alt1250.c b/drivers/modem/alt1250/alt1250.c index 0c0654d6f77c1..7e76bd199fb3d 100644 --- a/drivers/modem/alt1250/alt1250.c +++ b/drivers/modem/alt1250/alt1250.c @@ -77,6 +77,8 @@ static const struct file_operations g_alt1250fops = NULL, /* write */ NULL, /* seek */ alt1250_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ alt1250_poll, /* poll */ }; static uint8_t g_recvbuff[ALTCOM_RX_PKT_SIZE_MAX]; diff --git a/drivers/modem/u-blox.c b/drivers/modem/u-blox.c index b858a4a0729dc..86cb243909da6 100644 --- a/drivers/modem/u-blox.c +++ b/drivers/modem/u-blox.c @@ -114,6 +114,8 @@ static const struct file_operations ubxmdm_fops = ubxmdm_write, /* write */ NULL, /* seek */ ubxmdm_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ ubxmdm_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/mtd/mtd_config.c b/drivers/mtd/mtd_config.c index f63521f705ec0..e2f0f765366b2 100644 --- a/drivers/mtd/mtd_config.c +++ b/drivers/mtd/mtd_config.c @@ -119,6 +119,8 @@ static const struct file_operations mtdconfig_fops = NULL, /* write */ NULL, /* seek */ mtdconfig_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ mtdconfig_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/mtd/mtd_config_fs.c b/drivers/mtd/mtd_config_fs.c index ccfeb250a54e5..254a8ccbe9c09 100644 --- a/drivers/mtd/mtd_config_fs.c +++ b/drivers/mtd/mtd_config_fs.c @@ -141,6 +141,8 @@ static const struct file_operations g_mtdnvs_fops = NULL, /* Write */ NULL, /* Seek */ mtdconfig_ioctl, /* Ioctl */ + NULL, /* Truncate */ + NULL, /* Mmap */ mtdconfig_poll /* Poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* Unlink */ diff --git a/drivers/net/telnet.c b/drivers/net/telnet.c index a8bf663730364..fabbe8151421f 100644 --- a/drivers/net/telnet.c +++ b/drivers/net/telnet.c @@ -190,6 +190,8 @@ static const struct file_operations g_telnet_fops = telnet_write, /* write */ NULL, /* seek */ telnet_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ telnet_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ @@ -204,6 +206,8 @@ static const struct file_operations g_factory_fops = factory_write, /* write */ NULL, /* seek */ factory_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 751efeaf2dc86..43d43ade799a7 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -219,6 +219,8 @@ static const struct file_operations g_tun_file_ops = tun_write, /* write */ NULL, /* seek */ tun_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ tun_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/pipes/fifo.c b/drivers/pipes/fifo.c index 61010d3a1e5ae..283f1614ff8f1 100644 --- a/drivers/pipes/fifo.c +++ b/drivers/pipes/fifo.c @@ -47,6 +47,8 @@ static const struct file_operations g_fifo_fops = pipecommon_write, /* write */ NULL, /* seek */ pipecommon_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ pipecommon_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , pipecommon_unlink /* unlink */ diff --git a/drivers/pipes/pipe.c b/drivers/pipes/pipe.c index 999a55a7f3611..5bc8716d5bfee 100644 --- a/drivers/pipes/pipe.c +++ b/drivers/pipes/pipe.c @@ -61,6 +61,8 @@ static const struct file_operations g_pipe_fops = pipecommon_write, /* write */ NULL, /* seek */ pipecommon_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ pipecommon_poll /* poll */ }; diff --git a/drivers/power/battery/battery_charger.c b/drivers/power/battery/battery_charger.c index c7d2e37398107..0316a5d47e320 100644 --- a/drivers/power/battery/battery_charger.c +++ b/drivers/power/battery/battery_charger.c @@ -91,6 +91,8 @@ static const struct file_operations g_batteryops = bat_charger_write, /* write */ NULL, /* seek */ bat_charger_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ bat_charger_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/power/battery/battery_gauge.c b/drivers/power/battery/battery_gauge.c index ae09ed49fc046..0b24303e274df 100644 --- a/drivers/power/battery/battery_gauge.c +++ b/drivers/power/battery/battery_gauge.c @@ -93,6 +93,8 @@ static const struct file_operations g_batteryops = bat_gauge_write, /* write */ NULL, /* seek */ bat_gauge_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ bat_gauge_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/power/battery/battery_monitor.c b/drivers/power/battery/battery_monitor.c index 8d3499d436bcb..4f1c2ff5d5e58 100644 --- a/drivers/power/battery/battery_monitor.c +++ b/drivers/power/battery/battery_monitor.c @@ -92,6 +92,8 @@ static const struct file_operations g_batteryops = bat_monitor_write, /* write */ NULL, /* seek */ bat_monitor_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ bat_monitor_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/rc/lirc_dev.c b/drivers/rc/lirc_dev.c index 38cd34e1e63a7..57a0d5e6b2b71 100644 --- a/drivers/rc/lirc_dev.c +++ b/drivers/rc/lirc_dev.c @@ -103,6 +103,8 @@ static const struct file_operations g_lirc_fops = lirc_write, /* write */ NULL, /* seek */ lirc_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ lirc_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/sensors/aht10.c b/drivers/sensors/aht10.c index 8b79b3deac5d9..514e0c96eb275 100644 --- a/drivers/sensors/aht10.c +++ b/drivers/sensors/aht10.c @@ -116,6 +116,8 @@ static const struct file_operations g_aht10fops = aht10_write, /* write */ NULL, /* seek */ aht10_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , aht10_unlink /* unlink */ diff --git a/drivers/sensors/hc_sr04.c b/drivers/sensors/hc_sr04.c index 5f637bf4b6897..2b956b9140111 100644 --- a/drivers/sensors/hc_sr04.c +++ b/drivers/sensors/hc_sr04.c @@ -90,6 +90,8 @@ static const struct file_operations g_hcsr04ops = hcsr04_write, /* write */ NULL, /* seek */ hcsr04_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ hcsr04_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/sensors/hdc1008.c b/drivers/sensors/hdc1008.c index b6a78277dc6cb..44f83ed33b818 100644 --- a/drivers/sensors/hdc1008.c +++ b/drivers/sensors/hdc1008.c @@ -161,6 +161,8 @@ static const struct file_operations g_hdc1008fops = hdc1008_write, /* write */ NULL, /* seek */ hdc1008_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , hdc1008_unlink /* unlink */ diff --git a/drivers/sensors/hts221.c b/drivers/sensors/hts221.c index 71f0c166340a1..18b6ee31b102e 100644 --- a/drivers/sensors/hts221.c +++ b/drivers/sensors/hts221.c @@ -157,6 +157,8 @@ static const struct file_operations g_humidityops = hts221_write, /* write */ NULL, /* seek */ hts221_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ hts221_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/sensors/lis2dh.c b/drivers/sensors/lis2dh.c index 7869480abab85..445f9b9f4264a 100644 --- a/drivers/sensors/lis2dh.c +++ b/drivers/sensors/lis2dh.c @@ -154,6 +154,8 @@ static const struct file_operations g_lis2dhops = lis2dh_write, /* write */ NULL, /* seek */ lis2dh_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ lis2dh_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/sensors/max44009.c b/drivers/sensors/max44009.c index fcbe397b9d467..840c4bdcb8572 100644 --- a/drivers/sensors/max44009.c +++ b/drivers/sensors/max44009.c @@ -112,6 +112,8 @@ static const struct file_operations g_alsops = max44009_write, /* write */ NULL, /* seek */ max44009_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ max44009_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/sensors/scd30.c b/drivers/sensors/scd30.c index febb52e66e936..54317a85f0cb3 100644 --- a/drivers/sensors/scd30.c +++ b/drivers/sensors/scd30.c @@ -182,6 +182,8 @@ static const struct file_operations g_scd30fops = scd30_write, /* write */ NULL, /* seek */ scd30_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , scd30_unlink /* unlink */ diff --git a/drivers/sensors/scd41.c b/drivers/sensors/scd41.c index 015b8f319b82c..74288c4f5b69d 100644 --- a/drivers/sensors/scd41.c +++ b/drivers/sensors/scd41.c @@ -190,6 +190,8 @@ static const struct file_operations g_scd41fops = scd41_write, /* write */ NULL, /* seek */ scd41_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , scd41_unlink /* unlink */ diff --git a/drivers/sensors/sensor.c b/drivers/sensors/sensor.c index 0ca7184839c55..417554f06358c 100644 --- a/drivers/sensors/sensor.c +++ b/drivers/sensors/sensor.c @@ -167,6 +167,8 @@ static const struct file_operations g_sensor_fops = sensor_write, /* write */ NULL, /* seek */ sensor_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ sensor_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/sensors/sgp30.c b/drivers/sensors/sgp30.c index b013d8228fb7a..e9ad20336e1d3 100644 --- a/drivers/sensors/sgp30.c +++ b/drivers/sensors/sgp30.c @@ -159,6 +159,8 @@ static const struct file_operations g_sgp30fops = sgp30_write, /* write */ NULL, /* seek */ sgp30_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , sgp30_unlink /* unlink */ diff --git a/drivers/sensors/sht21.c b/drivers/sensors/sht21.c index de59fc2a523f1..e3146638135ff 100644 --- a/drivers/sensors/sht21.c +++ b/drivers/sensors/sht21.c @@ -131,6 +131,8 @@ static const struct file_operations g_sht21fops = sht21_write, /* write */ NULL, /* seek */ sht21_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , sht21_unlink /* unlink */ diff --git a/drivers/sensors/sht3x.c b/drivers/sensors/sht3x.c index 15d781490f142..ffcb146ce2a70 100644 --- a/drivers/sensors/sht3x.c +++ b/drivers/sensors/sht3x.c @@ -170,6 +170,8 @@ static const struct file_operations g_sht3xfops = sht3x_write, /* write */ NULL, /* seek */ sht3x_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , sht3x_unlink /* unlink */ diff --git a/drivers/sensors/sps30.c b/drivers/sensors/sps30.c index ed7e47a3f1d7e..37f7f010c0efa 100644 --- a/drivers/sensors/sps30.c +++ b/drivers/sensors/sps30.c @@ -175,6 +175,8 @@ static const struct file_operations g_sps30fops = sps30_write, /* write */ NULL, /* seek */ sps30_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , sps30_unlink /* unlink */ diff --git a/drivers/sensors/usensor.c b/drivers/sensors/usensor.c index 3974abd31faa3..e0d1dda2a5174 100644 --- a/drivers/sensors/usensor.c +++ b/drivers/sensors/usensor.c @@ -81,6 +81,8 @@ static const struct file_operations g_usensor_fops = usensor_write, /* write */ NULL, /* seek */ usensor_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL, /* poll */ }; diff --git a/drivers/serial/pty.c b/drivers/serial/pty.c index a9181ecdb7225..c06cb6fd26e07 100644 --- a/drivers/serial/pty.c +++ b/drivers/serial/pty.c @@ -127,6 +127,8 @@ static const struct file_operations g_pty_fops = pty_write, /* write */ NULL, /* seek */ pty_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ pty_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , pty_unlink /* unlink */ diff --git a/drivers/serial/serial.c b/drivers/serial/serial.c index 37e9e0aca7322..48c8dc069a79a 100644 --- a/drivers/serial/serial.c +++ b/drivers/serial/serial.c @@ -126,6 +126,8 @@ static const struct file_operations g_serialops = uart_write, /* write */ NULL, /* seek */ uart_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ uart_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/serial/uart_bth4.c b/drivers/serial/uart_bth4.c index 8978bd5312ea9..08421df006b5a 100644 --- a/drivers/serial/uart_bth4.c +++ b/drivers/serial/uart_bth4.c @@ -90,6 +90,8 @@ static const struct file_operations g_uart_bth4_ops = uart_bth4_write, /* write */ NULL, /* seek */ uart_bth4_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ uart_bth4_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/spi/spi_driver.c b/drivers/spi/spi_driver.c index 767eaec314262..583344d72d4ba 100644 --- a/drivers/spi/spi_driver.c +++ b/drivers/spi/spi_driver.c @@ -99,6 +99,8 @@ static const struct file_operations spidrvr_fops = spidrvr_write, /* write */ NULL, /* seek */ spidrvr_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , spidrvr_unlink /* unlink */ diff --git a/drivers/spi/spi_slave_driver.c b/drivers/spi/spi_slave_driver.c index 61f0e6c0e968d..c2eaff7672399 100644 --- a/drivers/spi/spi_slave_driver.c +++ b/drivers/spi/spi_slave_driver.c @@ -127,6 +127,8 @@ static const struct file_operations g_spislavefops = spi_slave_write, /* write */ NULL, /* seek */ NULL, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , spi_slave_unlink /* unlink */ diff --git a/drivers/syslog/ramlog.c b/drivers/syslog/ramlog.c index dfc3e7dad0687..5019cf231fd84 100644 --- a/drivers/syslog/ramlog.c +++ b/drivers/syslog/ramlog.c @@ -114,6 +114,8 @@ static const struct file_operations g_ramlogfops = ramlog_file_write, /* write */ NULL, /* seek */ ramlog_file_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ ramlog_file_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/timers/rtc.c b/drivers/timers/rtc.c index 04507b917bc24..b77405bd1ade0 100644 --- a/drivers/timers/rtc.c +++ b/drivers/timers/rtc.c @@ -129,6 +129,8 @@ static const struct file_operations rtc_fops = rtc_write, /* write */ NULL, /* seek */ rtc_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , rtc_unlink /* unlink */ diff --git a/drivers/usbdev/adb.c b/drivers/usbdev/adb.c index 888e4bd4d170c..42ec3d5a2e5c3 100755 --- a/drivers/usbdev/adb.c +++ b/drivers/usbdev/adb.c @@ -254,6 +254,8 @@ static const struct file_operations g_adb_fops = adb_char_write, /* write */ NULL, /* seek */ NULL, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ adb_char_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/usbhost/usbhost_cdcmbim.c b/drivers/usbhost/usbhost_cdcmbim.c index a59ecce32397b..fb63be65883d1 100644 --- a/drivers/usbhost/usbhost_cdcmbim.c +++ b/drivers/usbhost/usbhost_cdcmbim.c @@ -347,6 +347,8 @@ static const struct file_operations cdcwdm_fops = cdcwdm_write, /* write */ NULL, /* seek */ NULL, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ cdcwdm_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/usbhost/usbhost_hidkbd.c b/drivers/usbhost/usbhost_hidkbd.c index 9d91aa9eaa13d..53690b986bddc 100644 --- a/drivers/usbhost/usbhost_hidkbd.c +++ b/drivers/usbhost/usbhost_hidkbd.c @@ -341,6 +341,8 @@ static const struct file_operations g_hidkbd_fops = usbhost_write, /* write */ NULL, /* seek */ NULL, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ usbhost_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/usbhost/usbhost_hidmouse.c b/drivers/usbhost/usbhost_hidmouse.c index 770f061401bdc..a7b430e846254 100644 --- a/drivers/usbhost/usbhost_hidmouse.c +++ b/drivers/usbhost/usbhost_hidmouse.c @@ -391,6 +391,8 @@ static const struct file_operations g_hidmouse_fops = usbhost_write, /* write */ NULL, /* seek */ NULL, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ usbhost_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/usbhost/usbhost_xboxcontroller.c b/drivers/usbhost/usbhost_xboxcontroller.c index cc8c0b3fefcbe..0a467f58fd6a0 100644 --- a/drivers/usbhost/usbhost_xboxcontroller.c +++ b/drivers/usbhost/usbhost_xboxcontroller.c @@ -296,6 +296,8 @@ static const struct file_operations g_xboxcontroller_fops = usbhost_write, /* write */ NULL, /* seek */ usbhost_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ usbhost_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/usbmisc/fusb301.c b/drivers/usbmisc/fusb301.c index 48b86e76d9b95..a64d77d3d6534 100644 --- a/drivers/usbmisc/fusb301.c +++ b/drivers/usbmisc/fusb301.c @@ -94,6 +94,8 @@ static const struct file_operations g_fusb301ops = fusb301_write, /* write */ NULL, /* seek */ fusb301_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ fusb301_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/usbmisc/fusb303.c b/drivers/usbmisc/fusb303.c index 9d94840c76cef..d64b5055c3888 100644 --- a/drivers/usbmisc/fusb303.c +++ b/drivers/usbmisc/fusb303.c @@ -128,6 +128,8 @@ static const struct file_operations g_fusb303ops = fusb303_write, /* write */ NULL, /* seek */ fusb303_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ fusb303_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/usrsock/usrsock_dev.c b/drivers/usrsock/usrsock_dev.c index 34a8ad3cca049..9bf410a24c228 100644 --- a/drivers/usrsock/usrsock_dev.c +++ b/drivers/usrsock/usrsock_dev.c @@ -103,6 +103,8 @@ static const struct file_operations g_usrsockdevops = usrsockdev_write, /* write */ usrsockdev_seek, /* seek */ NULL, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ usrsockdev_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/video/fb.c b/drivers/video/fb.c index bc7fd7b5bc3ce..6edc13dc17e17 100644 --- a/drivers/video/fb.c +++ b/drivers/video/fb.c @@ -39,6 +39,7 @@ #include #include #include +#include /**************************************************************************** * Private Types @@ -70,6 +71,8 @@ static ssize_t fb_write(FAR struct file *filep, FAR const char *buffer, size_t buflen); static off_t fb_seek(FAR struct file *filep, off_t offset, int whence); static int fb_ioctl(FAR struct file *filep, int cmd, unsigned long arg); +static int fb_mmap(FAR struct file *filep, + FAR struct mm_map_entry_s *map); static int fb_poll(FAR struct file *filep, FAR struct pollfd *fds, bool setup); @@ -85,6 +88,8 @@ static const struct file_operations fb_fops = fb_write, /* write */ fb_seek, /* seek */ fb_ioctl, /* ioctl */ + NULL, /* truncate */ + fb_mmap, /* mmap */ fb_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ @@ -281,18 +286,6 @@ static int fb_ioctl(FAR struct file *filep, int cmd, unsigned long arg) switch (cmd) { - case FIOC_MMAP: /* Get color plane info */ - { - FAR void **ppv = (FAR void **)((uintptr_t)arg); - - /* Return the address corresponding to the start of frame buffer. */ - - DEBUGASSERT(ppv != NULL); - *ppv = fb->fbmem; - ret = OK; - } - break; - case FBIOGET_VIDEOINFO: /* Get color plane info */ { FAR struct fb_videoinfo_s *vinfo = @@ -682,6 +675,29 @@ static int fb_ioctl(FAR struct file *filep, int cmd, unsigned long arg) return ret; } +static int fb_mmap(FAR struct file *filep, FAR struct mm_map_entry_s *map) +{ + FAR struct inode *inode; + FAR struct fb_chardev_s *fb; + int ret = -EINVAL; + + /* Get the framebuffer instance */ + + DEBUGASSERT(filep != NULL && filep->f_inode != NULL); + inode = filep->f_inode; + fb = (FAR struct fb_chardev_s *)inode->i_private; + + /* Return the address corresponding to the start of frame buffer. */ + + if (map->offset + map->length <= fb->fblen) + { + map->vaddr = (FAR char *)fb->fbmem + map->offset; + ret = OK; + } + + return ret; +} + /**************************************************************************** * Name: fb_poll * diff --git a/drivers/video/video.c b/drivers/video/video.c index 110012e4e4631..f6d07e9998261 100644 --- a/drivers/video/video.c +++ b/drivers/video/video.c @@ -38,6 +38,7 @@ #include #include +#include #include "video_framebuff.h" @@ -197,6 +198,8 @@ static ssize_t video_read(FAR struct file *filep, static ssize_t video_write(FAR struct file *filep, FAR const char *buffer, size_t buflen); static int video_ioctl(FAR struct file *filep, int cmd, unsigned long arg); +static int video_mmap(FAR struct file *filep, + FAR struct mm_map_entry_s *map); /* Common function */ @@ -284,6 +287,8 @@ static const struct file_operations g_video_fops = video_write, /* write */ NULL, /* seek */ video_ioctl, /* ioctl */ + NULL, /* truncate */ + video_mmap, /* mmap */ NULL /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ @@ -3184,13 +3189,6 @@ static int video_ioctl(FAR struct file *filep, int cmd, unsigned long arg) (FAR struct v4s_ext_controls_scene *)arg); break; - case FIOC_MMAP: - DEBUGASSERT((FAR void **)(uintptr_t)arg != NULL); - *(FAR void **)((uintptr_t)arg) = priv->video_inf.bufheap; - ret = OK; - - break; - default: verr("Unrecognized cmd: %d\n", cmd); ret = - ENOTTY; @@ -3200,6 +3198,21 @@ static int video_ioctl(FAR struct file *filep, int cmd, unsigned long arg) return ret; } +static int video_mmap(FAR struct file *filep, FAR struct mm_map_entry_s *map) +{ + FAR struct inode *inode = filep->f_inode; + FAR video_mng_t *priv = (FAR video_mng_t *)inode->i_private; + int ret = -EINVAL; + + if (map) + { + map->vaddr = priv->video_inf.bufheap + map->offset; + ret = OK; + } + + return ret; +} + static FAR void *video_register(FAR const char *devpath) { FAR video_mng_t *priv; diff --git a/drivers/wireless/cc1101.c b/drivers/wireless/cc1101.c index 4787c35d1a7e7..496f9b4dd1e39 100644 --- a/drivers/wireless/cc1101.c +++ b/drivers/wireless/cc1101.c @@ -305,6 +305,8 @@ static const struct file_operations g_cc1101ops = cc1101_file_write, /* write */ NULL, /* seek */ NULL, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ cc1101_file_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/wireless/gs2200m.c b/drivers/wireless/gs2200m.c index d16183bb0b653..8c1dc3647d525 100644 --- a/drivers/wireless/gs2200m.c +++ b/drivers/wireless/gs2200m.c @@ -231,6 +231,8 @@ static const struct file_operations g_gs2200m_fops = gs2200m_write, /* write */ NULL, /* seek */ gs2200m_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ gs2200m_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/wireless/lpwan/sx127x/sx127x.c b/drivers/wireless/lpwan/sx127x/sx127x.c index 3388e2ce9f3c1..8c2f898c47fe6 100644 --- a/drivers/wireless/lpwan/sx127x/sx127x.c +++ b/drivers/wireless/lpwan/sx127x/sx127x.c @@ -451,6 +451,8 @@ static const struct file_operations sx127x_fops = sx127x_write, /* write */ NULL, /* seek */ sx127x_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ sx127x_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/drivers/wireless/nrf24l01.c b/drivers/wireless/nrf24l01.c index 9779532d1cefc..44973dae65762 100644 --- a/drivers/wireless/nrf24l01.c +++ b/drivers/wireless/nrf24l01.c @@ -239,6 +239,8 @@ static const struct file_operations nrf24l01_fops = nrf24l01_write, /* write */ NULL, /* seek */ nrf24l01_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ nrf24l01_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/fs/binfs/fs_binfs.c b/fs/binfs/fs_binfs.c index c10d9ff3dd70f..758d8c31f7cf9 100644 --- a/fs/binfs/fs_binfs.c +++ b/fs/binfs/fs_binfs.c @@ -109,12 +109,13 @@ const struct mountpt_operations binfs_operations = NULL, /* write */ NULL, /* seek */ binfs_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL, /* sync */ binfs_dup, /* dup */ binfs_fstat, /* fstat */ NULL, /* fchstat */ - NULL, /* truncate */ binfs_opendir, /* opendir */ binfs_closedir, /* closedir */ diff --git a/fs/cromfs/fs_cromfs.c b/fs/cromfs/fs_cromfs.c index 3f08a6d48253d..c80584871bf05 100644 --- a/fs/cromfs/fs_cromfs.c +++ b/fs/cromfs/fs_cromfs.c @@ -184,12 +184,13 @@ const struct mountpt_operations cromfs_operations = NULL, /* write */ NULL, /* seek */ cromfs_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL, /* sync */ cromfs_dup, /* dup */ cromfs_fstat, /* fstat */ NULL, /* fchstat */ - NULL, /* truncate */ cromfs_opendir, /* opendir */ cromfs_closedir, /* closedir */ diff --git a/fs/fat/fs_fat32.c b/fs/fat/fs_fat32.c index c0163af64af91..5086868e18276 100644 --- a/fs/fat/fs_fat32.c +++ b/fs/fat/fs_fat32.c @@ -115,12 +115,12 @@ const struct mountpt_operations fat_operations = fat_write, /* write */ fat_seek, /* seek */ fat_ioctl, /* ioctl */ - + fat_truncate, /* truncate */ + NULL, /* mmap */ fat_sync, /* sync */ fat_dup, /* dup */ fat_fstat, /* fstat */ NULL, /* fchstat */ - fat_truncate, /* truncate */ fat_opendir, /* opendir */ fat_closedir, /* closedir */ diff --git a/fs/hostfs/hostfs.c b/fs/hostfs/hostfs.c index b6e50ddb4e30d..1bb795fe545e0 100644 --- a/fs/hostfs/hostfs.c +++ b/fs/hostfs/hostfs.c @@ -142,12 +142,13 @@ const struct mountpt_operations hostfs_operations = hostfs_write, /* write */ hostfs_seek, /* seek */ hostfs_ioctl, /* ioctl */ + hostfs_ftruncate, /* ftruncate */ + NULL, /* mmap */ hostfs_sync, /* sync */ hostfs_dup, /* dup */ hostfs_fstat, /* fstat */ hostfs_fchstat, /* fchstat */ - hostfs_ftruncate, /* ftruncate */ hostfs_opendir, /* opendir */ hostfs_closedir, /* closedir */ diff --git a/fs/littlefs/lfs_vfs.c b/fs/littlefs/lfs_vfs.c index 49bf16cf6208a..22b55e50484ed 100644 --- a/fs/littlefs/lfs_vfs.c +++ b/fs/littlefs/lfs_vfs.c @@ -140,12 +140,13 @@ const struct mountpt_operations littlefs_operations = littlefs_write, /* write */ littlefs_seek, /* seek */ littlefs_ioctl, /* ioctl */ + littlefs_truncate, /* truncate */ + NULL, /* mmap */ littlefs_sync, /* sync */ littlefs_dup, /* dup */ littlefs_fstat, /* fstat */ NULL, /* fchstat */ - littlefs_truncate, /* truncate */ littlefs_opendir, /* opendir */ littlefs_closedir, /* closedir */ diff --git a/fs/mmap/README.txt b/fs/mmap/README.txt index 4f6ba6c317736..59cecd0569d7f 100644 --- a/fs/mmap/README.txt +++ b/fs/mmap/README.txt @@ -14,7 +14,7 @@ conditions where mmap() can be supported: 1. mmap can be used to support eXecute In Place (XIP) on random access media under the following very restrictive conditions: - a. The filesystem supports the FIOC_MMAP ioctl command. Any file + a. The filesystem implements the mmap file operation. Any file system that maps files contiguously on the media should support this ioctl. (vs. file system that scatter files over the media in non-contiguous sectors). As of this writing, ROMFS is the diff --git a/fs/mmap/fs_mmap.c b/fs/mmap/fs_mmap.c index c99da4c2c059e..5717ed1cd9603 100644 --- a/fs/mmap/fs_mmap.c +++ b/fs/mmap/fs_mmap.c @@ -23,6 +23,7 @@ ****************************************************************************/ #include +#include #include #include @@ -49,7 +50,6 @@ static int file_mmap_(FAR struct file *filep, FAR void *start, size_t length, int prot, int flags, off_t offset, bool kernel, FAR void **mapped) { - FAR void *addr; int ret; /* Since only a tiny subset of mmap() functionality, we have to verify many @@ -135,14 +135,33 @@ static int file_mmap_(FAR struct file *filep, FAR void *start, #endif } - /* Perform the ioctl to get the base address of the file in 'mapped' - * in memory. (casting to uintptr_t first eliminates complaints on some - * architectures where the sizeof long is different from the size of - * a pointer). + /* Call driver's mmap to get the base address of the file in 'mapped' + * in memory. */ - ret = file_ioctl(filep, FIOC_MMAP, (unsigned long)((uintptr_t)&addr)); - if (ret < 0) + if (filep->f_inode && filep->f_inode->u.i_ops->mmap != NULL) + { + /* Pass the information about the mapping in mm_map_entry_s structure. + * The driver may alter the structure, and if it supports unmap, it + * will also add it to the kernel maintained list of mappings. + */ + + struct mm_map_entry_s map = + { + NULL, /* sq_entry_t */ + start, length, offset, + prot, flags, + NULL, /* priv */ + NULL /* munmap */ + }; + + ret = filep->f_inode->u.i_ops->mmap(filep, &map); + if (ret == OK) + { + *mapped = (void *)map.vaddr; + } + } + else { /* Not directly mappable, probably because the underlying media does * not support random access. @@ -155,15 +174,14 @@ static int file_mmap_(FAR struct file *filep, FAR void *start, return rammap(filep, length, offset, kernel, mapped); #else - ferr("ERROR: file_ioctl(FIOC_MMAP) failed: %d\n", ret); - return ret; + ferr("ERROR: mmap not supported \n"); + return -ENOSYS; #endif } - /* Return the offset address */ + /* Return */ - *mapped = (FAR void *)(((FAR uint8_t *)addr) + offset); - return OK; + return ret; } /**************************************************************************** @@ -197,7 +215,7 @@ int file_mmap(FAR struct file *filep, FAR void *start, size_t length, * 1. mmap() is the API that is used to support direct access to random * access media under the following very restrictive conditions: * - * a. The filesystem supports the FIOC_MMAP ioctl command. Any file + * a. The filesystem implements the mmap file operation. Any file * system that maps files contiguously on the media should support * this ioctl. (vs. file system that scatter files over the media * in non-contiguous sectors). As of this writing, ROMFS is the diff --git a/fs/mmap/fs_munmap.c b/fs/mmap/fs_munmap.c index 2bcef5de3aec2..7b8e57d4927b4 100644 --- a/fs/mmap/fs_munmap.c +++ b/fs/mmap/fs_munmap.c @@ -196,7 +196,7 @@ int file_munmap(FAR void *start, size_t length) * 1. mmap() is the API that is used to support direct access to random * access media under the following very restrictive conditions: * - * a. The filesystem supports the FIOC_MMAP ioctl command. Any file + * a. The filesystem impelements the mmap file operation. Any file * system that maps files contiguously on the media should support * this ioctl. (vs. file system that scatter files over the media * in non-contiguous sectors). As of this writing, ROMFS is the diff --git a/fs/mqueue/mq_open.c b/fs/mqueue/mq_open.c index 6158e23e1c6ce..d6c9647bcf78f 100644 --- a/fs/mqueue/mq_open.c +++ b/fs/mqueue/mq_open.c @@ -60,6 +60,8 @@ static const struct file_operations g_nxmq_fileops = NULL, /* write */ NULL, /* seek */ NULL, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ nxmq_file_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/fs/nfs/nfs_vfsops.c b/fs/nfs/nfs_vfsops.c index 73f2b5fa869c6..7eae707be206f 100644 --- a/fs/nfs/nfs_vfsops.c +++ b/fs/nfs/nfs_vfsops.c @@ -198,12 +198,13 @@ const struct mountpt_operations nfs_operations = nfs_write, /* write */ NULL, /* seek */ NULL, /* ioctl */ + nfs_truncate, /* truncate */ + NULL, /* mmap */ NULL, /* sync */ nfs_dup, /* dup */ nfs_fstat, /* fstat */ nfs_fchstat, /* fchstat */ - nfs_truncate, /* truncate */ nfs_opendir, /* opendir */ nfs_closedir, /* closedir */ diff --git a/fs/nxffs/nxffs_initialize.c b/fs/nxffs/nxffs_initialize.c index c594bd83857a8..9b7e124a5448f 100644 --- a/fs/nxffs/nxffs_initialize.c +++ b/fs/nxffs/nxffs_initialize.c @@ -54,16 +54,17 @@ const struct mountpt_operations nxffs_operations = nxffs_write, /* write */ NULL, /* seek -- Use f_pos in struct file */ nxffs_ioctl, /* ioctl */ - - NULL, /* sync -- No buffered data */ - nxffs_dup, /* dup */ - nxffs_fstat, /* fstat */ - NULL, /* fchstat */ #ifdef __NO_TRUNCATE_SUPPORT__ nxffs_truncate, /* truncate */ #else NULL, /* truncate */ #endif + NULL, /* mmap */ + + NULL, /* sync -- No buffered data */ + nxffs_dup, /* dup */ + nxffs_fstat, /* fstat */ + NULL, /* fchstat */ nxffs_opendir, /* opendir */ nxffs_closedir, /* closedir */ diff --git a/fs/procfs/fs_procfs.c b/fs/procfs/fs_procfs.c index 76be82222237c..7b446cc12eee3 100644 --- a/fs/procfs/fs_procfs.c +++ b/fs/procfs/fs_procfs.c @@ -252,12 +252,13 @@ const struct mountpt_operations procfs_operations = procfs_write, /* write */ NULL, /* seek */ procfs_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL, /* sync */ procfs_dup, /* dup */ procfs_fstat, /* fstat */ NULL, /* fchstat */ - NULL, /* truncate */ procfs_opendir, /* opendir */ procfs_closedir, /* closedir */ diff --git a/fs/romfs/fs_romfs.c b/fs/romfs/fs_romfs.c index ad439a91e1a76..6d45fc48f6f0b 100644 --- a/fs/romfs/fs_romfs.c +++ b/fs/romfs/fs_romfs.c @@ -73,6 +73,8 @@ static ssize_t romfs_read(FAR struct file *filep, FAR char *buffer, static off_t romfs_seek(FAR struct file *filep, off_t offset, int whence); static int romfs_ioctl(FAR struct file *filep, int cmd, unsigned long arg); +static int romfs_mmap(FAR struct file *filep, + FAR struct mm_map_entry_s *map); static int romfs_dup(FAR const struct file *oldp, FAR struct file *newp); @@ -119,12 +121,13 @@ const struct mountpt_operations romfs_operations = NULL, /* write */ romfs_seek, /* seek */ romfs_ioctl, /* ioctl */ + NULL, /* truncate */ + romfs_mmap, /* mmap */ NULL, /* sync */ romfs_dup, /* dup */ romfs_fstat, /* fstat */ NULL, /* fchstat */ - NULL, /* truncate */ romfs_opendir, /* opendir */ romfs_closedir, /* closedir */ @@ -577,9 +580,7 @@ static off_t romfs_seek(FAR struct file *filep, off_t offset, int whence) static int romfs_ioctl(FAR struct file *filep, int cmd, unsigned long arg) { - FAR struct romfs_mountpt_s *rm; FAR struct romfs_file_s *rf; - FAR void **ppv = (FAR void**)arg; finfo("cmd: %d arg: %08lx\n", cmd, arg); @@ -590,22 +591,10 @@ static int romfs_ioctl(FAR struct file *filep, int cmd, unsigned long arg) /* Recover our private data from the struct file instance */ rf = filep->f_priv; - rm = filep->f_inode->i_private; - - DEBUGASSERT(rm != NULL); /* Only one ioctl command is supported */ - if (cmd == FIOC_MMAP && rm->rm_xipbase && ppv) - { - /* Return the address on the media corresponding to the start of - * the file. - */ - - *ppv = rm->rm_xipbase + rf->rf_startoffset; - return OK; - } - else if (cmd == FIOC_FILEPATH) + if (cmd == FIOC_FILEPATH) { FAR char *ptr = (FAR char *)((uintptr_t)arg); inode_getpath(filep->f_inode, ptr); @@ -617,6 +606,35 @@ static int romfs_ioctl(FAR struct file *filep, int cmd, unsigned long arg) return -ENOTTY; } +static int romfs_mmap(FAR struct file *filep, FAR struct mm_map_entry_s *map) +{ + FAR struct romfs_mountpt_s *rm; + FAR struct romfs_file_s *rf; + int ret = -EINVAL; + + /* Sanity checks */ + + DEBUGASSERT(filep->f_priv != NULL && filep->f_inode != NULL); + + /* Recover our private data from the struct file instance */ + + rf = filep->f_priv; + rm = filep->f_inode->i_private; + + /* Return the address on the media corresponding to the start of + * the file. + */ + + if (map && rm && rm->rm_xipbase && rf && + map->offset + map->length <= rf->rf_size) + { + map->vaddr = rm->rm_xipbase + rf->rf_startoffset + map->offset; + ret = OK; + } + + return ret; +} + /**************************************************************************** * Name: romfs_dup ****************************************************************************/ diff --git a/fs/rpmsgfs/rpmsgfs.c b/fs/rpmsgfs/rpmsgfs.c index 50a71a9af1d60..b56f5662bd61c 100644 --- a/fs/rpmsgfs/rpmsgfs.c +++ b/fs/rpmsgfs/rpmsgfs.c @@ -161,12 +161,13 @@ const struct mountpt_operations rpmsgfs_operations = rpmsgfs_write, /* write */ rpmsgfs_seek, /* seek */ rpmsgfs_ioctl, /* ioctl */ + rpmsgfs_ftruncate, /* ftruncate */ + NULL, /* mmap */ rpmsgfs_sync, /* sync */ rpmsgfs_dup, /* dup */ rpmsgfs_fstat, /* fstat */ rpmsgfs_fchstat, /* fchstat */ - rpmsgfs_ftruncate, /* ftruncate */ rpmsgfs_opendir, /* opendir */ rpmsgfs_closedir, /* closedir */ diff --git a/fs/smartfs/smartfs_smart.c b/fs/smartfs/smartfs_smart.c index a9b22c761f5ea..93486cedf7fae 100644 --- a/fs/smartfs/smartfs_smart.c +++ b/fs/smartfs/smartfs_smart.c @@ -140,12 +140,13 @@ const struct mountpt_operations smartfs_operations = smartfs_write, /* write */ smartfs_seek, /* seek */ smartfs_ioctl, /* ioctl */ + smartfs_truncate, /* truncate */ + NULL, /* mmap */ smartfs_sync, /* sync */ smartfs_dup, /* dup */ smartfs_fstat, /* fstat */ NULL, /* fchstat */ - smartfs_truncate, /* truncate */ smartfs_opendir, /* opendir */ smartfs_closedir, /* closedir */ diff --git a/fs/socket/socket.c b/fs/socket/socket.c index 37e66fc7ced99..30c5716b76f96 100644 --- a/fs/socket/socket.c +++ b/fs/socket/socket.c @@ -64,6 +64,8 @@ static const struct file_operations g_sock_fileops = sock_file_write, /* write */ NULL, /* seek */ sock_file_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ sock_file_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/fs/spiffs/src/spiffs_vfs.c b/fs/spiffs/src/spiffs_vfs.c index 369d557a4c56d..b3c9b77fbd4b9 100644 --- a/fs/spiffs/src/spiffs_vfs.c +++ b/fs/spiffs/src/spiffs_vfs.c @@ -141,12 +141,13 @@ const struct mountpt_operations spiffs_operations = spiffs_write, /* write */ spiffs_seek, /* seek */ spiffs_ioctl, /* ioctl */ + spiffs_truncate, /* truncate */ + NULL, /* mmap */ spiffs_sync, /* sync */ spiffs_dup, /* dup */ spiffs_fstat, /* fstat */ NULL, /* fchstat */ - spiffs_truncate, /* truncate */ spiffs_opendir, /* opendir */ spiffs_closedir, /* closedir */ diff --git a/fs/tmpfs/fs_tmpfs.c b/fs/tmpfs/fs_tmpfs.c index dc17b5121cb67..7db062e62a900 100644 --- a/fs/tmpfs/fs_tmpfs.c +++ b/fs/tmpfs/fs_tmpfs.c @@ -134,11 +134,12 @@ static ssize_t tmpfs_read(FAR struct file *filep, FAR char *buffer, static ssize_t tmpfs_write(FAR struct file *filep, FAR const char *buffer, size_t buflen); static off_t tmpfs_seek(FAR struct file *filep, off_t offset, int whence); -static int tmpfs_ioctl(FAR struct file *filep, int cmd, unsigned long arg); static int tmpfs_sync(FAR struct file *filep); static int tmpfs_dup(FAR const struct file *oldp, FAR struct file *newp); static int tmpfs_fstat(FAR const struct file *filep, FAR struct stat *buf); static int tmpfs_truncate(FAR struct file *filep, off_t length); +static int tmpfs_mmap(FAR struct file *filep, + FAR struct mm_map_entry_s *map); static int tmpfs_opendir(FAR struct inode *mountpt, FAR const char *relpath, FAR struct fs_dirent_s **dir); @@ -176,13 +177,14 @@ const struct mountpt_operations tmpfs_operations = tmpfs_read, /* read */ tmpfs_write, /* write */ tmpfs_seek, /* seek */ - tmpfs_ioctl, /* ioctl */ + NULL, /* ioctl */ + tmpfs_truncate, /* truncate */ + tmpfs_mmap, /* mmap */ tmpfs_sync, /* sync */ tmpfs_dup, /* dup */ tmpfs_fstat, /* fstat */ NULL, /* fchstat */ - tmpfs_truncate, /* truncate */ tmpfs_opendir, /* opendir */ tmpfs_closedir, /* closedir */ @@ -1640,16 +1642,11 @@ static off_t tmpfs_seek(FAR struct file *filep, off_t offset, int whence) return position; } -/**************************************************************************** - * Name: tmpfs_ioctl - ****************************************************************************/ - -static int tmpfs_ioctl(FAR struct file *filep, int cmd, unsigned long arg) +static int tmpfs_mmap(FAR struct file *filep, FAR struct mm_map_entry_s *map) { FAR struct tmpfs_file_s *tfo; - FAR void **ppv = (FAR void**)arg; + int ret = -EINVAL; - finfo("filep: %p cmd: %d arg: %08lx\n", filep, cmd, arg); DEBUGASSERT(filep->f_priv != NULL && filep->f_inode != NULL); /* Recover our private data from the struct file instance */ @@ -1658,20 +1655,13 @@ static int tmpfs_ioctl(FAR struct file *filep, int cmd, unsigned long arg) DEBUGASSERT(tfo != NULL); - /* Only one ioctl command is supported */ - - if (cmd == FIOC_MMAP && ppv != NULL) + if (map && map->offset + map->length <= tfo->tfo_size) { - /* Return the address on the media corresponding to the start of - * the file. - */ - - *ppv = (FAR void *)tfo->tfo_data; - return OK; + map->vaddr = tfo->tfo_data + map->offset; + ret = OK; } - ferr("ERROR: Invalid cmd: %d\n", cmd); - return -ENOTTY; + return ret; } /**************************************************************************** diff --git a/fs/unionfs/fs_unionfs.c b/fs/unionfs/fs_unionfs.c index 3b0b23d4d9278..6aa10c83f22bd 100644 --- a/fs/unionfs/fs_unionfs.c +++ b/fs/unionfs/fs_unionfs.c @@ -222,12 +222,13 @@ const struct mountpt_operations unionfs_operations = unionfs_write, /* write */ unionfs_seek, /* seek */ unionfs_ioctl, /* ioctl */ + unionfs_truncate, /* truncate */ + NULL, /* mmap */ unionfs_sync, /* sync */ unionfs_dup, /* dup */ unionfs_fstat, /* fstat */ unionfs_fchstat, /* fchstat */ - unionfs_truncate, /* truncate */ unionfs_opendir, /* opendir */ unionfs_closedir, /* closedir */ diff --git a/fs/userfs/fs_userfs.c b/fs/userfs/fs_userfs.c index 8dff18f5d4b78..fad5276b98908 100644 --- a/fs/userfs/fs_userfs.c +++ b/fs/userfs/fs_userfs.c @@ -160,12 +160,13 @@ const struct mountpt_operations userfs_operations = userfs_write, /* write */ userfs_seek, /* seek */ userfs_ioctl, /* ioctl */ + userfs_truncate, /* truncate */ + NULL, /* mmap */ userfs_sync, /* sync */ userfs_dup, /* dup */ userfs_fstat, /* fstat */ userfs_fchstat, /* fchstat */ - userfs_truncate, /* truncate */ userfs_opendir, /* opendir */ userfs_closedir, /* closedir */ diff --git a/fs/vfs/fs_epoll.c b/fs/vfs/fs_epoll.c index 3214207b7320b..18450c2798d7d 100644 --- a/fs/vfs/fs_epoll.c +++ b/fs/vfs/fs_epoll.c @@ -104,6 +104,8 @@ static const struct file_operations g_epoll_ops = NULL, /* write */ NULL, /* seek */ NULL, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ epoll_do_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/fs/vfs/fs_eventfd.c b/fs/vfs/fs_eventfd.c index 30321d20bc692..4b2769d900ad4 100644 --- a/fs/vfs/fs_eventfd.c +++ b/fs/vfs/fs_eventfd.c @@ -100,6 +100,8 @@ static const struct file_operations g_eventfd_fops = eventfd_do_write, /* write */ NULL, /* seek */ NULL, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ #ifdef CONFIG_EVENT_FD_POLL eventfd_do_poll /* poll */ #else diff --git a/fs/vfs/fs_signalfd.c b/fs/vfs/fs_signalfd.c index f8f5741b7a285..8c26ba8481f2b 100644 --- a/fs/vfs/fs_signalfd.c +++ b/fs/vfs/fs_signalfd.c @@ -79,6 +79,8 @@ static const struct file_operations g_signalfd_fileops = NULL, /* write */ NULL, /* seek */ NULL, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ signalfd_file_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , NULL /* unlink */ diff --git a/fs/vfs/fs_truncate.c b/fs/vfs/fs_truncate.c index e67339a54b580..c4c0297640b06 100644 --- a/fs/vfs/fs_truncate.c +++ b/fs/vfs/fs_truncate.c @@ -31,7 +31,6 @@ #include #include -#include #include "inode/inode.h" @@ -74,16 +73,9 @@ int file_truncate(FAR struct file *filep, off_t length) return -EINVAL; } - /* If inode is not mountpoint try ioctl first */ - - if (!INODE_IS_MOUNTPT(inode)) - { - return file_ioctl(filep, FIOC_TRUNCATE, length); - } - - if (inode->u.i_mops == NULL) + if (inode->u.i_ops == NULL) { - fwarn("WARNING: Not a (regular) file on a mounted file system.\n"); + fwarn("WARNING: Not a file\n"); return -EINVAL; } @@ -91,7 +83,7 @@ int file_truncate(FAR struct file *filep, off_t length) * possible not the only indicator -- sufficient, but not necessary") */ - if (inode->u.i_mops->write == NULL) + if (inode->u.i_ops->write == NULL) { fwarn("WARNING: File system is read-only\n"); return -EROFS; @@ -101,7 +93,7 @@ int file_truncate(FAR struct file *filep, off_t length) * a write-able file system. */ - if (inode->u.i_mops->truncate == NULL) + if (inode->u.i_ops->truncate == NULL) { fwarn("WARNING: File system does not support the truncate() method\n"); return -ENOSYS; @@ -109,7 +101,7 @@ int file_truncate(FAR struct file *filep, off_t length) /* Yes, then tell the file system to truncate this file */ - return inode->u.i_mops->truncate(filep, length); + return inode->u.i_ops->truncate(filep, length); } /**************************************************************************** diff --git a/graphics/nxterm/nxterm_driver.c b/graphics/nxterm/nxterm_driver.c index ddc45450392b6..7fd79f7bc28d4 100644 --- a/graphics/nxterm/nxterm_driver.c +++ b/graphics/nxterm/nxterm_driver.c @@ -66,6 +66,8 @@ const struct file_operations g_nxterm_drvrops = nxterm_write, /* write */ NULL, /* seek */ nxterm_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ nxterm_poll /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , nxterm_unlink /* unlink */ @@ -82,6 +84,8 @@ const struct file_operations g_nxterm_drvrops = nxterm_write, /* write */ NULL, /* seek */ nxterm_ioctl, /* ioctl */ + NULL, /* truncate */ + NULL, /* mmap */ NULL /* poll */ #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS , nxterm_unlink /* unlink */ diff --git a/include/nuttx/fs/fs.h b/include/nuttx/fs/fs.h index 951ad825acba0..21e31adf03e24 100644 --- a/include/nuttx/fs/fs.h +++ b/include/nuttx/fs/fs.h @@ -37,6 +37,7 @@ #include #include +#include /**************************************************************************** * Pre-processor Definitions @@ -212,6 +213,8 @@ struct file_operations size_t buflen); off_t (*seek)(FAR struct file *filep, off_t offset, int whence); int (*ioctl)(FAR struct file *filep, int cmd, unsigned long arg); + int (*truncate)(FAR struct file *filep, off_t length); + int (*mmap)(FAR struct file *filep, FAR struct mm_map_entry_s *map); /* The two structures need not be common after this point */ @@ -298,6 +301,8 @@ struct mountpt_operations size_t buflen); off_t (*seek)(FAR struct file *filep, off_t offset, int whence); int (*ioctl)(FAR struct file *filep, int cmd, unsigned long arg); + int (*truncate)(FAR struct file *filep, off_t length); + int (*mmap)(FAR struct file *filep, FAR struct mm_map_entry_s *map); /* The two structures need not be common after this point. The following * are extended methods needed to deal with the unique needs of mounted @@ -311,7 +316,6 @@ struct mountpt_operations int (*fstat)(FAR const struct file *filep, FAR struct stat *buf); int (*fchstat)(FAR const struct file *filep, FAR const struct stat *buf, int flags); - int (*truncate)(FAR struct file *filep, off_t length); /* Directory operations */ diff --git a/include/nuttx/fs/ioctl.h b/include/nuttx/fs/ioctl.h index a249122c63bf3..a231e85f82d1d 100644 --- a/include/nuttx/fs/ioctl.h +++ b/include/nuttx/fs/ioctl.h @@ -134,62 +134,54 @@ #define _FIOCVALID(c) (_IOC_TYPE(c)==_FIOCBASE) #define _FIOC(nr) _IOC(_FIOCBASE,nr) -#define FIOC_MMAP _FIOC(0x0001) /* IN: Location to return address (void **) - * OUT: If media is directly accessible, - * return (void*) base address - * of file - */ -#define FIOC_REFORMAT _FIOC(0x0002) /* IN: None +#define FIOC_REFORMAT _FIOC(0x0001) /* IN: None * OUT: None */ -#define FIOC_OPTIMIZE _FIOC(0x0003) /* IN: The number of bytes to recover +#define FIOC_OPTIMIZE _FIOC(0x0002) /* IN: The number of bytes to recover * (ignored on most file systems) * OUT: None */ -#define FIOC_FILEPATH _FIOC(0x0004) /* IN: FAR char *(length >= PATH_MAX) +#define FIOC_FILEPATH _FIOC(0x0003) /* IN: FAR char *(length >= PATH_MAX) * OUT: The full file path */ -#define FIOC_INTEGRITY _FIOC(0x0005) /* Run a consistency check on the +#define FIOC_INTEGRITY _FIOC(0x0004) /* Run a consistency check on the * file system media. * IN: None * OUT: None */ -#define FIOC_DUMP _FIOC(0x0006) /* Dump logical content of media. +#define FIOC_DUMP _FIOC(0x0005) /* Dump logical content of media. * IN: None * OUT: None */ -#define FIONREAD _FIOC(0x0007) /* IN: Location to return value (int *) +#define FIONREAD _FIOC(0x0006) /* IN: Location to return value (int *) * OUT: Bytes readable from this fd */ -#define FIONWRITE _FIOC(0x0008) /* IN: Location to return value (int *) +#define FIONWRITE _FIOC(0x0007) /* IN: Location to return value (int *) * OUT: Number bytes in send queue */ -#define FIONSPACE _FIOC(0x0009) /* IN: Location to return value (int *) +#define FIONSPACE _FIOC(0x0008) /* IN: Location to return value (int *) * OUT: Free space in send queue. */ -#define FIONUSERFS _FIOC(0x000a) /* IN: Pointer to struct usefs_config_s +#define FIONUSERFS _FIOC(0x0009) /* IN: Pointer to struct usefs_config_s * holding userfs configuration. * OUT: Instance number is returned on * success. */ -#define FIONBIO _FIOC(0x000b) /* IN: Boolean option takes an +#define FIONBIO _FIOC(0x000a) /* IN: Boolean option takes an * int value. * OUT: Origin option. */ -#define FIOCLEX _FIOC(0x000c) /* IN: None +#define FIOCLEX _FIOC(0x000b) /* IN: None * OUT: None */ -#define FIONCLEX _FIOC(0x000d) /* IN: None +#define FIONCLEX _FIOC(0x000c) /* IN: None * OUT: None */ -#define FIOC_NOTIFY _FIOC(0x000e) /* IN: Pointer to struct automount_notify_s +#define FIOC_NOTIFY _FIOC(0x000d) /* IN: Pointer to struct automount_notify_s * holding automount notification * configuration * OUT: None */ -#define FIOC_TRUNCATE _FIOC(0x0010) /* IN: Length of the file after truncate - * OUT: None - */ /* NuttX file system ioctl definitions **************************************/ diff --git a/include/nuttx/mm/map.h b/include/nuttx/mm/map.h new file mode 100644 index 0000000000000..cf1d38f0474e6 --- /dev/null +++ b/include/nuttx/mm/map.h @@ -0,0 +1,73 @@ +/**************************************************************************** + * include/nuttx/mm/map.h + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + ****************************************************************************/ + +#ifndef __INCLUDE_NUTTX_MM_MAP_H +#define __INCLUDE_NUTTX_MM_MAP_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include +#include +#include + +/**************************************************************************** + * Public Types + ****************************************************************************/ + +/* A memory mapping list item */ + +struct mm_map_entry_s +{ + FAR struct mm_map_entry *flink; /* this is used as sq_entry_t */ + FAR const void *vaddr; + size_t length; + off_t offset; + int prot; + int flags; + FAR void *priv; + + /* Drivers which register mappings may also + * implement the unmap function to undo anything done in mmap. + * Nb. Implementation must NOT use "this_task()->group" since + * this is not valid during process exit. The argument "group" will be + * NULL in this case. + */ + + int (*munmap)(FAR struct task_group_s *group, + FAR struct mm_map_entry_s *map, + FAR void *start, + size_t length); +}; + +/* A structure for the task group */ + +struct mm_map_s +{ + sq_queue_t mm_map_sq; + mutex_t mm_map_mutex; +}; + +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ + +#endif /* __INCLUDE_NUTTX_MM_MM_MAP_H */