summaryrefslogtreecommitdiff
path: root/chips/vs42x_rb.h
blob: 82b89b068e03dbeaf5a8ab80c41485ae70517d0f (plain)
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
/* 
 * Mach Operating System
 * Copyright (c) 1991,1990,1989 Carnegie Mellon University
 * All Rights Reserved.
 * 
 * Permission to use, copy, modify and distribute this software and its
 * documentation is hereby granted, provided that both the copyright
 * notice and this permission notice appear in all copies of the
 * software, derivative works or modified versions, and any portions
 * thereof, and that both notices appear in supporting documentation.
 * 
 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
 * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
 * 
 * Carnegie Mellon requests users of this software to return to
 * 
 *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
 *  School of Computer Science
 *  Carnegie Mellon University
 *  Pittsburgh PA 15213-3890
 * 
 * any improvements or extensions that they make and grant Carnegie Mellon
 * the rights to redistribute these changes.
 */
/*
 *	File: vs42x_rb.h
 * 	Author: Alessandro Forin, Carnegie Mellon University
 *	Date:	5/91
 *
 *	This file contains definitions for the VS42X-RB Storage
 *	controller, which includes a Disk controller and a
 *	SCSI controller.
 */

#ifndef	_VS42X_RB_H_
#define	_VS42X_RB_H_

/*
 * Phys addresses for the Vax3100
 */
#define VAX3100_STC_BASE	0x200c0000
#define VAX3100_STC_RAM_COMPAT	0x200d0000
#define	VAX3100_STC_RAM		0x202d0000

#define	VAX3100_STC_HDC9224	0x00000000	/* offsets from BASE */
#define VAX3100_STC_5380_A	0x00000080
#define VAX3100_STC_5380_B	0x00000180
#define VAX3100_STC_DMAREG_A	0x000000a0
#define VAX3100_STC_DMAREG_B	0x000001a0
#define	VAX3100_STC_RAM_MODE	0x000000e0

#define	VAX3100_STC_DMAREG_OFF	(0xa0-0x80)	/* offset from 5380 */

#define	SCI_REG_SIZE		512

/*
 * RAM Buffer for this storage system
 */
#define	SCI_RAM_SIZE		128*1024
#define	SCI_RAM_COMPATSIZE	32*1024
#define SCI_RAM_EXPMODE		0x01		/* char-size mode register */

/*
 * DMA controller for the SCSI subsystem
 * (Defines for the NCR 5380 are elsewhere)
 */

typedef struct {
	unsigned int	sci_dma_adr;	/* +000000a0 */
	char				pad0[0xc0-0xa0-4];
	unsigned int	sci_dma_count;	/* +000000c0 */
	unsigned int	sci_dma_dir;	/* +000000c4 */
	char				pad1[0xe0-0xc4-4];
	unsigned char	sci_dma_rammode;/* +000000e0 */
} *sci_dmaregs_t;

#define SCI_DMADR_PUT(ptr,adr)	(ptr)->sci_dma_adr = (unsigned)(adr) & SCI_DMA_COUNT_MASK;
#define SCI_DMADR_GET(ptr,adr)	(adr) = (ptr)->sci_dma_adr;

#define	SCI_DMA_COUNT_MASK	0x0001ffff
#define SCI_TC_GET(ptr,cnt)	{\
		(cnt) = (ptr)->sci_dma_count;\
		if ((cnt) & 0x00010000) (cnt) |= ~SCI_DMA_COUNT_MASK;\
		(cnt) = -(cnt);\
	}
#define SCI_TC_PUT(ptr,cnt)	(ptr)->sci_dma_count = -(cnt);

#define	SCI_DMA_DIR_READ	0x00000001
#define	SCI_DMA_DIR_WRITE	0x00000000

/*
 * Disk controller subsytem (ST506/412), uses a
 * HDC 9224 Universal Disk Controller chip and
 * addresses up to 4 disks.
 */
typedef struct {
	unsigned char	hdc_rap;		/* rw: reg addres ptr */
	char						pad0[3];
	unsigned char	hdc_cmd;		/* w:  controller command */
#define			hdc_status hdc_cmd	/* r:  interrupt status */
	char						pad1[3];
} *sci_hdcregs_t;

/*
 * Register Address Pointer
 */
#define UDC_DMA7	0	/* rw: DMA address bits 7:0 */
#define UDC_DMA15	1	/* rw: DMA address bits 15:8 */
#define UDC_DMA23	2	/* rw: DMA address bits 23:16 */
#define UDC_DSECT	3	/* rw: desired sector */
#define UDC_DHEAD	4	/* wo: desired head */
#define UDC_CHEAD	4	/* ro: current head */
#define UDC_DCYL	5	/* wo: desired cylinder */
#define UDC_CCYL	5	/* ro: current cylinder */
#define UDC_SCNT	6	/* wo: sector count */
#define UDC_RTCNT	7	/* wo: retry count */
#define UDC_MODE	8	/* wo: operating mode */
#define UDC_CSTAT	8	/* ro: chip status */
#define UDC_TERM	9	/* wo: termination conditions */
#define UDC_DSTAT	9	/* ro: drive status */
#define UDC_DATA	10	/* rw: data */

/*
 * Controller Commands
 */
#define HDCC_RESET		0x00

#define HDCC_SET_REGP		0x40	/* low 4 bits is regnum */

#define HDCC_DESELECT		0x01

#define HDCC_SELECT		0x20
#	define HDCC_SELECT_IDMASK	0x03
#	define HDCC_SELECT_DR_HD	0x04
#	define HDCC_SELECT_DR_SD	0x08
#	define HDCC_SELECT_DR_DD	0x0c

#define HDCC_RESTORE_HD		0x03

#define HDCC_RESTORE_RX		0x02

#define HDCC_STEP		0x04
#	define HDCC_STEP_OUT		0x02
#	define HDCC_STEP_SKWAIT		0x01

#define HDCC_POLL		0x10	/* low 4 bits is drive mask */

#define HDCC_SEEK		0x50
#	define HDCC_SEEK_STEP		0x04
#	define HDCC_SEEK_SKWAIT		0x02
#	define HDCC_SEEK_VFY		0x01

#define HDCC_FORMAT		0x60
#	define HDCC_FORMAT_DDMARK	0x10

#define HDCC_READ_T		0x5a
#	define HDCC_READ_XDATA		0x01

#define HDCC_READ_P		0x58

#define HDCC_READ_L		0x5c
#	define HDCC_READ_L_BYPASS	0x02

#define HDCC_WRITE_P		0x80
#	define HDCC_WRITE_BYPASS	0x40
#	define HDCC_WRITE_DDMARK	0x10

#define HDCC_WRITE_L		0xa0

/*
 * Interrupt Status Register
 */
#define HDCI_BADSECT	0x01
#define HDCI_OVRUN	0x02
#define HDCI_RDYCHNG	0x04
#define HDCI_TERMCOD	0x18
#	define HDC_T_SUCCESS	0x00
#	define HDC_T_EREAD_ID	0x08
#	define HDC_T_EVFY	0x10
#	define HDC_T_EXFER	0x18
#define HDCI_DONE	0x20
#define HDCI_DMAREQ	0x40
#define HDCI_INT	0x80		/* interrupt pending */

/*
 * Desired/Current Head
 */
#define UDC_HEAD_HMASK		0x0f		/* desired head no */
#define UDC_HEAD_CMASK		0x70		/* desired cyl 10:8 */
#define UDC_HEAD_BADSEC		0x80

/*
 * Sector Count
 */
#define HDC_MAXDATA		256*512

/*
 * Retry Count
 */
#define UDC_RTCNT_MASK		0xf0
#define UDC_RTCNT_RXDIS		0x08	/* mbz */
#define UDC_RTCNT_INVRDY	0x04
#define UDC_RTCNT_MOTOR		0x02
#define UDC_RTCNT_LOSPEED	0x01

/*
 * Mode
 */
#define UDC_MODE_HD		0x80	/* hard disk mode mb1 */
#define UDC_MODE_CHKCOD		0x60	/* error checkin code */
#	define UDC_MODE_CRC	0x00
#	define UDC_MODE_EECC	0x20	/* NA */
#	define UDC_MODE_IECC	0x40	/* hard disks internal 32 ecc */
#	define UDC_MODE_AECC	0x60	/* NA */
#define UDC_MODE_DENS		0x10	/* mbz */
#define UDC_MODE_SRATE		0x07
#	define UDC_MODE_RATE_HD		0x00	/* hard disk */
#	define UDC_MODE_RATE_DD		0x01	/* double den rx23 */
#	define UDC_MODE_RATE_SD		0x02	/* single den rz23 */
#	define UDC_MODE_RATE_RD		0x06	/* restore drive */

#define UDC_MODE_RX23_DD	0x81
#define UDC_MODE_RX23_SD	0x82
#define UDC_MODE_RDxx		0xc0
#define UDC_MODE_RD_RESTORE	0xc6

/*
 * Status
 */
#define UDC_CSTAT_RETRIED	0x80
#define UDC_CSTAT_ECC		0x40
#define UDC_CSTAT_ECC_ERR	0x20
#define UDC_CSTAT_DELDATA	0x10
#define UDC_CSTAT_SYN_ERR	0x08
#define UDC_CSTAT_COMP_ERR	0x04
#define UDC_CSTAT_SELMASK	0x03
#	define UDC_CSTAT_SELHD0		0x00
#	define UDC_CSTAT_SELHD1		0x01
#	define UDC_CSTAT_SELRX		0x02
#	define UDC_CSTAT_SELHD2		0x03

/*
 * Termination
 */
#define UDC_TERM_CRCPRE		0x80	/* mb1 */
#define UDC_TERM_IDONE		0x20
#define UDC_TERM_DELDAT		0x10
#define UDC_TERM_STAT3		0x08	/* mbz */
#define UDC_TERM_WPROT		0x04
#define UDC_TERM_IRDCHNG	0x02
#define UDC_TERM_WFLT		0x01

/*
 * Drive status
 */
#define UDC_DSTAT_SELACK	0x80
#define UDC_DSTAT_INDEX		0x40
#define UDC_DSTAT_SKCOM		0x20
#define UDC_DSTAT_TRK0		0x10
#define UDC_DSTAT_STAT3		0x08	/* mbz */
#define UDC_DSTAT_WPROT		0x04
#define UDC_DSTAT_READY		0x02
#define UDC_DSTAT_WFLT		0x01


#endif	_VS42X_RB_H_