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

📄 pipe.c

📁 samsung 9908DVD源代码,
💻 C
字号:
/**********************************************************************************
 * pipe.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_pipe.h"

#if (defined(_MK_PIPE) && defined(_MK_DDI))

struct mk_pipe_struct *MK_pPipeListHead;
struct mk_pipe_struct *MK_pPipeListTail;

VOID
MK_PipeInitialize(VOID)
{
	MK_FixedPipeInitialize();
	MK_VariablePipeInitialize();
	MK_pPipeListHead = MK_NULL;
	MK_pPipeListTail = MK_NULL;
}

STATUS 
MK_CreatePipe(MK_PIPE *pPipe, CHAR *pName, VOID *pAddr, INT Count, BOOLEAN Type, 
			  UINT Size)
{
	//CHAR	pTemp[MK_NAME_MAX + 8];
	INT		Flags;
	STATUS 	status;

	pPipe->p_Type = Type;
	//MK_BlockCopy(pPipe->p_pName, pName, MK_NAME_MAX-1);
	//pPipe->p_pName[MK_NAME_MAX-1] = '\0';
	pPipe->p_pName = pName;

	//MK_BlockCopy(pTemp, pName, MK_NAME_MAX);
	//MK_Strcat(pTemp, "_pipe");
	if(pPipe->p_Type == MK_FIXED_SIZE)
	{
		status = MK_CreateFixedPipe(&pPipe->p_Pipe.pu_FixedPipe, MK_NULL, pAddr, Count, Size);
		//status = MK_CreateFixedPipe(&pPipe->p_Pipe.pu_FixedPipe, pTemp, pAddr, Count, Size);
	}
	else
	{
		status = MK_CreateVariablePipe(&pPipe->p_Pipe.pu_VariablePipe, MK_NULL, pAddr, Count, Size);
		//status = MK_CreateVariablePipe(&pPipe->p_Pipe.pu_VariablePipe, pTemp, pAddr, Count, Size);
	}

	if (status == MK_NO_ERROR) {
		Flags = MK_InterruptDisable();		/* Critical Region */
	
		pPipe->p_pNext = MK_NULL;
		pPipe->p_pPrev = MK_NULL;
		if(MK_pPipeListHead == MK_NULL)
		{
			MK_pPipeListHead = pPipe;
			MK_pPipeListTail = pPipe;
		}
		else
		{
			pPipe->p_pPrev = MK_pPipeListTail;
			MK_pPipeListTail->p_pNext = pPipe;
			MK_pPipeListTail = pPipe;
		}

		MK_InterruptRestore(Flags);
	}
	return status;
}

STATUS 
MK_DeletePipe(MK_PIPE *pPipe)
{
	int Flags;

	if(pPipe->p_Type == MK_FIXED_SIZE)
	{
		MK_DeleteFixedPipe(&pPipe->p_Pipe.pu_FixedPipe);
	}
	else
	{
		MK_DeleteVariablePipe(&pPipe->p_Pipe.pu_VariablePipe);
	}

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

	if(MK_pPipeListHead == MK_pPipeListTail)
	{
		MK_pPipeListHead = MK_NULL;
		MK_pPipeListTail = MK_NULL;
	}
	else
	{
		if(pPipe == MK_pPipeListHead)
		{
			MK_pPipeListHead = pPipe->p_pNext;
			MK_pPipeListHead->p_pPrev = MK_NULL;
		}
		else if(pPipe == MK_pPipeListTail)
		{
			MK_pPipeListTail = pPipe->p_pPrev;
			MK_pPipeListTail->p_pNext = MK_NULL;
		}
		else
		{
			pPipe->p_pPrev->p_pNext = pPipe->p_pNext;
			pPipe->p_pNext->p_pPrev = pPipe->p_pPrev;
		}
	}
	pPipe->p_pNext = MK_NULL;
	pPipe->p_pPrev = MK_NULL;

	MK_InterruptRestore(Flags);

	return MK_NO_ERROR;
}

#ifdef _MK_DDI
STATUS
MK_PipeInformation(struct mk_ddi_struct *pDDI)
{
	MK_PIPE *pPipe;
	int Flags;

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

	for(pPipe = MK_pPipeListHead; pPipe != MK_NULL; pPipe = pPipe->p_pNext)
	{
		MK_Fprintf(pDDI, "%s ", pPipe->p_pName);
		if(pPipe->p_Type == MK_FIXED_SIZE)
		{
			MK_Fprintf(pDDI, "F ");
		}
		else
		{
			MK_Fprintf(pDDI, "V ");
		}
	}
	MK_Fprintf(pDDI,"\n");

	MK_InterruptRestore(Flags);

	return MK_NO_ERROR;
}

#endif	/* #ifdef _MK_DDI */

#endif	/* #if (defined(_MK_PIPE) && defined(_MK_DDI)) */


⌨️ 快捷键说明

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