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

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

?? flashiodev.c

?? eCos操作系統源碼
?? C
字號:
//==========================================================================////      flashiodev.c////      Flash device interface to I/O subsystem////==========================================================================//####ECOSGPLCOPYRIGHTBEGIN####// -------------------------------------------// This file is part of eCos, the Embedded Configurable Operating System.// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.//// eCos is free software; you can redistribute it and/or modify it under// the terms of the GNU General Public License as published by the Free// Software Foundation; either version 2 or (at your option) any later version.//// eCos is distributed in the hope that it will be useful, but WITHOUT ANY// WARRANTY; without even the implied warranty of MERCHANTABILITY or// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License// for more details.//// You should have received a copy of the GNU General Public License along// with eCos; if not, write to the Free Software Foundation, Inc.,// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.//// As a special exception, if other files instantiate templates or use macros// or inline functions from this file, or you compile this file and link it// with other works to produce a work based on this file, this file does not// by itself cause the resulting work to be covered by the GNU General Public// License. However the source code for this file must still be made available// in accordance with section (3) of the GNU General Public License.//// This exception does not invalidate any other reasons why a work based on// this file might be covered by the GNU General Public License.//// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.// at http://sources.redhat.com/ecos/ecos-license/// -------------------------------------------//####ECOSGPLCOPYRIGHTEND####//==========================================================================//#####DESCRIPTIONBEGIN####//// Author(s):    jlarmour// Contributors: woehler// Date:         2002-01-16// Purpose:      // Description:  //              //####DESCRIPTIONEND####////==========================================================================#define _FLASH_PRIVATE_#include <pkgconf/io_flash.h>#include <errno.h>#include <cyg/infra/cyg_type.h>#include <cyg/io/devtab.h>#include <cyg/io/config_keys.h>#include <cyg/io/flash.h>#include <string.h> // memcpy#include <cyg/hal/hal_if.h>#define MIN(x,y) ((x)<(y) ? (x) : (y))struct flashiodev_priv_t{	char *start;	char *end;};static struct flashiodev_priv_t flashiodev_priv[1];static int dummy_printf( const char *fmt, ... ) {return 0;}static boolflashiodev_init( struct cyg_devtab_entry *tab ){    struct flashiodev_priv_t *dev = (struct flashiodev_priv_t *)tab->priv;    int stat = flash_init( &dummy_printf );    if ( stat == 0 ) {#ifdef CYGNUM_IO_FLASH_BLOCK_CFG_FIS_1        CYG_ADDRESS		flash_base;        unsigned long	size;        if(!CYGACC_CALL_IF_FLASH_FIS_OP(CYGNUM_CALL_IF_FLASH_FIS_GET_FLASH_BASE,                                         CYGDAT_IO_FLASH_BLOCK_FIS_NAME_1,                                        &flash_base))            return false;        if(!CYGACC_CALL_IF_FLASH_FIS_OP(CYGNUM_CALL_IF_FLASH_FIS_GET_SIZE,                                         CYGDAT_IO_FLASH_BLOCK_FIS_NAME_1,                                        &size))            return false;			        dev->start = (char *)flash_base;        dev->end = (char *)flash_base + size;#else        dev->start = (char *)flash_info.start + CYGNUM_IO_FLASH_BLOCK_OFFSET_1;        dev->end = (char *)flash_info.start + CYGNUM_IO_FLASH_BLOCK_OFFSET_1 +             CYGNUM_IO_FLASH_BLOCK_LENGTH_1;#endif        return true;    } else        return false;} // flashiodev_init()#if 0static Cyg_ErrNoflashiodev_lookup( struct cyg_devtab_entry **tab,                    struct cyg_devtab_entry *sub_tab,                   const char *name){   } // flashiodev_lookup()#endifstatic Cyg_ErrNoflashiodev_bread( cyg_io_handle_t handle, void *buf, cyg_uint32 *len,                  cyg_uint32 pos){	struct cyg_devtab_entry *tab = (struct cyg_devtab_entry *)handle;	struct flashiodev_priv_t *dev = (struct flashiodev_priv_t *)tab->priv;	char *startpos = dev->start + pos;        void *erraddr;        Cyg_ErrNo err = ENOERR;        #ifdef CYGPKG_INFRA_DEBUG // don't bother checking this all the time    char *endpos = startpos + *len - 1;    char *flashend = MIN( (char *)flash_info.end - 1, dev->end - 1);    if ( startpos < dev->start )        return -EINVAL;    if ( endpos > flashend )        return -EINVAL;#endif        err = flash_read( startpos,                      (void *)buf, *len, &erraddr );    if ( err )        err = -EIO; // just something sane    return err;} // flashiodev_bread()static Cyg_ErrNoflashiodev_bwrite( cyg_io_handle_t handle, const void *buf, cyg_uint32 *len,                   cyg_uint32 pos ){   	struct cyg_devtab_entry *tab = (struct cyg_devtab_entry *)handle;	struct flashiodev_priv_t *dev = (struct flashiodev_priv_t *)tab->priv;    Cyg_ErrNo err = ENOERR;    void *erraddr;    char *startpos = dev->start + pos;#ifdef CYGPKG_INFRA_DEBUG // don't bother checking this all the time    char *endpos = startpos + *len - 1;    char *flashend = MIN( (char *)flash_info.end - 1, dev->end - 1);    if ( startpos < dev->start )        return -EINVAL;    if ( endpos > flashend )        return -EINVAL;#endif    err = flash_program( startpos,                          (void *)buf, *len, &erraddr );    if ( err )        err = -EIO; // just something sane    return err;} // flashiodev_bwrite()static Cyg_ErrNoflashiodev_get_config( cyg_io_handle_t handle,                       cyg_uint32 key,                       void* buf,                       cyg_uint32* len){	struct cyg_devtab_entry *tab = (struct cyg_devtab_entry *)handle;	struct flashiodev_priv_t *dev = (struct flashiodev_priv_t *)tab->priv;    switch (key) {    case CYG_IO_GET_CONFIG_FLASH_ERASE:    {        if ( *len != sizeof( cyg_io_flash_getconfig_erase_t ) )             return -EINVAL;        {            cyg_io_flash_getconfig_erase_t *e = (cyg_io_flash_getconfig_erase_t *)buf;            char *startpos = dev->start + e->offset;#ifdef CYGPKG_INFRA_DEBUG // don't bother checking this all the time            char *endpos = startpos + e->len - 1;            char *flashend = MIN( (char *)flash_info.end - 1, dev->end - 1);            if ( startpos < dev->start )                return -EINVAL;            if ( endpos > flashend )                return -EINVAL;#endif            e->flasherr = flash_erase( startpos, e->len, e->err_address );        }        return ENOERR;    }    case CYG_IO_GET_CONFIG_FLASH_DEVSIZE:    {        if ( *len != sizeof( cyg_io_flash_getconfig_devsize_t ) )             return -EINVAL;        {            cyg_io_flash_getconfig_devsize_t *d =                (cyg_io_flash_getconfig_devsize_t *)buf;	    //d->dev_size = flash_info.blocks * flash_info.block_size;			d->dev_size = dev->end - dev->start;        }        return ENOERR;    }    case CYG_IO_GET_CONFIG_FLASH_BLOCKSIZE:    {        cyg_io_flash_getconfig_blocksize_t *b =            (cyg_io_flash_getconfig_blocksize_t *)buf;#ifdef CYGPKG_INFRA_DEBUG // don't bother checking this all the time       char *startpos = dev->start + b->offset;	    char *flashend = MIN( (char *)flash_info.end - 1, dev->end - 1);        if ( startpos < dev->start )            return -EINVAL;        if ( startpos > flashend )            return -EINVAL;#endif          if ( *len != sizeof( cyg_io_flash_getconfig_blocksize_t ) )             return -EINVAL;                // offset unused for now		b->block_size = flash_info.block_size;        return ENOERR;    }    default:        return -EINVAL;    }} // flashiodev_get_config()static Cyg_ErrNoflashiodev_set_config( cyg_io_handle_t handle,                       cyg_uint32 key,                       const void* buf,                       cyg_uint32* len){#ifdef CYGNUM_IO_FLASH_BLOCK_CFG_FIS_1	struct cyg_devtab_entry *tab = (struct cyg_devtab_entry *)handle;	struct flashiodev_priv_t *dev = (struct flashiodev_priv_t *)tab->priv;#endif    switch (key) {#ifdef CYGNUM_IO_FLASH_BLOCK_CFG_FIS_1    case CYG_IO_SET_CONFIG_FLASH_FIS_NAME:    {        CYG_ADDRESS     flash_base;	unsigned long   size;	if(!CYGACC_CALL_IF_FLASH_FIS_OP(CYGNUM_CALL_IF_FLASH_FIS_GET_FLASH_BASE,                                         (char *)buf, &flash_base))	    return -ENOENT;	if(!CYGACC_CALL_IF_FLASH_FIS_OP(CYGNUM_CALL_IF_FLASH_FIS_GET_SIZE, 					(char *)buf, &size))	    return -ENOENT;				dev->start = (char *)flash_base;	dev->end = (char *)flash_base + size;	return ENOERR;    }#endif    default:        return -EINVAL;    }} // flashiodev_set_config()// get_config/set_config should be added later to provide the other flash// operations possible, like erase etc.BLOCK_DEVIO_TABLE( cyg_io_flashdev1_ops,                   &flashiodev_bwrite,                   &flashiodev_bread,                   0, // no select                   &flashiodev_get_config,                   &flashiodev_set_config    );                    BLOCK_DEVTAB_ENTRY( cyg_io_flashdev1,                    CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1,                    0,                    &cyg_io_flashdev1_ops,                    &flashiodev_init,                    0, // No lookup required                    &flashiodev_priv[0] );// EOF flashiodev.c

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一卡二卡三卡| 五月婷婷色综合| 国产乱码精品一区二区三区av| 91精品久久久久久久久99蜜臂| 国产精品电影院| 欧美最猛黑人xxxxx猛交| 亚洲丝袜精品丝袜在线| 一本久久a久久免费精品不卡| 国产精品国产三级国产有无不卡 | 欧美日韩一区视频| 水蜜桃久久夜色精品一区的特点| 欧美精品乱码久久久久久| 日韩精品乱码av一区二区| 一本到三区不卡视频| 99热99精品| 五月天欧美精品| ww久久中文字幕| 色av综合在线| 狠狠狠色丁香婷婷综合久久五月| 26uuu亚洲综合色欧美| gogogo免费视频观看亚洲一| 亚洲在线观看免费| 国产亚洲自拍一区| 欧美福利视频一区| 成人免费看黄yyy456| 五月婷婷欧美视频| 亚洲欧美激情小说另类| 久久久电影一区二区三区| 在线观看一区不卡| 成人综合在线网站| 美女高潮久久久| 五月天中文字幕一区二区| 国产精品麻豆网站| 久久婷婷色综合| 91精品国产91久久久久久一区二区| 成人网男人的天堂| 国产一本一道久久香蕉| 美女尤物国产一区| 日本在线播放一区二区三区| 亚洲一区在线视频观看| 国产精品动漫网站| 中文字幕在线观看一区| 亚洲一级二级在线| 国产亚洲综合av| 国产精品国产三级国产有无不卡| 久久久久久一级片| 国产精品色哟哟| 亚洲天天做日日做天天谢日日欢| 国产精品电影院| 亚洲精品免费在线播放| 亚洲一区二区免费视频| 首页国产丝袜综合| 久久成人av少妇免费| 国产精一品亚洲二区在线视频| 国产98色在线|日韩| 成人伦理片在线| 欧美丝袜自拍制服另类| 3atv在线一区二区三区| 久久影院午夜论| 国产欧美日韩在线看| 亚洲精品你懂的| 狠狠色伊人亚洲综合成人| 99视频在线观看一区三区| 在线精品视频一区二区三四 | 不卡电影一区二区三区| 在线一区二区三区四区五区| 欧美日韩国产区一| 亚洲国产色一区| 久久er精品视频| 色综合中文字幕| 久久久久国产精品麻豆ai换脸 | 精品国产欧美一区二区| 亚洲欧美另类图片小说| 国产高清一区日本| 91精品国产综合久久精品| 国产精品高潮呻吟| 精品一区二区免费看| 欧美日韩一区二区三区四区五区| 久久久欧美精品sm网站 | 亚洲成人av资源| 一本色道久久综合亚洲精品按摩| 日韩一区二区三区电影 | 日韩在线卡一卡二| 在线观看欧美黄色| 亚洲欧洲日韩一区二区三区| 捆绑调教一区二区三区| 欧美三级欧美一级| 日韩制服丝袜先锋影音| 精品视频一区二区不卡| 亚洲一区二区三区在线看| 91视频你懂的| 一区二区三区毛片| 在线精品视频免费观看| 亚洲综合在线视频| 欧美色视频在线| 日韩高清在线不卡| 欧美一区二区三区性视频| 亚洲成av人影院| 日韩欧美一级二级三级| 国产一区二区精品久久91| 欧美激情中文字幕一区二区| 不卡一区在线观看| 亚洲国产美女搞黄色| 777欧美精品| 丁香激情综合国产| 亚洲综合色成人| 日韩一区二区不卡| 国产成人综合精品三级| 国产精品盗摄一区二区三区| 在线欧美日韩国产| 老司机午夜精品| 亚洲卡通动漫在线| 日韩精品一区二区三区蜜臀 | 亚洲精品成人a在线观看| 欧洲一区在线电影| 国产美女视频91| 亚洲精品视频在线观看网站| 日韩免费观看高清完整版| 99久久精品情趣| 久久精品国产免费看久久精品| 欧美国产禁国产网站cc| 91精品国产一区二区三区| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国产成人精品一区二区三区网站观看| 最新国产の精品合集bt伙计| 久久尤物电影视频在线观看| 在线播放国产精品二区一二区四区| 国产一区二区三区在线观看免费视频 | 日本精品视频一区二区| 麻豆精品久久精品色综合| 亚洲精品v日韩精品| 精品国产制服丝袜高跟| 欧美日韩国产bt| 欧美亚洲综合在线| 在线观看亚洲一区| 99久久久精品| 99国产精品久| 成人教育av在线| 成人深夜视频在线观看| 国产久卡久卡久卡久卡视频精品| 免费观看在线色综合| 日本视频一区二区| 久久电影国产免费久久电影| 美女国产一区二区| 国产乱码精品一区二区三 | 久久99热99| 国产一区在线不卡| 大尺度一区二区| 91丨国产丨九色丨pron| 在线一区二区三区做爰视频网站| 在线精品国精品国产尤物884a| 欧美日韩一区二区三区在线看| 88在线观看91蜜桃国自产| 欧美一区二区精品| 久久久久久久免费视频了| 国产精品免费视频网站| 一区二区三区在线视频观看 | 中文字幕在线播放不卡一区| 亚洲精品乱码久久久久久| 婷婷开心激情综合| 在线免费观看日韩欧美| 在线精品视频一区二区| 欧美一卡2卡三卡4卡5免费| 久久久欧美精品sm网站| 亚洲精品久久久久久国产精华液| 午夜影院久久久| 不卡的av在线| 91麻豆精品国产| 成人欧美一区二区三区| 日韩精品每日更新| av一二三不卡影片| 日韩精品一区二区三区在线播放| 中文字幕一区二区三区四区不卡 | 国产麻豆精品一区二区| 色偷偷88欧美精品久久久| 精品国产免费人成电影在线观看四季| 中文字幕中文字幕在线一区| 久久精品国产99久久6| 色乱码一区二区三区88| 暴力调教一区二区三区| 欧美一区二视频| 理论片日本一区| 中文字幕第一区第二区| 91麻豆国产在线观看| 国产精品欧美一区二区三区| 国产成人综合在线观看| 久久久久久久网| 99视频在线精品| 亚洲精品欧美综合四区| 欧洲一区在线电影| 亚洲图片欧美视频| 欧美一区二区在线视频| 国模冰冰炮一区二区| 久久精品免费在线观看| 97se亚洲国产综合自在线| 亚洲综合色成人| 欧美日韩二区三区| 国产盗摄女厕一区二区三区 | 亚洲国产成人精品视频| 7777女厕盗摄久久久|