Home | History | Annotate | Line # | Download | only in raidframe
rf_compat80.h revision 1.2.2.1
      1 /*	$NetBSD: rf_compat80.h,v 1.2.2.1 2018/03/24 01:59:15 pgoyette Exp $	*/
      2 
      3 /*
      4  * Copyright (c) 2017 Matthew R. Green
      5  * All rights reserved.
      6  *
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  * 1. Redistributions of source code must retain the above copyright
     11  *    notice, this list of conditions and the following disclaimer.
     12  * 2. Redistributions in binary form must reproduce the above copyright
     13  *    notice, this list of conditions and the following disclaimer in the
     14  *    documentation and/or other materials provided with the distribution.
     15  * 3. The name of the author may not be used to endorse or promote products
     16  *    derived from this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     19  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     20  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     21  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     22  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     23  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     24  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
     25  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     26  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     27  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     28  * SUCH DAMAGE.
     29  */
     30 
     31 #ifndef _RF_COMPAT80_H_
     32 #define _RF_COMPAT80_H_
     33 
     34 #include <sys/ioccom.h>
     35 
     36 /* NetBSD 8.99.x removed the row, raidPtr and next members */
     37 struct rf_recon_req80 {
     38 	RF_RowCol_t row, col;
     39 	RF_ReconReqFlags_t flags;
     40 	void   *raidPtr;	/* used internally; need not be set at ioctl
     41 				 * time */
     42 	struct rf_recon_req *next;	/* used internally; need not be set at
     43 					 * ioctl time */
     44 };
     45 
     46 /* NetBSD 8.99.x made this structure alignment neutral */
     47 typedef struct RF_RaidDisk_s80 {
     48         char    devname[56];    /* name of device file */
     49         RF_DiskStatus_t status; /* whether it is up or down */
     50         RF_RowCol_t spareRow;   /* if in status "spared", this identifies the
     51                                  * spare disk */
     52         RF_RowCol_t spareCol;   /* if in status "spared", this identifies the
     53                                  * spare disk */
     54         RF_SectorCount_t numBlocks;     /* number of blocks, obtained via READ
     55                                          * CAPACITY */
     56         int     blockSize;
     57         RF_SectorCount_t partitionSize; /* The *actual* and *full* size of
     58                                            the partition, from the disklabel */
     59         int     auto_configured;/* 1 if this component was autoconfigured.
     60                                    0 otherwise. */
     61         dev_t   dev;
     62 } RF_RaidDisk_t80;
     63 
     64 typedef struct RF_DeviceConfig_s80 {
     65 	u_int   rows;
     66 	u_int   cols;
     67 	u_int   maxqdepth;
     68 	int     ndevs;
     69 	RF_RaidDisk_t80 devs[RF_MAX_DISKS];
     70 	int     nspares;
     71 	RF_RaidDisk_t80 spares[RF_MAX_DISKS];
     72 } RF_DeviceConfig_t80;
     73 
     74 typedef struct RF_Config_s80 {
     75 	RF_RowCol_t numRow, numCol, numSpare;	/* number of rows, columns,
     76 						 * and spare disks */
     77 	dev_t   devs[RF_MAXROW][RF_MAXCOL];	/* device numbers for disks
     78 						 * comprising array */
     79 	char    devnames[RF_MAXROW][RF_MAXCOL][50];	/* device names */
     80 	dev_t   spare_devs[RF_MAXSPARE];	/* device numbers for spare
     81 						 * disks */
     82 	char    spare_names[RF_MAXSPARE][50];	/* device names */
     83 	RF_SectorNum_t sectPerSU;	/* sectors per stripe unit */
     84 	RF_StripeNum_t SUsPerPU;/* stripe units per parity unit */
     85 	RF_StripeNum_t SUsPerRU;/* stripe units per reconstruction unit */
     86 	RF_ParityConfig_t parityConfig;	/* identifies the RAID architecture to
     87 					 * be used */
     88 	RF_DiskQueueType_t diskQueueType;	/* 'f' = fifo, 'c' = cvscan,
     89 						 * not used in kernel */
     90 	char    maxOutstandingDiskReqs;	/* # concurrent reqs to be sent to a
     91 					 * disk.  not used in kernel. */
     92 	char    debugVars[RF_MAXDBGV][50];	/* space for specifying debug
     93 						 * variables & their values */
     94 	unsigned int layoutSpecificSize;	/* size in bytes of
     95 						 * layout-specific info */
     96 	void   *layoutSpecific;	/* a pointer to a layout-specific structure to
     97 				 * be copied in */
     98 	int     force;                          /* if !0, ignore many fatal
     99 						   configuration conditions */
    100 	/*
    101 	   "force" is used to override cases where the component labels would
    102 	   indicate that configuration should not proceed without user
    103 	   intervention
    104 	 */
    105 } RF_Config_t80;
    106 
    107 /*
    108  * These ioctls were versioned after NetBSD 8.x.
    109  *
    110  * RAIDFRAME_FAIL_DISK had unused pointers removed from the structure.
    111  * RAIDFRAME_CHECK_*EXT and RAIDFRAME_GET_COMPONENT_LABEL were converted
    112  * from pointers to full structures so that ioctl framework does the copyout.
    113  * RAIDFRAME_GET_INFO80 had the containing structure reorganised so that
    114  * the layout became bitsize neutral.
    115  *
    116  * These 6 changes enable COMPAT_NETBSD32 support to work sanely with
    117  * these ioctls, leaving only RAIDFRAME_CONFIGURE needing extra help.
    118  */
    119 
    120 #define RAIDFRAME_FAIL_DISK80				_IOW ('r', 5,  struct rf_recon_req80)
    121 #define RAIDFRAME_GET_COMPONENT_LABEL80			_IOWR('r', 19, RF_ComponentLabel_t *)
    122 #define RAIDFRAME_CHECK_RECON_STATUS_EXT80		_IOWR('r', 32, RF_ProgressInfo_t *)
    123 #define RAIDFRAME_CHECK_PARITYREWRITE_STATUS_EXT80	_IOWR('r', 33, RF_ProgressInfo_t *)
    124 #define RAIDFRAME_CHECK_COPYBACK_STATUS_EXT80		_IOWR('r', 34, RF_ProgressInfo_t *)
    125 #define RAIDFRAME_GET_INFO80				_IOWR('r', 36, RF_DeviceConfig_t80 *)
    126 #define RAIDFRAME_CONFIGURE80				_IOW ('r', 35, void *)
    127 
    128 int rf_check_recon_status_ext80(RF_Raid_t *, void *);
    129 int rf_check_parityrewrite_status_ext80(RF_Raid_t *, void *);
    130 int rf_check_copyback_status_ext80(RF_Raid_t *, void *);
    131 int rf_get_info80(RF_Raid_t *, void *);
    132 int rf_get_component_label80(RF_Raid_t *, void *);
    133 int rf_config80(RF_Raid_t *, int, void *, RF_Config_t **);
    134 
    135 int raidframe_ioctl_80(int, int, RF_Raid_t *, int, void *, RF_Config_t **);
    136 
    137 void raidframe_80_init(void);
    138 void raidframe_80_fini(void);
    139 
    140 #endif /* _RF_COMPAT80_H_ */
    141