1
2
3
4
5
6
7
8
9
10#ifndef __ASM_IDE_H
11#define __ASM_IDE_H
12
13#ifdef __KERNEL__
14
15#include <linux/config.h>
16#include <asm/io.h>
17
18#ifndef MAX_HWIFS
19# ifdef CONFIG_BLK_DEV_IDEPCI
20#define MAX_HWIFS 10
21# else
22#define MAX_HWIFS 6
23# endif
24#endif
25
26struct ide_ops {
27 int (*ide_default_irq)(ide_ioreg_t base);
28 ide_ioreg_t (*ide_default_io_base)(int index);
29 void (*ide_init_hwif_ports)(hw_regs_t *hw, ide_ioreg_t data_port,
30 ide_ioreg_t ctrl_port, int *irq);
31};
32
33extern struct ide_ops *ide_ops;
34
35static __inline__ int ide_default_irq(ide_ioreg_t base)
36{
37 return ide_ops->ide_default_irq(base);
38}
39
40static __inline__ ide_ioreg_t ide_default_io_base(int index)
41{
42 return ide_ops->ide_default_io_base(index);
43}
44
45static inline void ide_init_hwif_ports(hw_regs_t *hw, ide_ioreg_t data_port,
46 ide_ioreg_t ctrl_port, int *irq)
47{
48 ide_ops->ide_init_hwif_ports(hw, data_port, ctrl_port, irq);
49}
50
51static __inline__ void ide_init_default_hwifs(void)
52{
53#ifndef CONFIG_BLK_DEV_IDEPCI
54 hw_regs_t hw;
55 int index;
56
57 for(index = 0; index < MAX_HWIFS; index++) {
58 memset(&hw, 0, sizeof hw);
59 ide_init_hwif_ports(&hw, ide_default_io_base(index), 0, NULL);
60 hw.irq = ide_default_irq(ide_default_io_base(index));
61 ide_register_hw(&hw, NULL);
62 }
63#endif
64}
65
66#ifdef CONFIG_PCMCIA_SIBYTE
67#define IDE_ARCH_ACK_INTR
68#define ide_ack_intr(hwif) ((hwif)->hw.ack_intr ? (hwif)->hw.ack_intr(hwif) : 1)
69#endif
70
71#include <asm-generic/ide_iops.h>
72
73#endif
74
75#endif
76