diff options
Diffstat (limited to 'kernel.soso/sharedmemory.c')
-rw-r--r-- | kernel.soso/sharedmemory.c | 84 |
1 files changed, 28 insertions, 56 deletions
diff --git a/kernel.soso/sharedmemory.c b/kernel.soso/sharedmemory.c index 8a4e635a..8082d2a4 100644 --- a/kernel.soso/sharedmemory.c +++ b/kernel.soso/sharedmemory.c @@ -17,53 +17,45 @@ static BOOL sharedmemorydir_open(File *file, uint32 flags); static FileSystemDirent *sharedmemorydir_readdir(FileSystemNode *node, uint32 index); static FileSystemNode *sharedmemorydir_finddir(FileSystemNode *node, char *name); -typedef struct SharedMemory -{ +typedef struct SharedMemory { FileSystemNode* node; List* physicalAddressList; Spinlock physicalAddressListLock; //TODO: permissions } SharedMemory; -void initializeSharedMemory() -{ +void initializeSharedMemory() { Spinlock_Init(&gShmListLock); gShmList = List_Create(); gShmRoot = getFileSystemNode("/system/shm"); - if (NULL == gShmRoot) - { + if (NULL == gShmRoot) { WARNING("/system/shm not found!!"); } - else - { + else { gShmRoot->open = sharedmemorydir_open; gShmRoot->finddir = sharedmemorydir_finddir; gShmRoot->readdir = sharedmemorydir_readdir; } } -static BOOL sharedmemorydir_open(File *file, uint32 flags) -{ +static BOOL sharedmemorydir_open(File *file, uint32 flags) { return TRUE; } -static FileSystemDirent *sharedmemorydir_readdir(FileSystemNode *node, uint32 index) -{ +static FileSystemDirent *sharedmemorydir_readdir(FileSystemNode *node, uint32 index) { FileSystemDirent* result = NULL; int counter = 0; Spinlock_Lock(&gShmListLock); - List_Foreach (n, gShmList) - { + List_Foreach (n, gShmList) { SharedMemory* p = (SharedMemory*)n->data; - if (counter == index) - { + if (counter == index) { strcpy(gDirent.name, p->node->name); gDirent.fileType = p->node->nodeType; @@ -79,18 +71,15 @@ static FileSystemDirent *sharedmemorydir_readdir(FileSystemNode *node, uint32 in return result; } -static FileSystemNode *sharedmemorydir_finddir(FileSystemNode *node, char *name) -{ +static FileSystemNode *sharedmemorydir_finddir(FileSystemNode *node, char *name) { FileSystemNode* result = NULL; Spinlock_Lock(&gShmListLock); - List_Foreach (n, gShmList) - { + List_Foreach (n, gShmList) { SharedMemory* p = (SharedMemory*)n->data; - if (strcmp(name, p->node->name) == 0) - { + if (strcmp(name, p->node->name) == 0) { result = p->node; break; } @@ -101,27 +90,22 @@ static FileSystemNode *sharedmemorydir_finddir(FileSystemNode *node, char *name) return result; } -static BOOL sharedmemory_open(File *file, uint32 flags) -{ +static BOOL sharedmemory_open(File *file, uint32 flags) { return TRUE; } -static void sharedmemory_unlink(File *file) -{ +static void sharedmemory_unlink(File *file) { destroySharedMemory(file->node->name); } -static int32 sharedmemory_ftruncate(File *file, int32 length) -{ - if (length <= 0) - { +static int32 sharedmemory_ftruncate(File *file, int32 length) { + if (length <= 0) { return -1; } SharedMemory* sharedMem = (SharedMemory*)file->node->privateNodeData; - if (0 != file->node->length) - { + if (0 != file->node->length) { //already set return -1; } @@ -130,8 +114,7 @@ static int32 sharedmemory_ftruncate(File *file, int32 length) Spinlock_Lock(&sharedMem->physicalAddressListLock); - for (int i = 0; i < pageCount; ++i) - { + for (int i = 0; i < pageCount; ++i) { char* pAddress = getPageFrame4M(); List_Append(sharedMem->physicalAddressList, pAddress); @@ -144,16 +127,14 @@ static int32 sharedmemory_ftruncate(File *file, int32 length) return 0; } -static void* sharedmemory_mmap(File* file, uint32 size, uint32 offset, uint32 flags) -{ +static void* sharedmemory_mmap(File* file, uint32 size, uint32 offset, uint32 flags) { void* result = NULL; SharedMemory* sharedMem = (SharedMemory*)file->node->privateNodeData; Spinlock_Lock(&sharedMem->physicalAddressListLock); - if (List_GetCount(sharedMem->physicalAddressList) > 0) - { + if (List_GetCount(sharedMem->physicalAddressList) > 0) { result = mapMemory(file->thread->owner, size, 0, sharedMem->physicalAddressList); } @@ -162,18 +143,15 @@ static void* sharedmemory_mmap(File* file, uint32 size, uint32 offset, uint32 fl return result; } -FileSystemNode* getSharedMemoryNode(const char* name) -{ +FileSystemNode* getSharedMemoryNode(const char* name) { FileSystemNode* result = NULL; Spinlock_Lock(&gShmListLock); - List_Foreach (n, gShmList) - { + List_Foreach (n, gShmList) { SharedMemory* p = (SharedMemory*)n->data; - if (strcmp(name, p->node->name) == 0) - { + if (strcmp(name, p->node->name) == 0) { result = p->node; break; } @@ -184,10 +162,8 @@ FileSystemNode* getSharedMemoryNode(const char* name) return result; } -FileSystemNode* createSharedMemory(const char* name) -{ - if (getSharedMemoryNode(name) != NULL) - { +FileSystemNode* createSharedMemory(const char* name) { + if (getSharedMemoryNode(name) != NULL) { return NULL; } @@ -216,25 +192,21 @@ FileSystemNode* createSharedMemory(const char* name) return node; } -void destroySharedMemory(const char* name) -{ +void destroySharedMemory(const char* name) { SharedMemory* sharedMem = NULL; Spinlock_Lock(&gShmListLock); - List_Foreach (n, gShmList) - { + List_Foreach (n, gShmList) { SharedMemory* p = (SharedMemory*)n->data; - if (strcmp(name, p->node->name) == 0) - { + if (strcmp(name, p->node->name) == 0) { sharedMem = (SharedMemory*)p; break; } } - if (sharedMem) - { + if (sharedMem) { Spinlock_Lock(&sharedMem->physicalAddressListLock); kfree(sharedMem->node); |