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

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

?? pci.c

?? linux和2410結(jié)合開(kāi)發(fā) 用他可以生成2410所需的zImage文件
?? C
字號(hào):
/* *  linux/drivers/mtd/maps/pci.c * *  Copyright (C) 2001 Russell King, All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * *  $Id: pci.c,v 1.5 2003/05/20 20:59:31 dwmw2 Exp $ *  * Generic PCI memory map driver.  We support the following boards: *  - Intel IQ80310 ATU. *  - Intel EBSA285 (blank rom programming mode). Tested working 27/09/2001 */#include <linux/module.h>#include <linux/kernel.h>#include <linux/pci.h>#include <linux/init.h>#include <linux/mtd/mtd.h>#include <linux/mtd/map.h>#include <linux/mtd/partitions.h>struct map_pci_info;struct mtd_pci_info {	int  (*init)(struct pci_dev *dev, struct map_pci_info *map);	void (*exit)(struct pci_dev *dev, struct map_pci_info *map);	unsigned long (*translate)(struct map_pci_info *map, unsigned long ofs);	const char *map_name;};struct map_pci_info {	struct map_info map;	void *base;	void (*exit)(struct pci_dev *dev, struct map_pci_info *map);	unsigned long (*translate)(struct map_pci_info *map, unsigned long ofs);	struct pci_dev *dev;};	/* * Intel IOP80310 Flash driver */static intintel_iq80310_init(struct pci_dev *dev, struct map_pci_info *map){	u32 win_base;	map->map.buswidth = 1;	map->map.size     = 0x00800000;	map->base         = ioremap_nocache(pci_resource_start(dev, 0),					    pci_resource_len(dev, 0));	if (!map->base)		return -ENOMEM;	/*	 * We want to base the memory window at Xscale	 * bus address 0, not 0x1000.	 */	pci_read_config_dword(dev, 0x44, &win_base);	pci_write_config_dword(dev, 0x44, 0);	map->map.map_priv_2 = win_base;	return 0;}static voidintel_iq80310_exit(struct pci_dev *dev, struct map_pci_info *map){	if (map->base)		iounmap((void *)map->base);	pci_write_config_dword(dev, 0x44, map->map.map_priv_2);}static unsigned longintel_iq80310_translate(struct map_pci_info *map, unsigned long ofs){	unsigned long page_addr = ofs & 0x00400000;	/*	 * This mundges the flash location so we avoid	 * the first 80 bytes (they appear to read nonsense).	 */	if (page_addr) {		writel(0x00000008, map->base + 0x1558);		writel(0x00000000, map->base + 0x1550);	} else {		writel(0x00000007, map->base + 0x1558);		writel(0x00800000, map->base + 0x1550);		ofs += 0x00800000;	}	return ofs;}static struct mtd_pci_info intel_iq80310_info = {	.init =		intel_iq80310_init,	.exit =		intel_iq80310_exit,	.translate =	intel_iq80310_translate,	.map_name =	"cfi_probe",};/* * Intel DC21285 driver */static intintel_dc21285_init(struct pci_dev *dev, struct map_pci_info *map){	unsigned long base, len;	base = pci_resource_start(dev, PCI_ROM_RESOURCE);	len  = pci_resource_len(dev, PCI_ROM_RESOURCE);	if (!len || !base) {		/*		 * No ROM resource		 */		base = pci_resource_start(dev, 2);		len  = pci_resource_len(dev, 2);		/*		 * We need to re-allocate PCI BAR2 address range to the		 * PCI ROM BAR, and disable PCI BAR2.		 */	} else {		/*		 * Hmm, if an address was allocated to the ROM resource, but		 * not enabled, should we be allocating a new resource for it		 * or simply enabling it?		 */		if (!(pci_resource_flags(dev, PCI_ROM_RESOURCE) &		     PCI_ROM_ADDRESS_ENABLE)) {		     	u32 val;			pci_resource_flags(dev, PCI_ROM_RESOURCE) |= PCI_ROM_ADDRESS_ENABLE;			pci_read_config_dword(dev, PCI_ROM_ADDRESS, &val);			val |= PCI_ROM_ADDRESS_ENABLE;			pci_write_config_dword(dev, PCI_ROM_ADDRESS, val);			printk("%s: enabling expansion ROM\n", dev->slot_name);		}	}	if (!len || !base)		return -ENXIO;	map->map.buswidth = 4;	map->map.size     = len;	map->base         = ioremap_nocache(base, len);	if (!map->base)		return -ENOMEM;	return 0;}static voidintel_dc21285_exit(struct pci_dev *dev, struct map_pci_info *map){	u32 val;	if (map->base)		iounmap((void *)map->base);	/*	 * We need to undo the PCI BAR2/PCI ROM BAR address alteration.	 */	pci_resource_flags(dev, PCI_ROM_RESOURCE) &= ~PCI_ROM_ADDRESS_ENABLE;	pci_read_config_dword(dev, PCI_ROM_ADDRESS, &val);	val &= ~PCI_ROM_ADDRESS_ENABLE;	pci_write_config_dword(dev, PCI_ROM_ADDRESS, val);}static unsigned longintel_dc21285_translate(struct map_pci_info *map, unsigned long ofs){	return ofs & 0x00ffffc0 ? ofs : (ofs ^ (1 << 5));}static struct mtd_pci_info intel_dc21285_info = {	.init =		intel_dc21285_init,	.exit =		intel_dc21285_exit,	.translate =	intel_dc21285_translate,	.map_name =	"jedec_probe",};/* * PCI device ID table */static struct pci_device_id mtd_pci_ids[] __devinitdata = {	{		.vendor =	PCI_VENDOR_ID_INTEL,		.device =	0x530d,		.subvendor =	PCI_ANY_ID,		.subdevice =	PCI_ANY_ID,		.class =	PCI_CLASS_MEMORY_OTHER << 8,		.class_mask =	0xffff00,		.driver_data =	(unsigned long)&intel_iq80310_info,	},	{		.vendor =	PCI_VENDOR_ID_DEC,		.device =	PCI_DEVICE_ID_DEC_21285,		.subvendor =	0,	/* DC21285 defaults to 0 on reset */		.subdevice =	0,	/* DC21285 defaults to 0 on reset */		.driver_data =	(unsigned long)&intel_dc21285_info,	},	{ 0, }};/* * Generic code follows. */static u8 mtd_pci_read8(struct map_info *_map, unsigned long ofs){	struct map_pci_info *map = (struct map_pci_info *)_map;	u8 val = readb(map->base + map->translate(map, ofs));//	printk("read8 : %08lx => %02x\n", ofs, val);	return val;}static u16 mtd_pci_read16(struct map_info *_map, unsigned long ofs){	struct map_pci_info *map = (struct map_pci_info *)_map;	u16 val = readw(map->base + map->translate(map, ofs));//	printk("read16: %08lx => %04x\n", ofs, val);	return val;}static u32 mtd_pci_read32(struct map_info *_map, unsigned long ofs){	struct map_pci_info *map = (struct map_pci_info *)_map;	u32 val = readl(map->base + map->translate(map, ofs));//	printk("read32: %08lx => %08x\n", ofs, val);	return val;}static void mtd_pci_copyfrom(struct map_info *_map, void *to, unsigned long from, ssize_t len){	struct map_pci_info *map = (struct map_pci_info *)_map;	memcpy_fromio(to, map->base + map->translate(map, from), len);}static void mtd_pci_write8(struct map_info *_map, u8 val, unsigned long ofs){	struct map_pci_info *map = (struct map_pci_info *)_map;//	printk("write8 : %08lx <= %02x\n", ofs, val);	writeb(val, map->base + map->translate(map, ofs));}static void mtd_pci_write16(struct map_info *_map, u16 val, unsigned long ofs){	struct map_pci_info *map = (struct map_pci_info *)_map;//	printk("write16: %08lx <= %04x\n", ofs, val);	writew(val, map->base + map->translate(map, ofs));}static void mtd_pci_write32(struct map_info *_map, u32 val, unsigned long ofs){	struct map_pci_info *map = (struct map_pci_info *)_map;//	printk("write32: %08lx <= %08x\n", ofs, val);	writel(val, map->base + map->translate(map, ofs));}static void mtd_pci_copyto(struct map_info *_map, unsigned long to, const void *from, ssize_t len){	struct map_pci_info *map = (struct map_pci_info *)_map;	memcpy_toio(map->base + map->translate(map, to), from, len);}static struct map_info mtd_pci_map = {	.phys =		NO_XIP,	.read8 =	mtd_pci_read8,	.read16 =	mtd_pci_read16,	.read32 =	mtd_pci_read32,	.copy_from =	mtd_pci_copyfrom,	.write8 =	mtd_pci_write8,	.write16 =	mtd_pci_write16,	.write32 =	mtd_pci_write32,	.copy_to =	mtd_pci_copyto,};static int __devinitmtd_pci_probe(struct pci_dev *dev, const struct pci_device_id *id){	struct mtd_pci_info *info = (struct mtd_pci_info *)id->driver_data;	struct map_pci_info *map = NULL;	struct mtd_info *mtd = NULL;	int err;	err = pci_enable_device(dev);	if (err)		goto out;	err = pci_request_regions(dev, "pci mtd");	if (err)		goto out;	map = kmalloc(sizeof(*map), GFP_KERNEL);	err = -ENOMEM;	if (!map)		goto release;	map->map       = mtd_pci_map;	map->map.name  = dev->slot_name;	map->dev       = dev;	map->exit      = info->exit;	map->translate = info->translate;	err = info->init(dev, map);	if (err)		goto release;	/* tsk - do_map_probe should take const char * */	mtd = do_map_probe((char *)info->map_name, &map->map);	err = -ENODEV;	if (!mtd)		goto release;	mtd->owner = THIS_MODULE;	add_mtd_device(mtd);	pci_set_drvdata(dev, mtd);	return 0;release:	if (mtd)		map_destroy(mtd);	if (map) {		map->exit(dev, map);		kfree(map);	}	pci_release_regions(dev);out:	return err;}static void __devexitmtd_pci_remove(struct pci_dev *dev){	struct mtd_info *mtd = pci_get_drvdata(dev);	struct map_pci_info *map = mtd->priv;	del_mtd_device(mtd);	map_destroy(mtd);	map->exit(dev, map);	kfree(map);	pci_set_drvdata(dev, NULL);	pci_release_regions(dev);}static struct pci_driver mtd_pci_driver = {	.name =		"MTD PCI",	.probe =	mtd_pci_probe,	.remove =	__devexit_p(mtd_pci_remove),	.id_table =	mtd_pci_ids,};static int __init mtd_pci_maps_init(void){	return pci_module_init(&mtd_pci_driver);}static void __exit mtd_pci_maps_exit(void){	pci_unregister_driver(&mtd_pci_driver);}module_init(mtd_pci_maps_init);module_exit(mtd_pci_maps_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("Russell King <rmk@arm.linux.org.uk>");MODULE_DESCRIPTION("Generic PCI map driver");MODULE_DEVICE_TABLE(pci, mtd_pci_ids);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲青青青在线视频| 日本人妖一区二区| 日韩欧美一区二区在线视频| 国产成人午夜精品影院观看视频| 国产精品成人在线观看| 精品国一区二区三区| 色狠狠综合天天综合综合| 国产乱码精品一区二区三区忘忧草| 亚洲激情综合网| 中文一区二区在线观看| 91精品国产综合久久久久久| 99re热视频这里只精品| 国产精品性做久久久久久| 秋霞电影网一区二区| 一级特黄大欧美久久久| 国产精品久久影院| 久久精品一区蜜桃臀影院| 欧美一区二区三区在线电影| 在线视频国产一区| 国产成人鲁色资源国产91色综| 日本91福利区| 日日骚欧美日韩| 亚洲成人精品影院| 一区二区三区在线免费播放| 中文字幕在线不卡视频| 国产午夜精品久久| 国产午夜亚洲精品理论片色戒| 欧美久久免费观看| 欧美日韩在线播放三区| 欧洲精品一区二区| 日本韩国视频一区二区| 日本道在线观看一区二区| 91片黄在线观看| 91丝袜美腿高跟国产极品老师| 粉嫩绯色av一区二区在线观看| 国产一区二区剧情av在线| 久久 天天综合| 狠狠v欧美v日韩v亚洲ⅴ| 久国产精品韩国三级视频| 久久精品99久久久| 老司机一区二区| 国产一区二区美女诱惑| 国产乱码精品1区2区3区| 国产剧情一区在线| 国产成人精品免费| 成人高清视频在线| 99久久久精品| 欧美午夜影院一区| 欧美日韩亚洲综合一区二区三区| 欧美综合一区二区| 777午夜精品免费视频| 欧美一级黄色录像| 久久午夜免费电影| 国产精品国产三级国产aⅴ无密码| 欧美国产一区二区在线观看| 成人欧美一区二区三区视频网页| 亚洲精品乱码久久久久久| 亚洲激情五月婷婷| 午夜成人在线视频| 国内一区二区在线| 99精品视频在线观看免费| 色欧美片视频在线观看| 69堂精品视频| 久久久久97国产精华液好用吗| 国产精品日日摸夜夜摸av| 亚洲美女淫视频| 日本不卡123| 国产成人av电影在线播放| 91国在线观看| 欧美xxxx在线观看| 中日韩免费视频中文字幕| 亚洲午夜av在线| 激情综合五月天| 97se亚洲国产综合自在线| 在线综合视频播放| 国产欧美日本一区视频| 亚洲最大的成人av| 精品一区二区三区免费| 91色九色蝌蚪| 欧美大片日本大片免费观看| 国产欧美精品一区二区色综合 | 欧美午夜免费电影| 日韩女优制服丝袜电影| 中文字幕一区二区在线播放| 婷婷成人综合网| 99在线精品视频| 日韩一区二区三区精品视频| 中文字幕一区视频| 日本欧美在线看| 不卡免费追剧大全电视剧网站| 4hu四虎永久在线影院成人| 中文成人av在线| 精品一区二区三区av| 日本精品裸体写真集在线观看| 久久先锋影音av鲁色资源网| 亚洲亚洲精品在线观看| 成人做爰69片免费看网站| 日韩视频一区二区在线观看| 亚洲美女视频一区| 国产成人av电影在线观看| 欧美一级免费大片| 亚洲韩国精品一区| 成人av午夜影院| 精品成人一区二区| 调教+趴+乳夹+国产+精品| 色综合天天性综合| 国产欧美一区二区精品性色| 日韩 欧美一区二区三区| 色婷婷综合久色| 中文字幕av不卡| 国产一区二区三区四区在线观看| 欧美老年两性高潮| 亚洲综合图片区| 91网站视频在线观看| 欧美国产精品一区| 国产传媒日韩欧美成人| 日韩视频永久免费| 日本亚洲欧美天堂免费| 在线日韩国产精品| 一区二区三区电影在线播| 99久久免费精品高清特色大片| 国产日韩av一区二区| 国产在线不卡一区| 欧美成人免费网站| 麻豆精品视频在线观看| 欧美一区二区在线观看| 午夜电影一区二区三区| 欧美日本在线看| 亚洲一区二区三区视频在线| 色域天天综合网| 亚洲精品视频一区| 91美女片黄在线观看| 综合久久久久久久| 97久久精品人人做人人爽| 亚洲丝袜另类动漫二区| 91在线免费看| 亚洲三级在线播放| 色综合久久天天| 亚洲理论在线观看| 欧美亚洲另类激情小说| 亚洲国产视频直播| 在线不卡免费av| 久久国产精品色婷婷| 久久久久97国产精华液好用吗| 国产乱对白刺激视频不卡| 国产精品水嫩水嫩| 99精品国产视频| 亚洲国产欧美另类丝袜| 欧美日韩电影一区| 老鸭窝一区二区久久精品| 久久蜜桃av一区精品变态类天堂| 国产成人精品免费视频网站| 国产精品九色蝌蚪自拍| 欧亚洲嫩模精品一区三区| 五月婷婷激情综合网| 日韩精品一区二区三区swag| 国产黄人亚洲片| 亚洲人成精品久久久久| 欧美日韩在线观看一区二区 | www.欧美日韩| 亚洲最大成人综合| 日韩三级在线观看| 国产精品伊人色| 亚洲欧美激情视频在线观看一区二区三区| 日本高清视频一区二区| 日本aⅴ亚洲精品中文乱码| 久久久久久久av麻豆果冻| av中文字幕亚洲| 亚洲h精品动漫在线观看| 精品国一区二区三区| 99久久婷婷国产综合精品电影| 亚洲午夜三级在线| 欧美xxxxx牲另类人与| 91色九色蝌蚪| 精品一区二区三区久久| 亚洲欧美一区二区不卡| 欧美一区二区久久| caoporn国产精品| 日韩和的一区二区| 中文字幕不卡的av| 91精品免费在线| 99这里都是精品| 韩国欧美一区二区| 亚洲综合另类小说| 精品少妇一区二区三区日产乱码| 99re亚洲国产精品| 国内一区二区视频| 亚洲成人激情自拍| 国产精品国产三级国产aⅴ原创| 91麻豆精品国产| www.视频一区| 国产综合久久久久久鬼色| 亚洲一区二区三区视频在线播放| 久久人人97超碰com| 欧美日韩精品一区二区三区 | 中文字幕 久热精品 视频在线| 欧美日韩电影一区| 色综合天天综合色综合av | 国产专区欧美精品| 日韩和欧美的一区|