summaryrefslogtreecommitdiff
path: root/drivers/media/video/tiler/dmm_page_rep.c
diff options
context:
space:
mode:
authorDavid Sin <davidsin@ti.com>2010-01-04 16:02:48 -0600
committerSantosh Shilimkar <santosh.shilimkar@ti.com>2010-01-06 00:36:20 +0530
commiteb0885ba5fc1fcd4bc82b116c771010a64b78f3b (patch)
tree660cf3aa1245f44ecb6d1839586d9404d64a7a5f /drivers/media/video/tiler/dmm_page_rep.c
parent372181d33497eaa4881617af022871265a20e706 (diff)
- remove wakeup build flagsti-2.6.31-omap4-L24.3-for-testing-p1
1. fix compile warnings 2. remove unused functions and structures 3. remove build flags used during wakeup 4. general code cleanup 5. added more memory checks 6. set managed page count to 16 7. relocated page array allocation 8. consolidated dmm register mapping 9. reduced debug messages
Diffstat (limited to 'drivers/media/video/tiler/dmm_page_rep.c')
-rw-r--r--drivers/media/video/tiler/dmm_page_rep.c105
1 files changed, 24 insertions, 81 deletions
diff --git a/drivers/media/video/tiler/dmm_page_rep.c b/drivers/media/video/tiler/dmm_page_rep.c
index a0a82fa1adc5..9e185d4661d4 100644
--- a/drivers/media/video/tiler/dmm_page_rep.c
+++ b/drivers/media/video/tiler/dmm_page_rep.c
@@ -14,26 +14,13 @@
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
-#include <linux/vmalloc.h>
-#include <linux/mm.h> /* vmalloc_to_page */
-#include <linux/mmzone.h> /* __page_to_phys */
-#include "dmm_prv.h"
-
-#define __NEWCODE__
-
-#ifdef __NEWCODE__
+#include <linux/mm.h>
+#include <linux/mmzone.h>
#include <asm/cacheflush.h>
#include <linux/mutex.h>
+#include "dmm_prv.h"
static struct mutex mtx;
-#endif
-
-#define __KERN_TO_ALLOC__
-
-#ifndef __KERN_TO_ALLOC__
-#define BASE_MEM_ADDR 0x98000000
-static unsigned long page_addr;
-#endif
#ifdef CHECK_STACK
#define lajosdump(x) printk(KERN_NOTICE "%s::%s():%d: %s=%p\n",\
@@ -79,8 +66,6 @@ static void check_stack(struct dmmPhysPgLLT *stack, char *prefix, int line)
}
#endif
-/*--------function prototypes ---------------------------------*/
-
/* ========================================================================== */
/**
* dmmPhysPageRepRefil()
@@ -96,29 +81,25 @@ static void check_stack(struct dmmPhysPgLLT *stack, char *prefix, int line)
* @see
*/
/* ========================================================================== */
-void dmm_phys_page_rep_refil(void)
+enum errorCodeT dmm_phys_page_rep_refil(void)
{
unsigned long iter;
+ struct page *page = NULL;
- tilerdump(__LINE__);
for (iter = 0; iter < DMM_MNGD_PHYS_PAGES; iter++) {
- struct dmmPhysPgLLT *tmpPgNode = kmalloc
- (sizeof(struct dmmPhysPgLLT), GFP_KERNEL);
+ struct dmmPhysPgLLT *tmpPgNode = NULL;
+
+ tmpPgNode = kmalloc(sizeof(struct dmmPhysPgLLT), GFP_KERNEL);
+ if (!tmpPgNode)
+ return DMM_SYS_ERROR;
memset(tmpPgNode, 0x0, sizeof(struct dmmPhysPgLLT));
if (tmpPgNode != NULL) {
-
tmpPgNode->nextPhysPg = NULL;
tmpPgNode->prevPhysPg = NULL;
-#ifndef __NEWCODE__
- tmpPgNode->physPgPtr =
- (unsigned long *)__get_free_page(
- GFP_KERNEL | GFP_DMA);
-#else
-#ifdef __KERN_TO_ALLOC__
- struct page *page = NULL;
-
page = (struct page *)alloc_page(GFP_KERNEL | GFP_DMA);
+ if (!page)
+ return DMM_SYS_ERROR;
tmpPgNode->physPgPtr =
(unsigned long *)page_to_phys(page);
tmpPgNode->page_addr = page;
@@ -126,11 +107,6 @@ void dmm_phys_page_rep_refil(void)
(void *)page_address(page) + 0x1000);
outer_flush_range((unsigned long)tmpPgNode->physPgPtr,
(unsigned long)tmpPgNode->physPgPtr + 0x1000);
-#else
- tmpPgNode->physPgPtr = (unsigned long *)page_addr;
- page_addr += 0x1000;
-#endif
-#endif
/* add to end */
if (freePagesStack != NULL) {
@@ -150,6 +126,7 @@ void dmm_phys_page_rep_refil(void)
#ifdef CHECK_STACK
check_stack(freePagesStack, "free: ", __LINE__);
#endif
+ return DMM_NO_ERROR;
}
/* ========================================================================== */
@@ -169,24 +146,18 @@ void dmm_phys_page_rep_refil(void)
/* ========================================================================== */
enum errorCodeT dmm_phys_page_rep_init(void)
{
+ int r = DMM_SYS_ERROR;
mutex_init(&mtx);
- /* DMM_ENTER_CRITICAL_SECTION */
mutex_lock(&mtx);
freePagesStack = NULL;
usedPagesStack = NULL;
-
freePageCnt = 0;
-#ifndef __KERN_TO_ALLOC__
- page_addr = BASE_MEM_ADDR;
-#endif
-
- dmm_phys_page_rep_refil();
+ r = dmm_phys_page_rep_refil();
- /* DMM_EXIT_CRITICAL_SETCTION */
mutex_unlock(&mtx);
- return DMM_NO_ERROR;
+ return r;
}
/* ========================================================================== */
@@ -207,43 +178,26 @@ enum errorCodeT dmm_phys_page_rep_init(void)
/* ========================================================================== */
enum errorCodeT dmm_phys_page_rep_deinit(void)
{
- /* DMM_ENTER_CRITICAL_SECTION */
- mutex_lock(&mtx);
struct dmmPhysPgLLT *tmpPgNode = NULL;
+ mutex_lock(&mtx);
+
while (usedPagesStack != NULL) {
tmpPgNode = usedPagesStack->prevPhysPg;
-#ifndef __NEWCODE__
- free_page((unsigned long)usedPagesStack->physPgPtr);
- kfree(usedPagesStack);
-#else
-#ifdef __KERN_TO_ALLOC__
__free_page(usedPagesStack->page_addr);
-#else
-#endif
kfree(usedPagesStack);
-#endif
usedPagesStack = tmpPgNode;
}
while (freePagesStack != NULL) {
tmpPgNode = freePagesStack->prevPhysPg;
-#ifndef __NEWCODE__
- free_page((unsigned long)freePagesStack->physPgPtr);
- kfree(freePagesStack);
-#else
-#ifdef __KERN_TO_ALLOC__
__free_page(freePagesStack->page_addr);
-#else
-#endif
kfree(freePagesStack);
-#endif
freePagesStack = tmpPgNode;
}
freePageCnt = 0;
- /* DMM_EXIT_CRITICAL_SETCTION */
mutex_unlock(&mtx);
mutex_destroy(&mtx);
return DMM_NO_ERROR;
@@ -267,12 +221,15 @@ enum errorCodeT dmm_phys_page_rep_deinit(void)
unsigned long *dmm_get_phys_page(void)
{
unsigned long *physPgPtr = NULL;
+ int r = -1;
- /* DMM_ENTER_CRITICAL_SECTION */
mutex_lock(&mtx);
- if (freePagesStack == NULL)
- dmm_phys_page_rep_refil();
+ if (freePagesStack == NULL) {
+ r = dmm_phys_page_rep_refil();
+ if (r != DMM_NO_ERROR)
+ return NULL;
+ }
if (freePagesStack != NULL) {
struct dmmPhysPgLLT *tmpPgNode = freePagesStack;
@@ -302,7 +259,6 @@ unsigned long *dmm_get_phys_page(void)
check_stack(freePagesStack, "free: ", __LINE__);
check_stack(usedPagesStack, "used: ", __LINE__);
#endif
- /* DMM_EXIT_CRITICAL_SETCTION */
mutex_unlock(&mtx);
return physPgPtr;
}
@@ -329,7 +285,6 @@ enum errorCodeT dmm_free_phys_page(unsigned long *physPgPtr)
{
struct dmmPhysPgLLT *iterPgNode = usedPagesStack;
- /* DMM_ENTER_CRITICAL_SECTION */
mutex_lock(&mtx);
while (iterPgNode != NULL) {
@@ -349,7 +304,6 @@ enum errorCodeT dmm_free_phys_page(unsigned long *physPgPtr)
} else if (iterPgNode == usedPagesStack) {
usedPagesStack = usedPagesStack->prevPhysPg;
} else {
- /* DMM_EXIT_CRITICAL_SETCTION */
mutex_unlock(&mtx);
lajosdump(iterPgNode);
return DMM_SYS_ERROR;
@@ -365,23 +319,13 @@ enum errorCodeT dmm_free_phys_page(unsigned long *physPgPtr)
while (freePageCnt > DMM_MNGD_PHYS_PAGES &&
freePagesStack != NULL) {
iterPgNode = freePagesStack->prevPhysPg;
-#ifndef __NEWCODE__
- free_page((unsigned long)
- freePagesStack->physPgPtr);
- kfree(freePagesStack);
-#else
-#ifdef __KERN_TO_ALLOC__
__free_page(freePagesStack->page_addr);
-#else
-#endif
kfree(freePagesStack);
-#endif
freePagesStack = iterPgNode;
freePageCnt--;
}
freePagesStack->nextPhysPg = NULL;
- /* DMM_EXIT_CRITICAL_SETCTION */
mutex_unlock(&mtx);
#ifdef CHECK_STACK
check_stack(freePagesStack, "free: ", __LINE__);
@@ -393,7 +337,6 @@ enum errorCodeT dmm_free_phys_page(unsigned long *physPgPtr)
iterPgNode = iterPgNode->prevPhysPg;
}
- /* DMM_EXIT_CRITICAL_SETCTION */
mutex_unlock(&mtx);
#ifdef CHECK_STACK
check_stack(freePagesStack, "free: ", __LINE__);