https://git.reactos.org/?p=reactos.git;a=commitdiff;h=49cfac17c59fd9d8bfe04…
commit 49cfac17c59fd9d8bfe04c6ec9cbd8c447c53b03
Author: Victor Perevertkin <victor.perevertkin(a)reactos.org>
AuthorDate: Fri Jul 23 19:20:10 2021 +0300
Commit: Victor Perevertkin <victor.perevertkin(a)reactos.org>
CommitDate: Fri Jul 30 17:14:57 2021 +0300
[FFS] Remove the FFS/UFS driver
The upstream driver is not maintained and the file system itself
is in a semi-abandoned state.
Originally imported at 3a3ef631d12d8ac7ee2a95abf8c1c6e4815ac1a5
The driver is written by Lee Jae-Hong, updated by Bo Brantén.
ReactOS porting made by Peter Hater and Pierre Schweitzer.
Follow updates at
http://www.acc.umu.se/~bosse/
FS Recognizer code is left to keep the FS support as an
installable driver.
CORE-11040
---
CODEOWNERS | 1 -
base/setup/lib/bootsup.c | 3 +-
base/setup/lib/fsutil.c | 1 -
base/setup/lib/utils/fsrec.c | 3 +-
base/system/autochk/CMakeLists.txt | 2 +-
base/system/autochk/autochk.c | 2 -
boot/bootdata/hivesys.inf | 7 -
dll/win32/CMakeLists.txt | 1 -
dll/win32/uffs/CMakeLists.txt | 13 -
dll/win32/uffs/uffs.c | 22 -
dll/win32/uffs/uffs.rc | 5 -
dll/win32/uffs/uffs.spec | 2 -
drivers/filesystems/CMakeLists.txt | 1 -
drivers/filesystems/ffs/CMakeLists.txt | 51 -
drivers/filesystems/ffs/inc/bootblock.h | 892 ---------
drivers/filesystems/ffs/inc/dinode.h | 177 --
drivers/filesystems/ffs/inc/dir.h | 162 --
drivers/filesystems/ffs/inc/disklabel.h | 555 ------
drivers/filesystems/ffs/inc/ffsdrv.h | 2178 ----------------------
drivers/filesystems/ffs/inc/fs.h | 697 -------
drivers/filesystems/ffs/inc/type.h | 22 -
drivers/filesystems/ffs/src/block.c | 689 -------
drivers/filesystems/ffs/src/cleanup.c | 380 ----
drivers/filesystems/ffs/src/close.c | 342 ----
drivers/filesystems/ffs/src/cmcb.c | 218 ---
drivers/filesystems/ffs/src/create.c | 2055 ---------------------
drivers/filesystems/ffs/src/debug.c | 1780 ------------------
drivers/filesystems/ffs/src/devctl.c | 302 ---
drivers/filesystems/ffs/src/dirctl.c | 1372 --------------
drivers/filesystems/ffs/src/dispatch.c | 252 ---
drivers/filesystems/ffs/src/except.c | 210 ---
drivers/filesystems/ffs/src/fastio.c | 1146 ------------
drivers/filesystems/ffs/src/ffs.c | 3042 -------------------------------
drivers/filesystems/ffs/src/ffsdrv.rc | 112 --
drivers/filesystems/ffs/src/fileinfo.c | 1789 ------------------
drivers/filesystems/ffs/src/flush.c | 312 ----
drivers/filesystems/ffs/src/fsctl.c | 1679 -----------------
drivers/filesystems/ffs/src/init.c | 453 -----
drivers/filesystems/ffs/src/lock.c | 137 --
drivers/filesystems/ffs/src/memory.c | 1979 --------------------
drivers/filesystems/ffs/src/misc.c | 128 --
drivers/filesystems/ffs/src/pnp.c | 463 -----
drivers/filesystems/ffs/src/read.c | 1155 ------------
drivers/filesystems/ffs/src/shutdown.c | 140 --
drivers/filesystems/ffs/src/volinfo.c | 478 -----
drivers/filesystems/ffs/src/write.c | 1588 ----------------
media/doc/3rd Party Files.txt | 6 -
sdk/cmake/baseaddress.cmake | 1 -
sdk/cmake/baseaddress_dwarf.cmake | 1 -
sdk/cmake/baseaddress_msvc.cmake | 1 -
sdk/cmake/baseaddress_msvc_x64.cmake | 1 -
sdk/include/reactos/libs/fslib/ffslib.h | 39 -
sdk/lib/fslib/CMakeLists.txt | 1 -
sdk/lib/fslib/ffslib/CMakeLists.txt | 3 -
sdk/lib/fslib/ffslib/ffslib.c | 49 -
55 files changed, 3 insertions(+), 27097 deletions(-)
diff --git a/CODEOWNERS b/CODEOWNERS
index 736ee9ce6aa..13d3ad435c6 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -267,7 +267,6 @@
/drivers/filesystems/cdfs/ @HeisSpiter
/drivers/filesystems/ext2/ @HeisSpiter
/drivers/filesystems/fastfat_new/ @HeisSpiter
-/drivers/filesystems/ffs/ @HeisSpiter
/drivers/filesystems/nfs/ @HeisSpiter
/media/doc/README.FSD @HeisSpiter
/sdk/lib/fslib/btrfslib/ @HeisSpiter
diff --git a/base/setup/lib/bootsup.c b/base/setup/lib/bootsup.c
index 3aefff04ee4..e8d6c884bff 100644
--- a/base/setup/lib/bootsup.c
+++ b/base/setup/lib/bootsup.c
@@ -1260,8 +1260,7 @@ InstallVBRToPartition(
/*
else if (wcsicmp(FileSystemName, L"EXT2") == 0 ||
wcsicmp(FileSystemName, L"EXT3") == 0 ||
- wcsicmp(FileSystemName, L"EXT4") == 0 ||
- wcsicmp(FileSystemName, L"FFS") == 0)
+ wcsicmp(FileSystemName, L"EXT4") == 0)
{
return STATUS_NOT_SUPPORTED;
}
diff --git a/base/setup/lib/fsutil.c b/base/setup/lib/fsutil.c
index fde965c89cf..8ef241ece05 100644
--- a/base/setup/lib/fsutil.c
+++ b/base/setup/lib/fsutil.c
@@ -142,7 +142,6 @@ static FILE_SYSTEM RegisteredFileSystems[] =
{ L"EXT2" , Ext2Format, Ext2Chkdsk },
{ L"EXT3" , Ext2Format, Ext2Chkdsk },
{ L"EXT4" , Ext2Format, Ext2Chkdsk },
- { L"FFS" , FfsFormat , FfsChkdsk },
#endif
};
diff --git a/base/setup/lib/utils/fsrec.c b/base/setup/lib/utils/fsrec.c
index 6011ef4107f..2b383f0b99b 100644
--- a/base/setup/lib/utils/fsrec.c
+++ b/base/setup/lib/utils/fsrec.c
@@ -392,8 +392,7 @@ FileSystemToMBRPartitionType(
else if (wcsicmp(FileSystem, L"BTRFS") == 0 ||
wcsicmp(FileSystem, L"EXT2") == 0 ||
wcsicmp(FileSystem, L"EXT3") == 0 ||
- wcsicmp(FileSystem, L"EXT4") == 0 ||
- wcsicmp(FileSystem, L"FFS") == 0)
+ wcsicmp(FileSystem, L"EXT4") == 0)
{
return PARTITION_LINUX;
}
diff --git a/base/system/autochk/CMakeLists.txt b/base/system/autochk/CMakeLists.txt
index f7448ee585d..eb73cc411a9 100644
--- a/base/system/autochk/CMakeLists.txt
+++ b/base/system/autochk/CMakeLists.txt
@@ -1,6 +1,6 @@
add_executable(autochk WIN32 autochk.c autochk.rc)
set_module_type(autochk nativecui)
-target_link_libraries(autochk nt vfatlib vfatxlib ntfslib btrfslib ext2lib ffslib
cdfslib)
+target_link_libraries(autochk nt vfatlib vfatxlib ntfslib btrfslib ext2lib cdfslib)
add_importlibs(autochk ntdll)
add_cd_file(TARGET autochk DESTINATION reactos/system32 FOR all)
diff --git a/base/system/autochk/autochk.c b/base/system/autochk/autochk.c
index 8f2a7a427bf..8983668064e 100644
--- a/base/system/autochk/autochk.c
+++ b/base/system/autochk/autochk.c
@@ -31,7 +31,6 @@
#include <fslib/ntfslib.h>
#include <fslib/btrfslib.h>
#include <fslib/ext2lib.h>
-#include <fslib/ffslib.h>
#include <fslib/cdfslib.h>
#define NDEBUG
@@ -55,7 +54,6 @@ FILESYSTEM_CHKDSK FileSystems[] =
{ L"EXT2", Ext2Chkdsk },
{ L"EXT3", Ext2Chkdsk },
{ L"EXT4", Ext2Chkdsk },
- { L"FFS", FfsChkdsk },
{ L"CDFS", CdfsChkdsk },
};
diff --git a/boot/bootdata/hivesys.inf b/boot/bootdata/hivesys.inf
index c041a0b379e..86ef5028507 100644
--- a/boot/bootdata/hivesys.inf
+++ b/boot/bootdata/hivesys.inf
@@ -2197,13 +2197,6 @@
HKLM,"SYSTEM\CurrentControlSet\Services\btrfs","ImagePath",0x00020000,"system32\
HKLM,"SYSTEM\CurrentControlSet\Services\btrfs","Start",0x00010001,0x00000003
HKLM,"SYSTEM\CurrentControlSet\Services\btrfs","Type",0x00010001,0x00000002
-; FFS Filesystem driver
-HKLM,"SYSTEM\CurrentControlSet\Services\ffs","ErrorControl",0x00010001,0x00000000
-HKLM,"SYSTEM\CurrentControlSet\Services\ffs","Group",0x00000000,"Boot
File System"
-HKLM,"SYSTEM\CurrentControlSet\Services\ffs","ImagePath",0x00020000,"system32\drivers\ffs.sys"
-HKLM,"SYSTEM\CurrentControlSet\Services\ffs","Start",0x00010001,0x00000003
-HKLM,"SYSTEM\CurrentControlSet\Services\ffs","Type",0x00010001,0x00000002
-
; NFS Filesystem driver
HKLM,"SYSTEM\CurrentControlSet\Services\nfs41_driver","ErrorControl",0x00010001,0x00000000
HKLM,"SYSTEM\CurrentControlSet\Services\nfs41_driver","Group",0x00000000,"Network"
diff --git a/dll/win32/CMakeLists.txt b/dll/win32/CMakeLists.txt
index e60d18bed0c..c0238ebeea5 100644
--- a/dll/win32/CMakeLists.txt
+++ b/dll/win32/CMakeLists.txt
@@ -214,7 +214,6 @@ add_subdirectory(ucdfs)
add_subdirectory(uext2)
add_subdirectory(ufat)
add_subdirectory(ufatx)
-add_subdirectory(uffs)
add_subdirectory(untfs)
add_subdirectory(updspapi)
add_subdirectory(url)
diff --git a/dll/win32/uffs/CMakeLists.txt b/dll/win32/uffs/CMakeLists.txt
deleted file mode 100644
index 2bc8f14e2f2..00000000000
--- a/dll/win32/uffs/CMakeLists.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-
-spec2def(uffs.dll uffs.spec)
-
-list(APPEND SOURCE
- uffs.c
- uffs.rc
- ${CMAKE_CURRENT_BINARY_DIR}/uffs.def)
-
-add_library(uffs MODULE ${SOURCE})
-set_module_type(uffs nativedll)
-target_link_libraries(uffs ffslib)
-add_importlibs(uffs ntdll)
-add_cd_file(TARGET uffs DESTINATION reactos/system32 FOR all)
diff --git a/dll/win32/uffs/uffs.c b/dll/win32/uffs/uffs.c
deleted file mode 100644
index 96b4409ffc0..00000000000
--- a/dll/win32/uffs/uffs.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: FFS File System Management
- * FILE: dll/win32/uffs/uffs.c
- * PURPOSE: uffs DLL initialisation
- * PROGRAMMERS: Pierre Schweitzer
- */
-
-#include <windef.h>
-
-INT WINAPI
-DllMain(
- IN HINSTANCE hinstDLL,
- IN DWORD dwReason,
- IN LPVOID lpvReserved)
-{
- UNREFERENCED_PARAMETER(hinstDLL);
- UNREFERENCED_PARAMETER(dwReason);
- UNREFERENCED_PARAMETER(lpvReserved);
-
- return TRUE;
-}
diff --git a/dll/win32/uffs/uffs.rc b/dll/win32/uffs/uffs.rc
deleted file mode 100644
index f2ec4ceabe2..00000000000
--- a/dll/win32/uffs/uffs.rc
+++ /dev/null
@@ -1,5 +0,0 @@
-#define REACTOS_VERSION_DLL
-#define REACTOS_STR_FILE_DESCRIPTION "FFS File System Management"
-#define REACTOS_STR_INTERNAL_NAME "uffs"
-#define REACTOS_STR_ORIGINAL_FILENAME "uffs.dll"
-#include <reactos/version.rc>
diff --git a/dll/win32/uffs/uffs.spec b/dll/win32/uffs/uffs.spec
deleted file mode 100644
index f06e34356a9..00000000000
--- a/dll/win32/uffs/uffs.spec
+++ /dev/null
@@ -1,2 +0,0 @@
-@ stdcall Chkdsk(ptr ptr long long long long ptr ptr ptr ptr ptr) FfsChkdsk
-@ stdcall Format(ptr ptr long long long ptr long) FfsFormat
diff --git a/drivers/filesystems/CMakeLists.txt b/drivers/filesystems/CMakeLists.txt
index 74372075bf7..471a7d873f5 100644
--- a/drivers/filesystems/CMakeLists.txt
+++ b/drivers/filesystems/CMakeLists.txt
@@ -4,7 +4,6 @@ add_subdirectory(cdfs)
add_subdirectory(ext2)
#add_subdirectory(fastfat)
add_subdirectory(fastfat_new)
-add_subdirectory(ffs)
add_subdirectory(fs_rec)
add_subdirectory(msfs)
add_subdirectory(mup)
diff --git a/drivers/filesystems/ffs/CMakeLists.txt
b/drivers/filesystems/ffs/CMakeLists.txt
deleted file mode 100644
index 9d5670aaa56..00000000000
--- a/drivers/filesystems/ffs/CMakeLists.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-include_directories(${REACTOS_SOURCE_DIR}/include/reactos/drivers
- inc)
-
-list(APPEND SOURCE
- src/block.c
- src/cleanup.c
- src/close.c
- src/cmcb.c
- src/create.c
- src/debug.c
- src/devctl.c
- src/dirctl.c
- src/dispatch.c
- src/except.c
- src/fastio.c
- src/ffs.c
- src/fileinfo.c
- src/flush.c
- src/fsctl.c
- src/init.c
- src/lock.c
- src/memory.c
- src/misc.c
- src/pnp.c
- src/read.c
- src/shutdown.c
- src/volinfo.c
- src/write.c
- inc/ffsdrv.h)
-
-add_library(ffs MODULE ${SOURCE} src/ffsdrv.rc)
-
-if(USE_CLANG_CL OR (NOT MSVC))
- target_compile_options(ffs PRIVATE -Wno-pointer-sign -Wno-unused-function)
- target_compile_options(ffs PRIVATE -Wno-unused-variable -Wno-missing-braces)
- if(USE_CLANG_CL)
- target_compile_options(ffs PRIVATE -Wno-empty-body)
- endif()
-endif()
-
-if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
- target_compile_options(ffs PRIVATE -Wno-unused-but-set-variable)
-endif()
-
-add_definitions(-D__KERNEL__)
-set_module_type(ffs kernelmodedriver)
-target_link_libraries(ffs memcmp ${PSEH_LIB})
-add_importlibs(ffs ntoskrnl hal)
-add_pch(ffs inc/ffsdrv.h SOURCE)
-add_cd_file(TARGET ffs DESTINATION reactos/system32/drivers FOR all)
-
diff --git a/drivers/filesystems/ffs/inc/bootblock.h
b/drivers/filesystems/ffs/inc/bootblock.h
deleted file mode 100644
index f49b93fab01..00000000000
--- a/drivers/filesystems/ffs/inc/bootblock.h
+++ /dev/null
@@ -1,892 +0,0 @@
-/* $NetBSD: bootblock.h,v 1.24 2004/03/22 07:11:00 lukem Exp $ */
-
-/*-
- * Copyright (c) 2002-2004 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the NetBSD
- * Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-/*-
- * Copyright (C) 1993 Allen K. Briggs, Chris P. Caputo,
- * Michael L. Finch, Bradley A. Grantham, and
- * Lawrence A. Kesteloot
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the Alice Group.
- * 4. The names of the Alice Group or any of its members may not be used
- * to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE ALICE GROUP ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE ALICE GROUP BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-/*
- * Copyright (c) 1994, 1999 Christopher G. Demetriou
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Christopher G. Demetriou
- * for the NetBSD Project.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/*
- * Copyright (c) 1994 Rolf Grossmann
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Rolf Grossmann.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _SYS_BOOTBLOCK_H
-#define _SYS_BOOTBLOCK_H
-
-#include "type.h"
-
-#if 0 /* XXX ffsdrv */
-#if !defined(__ASSEMBLER__)
-#if defined(_KERNEL) || defined(_STANDALONE)
-#include <sys/stdint.h>
-#else
-#include <stdint.h>
-#endif
-#endif /* !defined(__ASSEMBLER__) */
-#endif
-
-/* ------------------------------------------
- * MBR (Master Boot Record) --
- * definitions for systems that use MBRs
- */
-
-/*
- * Layout of boot records:
- *
- * Byte range Use Description
- * ---------- --- -----------
- *
- * 0 - 2 FMP JMP xxx, NOP
- * 3 - 10 FP OEM Name
- *
- * 11 - 61 FMP FAT12/16 BPB
- * Whilst not strictly necessary for MBR,
- * GRUB reserves this area
- *
- * 11 - 89 P FAT32 BPB
- * (are we ever going to boot off this?)
- *
- *
- * 62 - 217 FMP Boot code
- *
- * 90 - 217 P FAT32 boot code
- *
- * 218 - 223 M Win95b/98/me "drive time"
- *
http://www.geocities.com/thestarman3/asm/mbr/95BMEMBR.htm#MYST
- * only changed if all 6 bytes are 0
- *
- * 224 - 436 FMP boot code (continued)
- *
- * 437 - 439 M WinNT/2K/XP MBR "boot language"
- *
http://www.geocities.com/thestarman3/asm/mbr/Win2kmbr.htm
- * not needed by us
- *
- * 400 - 439 MP NetBSD: mbr_bootsel
- *
- * 440 - 443 M WinNT/2K/XP Drive Serial Number (NT DSN)
- *
http://www.geocities.com/thestarman3/asm/mbr/Win2kmbr.htm
- *
- * 444 - 445 FMP bootcode or unused
- * NetBSD: mbr_bootsel_magic
- *
- * 446 - 509 M partition table
- *
- * 510 - 511 FMP magic number (0xAA55)
- *
- * Use:
- * ----
- * F Floppy boot sector
- * M Master Boot Record
- * P Partition Boot record
- *
- */
-
-/*
- * MBR (Master Boot Record)
- */
-#define MBR_BBSECTOR 0 /* MBR relative sector # */
-#define MBR_BPB_OFFSET 11 /* offsetof(mbr_sector, mbr_bpb) */
-#define MBR_BOOTCODE_OFFSET 90 /* offsetof(mbr_sector, mbr_bootcode) */
-#define MBR_BS_OFFSET 400 /* offsetof(mbr_sector, mbr_bootsel) */
-#define MBR_DSN_OFFSET 440 /* offsetof(mbr_sector, mbr_dsn) */
-#define MBR_BS_MAGIC_OFFSET 444 /* offsetof(mbr_sector, mbr_bootsel_magic) */
-#define MBR_PART_OFFSET 446 /* offsetof(mbr_sector, mbr_part[0]) */
-#define MBR_MAGIC_OFFSET 510 /* offsetof(mbr_sector, mbr_magic) */
-#define MBR_MAGIC 0xaa55 /* MBR magic number */
-#define MBR_BS_MAGIC 0xb5e1 /* mbr_bootsel magic number */
-#define MBR_PART_COUNT 4 /* Number of partitions in MBR */
-#define MBR_BS_PARTNAMESIZE 8 /* Size of name mbr_bootsel nametab */
- /* (excluding trailing NUL) */
-
- /* values for mbr_partition.mbrp_flag */
-#define MBR_PFLAG_ACTIVE 0x80 /* The active partition */
-
- /* values for mbr_partition.mbrp_type */
-#define MBR_PTYPE_FAT12 0x01 /* 12-bit FAT */
-#define MBR_PTYPE_FAT16S 0x04 /* 16-bit FAT, less than 32M */
-#define MBR_PTYPE_EXT 0x05 /* extended partition */
-#define MBR_PTYPE_FAT16B 0x06 /* 16-bit FAT, more than 32M */
-#define MBR_PTYPE_NTFS 0x07 /* OS/2 HPFS, NTFS, QNX2, Adv. UNIX */
-#define MBR_PTYPE_FAT32 0x0b /* 32-bit FAT */
-#define MBR_PTYPE_FAT32L 0x0c /* 32-bit FAT, LBA-mapped */
-#define MBR_PTYPE_FAT16L 0x0e /* 16-bit FAT, LBA-mapped */
-#define MBR_PTYPE_EXT_LBA 0x0f /* extended partition, LBA-mapped */
-#define MBR_PTYPE_ONTRACK 0x54
-#define MBR_PTYPE_LNXSWAP 0x82 /* Linux swap or Solaris */
-#define MBR_PTYPE_LNXEXT2 0x83 /* Linux native */
-#define MBR_PTYPE_EXT_LNX 0x85 /* Linux extended partition */
-#define MBR_PTYPE_NTFSVOL 0x87 /* NTFS volume set or HPFS mirrored */
-#define MBR_PTYPE_PREP 0x41 /* PReP */
-#define MBR_PTYPE_386BSD 0xa5 /* 386BSD partition type */
-#define MBR_PTYPE_APPLEUFS 0xa8 /* Apple UFS */
-#define MBR_PTYPE_NETBSD 0xa9 /* NetBSD partition type */
-#define MBR_PTYPE_OPENBSD 0xa6 /* OpenBSD partition type */
-
-#define MBR_PSECT(s) ((s) & 0x3f)
-#define MBR_PCYL(c, s) ((c) + (((s) & 0xc0) << 2))
-
-#define MBR_IS_EXTENDED(x) ((x) == MBR_PTYPE_EXT || \
- (x) == MBR_PTYPE_EXT_LBA || \
- (x) == MBR_PTYPE_EXT_LNX)
-
- /* values for mbr_bootsel.mbrbs_flags */
-#define MBR_BS_ACTIVE 0x01 /* Bootselector active (or code present) */
-#define MBR_BS_EXTINT13 0x02 /* Set by fdisk if LBA needed (deprecated) */
-#define MBR_BS_READ_LBA 0x04 /* Force LBA reads - even for low numbers */
-#define MBR_BS_EXTLBA 0x08 /* Extended ptn capable (LBA reads) */
-#define MBR_BS_NEWMBR 0x80 /* New bootsel at offset 440 */
-
-#if !defined(__ASSEMBLER__) /* { */
-
-#pragma pack(1)
-
-/*
- * (x86) BIOS Parameter Block for FAT12
- */
-struct mbr_bpbFAT12 {
- uint16_t bpbBytesPerSec; /* bytes per sector */
- uint8_t bpbSecPerClust; /* sectors per cluster */
- uint16_t bpbResSectors; /* number of reserved sectors */
- uint8_t bpbFATs; /* number of FATs */
- uint16_t bpbRootDirEnts; /* number of root directory entries */
- uint16_t bpbSectors; /* total number of sectors */
- uint8_t bpbMedia; /* media descriptor */
- uint16_t bpbFATsecs; /* number of sectors per FAT */
- uint16_t bpbSecPerTrack; /* sectors per track */
- uint16_t bpbHeads; /* number of heads */
- uint16_t bpbHiddenSecs; /* # of hidden sectors */
-}; /* __attribute__((__packed__)); */
-
-/*
- * (x86) BIOS Parameter Block for FAT16
- */
-struct mbr_bpbFAT16 {
- uint16_t bpbBytesPerSec; /* bytes per sector */
- uint8_t bpbSecPerClust; /* sectors per cluster */
- uint16_t bpbResSectors; /* number of reserved sectors */
- uint8_t bpbFATs; /* number of FATs */
- uint16_t bpbRootDirEnts; /* number of root directory entries */
- uint16_t bpbSectors; /* total number of sectors */
- uint8_t bpbMedia; /* media descriptor */
- uint16_t bpbFATsecs; /* number of sectors per FAT */
- uint16_t bpbSecPerTrack; /* sectors per track */
- uint16_t bpbHeads; /* number of heads */
- uint32_t bpbHiddenSecs; /* # of hidden sectors */
- uint32_t bpbHugeSectors; /* # of sectors if bpbSectors == 0 */
- uint8_t bsDrvNum; /* Int 0x13 drive number (e.g. 0x80) */
- uint8_t bsReserved1; /* Reserved; set to 0 */
- uint8_t bsBootSig; /* 0x29 if next 3 fields are present */
- uint8_t bsVolID[4]; /* Volume serial number */
- uint8_t bsVolLab[11]; /* Volume label */
- uint8_t bsFileSysType[8];
- /* "FAT12 ", "FAT16 ", "FAT " */
-}; /* __attribute__((__packed__)); */
-
-/*
- * (x86) BIOS Parameter Block for FAT32
- */
-struct mbr_bpbFAT32 {
- uint16_t bpbBytesPerSec; /* bytes per sector */
- uint8_t bpbSecPerClust; /* sectors per cluster */
- uint16_t bpbResSectors; /* number of reserved sectors */
- uint8_t bpbFATs; /* number of FATs */
- uint16_t bpbRootDirEnts; /* number of root directory entries */
- uint16_t bpbSectors; /* total number of sectors */
- uint8_t bpbMedia; /* media descriptor */
- uint16_t bpbFATsecs; /* number of sectors per FAT */
- uint16_t bpbSecPerTrack; /* sectors per track */
- uint16_t bpbHeads; /* number of heads */
- uint32_t bpbHiddenSecs; /* # of hidden sectors */
- uint32_t bpbHugeSectors; /* # of sectors if bpbSectors == 0 */
- uint32_t bpbBigFATsecs; /* like bpbFATsecs for FAT32 */
- uint16_t bpbExtFlags; /* extended flags: */
-#define MBR_FAT32_FATNUM 0x0F /* mask for numbering active FAT */
-#define MBR_FAT32_FATMIRROR 0x80 /* FAT is mirrored (as previously) */
- uint16_t bpbFSVers; /* filesystem version */
-#define MBR_FAT32_FSVERS 0 /* currently only 0 is understood */
- uint32_t bpbRootClust; /* start cluster for root directory */
- uint16_t bpbFSInfo; /* filesystem info structure sector */
- uint16_t bpbBackup; /* backup boot sector */
- uint8_t bsReserved[12]; /* Reserved for future expansion */
- uint8_t bsDrvNum; /* Int 0x13 drive number (e.g. 0x80) */
- uint8_t bsReserved1; /* Reserved; set to 0 */
- uint8_t bsBootSig; /* 0x29 if next 3 fields are present */
- uint8_t bsVolID[4]; /* Volume serial number */
- uint8_t bsVolLab[11]; /* Volume label */
- uint8_t bsFileSysType[8]; /* "FAT32 " */
-}; /* __attribute__((__packed__)); */
-
-/*
- * (x86) MBR boot selector
- */
-struct mbr_bootsel {
- uint8_t mbrbs_defkey;
- uint8_t mbrbs_flags;
- uint16_t mbrbs_timeo;
- uint8_t mbrbs_nametab[MBR_PART_COUNT][MBR_BS_PARTNAMESIZE + 1];
-}; /* __attribute__((__packed__)); */
-
-/*
- * MBR partition
- */
-struct mbr_partition {
- uint8_t mbrp_flag; /* MBR partition flags */
- uint8_t mbrp_shd; /* Starting head */
- uint8_t mbrp_ssect; /* Starting sector */
- uint8_t mbrp_scyl; /* Starting cylinder */
- uint8_t mbrp_type; /* Partition type (see below) */
- uint8_t mbrp_ehd; /* End head */
- uint8_t mbrp_esect; /* End sector */
- uint8_t mbrp_ecyl; /* End cylinder */
- uint32_t mbrp_start; /* Absolute starting sector number */
- uint32_t mbrp_size; /* Partition size in sectors */
-}; /* __attribute__((__packed__)); */
-
-int xlat_mbr_fstype(int); /* in sys/lib/libkern/xlat_mbr_fstype.c */
-
-/*
- * MBR boot sector.
- * This is used by both the MBR (Master Boot Record) in sector 0 of the disk
- * and the PBR (Partition Boot Record) in sector 0 of an MBR partition.
- */
-struct mbr_sector {
- /* Jump instruction to boot code. */
- /* Usually 0xE9nnnn or 0xEBnn90 */
- uint8_t mbr_jmpboot[3];
- /* OEM name and version */
- uint8_t mbr_oemname[8];
- union { /* BIOS Parameter Block */
- struct mbr_bpbFAT12 bpb12;
- struct mbr_bpbFAT16 bpb16;
- struct mbr_bpbFAT32 bpb32;
- } mbr_bpb;
- /* Boot code */
- uint8_t mbr_bootcode[310];
- /* Config for /usr/mdec/mbr_bootsel */
- struct mbr_bootsel mbr_bootsel;
- /* NT Drive Serial Number */
- uint32_t mbr_dsn;
- /* mbr_bootsel magic */
- uint16_t mbr_bootsel_magic;
- /* MBR partition table */
- struct mbr_partition mbr_parts[MBR_PART_COUNT];
- /* MBR magic (0xaa55) */
- uint16_t mbr_magic;
-}; /* __attribute__((__packed__)); */
-
-#endif /* !defined(__ASSEMBLER__) */ /* } */
-
-#pragma pack()
-
-
-/* ------------------------------------------
- * shared --
- * definitions shared by many platforms
- */
-
-#if !defined(__ASSEMBLER__) /* { */
-
- /* Maximum # of blocks in bbi_block_table, each bbi_block_size long */
-#define SHARED_BBINFO_MAXBLOCKS 118 /* so sizeof(shared_bbinfo) == 512 */
-
-struct shared_bbinfo {
- uint8_t bbi_magic[32];
- int32_t bbi_block_size;
- int32_t bbi_block_count;
- int32_t bbi_block_table[SHARED_BBINFO_MAXBLOCKS];
-};
-
-#if 0 /* XXX ffsdrv */
-
-/* ------------------------------------------
- * alpha --
- * Alpha (disk, but also tape) Boot Block.
- *
- * See Section (III) 3.6.1 of the Alpha Architecture Reference Manual.
- */
-
-struct alpha_boot_block {
- uint64_t bb_data[63]; /* data (disklabel, also as below) */
- uint64_t bb_cksum; /* checksum of the boot block,
- * taken as uint64_t's
- */
-};
-#define bb_secsize bb_data[60] /* secondary size (blocks) */
-#define bb_secstart bb_data[61] /* secondary start (blocks) */
-#define bb_flags bb_data[62] /* unknown flags (set to zero) */
-
-#define ALPHA_BOOT_BLOCK_OFFSET 0 /* offset of boot block. */
-#define ALPHA_BOOT_BLOCK_BLOCKSIZE 512 /* block size for sector
- * size/start, and for boot
- * block itself.
- */
-
-#define ALPHA_BOOT_BLOCK_CKSUM(bb,cksum) \
- do { \
- const struct alpha_boot_block *_bb = (bb); \
- uint64_t _cksum; \
- int _i; \
- \
- _cksum = 0; \
- for (_i = 0; \
- _i < (sizeof _bb->bb_data / sizeof _bb->bb_data[0]); \
- _i++) \
- _cksum += _bb->bb_data[_i]; \
- *(cksum) = _cksum; \
- } while (/*CONSTCOND*/ 0)
-
-/* ------------------------------------------
- * apple --
- * Apple computers boot block related information
- */
-
-/*
- * Driver Descriptor Map, from Inside Macintosh: Devices, SCSI Manager
- * pp 12-13. The driver descriptor map always resides on physical block 0.
- */
-struct apple_drvr_descriptor {
- uint32_t descBlock; /* first block of driver */
- uint16_t descSize; /* driver size in blocks */
- uint16_t descType; /* system type */
-};
-
-/*
- * system types; Apple reserves 0-15
- */
-#define APPLE_DRVR_TYPE_MACINTOSH 1
-
-#define APPLE_DRVR_MAP_MAGIC 0x4552
-#define APPLE_DRVR_MAP_MAX_DESCRIPTORS 61
-
-struct apple_drvr_map {
- uint16_t sbSig; /* map signature */
- uint16_t sbBlockSize; /* block size of device */
- uint32_t sbBlkCount; /* number of blocks on device */
- uint16_t sbDevType; /* (used internally by ROM) */
- uint16_t sbDevID; /* (used internally by ROM) */
- uint32_t sbData; /* (used internally by ROM) */
- uint16_t sbDrvrCount; /* number of driver descriptors */
- struct apple_drvr_descriptor sb_dd[APPLE_DRVR_MAP_MAX_DESCRIPTORS];
- uint16_t pad[3];
-} __attribute__((__packed__));
-
-/*
- * Partition map structure from Inside Macintosh: Devices, SCSI Manager
- * pp. 13-14. The partition map always begins on physical block 1.
- *
- * With the exception of block 0, all blocks on the disk must belong to
- * exactly one partition. The partition map itself belongs to a partition
- * of type `APPLE_PARTITION_MAP', and is not limited in size by anything
- * other than available disk space. The partition map is not necessarily
- * the first partition listed.
- */
-#define APPLE_PART_MAP_ENTRY_MAGIC 0x504d
-
-struct apple_part_map_entry {
- uint16_t pmSig; /* partition signature */
- uint16_t pmSigPad; /* (reserved) */
- uint32_t pmMapBlkCnt; /* number of blocks in partition map */
- uint32_t pmPyPartStart; /* first physical block of partition */
- uint32_t pmPartBlkCnt; /* number of blocks in partition */
- uint8_t pmPartName[32]; /* partition name */
- uint8_t pmPartType[32]; /* partition type */
- uint32_t pmLgDataStart; /* first logical block of data area */
- uint32_t pmDataCnt; /* number of blocks in data area */
- uint32_t pmPartStatus; /* partition status information */
- uint32_t pmLgBootStart; /* first logical block of boot code */
- uint32_t pmBootSize; /* size of boot code, in bytes */
- uint32_t pmBootLoad; /* boot code load address */
- uint32_t pmBootLoad2; /* (reserved) */
- uint32_t pmBootEntry; /* boot code entry point */
- uint32_t pmBootEntry2; /* (reserved) */
- uint32_t pmBootCksum; /* boot code checksum */
- int8_t pmProcessor[16]; /* processor type (e.g. "68020") */
- uint8_t pmBootArgs[128]; /* A/UX boot arguments */
- uint8_t pad[248]; /* pad to end of block */
-};
-
-#define APPLE_PART_TYPE_DRIVER "APPLE_DRIVER"
-#define APPLE_PART_TYPE_DRIVER43 "APPLE_DRIVER43"
-#define APPLE_PART_TYPE_DRIVERATA "APPLE_DRIVER_ATA"
-#define APPLE_PART_TYPE_DRIVERIOKIT "APPLE_DRIVER_IOKIT"
-#define APPLE_PART_TYPE_FWDRIVER "APPLE_FWDRIVER"
-#define APPLE_PART_TYPE_FWB_COMPONENT "FWB DRIVER COMPONENTS"
-#define APPLE_PART_TYPE_FREE "APPLE_FREE"
-#define APPLE_PART_TYPE_MAC "APPLE_HFS"
-#define APPLE_PART_TYPE_NETBSD "NETBSD"
-#define APPLE_PART_TYPE_NBSD_PPCBOOT "NETBSD/MACPPC"
-#define APPLE_PART_TYPE_NBSD_68KBOOT "NETBSD/MAC68K"
-#define APPLE_PART_TYPE_PATCHES "APPLE_PATCHES"
-#define APPLE_PART_TYPE_PARTMAP "APPLE_PARTITION_MAP"
-#define APPLE_PART_TYPE_PATCHES "APPLE_PATCHES"
-#define APPLE_PART_TYPE_SCRATCH "APPLE_SCRATCH"
-#define APPLE_PART_TYPE_UNIX "APPLE_UNIX_SVR2"
-
-/*
- * "pmBootArgs" for APPLE_UNIX_SVR2 partition.
- * NetBSD/mac68k only uses Magic, Cluster, Type, and Flags.
- */
-struct apple_blockzeroblock {
- uint32_t bzbMagic;
- uint8_t bzbCluster;
- uint8_t bzbType;
- uint16_t bzbBadBlockInode;
- uint16_t bzbFlags;
- uint16_t bzbReserved;
- uint32_t bzbCreationTime;
- uint32_t bzbMountTime;
- uint32_t bzbUMountTime;
-};
-
-#define APPLE_BZB_MAGIC 0xABADBABE
-#define APPLE_BZB_TYPEFS 1
-#define APPLE_BZB_TYPESWAP 3
-#define APPLE_BZB_ROOTFS 0x8000
-#define APPLE_BZB_USRFS 0x4000
-
-/* ------------------------------------------
- * hp300
- *
- */
-
-/* volume header for "LIF" format volumes */
-
-struct hp300_lifvol {
- int16_t vol_id;
- char vol_label[6];
- int32_t vol_addr;
- int16_t vol_oct;
- int16_t vol_dummy;
- int32_t vol_dirsize;
- int16_t vol_version;
- int16_t vol_zero;
- int32_t vol_huh1;
- int32_t vol_huh2;
- int32_t vol_length;
-};
-
-/* LIF directory entry format */
-
-struct hp300_lifdir {
- char dir_name[10];
- int16_t dir_type;
- int32_t dir_addr;
- int32_t dir_length;
- char dir_toc[6];
- int16_t dir_flag;
- int32_t dir_exec;
-};
-
-/* load header for boot rom */
-struct hp300_load {
- int32_t address;
- int32_t count;
-};
-
-#define HP300_VOL_ID -32768
-#define HP300_VOL_OCT 4096
-#define HP300_DIR_TYPE -5822
-#define HP300_DIR_FLAG 0x8001 /* dont ask me! */
-#define HP300_SECTSIZE 256
-
-#endif
-
-/* ------------------------------------------
- * x86
- *
- */
-
-/*
- * Parameters for NetBSD /boot written to start of pbr code by installboot
- */
-
-struct x86_boot_params {
- uint32_t bp_length; /* length of patchable data */
- uint32_t bp_flags;
- uint32_t bp_timeout; /* boot timeout in seconds */
- uint32_t bp_consdev;
- uint32_t bp_conspeed;
- uint8_t bp_password[16]; /* md5 hash of password */
- char bp_keymap[16]; /* keyboard traslation map */
-};
-
-#endif /* !defined(__ASSEMBLER__) */ /* } */
-
-#define X86_BOOT_MAGIC(n) ('x' << 24 | 0x86b << 12 | 'm'
<< 4 | (n))
-#define X86_BOOT_MAGIC_1 X86_BOOT_MAGIC(1) /* pbr.S */
-#define X86_BOOT_MAGIC_2 X86_BOOT_MAGIC(2) /* bootxx.S */
-#define X86_BOOT_MAGIC_PXE X86_BOOT_MAGIC(3) /* start_pxe.S */
-
- /* values for bp_flags */
-#define X86_BP_FLAGS_RESET_VIDEO 1
-#define X86_BP_FLAGS_PASSWORD 2
-
- /* values for bp_consdev */
-#define X86_BP_CONSDEV_PC 0
-#define X86_BP_CONSDEV_COM0 1
-#define X86_BP_CONSDEV_COM1 2
-#define X86_BP_CONSDEV_COM2 3
-#define X86_BP_CONSDEV_COM3 4
-#define X86_BP_CONSDEV_COM0KBD 5
-#define X86_BP_CONSDEV_COM1KBD 6
-#define X86_BP_CONSDEV_COM2KBD 7
-#define X86_BP_CONSDEV_COM3KBD 8
-
-#if !defined(__ASSEMBLER__) /* { */
-
-#if 0 /* XXX ffsdrv */
-/* ------------------------------------------
- * macppc
- */
-
-#define MACPPC_BOOT_BLOCK_OFFSET 2048
-#define MACPPC_BOOT_BLOCK_BLOCKSIZE 512
-#define MACPPC_BOOT_BLOCK_MAX_SIZE 2048 /* XXX: could be up to 6144 */
- /* Magic string -- 32 bytes long (including the NUL) */
-#define MACPPC_BBINFO_MAGIC "NetBSD/macppc bootxx 20020515"
-
-/* ------------------------------------------
- * news68k, newsmips
- */
-
-#define NEWS_BOOT_BLOCK_LABELOFFSET 64 /* XXX from <machine/disklabel.h> */
-#define NEWS_BOOT_BLOCK_OFFSET 0
-#define NEWS_BOOT_BLOCK_BLOCKSIZE 512
-#define NEWS_BOOT_BLOCK_MAX_SIZE (512 * 16)
-
- /* Magic string -- 32 bytes long (including the NUL) */
-#define NEWS68K_BBINFO_MAGIC "NetBSD/news68k bootxx 20020518"
-#define NEWSMIPS_BBINFO_MAGIC "NetBSD/newsmips bootxx 20020518"
-
-/* ------------------------------------------
- * next68k
- */
-
-#define NEXT68K_LABEL_MAXPARTITIONS 8 /* number of partitions in next68k_disklabel */
-#define NEXT68K_LABEL_CPULBLLEN 24
-#define NEXT68K_LABEL_MAXDNMLEN 24
-#define NEXT68K_LABEL_MAXTYPLEN 24
-#define NEXT68K_LABEL_MAXBFLEN 24
-#define NEXT68K_LABEL_MAXHNLEN 32
-#define NEXT68K_LABEL_MAXMPTLEN 16
-#define NEXT68K_LABEL_MAXFSTLEN 8
-#define NEXT68K_LABEL_NBAD 1670 /* sized to make label ~= 8KB */
-
-struct next68k_partition {
- int32_t cp_offset; /* starting sector */
- int32_t cp_size; /* number of sectors in partition */
- int16_t cp_bsize; /* block size in bytes */
- int16_t cp_fsize; /* filesystem basic fragment size */
- char cp_opt; /* optimization type: 's'pace/'t'ime */
- char cp_pad1;
- int16_t cp_cpg; /* filesystem cylinders per group */
- int16_t cp_density; /* bytes per inode density */
- int8_t cp_minfree; /* minfree (%) */
- int8_t cp_newfs; /* run newfs during init */
- char cp_mountpt[NEXT68K_LABEL_MAXMPTLEN];
- /* default/standard mount point */
- int8_t cp_automnt; /* auto-mount when inserted */
- char cp_type[NEXT68K_LABEL_MAXFSTLEN]; /* file system type name */
- char cp_pad2;
-} __attribute__ ((packed));
-
-/* The disklabel the way it is on the disk */
-struct next68k_disklabel {
- int32_t cd_version; /* label version */
- int32_t cd_label_blkno; /* block # of this label */
- int32_t cd_size; /* size of media area (sectors) */
- char cd_label[NEXT68K_LABEL_CPULBLLEN]; /* disk name (label) */
- uint32_t cd_flags; /* flags */
- uint32_t cd_tag; /* volume tag */
- char cd_name[NEXT68K_LABEL_MAXDNMLEN]; /* drive (hardware) name */
- char cd_type[NEXT68K_LABEL_MAXTYPLEN]; /* drive type */
- int32_t cd_secsize; /* # of bytes per sector */
- int32_t cd_ntracks; /* # of tracks per cylinder */
- int32_t cd_nsectors; /* # of data sectors per track */
- int32_t cd_ncylinders; /* # of data cylinders per unit */
- int32_t cd_rpm; /* rotational speed */
- int16_t cd_front; /* # of sectors in "front porch" */
- int16_t cd_back; /* # of sectors in "back porch" */
- int16_t cd_ngroups; /* # of alt groups */
- int16_t cd_ag_size; /* alt group size (sectors) */
- int16_t cd_ag_alts; /* alternate sectors / alt group */
- int16_t cd_ag_off; /* sector offset to first alternate */
- int32_t cd_boot_blkno[2]; /* boot program locations */
- char cd_kernel[NEXT68K_LABEL_MAXBFLEN]; /* default kernel name */
- char cd_hostname[NEXT68K_LABEL_MAXHNLEN];
- /* host name (usu. where disk was labeled) */
- char cd_rootpartition; /* root partition letter e.g. 'a' */
- char cd_rwpartition; /* r/w partition letter e.g. 'b' */
- struct next68k_partition cd_partitions[NEXT68K_LABEL_MAXPARTITIONS];
-
- union {
- uint16_t CD_v3_checksum; /* label version 3 checksum */
- int32_t CD_bad[NEXT68K_LABEL_NBAD];
- /* block number that is bad */
- } cd_un;
- uint16_t cd_checksum; /* label version 1 or 2 checksum */
-} __attribute__ ((packed));
-
-#define NEXT68K_LABEL_cd_checksum cd_checksum
-#define NEXT68K_LABEL_cd_v3_checksum cd_un.CD_v3_checksum
-#define NEXT68K_LABEL_cd_bad cd_un.CD_bad
-
-#define NEXT68K_LABEL_SECTOR 0 /* sector containing label */
-#define NEXT68K_LABEL_OFFSET 0 /* offset of label in sector */
-#define NEXT68K_LABEL_SIZE 8192 /* size of label */
-#define NEXT68K_LABEL_CD_V1 0x4e655854 /* version #1: "NeXT" */
-#define NEXT68K_LABEL_CD_V2 0x646c5632 /* version #2: "dlV2" */
-#define NEXT68K_LABEL_CD_V3 0x646c5633 /* version #3: "dlV3" */
-#define NEXT68K_LABEL_DEFAULTFRONTPORCH (160 * 2)
-#define NEXT68K_LABEL_DEFAULTBOOT0_1 (32 * 2)
-#define NEXT68K_LABEL_DEFAULTBOOT0_2 (96 * 2)
-
-/* ------------------------------------------
- * pmax --
- * PMAX (DECstation / MIPS) boot block information
- */
-
-/*
- * If mode is 0, there is just one sequence of blocks and one Dec_BootMap
- * is used. If mode is 1, there are multiple sequences of blocks
- * and multiple Dec_BootMaps are used, the last with numBlocks = 0.
- */
-struct pmax_boot_map {
- int32_t num_blocks; /* Number of blocks to read. */
- int32_t start_block; /* Starting block on disk. */
-};
-
-/*
- * This is the structure of a disk or tape boot block. The boot_map
- * can either be a single boot count and start block (contiguous mode)
- * or a list of up to 61 (to fill a 512 byte sector) block count and
- * start block pairs. Under NetBSD, contiguous mode is always used.
- */
-struct pmax_boot_block {
- uint8_t pad[8];
- int32_t magic; /* PMAX_BOOT_MAGIC */
- int32_t mode; /* Mode for boot info. */
- uint32_t load_addr; /* Address to start loading. */
- uint32_t exec_addr; /* Address to start execing. */
- struct pmax_boot_map map[61]; /* boot program section(s). */
-} __attribute__((__packed__));
-
-#define PMAX_BOOT_MAGIC 0x0002757a
-#define PMAX_BOOTMODE_CONTIGUOUS 0
-#define PMAX_BOOTMODE_SCATTERED 1
-
-#define PMAX_BOOT_BLOCK_OFFSET 0
-#define PMAX_BOOT_BLOCK_BLOCKSIZE 512
-
-
-/* ------------------------------------------
- * sparc
- */
-
-#define SPARC_BOOT_BLOCK_OFFSET 512
-#define SPARC_BOOT_BLOCK_BLOCKSIZE 512
-#define SPARC_BOOT_BLOCK_MAX_SIZE (512 * 15)
- /* Magic string -- 32 bytes long (including the NUL) */
-#define SPARC_BBINFO_MAGIC "NetBSD/sparc bootxx 20020515"
-
-
-/* ------------------------------------------
- * sparc64
- */
-
-#define SPARC64_BOOT_BLOCK_OFFSET 512
-#define SPARC64_BOOT_BLOCK_BLOCKSIZE 512
-#define SPARC64_BOOT_BLOCK_MAX_SIZE (512 * 15)
-
-
-/* ------------------------------------------
- * sun68k (sun2, sun3)
- */
-
-#define SUN68K_BOOT_BLOCK_OFFSET 512
-#define SUN68K_BOOT_BLOCK_BLOCKSIZE 512
-#define SUN68K_BOOT_BLOCK_MAX_SIZE (512 * 15)
- /* Magic string -- 32 bytes long (including the NUL) */
-#define SUN68K_BBINFO_MAGIC "NetBSD/sun68k bootxx 20020515"
-
-
-/* ------------------------------------------
- * vax --
- * VAX boot block information
- */
-
-struct vax_boot_block {
-/* Note that these don't overlap any of the pmax boot block */
- uint8_t pad0[2];
- uint8_t bb_id_offset; /* offset in words to id (magic1)*/
- uint8_t bb_mbone; /* must be one */
- uint16_t bb_lbn_hi; /* lbn (hi word) of bootstrap */
- uint16_t bb_lbn_low; /* lbn (low word) of bootstrap */
- uint8_t pad1[332];
-
- /* The rest of these fields are identification area and describe
- * the secondary block for uVAX VMB.
- */
- uint8_t bb_magic1; /* magic number */
- uint8_t bb_mbz1; /* must be zero */
- uint8_t bb_pad1; /* any value */
- uint8_t bb_sum1; /* ~(magic1 + mbz1 + pad1) */
-
- uint8_t bb_mbz2; /* must be zero */
- uint8_t bb_volinfo; /* volinfo */
- uint8_t bb_pad2a; /* any value */
- uint8_t bb_pad2b; /* any value */
-
- uint32_t bb_size; /* size in blocks of bootstrap */
- uint32_t bb_load; /* load offset to bootstrap */
- uint32_t bb_entry; /* byte offset in bootstrap */
- uint32_t bb_sum3; /* sum of previous 3 fields */
-
- /* The rest is unused.
- */
- uint8_t pad2[148];
-} __attribute__((__packed__));
-
-#define VAX_BOOT_MAGIC1 0x18 /* size of BB info? */
-#define VAX_BOOT_VOLINFO_NONE 0x00 /* no special info */
-#define VAX_BOOT_VOLINFO_SS 0x01 /* single sided */
-#define VAX_BOOT_VOLINFO_DS 0x81 /* double sided */
-
-#define VAX_BOOT_SIZE 15 /* 15 blocks */
-#define VAX_BOOT_LOAD 0 /* no load offset */
-#define VAX_BOOT_ENTRY 0x200 /* one block in */
-
-#define VAX_BOOT_BLOCK_OFFSET 0
-#define VAX_BOOT_BLOCK_BLOCKSIZE 512
-
-
-/* ------------------------------------------
- * x68k
- */
-
-#define X68K_BOOT_BLOCK_OFFSET 0
-#define X68K_BOOT_BLOCK_BLOCKSIZE 512
-#define X68K_BOOT_BLOCK_MAX_SIZE (512 * 16)
- /* Magic string -- 32 bytes long (including the NUL) */
-#define X68K_BBINFO_MAGIC "NetBSD/x68k bootxx 20020601"
-
-#endif /* !defined(__ASSEMBLER__) */ /* } */
-
-#endif
-
-#endif /* !_SYS_BOOTBLOCK_H */
diff --git a/drivers/filesystems/ffs/inc/dinode.h b/drivers/filesystems/ffs/inc/dinode.h
deleted file mode 100644
index 3b87eb5b485..00000000000
--- a/drivers/filesystems/ffs/inc/dinode.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/* $NetBSD: dinode.h,v 1.18 2003/08/07 16:34:42 agc Exp $ */
-
-/*
- * Copyright (c) 2002 Networks Associates Technology, Inc.
- * All rights reserved.
- *
- * This software was developed for the FreeBSD Project by Marshall
- * Kirk McKusick and Network Associates Laboratories, the Security
- * Research Division of Network Associates, Inc. under DARPA/SPAWAR
- * contract N66001-01-C-8035 ("CBOSS"), as part of the DARPA CHATS
- * research program
- *
- * Copyright (c) 1982, 1989, 1993
- * The Regents of the University of California. All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)dinode.h 8.9 (Berkeley) 3/29/95
- */
-
-#ifndef _UFS_UFS_DINODE_H_
-#define _UFS_UFS_DINODE_H_
-
-#include "type.h"
-
-/*
- * The root inode is the root of the file system. Inode 0 can't be used for
- * normal purposes and historically bad blocks were linked to inode 1, thus
- * the root inode is 2. (Inode 1 is no longer used for this purpose, however
- * numerous dump tapes make this assumption, so we are stuck with it).
- */
-#define ROOTINO ((ino_t)2)
-
-/*
- * The Whiteout inode# is a dummy non-zero inode number which will
- * never be allocated to a real file. It is used as a place holder
- * in the directory entry which has been tagged as a DT_W entry.
- * See the comments about ROOTINO above.
- */
-#define WINO ((ino_t)1)
-
-/*
- * A dinode contains all the meta-data associated with a UFS file.
- * This structure defines the on-disk format of a dinode. Since
- * this structure describes an on-disk structure, all its fields
- * are defined by types with precise widths.
- */
-
-#define NXADDR 2
-#define NDADDR 12 /* Direct addresses in inode. */
-#define NIADDR 3 /* Indirect addresses in inode. */
-
-struct ufs1_dinode {
- u_int16_t di_mode; /* 0: IFMT, permissions; see below. */
- int16_t di_nlink; /* 2: File link count. */
- union {
- u_int16_t oldids[2]; /* 4: Ffs: old user and group ids. */
- u_int32_t inumber; /* 4: Lfs: inode number. */
- } di_u;
- u_int64_t di_size; /* 8: File byte count. */
- int32_t di_atime; /* 16: Last access time. */
- int32_t di_atimensec; /* 20: Last access time. */
- int32_t di_mtime; /* 24: Last modified time. */
- int32_t di_mtimensec; /* 28: Last modified time. */
- int32_t di_ctime; /* 32: Last inode change time. */
- int32_t di_ctimensec; /* 36: Last inode change time. */
- int32_t di_db[NDADDR]; /* 40: Direct disk blocks. */
- int32_t di_ib[NIADDR]; /* 88: Indirect disk blocks. */
- u_int32_t di_flags; /* 100: Status flags (chflags). */
- u_int32_t di_blocks; /* 104: Blocks actually held. */
- int32_t di_gen; /* 108: Generation number. */
- u_int32_t di_uid; /* 112: File owner. */
- u_int32_t di_gid; /* 116: File group. */
- int32_t di_spare[2]; /* 120: Reserved; currently unused */
-};
-
-struct ufs2_dinode {
- u_int16_t di_mode; /* 0: IFMT, permissions; see below. */
- int16_t di_nlink; /* 2: File link count. */
- u_int32_t di_uid; /* 4: File owner. */
- u_int32_t di_gid; /* 8: File group. */
- u_int32_t di_blksize; /* 12: Inode blocksize. */
- u_int64_t di_size; /* 16: File byte count. */
- u_int64_t di_blocks; /* 24: Bytes actually held. */
- int64_t di_atime; /* 32: Last access time. */
- int64_t di_mtime; /* 40: Last modified time. */
- int64_t di_ctime; /* 48: Last inode change time. */
- int64_t di_birthtime; /* 56: Inode creation time. */
- int32_t di_mtimensec; /* 64: Last modified time. */
- int32_t di_atimensec; /* 68: Last access time. */
- int32_t di_ctimensec; /* 72: Last inode change time. */
- int32_t di_birthnsec; /* 76: Inode creation time. */
- int32_t di_gen; /* 80: Generation number. */
- u_int32_t di_kernflags; /* 84: Kernel flags. */
- u_int32_t di_flags; /* 88: Status flags (chflags). */
- int32_t di_extsize; /* 92: External attributes block. */
- int64_t di_extb[NXADDR];/* 96: External attributes block. */
- int64_t di_db[NDADDR]; /* 112: Direct disk blocks. */
- int64_t di_ib[NIADDR]; /* 208: Indirect disk blocks. */
- int64_t di_spare[3]; /* 232: Reserved; currently unused */
-};
-
-/*
- * The di_db fields may be overlaid with other information for
- * file types that do not have associated disk storage. Block
- * and character devices overlay the first data block with their
- * dev_t value. Short symbolic links place their path in the
- * di_db area.
- */
-#define di_inumber di_u.inumber
-#define di_ogid di_u.oldids[1]
-#define di_ouid di_u.oldids[0]
-#define di_rdev di_db[0]
-#define MAXSYMLINKLEN_UFS1 ((NDADDR + NIADDR) * sizeof(int32_t))
-#define MAXSYMLINKLEN_UFS2 ((NDADDR + NIADDR) * sizeof(int64_t))
-
-#define MAXSYMLINKLEN(ip) \
- ((ip)->i_ump->um_fstype == UFS1) ? \
- MAXSYMLINKLEN_UFS1 : MAXSYMLINKLEN_UFS2
-
-/* NeXT used to keep short symlinks in the inode even when using
- * FS_42INODEFMT. In that case fs->fs_maxsymlinklen is probably -1,
- * but short symlinks were stored in inodes shorter than this:
- */
-#define APPLEUFS_MAXSYMLINKLEN 60
-
-/* File permissions. */
-#define IEXEC 0000100 /* Executable. */
-#define IWRITE 0000200 /* Writable. */
-#define IREAD 0000400 /* Readable. */
-#define ISVTX 0001000 /* Sticky bit. */
-#define ISGID 0002000 /* Set-gid. */
-#define ISUID 0004000 /* Set-uid. */
-
-/* File types. */
-#define IFMT 0170000 /* Mask of file type. */
-#define IFIFO 0010000 /* Named pipe (fifo). */
-#define IFCHR 0020000 /* Character device. */
-#define IFDIR 0040000 /* Directory file. */
-#define IFBLK 0060000 /* Block device. */
-#define IFREG 0100000 /* Regular file. */
-#define IFLNK 0120000 /* Symbolic link. */
-#define IFSOCK 0140000 /* UNIX domain socket. */
-#define IFWHT 0160000 /* Whiteout. */
-
-/* Size of the on-disk inode. */
-#define DINODE1_SIZE (sizeof(struct ufs1_dinode)) /* 128 */
-#define DINODE2_SIZE (sizeof(struct ufs2_dinode))
-
-#endif /* !_UFS_UFS_DINODE_H_ */
diff --git a/drivers/filesystems/ffs/inc/dir.h b/drivers/filesystems/ffs/inc/dir.h
deleted file mode 100644
index 53b5034cfbe..00000000000
--- a/drivers/filesystems/ffs/inc/dir.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/* $NetBSD: dir.h,v 1.17 2003/08/07 16:34:42 agc Exp $ */
-
-/*
- * Copyright (c) 1982, 1986, 1989, 1993
- * The Regents of the University of California. All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)dir.h 8.5 (Berkeley) 4/27/95
- */
-
-#ifndef _UFS_UFS_DIR_H_
-#define _UFS_UFS_DIR_H_
-
-#include "type.h"
-
-/*
- * Theoretically, directories can be more than 2Gb in length, however, in
- * practice this seems unlikely. So, we define the type doff_t as a 32-bit
- * quantity to keep down the cost of doing lookup on a 32-bit machine.
- */
-#define doff_t int32_t
-#define MAXDIRSIZE (0x7fffffff)
-
-/*
- * A directory consists of some number of blocks of DIRBLKSIZ
- * bytes, where DIRBLKSIZ is chosen such that it can be transferred
- * to disk in a single atomic operation (e.g. 512 bytes on most machines).
- *
- * Each DIRBLKSIZ byte block contains some number of directory entry
- * structures, which are of variable length. Each directory entry has
- * a struct direct at the front of it, containing its inode number,
- * the length of the entry, and the length of the name contained in
- * the entry. These are followed by the name padded to a 4 byte boundary.
- * All names are guaranteed null terminated.
- * The maximum length of a name in a directory is MAXNAMLEN.
- *
- * The macro DIRSIZ(fmt, dp) gives the amount of space required to represent
- * a directory entry. Free space in a directory is represented by
- * entries which have dp->d_reclen > DIRSIZ(fmt, dp). All DIRBLKSIZ bytes
- * in a directory block are claimed by the directory entries. This
- * usually results in the last entry in a directory having a large
- * dp->d_reclen. When entries are deleted from a directory, the
- * space is returned to the previous entry in the same directory
- * block by increasing its dp->d_reclen. If the first entry of
- * a directory block is free, then its dp->d_ino is set to 0.
- * Entries other than the first in a directory do not normally have
- * dp->d_ino set to 0.
- */
-#undef DIRBLKSIZ
-#define DIRBLKSIZ DEV_BSIZE
-#undef MAXNAMLEN
-#define MAXNAMLEN 255
-#define APPLEUFS_DIRBLKSIZ 1024
-
-struct direct {
- u_int32_t d_ino; /* inode number of entry */
- u_int16_t d_reclen; /* length of this record */
- u_int8_t d_type; /* file type, see below */
- u_int8_t d_namlen; /* length of string in d_name */
- char d_name[MAXNAMLEN + 1];/* name with length <= MAXNAMLEN */
-};
-
-/*
- * File types
- */
-#define DT_UNKNOWN 0
-#define DT_FIFO 1
-#define DT_CHR 2
-#define DT_DIR 4
-#define DT_BLK 6
-#define DT_REG 8
-#define DT_LNK 10
-#define DT_SOCK 12
-#define DT_WHT 14
-
-/*
- * Convert between stat structure types and directory types.
- */
-#define IFTODT(mode) (((mode) & 0170000) >> 12)
-#define DTTOIF(dirtype) ((dirtype) << 12)
-
-/*
- * The DIRSIZ macro gives the minimum record length which will hold
- * the directory entry. This requires the amount of space in struct direct
- * without the d_name field, plus enough space for the name with a terminating
- * null byte (dp->d_namlen+1), rounded up to a 4 byte boundary.
- */
-#define DIRECTSIZ(namlen) \
- ((sizeof(struct direct) - (MAXNAMLEN+1)) + (((namlen)+1 + 3) &~ 3))
-
-#if (BYTE_ORDER == LITTLE_ENDIAN)
-#define DIRSIZ(oldfmt, dp, needswap) \
- (((oldfmt) && !(needswap)) ? \
- DIRECTSIZ((dp)->d_type) : DIRECTSIZ((dp)->d_namlen))
-#else
-#define DIRSIZ(oldfmt, dp, needswap) \
- (((oldfmt) && (needswap)) ? \
- DIRECTSIZ((dp)->d_type) : DIRECTSIZ((dp)->d_namlen))
-#endif
-
-#define OLDDIRFMT 1
-#define NEWDIRFMT 0
-
-/*
- * Template for manipulating directories. Should use struct direct's,
- * but the name field is MAXNAMLEN - 1, and this just won't do.
- */
-struct dirtemplate {
- u_int32_t dot_ino;
- int16_t dot_reclen;
- u_int8_t dot_type;
- u_int8_t dot_namlen;
- char dot_name[4]; /* must be multiple of 4 */
- u_int32_t dotdot_ino;
- int16_t dotdot_reclen;
- u_int8_t dotdot_type;
- u_int8_t dotdot_namlen;
- char dotdot_name[4]; /* ditto */
-};
-
-/*
- * This is the old format of directories, sanz type element.
- */
-struct odirtemplate {
- u_int32_t dot_ino;
- int16_t dot_reclen;
- u_int16_t dot_namlen;
- char dot_name[4]; /* must be multiple of 4 */
- u_int32_t dotdot_ino;
- int16_t dotdot_reclen;
- u_int16_t dotdot_namlen;
- char dotdot_name[4]; /* ditto */
-};
-#endif /* !_UFS_UFS_DIR_H_ */
diff --git a/drivers/filesystems/ffs/inc/disklabel.h
b/drivers/filesystems/ffs/inc/disklabel.h
deleted file mode 100644
index f7d7a376e86..00000000000
--- a/drivers/filesystems/ffs/inc/disklabel.h
+++ /dev/null
@@ -1,555 +0,0 @@
-/* $NetBSD: disklabel.h,v 1.88 2003/11/14 12:07:42 lukem Exp $ */
-
-/*
- * Copyright (c) 1987, 1988, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)disklabel.h 8.2 (Berkeley) 7/10/94
- */
-
-#ifndef _SYS_DISKLABEL_H_
-#define _SYS_DISKLABEL_H_
-
-#include "type.h"
-
-/*
- * We need <machine/types.h> for __HAVE_OLD_DISKLABEL
- */
-#if 0 /* XXX ffsdrv */
-#ifndef _LOCORE
-#include <sys/types.h>
-#endif
-#endif
-
-/* sys/arch/i386/include/type.h XXX ffsdrv */
-#define __HAVE_OLD_DISKLABEL
-
-/*
- * Each disk has a label which includes information about the hardware
- * disk geometry, filesystem partitions, and drive specific information.
- * The location of the label, as well as the number of partitions the
- * label can describe and the number of the "whole disk" (raw)
- * paritition are machine dependent.
- */
-#if 0 /* XXX ffsdrv */
-#include <machine/disklabel.h>
-#endif
-
-/* arch/i386/include/disklabel.h */
-#define LABELSECTOR 1 /* sector containing label */
-#define LABELOFFSET 0 /* offset of label in sector */
-#define MAXPARTITIONS 16 /* number of partitions */
-#define OLDMAXPARTITIONS 8 /* number of partitions before 1.6 */
-#define RAW_PART 3 /* raw partition: XX?d (XXX) */
-
-/*
- * We use the highest bit of the minor number for the partition number.
- * This maintains backward compatibility with device nodes created before
- * MAXPARTITIONS was increased.
- */
-#define __I386_MAXDISKS ((1 << 20) / MAXPARTITIONS)
-#define DISKUNIT(dev) ((minor(dev) / OLDMAXPARTITIONS) % __I386_MAXDISKS)
-#define DISKPART(dev) ((minor(dev) % OLDMAXPARTITIONS) + \
- ((minor(dev) / (__I386_MAXDISKS * OLDMAXPARTITIONS)) * OLDMAXPARTITIONS))
-#define DISKMINOR(unit, part) \
- (((unit) * OLDMAXPARTITIONS) + ((part) % OLDMAXPARTITIONS) + \
- ((part) / OLDMAXPARTITIONS) * (__I386_MAXDISKS * OLDMAXPARTITIONS))
-
-/* Pull in MBR partition definitions. */
-#include "bootblock.h"
-
-/* end of arch/i386/include/disklabel.h */
-
-
-/*
- * The absolute maximum number of disk partitions allowed.
- * This is the maximum value of MAXPARTITIONS for which 'struct disklabel'
- * is <= DEV_BSIZE bytes long. If MAXPARTITIONS is greater than this, beware.
- */
-#define MAXMAXPARTITIONS 22
-#if MAXPARTITIONS > MAXMAXPARTITIONS
-#warning beware: MAXPARTITIONS bigger than MAXMAXPARTITIONS
-#endif
-
-/*
- * Ports can switch their MAXPARTITIONS once, as follows:
- *
- * - define OLDMAXPARTITIONS in <machine/disklabel.h> as the old number
- * - define MAXPARTITIONS as the new number
- * - define DISKUNIT, DISKPART and DISKMINOR macros in <machine/disklabel.h>
- * as appropriate for the port (see the i386 one for an example).
- * - define __HAVE_OLD_DISKLABEL in <machine/types.h>
- */
-
-#if defined(_KERNEL) && defined(__HAVE_OLD_DISKLABEL) && \
- (MAXPARTITIONS < OLDMAXPARTITIONS)
-#error "can only grow disklabel size"
-#endif
-
-
-/*
- * Translate between device numbers and major/disk unit/disk partition.
- */
-#ifndef __HAVE_OLD_DISKLABEL
-#define DISKUNIT(dev) (minor(dev) / MAXPARTITIONS)
-#define DISKPART(dev) (minor(dev) % MAXPARTITIONS)
-#define DISKMINOR(unit, part) \
- (((unit) * MAXPARTITIONS) + (part))
-#endif
-#define MAKEDISKDEV(maj, unit, part) \
- (makedev((maj), DISKMINOR((unit), (part))))
-
-#define DISKMAGIC ((u_int32_t)0x82564557) /* The disk magic number */
-
-#ifndef _LOCORE
-struct disklabel {
- u_int32_t d_magic; /* the magic number */
- u_int16_t d_type; /* drive type */
- u_int16_t d_subtype; /* controller/d_type specific */
- char d_typename[16]; /* type name, e.g. "eagle" */
-
- /*
- * d_packname contains the pack identifier and is returned when
- * the disklabel is read off the disk or in-core copy.
- * d_boot0 and d_boot1 are the (optional) names of the
- * primary (block 0) and secondary (block 1-15) bootstraps
- * as found in /usr/mdec. These are returned when using
- * getdiskbyname(3) to retrieve the values from /etc/disktab.
- */
- union {
- char un_d_packname[16]; /* pack identifier */
- struct {
- char *un_d_boot0; /* primary bootstrap name */
- char *un_d_boot1; /* secondary bootstrap name */
- } un_b;
- } d_un;
-#define d_packname d_un.un_d_packname
-#define d_boot0 d_un.un_b.un_d_boot0
-#define d_boot1 d_un.un_b.un_d_boot1
-
- /* disk geometry: */
- u_int32_t d_secsize; /* # of bytes per sector */
- u_int32_t d_nsectors; /* # of data sectors per track */
- u_int32_t d_ntracks; /* # of tracks per cylinder */
- u_int32_t d_ncylinders; /* # of data cylinders per unit */
- u_int32_t d_secpercyl; /* # of data sectors per cylinder */
- u_int32_t d_secperunit; /* # of data sectors per unit */
-
- /*
- * Spares (bad sector replacements) below are not counted in
- * d_nsectors or d_secpercyl. Spare sectors are assumed to
- * be physical sectors which occupy space at the end of each
- * track and/or cylinder.
- */
- u_int16_t d_sparespertrack; /* # of spare sectors per track */
- u_int16_t d_sparespercyl; /* # of spare sectors per cylinder */
- /*
- * Alternative cylinders include maintenance, replacement,
- * configuration description areas, etc.
- */
- u_int32_t d_acylinders; /* # of alt. cylinders per unit */
-
- /* hardware characteristics: */
- /*
- * d_interleave, d_trackskew and d_cylskew describe perturbations
- * in the media format used to compensate for a slow controller.
- * Interleave is physical sector interleave, set up by the
- * formatter or controller when formatting. When interleaving is
- * in use, logically adjacent sectors are not physically
- * contiguous, but instead are separated by some number of
- * sectors. It is specified as the ratio of physical sectors
- * traversed per logical sector. Thus an interleave of 1:1
- * implies contiguous layout, while 2:1 implies that logical
- * sector 0 is separated by one sector from logical sector 1.
- * d_trackskew is the offset of sector 0 on track N relative to
- * sector 0 on track N-1 on the same cylinder. Finally, d_cylskew
- * is the offset of sector 0 on cylinder N relative to sector 0
- * on cylinder N-1.
- */
- u_int16_t d_rpm; /* rotational speed */
- u_int16_t d_interleave; /* hardware sector interleave */
- u_int16_t d_trackskew; /* sector 0 skew, per track */
- u_int16_t d_cylskew; /* sector 0 skew, per cylinder */
- u_int32_t d_headswitch; /* head switch time, usec */
- u_int32_t d_trkseek; /* track-to-track seek, usec */
- u_int32_t d_flags; /* generic flags */
-#define NDDATA 5
- u_int32_t d_drivedata[NDDATA]; /* drive-type specific information */
-#define NSPARE 5
- u_int32_t d_spare[NSPARE]; /* reserved for future use */
- u_int32_t d_magic2; /* the magic number (again) */
- u_int16_t d_checksum; /* xor of data incl. partitions */
-
- /* filesystem and partition information: */
- u_int16_t d_npartitions; /* number of partitions in following */
- u_int32_t d_bbsize; /* size of boot area at sn0, bytes */
- u_int32_t d_sbsize; /* max size of fs superblock, bytes */
- struct partition { /* the partition table */
- u_int32_t p_size; /* number of sectors in partition */
- u_int32_t p_offset; /* starting sector */
- union {
- u_int32_t fsize; /* FFS, ADOS:
- filesystem basic fragment size */
- u_int32_t cdsession; /* ISO9660: session offset */
- } __partition_u2;
-#define p_fsize __partition_u2.fsize
-#define p_cdsession __partition_u2.cdsession
- u_int8_t p_fstype; /* filesystem type, see below */
- u_int8_t p_frag; /* filesystem fragments per block */
- union {
- u_int16_t cpg; /* UFS: FS cylinders per group */
- u_int16_t sgs; /* LFS: FS segment shift */
- } __partition_u1;
-#define p_cpg __partition_u1.cpg
-#define p_sgs __partition_u1.sgs
- } d_partitions[MAXPARTITIONS]; /* actually may be more */
-};
-
-#ifdef __HAVE_OLD_DISKLABEL
-/*
- * Same as above, but with OLDMAXPARTITIONS partitions. For use in
- * the old DIOC* ioctl calls.
- */
-struct olddisklabel {
- u_int32_t d_magic;
- u_int16_t d_type;
- u_int16_t d_subtype;
- char d_typename[16];
- union {
- char un_d_packname[16];
- struct {
- char *un_d_boot0;
- char *un_d_boot1;
- } un_b;
- } d_un;
- u_int32_t d_secsize;
- u_int32_t d_nsectors;
- u_int32_t d_ntracks;
- u_int32_t d_ncylinders;
- u_int32_t d_secpercyl;
- u_int32_t d_secperunit;
- u_int16_t d_sparespertrack;
- u_int16_t d_sparespercyl;
- u_int32_t d_acylinders;
- u_int16_t d_rpm;
- u_int16_t d_interleave;
- u_int16_t d_trackskew;
- u_int16_t d_cylskew;
- u_int32_t d_headswitch;
- u_int32_t d_trkseek;
- u_int32_t d_flags;
- u_int32_t d_drivedata[NDDATA];
- u_int32_t d_spare[NSPARE];
- u_int32_t d_magic2;
- u_int16_t d_checksum;
- u_int16_t d_npartitions;
- u_int32_t d_bbsize;
- u_int32_t d_sbsize;
- struct opartition {
- u_int32_t p_size;
- u_int32_t p_offset;
- union {
- u_int32_t fsize;
- u_int32_t cdsession;
- } __partition_u2;
- u_int8_t p_fstype;
- u_int8_t p_frag;
- union {
- u_int16_t cpg;
- u_int16_t sgs;
- } __partition_u1;
- } d_partitions[OLDMAXPARTITIONS];
-};
-#endif /* __HAVE_OLD_DISKLABEL */
-#else /* _LOCORE */
- /*
- * offsets for asm boot files.
- */
- .set d_secsize,40
- .set d_nsectors,44
- .set d_ntracks,48
- .set d_ncylinders,52
- .set d_secpercyl,56
- .set d_secperunit,60
- .set d_end_,276 /* size of disk label */
-#endif /* _LOCORE */
-
-/* d_type values: */
-#define DTYPE_SMD 1 /* SMD, XSMD; VAX hp/up */
-#define DTYPE_MSCP 2 /* MSCP */
-#define DTYPE_DEC 3 /* other DEC (rk, rl) */
-#define DTYPE_SCSI 4 /* SCSI */
-#define DTYPE_ESDI 5 /* ESDI interface */
-#define DTYPE_ST506 6 /* ST506 etc. */
-#define DTYPE_HPIB 7 /* CS/80 on HP-IB */
-#define DTYPE_HPFL 8 /* HP Fiber-link */
-#define DTYPE_FLOPPY 10 /* floppy */
-#define DTYPE_CCD 11 /* concatenated disk device */
-#define DTYPE_VND 12 /* vnode pseudo-disk */
-#define DTYPE_ATAPI 13 /* ATAPI */
-#define DTYPE_RAID 14 /* RAIDframe */
-#define DTYPE_LD 15 /* logical disk */
-#define DTYPE_JFS2 16 /* IBM JFS2 */
-#define DTYPE_CGD 17 /* cryptographic pseudo-disk */
-#define DTYPE_VINUM 18 /* vinum volume */
-
-#ifdef DKTYPENAMES
-static const char *const dktypenames[] = {
- "unknown",
- "SMD",
- "MSCP",
- "old DEC",
- "SCSI",
- "ESDI",
- "ST506",
- "HP-IB",
- "HP-FL",
- "type 9",
- "floppy",
- "ccd",
- "vnd",
- "ATAPI",
- "RAID",
- "ld",
- "jfs",
- "cgd",
- "vinum",
- NULL
-};
-#define DKMAXTYPES (sizeof(dktypenames) / sizeof(dktypenames[0]) - 1)
-#endif
-
-/*
- * Filesystem type and version.
- * Used to interpret other filesystem-specific
- * per-partition information.
- *
- * These are used only for COMPAT_09 support.
- */
-#define FS_UNUSED 0 /* unused */
-#define FS_SWAP 1 /* swap */
-#define FS_V6 2 /* Sixth Edition */
-#define FS_V7 3 /* Seventh Edition */
-#define FS_SYSV 4 /* System V */
-#define FS_V71K 5 /* V7 with 1K blocks (4.1, 2.9) */
-#define FS_V8 6 /* Eighth Edition, 4K blocks */
-#define FS_BSDFFS 7 /* 4.2BSD fast file system */
-#define FS_MSDOS 8 /* MSDOS file system */
-#define FS_BSDLFS 9 /* 4.4BSD log-structured file system */
-#define FS_OTHER 10 /* in use, but unknown/unsupported */
-#define FS_HPFS 11 /* OS/2 high-performance file system */
-#define FS_ISO9660 12 /* ISO 9660, normally CD-ROM */
-#define FS_BOOT 13 /* partition contains bootstrap */
-#define FS_ADOS 14 /* AmigaDOS fast file system */
-#define FS_HFS 15 /* Macintosh HFS */
-#define FS_FILECORE 16 /* Acorn Filecore Filing System */
-#define FS_EX2FS 17 /* Linux Extended 2 file system */
-#define FS_NTFS 18 /* Windows/NT file system */
-#define FS_RAID 19 /* RAIDframe component */
-#define FS_CCD 20 /* concatenated disk component */
-#define FS_JFS2 21 /* IBM JFS2 */
-#define FS_APPLEUFS 22 /* Apple UFS */
-/* XXX this is not the same as FreeBSD. How to solve? */
-#define FS_VINUM 23 /* Vinum */
-
-/* Adjust the FSMAXTYPES def below if you add something after APPLEUFS */
-
-#ifdef FSTYPENAMES
-static const char *const fstypenames[] = {
- "unused",
- "swap",
- "Version 6",
- "Version 7",
- "System V",
- "4.1BSD",
- "Eighth Edition",
- "4.2BSD",
- "MSDOS",
- "4.4LFS",
- "unknown",
- "HPFS",
- "ISO9660",
- "boot",
- "ADOS",
- "HFS",
- "FILECORE",
- "Linux Ext2",
- "NTFS",
- "RAID",
- "ccd",
- "jfs",
- "Apple UFS",
- "vinum",
- NULL
-};
-#define FSMAXTYPES (sizeof(fstypenames) / sizeof(fstypenames[0]) - 1)
-#else
-#define FSMAXTYPES (FS_VINUM + 1)
-#endif
-
-#ifdef FSCKNAMES
-/* These are the names MOUNT_XXX from <sys/mount.h> */
-static const char *const fscknames[] = {
- NULL, /* unused */
- NULL, /* swap */
- NULL, /* Version 6 */
- NULL, /* Version 7 */
- NULL, /* System V */
- NULL, /* 4.1BSD */
- NULL, /* Eighth edition */
- "ffs", /* 4.2BSD */
- "msdos", /* MSDOS */
- "lfs", /* 4.4LFS */
- NULL, /* unknown */
- NULL, /* HPFS */
- NULL, /* ISO9660 */
- NULL, /* boot */
- NULL, /* ADOS */
- NULL, /* HFS */
- NULL, /* FILECORE */
- "ext2fs", /* Linux Ext2 */
- NULL, /* Windows/NT */
- NULL, /* RAID Component */
- NULL, /* concatenated disk component */
- NULL, /* IBM JFS2 */
- "ffs", /* Apple UFS */
- NULL /* NULL */
-};
-#define FSMAXNAMES (sizeof(fscknames) / sizeof(fscknames[0]) - 1)
-
-#endif
-
-#ifdef MOUNTNAMES
-/* These are the names MOUNT_XXX from <sys/mount.h> */
-static const char *const mountnames[] = {
- NULL, /* unused */
- NULL, /* swap */
- NULL, /* Version 6 */
- NULL, /* Version 7 */
- NULL, /* System V */
- NULL, /* 4.1BSD */
- NULL, /* Eighth edition */
- "ffs", /* 4.2BSD */
- "msdos", /* MSDOS */
- "lfs", /* 4.4LFS */
- NULL, /* unknown */
- NULL, /* HPFS */
- "cd9660", /* ISO9660 */
- NULL, /* boot */
- "ados", /* ADOS */
- NULL, /* HFS */
- "filecore", /* FILECORE */
- "ext2fs", /* Linux Ext2 */
- "ntfs", /* Windows/NT */
- NULL, /* RAID Component */
- NULL, /* concatenated disk component */
- NULL, /* IBM JFS2 */
- "ffs", /* Apple UFS */
- NULL /* NULL */
-};
-#define FSMAXMOUNTNAMES (sizeof(mountnames) / sizeof(mountnames[0]) - 1)
-
-#endif
-
-/*
- * flags shared by various drives:
- */
-#define D_REMOVABLE 0x01 /* removable media */
-#define D_ECC 0x02 /* supports ECC */
-#define D_BADSECT 0x04 /* supports bad sector forw. */
-#define D_RAMDISK 0x08 /* disk emulator */
-#define D_CHAIN 0x10 /* can do back-back transfers */
-
-/*
- * Drive data for SMD.
- */
-#define d_smdflags d_drivedata[0]
-#define D_SSE 0x1 /* supports skip sectoring */
-#define d_mindist d_drivedata[1]
-#define d_maxdist d_drivedata[2]
-#define d_sdist d_drivedata[3]
-
-/*
- * Drive data for ST506.
- */
-#define d_precompcyl d_drivedata[0]
-#define d_gap3 d_drivedata[1] /* used only when formatting */
-
-/*
- * Drive data for SCSI.
- */
-#define d_blind d_drivedata[0]
-
-#ifndef _LOCORE
-/*
- * Structure used to perform a format or other raw operation,
- * returning data and/or register values. Register identification
- * and format are device- and driver-dependent. Currently unused.
- */
-struct format_op {
- char *df_buf;
- int df_count; /* value-result */
- daddr_t df_startblk;
- int df_reg[8]; /* result */
-};
-
-/*
- * Structure used internally to retrieve information about a partition
- * on a disk.
- */
-struct partinfo {
- struct disklabel *disklab;
- struct partition *part;
-};
-
-#ifdef _KERNEL
-
-struct disk;
-
-void diskerr __P((const struct buf *, const char *, const char *, int,
- int, const struct disklabel *));
-u_int dkcksum __P((struct disklabel *));
-int setdisklabel __P((struct disklabel *, struct disklabel *, u_long,
- struct cpu_disklabel *));
-const char *readdisklabel __P((dev_t, void (*)(struct buf *),
- struct disklabel *, struct cpu_disklabel *));
-int writedisklabel __P((dev_t, void (*)(struct buf *), struct disklabel *,
- struct cpu_disklabel *));
-int bounds_check_with_label __P((struct disk *, struct buf *, int));
-int bounds_check_with_mediasize __P((struct buf *, int, u_int64_t));
-#endif
-#endif /* _LOCORE */
-
-#if !defined(_KERNEL) && !defined(_LOCORE)
-
-#if 0 /* XXX ffsdrv */
-#include <sys/cdefs.h>
-#endif
-
-#endif
-
-#endif /* !_SYS_DISKLABEL_H_ */
diff --git a/drivers/filesystems/ffs/inc/ffsdrv.h b/drivers/filesystems/ffs/inc/ffsdrv.h
deleted file mode 100644
index c30f8566e8b..00000000000
--- a/drivers/filesystems/ffs/inc/ffsdrv.h
+++ /dev/null
@@ -1,2178 +0,0 @@
-/*
- * FFS File System Driver for Windows
- *
- * ffsdrv.h
- *
- * 2004.5.6 ~
- *
- * Lee Jae-Hong,
http://www.pyrasis.com
- *
- */
-
-#ifndef _FFS_HEADER_
-#define _FFS_HEADER_
-
-/* include files */
-#ifdef __REACTOS__
-#include <ntifs.h>
-#include <ntddk.h>
-#include <ntdddisk.h>
-#include <pseh/pseh2.h>
-#endif
-#include "fs.h"
-#include "dinode.h"
-#include "dir.h"
-#include "disklabel.h"
-#ifndef __REACTOS__
-#include <ntdddisk.h>
-#endif
-
-#ifndef _PREFAST_
-#ifdef _MSC_VER
-#pragma warning(disable:4068)
-#endif
-#define __drv_mustHoldCriticalRegion
-#endif // !_PREFAST_
-
-#pragma pack(1)
-
-/* debug */
-#if DBG
- #define FFSBreakPoint() /*__asm int 3*/ //DbgBreakPoint()
-#else
- #define FFSBreakPoint()
-#endif
-
-/* Structs & Consts */
-
-#define FFSDRV_VERSION "0.5.2"
-
-/*
- * ffsdrv build options
- */
-
-/* To build read-only driver */
-
-#define FFS_READ_ONLY TRUE
-
-
-/* To support driver dynamics unload */
-
-#define FFS_UNLOAD TRUE
-
-/*
- * Constants
- */
-
-#define FFS_BLOCK_TYPES (0x04)
-
-#define MAXIMUM_RECORD_LENGTH (0x10000)
-
-#define SECTOR_BITS (Vcb->SectorBits)
-#define SECTOR_SIZE (Vcb->DiskGeometry.BytesPerSector)
-#define DEFAULT_SECTOR_SIZE (0x200)
-
-#define SUPER_BLOCK_OFFSET (0x2000)
-#define SUPER_BLOCK_SIZE SBLOCKSIZE
-
-#define READ_AHEAD_GRANULARITY (0x10000)
-
-#define SUPER_BLOCK (Vcb->ffs_super_block)
-#define FS_VERSION (Vcb->FSVersion)
-
-#define BLOCK_SIZE (Vcb->BlockSize)
-#define BLOCK_BITS FFSLog2(Vcb->BlockSize)
-
-#define INODES_COUNT (Vcb->ffs_super_block->s_inodes_count)
-
-#define INODES_PER_GROUP (SUPER_BLOCK->fs_ipg)
-#define BLOCKS_PER_GROUP (SUPER_BLOCK->fs_fpg)
-#define TOTAL_BLOCKS (SUPER_BLOCK->fs_size)
-
-
-
-/* File System Releated */
-
-#define DRIVER_NAME "FFS"
-#ifndef __REACTOS__
-#define DEVICE_NAME L"\\FileSystem\\FFS"
-#else
-#define DEVICE_NAME L"\\FFS"
-#endif
-
-/* Registry */
-
-#define PARAMETERS_KEY L"\\Parameters"
-
-#define WRITING_SUPPORT L"WritingSupport"
-#define CHECKING_BITMAP L"CheckingBitmap"
-#define PARTITION_NUMBER L"PartitionNumber"
-
-/* To support select BSD partition and ffsdrv unload routine */
-#define DOS_DEVICE_NAME L"\\DosDevices\\ffs"
-
-/*
- * Private IOCTL to make the driver ready to unload
- */
-#if FFS_UNLOAD
-#define IOCTL_PREPARE_TO_UNLOAD \
-CTL_CODE(FILE_DEVICE_UNKNOWN, 2048, METHOD_NEITHER, FILE_WRITE_ACCESS)
-#endif // FFS_UNLOAD
-
-/*
- * Private IOCTL to select BSD partition.
- */
-#define IOCTL_SELECT_BSD_PARTITION \
-CTL_CODE(FILE_DEVICE_UNKNOWN, 2049, METHOD_BUFFERED, FILE_WRITE_ACCESS)
-
-
-#ifndef SetFlag
-#define SetFlag(x,f) ((x) |= (f))
-#endif
-
-#ifndef ClearFlag
-#define ClearFlag(x,f) ((x) &= ~(f))
-#endif
-
-#define IsFlagOn(a,b) ((BOOLEAN)(FlagOn(a,b) == b))
-
-#define FFSRaiseStatus(IRPCONTEXT,STATUS) { \
- (IRPCONTEXT)->ExceptionCode = (STATUS); \
- ExRaiseStatus( (STATUS) ); \
-}
-
-#define FFSNormalizeAndRaiseStatus(IRPCONTEXT,STATUS) { \
- /* (IRPCONTEXT)->ExceptionStatus = (STATUS); */ \
- if ((STATUS) == STATUS_VERIFY_REQUIRED) { ExRaiseStatus((STATUS)); } \
- ExRaiseStatus(FsRtlNormalizeNtstatus((STATUS),STATUS_UNEXPECTED_IO_ERROR)); \
-}
-
-/*
- * Define IsEndofFile for read and write operations
- */
-
-#define FILE_WRITE_TO_END_OF_FILE 0xffffffff
-#define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
-
-#define IsEndOfFile(Pos) ((Pos.LowPart == FILE_WRITE_TO_END_OF_FILE) && \
- (Pos.HighPart == FILE_USE_FILE_POINTER_POSITION ))
-
-#define IsDirectory(Fcb) IsFlagOn(Fcb->FFSMcb->FileAttr, FILE_ATTRIBUTE_DIRECTORY)
-
-/*
- * Bug Check Codes Definitions
- */
-
-#define FFS_FILE_SYSTEM (FILE_SYSTEM)
-
-#define FFS_BUGCHK_BLOCK (0x00010000)
-#define FFS_BUGCHK_CLEANUP (0x00020000)
-#define FFS_BUGCHK_CLOSE (0x00030000)
-#define FFS_BUGCHK_CMCB (0x00040000)
-#define FFS_BUGCHK_CREATE (0x00050000)
-#define FFS_BUGCHK_DEBUG (0x00060000)
-#define FFS_BUGCHK_DEVCTL (0x00070000)
-#define FFS_BUGCHK_DIRCTL (0x00080000)
-#define FFS_BUGCHK_DISPATCH (0x00090000)
-#define FFS_BUGCHK_EXCEPT (0x000A0000)
-#define FFS_BUGCHK_FFS (0x000B0000)
-#define FFS_BUGCHK_FASTIO (0x000C0000)
-#define FFS_BUGCHK_FILEINFO (0x000D0000)
-#define FFS_BUGCHK_FLUSH (0x000E0000)
-#define FFS_BUGCHK_FSCTL (0x000F0000)
-#define FFS_BUGCHK_INIT (0x00100000)
-#define FFS_BUGCHK_LOCK (0x0011000)
-#define FFS_BUGCHK_MEMORY (0x0012000)
-#define FFS_BUGCHK_MISC (0x0013000)
-#define FFS_BUGCHK_READ (0x00140000)
-#define FFS_BUGCHK_SHUTDOWN (0x00150000)
-#define FFS_BUGCHK_VOLINFO (0x00160000)
-#define FFS_BUGCHK_WRITE (0x00170000)
-
-#define FFS_BUGCHK_LAST (0x00170000)
-
-#define FFSBugCheck(A,B,C,D) { KeBugCheckEx(FFS_FILE_SYSTEM, A | __LINE__, B, C, D ); }
-
-
-/* FFS file system definions */
-
-/*
- * Structure of a directory entry
- */
-#define FFS_NAME_LEN 255
-
-#define FFS_ROOT_INO 2 /* Root inode */
-
-
-/*
- * FFS_DIR_PAD defines the directory entries boundaries
- *
- * NOTE: It must be a multiple of 4
- */
-#define FFS_DIR_PAD 4
-#define FFS_DIR_ROUND (FFS_DIR_PAD - 1)
-#define FFS_DIR_REC_LEN(name_len) (((name_len) + 8 + FFS_DIR_ROUND) & \
- ~FFS_DIR_ROUND)
-
-
-/* sys/sys/stat.h */
-
-#define S_ISDIR(m) ((m & _S_IFMT) == _S_IFDIR) /* directory */
-#define S_ISCHR(m) ((m & _S_IFMT) == _S_IFCHR) /* char special */
-#define S_ISBLK(m) ((m & _S_IFMT) == _S_IFBLK) /* block special */
-#define S_ISREG(m) ((m & _S_IFMT) == _S_IFREG) /* regular file */
-#define S_ISFIFO(m) ((m & _S_IFMT) == _S_IFIFO) /* fifo */
-#define S_ISLNK(m) ((m & _S_IFMT) == _S_IFLNK) /* symbolic link */
-#define S_ISSOCK(m) ((m & _S_IFMT) == _S_IFSOCK) /* socket */
-#define S_ISWHT(m) ((m & _S_IFMT) == _S_IFWHT) /* whiteout */
-
-
-#define S_IPERMISSION_MASK 0x1FF /* */
-
-#define S_IRWXU 0000700 /* RWX mask for owner */
-#define S_IRUSR 0000400 /* R for owner */
-#define S_IWUSR 0000200 /* W for owner */
-#define S_IXUSR 0000100 /* X for owner */
-
-#define S_IRWXG 0000070 /* RWX mask for group */
-#define S_IRGRP 0000040 /* R for group */
-#define S_IWGRP 0000020 /* W for group */
-#define S_IXGRP 0000010 /* X for group */
-
-#define S_IRWXO 0000007 /* RWX mask for other */
-#define S_IROTH 0000004 /* R for other */
-#define S_IWOTH 0000002 /* W for other */
-#define S_IXOTH 0000001 /* X for other */
-
-#define S_ISREADABLE(m) (((m) & S_IPERMISSION_MASK) == (S_IRUSR | S_IRGRP |
S_IROTH))
-#define S_ISWRITABLE(m) (((m) & S_IPERMISSION_MASK) == (S_IWUSR | S_IWGRP |
S_IWOTH))
-
-#define FFSSetReadable(m) (m) = ((m) | (S_IRUSR | S_IRGRP | S_IROTH))
-#define FFSSetWritable(m) (m) = ((m) | (S_IWUSR | S_IWGRP | S_IWOTH))
-
-#define FFSSetReadOnly(m) (m) = ((m) & (~(S_IWUSR | S_IWGRP | S_IWOTH)))
-#define FFSIsReadOnly(m) (!((m) & (S_IWUSR | S_IWGRP | S_IWOTH)))
-
-#define FFS_FIRST_DATA_BLOCK (Vcb->ffs_super_block->fs_dblkno)
-
-typedef struct fs FFS_SUPER_BLOCK, *PFFS_SUPER_BLOCK;
-
-typedef struct disklabel DISKLABEL, *PDISKLABEL;
-
-typedef struct ufs1_dinode FFSv1_INODE, *PFFSv1_INODE;
-typedef struct ufs2_dinode FFSv2_INODE, *PFFSv2_INODE;
-
-typedef struct direct FFS_DIR_ENTRY, *PFFS_DIR_ENTRY;
-
-
-/*
- * ffsdrv Driver Definitions
- */
-
-/*
- * FFS_IDENTIFIER_TYPE
- *
- * Identifiers used to mark the structures
- */
-
-typedef enum _FFS_IDENTIFIER_TYPE {
- FFSFGD = ':DGF',
- FFSVCB = ':BCV',
- FFSFCB = ':BCF',
- FFSCCB = ':BCC',
- FFSICX = ':XCI',
- FFSDRV = ':VRD',
- FFSMCB = ':BCM'
-} FFS_IDENTIFIER_TYPE;
-
-/*
- * FFS_IDENTIFIER
- *
- * Header used to mark the structures
- */
-typedef struct _FFS_IDENTIFIER {
- FFS_IDENTIFIER_TYPE Type;
- ULONG Size;
-} FFS_IDENTIFIER, *PFFS_IDENTIFIER;
-
-
-#define NodeType(Ptr) (*((FFS_IDENTIFIER_TYPE *)(Ptr)))
-
-typedef struct _FFS_MCB FFS_MCB, *PFFS_MCB;
-
-
-typedef PVOID PBCB;
-
-/*
- * REPINNED_BCBS List
- */
-
-#define FFS_REPINNED_BCBS_ARRAY_SIZE (8)
-
-typedef struct _FFS_REPINNED_BCBS {
-
- //
- // A pointer to the next structure contains additional repinned bcbs
- //
-
- struct _FFS_REPINNED_BCBS *Next;
-
- //
- // A fixed size array of pinned bcbs. Whenever a new bcb is added to
- // the repinned bcb structure it is added to this array. If the
- // array is already full then another repinned bcb structure is allocated
- // and pointed to with Next.
- //
-
- PBCB Bcb[ FFS_REPINNED_BCBS_ARRAY_SIZE ];
-
-} FFS_REPINNED_BCBS, *PFFS_REPINNED_BCBS;
-
-
-/*
- * FFS_BSD_PARTITION
- */
-typedef struct _FFS_BSD_PARTITION
-{
- ULONG Number;
-} FFS_BSD_PARTITION, *PFFS_BSD_PARTITION;
-
-
-/*
- * FFS_GLOBAL_DATA
- *
- * Data that is not specific to a mounted volume
- */
-typedef struct _FFS_GLOBAL {
-
- // Identifier for this structure
- FFS_IDENTIFIER Identifier;
-
- // Syncronization primitive for this structure
- ERESOURCE Resource;
-
- // Syncronization primitive for Counting
- ERESOURCE CountResource;
-
- // Syncronization primitive for LookAside Lists
- ERESOURCE LAResource;
-
- // Table of pointers to the fast I/O entry points
- FAST_IO_DISPATCH FastIoDispatch;
-
- // Table of pointers to the Cache Manager callbacks
- CACHE_MANAGER_CALLBACKS CacheManagerCallbacks;
- CACHE_MANAGER_CALLBACKS CacheManagerNoOpCallbacks;
-
- // Pointer to the driver object
- PDRIVER_OBJECT DriverObject;
-
- // Pointer to the main device object
- PDEVICE_OBJECT DeviceObject;
-
- // List of mounted volumes
- LIST_ENTRY VcbList;
-
- // Look Aside table of IRP_CONTEXT, FCB, MCB, CCB
- USHORT MaxDepth;
- NPAGED_LOOKASIDE_LIST FFSIrpContextLookasideList;
- NPAGED_LOOKASIDE_LIST FFSFcbLookasideList;
- NPAGED_LOOKASIDE_LIST FFSCcbLookasideList;
- PAGED_LOOKASIDE_LIST FFSMcbLookasideList;
-
- // Mcb Count ...
- USHORT McbAllocated;
-
-#if DBG
- // Fcb Count
- USHORT FcbAllocated;
-
- // IRP_MJ_CLOSE : FCB
- USHORT IRPCloseCount;
-#endif
-
- // Global flags for the driver
- ULONG Flags;
-
- ULONG PartitionNumber;
-
-} FFS_GLOBAL, *PFFS_GLOBAL;
-
-/*
- * Flags for FFS_GLOBAL_DATA
- */
-#define FFS_UNLOAD_PENDING 0x00000001
-#define FFS_SUPPORT_WRITING 0x00000002
-#define FFS_CHECKING_BITMAP 0x00000008
-
-/*
- * Driver Extension define
- */
-typedef struct {
- FFS_GLOBAL FFSGlobal;
-} FFS_EXT, *PFFS_EXT;
-
-
-typedef struct _FFS_FCBVCB {
-
- // FCB header required by NT
- FSRTL_COMMON_FCB_HEADER CommonFCBHeader;
- SECTION_OBJECT_POINTERS SectionObject;
- ERESOURCE MainResource;
- ERESOURCE PagingIoResource;
- // end FCB header required by NT
-
- // Identifier for this structure
- FFS_IDENTIFIER Identifier;
-} FFS_FCBVCB, *PFFS_FCBVCB;
-
-/*
- * FFS_VCB Volume Control Block
- *
- * Data that represents a mounted logical volume
- * It is allocated as the device extension of the volume device object
- */
-typedef struct _FFS_VCB {
-
- // FCB header required by NT
- // The VCB is also used as an FCB for file objects
- // that represents the volume itself
- FSRTL_COMMON_FCB_HEADER Header;
- SECTION_OBJECT_POINTERS SectionObject;
- ERESOURCE MainResource;
- ERESOURCE PagingIoResource;
- // end FCB header required by NT
-
- // Identifier for this structure
- FFS_IDENTIFIER Identifier;
-
- LIST_ENTRY Next;
-
- // Share Access for the file object
- SHARE_ACCESS ShareAccess;
-
- // Incremented on IRP_MJ_CREATE, decremented on IRP_MJ_CLEANUP
- // for files on this volume.
- ULONG OpenFileHandleCount;
-
- // Incremented on IRP_MJ_CREATE, decremented on IRP_MJ_CLOSE
- // for both files on this volume and open instances of the
- // volume itself.
- ULONG ReferenceCount;
- ULONG OpenHandleCount;
-
- //
- // Disk change count
- //
-
- ULONG ChangeCount;
-
- // Pointer to the VPB in the target device object
- PVPB Vpb;
-
- // The FileObject of Volume used to lock the volume
- PFILE_OBJECT LockFile;
-
- // List of FCBs for open files on this volume
- LIST_ENTRY FcbList;
-
- // List of IRPs pending on directory change notify requests
- LIST_ENTRY NotifyList;
-
- // Pointer to syncronization primitive for this list
- PNOTIFY_SYNC NotifySync;
-
- // This volumes device object
- PDEVICE_OBJECT DeviceObject;
-
- // The physical device object (the disk)
- PDEVICE_OBJECT TargetDeviceObject;
-
- // The physical device object (the disk)
- PDEVICE_OBJECT RealDevice;
-
- // Information about the physical device object
- DISK_GEOMETRY DiskGeometry;
- PARTITION_INFORMATION PartitionInformation;
-
- // File System Super Block
- PFFS_SUPER_BLOCK ffs_super_block;
-
- // File System version
- ULONG FSVersion;
-
- // Number of Group Decsciptions
- ULONG ffs_groups;
- /*
- // Bitmap Block per group
- PRTL_BITMAP BlockBitMaps;
- PRTL_BITMAP InodeBitMaps;
- */
- // Block / Cluster size
- ULONG BlockSize;
-
- // Sector size in bits
- ULONG SectorBits;
-
- ULONG dwData[FFS_BLOCK_TYPES];
- ULONG dwMeta[FFS_BLOCK_TYPES];
-
- // Flags for the volume
- ULONG Flags;
-
- // Streaming File Object
- PFILE_OBJECT StreamObj;
-
- // Resource Lock for Mcb
- ERESOURCE McbResource;
-
- // Dirty Mcbs of modifications for volume stream
- LARGE_MCB DirtyMcbs;
-
- // Entry of Mcb Tree (Root Node)
- PFFS_MCB McbTree;
- LIST_ENTRY McbList;
-
- ULONGLONG FSOffset[MAXPARTITIONS];
-
- ULONG RootPartition;
-
- ULONG PartitionNumber;
-
-} FFS_VCB, *PFFS_VCB;
-
-/*
- * Flags for FFS_VCB
- */
-#define VCB_INITIALIZED 0x00000001
-#define VCB_VOLUME_LOCKED 0x00000002
-#define VCB_MOUNTED 0x00000004
-#define VCB_DISMOUNT_PENDING 0x00000008
-#define VCB_READ_ONLY 0x00000010
-
-#define VCB_WRITE_PROTECTED 0x10000000
-#define VCB_FLOPPY_DISK 0x20000000
-#define VCB_REMOVAL_PREVENTED 0x40000000
-#define VCB_REMOVABLE_MEDIA 0x80000000
-
-
-#define IsMounted(Vcb) (IsFlagOn(Vcb->Flags, VCB_MOUNTED))
-
-
-/*
- * FFS_FCB File Control Block
- *
- * Data that represents an open file
- * There is a single instance of the FCB for every open file
- */
-typedef struct _FFS_FCB {
-
- // FCB header required by NT
- FSRTL_COMMON_FCB_HEADER Header;
- SECTION_OBJECT_POINTERS SectionObject;
- ERESOURCE MainResource;
- ERESOURCE PagingIoResource;
- // end FCB header required by NT
-
- // Identifier for this structure
- FFS_IDENTIFIER Identifier;
-
- // List of FCBs for this volume
- LIST_ENTRY Next;
-
- // Share Access for the file object
- SHARE_ACCESS ShareAccess;
-
- // List of byte-range locks for this file
- FILE_LOCK FileLockAnchor;
-
- // Incremented on IRP_MJ_CREATE, decremented on IRP_MJ_CLEANUP
- ULONG OpenHandleCount;
-
- // Incremented on IRP_MJ_CREATE, decremented on IRP_MJ_CLOSE
- ULONG ReferenceCount;
-
- // Incremented on IRP_MJ_CREATE, decremented on IRP_MJ_CLEANUP
- // But only for Files with FO_NO_INTERMEDIATE_BUFFERING flag
- ULONG NonCachedOpenCount;
-
- // Flags for the FCB
- ULONG Flags;
-
- // Pointer to the inode
- PFFSv1_INODE dinode1;
- PFFSv2_INODE dinode2;
-
- // Hint block for next allocation
- ULONG BlkHint;
-
- // Vcb
-
- PFFS_VCB Vcb;
-
- // Mcb Node ...
- PFFS_MCB FFSMcb;
-
- // Full Path Name
- UNICODE_STRING LongName;
-
-#if DBG
- // The Ansi Filename for debugging
- OEM_STRING AnsiFileName;
-#endif
-
-
-} FFS_FCB, *PFFS_FCB;
-
-
-//
-// Flags for FFS_FCB
-//
-#define FCB_FROM_POOL 0x00000001
-#define FCB_PAGE_FILE 0x00000002
-#define FCB_DELETE_ON_CLOSE 0x00000004
-#define FCB_DELETE_PENDING 0x00000008
-#define FCB_FILE_DELETED 0x00000010
-#define FCB_FILE_MODIFIED 0x00000020
-
-// Mcb Node
-
-struct _FFS_MCB {
-
- // Identifier for this structure
- FFS_IDENTIFIER Identifier;
-
- // Flags
- ULONG Flags;
-
- // Link List Info
-
- PFFS_MCB Parent; // Parent
- PFFS_MCB Child; // Children
- PFFS_MCB Next; // Brothers
-
- // Mcb Node Info
-
- // -> Fcb
- PFFS_FCB FFSFcb;
-
- // Short name
- UNICODE_STRING ShortName;
-
- // Inode number
- ULONG Inode;
-
- // Dir entry offset in parent
- ULONG DeOffset;
-
- // File attribute
- ULONG FileAttr;
-
- // List Link to Vcb->McbList
- LIST_ENTRY Link;
-};
-
-/*
- * Flags for MCB
- */
-#define MCB_FROM_POOL 0x00000001
-#define MCB_IN_TREE 0x00000002
-#define MCB_IN_USE 0x00000004
-
-#define IsMcbUsed(Mcb) IsFlagOn(Mcb->Flags, MCB_IN_USE)
-
-
-/*
- * FFS_CCB Context Control Block
- *
- * Data that represents one instance of an open file
- * There is one instance of the CCB for every instance of an open file
- */
-typedef struct _FFS_CCB {
-
- // Identifier for this structure
- FFS_IDENTIFIER Identifier;
-
- // Flags
- ULONG Flags;
-
- // State that may need to be maintained
- ULONG CurrentByteOffset;
- UNICODE_STRING DirectorySearchPattern;
-
-} FFS_CCB, *PFFS_CCB;
-
-/*
- * Flags for CCB
- */
-
-#define CCB_FROM_POOL 0x00000001
-
-#define CCB_ALLOW_EXTENDED_DASD_IO 0x80000000
-
-
-/*
- * FFS_IRP_CONTEXT
- *
- * Used to pass information about a request between the drivers functions
- */
-typedef struct _FFS_IRP_CONTEXT {
-
- // Identifier for this structure
- FFS_IDENTIFIER Identifier;
-
- // Pointer to the IRP this request describes
- PIRP Irp;
-
- // Flags
- ULONG Flags;
-
- // The major and minor function code for the request
- UCHAR MajorFunction;
- UCHAR MinorFunction;
-
- // The device object
- PDEVICE_OBJECT DeviceObject;
-
- // The real device object
- PDEVICE_OBJECT RealDevice;
-
- // The file object
- PFILE_OBJECT FileObject;
-
- PFFS_FCB Fcb;
- PFFS_CCB Ccb;
-
- // If the request is synchronous (we are allowed to block)
- BOOLEAN IsSynchronous;
-
- // If the request is top level
- BOOLEAN IsTopLevel;
-
- // Used if the request needs to be queued for later processing
- WORK_QUEUE_ITEM WorkQueueItem;
-
- // If an exception is currently in progress
- BOOLEAN ExceptionInProgress;
-
- // The exception code when an exception is in progress
- NTSTATUS ExceptionCode;
-
- // Repinned BCBs List
- FFS_REPINNED_BCBS Repinned;
-
-} FFS_IRP_CONTEXT, *PFFS_IRP_CONTEXT;
-
-
-#define IRP_CONTEXT_FLAG_FROM_POOL (0x00000001)
-#define IRP_CONTEXT_FLAG_WAIT (0x00000002)
-#define IRP_CONTEXT_FLAG_WRITE_THROUGH (0x00000004)
-#define IRP_CONTEXT_FLAG_FLOPPY (0x00000008)
-#define IRP_CONTEXT_FLAG_RECURSIVE_CALL (0x00000010)
-#define IRP_CONTEXT_FLAG_DISABLE_POPUPS (0x00000020)
-#define IRP_CONTEXT_FLAG_DEFERRED (0x00000040)
-#define IRP_CONTEXT_FLAG_VERIFY_READ (0x00000080)
-#define IRP_CONTEXT_STACK_IO_CONTEXT (0x00000100)
-#define IRP_CONTEXT_FLAG_REQUEUED (0x00000200)
-#define IRP_CONTEXT_FLAG_USER_IO (0x00000400)
-#define IRP_CONTEXT_FLAG_DELAY_CLOSE (0x00000800)
-
-
-/*
- * FFS_ALLOC_HEADER
- *
- * In the checked version of the driver this header is put in the beginning of
- * every memory allocation
- */
-typedef struct _FFS_ALLOC_HEADER {
- FFS_IDENTIFIER Identifier;
-} FFS_ALLOC_HEADER, *PFFS_ALLOC_HEADER;
-
-typedef struct _FCB_LIST_ENTRY {
- PFFS_FCB Fcb;
- LIST_ENTRY Next;
-} FCB_LIST_ENTRY, *PFCB_LIST_ENTRY;
-
-
-/* Block Description List */
-typedef struct _FFS_BDL {
- LONGLONG Lba;
- ULONG Offset;
- ULONG Length;
- PIRP Irp;
-} FFS_BDL, *PFFS_BDL;
-
-#pragma pack()
-
-
-/*
- * The following macro is used to determine if an FSD thread can block
- * for I/O or wait for a resource. It returns TRUE if the thread can
- * block and FALSE otherwise. This attribute can then be used to call
- * the FSD & FSP common work routine with the proper wait value.
- */
-
-#define CanFFSWait(IRP) IoIsOperationSynchronous(Irp)
-
-#define FFS_POOL_TAG 'dsfF'
-
-//
-// Block.c
-//
-
-NTSTATUS
-FFSLockUserBuffer(
- IN PIRP Irp,
- IN ULONG Length,
- IN LOCK_OPERATION Operation);
-PVOID
-FFSGetUserBuffer(
- IN PIRP Irp);
-
-NTSTATUS
-FFSReadWriteBlocks(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN PFFS_BDL FFSBDL,
- IN ULONG Length,
- IN ULONG Count,
- IN BOOLEAN bVerify);
-
-NTSTATUS
-FFSReadSync(
- IN PFFS_VCB Vcb,
- IN ULONGLONG Offset,
- IN ULONG Length,
- OUT PVOID Buffer,
- IN BOOLEAN bVerify);
-
-NTSTATUS
-FFSReadDisk(
- IN PFFS_VCB Vcb,
- IN ULONGLONG Offset,
- IN ULONG Size,
- IN PVOID Buffer,
- IN BOOLEAN bVerify);
-
-NTSTATUS
-FFSDiskIoControl(
- IN PDEVICE_OBJECT DeviceOjbect,
- IN ULONG IoctlCode,
- IN PVOID InputBuffer,
- IN ULONG InputBufferSize,
- IN OUT PVOID OutputBuffer,
- IN OUT PULONG OutputBufferSize);
-
-__drv_mustHoldCriticalRegion
-VOID
-FFSMediaEjectControl(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN BOOLEAN bPrevent);
-
-NTSTATUS
-FFSDiskShutDown(
- PFFS_VCB Vcb);
-
-
-//
-// Cleanup.c
-//
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSCleanup(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-
-//
-// Close.c
-//
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSClose(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-VOID
-FFSQueueCloseRequest(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-#ifdef _PREFAST_
-IO_WORKITEM_ROUTINE FFSDeQueueCloseRequest;
-#endif // _PREFAST_
-
-VOID NTAPI
-FFSDeQueueCloseRequest(
- IN PVOID Context);
-
-
-//
-// Cmcb.c
-//
-
-__drv_mustHoldCriticalRegion
-BOOLEAN NTAPI
-FFSAcquireForLazyWrite(
- IN PVOID Context,
- IN BOOLEAN Wait);
-
-__drv_mustHoldCriticalRegion
-VOID NTAPI
-FFSReleaseFromLazyWrite(
- IN PVOID Context);
-
-__drv_mustHoldCriticalRegion
-BOOLEAN NTAPI
-FFSAcquireForReadAhead(
- IN PVOID Context,
- IN BOOLEAN Wait);
-
-BOOLEAN NTAPI
-FFSNoOpAcquire(
- IN PVOID Fcb,
- IN BOOLEAN Wait);
-
-VOID NTAPI
-FFSNoOpRelease(
- IN PVOID Fcb);
-
-__drv_mustHoldCriticalRegion
-VOID NTAPI
-FFSReleaseFromReadAhead(
- IN PVOID Context);
-
-
-//
-// Create.c
-//
-
-PFFS_FCB
-FFSSearchFcbList(
- IN PFFS_VCB Vcb,
- IN ULONG inode);
-
-NTSTATUS
-FFSv1ScanDir(
- IN PFFS_VCB Vcb,
- IN PFFS_MCB ParentMcb,
- IN PUNICODE_STRING FileName,
- IN OUT PULONG Index,
- IN PFFSv1_INODE dinode1,
- IN PFFS_DIR_ENTRY ffs_dir);
-
-NTSTATUS
-FFSv2ScanDir(
- IN PFFS_VCB Vcb,
- IN PFFS_MCB ParentMcb,
- IN PUNICODE_STRING FileName,
- IN OUT PULONG Index,
- IN PFFSv2_INODE dinode2,
- IN PFFS_DIR_ENTRY ffs_dir);
-
-NTSTATUS
-FFSv1LookupFileName(
- IN PFFS_VCB Vcb,
- IN PUNICODE_STRING FullFileName,
- IN PFFS_MCB ParentMcb,
- OUT PFFS_MCB* FFSMcb,
- IN OUT PFFSv1_INODE dinode1);
-
-
-NTSTATUS
-FFSv2LookupFileName(
- IN PFFS_VCB Vcb,
- IN PUNICODE_STRING FullFileName,
- IN PFFS_MCB ParentMcb,
- OUT PFFS_MCB* FFSMcb,
- IN OUT PFFSv2_INODE dinode2);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSCreateFile(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSCreateVolume(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSCreate(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSCreateInode(
- PFFS_IRP_CONTEXT IrpContext,
- PFFS_VCB Vcb,
- PFFS_FCB ParentFcb,
- ULONG Type,
- ULONG FileAttr,
- PUNICODE_STRING FileName);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSSupersedeOrOverWriteFile(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN PFFS_FCB Fcb,
- IN ULONG Disposition);
-
-
-//
-// Debug.c
-//
-
-#define DBG_VITAL 0
-#define DBG_ERROR 1
-#define DBG_USER 2
-#define DBG_TRACE 3
-#define DBG_INFO 4
-#define DBG_FUNC 5
-
-#if DBG
-#define FFSPrint(arg) FFSPrintf arg
-#define FFSPrintNoIndent(arg) FFSNIPrintf arg
-
-#define FFSCompleteRequest(Irp, bPrint, PriorityBoost) \
- FFSDbgPrintComplete(Irp, bPrint); \
- IoCompleteRequest(Irp, PriorityBoost)
-
-#else
-
-#define FFSPrint(arg)
-
-#define FFSCompleteRequest(Irp, bPrint, PriorityBoost) \
- IoCompleteRequest(Irp, PriorityBoost)
-
-#endif // DBG
-
-VOID
-__cdecl
-FFSPrintf(
- LONG DebugPrintLevel,
- PCHAR DebugMessage,
- ...);
-
-VOID
-__cdecl
-FFSNIPrintf(
- LONG DebugPrintLevel,
- PCHAR DebugMessage,
- ...);
-
-extern ULONG ProcessNameOffset;
-
-#define FFSGetCurrentProcessName() ( \
- (PCHAR) PsGetCurrentProcess() + ProcessNameOffset \
-)
-
-ULONG
-FFSGetProcessNameOffset(
- VOID);
-
-VOID
-FFSDbgPrintCall(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp);
-
-VOID
-FFSDbgPrintComplete(
- IN PIRP Irp,
- IN BOOLEAN bPrint);
-
-PCHAR
-FFSNtStatusToString(
- IN NTSTATUS Status);
-
-
-//
-// Devctl.c
-//
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSDeviceControlNormal(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSPrepareToUnload(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSDeviceControl(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-
-//
-// Dirctl.c
-//
-
-ULONG
-FFSGetInfoLength(
- IN FILE_INFORMATION_CLASS FileInformationClass);
-
-ULONG
-FFSProcessDirEntry(
- IN PFFS_VCB Vcb,
- IN FILE_INFORMATION_CLASS FileInformationClass,
- IN ULONG in,
- IN PVOID Buffer,
- IN ULONG UsedLength,
- IN ULONG Length,
- IN ULONG FileIndex,
- IN PUNICODE_STRING pName,
- IN BOOLEAN Single);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSQueryDirectory(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSNotifyChangeDirectory(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-VOID
-FFSNotifyReportChange(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN PFFS_FCB Fcb,
- IN ULONG Filter,
- IN ULONG Action);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSDirectoryControl(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-BOOLEAN
-FFSIsDirectoryEmpty(
- PFFS_VCB Vcb,
- PFFS_FCB Dcb);
-
-
-//
-// Dispatch.c
-//
-
-NTSTATUS
-FFSQueueRequest(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-#ifdef _PREFAST_
-IO_WORKITEM_ROUTINE FFSDeQueueRequest;
-#endif // _PREFAST_
-
-VOID NTAPI
-FFSDeQueueRequest(
- IN PVOID Context);
-
-NTSTATUS
-FFSDispatchRequest(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-#ifdef _PREFAST_
-__drv_dispatchType(IRP_MJ_CREATE)
-__drv_dispatchType(IRP_MJ_CLOSE)
-__drv_dispatchType(IRP_MJ_READ)
-__drv_dispatchType(IRP_MJ_WRITE)
-__drv_dispatchType(IRP_MJ_QUERY_INFORMATION)
-__drv_dispatchType(IRP_MJ_SET_INFORMATION)
-__drv_dispatchType(IRP_MJ_FLUSH_BUFFERS)
-__drv_dispatchType(IRP_MJ_QUERY_VOLUME_INFORMATION)
-__drv_dispatchType(IRP_MJ_SET_VOLUME_INFORMATION)
-__drv_dispatchType(IRP_MJ_DIRECTORY_CONTROL)
-__drv_dispatchType(IRP_MJ_FILE_SYSTEM_CONTROL)
-__drv_dispatchType(IRP_MJ_DEVICE_CONTROL)
-__drv_dispatchType(IRP_MJ_SHUTDOWN)
-__drv_dispatchType(IRP_MJ_LOCK_CONTROL)
-__drv_dispatchType(IRP_MJ_CLEANUP)
-__drv_dispatchType(IRP_MJ_PNP)
-DRIVER_DISPATCH FFSBuildRequest;
-#endif // _PREFAST_
-
-NTSTATUS NTAPI
-FFSBuildRequest(
- PDEVICE_OBJECT DeviceObject,
- PIRP Irp);
-
-
-//
-// Except.c
-//
-
-NTSTATUS
-FFSExceptionFilter(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PEXCEPTION_POINTERS ExceptionPointer);
-
-NTSTATUS
-FFSExceptionHandler(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-
-//
-// ffs.c
-//
-
-PFFS_SUPER_BLOCK
-FFSLoadSuper(
- IN PFFS_VCB Vcb,
- IN BOOLEAN bVerify,
- IN ULONGLONG SuperBlockOffset);
-
-__drv_mustHoldCriticalRegion
-BOOLEAN
-FFSSaveSuper(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb);
-
-BOOLEAN
-FFSLoadGroup(
- IN PFFS_VCB Vcb);
-
-BOOLEAN
-FFSSaveGroup(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb);
-
-BOOLEAN
-FFSv1GetInodeLba(
- IN PFFS_VCB Vcb,
- IN ULONG inode,
- OUT PLONGLONG offset);
-
-BOOLEAN
-FFSv2GetInodeLba(
- IN PFFS_VCB Vcb,
- IN ULONG inode,
- OUT PLONGLONG offset);
-
-BOOLEAN
-FFSv1LoadInode(
- IN PFFS_VCB Vcb,
- IN ULONG inode,
- IN PFFSv1_INODE dinode1);
-
-BOOLEAN
-FFSv2LoadInode(
- IN PFFS_VCB Vcb,
- IN ULONG inode,
- IN PFFSv2_INODE dinode2);
-
-__drv_mustHoldCriticalRegion
-BOOLEAN
-FFSv1SaveInode(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN ULONG Inode,
- IN PFFSv1_INODE dinode1);
-
-__drv_mustHoldCriticalRegion
-BOOLEAN
-FFSv2SaveInode(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN ULONG Inode,
- IN PFFSv2_INODE dinode2);
-
-BOOLEAN
-FFSv1LoadBlock(
- IN PFFS_VCB Vcb,
- IN ULONG dwBlk,
- IN PVOID Buffer);
-
-BOOLEAN
-FFSv2LoadBlock(
- IN PFFS_VCB Vcb,
- IN ULONGLONG dwBlk,
- IN PVOID Buffer);
-
-__drv_mustHoldCriticalRegion
-BOOLEAN
-FFSSaveBlock(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN ULONG dwBlk,
- IN PVOID Buf);
-
-__drv_mustHoldCriticalRegion
-BOOLEAN
-FFSSaveBuffer(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN LONGLONG Offset,
- IN ULONG Size,
- IN PVOID Buf);
-
-ULONG
-FFSv1GetBlock(
- IN PFFS_VCB Vcb,
- IN ULONG dwContent,
- IN ULONG Index,
- IN int layer);
-
-ULONGLONG
-FFSv2GetBlock(
- IN PFFS_VCB Vcb,
- IN ULONGLONG dwContent,
- IN ULONG Index,
- IN int layer);
-
-ULONG
-FFSv1BlockMap(
- IN PFFS_VCB Vcb,
- IN PFFSv1_INODE dinode1,
- IN ULONG Index);
-
-ULONGLONG
-FFSv2BlockMap(
- IN PFFS_VCB Vcb,
- IN PFFSv2_INODE dinode2,
- IN ULONG Index);
-
-ULONG
-FFSv1BuildBDL(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN PFFSv1_INODE dinode1,
- IN ULONGLONG Offset,
- IN ULONG Size,
- OUT PFFS_BDL *ffs_bdl);
-
-ULONG
-FFSv2BuildBDL(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN PFFSv2_INODE dinode2,
- IN ULONGLONG Offset,
- IN ULONG Size,
- OUT PFFS_BDL *ffs_bdl);
-
-BOOLEAN
-FFSNewBlock(
- PFFS_IRP_CONTEXT IrpContext,
- PFFS_VCB Vcb,
- ULONG GroupHint,
- ULONG BlockHint,
- PULONG dwRet);
-
-BOOLEAN
-FFSFreeBlock(
- PFFS_IRP_CONTEXT IrpContext,
- PFFS_VCB Vcb,
- ULONG Block);
-
-__drv_mustHoldCriticalRegion
-BOOLEAN
-FFSExpandBlock(
- PFFS_IRP_CONTEXT IrpContext,
- PFFS_VCB Vcb,
- PFFS_FCB Fcb,
- ULONG dwContent,
- ULONG Index,
- ULONG layer,
- BOOLEAN bNew,
- ULONG *dwRet);
-
-BOOLEAN
-FFSExpandInode(
- PFFS_IRP_CONTEXT IrpContext,
- PFFS_VCB Vcb,
- PFFS_FCB Fcb,
- ULONG *dwRet);
-
-NTSTATUS
-FFSNewInode(
- PFFS_IRP_CONTEXT IrpContext,
- PFFS_VCB Vcb,
- ULONG GroupHint,
- ULONG Type,
- PULONG Inode);
-
-BOOLEAN
-FFSFreeInode(
- PFFS_IRP_CONTEXT IrpContext,
- PFFS_VCB Vcb,
- ULONG Inode,
- ULONG Type);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSAddEntry(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN PFFS_FCB Dcb,
- IN ULONG FileType,
- IN ULONG Inode,
- IN PUNICODE_STRING FileName);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSRemoveEntry(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN PFFS_FCB Dcb,
- IN ULONG FileType,
- IN ULONG Inode);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSSetParentEntry(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN PFFS_FCB Dcb,
- IN ULONG OldParent,
- IN ULONG NewParent);
-
-__drv_mustHoldCriticalRegion
-BOOLEAN
-FFSTruncateBlock(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN PFFS_FCB Fcb,
- IN ULONG dwContent,
- IN ULONG Index,
- IN ULONG layer,
- OUT BOOLEAN *bFreed);
-
-BOOLEAN
-FFSTruncateInode(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN PFFS_FCB Fcb);
-
-__drv_mustHoldCriticalRegion
-BOOLEAN
-FFSAddMcbEntry(
- IN PFFS_VCB Vcb,
- IN LONGLONG Lba,
- IN LONGLONG Length);
-
-__drv_mustHoldCriticalRegion
-VOID
-FFSRemoveMcbEntry(
- IN PFFS_VCB Vcb,
- IN LONGLONG Lba,
- IN LONGLONG Length);
-
-__drv_mustHoldCriticalRegion
-BOOLEAN
-FFSLookupMcbEntry(
- IN PFFS_VCB Vcb,
- IN LONGLONG Lba,
- OUT PLONGLONG pLba,
- OUT PLONGLONG pLength,
- OUT PLONGLONG RunStart,
- OUT PLONGLONG RunLength,
- OUT PULONG Index);
-
-ULONG
-FFSDataBlocks(
- PFFS_VCB Vcb,
- ULONG TotalBlocks);
-
-ULONG
-FFSTotalBlocks(
- PFFS_VCB Vcb,
- ULONG DataBlocks);
-
-
-//
-// Fastio.c
-//
-
-#ifdef _PREFAST_
-FAST_IO_CHECK_IF_POSSIBLE FFSFastIoCheckIfPossible;
-#endif // _PREFAST_
-
-BOOLEAN NTAPI
-FFSFastIoCheckIfPossible(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN BOOLEAN Wait,
- IN ULONG LockKey,
- IN BOOLEAN CheckForReadOperation,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN PDEVICE_OBJECT DeviceObject);
-
-#ifdef _PREFAST_
-FAST_IO_READ FFSFastIoRead;
-#endif // _PREFAST_
-
-BOOLEAN NTAPI
-FFSFastIoRead(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN BOOLEAN Wait,
- IN ULONG LockKey,
- OUT PVOID Buffer,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN PDEVICE_OBJECT DeviceObject);
-
-#ifdef _PREFAST_
-FAST_IO_WRITE FFSFastIoWrite;
-#endif // _PREFAST_
-
-BOOLEAN NTAPI
-FFSFastIoWrite(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN BOOLEAN Wait,
- IN ULONG LockKey,
- OUT PVOID Buffer,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN PDEVICE_OBJECT DeviceObject);
-
-#ifdef _PREFAST_
-FAST_IO_QUERY_BASIC_INFO FFSFastIoQueryBasicInfo;
-#endif // _PREFAST_
-
-__drv_mustHoldCriticalRegion
-BOOLEAN NTAPI
-FFSFastIoQueryBasicInfo(
- IN PFILE_OBJECT FileObject,
- IN BOOLEAN Wait,
- OUT PFILE_BASIC_INFORMATION Buffer,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN PDEVICE_OBJECT DeviceObject);
-
-#ifdef _PREFAST_
-FAST_IO_QUERY_STANDARD_INFO FFSFastIoQueryStandardInfo;
-#endif // _PREFAST_
-
-__drv_mustHoldCriticalRegion
-BOOLEAN NTAPI
-FFSFastIoQueryStandardInfo(
- IN PFILE_OBJECT FileObject,
- IN BOOLEAN Wait,
- OUT PFILE_STANDARD_INFORMATION Buffer,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN PDEVICE_OBJECT DeviceObject);
-
-#ifdef _PREFAST_
-FAST_IO_LOCK FFSFastIoLock;
-#endif // _PREFAST_
-
-BOOLEAN NTAPI
-FFSFastIoLock(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN PLARGE_INTEGER Length,
- IN PEPROCESS Process,
- IN ULONG Key,
- IN BOOLEAN FailImmediately,
- IN BOOLEAN ExclusiveLock,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN PDEVICE_OBJECT DeviceObject);
-
-#ifdef _PREFAST_
-FAST_IO_UNLOCK_SINGLE FFSFastIoUnlockSingle;
-#endif // _PREFAST_
-
-BOOLEAN NTAPI
-FFSFastIoUnlockSingle(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN PLARGE_INTEGER Length,
- IN PEPROCESS Process,
- IN ULONG Key,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN PDEVICE_OBJECT DeviceObject);
-
-#ifdef _PREFAST_
-FAST_IO_UNLOCK_ALL FFSFastIoUnlockAll;
-#endif // _PREFAST_
-
-BOOLEAN NTAPI
-FFSFastIoUnlockAll(
- IN PFILE_OBJECT FileObject,
- IN PEPROCESS Process,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN PDEVICE_OBJECT DeviceObject);
-
-#ifdef _PREFAST_
-FAST_IO_UNLOCK_ALL_BY_KEY FFSFastIoUnlockAllByKey;
-#endif // _PREFAST_
-
-BOOLEAN NTAPI
-FFSFastIoUnlockAllByKey(
- IN PFILE_OBJECT FileObject,
-#ifndef __REACTOS__
- IN PEPROCESS Process,
-#else
- IN PVOID Process,
-#endif
- IN ULONG Key,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN PDEVICE_OBJECT DeviceObject);
-
-#ifdef _PREFAST_
-FAST_IO_QUERY_NETWORK_OPEN_INFO FFSFastIoQueryNetworkOpenInfo;
-#endif // _PREFAST_
-
-__drv_mustHoldCriticalRegion
-BOOLEAN NTAPI
-FFSFastIoQueryNetworkOpenInfo(
- IN PFILE_OBJECT FileObject,
- IN BOOLEAN Wait,
- OUT PFILE_NETWORK_OPEN_INFORMATION Buffer,
- OUT PIO_STATUS_BLOCK IoStatus,
- IN PDEVICE_OBJECT DeviceObject);
-
-//
-// FileInfo.c
-//
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSQueryInformation(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSSetInformation(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-BOOLEAN
-FFSExpandFile(
- PFFS_IRP_CONTEXT IrpContext,
- PFFS_VCB Vcb,
- PFFS_FCB Fcb,
- PLARGE_INTEGER AllocationSize);
-
-BOOLEAN
-FFSTruncateFile(
- PFFS_IRP_CONTEXT IrpContext,
- PFFS_VCB Vcb,
- PFFS_FCB Fcb,
- PLARGE_INTEGER AllocationSize);
-
-NTSTATUS
-FFSSetDispositionInfo(
- PFFS_IRP_CONTEXT IrpContext,
- PFFS_VCB Vcb,
- PFFS_FCB Fcb,
- BOOLEAN bDelete);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSSetRenameInfo(
- PFFS_IRP_CONTEXT IrpContext,
- PFFS_VCB Vcb,
- PFFS_FCB Fcb);
-
-__drv_mustHoldCriticalRegion
-BOOLEAN
-FFSDeleteFile(
- PFFS_IRP_CONTEXT IrpContext,
- PFFS_VCB Vcb,
- PFFS_FCB Fcb);
-
-
-//
-// Flush.c
-//
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSFlushFiles(
- IN PFFS_VCB Vcb,
- BOOLEAN bShutDown);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSFlushVolume(
- IN PFFS_VCB Vcb,
- BOOLEAN bShutDown);
-
-NTSTATUS
-FFSFlushFile(
- IN PFFS_FCB Fcb);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSFlush(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-
-//
-// Fsctl.c
-//
-
-VOID
-FFSSetVpbFlag(
- IN PVPB Vpb,
- IN USHORT Flag);
-
-VOID
-FFSClearVpbFlag(
- IN PVPB Vpb,
- IN USHORT Flag);
-
-NTSTATUS
-FFSGetPartition(
- IN PDEVICE_OBJECT DeviceObject,
- OUT ULONGLONG *StartOffset);
-
-NTSTATUS
-FFSLoadDiskLabel(
- PDEVICE_OBJECT DeviceObject,
- IN PFFS_VCB Vcb);
-
-__drv_mustHoldCriticalRegion
-BOOLEAN
-FFSCheckDismount(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN BOOLEAN bForce);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSPurgeVolume(
- IN PFFS_VCB Vcb,
- IN BOOLEAN FlushBeforePurge);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSPurgeFile(
- IN PFFS_FCB Fcb,
- IN BOOLEAN FlushBeforePurge);
-
-BOOLEAN
-FFSIsHandleCountZero(
- IN PFFS_VCB Vcb);
-
-NTSTATUS
-FFSLockVcb(
- IN PFFS_VCB Vcb,
- IN PFILE_OBJECT FileObject);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSLockVolume(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-NTSTATUS
-FFSUnlockVcb(
- IN PFFS_VCB Vcb,
- IN PFILE_OBJECT FileObject);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSUnlockVolume(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSAllowExtendedDasdIo(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSUserFsRequest(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSMountVolume(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSVerifyVolume(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSIsVolumeMounted(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSDismountVolume(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSSelectBSDPartition(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSFileSystemControl(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-
-//
-// Init.c
-//
-
-BOOLEAN
-FFSQueryParameters(
- IN PUNICODE_STRING RegistryPath);
-
-#ifdef _PREFAST_
-DRIVER_INITIALIZE DriverEntry;
-#endif // _PREFAST_
-
-#ifdef _PREFAST_
-DRIVER_UNLOAD DriverUnload;
-#endif // _PREFAST_
-
-VOID NTAPI
-DriverUnload(
- IN PDRIVER_OBJECT DriverObject);
-
-
-//
-// Lock.c
-//
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSLockControl(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-
-//
-// Memory.c
-//
-
-__drv_mustHoldCriticalRegion
-PFFS_IRP_CONTEXT
-FFSAllocateIrpContext(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp);
-
-__drv_mustHoldCriticalRegion
-VOID
-FFSFreeIrpContext(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-__drv_mustHoldCriticalRegion
-PFFS_FCB
-FFSv1AllocateFcb(
- IN PFFS_VCB Vcb,
- IN PFFS_MCB FFSMcb,
- IN PFFSv1_INODE dinode1);
-
-__drv_mustHoldCriticalRegion
-PFFS_FCB
-FFSv2AllocateFcb(
- IN PFFS_VCB Vcb,
- IN PFFS_MCB FFSMcb,
- IN PFFSv2_INODE dinode2);
-
-__drv_mustHoldCriticalRegion
-VOID
-FFSFreeFcb(
- IN PFFS_FCB Fcb);
-
-__drv_mustHoldCriticalRegion
-PFFS_CCB
-FFSAllocateCcb(
- VOID);
-
-__drv_mustHoldCriticalRegion
-VOID
-FFSFreeMcb(
- IN PFFS_MCB Mcb);
-
-__drv_mustHoldCriticalRegion
-PFFS_FCB
-FFSCreateFcbFromMcb(
- PFFS_VCB Vcb,
- PFFS_MCB Mcb);
-
-__drv_mustHoldCriticalRegion
-VOID
-FFSFreeCcb(
- IN PFFS_CCB Ccb);
-
-PFFS_MCB
-FFSAllocateMcb(
- PFFS_VCB Vcb,
- PUNICODE_STRING FileName,
- ULONG FileAttr);
-
-PFFS_MCB
-FFSSearchMcbTree(
- PFFS_VCB Vcb,
- PFFS_MCB FFSMcb,
- ULONG Inode);
-
-PFFS_MCB
-FFSSearchMcb(
- PFFS_VCB Vcb,
- PFFS_MCB Parent,
- PUNICODE_STRING FileName);
-
-BOOLEAN
-FFSGetFullFileName(
- PFFS_MCB Mcb,
- PUNICODE_STRING FileName);
-
-VOID
-FFSRefreshMcb(
- PFFS_VCB Vcb, PFFS_MCB Mcb);
-
-VOID
-FFSAddMcbNode(
- PFFS_VCB Vcb,
- PFFS_MCB Parent,
- PFFS_MCB Child);
-
-BOOLEAN
-FFSDeleteMcbNode(
- PFFS_VCB Vcb,
- PFFS_MCB McbTree,
- PFFS_MCB FFSMcb);
-
-__drv_mustHoldCriticalRegion
-VOID
-FFSFreeMcbTree(
- PFFS_MCB McbTree);
-
-BOOLEAN
-FFSCheckSetBlock(
- PFFS_IRP_CONTEXT IrpContext,
- PFFS_VCB Vcb,
- ULONG Block);
-
-BOOLEAN
-FFSCheckBitmapConsistency(
- PFFS_IRP_CONTEXT IrpContext,
- PFFS_VCB Vcb);
-
-VOID
-FFSInsertVcb(
- PFFS_VCB Vcb);
-
-VOID
-FFSRemoveVcb(
- PFFS_VCB Vcb);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSInitializeVcb(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN PFFS_SUPER_BLOCK FFSSb,
- IN PDEVICE_OBJECT TargetDevice,
- IN PDEVICE_OBJECT VolumeDevice,
- IN PVPB Vpb);
-
-__drv_mustHoldCriticalRegion
-VOID
-FFSFreeVcb(
- IN PFFS_VCB Vcb);
-
-VOID
-FFSRepinBcb(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PBCB Bcb);
-
-VOID
-FFSUnpinRepinnedBcbs(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSCompleteIrpContext(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN NTSTATUS Status);
-
-VOID
-FFSSyncUninitializeCacheMap(
- IN PFILE_OBJECT FileObject);
-
-
-//
-// Misc.c
-//
-
-ULONG
-FFSLog2(
- ULONG Value);
-
-LARGE_INTEGER
-FFSSysTime(
- IN ULONG i_time);
-
-ULONG
-FFSInodeTime(
- IN LARGE_INTEGER SysTime);
-
-NTSTATUS
-FFSOEMToUnicode(
- IN OUT PUNICODE_STRING Unicode,
- IN POEM_STRING Oem);
-
-NTSTATUS
-FFSUnicodeToOEM(
- IN OUT POEM_STRING Oem,
- IN PUNICODE_STRING Unicode);
-
-
-//
-// Pnp.c
-//
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSPnp(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSPnpQueryRemove(
- PFFS_IRP_CONTEXT IrpContext,
- PFFS_VCB Vcb);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSPnpRemove(
- PFFS_IRP_CONTEXT IrpContext,
- PFFS_VCB Vcb);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSPnpCancelRemove(
- PFFS_IRP_CONTEXT IrpContext,
- PFFS_VCB Vcb);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSPnpSurpriseRemove(
- PFFS_IRP_CONTEXT IrpContext,
- PFFS_VCB Vcb);
-
-
-//
-// Read.c
-//
-
-BOOLEAN
-FFSCopyRead(
- IN PFILE_OBJECT FileObject,
- IN PLARGE_INTEGER FileOffset,
- IN ULONG Length,
- IN BOOLEAN Wait,
- OUT PVOID Buffer,
- OUT PIO_STATUS_BLOCK IoStatus);
-
-NTSTATUS
-FFSv1ReadInode(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN PFFSv1_INODE dinode1,
- IN ULONGLONG offset,
- IN PVOID Buffer,
- IN ULONG size,
- OUT PULONG dwRet);
-
-NTSTATUS
-FFSv2ReadInode(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN PFFSv2_INODE dinode2,
- IN ULONGLONG offset,
- IN PVOID Buffer,
- IN ULONG size,
- OUT PULONG dwRet);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSRead(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-
-//
-// Shutdown.c
-//
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSShutDown(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-
-//
-// Volinfo.c
-//
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSQueryVolumeInformation(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSSetVolumeInformation(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-
-//
-// Write.c
-//
-
-NTSTATUS
-FFSv1WriteInode(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN PFFSv1_INODE dinode1,
- IN ULONGLONG offset,
- IN PVOID Buffer,
- IN ULONG size,
- IN BOOLEAN bWriteToDisk,
- OUT PULONG dwRet);
-
-NTSTATUS
-FFSv2WriteInode(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN PFFSv2_INODE dinode2,
- IN ULONGLONG offset,
- IN PVOID Buffer,
- IN ULONG size,
- IN BOOLEAN bWriteToDisk,
- OUT PULONG dwRet);
-
-VOID
-FFSStartFloppyFlushDpc(
- PFFS_VCB Vcb,
- PFFS_FCB Fcb,
- PFILE_OBJECT FileObject);
-
-BOOLEAN
-FFSZeroHoles(
- IN PFFS_IRP_CONTEXT IrpContext,
- IN PFFS_VCB Vcb,
- IN PFILE_OBJECT FileObject,
- IN LONGLONG Offset,
- IN LONGLONG Count);
-
-__drv_mustHoldCriticalRegion
-NTSTATUS
-FFSWrite(
- IN PFFS_IRP_CONTEXT IrpContext);
-
-NTSTATUS
-DeviceControl(
- IN PDEVICE_OBJECT pDeviceObject,
- IN PIRP pIrp);
-
-#endif /* _FFS_HEADER_ */
diff --git a/drivers/filesystems/ffs/inc/fs.h b/drivers/filesystems/ffs/inc/fs.h
deleted file mode 100644
index 40afed40258..00000000000
--- a/drivers/filesystems/ffs/inc/fs.h
+++ /dev/null
@@ -1,697 +0,0 @@
-/* $NetBSD: fs.h,v 1.43 2004/03/21 18:48:24 dsl Exp $ */
-
-/*
- * Copyright (c) 1982, 1986, 1993
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)fs.h 8.13 (Berkeley) 3/21/95
- */
-
-#ifndef _UFS_FFS_FS_H_
-#define _UFS_FFS_FS_H_
-
-#include "type.h"
-
-/*
- * Each disk drive contains some number of file systems.
- * A file system consists of a number of cylinder groups.
- * Each cylinder group has inodes and data.
- *
- * A file system is described by its super-block, which in turn
- * describes the cylinder groups. The super-block is critical
- * data and is replicated in each cylinder group to protect against
- * catastrophic loss. This is done at `newfs' time and the critical
- * super-block data does not change, so the copies need not be
- * referenced further unless disaster strikes.
- *
- * For file system fs, the offsets of the various blocks of interest
- * are given in the super block as:
- * [fs->fs_sblkno] Super-block
- * [fs->fs_cblkno] Cylinder group block
- * [fs->fs_iblkno] Inode blocks
- * [fs->fs_dblkno] Data blocks
- * The beginning of cylinder group cg in fs, is given by
- * the ``cgbase(fs, cg)'' macro.
- *
- * Depending on the architecture and the media, the superblock may
- * reside in any one of four places. For tiny media where every block
- * counts, it is placed at the very front of the partition. Historically,
- * UFS1 placed it 8K from the front to leave room for the disk label and
- * a small bootstrap. For UFS2 it got moved to 64K from the front to leave
- * room for the disk label and a bigger bootstrap, and for really piggy
- * systems we check at 256K from the front if the first three fail. In
- * all cases the size of the superblock will be SBLOCKSIZE. All values are
- * given in byte-offset form, so they do not imply a sector size. The
- * SBLOCKSEARCH specifies the order in which the locations should be searched.
- *
- * Unfortunately the UFS2/FFSv2 change was done without adequate consideration
- * of backward compatibility. In particular 'newfs' for a FFSv2 partition
- * must overwrite any old FFSv1 superblock at 8k, and preferrably as many
- * of the alternates as it can find - otherwise attempting to mount on a
- * system that only supports FFSv1 is likely to succeed!.
- * For a small FFSv1 filesystem, an old FFSv2 superblock can be left on
- * the disk, and a system that tries to find an FFSv2 filesystem in preference
- * to and FFSv1 one (as NetBSD does) can mount the old FFSv2 filesystem.
- * As a added bonus, the 'first alternate' superblock of a FFSv1 filesystem
- * with 64k blocks is at 64k - just where the code looks first when playing
- * 'hunt the superblock'.
- *
- * The ffsv2 superblock layout (which might contain an ffsv1 filesystem)
- * can be detected by checking for sb->fs_old_flags & FS_FLAGS_UPDATED.
- * This is the default suberblock type for NetBSD since ffsv2 support was added.
- */
-#define BBSIZE 8192
-#define BBOFF ((off_t)(0))
-#define BBLOCK ((daddr_t)(0))
-
-#define SBLOCK_FLOPPY 0
-#define SBLOCK_UFS1 8192
-#define SBLOCK_UFS2 65536
-#define SBLOCK_PIGGY 262144
-#define SBLOCKSIZE 8192
-/*
- * NB: Do not, under any circumstances, look for an ffsv1 filesystem at
- * SBLOCK_UFS2. Doing so will find the wrong superblock for filesystems
- * with a 64k block size.
- */
-#define SBLOCKSEARCH \
- { SBLOCK_UFS2, SBLOCK_UFS1, SBLOCK_FLOPPY, SBLOCK_PIGGY, -1 }
-
-/*
- * Max number of fragments per block. This value is NOT tweakable.
- */
-#define MAXFRAG 8
-
-
-
-/*
- * Addresses stored in inodes are capable of addressing fragments
- * of `blocks'. File system blocks of at most size MAXBSIZE can
- * be optionally broken into 2, 4, or 8 pieces, each of which is
- * addressable; these pieces may be DEV_BSIZE, or some multiple of
- * a DEV_BSIZE unit.
- *
- * Large files consist of exclusively large data blocks. To avoid
- * undue wasted disk space, the last data block of a small file may be
- * allocated as only as many fragments of a large block as are
- * necessary. The file system format retains only a single pointer
- * to such a fragment, which is a piece of a single large block that
- * has been divided. The size of such a fragment is determinable from
- * information in the inode, using the ``blksize(fs, ip, lbn)'' macro.
- *
- * The file system records space availability at the fragment level;
- * to determine block availability, aligned fragments are examined.
- */
-
-/*
- * MINBSIZE is the smallest allowable block size.
- * In order to insure that it is possible to create files of size
- * 2^32 with only two levels of indirection, MINBSIZE is set to 4096.
- * MINBSIZE must be big enough to hold a cylinder group block,
- * thus changes to (struct cg) must keep its size within MINBSIZE.
- * Note that super blocks are always of size SBSIZE,
- * and that both SBSIZE and MAXBSIZE must be >= MINBSIZE.
- */
-#define MINBSIZE 4096
-
-/*
- * The path name on which the file system is mounted is maintained
- * in fs_fsmnt. MAXMNTLEN defines the amount of space allocated in
- * the super block for this name.
- */
-#define MAXMNTLEN 468
-
-/*
- * The volume name for this filesystem is maintained in fs_volname.
- * MAXVOLLEN defines the length of the buffer allocated.
- * This space used to be part of of fs_fsmnt.
- */
-#define MAXVOLLEN 32
-
-/*
- * There is a 128-byte region in the superblock reserved for in-core
- * pointers to summary information. Originally this included an array
- * of pointers to blocks of struct csum; now there are just four
- * pointers and the remaining space is padded with fs_ocsp[].
- * NOCSPTRS determines the size of this padding. One pointer (fs_csp)
- * is taken away to point to a contiguous array of struct csum for
- * all cylinder groups; a second (fs_maxcluster) points to an array
- * of cluster sizes that is computed as cylinder groups are inspected;
- * the third (fs_contigdirs) points to an array that tracks the
- * creation of new directories; and the fourth (fs_active) is used
- * by snapshots.
- */
-#define NOCSPTRS ((128 / sizeof(void *)) - 4)
-
-/*
- * A summary of contiguous blocks of various sizes is maintained
- * in each cylinder group. Normally this is set by the initial
- * value of fs_maxcontig. To conserve space, a maximum summary size
- * is set by FS_MAXCONTIG.
- */
-#define FS_MAXCONTIG 16
-
-/*
- * Unused value currently, FreeBSD compat.
- */
-#define FSMAXSNAP 20
-
-/*
- * MINFREE gives the minimum acceptable percentage of file system
- * blocks which may be free. If the freelist drops below this level
- * only the superuser may continue to allocate blocks. This may
- * be set to 0 if no reserve of free blocks is deemed necessary,
- * however throughput drops by fifty percent if the file system
- * is run at between 95% and 100% full; thus the minimum default
- * value of fs_minfree is 5%. However, to get good clustering
- * performance, 10% is a better choice. hence we use 10% as our
- * default value. With 10% free space, fragmentation is not a
- * problem, so we choose to optimize for time.
- */
-#define MINFREE 5
-#define DEFAULTOPT FS_OPTTIME
-
-/*
- * Grigoriy Orlov <gluk(a)ptci.ru> has done some extensive work to fine
- * tune the layout preferences for directories within a filesystem.
- * His algorithm can be tuned by adjusting the following parameters
- * which tell the system the average file size and the average number
- * of files per directory. These defaults are well selected for typical
- * filesystems, but may need to be tuned for odd cases like filesystems
- * being used for squid caches or news spools.
- */
-#define AVFILESIZ 16384 /* expected average file size */
-#define AFPDIR 64 /* expected number of files per directory */
-
-/*
- * Per cylinder group information; summarized in blocks allocated
- * from first cylinder group data blocks. These blocks have to be
- * read in from fs_csaddr (size fs_cssize) in addition to the
- * super block.
- */
-struct csum {
- int32_t cs_ndir; /* number of directories */
- int32_t cs_nbfree; /* number of free blocks */
- int32_t cs_nifree; /* number of free inodes */
- int32_t cs_nffree; /* number of free frags */
-};
-
-struct csum_total {
- int64_t cs_ndir; /* number of directories */
- int64_t cs_nbfree; /* number of free blocks */
- int64_t cs_nifree; /* number of free inodes */
- int64_t cs_nffree; /* number of free frags */
- int64_t cs_spare[4]; /* future expansion */
-};
-
-
-/*
- * Super block for an FFS file system in memory.
- */
-struct fs {
- int32_t fs_firstfield; /* historic file system linked list, */
- int32_t fs_unused_1; /* used for incore super blocks */
- int32_t fs_sblkno; /* addr of super-block in filesys */
- int32_t fs_cblkno; /* offset of cyl-block in filesys */
- int32_t fs_iblkno; /* offset of inode-blocks in filesys */
- int32_t fs_dblkno; /* offset of first data after cg */
- int32_t fs_old_cgoffset; /* cylinder group offset in cylinder */
- int32_t fs_old_cgmask; /* used to calc mod fs_ntrak */
- int32_t fs_old_time; /* last time written */
- int32_t fs_old_size; /* number of blocks in fs */
- int32_t fs_old_dsize; /* number of data blocks in fs */
- int32_t fs_ncg; /* number of cylinder groups */
- int32_t fs_bsize; /* size of basic blocks in fs */
- int32_t fs_fsize; /* size of frag blocks in fs */
- int32_t fs_frag; /* number of frags in a block in fs */
-/* these are configuration parameters */
- int32_t fs_minfree; /* minimum percentage of free blocks */
- int32_t fs_old_rotdelay; /* num of ms for optimal next block */
- int32_t fs_old_rps; /* disk revolutions per second */
-/* these fields can be computed from the others */
- int32_t fs_bmask; /* ``blkoff'' calc of blk offsets */
- int32_t fs_fmask; /* ``fragoff'' calc of frag offsets */
- int32_t fs_bshift; /* ``lblkno'' calc of logical blkno */
- int32_t fs_fshift; /* ``numfrags'' calc number of frags */
-/* these are configuration parameters */
- int32_t fs_maxcontig; /* max number of contiguous blks */
- int32_t fs_maxbpg; /* max number of blks per cyl group */
-/* these fields can be computed from the others */
- int32_t fs_fragshift; /* block to frag shift */
- int32_t fs_fsbtodb; /* fsbtodb and dbtofsb shift constant */
- int32_t fs_sbsize; /* actual size of super block */
- int32_t fs_spare1[2]; /* old fs_csmask */
- /* old fs_csshift */
- int32_t fs_nindir; /* value of NINDIR */
- int32_t fs_inopb; /* value of INOPB */
- int32_t fs_old_nspf; /* value of NSPF */
-/* yet another configuration parameter */
- int32_t fs_optim; /* optimization preference, see below */
-/* these fields are derived from the hardware */
- int32_t fs_old_npsect; /* # sectors/track including spares */
- int32_t fs_old_interleave; /* hardware sector interleave */
- int32_t fs_old_trackskew; /* sector 0 skew, per track */
-/* fs_id takes the space of the unused fs_headswitch and fs_trkseek fields */
- int32_t fs_id[2]; /* unique file system id */
-/* sizes determined by number of cylinder groups and their sizes */
- int32_t fs_old_csaddr; /* blk addr of cyl grp summary area */
- int32_t fs_cssize; /* size of cyl grp summary area */
- int32_t fs_cgsize; /* cylinder group size */
-/* these fields are derived from the hardware */
- int32_t fs_spare2; /* old fs_ntrak */
- int32_t fs_old_nsect; /* sectors per track */
- int32_t fs_old_spc; /* sectors per cylinder */
- int32_t fs_old_ncyl; /* cylinders in file system */
- int32_t fs_old_cpg; /* cylinders per group */
- int32_t fs_ipg; /* inodes per group */
- int32_t fs_fpg; /* blocks per group * fs_frag */
-/* this data must be re-computed after crashes */
- struct csum fs_old_cstotal; /* cylinder summary information */
-/* these fields are cleared at mount time */
- int8_t fs_fmod; /* super block modified flag */
- int8_t fs_clean; /* file system is clean flag */
- int8_t fs_ronly; /* mounted read-only flag */
- uint8_t fs_old_flags; /* see FS_ flags below */
- u_char fs_fsmnt[MAXMNTLEN]; /* name mounted on */
- u_char fs_volname[MAXVOLLEN]; /* volume name */
- uint64_t fs_swuid; /* system-wide uid */
- int32_t fs_pad;
-/* these fields retain the current block allocation info */
- int32_t fs_cgrotor; /* last cg searched (UNUSED) */
- void *fs_ocsp[NOCSPTRS]; /* padding; was list of fs_cs buffers */
- u_int8_t *fs_contigdirs; /* # of contiguously allocated dirs */
- struct csum *fs_csp; /* cg summary info buffer for fs_cs */
- int32_t *fs_maxcluster; /* max cluster in each cyl group */
- u_int *fs_active; /* used by snapshots to track fs */
- int32_t fs_old_cpc; /* cyl per cycle in postbl */
-/* this area is otherwise allocated unless fs_old_flags & FS_FLAGS_UPDATED */
- int32_t fs_maxbsize; /* maximum blocking factor permitted */
- int64_t fs_sparecon64[17]; /* old rotation block list head */
- int64_t fs_sblockloc; /* byte offset of standard superblock */
- struct csum_total fs_cstotal; /* cylinder summary information */
- int64_t fs_time; /* last time written */
- int64_t fs_size; /* number of blocks in fs */
- int64_t fs_dsize; /* number of data blocks in fs */
- int64_t fs_csaddr; /* blk addr of cyl grp summary area */
- int64_t fs_pendingblocks; /* blocks in process of being freed */
- int32_t fs_pendinginodes; /* inodes in process of being freed */
- int32_t fs_snapinum[FSMAXSNAP];/* list of snapshot inode numbers */
-/* back to stuff that has been around a while */
- int32_t fs_avgfilesize; /* expected average file size */
- int32_t fs_avgfpdir; /* expected # of files per directory */
- int32_t fs_save_cgsize; /* save real cg size to use fs_bsize */
- int32_t fs_sparecon32[26]; /* reserved for future constants */
- uint32_t fs_flags; /* see FS_ flags below */
-/* back to stuff that has been around a while (again) */
- int32_t fs_contigsumsize; /* size of cluster summary array */
- int32_t fs_maxsymlinklen; /* max length of an internal symlink */
- int32_t fs_old_inodefmt; /* format of on-disk inodes */
- u_int64_t fs_maxfilesize; /* maximum representable file size */
- int64_t fs_qbmask; /* ~fs_bmask for use with 64-bit size */
- int64_t fs_qfmask; /* ~fs_fmask for use with 64-bit size */
- int32_t fs_state; /* validate fs_clean field (UNUSED) */
- int32_t fs_old_postblformat; /* format of positional layout tables */
- int32_t fs_old_nrpos; /* number of rotational positions */
- int32_t fs_spare5[2]; /* old fs_postbloff */
- /* old fs_rotbloff */
- int32_t fs_magic; /* magic number */
-};
-
-#define fs_old_postbloff fs_spare5[0]
-#define fs_old_rotbloff fs_spare5[1]
-#define fs_old_postbl_start fs_maxbsize
-#define fs_old_headswitch fs_id[0]
-#define fs_old_trkseek fs_id[1]
-#define fs_old_csmask fs_spare1[0]
-#define fs_old_csshift fs_spare1[1]
-
-#define FS_42POSTBLFMT -1 /* 4.2BSD rotational table format */
-#define FS_DYNAMICPOSTBLFMT 1 /* dynamic rotational table format */
-
-#define old_fs_postbl(fs_, cylno, opostblsave) \
- ((((fs_)->fs_old_postblformat == FS_42POSTBLFMT) || \
- ((fs_)->fs_old_postbloff == offsetof(struct fs, fs_old_postbl_start))) \
- ? ((int16_t *)(opostblsave) + (cylno) * (fs_)->fs_old_nrpos) \
- : ((int16_t *)((uint8_t *)(fs_) + \
- (fs_)->fs_old_postbloff) + (cylno) * (fs_)->fs_old_nrpos))
-#define old_fs_rotbl(fs) \
- (((fs)->fs_old_postblformat == FS_42POSTBLFMT) \
- ? ((uint8_t *)(&(fs)->fs_magic+1)) \
- : ((uint8_t *)((uint8_t *)(fs) + (fs)->fs_old_rotbloff)))
-
-/*
- * File system identification
- */
-#define FS_UFS1_MAGIC 0x011954 /* UFS1 fast file system magic number */
-#define FS_UFS2_MAGIC 0x19540119 /* UFS2 fast file system magic number */
-#define FS_UFS1_MAGIC_SWAPPED 0x54190100
-#define FS_UFS2_MAGIC_SWAPPED 0x19015419
-#define FS_OKAY 0x7c269d38 /* superblock checksum */
-#define FS_42INODEFMT -1 /* 4.2BSD inode format */
-#define FS_44INODEFMT 2 /* 4.4BSD inode format */
-
-/*
- * File system clean flags
- */
-#define FS_ISCLEAN 0x01
-#define FS_WASCLEAN 0x02
-
-/*
- * Preference for optimization.
- */
-#define FS_OPTTIME 0 /* minimize allocation time */
-#define FS_OPTSPACE 1 /* minimize disk fragmentation */
-
-/*
- * File system flags
- */
-#define FS_UNCLEAN 0x01 /* file system not clean at mount (unused) */
-#define FS_DOSOFTDEP 0x02 /* file system using soft dependencies */
-#define FS_NEEDSFSCK 0x04 /* needs sync fsck (FreeBSD compat, unused) */
-#define FS_INDEXDIRS 0x08 /* kernel supports indexed directories */
-#define FS_ACLS 0x10 /* file system has ACLs enabled */
-#define FS_MULTILABEL 0x20 /* file system is MAC multi-label */
-#define FS_FLAGS_UPDATED 0x80 /* flags have been moved to new location */
-
-/*
- * File system internal flags, also in fs_flags.
- * (Pick highest number to avoid conflicts with others)
- */
-#define FS_SWAPPED 0x80000000 /* file system is endian swapped */
-#define FS_INTERNAL 0x80000000 /* mask for internal flags */
-
-/*
- * The size of a cylinder group is calculated by CGSIZE. The maximum size
- * is limited by the fact that cylinder groups are at most one block.
- * Its size is derived from the size of the maps maintained in the
- * cylinder group and the (struct cg) size.
- */
-#define CGSIZE_IF(fs, ipg, fpg) \
- /* base cg */ (sizeof(struct cg) + sizeof(int32_t) + \
- /* old btotoff */ (fs)->fs_old_cpg * sizeof(int32_t) + \
- /* old boff */ (fs)->fs_old_cpg * sizeof(u_int16_t) + \
- /* inode map */ howmany((ipg), NBBY) + \
- /* block map */ howmany((fpg), NBBY) +\
- /* if present */ ((fs)->fs_contigsumsize <= 0 ? 0 : \
- /* cluster sum */ (fs)->fs_contigsumsize * sizeof(int32_t) + \
- /* cluster map */ howmany(fragstoblks(fs, (fpg)), NBBY)))
-
-#define CGSIZE(fs) CGSIZE_IF((fs), (fs)->fs_ipg, (fs)->fs_fpg)
-
-/*
- * The minimal number of cylinder groups that should be created.
- */
-#define MINCYLGRPS 4
-
-
-/*
- * Convert cylinder group to base address of its global summary info.
- */
-#define fs_cs(fs, indx) fs_csp[indx]
-
-/*
- * Cylinder group block for a file system.
- */
-#define CG_MAGIC 0x090255
-struct cg {
- int32_t cg_firstfield; /* historic cyl groups linked list */
- int32_t cg_magic; /* magic number */
- int32_t cg_old_time; /* time last written */
- int32_t cg_cgx; /* we are the cgx'th cylinder group */
- int16_t cg_old_ncyl; /* number of cyl's this cg */
- int16_t cg_old_niblk; /* number of inode blocks this cg */
- int32_t cg_ndblk; /* number of data blocks this cg */
- struct csum cg_cs; /* cylinder summary information */
- int32_t cg_rotor; /* position of last used block */
- int32_t cg_frotor; /* position of last used frag */
- int32_t cg_irotor; /* position of last used inode */
- int32_t cg_frsum[MAXFRAG]; /* counts of available frags */
- int32_t cg_old_btotoff; /* (int32) block totals per cylinder */
- int32_t cg_old_boff; /* (u_int16) free block positions */
- int32_t cg_iusedoff; /* (u_int8) used inode map */
- int32_t cg_freeoff; /* (u_int8) free block map */
- int32_t cg_nextfreeoff; /* (u_int8) next available space */
- int32_t cg_clustersumoff; /* (u_int32) counts of avail clusters */
- int32_t cg_clusteroff; /* (u_int8) free cluster map */
- int32_t cg_nclusterblks; /* number of clusters this cg */
- int32_t cg_niblk; /* number of inode blocks this cg */
- int32_t cg_initediblk; /* last initialized inode */
- int32_t cg_sparecon32[3]; /* reserved for future use */
- int64_t cg_time; /* time last written */
- int64_t cg_sparecon64[3]; /* reserved for future use */
- u_int8_t cg_space[1]; /* space for cylinder group maps */
-/* actually longer */
-};
-
-/*
- * The following structure is defined
- * for compatibility with old file systems.
- */
-struct ocg {
- int32_t cg_firstfield; /* historic linked list of cyl groups */
- int32_t cg_unused_1; /* used for incore cyl groups */
- int32_t cg_time; /* time last written */
- int32_t cg_cgx; /* we are the cgx'th cylinder group */
- int16_t cg_ncyl; /* number of cyl's this cg */
- int16_t cg_niblk; /* number of inode blocks this cg */
- int32_t cg_ndblk; /* number of data blocks this cg */
- struct csum cg_cs; /* cylinder summary information */
- int32_t cg_rotor; /* position of last used block */
- int32_t cg_frotor; /* position of last used frag */
- int32_t cg_irotor; /* position of last used inode */
- int32_t cg_frsum[8]; /* counts of available frags */
- int32_t cg_btot[32]; /* block totals per cylinder */
- int16_t cg_b[32][8]; /* positions of free blocks */
- u_int8_t cg_iused[256]; /* used inode map */
- int32_t cg_magic; /* magic number */
- u_int8_t cg_free[1]; /* free block map */
-/* actually longer */
-};
-
-
-/*
- * Macros for access to cylinder group array structures.
- */
-#define old_cg_blktot_old(cgp, ns) \
- (((struct ocg *)(cgp))->cg_btot)
-#define old_cg_blks_old(fs, cgp, cylno, ns) \
- (((struct ocg *)(cgp))->cg_b[cylno])
-
-#define old_cg_blktot_new(cgp, ns) \
- ((int32_t *)((u_int8_t *)(cgp) + \
- ufs_rw32((cgp)->cg_old_btotoff, (ns))))
-#define old_cg_blks_new(fs, cgp, cylno, ns) \
- ((int16_t *)((u_int8_t *)(cgp) + \
- ufs_rw32((cgp)->cg_old_boff, (ns))) + (cylno) * (fs)->fs_old_nrpos)
-
-#define old_cg_blktot(cgp, ns) \
- ((ufs_rw32((cgp)->cg_magic, (ns)) != CG_MAGIC) ? \
- old_cg_blktot_old(cgp, ns) : old_cg_blktot_new(cgp, ns))
-#define old_cg_blks(fs, cgp, cylno, ns) \
- ((ufs_rw32((cgp)->cg_magic, (ns)) != CG_MAGIC) ? \
- old_cg_blks_old(fs, cgp, cylno, ns) : old_cg_blks_new(fs, cgp, cylno, ns))
-
-#define cg_inosused_new(cgp, ns) \
- ((u_int8_t *)((u_int8_t *)(cgp) + \
- ufs_rw32((cgp)->cg_iusedoff, (ns))))
-#define cg_blksfree_new(cgp, ns) \
- ((u_int8_t *)((u_int8_t *)(cgp) + \
- ufs_rw32((cgp)->cg_freeoff, (ns))))
-#define cg_chkmagic_new(cgp, ns) \
- (ufs_rw32((cgp)->cg_magic, (ns)) == CG_MAGIC)
-
-#define cg_inosused_old(cgp, ns) \
- (((struct ocg *)(cgp))->cg_iused)
-#define cg_blksfree_old(cgp, ns) \
- (((struct ocg *)(cgp))->cg_free)
-#define cg_chkmagic_old(cgp, ns) \
- (ufs_rw32(((struct ocg *)(cgp))->cg_magic, (ns)) == CG_MAGIC)
-
-#define cg_inosused(cgp, ns) \
- ((ufs_rw32((cgp)->cg_magic, (ns)) != CG_MAGIC) ? \
- cg_inosused_old(cgp, ns) : cg_inosused_new(cgp, ns))
-#define cg_blksfree(cgp, ns) \
- ((ufs_rw32((cgp)->cg_magic, (ns)) != CG_MAGIC) ? \
- cg_blksfree_old(cgp, ns) : cg_blksfree_new(cgp, ns))
-#define cg_chkmagic(cgp, ns) \
- (cg_chkmagic_new(cgp, ns) || cg_chkmagic_old(cgp, ns))
-
-#define cg_clustersfree(cgp, ns) \
- ((u_int8_t *)((u_int8_t *)(cgp) + \
- ufs_rw32((cgp)->cg_clusteroff, (ns))))
-#define cg_clustersum(cgp, ns) \
- ((int32_t *)((u_int8_t *)(cgp) + \
- ufs_rw32((cgp)->cg_clustersumoff, (ns))))
-
-
-/*
- * Turn file system block numbers into disk block addresses.
- * This maps file system blocks to device size blocks.
- */
-#define fsbtodb(fs, b) ((b) << (fs)->fs_fsbtodb)
-#define dbtofsb(fs, b) ((b) >> (fs)->fs_fsbtodb)
-
-/*
- * Cylinder group macros to locate things in cylinder groups.
- * They calc file system addresses of cylinder group data structures.
- */
-#define cgbase(fs, c) (((daddr_t)(fs)->fs_fpg) * (c))
-#define cgstart_ufs1(fs, c) \
- (cgbase(fs, c) + (fs)->fs_old_cgoffset * ((c) & ~((fs)->fs_old_cgmask)))
-#define cgstart_ufs2(fs, c) cgbase((fs), (c))
-#define cgstart(fs, c) ((fs)->fs_magic == FS_UFS2_MAGIC \
- ? cgstart_ufs2((fs), (c)) : cgstart_ufs1((fs), (c)))
-#define cgdmin(fs, c) (cgstart(fs, c) + (fs)->fs_dblkno) /* 1st data */
-#define cgimin(fs, c) (cgstart(fs, c) + (fs)->fs_iblkno) /* inode blk */
-#define cgsblock(fs, c) (cgstart(fs, c) + (fs)->fs_sblkno) /* super blk */
-#define cgtod(fs, c) (cgstart(fs, c) + (fs)->fs_cblkno) /* cg block */
-
-/*
- * Macros for handling inode numbers:
- * inode number to file system block offset.
- * inode number to cylinder group number.
- * inode number to file system block address.
- */
-#define ino_to_cg(fs, x) ((x) / (fs)->fs_ipg)
-#define ino_to_fsba(fs, x) \
- ((daddr_t)(cgimin(fs, ino_to_cg(fs, x)) + \
- (blkstofrags((fs), (((x) % (fs)->fs_ipg) / INOPB(fs))))))
-#define ino_to_fsbo(fs, x) ((x) % INOPB(fs))
-
-/*
- * Give cylinder group number for a file system block.
- * Give cylinder group block number for a file system block.
- */
-#define dtog(fs, d) ((d) / (fs)->fs_fpg)
-#define dtogd(fs, d) ((d) % (fs)->fs_fpg)
-
-/*
- * Extract the bits for a block from a map.
- * Compute the cylinder and rotational position of a cyl block addr.
- */
-#define blkmap(fs, map, loc) \
- (((map)[(loc) / NBBY] >> ((loc) % NBBY)) & (0xff >> (NBBY -
(fs)->fs_frag)))
-#define old_cbtocylno(fs, bno) \
- (fsbtodb(fs, bno) / (fs)->fs_old_spc)
-#define old_cbtorpos(fs, bno) \
- ((fs)->fs_old_nrpos <= 1 ? 0 : \
- (fsbtodb(fs, bno) % (fs)->fs_old_spc / (fs)->fs_old_nsect *
(fs)->fs_old_trackskew + \
- fsbtodb(fs, bno) % (fs)->fs_old_spc % (fs)->fs_old_nsect *
(fs)->fs_old_interleave) % \
- (fs)->fs_old_nsect * (fs)->fs_old_nrpos / (fs)->fs_old_npsect)
-
-/*
- * The following macros optimize certain frequently calculated
- * quantities by using shifts and masks in place of divisions
- * modulos and multiplications.
- */
-#define blkoff(fs, loc) /* calculates (loc % fs->fs_bsize) */ \
- ((loc) & (fs)->fs_qbmask)
-#define fragoff(fs, loc) /* calculates (loc % fs->fs_fsize) */ \
- ((loc) & (fs)->fs_qfmask)
-#define lfragtosize(fs, frag) /* calculates ((off_t)frag * fs->fs_fsize) */ \
- (((off_t)(frag)) << (fs)->fs_fshift)
-#define lblktosize(fs, blk) /* calculates ((off_t)blk * fs->fs_bsize) */ \
- (((off_t)(blk)) << (fs)->fs_bshift)
-#define lblkno(fs, loc) /* calculates (loc / fs->fs_bsize) */ \
- ((loc) >> (fs)->fs_bshift)
-#define numfrags(fs, loc) /* calculates (loc / fs->fs_fsize) */ \
- ((loc) >> (fs)->fs_fshift)
-#define blkroundup(fs, size) /* calculates roundup(size, fs->fs_bsize) */ \
- (((size) + (fs)->fs_qbmask) & (fs)->fs_bmask)
-#define fragroundup(fs, size) /* calculates roundup(size, fs->fs_fsize) */ \
- (((size) + (fs)->fs_qfmask) & (fs)->fs_fmask)
-#define fragstoblks(fs, frags) /* calculates (frags / fs->fs_frag) */ \
- ((frags) >> (fs)->fs_fragshift)
-#define blkstofrags(fs, blks) /* calculates (blks * fs->fs_frag) */ \
- ((blks) << (fs)->fs_fragshift)
-#define fragnum(fs, fsb) /* calculates (fsb % fs->fs_frag) */ \
- ((fsb) & ((fs)->fs_frag - 1))
-#define blknum(fs, fsb) /* calculates rounddown(fsb, fs->fs_frag) */ \
- ((fsb) &~ ((fs)->fs_frag - 1))
-
-/*
- * Determine the number of available frags given a
- * percentage to hold in reserve.
- */
-#define freespace(fs, percentreserved) \
- (blkstofrags((fs), (fs)->fs_cstotal.cs_nbfree) + \
- (fs)->fs_cstotal.cs_nffree - \
- (((off_t)((fs)->fs_dsize)) * (percentreserved) / 100))
-
-/*
- * Determining the size of a file block in the file system.
- */
-#define blksize(fs, ip, lbn) \
- (((lbn) >= NDADDR || (ip)->i_size >= lblktosize(fs, (lbn) + 1)) \
- ? (fs)->fs_bsize \
- : (fragroundup(fs, blkoff(fs, (ip)->i_size))))
-
-#define sblksize(fs, size, lbn) \
- (((lbn) >= NDADDR || (size) >= ((lbn) + 1) << (fs)->fs_bshift) \
- ? (fs)->fs_bsize \
- : (fragroundup(fs, blkoff(fs, (size)))))
-
-
-/*
- * Number of inodes in a secondary storage block/fragment.
- */
-#define INOPB(fs) ((fs)->fs_inopb)
-#define INOPF(fs) ((fs)->fs_inopb >> (fs)->fs_fragshift)
-
-/*
- * Number of indirects in a file system block.
- */
-#define NINDIR(fs) ((fs)->fs_nindir)
-
-/*
- * Apple UFS Label:
- * We check for this to decide to use APPLEUFS_DIRBLKSIZ
- */
... 22589 lines suppressed ...