⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 ST5100 driver files for ST chipset
💻 C
📖 第 1 页 / 共 4 页
字号:
/*******************************************************************************

File name   : main.c

Description : Main entry point

COPYRIGHT (C) STMicroelectronics 2005.

*******************************************************************************/
/* Includes ----------------------------------------------------------------- */

#include <stdarg.h>
#include <stdio.h>
#include <string.h>

#include "stddefs.h"
#include "stlite.h"
#include "stdevice.h"
#include "stcommon.h"
#include "statapi.h"
#include "stavmem.h"
#include "stboot.h"
#include "stdenc.h"
#include "stevt.h"
#include "stmerge.h"
#include "stpccrd.h"
#include "stpod.h"
#include "stsmart.h"
#include "stsys.h"
#include "sttbx.h"
#include "stttx.h"
#include "testtool.h"

#include "sections.h"
#include "debug.h"
#include "irblast.h"
#include "filter.h"
#include "lists.h"

#if defined(TESTTOOL)
	#include "../../../src/dumpreg/reg_name/ckg_treg.h"
	#include "../../../src/dumpreg/reg_name/audio_treg.h"
	#include "../../../src/dumpreg/reg_name/gamma_treg.h"
	#include "../../../src/dumpreg/reg_name/vos_treg.h"
	/*#include "../../../src/dumpreg/reg_name/sdin_treg.h"*/
	#include "../../../src/dumpreg/reg_name/video_treg.h"
	#include "../../../src/dumpreg/reg_name/hdcp_treg.h"
	#include "../../../src/dumpreg/reg_name/hdmi_treg.h"
	/*#include "../../../src/dumpreg/reg_name/hddi_treg.h"*/
	#include "../../../src/dumpreg/reg_name/dvp_treg.h"
/*	#include "../../../src/dumpreg/reg_name/i2c_treg.h"*/
	#include "../../../src/dumpreg/reg_name/ir_blaster_treg.h"
	#include "../../../src/dumpreg/reg_name/lpm_treg.h"
	#include "../../../src/dumpreg/reg_name/maf_treg.h"
	#include "../../../src/dumpreg/reg_name/pwm_treg.h"
	#include "../../../src/dumpreg/reg_name/smart_treg.h"
	#include "../../../src/dumpreg/reg_name/uart_treg.h"
	#include "../../../src/dumpreg/reg_name/pio_treg.h"
#endif

/* GLOBAL_DATA is set only one time here to define some global data           */
#define GLOBAL_DATA
#include "app_data.h"
#include "pio.h"
#include "aud.h"
#include "blit.h"
#include "gxobj.h"
#include "evt.h"
#include "evt.h"
#include "i2c.h"
#include "tsmerge.h"
#include "fdma.h"
#include "st_pti.h"
#include "uart.h"
#include "tbx.h"
#include "gutil.h"
#include "generic.h"
#include "vid.h"

#ifdef TRACE_UART
 #include "trace.h"
#endif

/* Definitions -------------------------------------------------------------- */

#define __FRONTEND     	"STi7710"
#define __BACKEND      	"STi7710"
#define __PLATFORM     	"MB391"


#ifdef TRACE_UART
extern STUART_Handle_t    TraceUartHandle;
#endif

#if 0 // EXT_SHARE
/* ICACHE & DCACHE are configured by makefile (Enabled if DEBUG set)          */
STBOOT_DCache_Area_t DCacheMap[] = {
#ifdef DCACHE_ENABLE
    { (U32 *)FLASH_BANK_0_BASE_ADDRESS, (U32*)(FLASH_BANK_0_BASE_ADDRESS+0x7FFFFF) },
#if defined(CACHEABLE_BASE_ADDRESS)
    { (U32 *)CACHEABLE_BASE_ADDRESS, (U32 *)CACHEABLE_STOP_ADDRESS },
#endif
#endif
    { NULL, NULL }
};
#endif
static	  U32 ClockFrequency = 0;

#if 1 // EXT_SHARE
extern ST_ClockInfo_t      	ST_ClockInfo;//temp
#else
ST_ClockInfo_t      	ST_ClockInfo;
ST_DeviceName_t  	FDMA_DeviceName[FDMA_INST] = {"FDMA0"};
#endif
ST_DeviceName_t 		EVT_DeviceName[] = {"EVT_BACK"};

/* Our Video, Gfx & Audio sources could be placed at different locations       */
/* so we introduce a $REF parameter which would be replaced by the DVD_REF     */
/* define value (this value is set at compile time).                           */
char STDM_ReferencePath[255];


/* Functions prototypes ----------------------------------------------------- */

/* Extern Functions prototypes ---------------------------------------------- */

/* Extern Revision functions, defined here to avoid a lot of include          */
extern ST_Revision_t STATAPI_GetRevision(void);
extern ST_Revision_t STAUD_GetRevision(void);
extern ST_Revision_t STAVMEM_GetRevision(void);
extern ST_Revision_t STBLAST_GetRevision(void);
extern ST_Revision_t STBLIT_GetRevision(void);
extern ST_Revision_t STBOOT_GetRevision(void);
extern ST_Revision_t STCC_GetRevision(void);
extern ST_Revision_t STCLKRV_GetRevision(void);
extern ST_Revision_t STDENC_GetRevision(void);
extern ST_Revision_t STEVT_GetRevision(void);
extern ST_Revision_t STFDMA_GetRevision(void);
extern ST_Revision_t STFLASH_GetRevision(void);
extern ST_Revision_t STGXOBJ_GetRevision(void);
extern ST_Revision_t STHDMI_GetRevision(void);
extern ST_Revision_t STI2C_GetRevision(void);
extern ST_Revision_t STLAYER_GetRevision(void);
extern ST_Revision_t STMERGE_GetRevision(void);
extern ST_Revision_t STOS_GetRevision(void);
extern ST_Revision_t STPCCRD_GetRevision(void);
extern ST_Revision_t STPIO_GetRevision(void);
extern ST_Revision_t STPOD_GetRevision(void);
extern ST_Revision_t STPTI_GetRevision(void);
extern ST_Revision_t STSMART_GetRevision(void);
extern ST_Revision_t STTBX_GetRevision(void);
extern ST_Revision_t STTST_GetRevision(void);
extern ST_Revision_t STTTX_GetRevision(void);
extern ST_Revision_t STTUNER_GetRevision(void);
extern ST_Revision_t STUART_GetRevision(void);
extern ST_Revision_t STVBI_GetRevision(void);
extern ST_Revision_t STVID_GetRevision(void);
extern ST_Revision_t STVIN_GetRevision(void);
extern ST_Revision_t STVMIX_GetRevision(void);
extern ST_Revision_t STVOUT_GetRevision(void);
extern ST_Revision_t STVTG_GetRevision(void);


extern BOOL API_InitCommand(void);
extern BOOL DENC_InitCommand(void);
extern BOOL GENERIC_InitCommand(void);
extern BOOL VTG_InitCommand(void);
extern BOOL VOUT_InitCommand(void);
extern BOOL LAYER_InitCommand(void);
extern BOOL VMIX_InitCommand(void);
extern BOOL VID_InitCommand(void);
extern BOOL CLKRV_InitCommand(void);
extern BOOL DISP_InitCommand(void);
extern BOOL I2C_InitCommand(void);
extern BOOL VIN_InitCommand(void);
extern BOOL HDMI_InitCommand(void);
extern BOOL VBI_InitCommand(void);


#if defined(ST_PSIP)
	extern BOOL Register_ZPSIPCommands( void );
#endif

extern ST_ErrorCode_t TestApplication(void);

/* Functions ---------------------------------------------------------------- */

/*------------------------------------------------------------------------------
 * Function : AVMEM_Init
 *            AVMEM Init & Open functions
 * Input    : None
 * Output   :
 * Return   : Error Code
 * -------------------------------------------------------------------------- */
#if 0// EXT_SHARE
static ST_ErrorCode_t AVMEM_Init( void )
{
    ST_ErrorCode_t                       ErrCode;
    STAVMEM_InitParams_t                 InitAvmem;
    STAVMEM_SharedMemoryVirtualMapping_t VirtualMapping;
    STAVMEM_MemoryRange_t                WorkIn[1];
    STAVMEM_CreatePartitionParams_t      CreateParams;

    /* Virtual memory configuration                                           */
    VirtualMapping.PhysicalAddressSeenFromCPU_p    = (void *) AVMEM_BASE_ADDRESS;
    VirtualMapping.PhysicalAddressSeenFromDevice_p = (void *) AVMEM_BASE_ADDRESS;
	VirtualMapping.PhysicalAddressSeenFromDevice2_p = (void *) AVMEM_BASE_ADDRESS;
    VirtualMapping.VirtualBaseAddress_p            = (void *) AVMEM_BASE_ADDRESS;
    VirtualMapping.VirtualSize                     = AVMEM_SIZE;
    VirtualMapping.VirtualWindowOffset             = 0;
    VirtualMapping.VirtualWindowSize               = AVMEM_SIZE;

    /* Setup initialisation parameters                                        */
    /* Note : Max block should be optimized. Use old working values ...       */
    InitAvmem.DeviceType          = STAVMEM_DEVICE_TYPE_VIRTUAL;
    InitAvmem.CPUPartition_p      = SystemPartition;
	InitAvmem.NCachePartition_p   = NcachePartition;
    InitAvmem.MaxPartitions       = 1;
    InitAvmem.MaxBlocks           = 58;    /* video: 1 bits buffer + 4 frame buffers
                                              tests video: 2 dest buffer
                                              audio: 1 bits buffer
                                              graphics : 50 */
	InitAvmem.MaxNumberOfMemoryMapRanges = 1; /* because each partition has a single range here */
    InitAvmem.MaxForbiddenRanges  = 3;
    InitAvmem.MaxForbiddenBorders = 3;  /* video will use one forbidden border*/

    /* Memory map range is the whole SDRAM DDR                                */
    InitAvmem.MaxNumberOfMemoryMapRanges = 1;
    CreateParams.PartitionRanges_p       = &WorkIn[0];
    CreateParams.NumberOfPartitionRanges = 1;
    WorkIn[0].StartAddr_p             = (void *)(AVMEM_BASE_ADDRESS);
    WorkIn[0].StopAddr_p              = (void *)(AVMEM_BASE_ADDRESS + AVMEM_SIZE - 1);

    InitAvmem.OptimisedMemAccessStrategy_p = NULL; /* No optimised access */
    InitAvmem.BlockMoveDmaBaseAddr_p       = NULL;
    InitAvmem.CacheBaseAddr_p              = (void *)CACHE_BASE_ADDRESS;
    InitAvmem.VideoBaseAddr_p              = (void *)VIDEO_BASE_ADDRESS; /*NULL*/ /* No DMA Block Mode */;

    InitAvmem.SharedMemoryVirtualMapping_p = &VirtualMapping;

    /* Useless since the virtual memory use                                   */
    InitAvmem.SDRAMBaseAddr_p = (void *)AVMEM_BASE_ADDRESS;;
    InitAvmem.SDRAMSize       = AVMEM_SIZE;

    InitAvmem.DCachedRanges_p       = (STAVMEM_MemoryRange_t *) DCacheMap;
    InitAvmem.NumberOfDCachedRanges = (sizeof(DCacheMap) / sizeof(STBOOT_DCache_Area_t)) - 1;

    /* Now initialise AVMEM and open a handle                                 */
    ErrCode = STAVMEM_Init(AVMEMDeviceName, &InitAvmem);
    if (ErrCode != ST_NO_ERROR)
    {
        STTBX_Report((STTBX_REPORT_LEVEL_ERROR, "STAVMEM_Init()=%s",
                      GetErrorText(ErrCode)));
    }
    else
    {
        STTBX_Report((STTBX_REPORT_LEVEL_INFO, "STAVMEM_Init()=%s",
                      GetErrorText(ErrCode)));
        /* Create a partition                                                 */
        ErrCode = STAVMEM_CreatePartition(AVMEMDeviceName, &CreateParams,
                                          &AvmemPartition);
        if (ErrCode != ST_NO_ERROR)
        {
            STTBX_Report((STTBX_REPORT_LEVEL_ERROR, "STAVMEM_CreatePartition()=%s",
                          GetErrorText(ErrCode)));
        }
        else
        {
            STTBX_Report((STTBX_REPORT_LEVEL_INFO, "STAVMEM_CreatePartition()=%s",
                          GetErrorText(ErrCode)));
        }
    }

    return ( ErrCode );

} /* AVMEM_Init () */

ST_ErrorCode_t BOOT_Init(void)
{
	ST_ErrorCode_t Error;
	STBOOT_InitParams_t     stboot_InitParams;

	/* Initialize stboot */
#ifndef ICACHE_ENABLE
	stboot_InitParams.ICacheEnabled             = FALSE;
#else
	stboot_InitParams.ICacheEnabled             = TRUE;
#endif

#ifndef DCACHE_ENABLE
	stboot_InitParams.DCacheMap                 = NULL;
#else
	stboot_InitParams.DCacheMap                 = DCacheMap;
#endif

	stboot_InitParams.BackendType.DeviceType    = STBOOT_DEVICE_UNKNOWN;
	stboot_InitParams.BackendType.MajorRevision = STBOOT_REVISION_UNKNOWN;
	stboot_InitParams.BackendType.MinorRevision = STBOOT_REVISION_UNKNOWN;
	stboot_InitParams.CacheBaseAddress          = (U32 *)CACHE_BASE_ADDRESS;
	stboot_InitParams.MemorySize                = (STBOOT_DramMemorySize_t)SDRAM_SIZE;
	stboot_InitParams.SDRAMFrequency            = SDRAM_FREQUENCY;

	/* Initialize the boot driver */
	Error = STBOOT_Init( "STBOOT:0", &stboot_InitParams );

	if( ST_NO_ERROR != Error)
	{
		/*STTBX is not initialized*/
		printf("BOOT ERROR\n");
	}
	LOCAL_PRINT(("STBOOT_Init()=%s\n",GetErrorText(Error)));

	return Error;
} /* BOOT_Setup() */

/*-------------------------------------------------------------------------
 * Function : FDMA_Setup
 * Input    : None
 * Output   :
 * Return   : Error Code
 * ----------------------------------------------------------------------*/
ST_ErrorCode_t FDMA_Init(void)
{
    ST_ErrorCode_t       ST_ErrorCode;
    STFDMA_InitParams_t  STFDMA_InitParams;
    int Instance;

    for ( Instance = 0; Instance < FDMA_INST; Instance++ )
    {
        STFDMA_InitParams.DeviceType          = FDMA_DEVICE_TYPE;
        STFDMA_InitParams.DriverPartition_p   = SystemPartition;
        STFDMA_InitParams.NCachePartition_p   = NcachePartition;
        STFDMA_InitParams.BaseAddress_p       = (void *)FDMA_BASE_ADDRESS;
        STFDMA_InitParams.InterruptNumber     = FDMA_INTERRUPT;
        STFDMA_InitParams.InterruptLevel      = 14;
        STFDMA_InitParams.NumberCallbackTasks = 0;
        STFDMA_InitParams.ClockTicksPerSecond = ST_GetClocksPerSecond();
		STFDMA_InitParams.FDMABlock 		  = STFDMA_1;  /* comes with STFDMA2.0.0*/

        ST_ErrorCode = STFDMA_Init(FDMA_DeviceName[Instance], &STFDMA_InitParams);
        LOCAL_PRINT(("STFDMA_Init()=%s\n",GetErrorText(ST_ErrorCode)));

    }   /* for(Instance) */

    return( ST_ErrorCode );
}
#endif
/*-----------------------------------------------------------------------------
 * Function : SetRefPath
 *            Set ReferencePath value from DVD_REF define
 *            DVD_REF is used to store path to test database : Audio/Video/Graphics
 * Input    :
 * Output   :
 * Return   : 0 if no error, 1 on error
 * -------------------------------------------------------------------------- */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -