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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? msgqf.c

?? samsung 9908DVD源代碼,
?? C
字號(hào):
/**********************************************************************************
 * msgQF.c
 * coded by hspark@ce.cnu.ac.kr
 * date : 2001/06/23
 * modified by hjahn@ce.cnu.ac.kr
 * date : 2003/03/03
 **********************************************************************************/

#include "kernel\\mk_sys.h"
#include "kernel\\mk_sem.h"
#include "kernel\\mk_mem.h"
#include "kernel\\mk_msgQF.h"
#include "kernel\\mk_task.h"
#include "util\\mk_lib.h"

#ifdef _MK_MSGQUEUE

VOID
MK_FixedMsgQueueInitialze(VOID)
{
}

STATUS
MK_CreateFixedMsgQueue(MK_FIXED_QUEUE *pQueue, CHAR *pName, VOID *pAddr, INT Count,
					   ULONG Size, BOOLEAN Options)
{	
	STATUS	Status;
	INT		Flags;

	if(pQueue->fq_Magic == MK_MSGQF_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_CreateFixedMsgQueue() - Magic error!\n");
#endif
		return MK_ERROR;
	}
	
	Flags = MK_InterruptDisable();

	pQueue->fq_pMsgListHead = MK_NULL;
	pQueue->fq_pMsgListTail = MK_NULL;

	Status = MK_CreateBufferPool(&pQueue->fq_Pool, MK_NULL, pAddr, Count, Size+sizeof(MK_FIXED_QUEUE_MSG), Options);
	if(Status < 0)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_CreateFixedMsgQueue() - BufferPool is not created! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		MK_InterruptRestore( Flags );
		return Status;
	}

	Status = MK_CreateSemaphore(&pQueue->fq_ReceiveSemaphore, MK_NULL, 0, Options);
	if(Status < 0)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_CreateFixedMsgQueue() - Receive semaphore is not created! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		MK_InterruptRestore( Flags );
		return Status;
	}

	pQueue->fq_Magic = MK_MSGQF_MAGIC;

	MK_InterruptRestore( Flags );
	return MK_NO_ERROR;
}

ULONG
MK_GetFixedMsgQueueNeededSize(ULONG	MsgCount, ULONG Size)
{
	return MK_GetPoolNeededSize(MsgCount, (ULONG)(Size + sizeof(MK_FIXED_QUEUE_MSG)) );
}

ULONG 
MK_GetFixedMsgQueueAvailableBufferSize(MK_FIXED_QUEUE *pQueue)
{
	if(pQueue->fq_Magic != MK_MSGQF_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_GetFixedMsgQueueAvailableBufferSize() - Magic error! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return 0;
	}


	return MK_GetPoolBufferSize(&pQueue->fq_Pool) - sizeof(MK_FIXED_QUEUE_MSG);
}

INT 
MK_GetFixedMsgQueueMsgCount(MK_FIXED_QUEUE *pQueue)
{
	if(pQueue->fq_Magic != MK_MSGQF_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_GetFixedMsgQueueNsgCount() - Magic error! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return 0;
	}

	return MK_GetSemaphoreCount(&pQueue->fq_ReceiveSemaphore);
	
}

STATUS
MK_DeleteFixedMsgQueue(MK_FIXED_QUEUE *pQueue)
{
	INT Flags;

	if(pQueue->fq_Magic != MK_MSGQF_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_DeleteFixedMsgQueue() - Magic error! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return MK_RESOURCE_ERROR;
	}

	Flags = MK_InterruptDisable();

	MK_DeleteBufferPool(&pQueue->fq_Pool);
	MK_DeleteSemaphore(&pQueue->fq_ReceiveSemaphore);
	pQueue->fq_Magic = 0;

	MK_InterruptRestore( Flags );
	return MK_NO_ERROR;
}

STATUS
MK_FixedMsgQueuePend(MK_FIXED_QUEUE *pQueue, VOID *pMsg, ULONG BufSize,
					 ULONG *pLength, LONG Ticks)
{
	MK_FIXED_QUEUE_MSG *pQueueMsg;
	STATUS Status;
	INT Flags;

	if(pQueue->fq_Magic != MK_MSGQF_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_FixedMsgQueuePend() - Magic error! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return MK_RESOURCE_ERROR;
	}
	
	Flags = MK_InterruptDisable();			/* Critical Region */

	if((pQueue->fq_pMsgListHead == MK_NULL) && (pQueue->fq_ReceiveSemaphore.s_Count>0))
	*pLength = 0;
	Status = MK_SemaphorePend(&pQueue->fq_ReceiveSemaphore, Ticks);

	if( Status < 0)
	{
		*(CHAR *)(pMsg) = 0;
		*pLength = 0;
		
#if MK_DEBUG_PRINT
		//MK_InfoPrintf(MK_TASK_WARNING, "MK_FixedMsgQueuePend() - SemaphorePend result is timeout! Queue(%s)\n", pQueue->fq_Pool.bp_pName);
#endif
		MK_InterruptRestore(Flags);
		return Status;
	}

	if(pQueue->fq_pMsgListHead == MK_NULL)
	*pLength = 0;
	if(pQueue->fq_pMsgListHead == pQueue->fq_pMsgListTail)
	{
		pQueueMsg = pQueue->fq_pMsgListHead;
		pQueue->fq_pMsgListHead = MK_NULL;
		pQueue->fq_pMsgListTail = MK_NULL;
		pQueueMsg->fm_pNext = MK_NULL;
	}
	else
	{
		pQueueMsg = pQueue->fq_pMsgListHead;
		pQueue->fq_pMsgListHead = pQueueMsg->fm_pNext;
		pQueueMsg->fm_pNext = MK_NULL;
	}

	*pLength = (pQueueMsg->fm_Length <= BufSize) ? pQueueMsg->fm_Length : BufSize;
	MK_BlockCopy((CHAR *)(pMsg), (CHAR *)pQueueMsg->fm_StartOfMsg, *pLength);
	
	Status = MK_FreeBuf((VOID *)pQueueMsg);

	MK_InterruptRestore(Flags);
	return Status;
}

STATUS
MK_FixedMsgQueuePost(MK_FIXED_QUEUE *pQueue, VOID *pMsg, ULONG Length, LONG Ticks)
{
	MK_FIXED_QUEUE_MSG *pQueueMsg;
	STATUS Status;
	VOID	*pAddr;
	ULONG	MaxLength;
	ULONG	PoolLength;
	INT		Flags;

	if(pQueue->fq_Magic != MK_MSGQF_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_FixedMsgQueuePost() - Magic error! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return MK_RESOURCE_ERROR;
	}

	if(Length ==0 )
	{
#if MK_DEBUG_PRINT
		//MK_InfoPrintf(MK_TASK_WARNING, "MK_FixedMsgQueuePost() - Length must be great than zero! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return MK_ERROR;
	}

	Flags = MK_InterruptDisable();		/* Critical Region */

	Status = MK_GetBuf(&pQueue->fq_Pool, &pAddr, Ticks);

	if( Status < 0)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_FixedMsgQueuePost() - MsgQueue is not allocated buffer in buffer pool! Queue(%s)\n", pQueue->fq_Pool.bp_pName);
#endif
		MK_InterruptRestore(Flags);
		return MK_QUEUE_FULL;
	}

	pQueueMsg = (MK_FIXED_QUEUE_MSG *)pAddr;
	pQueueMsg->fm_StartOfMsg = (ULONG)pQueueMsg + sizeof(MK_FIXED_QUEUE_MSG);
	
	PoolLength = MK_GetPoolBufferSize(&pQueue->fq_Pool) - sizeof(MK_FIXED_QUEUE_MSG);
	MaxLength = ( Length <= PoolLength ) ? Length : PoolLength;
	
	MK_BlockCopy((CHAR *)pQueueMsg->fm_StartOfMsg, (CHAR *)pMsg, MaxLength);

	pQueueMsg->fm_Length = MaxLength;
	pQueueMsg->fm_pNext = MK_NULL;

	if(pQueue->fq_pMsgListHead == MK_NULL)
	{
		pQueue->fq_pMsgListHead = pQueueMsg;
		pQueue->fq_pMsgListTail = pQueueMsg;
		
	}
	else
	{
		pQueue->fq_pMsgListTail->fm_pNext = pQueueMsg;
		pQueue->fq_pMsgListTail = pQueueMsg;
		pQueueMsg->fm_pNext = MK_NULL;
	}

	Status = MK_SemaphorePost(&pQueue->fq_ReceiveSemaphore); 

	MK_InterruptRestore(Flags);
	return Status;
}

STATUS
MK_FixedMsgQueueFrontPost(MK_FIXED_QUEUE *pQueue, VOID *pMsg, ULONG Length, LONG Ticks)
{
	MK_FIXED_QUEUE_MSG *pQueueMsg;
	STATUS	Status;
	VOID	*pAddr;
	ULONG	MaxLength;
	ULONG	PoolLength;
	INT Flags;

	if(pQueue->fq_Magic != MK_MSGQF_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_FixedMsgQueuePost() - Magic error! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return MK_RESOURCE_ERROR;
	}
	if(Length ==0 )
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_FixedMsgQueuePost() - Length must be great than zero! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return MK_ERROR;
	}

	Flags = MK_InterruptDisable();		/* Critical Region */

	Status = MK_GetBuf(&pQueue->fq_Pool, &pAddr, Ticks);
	if( Status < 0)
	{
		MK_InterruptRestore(Flags);

#if MK_DEBUG_PRINT		
		MK_InfoPrintf(MK_TASK_WARNING, "MK_FixedMsgQueuePost() - MsgQueue is not allocated buffer in buffer pool! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return MK_QUEUE_FULL;
	}

	pQueueMsg = (MK_FIXED_QUEUE_MSG *)pAddr;
	pQueueMsg->fm_StartOfMsg = (ULONG)pQueueMsg + sizeof(MK_FIXED_QUEUE_MSG);
	
	PoolLength = MK_GetPoolBufferSize(&pQueue->fq_Pool);
	MaxLength = ( Length <= PoolLength ) ? Length : PoolLength;
	

	MK_BlockCopy((CHAR *)pQueueMsg->fm_StartOfMsg, (CHAR *)pMsg, MaxLength);
	
	pQueueMsg->fm_Length = MaxLength;
	pQueueMsg->fm_pNext = MK_NULL;

	if(pQueue->fq_pMsgListHead == MK_NULL)
	{
		pQueue->fq_pMsgListHead = pQueueMsg;
		pQueue->fq_pMsgListTail = pQueueMsg;
		
	}
	else
	{
		pQueueMsg->fm_pNext = pQueue->fq_pMsgListHead;
		pQueue->fq_pMsgListHead = pQueueMsg;
	}

	Status = MK_SemaphorePost(&pQueue->fq_ReceiveSemaphore); 

	MK_InterruptRestore(Flags);
	return Status;
}

/* not implemented - only MK_FixedMsgQueuePost */
STATUS
MK_FixedMsgQueueBroadcastPost(MK_FIXED_QUEUE *pQueue, VOID *pMsg, ULONG Length, LONG Ticks)
{
	MK_FIXED_QUEUE_MSG *pQueueMsg;
	STATUS	Status;
	VOID	*pAddr;
	ULONG	MaxLength;
	ULONG	PoolLength;
	INT		SuspendTasks;
	INT		Flags;

	if(pQueue->fq_Magic != MK_MSGQF_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_FixedMsgQueuePost() - Magic error! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return MK_RESOURCE_ERROR;
	}

	if(Length ==0 )
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_FixedMsgQueuePost() - Length must be great than zero! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return MK_ERROR;
	}

	Flags = MK_InterruptDisable();		/* Critical Region */

	SuspendTasks = MK_GetFixedMsgQueueMsgCount(pQueue);
	if( SuspendTasks  >= 0)
	{
		Status = MK_GetBuf(&pQueue->fq_Pool, &pAddr, Ticks);
		if( Status < 0)
		{
			MK_InterruptRestore(Flags);
		
#if MK_DEBUG_PRINT
			MK_InfoPrintf(MK_TASK_WARNING, "MK_FixedMsgQueuePost() - MsgQueue is not allocated buffer in buffer pool! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
			return MK_QUEUE_FULL;
		}

		pQueueMsg = (MK_FIXED_QUEUE_MSG *)pAddr;
		pQueueMsg->fm_StartOfMsg = (ULONG)pQueueMsg + sizeof(MK_FIXED_QUEUE_MSG);
		
		PoolLength = MK_GetPoolBufferSize(&pQueue->fq_Pool);
		MaxLength = ( Length <= PoolLength ) ? Length : PoolLength;
		

		MK_BlockCopy((CHAR *)pQueueMsg->fm_StartOfMsg, (CHAR *)pMsg, MaxLength);
		
		pQueueMsg->fm_Length = MaxLength;
		pQueueMsg->fm_pNext = MK_NULL;

		if(pQueue->fq_pMsgListHead == MK_NULL)
		{
			pQueue->fq_pMsgListHead = pQueueMsg;
			pQueue->fq_pMsgListTail = pQueueMsg;
			
		}
		else
		{
			pQueueMsg->fm_pNext = pQueue->fq_pMsgListHead;
			pQueue->fq_pMsgListHead = pQueueMsg;
		}

		Status = MK_SemaphorePost(&pQueue->fq_ReceiveSemaphore);
		MK_InterruptRestore(Flags);
		return Status;
	}
	else
	{
		do {
			MK_FixedMsgQueuePost(pQueue, pMsg, Length, Ticks);
		} while( SuspendTasks++ < 0);
		
		MK_InterruptRestore(Flags);
		return MK_NO_ERROR;
	}
}

STATUS
MK_FixedMsgQueueReset(MK_FIXED_QUEUE *pQueue)
{
	STATUS status;
	INT		Flags;

	Flags = MK_InterruptDisable();

	pQueue->fq_pMsgListHead = MK_NULL;
	pQueue->fq_pMsgListTail = MK_NULL;
	status = MK_ResetBufferPool(&pQueue->fq_Pool);
	status = MK_SemaphoreReset(&pQueue->fq_ReceiveSemaphore, 0);

	MK_Schedule();

	MK_InterruptRestore( Flags );

	return status;
}

#endif	/* #ifdef _MK_MSGQUEUE */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产电影在线观看| 一区二区三区在线视频免费 | 中文字幕一区二区三区乱码在线| 91福利国产精品| 国产精品综合网| 日韩精品成人一区二区三区| 国产精品青草综合久久久久99| 777精品伊人久久久久大香线蕉| 成人av小说网| 国产在线视频一区二区| 亚洲成a人v欧美综合天堂下载| 国产精品区一区二区三区| 精品久久久久久久久久久久包黑料| 欧美在线高清视频| 成人av电影在线网| 国产一区二区三区四区五区美女| 午夜视频一区二区三区| 亚洲美女偷拍久久| 日本一区二区成人| 久久久久97国产精华液好用吗| 欧美一区二区三区日韩| 在线国产亚洲欧美| 91玉足脚交白嫩脚丫在线播放| 国产精品一区二区三区网站| 秋霞av亚洲一区二区三| 天天色天天操综合| 亚洲国产欧美在线| 亚洲精品中文在线影院| 中文字幕一区二区三区在线播放 | 欧美久久久久免费| 91黄视频在线观看| 91在线一区二区| 波多野结衣的一区二区三区| 国产乱人伦精品一区二区在线观看| 欧美aaaaa成人免费观看视频| 亚洲午夜久久久| 亚洲成人中文在线| 亚洲夂夂婷婷色拍ww47| 亚洲另类春色校园小说| 亚洲日本电影在线| 亚洲视频一区在线| 亚洲人成网站精品片在线观看| 国产精品毛片a∨一区二区三区 | 日韩国产一区二| 日韩av不卡在线观看| 天堂在线亚洲视频| 奇米精品一区二区三区在线观看| 日日噜噜夜夜狠狠视频欧美人 | 欧美mv和日韩mv国产网站| 日韩限制级电影在线观看| 欧美一区二区女人| 精品粉嫩超白一线天av| 精品免费视频.| 国产视频亚洲色图| 国产精品久久久久久久久果冻传媒| 国产精品视频看| 综合色中文字幕| 亚洲一级二级三级在线免费观看| 亚洲va国产天堂va久久en| 日本视频一区二区三区| 韩国v欧美v日本v亚洲v| 成人毛片在线观看| 91福利国产成人精品照片| 777xxx欧美| 国产午夜精品一区二区三区嫩草| 日韩一区日韩二区| 亚洲国产精品久久久久秋霞影院 | 污片在线观看一区二区| 全部av―极品视觉盛宴亚洲| 国产自产2019最新不卡| 成人爱爱电影网址| 欧美精品vⅰdeose4hd| 精品国内片67194| 日韩伦理免费电影| 日韩主播视频在线| 高清不卡在线观看av| 欧美日韩中文字幕一区二区| 精品国产免费久久| 亚洲另类一区二区| 精品中文字幕一区二区小辣椒| 不卡一区二区在线| 91精品国产高清一区二区三区 | 日本一道高清亚洲日美韩| 国产激情视频一区二区三区欧美 | 国产欧美一区二区精品秋霞影院| 亚洲三级电影全部在线观看高清| 日本不卡中文字幕| 9i看片成人免费高清| 日韩一二三区不卡| 1区2区3区欧美| 久久激情综合网| 91丝袜国产在线播放| 欧美一区二区三区日韩视频| 中文字幕中文在线不卡住| 奇米影视在线99精品| 91在线观看下载| 欧美大黄免费观看| 一区二区三区在线视频观看58| 国产伦精品一区二区三区视频青涩| 91在线观看地址| 久久色中文字幕| 丝袜美腿高跟呻吟高潮一区| 成人黄页毛片网站| 精品国产伦一区二区三区免费| 亚洲精品一二三四区| 国产精品综合视频| 日韩亚洲电影在线| 亚洲国产综合在线| 不卡av在线网| 久久久久久久久久久电影| 午夜欧美一区二区三区在线播放| 99精品欧美一区二区三区小说| 精品久久人人做人人爰| 婷婷夜色潮精品综合在线| 91在线国内视频| 国产精品网站导航| 激情亚洲综合在线| 91精品中文字幕一区二区三区| 伊人夜夜躁av伊人久久| 成人美女视频在线观看18| www成人在线观看| 久久精品国产在热久久| 日韩天堂在线观看| 日本欧美加勒比视频| 欧美肥妇bbw| 亚洲一二三区视频在线观看| 97精品国产露脸对白| 国产精品污www在线观看| 国产精品亚洲а∨天堂免在线| 日韩一区二区精品葵司在线| 日韩国产在线观看| 91精品国产手机| 日韩精品乱码免费| 日韩视频在线永久播放| 日本成人在线电影网| 日韩午夜激情视频| 免费黄网站欧美| 精品国产麻豆免费人成网站| 精品亚洲国产成人av制服丝袜| 欧美一级电影网站| 狠狠色丁香婷婷综合| 久久综合九色综合97_久久久| 久久99精品视频| 精品国产一区二区三区久久久蜜月 | 色综合久久久久综合99| 亚洲免费观看高清| 欧美视频一区二区三区在线观看| 亚洲高清免费观看高清完整版在线观看 | 欧美一级二级在线观看| 美女视频黄 久久| 精品嫩草影院久久| 国产精品77777| 国产精品久久久久影院老司| 91香蕉国产在线观看软件| 亚洲女子a中天字幕| 欧美日韩精品二区第二页| 日韩和的一区二区| 久久综合五月天婷婷伊人| 日本精品一区二区三区四区的功能| 亚洲精品国产无套在线观| 欧美老肥妇做.爰bbww视频| 免费美女久久99| 日本一区二区三区在线观看| 91视频在线观看免费| 一区二区三区在线观看网站| 69堂成人精品免费视频| 狠狠狠色丁香婷婷综合久久五月| 国产精品色哟哟| 欧美午夜精品一区二区三区| 美女脱光内衣内裤视频久久网站| 国产视频一区二区在线| 欧美制服丝袜第一页| 久久av资源站| 亚洲色图制服丝袜| 欧美一区2区视频在线观看| 国产成人av福利| 亚洲国产日韩a在线播放性色| 欧美成人性战久久| 91久久精品网| 黄网站免费久久| 亚洲激情网站免费观看| 欧美成人精品二区三区99精品| 99国产精品久久久久| 美日韩黄色大片| 国产精品美女久久久久久久| 在线91免费看| 国产99久久久国产精品潘金网站| 亚洲aⅴ怡春院| 国产日韩精品一区| 91精品国产丝袜白色高跟鞋| 成人av影视在线观看| 麻豆国产91在线播放| 一区二区三区四区视频精品免费| 欧美成人官网二区| 91国内精品野花午夜精品| 国产一区二区三区观看| 性做久久久久久久久| 亚洲视频免费观看| 久久九九久久九九| 日韩欧美亚洲另类制服综合在线|