mirror of
https://github.com/apache/nuttx.git
synced 2026-06-02 17:48:54 +08:00
romfs: add FAR for all pointer and optimize some code
Signed-off-by: Jiuzhu Dong <dongjiuzhu1@xiaomi.com>
This commit is contained in:
+13
-39
@@ -28,8 +28,6 @@
|
|||||||
#include <sys/statfs.h>
|
#include <sys/statfs.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -43,7 +41,6 @@
|
|||||||
#include <nuttx/fs/fs.h>
|
#include <nuttx/fs/fs.h>
|
||||||
#include <nuttx/fs/ioctl.h>
|
#include <nuttx/fs/ioctl.h>
|
||||||
#include <nuttx/fs/dirent.h>
|
#include <nuttx/fs/dirent.h>
|
||||||
#include <nuttx/mtd/mtd.h>
|
|
||||||
|
|
||||||
#include "fs_romfs.h"
|
#include "fs_romfs.h"
|
||||||
|
|
||||||
@@ -231,7 +228,7 @@ static int romfs_open(FAR struct file *filep, FAR const char *relpath,
|
|||||||
* file.
|
* file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
rf = (FAR struct romfs_file_s *)kmm_zalloc(sizeof(struct romfs_file_s));
|
rf = kmm_zalloc(sizeof(struct romfs_file_s));
|
||||||
if (!rf)
|
if (!rf)
|
||||||
{
|
{
|
||||||
ferr("ERROR: Failed to allocate private data\n");
|
ferr("ERROR: Failed to allocate private data\n");
|
||||||
@@ -273,11 +270,6 @@ static int romfs_open(FAR struct file *filep, FAR const char *relpath,
|
|||||||
|
|
||||||
rm->rm_refs++;
|
rm->rm_refs++;
|
||||||
|
|
||||||
romfs_semgive(rm);
|
|
||||||
return OK;
|
|
||||||
|
|
||||||
/* Error exits */
|
|
||||||
|
|
||||||
errout_with_semaphore:
|
errout_with_semaphore:
|
||||||
romfs_semgive(rm);
|
romfs_semgive(rm);
|
||||||
return ret;
|
return ret;
|
||||||
@@ -348,7 +340,7 @@ static ssize_t romfs_read(FAR struct file *filep, FAR char *buffer,
|
|||||||
FAR struct romfs_mountpt_s *rm;
|
FAR struct romfs_mountpt_s *rm;
|
||||||
FAR struct romfs_file_s *rf;
|
FAR struct romfs_file_s *rf;
|
||||||
unsigned int bytesread;
|
unsigned int bytesread;
|
||||||
unsigned int readsize;
|
unsigned int readsize = 0;
|
||||||
unsigned int nsectors;
|
unsigned int nsectors;
|
||||||
uint32_t offset;
|
uint32_t offset;
|
||||||
size_t bytesleft;
|
size_t bytesleft;
|
||||||
@@ -402,7 +394,6 @@ static ssize_t romfs_read(FAR struct file *filep, FAR char *buffer,
|
|||||||
* error occurs.
|
* error occurs.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
readsize = 0;
|
|
||||||
while (buflen > 0)
|
while (buflen > 0)
|
||||||
{
|
{
|
||||||
/* Get the first sector and index to read from. */
|
/* Get the first sector and index to read from. */
|
||||||
@@ -474,12 +465,9 @@ static ssize_t romfs_read(FAR struct file *filep, FAR char *buffer,
|
|||||||
buflen -= bytesread;
|
buflen -= bytesread;
|
||||||
}
|
}
|
||||||
|
|
||||||
romfs_semgive(rm);
|
|
||||||
return readsize;
|
|
||||||
|
|
||||||
errout_with_semaphore:
|
errout_with_semaphore:
|
||||||
romfs_semgive(rm);
|
romfs_semgive(rm);
|
||||||
return ret;
|
return ret < 0 ? ret : readsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@@ -560,9 +548,6 @@ static off_t romfs_seek(FAR struct file *filep, off_t offset, int whence)
|
|||||||
filep->f_pos = position;
|
filep->f_pos = position;
|
||||||
finfo("New file position: %jd\n", (intmax_t)filep->f_pos);
|
finfo("New file position: %jd\n", (intmax_t)filep->f_pos);
|
||||||
|
|
||||||
romfs_semgive(rm);
|
|
||||||
return OK;
|
|
||||||
|
|
||||||
errout_with_semaphore:
|
errout_with_semaphore:
|
||||||
romfs_semgive(rm);
|
romfs_semgive(rm);
|
||||||
return ret;
|
return ret;
|
||||||
@@ -630,7 +615,7 @@ static int romfs_dup(FAR const struct file *oldp, FAR struct file *newp)
|
|||||||
* structure
|
* structure
|
||||||
*/
|
*/
|
||||||
|
|
||||||
rm = (FAR struct romfs_mountpt_s *)newp->f_inode->i_private;
|
rm = newp->f_inode->i_private;
|
||||||
DEBUGASSERT(rm != NULL);
|
DEBUGASSERT(rm != NULL);
|
||||||
|
|
||||||
/* Check if the mount is still healthy */
|
/* Check if the mount is still healthy */
|
||||||
@@ -656,7 +641,7 @@ static int romfs_dup(FAR const struct file *oldp, FAR struct file *newp)
|
|||||||
* dup'ed file.
|
* dup'ed file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
newrf = (FAR struct romfs_file_s *)kmm_malloc(sizeof(struct romfs_file_s));
|
newrf = kmm_malloc(sizeof(struct romfs_file_s));
|
||||||
if (!newrf)
|
if (!newrf)
|
||||||
{
|
{
|
||||||
ferr("ERROR: Failed to allocate private data\n");
|
ferr("ERROR: Failed to allocate private data\n");
|
||||||
@@ -685,11 +670,6 @@ static int romfs_dup(FAR const struct file *oldp, FAR struct file *newp)
|
|||||||
|
|
||||||
rm->rm_refs++;
|
rm->rm_refs++;
|
||||||
|
|
||||||
romfs_semgive(rm);
|
|
||||||
return OK;
|
|
||||||
|
|
||||||
/* Error exits */
|
|
||||||
|
|
||||||
errout_with_semaphore:
|
errout_with_semaphore:
|
||||||
romfs_semgive(rm);
|
romfs_semgive(rm);
|
||||||
return ret;
|
return ret;
|
||||||
@@ -721,7 +701,7 @@ static int romfs_fstat(FAR const struct file *filep, FAR struct stat *buf)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
rf = filep->f_priv;
|
rf = filep->f_priv;
|
||||||
rm = (FAR struct romfs_mountpt_s *)filep->f_inode->i_private;
|
rm = filep->f_inode->i_private;
|
||||||
DEBUGASSERT(rm != NULL);
|
DEBUGASSERT(rm != NULL);
|
||||||
|
|
||||||
/* Check if the mount is still healthy */
|
/* Check if the mount is still healthy */
|
||||||
@@ -757,7 +737,7 @@ static int romfs_opendir(FAR struct inode *mountpt, FAR const char *relpath,
|
|||||||
FAR struct fs_dirent_s *dir)
|
FAR struct fs_dirent_s *dir)
|
||||||
{
|
{
|
||||||
FAR struct romfs_mountpt_s *rm;
|
FAR struct romfs_mountpt_s *rm;
|
||||||
FAR struct romfs_dirinfo_s dirinfo;
|
struct romfs_dirinfo_s dirinfo;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
finfo("relpath: '%s'\n", relpath);
|
finfo("relpath: '%s'\n", relpath);
|
||||||
@@ -808,8 +788,6 @@ static int romfs_opendir(FAR struct inode *mountpt, FAR const char *relpath,
|
|||||||
/* The entry is a directory */
|
/* The entry is a directory */
|
||||||
|
|
||||||
memcpy(&dir->u.romfs, &dirinfo.rd_dir, sizeof(struct fs_romfsdir_s));
|
memcpy(&dir->u.romfs, &dirinfo.rd_dir, sizeof(struct fs_romfsdir_s));
|
||||||
romfs_semgive(rm);
|
|
||||||
return OK;
|
|
||||||
|
|
||||||
errout_with_semaphore:
|
errout_with_semaphore:
|
||||||
romfs_semgive(rm);
|
romfs_semgive(rm);
|
||||||
@@ -1001,8 +979,7 @@ static int romfs_bind(FAR struct inode *blkdriver, FAR const void *data,
|
|||||||
|
|
||||||
/* Create an instance of the mountpt state structure */
|
/* Create an instance of the mountpt state structure */
|
||||||
|
|
||||||
rm = (FAR struct romfs_mountpt_s *)
|
rm = kmm_zalloc(sizeof(struct romfs_mountpt_s));
|
||||||
kmm_zalloc(sizeof(struct romfs_mountpt_s));
|
|
||||||
if (!rm)
|
if (!rm)
|
||||||
{
|
{
|
||||||
ferr("ERROR: Failed to allocate mountpoint structure\n");
|
ferr("ERROR: Failed to allocate mountpoint structure\n");
|
||||||
@@ -1014,8 +991,8 @@ static int romfs_bind(FAR struct inode *blkdriver, FAR const void *data,
|
|||||||
* have to addref() here (but does have to release in ubind().
|
* have to addref() here (but does have to release in ubind().
|
||||||
*/
|
*/
|
||||||
|
|
||||||
nxsem_init(&rm->rm_sem, 0, 0); /* Initialize the semaphore that controls access */
|
nxsem_init(&rm->rm_sem, 0, 0); /* Initialize the semaphore that controls access */
|
||||||
rm->rm_blkdriver = blkdriver; /* Save the block driver reference */
|
rm->rm_blkdriver = blkdriver; /* Save the block driver reference */
|
||||||
|
|
||||||
/* Get the hardware configuration and setup buffering appropriately */
|
/* Get the hardware configuration and setup buffering appropriately */
|
||||||
|
|
||||||
@@ -1066,7 +1043,7 @@ errout_with_sem:
|
|||||||
static int romfs_unbind(FAR void *handle, FAR struct inode **blkdriver,
|
static int romfs_unbind(FAR void *handle, FAR struct inode **blkdriver,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
FAR struct romfs_mountpt_s *rm = (FAR struct romfs_mountpt_s *)handle;
|
FAR struct romfs_mountpt_s *rm = handle;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
finfo("Entry\n");
|
finfo("Entry\n");
|
||||||
@@ -1104,7 +1081,7 @@ static int romfs_unbind(FAR void *handle, FAR struct inode **blkdriver,
|
|||||||
|
|
||||||
if (rm->rm_blkdriver)
|
if (rm->rm_blkdriver)
|
||||||
{
|
{
|
||||||
struct inode *inode = rm->rm_blkdriver;
|
FAR struct inode *inode = rm->rm_blkdriver;
|
||||||
if (inode)
|
if (inode)
|
||||||
{
|
{
|
||||||
if (INODE_IS_BLOCK(inode) && inode->u.i_bops->close != NULL)
|
if (INODE_IS_BLOCK(inode) && inode->u.i_bops->close != NULL)
|
||||||
@@ -1194,9 +1171,6 @@ static int romfs_statfs(FAR struct inode *mountpt, FAR struct statfs *buf)
|
|||||||
buf->f_bavail = 0;
|
buf->f_bavail = 0;
|
||||||
buf->f_namelen = NAME_MAX;
|
buf->f_namelen = NAME_MAX;
|
||||||
|
|
||||||
romfs_semgive(rm);
|
|
||||||
return OK;
|
|
||||||
|
|
||||||
errout_with_semaphore:
|
errout_with_semaphore:
|
||||||
romfs_semgive(rm);
|
romfs_semgive(rm);
|
||||||
return ret;
|
return ret;
|
||||||
@@ -1269,7 +1243,7 @@ static int romfs_stat(FAR struct inode *mountpt, FAR const char *relpath,
|
|||||||
FAR struct stat *buf)
|
FAR struct stat *buf)
|
||||||
{
|
{
|
||||||
FAR struct romfs_mountpt_s *rm;
|
FAR struct romfs_mountpt_s *rm;
|
||||||
FAR struct romfs_dirinfo_s dirinfo;
|
struct romfs_dirinfo_s dirinfo;
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
|||||||
+26
-26
@@ -126,17 +126,17 @@
|
|||||||
struct romfs_file_s;
|
struct romfs_file_s;
|
||||||
struct romfs_mountpt_s
|
struct romfs_mountpt_s
|
||||||
{
|
{
|
||||||
struct inode *rm_blkdriver; /* The block driver inode that hosts the FAT32 fs */
|
FAR struct inode *rm_blkdriver; /* The block driver inode that hosts the FAT32 fs */
|
||||||
bool rm_mounted; /* true: The file system is ready */
|
bool rm_mounted; /* true: The file system is ready */
|
||||||
uint16_t rm_hwsectorsize; /* HW: Sector size reported by block driver */
|
uint16_t rm_hwsectorsize; /* HW: Sector size reported by block driver */
|
||||||
sem_t rm_sem; /* Used to assume thread-safe access */
|
sem_t rm_sem; /* Used to assume thread-safe access */
|
||||||
uint32_t rm_refs; /* The references for all files opened on this mountpoint */
|
uint32_t rm_refs; /* The references for all files opened on this mountpoint */
|
||||||
uint32_t rm_rootoffset; /* Saved offset to the first root directory entry */
|
uint32_t rm_rootoffset; /* Saved offset to the first root directory entry */
|
||||||
uint32_t rm_hwnsectors; /* HW: The number of sectors reported by the hardware */
|
uint32_t rm_hwnsectors; /* HW: The number of sectors reported by the hardware */
|
||||||
uint32_t rm_volsize; /* Size of the ROMFS volume */
|
uint32_t rm_volsize; /* Size of the ROMFS volume */
|
||||||
uint32_t rm_cachesector; /* Current sector in the rm_buffer */
|
uint32_t rm_cachesector; /* Current sector in the rm_buffer */
|
||||||
uint8_t *rm_xipbase; /* Base address of directly accessible media */
|
FAR uint8_t *rm_xipbase; /* Base address of directly accessible media */
|
||||||
uint8_t *rm_buffer; /* Device sector buffer, allocated if rm_xipbase==0 */
|
FAR uint8_t *rm_buffer; /* Device sector buffer, allocated if rm_xipbase==0 */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This structure represents on open file under the mountpoint. An instance
|
/* This structure represents on open file under the mountpoint. An instance
|
||||||
@@ -146,11 +146,11 @@ struct romfs_mountpt_s
|
|||||||
|
|
||||||
struct romfs_file_s
|
struct romfs_file_s
|
||||||
{
|
{
|
||||||
uint32_t rf_startoffset; /* Offset to the start of the file data */
|
uint32_t rf_startoffset; /* Offset to the start of the file data */
|
||||||
uint32_t rf_size; /* Size of the file in bytes */
|
uint32_t rf_size; /* Size of the file in bytes */
|
||||||
uint32_t rf_cachesector; /* Current sector in the rf_buffer */
|
uint32_t rf_cachesector; /* Current sector in the rf_buffer */
|
||||||
uint8_t *rf_buffer; /* File sector buffer, allocated if rm_xipbase==0 */
|
FAR uint8_t *rf_buffer; /* File sector buffer, allocated if rm_xipbase==0 */
|
||||||
uint8_t rf_type; /* File type (for fstat()) */
|
uint8_t rf_type; /* File type (for fstat()) */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This structure is used internally for describing the result of
|
/* This structure is used internally for describing the result of
|
||||||
@@ -192,24 +192,24 @@ extern "C"
|
|||||||
int romfs_semtake(FAR struct romfs_mountpt_s *rm);
|
int romfs_semtake(FAR struct romfs_mountpt_s *rm);
|
||||||
void romfs_semgive(FAR struct romfs_mountpt_s *rm);
|
void romfs_semgive(FAR struct romfs_mountpt_s *rm);
|
||||||
int romfs_hwread(FAR struct romfs_mountpt_s *rm, FAR uint8_t *buffer,
|
int romfs_hwread(FAR struct romfs_mountpt_s *rm, FAR uint8_t *buffer,
|
||||||
uint32_t sector, unsigned int nsectors);
|
uint32_t sector, unsigned int nsectors);
|
||||||
int romfs_filecacheread(FAR struct romfs_mountpt_s *rm,
|
int romfs_filecacheread(FAR struct romfs_mountpt_s *rm,
|
||||||
FAR struct romfs_file_s *rf, uint32_t sector);
|
FAR struct romfs_file_s *rf, uint32_t sector);
|
||||||
int romfs_hwconfigure(FAR struct romfs_mountpt_s *rm);
|
int romfs_hwconfigure(FAR struct romfs_mountpt_s *rm);
|
||||||
int romfs_fsconfigure(FAR struct romfs_mountpt_s *rm);
|
int romfs_fsconfigure(FAR struct romfs_mountpt_s *rm);
|
||||||
int romfs_fileconfigure(FAR struct romfs_mountpt_s *rm,
|
int romfs_fileconfigure(FAR struct romfs_mountpt_s *rm,
|
||||||
FAR struct romfs_file_s *rf);
|
FAR struct romfs_file_s *rf);
|
||||||
int romfs_checkmount(FAR struct romfs_mountpt_s *rm);
|
int romfs_checkmount(FAR struct romfs_mountpt_s *rm);
|
||||||
int romfs_finddirentry(FAR struct romfs_mountpt_s *rm,
|
int romfs_finddirentry(FAR struct romfs_mountpt_s *rm,
|
||||||
FAR struct romfs_dirinfo_s *dirinfo,
|
FAR struct romfs_dirinfo_s *dirinfo,
|
||||||
FAR const char *path);
|
FAR const char *path);
|
||||||
int romfs_parsedirentry(FAR struct romfs_mountpt_s *rm,
|
int romfs_parsedirentry(FAR struct romfs_mountpt_s *rm, uint32_t offset,
|
||||||
uint32_t offset, FAR uint32_t *poffset, FAR uint32_t *pnext,
|
FAR uint32_t *poffset, FAR uint32_t *pnext,
|
||||||
FAR uint32_t *pinfo, FAR uint32_t *psize);
|
FAR uint32_t *pinfo, FAR uint32_t *psize);
|
||||||
int romfs_parsefilename(FAR struct romfs_mountpt_s *rm, uint32_t offset,
|
int romfs_parsefilename(FAR struct romfs_mountpt_s *rm, uint32_t offset,
|
||||||
FAR char *pname);
|
FAR char *pname);
|
||||||
int romfs_datastart(FAR struct romfs_mountpt_s *rm, uint32_t offset,
|
int romfs_datastart(FAR struct romfs_mountpt_s *rm, uint32_t offset,
|
||||||
FAR uint32_t *start);
|
FAR uint32_t *start);
|
||||||
|
|
||||||
#undef EXTERN
|
#undef EXTERN
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
|
|||||||
+43
-42
@@ -28,8 +28,6 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
@@ -66,7 +64,7 @@
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static uint32_t romfs_devread32(struct romfs_mountpt_s *rm, int ndx)
|
static uint32_t romfs_devread32(FAR struct romfs_mountpt_s *rm, int ndx)
|
||||||
{
|
{
|
||||||
/* This should not read past the end of the sector since the directory
|
/* This should not read past the end of the sector since the directory
|
||||||
* entries are aligned at 16-byte boundaries.
|
* entries are aligned at 16-byte boundaries.
|
||||||
@@ -86,10 +84,10 @@ static uint32_t romfs_devread32(struct romfs_mountpt_s *rm, int ndx)
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static inline int romfs_checkentry(struct romfs_mountpt_s *rm,
|
static inline int romfs_checkentry(FAR struct romfs_mountpt_s *rm,
|
||||||
uint32_t offset, const char *entryname,
|
uint32_t offset,
|
||||||
int entrylen,
|
FAR const char *entryname, int entrylen,
|
||||||
struct romfs_dirinfo_s *dirinfo)
|
FAR struct romfs_dirinfo_s *dirinfo)
|
||||||
{
|
{
|
||||||
char name[NAME_MAX + 1];
|
char name[NAME_MAX + 1];
|
||||||
uint32_t linkoffset;
|
uint32_t linkoffset;
|
||||||
@@ -163,7 +161,8 @@ static inline int romfs_checkentry(struct romfs_mountpt_s *rm,
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
int16_t romfs_devcacheread(struct romfs_mountpt_s *rm, uint32_t offset)
|
static int16_t romfs_devcacheread(FAR struct romfs_mountpt_s *rm,
|
||||||
|
uint32_t offset)
|
||||||
{
|
{
|
||||||
uint32_t sector;
|
uint32_t sector;
|
||||||
int ret;
|
int ret;
|
||||||
@@ -222,8 +221,8 @@ int16_t romfs_devcacheread(struct romfs_mountpt_s *rm, uint32_t offset)
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static int romfs_followhardlinks(struct romfs_mountpt_s *rm, uint32_t offset,
|
static int romfs_followhardlinks(FAR struct romfs_mountpt_s *rm,
|
||||||
uint32_t *poffset)
|
uint32_t offset, FAR uint32_t *poffset)
|
||||||
{
|
{
|
||||||
uint32_t next;
|
uint32_t next;
|
||||||
int16_t ndx;
|
int16_t ndx;
|
||||||
@@ -271,9 +270,9 @@ static int romfs_followhardlinks(struct romfs_mountpt_s *rm, uint32_t offset,
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static inline int romfs_searchdir(struct romfs_mountpt_s *rm,
|
static inline int romfs_searchdir(FAR struct romfs_mountpt_s *rm,
|
||||||
const char *entryname, int entrylen,
|
FAR const char *entryname, int entrylen,
|
||||||
struct romfs_dirinfo_s *dirinfo)
|
FAR struct romfs_dirinfo_s *dirinfo)
|
||||||
{
|
{
|
||||||
uint32_t offset;
|
uint32_t offset;
|
||||||
uint32_t next;
|
uint32_t next;
|
||||||
@@ -336,7 +335,7 @@ static inline int romfs_searchdir(struct romfs_mountpt_s *rm,
|
|||||||
* Name: romfs_semtake
|
* Name: romfs_semtake
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
int romfs_semtake(struct romfs_mountpt_s *rm)
|
int romfs_semtake(FAR struct romfs_mountpt_s *rm)
|
||||||
{
|
{
|
||||||
return nxsem_wait_uninterruptible(&rm->rm_sem);
|
return nxsem_wait_uninterruptible(&rm->rm_sem);
|
||||||
}
|
}
|
||||||
@@ -345,7 +344,7 @@ int romfs_semtake(struct romfs_mountpt_s *rm)
|
|||||||
* Name: romfs_semgive
|
* Name: romfs_semgive
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
void romfs_semgive(struct romfs_mountpt_s *rm)
|
void romfs_semgive(FAR struct romfs_mountpt_s *rm)
|
||||||
{
|
{
|
||||||
nxsem_post(&rm->rm_sem);
|
nxsem_post(&rm->rm_sem);
|
||||||
}
|
}
|
||||||
@@ -357,7 +356,7 @@ void romfs_semgive(struct romfs_mountpt_s *rm)
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
int romfs_hwread(struct romfs_mountpt_s *rm, uint8_t *buffer,
|
int romfs_hwread(FAR struct romfs_mountpt_s *rm, FAR uint8_t *buffer,
|
||||||
uint32_t sector, unsigned int nsectors)
|
uint32_t sector, unsigned int nsectors)
|
||||||
{
|
{
|
||||||
int ret = OK;
|
int ret = OK;
|
||||||
@@ -369,14 +368,14 @@ int romfs_hwread(struct romfs_mountpt_s *rm, uint8_t *buffer,
|
|||||||
/* In XIP mode, we just copy the requested data */
|
/* In XIP mode, we just copy the requested data */
|
||||||
|
|
||||||
memcpy(buffer,
|
memcpy(buffer,
|
||||||
rm->rm_xipbase + sector*rm->rm_hwsectorsize,
|
rm->rm_xipbase + sector * rm->rm_hwsectorsize,
|
||||||
nsectors*rm->rm_hwsectorsize);
|
nsectors * rm->rm_hwsectorsize);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* In non-XIP mode, we have to read the data from the device */
|
/* In non-XIP mode, we have to read the data from the device */
|
||||||
|
|
||||||
struct inode *inode = rm->rm_blkdriver;
|
FAR struct inode *inode = rm->rm_blkdriver;
|
||||||
ssize_t nsectorsread = -ENODEV;
|
ssize_t nsectorsread = -ENODEV;
|
||||||
|
|
||||||
DEBUGASSERT(inode);
|
DEBUGASSERT(inode);
|
||||||
@@ -412,8 +411,8 @@ int romfs_hwread(struct romfs_mountpt_s *rm, uint8_t *buffer,
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
int romfs_filecacheread(struct romfs_mountpt_s *rm, struct romfs_file_s *rf,
|
int romfs_filecacheread(FAR struct romfs_mountpt_s *rm,
|
||||||
uint32_t sector)
|
FAR struct romfs_file_s *rf, uint32_t sector)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@@ -472,9 +471,9 @@ int romfs_filecacheread(struct romfs_mountpt_s *rm, struct romfs_file_s *rf,
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
int romfs_hwconfigure(struct romfs_mountpt_s *rm)
|
int romfs_hwconfigure(FAR struct romfs_mountpt_s *rm)
|
||||||
{
|
{
|
||||||
struct inode *inode = rm->rm_blkdriver;
|
FAR struct inode *inode = rm->rm_blkdriver;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* Get the underlying device geometry */
|
/* Get the underlying device geometry */
|
||||||
@@ -556,7 +555,7 @@ int romfs_hwconfigure(struct romfs_mountpt_s *rm)
|
|||||||
|
|
||||||
/* Allocate the device cache buffer for normal sector accesses */
|
/* Allocate the device cache buffer for normal sector accesses */
|
||||||
|
|
||||||
rm->rm_buffer = (FAR uint8_t *)kmm_malloc(rm->rm_hwsectorsize);
|
rm->rm_buffer = kmm_malloc(rm->rm_hwsectorsize);
|
||||||
if (!rm->rm_buffer)
|
if (!rm->rm_buffer)
|
||||||
{
|
{
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
@@ -576,10 +575,10 @@ int romfs_hwconfigure(struct romfs_mountpt_s *rm)
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
int romfs_fsconfigure(struct romfs_mountpt_s *rm)
|
int romfs_fsconfigure(FAR struct romfs_mountpt_s *rm)
|
||||||
{
|
{
|
||||||
const char *name;
|
FAR const char *name;
|
||||||
int16_t ndx;
|
int16_t ndx;
|
||||||
|
|
||||||
/* Then get information about the ROMFS filesystem on the devices managed
|
/* Then get information about the ROMFS filesystem on the devices managed
|
||||||
* by this block driver. Read sector zero which contains the volume header.
|
* by this block driver. Read sector zero which contains the volume header.
|
||||||
@@ -623,7 +622,8 @@ int romfs_fsconfigure(struct romfs_mountpt_s *rm)
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
int romfs_fileconfigure(struct romfs_mountpt_s *rm, struct romfs_file_s *rf)
|
int romfs_fileconfigure(FAR struct romfs_mountpt_s *rm,
|
||||||
|
FAR struct romfs_file_s *rf)
|
||||||
{
|
{
|
||||||
/* Check if XIP access mode is supported. If so, then we do not need
|
/* Check if XIP access mode is supported. If so, then we do not need
|
||||||
* to allocate anything.
|
* to allocate anything.
|
||||||
@@ -663,9 +663,9 @@ int romfs_fileconfigure(struct romfs_mountpt_s *rm, struct romfs_file_s *rf)
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
int romfs_checkmount(struct romfs_mountpt_s *rm)
|
int romfs_checkmount(FAR struct romfs_mountpt_s *rm)
|
||||||
{
|
{
|
||||||
struct inode *inode;
|
FAR struct inode *inode;
|
||||||
struct geometry geo;
|
struct geometry geo;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@@ -713,11 +713,12 @@ int romfs_checkmount(struct romfs_mountpt_s *rm)
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
int romfs_finddirentry(struct romfs_mountpt_s *rm,
|
int romfs_finddirentry(FAR struct romfs_mountpt_s *rm,
|
||||||
struct romfs_dirinfo_s *dirinfo, const char *path)
|
FAR struct romfs_dirinfo_s *dirinfo,
|
||||||
|
FAR const char *path)
|
||||||
{
|
{
|
||||||
const char *entryname;
|
FAR const char *entryname;
|
||||||
const char *terminator;
|
FAR const char *terminator;
|
||||||
int entrylen;
|
int entrylen;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@@ -737,7 +738,7 @@ int romfs_finddirentry(struct romfs_mountpt_s *rm,
|
|||||||
|
|
||||||
/* Then loop for each directory/file component in the full path */
|
/* Then loop for each directory/file component in the full path */
|
||||||
|
|
||||||
entryname = path;
|
entryname = path;
|
||||||
terminator = NULL;
|
terminator = NULL;
|
||||||
|
|
||||||
for (; ; )
|
for (; ; )
|
||||||
@@ -817,9 +818,9 @@ int romfs_finddirentry(struct romfs_mountpt_s *rm,
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
int romfs_parsedirentry(struct romfs_mountpt_s *rm, uint32_t offset,
|
int romfs_parsedirentry(FAR struct romfs_mountpt_s *rm, uint32_t offset,
|
||||||
uint32_t *poffset, uint32_t *pnext, uint32_t *pinfo,
|
FAR uint32_t *poffset, uint32_t *pnext,
|
||||||
uint32_t *psize)
|
FAR uint32_t *pinfo, FAR uint32_t *psize)
|
||||||
{
|
{
|
||||||
uint32_t save;
|
uint32_t save;
|
||||||
uint32_t next;
|
uint32_t next;
|
||||||
@@ -884,8 +885,8 @@ int romfs_parsedirentry(struct romfs_mountpt_s *rm, uint32_t offset,
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
int romfs_parsefilename(struct romfs_mountpt_s *rm, uint32_t offset,
|
int romfs_parsefilename(FAR struct romfs_mountpt_s *rm, uint32_t offset,
|
||||||
char *pname)
|
FAR char *pname)
|
||||||
{
|
{
|
||||||
int16_t ndx;
|
int16_t ndx;
|
||||||
uint16_t namelen;
|
uint16_t namelen;
|
||||||
@@ -952,8 +953,8 @@ int romfs_parsefilename(struct romfs_mountpt_s *rm, uint32_t offset,
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
int romfs_datastart(struct romfs_mountpt_s *rm, uint32_t offset,
|
int romfs_datastart(FAR struct romfs_mountpt_s *rm, uint32_t offset,
|
||||||
uint32_t *start)
|
FAR uint32_t *start)
|
||||||
{
|
{
|
||||||
int16_t ndx;
|
int16_t ndx;
|
||||||
int ret;
|
int ret;
|
||||||
|
|||||||
Reference in New Issue
Block a user