* acpica.c
* - ACPICA Interface
*/
-#define DEBUG 1
+#define ACPI_DEBUG_OUTPUT 0
+#define DEBUG 0
#define _AcpiModuleName "Shim"
#define _COMPONENT "Acess"
#include <acpi.h>
int namelen = (CacheName ? strlen(CacheName) : 0) + 1;
LOG("CacheName=%s, ObjSize=%x, MaxDepth=%x", CacheName, ObjectSize, MaxDepth);
+ namelen = (namelen + 3) & ~3;
+
ret = malloc(sizeof(*ret) + MaxDepth*sizeof(char) + namelen + MaxDepth*ObjectSize);
- if( !ret ) return AE_NO_MEMORY;
+ if( !ret ) {
+ Log_Notice("ACPICA", "%s: malloc() fail", __func__);
+ return AE_NO_MEMORY;
+ }
ret->nObj = MaxDepth;
ret->ObjectSize = ObjectSize;
ret->Name[0] = 0;
memset(ret->ObjectStates, 0, sizeof(char)*MaxDepth);
- LOG("Allocated cache '%s' (%i x 0x%x)", CacheName, MaxDepth, ObjectSize);
+ LOG("Allocated cache %p '%s' (%i x 0x%x)", ret, CacheName, MaxDepth, ObjectSize);
*ReturnCache = ret;
void *AcpiOsAcquireObject(ACPI_CACHE_T *Cache)
{
- LOG("(Cache=%p)", Cache);
+ ENTER("pCache", Cache);
for(int i = 0; i < Cache->nObj; i ++ )
{
if( !Cache->ObjectStates[i] ) {
Cache->ObjectStates[i] = 1;
- return (char*)Cache->First + i*Cache->ObjectSize;
+ void *rv = (char*)Cache->First + i*Cache->ObjectSize;
+ memset(rv, 0, Cache->ObjectSize);
+ LEAVE('p', rv);
+ return rv;
}
}
- // TODO
+
+ Log_Debug("ACPICA", "AcpiOsAcquireObject: %i objects used", Cache->nObj);
+
+ LEAVE('n');
return NULL;
}
tVAddr delta = (tVAddr)Object - (tVAddr)Cache->First;
delta /= Cache->ObjectSize;
+ LOG("Cache=%p, delta = %i, (limit %i)", Cache, delta, Cache->nObj);
- if( delta > Cache->nObj )
+ if( delta >= Cache->nObj )
return AE_BAD_PARAMETER;
Cache->ObjectStates[delta] = 0;
Uint ofs = PhysicalAddress & (PAGE_SIZE-1);
int npages = (ofs + Length + (PAGE_SIZE-1)) / PAGE_SIZE;
void *rv = ((char*)MM_MapHWPages(PhysicalAddress, npages)) + ofs;
+// MM_DumpTables(0, -1);
LOG("Map (%P+%i pg) to %p", PhysicalAddress, npages, rv);
return rv;
}
if( !OutHandle )
return AE_BAD_PARAMETER;
tMutex *ret = calloc( sizeof(tMutex), 1 );
- if( !ret )
+ if( !ret ) {
+ Log_Notice("ACPICA", "%s: malloc() fail", __func__);
return AE_NO_MEMORY;
+ }
ret->Name = "AcpiOsCreateMutex";
*OutHandle = ret;
if( !OutHandle )
return AE_BAD_PARAMETER;
tSemaphore *ret = calloc( sizeof(tSemaphore), 1 );
- if( !ret )
+ if( !ret ) {
+ Log_Notice("ACPICA", "%s: malloc() fail", __func__);
return AE_NO_MEMORY;
+ }
Semaphore_Init(ret, InitialUnits, MaxUnits, "AcpiOsCreateSemaphore", "");
*OutHandle = ret;