Home | History | Annotate | Line # | Download | only in raidframe
rf_compat80.h revision 1.2
      1  1.2  mrg /*	$NetBSD: rf_compat80.h,v 1.2 2018/01/20 01:32:45 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.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