1 1.8 oster /* $NetBSD: rf_callback.h,v 1.8 2021/07/23 00:54:45 oster Exp $ */ 2 1.1 oster /* 3 1.1 oster * Copyright (c) 1995 Carnegie-Mellon University. 4 1.1 oster * All rights reserved. 5 1.1 oster * 6 1.1 oster * Author: Mark Holland 7 1.1 oster * 8 1.1 oster * Permission to use, copy, modify and distribute this software and 9 1.1 oster * its documentation is hereby granted, provided that both the copyright 10 1.1 oster * notice and this permission notice appear in all copies of the 11 1.1 oster * software, derivative works or modified versions, and any portions 12 1.1 oster * thereof, and that both notices appear in supporting documentation. 13 1.1 oster * 14 1.1 oster * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 15 1.1 oster * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 16 1.1 oster * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 17 1.1 oster * 18 1.1 oster * Carnegie Mellon requests users of this software to return to 19 1.1 oster * 20 1.1 oster * Software Distribution Coordinator or Software.Distribution (at) CS.CMU.EDU 21 1.1 oster * School of Computer Science 22 1.1 oster * Carnegie Mellon University 23 1.1 oster * Pittsburgh PA 15213-3890 24 1.1 oster * 25 1.1 oster * any improvements or extensions that they make and grant Carnegie the 26 1.1 oster * rights to redistribute these changes. 27 1.1 oster */ 28 1.1 oster 29 1.1 oster /***************************************************************************************** 30 1.1 oster * 31 1.1 oster * callback.h -- header file for callback.c 32 1.1 oster * 33 1.1 oster * the reconstruction code must manage concurrent I/Os on multiple drives. 34 1.1 oster * it sometimes needs to suspend operation on a particular drive until some 35 1.1 oster * condition occurs. we can't block the thread, of course, or we wouldn't 36 1.1 oster * be able to manage our other outstanding I/Os. Instead we just suspend 37 1.1 oster * new activity on the indicated disk, and create a callback descriptor and 38 1.1 oster * put it someplace where it will get invoked when the condition that's 39 1.1 oster * stalling us has cleared. When the descriptor is invoked, it will call 40 1.1 oster * a function that will restart operation on the indicated disk. 41 1.1 oster * 42 1.1 oster ****************************************************************************************/ 43 1.1 oster 44 1.1 oster #ifndef _RF__RF_CALLBACK_H_ 45 1.1 oster #define _RF__RF_CALLBACK_H_ 46 1.1 oster 47 1.4 oster #include <dev/raidframe/raidframevar.h> 48 1.1 oster 49 1.7 christos struct RF_CallbackFuncDesc_s { 50 1.7 christos void (*callbackFunc) (void *); /* function to call */ 51 1.7 christos void *callbackArg; /* args to give to function, or just 52 1.7 christos * info about this callback */ 53 1.7 christos RF_CallbackFuncDesc_t *next;/* next entry in list */ 54 1.7 christos }; 55 1.7 christos 56 1.7 christos struct RF_CallbackValueDesc_s { 57 1.7 christos RF_uint64 v; 58 1.5 oster RF_RowCol_t col; /* column IDs to give to the callback func */ 59 1.7 christos RF_CallbackValueDesc_t *next;/* next entry in list */ 60 1.1 oster }; 61 1.1 oster 62 1.8 oster int rf_ConfigureCallback(RF_ShutdownList_t ** listp, RF_Raid_t *raidPtr, 63 1.8 oster RF_Config_t *cfgPtr); 64 1.8 oster RF_CallbackFuncDesc_t *rf_AllocCallbackFuncDesc(RF_Raid_t *raidPtr); 65 1.8 oster void rf_FreeCallbackFuncDesc(RF_Raid_t *raidPtr, RF_CallbackFuncDesc_t * p); 66 1.8 oster RF_CallbackValueDesc_t *rf_AllocCallbackValueDesc(RF_Raid_t *raidPtr); 67 1.8 oster void rf_FreeCallbackValueDesc(RF_Raid_t *raidPtr, RF_CallbackValueDesc_t * p); 68 1.1 oster 69 1.3 oster #endif /* !_RF__RF_CALLBACK_H_ */ 70