1/* 2 * Copyright 2007-2012 Haiku, Inc. All rights reserved. 3 * Distributed under the terms of the MIT license. 4 * 5 * Authors: 6 * Gerald Zajac 7 */ 8 9 10#include "accelerant.h" 11#include "i810_regs.h" 12 13 14static engine_token sEngineToken = { 1, B_2D_ACCELERATION, NULL }; 15 16 17uint32 18AccelerantEngineCount(void) 19{ 20 return 1; 21} 22 23 24status_t 25AcquireEngine(uint32 capabilities, uint32 maxWait, 26 sync_token* syncToken, engine_token** engineToken) 27{ 28 (void)capabilities; // avoid compiler warning for unused arg 29 (void)maxWait; // avoid compiler warning for unused arg 30 31 if (gInfo.sharedInfo->engineLock.Acquire() != B_OK) 32 return B_ERROR; 33 34 if (syncToken) 35 SyncToToken(syncToken); 36 37 *engineToken = &sEngineToken; 38 return B_OK; 39} 40 41 42status_t 43ReleaseEngine(engine_token* engineToken, sync_token* syncToken) 44{ 45 if (syncToken) 46 GetSyncToken(engineToken, syncToken); 47 48 gInfo.sharedInfo->engineLock.Release(); 49 return B_OK; 50} 51 52 53void 54WaitEngineIdle(void) 55{ 56 // Wait until engine is idle. 57 58 int k = 10000000; 59 60 while ((INREG16(INST_DONE) & 0x7B) != 0x7B && k > 0) 61 k--; 62} 63 64 65status_t 66GetSyncToken(engine_token* engineToken, sync_token* syncToken) 67{ 68 syncToken->engine_id = engineToken->engine_id; 69 syncToken->counter = 0; 70 return B_OK; 71} 72 73 74status_t 75SyncToToken(sync_token* syncToken) 76{ 77 (void)syncToken; 78 // avoid compiler warning for unused arg 79 80 WaitEngineIdle(); 81 return B_OK; 82} 83