/* * Copyright (C) 1998, 1989 Transarc Corporation - All rights reserved * * (C) COPYRIGHT IBM CORPORATION 1987, 1988 * LICENSED MATERIALS - PROPERTY OF IBM * */ /* Copyright (C) 1994 Cazamar Systems, Inc. */ #ifndef OPENAFS_WINNT_CLIENT_OSI_OSILTYPE_H #define OPENAFS_WINNT_CLIENT_OSI_OSILTYPE_H 1 /* number of dynamic lock types we permit */ #define OSI_NLOCKTYPES 32 /* should be enough */ /* the set of procedures that we subclass to make a new lock * implementation. */ typedef struct osi_lockOps { void (*ObtainReadProc)(struct osi_rwlock *); void (*ObtainWriteProc)(struct osi_rwlock *); void (*ReleaseReadProc)(struct osi_rwlock *); void (*ReleaseWriteProc)(struct osi_rwlock *); void (*ObtainMutexProc)(struct osi_mutex *); void (*ReleaseMutexProc)(struct osi_mutex *); int (*TryReadProc)(struct osi_rwlock *); int (*TryWriteProc)(struct osi_rwlock *); int (*TryMutexProc)(struct osi_mutex *); void (*SleepRProc)(LONG_PTR, struct osi_rwlock *); void (*SleepWProc)(LONG_PTR, struct osi_rwlock *); void (*SleepMProc)(LONG_PTR, struct osi_mutex *); void (*InitializeMutexProc)(struct osi_mutex *, char *, unsigned short); void (*InitializeRWLockProc)(struct osi_rwlock *, char *, unsigned short); void (*FinalizeMutexProc)(struct osi_mutex *); void (*FinalizeRWLockProc)(struct osi_rwlock *); void (*ConvertWToRProc)(struct osi_rwlock *); void (*ConvertRToWProc)(struct osi_rwlock *); int (*GetRWLockState)(struct osi_rwlock *); int (*GetMutexState)(struct osi_mutex *); } osi_lockOps_t; /* operation vectors for lock ops */ extern osi_lockOps_t *osi_lockOps[OSI_NLOCKTYPES]; extern int osi_lockTypeDefault; /* external procedures */ void osi_LockTypeAdd(osi_lockOps_t *, char *, int *); int osi_LockTypeSetDefault(char *); /* bits for GetRWLockInfo and GetMutexInfo return values */ #define OSI_MUTEX_HELD 1 /* mutex is held */ #define OSI_RWLOCK_READHELD 1 /* locked for read */ #define OSI_RWLOCK_WRITEHELD 2 /* locked for write */ #endif /* OPENAFS_WINNT_CLIENT_OSI_OSILTYPE_H */