/*++

Copyright (c) 1998

Module Name:

    arbitrate.h

Abstract:

    These are the structures and defines that are used in the
    arbitration code.

Authors:

   Gor Nishanov    (t-gorn)       5-Jun-1998
   
Revision History:

--*/
#ifndef ARBITRATE_H
#define ARBITRATE_H

#define DEFAULT_SECTOR_SIZE   512 // must be a power of two //
#define BLOCK_X               11
#define BLOCK_Y               12

DWORD
DiskArbitration(
    IN OUT PDISK_RESOURCE ResourceEntry,
    IN HANDLE FileHandle
    );

DWORD
StartPersistentReservations(
      IN OUT PDISK_RESOURCE ResourceEntry,
      IN HANDLE FileHandle
      );

VOID
StopPersistentReservations(
      IN OUT PDISK_RESOURCE ResourceEntry
      );

VOID 
ArbitrationInitialize(
      VOID
      );

VOID 
ArbitrationCleanup(
      VOID
      );

DWORD
ArbitrationInfoInit(
    IN OUT PDISK_RESOURCE ResourceEntry
    );

VOID
ArbitrationInfoCleanup(
    IN OUT PDISK_RESOURCE ResourceEntry
    );

VOID
DestroyArbWorkQueue(
    VOID
    );

DWORD
CreateArbWorkQueue(
      IN RESOURCE_HANDLE ResourceHandle
      );
    

#define ReservationInProgress(ResEntry) ( (ResEntry)->ArbitrationInfo.ControlHandle )

#endif // ARBITRATE_H