1d9f0492fSopenharmony_ci/* 2d9f0492fSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3d9f0492fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4d9f0492fSopenharmony_ci * you may not use this file except in compliance with the License. 5d9f0492fSopenharmony_ci * You may obtain a copy of the License at 6d9f0492fSopenharmony_ci * 7d9f0492fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8d9f0492fSopenharmony_ci * 9d9f0492fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10d9f0492fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11d9f0492fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d9f0492fSopenharmony_ci * See the License for the specific language governing permissions and 13d9f0492fSopenharmony_ci * limitations under the License. 14d9f0492fSopenharmony_ci */ 15d9f0492fSopenharmony_ci 16d9f0492fSopenharmony_ci#ifndef STARTUP_FS_MANAGER_H 17d9f0492fSopenharmony_ci#define STARTUP_FS_MANAGER_H 18d9f0492fSopenharmony_ci 19d9f0492fSopenharmony_ci#include <stdbool.h> 20d9f0492fSopenharmony_ci#include <stdio.h> 21d9f0492fSopenharmony_ci 22d9f0492fSopenharmony_ci#ifdef __cplusplus 23d9f0492fSopenharmony_ci#if __cplusplus 24d9f0492fSopenharmony_ciextern "C" { 25d9f0492fSopenharmony_ci#endif 26d9f0492fSopenharmony_ci#endif 27d9f0492fSopenharmony_ci 28d9f0492fSopenharmony_ci/* Fs manager flags definition */ 29d9f0492fSopenharmony_ci#define FS_MANAGER_CHECK 0x00000001 30d9f0492fSopenharmony_ci#define FS_MANAGER_WAIT 0x00000002 31d9f0492fSopenharmony_ci#define FS_MANAGER_REQUIRED 0x00000004 32d9f0492fSopenharmony_ci#define FS_MANAGER_NOFAIL 0x00000008 33d9f0492fSopenharmony_ci#define FS_MANAGER_HVB 0x00000010 34d9f0492fSopenharmony_ci#define FS_MANAGER_PROJQUOTA 0x00000020 35d9f0492fSopenharmony_ci#define FS_MANAGER_CASEFOLD 0x00000040 36d9f0492fSopenharmony_ci#define FS_MANAGER_COMPRESSION 0x00000080 37d9f0492fSopenharmony_ci#define FS_MANAGER_DEDUP 0x00000100 38d9f0492fSopenharmony_ci#define FS_MANAGER_FORMATTABLE 0x00000200 39d9f0492fSopenharmony_ci#define NAME_SIZE 32 40d9f0492fSopenharmony_ci#define MAX_SLOT 2 41d9f0492fSopenharmony_ci 42d9f0492fSopenharmony_ci#define VALID_FS_MANAGER_FLAGS (FS_MANAGER_CHECK | FS_MANAGER_WAIT | FS_MANAGER_REQUIRED) 43d9f0492fSopenharmony_ci#define FS_MANAGER_FLAGS_ENABLED(fsMgrFlags, flag) (((fsMgrFlags) & FS_MANAGER_##flag) != 0) 44d9f0492fSopenharmony_ci 45d9f0492fSopenharmony_ci#define FM_MANAGER_CHECK_ENABLED(fsMgrFlags) FS_MANAGER_FLAGS_ENABLED((fsMgrFlags), CHECK) 46d9f0492fSopenharmony_ci#define FM_MANAGER_WAIT_ENABLED(fsMgrFlags) FS_MANAGER_FLAGS_ENABLED((fsMgrFlags), WAIT) 47d9f0492fSopenharmony_ci#define FM_MANAGER_REQUIRED_ENABLED(fsMgrFlags) FS_MANAGER_FLAGS_ENABLED((fsMgrFlags), REQUIRED) 48d9f0492fSopenharmony_ci#define FM_MANAGER_NOFAIL_ENABLED(fsMgrFlags) FS_MANAGER_FLAGS_ENABLED((fsMgrFlags), NOFAIL) 49d9f0492fSopenharmony_ci#define FM_MANAGER_FORMATTABLE_ENABLED(fsMgrFlags) FS_MANAGER_FLAGS_ENABLED((fsMgrFlags), FORMATTABLE) 50d9f0492fSopenharmony_ci 51d9f0492fSopenharmony_citypedef enum MountStatus { 52d9f0492fSopenharmony_ci MOUNT_ERROR = -1, 53d9f0492fSopenharmony_ci MOUNT_UMOUNTED = 0, 54d9f0492fSopenharmony_ci MOUNT_MOUNTED = 1, 55d9f0492fSopenharmony_ci} MountStatus; 56d9f0492fSopenharmony_ci 57d9f0492fSopenharmony_citypedef struct FstabItem { 58d9f0492fSopenharmony_ci char *deviceName; // Block device name 59d9f0492fSopenharmony_ci char *mountPoint; // Mount point 60d9f0492fSopenharmony_ci char *fsType; // File system type 61d9f0492fSopenharmony_ci char *mountOptions; // File system mount options. readonly, rw, remount etc. 62d9f0492fSopenharmony_ci unsigned int fsManagerFlags; // flags defined by fs manager. 63d9f0492fSopenharmony_ci struct FstabItem *next; 64d9f0492fSopenharmony_ci} FstabItem; 65d9f0492fSopenharmony_ci 66d9f0492fSopenharmony_citypedef struct { 67d9f0492fSopenharmony_ci struct FstabItem *head; 68d9f0492fSopenharmony_ci struct FstabItem *tail; 69d9f0492fSopenharmony_ci} Fstab; 70d9f0492fSopenharmony_ci 71d9f0492fSopenharmony_citypedef enum SlotFlag { 72d9f0492fSopenharmony_ci UNBOOT = 0, 73d9f0492fSopenharmony_ci ACTIVE = 1, 74d9f0492fSopenharmony_ci} SlotFlag; 75d9f0492fSopenharmony_ci 76d9f0492fSopenharmony_citypedef struct SlotInfo { 77d9f0492fSopenharmony_ci int slotName; 78d9f0492fSopenharmony_ci char *slotSuffix; 79d9f0492fSopenharmony_ci SlotFlag slotFlag; 80d9f0492fSopenharmony_ci unsigned int retryCount; 81d9f0492fSopenharmony_ci unsigned int reserved; 82d9f0492fSopenharmony_ci} SlotInfo; 83d9f0492fSopenharmony_ci 84d9f0492fSopenharmony_ciFstab* LoadFstabFromCommandLine(void); 85d9f0492fSopenharmony_ciint GetBootSlots(void); 86d9f0492fSopenharmony_ciint GetCurrentSlot(void); 87d9f0492fSopenharmony_civoid ReleaseFstab(Fstab *fstab); 88d9f0492fSopenharmony_ciFstab *ReadFstabFromFile(const char *file, bool procMounts); 89d9f0492fSopenharmony_ciFstabItem *FindFstabItemForPath(Fstab fstab, const char *path); 90d9f0492fSopenharmony_ciFstabItem* FindFstabItemForMountPoint(Fstab fstab, const char *mp); 91d9f0492fSopenharmony_ciint ParseFstabPerLine(char *str, Fstab *fstab, bool procMounts, const char *separator); 92d9f0492fSopenharmony_ci 93d9f0492fSopenharmony_ciint GetBlockDeviceByMountPoint(const char *mountPoint, const Fstab *fstab, char *deviceName, int nameLen); 94d9f0492fSopenharmony_ciint GetBlockDeviceByName(const char *deviceName, const Fstab *fstab, char* miscDev, size_t size); 95d9f0492fSopenharmony_cibool IsSupportedFilesystem(const char *fsType); 96d9f0492fSopenharmony_ciint DoFormat(const char *devPath, const char *fsType); 97d9f0492fSopenharmony_ciint MountOneItem(FstabItem *item); 98d9f0492fSopenharmony_ciMountStatus GetMountStatusForMountPoint(const char *mp); 99d9f0492fSopenharmony_ciint MountAllWithFstabFile(const char *fstabFile, bool required); 100d9f0492fSopenharmony_ciint MountAllWithFstab(const Fstab *fstab, bool required); 101d9f0492fSopenharmony_ciint UmountAllWithFstabFile(const char *file); 102d9f0492fSopenharmony_ciint MountOneWithFstabFile(const char *fstabFile, const char *devName, bool required); 103d9f0492fSopenharmony_ciint FsManagerDmRemoveDevice(const char *devName); 104d9f0492fSopenharmony_ciunsigned long GetMountFlags(char *mountFlag, char *fsSpecificFlags, size_t fsSpecificFlagSize, 105d9f0492fSopenharmony_ci const char *mountPoint); 106d9f0492fSopenharmony_ci 107d9f0492fSopenharmony_ciint GetBlockDevicePath(const char *partName, char *path, size_t size); 108d9f0492fSopenharmony_ci 109d9f0492fSopenharmony_ci// Get fscrypt policy if exist 110d9f0492fSopenharmony_ciint LoadFscryptPolicy(char *buf, size_t size); 111d9f0492fSopenharmony_ci#ifdef __cplusplus 112d9f0492fSopenharmony_ci#if __cplusplus 113d9f0492fSopenharmony_ci} 114d9f0492fSopenharmony_ci#endif 115d9f0492fSopenharmony_ci#endif 116d9f0492fSopenharmony_ci 117d9f0492fSopenharmony_ci#endif // STARTUP_FS_MANAGER_H 118