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

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

?? task.c

?? samsung 9908DVD源代碼,
?? C
?? 第 1 頁 / 共 3 頁
字號:
/**********************************************************************************
 * task.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_task.h"
#include "kernel\\mk_hisr.h"
#include "kernel\\mk_ddi.h"
#include "kernel\\mk_sem.h"
#include "kernel\\mk_mem.h"
#include "kernel\\mk_event.h"

void *MK_System_Stack;

static unsigned char	MK_ReadyGroup;
static unsigned char	MK_ReadyMiddleGroup[4];
static unsigned char	MK_ReadyTable[4][8];

MK_TASK	*MK_pTaskReadyListHead[MK_TASK_MAX_PRIORITY+1]; 
MK_TASK	*MK_pTaskReadyListTail[MK_TASK_MAX_PRIORITY+1];
MK_TASK	*MK_pTaskListHead, *MK_pTaskListTail;
MK_TASK	*MK_pTaskDelayedListHead;
MK_TASK	*MK_pCurrentTask;

static int	MK_CountNesting;
static UCHAR	MK_TotalTasks;
static UCHAR	MK_ContextSwitchFlags;
static UCHAR	MK_SchedulePolicy;

static unsigned char const MK_MapTable[]   = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};

static unsigned char const MK_UnMapTable[] = {
    0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
};

MK_TASK		MK_IdleTask;
//static UINT MK_IdleTaskStack[1024];	/* Word aligned 4096 Byte */

#define IdleTask_StackSize	1024
static ULONG MK_IdleTaskStack[IdleTask_StackSize]; //1024*2];	/* Word aligned 4096 Byte */


//extern MK_EnterIRQ(void);
static VOID
MK_IdleTaskFunction(ULONG Arg1, VOID *Arg2)
{
	volatile INT i=0;
	
	while(1)
	{
		i++;
		//MK_Printf("i");
#if 0		/*for interrupt test*/
		MK_EnterIRQ();
		MK_IntEnter();
		MK_TimeTick();
		MK_IntExit();
		//MK_InfoPrintf(MK_TASK_WARNING, "-");
#endif
	}
}

VOID
MK_TaskInitialize(VOID)
{
	INT i,j;

	MK_ReadyGroup = 0;
	for(i=0; i<4 ;i++)
	{
		MK_ReadyMiddleGroup[i] = 0;
	}
	for(i=0; i<4; i++)
	{
		for(j=0; j<8; j++)
		{
			MK_ReadyTable[i][j] = 0;
		}
	}
	MK_pTaskListHead = MK_NULL;
	MK_pTaskListTail = MK_NULL;

	for(i=0; i<MK_TASK_MAX_PRIORITY+1; i++)
	{
		MK_pTaskReadyListHead[i] = MK_NULL;
		MK_pTaskReadyListTail[i] = MK_NULL;
	}
	MK_pTaskDelayedListHead = MK_NULL;
	MK_pCurrentTask = MK_NULL;

	/* Re-Initialize Global Varialbes for Save */
	MK_TotalTasks = 0;
	MK_CountNesting = 0;
	MK_ContextSwitchFlags = FALSE;
	MK_SchedulePolicy = MK_TASK_RR;

	MK_CreateTask(&MK_IdleTask, MK_IdleTaskFunction, MK_TASK_MAX_PRIORITY, 
		"IdleTask",	MK_DEFAULT_TIMESLICE, (CHAR *)MK_IdleTaskStack, IdleTask_StackSize*4/* 4096*2*/, 0, 0); 
	MK_Resume(&MK_IdleTask);
}

VOID 
MK_Start(VOID)
{
	MK_TASK *pTask;
	INT		Flags;
	INT		Priority;

	Flags = MK_InterruptDisable();		/* Critical Region */
	if(MK_ContextSwitchFlags == FALSE)
	{

		Priority = MK_GetHighPriority();
		pTask = MK_pTaskReadyListHead[Priority];
		MK_pCurrentTask = pTask;
		MK_ContextSwitchEnable();
		MK_StartHighPriorityTask(&pTask->t_CurrentOfStack);

	}
	MK_InterruptRestore(Flags);			/* Never reach this line */
}

VOID
MK_TaskMagicCheck( MK_TASK *pTask, CHAR *argv)
{
	INT	Flags;

	Flags = MK_InterruptDisable();

	if( (pTask->t_Magic != MK_TASK_MAGIC) && (pTask->t_Magic != MK_HISR_MAGIC) )
	{
#if MK_DEBUG_PRINT
		MK_Panic("Magic Error_%s\n", argv);
#endif
	}

	MK_InterruptRestore( Flags );
}

VOID	
MK_Schedule(VOID)
{
	MK_TASK *pOldTask, *pNewTask;
	INT		Flags;
	int		Priority;
	MK_HISR	*pHisr;

	Flags = MK_InterruptDisable();

	if(MK_ContextSwitchFlags == TRUE)
	{
		pHisr = MK_NULL;
		
		for (Priority=0; Priority<MK_HISR_MAX_PRIORITY+1; Priority++)
		{
			if (MK_pActiveHISRListHead[Priority])
			{
				pHisr = MK_pActiveHISRListHead[Priority];
				break;
			}
		}
		
		if(pHisr != MK_NULL)
		{
			if(pHisr != (MK_HISR *)MK_pCurrentTask)
			{
				pOldTask = MK_pCurrentTask;
				pNewTask = (MK_TASK *)pHisr;
				MK_pCurrentTask = pNewTask;
				
				MK_ContextSwitch(&pOldTask->t_CurrentOfStack, 
				&pNewTask->t_CurrentOfStack);
			}
		}
		/* context switch from hisr to task, when all HISR is finished. */				
		else if(MK_pCurrentTask->t_Magic == MK_HISR_MAGIC)
		{
			pOldTask = MK_pCurrentTask;
			Priority = MK_GetHighPriority();
			pNewTask = MK_pTaskReadyListHead[Priority];
			MK_pCurrentTask = pNewTask;
			MK_ContextSwitch(&pOldTask->t_CurrentOfStack, 
				&pNewTask->t_CurrentOfStack);
						
		}
		else	/* Normal Task Schedule */
		{

			pOldTask = MK_pCurrentTask;
			Priority = MK_GetHighPriority();
	
			if(!(pOldTask->t_Status & MK_TASK_READY) || (Priority != pOldTask->t_Priority))
			{
	
	
				pNewTask = MK_pTaskReadyListHead[Priority];
				MK_pCurrentTask = pNewTask;
	
//#if MK_DEBUG
//				MK_TaskMagicCheck( MK_pCurrentTask, "S2");
//#endif
	
				MK_ContextSwitch(&pOldTask->t_CurrentOfStack, 
					&pNewTask->t_CurrentOfStack);
	
//#if MK_DEBUG			
//				MK_TaskMagicCheck( MK_pCurrentTask, "S3");
//#endif
	
			}
			
			Priority = MK_GetPriority( MK_pCurrentTask );
			
			if(MK_pTaskReadyListHead[Priority] != MK_pTaskReadyListTail[Priority])
			{
			/* When more than 2 Task exist */
				if(pOldTask->t_RemainedTimeSlice <= 0)
				{
					pNewTask = pOldTask->t_pTaskReadyNext;
					pNewTask->t_pTaskReadyPrev = MK_NULL;
					MK_pTaskReadyListHead[Priority] = pNewTask;
					pOldTask->t_pTaskReadyPrev = MK_pTaskReadyListTail[Priority];
					pOldTask->t_pTaskReadyNext = MK_NULL;
					MK_pTaskReadyListTail[Priority]->t_pTaskReadyNext = pOldTask;
					MK_pTaskReadyListTail[Priority] = pOldTask;
					pOldTask->t_RemainedTimeSlice = pOldTask->t_TimeSlice;
					MK_pCurrentTask = pNewTask;

//#if MK_DEBUG
//					MK_TaskMagicCheck( MK_pCurrentTask, "S4");
//#endif

					MK_ContextSwitch(&pOldTask->t_CurrentOfStack, 
						&pNewTask->t_CurrentOfStack);

//#if MK_DEBUG
//					MK_TaskMagicCheck( MK_pCurrentTask, "S5");
//#endif
	
				}
			}
			else	/* When Only One Task exists */
			{
				pOldTask->t_RemainedTimeSlice = pOldTask->t_TimeSlice;
			}
			
		}
	}
	MK_InterruptRestore(Flags);
}

INT 
MK_ChangePriority(MK_TASK *pTask, INT NewPrio)
{
	MK_PENDING_LIST *pPendingList;
	INT		Priority;
	INT		Flags;

	if (pTask == MK_NULL)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_ChangePriority() - Task for change priority doesn't exist! Task(%s)\n", MK_pCurrentTask->t_pName);
#endif
		return MK_ERROR;
	}
	if(pTask->t_Magic != MK_TASK_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_ChangePriority() - Magic error!\n");
#endif
		return MK_RESOURCE_ERROR;
	}

	if(NewPrio < MK_TASK_MIN_PRIORITY || NewPrio > MK_TASK_MAX_PRIORITY)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_ChangePriority() - Task priority get out of range! Task(%s)\n", MK_pCurrentTask->t_pName);
#endif
		return MK_ERROR;
	}

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

	Priority = pTask->t_Priority;

	if(Priority == Idle_Task)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_ChangePriority() - Task priority doesn't change into 255(reserved IDLE Task)! Task(%s)\n", MK_pCurrentTask->t_pName);
#endif
		MK_InterruptRestore(Flags);
		return MK_ERROR;
	}

	if(pTask->t_Status & MK_TASK_READY)
	{
		MK_DeleteTaskFromReadyList(pTask);
		pTask->t_Priority = NewPrio;
		MK_InsertTaskToReadyList(pTask);
		MK_Schedule();
	}
	else
		/* when signaled, can both SLEEP, PENDING */
	{
		pTask->t_Priority = NewPrio;

		pPendingList = (MK_PENDING_LIST *)pTask->t_PendingList;
		if(pPendingList->p_Options == MK_SERVICE_PRIORITY)
		{
			MK_DeleteTaskFromPendingList(pPendingList, pTask);
			MK_InsertTaskToPendingList(pPendingList, pTask);
		}
	}

	MK_InterruptRestore(Flags);
	return Priority;
}

INT
MK_GetPriority(MK_TASK *pTask)
{
	if (pTask == MK_NULL)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_GetTaskName() - Task doesn't exist! Task(%s)\n", MK_pCurrentTask->t_pName);
#endif
		return MK_ERROR;
	}
	if(pTask->t_Magic != MK_TASK_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_GetPriority() - Magic error!\n");
#endif
		return MK_RESOURCE_ERROR;
	}

	return pTask->t_Priority;
}

CHAR *MK_GetTaskName(MK_TASK *pTask)
{
	if (pTask == MK_NULL)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_GetTaskName() - Task doesn't exist! Task(%s)\n", MK_pCurrentTask->t_pName);
#endif
		return MK_NULL;
	}
	if(pTask->t_Magic != MK_TASK_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_GetTaskName() - Magic error!\n");
#endif
		return MK_NULL;
	}

	return (CHAR *)pTask->t_pName;
}

MK_TASK *
MK_GetCurrentTask(VOID)
{
	MK_TASK	*MK_pTask;
	int	Flags;
	
	Flags = MK_InterruptDisable();
	MK_pTask = MK_pCurrentTask;
	MK_InterruptRestore(Flags);
	return MK_pTask;
}

UINT
MK_GetCurrentTaskStackPointer(VOID)
{
	return MK_pCurrentTask->t_CurrentOfStack;
}

/* Coded by hjahn */
LONG
MK_ChangeTimeSlice(MK_TASK *pTask, LONG newTimeSlice)
{
	LONG	oldTimeSlice;
	INT		Flags;

	if (pTask == MK_NULL)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_GetTaskName() - Task doesn't exist! Task(%s)\n", MK_pCurrentTask->t_pName);
#endif
		return MK_ERROR;
	}
	if(pTask->t_Magic != MK_TASK_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_ChangeTimeSlice() - Magic error!\n");
#endif
		return MK_RESOURCE_ERROR;
	}

	if(newTimeSlice <= 0)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_ChangeTimeSlice() - Task's TimeSlice get out of range! Task(%s)\n", MK_pCurrentTask->t_pName);
#endif
		return MK_ERROR;
	}

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

	oldTimeSlice = pTask->t_TimeSlice;
	pTask->t_TimeSlice = newTimeSlice;
	pTask->t_RemainedTimeSlice = newTimeSlice;
	pTask->t_UsedTimeSlice = 0;
	
	MK_InterruptRestore(Flags);
	
	return oldTimeSlice;
}

INT
MK_GetTotalTasks(VOID)
{
	return MK_TotalTasks;
}
VOID
MK_AddTotalTasks(VOID)
{
	MK_TotalTasks++;
}
VOID
MK_DelTotalTasks(VOID)
{
	MK_TotalTasks--;
}
/* coded by hjahn - end */

STATUS
MK_InsertTaskToReadyList(MK_TASK *pTask)
{
	INT Flags;
	INT	Priority;
	INT	GroupValue, MiddleGroupValue, TableValue;


	if (pTask == MK_NULL)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_GetTaskName() - Task doesn't exist! Task(%s)\n", MK_pCurrentTask->t_pName);
#endif
		return MK_ERROR;
	}

	if(pTask->t_Magic == MK_HISR_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_InsertTaskToReadyList() - Hisr is inserted but, error!\n");
#endif
		return MK_RESOURCE_ERROR;
	}
	
	if(pTask->t_Magic != MK_TASK_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_InsertTaskToReadyList() - Magic error!\n");
#endif
		return MK_RESOURCE_ERROR;
	}

	if(pTask->t_Status & MK_TASK_READY)
	{
#if MK_DEBUG_PRINT
		//MK_InfoPrintf(MK_TASK_WARNING, "MK_InsertTaskToReadyList() - READY status task should changed READY status! Task(%s)\n", MK_pCurrentTask->t_pName);
#endif
		return MK_ERROR;
	}

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

	Priority = pTask->t_Priority;

	/* Insert Task to READY List */
	if(MK_pTaskReadyListTail[Priority] == MK_NULL)
	{
		pTask->t_pTaskReadyNext = MK_NULL;
		pTask->t_pTaskReadyPrev = MK_NULL;
		MK_pTaskReadyListHead[Priority] = pTask;
		MK_pTaskReadyListTail[Priority] = pTask;

		/* modify Ready Group, MiddleGroup, Table */
		GroupValue = Priority & 0x000000C0;				/* 7bit ~ 8bit */
		MiddleGroupValue = Priority & 0x00000038;			/* 3bit ~ 6bit */
		TableValue = Priority & 0x00000007;				/* 0bit ~ 2bit */
		MK_ReadyGroup |= MK_MapTable[GroupValue>>6];
		MK_ReadyMiddleGroup[GroupValue>>6] |= MK_MapTable[MiddleGroupValue>>3];
		MK_ReadyTable[GroupValue>>6][MiddleGroupValue>>3] |= MK_MapTable[TableValue];
	}
	else
	{
		pTask->t_pTaskReadyNext = MK_NULL;
		pTask->t_pTaskReadyPrev = MK_pTaskReadyListTail[Priority];
		MK_pTaskReadyListTail[Priority]->t_pTaskReadyNext = pTask;
		MK_pTaskReadyListTail[Priority] = pTask;
	}

	pTask->t_Status |= MK_TASK_READY;

	MK_InterruptRestore(Flags);
	return MK_NO_ERROR;
}

STATUS
MK_DeleteTaskFromReadyList(MK_TASK *pTask)
{
	INT Flags;
	INT	Priority;
	INT	GroupValue, MiddleGroupValue, TableValue;

	if (pTask == MK_NULL)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_GetTaskName() - Task doesn't exist! Task(%s)\n", MK_pCurrentTask->t_pName);
#endif
		return MK_ERROR;
	}
	if(pTask->t_Magic != MK_TASK_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_DeleteTaskFromReadyList() - Magic error!\n");
#endif
		return MK_RESOURCE_ERROR;
	}

	if( !(pTask->t_Status & MK_TASK_READY) )
	{
#if MK_DEBUG_PRINT
		//MK_InfoPrintf(MK_TASK_WARNING, "MK_DeleteTaskFromReadyList() -  task Deleting from READY list is not READY status! Task(%s)\n", MK_pCurrentTask->t_pName);
#endif
		return MK_ERROR;
	}

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

	Priority = pTask->t_Priority;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲制服丝袜av| 日韩影院精彩在线| 亚洲成av人片一区二区| 黄色资源网久久资源365| 一本色道久久综合亚洲aⅴ蜜桃| 91精品蜜臀在线一区尤物| 国产视频视频一区| 老司机精品视频一区二区三区| 99久久伊人精品| 国产午夜三级一区二区三| 三级影片在线观看欧美日韩一区二区 | 国产日韩欧美精品一区| 首页综合国产亚洲丝袜| 色婷婷久久久久swag精品| 国产午夜精品一区二区三区嫩草| 手机精品视频在线观看| 在线免费观看日本欧美| 中文字幕一区二区三区精华液| 国产乱码精品1区2区3区| 这里只有精品视频在线观看| 亚洲高清免费视频| 欧美亚洲图片小说| 亚洲一级在线观看| 色菇凉天天综合网| 亚洲欧美精品午睡沙发| 成人高清视频在线观看| 日本一二三四高清不卡| 国产成人午夜精品影院观看视频| 精品国产伦一区二区三区观看方式 | 日产国产欧美视频一区精品| 欧美伊人久久久久久久久影院 | 欧美tickling网站挠脚心| 无码av中文一区二区三区桃花岛| 色天天综合久久久久综合片| 亚洲色图丝袜美腿| 91视频国产观看| 国产精品国产三级国产普通话蜜臀| 国产精品一区二区三区99| 久久网站最新地址| 国产精品亚洲人在线观看| 久久久精品国产免费观看同学| 国产在线播精品第三| 欧美激情一区二区三区在线| 成人精品在线视频观看| 亚洲视频免费在线观看| 91精品国产色综合久久不卡蜜臀| 亚洲裸体在线观看| 欧美日韩大陆一区二区| 老司机一区二区| 久久久91精品国产一区二区三区| 成人深夜在线观看| 一区二区欧美国产| 欧美日韩1234| 激情综合一区二区三区| 欧美激情在线免费观看| 91国偷自产一区二区开放时间 | 国内外精品视频| 国产精品理伦片| 欧美三级视频在线观看| 日韩中文字幕区一区有砖一区 | 4438成人网| 国产一区二区三区av电影| 1024精品合集| 宅男在线国产精品| 国产传媒一区在线| 亚洲午夜久久久久久久久电影网| 日韩一区二区高清| 91亚洲男人天堂| 日产欧产美韩系列久久99| 欧美激情在线免费观看| 欧美色视频一区| 高清国产午夜精品久久久久久| 亚洲影视在线观看| 国产视频一区在线观看| 欧美日韩精品是欧美日韩精品| 久久99国产精品尤物| 亚洲美女淫视频| 精品免费一区二区三区| 99精品欧美一区| 国内精品伊人久久久久av影院| 一区二区三区加勒比av| 日韩欧美成人午夜| 欧洲国内综合视频| 从欧美一区二区三区| 日韩精品免费视频人成| 一区二区三区中文免费| 国产亚洲精品aa午夜观看| 91麻豆精品国产91久久久久久久久| 成人免费看的视频| 国产一区久久久| 免费成人美女在线观看| 亚洲一二三级电影| 亚洲日本乱码在线观看| 国产三级一区二区| 欧美一二三区在线| 欧美日韩精品一区二区| 色狠狠av一区二区三区| 不卡的av网站| 国产麻豆精品视频| 激情综合网av| 另类小说综合欧美亚洲| 日本色综合中文字幕| 视频一区中文字幕| 性做久久久久久| 亚洲午夜视频在线观看| 亚洲欧美在线aaa| 国产精品美女一区二区| 亚洲国产精品激情在线观看| 精品久久国产字幕高潮| 日韩精品资源二区在线| 91精品国产综合久久蜜臀| 欧美精品久久久久久久多人混战 | 国产成人精品亚洲日本在线桃色| 奇米精品一区二区三区在线观看| 偷偷要91色婷婷| 丝袜诱惑亚洲看片| 丝袜亚洲另类丝袜在线| 天天av天天翘天天综合网色鬼国产| 亚洲自拍另类综合| 亚洲国产cao| 日韩精品色哟哟| 奇米亚洲午夜久久精品| 麻豆专区一区二区三区四区五区| 青青草原综合久久大伊人精品优势| 亚洲一二三四久久| 天堂久久久久va久久久久| 天天色天天爱天天射综合| 蜜桃av噜噜一区| 国产一区二区三区免费观看| 国产一区日韩二区欧美三区| 国产精品香蕉一区二区三区| 国产成人超碰人人澡人人澡| 成人国产精品免费观看动漫| 99re成人精品视频| 欧美日韩精品免费观看视频| 日韩一卡二卡三卡四卡| 精品电影一区二区三区| 欧美激情在线看| 一区二区三区美女| 蜜臀久久99精品久久久久宅男 | 亚洲不卡一区二区三区| 免费观看在线综合| 国产成人免费在线视频| 91视频精品在这里| 91精品国产综合久久蜜臀| 久久午夜电影网| 亚洲精品乱码久久久久| 麻豆一区二区三| 波多野结衣精品在线| 欧美亚洲一区二区在线观看| 日韩欧美一区中文| 日韩码欧中文字| 日本亚洲电影天堂| 成人免费视频网站在线观看| 欧美主播一区二区三区| 日韩免费性生活视频播放| 国产精品乱人伦一区二区| 亚洲成人av电影在线| 国产精品白丝jk黑袜喷水| 91蜜桃免费观看视频| 亚洲精品在线观看视频| 亚洲黄色在线视频| 国产最新精品精品你懂的| 欧洲视频一区二区| 久久精品欧美日韩精品| 天天色天天爱天天射综合| av不卡一区二区三区| 欧美videos大乳护士334| 亚洲乱码日产精品bd| 国产一区二区三区在线观看精品 | 欧美一三区三区四区免费在线看 | 成人精品国产免费网站| 3d成人动漫网站| 亚洲欧洲国产专区| 狠狠色丁香久久婷婷综合_中| 精品视频一区二区三区免费| 日本一区二区成人| 久久国产人妖系列| 在线不卡a资源高清| 一区二区三区欧美在线观看| 国产久卡久卡久卡久卡视频精品| 欧美精品色综合| 一区二区三区日韩精品视频| 成人av资源下载| 久久久久久久综合| 精品一区二区三区在线播放 | 91亚洲精品久久久蜜桃| 久久综合狠狠综合久久综合88| 亚洲gay无套男同| 色婷婷av一区| 1区2区3区精品视频| 国产福利91精品一区| 精品99一区二区三区| 日韩av在线播放中文字幕| 欧美亚洲精品一区| 亚洲国产精品久久人人爱蜜臀| 色综合久久88色综合天天6| 国产精品久久久久久久久久免费看| 国产一区二区三区电影在线观看| 精品免费一区二区三区|