Merged nuttx/nuttx into master

This commit is contained in:
ziggurat29 2016-05-26 12:57:31 -05:00
commit 4cc722aa1a
17 changed files with 398 additions and 117 deletions

View File

@ -11810,3 +11810,6 @@
driver already supports a 1-wire interface, but this driver uses the
same serial logic to implement a lower half driver much like the I2C
lower half driver. From Aleksandr Vyhovanec (2015-05-25).
* fs/: Add logic to detach a file structure from a file descriptor.
This is for use only within the OS. It permits an open file or driver
to be used across multiple threads (2016-05-26).

View File

@ -86,7 +86,7 @@ void stm32_boardinitialize(void)
}
#endif
#ifdef CONFIG_CANUTILS_UAVCAN
#ifdef CONFIG_CANUTILS_LIBUAVCAN
(void)stm32_configgpio(GPIO_CAN1_RX);
(void)stm32_configgpio(GPIO_CAN1_TX);
#endif

View File

@ -46,6 +46,7 @@
#include <nuttx/irq.h>
#include <nuttx/arch.h>
#include <nuttx/fs/fs.h>
#include <nuttx/input/ajoystick.h>
#include "stm32_gpio.h"
@ -108,10 +109,6 @@
AJOY_BUTTON_7_BIT )
#endif
/****************************************************************************
* Private Types
****************************************************************************/
/****************************************************************************
* Private Function Prototypes
****************************************************************************/
@ -158,9 +155,9 @@ static const struct ajoy_lowerhalf_s g_ajoylower =
};
#ifndef NO_JOYSTICK_ADC
/* Descriptor for the open ADC driver */
/* Thread-independent file structure for the open ADC driver */
static int g_adcfd = -1;
static struct file g_adcfile;
#endif
/* Current interrupt handler and argument */
@ -209,7 +206,7 @@ static int ajoy_sample(FAR const struct ajoy_lowerhalf_s *lower,
* channels are enabled).
*/
nread = read(g_adcfd, adcmsg, MAX_ADC_CHANNELS * sizeof(struct adc_msg_s));
nread = file_read(&g_adcfile, adcmsg, MAX_ADC_CHANNELS * sizeof(struct adc_msg_s));
if (nread < 0)
{
int errcode = get_errno();
@ -454,6 +451,8 @@ int board_ajoy_initialize(void)
int i;
#ifndef NO_JOYSTICK_ADC
int fd;
ivdbg("Initialize ADC driver: /dev/adc0\n");
/* Initialize ADC. We will need this to read the ADC inputs */
@ -465,15 +464,27 @@ int board_ajoy_initialize(void)
return ret;
}
/* Open the ADC driver for reading */
/* Open the ADC driver for reading. */
g_adcfd = open("/dev/adc0", O_RDONLY);
if (g_adcfd < 0)
fd = open("/dev/adc0", O_RDONLY);
if (fd < 0)
{
int errcode = get_errno();
idbg("ERROR: Failed to open /dev/adc0: %d\n", errcode);
return -errcode;
}
/* Detach the file structure from the file descriptor so that it can be
* used on any thread.
*/
ret = file_detach(fd, &g_adcfile);
if (ret < 0)
{
idbg("ERROR: Failed to detach from file descriptor: %d\n", ret);
(void)close(fd);
return ret;
}
#endif
/* Configure the GPIO pins as interrupting inputs. NOTE: This is
@ -497,8 +508,7 @@ int board_ajoy_initialize(void)
{
idbg("ERROR: ajoy_register failed: %d\n", ret);
#ifndef NO_JOYSTICK_ADC
close(g_adcfd);
g_adcfd = -1;
file_close_detached(&g_adcfile);
#endif
}

View File

@ -1,7 +1,7 @@
/****************************************************************************
* configs/nucleo-f3x1re/src/stm32_ajoystick.c
*
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
* Copyright (C) 2014, 2016 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
@ -45,6 +45,7 @@
#include <debug.h>
#include <nuttx/arch.h>
#include <nuttx/fs/fs.h>
#include <nuttx/input/ajoystick.h>
#include "stm32l4_gpio.h"
@ -107,10 +108,6 @@
AJOY_BUTTON_7_BIT )
#endif
/****************************************************************************
* Private Types
****************************************************************************/
/****************************************************************************
* Private Function Prototypes
****************************************************************************/
@ -157,9 +154,9 @@ static const struct ajoy_lowerhalf_s g_ajoylower =
};
#ifndef NO_JOYSTICK_ADC
/* Descriptor for the open ADC driver */
/* Thread-independent file structure for the open ADC driver */
static int g_adcfd = -1;
static struct file g_adcfile;
#endif
/* Current interrupt handler and argument */
@ -208,7 +205,7 @@ static int ajoy_sample(FAR const struct ajoy_lowerhalf_s *lower,
* channels are enabled).
*/
nread = read(g_adcfd, adcmsg, MAX_ADC_CHANNELS * sizeof(struct adc_msg_s));
nread = file_read(&g_adcfile, adcmsg, MAX_ADC_CHANNELS * sizeof(struct adc_msg_s));
if (nread < 0)
{
int errcode = get_errno();
@ -453,6 +450,8 @@ int board_ajoy_initialize(void)
int i;
#ifndef NO_JOYSTICK_ADC
int fd;
ivdbg("Initialize ADC driver: /dev/adc0\n");
/* Initialize ADC. We will need this to read the ADC inputs */
@ -464,15 +463,27 @@ int board_ajoy_initialize(void)
return ret;
}
/* Open the ADC driver for reading */
/* Open the ADC driver for reading. */
g_adcfd = open("/dev/adc0", O_RDONLY);
if (g_adcfd < 0)
fd = open("/dev/adc0", O_RDONLY);
if (fd < 0)
{
int errcode = get_errno();
idbg("ERROR: Failed to open /dev/adc0: %d\n", errcode);
return -errcode;
}
/* Detach the file structure from the file descriptor so that it can be
* used on any thread.
*/
ret = file_detach(fd, &g_adcfile);
if (ret < 0)
{
idbg("ERROR: Failed to detach from file descriptor: %d\n", ret);
(void)close(fd);
return ret;
}
#endif
/* Configure the GPIO pins as interrupting inputs. NOTE: This is
@ -496,8 +507,7 @@ int board_ajoy_initialize(void)
{
idbg("ERROR: ajoy_register failed: %d\n", ret);
#ifndef NO_JOYSTICK_ADC
close(g_adcfd);
g_adcfd = -1;
file_close_detached(&g_adcfile);
#endif
}

View File

@ -555,7 +555,10 @@ Open Issues:
PMD_SECT_DOM(0) | PMD_SECT_XN)
#define MMU_STRONGLY_ORDERED (PMD_TYPE_SECT | PMD_SECT_AP_RW1 | \
3. Assertions. On a fatal assertions, other CPUs need to be stopped.
3. Assertions. On a fatal assertions, other CPUs need to be stopped. The SCR,
however, only supports disabling CPUs 1 through 3. Perhaps if the assertion
occurs on CPUn, n > 0, then it should use and SGI to perform the assertion
on CPU0 always. From CPU0, CPU1-3 can be disabled.
4. Caching probabaly interferes with spinlocks as they are currently implemented.
Waiting on a cached copy of the spinlock may result in a hang or a failure to

View File

@ -46,6 +46,7 @@
#include <nuttx/irq.h>
#include <nuttx/arch.h>
#include <nuttx/fs/fs.h>
#include <nuttx/input/ajoystick.h>
#include "sam_pio.h"
@ -93,10 +94,6 @@
AJOY_BUTTON_5_BIT | AJOY_BUTTON_6_BIT | \
AJOY_BUTTON_7_BIT )
/****************************************************************************
* Private Types
****************************************************************************/
/****************************************************************************
* Private Function Prototypes
****************************************************************************/
@ -141,9 +138,9 @@ static const struct ajoy_lowerhalf_s g_ajoylower =
.al_enable = ajoy_enable,
};
/* Descriptor for the open ADC driver */
/* Thread-independent file structure for the open ADC driver */
static int g_adcfd = -1;
static struct file g_adcfile;
/* Current interrupt handler and argument */
@ -190,7 +187,7 @@ static int ajoy_sample(FAR const struct ajoy_lowerhalf_s *lower,
* channels are enabled).
*/
nread = read(g_adcfd, adcmsg, SAM_ADC_NCHANNELS * sizeof(struct adc_msg_s));
nread = file_read(&g_adcfile, adcmsg, MAX_ADC_CHANNELS * sizeof(struct adc_msg_s));
if (nread < 0)
{
int errcode = get_errno();
@ -405,6 +402,7 @@ static int ajoy_interrupt(int irq, FAR void *context)
int sam_ajoy_initialization(void)
{
int ret;
int fd;
int i;
/* Initialize ADC. We will need this to read the ADC inputs */
@ -416,16 +414,28 @@ int sam_ajoy_initialization(void)
return ret;
}
/* Open the ADC driver for reading */
/* Open the ADC driver for reading. */
g_adcfd = open("/dev/adc0", O_RDONLY);
if (g_adcfd < 0)
fd = open("/dev/adc0", O_RDONLY);
if (fd < 0)
{
int errcode = get_errno();
idbg("ERROR: Failed to open /dev/adc0: %d\n", errcode);
return -errcode;
}
/* Detach the file structure from the file descriptor so that it can be
* used on any thread.
*/
ret = file_detach(fd, &g_adcfile);
if (ret < 0)
{
idbg("ERROR: Failed to detach from file descriptor: %d\n", ret);
(void)close(fd);
return ret;
}
/* Configure the GPIO pins as interrupting inputs. */
for (i = 0; i < AJOY_NGPIOS; i++)
@ -449,8 +459,7 @@ int sam_ajoy_initialization(void)
if (ret < 0)
{
idbg("ERROR: ajoy_register failed: %d\n", ret);
close(g_adcfd);
g_adcfd = -1;
file_close_detached(&g_adcfile);
}
return ret;

View File

@ -104,10 +104,10 @@ void stm32_boardinitialize(void)
}
#endif
#ifdef CONFIG_CANUTILS_UAVCAN
#ifdef CONFIG_CANUTILS_LIBUAVCAN
(void)stm32_configgpio(GPIO_CAN1_RX);
(void)stm32_configgpio(GPIO_CAN1_TX);
# if CONFIG_UAVCAN_STM32_NUM_IFACES > 1
# if CONFIG_LIBUAVCAN_STM32_NUM_IFACES > 1
(void)stm32_configgpio(GPIO_CAN2_RX);
(void)stm32_configgpio(GPIO_CAN2_TX);
# endif

View File

@ -373,22 +373,7 @@ if IOEXPANDER
source drivers/ioexpander/Kconfig
endif # IOEXPANDER
menuconfig LCD
bool "LCD Driver Support"
default n
select NX_LCDDRIVER if NX
---help---
Drivers for parallel and serial LCD and OLED type devices. These
drivers support interfaces as defined in include/nuttx/lcd/lcd.h
This selection is necessary to enable support for LCD drivers in
drivers/lcd as well as for board-specific LCD drivers in the configs/
subdirectories.
if LCD
source drivers/lcd/Kconfig
endif # LCD
source drivers/leds/Kconfig
menuconfig MMCSD

View File

@ -3,7 +3,23 @@
# see the file kconfig-language.txt in the NuttX tools repository.
#
comment "Common LCD Settings"
menu "LCD Driver Support"
menuconfig LCD
bool "Graphic LCD Driver Support"
default n
select NX_LCDDRIVER if NX
---help---
Drivers for parallel and serial LCD and OLED type devices. These
drivers support interfaces as defined in include/nuttx/lcd/lcd.h
This selection is necessary to enable support for LCD drivers in
drivers/lcd as well as for board-specific LCD drivers in the configs/
subdirectories.
if LCD
comment "Common Graphipc LCD Settings"
config LCD_CONSOLE
bool "LCD console output"
@ -990,8 +1006,21 @@ config LCD_RA8875_EXTENDED
driver anyway.
endif # LCD_RA8875
endif # LCD
comment "Alphanumeric/Segment LCD Devices"
menuconfig SLCD
bool "Alphanumeric/Segment LCD Devices"
default n
---help---
Drivers for Alphanumeric ans Segment LCDs (SLCDs). These
drivers support interfaces as defined in include/nuttx/lcd/slcd_ioctl.h
amd slcd_codec.h
This selection is necessary to enable support for SLCD drivers in
drivers/lcd as well as for board-specific LCD drivers in the configs/
subdirectories.
if SLCD
config LCD_LCD1602
bool "LCD 1602"
@ -1018,3 +1047,6 @@ config LCD_BACKPACK
This driver supports known and unknown variants.
See pcf8574_lcd_backpack_readme.txt
endif # SLCD
endmenu # LCD Driver Support

View File

@ -37,7 +37,7 @@
ifeq ($(CONFIG_NX_LCDDRIVER),y)
# Include LCD drivers
# Include Graphics LCD drivers
ifeq ($(CONFIG_LCD_P14201),y)
CSRCS += p14201.c
@ -103,6 +103,22 @@ ifeq ($(CONFIG_LCD_RA8875),y)
CSRCS += ra8875.c
endif
# Include Alphanumeric/Segment LCD drivers too
ifeq ($(CONFIG_LCD_BACKPACK),y)
CSRCS += pcf8574_lcd_backpack.c
endif
# Include LCD driver build support
DEPPATH += --dep-path lcd
VPATH += :lcd
CFLAGS += ${shell $(INCDIR) $(INCDIROPT) "$(CC)" $(TOPDIR)$(DELIM)drivers$(DELIM)lcd}
else ifeq ($(CONFIG_SLCD),y)
# Include Alphanumeric/Segment LCD drivers only
ifeq ($(CONFIG_LCD_BACKPACK),y)
CSRCS += pcf8574_lcd_backpack.c
endif
@ -113,4 +129,3 @@ DEPPATH += --dep-path lcd
VPATH += :lcd
CFLAGS += ${shell $(INCDIR) $(INCDIROPT) "$(CC)" $(TOPDIR)$(DELIM)drivers$(DELIM)lcd}
endif

View File

@ -39,7 +39,7 @@ ifneq ($(CONFIG_NFILE_DESCRIPTORS),0)
CSRCS += fs_files.c fs_foreachinode.c fs_inode.c fs_inodeaddref.c
CSRCS += fs_inodebasename.c fs_inodefind.c fs_inoderelease.c
CSRCS += fs_inoderemove.c fs_inodereserve.c
CSRCS += fs_inoderemove.c fs_inodereserve.c fs_filedetach.c
# Include inode/utils build support

217
fs/inode/fs_filedetach.c Normal file
View File

@ -0,0 +1,217 @@
/****************************************************************************
* fs/inode/fs_filedetach.c
*
* Copyright (C) 2016 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <semaphore.h>
#include <assert.h>
#include <errno.h>
#include <nuttx/sched.h>
#include <nuttx/fs/fs.h>
#include "inode/inode.h"
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Name: _files_semtake
****************************************************************************/
static inline void _files_semtake(FAR struct filelist *list)
{
/* Take the semaphore (perhaps waiting) */
while (sem_wait(&list->fl_sem) != 0)
{
/* The only case that an error should occur here is if
* the wait was awakened by a signal.
*/
DEBUGASSERT(get_errno() == EINTR);
}
}
/****************************************************************************
* Name: _files_semgive
****************************************************************************/
#define _files_semgive(list) sem_post(&list->fl_sem)
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: file_detach
*
* Description:
* This function is used to device drivers to create a task-independent
* handle to an entity in the file system. file_detach() duplicates the
* 'struct file' that underlies the file descriptor, then closes the file
* descriptor.
*
* This function will fail if fd is not a valid file descriptor. In
* particular, it will fail if fd is a socket descriptor.
*
* Input Parameters:
* fd - The file descriptor to be detached. This descriptor will be
* closed and invalid if the file was successfully detached.
* filep - A pointer to a user provided memory location in which to
* received the duplicated, detached file structure.
*
* Returned Value:
* Zero (OK) is returned on success; A negated errno value is returned on
* any failure to indicate the nature of the failure.
*
****************************************************************************/
#if CONFIG_NFILE_DESCRIPTORS > 0
int file_detach(int fd, FAR struct file *filep)
{
FAR struct filelist *list;
FAR struct file *parent;
/* Verify the file descriptor range */
if (fd < 0 || fd >= CONFIG_NFILE_DESCRIPTORS)
{
/* Not a file descriptor (might be a socket descriptor) */
return -EBADF;
}
/* Get the thread-specific file list. It should never be NULL in this
* context.
*/
list = sched_getfiles();
DEBUGASSERT(list != NULL);
/* If the file was properly opened, there should be an inode assigned */
_files_semtake(list);
parent = &list->fl_files[fd];
if (parent->f_inode == NULL)
{
/* File is not open */
_files_semgive(list);
return -EBADF;
}
/* Duplicate the 'struct file' content into the user-provided file
* structure.
*/
filep->f_oflags = parent->f_oflags;
filep->f_pos = parent->f_pos;
filep->f_inode = parent->f_inode;
filep->f_priv = parent->f_priv;
/* Release the file descriptore *without* calling the drive close method
* and without decrementing the inode reference count. That will be done
* in file_close_detached().
*/
parent->f_oflags = 0;
parent->f_pos = 0;
parent->f_inode = NULL;
parent->f_priv = NULL;
_files_semgive(list);
return OK;
}
#endif
/****************************************************************************
* Name: file_close_detached
*
* Description:
* Close a file that was previously detached with file_detach().
*
* REVISIT: This is essentially the same as _files_close()
*
* Input Parameters:
* filep - A pointer to a user provided memory location containing the
* open file data returned by file_detach().
*
* Returned Value:
* Zero (OK) is returned on success; A negated errno value is returned on
* any failure to indicate the nature of the failure.
*
****************************************************************************/
int file_close_detached(FAR struct file *filep)
{
struct inode *inode;
int ret = OK;
DEBUGASSERT(filep != NULL);
inode = filep->f_inode;
/* Check if the struct file is open (i.e., assigned an inode) */
if (inode)
{
/* Close the file, driver, or mountpoint. */
if (inode->u.i_ops && inode->u.i_ops->close)
{
/* Perform the close operation */
ret = inode->u.i_ops->close(filep);
}
/* And release the inode */
inode_release(inode);
/* Reset the user file struct instance so that it cannot be reused. */
filep->f_oflags = 0;
filep->f_pos = 0;
filep->f_inode = NULL;
filep->f_priv = NULL;
}
return ret;
}

View File

@ -65,7 +65,7 @@ static void _files_semtake(FAR struct filelist *list)
while (sem_wait(&list->fl_sem) != 0)
{
/* The only case that an error should occr here is if
/* The only case that an error should occur here is if
* the wait was awakened by a signal.
*/
@ -362,9 +362,9 @@ int files_close(int fd)
/* If the file was properly opened, there should be an inode assigned */
if (fd < 0 || fd >= CONFIG_NFILE_DESCRIPTORS || !list->fl_files[fd].f_inode)
{
return -EBADF;
}
{
return -EBADF;
}
/* Perform the protected close operation */

View File

@ -105,7 +105,7 @@ int close(int fd)
#if CONFIG_NFILE_DESCRIPTORS > 0
/* Close the driver or mountpoint. NOTES: (1) there is no
* exclusion mechanism here , the driver or mountpoint must be
* exclusion mechanism here, the driver or mountpoint must be
* able to handle concurrent operations internally, (2) The driver
* may have been opened numerous times (for different file
* descriptors) and must also handle being closed numerous times.
@ -122,6 +122,7 @@ int close(int fd)
err = -ret;
goto errout;
}
return OK;
#endif

View File

@ -46,14 +46,6 @@
#include <nuttx/fs/fs.h>
#include "inode/inode.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/

View File

@ -52,14 +52,6 @@
#if CONFIG_NFILE_DESCRIPTORS > 0 && defined(CONFIG_NET) && CONFIG_NSOCKET_DESCRIPTORS > 0
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/

View File

@ -364,7 +364,6 @@ extern "C"
#define EXTERN extern
#endif
/* fs_inode.c ***************************************************************/
/****************************************************************************
* Name: fs_initialize
*
@ -376,7 +375,6 @@ extern "C"
void fs_initialize(void);
/* fs_foreachmountpoint.c ***************************************************/
/****************************************************************************
* Name: foreach_mountpoint
*
@ -401,7 +399,6 @@ void fs_initialize(void);
int foreach_mountpoint(foreach_mountpoint_t handler, FAR void *arg);
#endif
/* fs_registerdriver.c ******************************************************/
/****************************************************************************
* Name: register_driver
*
@ -428,7 +425,6 @@ int foreach_mountpoint(foreach_mountpoint_t handler, FAR void *arg);
int register_driver(FAR const char *path, FAR const struct file_operations *fops,
mode_t mode, FAR void *priv);
/* fs_registerblockdriver.c *************************************************/
/****************************************************************************
* Name: register_blockdriver
*
@ -458,7 +454,6 @@ int register_blockdriver(FAR const char *path,
FAR void *priv);
#endif
/* fs_unregisterdriver.c ****************************************************/
/****************************************************************************
* Name: unregister_driver
*
@ -469,7 +464,6 @@ int register_blockdriver(FAR const char *path,
int unregister_driver(const char *path);
/* fs_unregisterblockdriver.c ***********************************************/
/****************************************************************************
* Name: unregister_blockdriver
*
@ -480,7 +474,6 @@ int unregister_driver(const char *path);
int unregister_blockdriver(const char *path);
/* fs_open.c ****************************************************************/
/****************************************************************************
* Name: inode_checkflags
*
@ -491,7 +484,6 @@ int unregister_blockdriver(const char *path);
int inode_checkflags(FAR struct inode *inode, int oflags);
/* fs_files.c ***************************************************************/
/****************************************************************************
* Name: files_initlist
*
@ -529,7 +521,6 @@ void files_releaselist(FAR struct filelist *list);
int file_dup2(FAR struct file *filep1, FAR struct file *filep2);
#endif
/* fs_filedup.c *************************************************************/
/****************************************************************************
* Name: fs_dupfd OR dup
*
@ -541,7 +532,7 @@ int file_dup2(FAR struct file *filep1, FAR struct file *filep2);
* function IS dup().
*
* This alternative naming is used when dup could operate on both file and
* socket descritors to avoid drawing unused socket support into the link.
* socket descriptors to avoid drawing unused socket support into the link.
*
****************************************************************************/
@ -561,7 +552,6 @@ int fs_dupfd(int fd, int minfd);
int file_dup(FAR struct file *filep, int minfd);
/* fs_filedup2.c ************************************************************/
/****************************************************************************
* Name: fs_dupfd2 OR dup2
*
@ -584,7 +574,52 @@ int fs_dupfd2(int fd1, int fd2);
#endif
#endif
/* fs_openblockdriver.c *****************************************************/
/****************************************************************************
* Name: file_detach
*
* Description:
* This function is used to device drivers to create a task-independent
* handle to an entity in the file system. file_detach() duplicates the
* 'struct file' that underlies the file descriptor, then closes the file
* descriptor.
*
* This function will fail if fd is not a valid file descriptor. In
* particular, it will fail if fd is a socket descriptor.
*
* Input Parameters:
* fd - The file descriptor to be detached. This descriptor will be
* closed and invalid if the file was successfully detached.
* filep - A pointer to a user provided memory location in which to
* received the duplicated, detached file structure.
*
* Returned Value:
* Zero (OK) is returned on success; A negated errno value is returned on
* any failure to indicate the nature of the failure.
*
****************************************************************************/
#if CONFIG_NFILE_DESCRIPTORS > 0
int file_detach(int fd, FAR struct file *filep);
#endif
/****************************************************************************
* Name: file_close_detached
*
* Description:
* Close a file that was previously detached with file_detach().
*
* Input Parameters:
* filep - A pointer to a user provided memory location containing the
* open file data returned by file_detach().
*
* Returned Value:
* Zero (OK) is returned on success; A negated errno value is returned on
* any failure to indicate the nature of the failure.
*
****************************************************************************/
int file_close_detached(FAR struct file *filep);
/****************************************************************************
* Name: open_blockdriver
*
@ -613,7 +648,6 @@ int open_blockdriver(FAR const char *pathname, int mountflags,
FAR struct inode **ppinode);
#endif
/* fs_closeblockdriver.c ****************************************************/
/****************************************************************************
* Name: close_blockdriver
*
@ -635,7 +669,6 @@ int open_blockdriver(FAR const char *pathname, int mountflags,
int close_blockdriver(FAR struct inode *inode);
#endif
/* fs/vfs/fs_ioctl.c ********************************************************/
/****************************************************************************
* Name: fs_ioctl
*
@ -669,7 +702,6 @@ int close_blockdriver(FAR struct inode *inode);
int fs_ioctl(int fd, int req, unsigned long arg);
#endif
/* fs_fdopen.c **************************************************************/
/****************************************************************************
* Name: fs_fdopen
*
@ -684,7 +716,6 @@ struct tcb_s; /* Forward reference */
FAR struct file_struct *fs_fdopen(int fd, int oflags, FAR struct tcb_s *tcb);
#endif
/* libc/stdio/lib_fflush.c *************************************************/
/****************************************************************************
* Name: lib_flushall
*
@ -698,7 +729,6 @@ FAR struct file_struct *fs_fdopen(int fd, int oflags, FAR struct tcb_s *tcb);
int lib_flushall(FAR struct streamlist *list);
#endif
/* libc/misc/lib_sendfile.c *************************************************/
/****************************************************************************
* Name: lib_sendfile
*
@ -711,7 +741,6 @@ int lib_flushall(FAR struct streamlist *list);
ssize_t lib_sendfile(int outfd, int infd, off_t *offset, size_t count);
#endif
/* fs/fs_getfilep.c *********************************************************/
/****************************************************************************
* Name: fs_getfilep
*
@ -734,7 +763,6 @@ ssize_t lib_sendfile(int outfd, int infd, off_t *offset, size_t count);
FAR struct file *fs_getfilep(int fd);
#endif
/* fs/fs_read.c *************************************************************/
/****************************************************************************
* Name: file_read
*
@ -749,7 +777,6 @@ FAR struct file *fs_getfilep(int fd);
ssize_t file_read(FAR struct file *filep, FAR void *buf, size_t nbytes);
#endif
/* fs/fs_write.c ************************************************************/
/****************************************************************************
* Name: file_write
*
@ -764,7 +791,6 @@ ssize_t file_read(FAR struct file *filep, FAR void *buf, size_t nbytes);
ssize_t file_write(FAR struct file *filep, FAR const void *buf, size_t nbytes);
#endif
/* fs/fs_pread.c ************************************************************/
/****************************************************************************
* Name: file_pread
*
@ -780,7 +806,6 @@ ssize_t file_pread(FAR struct file *filep, FAR void *buf, size_t nbytes,
off_t offset);
#endif
/* fs/fs_pwrite.c ***********************************************************/
/****************************************************************************
* Name: file_pwrite
*
@ -796,7 +821,6 @@ ssize_t file_pwrite(FAR struct file *filep, FAR const void *buf,
size_t nbytes, off_t offset);
#endif
/* fs/fs_lseek.c ************************************************************/
/****************************************************************************
* Name: file_seek
*
@ -811,7 +835,6 @@ ssize_t file_pwrite(FAR struct file *filep, FAR const void *buf,
off_t file_seek(FAR struct file *filep, off_t offset, int whence);
#endif
/* fs/fs_fsync.c ************************************************************/
/****************************************************************************
* Name: file_fsync
*
@ -826,7 +849,6 @@ off_t file_seek(FAR struct file *filep, off_t offset, int whence);
int file_fsync(FAR struct file *filep);
#endif
/* fs/fs_fcntl.c ************************************************************/
/****************************************************************************
* Name: file_vfcntl
*
@ -841,7 +863,6 @@ int file_fsync(FAR struct file *filep);
int file_vfcntl(FAR struct file *filep, int cmd, va_list ap);
#endif
/* fs/fs_poll.c *************************************************************/
/****************************************************************************
* Function: file_poll
*
@ -864,7 +885,6 @@ int file_vfcntl(FAR struct file *filep, int cmd, va_list ap);
int file_poll(int fd, FAR struct pollfd *fds, bool setup);
#endif
/* drivers/dev_null.c *******************************************************/
/****************************************************************************
* Name: devnull_register
*
@ -875,7 +895,6 @@ int file_poll(int fd, FAR struct pollfd *fds, bool setup);
void devnull_register(void);
/* crypto/cryptodev.c *******************************************************/
/****************************************************************************
* Name: devcrypto_register
*
@ -886,7 +905,6 @@ void devnull_register(void);
void devcrypto_register(void);
/* drivers/dev_zero.c *******************************************************/
/****************************************************************************
* Name: devzero_register
*
@ -897,7 +915,6 @@ void devcrypto_register(void);
void devzero_register(void);
/* drivers/bch/bchdev_register.c ********************************************/
/****************************************************************************
* Name: bchdev_register
*
@ -910,7 +927,6 @@ void devzero_register(void);
int bchdev_register(FAR const char *blkdev, FAR const char *chardev,
bool readonly);
/* drivers/bch/bchdev_unregister.c ******************************************/
/****************************************************************************
* Name: bchdev_unregister
*
@ -926,7 +942,6 @@ int bchdev_unregister(FAR const char *chardev);
* are incompatible. One and only one access method should be implemented.
*/
/* drivers/bch/bchlib_setup.c ***********************************************/
/****************************************************************************
* Name: bchlib_setup
*
@ -938,7 +953,6 @@ int bchdev_unregister(FAR const char *chardev);
int bchlib_setup(FAR const char *blkdev, bool readonly, FAR void **handle);
/* drivers/bch/bchlib_teardown.c ********************************************/
/****************************************************************************
* Name: bchlib_teardown
*
@ -950,7 +964,6 @@ int bchlib_setup(FAR const char *blkdev, bool readonly, FAR void **handle);
int bchlib_teardown(FAR void *handle);
/* drivers/bch/bchlib_read.c ************************************************/
/****************************************************************************
* Name: bchlib_read
*
@ -963,7 +976,6 @@ int bchlib_teardown(FAR void *handle);
ssize_t bchlib_read(FAR void *handle, FAR char *buffer, size_t offset,
size_t len);
/* drivers/bch/bchlib_write.c ***********************************************/
/****************************************************************************
* Name: bchlib_write
*