| 1 | /*	$NetBSD: efs_sb.h,v 1.1 2007/06/29 23:30:29 rumble Exp $	*/ |
| 2 | |
| 3 | /* |
| 4 | * Copyright (c) 2006 Stephen M. Rumble <rumble@ephemeral.org> |
| 5 | * |
| 6 | * Permission to use, copy, modify, and distribute this software for any |
| 7 | * purpose with or without fee is hereby granted, provided that the above |
| 8 | * copyright notice and this permission notice appear in all copies. |
| 9 | * |
| 10 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| 11 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| 12 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
| 13 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| 14 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
| 15 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
| 16 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| 17 | */ |
| 18 | |
| 19 | /* |
| 20 | * See IRIX efs(4) |
| 21 | */ |
| 22 | |
| 23 | #ifndef _FS_EFS_EFS_SB_H_ |
| 24 | #define _FS_EFS_EFS_SB_H_ |
| 25 | |
| 26 | /* |
| 27 | * EFS superblock (92 bytes) |
| 28 | * |
| 29 | * Notes: |
| 30 | * [0] - Values can either be EFS_SB_MAGIC, or EFS_SB_NEWMAGIC (IRIX 3.3+). |
| 31 | * [1] - Only used in a grown filesystem. Original bitmap is unused. |
| 32 | * [2] - Only exists in IRIX3.3+. (XXX - IRIX man pages say 3.3+ fsck |
| 33 | * creates a replicated superblock if space free. Does it update magic?) |
| 34 | * [3] - According to IRIX kernel elf headers, two checksum routines exist. |
| 35 | * [4] - New at some point (in IRIX 5, but apparently not in IRIX 4). |
| 36 | */ |
| 37 | struct efs_sb { |
| 38 | 	int32_t		sb_size;	/* 0: fs size incl. bb 0 (in bb) */ |
| 39 | 	int32_t		sb_firstcg;	/* 4: first cg offset (in bb) */ |
| 40 | 	int32_t		sb_cgfsize;	/* 8: cg size (in bb) */ |
| 41 | 	int16_t		sb_cgisize;	/* 12: inodes/cg (in bb) */ |
| 42 | 	int16_t		sb_sectors;	/* 14: geom: sectors/track */ |
| 43 | 	int16_t		sb_heads;	/* 16: geom: heads/cylinder (unused) */ |
| 44 | 	int16_t		sb_ncg;		/* 18: num of cg's in the filesystem */ |
| 45 | 	int16_t		sb_dirty;	/* 20: non-0 indicates fsck required */ |
| 46 | 	int16_t		sb_pad0;	/* 22: */ |
| 47 | 	int32_t		sb_time;	/* 24: superblock ctime */ |
| 48 | 	int32_t		sb_magic;	/* 28: magic [0] */ |
| 49 | 	char		sb_fname[6];	/* 32: name of filesystem */ |
| 50 | 	char		sb_fpack[6];	/* 38: name of filesystem pack */ |
| 51 | 	int32_t		sb_bmsize;	/* 44: bitmap size (in bytes) */ |
| 52 | 	int32_t		sb_tfree;	/* 48: total free data blocks */ |
| 53 | 	int32_t		sb_tinode;	/* 52: total free inodes */ |
| 54 | 	int32_t		sb_bmblock;	/* 56: bitmap offset (grown fs) [1] */ |
| 55 | 	int32_t		sb_replsb;	/* 62: repl. superblock offset [2] */ |
| 56 | 	int32_t		sb_lastinode;	/* 64: last allocated inode [4] */ |
| 57 | 	int8_t		sb_spare[20];	/* 68: unused */ |
| 58 | 	int32_t		sb_checksum;	/* 88: checksum (all above) [3] */ |
| 59 | } __packed; |
| 60 | |
| 61 | #define EFS_SB_SIZE		(sizeof(struct efs_sb)) |
| 62 | #define EFS_SB_CHECKSUM_SIZE	(EFS_SB_SIZE - 4) |
| 63 | |
| 64 | #define EFS_SB_MAGIC		0x00072959	/* original, ungrown layout */ |
| 65 | #define EFS_SB_NEWMAGIC		0x0007295A	/* grown fs (IRIX >= 3.3) */ |
| 66 | |
| 67 | /* sb_dirty values */ |
| 68 | #define EFS_SB_CLEAN		0		/* filesystem is clean */ |
| 69 | |
| 70 | #endif /* !_FS_EFS_EFS_SB_H_ */ |