1/* 2 * Copyright 2009-2010, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef IO_SCHEDULER_ROSTER_H 6#define IO_SCHEDULER_ROSTER_H 7 8 9#include <Notifications.h> 10 11#include "IOScheduler.h" 12 13 14// I/O scheduler notifications 15#define IO_SCHEDULER_MONITOR '_io_' 16#define IO_SCHEDULER_ADDED 0x01 17#define IO_SCHEDULER_REMOVED 0x02 18#define IO_SCHEDULER_REQUEST_SCHEDULED 0x04 19#define IO_SCHEDULER_REQUEST_FINISHED 0x08 20#define IO_SCHEDULER_OPERATION_STARTED 0x10 21#define IO_SCHEDULER_OPERATION_FINISHED 0x20 22 23 24 25typedef DoublyLinkedList<IOScheduler> IOSchedulerList; 26 27 28class IOSchedulerRoster { 29public: 30 static void Init(); 31 static IOSchedulerRoster* Default() { return &sDefaultInstance; } 32 33 bool Lock() { return mutex_lock(&fLock) == B_OK; } 34 void Unlock() { mutex_unlock(&fLock); } 35 36 const IOSchedulerList& SchedulerList() const 37 { return fSchedulers; } 38 // caller must keep the roster locked, 39 // while accessing the list 40 41 void AddScheduler(IOScheduler* scheduler); 42 void RemoveScheduler(IOScheduler* scheduler); 43 44 void Notify(uint32 eventCode, 45 const IOScheduler* scheduler, 46 IORequest* request = NULL, 47 IOOperation* operation = NULL); 48 49 int32 NextID(); 50 51private: 52 IOSchedulerRoster(); 53 ~IOSchedulerRoster(); 54 55private: 56 mutex fLock; 57 int32 fNextID; 58 IOSchedulerList fSchedulers; 59 DefaultNotificationService fNotificationService; 60 char fEventBuffer[256]; 61 62 static IOSchedulerRoster sDefaultInstance; 63}; 64 65 66#endif // IO_SCHEDULER_ROSTER_H 67