ide.h 1.74 KB
Newer Older
Linus Torvalds's avatar
Linus Torvalds committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/*
 *  linux/include/asm-ia64/ide.h
 *
 *  Copyright (C) 1994-1996  Linus Torvalds & authors
 */

/*
 *  This file contains the ia64 architecture specific IDE code.
 */

#ifndef __ASM_IA64_IDE_H
#define __ASM_IA64_IDE_H

#ifdef __KERNEL__

#include <linux/config.h>

#include <linux/irq.h>

#ifndef MAX_HWIFS
Martin Dalecki's avatar
Martin Dalecki committed
21
# ifdef CONFIG_PCI
Linus Torvalds's avatar
Linus Torvalds committed
22 23 24 25 26 27
#define MAX_HWIFS	10
# else
#define MAX_HWIFS	6
# endif
#endif

28
static inline int ide_default_irq(unsigned long base)
Linus Torvalds's avatar
Linus Torvalds committed
29 30
{
	switch (base) {
31 32 33 34 35 36 37 38
	      case 0x1f0: return isa_irq_to_vector(14);
	      case 0x170: return isa_irq_to_vector(15);
	      case 0x1e8: return isa_irq_to_vector(11);
	      case 0x168: return isa_irq_to_vector(10);
	      case 0x1e0: return isa_irq_to_vector(8);
	      case 0x160: return isa_irq_to_vector(12);
	      default:
		return 0;
Linus Torvalds's avatar
Linus Torvalds committed
39 40 41
	}
}

42
static inline unsigned long ide_default_io_base(int index)
Linus Torvalds's avatar
Linus Torvalds committed
43 44
{
	switch (index) {
45 46 47 48 49 50 51 52
	      case 0: return 0x1f0;
	      case 1: return 0x170;
	      case 2: return 0x1e8;
	      case 3: return 0x168;
	      case 4: return 0x1e0;
	      case 5: return 0x160;
	      default:
		return 0;
Linus Torvalds's avatar
Linus Torvalds committed
53 54 55
	}
}

56 57
static inline void ide_init_hwif_ports(hw_regs_t *hw, unsigned long data_port,
				       unsigned long ctrl_port, int *irq)
Linus Torvalds's avatar
Linus Torvalds committed
58
{
59
	unsigned long reg = data_port;
Linus Torvalds's avatar
Linus Torvalds committed
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
	int i;

	for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {
		hw->io_ports[i] = reg;
		reg += 1;
	}
	if (ctrl_port) {
		hw->io_ports[IDE_CONTROL_OFFSET] = ctrl_port;
	} else {
		hw->io_ports[IDE_CONTROL_OFFSET] = hw->io_ports[IDE_DATA_OFFSET] + 0x206;
	}
	if (irq != NULL)
		*irq = 0;
	hw->io_ports[IDE_IRQ_OFFSET] = 0;
}

76 77 78 79
#ifdef CONFIG_PCI
#define ide_init_default_irq(base)	(0)
#else
#define ide_init_default_irq(base)	ide_default_irq(base)
Martin Dalecki's avatar
Martin Dalecki committed
80
#endif
Linus Torvalds's avatar
Linus Torvalds committed
81

82 83
#include <asm-generic/ide_iops.h>

Linus Torvalds's avatar
Linus Torvalds committed
84 85 86
#endif /* __KERNEL__ */

#endif /* __ASM_IA64_IDE_H */