*
* By thePowersGang (John Hodge)
*/
-#include <common.h>
+#define DEBUG 0
+#include <acess.h>
#include <iocache.h>
// === TYPES ===
{
tIOCache *Next;
int SectorSize;
- int Lock;
+ tMutex Lock;
int Mode;
Uint32 ID;
tIOCache_WriteCallback Write;
};
// === GLOBALS ===
- int glIOCache_Caches;
+tShortSpinlock glIOCache_Caches;
tIOCache *gIOCache_Caches = NULL;
int giIOCache_NumCaches = 0;
ret->Entries = 0;
// Append to list
- LOCK( &glIOCache_Caches );
+ SHORTLOCK( &glIOCache_Caches );
ret->Next = gIOCache_Caches;
gIOCache_Caches = ret;
- RELEASE( &glIOCache_Caches );
+ SHORTREL( &glIOCache_Caches );
// Return
return ret;
{
tIOCache_Ent *ent;
+ ENTER("pCache XSector pBuffer", Cache, Sector, Buffer);
+
// Sanity Check!
- if(!Cache || !Buffer)
+ if(!Cache || !Buffer) {
+ LEAVE('i', -1);
return -1;
+ }
// Lock
- LOCK( &Cache->Lock );
+ Mutex_Acquire( &Cache->Lock );
if(Cache->CacheSize == 0) {
- RELEASE( &Cache->Lock );
+ Mutex_Release( &Cache->Lock );
+ LEAVE('i', -1);
return -1;
}
if( ent->Num == Sector ) {
memcpy(Buffer, ent->Data, Cache->SectorSize);
ent->LastAccess = now();
- RELEASE( &Cache->Lock );
+ Mutex_Release( &Cache->Lock );
+ LEAVE('i', 1);
return 1;
}
// It's a sorted list, so as soon as we go past `Sector` we know
if(ent->Num > Sector) break;
}
- RELEASE( &Cache->Lock );
+ Mutex_Release( &Cache->Lock );
+ LEAVE('i', 0);
return 0;
}
return -1;
// Lock
- LOCK( &Cache->Lock );
+ Mutex_Acquire( &Cache->Lock );
if(Cache->CacheSize == 0) {
- RELEASE( &Cache->Lock );
+ Mutex_Release( &Cache->Lock );
return -1;
}
{
// Is it already here?
if( ent->Num == Sector ) {
- RELEASE( &Cache->Lock );
+ Mutex_Release( &Cache->Lock );
return 0;
}
Cache->CacheUsed ++;
// Release Spinlock
- RELEASE( &Cache->Lock );
+ Mutex_Release( &Cache->Lock );
// Return success
return 1;
if(!Cache || !Buffer)
return -1;
// Lock
- LOCK( &Cache->Lock );
+ Mutex_Acquire( &Cache->Lock );
if(Cache->CacheSize == 0) {
- RELEASE( &Cache->Lock );
+ Mutex_Release( &Cache->Lock );
return -1;
}
ent->LastWrite = 0;
}
- RELEASE( &Cache->Lock );
+ Mutex_Release( &Cache->Lock );
return 1;
}
// It's a sorted list, so as soon as we go past `Sector` we know
if(ent->Num > Sector) break;
}
- RELEASE( &Cache->Lock );
+ Mutex_Release( &Cache->Lock );
return 0;
}
if( Cache->Mode == IOCACHE_VIRTUAL ) return;
// Lock
- LOCK( &Cache->Lock );
+ Mutex_Acquire( &Cache->Lock );
if(Cache->CacheSize == 0) {
- RELEASE( &Cache->Lock );
+ Mutex_Release( &Cache->Lock );
return;
}
ent->LastWrite = 0;
}
- RELEASE( &Cache->Lock );
+ Mutex_Release( &Cache->Lock );
}
/**
tIOCache_Ent *ent, *prev = NULL;
// Lock
- LOCK( &Cache->Lock );
+ Mutex_Acquire( &Cache->Lock );
if(Cache->CacheSize == 0) {
- RELEASE( &Cache->Lock );
+ Mutex_Release( &Cache->Lock );
return;
}
Cache->CacheSize = 0;
- RELEASE( &Cache->Lock );
+ Mutex_Release( &Cache->Lock );
// Remove from list
- LOCK( &glIOCache_Caches );
+ SHORTLOCK( &glIOCache_Caches );
{
tIOCache *ent;
tIOCache *prev = (tIOCache*)&gIOCache_Caches;
}
}
}
- RELEASE( &glIOCache_Caches );
+ SHORTREL( &glIOCache_Caches );
free(Cache);
}