From 599fbbf01018607da1d6541b56700caae5a09ddb Mon Sep 17 00:00:00 2001 From: Rudolf Cornelissen Date: Mon, 15 Mar 2004 07:12:51 +0000 Subject: [PATCH] fixed engine management regarding sync_to_token git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6987 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../accelerants/nvidia/EngineManagment.c | 47 ++++++++++--------- .../accelerants/nvidia/engine/nv_general.c | 2 +- .../drivers/graphics/nvidia/UPDATE.html | 9 ++-- 3 files changed, 30 insertions(+), 28 deletions(-) diff --git a/src/add-ons/accelerants/nvidia/EngineManagment.c b/src/add-ons/accelerants/nvidia/EngineManagment.c index 062927ac42..42a3dd916e 100644 --- a/src/add-ons/accelerants/nvidia/EngineManagment.c +++ b/src/add-ons/accelerants/nvidia/EngineManagment.c @@ -2,7 +2,9 @@ Copyright 1999, Be Incorporated. All Rights Reserved. This file may be used under the terms of the Be Sample Code License. - modification to call G400 functions and mess-ups - Mark Watson + other authors: + Mark Watson + Rudolf Cornelissen 3/2004 */ #define MODULE_BIT 0x10000000 @@ -12,11 +14,14 @@ static engine_token nv_engine_token = { 1, B_2D_ACCELERATION, NULL }; -uint32 ACCELERANT_ENGINE_COUNT(void) { +uint32 ACCELERANT_ENGINE_COUNT(void) +{ + /* we have one acceleration engine */ return 1; } -status_t ACQUIRE_ENGINE(uint32 capabilities, uint32 max_wait, sync_token *st, engine_token **et) { +status_t ACQUIRE_ENGINE(uint32 capabilities, uint32 max_wait, sync_token *st, engine_token **et) +{ /* acquire the shared benaphore */ AQUIRE_BEN(si->engine.lock) /* sync if required */ @@ -27,41 +32,37 @@ status_t ACQUIRE_ENGINE(uint32 capabilities, uint32 max_wait, sync_token *st, en return B_OK; } -status_t RELEASE_ENGINE(engine_token *et, sync_token *st) { +status_t RELEASE_ENGINE(engine_token *et, sync_token *st) +{ /* update the sync token, if any */ - if (st) { - GET_SYNC_TOKEN(et,st); - } + if (st) GET_SYNC_TOKEN(et,st); /* release the shared benaphore */ RELEASE_BEN(si->engine.lock) return B_OK; } -void WAIT_ENGINE_IDLE(void) { - uint32 count; - /*wait for the engine to be totally idle*/ - count = si->engine.count; +void WAIT_ENGINE_IDLE(void) +{ nv_acc_wait_idle(); - - si->engine.last_idle = count; } -status_t GET_SYNC_TOKEN(engine_token *et, sync_token *st) { - si->engine.count+=4; +status_t GET_SYNC_TOKEN(engine_token *et, sync_token *st) +{ + /* engine count will always be zero: we don't support syncing to token (yet) */ st->engine_id = et->engine_id; st->counter = si->engine.count; return B_OK; } -status_t SYNC_TO_TOKEN(sync_token *st) { - /* a quick out */ - if (st->counter <= si->engine.last_idle) return B_OK; - - /* another quick out! */ - if ((st->counter >0xFFFFFFF) && (si->engine.last_idle <0xFFFF)) return B_OK; /*for when counter wraps*/ - - /* If not we have to wait :-(*/ +status_t SYNC_TO_TOKEN(sync_token *st) +{ + /* wait until the engine is totally idle: we don't support syncing to token (yet) */ + /* note: + * AFAIK in order to be able to setup sync_to_token, we'd need a circular fifo + * buffer in (main) memory instead of directly programming the GPU fifo so we + * can tell (via a hardware maintained pointer into this circular fifo) where + * the acc engine is with executing commands! */ WAIT_ENGINE_IDLE(); return B_OK; diff --git a/src/add-ons/accelerants/nvidia/engine/nv_general.c b/src/add-ons/accelerants/nvidia/engine/nv_general.c index 52795feaf0..00478b070a 100644 --- a/src/add-ons/accelerants/nvidia/engine/nv_general.c +++ b/src/add-ons/accelerants/nvidia/engine/nv_general.c @@ -80,7 +80,7 @@ status_t nv_general_powerup() { status_t status; - LOG(1,("POWERUP: nVidia (open)BeOS Accelerant 0.10-5 running.\n")); + LOG(1,("POWERUP: nVidia (open)BeOS Accelerant 0.10-6 running.\n")); /* preset no laptop */ si->ps.laptop = false; diff --git a/src/add-ons/kernel/drivers/graphics/nvidia/UPDATE.html b/src/add-ons/kernel/drivers/graphics/nvidia/UPDATE.html index f3b5febbff..b8689b0cb0 100644 --- a/src/add-ons/kernel/drivers/graphics/nvidia/UPDATE.html +++ b/src/add-ons/kernel/drivers/graphics/nvidia/UPDATE.html @@ -4,16 +4,17 @@

Changes done for each driverversion:

-

head (0.10-5), (Rudolf)

+

head (0.10-6), (Rudolf)

+NOTE:
+dualhead switch mode is not yet operational for flatpanels...

nv_driver 0.09, (Rudolf)