diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2007-05-13 20:20:07 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2007-05-13 20:20:07 +0000 |
commit | 499922dce09f07ab44e742c0f8f162c0e531d977 (patch) | |
tree | e0bd53edc05f76614e6bcb8d4684caa8a329d60b | |
parent | a4dac8aa40ce4c09bba389f1722f8e3b8ead7f1c (diff) | |
download | px4-nuttx-499922dce09f07ab44e742c0f8f162c0e531d977.tar.gz px4-nuttx-499922dce09f07ab44e742c0f8f162c0e531d977.tar.bz2 px4-nuttx-499922dce09f07ab44e742c0f8f162c0e531d977.zip |
Misc. changes to support FAT32 fileysystem
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@219 42af7a65-404d-4744-a932-0658087f49c3
-rw-r--r-- | nuttx/ChangeLog | 1 | ||||
-rw-r--r-- | nuttx/Documentation/NuttX.html | 4 | ||||
-rw-r--r-- | nuttx/arch/sim/src/up_blockdevice.c | 31 | ||||
-rw-r--r-- | nuttx/configs/sim/defconfig | 3 | ||||
-rw-r--r-- | nuttx/include/nuttx/fs.h | 29 |
5 files changed, 39 insertions, 29 deletions
diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog index 5cf5bae78..a19ddd995 100644 --- a/nuttx/ChangeLog +++ b/nuttx/ChangeLog @@ -129,5 +129,6 @@ development board (untested) * Added support for block devices. * Simulated target now exports a VFAT filesystem + * Begin support for VFAT filesystem (not yet functional) * Added mount() and umount() * Started m68322 diff --git a/nuttx/Documentation/NuttX.html b/nuttx/Documentation/NuttX.html index b04f26693..9472259bd 100644 --- a/nuttx/Documentation/NuttX.html +++ b/nuttx/Documentation/NuttX.html @@ -8,7 +8,7 @@ <tr align="center" bgcolor="#e4e4e4"> <td> <h1><big><font color="#3c34ec"><i>NuttX RTOS</i></font></big></h1> - <p>Last Updated: May 12, 2007</p> + <p>Last Updated: May 13, 2007</p> </td> </tr> </table> @@ -508,9 +508,9 @@ Other memory: development board (untested) * Added support for block devices. * Simulated target now exports a VFAT filesystem + * Begin support for VFAT filesystem (not yet functional) * Added mount() and umount() * Started m68322 - * Added support for the NXP 214x processor on the mcu123.com lpc214x </pre></ul> <table width ="100%"> diff --git a/nuttx/arch/sim/src/up_blockdevice.c b/nuttx/arch/sim/src/up_blockdevice.c index fee57c95c..273cad950 100644 --- a/nuttx/arch/sim/src/up_blockdevice.c +++ b/nuttx/arch/sim/src/up_blockdevice.c @@ -60,13 +60,13 @@ * Private Function Prototypes ****************************************************************************/ -static int up_open(FAR struct file *filp); -static int up_close(FAR struct file *filp); -static ssize_t up_read(FAR struct file *filp, char *buffer, +static int up_open(FAR struct inode *inode); +static int up_close(FAR struct inode *inode); +static ssize_t up_read(FAR struct inode *inode, unsigned char *buffer, size_t start_sector, size_t nsectors); -static ssize_t up_write(FAR struct file *filp, const char *buffer, +static ssize_t up_write(FAR struct inode *inode, const unsigned char *buffer, size_t start_sector, size_t nsectors); -static size_t up_geometry(FAR struct file *filp, struct geometry *geometry); +static int up_geometry(FAR struct inode *inode, struct geometry *geometry); /**************************************************************************** * Private Data @@ -92,7 +92,7 @@ static const struct block_operations g_bops = * ****************************************************************************/ -static int up_open(FAR struct file *filp) +static int up_open(FAR struct inode *inode) { return OK; } @@ -104,7 +104,7 @@ static int up_open(FAR struct file *filp) * ****************************************************************************/ -static int up_close(FAR struct file *filp) +static int up_close(FAR struct inode *inode) { return OK; } @@ -116,10 +116,9 @@ static int up_close(FAR struct file *filp) * ****************************************************************************/ -static ssize_t up_read(FAR struct file *filp, char *buffer, +static ssize_t up_read(FAR struct inode *inode, unsigned char *buffer, size_t start_sector, size_t nsectors) { - struct inode *inode = filp->f_inode; if (inode) { char *src = inode->i_private; @@ -143,10 +142,9 @@ static ssize_t up_read(FAR struct file *filp, char *buffer, * ****************************************************************************/ -static ssize_t up_write(FAR struct file *filp, const char *buffer, +static ssize_t up_write(FAR struct inode *inode, const unsigned char *buffer, size_t start_sector, size_t nsectors) { - struct inode *inode = filp->f_inode; if (inode) { char *dest = inode->i_private; @@ -170,14 +168,15 @@ static ssize_t up_write(FAR struct file *filp, const char *buffer, * ****************************************************************************/ -static size_t up_geometry(FAR struct file *filp, struct geometry *geometry) +static int up_geometry(FAR struct inode *inode, struct geometry *geometry) { - struct inode *inode = filp->f_inode; if (geometry) { - geometry->geo_available = (inode->i_private != NULL); - geometry->geo_nsectors = NSECTORS; - geometry->geo_sectorsize = LOGICAL_SECTOR_SIZE; + geometry->geo_available = (inode->i_private != NULL); + geometry->geo_mediachanged = FALSE; + geometry->geo_writeenabled = TRUE; + geometry->geo_nsectors = NSECTORS; + geometry->geo_sectorsize = LOGICAL_SECTOR_SIZE; return OK; } return -EINVAL; diff --git a/nuttx/configs/sim/defconfig b/nuttx/configs/sim/defconfig index 9fac3753e..c61d757fa 100644 --- a/nuttx/configs/sim/defconfig +++ b/nuttx/configs/sim/defconfig @@ -198,7 +198,8 @@ CONFIG_PREALLOC_TIMERS=8 # # FAT filesystem configuration -# CONFIG_FAT - Enable FAT filesystem support +# CONFIG_FS_FAT - Enable FAT filesystem support +# CONFIG_FAT_SECTORSIZE - Max supported sector size CONFIG_FS_FAT=y # diff --git a/nuttx/include/nuttx/fs.h b/nuttx/include/nuttx/fs.h index e328ad978..19c7ba3be 100644 --- a/nuttx/include/nuttx/fs.h +++ b/nuttx/include/nuttx/fs.h @@ -81,25 +81,30 @@ struct file_operations struct geometry { - boolean geo_available; /* False if the device is not available */ - size_t geo_nsectors; /* Number of sectors on the device */ - size_t geo_sectorsize; /* Size of one sector */ + boolean geo_available; /* TRUE: The device is vailable */ + boolean geo_mediachanged; /* TRUE: The media has changed since last query */ + boolean geo_writeenabled; /* TRUE: It is okay to write to this device */ + size_t geo_nsectors; /* Number of sectors on the device */ + size_t geo_sectorsize; /* Size of one sector */ }; /* This structure is provided by block devices when they register with the - * system. It is used by file systems to perform filesystem transfers. + * system. It is used by file systems to perform filesystem transfers. It + * differs from the normal driver vtable in several ways -- most notably in + * that it deals in struct inode vs. struct filep. */ +struct inode; struct block_operations { - int (*open)(FAR struct file *filp); - int (*close)(FAR struct file *filp); - ssize_t (*read)(FAR struct file *filp, char *buffer, + int (*open)(FAR struct inode *inode); + int (*close)(FAR struct inode *inode); + ssize_t (*read)(FAR struct inode *inode, unsigned char *buffer, size_t start_sector, size_t nsectors); - ssize_t (*write)(FAR struct file *filp, const char *buffer, + ssize_t (*write)(FAR struct inode *inode, const unsigned char *buffer, size_t start_sector, size_t nsectors); - size_t (*geometry)(FAR struct file *filp, struct geometry *geometry); - int (*ioctl)(FAR struct file *, int, unsigned long); + int (*geometry)(FAR struct inode *inode, struct geometry *geometry); + int (*ioctl)(FAR struct inode *inode, int cmd, unsigned long arg); }; /* This structure is provided by a filesystem to describe a mount point. @@ -135,6 +140,10 @@ struct mountpt_operations int (*bind)(FAR struct inode *blkdriver, const void *data, void **handle); int (*unbind)(void *handle); + + /* NOTE: More operations will be needed here to support: disk usage stats, stat(), + * sync(), unlink(), mkdir(), chmod(), rename(), etc. + */ }; /* This structure represents one inode in the Nuttx psuedo-file system */ |