* Copyright 2010, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#ifndef IO_SCHEDULER_H
#define IO_SCHEDULER_H
#include <KernelExport.h>
#include <util/DoublyLinkedList.h>
#include "IOCallback.h"
#include "IORequest.h"
struct IORequestOwner {
team_id team;
thread_id thread;
thread_id priority;
virtual void Dump() const = 0;
};
class IOScheduler : public DoublyLinkedListLinkImpl<IOScheduler> {
public:
IOScheduler(DMAResource* resource);
virtual ~IOScheduler();
virtual status_t Init(const char* name);
const char* Name() const { return fName; }
int32 ID() const { return fID; }
const DMAResource* GetDMAResource() const { return fDMAResource; }
virtual void SetCallback(IOCallback& callback);
virtual void SetCallback(io_callback callback, void* data);
virtual void SetDeviceCapacity(off_t deviceCapacity);
virtual void MediaChanged();
virtual status_t ScheduleRequest(IORequest* request) = 0;
virtual void AbortRequest(IORequest* request,
status_t status = B_CANCELED) = 0;
virtual void OperationCompleted(IOOperation* operation,
status_t status,
generic_size_t transferredBytes) = 0;
virtual void Dump() const = 0;
protected:
DMAResource* fDMAResource;
char* fName;
int32 fID;
io_callback fIOCallback;
void* fIOCallbackData;
bool fSchedulerRegistered;
};
#endif