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