aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorFernando Guzman Lugo <x0095840@ti.com>2010-10-05 16:35:43 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2010-10-05 18:30:59 -0400
commitb1ced160af36043ee80d354318794753b6b7c008 (patch)
tree32aa4bb0be84c06f627ab7e6c1aa979aee5fee5f /drivers
parentdb348ca36e5881cd1d2e5caa6eee7d0237d07a3d (diff)
staging: tidspbridge - deprecate reserve/unreserve_memory funtions
Now what iommu memory usage is kept track by iommu module the functions reserve/unreserve_memory are not needed anymore. Signed-off-by: Fernando Guzman Lugo <x0095840@ti.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/staging/tidspbridge/include/dspbridge/proc.h46
-rw-r--r--drivers/staging/tidspbridge/pmgr/dspapi.c34
-rw-r--r--drivers/staging/tidspbridge/rmgr/node.c20
-rw-r--r--drivers/staging/tidspbridge/rmgr/proc.c114
4 files changed, 17 insertions, 197 deletions
diff --git a/drivers/staging/tidspbridge/include/dspbridge/proc.h b/drivers/staging/tidspbridge/include/dspbridge/proc.h
index 5e09fd165d9..2d12aab6b5b 100644
--- a/drivers/staging/tidspbridge/include/dspbridge/proc.h
+++ b/drivers/staging/tidspbridge/include/dspbridge/proc.h
@@ -551,29 +551,6 @@ extern int proc_map(void *hprocessor,
551 struct process_context *pr_ctxt); 551 struct process_context *pr_ctxt);
552 552
553/* 553/*
554 * ======== proc_reserve_memory ========
555 * Purpose:
556 * Reserve a virtually contiguous region of DSP address space.
557 * Parameters:
558 * hprocessor : The processor handle.
559 * ul_size : Size of the address space to reserve.
560 * pp_rsv_addr : Ptr to DSP side reserved u8 address.
561 * Returns:
562 * 0 : Success.
563 * -EFAULT : Invalid processor handle.
564 * -EPERM : General failure.
565 * -ENOMEM : Cannot reserve chunk of this size.
566 * Requires:
567 * pp_rsv_addr is not NULL
568 * PROC Initialized.
569 * Ensures:
570 * Details:
571 */
572extern int proc_reserve_memory(void *hprocessor,
573 u32 ul_size, void **pp_rsv_addr,
574 struct process_context *pr_ctxt);
575
576/*
577 * ======== proc_un_map ======== 554 * ======== proc_un_map ========
578 * Purpose: 555 * Purpose:
579 * Removes a MPU buffer mapping from the DSP address space. 556 * Removes a MPU buffer mapping from the DSP address space.
@@ -595,27 +572,4 @@ extern int proc_reserve_memory(void *hprocessor,
595extern int proc_un_map(void *hprocessor, void *map_addr, 572extern int proc_un_map(void *hprocessor, void *map_addr,
596 struct process_context *pr_ctxt); 573 struct process_context *pr_ctxt);
597 574
598/*
599 * ======== proc_un_reserve_memory ========
600 * Purpose:
601 * Frees a previously reserved region of DSP address space.
602 * Parameters:
603 * hprocessor : The processor handle.
604 * prsv_addr : Ptr to DSP side reservedBYTE address.
605 * Returns:
606 * 0 : Success.
607 * -EFAULT : Invalid processor handle.
608 * -EPERM : General failure.
609 * -ENOENT : Cannot find a reserved region starting with this
610 * : address.
611 * Requires:
612 * prsv_addr is not NULL
613 * PROC Initialized.
614 * Ensures:
615 * Details:
616 */
617extern int proc_un_reserve_memory(void *hprocessor,
618 void *prsv_addr,
619 struct process_context *pr_ctxt);
620
621#endif /* PROC_ */ 575#endif /* PROC_ */
diff --git a/drivers/staging/tidspbridge/pmgr/dspapi.c b/drivers/staging/tidspbridge/pmgr/dspapi.c
index faf8304f55e..0187c47fb4d 100644
--- a/drivers/staging/tidspbridge/pmgr/dspapi.c
+++ b/drivers/staging/tidspbridge/pmgr/dspapi.c
@@ -989,27 +989,10 @@ u32 procwrap_register_notify(union trapped_args *args, void *pr_ctxt)
989/* 989/*
990 * ======== procwrap_reserve_memory ======== 990 * ======== procwrap_reserve_memory ========
991 */ 991 */
992u32 procwrap_reserve_memory(union trapped_args *args, void *pr_ctxt) 992u32 __deprecated procwrap_reserve_memory(union trapped_args *args,
993 void *pr_ctxt)
993{ 994{
994 int status; 995 return 0;
995 void *prsv_addr;
996 void *hprocessor = ((struct process_context *)pr_ctxt)->hprocessor;
997
998 if ((args->args_proc_rsvmem.ul_size <= 0) ||
999 (args->args_proc_rsvmem.ul_size & (PG_SIZE4K - 1)) != 0)
1000 return -EINVAL;
1001
1002 status = proc_reserve_memory(hprocessor,
1003 args->args_proc_rsvmem.ul_size, &prsv_addr,
1004 pr_ctxt);
1005 if (!status) {
1006 if (put_user(prsv_addr, args->args_proc_rsvmem.pp_rsv_addr)) {
1007 status = -EINVAL;
1008 proc_un_reserve_memory(args->args_proc_rsvmem.
1009 hprocessor, prsv_addr, pr_ctxt);
1010 }
1011 }
1012 return status;
1013} 996}
1014 997
1015/* 998/*
@@ -1038,15 +1021,10 @@ u32 procwrap_un_map(union trapped_args *args, void *pr_ctxt)
1038/* 1021/*
1039 * ======== procwrap_un_reserve_memory ======== 1022 * ======== procwrap_un_reserve_memory ========
1040 */ 1023 */
1041u32 procwrap_un_reserve_memory(union trapped_args *args, void *pr_ctxt) 1024u32 __deprecated procwrap_un_reserve_memory(union trapped_args *args,
1025 void *pr_ctxt)
1042{ 1026{
1043 int status; 1027 return 0;
1044 void *hprocessor = ((struct process_context *)pr_ctxt)->hprocessor;
1045
1046 status = proc_un_reserve_memory(hprocessor,
1047 args->args_proc_unrsvmem.prsv_addr,
1048 pr_ctxt);
1049 return status;
1050} 1028}
1051 1029
1052/* 1030/*
diff --git a/drivers/staging/tidspbridge/rmgr/node.c b/drivers/staging/tidspbridge/rmgr/node.c
index 1562f3c1281..ccb1811a470 100644
--- a/drivers/staging/tidspbridge/rmgr/node.c
+++ b/drivers/staging/tidspbridge/rmgr/node.c
@@ -430,17 +430,6 @@ int node_allocate(struct proc_object *hprocessor,
430 if (status) 430 if (status)
431 goto func_cont; 431 goto func_cont;
432 432
433 status = proc_reserve_memory(hprocessor,
434 pnode->create_args.asa.task_arg_obj.
435 heap_size + PAGE_SIZE,
436 (void **)&(pnode->create_args.asa.
437 task_arg_obj.udsp_heap_res_addr),
438 pr_ctxt);
439 if (status) {
440 pr_err("%s: Failed to reserve memory for heap: 0x%x\n",
441 __func__, status);
442 goto func_cont;
443 }
444#ifdef DSP_DMM_DEBUG 433#ifdef DSP_DMM_DEBUG
445 status = dmm_get_handle(p_proc_object, &dmm_mgr); 434 status = dmm_get_handle(p_proc_object, &dmm_mgr);
446 if (!dmm_mgr) { 435 if (!dmm_mgr) {
@@ -456,8 +445,7 @@ int node_allocate(struct proc_object *hprocessor,
456 map_attrs |= DSP_MAPVIRTUALADDR; 445 map_attrs |= DSP_MAPVIRTUALADDR;
457 status = proc_map(hprocessor, (void *)attr_in->pgpp_virt_addr, 446 status = proc_map(hprocessor, (void *)attr_in->pgpp_virt_addr,
458 pnode->create_args.asa.task_arg_obj.heap_size, 447 pnode->create_args.asa.task_arg_obj.heap_size,
459 (void *)pnode->create_args.asa.task_arg_obj. 448 NULL, (void **)&mapped_addr, map_attrs,
460 udsp_heap_res_addr, (void **)&mapped_addr, map_attrs,
461 pr_ctxt); 449 pr_ctxt);
462 if (status) 450 if (status)
463 pr_err("%s: Failed to map memory for Heap: 0x%x\n", 451 pr_err("%s: Failed to map memory for Heap: 0x%x\n",
@@ -2576,12 +2564,6 @@ static void delete_node(struct node_object *hnode,
2576 status = proc_un_map(hnode->hprocessor, (void *) 2564 status = proc_un_map(hnode->hprocessor, (void *)
2577 task_arg_obj.udsp_heap_addr, 2565 task_arg_obj.udsp_heap_addr,
2578 pr_ctxt); 2566 pr_ctxt);
2579
2580 status = proc_un_reserve_memory(hnode->hprocessor,
2581 (void *)
2582 task_arg_obj.
2583 udsp_heap_res_addr,
2584 pr_ctxt);
2585#ifdef DSP_DMM_DEBUG 2567#ifdef DSP_DMM_DEBUG
2586 status = dmm_get_handle(p_proc_object, &dmm_mgr); 2568 status = dmm_get_handle(p_proc_object, &dmm_mgr);
2587 if (dmm_mgr) 2569 if (dmm_mgr)
diff --git a/drivers/staging/tidspbridge/rmgr/proc.c b/drivers/staging/tidspbridge/rmgr/proc.c
index e5fec572903..429f3549965 100644
--- a/drivers/staging/tidspbridge/rmgr/proc.c
+++ b/drivers/staging/tidspbridge/rmgr/proc.c
@@ -152,34 +152,21 @@ static struct dmm_map_object *add_mapping_info(struct process_context *pr_ctxt,
152 return map_obj; 152 return map_obj;
153} 153}
154 154
155static int match_exact_map_obj(struct dmm_map_object *map_obj,
156 u32 dsp_addr, u32 size)
157{
158 if (map_obj->dsp_addr == dsp_addr && map_obj->size != size)
159 pr_err("%s: addr match (0x%x), size don't (0x%x != 0x%x)\n",
160 __func__, dsp_addr, map_obj->size, size);
161
162 return map_obj->dsp_addr == dsp_addr &&
163 map_obj->size == size;
164}
165
166static void remove_mapping_information(struct process_context *pr_ctxt, 155static void remove_mapping_information(struct process_context *pr_ctxt,
167 u32 dsp_addr, u32 size) 156 u32 dsp_addr)
168{ 157{
169 struct dmm_map_object *map_obj; 158 struct dmm_map_object *map_obj;
170 159
171 pr_debug("%s: looking for virt 0x%x size 0x%x\n", __func__, 160 pr_debug("%s: looking for virt 0x%x\n", __func__, dsp_addr);
172 dsp_addr, size);
173 161
174 spin_lock(&pr_ctxt->dmm_map_lock); 162 spin_lock(&pr_ctxt->dmm_map_lock);
175 list_for_each_entry(map_obj, &pr_ctxt->dmm_map_list, link) { 163 list_for_each_entry(map_obj, &pr_ctxt->dmm_map_list, link) {
176 pr_debug("%s: candidate: mpu_addr 0x%x virt 0x%x size 0x%x\n", 164 pr_debug("%s: candidate: mpu_addr 0x%x virt 0x%x\n",
177 __func__, 165 __func__,
178 map_obj->mpu_addr, 166 map_obj->mpu_addr,
179 map_obj->dsp_addr, 167 map_obj->dsp_addr);
180 map_obj->size);
181 168
182 if (match_exact_map_obj(map_obj, dsp_addr, size)) { 169 if (map_obj->dsp_addr == dsp_addr) {
183 pr_debug("%s: match, deleting map info\n", __func__); 170 pr_debug("%s: match, deleting map info\n", __func__);
184 list_del(&map_obj->link); 171 list_del(&map_obj->link);
185 kfree(map_obj->dma_info.sg); 172 kfree(map_obj->dma_info.sg);
@@ -1353,7 +1340,6 @@ int proc_map(void *hprocessor, void *pmpu_addr, u32 ul_size,
1353{ 1340{
1354 u32 va_align; 1341 u32 va_align;
1355 u32 pa_align; 1342 u32 pa_align;
1356 struct dmm_object *dmm_mgr;
1357 u32 size_align; 1343 u32 size_align;
1358 int status = 0; 1344 int status = 0;
1359 struct proc_object *p_proc_object = (struct proc_object *)hprocessor; 1345 struct proc_object *p_proc_object = (struct proc_object *)hprocessor;
@@ -1382,11 +1368,6 @@ int proc_map(void *hprocessor, void *pmpu_addr, u32 ul_size,
1382 } 1368 }
1383 /* Critical section */ 1369 /* Critical section */
1384 mutex_lock(&proc_lock); 1370 mutex_lock(&proc_lock);
1385 dmm_get_handle(p_proc_object, &dmm_mgr);
1386 if (dmm_mgr)
1387 status = dmm_map_memory(dmm_mgr, va_align, size_align);
1388 else
1389 status = -EFAULT;
1390 1371
1391 /* Add mapping to the page tables. */ 1372 /* Add mapping to the page tables. */
1392 if (!status) { 1373 if (!status) {
@@ -1409,9 +1390,9 @@ int proc_map(void *hprocessor, void *pmpu_addr, u32 ul_size,
1409 map_obj->dsp_addr = (va_align | 1390 map_obj->dsp_addr = (va_align |
1410 ((u32)pmpu_addr & (PG_SIZE4K - 1))); 1391 ((u32)pmpu_addr & (PG_SIZE4K - 1)));
1411 *pp_map_addr = (void *)map_obj->dsp_addr; 1392 *pp_map_addr = (void *)map_obj->dsp_addr;
1393 pr_err("%s: mapped address %x\n", __func__, *pp_map_addr);
1412 } else { 1394 } else {
1413 remove_mapping_information(pr_ctxt, va_align, size_align); 1395 remove_mapping_information(pr_ctxt, va_align);
1414 dmm_un_map_memory(dmm_mgr, va_align, &size_align);
1415 } 1396 }
1416 mutex_unlock(&proc_lock); 1397 mutex_unlock(&proc_lock);
1417 1398
@@ -1504,38 +1485,6 @@ func_end:
1504} 1485}
1505 1486
1506/* 1487/*
1507 * ======== proc_reserve_memory ========
1508 * Purpose:
1509 * Reserve a virtually contiguous region of DSP address space.
1510 */
1511int proc_reserve_memory(void *hprocessor, u32 ul_size,
1512 void **pp_rsv_addr,
1513 struct process_context *pr_ctxt)
1514{
1515 struct dmm_object *dmm_mgr;
1516 int status = 0;
1517 struct proc_object *p_proc_object = (struct proc_object *)hprocessor;
1518
1519 if (!p_proc_object) {
1520 status = -EFAULT;
1521 goto func_end;
1522 }
1523
1524 status = dmm_get_handle(p_proc_object, &dmm_mgr);
1525 if (!dmm_mgr) {
1526 status = -EFAULT;
1527 goto func_end;
1528 }
1529
1530 status = dmm_reserve_memory(dmm_mgr, ul_size, (u32 *) pp_rsv_addr);
1531func_end:
1532 dev_dbg(bridge, "%s: hprocessor: 0x%p ul_size: 0x%x pp_rsv_addr: 0x%p "
1533 "status 0x%x\n", __func__, hprocessor,
1534 ul_size, pp_rsv_addr, status);
1535 return status;
1536}
1537
1538/*
1539 * ======== proc_start ======== 1488 * ======== proc_start ========
1540 * Purpose: 1489 * Purpose:
1541 * Start a processor running. 1490 * Start a processor running.
@@ -1683,7 +1632,6 @@ int proc_un_map(void *hprocessor, void *map_addr,
1683{ 1632{
1684 int status = 0; 1633 int status = 0;
1685 struct proc_object *p_proc_object = (struct proc_object *)hprocessor; 1634 struct proc_object *p_proc_object = (struct proc_object *)hprocessor;
1686 struct dmm_object *dmm_mgr;
1687 u32 va_align; 1635 u32 va_align;
1688 u32 size_align; 1636 u32 size_align;
1689 1637
@@ -1693,23 +1641,11 @@ int proc_un_map(void *hprocessor, void *map_addr,
1693 goto func_end; 1641 goto func_end;
1694 } 1642 }
1695 1643
1696 status = dmm_get_handle(hprocessor, &dmm_mgr);
1697 if (!dmm_mgr) {
1698 status = -EFAULT;
1699 goto func_end;
1700 }
1701
1702 /* Critical section */ 1644 /* Critical section */
1703 mutex_lock(&proc_lock); 1645 mutex_lock(&proc_lock);
1704 /*
1705 * Update DMM structures. Get the size to unmap.
1706 * This function returns error if the VA is not mapped
1707 */
1708 status = dmm_un_map_memory(dmm_mgr, (u32) va_align, &size_align);
1709 /* Remove mapping from the page tables. */ 1646 /* Remove mapping from the page tables. */
1710 if (!status) 1647 status = user_to_dsp_unmap(p_proc_object->hbridge_context->dsp_mmu,
1711 status = user_to_dsp_unmap( 1648 va_align);
1712 p_proc_object->hbridge_context->dsp_mmu, va_align);
1713 1649
1714 mutex_unlock(&proc_lock); 1650 mutex_unlock(&proc_lock);
1715 if (status) 1651 if (status)
@@ -1720,7 +1656,7 @@ int proc_un_map(void *hprocessor, void *map_addr,
1720 * from dmm_map_list, so that mapped memory resource tracking 1656 * from dmm_map_list, so that mapped memory resource tracking
1721 * remains uptodate 1657 * remains uptodate
1722 */ 1658 */
1723 remove_mapping_information(pr_ctxt, (u32) map_addr, size_align); 1659 remove_mapping_information(pr_ctxt, (u32) map_addr);
1724 1660
1725func_end: 1661func_end:
1726 dev_dbg(bridge, "%s: hprocessor: 0x%p map_addr: 0x%p status: 0x%x\n", 1662 dev_dbg(bridge, "%s: hprocessor: 0x%p map_addr: 0x%p status: 0x%x\n",
@@ -1729,36 +1665,6 @@ func_end:
1729} 1665}
1730 1666
1731/* 1667/*
1732 * ======== proc_un_reserve_memory ========
1733 * Purpose:
1734 * Frees a previously reserved region of DSP address space.
1735 */
1736int proc_un_reserve_memory(void *hprocessor, void *prsv_addr,
1737 struct process_context *pr_ctxt)
1738{
1739 struct dmm_object *dmm_mgr;
1740 int status = 0;
1741 struct proc_object *p_proc_object = (struct proc_object *)hprocessor;
1742
1743 if (!p_proc_object) {
1744 status = -EFAULT;
1745 goto func_end;
1746 }
1747
1748 status = dmm_get_handle(p_proc_object, &dmm_mgr);
1749 if (!dmm_mgr) {
1750 status = -EFAULT;
1751 goto func_end;
1752 }
1753
1754 status = dmm_un_reserve_memory(dmm_mgr, (u32) prsv_addr);
1755func_end:
1756 dev_dbg(bridge, "%s: hprocessor: 0x%p prsv_addr: 0x%p status: 0x%x\n",
1757 __func__, hprocessor, prsv_addr, status);
1758 return status;
1759}
1760
1761/*
1762 * ======== = proc_monitor ======== == 1668 * ======== = proc_monitor ======== ==
1763 * Purpose: 1669 * Purpose:
1764 * Place the Processor in Monitor State. This is an internal 1670 * Place the Processor in Monitor State. This is an internal