Prefs:Printer - Add terrible hack for m68k
[AROS.git] / rom / hidds / ata_pci / interface_pio.c
blobc51acaf43ae56380537a1064e5dd6f8cb5c11c67
1 /*
2 Copyright © 2004-2013, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc: PCI IDE PIO interface functions
6 Lang: English
7 */
9 #include "interface_pio.h"
11 void ata_out(struct pio_data *data, UBYTE val, UWORD offset)
13 outb(val, offset + data->ioBase);
16 UBYTE ata_in(struct pio_data *data, UWORD offset)
18 return inb(offset + data->ioBase);
21 void ata_out_alt(struct pio_data *data, UBYTE val, UWORD offset)
23 outb(val, offset + data->ioAlt);
26 UBYTE ata_in_alt(struct pio_data *data, UWORD offset)
28 return inb(offset + data->ioAlt);
31 #if defined(__i386__) || defined(__x86_64__)
33 void ata_outsw(struct pio_data *data, APTR address, ULONG count)
35 outsw(data->ioBase, address, count >> 1);
38 void ata_insw(struct pio_data *data, APTR address, ULONG count)
40 insw(data->ioBase, address, count >> 1);
43 void ata_outsl(struct pio_data *data, APTR address, ULONG count)
45 if (count & 2)
46 outsw(data->ioBase, address, count >> 1);
47 else
48 outsl(data->ioBase, address, count >> 2);
51 void ata_insl(struct pio_data *data, APTR address, ULONG count)
53 if (count & 2)
54 insw(data->ioBase, address, count >> 1);
55 else
56 insl(data->ioBase, address, count >> 2);
59 #else
61 void ata_outsw(struct pio_data *data, APTR address, ULONG count)
63 UWORD *addr = address;
64 UWORD *p = (UWORD*)(port + data);
66 while(count)
68 outw(*addr++, p);
69 count -= 2;
73 void ata_insw(struct pio_data *data, APTR address, ULONG count)
75 UWORD *addr = address;
77 while(count)
79 *addr++ = inw(data->ioBase);
80 count -= 2;
84 void ata_outsl(struct pio_data *data, APTR address, ULONG count)
86 if (count & 2)
88 ata_outsw(address, port, count, data);
90 else
92 ULONG *addr = address;
94 while(count)
96 outl(*addr++, data->ioBase);
97 count -= 4;
102 void ata_insl(struct pio_data *data, APTR address, ULONG count)
104 if (count & 2)
106 ata_insw(address, count, data);
108 else
110 ULONG *addr = address;
112 while(count)
114 *addr++ = inl(data->ioBase);
115 count -= 4;
120 #endif
122 const APTR bus_FuncTable[] =
124 ata_out,
125 ata_in,
126 ata_out_alt,
127 ata_in_alt,
128 (APTR *)-1
131 const APTR pio_FuncTable[] =
133 ata_outsw,
134 ata_insw,
135 ata_outsl,
136 ata_insl,
137 (APTR *)-1