/**************************************************************************** * fs/v9fs/client.h * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. The * ASF licenses this file to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. * ****************************************************************************/ #ifndef __FS_V9FS_CLIENT_H #define __FS_V9FS_CLIENT_H /**************************************************************************** * Included Files ****************************************************************************/ #include #include #include #include #include #include /**************************************************************************** * Type Definitions ****************************************************************************/ struct v9fs_payload_s { FAR struct iovec *wiov; FAR struct iovec *riov; struct list_node node; size_t wcount; size_t rcount; sem_t resp; uint16_t tag; int ret; }; struct v9fs_transport_s { FAR const struct v9fs_transport_ops_s *ops; /* The remainder of the structure is used by the "lower-half" driver * for whatever state storage that it may need. */ }; struct v9fs_transport_ops_s { CODE int (*create)(FAR struct v9fs_transport_s **transport, FAR const char *args); CODE int (*request)(FAR struct v9fs_transport_s *transport, FAR struct v9fs_payload_s *payload); CODE void (*destroy)(FAR struct v9fs_transport_s *transport); }; struct v9fs_client_s { FAR struct v9fs_transport_s *transport; FAR struct idr_s *fids; unsigned int msize; uint32_t root_fid; uint32_t tag_id; mutex_t lock; }; /**************************************************************************** * Public Function Prototypes ****************************************************************************/ int v9fs_client_statfs(FAR struct v9fs_client_s *client, FAR struct statfs *buf); int v9fs_client_stat(FAR struct v9fs_client_s *client, uint32_t fid, FAR struct stat *buf); off_t v9fs_client_getsize(FAR struct v9fs_client_s *client, uint32_t fid); int v9fs_client_chstat(FAR struct v9fs_client_s *client, uint32_t fid, FAR const struct stat *buf, int flags); ssize_t v9fs_client_read(FAR struct v9fs_client_s *client, uint32_t fid, FAR void *buffer, off_t offset, size_t buflen); ssize_t v9fs_client_convertdir(FAR const uint8_t *buffer, size_t bufsize, off_t head, FAR off_t *offset, FAR struct dirent *entry); ssize_t v9fs_client_readdir(FAR struct v9fs_client_s *client, uint32_t fid, FAR void *buffer, off_t offset, size_t buflen); ssize_t v9fs_client_write(FAR struct v9fs_client_s *client, uint32_t fid, FAR const void *buffer, off_t offset, size_t buflen); int v9fs_client_fsync(FAR struct v9fs_client_s *client, uint32_t fid); int v9fs_client_rename(FAR struct v9fs_client_s *client, uint32_t fid, uint32_t newfid, FAR const char *name); int v9fs_client_remove(FAR struct v9fs_client_s *client, uint32_t fid); int v9fs_client_unlink(FAR struct v9fs_client_s *client, uint32_t fid, FAR const char *name, bool isdir); int v9fs_client_mkdir(FAR struct v9fs_client_s *client, uint32_t fid, FAR const char *name, int mode); int v9fs_client_create(FAR struct v9fs_client_s *client, uint32_t fid, FAR const char *name, int oflags, int mode); int v9fs_client_open(FAR struct v9fs_client_s *client, uint32_t fid, int oflags); int v9fs_client_walk(FAR struct v9fs_client_s *client, FAR const char *path, FAR const char **childname); int v9fs_client_init(FAR struct v9fs_client_s *client, FAR const char *data); int v9fs_client_uninit(FAR struct v9fs_client_s *client); int v9fs_transport_create(FAR struct v9fs_transport_s **transport, FAR const char *trans_type, FAR const char *data); int v9fs_transport_request(FAR struct v9fs_transport_s *transport, FAR struct v9fs_payload_s *payload); void v9fs_transport_destroy(FAR struct v9fs_transport_s *transport); void v9fs_transport_done(FAR struct v9fs_payload_s *cookie, int ret); int v9fs_fid_put(FAR struct v9fs_client_s *client, uint32_t fid); int v9fs_fid_get(FAR struct v9fs_client_s *client, uint32_t fid); #endif /* __FS_V9FS_CLIENT_H */