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

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

?? hho-sd.patch

?? patches for linux-2.6.
?? PATCH
?? 第 1 頁 / 共 3 頁
字號:
diff -Nbur linux26-cvs/drivers/mmc/au1xmmc.c linux26-cvs.SD/drivers/mmc/au1xmmc.c--- linux26-cvs/drivers/mmc/au1xmmc.c	2005-09-06 10:01:29.000000000 -0500+++ linux26-cvs.SD/drivers/mmc/au1xmmc.c	2005-09-06 09:58:25.000000000 -0500@@ -66,6 +66,12 @@  #define DRIVER_NAME "au1xxx-mmc" + /* If this is defined, then support the additional SD options+  * This requires the SD patch from handhelds.org+  */++#define AU1XMMC_DO_SD+ /* Set this to enable special debugging macros */ /* #define MMC_DEBUG */ @@ -122,15 +128,22 @@ 	au_sync(); } -static inline void FLUSH_FIFO(struct au1xmmc_host *host) {+/* Turn on the FIFO flush - the fifo will be returned to active right+ * before data transfer+ */++static inline void FLUSH_FIFO_ON(struct au1xmmc_host *host) { 	u32 val = au_readl(HOST_CONFIG2(host));+	val |= SD_CONFIG2_FF;+	au_writel(val, HOST_CONFIG2(host));+	au_sync();+} -	au_writel(val | SD_CONFIG2_FF, HOST_CONFIG2(host));-	au_sync_delay(1);+static inline void FIFO_ACTIVE(struct au1xmmc_host *host) {+	u32 val = au_readl(HOST_CONFIG2(host)); 	 	/* SEND_STOP will turn off clock control - this re-enables it */-	val &= ~SD_CONFIG2_DF;-+	val &= ~(SD_CONFIG2_DF | SD_CONFIG2_FF); 	au_writel(val, HOST_CONFIG2(host)); 	au_sync(); }@@ -144,8 +157,8 @@  static inline void SEND_STOP(struct au1xmmc_host *host) { -	/* We know the value of CONFIG2, so avoid a read we don't need */-	u32 mask = SD_CONFIG2_EN;+	/* Penalty box for Jordan - NEVER ASSUME! */+	u32 mask = au_readl(HOST_CONFIG2(host));  	WARN_ON(host->status != HOST_S_DATA); 	host->status = HOST_S_STOP;@@ -185,7 +198,7 @@ 	host->flags &= HOST_F_ACTIVE;   	host->dma.len = 0;-	host->dma.dir = 0;+	host->dma.dir = DMA_BIDIRECTIONAL;  	host->pio.index  = 0; 	host->pio.offset = 0;@@ -195,6 +208,9 @@  	bcsr->disk_leds |= (1 << 8); +	/* Flush the FIFO until our next request */+	FLUSH_FIFO_ON(host);+ 	mmc_request_done(host->mmc, mrq); } @@ -210,6 +226,11 @@  	switch(cmd->flags) { 	case MMC_RSP_R1:+#ifdef AU1XMMC_DO_SD+		if (cmd->opcode == 0x03 && host->mmc->mode == MMC_MODE_SD)+			mmccmd |= SD_CMD_RT_6;+		else+#endif 		mmccmd |= SD_CMD_RT_1; 		break; 	case MMC_RSP_R1B:@@ -510,8 +531,8 @@ 		r[3] = au_readl(host->iobase + SD_RESP0); 		 		/* The CRC is omitted from the response, so really we only got-		 * 120 bytes, but the engine expects 128 bits, so we have to shift-		 * things up +		 * 120 bytes, but the engine expects 128 bits, so we have to +		 * shift things up  		 */ 		 		for(i = 0; i < 4; i++) {@@ -580,9 +601,8 @@ 				struct mmc_data *data) {  	int datalen = data->blocks * (1 << data->blksz_bits);--	if (dma != 0) -		host->flags |= HOST_F_DMA;+	int i = 0;+	u32 channel;  	if (data->flags & MMC_DATA_READ) 		host->flags |= HOST_F_RECV;@@ -592,8 +612,6 @@ 	if (host->mrq->stop)  		host->flags |= HOST_F_STOP; 		-	host->dma.dir = DMA_BIDIRECTIONAL;- 	host->dma.len = dma_map_sg(mmc_dev(host->mmc), data->sg, 				   data->sg_len, host->dma.dir); @@ -602,9 +620,21 @@  	au_writel((1 << data->blksz_bits) - 1, HOST_BLKSIZE(host));	 -	if (host->flags & HOST_F_DMA) {-		int i;-		u32 channel = DMA_CHANNEL(host);+	if (dma == 0) {+		host->pio.index = 0;+		host->pio.offset = 0;+		host->pio.len = datalen;+		+		if (host->flags & HOST_F_XMIT)+			IRQ_ON(host, SD_CONFIG_TH);+		else +			IRQ_ON(host, SD_CONFIG_NE);++		return MMC_ERR_NONE;+	}++	host->flags |= HOST_F_DMA;+	channel = DMA_CHANNEL(host);  		au1xxx_dbdma_stop(channel); @@ -614,7 +644,7 @@ 			int sg_len = sg_dma_len(&data->sg[i]); 			int len = (datalen > sg_len) ? sg_len : datalen; -			if (i == host->dma.len - 1)+		if (i == (host->dma.len - 1)) 				flags = DDMA_FLAGS_IE;      			if (host->flags & HOST_F_XMIT)@@ -626,23 +656,11 @@ 								  (void *) phys_to_virt(sg_addr), 								  len, flags); -    			if (!ret) +    		if (ret == 0)  				goto dataerr;  			datalen -= len; 		}-	}-	else {-		host->pio.index = 0;-		host->pio.offset = 0;-		host->pio.len = datalen;-		-		if (host->flags & HOST_F_XMIT)-			IRQ_ON(host, SD_CONFIG_TH);-		else -			IRQ_ON(host, SD_CONFIG_NE);-			//IRQ_ON(host, SD_CONFIG_RA|SD_CONFIG_RF);-	}  	return MMC_ERR_NONE; @@ -669,7 +687,7 @@ 	bcsr->disk_leds &= ~(1 << 8);  	if (mrq->data) {-		FLUSH_FIFO(host);+		FIFO_ACTIVE(host); 		ret = au1xmmc_prepare_data(host, mrq->data); 	} @@ -730,11 +748,26 @@ 		au1xmmc_set_clock(host, ios->clock); 		host->clock = ios->clock; 	}++#ifdef AU1XMMC_DO_SD+	/* Set the bus width for SD */++	if (ios->bus_width != host->bus_width) {+		u32 val;+		val = au_readl(HOST_CONFIG2(host));+		val &= ~(SD_CONFIG2_WB);+		val |= (ios->bus_width == MMC_BUS_WIDTH_4) ? SD_CONFIG2_WB : 0;++		au_writel(val, HOST_CONFIG2(host));+		au_sync();++		host->bus_width = ios->bus_width;+	}+#endif }  static void au1xmmc_dma_callback(int irq, void *dev_id, struct pt_regs *regs) { 	struct au1xmmc_host *host = (struct au1xmmc_host *) dev_id;-	u32 status;  	/* Avoid spurious interrupts */ @@ -773,24 +806,8 @@ 		 			/* In PIO mode, interrupts might still be enabled */ 			IRQ_OFF(host, SD_CONFIG_NE | SD_CONFIG_TH);--			//IRQ_OFF(host, SD_CONFIG_TH|SD_CONFIG_RA|SD_CONFIG_RF); 			tasklet_schedule(&host->finish_task); 		}-#if 0-		else if (status & SD_STATUS_DD) {--			/* Sometimes we get a DD before a NE in PIO mode */--			if (!(host->flags & HOST_F_DMA) && -					(status & SD_STATUS_NE))-				au1xmmc_receive_pio(host);-			else {-				au1xmmc_data_complete(host, status);-				//tasklet_schedule(&host->data_task);-			}-		}-#endif 		else if (status & (SD_STATUS_CR)) { 			if (host->status == HOST_S_CMD) 				au1xmmc_cmd_complete(host,status);@@ -830,10 +847,13 @@ 		mmc_detect_change(host->mmc); 	} ++#ifdef MMC_DEBUG 	if (host->mrq != NULL) { 		u32 status = au_readl(HOST_STATUS(host)); 		DEBUG("PENDING - %8.8x\n", host->id, status); 	}+#endif  	mod_timer(&host->timer, jiffies + AU1XMMC_DETECT_TIMEOUT); }@@ -872,9 +892,19 @@ 	host->rx_chan = rxchan; } +#ifdef AU1XMMC_DO_SD+static int au1xmmc_get_ro(struct mmc_host *mmc) {+	struct au1xmmc_host *host = mmc_priv(mmc);+	return au1xmmc_card_readonly(host);+}+#endif+ struct mmc_host_ops au1xmmc_ops = { 	.request	= au1xmmc_request, 	.set_ios	= au1xmmc_set_ios,+#ifdef AU1XMMC_DO_SD+	.get_ro		= au1xmmc_get_ro, +#endif };  static int au1xmmc_probe(struct device *dev) {@@ -909,6 +939,9 @@ 		mmc->max_seg_size = AU1XMMC_DESCRIPTOR_SIZE; 		mmc->max_phys_segs = AU1XMMC_DESCRIPTOR_COUNT;  +#ifdef AU1XMMC_DO_SD+		mmc->caps = MMC_CAP_4_BIT_DATA;+#endif 		mmc->ocr_avail = AU1XMMC_OCR;  		host = mmc_priv(mmc);@@ -919,6 +952,9 @@ 		host->clock = 0; 		host->power_mode = MMC_POWER_OFF; 		+#ifdef AU1XMMC_DO_SD+		host->bus_width = MMC_BUS_WIDTH_1;+#endif 		host->flags = au1xmmc_card_inserted(host) ? HOST_F_ACTIVE : 0; 		host->status = HOST_S_IDLE; diff -Nbur linux26-cvs/drivers/mmc/Kconfig linux26-cvs.SD/drivers/mmc/Kconfig--- linux26-cvs/drivers/mmc/Kconfig	2005-09-06 10:01:29.000000000 -0500+++ linux26-cvs.SD/drivers/mmc/Kconfig	2005-09-06 09:58:25.000000000 -0500@@ -60,13 +60,31 @@  	  If unsure, say N. +config MMC_TMIO+	tristate "Toshiba Mobile IO Controller (TMIO) MMC/SD function support"+	depends on MMC+	help+	  This provides support for the SD/MMC cell found in TC6393XB,+	  T7L66XB and also ipaq ASIC3++config MMC_SAMCOP+	tristate "SAMCOP MMC/SD function support"+	depends on MMC+	help+	  This provides support for the SD/MMC cell found in SAMCOP.++config MMC_ASIC3+	tristate "HTC ASIC3 SD/MMC support"+	depends on MMC+	help+	  This provides support for the ASIC3 SD/MMC controller, used+	  in the iPAQ hx4700 and others.+ config MMC_AU1X 	tristate "Alchemy AU1XX0 MMC Card Interface support" 	depends on SOC_AU1X00 && MMC 	help 	  This selects the AMD Alchemy(R) Multimedia card interface.-	  iIf you have a Alchemy platform with a MMC slot, say Y or M here.--	  If unsure, say N.+	  If you have a Alchemy platform with a MMC slot, say Y or M here.  endmenudiff -Nbur linux26-cvs/drivers/mmc/Makefile linux26-cvs.SD/drivers/mmc/Makefile--- linux26-cvs/drivers/mmc/Makefile	2005-09-06 10:01:29.000000000 -0500+++ linux26-cvs.SD/drivers/mmc/Makefile	2005-09-06 09:58:25.000000000 -0500@@ -18,6 +18,9 @@ obj-$(CONFIG_MMC_ARMMMCI)	+= mmci.o obj-$(CONFIG_MMC_PXA)		+= pxamci.o obj-$(CONFIG_MMC_WBSD)		+= wbsd.o+obj-$(CONFIG_MMC_TMIO)		+= tmio_mmc.o+obj-$(CONFIG_MMC_SAMCOP)	+= samcop_sdi.o+obj-$(CONFIG_MMC_ASIC3)		+= asic3_mmc.o obj-$(CONFIG_MMC_AU1X)		+= au1xmmc.o  mmc_core-y := mmc.o mmc_queue.o mmc_sysfs.odiff -Nbur linux26-cvs/drivers/mmc/mmc_block.c linux26-cvs.SD/drivers/mmc/mmc_block.c--- linux26-cvs/drivers/mmc/mmc_block.c	2005-09-06 10:00:07.000000000 -0500+++ linux26-cvs.SD/drivers/mmc/mmc_block.c	2005-09-06 09:58:49.000000000 -0500@@ -95,6 +95,10 @@ 		if (md->usage == 2) 			check_disk_change(inode->i_bdev); 		ret = 0;+		+		if ((filp->f_mode & FMODE_WRITE) &&+			mmc_card_readonly(md->queue.card))+			ret = -EROFS; 	}  	return ret;@@ -202,7 +206,10 @@ 		brq.data.sg = mq->sg; 		brq.data.sg_len = blk_rq_map_sg(req->q, req, brq.data.sg); +#if 0 		mmc_wait_for_req(card->host, &brq.mrq);+#endif+		mmc_uninterruptible_wait_for_req(card->host, &brq.mrq); 		if (brq.cmd.error) { 			printk(KERN_ERR "%s: error %d sending read/write command\n", 			       req->rq_disk->disk_name, brq.cmd.error);@@ -227,7 +234,10 @@ 			cmd.opcode = MMC_SEND_STATUS; 			cmd.arg = card->rca << 16; 			cmd.flags = MMC_RSP_R1;+#if 0 			err = mmc_wait_for_cmd(card->host, &cmd, 5);+#endif+			err = mmc_uninterruptible_cmd(card->host, &cmd, 5); 			if (err) { 				printk(KERN_ERR "%s: error %d requesting status\n", 				       req->rq_disk->disk_name, err);@@ -383,7 +393,7 @@ 	struct mmc_blk_data *md; 	int err; -	if (card->csd.cmdclass & ~0x1ff)+	if (card->csd.cmdclass & ~0x5ff) 		return -ENODEV;  	if (card->csd.read_blkbits < 9) {@@ -400,9 +410,10 @@ 	if (err) 		goto out; -	printk(KERN_INFO "%s: %s %s %dKiB\n",+	printk(KERN_INFO "%s: %s %s %dKiB %s\n", 		md->disk->disk_name, mmc_card_id(card), mmc_card_name(card),-		(card->csd.capacity << card->csd.read_blkbits) / 1024);+		(card->csd.capacity << card->csd.read_blkbits) / 1024,+		mmc_card_readonly(card)?"(ro)":"");  	mmc_set_drvdata(card, md); 	add_disk(md->disk);diff -Nbur linux26-cvs/drivers/mmc/mmc.c linux26-cvs.SD/drivers/mmc/mmc.c--- linux26-cvs/drivers/mmc/mmc.c	2005-09-06 10:00:07.000000000 -0500+++ linux26-cvs.SD/drivers/mmc/mmc.c	2005-09-06 09:58:25.000000000 -0500@@ -3,6 +3,8 @@  *  *  Copyright (C) 2003-2004 Russell King, All Rights Reserved.  *+ *  SD support (c) 2004 Ian Molton.+ *  * 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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99最新地址| 亚洲精品久久7777| 99久久99久久精品免费看蜜桃| 亚洲私人黄色宅男| 日韩一级二级三级| 99久久国产综合精品色伊| 男女男精品视频| 1024国产精品| 精品国产乱码久久| 欧美在线观看视频在线| 国产成人免费视频精品含羞草妖精| 一区二区三区四区视频精品免费| 久久影视一区二区| 国产精品妹子av| 欧美日韩精品三区| 99久久久国产精品免费蜜臀| 久久精品国产**网站演员| 亚洲精品国产成人久久av盗摄 | 中文字幕在线观看不卡| 91麻豆精品国产91久久久久| 91网站黄www| 国产精品一区二区不卡| 青青草原综合久久大伊人精品优势| 一区二区中文字幕在线| 久久综合九色欧美综合狠狠| 欧美理论在线播放| 91丨porny丨国产| 粉嫩嫩av羞羞动漫久久久| 美女网站视频久久| 午夜国产精品一区| 亚洲伊人伊色伊影伊综合网| 国产精品伦理一区二区| 精品成人一区二区三区四区| 51午夜精品国产| 欧美美女bb生活片| 欧美性受极品xxxx喷水| 91亚洲大成网污www| 99久久婷婷国产综合精品电影| 国产精品一二二区| 国产精品一区二区在线看| 久久精品久久精品| 看电影不卡的网站| 看电视剧不卡顿的网站| 日本成人在线不卡视频| 日韩中文字幕亚洲一区二区va在线| 亚洲午夜免费电影| 亚洲福利视频导航| 午夜精品福利久久久| 五月天一区二区| 性做久久久久久免费观看欧美| 亚洲一二三区在线观看| 亚洲一二三区在线观看| 亚洲一区二区精品3399| 日韩在线观看一区二区| 日本美女一区二区三区视频| 男人操女人的视频在线观看欧美| 麻豆久久久久久久| 精品亚洲成a人在线观看| 国产一区二区剧情av在线| 国产自产视频一区二区三区| 国产一区在线看| 丰满少妇久久久久久久| 99久久精品国产导航| 欧美羞羞免费网站| 在线成人小视频| 日韩欧美中文字幕精品| 2019国产精品| 国产精品美女一区二区三区| 亚洲天堂久久久久久久| 亚洲国产精品精华液网站| 爽爽淫人综合网网站| 久久99在线观看| 国产成人免费视频网站高清观看视频| 成人a免费在线看| 欧美自拍偷拍午夜视频| 日韩一区二区三区免费观看| 久久久国产午夜精品 | 日韩写真欧美这视频| 欧美精品一区二区三区久久久| 国产欧美日韩另类视频免费观看| 亚洲欧美福利一区二区| 日韩黄色免费电影| 国产激情精品久久久第一区二区 | 麻豆91免费观看| 成人一区二区三区在线观看| 欧美自拍偷拍午夜视频| 精品美女在线播放| 亚洲欧美日韩在线| 麻豆91免费观看| 99v久久综合狠狠综合久久| 欧美电影影音先锋| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲一区二区三区四区在线免费观看 | 国产成人午夜精品影院观看视频| 一本一道久久a久久精品| 日韩一区二区视频在线观看| 国产精品第13页| 日本美女一区二区三区| 99精品久久久久久| 精品国偷自产国产一区| 亚洲精品久久久久久国产精华液| 看片的网站亚洲| 欧美主播一区二区三区| 中文字幕av一区 二区| 日本不卡中文字幕| 色综合婷婷久久| 日韩激情av在线| 99vv1com这只有精品| 久久久九九九九| 午夜电影网一区| 91丨九色丨国产丨porny| 精品国产区一区| 韩国女主播成人在线| 欧美日韩国产免费一区二区| 中文字幕一区在线观看| 国产一区二区0| 日韩欧美一级特黄在线播放| 亚洲成人免费观看| 色综合久久天天| 国产精品女同一区二区三区| 韩国午夜理伦三级不卡影院| 欧美精品丝袜中出| 一区二区三区美女视频| 高清不卡一区二区| 欧美一区二区三区视频免费播放| 一区二区三区久久久| 大桥未久av一区二区三区中文| 日韩一区二区三区四区五区六区| 亚洲激情五月婷婷| 国产麻豆91精品| 91精品国产高清一区二区三区蜜臀| 1000精品久久久久久久久| 激情综合网天天干| 91麻豆精品国产91久久久 | 亚洲丝袜制服诱惑| 国产一二精品视频| 欧美日韩国产三级| 亚洲高清在线精品| 成人高清视频在线观看| 久久亚洲一级片| 青青青伊人色综合久久| 欧美日韩一区二区三区视频| 亚洲国产视频a| 日本丰满少妇一区二区三区| 欧美激情中文不卡| 国产一区欧美日韩| 欧美电视剧在线观看完整版| 久久精品国产免费| 欧美一区二区美女| 婷婷丁香久久五月婷婷| 欧美丝袜第三区| 亚洲欧美日韩在线| 欧美丝袜丝交足nylons图片| 亚洲综合在线五月| 色婷婷综合五月| 丁香六月综合激情| 中文字幕在线观看不卡| 成人av片在线观看| 中文字幕亚洲欧美在线不卡| 成人国产精品视频| 日韩理论片一区二区| 91网页版在线| 一区二区三区在线免费| 色欧美片视频在线观看| 尤物视频一区二区| 欧美一区二区三区人| 久久精品99国产精品| 欧美成人高清电影在线| 韩国v欧美v亚洲v日本v| 精品久久人人做人人爽| 丁香另类激情小说| 综合久久久久久| 在线看不卡av| 日韩在线卡一卡二| 国产女同互慰高潮91漫画| 成人精品免费视频| 亚洲免费在线电影| 欧美三级乱人伦电影| 日韩中文字幕av电影| 亚洲精品一区二区三区影院| 国产精品一品视频| 亚洲视频一区二区免费在线观看| 91同城在线观看| 捆绑调教一区二区三区| 国产日韩av一区| 日本韩国欧美一区二区三区| 午夜精彩视频在线观看不卡| 久久综合久久鬼色中文字| 成人国产精品免费观看| 国产三级精品视频| 色婷婷精品久久二区二区蜜臂av| 亚洲成人精品一区二区| 国产亚洲欧美一区在线观看| 91香蕉视频污| 日本女人一区二区三区| 中文欧美字幕免费| 欧美日韩精品福利| 黑人巨大精品欧美黑白配亚洲| 中文字幕一区av| 日韩一区二区在线观看视频|