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

📄 filesys.h

📁 open source bios with linux platform, very good and can be reused.
💻 H
字号:
/* GRUB compatibility header  * * taken from filo and grub. *//* *  GRUB  --  GRand Unified Bootloader *  Copyright (C) 1999,2000,2001,2003   Free Software Foundation, Inc. * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License as published by *  the Free Software Foundation; either version 2 of the License, or *  (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//* This disables some portion of code */#define STAGE1_5 1#if defined CONFIG_X86/* * ffz = Find First Zero in word. Undefined if no zero exists, * so code should check against ~0UL first.. */static __inline__ unsigned intffz (unsigned int word){	__asm__ ("bsfl %1,%0"	  : "=r" (word)	  : "r" (~word));	return word;}static __inline__ unsigned intlog2 (unsigned int word){	__asm__ ("bsfl %1,%0"	  : "=r" (word)	  : "r" (word));	return word;}#elif defined (CONFIG_PPC)static __inline__ unsigned long __ilog2(unsigned long x){	unsigned long lz;	asm ("cntlzw %0,%1" : "=r" (lz) : "r" (x));	return 31 - lz;}static __inline__ unsigned longffz(unsigned long x){	if ((x = ~x) == 0)		return 32;	return __ilog2(x & -x);}#define log2(n) ffz(~(n))#elsestatic __inline__ unsigned int log2(unsigned int word){	/* assume 8 bits per byte. */	unsigned int i = 1 << (sizeof(word)*8 - 1);	unsigned int pow = sizeof(word) * 8 - 1;		if (! word) {		/* invalid parameter */		return -1;	}	for(; i > word; i >>= 1, pow--) ;	        return pow;     }#define ffz(n) log2(~(n))#endifstatic inline int substring (const char *s1, const char *s2){  while (*s1 == *s2)    {      /* The strings match exactly. */      if (! *(s1++))	return 0;      s2 ++;    }  /* S1 is a substring of S2. */  if (*s1 == 0)    return -1;  /* S1 isn't a substring. */  return 1;}#define grub_memmove memmove#define grub_strcmp strcmp#define MAXINT 0x7fffffff/* This is only used by fsys_* to determine if it's hard disk. If it is, * they try to guess filesystem type by partition type. I guess it is  * not necessory, so hardcoded to 0 (first floppy) --ts1 */#define current_drive 0#define current_slice 0#define current_partition 0extern unsigned long part_start;extern unsigned long part_length;extern int filepos;extern int filemax;extern int fsmax;/* Error codes (descriptions are in common.c) */typedef enum{  ERR_NONE = 0,  ERR_BAD_FILENAME,  ERR_BAD_FILETYPE,  ERR_BAD_GZIP_DATA,  ERR_BAD_GZIP_HEADER,  ERR_BAD_PART_TABLE,  ERR_BAD_VERSION,  ERR_BELOW_1MB,  ERR_BOOT_COMMAND,  ERR_BOOT_FAILURE,  ERR_BOOT_FEATURES,  ERR_DEV_FORMAT,  ERR_DEV_VALUES,  ERR_EXEC_FORMAT,  ERR_FILELENGTH,  ERR_FILE_NOT_FOUND,  ERR_FSYS_CORRUPT,  ERR_FSYS_MOUNT,  ERR_GEOM,  ERR_NEED_LX_KERNEL,  ERR_NEED_MB_KERNEL,  ERR_NO_DISK,  ERR_NO_PART,  ERR_NUMBER_PARSING,  ERR_OUTSIDE_PART,  ERR_READ,  ERR_SYMLINK_LOOP,  ERR_UNRECOGNIZED,  ERR_WONT_FIT,  ERR_WRITE,  ERR_BAD_ARGUMENT,  ERR_UNALIGNED,  ERR_PRIVILEGED,  ERR_DEV_NEED_INIT,  ERR_NO_DISK_SPACE,  ERR_NUMBER_OVERFLOW,  MAX_ERR_NUM} grub_error_t;extern grub_error_t errnum;#define grub_open file_open#define grub_read file_read#define grub_seek file_seek#define grub_close file_close/* instrumentation variables *//* (Not used in FILO) */extern void (*disk_read_hook) (int, int, int);extern void (*disk_read_func) (int, int, int);#define FSYS_BUFLEN 0x8000extern char FSYS_BUF[FSYS_BUFLEN];#define print_possibilities 0#define SECTOR_SIZE 512#define SECTOR_BITS 9#ifdef CONFIG_FSYS_FATint fat_mount (void);int fat_read (char *buf, int len);int fat_dir (char *dirname);#endif#ifdef CONFIG_FSYS_EXT2FSint ext2fs_mount (void);int ext2fs_read (char *buf, int len);int ext2fs_dir (char *dirname);#endif#ifdef CONFIG_FSYS_MINIXint minix_mount (void);int minix_read (char *buf, int len);int minix_dir (char *dirname);#endif#ifdef CONFIG_FSYS_REISERFSint reiserfs_mount (void);int reiserfs_read (char *buf, int len);int reiserfs_dir (char *dirname);int reiserfs_embed (int *start_sector, int needed_sectors);#endif#ifdef CONFIG_FSYS_JFSint jfs_mount (void);int jfs_read (char *buf, int len);int jfs_dir (char *dirname);int jfs_embed (int *start_sector, int needed_sectors);#endif#ifdef CONFIG_FSYS_XFSint xfs_mount (void);int xfs_read (char *buf, int len);int xfs_dir (char *dirname);#endif#ifdef CONFIG_FSYS_UFSint ufs_mount (void);int ufs_read (char *buf, int len);int ufs_dir (char *dirname);int ufs_embed (int *start_sector, int needed_sectors);#endif#ifdef CONFIG_FSYS_ISO9660int iso9660_mount (void);int iso9660_read (char *buf, int len);int iso9660_dir (char *dirname);#endif/* This is not a flag actually, but used as if it were a flag.  */#define PC_SLICE_TYPE_HIDDEN_FLAG	0x10#define PC_SLICE_TYPE_NONE         	0#define PC_SLICE_TYPE_FAT12        	1#define PC_SLICE_TYPE_FAT16_LT32M  	4#define PC_SLICE_TYPE_EXTENDED     	5#define PC_SLICE_TYPE_FAT16_GT32M  	6#define PC_SLICE_TYPE_FAT32		0xb#define PC_SLICE_TYPE_FAT32_LBA		0xc#define PC_SLICE_TYPE_FAT16_LBA		0xe#define PC_SLICE_TYPE_WIN95_EXTENDED	0xf#define PC_SLICE_TYPE_EZD        	0x55#define PC_SLICE_TYPE_MINIX		0x80#define PC_SLICE_TYPE_LINUX_MINIX	0x81#define PC_SLICE_TYPE_EXT2FS       	0x83#define PC_SLICE_TYPE_LINUX_EXTENDED	0x85#define PC_SLICE_TYPE_VSTAFS		0x9e#define PC_SLICE_TYPE_DELL_UTIL		0xde#define PC_SLICE_TYPE_LINUX_RAID	0xfd/* For convinience.  *//* Check if TYPE is a FAT partition type. Clear the hidden flag before   the check, to allow the user to mount a hidden partition in GRUB.  */#define IS_PC_SLICE_TYPE_FAT(type)	\  ({ int _type = (type) & ~PC_SLICE_TYPE_HIDDEN_FLAG; \     _type == PC_SLICE_TYPE_FAT12 \     || _type == PC_SLICE_TYPE_FAT16_LT32M \     || _type == PC_SLICE_TYPE_FAT16_GT32M \     || _type == PC_SLICE_TYPE_FAT16_LBA \     || _type == PC_SLICE_TYPE_FAT32 \     || _type == PC_SLICE_TYPE_FAT32_LBA \     || _type == PC_SLICE_TYPE_DELL_UTIL; })#define IS_PC_SLICE_TYPE_MINIX(type) \  (((type) == PC_SLICE_TYPE_MINIX)	\   || ((type) == PC_SLICE_TYPE_LINUX_MINIX))#define IS_PC_SLICE_TYPE_BSD_WITH_FS(type,fs) 0/* possible values for the *BSD-style partition type */#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_EXT2FS	17	/* Linux Extended 2 file system */

⌨️ 快捷键说明

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