]> Git Repo - linux.git/blob - drivers/ata/pata_parport/fit2.c
arm64: avoid prototype warnings for syscalls
[linux.git] / drivers / ata / pata_parport / fit2.c
1 /* 
2         fit2.c        (c) 1998  Grant R. Guenther <[email protected]>
3                           Under the terms of the GNU General Public License.
4
5         fit2.c is a low-level protocol driver for the older version
6         of the Fidelity International Technology parallel port adapter.  
7         This adapter is used in their TransDisk 2000 and older TransDisk
8         3000 portable hard-drives.  As far as I can tell, this device
9         supports 4-bit mode _only_.  
10
11         Newer models of the FIT products use an enhanced protocol.
12         The "fit3" protocol module should support current drives.
13
14 */
15
16 #include <linux/module.h>
17 #include <linux/init.h>
18 #include <linux/delay.h>
19 #include <linux/kernel.h>
20 #include <linux/types.h>
21 #include <linux/wait.h>
22 #include <asm/io.h>
23 #include "pata_parport.h"
24
25 #define j44(a,b)                (((a>>4)&0x0f)|(b&0xf0))
26
27 /* cont = 0 - access the IDE register file 
28    cont = 1 - access the IDE command set 
29
30 NB:  The FIT adapter does not appear to use the control registers.
31 So, we map ALT_STATUS to STATUS and NO-OP writes to the device
32 control register - this means that IDE reset will not work on these
33 devices.
34
35 */
36
37 static void fit2_write_regr(struct pi_adapter *pi, int cont, int regr, int val)
38
39 {       if (cont == 1) return;
40         w2(0xc); w0(regr); w2(4); w0(val); w2(5); w0(0); w2(4);
41 }
42
43 static int fit2_read_regr(struct pi_adapter *pi, int cont, int regr)
44
45 {       int  a, b, r;
46
47         if (cont) {
48           if (regr != 6) return 0xff;
49           r = 7;
50         } else r = regr + 0x10;
51
52         w2(0xc); w0(r); w2(4); w2(5); 
53                  w0(0); a = r1();
54                  w0(1); b = r1();
55         w2(4);
56
57         return j44(a,b);
58
59 }
60
61 static void fit2_read_block(struct pi_adapter *pi, char *buf, int count)
62
63 {       int  k, a, b, c, d;
64
65         w2(0xc); w0(0x10);
66
67         for (k=0;k<count/4;k++) {
68
69                 w2(4); w2(5);
70                 w0(0); a = r1(); w0(1); b = r1();
71                 w0(3); c = r1(); w0(2); d = r1(); 
72                 buf[4*k+0] = j44(a,b);
73                 buf[4*k+1] = j44(d,c);
74
75                 w2(4); w2(5);
76                        a = r1(); w0(3); b = r1();
77                 w0(1); c = r1(); w0(0); d = r1(); 
78                 buf[4*k+2] = j44(d,c);
79                 buf[4*k+3] = j44(a,b);
80
81         }
82
83         w2(4);
84
85 }
86
87 static void fit2_write_block(struct pi_adapter *pi, char *buf, int count)
88
89 {       int k;
90
91
92         w2(0xc); w0(0); 
93         for (k=0;k<count/2;k++) {
94                 w2(4); w0(buf[2*k]); 
95                 w2(5); w0(buf[2*k+1]);
96         }
97         w2(4);
98 }
99
100 static void fit2_connect(struct pi_adapter *pi)
101
102 {       pi->saved_r0 = r0();
103         pi->saved_r2 = r2();
104         w2(0xcc); 
105 }
106
107 static void fit2_disconnect(struct pi_adapter *pi)
108
109 {       w0(pi->saved_r0);
110         w2(pi->saved_r2);
111
112
113 static void fit2_log_adapter(struct pi_adapter *pi)
114
115 {
116         dev_info(&pi->dev, "FIT 2000 adapter at 0x%x, delay %d\n",
117                 pi->port, pi->delay);
118
119 }
120
121 static struct pi_protocol fit2 = {
122         .owner          = THIS_MODULE,
123         .name           = "fit2",
124         .max_mode       = 1,
125         .epp_first      = 2,
126         .default_delay  = 1,
127         .max_units      = 1,
128         .write_regr     = fit2_write_regr,
129         .read_regr      = fit2_read_regr,
130         .write_block    = fit2_write_block,
131         .read_block     = fit2_read_block,
132         .connect        = fit2_connect,
133         .disconnect     = fit2_disconnect,
134         .log_adapter    = fit2_log_adapter,
135 };
136
137 MODULE_LICENSE("GPL");
138 module_pata_parport_driver(fit2);
This page took 0.039964 seconds and 4 git commands to generate.