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

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

?? pata_via.c

?? their RouterBoard 1xx and 5xx series devices. The original Mikrotik code
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * pata_via.c 	- VIA PATA for new ATA layer *			  (C) 2005-2006 Red Hat Inc *			  Alan Cox <alan@redhat.com> * *  Documentation *	Most chipset documentation available under NDA only * *  VIA version guide *	VIA VT82C561	-	early design, uses ata_generic currently *	VIA VT82C576	-	MWDMA, 33Mhz *	VIA VT82C586	-	MWDMA, 33Mhz *	VIA VT82C586a	-	Added UDMA to 33Mhz *	VIA VT82C586b	-	UDMA33 *	VIA VT82C596a	-	Nonfunctional UDMA66 *	VIA VT82C596b	-	Working UDMA66 *	VIA VT82C686	-	Nonfunctional UDMA66 *	VIA VT82C686a	-	Working UDMA66 *	VIA VT82C686b	-	Updated to UDMA100 *	VIA VT8231	-	UDMA100 *	VIA VT8233	-	UDMA100 *	VIA VT8233a	-	UDMA133 *	VIA VT8233c	-	UDMA100 *	VIA VT8235	-	UDMA133 *	VIA VT8237	-	UDMA133 *	VIA VT8237S	-	UDMA133 *	VIA VT8251	-	UDMA133 * *	Most registers remain compatible across chips. Others start reserved *	and acquire sensible semantics if set to 1 (eg cable detect). A few *	exceptions exist, notably around the FIFO settings. * *	One additional quirk of the VIA design is that like ALi they use few *	PCI IDs for a lot of chips. * *	Based heavily on: * * Version 3.38 * * VIA IDE driver for Linux. Supported southbridges: * *   vt82c576, vt82c586, vt82c586a, vt82c586b, vt82c596a, vt82c596b, *   vt82c686, vt82c686a, vt82c686b, vt8231, vt8233, vt8233c, vt8233a, *   vt8235, vt8237 * * Copyright (c) 2000-2002 Vojtech Pavlik * * Based on the work of: *	Michel Aubry *	Jeff Garzik *	Andre Hedrick */#include <linux/kernel.h>#include <linux/module.h>#include <linux/pci.h>#include <linux/init.h>#include <linux/blkdev.h>#include <linux/delay.h>#include <scsi/scsi_host.h>#include <linux/libata.h>#include <linux/dmi.h>#define DRV_NAME "pata_via"#define DRV_VERSION "0.3.3"/* *	The following comes directly from Vojtech Pavlik's ide/pci/via82cxxx *	driver. */enum {	VIA_UDMA	= 0x007,	VIA_UDMA_NONE	= 0x000,	VIA_UDMA_33	= 0x001,	VIA_UDMA_66	= 0x002,	VIA_UDMA_100	= 0x003,	VIA_UDMA_133	= 0x004,	VIA_BAD_PREQ	= 0x010, /* Crashes if PREQ# till DDACK# set */	VIA_BAD_CLK66	= 0x020, /* 66 MHz clock doesn't work correctly */	VIA_SET_FIFO	= 0x040, /* Needs to have FIFO split set */	VIA_NO_UNMASK	= 0x080, /* Doesn't work with IRQ unmasking on */	VIA_BAD_ID	= 0x100, /* Has wrong vendor ID (0x1107) */	VIA_BAD_AST	= 0x200, /* Don't touch Address Setup Timing */	VIA_NO_ENABLES	= 0x400, /* Has no enablebits */	VIA_SATA_PATA	= 0x800, /* SATA/PATA combined configuration */};/* * VIA SouthBridge chips. */static const struct via_isa_bridge {	const char *name;	u16 id;	u8 rev_min;	u8 rev_max;	u16 flags;} via_isa_bridges[] = {	{ "vx800",	PCI_DEVICE_ID_VIA_VX800,    0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },	{ "vt8237s",	PCI_DEVICE_ID_VIA_8237S,    0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },	{ "vt8251",	PCI_DEVICE_ID_VIA_8251,     0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },	{ "cx700",	PCI_DEVICE_ID_VIA_CX700,    0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_SATA_PATA },	{ "vt6410",	PCI_DEVICE_ID_VIA_6410,     0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_NO_ENABLES},	{ "vt8237a",	PCI_DEVICE_ID_VIA_8237A,    0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },	{ "vt8237",	PCI_DEVICE_ID_VIA_8237,     0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },	{ "vt8235",	PCI_DEVICE_ID_VIA_8235,     0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },	{ "vt8233a",	PCI_DEVICE_ID_VIA_8233A,    0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },	{ "vt8233c",	PCI_DEVICE_ID_VIA_8233C_0,  0x00, 0x2f, VIA_UDMA_100 },	{ "vt8233",	PCI_DEVICE_ID_VIA_8233_0,   0x00, 0x2f, VIA_UDMA_100 },	{ "vt8231",	PCI_DEVICE_ID_VIA_8231,     0x00, 0x2f, VIA_UDMA_100 },	{ "vt82c686b",	PCI_DEVICE_ID_VIA_82C686,   0x40, 0x4f, VIA_UDMA_100 },	{ "vt82c686a",	PCI_DEVICE_ID_VIA_82C686,   0x10, 0x2f, VIA_UDMA_66 },	{ "vt82c686",	PCI_DEVICE_ID_VIA_82C686,   0x00, 0x0f, VIA_UDMA_33 | VIA_BAD_CLK66 },	{ "vt82c596b",	PCI_DEVICE_ID_VIA_82C596,   0x10, 0x2f, VIA_UDMA_66 },	{ "vt82c596a",	PCI_DEVICE_ID_VIA_82C596,   0x00, 0x0f, VIA_UDMA_33 | VIA_BAD_CLK66 },	{ "vt82c586b",	PCI_DEVICE_ID_VIA_82C586_0, 0x47, 0x4f, VIA_UDMA_33 | VIA_SET_FIFO },	{ "vt82c586b",	PCI_DEVICE_ID_VIA_82C586_0, 0x40, 0x46, VIA_UDMA_33 | VIA_SET_FIFO | VIA_BAD_PREQ },	{ "vt82c586b",	PCI_DEVICE_ID_VIA_82C586_0, 0x30, 0x3f, VIA_UDMA_33 | VIA_SET_FIFO },	{ "vt82c586a",	PCI_DEVICE_ID_VIA_82C586_0, 0x20, 0x2f, VIA_UDMA_33 | VIA_SET_FIFO },	{ "vt82c586",	PCI_DEVICE_ID_VIA_82C586_0, 0x00, 0x0f, VIA_UDMA_NONE | VIA_SET_FIFO },	{ "vt82c576",	PCI_DEVICE_ID_VIA_82C576,   0x00, 0x2f, VIA_UDMA_NONE | VIA_SET_FIFO | VIA_NO_UNMASK },	{ "vt82c576",	PCI_DEVICE_ID_VIA_82C576,   0x00, 0x2f, VIA_UDMA_NONE | VIA_SET_FIFO | VIA_NO_UNMASK | VIA_BAD_ID },	{ NULL }};/* *	Cable special cases */static const struct dmi_system_id cable_dmi_table[] = {	{		.ident = "Acer Ferrari 3400",		.matches = {			DMI_MATCH(DMI_BOARD_VENDOR, "Acer,Inc."),			DMI_MATCH(DMI_BOARD_NAME, "Ferrari 3400"),		},	},	{ }};static int via_cable_override(struct pci_dev *pdev){	/* Systems by DMI */	if (dmi_check_system(cable_dmi_table))		return 1;	/* Arima W730-K8/Targa Visionary 811/... */	if (pdev->subsystem_vendor == 0x161F && pdev->subsystem_device == 0x2032)		return 1;	return 0;}/** *	via_cable_detect	-	cable detection *	@ap: ATA port * *	Perform cable detection. Actually for the VIA case the BIOS *	already did this for us. We read the values provided by the *	BIOS. If you are using an 8235 in a non-PC configuration you *	may need to update this code. * *	Hotplug also impacts on this. */static int via_cable_detect(struct ata_port *ap) {	const struct via_isa_bridge *config = ap->host->private_data;	struct pci_dev *pdev = to_pci_dev(ap->host->dev);	u32 ata66;	if (via_cable_override(pdev))		return ATA_CBL_PATA40_SHORT;	if ((config->flags & VIA_SATA_PATA) && ap->port_no == 0)		return ATA_CBL_SATA;	/* Early chips are 40 wire */	if ((config->flags & VIA_UDMA) < VIA_UDMA_66)		return ATA_CBL_PATA40;	/* UDMA 66 chips have only drive side logic */	else if ((config->flags & VIA_UDMA) < VIA_UDMA_100)		return ATA_CBL_PATA_UNK;	/* UDMA 100 or later */	pci_read_config_dword(pdev, 0x50, &ata66);	/* Check both the drive cable reporting bits, we might not have	   two drives */	if (ata66 & (0x10100000 >> (16 * ap->port_no)))		return ATA_CBL_PATA80;	/* Check with ACPI so we can spot BIOS reported SATA bridges */	if (ata_acpi_init_gtm(ap) &&	    ata_acpi_cbl_80wire(ap, ata_acpi_init_gtm(ap)))		return ATA_CBL_PATA80;	return ATA_CBL_PATA40;}static int via_pre_reset(struct ata_link *link, unsigned long deadline){	struct ata_port *ap = link->ap;	const struct via_isa_bridge *config = ap->host->private_data;	if (!(config->flags & VIA_NO_ENABLES)) {		static const struct pci_bits via_enable_bits[] = {			{ 0x40, 1, 0x02, 0x02 },			{ 0x40, 1, 0x01, 0x01 }		};		struct pci_dev *pdev = to_pci_dev(ap->host->dev);		if (!pci_test_config_bits(pdev, &via_enable_bits[ap->port_no]))			return -ENOENT;	}	return ata_sff_prereset(link, deadline);}/** *	via_do_set_mode	-	set initial PIO mode data *	@ap: ATA interface *	@adev: ATA device *	@mode: ATA mode being programmed *	@tdiv: Clocks per PCI clock *	@set_ast: Set to program address setup *	@udma_type: UDMA mode/format of registers * *	Program the VIA registers for DMA and PIO modes. Uses the ata timing *	support in order to compute modes. * *	FIXME: Hotplug will require we serialize multiple mode changes *	on the two channels. */static void via_do_set_mode(struct ata_port *ap, struct ata_device *adev, int mode, int tdiv, int set_ast, int udma_type){	struct pci_dev *pdev = to_pci_dev(ap->host->dev);	struct ata_device *peer = ata_dev_pair(adev);	struct ata_timing t, p;	static int via_clock = 33333;	/* Bus clock in kHZ - ought to be tunable one day */	unsigned long T =  1000000000 / via_clock;	unsigned long UT = T/tdiv;	int ut;	int offset = 3 - (2*ap->port_no) - adev->devno;	/* Calculate the timing values we require */	ata_timing_compute(adev, mode, &t, T, UT);	/* We share 8bit timing so we must merge the constraints */	if (peer) {		if (peer->pio_mode) {			ata_timing_compute(peer, peer->pio_mode, &p, T, UT);			ata_timing_merge(&p, &t, &t, ATA_TIMING_8BIT);		}	}	/* Address setup is programmable but breaks on UDMA133 setups */	if (set_ast) {		u8 setup;	/* 2 bits per drive */		int shift = 2 * offset;		pci_read_config_byte(pdev, 0x4C, &setup);		setup &= ~(3 << shift);		setup |= clamp_val(t.setup, 1, 4) << shift;	/* 1,4 or 1,4 - 1  FIXME */		pci_write_config_byte(pdev, 0x4C, setup);	}	/* Load the PIO mode bits */	pci_write_config_byte(pdev, 0x4F - ap->port_no,		((clamp_val(t.act8b, 1, 16) - 1) << 4) | (clamp_val(t.rec8b, 1, 16) - 1));	pci_write_config_byte(pdev, 0x48 + offset,		((clamp_val(t.active, 1, 16) - 1) << 4) | (clamp_val(t.recover, 1, 16) - 1));	/* Load the UDMA bits according to type */	switch(udma_type) {		default:			/* BUG() ? */			/* fall through */		case 33:			ut = t.udma ? (0xe0 | (clamp_val(t.udma, 2, 5) - 2)) : 0x03;			break;		case 66:			ut = t.udma ? (0xe8 | (clamp_val(t.udma, 2, 9) - 2)) : 0x0f;			break;		case 100:			ut = t.udma ? (0xe0 | (clamp_val(t.udma, 2, 9) - 2)) : 0x07;			break;		case 133:			ut = t.udma ? (0xe0 | (clamp_val(t.udma, 2, 9) - 2)) : 0x07;			break;	}	/* Set UDMA unless device is not UDMA capable */	if (udma_type && t.udma) {		u8 cable80_status;		/* Get 80-wire cable detection bit */		pci_read_config_byte(pdev, 0x50 + offset, &cable80_status);		cable80_status &= 0x10;		pci_write_config_byte(pdev, 0x50 + offset, ut | cable80_status);	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一区二区三区很污很色的| 91热门视频在线观看| 日韩一区二区三区三四区视频在线观看| 亚洲一区免费在线观看| 欧美色大人视频| 免费高清不卡av| 久久久久一区二区三区四区| 国产成人自拍网| 国产精品毛片无遮挡高清| 91麻豆6部合集magnet| 亚洲国产视频a| 精品日韩在线一区| 粉嫩av一区二区三区| 亚洲乱码国产乱码精品精小说| 在线国产亚洲欧美| 久久91精品国产91久久小草| 亚洲在线成人精品| 91麻豆精品国产91久久久使用方法| 日av在线不卡| 国产精品欧美经典| 欧美日产国产精品| 国产精品一级黄| 亚洲精品自拍动漫在线| 欧美一区在线视频| 成人app在线| 天天综合色天天综合| 久久精品欧美日韩| 欧美亚洲国产怡红院影院| 久久成人综合网| 亚洲精品va在线观看| 欧美成人在线直播| 色94色欧美sute亚洲线路一久| 日本欧美一区二区| 国产精品二三区| 欧美成人a视频| 色综合久久久久综合体桃花网| 蜜臀va亚洲va欧美va天堂| 国产精品美女久久久久高潮| 91精品国产一区二区三区香蕉| 成人综合在线观看| 捆绑变态av一区二区三区| 一区在线观看免费| 欧美成va人片在线观看| 在线观看亚洲一区| 成人激情免费视频| 麻豆精品视频在线观看| 亚洲另类在线视频| 日本一区二区三区视频视频| 欧美一级理论片| 欧美伊人久久大香线蕉综合69| 国产成人免费av在线| 日本伊人精品一区二区三区观看方式| 亚洲欧美综合色| 国产亚洲精品资源在线26u| 69堂亚洲精品首页| 色欧美片视频在线观看| 成人avav在线| 成人免费视频一区二区| 国产伦精品一区二区三区视频青涩 | 不卡的电影网站| 久久精品国产一区二区| 午夜一区二区三区在线观看| 亚洲欧美日韩中文字幕一区二区三区 | 日韩二区在线观看| 亚洲1区2区3区4区| 亚洲一区二区三区视频在线播放| 国产精品久久看| 久久精品男人的天堂| 欧美mv日韩mv国产网站| 日韩一区二区三区四区| 欧美久久久久免费| 欧美日韩精品二区第二页| 91官网在线免费观看| 色噜噜夜夜夜综合网| 一本大道av一区二区在线播放| 91在线播放网址| aaa亚洲精品| 97久久精品人人做人人爽| www.亚洲人| 99国产精品久久久久久久久久久| fc2成人免费人成在线观看播放 | 国产a视频精品免费观看| 国产一区在线不卡| 国产乱人伦精品一区二区在线观看 | 亚洲欧美日韩一区二区| 亚洲激情五月婷婷| 一级特黄大欧美久久久| 亚洲综合在线免费观看| 性欧美大战久久久久久久久| 亚洲chinese男男1069| 丝瓜av网站精品一区二区| 日本伊人午夜精品| 国产一区二区在线观看免费| 国产aⅴ精品一区二区三区色成熟| 国产精品66部| 日本韩国欧美一区| 欧美久久久久久久久久| 精品久久久久香蕉网| 国产精品美女久久久久高潮| 亚洲欧美怡红院| 亚洲va天堂va国产va久| 久久99蜜桃精品| 成人sese在线| 欧美乱妇20p| 久久久久国色av免费看影院| 国产精品成人在线观看| 性做久久久久久免费观看| 激情小说欧美图片| 91香蕉视频污在线| 欧美一区二区三区免费| 国产日韩欧美高清| 婷婷国产在线综合| 国产精品一区一区三区| 97久久超碰国产精品电影| 欧美精品粉嫩高潮一区二区| 久久亚洲春色中文字幕久久久| 亚洲欧美日韩国产综合| 免费在线观看不卡| 99久久婷婷国产综合精品| 18欧美亚洲精品| 青青草原综合久久大伊人精品优势| 国产成人超碰人人澡人人澡| 欧美图区在线视频| 欧美激情一区在线观看| 午夜精品福利视频网站| 成人国产视频在线观看| 欧美片网站yy| 亚洲视频免费在线观看| 蜜臀国产一区二区三区在线播放| 99久久综合精品| 欧美成人一区二区三区片免费| 亚洲另类在线制服丝袜| 国产伦精品一区二区三区免费| 欧美三级乱人伦电影| 国产精品久久久久久久裸模 | 最近中文字幕一区二区三区| 久久国产视频网| 在线精品亚洲一区二区不卡| 国产日产欧美一区| 久久99国产精品久久99| 欧美日本一区二区三区四区| 国产精品国产三级国产普通话99 | 韩国av一区二区三区| 欧美在线免费观看亚洲| 国产精品女人毛片| 国产精品资源网站| 日韩欧美一级二级| 日韩在线a电影| 欧洲国内综合视频| 亚洲欧美区自拍先锋| 成人午夜电影小说| 久久久久国色av免费看影院| 麻豆国产一区二区| 日韩一区二区视频在线观看| 一级中文字幕一区二区| 一本一本大道香蕉久在线精品| 国产喂奶挤奶一区二区三区| 美日韩一区二区三区| 亚洲欧洲99久久| 丰满少妇久久久久久久| 国产午夜精品久久| 国产伦精一区二区三区| 久久影院视频免费| 国产一二三精品| 久久精品亚洲乱码伦伦中文| 国产在线精品免费| 国产欧美一区二区精品性色| 国产一区二区精品久久99| 久久久久久久av麻豆果冻| 国产麻豆视频精品| 亚洲国产激情av| 不卡在线观看av| 亚洲精品一二三| 欧美丝袜丝nylons| 男女性色大片免费观看一区二区| 欧美精品欧美精品系列| 婷婷久久综合九色综合绿巨人| 91精品久久久久久蜜臀| 日本欧美韩国一区三区| 日韩欧美国产午夜精品| 久久99国产精品尤物| 国产日韩三级在线| 99视频一区二区| 一区二区三区日韩精品视频| 欧美日韩国产中文| 久久国产精品第一页| 久久久国产精品午夜一区ai换脸| 国产超碰在线一区| 一区二区高清视频在线观看| 欧美欧美午夜aⅴ在线观看| 免费观看日韩av| 国产精品嫩草99a| 欧美亚洲高清一区| 另类小说图片综合网| 久久久久青草大香线综合精品| www.性欧美| 日韩—二三区免费观看av| 国产日韩在线不卡| 欧美影视一区在线| 国产一区二区三区国产|