1*342a1b22SJim906 /*- 2*342a1b22SJim906 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3*342a1b22SJim906 * 4*342a1b22SJim906 * Copyright (c) 2004 Poul-Henning Kamp 5*342a1b22SJim906 * All rights reserved. 6*342a1b22SJim906 * 7*342a1b22SJim906 * Redistribution and use in source and binary forms, with or without 8*342a1b22SJim906 * modification, are permitted provided that the following conditions 9*342a1b22SJim906 * are met: 10*342a1b22SJim906 * 1. Redistributions of source code must retain the above copyright 11*342a1b22SJim906 * notice, this list of conditions and the following disclaimer. 12*342a1b22SJim906 * 2. Redistributions in binary form must reproduce the above copyright 13*342a1b22SJim906 * notice, this list of conditions and the following disclaimer in the 14*342a1b22SJim906 * documentation and/or other materials provided with the distribution. 15*342a1b22SJim906 * 16*342a1b22SJim906 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17*342a1b22SJim906 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18*342a1b22SJim906 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19*342a1b22SJim906 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20*342a1b22SJim906 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21*342a1b22SJim906 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22*342a1b22SJim906 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23*342a1b22SJim906 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24*342a1b22SJim906 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25*342a1b22SJim906 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26*342a1b22SJim906 * SUCH DAMAGE. 27*342a1b22SJim906 */ 28*342a1b22SJim906 #ifndef FAT_BUFOBJ_H 29*342a1b22SJim906 #define FAT_BUFOBJ_H 30*342a1b22SJim906 31*342a1b22SJim906 32*342a1b22SJim906 // Modified to support the Haiku FAT driver. 33*342a1b22SJim906 34*342a1b22SJim906 #include <sys/queue.h> 35*342a1b22SJim906 36*342a1b22SJim906 #include "sys/_rwlock.h" 37*342a1b22SJim906 38*342a1b22SJim906 39*342a1b22SJim906 SLIST_HEAD(buf_list, buf); 40*342a1b22SJim906 41*342a1b22SJim906 // For the device vnode, v_bufobj holds lists of struct bufs that are available for use 42*342a1b22SJim906 // by the functions defined in vfs_bio.c. For all other nodes, v_bufobj is not used. 43*342a1b22SJim906 struct bufobj { 44*342a1b22SJim906 struct rwlock bo_lock; 45*342a1b22SJim906 u_int bo_flag; 46*342a1b22SJim906 47*342a1b22SJim906 // Members added for Haiku port 48*342a1b22SJim906 struct buf_list bo_clusterbufs; 49*342a1b22SJim906 // an SLIST of buffers with b_bufsize equal to cluster size 50*342a1b22SJim906 uint32 bo_clusters; 51*342a1b22SJim906 // count of bufs in bo_clusterbufs 52*342a1b22SJim906 struct buf_list bo_fatbufs; 53*342a1b22SJim906 // SLIST of buffers of the size used to read the FAT. Currently, FAT16 and FAT32 volumes 54*342a1b22SJim906 // read the FAT in 512-byte blocks, and this is only useful for FAT12, which reads it in 55*342a1b22SJim906 // 1536-byte blocks. 56*342a1b22SJim906 uint32 bo_fatblocks; 57*342a1b22SJim906 struct buf_list bo_emptybufs; 58*342a1b22SJim906 // SLIST of buffers with no space allocated for b_data (b_data must be set to point to a 59*342a1b22SJim906 // block in the block cache). 60*342a1b22SJim906 uint32 bo_empties; 61*342a1b22SJim906 }; 62*342a1b22SJim906 63*342a1b22SJim906 #define BO_LOCK(bo) rw_lock_write_lock(BO_LOCKPTR(bo)) 64*342a1b22SJim906 #define BO_UNLOCK(bo) rw_lock_write_unlock(BO_LOCKPTR(bo)) 65*342a1b22SJim906 66*342a1b22SJim906 67*342a1b22SJim906 #endif // FAT_BUFOBJ_H 68