root/fs/befs/befs_fs_types.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /*
   3  * fs/befs/befs_fs_types.h
   4  *
   5  * Copyright (C) 2001 Will Dyson (will@cs.earlham.edu)
   6  *
   7  *
   8  *
   9  * from linux/include/linux/befs_fs.h
  10  *
  11  * Copyright (C) 1999 Makoto Kato (m_kato@ga2.so-net.ne.jp)
  12  *
  13  */
  14 
  15 #ifndef _LINUX_BEFS_FS_TYPES
  16 #define _LINUX_BEFS_FS_TYPES
  17 
  18 #ifdef __KERNEL__
  19 #include <linux/types.h>
  20 #endif /*__KERNEL__*/
  21 
  22 #define PACKED __attribute__ ((__packed__))
  23 
  24 /*
  25  * Max name lengths of BFS
  26  */
  27 
  28 #define BEFS_NAME_LEN 255
  29 
  30 #define BEFS_SYMLINK_LEN 144
  31 #define BEFS_NUM_DIRECT_BLOCKS 12
  32 #define B_OS_NAME_LENGTH 32
  33 
  34 /* The datastream blocks mapped by the double-indirect
  35  * block are always 4 fs blocks long.
  36  * This eliminates the need for linear searches among
  37  * the potentially huge number of indirect blocks
  38  *
  39  * Err. Should that be 4 fs blocks or 4k???
  40  * It matters on large blocksize volumes
  41  */
  42 #define BEFS_DBLINDIR_BRUN_LEN 4
  43 
  44 /*
  45  * Flags of superblock
  46  */
  47 
  48 enum super_flags {
  49         BEFS_BYTESEX_BE,
  50         BEFS_BYTESEX_LE,
  51         BEFS_CLEAN = 0x434c454e,
  52         BEFS_DIRTY = 0x44495254,
  53         BEFS_SUPER_MAGIC1 = 0x42465331, /* BFS1 */
  54         BEFS_SUPER_MAGIC2 = 0xdd121031,
  55         BEFS_SUPER_MAGIC3 = 0x15b6830e,
  56 };
  57 
  58 #define BEFS_BYTEORDER_NATIVE 0x42494745
  59 #define BEFS_BYTEORDER_NATIVE_LE ((__force fs32)cpu_to_le32(BEFS_BYTEORDER_NATIVE))
  60 #define BEFS_BYTEORDER_NATIVE_BE ((__force fs32)cpu_to_be32(BEFS_BYTEORDER_NATIVE))
  61 
  62 #define BEFS_SUPER_MAGIC BEFS_SUPER_MAGIC1
  63 #define BEFS_SUPER_MAGIC1_LE ((__force fs32)cpu_to_le32(BEFS_SUPER_MAGIC1))
  64 #define BEFS_SUPER_MAGIC1_BE ((__force fs32)cpu_to_be32(BEFS_SUPER_MAGIC1))
  65 
  66 /*
  67  * Flags of inode
  68  */
  69 
  70 #define BEFS_INODE_MAGIC1 0x3bbe0ad9
  71 
  72 enum inode_flags {
  73         BEFS_INODE_IN_USE = 0x00000001,
  74         BEFS_ATTR_INODE = 0x00000004,
  75         BEFS_INODE_LOGGED = 0x00000008,
  76         BEFS_INODE_DELETED = 0x00000010,
  77         BEFS_LONG_SYMLINK = 0x00000040,
  78         BEFS_PERMANENT_FLAG = 0x0000ffff,
  79         BEFS_INODE_NO_CREATE = 0x00010000,
  80         BEFS_INODE_WAS_WRITTEN = 0x00020000,
  81         BEFS_NO_TRANSACTION = 0x00040000,
  82 };
  83 /*
  84  * On-Disk datastructures of BeFS
  85  */
  86 
  87 typedef u64 __bitwise fs64;
  88 typedef u32 __bitwise fs32;
  89 typedef u16 __bitwise fs16;
  90 
  91 typedef u64 befs_off_t;
  92 typedef fs64 befs_time_t;
  93 
  94 /* Block runs */
  95 typedef struct {
  96         fs32 allocation_group;
  97         fs16 start;
  98         fs16 len;
  99 } PACKED befs_disk_block_run;
 100 
 101 typedef struct {
 102         u32 allocation_group;
 103         u16 start;
 104         u16 len;
 105 } PACKED befs_block_run;
 106 
 107 typedef befs_disk_block_run befs_disk_inode_addr;
 108 typedef befs_block_run befs_inode_addr;
 109 
 110 /*
 111  * The Superblock Structure
 112  */
 113 typedef struct {
 114         char name[B_OS_NAME_LENGTH];
 115         fs32 magic1;
 116         fs32 fs_byte_order;
 117 
 118         fs32 block_size;
 119         fs32 block_shift;
 120 
 121         fs64 num_blocks;
 122         fs64 used_blocks;
 123 
 124         fs32 inode_size;
 125 
 126         fs32 magic2;
 127         fs32 blocks_per_ag;
 128         fs32 ag_shift;
 129         fs32 num_ags;
 130 
 131         fs32 flags;
 132 
 133         befs_disk_block_run log_blocks;
 134         fs64 log_start;
 135         fs64 log_end;
 136 
 137         fs32 magic3;
 138         befs_disk_inode_addr root_dir;
 139         befs_disk_inode_addr indices;
 140 
 141 } PACKED befs_super_block;
 142 
 143 /*
 144  * Note: the indirect and dbl_indir block_runs may
 145  * be longer than one block!
 146  */
 147 typedef struct {
 148         befs_disk_block_run direct[BEFS_NUM_DIRECT_BLOCKS];
 149         fs64 max_direct_range;
 150         befs_disk_block_run indirect;
 151         fs64 max_indirect_range;
 152         befs_disk_block_run double_indirect;
 153         fs64 max_double_indirect_range;
 154         fs64 size;
 155 } PACKED befs_disk_data_stream;
 156 
 157 typedef struct {
 158         befs_block_run direct[BEFS_NUM_DIRECT_BLOCKS];
 159         befs_off_t max_direct_range;
 160         befs_block_run indirect;
 161         befs_off_t max_indirect_range;
 162         befs_block_run double_indirect;
 163         befs_off_t max_double_indirect_range;
 164         befs_off_t size;
 165 } PACKED befs_data_stream;
 166 
 167 /* Attribute */
 168 typedef struct {
 169         fs32 type;
 170         fs16 name_size;
 171         fs16 data_size;
 172         char name[1];
 173 } PACKED befs_small_data;
 174 
 175 /* Inode structure */
 176 typedef struct {
 177         fs32 magic1;
 178         befs_disk_inode_addr inode_num;
 179         fs32 uid;
 180         fs32 gid;
 181         fs32 mode;
 182         fs32 flags;
 183         befs_time_t create_time;
 184         befs_time_t last_modified_time;
 185         befs_disk_inode_addr parent;
 186         befs_disk_inode_addr attributes;
 187         fs32 type;
 188 
 189         fs32 inode_size;
 190         fs32 etc;               /* not use */
 191 
 192         union {
 193                 befs_disk_data_stream datastream;
 194                 char symlink[BEFS_SYMLINK_LEN];
 195         } data;
 196 
 197         fs32 pad[4];            /* not use */
 198         befs_small_data small_data[1];
 199 } PACKED befs_inode;
 200 
 201 /*
 202  * B+tree superblock
 203  */
 204 
 205 #define BEFS_BTREE_MAGIC 0x69f6c2e8
 206 
 207 enum btree_types {
 208         BTREE_STRING_TYPE = 0,
 209         BTREE_INT32_TYPE = 1,
 210         BTREE_UINT32_TYPE = 2,
 211         BTREE_INT64_TYPE = 3,
 212         BTREE_UINT64_TYPE = 4,
 213         BTREE_FLOAT_TYPE = 5,
 214         BTREE_DOUBLE_TYPE = 6
 215 };
 216 
 217 typedef struct {
 218         fs32 magic;
 219         fs32 node_size;
 220         fs32 max_depth;
 221         fs32 data_type;
 222         fs64 root_node_ptr;
 223         fs64 free_node_ptr;
 224         fs64 max_size;
 225 } PACKED befs_disk_btree_super;
 226 
 227 typedef struct {
 228         u32 magic;
 229         u32 node_size;
 230         u32 max_depth;
 231         u32 data_type;
 232         befs_off_t root_node_ptr;
 233         befs_off_t free_node_ptr;
 234         befs_off_t max_size;
 235 } PACKED befs_btree_super;
 236 
 237 /*
 238  * Header structure of each btree node
 239  */
 240 typedef struct {
 241         fs64 left;
 242         fs64 right;
 243         fs64 overflow;
 244         fs16 all_key_count;
 245         fs16 all_key_length;
 246 } PACKED befs_btree_nodehead;
 247 
 248 typedef struct {
 249         befs_off_t left;
 250         befs_off_t right;
 251         befs_off_t overflow;
 252         u16 all_key_count;
 253         u16 all_key_length;
 254 } PACKED befs_host_btree_nodehead;
 255 
 256 #endif                          /* _LINUX_BEFS_FS_TYPES */

/* [<][>][^][v][top][bottom][index][help] */