From a9b997708399263d5a2d1469b4c41f11513f12de Mon Sep 17 00:00:00 2001 From: Rafaël Carré Date: Tue, 3 Jan 2012 04:23:24 +0000 Subject: Move PP-specific headers to pp/ directory git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31530 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/pp/ata-target.h | 92 +++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 firmware/target/arm/pp/ata-target.h (limited to 'firmware/target/arm/pp/ata-target.h') diff --git a/firmware/target/arm/pp/ata-target.h b/firmware/target/arm/pp/ata-target.h new file mode 100644 index 0000000000..616c451579 --- /dev/null +++ b/firmware/target/arm/pp/ata-target.h @@ -0,0 +1,92 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2006 by Barry Wardell + * + * 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 distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#ifndef ATA_TARGET_H +#define ATA_TARGET_H + +#include "config.h" + +#ifdef CPU_PP + +#ifdef HAVE_BOOTLOADER_USB_MODE +#define ATA_DRIVER_CLOSE +#endif + +/* primary channel */ +#define ATA_DATA (*((volatile unsigned short*)(IDE_BASE + 0x1e0))) +#define ATA_ERROR (*((volatile unsigned char*)(IDE_BASE + 0x1e4))) +#define ATA_NSECTOR (*((volatile unsigned char*)(IDE_BASE + 0x1e8))) +#define ATA_SECTOR (*((volatile unsigned char*)(IDE_BASE + 0x1ec))) +#define ATA_LCYL (*((volatile unsigned char*)(IDE_BASE + 0x1f0))) +#define ATA_HCYL (*((volatile unsigned char*)(IDE_BASE + 0x1f4))) +#define ATA_SELECT (*((volatile unsigned char*)(IDE_BASE + 0x1f8))) +#define ATA_COMMAND (*((volatile unsigned char*)(IDE_BASE + 0x1fc))) +#define ATA_CONTROL (*((volatile unsigned char*)(IDE_BASE + 0x3f8))) + +#if (CONFIG_CPU == PP5002) + +#define ATA_OUT8(reg,val) do { reg = (val); \ + while (!(IDE_CFG_STATUS & 0x40)); \ + } while (0) + +/* Plain C reading and writing. See comment in ata-as-arm.S */ + +#elif defined CPU_PP502x + +/* asm optimized reading and writing */ +#define ATA_OPTIMIZED_READING +#define ATA_OPTIMIZED_WRITING + +#endif /* CONFIG_CPU */ + +#endif + +#ifdef HAVE_ATA_DMA + +/* IDE DMA controller registers */ +#define IDE_DMA_CONTROL (*(volatile unsigned long *)(0xc3000400)) +#define IDE_DMA_LENGTH (*(volatile unsigned long *)(0xc3000408)) +#define IDE_DMA_ADDR (*(volatile unsigned long *)(0xc300040C)) + +/* Maximum multi-word DMA mode supported by the controller */ +#define ATA_MAX_MWDMA 2 + +#ifndef BOOTLOADER +/* The PP5020 supports UDMA 4, but it needs cpu boosting and only + * improves performance by ~10% with a stock disk. + * UDMA 2 is stable at 30 Mhz. + * UDMA 1 is stable at 24 Mhz. + */ +#if CPUFREQ_NORMAL >= 30000000 +#define ATA_MAX_UDMA 2 +#elif CPUFREQ_NORMAL >= 24000000 +#define ATA_MAX_UDMA 1 +#else +#error "CPU speeds under 24Mhz have not been tested with DMA" +#endif +#else +/* The bootloader runs at 24 Mhz and needs a slower mode */ +#define ATA_MAX_UDMA 1 +#endif + +#endif /* HAVE_ATA_DMA */ + +#endif /* ATA_TARGET_H */ -- cgit v1.2.3