rf_compat80.h revision 1.1 1 1.1 mrg /* $NetBSD: rf_compat80.h,v 1.1 2018/01/18 00:32:49 mrg Exp $ */
2 1.1 mrg
3 1.1 mrg /*
4 1.1 mrg * Copyright (c) 2017 Matthew R. Green
5 1.1 mrg * All rights reserved.
6 1.1 mrg *
7 1.1 mrg * Redistribution and use in source and binary forms, with or without
8 1.1 mrg * modification, are permitted provided that the following conditions
9 1.1 mrg * are met:
10 1.1 mrg * 1. Redistributions of source code must retain the above copyright
11 1.1 mrg * notice, this list of conditions and the following disclaimer.
12 1.1 mrg * 2. Redistributions in binary form must reproduce the above copyright
13 1.1 mrg * notice, this list of conditions and the following disclaimer in the
14 1.1 mrg * documentation and/or other materials provided with the distribution.
15 1.1 mrg * 3. The name of the author may not be used to endorse or promote products
16 1.1 mrg * derived from this software without specific prior written permission.
17 1.1 mrg *
18 1.1 mrg * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 1.1 mrg * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 1.1 mrg * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 1.1 mrg * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 1.1 mrg * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
23 1.1 mrg * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24 1.1 mrg * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25 1.1 mrg * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26 1.1 mrg * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 1.1 mrg * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 1.1 mrg * SUCH DAMAGE.
29 1.1 mrg */
30 1.1 mrg
31 1.1 mrg #ifndef _RF_COMPAT80_H_
32 1.1 mrg #define _RF_COMPAT80_H_
33 1.1 mrg
34 1.1 mrg #include <sys/ioccom.h>
35 1.1 mrg
36 1.1 mrg /* NetBSD 8.99.x removed the row, raidPtr and next members */
37 1.1 mrg struct rf_recon_req80 {
38 1.1 mrg RF_RowCol_t row, col;
39 1.1 mrg RF_ReconReqFlags_t flags;
40 1.1 mrg void *raidPtr; /* used internally; need not be set at ioctl
41 1.1 mrg * time */
42 1.1 mrg struct rf_recon_req *next; /* used internally; need not be set at
43 1.1 mrg * ioctl time */
44 1.1 mrg };
45 1.1 mrg
46 1.1 mrg /* NetBSD 8.99.x made this structure alignment neutral */
47 1.1 mrg typedef struct RF_RaidDisk_s80 {
48 1.1 mrg char devname[56]; /* name of device file */
49 1.1 mrg RF_DiskStatus_t status; /* whether it is up or down */
50 1.1 mrg RF_RowCol_t spareRow; /* if in status "spared", this identifies the
51 1.1 mrg * spare disk */
52 1.1 mrg RF_RowCol_t spareCol; /* if in status "spared", this identifies the
53 1.1 mrg * spare disk */
54 1.1 mrg RF_SectorCount_t numBlocks; /* number of blocks, obtained via READ
55 1.1 mrg * CAPACITY */
56 1.1 mrg int blockSize;
57 1.1 mrg RF_SectorCount_t partitionSize; /* The *actual* and *full* size of
58 1.1 mrg the partition, from the disklabel */
59 1.1 mrg int auto_configured;/* 1 if this component was autoconfigured.
60 1.1 mrg 0 otherwise. */
61 1.1 mrg dev_t dev;
62 1.1 mrg } RF_RaidDisk_t80;
63 1.1 mrg
64 1.1 mrg typedef struct RF_DeviceConfig_s80 {
65 1.1 mrg u_int rows;
66 1.1 mrg u_int cols;
67 1.1 mrg u_int maxqdepth;
68 1.1 mrg int ndevs;
69 1.1 mrg RF_RaidDisk_t80 devs[RF_MAX_DISKS];
70 1.1 mrg int nspares;
71 1.1 mrg RF_RaidDisk_t80 spares[RF_MAX_DISKS];
72 1.1 mrg } RF_DeviceConfig_t80;
73 1.1 mrg
74 1.1 mrg /*
75 1.1 mrg * These ioctls were versioned after NetBSD 8.x.
76 1.1 mrg *
77 1.1 mrg * RAIDFRAME_FAIL_DISK had unused pointers removed from the structure.
78 1.1 mrg * RAIDFRAME_CHECK_*EXT and RAIDFRAME_GET_COMPONENT_LABEL were converted
79 1.1 mrg * from pointers to full structures so that ioctl framework does the copyout.
80 1.1 mrg * RAIDFRAME_GET_INFO80 had the containing structure reorganised so that
81 1.1 mrg * the layout became bitsize neutral.
82 1.1 mrg *
83 1.1 mrg * These 6 changes enable COMPAT_NETBSD32 support to work sanely with
84 1.1 mrg * these ioctls, leaving only RAIDFRAME_CONFIGURE needing extra help.
85 1.1 mrg */
86 1.1 mrg
87 1.1 mrg #define RAIDFRAME_FAIL_DISK80 _IOW ('r', 5, struct rf_recon_req80)
88 1.1 mrg #define RAIDFRAME_GET_COMPONENT_LABEL80 _IOWR('r', 19, RF_ComponentLabel_t *)
89 1.1 mrg #define RAIDFRAME_CHECK_RECON_STATUS_EXT80 _IOWR('r', 32, RF_ProgressInfo_t *)
90 1.1 mrg #define RAIDFRAME_CHECK_PARITYREWRITE_STATUS_EXT80 _IOWR('r', 33, RF_ProgressInfo_t *)
91 1.1 mrg #define RAIDFRAME_CHECK_COPYBACK_STATUS_EXT80 _IOWR('r', 34, RF_ProgressInfo_t *)
92 1.1 mrg #define RAIDFRAME_GET_INFO80 _IOWR('r', 36, RF_DeviceConfig_t80 *)
93 1.1 mrg
94 1.1 mrg int rf_check_recon_status_ext80(RF_Raid_t *, void *);
95 1.1 mrg int rf_check_parityrewrite_status_ext80(RF_Raid_t *, void *);
96 1.1 mrg int rf_check_copyback_status_ext80(RF_Raid_t *, void *);
97 1.1 mrg int rf_get_info80(RF_Raid_t *, void *);
98 1.1 mrg int rf_get_component_label80(RF_Raid_t *, void *);
99 1.1 mrg
100 1.1 mrg #endif /* _RF_COMPAT80_H_ */
101