rf_compat80.h revision 1.2.2.2 1 1.2.2.2 pgoyette /* $NetBSD: rf_compat80.h,v 1.2.2.2 2018/03/24 08:22:44 pgoyette 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.2 mrg typedef struct RF_Config_s80 {
75 1.2 mrg RF_RowCol_t numRow, numCol, numSpare; /* number of rows, columns,
76 1.2 mrg * and spare disks */
77 1.2 mrg dev_t devs[RF_MAXROW][RF_MAXCOL]; /* device numbers for disks
78 1.2 mrg * comprising array */
79 1.2 mrg char devnames[RF_MAXROW][RF_MAXCOL][50]; /* device names */
80 1.2 mrg dev_t spare_devs[RF_MAXSPARE]; /* device numbers for spare
81 1.2 mrg * disks */
82 1.2 mrg char spare_names[RF_MAXSPARE][50]; /* device names */
83 1.2 mrg RF_SectorNum_t sectPerSU; /* sectors per stripe unit */
84 1.2 mrg RF_StripeNum_t SUsPerPU;/* stripe units per parity unit */
85 1.2 mrg RF_StripeNum_t SUsPerRU;/* stripe units per reconstruction unit */
86 1.2 mrg RF_ParityConfig_t parityConfig; /* identifies the RAID architecture to
87 1.2 mrg * be used */
88 1.2 mrg RF_DiskQueueType_t diskQueueType; /* 'f' = fifo, 'c' = cvscan,
89 1.2 mrg * not used in kernel */
90 1.2 mrg char maxOutstandingDiskReqs; /* # concurrent reqs to be sent to a
91 1.2 mrg * disk. not used in kernel. */
92 1.2 mrg char debugVars[RF_MAXDBGV][50]; /* space for specifying debug
93 1.2 mrg * variables & their values */
94 1.2 mrg unsigned int layoutSpecificSize; /* size in bytes of
95 1.2 mrg * layout-specific info */
96 1.2 mrg void *layoutSpecific; /* a pointer to a layout-specific structure to
97 1.2 mrg * be copied in */
98 1.2 mrg int force; /* if !0, ignore many fatal
99 1.2 mrg configuration conditions */
100 1.2 mrg /*
101 1.2 mrg "force" is used to override cases where the component labels would
102 1.2 mrg indicate that configuration should not proceed without user
103 1.2 mrg intervention
104 1.2 mrg */
105 1.2 mrg } RF_Config_t80;
106 1.2 mrg
107 1.1 mrg /*
108 1.1 mrg * These ioctls were versioned after NetBSD 8.x.
109 1.1 mrg *
110 1.1 mrg * RAIDFRAME_FAIL_DISK had unused pointers removed from the structure.
111 1.1 mrg * RAIDFRAME_CHECK_*EXT and RAIDFRAME_GET_COMPONENT_LABEL were converted
112 1.1 mrg * from pointers to full structures so that ioctl framework does the copyout.
113 1.1 mrg * RAIDFRAME_GET_INFO80 had the containing structure reorganised so that
114 1.1 mrg * the layout became bitsize neutral.
115 1.1 mrg *
116 1.1 mrg * These 6 changes enable COMPAT_NETBSD32 support to work sanely with
117 1.1 mrg * these ioctls, leaving only RAIDFRAME_CONFIGURE needing extra help.
118 1.1 mrg */
119 1.1 mrg
120 1.1 mrg #define RAIDFRAME_FAIL_DISK80 _IOW ('r', 5, struct rf_recon_req80)
121 1.1 mrg #define RAIDFRAME_GET_COMPONENT_LABEL80 _IOWR('r', 19, RF_ComponentLabel_t *)
122 1.1 mrg #define RAIDFRAME_CHECK_RECON_STATUS_EXT80 _IOWR('r', 32, RF_ProgressInfo_t *)
123 1.1 mrg #define RAIDFRAME_CHECK_PARITYREWRITE_STATUS_EXT80 _IOWR('r', 33, RF_ProgressInfo_t *)
124 1.1 mrg #define RAIDFRAME_CHECK_COPYBACK_STATUS_EXT80 _IOWR('r', 34, RF_ProgressInfo_t *)
125 1.1 mrg #define RAIDFRAME_GET_INFO80 _IOWR('r', 36, RF_DeviceConfig_t80 *)
126 1.2 mrg #define RAIDFRAME_CONFIGURE80 _IOW ('r', 35, void *)
127 1.1 mrg
128 1.1 mrg int rf_check_recon_status_ext80(RF_Raid_t *, void *);
129 1.1 mrg int rf_check_parityrewrite_status_ext80(RF_Raid_t *, void *);
130 1.1 mrg int rf_check_copyback_status_ext80(RF_Raid_t *, void *);
131 1.1 mrg int rf_get_info80(RF_Raid_t *, void *);
132 1.1 mrg int rf_get_component_label80(RF_Raid_t *, void *);
133 1.2 mrg int rf_config80(RF_Raid_t *, int, void *, RF_Config_t **);
134 1.1 mrg
135 1.1 mrg #endif /* _RF_COMPAT80_H_ */
136