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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? systemace_drv.c

?? 文件系統(tǒng)轅馬,想要的258031823大幅度反對(duì)反對(duì)法
?? C
字號(hào):
/*
**********************************************************************
*                          Micrium, Inc.
*                      949 Crestview Circle
*                     Weston,  FL 33327-1848
*
*                            uC/FS
*
*             (c) Copyright 2001 - 2003, Micrium, Inc.
*                      All rights reserved.
*
***********************************************************************

----------------------------------------------------------------------
File        : SystemAce_drv.h 
Purpose     : Example driver for the XILINK SystemAce CompactFlash
              driver chip. This driver exampe should give you an easy
              start for the SystemAce chip. Originally this driver
              was designed for the XILINK Multimedia Board II.

---------------------------END-OF-HEADER------------------------------
*/
/*********************************************************************
*
*             #include Section
*
**********************************************************************
*/

#include "FS_ConfDefaults.h"        /* FS Configuration */
#include "fs_dev.h" 
#include "fs_lbl.h" 

#if FS_USE_IDE_DRIVER

#include "fs_api.h"

/**** SYSTEM ACE SPECIFIC CODE ****/
/*
#include "xsysace.h"
#include "xsysace_l.h"
*/
#define XSysAce int
#define Xboolean int
/**********************************/

/*********************************************************************
*
*             Defines
*
**********************************************************************
*/

/**** SYSTEM ACE SPECIFIC CODE ****/
/* IMPORTANT: Include xsysace_g.c to create a list of available devices. */

#define FS__DEV_MBRFLAG_CLI     0xFA
#define FS__DEV_MBRFLAG_JUMP1   0xEB
#define FS__DEV_MBRFLAG_JUMP2   0xE9
#define FS__DEV_MBRSECTORFLAG_L 0x55
#define FS__DEV_MBRSECTORFLAG_H 0xAA

#define FS__DEV_PART_0_TABLE    0x01BE
/*********************************************************************
*
*             Local Variables        
*
**********************************************************************
*/

static FS_U32   _FS_SYSACE_logicalstart[FS_IDE_MAXUNIT]; /* start of partition         */
static char     _FS_SYSACE_mbrbuffer   [0x200];          /* buffer for reading MBR     */   
static char     _FS_SYSACE_diskchange  [FS_IDE_MAXUNIT]; /* signal flag for driver     */
static char     _FS_SYSACE_busycnt     [FS_IDE_MAXUNIT]; /* counter for BSY LED on/off */

/**** SYSTEM ACE SPECIFIC CODE ****/
static XSysAce  _FS_XSYSTEMACE; /* the SystemAce context */
static XSysAce *Addr_Of_Ace = &_FS_XSYSTEMACE;
/**********************************/

/*********************************************************************
*
*             Local functions
*
**********************************************************************
*/

/*********************************************************************
*
*             FS_GetMediaStartSec
*
*  Description:
*    FS api function. Get logical start sector from master boot record
*    or partition table.
*
*  Parameters:
*    DevIndex        - DevIndex number.
*    pBuffer         - A pointer to a buffer containing the first
*                      sector of the media. This should contain the
*                      master boot record (MBR) or Bios Parameter Block
*                      (BPB) if the device has no partition table.
* 
*  Return value:
*    < 0xFFFF        - Number of the first sector of the medium.
*    ==0xFFFF        - No valid MBR/BPB found.
*/

FS_U32 FS_GetMediaStartSec(const FS_U8 *pBuffer) {
  FS_U8  c;
  FS_U32 StartSec;
 
  c = pBuffer[0x1FE]; /* check first part of the signature */
  if (c != FS__DEV_MBRSECTORFLAG_L) {
     return 0xFFFFFFFF;
  }

  c = pBuffer[0x1FF]; /* check second part of the signature */
  if (c != FS__DEV_MBRSECTORFLAG_H) {
    return 0xFFFFFFFF;
  }

  c = pBuffer[0x000]; /* check if boot or partition record */
  if (c == FS__DEV_MBRFLAG_JUMP1) {
    return 0; /* if first byte is a jump command, there is no partition table */
  } 

  if (c == FS__DEV_MBRFLAG_JUMP2) {
    return 0; /* if first byte is a jump command, there is no partition table */
  } /* this calculation makes sure big/little endian system get the right value from the table */
  /* read first entry of the partition table */
  StartSec  = (FS_U32)pBuffer[FS__DEV_PART_0_TABLE + 11] & 0xFFUL;
  StartSec <<= 8;
  StartSec += (FS_U32)pBuffer[FS__DEV_PART_0_TABLE + 10] & 0xFFUL;
  StartSec <<= 8;
  StartSec += (FS_U32)pBuffer[FS__DEV_PART_0_TABLE + 9] & 0xFFUL;
  StartSec <<= 8;
  StartSec += (FS_U32)pBuffer[FS__DEV_PART_0_TABLE + 8] & 0xFFUL; 

 return StartSec;
}


/*********************************************************************
*
*             _FS_SYSACE_DevStatus
*
  Description:
  FS driver function. Get status of the media.

  Parameters:
  Unit        - Unit number.
 
  Return value:
  ==1 (FS_LBL_MEDIACHANGED) - The media of the device has changed.
  ==0                       - Device okay and ready for operation.
  <0                        - An error has occured.
*/

static int _FS_SYSACE_DevStatus(FS_U8 Unit) {
  static int init=0;
  char a;
  Xboolean CFdetected;
  int  BytesRead;
  FS_U32 ul;
  if (!init) {
    /* 
     The function is called the first time. For each unit,
     the flag for 'diskchange' is set. That makes sure, that
     FS_LBL_MEDIACHANGED is returned, if there is already a
     media in the reader.
    */
    for (init = 0; init < FS_IDE_MAXUNIT; init++) {
      _FS_SYSACE_diskchange[init] = 1;
    }
    /**** uC/FS CF CODE **************/
    /* None. */
    /**** SYSTEM ACE SPECIFIC CODE ****/
    XSysAce_Initialize(Addr_Of_Ace, Unit); /* init the SystemAce */
    /* PG THIS IS A MULTIMEDIA BOARD SPECIFIC ACTION */
    /* PG Writing Control Reg FORCECFGMODE Bit To Overide ON-BOARD CFGMODE Pin */
    XSysAce_RegWrite32((Addr_Of_Ace->BaseAddress) + XSA_CR_OFFSET, (0x00000808));
    /* RESET THE ACE CONFIG CONTROLLER TO REMOVE ANY EXISTING ERRORS */
    XSysAce_ResetCfg (Addr_Of_Ace); 
    /* IT TAKES SOME TIME FOR THE CF TO RECOVER FROM THE RESET */
    /* WAIT FOR RESET RECOVERY */
    while (!XSysAce_mIsReadyForCmd(Addr_Of_Ace->BaseAddress));
     /**********************************/
    init = 1;
  }
  /**** uC/FS CF CODE **************/
  /* Check if a card is present */
  /*
  a = FS_IDE_HW_X_DetectStatus(Unit);
  if (a) {
    return -1;  No card in reader 
  }
  */
  /**** SYSTEM ACE SPECIFIC CODE ****/
  CFdetected = (XSysAce_mGetStatusReg(_FS_XSYSTEMACE.BaseAddress) &
                XSA_SR_CFDETECT_MASK);
  if (!CFdetected) {
    return -1;  /* No card in reader */
  }
  /**********************************/

  /* When you get here, then there is a card in the reader */
  a = _FS_SYSACE_diskchange[Unit];  /* Check if the media has changed */
  if (a) {
    /* 
       A diskchange took place. The following code reads the MBR of the
       card to get its partition information.
    */
    _FS_SYSACE_diskchange[Unit] = 0;  /* Reset 'diskchange' flag */
    /**** uC/FS CF CODE **************/
    /*
    FS__IDE_Init(Unit);
    x = FS__IDE_ReadSector(Unit, 0, (unsigned char*)&_FS_ide_mbrbuffer[0]);
    if (x != 0) {
      return -1;
    }
    */
    /**** SYSTEM ACE SPECIFIC CODE ****/
    /*READ (1) 512 BYTE SECTOR */
    BytesRead = XSysAce_ReadSector(_FS_XSYSTEMACE.BaseAddress, 0, 
    (unsigned char*)&_FS_SYSACE_mbrbuffer[0]);
    /* VERIFY FULL SECTOR RECEIVED */
    if (BytesRead != 512) {
      return -1;
    }
    /* Calculate start sector of the first partition */
    ul = FS_GetMediaStartSec((unsigned char*)_FS_SYSACE_mbrbuffer);
    if (ul == 0xFFFFFFFF) { /* check if MBR was invalid */
      return (int)FS_ERR_INVALIDDESC;
    }
    _FS_SYSACE_logicalstart[Unit] = ul;
    return FS_LBL_MEDIA_CHANGED;
  }
  return 0;
}


/*********************************************************************
*
*             _FS_SYSACE_DevRead
*
  Description:
  FS driver function. Read a sector from the media.

  Parameters:
  Unit        - Unit number.
  Sector      - Sector to be read from the device.
  pBuffer     - Pointer to buffer for storing the data.
 
  Return value:
  ==0         - Sector has been read and copied to pBuffer.
  <0          - An error has occured.
*/

static int _FS_SYSACE_DevRead(FS_U8 Unit, FS_U32 Sector, void *pBuffer) {
  int BytesRead;


  /**** uC/FS CF CODE **************/
  /* x = FS__IDE_ReadSector(Unit, Sector + _FS_ide_logicalstart[Unit], (unsigned char*)pBuffer); */
  /* 
  if (x != 0) {
    x = -1;
  }
  */
  /**** SYSTEM ACE SPECIFIC CODE ****/
  /* READ (1) 512 BYTE SECTOR */
  BytesRead = XSysAce_ReadSector(_FS_XSYSTEMACE.BaseAddress, Sector + _FS_SYSACE_logicalstart[Unit], (unsigned char*) pBuffer);
  /* VERIFY FULL SECTOR RECEIVED */
  if (BytesRead != 512) {
    return -1;
  }
  return 0;
}

/*********************************************************************
*
*             _FS_SYSACE_DevWrite
*
  Description:
  FS driver function. Write sector to the media.

  Parameters:
  Unit        - Unit number.
  Sector      - Sector to be written to the device.
  pBuffer     - Pointer to data to be stored.
 
  Return value:
  ==0         - Sector has been written to the device.
  <0          - An error has occured.
*/

static int _FS_SYSACE_DevWrite(FS_U8 Unit, FS_U32 Sector, void *pBuffer) {
  int BytesWritten;
  /* WAIT FOR ACE READY */
  while (!XSysAce_mIsReadyForCmd(Addr_Of_Ace->BaseAddress)); 
  /* FORCE MPU LOCK */
  XSysAce_Lock(Addr_Of_Ace, XTRUE);
  /* WRITE THE SECTOR LOGICAL BLOCK ADDRESS (LBA) */
  XSysAce_RegWrite32(Addr_Of_Ace->BaseAddress + XSA_MLR_OFFSET, Sector);
  /* SEND WRITE COMMAND FOR (1) 512 BYTE SECTOR */
  XSysAce_RegWrite16(Addr_Of_Ace->BaseAddress + XSA_SCCR_OFFSET, 0x401);
  /* RESET ACE ASIC CONFIG CONTROLLER DUE TO A SILICON BUG */
  XSysAce_mOrControlReg(Addr_Of_Ace->BaseAddress, XSA_CR_CFGRESET_MASK);
  BytesWritten = XSysAce_WriteDataBuffer(Addr_Of_Ace->BaseAddress, (unsigned char*)pBuffer, 512);
  /* CLEAR RESET AND UNLOCK ACE */
  XSysAce_mAndControlReg(Addr_Of_Ace->BaseAddress, ~(XSA_CR_CFGRESET_MASK | XSA_CR_LOCKREQ_MASK));
  /* LET CF FINISH WRITE BEFORE RETURNING CONTROL TO CALLING FUNCTION */
  while (!XSysAce_mIsReadyForCmd(Addr_Of_Ace->BaseAddress));
  /* VERIFY FULL SECTOR TRANSFER */
  if (BytesWritten != 512) {
    return -1;
  }
  return 0;
}


/*********************************************************************
*
*             _FS_SYSACE_DevIoCtl
*
  Description:
  FS driver function. Execute device command.

  Parameters:
  Unit        - Unit number.
  Cmd         - Command to be executed.
  Aux         - Parameter depending on command.
  pBuffer     - Pointer to a buffer used for the command.
 
  Return value:
  Command specific. In general a negative value means an error.
*/

static int _FS_SYSACE_DevIoCtl(FS_U8 Unit, FS_I32 Cmd, FS_I32 Aux, void *pBuffer) {
  FS_DEV_INFO *pInfo;
  FS_U32 ul;
  int BytesRead;
  Xboolean CFdetected;
  FS_USE_PARA(Aux);
  switch (Cmd) {
    case FS_CMD_INC_BUSYCNT:
       _FS_SYSACE_busycnt[Unit]++;
      break;
    case FS_CMD_DEC_BUSYCNT:
      _FS_SYSACE_busycnt[Unit]--;
      if (_FS_SYSACE_busycnt[Unit] <= 0) {
        _FS_SYSACE_busycnt[Unit] = 0;
      }
      break;
    case FS_CMD_CHK_DSKCHANGE:
      /**********************************/
      CFdetected = (XSysAce_mGetStatusReg(_FS_XSYSTEMACE.BaseAddress) &
                    XSA_SR_CFDETECT_MASK);
      if (!CFdetected) {
        _FS_SYSACE_diskchange[Unit] = 1;  /* No card in reader */
      }
      /**********************************/
      break; 
    case FS_CMD_GET_DEVINFO:
      if (!pBuffer) {
        return -1;
      }
      pInfo = (FS_DEV_INFO *)pBuffer;
      XSysAce_Initialize(Addr_Of_Ace, Unit); /* init the SystemAce */
      /* THIS IS A MULTIMEDIA BOARD SPECIFIC ACTION
         Writing Control Reg FORCECFGMODE Bit To Overide ON-BOARD CFGMODE Pin */
      XSysAce_RegWrite32((Addr_Of_Ace->BaseAddress) + XSA_CR_OFFSET, (0x00000808));
      /* RESET THE ACE CONFIG CONTROLLER TO REMOVE ANY EXISTING ERRORS */ 
      XSysAce_ResetCfg (Addr_Of_Ace); 
      /* IT TAKES SOME TIME FOR THE CF TO RECOVER FROM THE RESET */
      /* WAIT FOR RESET RECOVERY */
      while (!XSysAce_mIsReadyForCmd(Addr_Of_Ace->BaseAddress));
      /**** SYSTEM ACE SPECIFIC CODE ****/
      /* READ (1) 512 BYTE SECTOR */ 
      BytesRead = XSysAce_ReadSector(_FS_XSYSTEMACE.BaseAddress, 0, 
      (unsigned char*)&_FS_SYSACE_mbrbuffer[0]);
      /* VERIFY FULL SECTOR RECEIVED */
      if (BytesRead != 512) {
        return -1;
      }
      /**********************************/
      ul = FS_GetMediaStartSec((unsigned char*)_FS_SYSACE_mbrbuffer);
      if (ul == 0xFFFFFFFF) { /* check if MBR was invalid */
        return (int)FS_ERR_INVALIDDESC;
      }
      if (ul != 0) {
        /**** SYSTEM ACE SPECIFIC CODE ****/
        /* READ (1) 512 BYTE SECTOR */
        BytesRead = XSysAce_ReadSector(_FS_XSYSTEMACE.BaseAddress, ul, (unsigned char*)&_FS_SYSACE_mbrbuffer[0]);
      }
      /* VERIFY FULL SECTOR RECEIVED */
      if (BytesRead != 512) {
        return -1;
      }
      pInfo->NumHeads        = _FS_SYSACE_mbrbuffer[_FS_BPB_HEADNUM];   /* heads */
      pInfo->SectorsPerTrack = _FS_SYSACE_mbrbuffer[_FS_BPB_SECPERTRK]; /* sec per track */
      pInfo->NumSectors      = FS_ReadU16(&_FS_SYSACE_mbrbuffer[_FS_BPB_TOTALSEC16]);  /* size */ 
      if (pInfo->NumSectors == 0) {
        pInfo->NumSectors = FS_ReadU32(&_FS_SYSACE_mbrbuffer[_FS_BPB_TOTALSEC32]);
      }
      break;
    default:
      break;
  }
  return 0;
}

/*********************************************************************
*
*             Global variables
*
**********************************************************************
*/

const FS_DEVICE_TYPE FS_sysacedevice_driver = {
  "ide",
  FS_IDE_MAXUNIT,
  _FS_SYSACE_DevStatus,
  _FS_SYSACE_DevRead,
  _FS_SYSACE_DevWrite,
  _FS_SYSACE_DevIoCtl
};

#endif /* FS_USE_IDE_DRIVER */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91成人免费网站| 26uuu精品一区二区在线观看| 成人一区在线看| 国产一区二区在线影院| 国产九色sp调教91| 国产一区不卡精品| 成人精品在线视频观看| 成人午夜伦理影院| 97久久超碰精品国产| 色婷婷综合中文久久一本| 在线日韩一区二区| 欧美欧美欧美欧美首页| 欧美日韩国产123区| 日韩一区和二区| 精品福利在线导航| 中文字幕第一区综合| 18欧美亚洲精品| 一区二区国产盗摄色噜噜| 夜夜精品视频一区二区| 亚洲gay无套男同| 久久国产精品无码网站| 国产精品羞羞答答xxdd| 91免费观看视频| 欧美日韩三级在线| 精品国产sm最大网站免费看| 国产拍揄自揄精品视频麻豆| 综合av第一页| 日韩高清一区在线| 精品亚洲国内自在自线福利| 成人午夜在线视频| 91国偷自产一区二区三区观看| 6080国产精品一区二区| 久久久精品中文字幕麻豆发布| 日韩一区中文字幕| 日韩和欧美一区二区三区| 亚洲永久免费视频| 国产精品女同互慰在线看| 一区二区三区在线免费播放| 免费一级欧美片在线观看| 国产成人午夜精品5599| 日本高清视频一区二区| 日韩精品一区二区三区视频| 一区二区中文字幕在线| 日韩电影在线免费看| 成人av影视在线观看| 欧美日韩成人激情| 欧美国产日韩精品免费观看| 午夜欧美电影在线观看| 国产成人免费网站| 在线成人小视频| 国产精品三级视频| 青娱乐精品视频在线| 99re这里只有精品6| 日韩一区二区三区免费观看| **欧美大码日韩| 美女视频黄免费的久久| 99re热视频精品| 日韩精品中文字幕一区二区三区| 亚洲人妖av一区二区| 精品影院一区二区久久久| 国产精品久久久久久亚洲伦| 国产亚洲欧美日韩俺去了| 婷婷久久综合九色综合绿巨人 | 亚洲国产一区二区在线播放| 精品一区二区三区免费观看| 欧美亚洲日本一区| 国产精品伦一区| 国内外成人在线| 91超碰这里只有精品国产| 亚洲欧美在线视频| 国产福利一区二区三区视频在线| 欧美一区午夜精品| 亚洲最快最全在线视频| 不卡大黄网站免费看| 精品国产亚洲在线| 日韩电影在线免费| 欧美日韩五月天| 亚洲日本丝袜连裤袜办公室| 国产黑丝在线一区二区三区| 日韩一区二区三区观看| 天天色综合天天| 欧美日韩情趣电影| 亚洲综合久久久| 在线一区二区视频| 中文字幕中文字幕中文字幕亚洲无线 | 国产女人aaa级久久久级| 久久精品国产亚洲高清剧情介绍| 欧美日韩在线电影| 亚洲一区视频在线| 色婷婷精品久久二区二区蜜臀av | 日产国产高清一区二区三区 | 国产精品乱人伦中文| 国产精品538一区二区在线| 精品国产乱码久久久久久图片| 久久精品久久99精品久久| 欧美一区二区成人| 日本亚洲三级在线| 欧美一二三区在线| 久久福利视频一区二区| 日韩限制级电影在线观看| 秋霞国产午夜精品免费视频| 51精品久久久久久久蜜臀| 亚洲aaa精品| 欧美一区二区网站| 亚洲久草在线视频| 国产一区二区女| 久久精品视频免费| 成熟亚洲日本毛茸茸凸凹| 国产人伦精品一区二区| av一区二区不卡| 亚洲欧美视频在线观看视频| 日本高清无吗v一区| 午夜欧美一区二区三区在线播放| 欧美另类videos死尸| 麻豆视频观看网址久久| 久久欧美中文字幕| 成人av在线一区二区三区| 亚洲乱码国产乱码精品精可以看| 在线观看视频一区二区| 视频一区中文字幕国产| 欧美成人性福生活免费看| 国产精品亚洲专一区二区三区| 国产精品入口麻豆九色| 日本韩国精品一区二区在线观看| 亚洲国产乱码最新视频| 日韩视频123| 成人动漫中文字幕| 依依成人精品视频| 91麻豆精品国产91久久久使用方法 | 日本伊人色综合网| 2020国产精品久久精品美国| 成人午夜视频福利| 亚洲一区二区三区影院| 日韩午夜av一区| 懂色av一区二区三区免费看| 一区二区视频在线| 日韩午夜av一区| 99国产精品久久久久| 天天影视网天天综合色在线播放| 337p粉嫩大胆噜噜噜噜噜91av | 欧美刺激脚交jootjob| 成人影视亚洲图片在线| 亚洲午夜久久久| 久久一夜天堂av一区二区三区| 成人的网站免费观看| 日韩电影免费一区| 中文子幕无线码一区tr| 在线成人午夜影院| 成人黄色国产精品网站大全在线免费观看 | 欧美性色综合网| 国产老肥熟一区二区三区| 亚洲国产日韩综合久久精品| 精品成a人在线观看| 91福利国产精品| 国产精品自产自拍| 性做久久久久久免费观看欧美| 久久日一线二线三线suv| 欧美视频一区二区三区在线观看 | 色噜噜狠狠色综合中国| 精品制服美女久久| 亚洲综合小说图片| 欧美激情在线看| 欧美一区二区在线看| 精品日韩欧美在线| 亚洲综合一区在线| 日韩三级视频中文字幕| jiyouzz国产精品久久| 久久成人免费网| 亚洲高清免费视频| 中文字幕在线视频一区| 久久综合久久久久88| 欧美三级韩国三级日本三斤| 国产成人免费高清| 久久精工是国产品牌吗| 亚洲高清免费观看| 亚洲美女视频在线| 国产精品日韩精品欧美在线| 欧美v日韩v国产v| 在线综合+亚洲+欧美中文字幕| 日本高清不卡一区| 97久久超碰国产精品电影| 国产精品一区在线观看乱码 | 国产剧情一区在线| 美女视频黄久久| 亚洲丰满少妇videoshd| 亚洲人成在线观看一区二区| 欧美激情一区二区三区不卡| 精品久久一区二区三区| 7777精品伊人久久久大香线蕉经典版下载| 99riav一区二区三区| 成人av资源在线| 国产成人av影院| 国产成人免费在线视频| 国产一区二区不卡| 精品亚洲欧美一区| 韩国欧美一区二区| 国产真实乱对白精彩久久| 激情成人综合网| 精品写真视频在线观看| 美国一区二区三区在线播放|