| // Copyright 2021 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef THIRD_PARTY_F2FS_MKFS_H_ |
| #define THIRD_PARTY_F2FS_MKFS_H_ |
| |
| namespace f2fs { |
| |
| constexpr uint32_t kChecksumOffset = 4092; |
| |
| static const char* kMediaExtList[] = {"jpg", "gif", "png", "avi", "divx", "mp4", "mp3", "3gp", |
| "wmv", "wma", "mpeg", "mkv", "mov", "asx", "asf", "wmx", |
| "svi", "wvx", "wm", "mpg", "mpe", "rm", "ogg"}; |
| |
| struct MkfsOptions { |
| char* label = nullptr; |
| bool heap_based_allocation = true; |
| uint32_t overprovision_ratio = 5; |
| uint32_t segs_per_sec = 1; |
| uint32_t secs_per_zone = 1; |
| char* extension_list = nullptr; |
| }; |
| |
| class MkfsWorker { |
| public: |
| explicit MkfsWorker(Bcache* bc); |
| |
| ~MkfsWorker() = default; |
| |
| zx_status_t DoMkfs(); |
| zx_status_t ParseOptions(int argc, char** argv); |
| |
| private: |
| Bcache* bc_; |
| MkfsOptions mkfs_options_; |
| |
| // F2FS Parameter |
| GlobalParameters params_; |
| SuperBlock super_block_; |
| |
| void InitGlobalParameters(); |
| zx_status_t GetDeviceInfo(); |
| zx_status_t FormatDevice(); |
| |
| void ConfigureExtensionList(); |
| |
| zx_status_t WriteToDisk(void* buf, uint64_t offset, size_t length); |
| |
| zx_status_t PrepareSuperBlock(); |
| zx_status_t InitSitArea(); |
| zx_status_t InitNatArea(); |
| |
| zx_status_t WriteCheckPointPack(); |
| zx_status_t WriteSuperBlock(); |
| zx_status_t WriteRootInode(); |
| zx_status_t UpdateNatRoot(); |
| zx_status_t AddDefaultDentryRoot(); |
| zx_status_t CreateRootDir(); |
| |
| void PrintUsage(); |
| void PrintCurrentOption(); |
| |
| zx_status_t TrimDevice(); |
| }; |
| |
| zx_status_t Mkfs(Bcache* bc, int argc, char** argv); |
| |
| void AsciiToUnicode(const std::string& in_string, std::u16string* out_string); |
| |
| } // namespace f2fs |
| |
| #endif // THIRD_PARTY_F2FS_MKFS_H_ |