Fedora kernel-2.6.17-1.2142_FC4
[linux-2.6.git] / drivers / ide / pci / aec62xx.h
1 #ifndef AEC62XX_H
2 #define AEC62XX_H
3
4 #include <linux/config.h>
5 #include <linux/pci.h>
6 #include <linux/ide.h>
7
8 struct chipset_bus_clock_list_entry {
9         byte            xfer_speed;
10         byte            chipset_settings;
11         byte            ultra_settings;
12 };
13
14 static struct chipset_bus_clock_list_entry aec6xxx_33_base [] = {
15         {       XFER_UDMA_6,    0x31,   0x07    },
16         {       XFER_UDMA_5,    0x31,   0x06    },
17         {       XFER_UDMA_4,    0x31,   0x05    },
18         {       XFER_UDMA_3,    0x31,   0x04    },
19         {       XFER_UDMA_2,    0x31,   0x03    },
20         {       XFER_UDMA_1,    0x31,   0x02    },
21         {       XFER_UDMA_0,    0x31,   0x01    },
22
23         {       XFER_MW_DMA_2,  0x31,   0x00    },
24         {       XFER_MW_DMA_1,  0x31,   0x00    },
25         {       XFER_MW_DMA_0,  0x0a,   0x00    },
26         {       XFER_PIO_4,     0x31,   0x00    },
27         {       XFER_PIO_3,     0x33,   0x00    },
28         {       XFER_PIO_2,     0x08,   0x00    },
29         {       XFER_PIO_1,     0x0a,   0x00    },
30         {       XFER_PIO_0,     0x00,   0x00    },
31         {       0,              0x00,   0x00    }
32 };
33
34 static struct chipset_bus_clock_list_entry aec6xxx_34_base [] = {
35         {       XFER_UDMA_6,    0x41,   0x06    },
36         {       XFER_UDMA_5,    0x41,   0x05    },
37         {       XFER_UDMA_4,    0x41,   0x04    },
38         {       XFER_UDMA_3,    0x41,   0x03    },
39         {       XFER_UDMA_2,    0x41,   0x02    },
40         {       XFER_UDMA_1,    0x41,   0x01    },
41         {       XFER_UDMA_0,    0x41,   0x01    },
42
43         {       XFER_MW_DMA_2,  0x41,   0x00    },
44         {       XFER_MW_DMA_1,  0x42,   0x00    },
45         {       XFER_MW_DMA_0,  0x7a,   0x00    },
46         {       XFER_PIO_4,     0x41,   0x00    },
47         {       XFER_PIO_3,     0x43,   0x00    },
48         {       XFER_PIO_2,     0x78,   0x00    },
49         {       XFER_PIO_1,     0x7a,   0x00    },
50         {       XFER_PIO_0,     0x70,   0x00    },
51         {       0,              0x00,   0x00    }
52 };
53
54 #ifndef SPLIT_BYTE
55 #define SPLIT_BYTE(B,H,L)       ((H)=(B>>4), (L)=(B-((B>>4)<<4)))
56 #endif
57 #ifndef MAKE_WORD
58 #define MAKE_WORD(W,HB,LB)      ((W)=((HB<<8)+LB))
59 #endif
60
61 #define BUSCLOCK(D)     \
62         ((struct chipset_bus_clock_list_entry *) pci_get_drvdata((D)))
63
64 static void init_setup_aec6x80(struct pci_dev *, ide_pci_device_t *);
65 static void init_setup_aec62xx(struct pci_dev *, ide_pci_device_t *);
66 static unsigned int init_chipset_aec62xx(struct pci_dev *, const char *);
67 static void init_hwif_aec62xx(ide_hwif_t *);
68 static void init_dma_aec62xx(ide_hwif_t *, unsigned long);
69
70 static ide_pci_device_t aec62xx_chipsets[] __devinitdata = {
71         {       /* 0 */
72                 .name           = "AEC6210",
73                 .init_setup     = init_setup_aec62xx,
74                 .init_chipset   = init_chipset_aec62xx,
75                 .init_hwif      = init_hwif_aec62xx,
76                 .init_dma       = init_dma_aec62xx,
77                 .channels       = 2,
78                 .autodma        = AUTODMA,
79                 .enablebits     = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},
80                 .bootable       = OFF_BOARD,
81         },{     /* 1 */
82                 .name           = "AEC6260",
83                 .init_setup     = init_setup_aec62xx,
84                 .init_chipset   = init_chipset_aec62xx,
85                 .init_hwif      = init_hwif_aec62xx,
86                 .init_dma       = init_dma_aec62xx,
87                 .channels       = 2,
88                 .autodma        = NOAUTODMA,
89                 .bootable       = OFF_BOARD,
90         },{     /* 2 */
91                 .name           = "AEC6260R",
92                 .init_setup     = init_setup_aec62xx,
93                 .init_chipset   = init_chipset_aec62xx,
94                 .init_hwif      = init_hwif_aec62xx,
95                 .init_dma       = init_dma_aec62xx,
96                 .channels       = 2,
97                 .autodma        = AUTODMA,
98                 .enablebits     = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},
99                 .bootable       = NEVER_BOARD,
100         },{     /* 3 */
101                 .name           = "AEC6X80",
102                 .init_setup     = init_setup_aec6x80,
103                 .init_chipset   = init_chipset_aec62xx,
104                 .init_hwif      = init_hwif_aec62xx,
105                 .init_dma       = init_dma_aec62xx,
106                 .channels       = 2,
107                 .autodma        = AUTODMA,
108                 .bootable       = OFF_BOARD,
109         },{     /* 4 */
110                 .name           = "AEC6X80R",
111                 .init_setup     = init_setup_aec6x80,
112                 .init_chipset   = init_chipset_aec62xx,
113                 .init_hwif      = init_hwif_aec62xx,
114                 .init_dma       = init_dma_aec62xx,
115                 .channels       = 2,
116                 .autodma        = AUTODMA,
117                 .enablebits     = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},
118                 .bootable       = OFF_BOARD,
119         }
120 };
121
122 #endif /* AEC62XX_H */