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

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

?? s3c2410.c

?? 基于s3c2410的nandflash 和norflash的驅動開發
?? C
字號:
2410 nand flash的驅動文件
#include <linux/slab.h>                            
#include <linux/module.h>                          
#include <linux/mtd/mtd.h>                         
#include <linux/mtd/nand.h>                        
#include <linux/mtd/compatmac.h>                   
#include <linux/irq.h>                             
#include <asm/io.h>                                
#include <asm/hardware.h>                          
#include <asm/sizes.h>                             
#include <linux/compiler.h>                        
#include <linux/delay.h>                           
#include <linux/interrupt.h>                       
#include <linux/sched.h>                           
                                                      
static struct mtd_info * smc _mtd = NULL;        
                                                   
#include <linux/mtd/partitions.h>                  
                                                   
  //對應于開發板的NAND Flash參數
static struct mtd_partition smc_partitions[] = {
	{
		name:		"vivi",
		size:		0x00030000,
		offset:		0x0,
		mask_flags:	MTD_WRITEABLE,
	},{
		name:		"kernel",
		size:		0x000d0000,
		offset:		0x00030000,
		mask_flags:	MTD_WRITEABLE,	//force read-only 
	}, {
		name:		"root",
		size:		0x03200000,
		offset:		0x00100000,
		mask_flags:	MTD_WRITEABLE,  // force read-only
	},{
		name:           "user_file",
                size:           0x00A00000,
                offset:         0x03300000,
	}
};
                                                                           
static void smc_hwcontrol(int cmd) {
    switch (cmd) {
    case NAND_CTL_SETNCE:	NFCONF &= ~NFCONF_nFCE_HIGH; break;
    case NAND_CTL_CLRNCE:	NFCONF |= NFCONF_nFCE_HIGH; break;
    case NAND_CTL_SETCLE:	break;
    case NAND_CTL_CLRCLE:	break;
    case NAND_CTL_SETALE:	break;
    case NAND_CTL_CLRALE:	break;
    case NAND_CTL_DAT_IN:	break;
    case NAND_CTL_DAT_OUT:	break;
    }
}                                 
 static void write_cmd(u_char val) {
    NFCMD = (u_char) val;
}

static void write_addr(u_char val) {
    NFADDR = (u_char) val;
}

static u_char read_data(void) {
    return (u_char) NFDATA;
}

static void write_data(u_char val) {
    NFDATA = (u_char) val;
}

static void wait_for_ready(void) {
    while (!(NFSTAT & NFSTAT_RnB)) {
      /* 忙 */
      udelay(10);
    }
}

inline int smc_insert(struct nand_chip *this) {
    /* Scan to find existance of the device */
    if (smc_scan (s3c2410_mtd)) {
      return -ENXIO;
    }
    /* 為內部緩沖區分配內存 */
    this->data_buf = kmalloc(sizeof(u_char) * 
			     (s3c2410_mtd->oobblock + s3c2410_mtd->oobsize), 
			     GFP_KERNEL);
    if (!this->data_buf) {
      printk ("Unable to allocate NAND data buffer for S3C2410.\n");
      this->data_buf = NULL;
      return -ENOMEM;
    }
#ifdef CONFIG_MTD_SMC_S3C2410_SMDK_PARTITION
    add_mtd_partitions(s3c2410_mtd, &smc_partitions, 
		       sizeof(smc_partitions)/sizeof(smc_partitions[0]));
//#else
    add_mtd_device(s3c2410_mtd);
#endif

    return 0;
}

inline void smc_remove(struct nand_chip *this) {
#if defined(CONFIG_MTD_SMC_S3C2410_SMDK_PARTITION) 
    del_mtd_partitions(s3c2410_mtd);
//#else
    del_mtd_device(s3c2410_mtd);
#endif

    s3c2410_mtd->size = 0;
    if (this->data_buf != NULL) {
      /* 釋放數據緩沖區*/
      kfree (this->data_buf);
      this->data_buf = NULL;
    }
}

#ifdef CONFIG_PM
static unsigned long nfcon;
static int
s3c2410_smc_pm_callback(struct pm_dev *pm_dev, pm_request_t req, void *data)
{
	struct nand_chip *this = (struct nand_chip *)pm_dev->data;
	switch (req) {
		case PM_SUSPEND:
			nfcon = NFCONF;
			break;
		case PM_RESUME:
			NFCONF = nfcon;
			/* 使能芯片-> 復位 -> 等待到可讀 -> 屏蔽芯片 */
			this->hwcontrol(NAND_CTL_SETNCE);
			this->write_cmd(NAND_CMD_RESET);
			this->wait_for_ready();
			this->hwcontrol(NAND_CTL_CLRNCE);
			break;

	}
	return 0;
}
#endif
/*
 * 主程序
 */
int __init smc_s3c2410_init (void)
{
    struct nand_chip *this;
    u_int16_t nfconf;
    /*為 MTD設備分配內存 */
    s3c2410_mtd = kmalloc (sizeof(struct mtd_info) + sizeof (struct nand_chip),
			GFP_KERNEL);
    if (!s3c2410_mtd) {
      printk ("Unable to allocate S3C2410 NAND MTD device structure.\n");
      return -ENOMEM;
    }

    /* 取得指向數據的指針*/
    this = (struct nand_chip *) (&s3c2410_mtd[1]);

    /* 初始化結構 */
    memset((char *) s3c2410_mtd, 0, sizeof(struct mtd_info));
    memset((char *) this, 0, sizeof(struct nand_chip));

      s3c2410_mtd->priv = this;

    /* 設置閃存控制器*/
    {
      nfconf = NFCONF;
      /* 使能閃存控制器*/
      nfconf |= NFCONF_FCTRL_EN;

      /* 設置閃存時序 */
      nfconf &= ~NFCONF_TWRPH1;   /* 0x0 */
      nfconf |= NFCONF_TWRPH0_3;  /* 0x3 */
      nfconf &= ~NFCONF_TACLS;    /* 0x0 */

      NFCONF = nfconf;
    }

    /* 設置NAND的I/O地址 */
    this->hwcontrol = smc_hwcontrol;
    this->write_cmd = write_cmd;
    this->write_addr = write_addr;
    this->read_data = read_data;
    this->write_data = write_data;
    this->wait_for_ready = wait_for_ready;

    /* 使能芯片-> 復位 -> 等待到可讀 -> 屏蔽芯片 */
    this->hwcontrol(NAND_CTL_SETNCE);
    this->write_cmd(NAND_CMD_RESET);
    this->wait_for_ready();
    this->hwcontrol(NAND_CTL_CLRNCE);
    smc_insert(this);
#ifdef CONFIG_PM
	smc_pm_dev = pm_register(PM_DEBUG_DEV, PM_SYS_MISC, s3c2410_smc_pm_callback);
	if (smc_pm_dev)
		smc_pm_dev->data = &s3c2410_mtd[1];
#endif

    return 0;
}
module_init(smc_s3c2410_init);

#ifdef MODULE
static void __exit smc_s3c2410_cleanup (void)
{
    struct nand_chip *this = (struct nand_chip *) &s3c2410_mtd[1];

    smc_remove(this);

    /* 釋放MTD設備 */
    kfree (s3c2410_mtd);
}
module_exit(smc_s3c2410_cleanup);
#endif

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("SMC Card on S3C2410 board");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美人伦禁忌dvd放荡欲情| 91日韩一区二区三区| 日韩精品综合一本久道在线视频| 亚洲成人精品一区| 欧美成人免费网站| 国产精品一区免费视频| 国产视频一区二区在线| 99久久亚洲一区二区三区青草| 亚洲图片另类小说| 欧美日本乱大交xxxxx| 精品无码三级在线观看视频 | 在线亚洲免费视频| 亚洲成a人片在线不卡一二三区| 91精品国产一区二区三区| 狠狠狠色丁香婷婷综合激情| 国产精品丝袜在线| 欧洲av一区二区嗯嗯嗯啊| 六月丁香婷婷色狠狠久久| 欧美韩国日本综合| 欧美日韩国产影片| 国产在线播放一区二区三区| 一区二区在线免费| www国产成人免费观看视频 深夜成人网| 成人高清视频在线| 日日嗨av一区二区三区四区| 中文字幕精品一区二区三区精品| 欧美影院一区二区| 国产福利一区二区三区视频在线 | 成人午夜看片网址| 午夜私人影院久久久久| 国产女人aaa级久久久级| 欧美伊人久久久久久久久影院| 黄网站免费久久| 亚洲精品一二三| 337p日本欧洲亚洲大胆精品| 在线视频一区二区三| 国产福利一区在线| 蜜臀av性久久久久蜜臀aⅴ流畅| 综合分类小说区另类春色亚洲小说欧美| 3atv一区二区三区| 色哟哟国产精品| 国产成人精品亚洲午夜麻豆| 免费成人在线视频观看| 亚洲一区二区三区四区五区黄| 337p日本欧洲亚洲大胆色噜噜| 在线看日本不卡| 不卡欧美aaaaa| 精品一二三四在线| 蜜臀av一级做a爰片久久| 一区二区久久久久久| 国产农村妇女毛片精品久久麻豆| 欧美一区二区精品| 欧美综合欧美视频| 日本高清不卡视频| 成a人片国产精品| 国产一区视频在线看| 日本不卡在线视频| 天天影视涩香欲综合网| 亚洲精品亚洲人成人网| 一区在线观看免费| 国产精品女主播在线观看| 亚洲精品一线二线三线| 欧美成人bangbros| 欧美一区二区三区男人的天堂 | 欧美久久一二三四区| 日本高清成人免费播放| 91福利资源站| 91免费看片在线观看| 99久久99久久久精品齐齐| 成人高清免费观看| 91在线视频观看| 91视频观看视频| 色吧成人激情小说| 在线区一区二视频| 欧美日韩一二三| 精品视频在线免费观看| 欧美人体做爰大胆视频| 51精品秘密在线观看| 欧美一区二区大片| 欧美成人aa大片| 久久蜜桃av一区精品变态类天堂| 久久久一区二区| 国产欧美日韩在线| 国产精品久久久久毛片软件| 亚洲人吸女人奶水| 亚洲成人三级小说| 奇米精品一区二区三区在线观看一 | 本田岬高潮一区二区三区| 成人免费毛片app| 99久免费精品视频在线观看 | 欧美日韩免费观看一区二区三区 | 不卡欧美aaaaa| 91黄色免费看| 91精品国产综合久久蜜臀| 26uuu国产在线精品一区二区| 国产午夜精品福利| 国产精品久久久久毛片软件| 一区二区国产视频| 美女尤物国产一区| 岛国av在线一区| 欧洲精品在线观看| 日韩久久免费av| 国产精品毛片大码女人| 一个色综合av| 国模冰冰炮一区二区| 99久久综合国产精品| 欧美高清视频在线高清观看mv色露露十八 | 久久久不卡网国产精品二区| 欧美激情一区二区三区| 亚洲高清在线精品| 国产精品77777| 91久久精品一区二区| 精品人在线二区三区| 亚洲色图都市小说| 精品亚洲免费视频| 欧美亚洲国产一区二区三区va| 日韩视频在线你懂得| 亚洲三级电影全部在线观看高清| 亚洲成a人片在线观看中文| 国产精品一区二区在线播放| 欧美制服丝袜第一页| 久久精品视频免费| 亚洲1区2区3区4区| 成人国产电影网| 欧美成人伊人久久综合网| 一区在线中文字幕| 国模无码大尺度一区二区三区| 欧美性做爰猛烈叫床潮| 国产精品毛片大码女人| 蜜桃av一区二区三区| 欧美影院一区二区三区| 国产精品嫩草久久久久| 久久超碰97人人做人人爱| 欧美主播一区二区三区美女| 国产欧美一区二区精品秋霞影院 | 亚洲综合免费观看高清完整版| 精品无人码麻豆乱码1区2区 | 国产在线看一区| 欧美羞羞免费网站| 中文字幕日韩av资源站| 国产在线精品一区二区不卡了 | 韩日精品视频一区| 欧美精品久久99| 亚洲国产精品久久一线不卡| 97aⅴ精品视频一二三区| 久久久美女毛片| 免费人成黄页网站在线一区二区| 在线观看av不卡| 一区二区高清视频在线观看| 91麻豆免费观看| 国产精品人人做人人爽人人添| 国产一区二区三区av电影| 日韩欧美中文字幕精品| 亚洲第一在线综合网站| 欧美网站大全在线观看| 一区二区三区蜜桃| 色噜噜偷拍精品综合在线| 亚洲码国产岛国毛片在线| 91网站最新网址| 亚洲三级免费观看| 91搞黄在线观看| 亚洲高清视频中文字幕| 色婷婷综合久久久久中文 | 从欧美一区二区三区| 国产亚洲欧洲一区高清在线观看| 久久99国产精品久久| 日韩精品一区二区三区老鸭窝| 午夜精品一区二区三区免费视频| 91国偷自产一区二区使用方法| 亚洲另类中文字| 91黄色在线观看| 午夜精品福利视频网站| 91精品国产综合久久精品性色 | 国产自产视频一区二区三区| 久久美女高清视频| 丁香婷婷综合色啪| 国产精品灌醉下药二区| 色哟哟在线观看一区二区三区| 一区二区久久久久久| 欧美日本免费一区二区三区| 日本免费新一区视频| 精品久久久网站| 成人精品免费视频| 亚洲精品欧美激情| 91超碰这里只有精品国产| 国内成人精品2018免费看| 国产精品三级在线观看| 91国内精品野花午夜精品| 日韩成人av影视| 国产三级精品视频| 色悠悠久久综合| 久久不见久久见免费视频7| 国产精品日产欧美久久久久| 在线观看亚洲精品| 国产永久精品大片wwwapp| 亚洲男人都懂的| 欧美一区二区精品在线| www.在线欧美| 日本欧美肥老太交大片| 中文字幕日本不卡|