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
|
/*-
* 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_START_FIRMWARE 0x99 /* for integrated RAID */
#define CMD_FLUSH_CACHE 0xc2
/*
* command structures
*/
struct ida_drive_info {
u_int16_t secsize;
u_int32_t secperunit;
u_int16_t ncylinders;
u_int8_t nheads;
u_int8_t signature;
u_int8_t psectors;
u_int16_t wprecomp;
u_int8_t max_acc;
u_int8_t control;
u_int16_t pcylinders;
u_int8_t ptracks;
u_int16_t landing_zone;
u_int8_t nsectors;
u_int8_t checksum;
u_int8_t mirror;
} __attribute__ ((packed));
struct ida_controller_info {
u_int8_t num_drvs;
u_int32_t signature;
u_int8_t firm_rev[4];
} __attribute__ ((packed));
struct ida_drive_status {
u_int8_t status;
u_int32_t failure_map;
u_int8_t reserved[416];
u_int32_t secrecover;
u_int8_t rebuilding;
u_int16_t remap_cnt[8];
u_int32_t repl_map;
u_int32_t spare_map;
u_int8_t spare_status;
u_int8_t spare_repl_map[32];
u_int32_t repl_ok_map;
u_int8_t media_exchange;
u_int8_t cache_failure;
u_int8_t expand_failure;
u_int8_t unit_flags;
u_int16_t big_failure_map[8];
u_int16_t big_remap_cnt[128];
u_int16_t big_repl_map[8];
u_int16_t big_act_spare_map[8];
u_int8_t big_spare_repl_map[128];
u_int16_t big_repl_ok_map[8];
u_int8_t big_rebuilding;
} __attribute__ ((packed));
|