root/src/system/kernel/device_manager/IOScheduler.cpp
/*
 * Copyright 2010, Ingo Weinhold, ingo_weinhold@gmx.de.
 * Distributed under the terms of the MIT License.
 */


#include "IOScheduler.h"

#include <stdlib.h>
#include <string.h>

#include "IOSchedulerRoster.h"


IOScheduler::IOScheduler(DMAResource* resource)
        :
        fDMAResource(resource),
        fName(NULL),
        fID(IOSchedulerRoster::Default()->NextID()),
        fIOCallback(NULL),
        fIOCallbackData(NULL),
        fSchedulerRegistered(false)
{
}


IOScheduler::~IOScheduler()
{
        if (fSchedulerRegistered)
                IOSchedulerRoster::Default()->RemoveScheduler(this);

        free(fName);
}


status_t
IOScheduler::Init(const char* name)
{
        fName = strdup(name);
        if (fName == NULL)
                return B_NO_MEMORY;

        IOSchedulerRoster::Default()->AddScheduler(this);
        fSchedulerRegistered = true;

        return B_OK;
}


void
IOScheduler::SetCallback(IOCallback& callback)
{
        SetCallback(&IOCallback::WrapperFunction, &callback);
}


void
IOScheduler::SetCallback(io_callback callback, void* data)
{
        fIOCallback = callback;
        fIOCallbackData = data;
}


void
IOScheduler::SetDeviceCapacity(off_t deviceCapacity)
{
}


void
IOScheduler::MediaChanged()
{
}