summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2007-05-13 20:20:07 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2007-05-13 20:20:07 +0000
commit499922dce09f07ab44e742c0f8f162c0e531d977 (patch)
treee0bd53edc05f76614e6bcb8d4684caa8a329d60b
parenta4dac8aa40ce4c09bba389f1722f8e3b8ead7f1c (diff)
downloadnuttx-499922dce09f07ab44e742c0f8f162c0e531d977.tar.gz
nuttx-499922dce09f07ab44e742c0f8f162c0e531d977.tar.bz2
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/ChangeLog1
-rw-r--r--nuttx/Documentation/NuttX.html4
-rw-r--r--nuttx/arch/sim/src/up_blockdevice.c31
-rw-r--r--nuttx/configs/sim/defconfig3
-rw-r--r--nuttx/include/nuttx/fs.h29
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 */