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

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

?? ide-m8xx.c

?? Linux環(huán)境下java編程的經(jīng)典書(shū)籍
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* *  linux/drivers/ide/ide-m8xx.c * *  Copyright (C) 2000, 2001 Wolfgang Denk, wd@denx.de *  Modified for direct IDE interface *	by Thomas Lange, thomas@corelatus.com *  Modified for direct IDE interface on 8xx without using the PCMCIA *  controller *	by Steven.Scholz@imc-berlin.de *  Moved out of arch/ppc/kernel/m8xx_setup.c, other minor cleanups *	by Mathew Locke <mattl@mvista.com> */#include <linux/config.h>#include <linux/errno.h>#include <linux/sched.h>#include <linux/kernel.h>#include <linux/mm.h>#include <linux/stddef.h>#include <linux/unistd.h>#include <linux/ptrace.h>#include <linux/slab.h>#include <linux/user.h>#include <linux/a.out.h>#include <linux/tty.h>#include <linux/major.h>#include <linux/interrupt.h>#include <linux/reboot.h>#include <linux/init.h>#include <linux/blk.h>#include <linux/ioport.h>#include <linux/ide.h>#include <linux/bootmem.h>#include <asm/mpc8xx.h>#include <asm/mmu.h>#include <asm/processor.h>#include <asm/residual.h>#include <asm/io.h>#include <asm/pgtable.h>#include <asm/ide.h>#include <asm/8xx_immap.h>#include <asm/machdep.h>#include <asm/irq.h>#include "ide_modes.h"static int identify  (volatile unsigned char *p);static void print_fixed (volatile unsigned char *p);static void print_funcid (int func);static int check_ide_device (unsigned long base);static void ide_interrupt_ack (void *dev);static void m8xx_ide_tuneproc(ide_drive_t *drive, byte pio);typedef	struct ide_ioport_desc {	unsigned long	base_off;		/* Offset to PCMCIA memory	*/	ide_ioreg_t	reg_off[IDE_NR_PORTS];	/* controller register offsets	*/	int		irq;			/* IRQ				*/} ide_ioport_desc_t;ide_ioport_desc_t ioport_dsc[MAX_HWIFS] = {#ifdef IDE0_BASE_OFFSET	{ IDE0_BASE_OFFSET,	    {		IDE0_DATA_REG_OFFSET,		IDE0_ERROR_REG_OFFSET,		IDE0_NSECTOR_REG_OFFSET,		IDE0_SECTOR_REG_OFFSET,		IDE0_LCYL_REG_OFFSET,		IDE0_HCYL_REG_OFFSET,		IDE0_SELECT_REG_OFFSET,		IDE0_STATUS_REG_OFFSET,		IDE0_CONTROL_REG_OFFSET,		IDE0_IRQ_REG_OFFSET,	    },	    IDE0_INTERRUPT,	},#ifdef IDE1_BASE_OFFSET	{ IDE1_BASE_OFFSET,	    {		IDE1_DATA_REG_OFFSET,		IDE1_ERROR_REG_OFFSET,		IDE1_NSECTOR_REG_OFFSET,		IDE1_SECTOR_REG_OFFSET,		IDE1_LCYL_REG_OFFSET,		IDE1_HCYL_REG_OFFSET,		IDE1_SELECT_REG_OFFSET,		IDE1_STATUS_REG_OFFSET,		IDE1_CONTROL_REG_OFFSET,		IDE1_IRQ_REG_OFFSET,	    },	    IDE1_INTERRUPT,	},#endif /* IDE1_BASE_OFFSET */#endif	/* IDE0_BASE_OFFSET */};ide_pio_timings_t ide_pio_clocks[6];int hold_time[6] =  {30, 20, 15, 10, 10, 10 };   /* PIO Mode 5 with IORDY (nonstandard) *//* * Warning: only 1 (ONE) PCMCIA slot supported here, * which must be correctly initialized by the firmware (PPCBoot). */static int _slot_ = -1;			/* will be read from PCMCIA registers   *//* Make clock cycles and always round up */#define PCMCIA_MK_CLKS( t, T ) (( (t) * ((T)/1000000) + 999U ) / 1000U )/* * IDE stuff. */static intm8xx_ide_default_irq(ide_ioreg_t base){#ifdef CONFIG_BLK_DEV_MPC8xx_IDE	if (base >= MAX_HWIFS)		return 0;	printk("[%d] m8xx_ide_default_irq %d\n",__LINE__,ioport_dsc[base].irq);		return (ioport_dsc[base].irq);#else        return 9;#endif}static ide_ioreg_tm8xx_ide_default_io_base(int index){        return index;}#define M8XX_PCMCIA_CD2(slot)      (0x10000000 >> (slot << 4))#define M8XX_PCMCIA_CD1(slot)      (0x08000000 >> (slot << 4))/* * The TQM850L hardware has two pins swapped! Grrrrgh! */#ifdef	CONFIG_TQM850L#define __MY_PCMCIA_GCRX_CXRESET	PCMCIA_GCRX_CXOE#define __MY_PCMCIA_GCRX_CXOE		PCMCIA_GCRX_CXRESET#else#define __MY_PCMCIA_GCRX_CXRESET	PCMCIA_GCRX_CXRESET#define __MY_PCMCIA_GCRX_CXOE		PCMCIA_GCRX_CXOE#endif#if defined(CONFIG_BLK_DEV_MPC8xx_IDE) && defined(CONFIG_IDE_8xx_PCCARD)#define PCMCIA_SCHLVL IDE0_INTERRUPT	/* Status Change Interrupt Level	*/static int pcmcia_schlvl = PCMCIA_SCHLVL;#endif/* * See include/linux/ide.h for definition of hw_regs_t (p, base) *//* * m8xx_ide_init_hwif_ports for a direct IDE interface _using_ */#if defined(CONFIG_IDE_8xx_PCCARD) || defined(CONFIG_IDE_8xx_DIRECT)static voidm8xx_ide_init_hwif_ports(hw_regs_t *hw, ide_ioreg_t data_port, 		ide_ioreg_t ctrl_port, int *irq){	ide_ioreg_t *p = hw->io_ports;	int i;	typedef struct {		ulong br;		ulong or;	} pcmcia_win_t;	volatile pcmcia_win_t *win;	volatile pcmconf8xx_t *pcmp;	uint *pgcrx;	u32 pcmcia_phy_base;	u32 pcmcia_phy_end;	static unsigned long pcmcia_base = 0;	unsigned long base;	*p = 0;	if (irq)		*irq = 0;	pcmp = (pcmconf8xx_t *)(&(((immap_t *)IMAP_ADDR)->im_pcmcia));	if (!pcmcia_base) {                /*                 * Read out PCMCIA registers. Since the reset values                 * are undefined, we sure hope that they have been                 * set up by firmware		 */		/* Scan all registers for valid settings */		pcmcia_phy_base = 0xFFFFFFFF;		pcmcia_phy_end = 0;		/* br0 is start of brX and orX regs */		win = (pcmcia_win_t *) \			(&(((immap_t *)IMAP_ADDR)->im_pcmcia.pcmc_pbr0));		for (i = 0; i < 8; i++) {			if (win->or & 1) {	/* This bank is marked as valid */				if (win->br < pcmcia_phy_base) {					pcmcia_phy_base = win->br;				}				if ((win->br + PCMCIA_MEM_SIZE) > pcmcia_phy_end) {					pcmcia_phy_end  = win->br + PCMCIA_MEM_SIZE;				}				/* Check which slot that has been defined */				_slot_ = (win->or >> 2) & 1;			}					/* Valid bank */			win++;		}						/* for */		printk ("PCMCIA slot %c: phys mem %08x...%08x (size %08x)\n",			'A' + _slot_,			pcmcia_phy_base, pcmcia_phy_end,			pcmcia_phy_end - pcmcia_phy_base);		pcmcia_base=(unsigned long)ioremap(pcmcia_phy_base,						   pcmcia_phy_end-pcmcia_phy_base);#ifdef DEBUG		printk ("PCMCIA virt base: %08lx\n", pcmcia_base);#endif		/* Compute clock cycles for PIO timings */		for (i=0; i<6; ++i) {			bd_t	*binfo = (bd_t *)__res;			hold_time[i]   =				PCMCIA_MK_CLKS (hold_time[i],						binfo->bi_busfreq);			ide_pio_clocks[i].setup_time  =				PCMCIA_MK_CLKS (ide_pio_timings[i].setup_time,						binfo->bi_busfreq);			ide_pio_clocks[i].active_time =				PCMCIA_MK_CLKS (ide_pio_timings[i].active_time,						binfo->bi_busfreq);			ide_pio_clocks[i].cycle_time  =				PCMCIA_MK_CLKS (ide_pio_timings[i].cycle_time,						binfo->bi_busfreq);#if 0			printk ("PIO mode %d timings: %d/%d/%d => %d/%d/%d\n",				i,				ide_pio_clocks[i].setup_time,				ide_pio_clocks[i].active_time,				ide_pio_clocks[i].hold_time,				ide_pio_clocks[i].cycle_time,				ide_pio_timings[i].setup_time,				ide_pio_timings[i].active_time,				ide_pio_timings[i].hold_time,				ide_pio_timings[i].cycle_time);#endif		}	}	if (data_port >= MAX_HWIFS)		return;	if (_slot_ == -1) {		printk ("PCMCIA slot has not been defined! Using A as default\n");		_slot_ = 0;	}#ifdef CONFIG_IDE_8xx_PCCARD#ifdef DEBUG	printk ("PIPR = 0x%08X  slot %c ==> mask = 0x%X\n",		pcmp->pcmc_pipr,		'A' + _slot_,		M8XX_PCMCIA_CD1(_slot_) | M8XX_PCMCIA_CD2(_slot_) );#endif /* DEBUG */	if (pcmp->pcmc_pipr & (M8XX_PCMCIA_CD1(_slot_)|M8XX_PCMCIA_CD2(_slot_))) {		printk ("No card in slot %c: PIPR=%08x\n",			'A' + _slot_, (u32) pcmp->pcmc_pipr);		return;		/* No card in slot */	}	check_ide_device (pcmcia_base);#endif	/* CONFIG_IDE_8xx_PCCARD */	base = pcmcia_base + ioport_dsc[data_port].base_off;#ifdef DEBUG	printk ("base: %08x + %08x = %08x\n",			pcmcia_base, ioport_dsc[data_port].base_off, base);#endif	for (i = 0; i < IDE_NR_PORTS; ++i) {#ifdef DEBUG		printk ("port[%d]: %08x + %08x = %08x\n",			i,			base,			ioport_dsc[data_port].reg_off[i],			i, base + ioport_dsc[data_port].reg_off[i]);#endif	 	*p++ = base + ioport_dsc[data_port].reg_off[i];	}	if (irq) {#ifdef CONFIG_IDE_8xx_PCCARD		unsigned int reg;		*irq = ioport_dsc[data_port].irq;		if (_slot_)			pgcrx = &((immap_t *) IMAP_ADDR)->im_pcmcia.pcmc_pgcrb;		else			pgcrx = &((immap_t *) IMAP_ADDR)->im_pcmcia.pcmc_pgcra;		reg = *pgcrx;		reg |= mk_int_int_mask (pcmcia_schlvl) << 24;		reg |= mk_int_int_mask (pcmcia_schlvl) << 16;		*pgcrx = reg;#else	/* direct connected IDE drive, i.e. external IRQ, not the PCMCIA irq */		*irq = ioport_dsc[data_port].irq;#endif	/* CONFIG_IDE_8xx_PCCARD */	}	/* register routine to tune PIO mode */	ide_hwifs[data_port].tuneproc = m8xx_ide_tuneproc;	hw->ack_intr = (ide_ack_intr_t *) ide_interrupt_ack;	/* Enable Harddisk Interrupt,	 * and make it edge sensitive	 */	/* (11-18) Set edge detect for irq, no wakeup from low power mode */	((immap_t *)IMAP_ADDR)->im_siu_conf.sc_siel |=					(0x80000000 >> ioport_dsc[data_port].irq);#ifdef CONFIG_IDE_8xx_PCCARD	/* Make sure we dont get garbage irq */	((immap_t *) IMAP_ADDR)->im_pcmcia.pcmc_pscr = 0xFFFF;	/* Enable falling edge irq */	pcmp->pcmc_per = 0x100000 >> (16 * _slot_);#endif	/* CONFIG_IDE_8xx_PCCARD */}	/* m8xx_ide_init_hwif_ports() using 8xx internal PCMCIA interface */#endif /* CONFIG_IDE_8xx_PCCARD || CONFIG_IDE_8xx_DIRECT *//* * m8xx_ide_init_hwif_ports for a direct IDE interface _not_ using * MPC8xx's internal PCMCIA interface */#if defined(CONFIG_IDE_EXT_DIRECT)void m8xx_ide_init_hwif_ports (hw_regs_t *hw,	ide_ioreg_t data_port, ide_ioreg_t ctrl_port, int *irq){	ide_ioreg_t *p = hw->io_ports;	int i;	u32 ide_phy_base;	u32 ide_phy_end;	static unsigned long ide_base = 0;	unsigned long base;	*p = 0;	if (irq)		*irq = 0;	if (!ide_base) {		/* TODO:		 * - add code to read ORx, BRx		 */		ide_phy_base = CFG_ATA_BASE_ADDR;		ide_phy_end  = CFG_ATA_BASE_ADDR + 0x200;		printk ("IDE phys mem : %08x...%08x (size %08x)\n",			ide_phy_base, ide_phy_end,			ide_phy_end - ide_phy_base);				ide_base=(unsigned long)ioremap(ide_phy_base,						ide_phy_end-ide_phy_base);#ifdef DEBUG		printk ("IDE virt base: %08lx\n", ide_base);#endif	}	if (data_port >= MAX_HWIFS)		return;	base = ide_base + ioport_dsc[data_port].base_off;#ifdef DEBUG	printk ("base: %08x + %08x = %08x\n",		ide_base, ioport_dsc[data_port].base_off, base);#endif	for (i = 0; i < IDE_NR_PORTS; ++i) {#ifdef DEBUG		printk ("port[%d]: %08x + %08x = %08x\n",			i,			base,			ioport_dsc[data_port].reg_off[i],			i, base + ioport_dsc[data_port].reg_off[i]);#endif	 	*p++ = base + ioport_dsc[data_port].reg_off[i];	}	if (irq) {		/* direct connected IDE drive, i.e. external IRQ */		*irq = ioport_dsc[data_port].irq;	}	/* register routine to tune PIO mode */	ide_hwifs[data_port].tuneproc = m8xx_ide_tuneproc;	hw->ack_intr = (ide_ack_intr_t *) ide_interrupt_ack;	/* Enable Harddisk Interrupt,	 * and make it edge sensitive	 */	/* (11-18) Set edge detect for irq, no wakeup from low power mode */	((immap_t *) IMAP_ADDR)->im_siu_conf.sc_siel |=			(0x80000000 >> ioport_dsc[data_port].irq);}	/* m8xx_ide_init_hwif_ports() for CONFIG_IDE_8xx_DIRECT */ #endif	/* CONFIG_IDE_8xx_DIRECT *//* -------------------------------------------------------------------- *//* PCMCIA Timing */#ifndef	PCMCIA_SHT#define PCMCIA_SHT(t)	((t & 0x0F)<<16)	/* Strobe Hold  Time 	*/#define PCMCIA_SST(t)	((t & 0x0F)<<12)	/* Strobe Setup Time	*/

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区在线看| 久久久一区二区| 在线视频中文字幕一区二区| 成人免费黄色在线| 丁香天五香天堂综合| 国产精品456| 国产成人免费视频网站| 国产精品69毛片高清亚洲| 国产精品123| 白白色 亚洲乱淫| av在线播放一区二区三区| 99久久er热在这里只有精品66| 成人禁用看黄a在线| 99re6这里只有精品视频在线观看| av影院午夜一区| 91蝌蚪porny| 欧美日韩一区在线| 91精品国产品国语在线不卡| 欧美一卡二卡三卡| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 免费成人深夜小野草| 久久97超碰国产精品超碰| 精品一区二区三区视频在线观看 | 色综合久久久久综合体| 欧美日韩精品一区二区在线播放| 欧美日韩高清一区| 欧美大片一区二区| 久久久国产精品麻豆| 亚洲美女在线国产| 午夜精品久久久久久久99樱桃 | 欧美男人的天堂一二区| 欧美一区二区三区免费观看视频| 精品久久久久久无| 中文字幕五月欧美| 亚洲国产aⅴ成人精品无吗| 蜜臀久久久99精品久久久久久| 久草这里只有精品视频| 成人黄色片在线观看| 在线视频观看一区| 精品国产乱码久久久久久浪潮| 欧美国产一区视频在线观看| 亚洲一区在线观看免费| 久久精品国产**网站演员| 成人免费va视频| 欧美人牲a欧美精品| 久久久久久久久久久久久久久99| 综合久久国产九一剧情麻豆| 亚洲成人免费av| 国产精品99久久久久久久vr| 在线观看亚洲精品| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲欧美日韩国产另类专区 | 欧美日韩在线一区二区| 亚洲精品一区二区三区福利| 亚洲女爱视频在线| 精品在线观看视频| 91福利视频在线| 2023国产精品自拍| 亚洲一级二级三级在线免费观看| 激情五月婷婷综合网| 91高清视频免费看| 久久精品国内一区二区三区| 国产精品1区2区3区| 色综合天天综合网国产成人综合天 | 国产精品一二三四区| 色av成人天堂桃色av| 久久久久久久免费视频了| 亚洲国产一区视频| 99精品偷自拍| 久久综合久久久久88| 亚洲亚洲人成综合网络| 国产99久久久国产精品潘金| 日韩一级二级三级精品视频| 一区二区三区鲁丝不卡| 国产精品小仙女| 精品三级在线看| 亚洲成av人片www| 91在线观看免费视频| 久久久av毛片精品| 看电视剧不卡顿的网站| 欧美三级三级三级| 亚洲欧美电影院| 成人少妇影院yyyy| 91伊人久久大香线蕉| 欧美激情中文字幕一区二区| 黑人精品欧美一区二区蜜桃| 欧美一区二区视频在线观看| 亚洲一二三四区| 色综合中文字幕| 成人免费一区二区三区在线观看| 国产精品一二二区| 欧美精品一区二区在线播放| 久久精品国产精品亚洲红杏| 91麻豆精品国产| 午夜a成v人精品| 欧美日韩免费高清一区色橹橹 | 国产成人亚洲精品狼色在线 | 经典三级一区二区| 欧美一区二区三区不卡| 偷拍亚洲欧洲综合| 欧美日韩色综合| 图片区小说区区亚洲影院| 欧美人与禽zozo性伦| 日日摸夜夜添夜夜添国产精品| 欧美精品高清视频| 日本欧美在线观看| 欧美电影免费观看高清完整版| 日韩vs国产vs欧美| 日韩一区二区高清| 男女性色大片免费观看一区二区 | 亚洲欧美日韩在线播放| 91视频精品在这里| 亚洲免费观看高清完整版在线观看熊 | 蜜桃视频一区二区三区在线观看| 欧美日韩一级大片网址| 五月婷婷色综合| 日韩午夜三级在线| 国产suv精品一区二区883| 国产精品视频一二三| 色综合天天在线| 亚洲成人av资源| 精品欧美一区二区久久| 国产不卡一区视频| 日韩美女视频19| 欧美日本在线视频| 久久精品久久综合| 国产精品乱码一区二区三区软件 | 51精品秘密在线观看| 玖玖九九国产精品| 久久99最新地址| 亚洲制服丝袜在线| 在线视频国产一区| 国产精品久久久久婷婷| 99re热视频精品| 亚洲资源中文字幕| 这里只有精品免费| 久久99热这里只有精品| 国产欧美精品一区二区色综合| 国产乱人伦精品一区二区在线观看| 国产午夜三级一区二区三| 亚洲人成亚洲人成在线观看图片| 免费在线视频一区| 日韩欧美国产麻豆| 成人黄色av网站在线| 尤物视频一区二区| 日韩视频免费观看高清完整版在线观看| 免费观看成人鲁鲁鲁鲁鲁视频| 国产色综合久久| 91片黄在线观看| 日日摸夜夜添夜夜添国产精品 | 欧美成人三级电影在线| 国产乱码精品一区二区三 | 久久精品久久99精品久久| 久久久精品2019中文字幕之3| 欧洲一区在线观看| 日韩美女天天操| 精品少妇一区二区三区视频免付费 | 一本色道a无线码一区v| 婷婷国产在线综合| 久久精品视频在线免费观看| 91在线国产福利| 日韩黄色片在线观看| 综合色天天鬼久久鬼色| 6080日韩午夜伦伦午夜伦| 国产高清不卡一区| 亚洲一区免费在线观看| 精品不卡在线视频| 色欧美片视频在线观看 | 在线亚洲一区二区| 七七婷婷婷婷精品国产| 国产精品高潮呻吟久久| 337p亚洲精品色噜噜| 国产成人在线视频网址| 亚洲综合在线第一页| 91精品国产丝袜白色高跟鞋| 91麻豆国产精品久久| 国产在线精品一区二区不卡了| 日韩美女久久久| 精品少妇一区二区三区日产乱码| 麻豆精品久久精品色综合| 欧美国产一区在线| 美美哒免费高清在线观看视频一区二区| 久久久精品tv| 91精品国产综合久久香蕉的特点| 成人免费福利片| 开心九九激情九九欧美日韩精美视频电影 | 亚洲美腿欧美偷拍| 国产精品污www在线观看| 3d动漫精品啪啪1区2区免费| 99久久精品一区| 国产一区二区三区av电影| 亚洲成av人片在线| 亚洲精品亚洲人成人网在线播放| 日韩精品综合一本久道在线视频| hitomi一区二区三区精品| 免费的成人av| 亚洲aⅴ怡春院| 成人免费在线视频| 亚洲欧洲无码一区二区三区| 久久新电视剧免费观看|