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

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

?? ioutil.c

?? 基于RM9200主芯片
?? C
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
/******************************************************************************
* Filename: ioutil.c
*
* SanDisk Host Developer's Toolkit
*
* Copyright (c) 1997 SanDisk Corporation
* All rights reserved.
* This code may not be redistributed in source or linkable object form
* without the consent of its author.
*
* Description:
*       Support routines.
*
******************************************************************************/


/*****************************************************************************/ 
/*********** Portable Peripheral Bus Interface Device driver Utility. ********/
/*****************************************************************************/

#include "sdconfig.h"

#if (USE_SPI || USE_SPI_EMULATION || USE_MMC || USE_MMC_EMULATION)
#include "sdmmc.h"
#endif

#if (USE_FILE_SYSTEM)
SDVOID drive_format_information(INT16 driveno, UINT16 *n_heads, UINT16 *sec_ptrack, UINT16 *n_cyls);
INT16 get_interface_error(INT16 driveno);
#endif  /* (USE_FILE_SYSTEM) */

#if (USE_INTERRUPTS)
INT16 get_irq_number(INT16 controller_no);
INT16 calculate_controllerno(SDVOID);
#endif  /* (USE_INTERRUPTS) */


SDLOCAL INT16 interface_error(INT16 driveno);

/*****************************************************************************/
/**********  Utility functions to support Peripheral Bus Interface ***********/
/*****************************************************************************/

#if (N_INTERFACES > 1)         /* For multiple controllers */

/*****************************************************************************
* Name: get_controller_number
*
* Description:
*       For a given logical drive number, the controller is calculated
*
* Input:
*
* Returns:
*       Controller Number or
*       Unknown controller  (-1)
*
****************************************************************************/
INT16 get_controller_number(INT16 driveno) /* __fn__ */
{
    INT16 cno;
    INT16 dd, ddd;

    if (driveno >= TOTAL_DRIVES)
        return (-1);

    dd = 0;
    for (cno = 0; cno < N_INTERFACES; cno++)
    {
        ddd = dd + drvs_per_controller[cno];
        /* Checking for range that driveno falls into */
        if (driveno >= dd && driveno < ddd)
            break;

        dd = ddd;
    }

    return(cno);
}



/*****************************************************************************
* Name: drno_to_controller_no 
*
* Description:  Logical drive to controller number.
*
*       NOTE:   This routine is called with the drive already locked so
*               in several cases there is no need for critical section
*               code handling
*
* Input:
*       INT16   driveno         Drive Number
*
* Returns:
*       Controller Number or
*       Unknown controller (-1)
*
******************************************************************************/
INT16 drno_to_controller_no(INT16 driveno) /* __fn__ */
{
    /* Get the controller number */
    return(get_controller_number(driveno));
}


/******************************************************************************
* Name: drno_to_controller
*
* Description:
*       Logical drive to controller structure.
*
* Input:
*       INT16   driveno         Drive Number
*
* Returns:
*       Pointer to the controller structure if successful.
*       NULL if failure.
*
******************************************************************************/
PDEVICE_CONTROLLER drno_to_controller(INT16 driveno) /* __fn__ */
{
    INT16   cno;

    if (driveno >= TOTAL_DRIVES)
        return(0);

    cno = get_controller_number(driveno);
    if (cno < 0)
        return(0);
        
    return(&controller_s[cno]);
}


#if 0
/******************************************************************************
* Name: controller_to_drvno
*
* Description:
*       controller number to logical drive number.
*
* Input:
*       INT16   driveno         Drive Number
*
* Returns:
*       Drive number if successful.
*       -1 if not found.
*
******************************************************************************/
INT16 controller_to_drvno(INT16 controllerno) /* __fn__ */
{
    PDEVICE_CONTROLLER pc;
    INT16 driveno, i;

    pc = &controller_s[controllerno];

    if (pc->drive_active & DRV_ACTIVE)
    {
        /* Get the logical drive number */
        driveno = (INT16)(pc->drive_active & 0x0F);

        for (i = 0; i < controllerno; i++)
            driveno += drvs_per_controller[i]; 
    
        return(driveno);
    }
    else
        return(-1);
}
#endif

/***************************************************************************** 
* Name: drno_to_phys
*
* Description:
*       Logical drive to physical drive for a selected controller. 
*
* Input:
*       INT16   driveno         Drive Number
*
* Returns:
*       Physical Drive Number
*
******************************************************************************/
INT16 drno_to_phys(INT16 driveno) /* __fn__ */
{
    INT16 cno, dd, ddd;

    dd = 0;
    for (cno = 0; cno < N_INTERFACES; cno++)
    {
        ddd = dd + drvs_per_controller[cno];
        /* Checking for range that driveno falls into */
        if (driveno >= dd && driveno < ddd)
            break;

        dd = ddd;
    }
    
    /* Convert drive number to physical drive number from
       the selected controller.
    */
    return(driveno - dd);
}
#endif  /* (N_INTERFACES > 1) */        /* For multiple controllers */


#if (USE_FILE_SYSTEM)
/***************************************************************************** 
* Name: drive_format_information
*
* Description:
*       Get the device's geometry information. 
*
* Input:
*       INT16   driveno         Drive Number
*       UINT16  *n_heads        Number of heads
*       UINT16  *sec_ptrack     Sectors per track
*       UINT16  *n_cyls         Number of cylinders
*
* Output:
*       Physical Drive's geometry
*
* Returns:
*       None
*
******************************************************************************/
SDVOID drive_format_information(INT16 driveno, UINT16 *n_heads,
                  UINT16 *sec_ptrack, UINT16 *n_cyls) /* __fn__ */
{
    PDEVICE_CONTROLLER pc;
    INT16 phys_drive;
    UINT16 ddTmp;

#if (N_INTERFACES > 1)
    pc = drno_to_controller(driveno);
    phys_drive = drno_to_phys(driveno);
#else
    pc = &controller_s[0];
    phys_drive = driveno;
#endif

    ddTmp = 0;

#if (USE_SD)
    /* Check for SD card */
    if (pc->drive[phys_drive].drv_type == SD_TYPE)
    {
 #if (USE_SECURITY)
        /* Is the request a security request? */
        if ( FINDSOURCEOFREQUEST(phys_drive) )
        {
            /* This is for security area */
            /* The security card's geometry */
            *n_heads = pc->drive[phys_drive].num_heads;
            *sec_ptrack = pc->drive[phys_drive].sec_p_track;
            ddTmp = (pc->drive[phys_drive].num_heads * pc->drive[phys_drive].sec_p_track);
                        *n_cyls = (UINT16)(pc->drive[phys_drive].securedAreaSize / ( 0xFFFFL & (UINT32)ddTmp));
            return;
        }
 #endif
    }

#endif

    /* The normal card's geometry */
    *n_heads =  (UINT16)pc->drive[phys_drive].num_heads;
    *sec_ptrack = (UINT16)pc->drive[phys_drive].sec_p_track;
    *n_cyls = (UINT16)pc->drive[phys_drive].num_cylinders;
}
#endif  /* (USE_FILE_SYSTEM) */


#if (USE_INTERRUPTS)
/***************************************************************************** 
* Name: get_irq_number
*
* Description:  Get an IRQ number defined by user in SDCONFIG.H
*
* Input:
*       INT16   controller_no   Controller Number
*
* Returns:
*       YES if successful
*       NO if failure
*
******************************************************************************/
INT16 get_irq_number(INT16 controller_no) /* __fn__ */
{
    return(dev_interrupts[controller_no]);
}



/***************************************************************************** 
* Name: calculate_controllerno
*
* Description:  Calculate the controller number based on drive activity flag
*
* Input:
*       None
*
* Returns:
*       the controller number
*
******************************************************************************/
INT16 calculate_controllerno (SDVOID) /* __fn__ */
{
    PDEVICE_CONTROLLER pc;
    INT16 cno;

    for (cno = 0; cno < N_INTERFACES; cno++)
    {
        pc = &controller_s[cno];
        if (pc->drive_active & DRV_ACTIVE)
            break;
    }
    return (cno);
}

#endif  /* (USE_INTERRUPTS) */


/*****************************************************************************
* Name: interface_error
*
* Description:
*       Get current error code in DEVICE_CONTROLLER structure.
*
* Input:
*       INT16   driveno     Drive Number
*
* Returns:
*       return  (pc->error_code)
*
******************************************************************************/
SDLOCAL INT16 interface_error(INT16 driveno) /* __fn__ */
{
    PDEVICE_CONTROLLER pc;

#if (N_INTERFACES > 1)
    pc = drno_to_controller(driveno);
#else
    driveno = driveno;
    pc = &controller_s[0];
#endif

    return(pc->error_code);
}

#if (USE_FILE_SYSTEM)
/*****************************************************************************
* Name: get_interface_error
*
* Description:
*       Get error code
*
* Input:
*       INT16   driveno     drive/socket number
*
* Returns:
*          0    No Error
*       Otherwise, one of the following error code in controller_s:
*           BUS_ERC_DIAG     1   Drive diagnostic failed in initialize
*           BUS_ERC_ARGS     2   User supplied invalid arguments
*           BUS_ERC_DRQ      3   DRQ should be asserted but it isn't
*                                  or driver and controller are out of phase
*           BUS_ERC_TIMEOUT  4   Timeout during some operation 
*           BUS_ERC_STATUS   5   Controller reported an error
*                                  look in the error register
*           BUS_ERC_ADDR_RANGE  6 LBA out of range
*           BUS_ERC_CNTRL_INIT  7 Fail to initialize controller_s structure
*           BUS_ERC_IDDRV       8 Identify drive info error
*           BUS_ERC_CMD_MULT    9 Read/Write Multiple Command attempts
*                                   to run before Set Multiple Command
*                                   has been executed
*           BUS_ERC_BASE_ADDR  10 Base Address not Available
*
******************************************************************************/
INT16 get_interface_error(INT16 driveno) /* __fn__ */
{
     return(interface_error(driveno));
}

#else /* (!USE_FILE_SYSTEM) */

INT16 get_interface_error(INT16 driveno) /* __fn__ */
{
     return(interface_error(driveno));
}

INT16 pc_get_error (INT16 driveno) /* __fn__ */
{
     return(interface_error(driveno));
}
#endif  /* (USE_FILE_SYSTEM) */


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人黄色a**站在线观看| 欧美一区二区三区免费大片| 欧美亚洲一区二区三区四区| 欧美一级二级在线观看| 中文字幕一区二区三区精华液 | 3d成人h动漫网站入口| 国产精品久久久久久久裸模| 日韩二区三区四区| 在线免费视频一区二区| 国产视频视频一区| 激情成人午夜视频| 欧美一区二视频| 亚洲国产精品久久人人爱蜜臀 | 欧美极品另类videosde| 日韩电影一区二区三区| 色综合久久88色综合天天 | 亚洲成人黄色影院| 99九九99九九九视频精品| 久久久精品欧美丰满| 美国毛片一区二区三区| 欧美精品视频www在线观看 | 久久精品国产99| 91麻豆精品国产91久久久使用方法| 亚洲少妇中出一区| 99re热视频这里只精品| 国产精品成人免费精品自在线观看| 国产美女精品一区二区三区| 欧美一卡2卡3卡4卡| 日韩电影在线看| 欧美精品自拍偷拍| 免费在线看一区| 日韩免费成人网| 久久99精品国产.久久久久久 | 欧美四级电影在线观看| 亚洲欧美日韩久久| 91视视频在线观看入口直接观看www| 欧美精彩视频一区二区三区| 国产乱码精品1区2区3区| 2021国产精品久久精品| 国产一区二区三区不卡在线观看| 精品国产91久久久久久久妲己| 美女久久久精品| 久久综合中文字幕| 成人在线视频一区| 成人欧美一区二区三区1314| 91片在线免费观看| 亚洲第一综合色| 日韩欧美一区二区久久婷婷| 国产在线一区二区综合免费视频| 国产亚洲va综合人人澡精品| 成人天堂资源www在线| 中文字幕在线观看一区| 在线视频欧美精品| 秋霞电影网一区二区| 精品99999| av爱爱亚洲一区| 亚洲18女电影在线观看| 欧美成人乱码一区二区三区| 国产69精品久久99不卡| 一区二区三国产精华液| 欧美不卡一区二区三区四区| 成人av第一页| 日韩国产精品91| 国产精品无码永久免费888| 欧美在线视频不卡| 国产在线视频不卡二| 国产精品毛片高清在线完整版 | av福利精品导航| 亚洲二区在线观看| 久久精品一区二区三区av| 91麻豆精品视频| 久久精品国产99| 亚洲免费伊人电影| 久久久久久电影| 欧美日韩国产另类不卡| 成人av综合在线| 精油按摩中文字幕久久| 亚洲精品视频免费观看| 久久综合九色综合久久久精品综合| 99这里只有久久精品视频| 美日韩一区二区三区| 亚洲人吸女人奶水| 亚洲精品一线二线三线| 在线免费观看一区| 成人丝袜高跟foot| 国产一区中文字幕| 日本网站在线观看一区二区三区| 国产欧美一区二区精品仙草咪| 91精品国产综合久久精品app| 91在线观看视频| 高清国产午夜精品久久久久久| 人人精品人人爱| 午夜欧美2019年伦理| 亚洲精品免费在线播放| 国产精品理伦片| 日本一二三不卡| 久久亚洲一级片| 91精品国产综合久久蜜臀| 日本高清不卡一区| 99精品国产热久久91蜜凸| 国产99一区视频免费| 韩国毛片一区二区三区| 玖玖九九国产精品| 麻豆成人久久精品二区三区红| 日韩国产欧美一区二区三区| 一区二区激情视频| 亚洲精品第1页| 一区二区激情小说| 亚洲综合色噜噜狠狠| 亚洲激情校园春色| 亚洲制服丝袜av| 亚洲韩国精品一区| 亚洲影视在线播放| 午夜激情久久久| 免费看欧美美女黄的网站| 日韩国产在线观看一区| 日韩不卡一区二区三区| 蜜臀久久久久久久| 国产中文字幕精品| 成人性生交大合| eeuss鲁片一区二区三区 | 国产一区二区福利| 国产成a人亚洲| www.亚洲精品| 色香蕉成人二区免费| 欧美手机在线视频| 日韩欧美国产一区二区三区 | 日韩欧美精品在线| 2023国产精华国产精品| 亚洲国产经典视频| 亚洲精品免费在线播放| 午夜精品国产更新| 久久成人羞羞网站| 成人av在线资源网| 欧美吻胸吃奶大尺度电影| 欧美一区二区在线视频| 国产午夜精品一区二区三区视频| 中文字幕高清一区| 亚洲国产成人av网| 国产一区999| 91免费在线视频观看| 欧美日本精品一区二区三区| 欧美成人免费网站| 中文字幕一区二区三区精华液| 亚洲图片欧美一区| 亚洲精品你懂的| 国模冰冰炮一区二区| 一道本成人在线| 久久伊人中文字幕| 一区二区三区91| 国产黄色成人av| 欧美精品高清视频| 亚洲丝袜制服诱惑| 国产综合成人久久大片91| 91视频免费观看| 欧美tickle裸体挠脚心vk| 中文字幕一区三区| 麻豆国产一区二区| 91看片淫黄大片一级| 日韩精品一区在线观看| 亚洲精品视频一区二区| 国产精品一区三区| 欧美视频精品在线| 国产精品热久久久久夜色精品三区| 亚洲成a人片综合在线| 成+人+亚洲+综合天堂| 日韩精品在线看片z| 亚洲自拍偷拍av| 99国产一区二区三精品乱码| 欧美成人aa大片| 午夜激情久久久| 一本大道久久精品懂色aⅴ| 久久久久久久久97黄色工厂| 日本aⅴ免费视频一区二区三区| 色偷偷88欧美精品久久久| 国产亚洲一区二区在线观看| 日本欧美加勒比视频| 欧美主播一区二区三区| 国产精品传媒入口麻豆| 国产91精品久久久久久久网曝门| 欧美一区二区三区性视频| 亚洲福利电影网| 色噜噜狠狠成人网p站| 国产精品毛片高清在线完整版| 国产一二三精品| 2022国产精品视频| 精品一区二区免费视频| 欧美一级一区二区| 石原莉奈在线亚洲三区| 欧美日韩激情在线| 午夜电影一区二区三区| 欧美久久一区二区| 免费成人在线观看| 日韩欧美亚洲国产另类| 麻豆中文一区二区| 欧美成人精品福利| 美女mm1313爽爽久久久蜜臀| 91精品在线一区二区| 久久精品久久99精品久久| 日韩一二三区视频|