summaryrefslogtreecommitdiff
path: root/include/arch/x86_64/linux/romfs_fs.h
blob: 7d9aeb247bf937b7e810abf316cc24d52f8b3bb7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#ifndef __LINUX_ROMFS_FS_H
#define __LINUX_ROMFS_FS_H

#include <linux/types.h>
#include <linux/fs.h>

/* The basic structures of the romfs filesystem */

#define ROMBSIZE    BLOCK_SIZE
#define ROMBSBITS   BLOCK_SIZE_BITS
#define ROMBMASK    (ROMBSIZE - 1)
#define ROMFS_MAGIC 0x7275

#define ROMFS_MAXFN 128

#define __mkw(h, l)	  (((h) & 0x00ff) << 8 | ((l) & 0x00ff))
#define __mkl(h, l)	  (((h) & 0xffff) << 16 | ((l) & 0xffff))
#define __mk4(a, b, c, d) cpu_to_be32(__mkl(__mkw(a, b), __mkw(c, d)))
#define ROMSB_WORD0	  __mk4('-', 'r', 'o', 'm')
#define ROMSB_WORD1	  __mk4('1', 'f', 's', '-')

/* On-disk "super block" */

struct romfs_super_block {
	__be32 word0;
	__be32 word1;
	__be32 size;
	__be32 checksum;
	char name[]; /* volume name */
};

/* On disk inode */

struct romfs_inode {
	__be32 next; /* low 4 bits see ROMFH_ */
	__be32 spec;
	__be32 size;
	__be32 checksum;
	char name[];
};

#define ROMFH_TYPE 7
#define ROMFH_HRD  0
#define ROMFH_DIR  1
#define ROMFH_REG  2
#define ROMFH_SYM  3
#define ROMFH_BLK  4
#define ROMFH_CHR  5
#define ROMFH_SCK  6
#define ROMFH_FIF  7
#define ROMFH_EXEC 8

/* Alignment */

#define ROMFH_SIZE 16
#define ROMFH_PAD  (ROMFH_SIZE - 1)
#define ROMFH_MASK (~ROMFH_PAD)

#endif