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

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

?? sem.c

?? samsung 9908DVD源代碼,
?? C
字號:
/**********************************************************************************
 * sem.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_task.h"
#include "util\\mk_lib.h"
#include "kernel\\mk_ddi.h"

struct mk_semaphore_struct	*MK_pSemaphoreListHead;
struct mk_semaphore_struct	*MK_pSemaphoreListTail;

VOID
MK_SemaphoreInitialize(VOID)
{
	MK_pSemaphoreListHead = MK_NULL;
	MK_pSemaphoreListTail = MK_NULL;
}

STATUS
MK_CreateSemaphore(MK_SEMAPHORE *pSemaphore, CHAR *pName, INT Count, BOOLEAN Options)
{
	int Flags;

	if(pSemaphore->s_Magic == MK_SEMAPHORE_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_CreateSemaphore() - Magic error!\n");
#endif
		return MK_ERROR;
	}
	
	if( Count < 0 )
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_CreateSemaphore() - Count must be great equal zero! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return MK_ERROR;
	}

	Flags = MK_InterruptDisable();		/* Critical Region */
	
	pSemaphore->s_pName = pName;

	pSemaphore->s_Count = Count;
	MK_CreatePendingList(&pSemaphore->s_PendingList, Options);
	pSemaphore->s_Magic = MK_SEMAPHORE_MAGIC;

	pSemaphore->s_Next = MK_NULL;
	pSemaphore->s_Prev = MK_NULL;
	if(MK_pSemaphoreListHead == MK_NULL)
	{
		MK_pSemaphoreListHead = pSemaphore;
		MK_pSemaphoreListTail = pSemaphore;
	}
	else
	{
		pSemaphore->s_Prev = MK_pSemaphoreListTail;
		MK_pSemaphoreListTail->s_Next = pSemaphore;
		MK_pSemaphoreListTail = pSemaphore;
	}

	MK_InterruptRestore(Flags);

	return MK_NO_ERROR;
}

INT
MK_GetSemaphoreCount(MK_SEMAPHORE *pSemaphore)
{
	if(pSemaphore->s_Magic != MK_SEMAPHORE_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_GetSemaphoreCont() - Magic error! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return 0;
	}

	return pSemaphore->s_Count;
}

int 
MK_DeleteSemaphore(MK_SEMAPHORE *pSemaphore)
{
	int Count;
	int Flags;

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

	Count = MK_ClearPendingList(&pSemaphore->s_PendingList);	
	MK_DeletePendingList(&pSemaphore->s_PendingList); //Modified

	if(MK_pSemaphoreListHead == MK_pSemaphoreListTail)
	{
		MK_pSemaphoreListHead = MK_NULL;
		MK_pSemaphoreListTail = MK_NULL;
	}
	else
	{
		if(pSemaphore == MK_pSemaphoreListHead)
		{
			MK_pSemaphoreListHead = pSemaphore->s_Next;
			MK_pSemaphoreListHead->s_Prev = MK_NULL;
		}
		else if(pSemaphore == MK_pSemaphoreListTail)
		{
			MK_pSemaphoreListTail = pSemaphore->s_Prev;
			MK_pSemaphoreListTail->s_Next = MK_NULL;
		}
		else
		{
			pSemaphore->s_Prev->s_Next = pSemaphore->s_Next;
			pSemaphore->s_Next->s_Prev = pSemaphore->s_Prev;
		}
	}
	pSemaphore->s_Next = MK_NULL;
	pSemaphore->s_Prev = MK_NULL;

	/* Clear the semaphore count  */
	pSemaphore->s_Count = 0;

	/* Clear the magic value of semaphore */
	pSemaphore->s_Magic = 0;	
	
	MK_InterruptRestore(Flags);
	return Count;
}

STATUS
MK_SemaphorePend(MK_SEMAPHORE *pSemaphore, long Ticks)
{
	MK_TASK *pTask;
	int Flags;

	if(pSemaphore->s_Magic != MK_SEMAPHORE_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_SemaphorePend() - Magic error! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return MK_RESOURCE_ERROR;
	}

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

	if(--pSemaphore->s_Count < 0)
	{
		
		if(Ticks == 0)
		{
			pSemaphore->s_Count++;

#if MK_DEBUG_PRINT
//			MK_InfoPrintf(MK_TASK_WARNING, "MK_SemaphorePend() - Semaphore is timeout(0)! %s, Task(%s)\n", pSemaphore->s_pName, MK_GetCurrentTask()->t_pName);
#endif
			MK_InterruptRestore(Flags);
			return MK_TIMEOUT;
		}
		/* Suspension is selected.  */
		pTask = MK_GetCurrentTask();

		/* Delete task from ReadyList */
		MK_DeleteTaskFromReadyList(pTask);

		/* Insert task to PendingList */
		MK_InsertTaskToPendingList(&pSemaphore->s_PendingList, pTask);

		/* If task has timeout, insert task to delayedlist */
		if(Ticks > 0)
		{
			MK_InsertTaskToDelayedList(pTask, Ticks);
		}

		MK_Schedule();

		/* When this Task is released */

		if( (pTask->t_Status & MK_TASK_FORCED))
		{
			pTask->t_Status &= ~MK_TASK_FORCED;

#if MK_DEBUG_PRINT
			MK_InfoPrintf(MK_TASK_WARNING, "MK_SemaphorePend() - Semaphore is deleted or reset by force! %s, Task(%s)\n", pSemaphore->s_pName, MK_GetCurrentTask()->t_pName);
#endif
			MK_InterruptRestore(Flags);
			return MK_RESOURCE_ERROR;
		}

		if(pTask->t_Status & MK_TASK_PENDING)	/* released by TIMEOUT */
		{
			MK_DeleteTaskFromPendingList(&pSemaphore->s_PendingList, pTask);
			pSemaphore->s_Count++;

#if MK_DEBUG_PRINT			
			// MK_InfoPrintf(MK_TASK_WARNING, "MK_SemaphorePend() - Semaphore is timeout! %s, Task(%s)\n", pSemaphore->s_pName, MK_GetCurrentTask()->t_pName);
#endif
			MK_InterruptRestore(Flags);		
			return MK_TIMEOUT;
		}
		else
		{
			MK_InterruptRestore(Flags);
			return MK_NO_ERROR;
		}
	}
	else	/* Resource Available */
	{
		MK_InterruptRestore(Flags);
		return MK_NO_ERROR;
	}
}

STATUS
MK_SemaphorePost(MK_SEMAPHORE *pSemaphore)
{
	MK_TASK *pTask;
	int Flags;

	if(pSemaphore->s_Magic != MK_SEMAPHORE_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_SemaphorePost() - Magic error! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return MK_RESOURCE_ERROR;
	}

	Flags = MK_InterruptDisable();

	/* Determine if another task is waiting on the semaphore.  */
	if(pSemaphore->s_Count++ < 0)
	{
		/* Obtain and remove the first suspended block from the list.  */
		pTask = MK_GetFirstPendingTask(&pSemaphore->s_PendingList);
		MK_DeleteTaskFromPendingList(&pSemaphore->s_PendingList, pTask);
		if(pTask->t_Status & MK_TASK_DELAYED)
		{
			MK_DeleteTaskFromDelayedList(pTask);
		}

		/* Insert the suspended task to ReadyList */
		MK_InsertTaskToReadyList(pTask);

		MK_Schedule();
	}

	MK_InterruptRestore(Flags);

	return MK_NO_ERROR;
}

MK_TASK *
MK_GetSemaphorePendingTask(MK_SEMAPHORE *pSemaphore)
{
	return MK_GetFirstPendingTask(&pSemaphore->s_PendingList);
}

STATUS 
MK_SemaphoreReset(MK_SEMAPHORE *pSemaphore, LONG Count)
{
	int	Flags;

	if(pSemaphore->s_Magic != MK_SEMAPHORE_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_SemaphoreReset() - Magic error! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return MK_RESOURCE_ERROR;
	}

	Flags = MK_InterruptDisable();		/* Critical Region */
	
	MK_ClearPendingList(&pSemaphore->s_PendingList);
	pSemaphore->s_Count = Count;
	
	MK_InterruptRestore(Flags);
	return MK_NO_ERROR;
}

#if _MK_DDI
STATUS
MK_SemaphoreInformation(struct mk_ddi_struct *pDDI)
{
	MK_SEMAPHORE *pSemaphore;
	INT	Flags;

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

	for(pSemaphore = MK_pSemaphoreListHead; pSemaphore != MK_NULL; 
		pSemaphore = pSemaphore->s_Next)
	{
		if(pSemaphore->s_Magic != MK_SEMAPHORE_MAGIC)
		{
			MK_KernelPanic(("MK_SemaphoreInformation() - Magic error! Task(%s)\n", MK_GetCurrentTask()->t_pName));
			return MK_RESOURCE_ERROR;
		}
		MK_Fprintf(pDDI, "%s ", pSemaphore->s_pName);
		MK_Fprintf(pDDI, "%d ", pSemaphore->s_Count);
	}
	MK_Fprintf(pDDI,"\n");

	MK_InterruptRestore(Flags);

	return MK_NO_ERROR;
}
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产精品第一页| 亚洲欧美综合色| 一本久道久久综合中文字幕| 国内不卡的二区三区中文字幕| 视频一区二区三区中文字幕| 亚洲午夜三级在线| 亚洲综合丁香婷婷六月香| 亚洲美女偷拍久久| 亚洲欧美日韩在线| 成人欧美一区二区三区视频网页 | 国产精品亚洲视频| 国产一区二区三区在线观看精品| 精品一二三四在线| 国产精品一区专区| 97久久精品人人做人人爽| 99re在线视频这里只有精品| 在线一区二区观看| 欧美一区二区三区在线电影| 日韩欧美一区二区视频| 精品国偷自产国产一区| 久久久久久久久久久99999| 国产精品天天看| 一区二区免费看| 日韩电影一区二区三区四区| 国内外成人在线视频| 丰满岳乱妇一区二区三区| 成人av网站免费观看| 色999日韩国产欧美一区二区| 欧美人与z0zoxxxx视频| 91精品国产一区二区三区蜜臀 | 精品亚洲porn| 国产999精品久久久久久绿帽| 99久久精品免费看| 69堂国产成人免费视频| 国产亚洲综合在线| 亚洲国产日日夜夜| 国产精品一卡二卡在线观看| 91福利视频在线| 久久亚洲春色中文字幕久久久| 中文字幕永久在线不卡| 日韩av高清在线观看| 99久久精品一区二区| 欧美一区二区三区日韩| 国产精品久久毛片av大全日韩| 午夜精品视频一区| 波多野结衣的一区二区三区| 日韩欧美亚洲国产精品字幕久久久| 国产欧美日韩视频在线观看| 日韩精品成人一区二区三区| 99国产精品久久久久久久久久 | 亚洲色图色小说| 黄页视频在线91| 欧美美女黄视频| 亚洲色欲色欲www| 极品少妇一区二区| 欧美日韩亚洲不卡| 国产精品理伦片| 国产在线视视频有精品| 欧美一区二区视频观看视频| 亚洲精品国产第一综合99久久| 久久99精品国产麻豆婷婷| 色综合久久88色综合天天6| 国产午夜精品久久久久久久| 免费成人小视频| 欧美人伦禁忌dvd放荡欲情| 亚洲乱码中文字幕| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美电视剧免费观看| 午夜av一区二区| 欧美日韩一区不卡| 亚洲一区视频在线| 在线观看日韩国产| 亚洲欧美乱综合| 日韩av电影免费观看高清完整版| 色成人在线视频| 一二三四区精品视频| 一本大道久久a久久精二百| 国产精品欧美一区二区三区| 国产激情一区二区三区四区| 久久久久久久久久久久久女国产乱| 日本亚洲三级在线| 精品av久久707| 国产一区二区在线观看视频| 久久久久久久精| 国产成人午夜电影网| 国产精品你懂的在线| 成人av在线电影| 一区二区三区毛片| 欧美视频在线播放| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美美女喷水视频| 韩国三级电影一区二区| 欧美国产激情二区三区| 99久久精品国产毛片| 亚洲国产va精品久久久不卡综合| 在线电影一区二区三区| 久久99最新地址| 亚洲天堂免费看| 欧美高清性hdvideosex| 狠狠色丁香久久婷婷综合_中| 亚洲国产激情av| 欧美色图在线观看| 奇米影视在线99精品| 久久蜜桃av一区精品变态类天堂 | 在线视频一区二区免费| 全部av―极品视觉盛宴亚洲| 久久免费视频一区| 色94色欧美sute亚洲13| 免费国产亚洲视频| 中文字幕亚洲在| 欧美一级国产精品| 成人的网站免费观看| 亚洲一区二区在线视频| 久久久久久黄色| 在线观看91精品国产入口| 午夜日韩在线电影| 国产欧美日韩久久| 欧美一二三区精品| 亚洲一区二区三区四区在线| 日韩欧美在线影院| 成人av资源站| 性久久久久久久久久久久| 国产欧美日韩不卡免费| 555www色欧美视频| 成人a区在线观看| 麻豆国产精品777777在线| 亚洲免费在线电影| 精品国产乱码久久久久久夜甘婷婷| 成人成人成人在线视频| 国产一区二区不卡老阿姨| 天使萌一区二区三区免费观看| 国产精品入口麻豆原神| 日韩精品一区二区三区在线观看| 欧美熟乱第一页| av成人免费在线观看| 国产精品综合一区二区| 蜜臀av一区二区在线观看 | 亚洲韩国一区二区三区| 国产亚洲一本大道中文在线| 538在线一区二区精品国产| 色哟哟一区二区三区| 国产成人欧美日韩在线电影| 麻豆精品久久久| 日本最新不卡在线| 亚洲国产精品影院| 亚洲影院免费观看| 一级中文字幕一区二区| 国产无一区二区| 国产欧美精品一区二区色综合 | 亚洲视频在线观看三级| 国产精品乱码人人做人人爱| 久久九九久久九九| 91精品国产高清一区二区三区 | jlzzjlzz亚洲女人18| 国产精品18久久久久久久久久久久| 日本亚洲天堂网| 久久精品久久精品| 国内精品在线播放| 激情综合网最新| 狠狠网亚洲精品| 国产在线播放一区二区三区| 国产精品一区二区在线播放| 精品一区二区久久久| 国产一区二区三区久久悠悠色av| 国产中文字幕精品| 成人免费视频视频| 成人免费高清在线| 日本高清视频一区二区| 欧美三级日韩在线| 日韩一级二级三级| 日韩免费高清av| 久久久久久久久久看片| 国产精品久久久久久久久果冻传媒| 国产精品久久久久一区二区三区共| 国产精品美女一区二区三区| 亚洲精品老司机| 免费人成在线不卡| 高清不卡在线观看av| 色8久久人人97超碰香蕉987| 日韩一卡二卡三卡国产欧美| www久久久久| 亚洲欧美日本在线| 国产精品影视网| 97se狠狠狠综合亚洲狠狠| 欧美中文字幕一区二区三区 | 欧美日韩中文另类| 日韩精品一区二区三区在线播放| 国产欧美日韩三区| 天堂蜜桃91精品| 成人精品一区二区三区四区| 在线欧美日韩国产| 久久男人中文字幕资源站| 亚洲一区免费在线观看| 精品亚洲免费视频| 欧美日韩一区二区不卡| 欧美高清在线视频| 日本不卡123| 91久久精品一区二区三区| 亚洲精品一区二区精华| 亚洲1区2区3区4区|