idareg.h revision 57828
1/*-
2 * Copyright (c) 1999,2000 Jonathan Lemon
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $FreeBSD: head/sys/dev/ida/idareg.h 57828 2000-03-08 16:16:31Z jlemon $
27 */
28
29/*
30 * #defines and software structures for the Compaq RAID card
31 */
32
33/*
34 * defines for older EISA controllers (IDA, IDA-2, IAES, SMART)
35 */
36#define R_EISA_INT_MASK			0xC89
37#define R_EISA_LOCAL_MASK		0xC8C
38#define R_EISA_LOCAL_DOORBELL		0xC8D
39#define R_EISA_SYSTEM_MASK		0xC8E
40#define R_EISA_SYSTEM_DOORBELL		0xC8F
41#define R_EISA_LIST_ADDR		0xC90
42#define R_EISA_LIST_LEN			0xC94
43#define R_EISA_TAG			0xC97
44#define R_EISA_COMPLETE_ADDR		0xC98
45#define R_EISA_LIST_STATUS		0xC9E
46
47#define EISA_CHANNEL_BUSY		0x01
48#define EISA_CHANNEL_CLEAR		0x02
49
50
51/*
52 * board register offsets for SMART-2 controllers
53 */
54#define R_CMD_FIFO	0x04
55#define R_DONE_FIFO	0x08
56#define R_INT_MASK	0x0C
57#define R_STATUS	0x10
58#define R_INT_PENDING	0x14
59
60/*
61 * interrupt mask values for SMART series
62 */
63#define INT_DISABLE	0x00
64#define INT_ENABLE	0x01
65
66
67/*
68 * board offsets for the 42xx series
69 */
70#define R_42XX_STATUS	0x30
71#define R_42XX_INT_MASK	0x34
72#define R_42XX_REQUEST	0x40
73#define R_42XX_REPLY	0x44
74
75/*
76 * interrupt values for 42xx series
77 */
78#define INT_ENABLE_42XX			0x00
79#define INT_DISABLE_42XX		0x08
80#define STATUS_42XX_INT_PENDING		0x08
81
82
83/*
84 * return status codes
85 */
86#define SOFT_ERROR	0x02
87#define HARD_ERROR	0x04
88#define CMD_REJECTED	0x14
89
90/*
91 * command types
92 */
93#define	CMD_GET_LOG_DRV_INFO	0x10
94#define	CMD_GET_CTRL_INFO	0x11
95#define	CMD_SENSE_DRV_STATUS	0x12
96#define	CMD_START_RECOVERY	0x13
97#define	CMD_GET_PHYS_DRV_INFO	0x15
98#define	CMD_BLINK_DRV_LEDS	0x16
99#define	CMD_SENSE_DRV_LEDS	0x17
100#define	CMD_GET_LOG_DRV_EXT	0x18
101#define	CMD_GET_CTRL_INFO	0x11
102#define CMD_READ		0x20
103#define CMD_WRITE		0x30
104#define CMD_WRITE_MEDIA		0x31
105#define CMD_GET_CONFIG		0x50
106#define CMD_SET_CONFIG		0x51
107#define CMD_FLUSH_CACHE		0xc2
108
109/*
110 * command structures
111 */
112struct ida_drive_info {
113	u_int16_t	secsize 	__attribute__ ((packed));
114	u_int32_t	secperunit 	__attribute__ ((packed));
115	u_int16_t	ncylinders 	__attribute__ ((packed));
116	u_int8_t	nheads	 	__attribute__ ((packed));
117	u_int8_t	signature 	__attribute__ ((packed));
118	u_int8_t	psectors 	__attribute__ ((packed));
119	u_int16_t	wprecomp 	__attribute__ ((packed));
120	u_int8_t	max_acc 	__attribute__ ((packed));
121	u_int8_t	control 	__attribute__ ((packed));
122	u_int16_t	pcylinders 	__attribute__ ((packed));
123	u_int8_t	ptracks 	__attribute__ ((packed));
124	u_int16_t	landing_zone 	__attribute__ ((packed));
125	u_int8_t	nsectors 	__attribute__ ((packed));
126	u_int8_t	checksum 	__attribute__ ((packed));
127	u_int8_t	mirror 		__attribute__ ((packed));
128};
129
130struct ida_controller_info {
131	u_int8_t	num_drvs 	__attribute__ ((packed));
132	u_int32_t	signature 	__attribute__ ((packed));
133	u_int8_t	firm_rev[4] 	__attribute__ ((packed));
134};
135