]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - board/cpc45/ide.c
Coding Style cleanup: remove trailing empty lines
[karo-tx-uboot.git] / board / cpc45 / ide.c
1 /*
2  * (C) Copyright 2001
3  * Rob Taylor, Flying Pig Systems. robt@flyingpig.com.
4  *
5  * (C) Copyright 2000-2011
6  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
7  *
8  * SPDX-License-Identifier:     GPL-2.0+
9  */
10
11 #include <common.h>
12 #include <ide.h>
13 #include <ata.h>
14 #include <asm/io.h>
15
16 #define EIEIO           __asm__ volatile ("eieio")
17 #define SYNC            __asm__ volatile ("sync")
18
19 void ide_input_swap_data(int dev, ulong *sect_buf, int words)
20 {
21         uchar i;
22         volatile uchar *pbuf_even =
23                 (uchar *) (ATA_CURR_BASE(dev) + ATA_DATA_EVEN);
24         volatile uchar *pbuf_odd =
25                 (uchar *) (ATA_CURR_BASE(dev) + ATA_DATA_ODD);
26         ushort *dbuf = (ushort *) sect_buf;
27
28         while (words--) {
29                 for (i = 0; i < 2; i++) {
30                         *(((uchar *) (dbuf)) + 1) = *pbuf_even;
31                         *(uchar *) dbuf = *pbuf_odd;
32                         dbuf += 1;
33                 }
34         }
35 }
36
37 void ide_input_data(int dev, ulong *sect_buf, int words)
38 {
39         uchar *dbuf;
40         volatile uchar *pbuf_even;
41         volatile uchar *pbuf_odd;
42
43         pbuf_even = (uchar *) (ATA_CURR_BASE(dev) + ATA_DATA_EVEN);
44         pbuf_odd = (uchar *) (ATA_CURR_BASE(dev) + ATA_DATA_ODD);
45         dbuf = (uchar *) sect_buf;
46         while (words--) {
47                 *dbuf++ = *pbuf_even;
48                 EIEIO;
49                 SYNC;
50                 *dbuf++ = *pbuf_odd;
51                 EIEIO;
52                 SYNC;
53                 *dbuf++ = *pbuf_even;
54                 EIEIO;
55                 SYNC;
56                 *dbuf++ = *pbuf_odd;
57                 EIEIO;
58                 SYNC;
59         }
60 }
61
62 void ide_input_data_shorts(int dev, ushort *sect_buf, int shorts)
63 {
64         uchar *dbuf;
65         volatile uchar *pbuf_even;
66         volatile uchar *pbuf_odd;
67
68         pbuf_even = (uchar *) (ATA_CURR_BASE(dev) + ATA_DATA_EVEN);
69         pbuf_odd = (uchar *) (ATA_CURR_BASE(dev) + ATA_DATA_ODD);
70         dbuf = (uchar *) sect_buf;
71         while (shorts--) {
72                 EIEIO;
73                 *dbuf++ = *pbuf_even;
74                 EIEIO;
75                 *dbuf++ = *pbuf_odd;
76         }
77 }
78
79 void ide_output_data(int dev, const ulong *sect_buf, int words)
80 {
81         uchar *dbuf;
82         volatile uchar *pbuf_even;
83         volatile uchar *pbuf_odd;
84
85         pbuf_even = (uchar *) (ATA_CURR_BASE(dev) + ATA_DATA_EVEN);
86         pbuf_odd = (uchar *) (ATA_CURR_BASE(dev) + ATA_DATA_ODD);
87         dbuf = (uchar *) sect_buf;
88         while (words--) {
89                 EIEIO;
90                 *pbuf_even = *dbuf++;
91                 EIEIO;
92                 *pbuf_odd = *dbuf++;
93                 EIEIO;
94                 *pbuf_even = *dbuf++;
95                 EIEIO;
96                 *pbuf_odd = *dbuf++;
97         }
98 }
99
100 void ide_output_data_shorts(int dev, ushort *sect_buf, int shorts)
101 {
102         uchar *dbuf;
103         volatile uchar *pbuf_even;
104         volatile uchar *pbuf_odd;
105
106         pbuf_even = (uchar *) (ATA_CURR_BASE(dev) + ATA_DATA_EVEN);
107         pbuf_odd = (uchar *) (ATA_CURR_BASE(dev) + ATA_DATA_ODD);
108         dbuf = (uchar *) sect_buf;
109         while (shorts--) {
110                 EIEIO;
111                 *pbuf_even = *dbuf++;
112                 EIEIO;
113                 *pbuf_odd = *dbuf++;
114         }
115 }
116
117 void ide_led(uchar led, uchar status)
118 {
119         u_char  val;
120         /* We have one PCMCIA slot and use LED H4 for the IDE Interface */
121         val = readb(BCSR_BASE + 0x04);
122         if (status)                             /* led on */
123                 val |= B_CTRL_LED0;
124         else
125                 val &= ~B_CTRL_LED0;
126
127         writeb(val, BCSR_BASE + 0x04);
128 }