blob: 3bd575ef5f956efa5274d09911f7978ba6b26d22
1 | /* |
2 | * ZFS filesystem port for Uboot by |
3 | * Jorgen Lundman <lundman at lundman.net> |
4 | * |
5 | * zfsfs support |
6 | * made from existing GRUB Sources by Sun, GNU and others. |
7 | * |
8 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License version 2 as |
10 | * published by the Free Software Foundation. |
11 | * |
12 | * This program is distributed in the hope that it will be useful, |
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
15 | * GNU General Public License for more details. |
16 | * |
17 | * You should have received a copy of the GNU General Public License |
18 | * along with this program; if not, write to the Free Software |
19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
20 | */ |
21 | |
22 | #ifndef __ZFS_COMMON__ |
23 | #define __ZFS_COMMON__ |
24 | |
25 | #define SECTOR_SIZE 0x200 |
26 | #define SECTOR_BITS 9 |
27 | |
28 | |
29 | typedef enum zfs_endian { |
30 | UNKNOWN_ENDIAN = -2, |
31 | LITTLE_ENDIAN = -1, |
32 | BIG_ENDIAN = 0 |
33 | } zfs_endian_t; |
34 | |
35 | |
36 | /* Endian macros. */ |
37 | #define zfs_to_cpu16(x, a) (((a) == BIG_ENDIAN) ? be16_to_cpu(x) \ |
38 | : le16_to_cpu(x)) |
39 | #define cpu_to_zfs16(x, a) (((a) == BIG_ENDIAN) ? cpu_to_be16(x) \ |
40 | : cpu_to_le16(x)) |
41 | |
42 | #define zfs_to_cpu32(x, a) (((a) == BIG_ENDIAN) ? be32_to_cpu(x) \ |
43 | : le32_to_cpu(x)) |
44 | #define cpu_to_zfs32(x, a) (((a) == BIG_ENDIAN) ? cpu_to_be32(x) \ |
45 | : cpu_to_le32(x)) |
46 | |
47 | #define zfs_to_cpu64(x, a) (((a) == BIG_ENDIAN) ? be64_to_cpu(x) \ |
48 | : le64_to_cpu(x)) |
49 | #define cpu_to_zfs64(x, a) (((a) == BIG_ENDIAN) ? cpu_to_be64(x) \ |
50 | : cpu_to_le64(x)) |
51 | |
52 | |
53 | enum zfs_errors { |
54 | ZFS_ERR_NONE = 0, |
55 | ZFS_ERR_NOT_IMPLEMENTED_YET = -1, |
56 | ZFS_ERR_BAD_FS = -2, |
57 | ZFS_ERR_OUT_OF_MEMORY = -3, |
58 | ZFS_ERR_FILE_NOT_FOUND = -4, |
59 | ZFS_ERR_BAD_FILE_TYPE = -5, |
60 | ZFS_ERR_OUT_OF_RANGE = -6, |
61 | }; |
62 | |
63 | struct zfs_filesystem { |
64 | |
65 | /* Block Device Descriptor */ |
66 | block_dev_desc_t *dev_desc; |
67 | }; |
68 | |
69 | struct device_s { |
70 | uint64_t part_length; |
71 | }; |
72 | typedef struct device_s *device_t; |
73 | |
74 | struct zfs_file { |
75 | device_t device; |
76 | uint64_t size; |
77 | void *data; |
78 | uint64_t offset; |
79 | }; |
80 | |
81 | typedef struct zfs_file *zfs_file_t; |
82 | |
83 | struct zfs_dirhook_info { |
84 | int dir; |
85 | int mtimeset; |
86 | time_t mtime; |
87 | time_t mtime2; |
88 | }; |
89 | |
90 | |
91 | |
92 | |
93 | struct zfs_filesystem *zfsget_fs(void); |
94 | int zfs_open(zfs_file_t, const char *filename); |
95 | uint64_t zfs_read(zfs_file_t, char *buf, uint64_t len); |
96 | struct zfs_data *zfs_mount(device_t); |
97 | int zfs_close(zfs_file_t); |
98 | int zfs_ls(device_t dev, const char *path, |
99 | int (*hook) (const char *, const struct zfs_dirhook_info *)); |
100 | int zfs_devread(int sector, int byte_offset, int byte_len, char *buf); |
101 | void zfs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info); |
102 | void zfs_unmount(struct zfs_data *data); |
103 | int lzjb_decompress(void *, void *, uint32_t, uint32_t); |
104 | #endif |
105 |