Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * Copyright (C) International Business Machines Corp., 2000-2004 | |
3 | * | |
4 | * This program is free software; you can redistribute it and/or modify | |
5 | * it under the terms of the GNU General Public License as published by | |
6 | * the Free Software Foundation; either version 2 of the License, or | |
7 | * (at your option) any later version. | |
8 | * | |
9 | * This program is distributed in the hope that it will be useful, | |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See | |
12 | * the GNU General Public License for more details. | |
13 | * | |
14 | * You should have received a copy of the GNU General Public License | |
15 | * along with this program; if not, write to the Free Software | |
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
17 | */ | |
18 | #ifndef _H_JFS_TYPES | |
19 | #define _H_JFS_TYPES | |
20 | ||
21 | /* | |
22 | * jfs_types.h: | |
23 | * | |
f720e3ba | 24 | * basic type/utility definitions |
1da177e4 LT |
25 | * |
26 | * note: this header file must be the 1st include file | |
27 | * of JFS include list in all JFS .c file. | |
28 | */ | |
29 | ||
30 | #include <linux/types.h> | |
31 | #include <linux/nls.h> | |
32 | ||
33 | #include "endian24.h" | |
34 | ||
35 | /* | |
36 | * transaction and lock id's | |
37 | * | |
38 | * Don't change these without carefully considering the impact on the | |
39 | * size and alignment of all of the linelock variants | |
40 | */ | |
41 | typedef u16 tid_t; | |
42 | typedef u16 lid_t; | |
43 | ||
44 | /* | |
45 | * Almost identical to Linux's timespec, but not quite | |
46 | */ | |
47 | struct timestruc_t { | |
48 | __le32 tv_sec; | |
49 | __le32 tv_nsec; | |
50 | }; | |
51 | ||
52 | /* | |
53 | * handy | |
54 | */ | |
55 | ||
56 | #define LEFTMOSTONE 0x80000000 | |
f720e3ba DK |
57 | #define HIGHORDER 0x80000000u /* high order bit on */ |
58 | #define ONES 0xffffffffu /* all bit on */ | |
1da177e4 | 59 | |
1da177e4 LT |
60 | /* |
61 | * logical xd (lxd) | |
62 | */ | |
63 | typedef struct { | |
64 | unsigned len:24; | |
65 | unsigned off1:8; | |
66 | u32 off2; | |
67 | } lxd_t; | |
68 | ||
69 | /* lxd_t field construction */ | |
70 | #define LXDlength(lxd, length32) ( (lxd)->len = length32 ) | |
71 | #define LXDoffset(lxd, offset64)\ | |
72 | {\ | |
73 | (lxd)->off1 = ((s64)offset64) >> 32;\ | |
74 | (lxd)->off2 = (offset64) & 0xffffffff;\ | |
75 | } | |
76 | ||
77 | /* lxd_t field extraction */ | |
78 | #define lengthLXD(lxd) ( (lxd)->len ) | |
79 | #define offsetLXD(lxd)\ | |
80 | ( ((s64)((lxd)->off1)) << 32 | (lxd)->off2 ) | |
81 | ||
82 | /* lxd list */ | |
83 | struct lxdlist { | |
84 | s16 maxnlxd; | |
85 | s16 nlxd; | |
86 | lxd_t *lxd; | |
87 | }; | |
88 | ||
89 | /* | |
90 | * physical xd (pxd) | |
91 | */ | |
92 | typedef struct { | |
93 | unsigned len:24; | |
94 | unsigned addr1:8; | |
95 | __le32 addr2; | |
96 | } pxd_t; | |
97 | ||
98 | /* xd_t field construction */ | |
99 | ||
100 | #define PXDlength(pxd, length32) ((pxd)->len = __cpu_to_le24(length32)) | |
101 | #define PXDaddress(pxd, address64)\ | |
102 | {\ | |
103 | (pxd)->addr1 = ((s64)address64) >> 32;\ | |
104 | (pxd)->addr2 = __cpu_to_le32((address64) & 0xffffffff);\ | |
105 | } | |
106 | ||
107 | /* xd_t field extraction */ | |
108 | #define lengthPXD(pxd) __le24_to_cpu((pxd)->len) | |
109 | #define addressPXD(pxd)\ | |
110 | ( ((s64)((pxd)->addr1)) << 32 | __le32_to_cpu((pxd)->addr2)) | |
111 | ||
112 | #define MAXTREEHEIGHT 8 | |
113 | /* pxd list */ | |
114 | struct pxdlist { | |
115 | s16 maxnpxd; | |
116 | s16 npxd; | |
117 | pxd_t pxd[MAXTREEHEIGHT]; | |
118 | }; | |
119 | ||
120 | ||
121 | /* | |
122 | * data extent descriptor (dxd) | |
123 | */ | |
124 | typedef struct { | |
125 | unsigned flag:8; /* 1: flags */ | |
126 | unsigned rsrvd:24; | |
127 | __le32 size; /* 4: size in byte */ | |
128 | unsigned len:24; /* 3: length in unit of fsblksize */ | |
129 | unsigned addr1:8; /* 1: address in unit of fsblksize */ | |
130 | __le32 addr2; /* 4: address in unit of fsblksize */ | |
131 | } dxd_t; /* - 16 - */ | |
132 | ||
133 | /* dxd_t flags */ | |
134 | #define DXD_INDEX 0x80 /* B+-tree index */ | |
135 | #define DXD_INLINE 0x40 /* in-line data extent */ | |
136 | #define DXD_EXTENT 0x20 /* out-of-line single extent */ | |
137 | #define DXD_FILE 0x10 /* out-of-line file (inode) */ | |
138 | #define DXD_CORRUPT 0x08 /* Inconsistency detected */ | |
139 | ||
140 | /* dxd_t field construction | |
141 | * Conveniently, the PXD macros work for DXD | |
142 | */ | |
143 | #define DXDlength PXDlength | |
144 | #define DXDaddress PXDaddress | |
145 | #define lengthDXD lengthPXD | |
146 | #define addressDXD addressPXD | |
147 | #define DXDsize(dxd, size32) ((dxd)->size = cpu_to_le32(size32)) | |
148 | #define sizeDXD(dxd) le32_to_cpu((dxd)->size) | |
149 | ||
150 | /* | |
f720e3ba | 151 | * directory entry argument |
1da177e4 LT |
152 | */ |
153 | struct component_name { | |
154 | int namlen; | |
155 | wchar_t *name; | |
156 | }; | |
157 | ||
158 | ||
159 | /* | |
160 | * DASD limit information - stored in directory inode | |
161 | */ | |
162 | struct dasd { | |
f720e3ba DK |
163 | u8 thresh; /* Alert Threshold (in percent) */ |
164 | u8 delta; /* Alert Threshold delta (in percent) */ | |
1da177e4 | 165 | u8 rsrvd1; |
f720e3ba DK |
166 | u8 limit_hi; /* DASD limit (in logical blocks) */ |
167 | __le32 limit_lo; /* DASD limit (in logical blocks) */ | |
1da177e4 | 168 | u8 rsrvd2[3]; |
f720e3ba DK |
169 | u8 used_hi; /* DASD usage (in logical blocks) */ |
170 | __le32 used_lo; /* DASD usage (in logical blocks) */ | |
1da177e4 LT |
171 | }; |
172 | ||
173 | #define DASDLIMIT(dasdp) \ | |
174 | (((u64)((dasdp)->limit_hi) << 32) + __le32_to_cpu((dasdp)->limit_lo)) | |
175 | #define setDASDLIMIT(dasdp, limit)\ | |
176 | {\ | |
177 | (dasdp)->limit_hi = ((u64)limit) >> 32;\ | |
178 | (dasdp)->limit_lo = __cpu_to_le32(limit);\ | |
179 | } | |
180 | #define DASDUSED(dasdp) \ | |
181 | (((u64)((dasdp)->used_hi) << 32) + __le32_to_cpu((dasdp)->used_lo)) | |
182 | #define setDASDUSED(dasdp, used)\ | |
183 | {\ | |
184 | (dasdp)->used_hi = ((u64)used) >> 32;\ | |
185 | (dasdp)->used_lo = __cpu_to_le32(used);\ | |
186 | } | |
187 | ||
188 | #endif /* !_H_JFS_TYPES */ |