/* * $Id: s3c-ide.h,v 1.2 2008/06/11 00:56:02 scsuh Exp $ * * drivers/ide/arm/s3c-ide.h * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License, or (at your option) any later * version. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., * 675 Mass Ave, Cambridge, MA 02139, USA. * */ typedef enum { PIO0, PIO1, PIO2, PIO3, PIO4 } PIOMODE; typedef enum { UDMA0, UDMA1, UDMA2, UDMA3, UDMA4 } UDMAMODE; typedef enum { ATA_CMD_STOP, ATA_CMD_START, ATA_CMD_ABORT, ATA_CMD_CONTINUE } ATA_TRANSFER_CMD; typedef enum { ATA_INT_XFER_DONE, ATA_INT_UDMA_HOLD, ATA_INT_IRQ, ATA_INT_TBUF_FULL, ATA_INT_SBUF_EMPTY } ATA_INT_SRC; typedef enum { PIO_CPU, PIO_DMA, UDMA } ATA_MODE; typedef enum { IDLE, BUSYW, PREP, BUSYR, PAUSER, PAUSEW, PAUSER2 } BUS_STATE; #ifdef CONFIG_BLK_DEV_IDE_S3C_UDMA #define DMA_WAIT_TIMEOUT 100 #define NUM_DESCRIPTORS PRD_ENTRIES #else #define NUM_DESCRIPTORS 2 #endif #ifdef CONFIG_PM /* * This will enable the device to be powered up when write() or read() * is called. If this is not defined, the driver will return -EBUSY. */ #define WAKE_ON_ACCESS 1 typedef struct { spinlock_t lock; /* Used to block on state transitions */ unsigned stopped; /* USed to signaling device is stopped */ } pm_state; #endif typedef struct { ulong addr; /* Used to block on state transitions */ ulong len; /* Power Managers device structure */ } dma_queue_t; typedef struct { u32 tx_dev_id, rx_dev_id, target_dev_id; ide_hwif_t *hwif; #ifdef CONFIG_BLK_DEV_IDE_S3C_UDMA ide_drive_t *drive; u8 white_list, black_list; uint index; /* current queue index */ uint queue_size; /* total queue size requested */ dma_queue_t table[NUM_DESCRIPTORS]; uint irq_sta; uint pseudo_dma; /* in DMA session */ #endif struct platform_device *dev; int irq; void __iomem *regbase; ulong piotime[5]; ulong udmatime[5]; struct clk *clk; #ifdef CONFIG_PM pm_state pm; #endif } s3c_ide_hwif_t; /* s3c2443 has some faults in bus sharing. * so must use lock and unlock in UDMA. by scsuh. */ #ifdef CONFIG_ARCH_S3C2443 void lock_rom_bus(void); void unlock_rom_bus(void); #endif