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

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

?? intelsbdrv.c

?? MMI層OBJ不能完全編譯
?? C
字號:
/******************************************************************************
 * Flash File System (ffs)
 * Idea, design and coding by Mads Meisner-Jensen, mmj@ti.com
 *
 * FFS AMD single bank low level flash driver RAM code
 *
 * $Id: intelsbdrv.c 1.13 Thu, 08 Jan 2004 15:05:23 +0100 tsj $
 *
 ******************************************************************************/

#ifdef VIRTIO_NOR
#define TARGET 1
#else
#include "ffs.cfg"
#endif

#include "../ffs.h"
#include "drv.h"
#include "ffstrace.h"


#define INTEL_UNLOCK_SLOW 1


#undef  tlw
#define tlw(contents)
#undef  ttw
#define ttw(contents)

// Status bits for Intel flash memory devices
#define INTEL_STATE_MACHINE_DONE     (1<<7)
#define FLASH_READ(addr)        (*(volatile uint16 *) (addr))
#define FLASH_WRITE(addr, data) (*(volatile uint16 *) (addr)) = data

asm("        .label _ffsdrv_ram_intel_begin");
asm("        .def   _ffsdrv_ram_intel_begin");

uint32 intel_int_disable(void);
void intel_int_enable(uint32 tmp);

/******************************************************************************
 * INTEL Single Bank Driver Functions
 ******************************************************************************/
// Actually we should have disabled and enable the interrupts in this
// function, but when the interrupt functions are used Target don't run!
// Anyway, currently the interrupts are already disabled at this point thus
// it does not cause any problems.
int ffsdrv_ram_intel_sb_init(void)
{
    uint32 cpsr, i;
    volatile char *addr;
	uint16 status;

    cpsr = intel_int_disable();

    for (i = 0; i < dev.numblocks; i++)
    {
        addr = block2addr(i);

        *addr = 0x50; // Intel Clear Status Register
        *addr = 0xFF; // Intel read array

        *addr = 0x60; // Intel Config Setup
        *addr = 0xD0; // Intel Unlock Block

		// Wait for unlock to finish
		do {
            status = FLASH_READ(addr);
        } while (!(status & INTEL_STATE_MACHINE_DONE));

		*addr = 0x70; // Intel Read Status Register
		status = FLASH_READ(addr);
		
		// Is there an erase suspended?
		if ((status & 0x40) != 0) {
			*addr = 0xD0; // Intel erase resume

			*addr = 0x70; // Intel Read Status Register
			// wait for erase to finish
			do {
				status = FLASH_READ(addr);
			} while (!(status & INTEL_STATE_MACHINE_DONE));
		}

        *addr = 0xFF; // Intel Read Array
    }

    intel_int_enable(cpsr);

    return 0;
}

void ffsdrv_ram_intel_sb_write_halfword(volatile uint16 *addr, uint16 value)
{
    uint32 cpsr;
    uint16 poll;

    ttw(ttr(TTrDrv, "wh(%x,%x)" NL, addr, value));

    if (~*addr & value) {
        ttw(ttr(TTrFatal, "wh(%x,%x->%x) fatal" NL, addr, *addr, value));
        return;
    }

    cpsr = intel_int_disable();
    dev.state = DEV_WRITE;

#if (INTEL_UNLOCK_SLOW == 1)
    *addr = 0x60; // Intel Config Setup
    *addr = 0xD0; // Intel Unlock Block
#endif

    *addr = 0x50; // Intel Clear Status Register
    *addr = 0x40; // Intel program byte/word
    *addr = value;

    while ((*addr & 0x80) == 0) {
        // Poll interrupts, taking interrupt mask into account.
        if (INT_REQUESTED)
        {
            *addr = 0xB0; // Intel Suspend
            *addr = 0x70; // Intel Read Status Register
            while (((poll = *addr) & 0x80) == 0)
                ;

            // If write is complete, exit immediately
            if ((*addr & 0x04) == 0)
                break;

            dev.state = DEV_WRITE_SUSPEND;
            *addr = 0xFF; // Intel read array

            intel_int_enable(cpsr);
            // Other interrupts and tasks run now...
            cpsr = intel_int_disable();

            *addr = 0xD0; // Intel resume
			*addr = 0x70; // Intel Read Status Register
            dev.state = DEV_WRITE;
        }
    }

    dev.state = DEV_READ;
    *addr = 0xFF; // Intel read array
    intel_int_enable(cpsr);
}

void ffsdrv_ram_intel_sb_erase(uint8 block)
{
    char *addr = block2addr(block);
    ffsdrv.erase_sector(addr);
}

void ffsdrv_ram_intel_sb_erase_sector(void *dst)
{
    volatile char *addr;
    uint32 cpsr;
    uint16 poll;

    ttw(ttr(TTrDrvEra, "e(%d)" NL, dst));

    addr = (char *)dst;

    cpsr = intel_int_disable();
    tlw(led_on(LED_ERASE));

#if (INTEL_UNLOCK_SLOW == 1)
    *addr = 0x60; // Intel Config Setup
    *addr = 0xD0; // Intel Unlock Block
#endif

    *addr = 0x50; // Intel Clear Status Register
    *addr = 0x20; // Intel Erase Setup
    *addr = 0xD0; // Intel Erase Confirm
    *addr = 0x70; // Intel Read Status Register

    // Wait for erase to finish.
    while ((*addr & 0x80) == 0) {
        tlw(led_toggle(LED_ERASE));
        // Poll interrupts, taking interrupt mask into account.
        if (INT_REQUESTED)
        {
            // 1. suspend erase
            // 2. enable interrupts
            // .. now the interrupt code executes
            // 3. disable interrupts
            // 4. resume erase

            tlw(led_on(LED_ERASE_SUSPEND));

            *addr = 0xB0; // Intel Erase Suspend
            *addr = 0x70; // Intel Read Status Register
            while (((poll = *addr) & 0x80) == 0)
                ;

            // If erase is complete, exit immediately
            if ((poll & 0x40) == 0)
                break;

            *addr = 0xFF; // Intel read array

            tlw(led_off(LED_ERASE_SUSPEND));
            intel_int_enable(cpsr);

            // Other interrupts and tasks run now...

            cpsr = intel_int_disable();
            tlw(led_on(LED_ERASE_SUSPEND));

            *addr = 0xD0; // Intel erase resume
// The following "extra" Read Status command is required because Intel has
// changed the specification of the W30 flash! (See "1.8 Volt Intel

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕综合网| 精品一区二区三区免费播放 | 欧美精品一区男女天堂| 蜜桃一区二区三区四区| 日韩女优av电影| 男女男精品视频| 日韩欧美亚洲国产精品字幕久久久| 天天综合日日夜夜精品| 欧美一区二区三区人| 国产福利视频一区二区三区| 午夜精品久久久| 欧美日韩激情一区二区三区| 日韩经典中文字幕一区| 日韩亚洲欧美在线| 国产精品资源在线观看| 中文字幕一区二区三区视频| 在线观看视频91| 久久精品久久久精品美女| 精品国产精品网麻豆系列| 狠狠色伊人亚洲综合成人| 国产精品久久综合| 欧美一区二区三区啪啪| 不卡的电影网站| 日韩二区三区四区| 国产精品看片你懂得| 欧美一区二区三区视频在线观看| 久久成人免费网| 一区二区三区在线视频播放| 精品国产免费视频| jizzjizzjizz欧美| 国产综合色在线| 视频一区欧美精品| 亚洲免费观看高清完整版在线观看 | 亚洲综合成人网| 精品久久久久久无| 欧美日韩三级一区| 在线视频一区二区三区| 波多野结衣在线aⅴ中文字幕不卡| 免费观看一级欧美片| 亚洲自拍偷拍麻豆| 国产精品色在线| 国产女人aaa级久久久级| 日韩美一区二区三区| 欧美精品三级日韩久久| 欧美日韩和欧美的一区二区| 99re热这里只有精品免费视频 | 久久久国产一区二区三区四区小说 | 日韩一级大片在线| 欧美日韩国产在线播放网站| 91美女视频网站| 色欲综合视频天天天| 91亚洲精品久久久蜜桃网站| 成人aa视频在线观看| 91免费看片在线观看| 色视频一区二区| 欧美美女视频在线观看| 欧美电影免费观看完整版| 欧美日韩国产片| 欧美成人video| 中文字幕精品—区二区四季| 亚洲私人黄色宅男| 偷拍一区二区三区| 免费人成精品欧美精品| 国产中文字幕精品| 色视频一区二区| 久久亚洲精华国产精华液 | 91国产免费观看| 26uuu久久天堂性欧美| 亚洲视频免费观看| 亚洲欧美一区二区三区极速播放 | 日韩电影在线观看电影| 国产精品小仙女| 欧美在线观看一区二区| 久久精品视频一区二区三区| 一区二区成人在线视频| 国产久卡久卡久卡久卡视频精品| 在线视频亚洲一区| 国产视频一区二区三区在线观看| 最好看的中文字幕久久| 国内精品视频一区二区三区八戒| 91丨porny丨首页| 精品国精品国产尤物美女| 亚洲成人av福利| 国产精品亚洲人在线观看| 91精品免费观看| 亚洲高清不卡在线| 在线观看日产精品| 国产亚洲精品资源在线26u| 日韩成人一区二区三区在线观看| 成人免费高清在线| 久久精品夜色噜噜亚洲aⅴ| 久久精品99久久久| 欧美电影在线免费观看| 亚洲综合激情网| 欧美性一二三区| 亚洲视频在线一区| 91丨九色丨黑人外教| 亚洲一区成人在线| 91国内精品野花午夜精品| 樱桃国产成人精品视频| 91国偷自产一区二区三区成为亚洲经典 | 亚洲色图清纯唯美| 欧美性感一区二区三区| 五月天视频一区| 日韩亚洲欧美成人一区| 久久精品噜噜噜成人88aⅴ| 久久影院视频免费| 欧美一区二区人人喊爽| 国模冰冰炮一区二区| 国产精品午夜在线观看| 欧美日韩一级黄| 狠狠色丁香久久婷婷综| 久久网站最新地址| 在线看国产一区二区| 麻豆免费看一区二区三区| 久久蜜臀精品av| 欧美美女一区二区三区| 捆绑调教美女网站视频一区| 国产日韩欧美综合一区| 在线视频国产一区| 国产盗摄精品一区二区三区在线| 国产精品国产三级国产| 日韩一二三区视频| 在线观看视频一区二区欧美日韩| 久久国产精品一区二区| 亚洲永久精品国产| 久久久久久久久久久久久久久99 | 国产精品一区不卡| 午夜伊人狠狠久久| 亚洲免费观看在线视频| 国产调教视频一区| 日韩精品中午字幕| 精品视频一区二区不卡| 91美女视频网站| 波多野结衣在线一区| 丁香激情综合国产| 成人小视频免费在线观看| 人人狠狠综合久久亚洲| 天使萌一区二区三区免费观看| 国产精品网友自拍| 国产欧美视频一区二区三区| 日韩欧美第一区| 欧美tickle裸体挠脚心vk| 精品国产99国产精品| 日韩午夜在线观看| 日韩欧美亚洲国产精品字幕久久久 | 精品欧美久久久| 久久青草欧美一区二区三区| 欧美一级在线观看| 日韩三级免费观看| 欧美一区二区精美| 欧美mv和日韩mv国产网站| 久久久国产精华| 国产精品美女www爽爽爽| 日本一区免费视频| 一区二区在线免费观看| 天堂va蜜桃一区二区三区漫画版 | 天天综合网天天综合色| 日韩电影在线观看网站| 久久99精品国产.久久久久久| 激情综合色播五月| 久久国产精品99久久人人澡| 国产成人日日夜夜| 欧美日韩国产综合一区二区| 欧美电影免费观看完整版| 2023国产一二三区日本精品2022| 国产精品乱码人人做人人爱 | 色综合久久综合| 欧美tk—视频vk| 国产成人精品亚洲777人妖 | 久久精品视频免费观看| 亚洲视频在线一区| 久久97超碰国产精品超碰| 99国产精品久久久久| 欧美一区二区三区电影| 国产精品久久久久aaaa樱花| 亚洲国产成人精品视频| 国产精品一区二区久激情瑜伽| 欧美亚洲日本一区| 国产精品成人免费在线| 蜜桃av一区二区| 91麻豆精品国产91久久久| 亚洲人123区| 国产电影精品久久禁18| 日韩美女天天操| 亚洲成人中文在线| 色噜噜狠狠一区二区三区果冻| 日本一区二区三区高清不卡| 久久99精品久久久久久久久久久久| 欧美日韩精品高清| 日韩在线观看一区二区| 97精品久久久久中文字幕| 国产精品全国免费观看高清| 久草热8精品视频在线观看| 欧美日韩国产综合视频在线观看| 亚洲一区二区av在线| 在线成人午夜影院| 狠狠网亚洲精品| 国产精品免费免费| 在线精品视频一区二区三四|