1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
/*
* seagate.h Copyright (C) 1992 Drew Eckhardt
* low level scsi driver header for ST01/ST02 by
* Drew Eckhardt
*
* <drew@colorado.edu>
*/
#ifndef _SEAGATE_H
#define SEAGATE_H
/*
$Header
*/
#ifndef ASM
int seagate_st0x_detect(Scsi_Host_Template *);
int seagate_st0x_command(Scsi_Cmnd *);
int seagate_st0x_queue_command(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
int seagate_st0x_abort(Scsi_Cmnd *);
const char *seagate_st0x_info(struct Scsi_Host *);
int seagate_st0x_reset(Scsi_Cmnd *, unsigned int);
int seagate_st0x_proc_info(char *,char **,off_t,int,int,int);
#ifndef NULL
#define NULL 0
#endif
#include <linux/kdev_t.h>
int seagate_st0x_biosparam(Disk *, kdev_t, int*);
#define SEAGATE_ST0X { NULL, NULL, NULL, seagate_st0x_proc_info, \
NULL, seagate_st0x_detect, \
NULL, \
seagate_st0x_info, seagate_st0x_command, \
seagate_st0x_queue_command, seagate_st0x_abort, \
seagate_st0x_reset, NULL, seagate_st0x_biosparam, \
1, 7, SG_ALL, 1, 0, 0, DISABLE_CLUSTERING}
#endif
/*
defining PARITY causes parity data to be checked
*/
#define PARITY
/*
Thanks to Brian Antoine for the example code in his Messy-Loss ST-01
driver, and Mitsugu Suzuki for information on the ST-01
SCSI host.
*/
/*
CONTROL defines
*/
#define CMD_RST 0x01
#define CMD_SEL 0x02
#define CMD_BSY 0x04
#define CMD_ATTN 0x08
#define CMD_START_ARB 0x10
#define CMD_EN_PARITY 0x20
#define CMD_INTR 0x40
#define CMD_DRVR_ENABLE 0x80
/*
STATUS
*/
#define STAT_BSY 0x01
#define STAT_MSG 0x02
#define STAT_IO 0x04
#define STAT_CD 0x08
#define STAT_REQ 0x10
#define STAT_SEL 0x20
#define STAT_PARITY 0x40
#define STAT_ARB_CMPL 0x80
/*
REQUESTS
*/
#define REQ_MASK (STAT_CD | STAT_IO | STAT_MSG)
#define REQ_DATAOUT 0
#define REQ_DATAIN STAT_IO
#define REQ_CMDOUT STAT_CD
#define REQ_STATIN (STAT_CD | STAT_IO)
#define REQ_MSGOUT (STAT_MSG | STAT_CD)
#define REQ_MSGIN (STAT_MSG | STAT_CD | STAT_IO)
extern volatile int seagate_st0x_timeout;
#ifdef PARITY
#define BASE_CMD CMD_EN_PARITY
#else
#define BASE_CMD 0
#endif
/*
Debugging code
*/
#define PHASE_BUS_FREE 1
#define PHASE_ARBITRATION 2
#define PHASE_SELECTION 4
#define PHASE_DATAIN 8
#define PHASE_DATAOUT 0x10
#define PHASE_CMDOUT 0x20
#define PHASE_MSGIN 0x40
#define PHASE_MSGOUT 0x80
#define PHASE_STATUSIN 0x100
#define PHASE_ETC (PHASE_DATAIN | PHASE_DATA_OUT | PHASE_CMDOUT | PHASE_MSGIN | PHASE_MSGOUT | PHASE_STATUSIN)
#define PRINT_COMMAND 0x200
#define PHASE_EXIT 0x400
#define PHASE_RESELECT 0x800
#define DEBUG_FAST 0x1000
#define DEBUG_SG 0x2000
#define DEBUG_LINKED 0x4000
#define DEBUG_BORKEN 0x8000
/*
* Control options - these are timeouts specified in .01 seconds.
*/
/* 30, 20 work */
#define ST0X_BUS_FREE_DELAY 25
#define ST0X_SELECTION_DELAY 25
#define eoi() __asm__("push %%eax\nmovb $0x20, %%al\noutb %%al, $0x20\npop %%eax"::)
#define SEAGATE 1 /* these determine the type of the controller */
#define FD 2
#define ST0X_ID_STR "Seagate ST-01/ST-02"
#define FD_ID_STR "TMC-8XX/TMC-950"
#endif
|