亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cluster.c

?? 嵌入式系統中文件系統源代碼
?? C
字號:
/*************************************************************
File Name: CLUSTER.C                                         *
**************************************************************
Programmer: Huang Giun-Haur
Last Modified Date: 1999/2/1
Compiler : Gnu Cross-compiler
Platform : X86 protection mode
Usage :

	int		FAT_read_cluster(unsigned short cluster, 
				     unsigned short *buffer)

	unsigned short 	FAT_write_cluster(unsigned short cluster,
				      unsigned short *buffer)	

	unsigned short 	FAT_find_free_cluster(void)

	void		FAT_clear_fat_cluster_chain(int fhandle)

	void		FAT_free_fat_cluster_chain(unsigned short startCluster)

	void		FAT_Delete_SubDir_Entry(unsigned short clusterNo, 
					    unsigned short nThEntry,
					    unsigned short *clusterBuffer)

	void		dump_fat1x_cluster_chain(int fhandle)

	void FAT_recycleUnusedCluster(short drive, unsigned short clusterNo)
	
*************************************************************/
#include <sys/syscall.h>

// we're using compiler-versioned stdio.h
#include <stdio.h>

//#include "../../RDebug/include/RDebug.h"

#ifdef _PROCOMP_
  #include "/rtos/driver/FileSys/FileSys.h"
#else
  #include "filesys/include/FileSys.h"
#endif

#include "../include/fat1x.h"
#include "../include/cluster.h"

#ifdef FAT_USE_PCMCIA
  /**** added by chilong ****/
  //#include "../pcm/cf_typedef.h"
  /**** added by chilong ****/

  #include "../include/ata_pcc.h"
#else
  #include "../include/ata_pcc.h"
#endif


#ifdef FAT_ID



//int			FATAtaSemaphoreID;
// modified by chilong 02/08/2002
int			FATAtaSemaphoreID = -1;

unsigned short		FATEndOfChain[16] = {0,	// (0x00) Unknown
						0x0FF8,	// (0x01) FAT12
						0,	// (0x02) non DOS
						0,	// (0x03) non DOS
						0xFFF8,	// (0x04) FAT16 (<32MB)
						0,	// (0x05) Extended
						0xFFF8,	// (0x06) FAT16 (>32MB)
						0,	// (0x07) non DOS
						0,	// (0x08) non DOS
						0,	// (0x09) non DOS
						0,	// (0x0A) non DOS
						0,	// (0x0B) FAT32
						0,	// (0x0C) FAT32 (LBA)
						0,	// (0x0D) non DOS
						0xFFF8,	// (0x0E) FAT16 (>32MB, LBA)
						0	// (0x0F) Extended (LBA)
					       };
unsigned short		FATBadCluster[16] = {	0,	// (0x00) Unknown
						0x0FF7,	// (0x01) FAT12
						0,	// (0x02) non DOS
						0,	// (0x03) non DOS
						0xFFF7,	// (0x04) FAT16 (<32MB)
						0,	// (0x05) Extended
						0xFFF7,	// (0x06) FAT16 (>32MB)
						0,	// (0x07) non DOS
						0,	// (0x08) non DOS
						0,	// (0x09) non DOS
						0,	// (0x0A) non DOS
						0,	// (0x0B) FAT32
						0,	// (0x0C) FAT32 (LBA)
						0,	// (0x0D) non DOS
						0xFFF7,	// (0x0E) FAT16 (>32MB, LBA)
						0	// (0x0F) Extended (LBA)
					      };

#ifdef FAT_CLUSTER_CACHE_ON
/* data cache */
struct FAT_clusterCache FATClusterCache[FAT_CACHE_TAG_NO][FAT_BLOCK_PER_TAG];
unsigned long FATClusterSize = 0;
#endif
#ifdef FAT_FAT_CACHE_ON
/* FAT cache */
struct FAT_fatCache FATFatCache[FAT_FAT_CACHE_BLOCK];
#endif

unsigned short FATBuffer[SECTOR_SIZE / 2];

/* fdebug.c */
#ifdef FAT_CLUSTER_CACHE_ON
#ifdef FAT1X_DEBUG
extern unsigned long FATClusterReadHit;		/* cluster read hit count */
extern unsigned long FATClusterReadMiss;	/* cluster read miss count */
extern unsigned long FATClusterWriteHit;	/* cluster write hit count */
extern unsigned long FATClusterWriteMiss;	/* cluster write miss count */
extern unsigned long FATClusterSwap;		/* cluster cache swap count */
extern unsigned long FATClusterFlush;		/* cluster cache flush count */
#endif
#endif
#ifdef FAT_FAT_CACHE_ON
/* cache statistics */
#ifdef FAT1X_DEBUG
extern unsigned long FATFatReadHit;	/* FAT read hit count */
extern unsigned long FATFatReadMiss;	/* FAT read miss count */
extern unsigned long FATFatWriteHit;	/* FAT write hit count */
extern unsigned long FATFatWriteMiss;	/* FAT write miss count */
extern unsigned long FATFatSwap;	/* FAT cache swap count */
extern unsigned long FATFatFlush;	/* FAT cache flush count */
#endif
#endif

/* init.c */
//extern int		FATFatSemaphoreID;
extern unsigned short	FATSecPerCluster[DRIVE_NUM];
extern unsigned long	FATBytesPerCluster[DRIVE_NUM];
extern unsigned long	FATWordsPerCluster[DRIVE_NUM];
extern unsigned short	FATTotalCluster[DRIVE_NUM];
extern unsigned short  	FATSecPerFAT[DRIVE_NUM];
extern unsigned long  	FAT1Begin[DRIVE_NUM];
extern unsigned long  	FAT2Begin[DRIVE_NUM];
extern unsigned char 	FATType[DRIVE_NUM];
extern unsigned short	FATFreeClusterBegin[DRIVE_NUM];

//extern int		FATErrno;
extern char		FATAvailDrive;

/* fat1x.c */
extern int		FATHdDriver;
extern struct FAT_FILE	**FATHandleTable;



#ifdef FAT_CLUSTER_CACHE_ON
/************************************************************
Function: FAT_init_cluster_cache
Description:
	Initialize the cluster cache
	Clear the buffer information
Output:
	0	SUCCESS
	-1	FAILURE
**************************************************************/
int FAT_init_cluster_cache(void)
{
  int i, j;

#ifdef FAT1X_DEBUG
  SprintStringLn("[FAT_init_cluster_cache]");
#endif

  // find the largest cluster size among the partitions
  for (i = 0; i < FATAvailDrive; i++)
  {
	if (FATBytesPerCluster[i] > FATClusterSize)
		FATClusterSize = FATBytesPerCluster[i];
  }

  /* clean up the buffer information in the data cache */
  for (i = 0; i < FAT_CACHE_TAG_NO; i++)
	for (j = 0; j < FAT_BLOCK_PER_TAG; j++)
	{
		FATClusterCache[i][j].drive = -1;
		FATClusterCache[i][j].cluster_no = 0;
		FATClusterCache[i][j].luCount = 0;
		FATClusterCache[i][j].dirty = FALSE;
		FATClusterCache[i][j].diskBuffer = (void *)ap_malloc(FATClusterSize);
		if (FATClusterCache[i][j].diskBuffer == NULL)
		{
			FATErrno = ERROR_ALLOC_MEM;
			return -1;
		}
	}
  return 0;
}
#endif



#ifdef FAT_FAT_CACHE_ON
/************************************************************
Function: FAT_init_cluster_cache
Description:
	Initialize the FAT cache
	Put the 1st ten sectors from FAT1 to the FAT cache.
Output:
	0	SUCCESS
	-1	FAILURE
**************************************************************/
int FAT_init_fat_cache(void)
{
  short status;
  int i;

#ifdef FAT1X_DEBUG
  SprintStringLn("[FAT_init_fat_cache]");
#endif

  /* read the 1st N sectors from FAT1 to the FAT cache */
  for (i = 0; i < FAT_FAT_CACHE_BLOCK; i++)
  {
  	FATFatCache[i].drive = 0;
	FATFatCache[i].sec_num = i + FAT1Begin[0];
	FATFatCache[i].lu = 0;
	FATFatCache[i].DirtySec = FALSE;
	FATFatCache[i].Entry = (unsigned short *)ap_malloc(SECTOR_SIZE);
	if (FATFatCache[i].Entry == NULL)
	{
		FATErrno = ERROR_ALLOC_MEM;
		return -1;
	}

	sc_waitSemaphore(FATAtaSemaphoreID);

	status = ATA_READ(FATHdDriver, 1, i + FAT1Begin[0], FATFatCache[i].Entry);

	sc_signalSemaphore(FATAtaSemaphoreID);

	if (status == ATA_FAILURE)
	{
		FATErrno = ERROR_ATA_READ;
		return -1;
	}
  }
  return 0;
}
#endif



/*************************************************************
Function: FAT_read_cluster
Description:
	Read the start cluster recorded in the dir entry
Input:
	drive - read the cluster from this drive
	cluster - the target cluster number
	buffer - buffer to hold the content of the cluster
Output:
	-1 -> read error
**************************************************************/
int FAT_read_cluster(short drive, unsigned short cluster, unsigned short *buffer)
{
  unsigned short	status;
  unsigned long		readSecNO;
#ifdef FAT_CLUSTER_CACHE_ON
  unsigned short	*p;
  unsigned long		mincount;
  int			tag, i, j;
  char			flushDrive;
#endif

#ifdef FAT1X_DEBUG
  SprintStringLn("[FAT_read_cluster]");
#endif

  /**** added by chilong 01/28/2002 ****/
  if (cluster >= (FATTotalCluster[drive] + 2) || cluster < NO_OF_RESERVED_CLUSTER)
  {
	return -1;
  }
  /**** added by chilong 01/28/2002 ****/

#ifdef FAT_CLUSTER_CACHE_ON	/* if cluster cache is available */

  /* clusters are assigned to cache tag in interleaved way */
  tag = cluster % FAT_CACHE_TAG_NO;

  /* check if the requested cluster is already in the cache */
  for (i = 0; i < FAT_BLOCK_PER_TAG; i++)
  {
	if ((cluster == FATClusterCache[tag][i].cluster_no) && (drive == FATClusterCache[tag][i].drive))
	{
		/* requested cluster found in cache */
#ifdef FAT1X_DEBUG
		/* data hit count scores 1 */
		FATClusterReadHit++;
#endif
		/* move the data from cache to the user buffer */
		for (j = 0; j < FATWordsPerCluster[drive]; j++)
		{
			*(buffer + j) = *(FATClusterCache[tag][i].diskBuffer + j);
		}
		/* the buffer has been accessed once more */
		FATClusterCache[tag][i].luCount++;
		return SUCCESS;
	}
  }

  /* cache miss, read the data from the drive to user buffer */
#ifdef FAT1X_DEBUG
  /* data miss count scores 1 */
  FATClusterReadMiss++;
#endif

  readSecNO = FAT_cluster_to_logical_sector(drive, cluster);

  sc_waitSemaphore(FATAtaSemaphoreID);	// 玂臔 ATA ざ

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色哟哟亚洲精品| 欧美日韩一区成人| 亚洲国产色一区| 久久久久久久久久美女| 91黄视频在线观看| 国模套图日韩精品一区二区| 一区二区三区精品在线观看| 久久久午夜精品理论片中文字幕| 在线一区二区三区| 成人激情免费视频| 久草热8精品视频在线观看| 樱花影视一区二区| 中文字幕av一区二区三区高| 日韩女优毛片在线| 欧美色综合网站| 不卡大黄网站免费看| 狠狠色综合播放一区二区| 午夜视频一区在线观看| 亚洲男同性视频| 国产精品日产欧美久久久久| 精品欧美乱码久久久久久1区2区| 欧美性高清videossexo| 91欧美一区二区| 成人高清视频在线| 国产一二三精品| 麻豆精品久久久| 日韩国产欧美三级| 偷拍日韩校园综合在线| 午夜精品123| 性做久久久久久久久| 亚洲伊人伊色伊影伊综合网| 亚洲色图欧美偷拍| 中文字幕一区二区三区蜜月| 国产欧美一区二区精品性| 久久色.com| 久久免费看少妇高潮| 精品福利一区二区三区免费视频| 欧美一级在线免费| 欧美一级黄色录像| 欧美一区二区大片| 日韩你懂的在线播放| 日韩精品最新网址| 精品国精品国产尤物美女| 51精品视频一区二区三区| 在线不卡中文字幕| 91精品视频网| 欧美精品一区二区三| 欧美精品一区二区蜜臀亚洲| 久久久综合九色合综国产精品| 久久久久久久综合狠狠综合| 国产日韩欧美一区二区三区乱码| 国产亚洲综合性久久久影院| 欧美国产精品一区二区| 亚洲人成在线播放网站岛国| 亚洲精品视频在线看| 亚洲r级在线视频| 日韩vs国产vs欧美| 韩国一区二区三区| 成人aa视频在线观看| 91美女精品福利| 69久久夜色精品国产69蝌蚪网| 欧美成人video| 国产蜜臀av在线一区二区三区| 1000部国产精品成人观看| 一区二区三区四区精品在线视频| 日韩精品久久久久久| 国内成人精品2018免费看| 91尤物视频在线观看| 欧美精选午夜久久久乱码6080| 日韩欧美美女一区二区三区| 中文字幕高清不卡| 亚洲妇熟xx妇色黄| 国产乱码精品1区2区3区| 99国产麻豆精品| 欧美电影在哪看比较好| 久久久久久久久久久99999| 亚洲三级小视频| 蜜桃传媒麻豆第一区在线观看| 成人三级伦理片| 欧美二区在线观看| 国产精品免费看片| 日本午夜精品视频在线观看| 国产成人精品网址| 欧美在线不卡一区| 国产婷婷一区二区| 亚洲国产欧美日韩另类综合 | 国产高清久久久久| 色妞www精品视频| 精品奇米国产一区二区三区| 亚洲精品国产a久久久久久| 国产在线精品一区在线观看麻豆| 色香蕉久久蜜桃| 欧美极品xxx| 美腿丝袜一区二区三区| 色播五月激情综合网| 久久综合九色欧美综合狠狠| 亚洲一区二区三区自拍| 国产成人高清在线| 69堂成人精品免费视频| 亚洲另类春色校园小说| 国产美女精品一区二区三区| 欧美撒尿777hd撒尿| 国产精品视频你懂的| 乱中年女人伦av一区二区| 欧美中文字幕久久| 最新高清无码专区| 国产精品99久久久久| 日韩免费看的电影| 午夜在线成人av| 91丨九色丨黑人外教| 国产视频一区在线观看 | 亚洲成人第一页| 成人av网站在线观看| 精品福利一二区| 美脚の诱脚舐め脚责91| 欧美日韩久久不卡| 一区二区三区加勒比av| youjizz国产精品| 久久精品一区二区| 久久丁香综合五月国产三级网站| 欧美剧在线免费观看网站 | 国产乱码精品一品二品| 欧美一区二区福利在线| 婷婷综合久久一区二区三区| 欧美在线观看18| 亚洲国产综合色| 在线视频欧美精品| 一区二区三区鲁丝不卡| 色狠狠色狠狠综合| 亚洲另类在线一区| 在线观看日产精品| 一区二区三区四区不卡视频| 9久草视频在线视频精品| 国产精品久久久久影视| 丁香桃色午夜亚洲一区二区三区| 久久亚洲综合色| 国产不卡视频一区| 国产色爱av资源综合区| 国产成人精品综合在线观看| 国产精品午夜免费| www.日韩av| 亚洲精品免费看| 欧美日韩不卡一区二区| 婷婷国产在线综合| 欧美成人a在线| 韩国视频一区二区| 久久久久久免费毛片精品| 国产精品18久久久久| 日本一区二区不卡视频| 91香蕉视频mp4| 亚洲视频免费在线观看| 欧洲亚洲精品在线| 日韩av成人高清| 久久亚洲精精品中文字幕早川悠里| 国产另类ts人妖一区二区| 国产欧美综合色| 色天天综合久久久久综合片| 亚洲国产精品久久不卡毛片| 91精品国产综合久久精品app| 蜜桃视频在线一区| 国产欧美一区二区精品忘忧草| 91免费精品国自产拍在线不卡| 亚洲国产裸拍裸体视频在线观看乱了 | 日韩精品一区二区三区蜜臀| 国产乱码精品一区二区三区忘忧草| 中文字幕不卡在线观看| 欧美视频在线一区二区三区| 日本少妇一区二区| 国产精品污网站| 欧美三级资源在线| 狠狠色丁香婷综合久久| 国产精品久久久久久一区二区三区| 在线观看成人免费视频| 久久精品国产99国产精品| 日本一区二区视频在线| 欧美羞羞免费网站| 国产一区二区三区在线观看精品| 亚洲天堂成人网| 日韩亚洲欧美一区| 91蜜桃在线免费视频| 美腿丝袜亚洲综合| 亚洲人成网站影音先锋播放| 91精品国产综合久久久蜜臀粉嫩 | 成人av集中营| 婷婷中文字幕一区三区| 国产精品水嫩水嫩| 日韩欧美一级特黄在线播放| 成人av电影免费观看| 日本少妇一区二区| 最新中文字幕一区二区三区| 日韩午夜激情视频| 在线一区二区视频| 国产91在线|亚洲| 日韩国产高清影视| 亚洲乱码中文字幕综合| 久久久久久久电影| 日韩一区二区不卡| 色婷婷av久久久久久久| 高清不卡在线观看| 蜜桃视频第一区免费观看|