* Copyright 2007-2012 Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT license.
*
* Authors:
* Gerald Zajac
*/
#include "accelerant.h"
#include "i810_regs.h"
static engine_token sEngineToken = { 1, B_2D_ACCELERATION, NULL };
uint32
AccelerantEngineCount(void)
{
return 1;
}
status_t
AcquireEngine(uint32 capabilities, uint32 maxWait,
sync_token* syncToken, engine_token** engineToken)
{
(void)capabilities;
(void)maxWait;
if (gInfo.sharedInfo->engineLock.Acquire() != B_OK)
return B_ERROR;
if (syncToken)
SyncToToken(syncToken);
*engineToken = &sEngineToken;
return B_OK;
}
status_t
ReleaseEngine(engine_token* engineToken, sync_token* syncToken)
{
if (syncToken)
GetSyncToken(engineToken, syncToken);
gInfo.sharedInfo->engineLock.Release();
return B_OK;
}
void
WaitEngineIdle(void)
{
int k = 10000000;
while ((INREG16(INST_DONE) & 0x7B) != 0x7B && k > 0)
k--;
}
status_t
GetSyncToken(engine_token* engineToken, sync_token* syncToken)
{
syncToken->engine_id = engineToken->engine_id;
syncToken->counter = 0;
return B_OK;
}
status_t
SyncToToken(sync_token* syncToken)
{
(void)syncToken;
WaitEngineIdle();
return B_OK;
}