summaryrefslogblamecommitdiffstats
path: root/private/sdktools/damage/const.h
blob: ff9501e164a370a2e314862f7c0d187d2de56cf3 (plain) (tree)








































































































































































































                                                                                           
/********************************************************************/
/**                     Microsoft LAN Manager                      **/
/**               Copyright(c) Microsoft Corp., 1987-1990          **/
/********************************************************************/

#ifdef DEBUG
#define SAFE 1
#endif

#ifdef SAFE
#define LOGS 1
#endif

/**	Constants for File System		*/

#define MAXPATH 256		/* maximum path length	*/
#define GROWDELT	8
#define MVPFXSIZE       2       /* Size of the multivolume pathname prefix */

/*	Sector sizes		*/

#define SECSIZE 512		/* 512 bytes per sector       */
#define SECSHIFT	9	/* 2^9 = SECSIZE      */
#define SECMSK	01ffh		/* sector size mask   */

#ifdef MASM
	.errnz	SECSIZE-512	/* C code uses 512 as a magic number - grep them out	*/
#endif

/*	Cache Sizes		*/

#define SPB	 4		/* sectors per buffer	     */
#define SPBMASK  3		/* mask for SPB      */
#define SPBSHIFT 2
#ifdef OLD_CACHE
#define BUFCNT	 8
#endif
#define SPBBITS  0fh		/* SPB number of one bits, low order */

#define BMASK	SPB*SECSIZE-1	/* mask offset in to cache block     */
#define BSHIFT	SECSHIFT+SPBSHIFT

/* Buffers reserved for system ( not available to server ) */
/* Percentage, ceiling and floor */

#define PRCNT_BUF_RSRVD 20
#define MAX_BUF_RSRVD 50
#define MIN_BUF_RSRVD 20

/* Max number of buffer to be ineligible for grabbing by GFB */
/* If you play with this number, watch out for the minimum cache size */
#define	MAXBUFADJUSTCNT	20


#define LWBUFCT 16		/* size of reblocking lazy write buffer */

/*	Number of I/O command blocks */
/*		We use one of these for every 16K of server I/O interface */
/*		One per every synchronous I/O		*/
/*		one for read aheads */
/*		none for lazy writes */

#define IOBCNT	 50		/* 50 should be enough */

/*	Directory Lookaside record count		*/

#define DLCNT	10			   /* 10 guys for now	*/

/*	Maximum DIRBLKs we may need to allocate for any given
 *	operation.  This is in effect the maximum tree depth.
 *
 *	Worst case, with 256 character file names and nearly empty
 *	DIRBLKs, 10 is enough levels for 60,000 files - about 40 megabytes
 *	of space just for that directory.  Given more practical file length
 *	names this is enough for 10s of millions of files in a directory.
 */

#define MAX_DIR_NEED  10


/**	Heap Definitions		*/

#define HHSIZ	4		/* size, in bytes, of heap header   */
#define GROHEAPCNT 50		/* grow heap if we have to compact more */
				/*   than once per 50 allocations */

/**	Special Transition Locking Structure size */

#define TRANCNT 4		/* just need 4 spots */


/*	Zero offset
 *
 *	MASM won't take 0.BAK, so we use ZERO.BAK
 */

struct dumy {
	char ZERO;
};	/* dumy  */


/*	Maximum number of volumes that we can mount
 *
 *	The volume ID is kept in the high bits of the sector numbers
 *	kept in our RAM structures,
 *	so there is a tradeoff between max volumes and max sectors.
 *
 *	32 max volumes gives us a 65 billion byte volume limit,
 *	which should last us for a while.  Since sector numbers
 *	are stored on the disk without their volume upper bits
 *	this is strictly an implimentation detail; we can adjust
 *	the number of volumes or eliminate this tradeoff in other
 *	implimentations which will be 100% media compatable.
 *
 *	We use the term VSector to indicate a vol/sector combination
 *	and PSector to indicate just the physical absolute sector #
 *
 */

#define VOLMAX	  32		/* 32 max volumes.  */
#define VOLMNTMAX 24		/* max 20 volumes mounted normally */
				/* see fsdata.asm for details */

#define MAXSEC	134217728	/* 2^32/32 max sectors */

#define SECMASK 0x07FFFFFF	/* mask for sector number */

#define HSECMASK 0x07		/* high byte sector mask */

#define HVOLMASK 0xf8		/* high byte volume mask */
#define SVOLMASK 0x1f		/* shifted right volume mask */

#define VOLRSHIFT (32-5)	/* shift right to extract volume index */
#define VOLLSHIFT 5		/* shift left  to extract volume index */


/**	Signature Values for Disk Structures
 *
 *	These signature values help with debugging and they'll
 *	be used by the CHKDSK utility to help repair disks.
 *
 *	WARNING - the low byte of all valid signatures must be non-zero,
 *	since we destroy signatures by clearing the low byte.	*/

#define J	((('J'-'A')*40+('G'-'A'))*40+'L'-'A')
#define R	((('R'-'A')*40+('P'-'A'))*40+'W'-'A')

#ifdef MASM
#define ABSIGVAL	J*40*40*40 + R			/* allocation blk*/
#define DBSIGVAL     	40000000h + J*40*40*40 + R      /* directory blks	*/
#define FNSIGVAL     	0C0000000h + J*40*40*40 + R      /* fnodes	*/
#else
#define ABSIGVAL	(long)J*40*40*40 + (long)R	/* allocation blk */
#define DBSIGVAL	0x40000000L + (long)J*40*40*40 + (long)R  /* directory blks	 */
#define OLDFNSIGVAL	0x80000000L + (long)J*40*40*40 + (long)R  /* fnodes	 */
#define FNSIGVAL	0xC0000000L + (long)J*40*40*40 + (long)R  /* fnodes	 */
#endif



/**	FastFile bitmaps
 *
 *	0x00000000		  all checking disabled
 *	0x00000001  FF_FLUSHLAZY  DoZap lazy writes are automatically flushed
 *	0x00000002  FF_ZAPSEC	  DoZap blasts sector numbers/sector data
 *	0x00000004  FF_LRUCHK	  vbs verification of LRU/dirty integrity
 *	0x00000008  FF_CHKSUM	  sector checksumming is omitted
 *	0x00000010  FF_PLACECHK   placebuf verifies location of buffer
 *	0x00000020  FF_HEAPCHK	  verify heap headers
 *	0x00000040  FF_DIRMAP	  produce inram map of directory tree
 *	0x00000080  FF_HASHCHN	  check hash chains
 *	0x00000100  FF_HEAPDMP	  dump heap structures
 *	0x00000200  FF_HEAPORPHAN Check for heap orphans at dismount
 *	0x00000400  FF_GODREAD	  Check for read of uninitialized cache data
 *	0x00000800  FF_HEAPYIELD  issue yields in GHS
 */

#define FF_FLUSHLAZY	0x00000001
#define FF_ZAPSEC	0x00000002
#define FF_LRUCHK	0x00000004
#define FF_CHKSUM	0x00000008
#define FF_PLACECHK	0x00000010
#define FF_HEAPCHK	0x00000020
#define FF_DIRMAP	0x00000040
#define FF_HASHCHN	0x00000080
#define FF_HEAPDUMP	0x00000100
#define FF_HEAPORPHAN	0x00000200
#define	FF_GODREAD	0x00000400
#define FF_HEAPYIELD	0x00000800

/*	Dependency dumys.
 *
 *	The assembler won't to an ".errnz" comparing two external
 *	addresses, since it doesn't know their address.  So we
 *	put the .errnz in the module which defines the address,
 *	and we make that location and all folks that rely upon the
 *	relationship reference that dumy.
 *
 *	If you change a relationship with such a dumy definition, you
 *	must find and edit all references to this dumy.
 */