linux/fs/befs/befs_fs_types.h
<<
>>
Prefs
   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
  48enum 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
  72enum 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
  87typedef u64 __bitwise fs64;
  88typedef u32 __bitwise fs32;
  89typedef u16 __bitwise fs16;
  90
  91typedef u64 befs_off_t;
  92typedef fs64 befs_time_t;
  93
  94/* Block runs */
  95typedef struct {
  96        fs32 allocation_group;
  97        fs16 start;
  98        fs16 len;
  99} PACKED befs_disk_block_run;
 100
 101typedef struct {
 102        u32 allocation_group;
 103        u16 start;
 104        u16 len;
 105} PACKED befs_block_run;
 106
 107typedef befs_disk_block_run befs_disk_inode_addr;
 108typedef befs_block_run befs_inode_addr;
 109
 110/*
 111 * The Superblock Structure
 112 */
 113typedef 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 */
 147typedef 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
 157typedef 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 */
 168typedef 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 */
 176typedef 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
 207enum 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
 217typedef 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
 227typedef 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 */
 240typedef 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
 248typedef 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 */
 257