1*887657bcSandvar /* $NetBSD: v7fs.h,v 1.4 2022/05/24 06:28:01 andvar Exp $ */ 2ed990ef3Such 3ed990ef3Such /*- 4ed990ef3Such * Copyright (c) 2011 The NetBSD Foundation, Inc. 5ed990ef3Such * All rights reserved. 6ed990ef3Such * 7ed990ef3Such * This code is derived from software contributed to The NetBSD Foundation 8ed990ef3Such * by UCHIYAMA Yasushi. 9ed990ef3Such * 10ed990ef3Such * Redistribution and use in source and binary forms, with or without 11ed990ef3Such * modification, are permitted provided that the following conditions 12ed990ef3Such * are met: 13ed990ef3Such * 1. Redistributions of source code must retain the above copyright 14ed990ef3Such * notice, this list of conditions and the following disclaimer. 15ed990ef3Such * 2. Redistributions in binary form must reproduce the above copyright 16ed990ef3Such * notice, this list of conditions and the following disclaimer in the 17ed990ef3Such * documentation and/or other materials provided with the distribution. 18ed990ef3Such * 19ed990ef3Such * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20ed990ef3Such * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21ed990ef3Such * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22ed990ef3Such * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23ed990ef3Such * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24ed990ef3Such * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25ed990ef3Such * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26ed990ef3Such * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27ed990ef3Such * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28ed990ef3Such * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29ed990ef3Such * POSSIBILITY OF SUCH DAMAGE. 30ed990ef3Such */ 31ed990ef3Such 32ed990ef3Such #ifndef _V7FS_H_ 33ed990ef3Such /* 7th Edition of Unix(PDP-11) Filesystem definition. */ 34ed990ef3Such #define _V7FS_H_ 35ed990ef3Such #include <sys/types.h> 36ed990ef3Such #ifndef _KERNEL 37ed990ef3Such #include <inttypes.h> 38ed990ef3Such #endif 39ed990ef3Such /* 40ed990ef3Such * V7 File System 41ed990ef3Such * 42ed990ef3Such * +------------------ 43ed990ef3Such * |Boot block (512byte) sector [0] 44ed990ef3Such * | 45ed990ef3Such * +------------------ 46ed990ef3Such * |Super block (512byte) sector [1] 47ed990ef3Such * | 48ed990ef3Such * +------------------ 49ed990ef3Such * |v7fs_inode(64byte sector [2] 50ed990ef3Such * . 51ed990ef3Such * . 52ed990ef3Such * | 53ed990ef3Such * +------------------ 54ed990ef3Such * |data block sector [datablock_start_sector] 55ed990ef3Such * | 56ed990ef3Such * . 57ed990ef3Such * . 58ed990ef3Such * | 59ed990ef3Such * +------------------ 60ed990ef3Such * <- [sector volume_size] 61ed990ef3Such * 62ed990ef3Such * | 63ed990ef3Such * +------------------ volume size. 64ed990ef3Such * 65ed990ef3Such * Max volume size is 8GB (24bit daddr_t) 66ed990ef3Such * Max file size is ~1GB 67ed990ef3Such * 68ed990ef3Such */ 69ed990ef3Such 70ed990ef3Such /* V7 type. */ 71ed990ef3Such typedef uint16_t v7fs_ino_t; 72ed990ef3Such typedef uint32_t v7fs_daddr_t; 73ed990ef3Such typedef int32_t v7fs_time_t; 74ed990ef3Such typedef uint32_t v7fs_off_t; 75ed990ef3Such typedef uint16_t v7fs_dev_t; 76ed990ef3Such typedef uint16_t v7fs_mode_t; 77ed990ef3Such #define V7FS_DADDR_MAX 0x00ffffff 78ed990ef3Such #define V7FS_INODE_MAX 0xffff 79ed990ef3Such 80ed990ef3Such #define V7FS_BSIZE 512 81ed990ef3Such #define V7FS_BSHIFT 9 82ed990ef3Such #define V7FS_ROUND_BSIZE(x) \ 83ed990ef3Such ((((x) + (V7FS_BSIZE - 1)) & ~(V7FS_BSIZE - 1))) 84ed990ef3Such #define V7FS_TRUNC_BSIZE(x) ((x) & ~(V7FS_BSIZE - 1)) 85ed990ef3Such 86ed990ef3Such #define V7FS_RESIDUE_BSIZE(x) \ 87ed990ef3Such ((x) - ((((x) - 1) >> V7FS_BSHIFT) << V7FS_BSHIFT)) 88ed990ef3Such 89ed990ef3Such /* Disk location. */ 90ed990ef3Such #define V7FS_BOOTBLOCK_SECTOR 0 91ed990ef3Such #define V7FS_SUPERBLOCK_SECTOR 1 92ed990ef3Such #define V7FS_ILIST_SECTOR 2 93ed990ef3Such 94ed990ef3Such /* Superblock */ 95ed990ef3Such /* cache. */ 96ed990ef3Such #define V7FS_MAX_FREEBLOCK 50 97ed990ef3Such #define V7FS_MAX_FREEINODE 100 98ed990ef3Such struct v7fs_superblock { 99ed990ef3Such /* [3 ... (datablock_start_sector-1)]are ilist */ 100ed990ef3Such uint16_t datablock_start_sector; 101ed990ef3Such v7fs_daddr_t volume_size; 102ed990ef3Such int16_t nfreeblock; /* # of freeblock in superblock cache. */ 103ed990ef3Such v7fs_daddr_t freeblock[V7FS_MAX_FREEBLOCK]; /* cache. */ 104ed990ef3Such int16_t nfreeinode; /* # of free inode in superblock cache. */ 105ed990ef3Such v7fs_ino_t freeinode[V7FS_MAX_FREEINODE]; /* cache. */ 106ed990ef3Such int8_t lock_freeblock; 107ed990ef3Such int8_t lock_freeinode; 108ed990ef3Such int8_t modified; 109ed990ef3Such int8_t readonly; 110ed990ef3Such v7fs_time_t update_time; 111ed990ef3Such v7fs_daddr_t total_freeblock; 112ed990ef3Such v7fs_ino_t total_freeinode; 113ed990ef3Such } __packed; 114ed990ef3Such 115ed990ef3Such /* Datablock */ 116ed990ef3Such #define V7FS_NADDR 13 117ed990ef3Such #define V7FS_NADDR_DIRECT 10 118ed990ef3Such #define V7FS_NADDR_INDEX1 10 119ed990ef3Such #define V7FS_NADDR_INDEX2 11 120ed990ef3Such #define V7FS_NADDR_INDEX3 12 121ed990ef3Such /* daddr index. */ 122ed990ef3Such #define V7FS_DADDR_PER_BLOCK (V7FS_BSIZE / sizeof(v7fs_daddr_t)) 123ed990ef3Such struct v7fs_freeblock { 124ed990ef3Such int16_t nfreeblock; 125ed990ef3Such v7fs_daddr_t freeblock[V7FS_MAX_FREEBLOCK]; 126ed990ef3Such } __packed; 127ed990ef3Such 128ed990ef3Such 129ed990ef3Such /* Dirent */ 130ed990ef3Such #define V7FS_NAME_MAX 14 131ed990ef3Such #define V7FS_PATH_MAX PATH_MAX /* No V7 limit. */ 132ed990ef3Such #define V7FS_LINK_MAX LINK_MAX /* No V7 limit. */ 133ed990ef3Such struct v7fs_dirent { 134ed990ef3Such v7fs_ino_t inode_number; 135ed990ef3Such char name[V7FS_NAME_MAX]; 136ed990ef3Such } __packed; /*16byte */ 137ed990ef3Such 138ed990ef3Such /* Inode */ 139ed990ef3Such #define V7FS_BALBLK_INODE 1 /* monument */ 140ed990ef3Such #define V7FS_ROOT_INODE 2 141ed990ef3Such #define V7FS_MAX_INODE(s) \ 142ed990ef3Such (((s)->datablock_start_sector - V7FS_ILIST_SECTOR) * \ 143ed990ef3Such V7FS_BSIZE / sizeof(struct v7fs_inode_diskimage)) 144ed990ef3Such #define V7FS_INODE_PER_BLOCK \ 145ed990ef3Such (V7FS_BSIZE / sizeof(struct v7fs_inode_diskimage)) 146ed990ef3Such #define V7FS_ILISTBLK_MAX (V7FS_INODE_MAX / V7FS_INODE_PER_BLOCK) 147ed990ef3Such 148ed990ef3Such struct v7fs_inode_diskimage { 149ed990ef3Such int16_t mode; 150ed990ef3Such int16_t nlink; /* [DIR] # of child directories. [REG] link count. */ 151ed990ef3Such int16_t uid; 152ed990ef3Such int16_t gid; 153ed990ef3Such v7fs_off_t filesize; /* byte */ 154ed990ef3Such #define V7FS_DINODE_ADDR_LEN 40 155ed990ef3Such /* 39 used; 13 addresses of 3 byte each. */ 156ed990ef3Such uint8_t addr[V7FS_DINODE_ADDR_LEN]; 157ed990ef3Such /*for device node: addr[0] is major << 8 | minor. */ 158ed990ef3Such v7fs_time_t atime; 159ed990ef3Such v7fs_time_t mtime; 160ed990ef3Such v7fs_time_t ctime; 161ed990ef3Such } __packed; /*64byte */ 162ed990ef3Such 163ed990ef3Such /* File type */ 164ed990ef3Such #define V7FS_IFMT 0170000 /* File type mask */ 165*887657bcSandvar #define V7FS_IFCHR 0020000 /* character device */ 166ed990ef3Such #define V7FS_IFDIR 0040000 /* directory */ 167ed990ef3Such #define V7FS_IFBLK 0060000 /* block device */ 168ed990ef3Such #define V7FS_IFREG 0100000 /* file. */ 169ed990ef3Such /* Obsoleted file type. */ 170ed990ef3Such #define V7FS_IFMPC 0030000 /* multiplexed char special */ 171ed990ef3Such #define V7FS_IFMPB 0070000 /* multiplexed block special */ 1722d52435aSandvar /* Don't appear original V7 filesystem. Found at 2.10BSD. */ 173ed990ef3Such #define V7FSBSD_IFLNK 0120000 /* symbolic link */ 174ed990ef3Such #define V7FSBSD_IFSOCK 0140000 /* socket */ 1752d52435aSandvar /* Don't appear original V7 filesystem. NetBSD. */ 176ed990ef3Such #define V7FSBSD_IFFIFO 0010000 /* Named pipe. */ 177ed990ef3Such 17838172e6aSuch #define V7FSBSD_MAXSYMLINKLEN V7FS_BSIZE 179ed990ef3Such 180ed990ef3Such #endif /*!_V7FS_H_ */ 181