// SPDX-License-Identifier: GPL-2.0-or-later /* * (c) 1997-1998 Grant R. Guenther <grant@torque.net> * * epia.c is a low-level protocol driver for Shuttle Technologies * EPIA parallel to IDE adapter chip. This device is now obsolete * and has been replaced with the EPAT chip, which is supported * by epat.c, however, some devices based on EPIA are still * available.
*/
/* * cont = 0 IDE register file * cont = 1 IDE control registers
*/ staticint cont_map[2] = { 0, 0x80 };
staticint epia_read_regr(struct pi_adapter *pi, int cont, int regr)
{ int a, b, r;
regr += cont_map[cont];
switch (pi->mode) { case 0:
r = regr ^ 0x39;
w0(r); w2(1); w2(3); w0(r);
a = r1(); w2(1); b = r1(); w2(4); return j44(a, b); case 1:
r = regr ^ 0x31;
w0(r); w2(1); w0(r & 0x37);
w2(3); w2(5); w0(r | 0xf0);
a = r1(); b = r2(); w2(4); return j53(a, b); case 2:
r = regr^0x29;
w0(r); w2(1); w2(0X21); w2(0x23);
a = r0(); w2(4); return a; case 3: case 4: case 5:
w3(regr); w2(0x24); a = r4(); w2(4); return a;
}
return -1;
}
staticvoid epia_write_regr(struct pi_adapter *pi, int cont, int regr, int val)
{ int r;
regr += cont_map[cont];
switch (pi->mode) { case 0: case 1: case 2:
r = regr ^ 0x19;
w0(r); w2(1); w0(val); w2(3); w2(4); break; case 3: case 4: case 5:
r = regr ^ 0x40;
w3(r); w4(val); w2(4); break;
}
}
/* * The use of register 0x84 is entirely unclear - it seems to control * some EPP counters ... currently we know about 3 different block * sizes: the standard 512 byte reads and writes, 12 byte writes and * 2048 byte reads (the last two being used in the CDrom drivers.
*/ staticvoid epia_connect(struct pi_adapter *pi)
{
pi->saved_r0 = r0();
pi->saved_r2 = r2();
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.