~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to roms/u-boot/include/ext4fs.h

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * (C) Copyright 2011 - 2012 Samsung Electronics
 
3
 * EXT4 filesystem implementation in Uboot by
 
4
 * Uma Shankar <uma.shankar@samsung.com>
 
5
 * Manjunatha C Achar <a.manjunatha@samsung.com>
 
6
 *
 
7
 * Ext4 Extent data structures are taken from  original ext4 fs code
 
8
 * as found in the linux kernel.
 
9
 *
 
10
 * Copyright (c) 2003-2006, Cluster File Systems, Inc, info@clusterfs.com
 
11
 * Written by Alex Tomas <alex@clusterfs.com>
 
12
 *
 
13
 * This program is free software; you can redistribute it and/or modify
 
14
 * it under the terms of the GNU General Public License version 2 as
 
15
 * published by the Free Software Foundation.
 
16
 *
 
17
 * This program is distributed in the hope that it will be useful,
 
18
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
19
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
20
 * GNU General Public License for more details.
 
21
 *
 
22
 * You should have received a copy of the GNU General Public License
 
23
 * along with this program; if not, write to the Free Software
 
24
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
25
 */
 
26
 
 
27
#ifndef __EXT4__
 
28
#define __EXT4__
 
29
#include <ext_common.h>
 
30
 
 
31
#define EXT4_EXTENTS_FL         0x00080000 /* Inode uses extents */
 
32
#define EXT4_EXT_MAGIC                  0xf30a
 
33
#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM 0x0010
 
34
#define EXT4_FEATURE_INCOMPAT_EXTENTS   0x0040
 
35
#define EXT4_INDIRECT_BLOCKS            12
 
36
 
 
37
#define EXT4_BG_INODE_UNINIT            0x0001
 
38
#define EXT4_BG_BLOCK_UNINIT            0x0002
 
39
#define EXT4_BG_INODE_ZEROED            0x0004
 
40
 
 
41
/*
 
42
 * ext4_inode has i_block array (60 bytes total).
 
43
 * The first 12 bytes store ext4_extent_header;
 
44
 * the remainder stores an array of ext4_extent.
 
45
 */
 
46
 
 
47
/*
 
48
 * This is the extent on-disk structure.
 
49
 * It's used at the bottom of the tree.
 
50
 */
 
51
struct ext4_extent {
 
52
        __le32  ee_block;       /* first logical block extent covers */
 
53
        __le16  ee_len;         /* number of blocks covered by extent */
 
54
        __le16  ee_start_hi;    /* high 16 bits of physical block */
 
55
        __le32  ee_start_lo;    /* low 32 bits of physical block */
 
56
};
 
57
 
 
58
/*
 
59
 * This is index on-disk structure.
 
60
 * It's used at all the levels except the bottom.
 
61
 */
 
62
struct ext4_extent_idx {
 
63
        __le32  ei_block;       /* index covers logical blocks from 'block' */
 
64
        __le32  ei_leaf_lo;     /* pointer to the physical block of the next *
 
65
                                 * level. leaf or next index could be there */
 
66
        __le16  ei_leaf_hi;     /* high 16 bits of physical block */
 
67
        __u16   ei_unused;
 
68
};
 
69
 
 
70
/* Each block (leaves and indexes), even inode-stored has header. */
 
71
struct ext4_extent_header {
 
72
        __le16  eh_magic;       /* probably will support different formats */
 
73
        __le16  eh_entries;     /* number of valid entries */
 
74
        __le16  eh_max;         /* capacity of store in entries */
 
75
        __le16  eh_depth;       /* has tree real underlying blocks? */
 
76
        __le32  eh_generation;  /* generation of the tree */
 
77
};
 
78
 
 
79
struct ext_filesystem {
 
80
        /* Total Sector of partition */
 
81
        uint64_t total_sect;
 
82
        /* Block size  of partition */
 
83
        uint32_t blksz;
 
84
        /* Inode size of partition */
 
85
        uint32_t inodesz;
 
86
        /* Sectors per Block */
 
87
        uint32_t sect_perblk;
 
88
        /* Group Descriptor Block Number */
 
89
        uint32_t gdtable_blkno;
 
90
        /* Total block groups of partition */
 
91
        uint32_t no_blkgrp;
 
92
        /* No of blocks required for bgdtable */
 
93
        uint32_t no_blk_pergdt;
 
94
        /* Superblock */
 
95
        struct ext2_sblock *sb;
 
96
        /* Block group descritpor table */
 
97
        struct ext2_block_group *bgd;
 
98
        char *gdtable;
 
99
 
 
100
        /* Block Bitmap Related */
 
101
        unsigned char **blk_bmaps;
 
102
        long int curr_blkno;
 
103
        uint16_t first_pass_bbmap;
 
104
 
 
105
        /* Inode Bitmap Related */
 
106
        unsigned char **inode_bmaps;
 
107
        int curr_inode_no;
 
108
        uint16_t first_pass_ibmap;
 
109
 
 
110
        /* Journal Related */
 
111
 
 
112
        /* Block Device Descriptor */
 
113
        block_dev_desc_t *dev_desc;
 
114
};
 
115
 
 
116
extern struct ext2_data *ext4fs_root;
 
117
extern struct ext2fs_node *ext4fs_file;
 
118
 
 
119
#if defined(CONFIG_EXT4_WRITE)
 
120
extern struct ext2_inode *g_parent_inode;
 
121
extern int gd_index;
 
122
extern int gindex;
 
123
 
 
124
int ext4fs_init(void);
 
125
void ext4fs_deinit(void);
 
126
int ext4fs_filename_check(char *filename);
 
127
int ext4fs_write(const char *fname, unsigned char *buffer,
 
128
                                unsigned long sizebytes);
 
129
#endif
 
130
 
 
131
struct ext_filesystem *get_fs(void);
 
132
int ext4fs_open(const char *filename);
 
133
int ext4fs_read(char *buf, unsigned len);
 
134
int ext4fs_mount(unsigned part_length);
 
135
void ext4fs_close(void);
 
136
void ext4fs_reinit_global(void);
 
137
int ext4fs_ls(const char *dirname);
 
138
int ext4fs_exists(const char *filename);
 
139
void ext4fs_free_node(struct ext2fs_node *node, struct ext2fs_node *currroot);
 
140
int ext4fs_devread(lbaint_t sector, int byte_offset, int byte_len, char *buf);
 
141
void ext4fs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info);
 
142
long int read_allocated_block(struct ext2_inode *inode, int fileblock);
 
143
int ext4fs_probe(block_dev_desc_t *fs_dev_desc,
 
144
                 disk_partition_t *fs_partition);
 
145
int ext4_read_file(const char *filename, void *buf, int offset, int len);
 
146
int ext4_read_superblock(char *buffer);
 
147
#endif