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