falconide.c 2.12 KB
Newer Older
Linus Torvalds's avatar
Linus Torvalds committed
1
/*
2
 *  Atari Falcon IDE Driver
Linus Torvalds's avatar
Linus Torvalds committed
3 4 5 6 7 8 9 10
 *
 *     Created 12 Jul 1997 by Geert Uytterhoeven
 *
 *  This file is subject to the terms and conditions of the GNU General Public
 *  License.  See the file COPYING in the main directory of this archive for
 *  more details.
 */

Al Viro's avatar
Al Viro committed
11
#include <linux/module.h>
Linus Torvalds's avatar
Linus Torvalds committed
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
#include <linux/types.h>
#include <linux/mm.h>
#include <linux/interrupt.h>
#include <linux/blkdev.h>
#include <linux/hdreg.h>
#include <linux/ide.h>
#include <linux/init.h>

#include <asm/setup.h>
#include <asm/atarihw.h>
#include <asm/atariints.h>
#include <asm/atari_stdma.h>


    /*
     *  Base of the IDE interface
     */

#define ATA_HD_BASE	0xfff00000

    /*
     *  Offsets from the above base
     */

#define ATA_HD_DATA	0x00
#define ATA_HD_ERROR	0x05		/* see err-bits */
#define ATA_HD_NSECTOR	0x09		/* nr of sectors to read/write */
#define ATA_HD_SECTOR	0x0d		/* starting sector */
#define ATA_HD_LCYL	0x11		/* starting cylinder */
#define ATA_HD_HCYL	0x15		/* high byte of starting cyl */
#define ATA_HD_SELECT	0x19		/* 101dhhhh , d=drive, hhhh=head */
#define ATA_HD_STATUS	0x1d		/* see status-bits */
#define ATA_HD_CONTROL	0x39

static int falconide_offsets[IDE_NR_PORTS] __initdata = {
    ATA_HD_DATA, ATA_HD_ERROR, ATA_HD_NSECTOR, ATA_HD_SECTOR, ATA_HD_LCYL,
    ATA_HD_HCYL, ATA_HD_SELECT, ATA_HD_STATUS, ATA_HD_CONTROL, -1
};


    /*
     *  falconide_intr_lock is used to obtain access to the IDE interrupt,
     *  which is shared between several drivers.
     */

int falconide_intr_lock;
Al Viro's avatar
Al Viro committed
58
EXPORT_SYMBOL(falconide_intr_lock);
Linus Torvalds's avatar
Linus Torvalds committed
59 60 61 62 63 64


    /*
     *  Probe for a Falcon IDE interface
     */

65
static int __init falconide_init(void)
Linus Torvalds's avatar
Linus Torvalds committed
66 67 68
{
    if (MACH_IS_ATARI && ATARIHW_PRESENT(IDE)) {
	hw_regs_t hw;
69
	ide_hwif_t *hwif;
Linus Torvalds's avatar
Linus Torvalds committed
70

71 72
	printk(KERN_INFO "ide: Falcon IDE controller\n");

Linus Torvalds's avatar
Linus Torvalds committed
73 74 75 76 77
	ide_setup_ports(&hw, ATA_HD_BASE, falconide_offsets,
			0, 0, NULL,
//			falconide_iops,
			IRQ_MFP_IDE);

78 79 80
	hwif = ide_find_port(hw.io_ports[IDE_DATA_OFFSET]);
	if (hwif) {
		u8 index = hwif->index;
81
		u8 idx[4] = { index, 0xff, 0xff, 0xff };
82 83 84 85

		ide_init_port_data(hwif, index);
		ide_init_port_hw(hwif, &hw);

86
		ide_device_add(idx);
87
	}
88 89 90
    }

    return 0;
Linus Torvalds's avatar
Linus Torvalds committed
91
}
92 93

module_init(falconide_init);