亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ej_bbs.cpp

?? ADI blackfin DSP的基于device friver的jpeg壓縮算法
?? CPP
字號:
#include <string.h>
#include "EJ_BBS.h"
#include "initialize.h"
#include "callback.h"
#include "WatchDog.h"
#include "creat_heap.h"
#include "set_cache.h"
#include "cplb_tables.h"

EJ_BBS::EJ_BBS()
{
	m_pDMAMgrData 	= NULL;
	m_pDevMgrData 	= NULL;
	m_pDCBMgrData 	= NULL;
	m_pIntMgrData   = NULL;
	m_DCBManagerHandle 		= NULL;
	m_DeviceManagerHandle 	= NULL;
	m_DMAManagerHandle    	= NULL;

#if defined (__ADSP_TETON__)
	m_ppiDeviceHandle_1		= NULL;
	m_ppiDeviceHandle_2		= NULL;
	m_mdma_1_Handle0		= NULL;
	m_mdma_1_Handle1		= NULL;
#else
	m_ppiDeviceHandle		= NULL;
	m_mdmaHandle0			= NULL;
	m_mdmaHandle1			= NULL;
#endif

	m_userid				= 3;
}

EJ_BBS::~EJ_BBS()
{
	// close ppi device
#if defined(__ADSP_TETON__)	
	if(m_ppiDeviceHandle_1)
	{
		adi_dev_Close(m_ppiDeviceHandle_1);
		m_ppiDeviceHandle_1 = NULL;
	}
	if(m_ppiDeviceHandle_2)
	{
		adi_dev_Close(m_ppiDeviceHandle_2);
		m_ppiDeviceHandle_2 = NULL;
	}
#else
	if(m_ppiDeviceHandle)
	{
		adi_dev_Close(m_ppiDeviceHandle);
		m_ppiDeviceHandle = NULL;
	}
#endif
	// close the Device Manager
	if(m_DeviceManagerHandle)
	{
		adi_dev_Terminate(m_DeviceManagerHandle);
		m_DeviceManagerHandle = NULL;
	}
	
	// close down the DMA Manager
	if(m_DMAManagerHandle)
	{
		adi_dma_Terminate(m_DMAManagerHandle);
		m_DMAManagerHandle = NULL;
	}
	// close down the Deferred Callback Manager
	if(m_DCBManagerHandle)
	{
		adi_dcb_Terminate();
		m_DCBManagerHandle = NULL;
	}
	// close down the Interrupt Manager
	adi_int_Terminate();

}

void EJ_BBS::init_core(void)
{
	init_hardware();
//	setup_watchdog();
	
}

RESULT EJ_BBS::init_system_service(u8 *pMemoryForSysService, size_t *MemorySizeUsed , 
									const size_t DmaChannelNum, const size_t IntSecHandlerNum, const size_t DcbCallbackNum)
{
	u32 ResponseCount = 0;
	u8 *pAddr = pMemoryForSysService;
	size_t memSize = 0;
	u32 rst = 0;
	
	// check parameters	
	if(pMemoryForSysService == NULL)
		return EJ_ERR_INVALID_PARAM;

	*MemorySizeUsed = 0;
	
	// init interrupt manager
	if(IntSecHandlerNum == 0)
	{
		adi_int_Init(NULL, 0, &ResponseCount, NULL);
	}
	else
	{
		m_pIntMgrData = pAddr;
		memSize = ADI_INT_SECONDARY_MEMORY*IntSecHandlerNum;
		memset(m_pIntMgrData, 0, memSize);
		
		adi_int_Init((void*)m_pIntMgrData, memSize, &ResponseCount, NULL);
		pAddr +=  memSize;
		*MemorySizeUsed += memSize;
	}
	
	// hook error handler
	rst = adi_int_CECHook(3, ExceptionHandler, NULL, FALSE);

	rst = adi_int_CECHook(5, HWErrorHandler, NULL, FALSE);
	
	if(rst)
		return EJ_ERR_UNKNOWN;

	// initialize the Deferred Callback Manager and setup a queue
	if(DcbCallbackNum != 0)
	{
		m_pDCBMgrData = pAddr;
		memSize = ADI_DCB_QUEUE_SIZE + ADI_DCB_ENTRY_SIZE*DcbCallbackNum;
		memset(m_pDCBMgrData, 0, memSize);
		
		rst = adi_dcb_Init(m_pDCBMgrData, ADI_DCB_QUEUE_SIZE, &ResponseCount, NULL);
		if(rst)
			return EJ_ERR_UNKNOWN;
		rst = adi_dcb_Open(14, (void*)((u8*)m_pDCBMgrData+ADI_DCB_QUEUE_SIZE),  ADI_DCB_ENTRY_SIZE*DcbCallbackNum, &ResponseCount, &m_DCBManagerHandle);
		if(rst)
			return EJ_ERR_UNKNOWN;
		pAddr += memSize;
		*MemorySizeUsed += memSize;
	}

	// initialize the DMA Manager
	m_pDMAMgrData = pAddr;
	memSize = ADI_DMA_BASE_MEMORY + ADI_DMA_CHANNEL_MEMORY * DmaChannelNum;
	pAddr += memSize;
	*MemorySizeUsed += memSize;
	
	memset(m_pDMAMgrData, 0, memSize);
	
	rst = adi_dma_Init((void*)m_pDMAMgrData, memSize, &ResponseCount, &m_DMAManagerHandle, NULL);
	if(rst)
		return EJ_ERR_UNKNOWN;
	
	return EJ_ERR_NONE;
}

RESULT EJ_BBS::init_device_driver(u8 *pMemoryForDDR, size_t *MemorySizeUsed , const size_t DevNum)
{
	u32 ResponseCount = 0;
	u32 rst =0;
	// check parameters	
	if(pMemoryForDDR == NULL)
		return EJ_ERR_INVALID_PARAM;

	
	
	m_pDevMgrData = pMemoryForDDR;

	*MemorySizeUsed = ADI_DEV_BASE_MEMORY + (ADI_DEV_DEVICE_MEMORY * DevNum);
	
	memset(m_pDevMgrData, 0, *MemorySizeUsed);
	rst = adi_dev_Init(m_pDevMgrData, *MemorySizeUsed, &ResponseCount, &m_DeviceManagerHandle, NULL);
	if(rst)
		return EJ_ERR_UNKNOWN;

	return EJ_ERR_NONE;
}

RESULT EJ_BBS::config_device(u16 devType, ADI_DEV_CMD_VALUE_PAIR *configurationTable,  ADI_DCB_CALLBACK_FN ClientCallback)
{
	u32 rst = 0;
	switch (devType) 
	{
#if defined(__ADSP_EDINBURGH__) || defined(__ADSP_BRAEMAR__)
		case DEV_PPI:
		{
			// open the PPI driver for input
			rst = adi_dev_Open(m_DeviceManagerHandle, &ADIPPIEntryPoint, DECODER_PPI, this, 
				&m_ppiDeviceHandle, ADI_DEV_DIRECTION_INBOUND, m_DMAManagerHandle, m_DCBManagerHandle, ClientCallback);
			if(rst)
				return EJ_ERR_UNKNOWN;
			
			// configure the PPI driver with the values from the inbound configuration table
			rst = adi_dev_Control(m_ppiDeviceHandle, ADI_DEV_CMD_TABLE, configurationTable);
			if(rst)
				return EJ_ERR_UNKNOWN;
		}
		break;
#endif
//for bf561, not implement yet
#if defined(__ADSP_TETON__)	
	case DEV_PPI1:	//ppi1 for inbound
		{
		    rst = adi_dev_Open(m_DeviceManagerHandle, &ADIPPIEntryPoint, DECODER_PPI, this, 
				&m_ppiDeviceHandle_1, ADI_DEV_DIRECTION_INBOUND, m_DMAManagerHandle, m_DCBManagerHandle, ClientCallback);
			if(rst)
				return EJ_ERR_UNKNOWN;
			
			// configure the PPI driver with the values from the inbound configuration table
			rst = adi_dev_Control(m_ppiDeviceHandle_1, ADI_DEV_CMD_TABLE, configurationTable);
			if(rst)
				return EJ_ERR_UNKNOWN;
				
		}
		break;
	case DEV_PPI2:	//ppi2 for outbound
		{
		    rst = adi_dev_Open(m_DeviceManagerHandle, &ADIPPIEntryPoint, ENCODER_PPI, this, 
				&m_ppiDeviceHandle_2, ADI_DEV_DIRECTION_INBOUND, m_DMAManagerHandle, m_DCBManagerHandle, ClientCallback);
			if(rst)
				return EJ_ERR_UNKNOWN;
			
			// configure the PPI driver with the values from the inbound configuration table
			rst = adi_dev_Control(m_ppiDeviceHandle_2, ADI_DEV_CMD_TABLE, configurationTable);
			if(rst)
				return EJ_ERR_UNKNOWN;
		}
		break;
#endif
		default:
			return EJ_ERR_UNSUPPORTED;
	}

	return EJ_ERR_NONE;
}

RESULT EJ_BBS::set_dev_buffer(u16 devType, ADI_DEV_BUFFER * devBuffer, ADI_DEV_BUFFER_TYPE BufferType)
{

	if(!devBuffer)
		return EJ_ERR_INVALID_PARAM;

	switch (devType) 
	{
#if defined(__ADSP_EDINBURGH__) || defined(__ADSP_BRAEMAR__)
		case DEV_PPI:
		{
			if(!m_ppiDeviceHandle)
				return EJ_ERR_BAD_STATE;	//not open !

			adi_dev_Read(m_ppiDeviceHandle, BufferType, devBuffer);
			
		}
#endif
 //for bf561
#if defined(__ADSP_TETON__)	
 		case DEV_PPI1:
		{
			if(!m_ppiDeviceHandle_1)
				return EJ_ERR_BAD_STATE;	//not open !

			adi_dev_Read(m_ppiDeviceHandle_1, BufferType, devBuffer);
		}
		break;
		case DEV_PPI2:
		{
			if(!m_ppiDeviceHandle_2)
				return EJ_ERR_BAD_STATE;	//not open !

			adi_dev_Read(m_ppiDeviceHandle_2, BufferType, devBuffer);
		}
		break;
#endif
		default:
			break;
	}
	return EJ_ERR_NONE;
}

void EJ_BBS::set_dev_start(u16 devType )
{

	switch (devType) 
	{
#if defined(__ADSP_EDINBURGH__) || defined(__ADSP_BRAEMAR__)
		case DEV_PPI:
		{
			if(!m_ppiDeviceHandle)
				return;	//not open !

			adi_dev_Control(m_ppiDeviceHandle, ADI_DEV_CMD_SET_DATAFLOW, (void *)TRUE);	
		}
#endif
 //for bf561
#if defined(__ADSP_TETON__)	
 		case DEV_PPI1:
 		{
 			if(!m_ppiDeviceHandle_1)
				return;	//not open !

			adi_dev_Control(m_ppiDeviceHandle_1, ADI_DEV_CMD_SET_DATAFLOW, (void *)TRUE);	
 		}
 		break;
 		case DEV_PPI2:
 		{
 			if(!m_ppiDeviceHandle_2)
				return;	//not open !

			adi_dev_Control(m_ppiDeviceHandle_2, ADI_DEV_CMD_SET_DATAFLOW, (void *)TRUE);	
 		}
 		break;
#endif
		default:
		 	break;
	}
	return;


}

void EJ_BBS::set_dev_stop(u16 devType )
{

	switch (devType) 
	{
#if defined(__ADSP_EDINBURGH__) || defined(__ADSP_BRAEMAR__)
		case DEV_PPI:
		{
			if(!m_ppiDeviceHandle)
				return;	//not open !

			adi_dev_Control(m_ppiDeviceHandle, ADI_DEV_CMD_SET_DATAFLOW, (void *)FALSE);	
		}
#endif
 //for bf561
#if defined(__ADSP_TETON__)	
 		case DEV_PPI1:
 		{
 			if(!m_ppiDeviceHandle_1)
				return;	//not open !

			adi_dev_Control(m_ppiDeviceHandle_1, ADI_DEV_CMD_SET_DATAFLOW, (void *)FALSE);	
 		}
 		break;
 		case DEV_PPI2:
 		{
 			if(!m_ppiDeviceHandle_2)
				return;	//not open !

			adi_dev_Control(m_ppiDeviceHandle_2, ADI_DEV_CMD_SET_DATAFLOW, (void *)FALSE);	
 		}
 		break;
#endif
		default:
		 	break;
	}
	return;


}

RESULT EJ_BBS::config_memdma(ADI_DMA_STREAM_ID StreamID)
{
	u32 rst = 0;
	
#if defined(__ADSP_EDINBURGH__) || defined(__ADSP_BRAEMAR__)
	// if stream 0
	if(StreamID == ADI_DMA_MDMA_0)
	{
		rst = adi_dma_MemoryOpen(m_DMAManagerHandle, StreamID, this, &m_mdmaHandle0, NULL);
	}
	// if stream 1
	if(StreamID == ADI_DMA_MDMA_1)
	{
		rst = adi_dma_MemoryOpen(m_DMAManagerHandle, StreamID, this, &m_mdmaHandle1, NULL);
	}
#endif

#if defined(__ADSPBF561__)

	// dual core processors: use different streams for each core, which one to use for each core is arbitrary.
	if( adi_core_id() == 0)
	{
	    if(StreamID == ADI_DMA_MDMA1_0)
	    {
	        rst = adi_dma_MemoryOpen(m_DMAManagerHandle, StreamID, this, &m_mdma_1_Handle0, NULL);
	        
	    }
	    else if(StreamID == ADI_DMA_MDMA1_1)
	    {
	        rst = adi_dma_MemoryOpen(m_DMAManagerHandle, StreamID, this, &m_mdma_1_Handle1, NULL);

	    }
	    else
	    	return EJ_ERR_UNKNOWN;
	}
	else
	{
	    if(StreamID == ADI_DMA_MDMA2_0)
	    {
	        rst = adi_dma_MemoryOpen(m_DMAManagerHandle, StreamID, this, &m_mdma_2_Handle0, NULL);
	        
	    }
	    else if(StreamID == ADI_DMA_MDMA2_1)
	    {
	        rst = adi_dma_MemoryOpen(m_DMAManagerHandle, StreamID, this, &m_mdma_2_Handle1, NULL);

	    }
	    else
	    	return EJ_ERR_UNKNOWN;
	}
	
#endif

	if(rst)
		return EJ_ERR_UNKNOWN;
	
	return EJ_ERR_NONE;

}

RESULT EJ_BBS::start_memdma(ADI_DMA_STREAM_ID StreamID, ADI_DMA_2D_TRANSFER *pDest, ADI_DMA_2D_TRANSFER *pSrc, 
		u32 ElementWidth , ADI_DCB_CALLBACK_FN	ClientCallback)
{
	u32 rst = 0;
	
#if defined(__ADSP_EDINBURGH__) || defined(__ADSP_BRAEMAR__)
	if(StreamID == ADI_DMA_MDMA_0)
	{
		rst = adi_dma_MemoryCopy2D(m_mdmaHandle0,pDest, pSrc, ElementWidth, ClientCallback);
	}
	// if stream 1
	if(StreamID == ADI_DMA_MDMA_1)
	{
		rst = adi_dma_MemoryCopy2D(m_mdmaHandle1,pDest, pSrc, ElementWidth, ClientCallback);
	}
#endif

#if defined(__ADSPBF561__)
	// dual core processors: use different streams for each core, which one to use for each core is arbitrary.
	if( adi_core_id() == 0)
	{
	    if(StreamID == ADI_DMA_MDMA1_0)
	    {
	        rst = adi_dma_MemoryCopy2D(m_mdma_1_Handle0, pDest, pSrc, ElementWidth, ClientCallback);
	    }
	    else if(StreamID == ADI_DMA_MDMA1_1)
	    {
	        adi_dma_MemoryCopy2D(m_mdma_1_Handle1, pDest, pSrc, ElementWidth, ClientCallback);
	    }
	    else
	    	return EJ_ERR_UNKNOWN;
	}
	else
	{
	    if(StreamID == ADI_DMA_MDMA2_0)
	    {
	        rst = adi_dma_MemoryCopy2D(m_mdma_2_Handle0, pDest, pSrc, ElementWidth, ClientCallback);
	    }
	    else if(StreamID == ADI_DMA_MDMA2_1)
	    {
	        adi_dma_MemoryCopy2D(m_mdma_2_Handle1, pDest, pSrc, ElementWidth, ClientCallback);
	    }
	    else
	    	return EJ_ERR_UNKNOWN;
	}

#endif

	if(rst)
		return EJ_ERR_UNKNOWN;
	return EJ_ERR_NONE;
}



int EJ_BBS::creat_alternate_heap(void* heap_base_addr, u32 heap_size)
{
    int index = -1;
    
	
	index = creat_heaps(heap_base_addr, heap_size, m_userid);
	m_userid++;
	
	return index;
}		

void EJ_BBS::set_data_cache()
{
    disable_data_cache();
	configure_data_cache_cplbs(dcplbs_table);
	enable_data_cache();
}

void EJ_BBS::set_instruction_cache()
{
    disable_instruction_cache();
	configure_instruction_cache_cplbs(icplbs_table);
	enable_instruction_cache();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲激情第一区| 亚洲成人一区二区在线观看| 久久激五月天综合精品| 国产精品久久免费看| 日韩和欧美一区二区三区| 亚洲妇女屁股眼交7| 美女视频黄频大全不卡视频在线播放| 激情欧美一区二区| 欧美精品丝袜久久久中文字幕| 欧美在线视频日韩| 亚洲精品少妇30p| 91日韩在线专区| 亚洲日本va在线观看| 91久久精品网| 日韩精品一二三区| 久久一二三国产| 色综合天天在线| 丝袜脚交一区二区| 中文字幕免费在线观看视频一区| 成人白浆超碰人人人人| 午夜视频一区二区三区| 精品国产成人在线影院| www.欧美精品一二区| 天天av天天翘天天综合网| 精品美女一区二区三区| 欧美性受xxxx| 国产福利91精品一区二区三区| 综合激情成人伊人| 欧美va亚洲va| 欧美videos中文字幕| 日本韩国欧美一区| 欧美一区二区网站| 久久se这里有精品| 欧美成人猛片aaaaaaa| 亚洲第一狼人社区| 欧美日韩1区2区| 国产一区二区伦理片| 国产精品灌醉下药二区| 精品福利一区二区三区| 欧美日韩中文精品| 日本韩国精品在线| 五月激情综合婷婷| 精品视频在线看| 亚洲第一二三四区| 色综合一区二区| 免费成人在线播放| 欧美xxxxx裸体时装秀| 成人av高清在线| 国产成人精品亚洲午夜麻豆| 久久成人免费日本黄色| 天堂影院一区二区| 免费日本视频一区| 奇米综合一区二区三区精品视频 | 精品一区二区三区蜜桃| 视频在线在亚洲| 青青草成人在线观看| 日韩成人一级片| 久久精品国产亚洲a| 老司机午夜精品| 国产98色在线|日韩| 国产99久久久国产精品免费看| 国产成人精品免费网站| 99热在这里有精品免费| 93久久精品日日躁夜夜躁欧美| av电影天堂一区二区在线| 91行情网站电视在线观看高清版| 欧美午夜影院一区| 精品sm捆绑视频| 亚洲国产精品国自产拍av| 亚洲精品视频一区二区| 亚洲成人免费影院| 国产精品一区免费在线观看| 91丨九色porny丨蝌蚪| 欧美日韩视频不卡| 久久精品人人做人人爽人人| 亚洲激情校园春色| 狠狠狠色丁香婷婷综合久久五月| 成人午夜视频在线观看| 欧美色中文字幕| 久久久久久久综合日本| 日韩av在线免费观看不卡| 丰满白嫩尤物一区二区| 欧美丰满少妇xxxxx高潮对白| 国产欧美日韩不卡| 国产一区二区在线看| 欧美日韩亚洲丝袜制服| 亚洲天堂免费在线观看视频| 激情综合五月婷婷| 51精品国自产在线| 亚洲免费在线视频一区 二区| 韩国一区二区在线观看| 91精品啪在线观看国产60岁| 亚洲手机成人高清视频| 成人自拍视频在线| 久久一留热品黄| 激情成人综合网| 欧美大片拔萝卜| 午夜精品成人在线视频| 在线观看区一区二| 亚洲一区欧美一区| 在线观看91视频| 亚洲bdsm女犯bdsm网站| 欧美三级日韩在线| 日本特黄久久久高潮 | 国产福利一区二区三区| 亚洲精品一区二区三区福利| 国产一区二区三区免费| 久久久久国色av免费看影院| 蜜桃视频第一区免费观看| 日韩欧美国产wwwww| 国产成人在线影院| 亚洲天堂免费看| 欧美精品欧美精品系列| 久久精品国产亚洲一区二区三区| 337p粉嫩大胆色噜噜噜噜亚洲| 国产91精品免费| 一区二区三区资源| 日韩欧美在线影院| 成人福利在线看| 亚洲国产日韩av| 久久婷婷成人综合色| 97精品电影院| 久久99精品国产麻豆婷婷洗澡| 中文一区二区完整视频在线观看| 91啪亚洲精品| 国产综合成人久久大片91| 一区二区在线看| 国产日韩欧美精品综合| 欧美日韩dvd在线观看| proumb性欧美在线观看| 久久97超碰色| 日韩高清在线观看| 一区二区在线免费| 国产精品午夜在线观看| 久久综合成人精品亚洲另类欧美 | 成人精品gif动图一区| 免费视频最近日韩| 五月天网站亚洲| 亚洲欧美一区二区久久| 亚洲国产精品激情在线观看| 精品国产一区二区亚洲人成毛片| 欧美午夜寂寞影院| 91福利国产成人精品照片| 国产激情91久久精品导航| 久久国产欧美日韩精品| 亚洲国产日韩在线一区模特| 亚洲男同性恋视频| 精品三级在线观看| 日韩一区二区免费在线电影| 这里是久久伊人| 欧美一区二区三区在线观看视频| 色国产精品一区在线观看| 色综合视频在线观看| 色婷婷国产精品| 91猫先生在线| 欧美日韩精品一区二区在线播放 | 99精品视频一区| 色婷婷综合久久久久中文一区二区| 一本久久a久久精品亚洲| 成人av片在线观看| 亚洲高清久久久| 久久九九久久九九| 欧美精品一区二区久久婷婷 | 色偷偷一区二区三区| 欧美性xxxxxxxx| 精品国产三级a在线观看| 国产农村妇女精品| 亚洲国产裸拍裸体视频在线观看乱了| 五月天精品一区二区三区| 国产在线精品一区二区| 懂色av中文一区二区三区| 欧美丰满一区二区免费视频| 国产亚洲欧美一级| 污片在线观看一区二区| 国产91精品精华液一区二区三区| 91黄色在线观看| 国产区在线观看成人精品| 亚洲国产精品久久久久秋霞影院| 国产在线精品免费av| 欧美日韩国产高清一区二区三区 | 在线观看精品一区| 国产日韩精品一区二区三区在线| 日韩精品视频网| 91国内精品野花午夜精品| 久久久久久日产精品| 日韩中文字幕不卡| 欧美无砖专区一中文字| 中文字幕一区二区三区不卡在线| 老司机免费视频一区二区三区| 欧美视频中文字幕| 亚洲一区二区三区视频在线| 不卡的av网站| 国产精品毛片无遮挡高清| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 蜜桃视频在线观看一区二区| 欧美日韩一区在线| 日韩和的一区二区| 欧美精品在线一区二区三区| 爽好久久久欧美精品| 这里只有精品视频在线观看|