13d8536b4Sopenharmony_ci/*
23d8536b4Sopenharmony_ci * Copyright (c) 2022-2022 Huawei Device Co., Ltd. All rights reserved.
33d8536b4Sopenharmony_ci *
43d8536b4Sopenharmony_ci * Redistribution and use in source and binary forms, with or without modification,
53d8536b4Sopenharmony_ci * are permitted provided that the following conditions are met:
63d8536b4Sopenharmony_ci *
73d8536b4Sopenharmony_ci * 1. Redistributions of source code must retain the above copyright notice, this list of
83d8536b4Sopenharmony_ci *    conditions and the following disclaimer.
93d8536b4Sopenharmony_ci *
103d8536b4Sopenharmony_ci * 2. Redistributions in binary form must reproduce the above copyright notice, this list
113d8536b4Sopenharmony_ci *    of conditions and the following disclaimer in the documentation and/or other materials
123d8536b4Sopenharmony_ci *    provided with the distribution.
133d8536b4Sopenharmony_ci *
143d8536b4Sopenharmony_ci * 3. Neither the name of the copyright holder nor the names of its contributors may be used
153d8536b4Sopenharmony_ci *    to endorse or promote products derived from this software without specific prior written
163d8536b4Sopenharmony_ci *    permission.
173d8536b4Sopenharmony_ci *
183d8536b4Sopenharmony_ci * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
193d8536b4Sopenharmony_ci * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
203d8536b4Sopenharmony_ci * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
213d8536b4Sopenharmony_ci * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
223d8536b4Sopenharmony_ci * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
233d8536b4Sopenharmony_ci * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
243d8536b4Sopenharmony_ci * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
253d8536b4Sopenharmony_ci * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
263d8536b4Sopenharmony_ci * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
273d8536b4Sopenharmony_ci * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
283d8536b4Sopenharmony_ci * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
293d8536b4Sopenharmony_ci */
303d8536b4Sopenharmony_ci
313d8536b4Sopenharmony_ci#ifndef _VFS_MOUNT_H_
323d8536b4Sopenharmony_ci#define _VFS_MOUNT_H_
333d8536b4Sopenharmony_ci
343d8536b4Sopenharmony_ci#include "sys/statfs.h"
353d8536b4Sopenharmony_ci#include "los_compiler.h"
363d8536b4Sopenharmony_ci
373d8536b4Sopenharmony_ci#ifdef __cplusplus
383d8536b4Sopenharmony_ci#if __cplusplus
393d8536b4Sopenharmony_ciextern "C" {
403d8536b4Sopenharmony_ci#endif /* __cplusplus */
413d8536b4Sopenharmony_ci#endif /* __cplusplus */
423d8536b4Sopenharmony_ci
433d8536b4Sopenharmony_cistruct FsMap;
443d8536b4Sopenharmony_cistruct MountPoint;
453d8536b4Sopenharmony_ci
463d8536b4Sopenharmony_cistruct MountOps {
473d8536b4Sopenharmony_ci    int (*mount)(struct MountPoint *mp, unsigned long mountflags,
483d8536b4Sopenharmony_ci                 const void *data);
493d8536b4Sopenharmony_ci    int (*umount)(struct MountPoint *mp);
503d8536b4Sopenharmony_ci    int (*umount2)(struct MountPoint *mp, int flag);
513d8536b4Sopenharmony_ci    int (*statfs)(const char *path, struct statfs *buf);
523d8536b4Sopenharmony_ci};
533d8536b4Sopenharmony_ci
543d8536b4Sopenharmony_cistruct MountPoint {
553d8536b4Sopenharmony_ci    struct FsMap      *mFs;    /* file system info */
563d8536b4Sopenharmony_ci    struct MountPoint *mNext;  /* point to next mount point */
573d8536b4Sopenharmony_ci    const char        *mPath;  /* target path, /system, /usr, etc. */
583d8536b4Sopenharmony_ci    const char        *mDev;   /* device, "emmc0p0", "emmc0p1", etc. */
593d8536b4Sopenharmony_ci    UINT32             mRefs;  /* reference to mount point */
603d8536b4Sopenharmony_ci    void              *mData;  /* specific file system handle */
613d8536b4Sopenharmony_ci    BOOL               mWriteEnable; /* writable flag */
623d8536b4Sopenharmony_ci};
633d8536b4Sopenharmony_ci
643d8536b4Sopenharmony_ciextern struct MountPoint *g_mountPoints;
653d8536b4Sopenharmony_ci#define LOS_MP_FOR_EACH_ENTRY(prev) \
663d8536b4Sopenharmony_ci        for (prev = g_mountPoints; prev != NULL; prev = prev->mNext)
673d8536b4Sopenharmony_ci
683d8536b4Sopenharmony_cistruct MountPoint *VfsMpFind(const char *path, const char **pathInMp);
693d8536b4Sopenharmony_ci
703d8536b4Sopenharmony_ci#ifdef __cplusplus
713d8536b4Sopenharmony_ci#if __cplusplus
723d8536b4Sopenharmony_ci}
733d8536b4Sopenharmony_ci#endif /* __cplusplus */
743d8536b4Sopenharmony_ci#endif /* __cplusplus */
753d8536b4Sopenharmony_ci
763d8536b4Sopenharmony_ci#endif /* _VFS_MOUNT_H_ */
77