root/dev/raidframe/rf_types.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. rf_QuiesceState
  2. rf_IncrAccessesCountState
  3. rf_DecrAccessesCountState
  4. rf_MapState
  5. rf_LockState
  6. rf_CreateDAGState
  7. rf_ExecuteDAGState
  8. rf_ProcessDAGState
  9. rf_CleanupState
  10. rf_LastState
  11. RF_AccessState_t

    1 /*      $OpenBSD: rf_types.h,v 1.6 2002/12/16 07:01:05 tdeval Exp $     */
    2 /*      $NetBSD: rf_types.h,v 1.6 1999/09/05 03:05:55 oster Exp $       */
    3 
    4 /*
    5  * rf_types.h
    6  */
    7 /*
    8  * Copyright (c) 1995 Carnegie-Mellon University.
    9  * All rights reserved.
   10  *
   11  * Author: Jim Zelenka
   12  *
   13  * Permission to use, copy, modify and distribute this software and
   14  * its documentation is hereby granted, provided that both the copyright
   15  * notice and this permission notice appear in all copies of the
   16  * software, derivative works or modified versions, and any portions
   17  * thereof, and that both notices appear in supporting documentation.
   18  *
   19  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
   20  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
   21  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
   22  *
   23  * Carnegie Mellon requests users of this software to return to
   24  *
   25  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
   26  *  School of Computer Science
   27  *  Carnegie Mellon University
   28  *  Pittsburgh PA 15213-3890
   29  *
   30  * any improvements or extensions that they make and grant Carnegie the
   31  * rights to redistribute these changes.
   32  */
   33 /***********************************************************
   34  *
   35  * rf_types.h -- Standard types for RAIDframe.
   36  *
   37  ***********************************************************/
   38 
   39 #ifndef _RF__RF_TYPES_H_
   40 #define _RF__RF_TYPES_H_
   41 
   42 
   43 #include "rf_archs.h"
   44 
   45 #include <sys/errno.h>
   46 #include <sys/types.h>
   47 
   48 #include <sys/uio.h>
   49 #include <sys/param.h>
   50 #include <sys/lock.h>
   51 
   52 /*
   53  * First, define system-dependent types and constants.
   54  *
   55  * If the machine is big-endian, RF_BIG_ENDIAN should be 1.
   56  * Otherwise, it should be 0.
   57  *
   58  * The various integer types should be self-explanatory; we
   59  * use these elsewhere to avoid size confusion.
   60  *
   61  * LONGSHIFT is lg(sizeof(long)) (that is, log base two of sizeof(long))
   62  *
   63  */
   64 
   65 #include <sys/types.h>
   66 #include <sys/limits.h>
   67 #include <machine/endian.h>
   68 
   69 #if     BYTE_ORDER == BIG_ENDIAN
   70 #define RF_IS_BIG_ENDIAN        1
   71 #elif   BYTE_ORDER == LITTLE_ENDIAN
   72 #define RF_IS_BIG_ENDIAN        0
   73 #else
   74 #error byte order not defined
   75 #endif
   76 typedef int8_t          RF_int8;
   77 typedef u_int8_t        RF_uint8;
   78 typedef int16_t         RF_int16;
   79 typedef u_int16_t       RF_uint16;
   80 typedef int32_t         RF_int32;
   81 typedef u_int32_t       RF_uint32;
   82 typedef int64_t         RF_int64;
   83 typedef u_int64_t       RF_uint64;
   84 #if     LONG_BIT == 32
   85 #define RF_LONGSHIFT            2
   86 #elif   LONG_BIT == 64
   87 #define RF_LONGSHIFT            3
   88 #else
   89 #error word size not defined
   90 #endif
   91 
   92 /*
   93  * These are just zero and non-zero. We don't use "TRUE"
   94  * and "FALSE" because there's too much nonsense trying
   95  * to get them defined exactly once on every platform, given
   96  * the different places they may be defined in system header
   97  * files.
   98  */
   99 #define RF_TRUE                 1
  100 #define RF_FALSE                0
  101 
  102 /*
  103  * Now, some generic types.
  104  */
  105 typedef RF_uint64       RF_IoCount_t;
  106 typedef RF_uint64       RF_Offset_t;
  107 typedef RF_uint32       RF_PSSFlags_t;
  108 typedef RF_uint64       RF_SectorCount_t;
  109 typedef RF_uint64       RF_StripeCount_t;
  110 typedef RF_int64        RF_SectorNum_t; /*
  111                                          * These are unsigned so we can set
  112                                          * them to (-1) for "uninitialized".
  113                                          */
  114 typedef RF_int64        RF_StripeNum_t;
  115 typedef RF_int64        RF_RaidAddr_t;
  116 typedef int             RF_RowCol_t;    /* Unsigned so it can be (-1). */
  117 typedef RF_int64        RF_HeadSepLimit_t;
  118 typedef RF_int64        RF_ReconUnitCount_t;
  119 typedef int             RF_ReconUnitNum_t;
  120 
  121 typedef char            RF_ParityConfig_t;
  122 
  123 typedef char            RF_DiskQueueType_t[1024];
  124 #define RF_DISK_QUEUE_TYPE_NONE ""
  125 
  126 /* Values for the 'type' field in a reconstruction buffer. */
  127 typedef int             RF_RbufType_t;
  128 #define RF_RBUF_TYPE_EXCLUSIVE  0       /*
  129                                          * This buf assigned exclusively to
  130                                          * one disk.
  131                                          */
  132 #define RF_RBUF_TYPE_FLOATING   1       /* This is a floating recon buf. */
  133 #define RF_RBUF_TYPE_FORCED     2       /*
  134                                          * This rbuf was allocated to complete
  135                                          * a forced recon.
  136                                          */
  137 
  138 typedef char            RF_IoType_t;
  139 #define RF_IO_TYPE_READ         'r'
  140 #define RF_IO_TYPE_WRITE        'w'
  141 #define RF_IO_TYPE_NOP          'n'
  142 #define RF_IO_IS_R_OR_W(_type_)                                         \
  143         (((_type_) == RF_IO_TYPE_READ) || ((_type_) == RF_IO_TYPE_WRITE))
  144 
  145 typedef void            (*RF_VoidFuncPtr) (void *,...);
  146 
  147 typedef RF_uint32       RF_AccessStripeMapFlags_t;
  148 typedef RF_uint32       RF_DiskQueueDataFlags_t;
  149 typedef RF_uint32       RF_DiskQueueFlags_t;
  150 typedef RF_uint32       RF_RaidAccessFlags_t;
  151 
  152 #define RF_DISKQUEUE_DATA_FLAGS_NONE    ((RF_DiskQueueDataFlags_t)0)
  153 
  154 typedef struct RF_AccessStripeMap_s             RF_AccessStripeMap_t;
  155 typedef struct RF_AccessStripeMapHeader_s       RF_AccessStripeMapHeader_t;
  156 typedef struct RF_AllocListElem_s               RF_AllocListElem_t;
  157 typedef struct RF_CallbackDesc_s                RF_CallbackDesc_t;
  158 typedef struct RF_ChunkDesc_s                   RF_ChunkDesc_t;
  159 typedef struct RF_CommonLogData_s               RF_CommonLogData_t;
  160 typedef struct RF_Config_s                      RF_Config_t;
  161 typedef struct RF_CumulativeStats_s             RF_CumulativeStats_t;
  162 typedef struct RF_DagHeader_s                   RF_DagHeader_t;
  163 typedef struct RF_DagList_s                     RF_DagList_t;
  164 typedef struct RF_DagNode_s                     RF_DagNode_t;
  165 typedef struct RF_DeclusteredConfigInfo_s       RF_DeclusteredConfigInfo_t;
  166 typedef struct RF_DiskId_s                      RF_DiskId_t;
  167 typedef struct RF_DiskMap_s                     RF_DiskMap_t;
  168 typedef struct RF_DiskQueue_s                   RF_DiskQueue_t;
  169 typedef struct RF_DiskQueueData_s               RF_DiskQueueData_t;
  170 typedef struct RF_DiskQueueSW_s                 RF_DiskQueueSW_t;
  171 typedef struct RF_Etimer_s                      RF_Etimer_t;
  172 typedef struct RF_EventCreate_s                 RF_EventCreate_t;
  173 typedef struct RF_FreeList_s                    RF_FreeList_t;
  174 typedef struct RF_LockReqDesc_s                 RF_LockReqDesc_t;
  175 typedef struct RF_LockTableEntry_s              RF_LockTableEntry_t;
  176 typedef struct RF_MCPair_s                      RF_MCPair_t;
  177 typedef struct RF_OwnerInfo_s                   RF_OwnerInfo_t;
  178 typedef struct RF_ParityLog_s                   RF_ParityLog_t;
  179 typedef struct RF_ParityLogAppendQueue_s        RF_ParityLogAppendQueue_t;
  180 typedef struct RF_ParityLogData_s               RF_ParityLogData_t;
  181 typedef struct RF_ParityLogDiskQueue_s          RF_ParityLogDiskQueue_t;
  182 typedef struct RF_ParityLogQueue_s              RF_ParityLogQueue_t;
  183 typedef struct RF_ParityLogRecord_s             RF_ParityLogRecord_t;
  184 typedef struct RF_PerDiskReconCtrl_s            RF_PerDiskReconCtrl_t;
  185 typedef struct RF_PSStatusHeader_s              RF_PSStatusHeader_t;
  186 typedef struct RF_PhysDiskAddr_s                RF_PhysDiskAddr_t;
  187 typedef struct RF_PropHeader_s                  RF_PropHeader_t;
  188 typedef struct RF_Raid_s                        RF_Raid_t;
  189 typedef struct RF_RaidAccessDesc_s              RF_RaidAccessDesc_t;
  190 typedef struct RF_RaidDisk_s                    RF_RaidDisk_t;
  191 typedef struct RF_RaidLayout_s                  RF_RaidLayout_t;
  192 typedef struct RF_RaidReconDesc_s               RF_RaidReconDesc_t;
  193 typedef struct RF_ReconBuffer_s                 RF_ReconBuffer_t;
  194 typedef struct RF_ReconConfig_s                 RF_ReconConfig_t;
  195 typedef struct RF_ReconCtrl_s                   RF_ReconCtrl_t;
  196 typedef struct RF_ReconDoneProc_s               RF_ReconDoneProc_t;
  197 typedef struct RF_ReconEvent_s                  RF_ReconEvent_t;
  198 typedef struct RF_ReconMap_s                    RF_ReconMap_t;
  199 typedef struct RF_ReconMapListElem_s            RF_ReconMapListElem_t;
  200 typedef struct RF_ReconParityStripeStatus_s     RF_ReconParityStripeStatus_t;
  201 typedef struct RF_RedFuncs_s                    RF_RedFuncs_t;
  202 typedef struct RF_RegionBufferQueue_s           RF_RegionBufferQueue_t;
  203 typedef struct RF_RegionInfo_s                  RF_RegionInfo_t;
  204 typedef struct RF_ShutdownList_s                RF_ShutdownList_t;
  205 typedef struct RF_SpareTableEntry_s             RF_SpareTableEntry_t;
  206 typedef struct RF_SparetWait_s                  RF_SparetWait_t;
  207 typedef struct RF_StripeLockDesc_s              RF_StripeLockDesc_t;
  208 typedef struct RF_ThreadGroup_s                 RF_ThreadGroup_t;
  209 typedef struct RF_ThroughputStats_s             RF_ThroughputStats_t;
  210 
  211 /*
  212  * Important assumptions regarding ordering of the states in this list
  213  * have been made !!!
  214  * Before disturbing this ordering, look at code in rf_states.c
  215  */
  216 typedef enum RF_AccessState_e {
  217         /* Original states. */
  218         rf_QuiesceState,        /* Handles quiescence for reconstruction. */
  219         rf_IncrAccessesCountState, /* Count accesses in flight. */
  220         rf_DecrAccessesCountState,
  221         rf_MapState,            /* Map access to disk addresses. */
  222         rf_LockState,           /* Take stripe locks. */
  223         rf_CreateDAGState,      /* Create DAGs. */
  224         rf_ExecuteDAGState,     /* Execute DAGs. */
  225         rf_ProcessDAGState,     /*
  226                                  * DAGs are completing - check if correct, or
  227                                  * if we need to retry.
  228                                  */
  229         rf_CleanupState,        /* Release stripe locks, clean up. */
  230         rf_LastState            /* Must be the last state. */
  231 }       RF_AccessState_t;
  232 #define RF_MAXROW       10      /*
  233                                  * These are arbitrary and can be modified at
  234                                  * will.
  235                                  */
  236 #define RF_MAXCOL       40
  237 #define RF_MAXSPARE     10
  238 #define RF_MAXDBGV      75      /* Max number of debug variables. */
  239 #define RF_MAXDBGVLEN   50      /* Max length of debug variables. */
  240 
  241 union RF_GenericParam_u {
  242         void            *p;
  243         RF_uint64        v;
  244 };
  245 typedef union RF_GenericParam_u RF_DagParam_t;
  246 typedef union RF_GenericParam_u RF_CBParam_t;
  247 
  248 #endif  /* _RF__RF_TYPES_H_ */

/* [<][>][^][v][top][bottom][index][help] */