ScrMemMgr.c
上传用户:lqx1163
上传日期:2014-08-13
资源大小:9183k
文件大小:12k
源码类别:

MTK

开发平台:

C/C++

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*****************************************************************************
  36.  *
  37.  * Filename:
  38.  * ---------
  39.  *  ScrMemMgr.c
  40.  *
  41.  * Project:
  42.  * --------
  43.  *  MAUI
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  Screen-Based Shared Memory Manager
  48.  *
  49.  *  Screen-based shared memory is allocated after entering a screen, and 
  50.  *  released before leaving a screen. 
  51.  *
  52.  *  Screen-based memory must be released before or inside screen exit function;
  53.  *  otherwise, it asserts.
  54.  * 
  55.  *  Screen-based shared memory is deterministic. Because all memory are released
  56.  *  when switching screens, memory fragmentation is restricted inside a screen.
  57.  *
  58.  * Author:
  59.  * -------
  60.  * -------
  61.  * -------
  62.  *                      
  63.  *============================================================================
  64.  *             HISTORY
  65.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  66.  *------------------------------------------------------------------------------
  67.  * removed!
  68.  *
  69.  * removed!
  70.  * removed!
  71.  * removed!
  72.  *
  73.  * removed!
  74.  * removed!
  75.  * removed!
  76.  *
  77.  * removed!
  78.  * removed!
  79.  * removed!
  80.  *
  81.  * removed!
  82.  * removed!
  83.  * removed!
  84.  *
  85.  * removed!
  86.  * removed!
  87.  * removed!
  88.  *
  89.  * removed!
  90.  * removed!
  91.  * removed!
  92.  *
  93.  * removed!
  94.  * removed!
  95.  * removed!
  96.  *
  97.  * removed!
  98.  * removed!
  99.  * removed!
  100.  *
  101.  *------------------------------------------------------------------------------
  102.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  103.  *============================================================================
  104.  ****************************************************************************/
  105. /***************************************************************************** 
  106.  * Include
  107.  *****************************************************************************/
  108. #include "MMI_features.h"
  109. #include "stdC.h"
  110. #include "L4Dr1.h"
  111. #include "GlobalDefs.h"
  112. #include "DebugInitDef.h"
  113. #include "ScrMemMgrGprot.h"
  114. #include "ScrMemMgr.h"
  115. #include "kal_non_specific_general_types.h"
  116. #include "app_mem.h"
  117. /***************************************************************************** 
  118.  * Define
  119.  *****************************************************************************/
  120. /***************************************************************************** 
  121.  * Typedef 
  122.  *****************************************************************************/
  123. /*****************************************************************************              
  124.  * Local Variable                                                                    
  125.  *****************************************************************************/
  126. /* memory pool */
  127. #ifdef __MTK_TARGET__
  128. #pragma arm section zidata = "LARGEPOOL_ZI"
  129. #endif 
  130. static U32 g_mmi_frm_scrmem_memory_pool[MMI_FRM_SCRMEM_POOL_SIZE/4];
  131. #ifdef __MTK_TARGET__
  132. #pragma arm section zidata = "LARGEPOOL_ZI"
  133. #endif 
  134. /*****************************************************************************              
  135.  * Local Function                                                                    
  136.  *****************************************************************************/
  137. /*****************************************************************************
  138.  * FUNCTION
  139.  *  mmi_frm_scrmem_get_screen_id
  140.  * DESCRIPTION
  141.  *  This function is callback from mcu/applib/, and it should be thread-safe.
  142.  *  (However, it's not suggested to use screen-based ASM in non-MMI task)
  143.  *
  144.  *  Reference: GetExitScrnID()
  145.  * PARAMETERS
  146.  *  void
  147.  * RETURNS
  148.  *  Current screen ID
  149.  *****************************************************************************/
  150. static kal_uint32 mmi_frm_scrmem_get_screen_id(void)
  151. {
  152.     return (kal_uint32) GetExitScrnID_r();
  153. }
  154. /*****************************************************************************              
  155.  * Extern Global Variable                                                                    
  156.  *****************************************************************************/
  157. /*****************************************************************************              
  158.  * Extern Global Function                                                                    
  159.  *****************************************************************************/
  160. /*****************************************************************************
  161.  * FUNCTION
  162.  *  mmi_frm_scrmem_init
  163.  * DESCRIPTION
  164.  *  Initialize screen-based memory.
  165.  * PARAMETERS
  166.  *  void
  167.  * RETURNS
  168.  *  void
  169.  *****************************************************************************/
  170. void mmi_frm_scrmem_init(void)
  171. {
  172.     /*----------------------------------------------------------------*/
  173.     /* Local Variables                                                */
  174.     /*----------------------------------------------------------------*/
  175.     /*----------------------------------------------------------------*/
  176.     /* Code Body                                                      */
  177.     /*----------------------------------------------------------------*/
  178.     applib_mem_screen_init(
  179.         mmi_frm_scrmem_get_screen_id, 
  180.         MMI_FRM_SCRMEM_POOL_SIZE, 
  181.         g_mmi_frm_scrmem_memory_pool);
  182. }
  183. /*****************************************************************************
  184.  * FUNCTION
  185.  *  mmi_frm_scrmem_alloc
  186.  * DESCRIPTION
  187.  *  Allocate screen-based shared memory
  188.  *  NOTE: it might returns NULL if we fail to allocate memory block of "mem_size".
  189.  * PARAMETERS
  190.  *  mem_size        [IN]        Memory size
  191.  * RETURNS
  192.  *  allocated chunk
  193.  *****************************************************************************/
  194. void *mmi_frm_scrmem_alloc(U32 mem_size)
  195. {
  196.     /*----------------------------------------------------------------*/
  197.     /* Local Variables                                                */
  198.     /*----------------------------------------------------------------*/
  199.     /*----------------------------------------------------------------*/
  200.     /* Code Body                                                      */
  201.     /*----------------------------------------------------------------*/
  202.     return applib_mem_screen_alloc((kal_uint32)mem_size);
  203. }
  204. /*****************************************************************************
  205.  * FUNCTION
  206.  *  mmi_frm_scrmem_free
  207.  * DESCRIPTION
  208.  *  Free screen-based shared memory
  209.  * PARAMETERS
  210.  *  mem_ptr     [IN]        Memory block to be free-ed
  211.  * RETURNS
  212.  *  void
  213.  *****************************************************************************/
  214. void mmi_frm_scrmem_free(void *mem_ptr)
  215. {
  216.     /*----------------------------------------------------------------*/
  217.     /* Local Variables                                                */
  218.     /*----------------------------------------------------------------*/
  219.     /*----------------------------------------------------------------*/
  220.     /* Code Body                                                      */
  221.     /*----------------------------------------------------------------*/
  222.     applib_mem_screen_free(mem_ptr);
  223. }
  224. /*****************************************************************************
  225.  * FUNCTION
  226.  *  mmi_frm_scrmem_get_available_size
  227.  * DESCRIPTION
  228.  *  Get available size of screen-based memory
  229.  * PARAMETERS
  230.  *  void
  231.  * RETURNS
  232.  *  Total left space
  233.  *****************************************************************************/
  234. U32 mmi_frm_scrmem_get_available_size(void)
  235. {
  236.     /*----------------------------------------------------------------*/
  237.     /* Local Variables                                                */
  238.     /*----------------------------------------------------------------*/
  239.     /*----------------------------------------------------------------*/
  240.     /* Code Body                                                      */
  241.     /*----------------------------------------------------------------*/
  242.     return (U32)applib_mem_screen_get_total_left_size();
  243. }
  244. /*****************************************************************************
  245.  * FUNCTION
  246.  *  mmi_frm_scrmem_is_all_free
  247.  * DESCRIPTION
  248.  *  Check if there is allocated screen-based memory
  249.  * PARAMETERS
  250.  *  void
  251.  * RETURNS
  252.  *  Return MMI_TRUE if all memory are released
  253.  *****************************************************************************/
  254. MMI_BOOL mmi_frm_scrmem_is_all_free(void)
  255. {
  256.     /*----------------------------------------------------------------*/
  257.     /* Local Variables                                                */
  258.     /*----------------------------------------------------------------*/
  259.     /*----------------------------------------------------------------*/
  260.     /* Code Body                                                      */
  261.     /*----------------------------------------------------------------*/
  262.     return (MMI_BOOL)(applib_mem_screen_get_alloc_count() == 0 ? MMI_TRUE : MMI_FALSE);
  263. }
  264. /*****************************************************************************
  265.  * FUNCTION
  266.  *  mmi_frm_scrmem_is_valid_block
  267.  * DESCRIPTION
  268.  *  Check if a memory block is valid. In other words, it should belong to the
  269.  *  current screen.
  270.  * PARAMETERS
  271.  *  mem_ptr     [IN]        Memory block to check
  272.  * RETURNS
  273.  *  Return MMI_TRUE if all memory are released
  274.  *****************************************************************************/
  275. MMI_BOOL mmi_frm_scrmem_is_valid_block(void *mem_ptr)
  276. {
  277.     /*----------------------------------------------------------------*/
  278.     /* Local Variables                                                */
  279.     /*----------------------------------------------------------------*/
  280.     /*----------------------------------------------------------------*/
  281.     /* Code Body                                                      */
  282.     /*----------------------------------------------------------------*/
  283.     return (MMI_BOOL)(applib_mem_screen_is_valid_block(mem_ptr) ? MMI_TRUE : MMI_FALSE);
  284. }