blob: 3c27edefb21b8a81849cc0cbb8e391d7fd59f52f [file] [log] [blame]
Ken Sumrall7574c032012-01-06 19:09:42 -08001/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef __CORE_FS_MGR_H
18#define __CORE_FS_MGR_H
19
Geremy Condra3ad3d1c2013-02-22 18:11:41 -080020#include <stdint.h>
Chuanxiao Dongd78dff12016-03-08 15:54:55 +010021#include <stdbool.h>
Geremy Condra3ad3d1c2013-02-22 18:11:41 -080022#include <linux/dm-ioctl.h>
23
Paul Lawrencebbb36312014-10-09 14:22:49 +000024// Magic number at start of verity metadata
25#define VERITY_METADATA_MAGIC_NUMBER 0xb001b001
26
27// Replacement magic number at start of verity metadata to cleanly
28// turn verity off in userdebug builds.
29#define VERITY_METADATA_MAGIC_DISABLE 0x46464f56 // "VOFF"
30
Sami Tolvanenacbf9be2015-03-19 10:00:34 +000031#ifdef __cplusplus
32extern "C" {
33#endif
34
Sami Tolvanen51bf11a2015-02-16 10:27:21 +000035// Verity modes
36enum verity_mode {
37 VERITY_MODE_EIO = 0,
38 VERITY_MODE_LOGGING = 1,
39 VERITY_MODE_RESTART = 2,
Sami Tolvanen946a0f32015-03-22 12:40:05 +000040 VERITY_MODE_LAST = VERITY_MODE_RESTART,
41 VERITY_MODE_DEFAULT = VERITY_MODE_RESTART
Sami Tolvanen51bf11a2015-02-16 10:27:21 +000042};
43
JP Abgrall5c01dac2014-06-18 14:54:37 -070044/*
45 * The entries must be kept in the same order as they were seen in the fstab.
46 * Unless explicitly requested, a lookup on mount point should always
47 * return the 1st one.
48 */
Ken Sumrallab6b8522013-02-13 12:58:40 -080049struct fstab {
50 int num_entries;
51 struct fstab_rec *recs;
52 char *fstab_filename;
53};
54
55struct fstab_rec {
56 char *blk_device;
57 char *mount_point;
58 char *fs_type;
59 unsigned long flags;
60 char *fs_options;
61 int fs_mgr_flags;
62 char *key_loc;
Geremy Condra3ad3d1c2013-02-22 18:11:41 -080063 char *verity_loc;
Ken Sumrallab6b8522013-02-13 12:58:40 -080064 long long length;
65 char *label;
66 int partnum;
Ken Sumrall5bc31a22013-07-08 19:11:55 -070067 int swap_prio;
68 unsigned int zram_size;
Ken Sumrallab6b8522013-02-13 12:58:40 -080069};
70
Sami Tolvanenacbf9be2015-03-19 10:00:34 +000071// Callback function for verity status
72typedef void (*fs_mgr_verity_state_callback)(struct fstab_rec *fstab,
Sami Tolvanen45474232015-03-30 11:38:38 +010073 const char *mount_point, int mode, int status);
Sami Tolvanenacbf9be2015-03-19 10:00:34 +000074
Ken Sumrallab6b8522013-02-13 12:58:40 -080075struct fstab *fs_mgr_read_fstab(const char *fstab_path);
76void fs_mgr_free_fstab(struct fstab *fstab);
JP Abgrallf22b7452014-07-02 13:16:04 -070077
Paul Lawrencec410b3b2015-03-26 15:49:42 +000078#define FS_MGR_MNTALL_DEV_NON_DEFAULT_FILE_ENCRYPTED 5
79#define FS_MGR_MNTALL_DEV_DEFAULT_FILE_ENCRYPTED 4
JP Abgrallcee20682014-07-02 14:26:54 -070080#define FS_MGR_MNTALL_DEV_NEEDS_RECOVERY 3
JP Abgrallf22b7452014-07-02 13:16:04 -070081#define FS_MGR_MNTALL_DEV_NEEDS_ENCRYPTION 2
82#define FS_MGR_MNTALL_DEV_MIGHT_BE_ENCRYPTED 1
83#define FS_MGR_MNTALL_DEV_NOT_ENCRYPTED 0
Chih-Hung Hsiehc713bce2016-05-18 15:59:37 -070084#define FS_MGR_MNTALL_FAIL (-1)
Ken Sumrallab6b8522013-02-13 12:58:40 -080085int fs_mgr_mount_all(struct fstab *fstab);
Paul Lawrencecf234dc2014-09-09 10:44:51 -070086
Chih-Hung Hsiehc713bce2016-05-18 15:59:37 -070087#define FS_MGR_DOMNT_FAILED (-1)
88#define FS_MGR_DOMNT_BUSY (-2)
Ken Sumrallab6b8522013-02-13 12:58:40 -080089int fs_mgr_do_mount(struct fstab *fstab, char *n_name, char *n_blk_device,
90 char *tmp_mount_point);
Ken Sumrall7574c032012-01-06 19:09:42 -080091int fs_mgr_do_tmpfs_mount(char *n_name);
Ken Sumrallab6b8522013-02-13 12:58:40 -080092int fs_mgr_unmount_all(struct fstab *fstab);
93int fs_mgr_get_crypt_info(struct fstab *fstab, char *key_loc,
94 char *real_blk_device, int size);
Sami Tolvanen51bf11a2015-02-16 10:27:21 +000095int fs_mgr_load_verity_state(int *mode);
Sami Tolvanenacbf9be2015-03-19 10:00:34 +000096int fs_mgr_update_verity_state(fs_mgr_verity_state_callback callback);
Ken Sumrallab6b8522013-02-13 12:58:40 -080097int fs_mgr_add_entry(struct fstab *fstab,
98 const char *mount_point, const char *fs_type,
Sasha Levitskiycdc1cfb2014-04-10 17:10:21 -070099 const char *blk_device);
Ken Sumrallab6b8522013-02-13 12:58:40 -0800100struct fstab_rec *fs_mgr_get_entry_for_mount_point(struct fstab *fstab, const char *path);
Paul Lawrencec410b3b2015-03-26 15:49:42 +0000101int fs_mgr_is_voldmanaged(const struct fstab_rec *fstab);
102int fs_mgr_is_nonremovable(const struct fstab_rec *fstab);
103int fs_mgr_is_verified(const struct fstab_rec *fstab);
104int fs_mgr_is_encryptable(const struct fstab_rec *fstab);
105int fs_mgr_is_file_encrypted(const struct fstab_rec *fstab);
106int fs_mgr_is_noemulatedsd(const struct fstab_rec *fstab);
Paul Lawrence84b0bab2015-03-26 14:53:19 +0000107int fs_mgr_is_notrim(struct fstab_rec *fstab);
Chris Fries79f33842013-09-05 13:19:21 -0500108int fs_mgr_is_formattable(struct fstab_rec *fstab);
Daniel Rosenbergde551ff2016-04-07 20:10:25 -0700109int fs_mgr_is_nofail(struct fstab_rec *fstab);
Ken Sumrall5bc31a22013-07-08 19:11:55 -0700110int fs_mgr_swapon_all(struct fstab *fstab);
Chris Fries79f33842013-09-05 13:19:21 -0500111
Chuanxiao Dongd78dff12016-03-08 15:54:55 +0100112int fs_mgr_do_format(struct fstab_rec *fstab, bool reserve_footer);
Chris Fries79f33842013-09-05 13:19:21 -0500113
Ken Sumrallab6b8522013-02-13 12:58:40 -0800114#ifdef __cplusplus
115}
116#endif
Ken Sumrall7574c032012-01-06 19:09:42 -0800117
118#endif /* __CORE_FS_MGR_H */