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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cstm_mips_ixx.c

?? nandflash k9g808u0a在pxa270的驅(qū)動,由于pxa270沒有nandflash接口
?? C
字號:
/* * $Id: cstm_mips_ixx.c,v 1.2 2007/09/21 03:09:24 quy Exp $ * * Mapping of a custom board with both AMD CFI and JEDEC flash in partitions. * Config with both CFI and JEDEC device support. * * Basically physmap.c with the addition of partitions and  * an array of mapping info to accomodate more than one flash type per board. * * Copyright 2000 MontaVista Software Inc. * *  This program 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 of the  License, or (at your *  option) any later version. * *  THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT, *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * *  You should have received a copy of the  GNU General Public License along *  with this program; if not, write  to the Free Software Foundation, Inc., *  675 Mass Ave, Cambridge, MA 02139, USA. */#include <linux/module.h>#include <linux/types.h>#include <linux/kernel.h>#include <linux/init.h>#include <asm/io.h>#include <linux/mtd/mtd.h>#include <linux/mtd/map.h>#include <linux/mtd/partitions.h>#include <linux/config.h>#include <linux/delay.h>#if defined(CONFIG_MIPS_ITE8172) || defined(CONFIG_MIPS_IVR)#define CC_GCR             0xB4013818#define CC_GPBCR           0xB401380A#define CC_GPBDR           0xB4013808#define CC_M68K_DEVICE     1#define CC_M68K_FUNCTION   6#define CC_CONFADDR        0xB8004000#define CC_CONFDATA        0xB8004004#define CC_FC_FCR          0xB8002004#define CC_FC_DCR          0xB8002008#define CC_GPACR           0xB4013802#define CC_GPAICR          0xB4013804#endif /* defined(CONFIG_MIPS_ITE8172) || defined(CONFIG_MIPS_IVR) */#if defined(CONFIG_MIPS_ITE8172) || defined(CONFIG_MIPS_IVR)void cstm_mips_ixx_set_vpp(struct map_info *map,int vpp){	static spinlock_t vpp_lock = SPIN_LOCK_UNLOCKED;	static int vpp_count = 0;	unsigned long flags;	spin_lock_irqsave(&vpp_lock, flags);	if (vpp) {		if (!vpp_count++) {			__u16	data;			__u8	data1;			static u8 first = 1;					// Set GPIO port B pin3 to high			data = *(__u16 *)(CC_GPBCR);			data = (data & 0xff0f) | 0x0040;			*(__u16 *)CC_GPBCR = data;			*(__u8 *)CC_GPBDR = (*(__u8*)CC_GPBDR) | 0x08;			if (first) {				first = 0;				/* need to have this delay for first				   enabling vpp after powerup */				udelay(40);			}		}	} else {		if (!--vpp_count) {			__u16	data;					// Set GPIO port B pin3 to high			data = *(__u16 *)(CC_GPBCR);			data = (data & 0xff3f) | 0x0040;			*(__u16 *)CC_GPBCR = data;			*(__u8 *)CC_GPBDR = (*(__u8*)CC_GPBDR) & 0xf7;		}	}	spin_unlock_irqrestore(&vpp_lock, flags);}#endif/* board and partition description */#define MAX_PHYSMAP_PARTITIONS    8struct cstm_mips_ixx_info {	char *name;	unsigned long window_addr;	unsigned long window_size;	int bankwidth;	int num_partitions;};#if defined(CONFIG_MIPS_ITE8172) || defined(CONFIG_MIPS_IVR)#define PHYSMAP_NUMBER  1  // number of board desc structs needed, one per contiguous flash type const struct cstm_mips_ixx_info cstm_mips_ixx_board_desc[PHYSMAP_NUMBER] = {    {   // 28F128J3A in 2x16 configuration        "big flash",     // name	0x08000000,      // window_addr	0x02000000,      // window_size        4,               // bankwidth	1,               // num_partitions    }};static struct mtd_partition cstm_mips_ixx_partitions[PHYSMAP_NUMBER][MAX_PHYSMAP_PARTITIONS] = {{   // 28F128J3A in 2x16 configuration	{		.name = "main partition ",		.size = 0x02000000, // 128 x 2 x 128k byte sectors		.offset = 0,	},},};#else /* defined(CONFIG_MIPS_ITE8172) || defined(CONFIG_MIPS_IVR) */#define PHYSMAP_NUMBER  1  // number of board desc structs needed, one per contiguous flash type const struct cstm_mips_ixx_info cstm_mips_ixx_board_desc[PHYSMAP_NUMBER] = {    {          "MTD flash",                   // name	CONFIG_MTD_CSTM_MIPS_IXX_START,      // window_addr	CONFIG_MTD_CSTM_MIPS_IXX_LEN,        // window_size        CONFIG_MTD_CSTM_MIPS_IXX_BUSWIDTH,   // bankwidth	1,                             // num_partitions    },};static struct mtd_partition cstm_mips_ixx_partitions[PHYSMAP_NUMBER][MAX_PHYSMAP_PARTITIONS] = {{ 	{		.name = "main partition",		.size =  CONFIG_MTD_CSTM_MIPS_IXX_LEN,		.offset = 0,	},},};#endif /* defined(CONFIG_MIPS_ITE8172) || defined(CONFIG_MIPS_IVR) */struct map_info cstm_mips_ixx_map[PHYSMAP_NUMBER];int __init init_cstm_mips_ixx(void){	int i;	int jedec;        struct mtd_info *mymtd;        struct mtd_partition *parts;	/* Initialize mapping */	for (i=0;i<PHYSMAP_NUMBER;i++) {		printk(KERN_NOTICE "cstm_mips_ixx flash device: 0x%lx at 0x%lx\n", 		       cstm_mips_ixx_board_desc[i].window_size, cstm_mips_ixx_board_desc[i].window_addr);		cstm_mips_ixx_map[i].phys = cstm_mips_ixx_board_desc[i].window_addr;		cstm_mips_ixx_map[i].virt = (unsigned long)ioremap(cstm_mips_ixx_board_desc[i].window_addr, cstm_mips_ixx_board_desc[i].window_size);		if (!cstm_mips_ixx_map[i].virt) {			printk(KERN_WARNING "Failed to ioremap\n");			return -EIO;	        }		cstm_mips_ixx_map[i].name = cstm_mips_ixx_board_desc[i].name;		cstm_mips_ixx_map[i].size = cstm_mips_ixx_board_desc[i].window_size;		cstm_mips_ixx_map[i].bankwidth = cstm_mips_ixx_board_desc[i].bankwidth;#if defined(CONFIG_MIPS_ITE8172) || defined(CONFIG_MIPS_IVR)                cstm_mips_ixx_map[i].set_vpp = cstm_mips_ixx_set_vpp;#endif		simple_map_init(&cstm_mips_ixx_map[i]);		//printk(KERN_NOTICE "cstm_mips_ixx: ioremap is %x\n",(unsigned int)(cstm_mips_ixx_map[i].virt));	}#if defined(CONFIG_MIPS_ITE8172) || defined(CONFIG_MIPS_IVR)        setup_ITE_IVR_flash();#endif /* defined(CONFIG_MIPS_ITE8172) || defined(CONFIG_MIPS_IVR) */	for (i=0;i<PHYSMAP_NUMBER;i++) {                parts = &cstm_mips_ixx_partitions[i][0];		jedec = 0;		mymtd = (struct mtd_info *)do_map_probe("cfi_probe", &cstm_mips_ixx_map[i]);		//printk(KERN_NOTICE "phymap %d cfi_probe: mymtd is %x\n",i,(unsigned int)mymtd);		if (!mymtd) {			jedec = 1;			mymtd = (struct mtd_info *)do_map_probe("jedec", &cstm_mips_ixx_map[i]);		        printk(KERN_NOTICE "cstm_mips_ixx %d jedec: mymtd is %x\n",i,(unsigned int)mymtd);		}		if (mymtd) {			mymtd->owner = THIS_MODULE;	                cstm_mips_ixx_map[i].map_priv_2 = (unsigned long)mymtd;		        add_mtd_partitions(mymtd, parts, cstm_mips_ixx_board_desc[i].num_partitions);		}		else	           return -ENXIO;	}	return 0;}static void __exit cleanup_cstm_mips_ixx(void){	int i;        struct mtd_info *mymtd;	for (i=0;i<PHYSMAP_NUMBER;i++) {	        mymtd = (struct mtd_info *)cstm_mips_ixx_map[i].map_priv_2;		if (mymtd) {			del_mtd_partitions(mymtd);			map_destroy(mymtd);		}		if (cstm_mips_ixx_map[i].virt) {			iounmap((void *)cstm_mips_ixx_map[i].virt);			cstm_mips_ixx_map[i].virt = 0;		}	}}#if defined(CONFIG_MIPS_ITE8172) || defined(CONFIG_MIPS_IVR)void PCISetULongByOffset(__u32 DevNumber, __u32 FuncNumber, __u32 Offset, __u32 data){	__u32	offset;	offset = ( unsigned long )( 0x80000000 | ( DevNumber << 11 ) + ( FuncNumber << 8 ) + Offset) ;	*(__u32 *)CC_CONFADDR = offset;		*(__u32 *)CC_CONFDATA = data;}void setup_ITE_IVR_flash(){		__u32	size, base;		size = 0x0e000000;		// 32MiB		base = (0x08000000) >> 8 >>1; // Bug: we must shift one more bit		/* need to set ITE flash to 32 bits instead of default 8 */#ifdef CONFIG_MIPS_IVR		*(__u32 *)CC_FC_FCR = 0x55;		*(__u32 *)CC_GPACR = 0xfffc;#else		*(__u32 *)CC_FC_FCR = 0x77;#endif		/* turn bursting off */		*(__u32 *)CC_FC_DCR = 0x0;		/* setup for one chip 4 byte PCI access */		PCISetULongByOffset(CC_M68K_DEVICE, CC_M68K_FUNCTION, 0x60, size | base);		PCISetULongByOffset(CC_M68K_DEVICE, CC_M68K_FUNCTION, 0x64, 0x02);}#endif /* defined(CONFIG_MIPS_ITE8172) || defined(CONFIG_MIPS_IVR) */module_init(init_cstm_mips_ixx);module_exit(cleanup_cstm_mips_ixx);MODULE_LICENSE("GPL");MODULE_AUTHOR("Alice Hennessy <ahennessy@mvista.com>");MODULE_DESCRIPTION("MTD map driver for ITE 8172G and Globespan IVR boards");

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线免费不卡电影| 亚洲人成伊人成综合网小说| 精品国产一区a| 久久先锋资源网| 国产精品美女久久久久aⅴ| 国产精品九色蝌蚪自拍| 亚洲麻豆国产自偷在线| 亚洲欧洲精品一区二区三区| 久久网站最新地址| 国产精品国产成人国产三级| 国产精品高潮呻吟| 亚洲一级二级在线| 亚洲大型综合色站| 国产盗摄一区二区三区| 色综合色综合色综合| 91.com视频| 精品久久久久久最新网址| 2020国产成人综合网| 国产精品不卡在线| 视频一区二区三区中文字幕| 经典一区二区三区| 91麻豆福利精品推荐| 国产精品美女一区二区| 亚洲一区二区三区四区中文字幕| 国产精品久久久久久久久免费相片 | 亚洲一区二区综合| 久久精品国产999大香线蕉| 丝袜美腿一区二区三区| 精品系列免费在线观看| 色天使久久综合网天天| 欧美成人r级一区二区三区| 国产欧美精品在线观看| 午夜伦欧美伦电影理论片| 国产一区二区三区免费播放| 国精产品一区一区三区mba桃花| 91亚洲永久精品| 欧美成人性福生活免费看| 一区二区三区欧美| 国产精品自在在线| 欧洲视频一区二区| 国产日韩精品一区二区三区在线| 亚洲综合另类小说| 国产乱码字幕精品高清av | 欧美日韩国产乱码电影| 欧美成人激情免费网| 日韩理论片一区二区| 一区二区久久久久久| 国产一区视频在线看| 在线影院国内精品| 精品1区2区在线观看| 亚洲风情在线资源站| 国产成人在线色| 91精品黄色片免费大全| 中文字幕一区二区不卡| 男男视频亚洲欧美| 欧美性受xxxx黑人xyx| 国产精品欧美一级免费| 久久99久久99小草精品免视看| 国产91对白在线观看九色| 欧美老人xxxx18| 日韩理论片网站| 福利一区福利二区| 91亚洲精品乱码久久久久久蜜桃| 欧美精品一区在线观看| 天天综合日日夜夜精品| 91黄色激情网站| 中文字幕电影一区| 国产一区二区调教| 日韩欧美国产一区二区在线播放| 亚洲精品国产一区二区精华液| 国产高清不卡一区| 日韩欧美电影在线| 人人精品人人爱| 欧美日韩一级二级| 亚洲视频一二三区| 丰满少妇久久久久久久| 久久久国产精华| 日韩精品三区四区| 欧美美女直播网站| 午夜精品久久久久影视| 欧美日韩一区不卡| 亚洲日本在线观看| 精品在线视频一区| 欧美不卡一区二区| 久久精品国产99国产| 欧美成人三级电影在线| 日本系列欧美系列| 欧美亚洲自拍偷拍| 亚洲视频1区2区| 91婷婷韩国欧美一区二区| 亚洲人精品一区| 91久久线看在观草草青青| 亚洲图片你懂的| 91国产视频在线观看| 亚洲日本丝袜连裤袜办公室| 91麻豆文化传媒在线观看| 亚洲欧美日韩一区二区| 欧美午夜精品一区| 五月激情综合色| 91精品国产综合久久久久| 日本三级韩国三级欧美三级| 这里只有精品免费| 久久国产麻豆精品| 久久亚洲欧美国产精品乐播 | 激情小说亚洲一区| 日韩三级中文字幕| 韩国精品主播一区二区在线观看| 精品国产乱码久久久久久闺蜜| 国内精品国产三级国产a久久| 欧美极品美女视频| 精品在线免费视频| 精品国产亚洲在线| 丁香桃色午夜亚洲一区二区三区| 国产精品欧美久久久久一区二区| 一本久久综合亚洲鲁鲁五月天| 亚洲小说春色综合另类电影| 8v天堂国产在线一区二区| 日本一不卡视频| 欧美成人a在线| 国产综合色视频| 国产精品久久久久久久久图文区| 色狠狠色狠狠综合| 日韩成人免费电影| 日韩精品一区二区三区三区免费 | 成人妖精视频yjsp地址| 亚洲欧美视频在线观看| 欧美区一区二区三区| 亚洲男同1069视频| 欧美精品第1页| 国产传媒欧美日韩成人| 久久久噜噜噜久噜久久综合| 91麻豆国产在线观看| 亚洲成人动漫av| 国产亚洲精品超碰| 一本大道av一区二区在线播放| 石原莉奈在线亚洲三区| 337p日本欧洲亚洲大胆精品 | 久久亚洲春色中文字幕久久久| 成人一级片在线观看| 麻豆精品一区二区三区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 日韩中文字幕区一区有砖一区| 久久美女艺术照精彩视频福利播放| 色视频成人在线观看免| 亚洲第一久久影院| 国产精品久久久久久久岛一牛影视 | 欧美三级日韩在线| 国产精品影视在线| 亚洲欧美日韩国产综合在线| 久久久精品一品道一区| 欧美日韩aaaaa| 91色porny在线视频| 国产又黄又大久久| 午夜av一区二区| 亚洲色大成网站www久久九九| www激情久久| 91精品国产综合久久精品麻豆| 99久久免费国产| 国产69精品一区二区亚洲孕妇 | 在线成人免费观看| 成人精品在线视频观看| 日本不卡一区二区| 亚洲日本免费电影| 国产午夜亚洲精品理论片色戒| 欧美日韩国产不卡| 色综合中文字幕| 激情综合五月天| 九九热在线视频观看这里只有精品| 亚洲欧美福利一区二区| 久久色中文字幕| 日韩精品一区在线观看| 99re成人在线| 不卡视频一二三四| 国产一区二区视频在线| 久久精品国产77777蜜臀| 天堂一区二区在线免费观看| 有坂深雪av一区二区精品| 午夜视频一区在线观看| 伊人性伊人情综合网| 国产精品初高中害羞小美女文| 欧美国产精品一区| 精品国产91九色蝌蚪| 欧美mv日韩mv国产网站app| 欧美高清视频不卡网| 欧美日韩成人综合天天影院| 欧美在线你懂得| 99在线精品视频| 成人av网站在线| 婷婷综合五月天| 性久久久久久久久久久久| 亚洲欧美另类图片小说| 亚洲美女少妇撒尿| 亚洲免费观看高清完整版在线观看 | 欧美一区二区三区视频| 欧美三区在线观看| 91蝌蚪porny| 在线观看亚洲a| 欧美日韩中字一区| 色狠狠一区二区| 欧美性受xxxx|