]>
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 | ||
1da177e4 LT |
33 | /* |
34 | * transaction and lock id's | |
35 | * | |
36 | * Don't change these without carefully considering the impact on the | |
37 | * size and alignment of all of the linelock variants | |
38 | */ | |
39 | typedef u16 tid_t; | |
40 | typedef u16 lid_t; | |
41 | ||
42 | /* | |
43 | * Almost identical to Linux's timespec, but not quite | |
44 | */ | |
45 | struct timestruc_t { | |
46 | __le32 tv_sec; | |
47 | __le32 tv_nsec; | |
48 | }; | |
49 | ||
50 | /* | |
51 | * handy | |
52 | */ | |
53 | ||
54 | #define LEFTMOSTONE 0x80000000 | |
f720e3ba DK |
55 | #define HIGHORDER 0x80000000u /* high order bit on */ |
56 | #define ONES 0xffffffffu /* all bit on */ | |
1da177e4 | 57 | |
1da177e4 LT |
58 | /* |
59 | * physical xd (pxd) | |
e1f1fe79 AV |
60 | * |
61 | * The leftmost 24 bits of len_addr are the extent length. | |
62 | * The rightmost 8 bits of len_addr are the most signficant bits of | |
63 | * the extent address | |
1da177e4 LT |
64 | */ |
65 | typedef struct { | |
e1f1fe79 | 66 | __le32 len_addr; |
1da177e4 LT |
67 | __le32 addr2; |
68 | } pxd_t; | |
69 | ||
70 | /* xd_t field construction */ | |
71 | ||
e1f1fe79 AV |
72 | static inline void PXDlength(pxd_t *pxd, __u32 len) |
73 | { | |
74 | pxd->len_addr = (pxd->len_addr & cpu_to_le32(~0xffffff)) | | |
75 | cpu_to_le32(len & 0xffffff); | |
76 | } | |
77 | ||
78 | static inline void PXDaddress(pxd_t *pxd, __u64 addr) | |
79 | { | |
80 | pxd->len_addr = (pxd->len_addr & cpu_to_le32(0xffffff)) | | |
81 | cpu_to_le32((addr >> 32)<<24); | |
82 | pxd->addr2 = cpu_to_le32(addr & 0xffffffff); | |
1da177e4 LT |
83 | } |
84 | ||
85 | /* xd_t field extraction */ | |
e1f1fe79 AV |
86 | static inline __u32 lengthPXD(pxd_t *pxd) |
87 | { | |
88 | return le32_to_cpu((pxd)->len_addr) & 0xffffff; | |
89 | } | |
90 | ||
91 | static inline __u64 addressPXD(pxd_t *pxd) | |
92 | { | |
93 | __u64 n = le32_to_cpu(pxd->len_addr) & ~0xffffff; | |
94 | return (n << 8) + le32_to_cpu(pxd->addr2); | |
95 | } | |
1da177e4 LT |
96 | |
97 | #define MAXTREEHEIGHT 8 | |
98 | /* pxd list */ | |
99 | struct pxdlist { | |
100 | s16 maxnpxd; | |
101 | s16 npxd; | |
102 | pxd_t pxd[MAXTREEHEIGHT]; | |
103 | }; | |
104 | ||
105 | ||
106 | /* | |
107 | * data extent descriptor (dxd) | |
108 | */ | |
109 | typedef struct { | |
e1f1fe79 AV |
110 | __u8 flag; /* 1: flags */ |
111 | __u8 rsrvd[3]; | |
1da177e4 | 112 | __le32 size; /* 4: size in byte */ |
e1f1fe79 | 113 | pxd_t loc; /* 8: address and length in unit of fsblksize */ |
1da177e4 LT |
114 | } dxd_t; /* - 16 - */ |
115 | ||
116 | /* dxd_t flags */ | |
117 | #define DXD_INDEX 0x80 /* B+-tree index */ | |
118 | #define DXD_INLINE 0x40 /* in-line data extent */ | |
119 | #define DXD_EXTENT 0x20 /* out-of-line single extent */ | |
120 | #define DXD_FILE 0x10 /* out-of-line file (inode) */ | |
121 | #define DXD_CORRUPT 0x08 /* Inconsistency detected */ | |
122 | ||
123 | /* dxd_t field construction | |
1da177e4 | 124 | */ |
e1f1fe79 AV |
125 | #define DXDlength(dxd, len) PXDlength(&(dxd)->loc, len) |
126 | #define DXDaddress(dxd, addr) PXDaddress(&(dxd)->loc, addr) | |
127 | #define lengthDXD(dxd) lengthPXD(&(dxd)->loc) | |
128 | #define addressDXD(dxd) addressPXD(&(dxd)->loc) | |
1da177e4 LT |
129 | #define DXDsize(dxd, size32) ((dxd)->size = cpu_to_le32(size32)) |
130 | #define sizeDXD(dxd) le32_to_cpu((dxd)->size) | |
131 | ||
132 | /* | |
f720e3ba | 133 | * directory entry argument |
1da177e4 LT |
134 | */ |
135 | struct component_name { | |
136 | int namlen; | |
137 | wchar_t *name; | |
138 | }; | |
139 | ||
140 | ||
141 | /* | |
142 | * DASD limit information - stored in directory inode | |
143 | */ | |
144 | struct dasd { | |
f720e3ba DK |
145 | u8 thresh; /* Alert Threshold (in percent) */ |
146 | u8 delta; /* Alert Threshold delta (in percent) */ | |
1da177e4 | 147 | u8 rsrvd1; |
f720e3ba DK |
148 | u8 limit_hi; /* DASD limit (in logical blocks) */ |
149 | __le32 limit_lo; /* DASD limit (in logical blocks) */ | |
1da177e4 | 150 | u8 rsrvd2[3]; |
f720e3ba DK |
151 | u8 used_hi; /* DASD usage (in logical blocks) */ |
152 | __le32 used_lo; /* DASD usage (in logical blocks) */ | |
1da177e4 LT |
153 | }; |
154 | ||
155 | #define DASDLIMIT(dasdp) \ | |
156 | (((u64)((dasdp)->limit_hi) << 32) + __le32_to_cpu((dasdp)->limit_lo)) | |
157 | #define setDASDLIMIT(dasdp, limit)\ | |
158 | {\ | |
159 | (dasdp)->limit_hi = ((u64)limit) >> 32;\ | |
160 | (dasdp)->limit_lo = __cpu_to_le32(limit);\ | |
161 | } | |
162 | #define DASDUSED(dasdp) \ | |
163 | (((u64)((dasdp)->used_hi) << 32) + __le32_to_cpu((dasdp)->used_lo)) | |
164 | #define setDASDUSED(dasdp, used)\ | |
165 | {\ | |
166 | (dasdp)->used_hi = ((u64)used) >> 32;\ | |
167 | (dasdp)->used_lo = __cpu_to_le32(used);\ | |
168 | } | |
169 | ||
170 | #endif /* !_H_JFS_TYPES */ |