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

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

?? nand.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Flash NAND memory emulation.  Based on "16M x 8 Bit NAND Flash * Memory" datasheet for the KM29U128AT / K9F2808U0A chips from * Samsung Electronic. * * Copyright (c) 2006 Openedhand Ltd. * Written by Andrzej Zaborowski <balrog@zabor.org> * * This code is licensed under the GNU GPL v2. */#ifndef NAND_IO# include "hw.h"# include "flash.h"# include "block.h"/* FIXME: Pass block device as an argument.  */# include "sysemu.h"# define NAND_CMD_READ0		0x00# define NAND_CMD_READ1		0x01# define NAND_CMD_READ2		0x50# define NAND_CMD_LPREAD2	0x30# define NAND_CMD_NOSERIALREAD2	0x35# define NAND_CMD_RANDOMREAD1	0x05# define NAND_CMD_RANDOMREAD2	0xe0# define NAND_CMD_READID	0x90# define NAND_CMD_RESET		0xff# define NAND_CMD_PAGEPROGRAM1	0x80# define NAND_CMD_PAGEPROGRAM2	0x10# define NAND_CMD_CACHEPROGRAM2	0x15# define NAND_CMD_BLOCKERASE1	0x60# define NAND_CMD_BLOCKERASE2	0xd0# define NAND_CMD_READSTATUS	0x70# define NAND_CMD_COPYBACKPRG1	0x85# define NAND_IOSTATUS_ERROR	(1 << 0)# define NAND_IOSTATUS_PLANE0	(1 << 1)# define NAND_IOSTATUS_PLANE1	(1 << 2)# define NAND_IOSTATUS_PLANE2	(1 << 3)# define NAND_IOSTATUS_PLANE3	(1 << 4)# define NAND_IOSTATUS_BUSY	(1 << 6)# define NAND_IOSTATUS_UNPROTCT	(1 << 7)# define MAX_PAGE		0x800# define MAX_OOB		0x40struct nand_flash_s {    uint8_t manf_id, chip_id;    int size, pages;    int page_shift, oob_shift, erase_shift, addr_shift;    uint8_t *storage;    BlockDriverState *bdrv;    int mem_oob;    int cle, ale, ce, wp, gnd;    uint8_t io[MAX_PAGE + MAX_OOB + 0x400];    uint8_t *ioaddr;    int iolen;    uint32_t cmd, addr;    int addrlen;    int status;    int offset;    void (*blk_write)(struct nand_flash_s *s);    void (*blk_erase)(struct nand_flash_s *s);    void (*blk_load)(struct nand_flash_s *s, uint32_t addr, int offset);};# define NAND_NO_AUTOINCR	0x00000001# define NAND_BUSWIDTH_16	0x00000002# define NAND_NO_PADDING	0x00000004# define NAND_CACHEPRG		0x00000008# define NAND_COPYBACK		0x00000010# define NAND_IS_AND		0x00000020# define NAND_4PAGE_ARRAY	0x00000040# define NAND_NO_READRDY	0x00000100# define NAND_SAMSUNG_LP	(NAND_NO_PADDING | NAND_COPYBACK)# define NAND_IO# define PAGE(addr)		((addr) >> ADDR_SHIFT)# define PAGE_START(page)	(PAGE(page) * (PAGE_SIZE + OOB_SIZE))# define PAGE_MASK		((1 << ADDR_SHIFT) - 1)# define OOB_SHIFT		(PAGE_SHIFT - 5)# define OOB_SIZE		(1 << OOB_SHIFT)# define SECTOR(addr)		((addr) >> (9 + ADDR_SHIFT - PAGE_SHIFT))# define SECTOR_OFFSET(addr)	((addr) & ((511 >> PAGE_SHIFT) << 8))# define PAGE_SIZE		256# define PAGE_SHIFT		8# define PAGE_SECTORS		1# define ADDR_SHIFT		8# include "nand.c"# define PAGE_SIZE		512# define PAGE_SHIFT		9# define PAGE_SECTORS		1# define ADDR_SHIFT		8# include "nand.c"# define PAGE_SIZE		2048# define PAGE_SHIFT		11# define PAGE_SECTORS		4# define ADDR_SHIFT		16# include "nand.c"/* Information based on Linux drivers/mtd/nand/nand_ids.c */struct nand_info_s {    int size;    int width;    int page_shift;    int erase_shift;    uint32_t options;} nand_flash_ids[0x100] = {    [0 ... 0xff] = { 0 },    [0x6e] = { 1,	8,	8, 4, 0 },    [0x64] = { 2,	8,	8, 4, 0 },    [0x6b] = { 4,	8,	9, 4, 0 },    [0xe8] = { 1,	8,	8, 4, 0 },    [0xec] = { 1,	8,	8, 4, 0 },    [0xea] = { 2,	8,	8, 4, 0 },    [0xd5] = { 4,	8,	9, 4, 0 },    [0xe3] = { 4,	8,	9, 4, 0 },    [0xe5] = { 4,	8,	9, 4, 0 },    [0xd6] = { 8,	8,	9, 4, 0 },    [0x39] = { 8,	8,	9, 4, 0 },    [0xe6] = { 8,	8,	9, 4, 0 },    [0x49] = { 8,	16,	9, 4, NAND_BUSWIDTH_16 },    [0x59] = { 8,	16,	9, 4, NAND_BUSWIDTH_16 },    [0x33] = { 16,	8,	9, 5, 0 },    [0x73] = { 16,	8,	9, 5, 0 },    [0x43] = { 16,	16,	9, 5, NAND_BUSWIDTH_16 },    [0x53] = { 16,	16,	9, 5, NAND_BUSWIDTH_16 },    [0x35] = { 32,	8,	9, 5, 0 },    [0x75] = { 32,	8,	9, 5, 0 },    [0x45] = { 32,	16,	9, 5, NAND_BUSWIDTH_16 },    [0x55] = { 32,	16,	9, 5, NAND_BUSWIDTH_16 },    [0x36] = { 64,	8,	9, 5, 0 },    [0x76] = { 64,	8,	9, 5, 0 },    [0x46] = { 64,	16,	9, 5, NAND_BUSWIDTH_16 },    [0x56] = { 64,	16,	9, 5, NAND_BUSWIDTH_16 },    [0x78] = { 128,	8,	9, 5, 0 },    [0x39] = { 128,	8,	9, 5, 0 },    [0x79] = { 128,	8,	9, 5, 0 },    [0x72] = { 128,	16,	9, 5, NAND_BUSWIDTH_16 },    [0x49] = { 128,	16,	9, 5, NAND_BUSWIDTH_16 },    [0x74] = { 128,	16,	9, 5, NAND_BUSWIDTH_16 },    [0x59] = { 128,	16,	9, 5, NAND_BUSWIDTH_16 },    [0x71] = { 256,	8,	9, 5, 0 },    /*     * These are the new chips with large page size. The pagesize and the     * erasesize is determined from the extended id bytes     */# define LP_OPTIONS	(NAND_SAMSUNG_LP | NAND_NO_READRDY | NAND_NO_AUTOINCR)# define LP_OPTIONS16	(LP_OPTIONS | NAND_BUSWIDTH_16)    /* 512 Megabit */    [0xa2] = { 64,	8,	0, 0, LP_OPTIONS },    [0xf2] = { 64,	8,	0, 0, LP_OPTIONS },    [0xb2] = { 64,	16,	0, 0, LP_OPTIONS16 },    [0xc2] = { 64,	16,	0, 0, LP_OPTIONS16 },    /* 1 Gigabit */    [0xa1] = { 128,	8,	0, 0, LP_OPTIONS },    [0xf1] = { 128,	8,	0, 0, LP_OPTIONS },    [0xb1] = { 128,	16,	0, 0, LP_OPTIONS16 },    [0xc1] = { 128,	16,	0, 0, LP_OPTIONS16 },    /* 2 Gigabit */    [0xaa] = { 256,	8,	0, 0, LP_OPTIONS },    [0xda] = { 256,	8,	0, 0, LP_OPTIONS },    [0xba] = { 256,	16,	0, 0, LP_OPTIONS16 },    [0xca] = { 256,	16,	0, 0, LP_OPTIONS16 },    /* 4 Gigabit */    [0xac] = { 512,	8,	0, 0, LP_OPTIONS },    [0xdc] = { 512,	8,	0, 0, LP_OPTIONS },    [0xbc] = { 512,	16,	0, 0, LP_OPTIONS16 },    [0xcc] = { 512,	16,	0, 0, LP_OPTIONS16 },    /* 8 Gigabit */    [0xa3] = { 1024,	8,	0, 0, LP_OPTIONS },    [0xd3] = { 1024,	8,	0, 0, LP_OPTIONS },    [0xb3] = { 1024,	16,	0, 0, LP_OPTIONS16 },    [0xc3] = { 1024,	16,	0, 0, LP_OPTIONS16 },    /* 16 Gigabit */    [0xa5] = { 2048,	8,	0, 0, LP_OPTIONS },    [0xd5] = { 2048,	8,	0, 0, LP_OPTIONS },    [0xb5] = { 2048,	16,	0, 0, LP_OPTIONS16 },    [0xc5] = { 2048,	16,	0, 0, LP_OPTIONS16 },};static void nand_reset(struct nand_flash_s *s){    s->cmd = NAND_CMD_READ0;    s->addr = 0;    s->addrlen = 0;    s->iolen = 0;    s->offset = 0;    s->status &= NAND_IOSTATUS_UNPROTCT;}static void nand_command(struct nand_flash_s *s){    switch (s->cmd) {    case NAND_CMD_READ0:        s->iolen = 0;        break;    case NAND_CMD_READID:        s->io[0] = s->manf_id;        s->io[1] = s->chip_id;        s->io[2] = 'Q';		/* Don't-care byte (often 0xa5) */        if (nand_flash_ids[s->chip_id].options & NAND_SAMSUNG_LP)            s->io[3] = 0x15;	/* Page Size, Block Size, Spare Size.. */        else            s->io[3] = 0xc0;	/* Multi-plane */        s->ioaddr = s->io;        s->iolen = 4;        break;    case NAND_CMD_RANDOMREAD2:    case NAND_CMD_NOSERIALREAD2:        if (!(nand_flash_ids[s->chip_id].options & NAND_SAMSUNG_LP))            break;        s->blk_load(s, s->addr, s->addr & ((1 << s->addr_shift) - 1));        break;    case NAND_CMD_RESET:        nand_reset(s);        break;    case NAND_CMD_PAGEPROGRAM1:        s->ioaddr = s->io;        s->iolen = 0;        break;    case NAND_CMD_PAGEPROGRAM2:        if (s->wp) {            s->blk_write(s);        }        break;    case NAND_CMD_BLOCKERASE1:        break;    case NAND_CMD_BLOCKERASE2:        if (nand_flash_ids[s->chip_id].options & NAND_SAMSUNG_LP)            s->addr <<= 16;        else            s->addr <<= 8;        if (s->wp) {            s->blk_erase(s);        }        break;    case NAND_CMD_READSTATUS:        s->io[0] = s->status;        s->ioaddr = s->io;        s->iolen = 1;        break;    default:        printf("%s: Unknown NAND command 0x%02x\n", __FUNCTION__, s->cmd);    }}static void nand_save(QEMUFile *f, void *opaque){    struct nand_flash_s *s = (struct nand_flash_s *) opaque;    qemu_put_byte(f, s->cle);    qemu_put_byte(f, s->ale);    qemu_put_byte(f, s->ce);    qemu_put_byte(f, s->wp);    qemu_put_byte(f, s->gnd);    qemu_put_buffer(f, s->io, sizeof(s->io));    qemu_put_be32(f, s->ioaddr - s->io);    qemu_put_be32(f, s->iolen);    qemu_put_be32s(f, &s->cmd);    qemu_put_be32s(f, &s->addr);    qemu_put_be32(f, s->addrlen);    qemu_put_be32(f, s->status);    qemu_put_be32(f, s->offset);    /* XXX: do we want to save s->storage too? */}static int nand_load(QEMUFile *f, void *opaque, int version_id){    struct nand_flash_s *s = (struct nand_flash_s *) opaque;    s->cle = qemu_get_byte(f);    s->ale = qemu_get_byte(f);    s->ce = qemu_get_byte(f);    s->wp = qemu_get_byte(f);    s->gnd = qemu_get_byte(f);    qemu_get_buffer(f, s->io, sizeof(s->io));    s->ioaddr = s->io + qemu_get_be32(f);    s->iolen = qemu_get_be32(f);    if (s->ioaddr >= s->io + sizeof(s->io) || s->ioaddr < s->io)        return -EINVAL;    qemu_get_be32s(f, &s->cmd);    qemu_get_be32s(f, &s->addr);    s->addrlen = qemu_get_be32(f);    s->status = qemu_get_be32(f);    s->offset = qemu_get_be32(f);    return 0;}static int nand_iid = 0;/* * Chip inputs are CLE, ALE, CE, WP, GND and eight I/O pins.  Chip * outputs are R/B and eight I/O pins. * * CE, WP and R/B are active low. */void nand_setpins(struct nand_flash_s *s,                int cle, int ale, int ce, int wp, int gnd)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆国产精品官网| 亚洲男女一区二区三区| 久久国产夜色精品鲁鲁99| 欧美丰满一区二区免费视频| 亚洲高清免费一级二级三级| 欧美另类变人与禽xxxxx| 午夜精品久久久久久久久久| 91精品欧美福利在线观看| 蜜臀av一区二区| 久久久久久久久久久久久久久99 | 91麻豆国产精品久久| 亚洲男人的天堂网| 欧美精品第1页| 精品一区二区免费看| 国产精品久久久久毛片软件| 日本乱人伦aⅴ精品| 免费人成精品欧美精品| 国产亲近乱来精品视频| 欧洲精品一区二区| 久久99国产精品久久99果冻传媒| 国产日韩欧美激情| 欧洲亚洲国产日韩| 国产一区免费电影| 亚洲综合色视频| 久久久精品国产99久久精品芒果| 色综合天天综合在线视频| 日韩中文字幕一区二区三区| 国产欧美日本一区视频| 欧美色区777第一页| 国产综合色精品一区二区三区| 亚洲婷婷综合色高清在线| 日韩欧美综合一区| 91在线免费视频观看| 经典一区二区三区| 亚洲尤物视频在线| 国产视频一区二区三区在线观看| 欧美亚洲图片小说| 高清免费成人av| 午夜视黄欧洲亚洲| 国产精品美女一区二区| 日韩免费性生活视频播放| 91美女视频网站| 国产精品综合av一区二区国产馆| 亚洲高清免费观看高清完整版在线观看| 久久综合久久综合久久| 欧美三级中文字幕在线观看| 国产精品一区2区| 免费成人av在线| 亚洲bt欧美bt精品| 亚洲欧洲国产专区| 国产三级欧美三级| 精品美女在线观看| 制服丝袜av成人在线看| 91老师片黄在线观看| 国产一区二区精品久久| 另类小说欧美激情| 视频一区免费在线观看| 亚洲一二三四在线| 亚洲视频香蕉人妖| 国产精品蜜臀在线观看| 久久综合色婷婷| 欧美大片国产精品| 91精品国产91综合久久蜜臀| 欧美亚洲综合久久| zzijzzij亚洲日本少妇熟睡| 韩国精品主播一区二区在线观看| 亚洲一区二区三区中文字幕在线| 国产精品的网站| 日本一区二区三区高清不卡| 精品国产青草久久久久福利| 日韩视频免费观看高清完整版在线观看| 色婷婷综合视频在线观看| 99re成人精品视频| 91视频在线观看| 99在线视频精品| 色综合天天综合网国产成人综合天| 成人不卡免费av| 91伊人久久大香线蕉| 一本色道久久综合亚洲91| 色丁香久综合在线久综合在线观看| 99精品视频免费在线观看| 不卡一区中文字幕| 色婷婷av一区| 欧美日免费三级在线| 欧美视频在线播放| 制服丝袜亚洲精品中文字幕| 欧美一区二区三区视频在线观看| 日韩欧美一区中文| 欧美精品一区二区三区一线天视频 | 依依成人精品视频| 亚洲精品免费一二三区| 亚洲国产精品影院| 玖玖九九国产精品| 国产成人夜色高潮福利影视| 成人av在线网站| 欧美三级一区二区| 日韩一区二区三区视频| 久久精品欧美一区二区三区麻豆| 国产精品无遮挡| 一区二区三国产精华液| 日韩中文字幕亚洲一区二区va在线 | 久久综合九色综合97婷婷| 国产日韩欧美激情| 亚洲一区二区视频在线| 美腿丝袜亚洲色图| jiyouzz国产精品久久| 91蜜桃传媒精品久久久一区二区| 欧美精品亚洲一区二区在线播放| 精品国产一区二区三区不卡| 国产精品欧美一级免费| 亚洲aⅴ怡春院| 成人三级伦理片| 精品视频123区在线观看| www国产成人免费观看视频 深夜成人网| 国产精品美女久久久久av爽李琼| 午夜精品视频一区| 高清不卡一区二区| 91麻豆精品国产91久久久更新时间| 久久综合九色综合欧美98| 亚洲一区在线观看免费观看电影高清| 久久精品国产在热久久| 色综合天天综合网国产成人综合天 | 久久99热99| 91久久精品一区二区三| 26uuu国产日韩综合| 亚洲综合小说图片| 高清av一区二区| 日韩欧美视频在线| 一区二区三区不卡视频| 国产精品亚洲一区二区三区妖精| 欧美日韩免费高清一区色橹橹| 国产亚洲精品超碰| 蜜桃在线一区二区三区| 91黄色免费看| 最新国产精品久久精品| 国产乱子伦视频一区二区三区| 欧美伊人久久久久久久久影院 | 欧美区视频在线观看| 国产精品久久福利| 国产成人亚洲综合色影视| 欧美大片一区二区| 日韩精品电影在线观看| 色一情一乱一乱一91av| 国产精品第一页第二页第三页| 久久99精品久久久久婷婷| 在线播放欧美女士性生活| 亚洲精品免费在线观看| 99国产精品久久久久久久久久 | 亚洲手机成人高清视频| 成人黄色综合网站| 欧美国产一区二区在线观看| 久久精品久久综合| 日韩免费一区二区| 久久精品国产一区二区| 6080国产精品一区二区| 亚洲成在人线免费| 欧美日韩不卡在线| 亚洲电影中文字幕在线观看| 色网站国产精品| 一区二区三区四区乱视频| 色哟哟一区二区在线观看| 一区二区三区四区视频精品免费| 91啪亚洲精品| 尤物视频一区二区| 欧美日韩一级片在线观看| 午夜欧美在线一二页| 欧美一区二区三区四区久久| 麻豆久久久久久久| 精品福利在线导航| 国产伦精一区二区三区| 久久久国际精品| 成人午夜免费av| 亚洲色图欧洲色图| 欧美亚洲尤物久久| 日产国产高清一区二区三区| 91精品国产免费久久综合| 美日韩一区二区| 久久综合99re88久久爱| 国产精品一区二区男女羞羞无遮挡| 久久亚洲一区二区三区四区| 丁香桃色午夜亚洲一区二区三区| 中文字幕一区二区5566日韩| 日本高清无吗v一区| 香蕉av福利精品导航| 精品久久久久久综合日本欧美| 国产原创一区二区三区| 成人免费小视频| 制服丝袜亚洲色图| 国产高清精品在线| 一区二区三区四区不卡在线| 欧美日韩国产一区二区三区地区| 日本在线播放一区二区三区| 26uuu欧美日本| 91年精品国产| 日本欧美一区二区三区乱码| 国产人久久人人人人爽| 在线这里只有精品| 免费观看在线色综合| 国产精品乱码妇女bbbb| 欧美日韩国产一区二区三区地区|