File: jfs_types.h

package info (click to toggle)
jfsutils 1.1.11-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 2,704 kB
  • ctags: 3,610
  • sloc: ansic: 35,019; sh: 787; makefile: 78
file content (175 lines) | stat: -rwxr-xr-x 4,474 bytes parent folder | download | duplicates (10)
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
/*
 *   Copyright (c) International Business Machines Corp., 2000-2002
 *
 *   This program is free software;  you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
 *   the GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program;  if not, write to the Free Software
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 */
#ifndef _H_JFS_TYPES
#define	_H_JFS_TYPES

#include <sys/types.h> /* Neccessary for *BSD systems */
/*
 *	jfs_types.h:
 *
 * basic type/utility  definitions
 *
 * note: this header file must be the 1st include file
 * of JFS include list in all JFS .c file.
 */

#ifdef HAVE_STDINT_H
# include <stdint.h>
#else
# include <sys/types.h>
typedef u_int8_t uint8_t;
typedef u_int16_t uint16_t;
typedef u_int32_t uint32_t;
typedef u_int64_t uint64_t;
#endif

#ifdef HAVE_STDBOOL_H
# include <stdbool.h>
#else
typedef enum {
	false = 0,
	true = 1
} bool;
#endif /* HAVE_STDBOOL_H */


/*
 * Unicase character.  Part of the ondisk format.
 */
typedef uint16_t UniChar;


/*
 * Almost identical to Linux's timespec, but not quite
 */
struct timestruc_t {
	uint32_t  tv_sec;
	uint32_t  tv_nsec;
};

/*
 *	handy
 */
#undef MIN
#define	MIN(a,b) (((a)<(b))?(a):(b))
#undef MAX
#define	MAX(a,b) (((a)>(b))?(a):(b))
#undef ROUNDUP
#define	ROUNDUP(x, y)	( ((x) + ((y) - 1)) & ~((y) - 1) )

#define LEFTMOSTONE	0x80000000
#define	HIGHORDER	0x80000000u	/* high order bit on            */
#define	ONES		0xffffffffu	/* all bit on                   */

/*
 *	physical xd (pxd)
 */
typedef struct {
	unsigned  len:24;
	unsigned  addr1:8;
	uint32_t  addr2;
} pxd_t;

/* xd_t field construction */

#define	PXDlength(pxd, length32)	((pxd)->len = __cpu_to_le24(length32))
#define	PXDaddress(pxd, address64)\
{\
	(pxd)->addr1 = ((int64_t)address64) >> 32;\
	(pxd)->addr2 = __cpu_to_le32((address64) & 0xffffffff);\
}

/* xd_t field extraction */
#define	lengthPXD(pxd)	__le24_to_cpu((pxd)->len)
#define	addressPXD(pxd)\
	( ((int64_t)((pxd)->addr1)) << 32 | __le32_to_cpu((pxd)->addr2))

/* pxd list */
struct pxdlist {
	int16_t  maxnpxd;
	int16_t  npxd;
	pxd_t    pxd[8];
};


/*
 *	data extent descriptor (dxd)
 */
typedef struct {
	unsigned  flag:8;	/* 1: flags */
	unsigned  rsrvd:24;	/* 3: */
	uint32_t  size;		/* 4: size in byte */
	unsigned  len:24;	/* 3: length in unit of fsblksize */
	unsigned  addr1:8;	/* 1: address in unit of fsblksize */
	uint32_t  addr2;	/* 4: address in unit of fsblksize */
} dxd_t;			/* - 16 - */

/* dxd_t flags */
#define	DXD_INDEX	0x80	/* B+-tree index */
#define	DXD_INLINE	0x40	/* in-line data extent */
#define	DXD_EXTENT	0x20	/* out-of-line single extent */
#define	DXD_FILE	0x10	/* out-of-line file (inode) */
#define DXD_CORRUPT	0x08	/* Inconsistency detected */

/* dxd_t field construction
 *	Conveniently, the PXD macros work for DXD
 */
#define	DXDlength	PXDlength
#define	DXDaddress	PXDaddress
#define	lengthDXD	lengthPXD
#define	addressDXD	addressPXD

/*
 *      directory entry argument
 */
struct component_name {
	int namlen;
	UniChar *name;
};


/*
 *	DASD limit information - stored in directory inode
 */
struct dasd {
	uint8_t   thresh;		/* Alert Threshold (in percent) */
	uint8_t   delta;		/* Alert Threshold delta (in percent)   */
	uint8_t   rsrvd1;
	uint8_t   limit_hi;		/* DASD limit (in logical blocks)       */
	uint32_t  limit_lo;		/* DASD limit (in logical blocks)       */
	uint8_t   rsrvd2[3];
	uint8_t   used_hi;		/* DASD usage (in logical blocks)       */
	uint32_t  used_lo;		/* DASD usage (in logical blocks)       */
};

#define DASDLIMIT(dasdp) \
	(((uint64_t)((dasdp)->limit_hi) << 32) + __le32_to_cpu((dasdp)->limit_lo))
#define setDASDLIMIT(dasdp, limit)\
{\
	(dasdp)->limit_hi = ((uint64_t)limit) >> 32;\
	(dasdp)->limit_lo = __cpu_to_le32(limit);\
}
#define DASDUSED(dasdp) \
	(((uint64_t)((dasdp)->used_hi) << 32) + __le32_to_cpu((dasdp)->used_lo))
#define setDASDUSED(dasdp, used)\
{\
	(dasdp)->used_hi = ((uint64_t)used) >> 32;\
	(dasdp)->used_lo = __cpu_to_le32(used);\
}

#endif				/* !_H_JFS_TYPES */