[BACK]Return to rf_types.h CVS log [TXT][DIR] Up to [local] / sys / dev / raidframe

Annotation of sys/dev/raidframe/rf_types.h, Revision 1.1.1.1

1.1       nbrk        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_ */

CVSweb