summaryrefslogtreecommitdiffstats
path: root/sys/dev/ida/idareg.h
blob: 3ba79522907dd175eccaba404672d6eb5891e5bd (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
/*-
 * Copyright (c) 1999,2000 Jonathan Lemon
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * $FreeBSD$
 */

/*
 * #defines and software structures for the Compaq RAID card
 */

/*
 * defines for older EISA controllers (IDA, IDA-2, IAES, SMART)
 */
#define R_EISA_INT_MASK			0x01
#define R_EISA_LOCAL_MASK		0x04
#define R_EISA_LOCAL_DOORBELL		0x05
#define R_EISA_SYSTEM_MASK		0x06
#define R_EISA_SYSTEM_DOORBELL		0x07
#define R_EISA_LIST_ADDR		0x08
#define R_EISA_LIST_LEN			0x0c
#define R_EISA_TAG			0x0f
#define R_EISA_COMPLETE_ADDR		0x10
#define R_EISA_LIST_STATUS		0x16

#define EISA_CHANNEL_BUSY		0x01
#define EISA_CHANNEL_CLEAR		0x02

/*
 * board register offsets for SMART-2 controllers
 */
#define R_CMD_FIFO	0x04
#define R_DONE_FIFO	0x08
#define R_INT_MASK	0x0C
#define R_STATUS	0x10
#define R_INT_PENDING	0x14

/*
 * interrupt mask values for SMART series
 */
#define INT_DISABLE	0x00
#define INT_ENABLE	0x01

/*
 * board offsets for the 42xx series
 */
#define R_42XX_STATUS	0x30
#define R_42XX_INT_MASK	0x34
#define R_42XX_REQUEST	0x40
#define R_42XX_REPLY	0x44

/*
 * interrupt values for 42xx series
 */
#define INT_ENABLE_42XX			0x00
#define INT_DISABLE_42XX		0x08
#define STATUS_42XX_INT_PENDING		0x08

/*
 * return status codes
 */
#define SOFT_ERROR	0x02
#define HARD_ERROR	0x04
#define CMD_REJECTED	0x14

/*
 * command types 
 */
#define	CMD_GET_LOG_DRV_INFO	0x10
#define	CMD_GET_CTRL_INFO	0x11
#define	CMD_SENSE_DRV_STATUS	0x12
#define	CMD_START_RECOVERY	0x13
#define	CMD_GET_PHYS_DRV_INFO	0x15
#define	CMD_BLINK_DRV_LEDS	0x16
#define	CMD_SENSE_DRV_LEDS	0x17
#define	CMD_GET_LOG_DRV_EXT	0x18
#define	CMD_GET_CTRL_INFO	0x11
#define CMD_READ		0x20
#define CMD_WRITE		0x30
#define CMD_WRITE_MEDIA		0x31
#define CMD_GET_CONFIG		0x50
#define CMD_SET_CONFIG		0x51
#define CMD_FLUSH_CACHE		0xc2

/*
 * command structures
 */
struct ida_drive_info {
	u_int16_t	secsize 	__attribute__ ((packed));
	u_int32_t	secperunit 	__attribute__ ((packed));
	u_int16_t	ncylinders 	__attribute__ ((packed));
	u_int8_t	nheads	 	__attribute__ ((packed));
	u_int8_t	signature 	__attribute__ ((packed));
	u_int8_t	psectors 	__attribute__ ((packed));
	u_int16_t	wprecomp 	__attribute__ ((packed));
	u_int8_t	max_acc 	__attribute__ ((packed));
	u_int8_t	control 	__attribute__ ((packed));
	u_int16_t	pcylinders 	__attribute__ ((packed));
	u_int8_t	ptracks 	__attribute__ ((packed));
	u_int16_t	landing_zone 	__attribute__ ((packed));
	u_int8_t	nsectors 	__attribute__ ((packed));
	u_int8_t	checksum 	__attribute__ ((packed));
	u_int8_t	mirror 		__attribute__ ((packed));
};

struct ida_controller_info {
	u_int8_t	num_drvs 	__attribute__ ((packed));
	u_int32_t	signature 	__attribute__ ((packed));
	u_int8_t	firm_rev[4] 	__attribute__ ((packed));
};
OpenPOWER on IntegriCloud