Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
150 changes: 78 additions & 72 deletions components/dfs/dfs_v1/filesystems/9pfs/dfs_9pfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@
#define ORCLOSE 64 /* or'ed in, remove on close */
#define OAPPEND 128 /* or'ed in, append */

#define NOTAG ((rt_uint16_t)~0)
#define NOFID ((rt_uint32_t)~0)
#define TAG 1
#define NOTAG ((rt_uint16_t)~0)
#define NOFID ((rt_uint32_t)~0)
#define TAG 1

static rt_list_t _protocol_nodes = RT_LIST_OBJECT_INIT(_protocol_nodes);
static struct rt_spinlock _protocol_lock = { 0 };
Expand All @@ -45,37 +45,37 @@ static struct rt_spinlock _protocol_lock = { 0 };
#define rt_cpu_to_le8
#endif

#define P9_OF_OPS_GET(width, dir) \
rt_inline rt_uint##width##_t get_##dir##_##value##width##_of( \
struct p9_connection *conn, unsigned idx) \
{ \
rt_uint##width##_t *vp = (void *)&conn->dir##_buffer[idx]; \
return rt_le##width##_to_cpu(*vp); \
}
#define P9_OF_OPS_GET(width, dir) \
rt_inline rt_uint##width##_t get_##dir##_##value##width##_of( \
struct p9_connection *conn, unsigned idx) \
{ \
rt_uint##width##_t *vp = (void *)&conn->dir##_buffer[idx]; \
return rt_le##width##_to_cpu(*vp); \
}

#define P9_OF_OPS_PUT(width, dir) \
rt_inline void put_##dir##_##value##width##_of( \
struct p9_connection *conn, unsigned idx, \
rt_uint##width##_t value) \
{ \
rt_uint##width##_t *vp = (void *)&conn->dir##_buffer[idx]; \
*vp = rt_cpu_to_le##width(value); \
}
#define P9_OF_OPS_PUT(width, dir) \
rt_inline void put_##dir##_##value##width##_of( \
struct p9_connection *conn, unsigned idx, \
rt_uint##width##_t value) \
{ \
rt_uint##width##_t *vp = (void *)&conn->dir##_buffer[idx]; \
*vp = rt_cpu_to_le##width(value); \
}

#define P9_OPS_PUT(width) \
rt_inline rt_off_t put_value##width(struct p9_connection *conn, \
rt_off_t off, rt_uint##width##_t value) \
{ \
((rt_uint##width##_t *)(conn->tx_buffer + off))[0] = \
rt_cpu_to_le##width(value); \
return off + sizeof(value); \
}
#define P9_OPS_PUT(width) \
rt_inline rt_off_t put_value##width(struct p9_connection *conn, \
rt_off_t off, rt_uint##width##_t value) \
{ \
((rt_uint##width##_t *)(conn->tx_buffer + off))[0] = \
rt_cpu_to_le##width(value); \
return off + sizeof(value); \
}

#define P9_OPS_GROUP(width) \
P9_OF_OPS_GET(width, rx) \
P9_OF_OPS_GET(width, tx) \
P9_OF_OPS_PUT(width, rx) \
P9_OF_OPS_PUT(width, tx) \
#define P9_OPS_GROUP(width) \
P9_OF_OPS_GET(width, rx) \
P9_OF_OPS_GET(width, tx) \
P9_OF_OPS_PUT(width, rx) \
P9_OF_OPS_PUT(width, tx) \
P9_OPS_PUT(width)

P9_OPS_GROUP(8)
Expand All @@ -88,7 +88,7 @@ P9_OPS_GROUP(64)
#undef P9_OPS_GROUP

rt_inline rt_uint32_t put_header(struct p9_connection *conn,
rt_uint8_t hd, rt_uint16_t tag_flags)
rt_uint8_t hd, rt_uint16_t tag_flags)
{
rt_uint8_t *stack = conn->tx_buffer;

Expand All @@ -105,7 +105,7 @@ rt_inline rt_uint32_t put_header(struct p9_connection *conn,
}

rt_inline rt_off_t put_bytes(struct p9_connection *conn, rt_off_t off,
rt_uint8_t *bytes, rt_uint32_t count)
rt_uint8_t *bytes, rt_uint32_t count)
{
rt_uint8_t *stack = conn->tx_buffer + off;

Expand All @@ -119,7 +119,7 @@ rt_inline rt_off_t put_bytes(struct p9_connection *conn, rt_off_t off,
}

rt_inline rt_off_t put_string(struct p9_connection *conn, rt_off_t off,
char *string)
char *string)
{
rt_uint32_t len = rt_strlen(string);
rt_uint8_t *stack = conn->tx_buffer + off;
Expand All @@ -134,7 +134,7 @@ rt_inline rt_off_t put_string(struct p9_connection *conn, rt_off_t off,
}

struct p9_connection *p9_connection_alloc(struct p9_protocol *p9p,
const char *aname, rt_uint32_t buffer_size)
const char *aname, rt_uint32_t buffer_size)
{
struct p9_connection *conn;

Expand Down Expand Up @@ -177,7 +177,7 @@ rt_err_t p9_connection_free(struct p9_connection *conn)
}

int p9_transaction(struct p9_connection *conn,
rt_uint32_t tx_size, rt_uint32_t *out_rx_size)
rt_uint32_t tx_size, rt_uint32_t *out_rx_size)
{
rt_err_t err;
rt_uint32_t rx_size;
Expand All @@ -187,7 +187,7 @@ int p9_transaction(struct p9_connection *conn,

rx_size = conn->msg_size;
if ((err = conn->protocol->transport(conn->protocol,
conn->tx_buffer, tx_size, conn->rx_buffer, &rx_size)))
conn->tx_buffer, tx_size, conn->rx_buffer, &rx_size)))
{
return P9_TRANSPORT_ERROR;
}
Expand All @@ -201,7 +201,7 @@ int p9_transaction(struct p9_connection *conn,
if (get_rx_value8_of(conn, P9_MSG_ID) == P9_MSG_ERR)
{
rt_uint32_t err_len = rt_min_t(rt_uint32_t, sizeof(conn->error) - 1,
get_rx_value16_of(conn, P9_MSG_ERR_STR_LEN));
get_rx_value16_of(conn, P9_MSG_ERR_STR_LEN));

rt_strncpy(conn->error, (void *)&conn->rx_buffer[P9_MSG_ERR_STR], err_len);

Expand Down Expand Up @@ -367,8 +367,7 @@ rt_err_t dfs_9pfs_del_tag(struct p9_protocol *p9p)

static int p9_to_fs_err(int rc)
{
const int p9_err[] =
{
const int p9_err[] = {
[0] = RT_EOK,
[-P9_ERROR] = -EIO,
[-P9_UNKNOWN_VERSION] = -ENOSYS,
Expand Down Expand Up @@ -428,10 +427,18 @@ static rt_uint8_t fs_to_p9_flags(rt_uint32_t raw_flags)

switch (raw_flags & 3)
{
case O_RDONLY: flags = OREAD; break;
case O_WRONLY: flags = OWRITE; break;
case O_RDWR: flags = ORDWR; break;
default: RT_ASSERT(0); break;
case O_RDONLY:
flags = OREAD;
break;
case O_WRONLY:
flags = OWRITE;
break;
case O_RDWR:
flags = ORDWR;
break;
default:
RT_ASSERT(0);
break;
}

if (raw_flags & O_TRUNC)
Expand Down Expand Up @@ -460,7 +467,7 @@ static char *p9_basename(const char *path)
}

static int p9_walk_path_raw(struct p9_connection *conn, const char *path,
rt_bool_t submode)
rt_bool_t submode)
{
rt_uint32_t size;
const char *split;
Expand Down Expand Up @@ -490,7 +497,8 @@ static int p9_walk_path_raw(struct p9_connection *conn, const char *path,
size = put_value32(conn, size, new_fid);
size = put_value16(conn, size, 0); /* Fill later */

do {
do
{
split = strchrnul(path, '/');

len = split - path;
Expand Down Expand Up @@ -880,8 +888,8 @@ static int dfs_9pfs_getdents(struct dfs_file *fd, struct dirent *dirp, uint32_t
dirp->d_namlen = get_rx_value16_of(conn, off + P9_MSG_STAT_NAME_LEN);
dirp->d_reclen = (rt_uint16_t)sizeof(struct dirent);
rt_strncpy(dirp->d_name,
(void *)conn->rx_buffer + off + P9_MSG_STAT_NAME,
dirp->d_namlen);
(void *)conn->rx_buffer + off + P9_MSG_STAT_NAME,
dirp->d_namlen);
dirp->d_name[dirp->d_namlen] = '\0';

if (!rt_strcmp(dirp->d_name, ".") || !rt_strcmp(dirp->d_name, ".."))
Expand All @@ -908,22 +916,21 @@ static int dfs_9pfs_getdents(struct dfs_file *fd, struct dirent *dirp, uint32_t
return count;
}

static const struct dfs_file_ops _9pfs_fops =
{
.open = dfs_9pfs_open,
.close = dfs_9pfs_close,
.read = dfs_9pfs_read,
.write = dfs_9pfs_write,
.flush = dfs_9pfs_flush,
.lseek = dfs_9pfs_lseek,
.getdents = dfs_9pfs_getdents,
static const struct dfs_file_ops _9pfs_fops = {
.open = dfs_9pfs_open,
.close = dfs_9pfs_close,
.read = dfs_9pfs_read,
.write = dfs_9pfs_write,
.flush = dfs_9pfs_flush,
.lseek = dfs_9pfs_lseek,
.getdents = dfs_9pfs_getdents,
};

static int dfs_9pfs_mount(struct dfs_filesystem *fs,
unsigned long rwflag, const void *data)
unsigned long rwflag, const void *data)
{
rt_ubase_t level;
struct p9_protocol *p9p, *p9p_tmp;
struct p9_protocol *p9p = RT_NULL, *p9p_tmp;
struct p9_connection *conn = RT_NULL;

if (!data)
Expand Down Expand Up @@ -1042,7 +1049,7 @@ static int dfs_9pfs_unlink(struct dfs_filesystem *fs, const char *pathname)
}

static int dfs_9pfs_stat(struct dfs_filesystem *fs,
const char *filename, struct stat *st)
const char *filename, struct stat *st)
{
int rc = 0, fid;
rt_uint32_t size, mode;
Expand Down Expand Up @@ -1133,7 +1140,7 @@ static int dfs_9pfs_stat(struct dfs_filesystem *fs,
}

static int dfs_9pfs_rename(struct dfs_filesystem *fs,
const char *oldpath, const char *newpath)
const char *oldpath, const char *newpath)
{
int rc = 0, fid;
rt_uint32_t size;
Expand Down Expand Up @@ -1162,20 +1169,19 @@ static int dfs_9pfs_rename(struct dfs_filesystem *fs,
return p9_to_fs_err(rc);
}

static const struct dfs_filesystem_ops _9pfs =
{
.name = "9p",
.flags = DFS_FS_FLAG_DEFAULT,
.fops = &_9pfs_fops,
static const struct dfs_filesystem_ops _9pfs = {
.name = "9p",
.flags = DFS_FS_FLAG_DEFAULT,
.fops = &_9pfs_fops,

.mount = dfs_9pfs_mount,
.unmount = dfs_9pfs_unmount,
.mount = dfs_9pfs_mount,
.unmount = dfs_9pfs_unmount,

.statfs = dfs_9pfs_statfs,
.statfs = dfs_9pfs_statfs,

.unlink = dfs_9pfs_unlink,
.stat = dfs_9pfs_stat,
.rename = dfs_9pfs_rename,
.unlink = dfs_9pfs_unlink,
.stat = dfs_9pfs_stat,
.rename = dfs_9pfs_rename,
};

int dfs_9pfs_init(void)
Expand Down