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

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

?? vmax301.c

?? 一個2.4.21版本的嵌入式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一区二区三区免费野_久草精品视频
韩国一区二区三区| 成人久久久精品乱码一区二区三区| 美女视频黄a大片欧美| 国产成人av电影在线观看| 精品视频在线免费| 国产精品网站在线观看| 日韩中文字幕麻豆| 国产99一区视频免费| 欧美一级二级三级乱码| 99久久777色| 天天操天天色综合| 国产区在线观看成人精品 | 国产一区二区不卡| 日韩你懂的电影在线观看| 国产成人在线色| 麻豆91精品91久久久的内涵| 国产精品国产三级国产三级人妇| 亚洲成av人在线观看| av电影天堂一区二区在线观看| 91精品国产色综合久久不卡蜜臀| 一区二区三区在线视频免费 | 国产精品少妇自拍| 黄网站免费久久| 2020日本不卡一区二区视频| 免费视频最近日韩| 4438成人网| 视频一区二区中文字幕| 欧美色精品天天在线观看视频| 国产精品卡一卡二| 91小视频免费看| 国产精品天天看| 成人h精品动漫一区二区三区| 国产女人18水真多18精品一级做| 韩国av一区二区三区在线观看| 欧美电影免费观看高清完整版 | 亚洲高清视频的网址| 欧美日韩在线播放三区| 亚洲一线二线三线久久久| 色综合久久九月婷婷色综合| 亚洲欧美日韩成人高清在线一区| 9久草视频在线视频精品| 1024成人网色www| 91美女视频网站| 高清成人在线观看| 91麻豆6部合集magnet| 麻豆91精品视频| 国产69精品久久99不卡| 色爱区综合激月婷婷| 久久综合九色综合97_久久久| 美女网站视频久久| 日韩精品一区二区三区蜜臀 | www.成人网.com| 亚洲色图制服诱惑| 欧美日韩一区成人| 极品美女销魂一区二区三区| 久久嫩草精品久久久精品一| 成人app下载| 欧美日韩亚洲综合在线 | 成人性生交大片| 欧美视频一区二区在线观看| 欧美精品一二三| 亚洲精品一区二区在线观看| 亚洲精品免费电影| 亚洲特黄一级片| 国产一区二区三区最好精华液| 成人激情av网| 欧美另类z0zxhd电影| 亚洲一二三级电影| 精品日韩成人av| 成人午夜激情片| 亚洲午夜在线视频| 久久久亚洲国产美女国产盗摄 | 国内精品久久久久影院色| 中文字幕在线不卡一区二区三区| 欧美性受极品xxxx喷水| 激情伊人五月天久久综合| 国产精品久久久久久亚洲毛片 | 日韩欧美你懂的| 97aⅴ精品视频一二三区| 麻豆视频观看网址久久| 亚洲欧美在线另类| 精品国产一区二区三区四区四| 91性感美女视频| 蜜臀av在线播放一区二区三区 | 久久久国产精华| 欧美日韩黄色一区二区| jizzjizzjizz欧美| 精品无码三级在线观看视频| 亚洲欧美另类小说| 国产精品视频免费看| 欧美日韩国产综合一区二区三区| 国产精品99久久久久久有的能看| 日韩精品一卡二卡三卡四卡无卡| 国产精品人人做人人爽人人添| 91精品国产色综合久久ai换脸 | 久久91精品久久久久久秒播| 中文字幕一区三区| 久久久午夜电影| 欧美一区二区成人| 欧美丝袜丝nylons| 91女神在线视频| 国产盗摄精品一区二区三区在线| 日韩高清不卡一区二区三区| 亚洲精品菠萝久久久久久久| 国产精品久久久久毛片软件| 国产午夜精品理论片a级大结局| 一区二区欧美精品| 69p69国产精品| 在线免费一区三区| 久久毛片高清国产| 欧美一卡二卡三卡四卡| 成人在线视频首页| 日韩电影在线一区二区| 国产农村妇女精品| 99精品国产热久久91蜜凸| 一区二区三区四区亚洲| 久久综合精品国产一区二区三区| 成人成人成人在线视频| 视频一区二区三区在线| 中文字幕亚洲欧美在线不卡| 成人av在线播放网址| 国产精品18久久久久| 九色|91porny| 国产麻豆欧美日韩一区| 国产激情91久久精品导航| 福利电影一区二区三区| 高清不卡在线观看av| 成人黄色国产精品网站大全在线免费观看 | 国产资源在线一区| 国产精品一区二区无线| 国产一区二区女| 成人黄色一级视频| 99国产精品一区| 欧美亚洲高清一区二区三区不卡| 欧美午夜宅男影院| 日韩一级免费观看| 国产日韩成人精品| 中文字幕一区二区日韩精品绯色| 亚洲色图20p| 视频在线观看91| 国产一区二区三区电影在线观看| 国产精品自拍三区| 色呦呦网站一区| 在线不卡中文字幕播放| 久久亚洲影视婷婷| 亚洲伦理在线精品| 日韩电影在线观看电影| 国产成人aaa| 欧洲日韩一区二区三区| 日韩欧美国产系列| 欧美激情一区在线观看| 亚洲小说春色综合另类电影| 激情五月播播久久久精品| a在线欧美一区| 欧美一级黄色录像| 中文字幕综合网| 蜜桃av一区二区三区| 99精品视频中文字幕| 91麻豆精品久久久久蜜臀| 国产精品天美传媒| 秋霞国产午夜精品免费视频| 不卡高清视频专区| 欧美一区二区女人| 亚洲精品你懂的| 国产在线不卡一卡二卡三卡四卡| 91久久久免费一区二区| 久久青草国产手机看片福利盒子 | 卡一卡二国产精品| 色偷偷88欧美精品久久久| 日韩欧美三级在线| 亚洲自拍偷拍综合| 成人网男人的天堂| 婷婷夜色潮精品综合在线| 国产成人综合在线| 免费在线观看一区二区三区| 蜜乳av一区二区| 3d动漫精品啪啪| 五月天亚洲婷婷| 欧美放荡的少妇| 日韩黄色片在线观看| 99热精品一区二区| 国产欧美精品一区aⅴ影院| 久久国产精品72免费观看| 欧美日韩国产不卡| 久草这里只有精品视频| 欧美电视剧在线看免费| 99久久精品费精品国产一区二区| 亚洲日本在线a| 久久精品国产色蜜蜜麻豆| 欧美日韩精品一区二区| 最近中文字幕一区二区三区| 国产不卡在线一区| 国产欧美一区在线| 国模无码大尺度一区二区三区| 91麻豆精品国产自产在线| 婷婷综合另类小说色区| 欧美吞精做爰啪啪高潮| 午夜欧美一区二区三区在线播放| 色综合天天在线| 亚洲激情综合网|