xref: /openbsd/sys/ufs/ffs/ffs_tables.c (revision dfc6b8b2)
1*dfc6b8b2Stedu /*	$OpenBSD: ffs_tables.c,v 1.6 2011/07/03 18:23:10 tedu Exp $	*/
2df930be7Sderaadt /*	$NetBSD: ffs_tables.c,v 1.2 1994/06/29 06:46:35 cgd Exp $	*/
3df930be7Sderaadt 
4df930be7Sderaadt /*
5df930be7Sderaadt  * Copyright (c) 1982, 1986, 1993
6df930be7Sderaadt  *	The Regents of the University of California.  All rights reserved.
7df930be7Sderaadt  *
8df930be7Sderaadt  * Redistribution and use in source and binary forms, with or without
9df930be7Sderaadt  * modification, are permitted provided that the following conditions
10df930be7Sderaadt  * are met:
11df930be7Sderaadt  * 1. Redistributions of source code must retain the above copyright
12df930be7Sderaadt  *    notice, this list of conditions and the following disclaimer.
13df930be7Sderaadt  * 2. Redistributions in binary form must reproduce the above copyright
14df930be7Sderaadt  *    notice, this list of conditions and the following disclaimer in the
15df930be7Sderaadt  *    documentation and/or other materials provided with the distribution.
1629295d1cSmillert  * 3. Neither the name of the University nor the names of its contributors
17df930be7Sderaadt  *    may be used to endorse or promote products derived from this software
18df930be7Sderaadt  *    without specific prior written permission.
19df930be7Sderaadt  *
20df930be7Sderaadt  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21df930be7Sderaadt  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22df930be7Sderaadt  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23df930be7Sderaadt  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24df930be7Sderaadt  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25df930be7Sderaadt  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26df930be7Sderaadt  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27df930be7Sderaadt  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28df930be7Sderaadt  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29df930be7Sderaadt  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30df930be7Sderaadt  * SUCH DAMAGE.
31df930be7Sderaadt  *
32df930be7Sderaadt  *	@(#)ffs_tables.c	8.1 (Berkeley) 6/11/93
33df930be7Sderaadt  */
34df930be7Sderaadt 
35df930be7Sderaadt #include <sys/param.h>
36bcf071c3Smickey #include <ufs/ffs/fs.h>
37df930be7Sderaadt 
38df930be7Sderaadt /*
39df930be7Sderaadt  * Bit patterns for identifying fragments in the block map
40df930be7Sderaadt  * used as ((map & around) == inside)
41df930be7Sderaadt  */
42bcf071c3Smickey const int around[9] = {
43df930be7Sderaadt 	0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f, 0xff, 0x1ff, 0x3ff
44df930be7Sderaadt };
45bcf071c3Smickey const int inside[9] = {
46df930be7Sderaadt 	0x0, 0x2, 0x6, 0xe, 0x1e, 0x3e, 0x7e, 0xfe, 0x1fe
47df930be7Sderaadt };
48df930be7Sderaadt 
49df930be7Sderaadt /*
50df930be7Sderaadt  * Given a block map bit pattern, the frag tables tell whether a
51df930be7Sderaadt  * particular size fragment is available.
52df930be7Sderaadt  *
53df930be7Sderaadt  * used as:
54df930be7Sderaadt  * if ((1 << (size - 1)) & fragtbl[fs->fs_frag][map] {
55df930be7Sderaadt  *	at least one fragment of the indicated size is available
56df930be7Sderaadt  * }
57df930be7Sderaadt  *
58df930be7Sderaadt  * These tables are used by the scanc instruction on the VAX to
59df930be7Sderaadt  * quickly find an appropriate fragment.
60df930be7Sderaadt  */
61bcf071c3Smickey const u_char fragtbl124[256] = {
62df930be7Sderaadt 	0x00, 0x16, 0x16, 0x2a, 0x16, 0x16, 0x26, 0x4e,
63df930be7Sderaadt 	0x16, 0x16, 0x16, 0x3e, 0x2a, 0x3e, 0x4e, 0x8a,
64df930be7Sderaadt 	0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e,
65df930be7Sderaadt 	0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e,
66df930be7Sderaadt 	0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e,
67df930be7Sderaadt 	0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e,
68df930be7Sderaadt 	0x2a, 0x3e, 0x3e, 0x2a, 0x3e, 0x3e, 0x2e, 0x6e,
69df930be7Sderaadt 	0x3e, 0x3e, 0x3e, 0x3e, 0x2a, 0x3e, 0x6e, 0xaa,
70df930be7Sderaadt 	0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e,
71df930be7Sderaadt 	0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e,
72df930be7Sderaadt 	0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e,
73df930be7Sderaadt 	0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e,
74df930be7Sderaadt 	0x26, 0x36, 0x36, 0x2e, 0x36, 0x36, 0x26, 0x6e,
75df930be7Sderaadt 	0x36, 0x36, 0x36, 0x3e, 0x2e, 0x3e, 0x6e, 0xae,
76df930be7Sderaadt 	0x4e, 0x5e, 0x5e, 0x6e, 0x5e, 0x5e, 0x6e, 0x4e,
77df930be7Sderaadt 	0x5e, 0x5e, 0x5e, 0x7e, 0x6e, 0x7e, 0x4e, 0xce,
78df930be7Sderaadt 	0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e,
79df930be7Sderaadt 	0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e,
80df930be7Sderaadt 	0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e,
81df930be7Sderaadt 	0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e,
82df930be7Sderaadt 	0x16, 0x16, 0x16, 0x3e, 0x16, 0x16, 0x36, 0x5e,
83df930be7Sderaadt 	0x16, 0x16, 0x16, 0x3e, 0x3e, 0x3e, 0x5e, 0x9e,
84df930be7Sderaadt 	0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x7e,
85df930be7Sderaadt 	0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x7e, 0xbe,
86df930be7Sderaadt 	0x2a, 0x3e, 0x3e, 0x2a, 0x3e, 0x3e, 0x2e, 0x6e,
87df930be7Sderaadt 	0x3e, 0x3e, 0x3e, 0x3e, 0x2a, 0x3e, 0x6e, 0xaa,
88df930be7Sderaadt 	0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x7e,
89df930be7Sderaadt 	0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, 0x7e, 0xbe,
90df930be7Sderaadt 	0x4e, 0x5e, 0x5e, 0x6e, 0x5e, 0x5e, 0x6e, 0x4e,
91df930be7Sderaadt 	0x5e, 0x5e, 0x5e, 0x7e, 0x6e, 0x7e, 0x4e, 0xce,
92df930be7Sderaadt 	0x8a, 0x9e, 0x9e, 0xaa, 0x9e, 0x9e, 0xae, 0xce,
93df930be7Sderaadt 	0x9e, 0x9e, 0x9e, 0xbe, 0xaa, 0xbe, 0xce, 0x8a,
94df930be7Sderaadt };
95df930be7Sderaadt 
96bcf071c3Smickey const u_char fragtbl8[256] = {
97df930be7Sderaadt 	0x00, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x04,
98df930be7Sderaadt 	0x01, 0x01, 0x01, 0x03, 0x02, 0x03, 0x04, 0x08,
99df930be7Sderaadt 	0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05,
100df930be7Sderaadt 	0x02, 0x03, 0x03, 0x02, 0x04, 0x05, 0x08, 0x10,
101df930be7Sderaadt 	0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05,
102df930be7Sderaadt 	0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x05, 0x09,
103df930be7Sderaadt 	0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x02, 0x06,
104df930be7Sderaadt 	0x04, 0x05, 0x05, 0x06, 0x08, 0x09, 0x10, 0x20,
105df930be7Sderaadt 	0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05,
106df930be7Sderaadt 	0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x05, 0x09,
107df930be7Sderaadt 	0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05,
108df930be7Sderaadt 	0x03, 0x03, 0x03, 0x03, 0x05, 0x05, 0x09, 0x11,
109df930be7Sderaadt 	0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x02, 0x06,
110df930be7Sderaadt 	0x03, 0x03, 0x03, 0x03, 0x02, 0x03, 0x06, 0x0a,
111df930be7Sderaadt 	0x04, 0x05, 0x05, 0x06, 0x05, 0x05, 0x06, 0x04,
112df930be7Sderaadt 	0x08, 0x09, 0x09, 0x0a, 0x10, 0x11, 0x20, 0x40,
113df930be7Sderaadt 	0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05,
114df930be7Sderaadt 	0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x05, 0x09,
115df930be7Sderaadt 	0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05,
116df930be7Sderaadt 	0x03, 0x03, 0x03, 0x03, 0x05, 0x05, 0x09, 0x11,
117df930be7Sderaadt 	0x01, 0x01, 0x01, 0x03, 0x01, 0x01, 0x03, 0x05,
118df930be7Sderaadt 	0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x05, 0x09,
119df930be7Sderaadt 	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07,
120df930be7Sderaadt 	0x05, 0x05, 0x05, 0x07, 0x09, 0x09, 0x11, 0x21,
121df930be7Sderaadt 	0x02, 0x03, 0x03, 0x02, 0x03, 0x03, 0x02, 0x06,
122df930be7Sderaadt 	0x03, 0x03, 0x03, 0x03, 0x02, 0x03, 0x06, 0x0a,
123df930be7Sderaadt 	0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07,
124df930be7Sderaadt 	0x02, 0x03, 0x03, 0x02, 0x06, 0x07, 0x0a, 0x12,
125df930be7Sderaadt 	0x04, 0x05, 0x05, 0x06, 0x05, 0x05, 0x06, 0x04,
126df930be7Sderaadt 	0x05, 0x05, 0x05, 0x07, 0x06, 0x07, 0x04, 0x0c,
127df930be7Sderaadt 	0x08, 0x09, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x0c,
128df930be7Sderaadt 	0x10, 0x11, 0x11, 0x12, 0x20, 0x21, 0x40, 0x80,
129df930be7Sderaadt };
130df930be7Sderaadt 
131df930be7Sderaadt /*
132df930be7Sderaadt  * The actual fragtbl array.
133df930be7Sderaadt  */
134bcf071c3Smickey const u_char *fragtbl[MAXFRAG + 1] = {
135*dfc6b8b2Stedu 	NULL, fragtbl124, fragtbl124, NULL, fragtbl124, NULL, NULL, NULL,
136*dfc6b8b2Stedu 	fragtbl8,
137df930be7Sderaadt };
138