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

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

?? powerpmc250.c

?? nandflash k9g808u0a在pxa270的驅動,由于pxa270沒有nandflash接口
?? C
字號:
/* *  Mapping for Force PowerPMC250 * *  Copyright 2002 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/spinlock.h>#include <asm/io.h>#include <asm/system.h>#include <linux/mtd/mtd.h>#include <linux/mtd/map.h>#include <linux/mtd/cfi.h>#include <linux/mtd/partitions.h>typedef union {        double dbl;        __u64 u64;        __u32 u32[2];        __u16 u16[4];        __u8  u8[8];} cfi_union;/* * This mapping relies on support for Intel and AMD flash chips being * enabled.  If you choose to enable the 'Specific CFI Flash geometry * selection' option, then the CONFIG_MTD_CFI_B8 and CONFIG_MTD_CFI_I4 * config options must also be set.  These options enable handling of * a 64-bit organized flash bank comprised of a pair of 2 x16 * interleaved chips. */#define BOOT_FLASH	0xff800000#define BOOT_FLASH_SIZE	0x00800000#define USER_FLASH	0x7c000000#define USER_FLASH_SIZE 0x04000000__u8 boot_read8(struct map_info *map, unsigned long ofs){       return __raw_readb(map->map_priv_1 + ofs);}__u16 boot_read16(struct map_info *map, unsigned long ofs){       return __raw_readw(map->map_priv_1 + ofs);}__u32 boot_read32(struct map_info *map, unsigned long ofs){       return __raw_readl(map->map_priv_1 + ofs);}void boot_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len){       memcpy(to, (void *)(map->map_priv_1  + from), len);}void boot_write8(struct map_info *map, __u8 d, unsigned long adr){       __raw_writeb(d, map->map_priv_1 + adr);       mb();}void boot_write16(struct map_info *map, __u16 d, unsigned long adr){       __raw_writew(d, map->map_priv_1 + adr);       mb();}void boot_write32(struct map_info *map, __u32 d, unsigned long adr){       __raw_writel(d, map->map_priv_1 + adr);       mb();}void boot_copy_to(struct map_info *map, unsigned long to, const void *from, ssize_t len){       memcpy((void *)(map->map_priv_1  + to), from, len);}/* 64 bit accesses */__u64 read64(unsigned long addr){	volatile double * d = (double *)addr;	cfi_union temp;	temp.dbl = *d;	mb();	return(temp.u64);}void write64(unsigned long addr, __u64 d){	double *target = (double *)addr;	volatile cfi_union temp;	temp.u64 = d;		*target = temp.dbl;	mb();}#define ALIGN 7static spinlock_t cfi_lock = SPIN_LOCK_UNLOCKED;#define CFI_LOCK	cfi_union temp;	\			unsigned long flags; \			spin_lock_irqsave(&cfi_lock, flags); \			enable_kernel_fp()#define CFI_UNLOCK	spin_unlock_irqrestore(&cfi_lock, flags)		__u8 user_read8(struct map_info *map, unsigned long ofs){	CFI_LOCK;	temp.u64 = read64(map->map_priv_1 + (ofs & ~ALIGN));	CFI_UNLOCK;	return (temp.u8[ofs & ALIGN]);}__u16 user_read16(struct map_info *map, unsigned long ofs){		CFI_LOCK;	temp.u64 = read64(map->map_priv_1 + (ofs & ~ALIGN));	CFI_UNLOCK;	return (temp.u16[(ofs & ALIGN) >> 1 ]);}__u32 user_read32(struct map_info *map, unsigned long ofs){	CFI_LOCK;	temp.u64 = read64(map->map_priv_1 + (ofs & ~ALIGN));	CFI_UNLOCK;	return (temp.u32[(ofs & ALIGN) >> 2 ]);}__u64 user_read64(struct map_info *map, unsigned long ofs){	CFI_LOCK;	temp.u64 = read64(map->map_priv_1 + ofs);	CFI_UNLOCK;	return (temp.u64);}void user_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len){	/* long held lock? Oh well. */	CFI_LOCK;	while(len) {		unsigned long i;		unsigned long extra = len;		if (len > 8)			extra = 8;		temp.u64 = read64(map->map_priv_1 + from);		for (i = 0; i < extra; i++)			*(char *)(to + i) = temp.u8[i];		to += extra;		from += extra;		len -= extra;	}	CFI_UNLOCK;       //memcpy(to, (void *)(map->map_priv_1  + from), len);}void user_write8(struct map_info *map, __u8 d, unsigned long adr){	panic("user flash 8bit write called!\n");       //__raw_writeb(d, map->map_priv_1 + adr);}void user_write16(struct map_info *map, __u16 d, unsigned long adr){	panic("user flash 16bit write called!\n");       //__raw_writew(d, map->map_priv_1 + adr);}void user_write32(struct map_info *map, __u32 d, unsigned long adr){	panic("user flash 32bit write called!\n");       //__raw_writel(d, map->map_priv_1 + adr);}void user_write64(struct map_info *map, __u64 d, unsigned long adr){	CFI_LOCK;	write64(map->map_priv_1 + adr, d);	CFI_UNLOCK;}void user_copy_to(struct map_info *map, unsigned long to, const void *from, ssize_t len){	panic("user flash user_copy_to called!\n");       //memcpy((void *)(map->map_priv_1  + to), from, len);}static struct map_info boot_map = {		name: "PowerPMC250 Boot Flash",		size: BOOT_FLASH_SIZE,		buswidth: 1,		read8: boot_read8,		read16: boot_read16,		read32: boot_read32,		copy_from: boot_copy_from,		write8: boot_write8,		write16: boot_write16,		write32: boot_write32,		copy_to: boot_copy_to};static struct map_info user_map = {		name: "PowerPMC250 User Flash",		size: USER_FLASH_SIZE,		buswidth: 8,		read8: user_read8,		read16: user_read16,		read32: user_read32,		read64: user_read64,		copy_from: user_copy_from,		write8: user_write8,		write16: user_write16,		write32: user_write32,		write64: user_write64,		copy_to: user_copy_to};static struct mtd_partition powerpmc250_flash_partitions[] = {	{		name: "PowerPMC PowerBoot Firmware",		offset: 0,		size:	0x50000,		mask_flags: MTD_WRITEABLE 	/* read-only */	},	{			name: "PowerPMC Boot Kernel",		offset: 0x50000,		size:	MTDPART_SIZ_FULL	}};#define NR_OF(x) (sizeof(x)/sizeof(x[0]))static struct mtd_info *mymtd[2] = {NULL, NULL};int __init init_powerpmc250(void){ 	printk("%s: %08x at %08x\n", user_map.name,			(unsigned int)user_map.size, USER_FLASH);		boot_map.map_priv_1 = (unsigned long)ioremap(BOOT_FLASH,			boot_map.size);	user_map.map_priv_1 = (unsigned long)ioremap(USER_FLASH,			user_map.size+8);	if (!boot_map.map_priv_1) {		printk("Failed to ioremap %08x\n", BOOT_FLASH);		return -EIO;	}		if (!user_map.map_priv_1) {		printk("Failed to ioremap %08x\n", USER_FLASH);		return -EIO;	}	mymtd[0] = do_map_probe("cfi_probe", &user_map);	if (mymtd[0]){		mymtd[0]->module = THIS_MODULE;		add_mtd_device(mymtd[0]);	} else {		iounmap((void *)user_map.map_priv_1);	}	mymtd[1] = do_map_probe("cfi_probe", &boot_map);	if (!mymtd[1])		mymtd[1] = do_map_probe("jedec", &boot_map);	if (!mymtd)		mymtd[1] = do_map_probe("map_rom", &boot_map);	if (mymtd[1]) {		mymtd[1]->module = THIS_MODULE;		add_mtd_partitions(mymtd[1], powerpmc250_flash_partitions,					NR_OF(powerpmc250_flash_partitions));	} else {		iounmap((void *)boot_map.map_priv_1);	}					if(mymtd[0])		return 0;	else		return -ENXIO;}static void __exit cleanup_powerpmc250(void){	int i;	for (i=0; i<2; i++){		if (mymtd[i]) {			del_mtd_partitions(mymtd[i]);			map_destroy(mymtd[i]);		}	}	if (boot_map.map_priv_1) {		iounmap((void *)boot_map.map_priv_1);		boot_map.map_priv_1 = 0;	}	if (user_map.map_priv_1) {		iounmap((void *)user_map.map_priv_1);		user_map.map_priv_1 = 0;	}}module_init(init_powerpmc250);module_exit(cleanup_powerpmc250);MODULE_AUTHOR("Troy Benjegerdes <tbenjegerdes@mvista.com>");MODULE_DESCRIPTION("MTD map driver for Force PowerPMC250");MODULE_LICENSE("GPL");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
狠狠色丁香婷婷综合久久片| 亚洲综合小说图片| 日韩精品一区二区三区老鸭窝| 91一区在线观看| 成人av中文字幕| 91网页版在线| 在线免费观看视频一区| 91免费观看国产| 在线观看视频一区二区| 欧美人狂配大交3d怪物一区| 欧美精品丝袜久久久中文字幕| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 色8久久精品久久久久久蜜| 色噜噜久久综合| 欧美肥大bbwbbw高潮| 精品少妇一区二区三区日产乱码| 精品国产91久久久久久久妲己 | 中文字幕中文乱码欧美一区二区| 欧美国产欧美亚州国产日韩mv天天看完整 | 免费观看在线综合| 韩国v欧美v日本v亚洲v| 丁香激情综合五月| 日本高清免费不卡视频| 欧美日韩免费观看一区三区| 91精品啪在线观看国产60岁| 精品久久久久av影院| 日韩一区二区三区视频在线观看 | 3751色影院一区二区三区| 日韩精品中文字幕一区二区三区| 国产偷国产偷精品高清尤物 | 美女脱光内衣内裤视频久久影院| 国产在线视视频有精品| 一本色道亚洲精品aⅴ| 日韩欧美成人午夜| 国产精品视频一二三区| 五月婷婷综合激情| 成人黄色网址在线观看| 7777精品久久久大香线蕉 | 亚洲福利一区二区三区| 精品制服美女丁香| 色婷婷综合久久| 久久精品欧美一区二区三区不卡| 一区二区三区免费在线观看| 激情六月婷婷久久| 欧日韩精品视频| 国产日韩高清在线| 免费不卡在线观看| 欧美怡红院视频| 国产精品久久免费看| 毛片不卡一区二区| 欧美日韩日日夜夜| 亚洲免费在线播放| 成人小视频免费观看| 欧美zozozo| 免费视频最近日韩| 在线观看三级视频欧美| 日本一区二区视频在线| 久久精品国产亚洲高清剧情介绍| 91福利国产精品| 亚洲欧洲精品一区二区三区不卡| 精品一区二区三区免费播放| 欧美日韩国产一区| 亚洲一区成人在线| 色综合色狠狠综合色| 中日韩av电影| 国产999精品久久| 久久蜜桃av一区精品变态类天堂 | 91成人看片片| 日韩毛片视频在线看| 国产精品中文字幕日韩精品 | 色婷婷精品大视频在线蜜桃视频| 国产日韩欧美激情| 国产成a人亚洲精品| 久久网站最新地址| 国产真实乱对白精彩久久| www久久精品| 国产精品综合一区二区| 久久亚洲二区三区| 成人性生交大片免费看中文网站| 日韩欧美一级在线播放| 久久国产日韩欧美精品| 日韩免费高清电影| 国产激情一区二区三区桃花岛亚洲| 精品久久久久久久一区二区蜜臀| 久久99精品国产91久久来源| 久久久久9999亚洲精品| 国产91在线看| 亚洲欧美乱综合| 欧美精品高清视频| 麻豆免费精品视频| 久久久久高清精品| 成人av网站免费观看| 亚洲美腿欧美偷拍| 在线播放欧美女士性生活| 激情av综合网| 中文av一区二区| 欧美午夜不卡在线观看免费| 青青草国产精品亚洲专区无| 久久婷婷国产综合国色天香 | 午夜精品在线视频一区| 日韩精品一区二区三区四区视频 | 美女www一区二区| 久久久久久久久久美女| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 全国精品久久少妇| 久久亚洲综合色| 色欧美乱欧美15图片| 久久精品国产精品亚洲精品| 国产精品三级av| 欧美一区在线视频| 91在线视频播放| 蜜桃精品视频在线| 1区2区3区国产精品| 欧美一区二区视频在线观看| 粉嫩av一区二区三区粉嫩| 亚洲第一成人在线| 国产精品美女久久久久久| 欧美疯狂性受xxxxx喷水图片| 国产成人av自拍| 天天av天天翘天天综合网| 中文字幕二三区不卡| 欧美久久一二区| 99久久精品国产导航| 久久精品国产一区二区| 亚洲香肠在线观看| 日韩美女啊v在线免费观看| 亚洲精品一线二线三线无人区| 色婷婷av一区二区三区大白胸| 国产一区二区中文字幕| 日韩精品福利网| 亚洲美女视频一区| 久久久国产精品麻豆| 欧美一区二区三区男人的天堂| 99精品在线免费| 成人晚上爱看视频| 精品一区免费av| 青青草原综合久久大伊人精品| 一区二区三区高清| 亚洲欧洲国产专区| 国产精品另类一区| 久久久不卡网国产精品一区| 欧美精品99久久久**| 欧美亚洲国产怡红院影院| 99视频在线观看一区三区| 国产经典欧美精品| 国产精品白丝av| 国产毛片精品国产一区二区三区| 麻豆精品在线视频| 久久97超碰国产精品超碰| 日韩av一级电影| 美女国产一区二区| 激情五月激情综合网| 国产在线视视频有精品| 精品无人码麻豆乱码1区2区| 青青草国产成人av片免费| 麻豆精品视频在线| 久久精品国产一区二区三区免费看| 五月天精品一区二区三区| 日韩高清欧美激情| 美国毛片一区二区三区| 久久精品国产**网站演员| 青青草精品视频| 国产一区二区免费在线| 国产91色综合久久免费分享| 国产主播一区二区| voyeur盗摄精品| 欧美日韩中文国产| 日韩天堂在线观看| 久久一区二区三区四区| 中文字幕一区三区| 亚洲成人在线免费| 韩国中文字幕2020精品| 国产经典欧美精品| 在线免费视频一区二区| 欧美一级艳片视频免费观看| 亚洲精品在线电影| 亚洲精品你懂的| 日本午夜一区二区| 国产成a人无v码亚洲福利| 色婷婷综合久久久中文一区二区| 欧美狂野另类xxxxoooo| 精品av久久707| 亚洲色图制服丝袜| 日韩极品在线观看| 波多野洁衣一区| 在线电影院国产精品| 国产夜色精品一区二区av| 亚洲精品乱码久久久久久黑人| 亚洲国产一区视频| 国产精品一区二区果冻传媒| 日本韩国欧美在线| 久久亚洲综合av| 天天色综合成人网| jizzjizzjizz欧美| 日韩免费在线观看| 亚洲综合一区二区三区| 国产一区啦啦啦在线观看| 欧美日韩国产在线播放网站| 国产精品乱人伦| 麻豆91免费观看|