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

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

?? sun_uflash.c

?? mtd 模塊 good for you
?? C
字號:
/* $Id: sun_uflash.c,v 1.4 2001/10/02 15:05:14 dwmw2 Exp $ * * sun_uflash - Driver implementation for user-programmable flash * present on many Sun Microsystems SME boardsets. * * This driver does NOT provide access to the OBP-flash for * safety reasons-- use <linux>/drivers/sbus/char/flash.c instead. * * Copyright (c) 2001 Eric Brower (ebrower@usa.net) * */#include <linux/kernel.h>#include <linux/module.h>#include <linux/version.h>#include <linux/fs.h>#include <linux/errno.h>#include <linux/init.h>#include <linux/ioport.h>#include <asm/ebus.h>#include <asm/oplib.h>#include <asm/uaccess.h>#include <asm/io.h>#include <linux/mtd/mtd.h>#include <linux/mtd/map.h>#define UFLASH_OBPNAME	"flashprom"#define UFLASH_DEVNAME 	"userflash"#define UFLASH_WINDOW_SIZE	0x200000#define UFLASH_BUSWIDTH		1			/* EBus is 8-bit */MODULE_AUTHOR	("Eric Brower <ebrower@usa.net>");MODULE_DESCRIPTION	("User-programmable flash device on Sun Microsystems boardsets");MODULE_SUPPORTED_DEVICE	("userflash");MODULE_LICENSE	("GPL");static LIST_HEAD(device_list);struct uflash_dev {	char *			name;	/* device name */	struct map_info 	map;	/* mtd map info */	struct mtd_info *	mtd;	/* mtd info */	struct list_head	list;};__u8 uflash_read8(struct map_info *map, unsigned long ofs){	return(__raw_readb(map->map_priv_1 + ofs));}__u16 uflash_read16(struct map_info *map, unsigned long ofs){	return(__raw_readw(map->map_priv_1 + ofs));}__u32 uflash_read32(struct map_info *map, unsigned long ofs){	return(__raw_readl(map->map_priv_1 + ofs));}void uflash_copy_from(struct map_info *map, void *to, unsigned long from, 		      ssize_t len){	memcpy_fromio(to, map->map_priv_1 + from, len);}void uflash_write8(struct map_info *map, __u8 d, unsigned long adr){	__raw_writeb(d, map->map_priv_1 + adr);}void uflash_write16(struct map_info *map, __u16 d, unsigned long adr){	__raw_writew(d, map->map_priv_1 + adr);}void uflash_write32(struct map_info *map, __u32 d, unsigned long adr){	__raw_writel(d, map->map_priv_1 + adr);}void uflash_copy_to(struct map_info *map, unsigned long to, const void *from,		    ssize_t len){	memcpy_toio(map->map_priv_1 + to, from, len);}struct map_info uflash_map_templ = {		name:		"SUNW,???-????",		size:		UFLASH_WINDOW_SIZE,		buswidth:	UFLASH_BUSWIDTH,		read8:		uflash_read8,		read16:		uflash_read16,		read32:		uflash_read32,		copy_from:	uflash_copy_from,		write8:		uflash_write8,		write16:	uflash_write16,		write32:	uflash_write32,		copy_to:	uflash_copy_to};int uflash_devinit(struct linux_ebus_device* edev){	int iTmp, nregs;	struct linux_prom_registers regs[2];	struct uflash_dev *pdev;	iTmp = prom_getproperty(		edev->prom_node, "reg", (void *)regs, sizeof(regs));	if ((iTmp % sizeof(regs[0])) != 0) {		printk("%s: Strange reg property size %d\n", 			UFLASH_DEVNAME, iTmp);		return -ENODEV;	}	nregs = iTmp / sizeof(regs[0]);	if (nregs != 1) {		/* Non-CFI userflash device-- once I find one we		 * can work on supporting it.		 */		printk("%s: unsupported device at 0x%lx (%d regs): " \			"email ebrower@usa.net\n", 			UFLASH_DEVNAME, edev->resource[0].start, nregs);		return -ENODEV;	}	if(0 == (pdev = kmalloc(sizeof(struct uflash_dev), GFP_KERNEL))) {		printk("%s: unable to kmalloc new device\n", UFLASH_DEVNAME);		return(-ENOMEM);	}		/* copy defaults and tweak parameters */	memcpy(&pdev->map, &uflash_map_templ, sizeof(uflash_map_templ));	pdev->map.size = regs[0].reg_size;	iTmp = prom_getproplen(edev->prom_node, "model");	pdev->name = kmalloc(iTmp, GFP_KERNEL);	prom_getstring(edev->prom_node, "model", pdev->name, iTmp);	if(0 != pdev->name && 0 < strlen(pdev->name)) {		pdev->map.name = pdev->name;	}	pdev->map.map_priv_1 = 		(unsigned long)ioremap_nocache(edev->resource[0].start, pdev->map.size);	if(0 == pdev->map.map_priv_1) {		printk("%s: failed to map device\n", __FUNCTION__);		kfree(pdev->name);		kfree(pdev);		return(-1);	}	/* MTD registration */	pdev->mtd = do_map_probe("cfi_probe", &pdev->map);	if(0 == pdev->mtd) {		iounmap((void *)pdev->map.map_priv_1);		kfree(pdev->name);		kfree(pdev);		return(-ENXIO);	}	list_add(&pdev->list, &device_list);	pdev->mtd->module = THIS_MODULE;	add_mtd_device(pdev->mtd);	return(0);}static int __init uflash_init(void){	struct linux_ebus *ebus = NULL;	struct linux_ebus_device *edev = NULL;	for_each_ebus(ebus) {		for_each_ebusdev(edev, ebus) {			if (!strcmp(edev->prom_name, UFLASH_OBPNAME)) {				if(0 > prom_getproplen(edev->prom_node, "user")) {					DEBUG(2, "%s: ignoring device at 0x%lx\n",							UFLASH_DEVNAME, edev->resource[0].start);				} else {					uflash_devinit(edev);				}			}		}	}	if(list_empty(&device_list)) {		printk("%s: unable to locate device\n", UFLASH_DEVNAME);		return -ENODEV;	}	return(0);}static void __exit uflash_cleanup(void){	struct list_head *udevlist;	struct uflash_dev *udev;	list_for_each(udevlist, &device_list) {		udev = list_entry(udevlist, struct uflash_dev, list);		DEBUG(2, "%s: removing device %s\n", 			UFLASH_DEVNAME, udev->name);		if(0 != udev->mtd) {			del_mtd_device(udev->mtd);			map_destroy(udev->mtd);		}		if(0 != udev->map.map_priv_1) {			iounmap((void*)udev->map.map_priv_1);			udev->map.map_priv_1 = 0;		}		if(0 != udev->name) {			kfree(udev->name);		}		kfree(udev);	}	}module_init(uflash_init);module_exit(uflash_cleanup);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女国产一区二区| 欧美日高清视频| 欧美理论在线播放| 国产性做久久久久久| 亚洲国产精品久久不卡毛片| 粉嫩在线一区二区三区视频| 欧美日韩激情一区| 亚洲精品国久久99热| 国产老肥熟一区二区三区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 91精品欧美综合在线观看最新 | 亚洲人成伊人成综合网小说| 秋霞午夜av一区二区三区| 一本到不卡精品视频在线观看| 日韩视频免费观看高清完整版 | 久久久久久久久久久久久女国产乱| 一区二区三区精品视频在线| 处破女av一区二区| 久久综合狠狠综合久久综合88 | 亚洲欧美国产三级| 成人蜜臀av电影| 久久久高清一区二区三区| 麻豆精品视频在线观看| 欧美日韩国产高清一区二区三区 | 一区2区3区在线看| 91在线视频网址| 久久精品亚洲精品国产欧美| 免费人成精品欧美精品| 欧洲色大大久久| 一区二区三区欧美视频| 99精品国产91久久久久久| 欧美激情一区二区三区蜜桃视频 | 精品国产乱码久久久久久久久| 婷婷久久综合九色国产成人| 欧美色涩在线第一页| 亚洲精品中文在线| 在线一区二区三区四区五区| 亚洲欧美成aⅴ人在线观看| 成人app网站| 亚洲天天做日日做天天谢日日欢| 成人免费视频一区二区| 中文字幕一区二区三区在线播放| 成人h动漫精品一区二区| 中文一区二区在线观看| 91在线视频播放| 一区二区免费在线| 欧美三级欧美一级| 免费看日韩a级影片| 欧美电影免费观看高清完整版在线观看| 奇米精品一区二区三区在线观看一| 欧美日韩亚洲高清一区二区| 日本免费新一区视频| 久久亚洲欧美国产精品乐播| 懂色av一区二区在线播放| 国产精品热久久久久夜色精品三区 | 国产精品性做久久久久久| 欧美国产一区在线| 在线欧美小视频| 免费日韩伦理电影| 国产精品免费视频一区| 91福利小视频| 免费观看在线色综合| 久久日一线二线三线suv| a在线播放不卡| 丝袜诱惑亚洲看片| 2024国产精品| 91黄色免费版| 久久99精品久久久久久动态图| 国产欧美日韩麻豆91| 91电影在线观看| 国产精品原创巨作av| 一区二区三区国产| 久久综合九色综合欧美98| 91福利在线看| 国产露脸91国语对白| 亚洲成人在线免费| 国产精品家庭影院| 欧美一区二区视频在线观看2020| 成人午夜视频福利| 日本人妖一区二区| 亚洲三级在线观看| 久久一区二区视频| 欧美精品免费视频| av在线综合网| 激情小说亚洲一区| 亚洲r级在线视频| 国产精品每日更新在线播放网址| 欧美日韩大陆在线| 91理论电影在线观看| 激情五月激情综合网| 亚洲福利一二三区| 亚洲欧洲精品一区二区精品久久久 | 亚洲va天堂va国产va久| 国产午夜精品久久久久久久| 91精品国产综合久久久蜜臀图片| 91亚洲大成网污www| 国产资源在线一区| 日韩福利视频导航| 亚洲图片欧美一区| 亚洲色欲色欲www在线观看| 国产午夜精品久久| 精品精品国产高清一毛片一天堂| 欧美日韩色综合| 欧美丰满一区二区免费视频| 91在线视频播放地址| 成人av网站在线观看| 国产大陆亚洲精品国产| 精品一区二区三区免费毛片爱| 午夜激情久久久| 一级做a爱片久久| 亚洲欧美在线aaa| 中文字幕巨乱亚洲| 国产日韩欧美麻豆| 国产日韩欧美一区二区三区综合| 久久人人97超碰com| 精品国产91洋老外米糕| 精品国产一区二区三区久久久蜜月 | 毛片av中文字幕一区二区| 日韩精品午夜视频| 日韩电影免费在线看| 日韩中文字幕91| 琪琪一区二区三区| 喷白浆一区二区| 久久99这里只有精品| 韩国三级中文字幕hd久久精品| 九九热在线视频观看这里只有精品| 久久av资源站| 国产91色综合久久免费分享| 国产91精品免费| 91美女精品福利| 欧美三片在线视频观看| 在线电影院国产精品| 日韩一级欧美一级| 久久蜜桃av一区二区天堂| 久久夜色精品国产噜噜av| ww久久中文字幕| 中文字幕在线一区| 亚洲一线二线三线久久久| 日韩国产高清影视| 国产成人精品在线看| 一本大道久久a久久综合婷婷| 欧美少妇bbb| 久久综合一区二区| 一区在线播放视频| 日韩国产欧美一区二区三区| 国产精品白丝av| 色欧美88888久久久久久影院| 欧美日韩二区三区| 久久精品一区二区| 一区二区高清免费观看影视大全| 日本亚洲最大的色成网站www| 国产99久久精品| 欧美亚洲综合网| 26uuu另类欧美| 一区二区国产视频| 国产精品一区在线观看乱码| 色综合久久九月婷婷色综合| 日韩一区二区三区视频| 国产精品久久久久久久久动漫| 亚洲一区二区不卡免费| 国产精品中文字幕一区二区三区| 欧美亚洲综合色| 欧美激情一区二区| 麻豆久久久久久| 在线这里只有精品| 国产精品免费视频观看| 精品亚洲成a人在线观看| 色婷婷av久久久久久久| 久久久久久免费网| 日韩二区在线观看| 91网站视频在线观看| 久久蜜桃一区二区| 久久精品国产久精国产| 欧美在线看片a免费观看| 欧美激情在线一区二区| 国产一区二区久久| 欧美高清你懂得| 亚洲激情一二三区| 99精品视频在线观看免费| 久久综合久久鬼色| 蜜桃av一区二区在线观看| 欧美性猛片aaaaaaa做受| 中文字幕五月欧美| 国产伦精一区二区三区| 日韩女优视频免费观看| 日韩中文欧美在线| 欧美三级日韩在线| 亚洲午夜精品在线| 在线免费一区三区| 夜夜爽夜夜爽精品视频| 99re这里只有精品首页| 国产精品污污网站在线观看| 精品在线一区二区| 欧美电影免费提供在线观看| 免费在线观看不卡| 欧美videos中文字幕| 美女爽到高潮91| 欧洲精品在线观看| 国产精品伊人色| 日韩精品一区二区三区老鸭窝|