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

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

?? vmax301.c

?? MIZI Research, Inc.發布的嵌入式Linux內核源碼
?? C
字號:
// $Id: vmax301.c,v 1.24 2001/10/02 15:05:14 dwmw2 Exp $/* ######################################################################   Tempustech VMAX SBC301 MTD Driver.     The VMAx 301 is a SBC based on . It   comes with three builtin AMD 29F016B flash chips and a socket for SRAM or   more flash. Each unit has it's own 8k mapping into a settable region    (0xD8000). There are two 8k mappings for each MTD, the first is always set   to the lower 8k of the device the second is paged. Writing a 16 bit page   value to anywhere in the first 8k will cause the second 8k to page around.   To boot the device a bios extension must be installed into the first 8k    of flash that is smart enough to copy itself down, page in the rest of    itself and begin executing.      ##################################################################### */#include <linux/module.h>#include <linux/slab.h>#include <linux/ioport.h>#include <linux/init.h>#include <linux/spinlock.h>#include <asm/io.h>#include <linux/mtd/map.h>#define WINDOW_START 0xd8000#define WINDOW_LENGTH 0x2000#define WINDOW_SHIFT 25#define WINDOW_MASK 0x1FFF/* Actually we could use two spinlocks, but we'd have to have   more private space in the struct map_info. We lose a little   performance like this, but we'd probably lose more by having   the extra indirection from having one of the map->map_priv    fields pointing to yet another private struct.*/static spinlock_t vmax301_spin = SPIN_LOCK_UNLOCKED;static void __vmax301_page(struct map_info *map, unsigned long page){	writew(page, map->map_priv_2 - WINDOW_LENGTH);	map->map_priv_1 = page;}static inline void vmax301_page(struct map_info *map,				  unsigned long ofs){	unsigned long page = (ofs >> WINDOW_SHIFT);	if (map->map_priv_1 != page)		__vmax301_page(map, page);}static __u8 vmax301_read8(struct map_info *map, unsigned long ofs){	__u8 ret;	spin_lock(&vmax301_spin);	vmax301_page(map, ofs);	ret = readb(map->map_priv_2 + (ofs & WINDOW_MASK));	spin_unlock(&vmax301_spin);	return ret;}static __u16 vmax301_read16(struct map_info *map, unsigned long ofs){	__u16 ret;	spin_lock(&vmax301_spin);	vmax301_page(map, ofs);	ret = readw(map->map_priv_2 + (ofs & WINDOW_MASK));	spin_unlock(&vmax301_spin);	return ret;}static __u32 vmax301_read32(struct map_info *map, unsigned long ofs){	__u32 ret;	spin_lock(&vmax301_spin);	vmax301_page(map, ofs);	ret =  readl(map->map_priv_2 + (ofs & WINDOW_MASK));	spin_unlock(&vmax301_spin);	return ret;}static void vmax301_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len){	while(len) {		unsigned long thislen = len;		if (len > (WINDOW_LENGTH - (from & WINDOW_MASK)))			thislen = WINDOW_LENGTH-(from & WINDOW_MASK);		spin_lock(&vmax301_spin);		vmax301_page(map, from);		memcpy_fromio(to, map->map_priv_2 + from, thislen);		spin_unlock(&vmax301_spin);		to += thislen;		from += thislen;		len -= thislen;	}}static void vmax301_write8(struct map_info *map, __u8 d, unsigned long adr){	spin_lock(&vmax301_spin);	vmax301_page(map, adr);	writeb(d, map->map_priv_2 + (adr & WINDOW_MASK));	spin_unlock(&vmax301_spin);}static void vmax301_write16(struct map_info *map, __u16 d, unsigned long adr){	spin_lock(&vmax301_spin);	vmax301_page(map, adr);	writew(d, map->map_priv_2 + (adr & WINDOW_MASK));	spin_unlock(&vmax301_spin);}static void vmax301_write32(struct map_info *map, __u32 d, unsigned long adr){	spin_lock(&vmax301_spin);	vmax301_page(map, adr);	writel(d, map->map_priv_2 + (adr & WINDOW_MASK));	spin_unlock(&vmax301_spin);}static void vmax301_copy_to(struct map_info *map, unsigned long to, const void *from, ssize_t len){	while(len) {		unsigned long thislen = len;		if (len > (WINDOW_LENGTH - (to & WINDOW_MASK)))			thislen = WINDOW_LENGTH-(to & WINDOW_MASK);		spin_lock(&vmax301_spin);		vmax301_page(map, to);		memcpy_toio(map->map_priv_2 + to, from, thislen);		spin_unlock(&vmax301_spin);				to += thislen;		from += thislen;		len -= thislen;	}}static struct map_info vmax_map[2] = {	{		name: "VMAX301 Internal Flash",		size: 3*2*1024*1024,		buswidth: 1,		read8: vmax301_read8,		read16: vmax301_read16,		read32: vmax301_read32,		copy_from: vmax301_copy_from,		write8: vmax301_write8,		write16: vmax301_write16,		write32: vmax301_write32,		copy_to: vmax301_copy_to,		map_priv_1: WINDOW_START + WINDOW_LENGTH,		map_priv_2: 0xFFFFFFFF	},	{		name: "VMAX301 Socket",		size: 0,		buswidth: 1,		read8: vmax301_read8,		read16: vmax301_read16,		read32: vmax301_read32,		copy_from: vmax301_copy_from,		write8: vmax301_write8,		write16: vmax301_write16,		write32: vmax301_write32,		copy_to: vmax301_copy_to,		map_priv_1: WINDOW_START + (3*WINDOW_LENGTH),		map_priv_2: 0xFFFFFFFF	}};static struct mtd_info *vmax_mtd[2] = {NULL, NULL};static void __exit cleanup_vmax301(void){	int i;		for (i=0; i<2; i++) {		if (vmax_mtd[i]) {			del_mtd_device(vmax_mtd[i]);			map_destroy(vmax_mtd[i]);		}	}	iounmap((void *)vmax_map[0].map_priv_1 - WINDOW_START);}int __init init_vmax301(void){	int i;	unsigned long iomapadr;	// Print out our little header..	printk("Tempustech VMAX 301 MEM:0x%x-0x%x\n",WINDOW_START,	       WINDOW_START+4*WINDOW_LENGTH);	iomapadr = (unsigned long)ioremap(WINDOW_START, WINDOW_LENGTH*4);	if (!iomapadr) {		printk("Failed to ioremap memory region\n");		return -EIO;	}	/* Put the address in the map's private data area.	   We store the actual MTD IO address rather than the 	   address of the first half, because it's used more	   often. 	*/	vmax_map[0].map_priv_1 = iomapadr + WINDOW_START;	vmax_map[1].map_priv_1 = iomapadr + (3*WINDOW_START);		for (i=0; i<2; i++) {		vmax_mtd[i] = do_map_probe("cfi_probe", &vmax_map[i]);		if (!vmax_mtd[i])			vmax_mtd[i] = do_map_probe("jedec", &vmax_map[i]);		if (!vmax_mtd[i])			vmax_mtd[i] = do_map_probe("map_ram", &vmax_map[i]);		if (!vmax_mtd[i])			vmax_mtd[i] = do_map_probe("map_rom", &vmax_map[i]);		if (vmax_mtd[i]) {			vmax_mtd[i]->module = THIS_MODULE;			add_mtd_device(vmax_mtd[i]);		}	}	if (!vmax_mtd[1] && !vmax_mtd[2]) {		iounmap((void *)iomapadr);		return -ENXIO;	}	return 0;}module_init(init_vmax301);module_exit(cleanup_vmax301);MODULE_LICENSE("GPL");MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>");MODULE_DESCRIPTION("MTD map driver for Tempustech VMAX SBC301 board");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品久久久久久久99水蜜桃| 国精产品一区一区三区mba视频| 欧美精品少妇一区二区三区| 国产精品77777| 亚洲成a人v欧美综合天堂下载| 久久精品视频在线看| 欧美群妇大交群中文字幕| 国产99久久久国产精品潘金网站| 丝袜美腿亚洲一区二区图片| 中文字幕亚洲精品在线观看| 精品国产亚洲在线| 欧美日韩免费电影| 色一区在线观看| 成人丝袜18视频在线观看| 久久99精品国产91久久来源| 亚洲高清不卡在线观看| 亚洲美女在线国产| 中文字幕av资源一区| 欧美本精品男人aⅴ天堂| 欧美精品三级在线观看| 在线观看免费一区| 99久久国产免费看| 国产成人日日夜夜| 国产伦精品一区二区三区在线观看| 亚洲国产一区二区在线播放| 亚洲精品老司机| 亚洲欧洲国产日韩| 日韩一区有码在线| 亚洲人成网站影音先锋播放| 国产精品久久久久影视| 中文在线一区二区| 国产三级欧美三级日产三级99 | 亚洲免费毛片网站| 国产精品丝袜一区| 国产精品久久久久久一区二区三区| 久久毛片高清国产| 久久综合资源网| 精品久久99ma| 精品伦理精品一区| 久久蜜桃一区二区| 亚洲国产精品v| 成人免费小视频| 综合激情成人伊人| 亚洲三级电影全部在线观看高清| 亚洲视频在线一区观看| 亚洲精品国产品国语在线app| 亚洲精品免费一二三区| 亚洲在线视频一区| 亚洲va欧美va人人爽| 日韩成人一区二区三区在线观看| 视频精品一区二区| 精品一区二区在线看| 国产剧情在线观看一区二区| 成人综合在线网站| 91影视在线播放| 欧美日韩性生活| 欧美一区二区精品久久911| 日韩免费观看高清完整版| 精品久久人人做人人爽| 国产午夜一区二区三区| 亚洲日本va在线观看| 亚洲一二三四区| 久久精品久久99精品久久| 国产在线国偷精品产拍免费yy| 国产精品一区二区三区四区| 风间由美一区二区三区在线观看 | 在线视频观看一区| 日韩视频免费观看高清在线视频| 亚洲精品一区二区三区蜜桃下载 | 国产在线精品一区二区不卡了 | 日本va欧美va瓶| 国产麻豆精品在线| 91久久精品日日躁夜夜躁欧美| 欧美猛男gaygay网站| 精品欧美乱码久久久久久| 中文字幕中文字幕中文字幕亚洲无线 | 不卡av免费在线观看| 91美女片黄在线| 精品少妇一区二区三区| 中文字幕中文乱码欧美一区二区 | 成人一区二区三区中文字幕| 欧美揉bbbbb揉bbbbb| 26uuu欧美| 亚洲精品高清在线观看| 精品一区二区在线看| 日本精品视频一区二区| 久久久午夜电影| 亚洲一区二区视频在线观看| 国产精品自拍三区| 欧美色手机在线观看| 欧美经典一区二区| 偷窥国产亚洲免费视频 | 在线不卡免费欧美| 国产精品免费人成网站| 秋霞国产午夜精品免费视频| 成人h精品动漫一区二区三区| 欧美一区二区三区免费视频 | 国产日韩欧美激情| 视频一区二区三区中文字幕| 97aⅴ精品视频一二三区| 亚洲精品一区二区三区福利| 夜夜嗨av一区二区三区网页| 成人综合在线观看| 亚洲精品一区二区三区影院 | 欧美大胆人体bbbb| 亚洲欧美另类小说| 成人在线视频首页| 2024国产精品| 日韩一区精品视频| 99久久精品免费看| 国产日韩亚洲欧美综合| 久久精品国产精品亚洲精品| 欧洲精品在线观看| 亚洲天堂网中文字| 国产91高潮流白浆在线麻豆| 日韩欧美一区二区不卡| 亚洲一级片在线观看| 99久久免费精品高清特色大片| 亚洲精品在线网站| 蜜桃一区二区三区四区| 欧美日韩一区二区三区四区 | 亚洲成人在线观看视频| 99久久婷婷国产综合精品电影| 国产三级精品三级| 国产经典欧美精品| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 日韩精品一区在线观看| 日本伊人午夜精品| 这里是久久伊人| 肉色丝袜一区二区| 5月丁香婷婷综合| 日韩va欧美va亚洲va久久| 欧美日韩国产一区二区三区地区| 一级日本不卡的影视| 欧洲av在线精品| 亚洲成人中文在线| 欧美精品三级在线观看| 日本麻豆一区二区三区视频| 制服丝袜亚洲网站| 男女性色大片免费观看一区二区 | 成人app下载| 国产精品乱人伦| 99视频精品在线| 亚洲欧美日韩综合aⅴ视频| 91啪亚洲精品| 亚洲大片免费看| 69堂成人精品免费视频| 美国欧美日韩国产在线播放| 2023国产精品| 国产成+人+日韩+欧美+亚洲| 国产精品人成在线观看免费| 91蜜桃传媒精品久久久一区二区| 激情文学综合丁香| 欧美成人一区二区三区在线观看| 精品一区二区三区久久| 国产色产综合产在线视频| 91网站黄www| 亚洲午夜免费视频| 日韩午夜在线播放| 国产电影一区二区三区| 亚洲女性喷水在线观看一区| 欧美喷水一区二区| 国模一区二区三区白浆| 中文一区在线播放| 91久久精品网| 久久成人精品无人区| 国产精品亲子乱子伦xxxx裸| 91成人国产精品| 美女mm1313爽爽久久久蜜臀| 国产精品美女久久久久久久久| 色婷婷国产精品久久包臀| 三级亚洲高清视频| 国产免费观看久久| 欧美三级中文字幕在线观看| 久草热8精品视频在线观看| 国产清纯美女被跳蛋高潮一区二区久久w | 紧缚奴在线一区二区三区| 国产精品久久久久久久久动漫 | 欧美中文字幕一区二区三区亚洲| 日韩国产成人精品| 国产精品女上位| 欧美一区二区三区视频| 99re在线精品| 另类综合日韩欧美亚洲| 1区2区3区国产精品| 欧美成人福利视频| 91亚洲国产成人精品一区二区三 | 成人在线一区二区三区| 午夜精品福利视频网站| 亚洲国产精品av| 日韩一区二区在线观看视频播放| av在线播放不卡| 麻豆精品视频在线观看视频| 一区二区三区精品在线| 久久久久97国产精华液好用吗| 欧美日韩一区二区三区四区 | 亚洲精品在线观| 欧美日韩久久久| eeuss鲁片一区二区三区| 精东粉嫩av免费一区二区三区|