⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 util.h

📁 讲述linux的初始化过程
💻 H
📖 第 1 页 / 共 2 页
字号:
/* *  linux/fs/ufs/util.h * * Copyright (C) 1998  * Daniel Pirkl <daniel.pirkl@email.cz> * Charles University, Faculty of Mathematics and Physics */#include <linux/fs.h>#include "swab.h"/* * some useful macros */#define in_range(b,first,len)	((b)>=(first)&&(b)<(first)+(len))#define min(x,y)		((x)<(y)?(x):(y))#define max(x,y)		((x)>(y)?(x):(y))/* * macros used for retyping */#define UCPI_UBH ((struct ufs_buffer_head *)ucpi)#define USPI_UBH ((struct ufs_buffer_head *)uspi)/* * macros used for accesing structures */#define ufs_get_fs_state(usb1,usb3) _ufs_get_fs_state_(usb1,usb3,flags,swab)static inline __s32 _ufs_get_fs_state_(struct ufs_super_block_first * usb1,	struct ufs_super_block_third * usb3, unsigned flags, unsigned swab){	switch (flags & UFS_ST_MASK) {		case UFS_ST_SUN:			return SWAB32((usb3)->fs_u2.fs_sun.fs_state);		case UFS_ST_SUNx86:			return SWAB32((usb1)->fs_u1.fs_sunx86.fs_state);		case UFS_ST_44BSD:		default:			return SWAB32((usb3)->fs_u2.fs_44.fs_state);	}}#define ufs_set_fs_state(usb1,usb3,value) _ufs_set_fs_state_(usb1,usb3,value,flags,swab)static inline void _ufs_set_fs_state_(struct ufs_super_block_first * usb1,	struct ufs_super_block_third * usb3, __s32 value, unsigned flags, unsigned swab){	switch (flags & UFS_ST_MASK) {		case UFS_ST_SUN:			(usb3)->fs_u2.fs_sun.fs_state = SWAB32(value);			break;		case UFS_ST_SUNx86:			(usb1)->fs_u1.fs_sunx86.fs_state = SWAB32(value);			break;		case UFS_ST_44BSD:			(usb3)->fs_u2.fs_44.fs_state = SWAB32(value);			break;	}}#define ufs_get_fs_npsect(usb1,usb3) _ufs_get_fs_npsect_(usb1,usb3,flags,swab)static inline __u32 _ufs_get_fs_npsect_(struct ufs_super_block_first * usb1,	struct ufs_super_block_third * usb3, unsigned flags, unsigned swab){	if ((flags & UFS_ST_MASK) == UFS_ST_SUNx86)		return SWAB32((usb3)->fs_u2.fs_sunx86.fs_npsect);	else		return SWAB32((usb1)->fs_u1.fs_sun.fs_npsect);}#define ufs_get_fs_qbmask(usb3) _ufs_get_fs_qbmask_(usb3,flags,swab)static inline __u64 _ufs_get_fs_qbmask_(struct ufs_super_block_third * usb3,	unsigned flags, unsigned swab){	__u64 tmp;	switch (flags & UFS_ST_MASK) {		case UFS_ST_SUN:			((u32 *)&tmp)[0] = usb3->fs_u2.fs_sun.fs_qbmask[0];			((u32 *)&tmp)[1] = usb3->fs_u2.fs_sun.fs_qbmask[1];			break;		case UFS_ST_SUNx86:			((u32 *)&tmp)[0] = usb3->fs_u2.fs_sunx86.fs_qbmask[0];			((u32 *)&tmp)[1] = usb3->fs_u2.fs_sunx86.fs_qbmask[1];			break;		case UFS_ST_44BSD:			((u32 *)&tmp)[0] = usb3->fs_u2.fs_44.fs_qbmask[0];			((u32 *)&tmp)[1] = usb3->fs_u2.fs_44.fs_qbmask[1];			break;	}	return SWAB64(tmp);}#define ufs_get_fs_qfmask(usb3) _ufs_get_fs_qfmask_(usb3,flags,swab)static inline __u64 _ufs_get_fs_qfmask_(struct ufs_super_block_third * usb3,	unsigned flags, unsigned swab){	__u64 tmp;	switch (flags & UFS_ST_MASK) {		case UFS_ST_SUN:			((u32 *)&tmp)[0] = usb3->fs_u2.fs_sun.fs_qfmask[0];			((u32 *)&tmp)[1] = usb3->fs_u2.fs_sun.fs_qfmask[1];			break;		case UFS_ST_SUNx86:			((u32 *)&tmp)[0] = usb3->fs_u2.fs_sunx86.fs_qfmask[0];			((u32 *)&tmp)[1] = usb3->fs_u2.fs_sunx86.fs_qfmask[1];			break;		case UFS_ST_44BSD:			((u32 *)&tmp)[0] = usb3->fs_u2.fs_44.fs_qfmask[0];			((u32 *)&tmp)[1] = usb3->fs_u2.fs_44.fs_qfmask[1];			break;	}	return SWAB64(tmp);}#define ufs_get_de_namlen(de) \	(((flags & UFS_DE_MASK) == UFS_DE_OLD) \	? SWAB16(de->d_u.d_namlen) \	: de->d_u.d_44.d_namlen)#define ufs_set_de_namlen(de,value) \	(((flags & UFS_DE_MASK) == UFS_DE_OLD) \	? (de->d_u.d_namlen = SWAB16(value)) \	: (de->d_u.d_44.d_namlen = value))#define ufs_set_de_type(de,mode) _ufs_set_de_type_(de,mode,flags,swab)static inline void _ufs_set_de_type_(struct ufs_dir_entry * de, int mode, 	unsigned flags, unsigned swab){	if ((flags & UFS_DE_MASK) == UFS_DE_44BSD) {		switch (mode & S_IFMT) {			case S_IFSOCK: de->d_u.d_44.d_type = DT_SOCK; break;			case S_IFLNK: de->d_u.d_44.d_type = DT_LNK; break;			case S_IFREG: de->d_u.d_44.d_type = DT_REG; break;			case S_IFBLK: de->d_u.d_44.d_type = DT_BLK; break;			case S_IFDIR: de->d_u.d_44.d_type = DT_DIR; break;			case S_IFCHR: de->d_u.d_44.d_type = DT_CHR; break;			case S_IFIFO: de->d_u.d_44.d_type = DT_FIFO; break;			default: de->d_u.d_44.d_type = DT_UNKNOWN;		}	}}#define ufs_get_inode_uid(inode) _ufs_get_inode_uid_(inode,flags,swab)static inline __u32 _ufs_get_inode_uid_(struct ufs_inode * inode,	unsigned flags, unsigned swab){	switch (flags & UFS_UID_MASK) {		case UFS_UID_EFT:			return SWAB32(inode->ui_u3.ui_sun.ui_uid);		case UFS_UID_44BSD:			return SWAB32(inode->ui_u3.ui_44.ui_uid);		default:			return SWAB16(inode->ui_u1.oldids.ui_suid);	}}#define ufs_set_inode_uid(inode,value) _ufs_set_inode_uid_(inode,value,flags,swab)static inline void _ufs_set_inode_uid_(struct ufs_inode * inode, __u32 value,	unsigned flags, unsigned swab){	inode->ui_u1.oldids.ui_suid = SWAB16(value); 	switch (flags & UFS_UID_MASK) {		case UFS_UID_EFT:			inode->ui_u3.ui_sun.ui_uid = SWAB32(value);			break;		case UFS_UID_44BSD:			inode->ui_u3.ui_44.ui_uid = SWAB32(value);			break;	}}#define ufs_get_inode_gid(inode) _ufs_get_inode_gid_(inode,flags,swab)static inline __u32 _ufs_get_inode_gid_(struct ufs_inode * inode, 	unsigned flags, unsigned swab){	switch (flags & UFS_UID_MASK) {		case UFS_UID_EFT:			return SWAB32(inode->ui_u3.ui_sun.ui_gid);		case UFS_UID_44BSD:			return SWAB32(inode->ui_u3.ui_44.ui_gid);		default:			return SWAB16(inode->ui_u1.oldids.ui_sgid);	}}#define ufs_set_inode_gid(inode,value) _ufs_set_inode_gid_(inode,value,flags,swab)static inline void _ufs_set_inode_gid_(struct ufs_inode * inode, __u32 value, 	unsigned flags, unsigned swab){	inode->ui_u1.oldids.ui_sgid =  SWAB16(value);	switch (flags & UFS_UID_MASK) {		case UFS_UID_EFT:			inode->ui_u3.ui_sun.ui_gid = SWAB32(value);			break;		case UFS_UID_44BSD:			inode->ui_u3.ui_44.ui_gid = SWAB32(value);			break;	}}/* * These functions manipulate ufs buffers */#define ubh_bread(dev,fragment,size) _ubh_bread_(uspi,dev,fragment,size)  extern struct ufs_buffer_head * _ubh_bread_(struct ufs_sb_private_info *, kdev_t, unsigned, unsigned);extern struct ufs_buffer_head * ubh_bread_uspi(struct ufs_sb_private_info *, kdev_t, unsigned, unsigned);extern void ubh_brelse (struct ufs_buffer_head *);extern void ubh_brelse_uspi (struct ufs_sb_private_info *);extern void ubh_mark_buffer_dirty (struct ufs_buffer_head *);extern void ubh_mark_buffer_uptodate (struct ufs_buffer_head *, int);extern void ubh_ll_rw_block (int, unsigned, struct ufs_buffer_head **);extern void ubh_wait_on_buffer (struct ufs_buffer_head *);extern unsigned ubh_max_bcount (struct ufs_buffer_head *);extern void ubh_bforget (struct ufs_buffer_head *);extern int  ubh_buffer_dirty (struct ufs_buffer_head *);#define ubh_ubhcpymem(mem,ubh,size) _ubh_ubhcpymem_(uspi,mem,ubh,size)extern void _ubh_ubhcpymem_(struct ufs_sb_private_info *, unsigned char *, struct ufs_buffer_head *, unsigned);#define ubh_memcpyubh(ubh,mem,size) _ubh_memcpyubh_(uspi,ubh,mem,size)extern void _ubh_memcpyubh_(struct ufs_sb_private_info *, struct ufs_buffer_head *, unsigned char *, unsigned);/* * macros to get important structures from ufs_buffer_head */#define ubh_get_usb_first(ubh) \	((struct ufs_super_block_first *)((ubh)->bh[0]->b_data))#define ubh_get_usb_second(ubh) \	((struct ufs_super_block_second *)(ubh)-> \	bh[UFS_SECTOR_SIZE >> uspi->s_fshift]->b_data + (UFS_SECTOR_SIZE & ~uspi->s_fmask))#define ubh_get_usb_third(ubh) \	((struct ufs_super_block_third *)((ubh)-> \	bh[UFS_SECTOR_SIZE*2 >> uspi->s_fshift]->b_data + (UFS_SECTOR_SIZE*2 & ~uspi->s_fmask)))#define ubh_get_ucg(ubh) \	((struct ufs_cylinder_group *)((ubh)->bh[0]->b_data))/* * Extract byte from ufs_buffer_head * Extract the bits for a block from a map inside ufs_buffer_head */#define ubh_get_addr8(ubh,begin) \	((u8*)(ubh)->bh[(begin) >> uspi->s_fshift]->b_data + \	((begin) & ~uspi->s_fmask))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -