/*
+------------------------------------------------------------------------------
| Project   : Device Filesystem
+------------------------------------------------------------------------------
| Copyright 2004, 2005  www.fayfayspace.org.
| All rights reserved.
|------------------------------------------------------------------------------
| File      : dfs_opts.h, the option definitions of Device FileSystem
|------------------------------------------------------------------------------
| Chang Logs:
| Date           Author       Notes
| 2005-01-22     ffxz         The first version.
+------------------------------------------------------------------------------
*/

#ifndef __DFS_CONFIG_H__
#define __DFS_CONFIG_H__

/*
+------------------------------------------------------------------------------
| Device Manager options
+------------------------------------------------------------------------------
*/
/* Device Options parameters */
#define DEVICES_MAX		8
#define DEVICE_NAME_MAX	8

/*
+------------------------------------------------------------------------------
| Device Filesystem options
+------------------------------------------------------------------------------
*/
/* the max length of filesystem name */
#define DFS_FS_NAME_MAX				4
/* the max type of filesystem */
#define DFS_FILESYSTEM_TYPES_MAX	2

/* the max length of path name */
#define DFS_PATH_MAX		256
/* the max length of file name */
#define DFS_FILE_MAX		256

/* options for server task */
#define DFS_MBOX_NUMBER		32
#define DFS_SERVER_STACK	1024
#define DFS_SERVER_PRI		110
#define DFS_SERVER_SLICE	20

/*
+------------------------------------------------------------------------------
| FAT filesystem options
+------------------------------------------------------------------------------
*/
/* file name max length */
#define FAT_NAME_MAX	256
/* max number of FAT filesystem */
#define FATFS_MAX		2

/* the size of sector */
#define SECTOR_SIZE		512

/* FAT table sector cache options */
#define FAT_CACHE_SIZE          0x10        /* config parameter */
#define FAT_CACHE_MASK          (FAT_CACHE_SIZE-1)

#define GET16(x)    (*(x)) | (*((x)+1) << 8)
#define GET32(x)    (*(x)) | (*((x)+1) << 8) | (*((x)+2) << 16) | (*((x)+3) << 24)

#define SET16(x, v)             	\
    do                          	\
    {                           	\
        *(x)     = (v) & 0x00ff; 	\
        (*((x)+1)) = (v) >> 8;     	\
    } while ( 0 )

#define SET32(x, v)                         	\
    do                                      	\
    {                                       	\
        *(x)     = (v)  & 0x000000ff;        	\
        (*((x)+1)) = ((v) >> 8) & 0x000000ff;  	\
        (*((x)+2)) = ((v) >> 16) & 0x000000ff; 	\
        (*((x)+3)) = ((v) >> 24);              	\
    } while ( 0 )

#define DFS_DEBUG_INFO			0x01
#define DFS_DEBUG_WARNING		0x02
#define DFS_DEBUG_ERROR			0x04

#define DFS_DEBUG_LEVEL			(DFS_DEBUG_INFO | DFS_DEBUG_WARNING | DFS_DEBUG_ERROR)

/* #define DFS_DEBUG */
#ifdef DFS_DEBUG
#define dfs_log(level, x)		do { if (level & DFS_DEBUG_LEVEL) 	\
	{rt_kprintf("DFS %s, %d:", __FILE__, __LINE__); rt_kprintf x;	\
	rt_kprintf ("\n");}}while (0)
#else
#define dfs_log(level, x)
#endif

#endif