From: Albert H. <he...@us...> - 2007-11-14 23:09:17
|
Update of /cvsroot/gc-linux/linux/drivers/block In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv4431/drivers/block Modified Files: Kconfig gcn-aram.c gcn-sd.c Log Message: Merged 2.6.22. Updated drivers to use in_be* and out_be* instead of read* and write* input/output instructions. Updated DI driver: - do not use debug extensions with unknown drive models - do not load custom firmware on xenogc/duoq - evict alien firmwares and load custom formware on known drive models Index: gcn-aram.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/block/gcn-aram.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- gcn-aram.c 18 Feb 2007 22:56:01 -0000 1.13 +++ gcn-aram.c 14 Nov 2007 23:08:48 -0000 1.14 @@ -2,9 +2,9 @@ * drivers/block/gcn-aram.c * * Nintendo GameCube Auxiliary RAM block driver - * Copyright (C) 2004-2005 The GameCube Linux Team + * Copyright (C) 2004-2007 The GameCube Linux Team * Copyright (C) 2005 Todd Jeffreys <to...@vo...> - * Copyright (C) 2005 Albert Herranz + * Copyright (C) 2005,2007 Albert Herranz * * Based on previous work by Franz Lehner. * @@ -31,7 +31,7 @@ #define DRV_AUTHOR "Todd Jeffreys <to...@vo...>, " \ "Albert Herranz" -static char aram_driver_version[] = "2.0"; +static char aram_driver_version[] = "3.0"; #define aram_printk(level, format, arg...) \ printk(level DRV_MODULE_NAME ": " format , ## arg) @@ -90,7 +90,7 @@ /* * Driver settings */ -#define ARAM_NAME "aram" +#define ARAM_NAME "gcnaram" #define ARAM_MAJOR Z2RAM_MAJOR #define ARAM_SECTOR_SIZE PAGE_SIZE @@ -163,11 +163,11 @@ BUG_ON((dma_addr & ARAM_DMA_ALIGN) != 0 || (dma_len & ARAM_DMA_ALIGN) != 0); - writel(dma_addr, io_base + AR_DMA_MMADDR); - writel(aram_addr, io_base + AR_DMA_ARADDR); + out_be32(io_base + AR_DMA_MMADDR, dma_addr); + out_be32(io_base + AR_DMA_ARADDR, aram_addr); /* writing the low-word kicks off the DMA */ - writel(rq_dir_to_aram_dir(adev->req) | dma_len, io_base + AR_DMA_CNT); + out_be32(io_base + AR_DMA_CNT, rq_dir_to_aram_dir(adev->req) | dma_len); } /* @@ -183,7 +183,7 @@ spin_lock_irqsave(&adev->io_lock, flags); - csr = readw(csr_reg); + csr = in_be16(csr_reg); /* * Do nothing if the interrupt is not targetted for us. @@ -196,7 +196,7 @@ /* strictly ack the ARAM interrupt, and nothing more */ csr &= ~(DSP_CSR_AIDINT | DSP_CSR_DSPINT); - writew(csr, csr_reg); + out_be16(csr_reg, csr); /* pick up current request being serviced */ req = adev->req; @@ -462,13 +462,13 @@ * Disable ARAM interrupts, but do not accidentally ack non-ARAM ones. */ spin_lock_irqsave(&adev->io_lock, flags); - csr = readw(csr_reg); + csr = in_be16(csr_reg); csr &= ~(DSP_CSR_AIDINT | DSP_CSR_DSPINT | DSP_CSR_ARINTMASK); - writew(csr, csr_reg); + out_be16(csr_reg, csr); spin_unlock_irqrestore(&adev->io_lock, flags); /* wait until pending transfers are finished */ - while(readw(csr_reg) & DSP_CSR_DSPDMA) + while(in_be16(csr_reg) & DSP_CSR_DSPDMA) cpu_relax(); } @@ -484,7 +484,7 @@ /* request interrupt */ retval = request_irq(adev->irq, aram_irq_handler, - SA_INTERRUPT | SA_SHIRQ, + IRQF_DISABLED | IRQF_SHARED, DRV_MODULE_NAME, adev); if (retval) { aram_printk(KERN_ERR, "request of irq%d failed\n", adev->irq); @@ -496,10 +496,10 @@ * As in the other cases, preserve the AI and DSP interrupts. */ spin_lock_irqsave(&adev->io_lock, flags); - csr = readw(csr_reg); + csr = in_be16(csr_reg); csr |= (DSP_CSR_ARINT | DSP_CSR_ARINTMASK | DSP_CSR_PIINT); csr &= ~(DSP_CSR_AIDINT | DSP_CSR_DSPINT); - writew(csr, csr_reg); + out_be16(csr_reg, csr); spin_unlock_irqrestore(&adev->io_lock, flags); out: Index: Kconfig =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/block/Kconfig,v retrieving revision 1.26 retrieving revision 1.27 diff -u -d -r1.26 -r1.27 --- Kconfig 30 Apr 2007 17:06:12 -0000 1.26 +++ Kconfig 14 Nov 2007 23:08:47 -0000 1.27 @@ -506,8 +506,6 @@ this option is dangerous unless the CD-RW media is known good, as we don't do deferred write error handling yet. -source "drivers/s390/block/Kconfig" - config ATA_OVER_ETH tristate "ATA over Ethernet support" depends on NET @@ -515,6 +513,8 @@ This driver provides Support for ATA over Ethernet block devices like the Coraid EtherDrive (R) Storage Blade. +source "drivers/s390/block/Kconfig" + endmenu endif Index: gcn-sd.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/block/gcn-sd.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- gcn-sd.c 17 Feb 2007 23:43:40 -0000 1.8 +++ gcn-sd.c 14 Nov 2007 23:08:48 -0000 1.9 @@ -2,10 +2,10 @@ * drivers/block/gcn-sd.c * * MMC/SD card block driver for the Nintendo GameCube - * Copyright (C) 2004-2006 The GameCube Linux Team + * Copyright (C) 2004-2007 The GameCube Linux Team * Copyright (C) 2004,2005 Rob Reylink * Copyright (C) 2005 Todd Jeffreys - * Copyright (C) 2005,2006 Albert Herranz + * Copyright (C) 2005,2006,2007 Albert Herranz * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -44,7 +44,7 @@ * | B | partition 7 | 61 | 15 | * +------+-------------+-------+-------+ * - * For example, run "mknod /dev/sdcardb1 b 61 9" to create a device file + * For example, run "mknod /dev/gcnsdb1 b 61 9" to create a device file * to access the 1st partition on the card inserted in memcard slot B. * */ @@ -67,7 +67,8 @@ */ #include <linux/mmc/host.h> #include <linux/mmc/card.h> -#include <linux/mmc/protocol.h> +#include <linux/mmc/mmc.h> +#include <linux/mmc/sd.h> #include <linux/exi.h> @@ -81,7 +82,7 @@ MODULE_DESCRIPTION(DRV_DESCRIPTION); MODULE_LICENSE("GPL"); -static char sd_driver_version[] = "3.1-isobel"; +static char sd_driver_version[] = "4.0-isobel"; #define sd_printk(level, format, arg...) \ printk(level DRV_MODULE_NAME ": " format , ## arg) @@ -195,7 +196,7 @@ #define MMC_SHIFT 3 /* 8 partitions */ #define SD_MAJOR 61 -#define SD_NAME "sdcard" +#define SD_NAME "gcnsd" #define KERNEL_SECTOR_SHIFT 9 #define KERNEL_SECTOR_SIZE (1 << KERNEL_SECTOR_SHIFT) /*512 */ @@ -204,7 +205,7 @@ enum { __SD_MEDIA_CHANGED = 0, - __SD_DEL, + __SD_BAD_CARD, }; @@ -228,6 +229,7 @@ int refcnt; unsigned long flags; #define SD_MEDIA_CHANGED (1<<__SD_MEDIA_CHANGED) +#define SD_BAD_CARD (1<<__SD_BAD_CARD) /* card related info */ struct mmc_card card; @@ -264,6 +266,17 @@ static void sd_kill(struct sd_host *host); + +static void sd_card_set_bad(struct sd_host *host) +{ + set_bit(__SD_BAD_CARD, &host->flags); +} + +static int sd_card_bad(struct sd_host *host) +{ + return test_bit(__SD_BAD_CARD, &host->flags); +} + /* * * MMC/SD data structures manipulation. @@ -367,7 +380,6 @@ default: sd_printk(KERN_ERR, "card has unknown MMCA" " version %d\n", card->csd.mmca_vsn); - mmc_card_set_bad(card); break; } } @@ -390,7 +402,6 @@ if (csd_struct != 0 && csd_struct != 1 && csd_struct != 2) { sd_printk(KERN_ERR, "unrecognised CSD structure" " version %d\n", csd_struct); - mmc_card_set_bad(card); return; } @@ -543,10 +554,7 @@ * This will help reducing CPU monopolization on large reads. * */ - exi_transfer(exi_get_exi_channel(host->exi_device), data, len, - EXI_OP_READ, EXI_CMD_IDI); - //exi_transfer(exi_get_exi_channel(host->exi_device), data, len, - // EXI_OP_READ, EXI_CMD_NODMA); + exi_dev_transfer(host->exi_device, data, len, EXI_OP_READ, EXI_CMD_IDI); } /* cycles are expressed in 8 clock cycles */ @@ -987,7 +995,7 @@ if (retval == 0x00) { /* we found a SD card */ mmc_card_set_present(&host->card); - mmc_card_set_sd(&host->card); + host->card.type = MMC_TYPE_SD; break; } if ((retval & R1_SPI_ILLEGAL_COMMAND)) { @@ -1016,7 +1024,7 @@ } if (retval != 0x00) { DBG("MMC card, bad, retval=%02x\n", retval); - mmc_card_set_bad(&host->card); + sd_card_set_bad(host); } } @@ -1033,7 +1041,7 @@ /* soft reset the card */ retval = sd_reset_sequence(host); - if (retval < 0 || mmc_card_bad(&host->card)) + if (retval < 0 || sd_card_bad(host)) goto out; /* read Operating Conditions Register */ @@ -1076,7 +1084,7 @@ goto out; err_bad_card: - mmc_card_set_bad(&host->card); + sd_card_set_bad(host); out: return retval; } @@ -1441,7 +1449,7 @@ /* get the card into a known status */ retval = sd_welcome_card(host); - if (retval < 0 || mmc_card_bad(&host->card)) { + if (retval < 0 || sd_card_bad(host)) { retval = -ENOMEDIUM; goto out; } |