summaryrefslogtreecommitdiffstats
path: root/sys/dev/ata/ata-raid.h
blob: a1d670584dc59ab7c823044bb6e2df754a5f634d (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
/*-
 * Copyright (c) 2000 Søren Schmidt
 * 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,
 *    without modification, immediately at the beginning of the file.
 * 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.
 * 3. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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$
 */

struct ar_softc {
    int lun;
    int32_t magic;
    int flags;
#define	AR_F_RAID_0	0x0001		/* STRIPE */
#define	AR_F_RAID_1	0x0002		/* MIRROR */
#define	AR_F_SPAN	0x0004		/* SPAN */
    
    int num_subdisks;
    struct ad_softc *subdisk[8];
    int num_mirrordisks;
    struct ad_softc *mirrordisk[8];
    int interleave;
    int last_disk;
    int32_t last_lba[8][2];

    u_int16_t heads;
    u_int16_t sectors;
    u_int32_t cylinders;
    u_int32_t total_secs;
    int reserved;			/* sectors that are NOT to be used */
    int offset;				/* offset from start of disk */

    struct disk                 disk;	/* disklabel/slice stuff */
    dev_t                       dev;	/* device place holder */

};

struct ar_config {
    int num_raids;
    struct ar_softc *raid[8];		/* configs for each RAID */
};

struct ar_buf {
    struct bio bp;
    struct bio *org;
    int drive;
    struct ar_buf *mirror;
    int done;
};

struct highpoint_raid_conf {
    int8_t		filler1[32];
    u_int32_t		magic;			/* 0x20 */
#define HPT_MAGIC_OK		0x5a7816f0
#define HPT_MAGIC_BAD		0x5a7816fd

    u_int32_t		magic_0;
    u_int32_t		magic_1;
    u_int32_t		order;
#define HPT_O_MIRROR		0x01
#define HPT_O_OK		0x04

    u_int8_t		raid_disks;
    u_int8_t		raid0_shift;
    u_int8_t		type;
#define HPT_T_RAID_0		0x00
#define HPT_T_RAID_1		0x01
#define HPT_T_RAID_01_RAID_0	0x02
#define HPT_T_SPAN		0x03
#define HPT_T_RAID_3		0x04
#define HPT_T_RAID_5		0x05
#define HPT_T_SINGLEDISK	0x06
#define HPT_T_RAID_01_RAID_1	0x07

    u_int8_t		disk_number;
    u_int32_t		total_secs;
    u_int32_t		disk_mode;
    u_int32_t		boot_mode;
    u_int8_t		boot_disk;
    u_int8_t		boot_protect;
    u_int8_t		error_log_entries;
    u_int8_t		error_log_index;
    struct {
	u_int32_t	timestamp;
	u_int8_t	reason;
#define	HPT_R_REMOVED		0xfe
#define	HPT_R_BROKEN		0xff
	
	u_int8_t	disk;
	u_int8_t	status;
	u_int8_t	sectors;
	u_int32_t	lba;
    } errorlog[32];
    int8_t		filler2[60];
};

struct promise_raid_conf {
    char		promise_id[24];
#define PR_MAGIC	"Promise Technology, Inc."

    int32_t		dummy_0;
    int32_t		magic_0;
    int16_t		dummy_1;
    int8_t		channel;
    int8_t		device;
    int32_t		magic_1;
    int16_t		dummy_2;
    int8_t		filler1[470];
    struct {
	int32_t	flags;				/* 0x200 */
#define PR_F_CONFED		0x00000080

	int8_t		dummy_0;
	int8_t		device_0;
	int8_t		dummy_1;
	int8_t		device_1;
	int32_t		magic_0;
	int32_t		dummy_2;
	int32_t		dummy_3;		/* 0x210 */
	int32_t		disk_secs;
	int32_t		dummy_4;
	int16_t		dummy_5;
	int8_t		status;
#define	PR_S_DEFINED		0x01
#define	PR_S_ONLINE		0x02
#define	PR_S_OFFLINE		0x10

	int8_t		type;
#define	PR_T_STRIPE		0x00
#define	PR_T_MIRROR		0x01
#define	PR_T_STRIPE_MIRROR	0x04
#define	PR_T_SPAN		0x08

	u_int8_t	total_disks;		/* 0x220 */
	u_int8_t	raid0_shift;
	u_int8_t	raid0_disks;
	u_int8_t	dummy_6;
	u_int32_t	total_secs;
	u_int16_t	cylinders;
	u_int8_t	heads;
	u_int8_t	sectors;
	int32_t		magic_1;
	int32_t		dummy_7;		/* 0x230 */
	struct {
	    int16_t	dummy_0;
	    int8_t	channel;
	    int8_t	device;
	    int32_t	magic_0;
	    int32_t	disk_number;		/* subdisk # */
	} disk[8];
    } raid[4];
    int32_t		filler2[235];
    uint32_t		checksum;
};

int ar_probe(struct ad_softc *);

OpenPOWER on IntegriCloud