精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

鴻蒙輕內核M核源碼分析系列四中斷Hwi

系統
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com

[[398553]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

鴻蒙輕內核M核源碼分析系列五 中斷Hwi

在鴻蒙輕內核源碼分析系列前幾篇文章中,剖析了重要的數據結構。本文,我們講述一下中斷,會給讀者介紹中斷的概念,鴻蒙輕內核的中斷模塊的源代碼。

1、中斷概念介紹

中斷是指出現需要時,CPU暫停執行當前程序,轉而執行新程序的過程。當外設需要CPU時,將通過產生中斷信號使CPU立即中斷當前任務來響應中斷請求。在剖析中斷源代碼之前,下面介紹些中斷相關的硬件、中斷相關的概念。

1.1 中斷相關的硬件介紹

與中斷相關的硬件可以劃分為三類:設備、中斷控制器、CPU本身。

  • 設備

發起中斷的源,當設備需要請求CPU時,產生一個中斷信號,該信號連接至中斷控制器。

  • 中斷控制器

中斷控制器是CPU眾多外設中的一個,它一方面接收其它外設中斷引腳的輸入。另一方面,它會發出中斷信號給CPU。可以通過對中斷控制器編程來打開和關閉中斷源、設置中斷源的優先級和觸發方式。

  • CPU

CPU會響應中斷源的請求,中斷當前正在執行的任務,轉而執行中斷處理程序。

1.2 中斷相關的概念

  • 中斷號

每個中斷請求信號都會有特定的標志,使得計算機能夠判斷是哪個設備提出的中斷請求,這個標志就是中斷號。

  • 中斷優先級

為使系統能夠及時響應并處理所有中斷,系統根據中斷時間的重要性和緊迫程度,將中斷源分為若干個級別,稱作中斷優先級。

  • 中斷處理程序

當外設產生中斷請求后,CPU暫停當前的任務,轉而響應中斷申請,即執行中斷處理程序。產生中斷的每個設備都有相應的中斷處理程序。

  • 中斷向量

中斷服務程序的入口地址。

  • 中斷向量表

存儲中斷向量的存儲區,中斷向量與中斷號對應,中斷向量在中斷向量表中按照中斷號順序存儲。

  • 中斷共享

當外設較少時,可以實現一個外設對應一個中斷號,但為了支持更多的硬件設備,可以讓多個設備共享一個中斷號,共享同一個中斷號的中斷處理程序形成一個鏈表。當外部設備產生中斷申請時,系統會遍歷中斷號對應的中斷處理程序鏈表,直到找到對應設備的中斷處理程序。在遍歷執行過程中,各中斷處理程序可以通過檢測設備ID,判斷是否是這個中斷處理程序對應的設備產生的中斷。

接下來,我們再看看鴻蒙輕內核中斷源代碼。

2、鴻蒙輕內核中斷源代碼

2.1 中斷相關的聲明和定義

在文件kernel\arch\arm\cortex-m7\gcc\los_interrupt.c中定義了一些結構體、全局變量、內聯函數,在分析源碼之前,我們先看下這些定義和聲明。全部變量g_intCount表示正在處理的中斷數量,每次進入中斷處理程序時,都會把該變量數值加1,完成中斷處理退出時,該數值減1。對應的內聯函數HalIsIntActive()用于獲取是否正在處理中斷,返回值大于0,則表示正在處理中斷。

  1. UINT32 g_intCount = 0; 
  2.  
  3. inline UINT32 HalIsIntActive(VOID) 
  4.     return (g_intCount > 0); 

 我們在再看看中斷向量表定義。⑴處代碼為系統支持的中斷定義了數組g_hwiForm[OS_VECTOR_CNT],對于每一個中斷號hwiNum,對應的數組元素g_hwiForm[hwiNum]表示每一個中斷對應的中斷處理執行入口程序。⑵處的宏OS_HWI_WITH_ARG表示中斷處理程序是否支持參數傳入,默認關閉。如果支持傳參,定義⑶處的結構體HWI_HANDLER_FUNC來維護中斷處理函數及其參數,還需要定義⑷處g_hwiHandlerForm數組。如果不支持傳參,使用⑹處定義的g_hwiHandlerForm數組。對于每一個中斷號hwiNum,對應的數組元素g_hwiHandlerForm[hwiNum]表示每一個中斷對應的中斷處理程序。⑸、⑺處定義個函數OsSetVector()用于設置指定中斷號對應的中斷處理執行入口程序和中斷處理程序。中斷處理執行入口程序和中斷處理程序的關系是,當中斷發生時,會執行中斷處理執行入口程序,這個函數會進一步調用中斷處理程序。

  1. ⑴  STATIC HWI_PROC_FUNC __attribute__((aligned(0x100))) g_hwiForm[OS_VECTOR_CNT] = {0}; 
  2.  
  3. ⑵  #if (OS_HWI_WITH_ARG == 1) 
  4.  
  5. ⑶  typedef struct { 
  6.         HWI_PROC_FUNC pfnHandler; 
  7.         VOID *pParm; 
  8.     } HWI_HANDLER_FUNC; 
  9.  
  10. ⑷  STATIC HWI_HANDLER_FUNC g_hwiHandlerForm[OS_VECTOR_CNT] = {{ (HWI_PROC_FUNC)0, (HWI_ARG_T)0 }}; 
  11.  
  12.  
  13. ⑸  VOID OsSetVector(UINT32 num, HWI_PROC_FUNC vector, VOID *arg) 
  14.     { 
  15.         if ((num + OS_SYS_VECTOR_CNT) < OS_VECTOR_CNT) { 
  16.             g_hwiForm[num + OS_SYS_VECTOR_CNT] = (HWI_PROC_FUNC)HalInterrupt; 
  17.             g_hwiHandlerForm[num + OS_SYS_VECTOR_CNT].pfnHandler = vector; 
  18.             g_hwiHandlerForm[num + OS_SYS_VECTOR_CNT].pParm = arg; 
  19.         } 
  20.     } 
  21.  
  22.     #else 
  23.  
  24. ⑹  STATIC HWI_PROC_FUNC g_hwiHandlerForm[OS_VECTOR_CNT] = {0}; 
  25.  
  26. ⑺   VOID OsSetVector(UINT32 num, HWI_PROC_FUNC vector) 
  27.     { 
  28.         if ((num + OS_SYS_VECTOR_CNT) < OS_VECTOR_CNT) { 
  29.             g_hwiForm[num + OS_SYS_VECTOR_CNT] = HalInterrupt; 
  30.             g_hwiHandlerForm[num + OS_SYS_VECTOR_CNT] = vector; 
  31.         } 
  32.     } 
  33.     #endif 

 2.2 中斷初始化HalHwiInit()

在系統啟動時,在kernel\src\los_init.c中調用HalArchInit()進行中斷初始化。這個函數定義在kernel\arch\arm\cortex-m7\gcc\los_context.c,然后進一步調用定義在kernel\arch\arm\cortex-m7\gcc\los_interrupt.c文件中HalHwiInit()函數完成中斷向量初始化。我們分析下代碼。

宏LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT表示是否使用系統預定義的向量基地址和中斷處理程序,默認開啟。⑴處開始,中斷向量表的0號中斷設置為空,1號中斷對應復位處理程序Reset_Handler。⑵處把其余的中斷設置為默認的中斷處理執行入口程序HalHwiDefaultHandler()。⑶處設置系統中斷(異常是中斷的一種,系統中斷也稱為異常),系統中斷的執行入口函數定義在kernel\arch\arm\cortex-m7\gcc\los_exc.S,使用匯編語言實現。系統中斷中,14號中斷對應HalPendSV處理程序,用于任務上下文切換,15號中斷是tick中斷。

執行⑷處代碼把中斷向量表賦值給SCB->VTOR。對于Cortex-M3及以上的CPU核,還需要執行⑸設置優先級組。⑹處代碼使能指定的異常。

  1. LITE_OS_SEC_TEXT_INIT VOID HalHwiInit() 
  2. #if (LOSCFG_USE_SYSTEM_DEFINED_INTERRUPT == 1) 
  3.     UINT32 index
  4. ⑴  g_hwiForm[0] = 0;             /* [0] Top of Stack */ 
  5.     g_hwiForm[1] = Reset_Handler; /* [1] reset */ 
  6. ⑵  for (index = 2; index < OS_VECTOR_CNT; index++) { /* 2: The starting position of the interrupt */ 
  7.         g_hwiForm[index] = (HWI_PROC_FUNC)HalHwiDefaultHandler; 
  8.     } 
  9.     /* Exception handler register */ 
  10. ⑶  g_hwiForm[NonMaskableInt_IRQn + OS_SYS_VECTOR_CNT]   = HalExcNMI; 
  11.     g_hwiForm[HARDFAULT_IRQN + OS_SYS_VECTOR_CNT]        = HalExcHardFault; 
  12.     g_hwiForm[MemoryManagement_IRQn + OS_SYS_VECTOR_CNT] = HalExcMemFault; 
  13.     g_hwiForm[BusFault_IRQn + OS_SYS_VECTOR_CNT]         = HalExcBusFault; 
  14.     g_hwiForm[UsageFault_IRQn + OS_SYS_VECTOR_CNT]       = HalExcUsageFault; 
  15.     g_hwiForm[SVCall_IRQn + OS_SYS_VECTOR_CNT]           = HalExcSvcCall; 
  16.     g_hwiForm[PendSV_IRQn + OS_SYS_VECTOR_CNT]           = HalPendSV; 
  17.     g_hwiForm[SysTick_IRQn + OS_SYS_VECTOR_CNT]          = SysTick_Handler; 
  18.  
  19.     /* Interrupt vector table location */ 
  20. ⑷  SCB->VTOR = (UINT32)(UINTPTR)g_hwiForm; 
  21. #endif 
  22. #if (__CORTEX_M >= 0x03U) /* only for Cortex-M3 and above */ 
  23. ⑸   NVIC_SetPriorityGrouping(OS_NVIC_AIRCR_PRIGROUP); 
  24. #endif 
  25.  
  26.     /* Enable USGFAULT, BUSFAULT, MEMFAULT */ 
  27. ⑹   *(volatile UINT32 *)OS_NVIC_SHCSR |= (USGFAULT | BUSFAULT | MEMFAULT); 
  28.     /* Enable DIV 0 and unaligned exception */ 
  29.     *(volatile UINT32 *)OS_NVIC_CCR |= DIV0FAULT; 
  30.  
  31.     return

 2.3 創建中斷UINT32 HalHwiCreate()

開發者可以調用函數UINT32 HalHwiCreate()創建中斷,注冊中斷處理程序。我們先看看這個函數的參數,HWI_HANDLE_T hwiNum是硬件中斷號,HWI_PRIOR_T hwiPrio中斷的優先級,HWI_MODE_T mode中斷模式,保留暫時沒有使用。HWI_PROC_FUNC handler是需要注冊的中斷處理程序,中斷被觸發后會調用這個函數。HWI_ARG_T arg是中斷處理程序的參數。

一起剖析下這個函數的源代碼,⑴處代碼開始,對入參進行校驗,中斷處理程序不能為空,中斷號不能大于支持的最大中斷號,中斷優先級不能超過指定優先級的大小。如果待創建的中斷號對應的中斷執行入口程序不等于HalHwiDefaultHandler,說明已經創建過,返回錯誤碼。關中斷,然后執行⑵處的OsSetVector()函數設置指定中斷號的中斷處理程序。⑶處調用CMSIS函數使能中斷、設置中斷的優先級,打開中斷,完成中斷的創建。

  1. LITE_OS_SEC_TEXT_INIT UINT32 HalHwiCreate(HWI_HANDLE_T hwiNum, 
  2.                                           HWI_PRIOR_T hwiPrio, 
  3.                                           HWI_MODE_T mode, 
  4.                                           HWI_PROC_FUNC handler, 
  5.                                           HWI_ARG_T arg) 
  6.     UINTPTR intSave; 
  7.  
  8. ⑴  if (handler == NULL) { 
  9.         return OS_ERRNO_HWI_PROC_FUNC_NULL; 
  10.     } 
  11.  
  12.     if (hwiNum >= OS_HWI_MAX_NUM) { 
  13.         return OS_ERRNO_HWI_NUM_INVALID; 
  14.     } 
  15.  
  16.     if (g_hwiForm[hwiNum + OS_SYS_VECTOR_CNT] != (HWI_PROC_FUNC)HalHwiDefaultHandler) { 
  17.         return OS_ERRNO_HWI_ALREADY_CREATED; 
  18.     } 
  19.  
  20.     if (hwiPrio > OS_HWI_PRIO_LOWEST) { 
  21.         return OS_ERRNO_HWI_PRIO_INVALID; 
  22.     } 
  23.  
  24.     intSave = LOS_IntLock(); 
  25. #if (OS_HWI_WITH_ARG == 1) 
  26.     OsSetVector(hwiNum, handler, arg); 
  27. #else 
  28. ⑵   OsSetVector(hwiNum, handler); 
  29. #endif 
  30. ⑶  NVIC_EnableIRQ((IRQn_Type)hwiNum); 
  31.     NVIC_SetPriority((IRQn_Type)hwiNum, hwiPrio); 
  32.  
  33.     LOS_IntRestore(intSave); 
  34.  
  35.     return LOS_OK; 

 2.4 刪除中斷UINT32 HalHwiDelete()

中斷刪除操作是創建操作的反向操作,也比較好理解。開發者可以調用函數UINT32 HalHwiDelete(HWI_HANDLE_T hwiNum)來刪除中斷。函數需要指定中斷號參數HWI_HANDLE_T hwiNum。一起剖析下這個函數的源代碼,⑴處代碼對入參進行校驗,不能大于支持的最大中斷號。⑵處調用CMSIS函數來失能中斷,然后鎖中斷,執行⑶把中斷向量表指定中斷號的中斷執行入口程序設置為默認程序HalHwiDefaultHandler。

  1. LITE_OS_SEC_TEXT_INIT UINT32 HalHwiDelete(HWI_HANDLE_T hwiNum) 
  2.     UINT32 intSave; 
  3.  
  4. ⑴  if (hwiNum >= OS_HWI_MAX_NUM) { 
  5.         return OS_ERRNO_HWI_NUM_INVALID; 
  6.     } 
  7.  
  8. ⑵  NVIC_DisableIRQ((IRQn_Type)hwiNum); 
  9.  
  10.     intSave = LOS_IntLock(); 
  11.  
  12. ⑶  g_hwiForm[hwiNum + OS_SYS_VECTOR_CNT] = (HWI_PROC_FUNC)HalHwiDefaultHandler; 
  13.  
  14.     LOS_IntRestore(intSave); 
  15.  
  16.     return LOS_OK; 

 2.5 中斷處理執行入口程序

我們再來看看中斷處理執行入口程序。默認的函數HalHwiDefaultHandler()如下,調用函數HalIntNumGet()獲取中斷號,打印輸出,然后進行死循環。其中函數HalIntNumGet()讀取寄存器ipsr來獲取觸發的中斷的中斷號。

  1. LITE_OS_SEC_TEXT_MINOR VOID HalHwiDefaultHandler(VOID) 
  2.     UINT32 irqNum = HalIntNumGet(); 
  3.     PRINT_ERR("%s irqNum:%d\n", __FUNCTION__, irqNum); 
  4.     while (1) {} 

 繼續來看中斷處理執行入口程序HalInterrupt(),源碼如下。

⑴處把全局變量g_intCount表示的正在處理的中斷數量加1,在中斷執行完畢后,在⑹處再把正在處理的中斷數量減1。⑵處調用函數HalIntNumGet()獲取中斷號,⑶、⑸處調用的函數HalPreInterruptHandler(),HalAftInterruptHandler()在執行中斷處理程序前、后可以處理些其他操作,當前默認為空函數。⑷處根據中斷號從中斷處理程序數組中獲取中斷處理程序,不為空就調用執行。

  1. LITE_OS_SEC_TEXT VOID HalInterrupt(VOID) 
  2.     UINT32 hwiIndex; 
  3.     UINT32 intSave; 
  4.  
  5. #if (LOSCFG_KERNEL_RUNSTOP == 1) 
  6.     SCB->SCR &= (UINT32) ~((UINT32)SCB_SCR_SLEEPDEEP_Msk); 
  7. #endif 
  8.  
  9.     intSave = LOS_IntLock(); 
  10.  
  11. ⑴  g_intCount++; 
  12.  
  13.     LOS_IntRestore(intSave); 
  14.  
  15. ⑵  hwiIndex = HalIntNumGet(); 
  16.  
  17.     OsHookCall(LOS_HOOK_TYPE_ISR_ENTER, hwiIndex); 
  18.  
  19. ⑶  HalPreInterruptHandler(hwiIndex); 
  20.  
  21. #if (OS_HWI_WITH_ARG == 1) 
  22.     if (g_hwiHandlerForm[hwiIndex].pfnHandler != 0) { 
  23.         g_hwiHandlerForm[hwiIndex].pfnHandler((VOID *)g_hwiHandlerForm[hwiIndex].pParm); 
  24.     } 
  25. #else 
  26.     if (g_hwiHandlerForm[hwiIndex] != 0) { 
  27. ⑷      g_hwiHandlerForm[hwiIndex](); 
  28.     } 
  29. #endif 
  30.  
  31. ⑸   HalAftInterruptHandler(hwiIndex); 
  32.  
  33.     OsHookCall(LOS_HOOK_TYPE_ISR_EXIT, hwiIndex); 
  34.  
  35.     intSave = LOS_IntLock(); 
  36. ⑹  g_intCount--; 
  37.     LOS_IntRestore(intSave); 

 3、開關中斷

最后,分享下開、關中斷的相關知識,開、關中斷分別指的是:

  • 開中斷

執行完畢特定的短暫的程序,打開中斷,可以響應中斷。

  • 關中斷

為了保護執行的程序不被打斷,關閉相應外部的中斷。

對應的開、關中斷的函數定義在文件kernel\arch\include\los_context.h中,代碼如下。⑴處的UINT32 LOS_IntLock(VOID)會關閉中斷,暫停響應中斷。⑵處的函數VOID LOS_IntRestore(UINT32 intSave)可以用來恢復UINT32 LOS_IntLock(VOID)函數關閉的中斷,UINT32 LOS_IntLock(VOID)的返回值作為VOID LOS_IntRestore(UINT32 intSave)的參數進行恢復中斷。⑶處的函數UINT32 LOS_IntUnLock(VOID)會使能中斷,可以響應中斷。

  1. UINTPTR HalIntLock(VOID); 
  2. define LOS_IntLock HalIntLock 
  3.  
  4. VOID HalIntRestore(UINTPTR intSave); 
  5. define LOS_IntRestore HalIntRestore 
  6.  
  7. UINTPTR HalIntUnLock(VOID); 
  8. define LOS_IntUnLock HalIntUnLock 

 可以看出,LOS_IntLock、LOS_IntRestore和LOS_IntUnLock是定義的宏,他們對應定義在文件kernel\arch\arm\cortex-m7\gcc\los_dispatch.S中的匯編函數,源碼如下。我們分析下這些匯編函數。寄存器PRIMASK是單一bit位的寄存器,置為1后,就關掉所有可屏蔽異常,只剩下NMI和硬故障HardFault異常可以響應。默認值是0,表示沒有關閉中斷。匯編指令CPSID I會設置PRIMASK=1,關閉中斷,指令CPSIE I設置PRIMASK=0,開啟中斷。

⑴處HalIntLock函數把寄存器PRIMASK數值寫入寄存器R0返回,并執行CPSID I關閉中斷。⑵處HalIntUnLock函數把寄存器PRIMASK數值寫入寄存器R0返回,并執行指令CPSIE I開啟中斷。兩個函數的返回結果可以傳遞給⑶處HalIntRestore函數,把寄存器狀態數值寫入寄存器PRIMASK,用于恢復之前的中斷狀態。不管是HalIntLock還是HalIntUnLock,都可以和ArchIntRestore配對使用。

  1.    .type HalIntLock, %function 
  2.     .global HalIntLock 
  3. HalIntLock: 
  4.     .fnstart 
  5.     .cantunwind 
  6.  
  7. ⑴  MRS R0, PRIMASK 
  8.     CPSID I 
  9.     BX LR 
  10.     .fnend 
  11.  
  12.     .type HalIntUnLock, %function 
  13.     .global HalIntUnLock 
  14. HalIntUnLock: 
  15.     .fnstart 
  16.     .cantunwind 
  17.  
  18. ⑵  MRS R0, PRIMASK 
  19.     CPSIE I 
  20.     BX LR 
  21.     .fnend 
  22.  
  23.     .type HalIntRestore, %function 
  24.     .global HalIntRestore 
  25. HalIntRestore: 
  26.     .fnstart 
  27.     .cantunwind 
  28.  
  29. ⑶  MSR PRIMASK, R0 
  30.     BX LR 
  31.     .fnend 

 小結

本文帶領大家一起剖析了鴻蒙輕內核的中斷模塊的源代碼,掌握中斷相關的概念,中斷初始化操作,中斷創建、刪除,開關中斷操作等。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-06-04 09:57:49

鴻蒙HarmonyOS應用

2022-01-10 15:31:44

鴻蒙HarmonyOS應用

2022-01-12 10:50:23

鴻蒙HarmonyOS應用

2021-10-20 16:08:57

鴻蒙HarmonyOS應用

2021-05-25 09:28:34

鴻蒙HarmonyOS應用

2021-06-04 14:15:10

鴻蒙HarmonyOS應用

2021-05-17 09:28:59

鴻蒙HarmonyOS應用

2021-05-08 15:14:50

鴻蒙HarmonyOS應用

2021-05-31 20:30:55

鴻蒙HarmonyOS應用

2022-03-03 18:28:28

Harmony進程任務管理模塊

2022-04-13 11:02:12

鴻蒙事件模塊事件Event

2022-03-11 20:23:14

鴻蒙源碼分析進程管理

2021-05-27 09:43:56

鴻蒙HarmonyOS應用

2021-06-09 09:48:01

鴻蒙HarmonyOS應用

2021-05-21 09:25:11

鴻蒙HarmonyOS應用

2021-09-22 14:36:32

鴻蒙HarmonyOS應用

2021-07-06 09:45:03

鴻蒙HarmonyOS應用

2021-05-12 09:45:20

鴻蒙HarmonyOS應用

2022-01-14 08:39:47

鴻蒙HarmonyOS應用

2021-05-10 15:05:56

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

农村少妇久久久久久久| 无码人妻丰满熟妇区毛片蜜桃精品 | 亚州成人av在线| 黄色污在线观看| 一区在线影院| 一个色在线综合| 日本不卡在线播放| 国产哺乳奶水91在线播放| 国产日韩欧美一区在线| 日韩在线小视频| 艳妇乳肉亭妇荡乳av| **国产精品| 欧美色播在线播放| 天堂а√在线中文在线| 国产精品免费播放| 成人黄色小视频在线观看| 国产精品日韩专区| xxxx.国产| 欧美国产日本| 亚洲欧洲xxxx| 丰满岳乱妇一区二区| 国产成人久久精品麻豆二区| 亚洲国产视频一区二区| 亚洲精品中文字幕在线| 污污视频在线免费看| 国产一区二区久久| 国产日产欧美a一级在线| 久久久久亚洲av成人毛片韩| 午夜亚洲福利| 久久精品视频va| 亚洲人精品午夜在线观看| 五月天激情图片| 成人av毛片| 久久久综合网站| 精品一区久久久久久| 精品久久在线观看| 激情六月婷婷久久| 国产欧美久久一区二区| 日本中文字幕第一页| 99热免费精品在线观看| 久久久久久久久久久91| 黄色一级视频免费| 综合精品一区| 欧美精品日韩www.p站| 少妇视频一区二区| 天天做天天爱综合| 精品国产欧美成人夜夜嗨| 综合 欧美 亚洲日本| 超碰97久久国产精品牛牛| 日韩天堂在线观看| 亚洲熟妇一区二区| 99久久婷婷国产综合精品青牛牛| 日韩欧美国产三级电影视频| 一级片免费在线观看视频| 国产精品**亚洲精品| 欧美高清性hdvideosex| 91看片破解版| 国产一区二区三区免费观看在线| 欧美疯狂做受xxxx富婆| 午夜xxxxx| 秋霞一区二区三区| 亚洲成av人乱码色午夜| 国产xxxx视频| 思热99re视热频这里只精品| 国产婷婷97碰碰久久人人蜜臀 | 91老师片黄在线观看| 久久久久一区二区| 国产视频福利在线| 国产精品美女久久久久久久| 一区二区三视频| av免费网站在线观看| 一区二区成人在线观看| 无码人妻丰满熟妇区96| 日韩高清成人| 日韩一区二区三区在线视频| 国产视频一区二区不卡| 婷婷激情5月天| 白嫩亚洲一区二区三区| 日韩欧美中文字幕制服| 四虎精品一区二区| 蜜桃一区二区三区| 日韩在线视频线视频免费网站| 伊人在线视频观看| 亚洲免费播放| 国产精品高清在线观看| 国产视频第一页| proumb性欧美在线观看| 日韩av一区二区三区美女毛片| www视频在线观看免费| 亚洲日本韩国一区| 91专区在线观看| 99只有精品| 亚洲精品一区二区三区蜜桃下载 | 久久久久久久久久婷婷| 国产一区二区视频网站| 精品一二三四区| 激情五月综合色婷婷一区二区| 精品美女视频在线观看免费软件 | 可以免费看的黄色网址| 国产激情视频在线看| 欧美视频中文字幕| 熟妇高潮一区二区| 99免费精品| 2019精品视频| 99久久精品国产色欲| 久久人人爽爽爽人久久久| 成人性做爰片免费视频| 神马久久资源| 亚洲精品一区二区三区影院| 少妇高潮惨叫久久久久| 91久久夜色精品国产九色| 国产免费一区视频观看免费| 无码精品人妻一区二区| 亚洲三级在线播放| 男女啪啪网站视频| 国产精品久久久网站| 久久天天躁狠狠躁夜夜爽蜜月| 欧美一级特黄视频| 丁香桃色午夜亚洲一区二区三区| 亚洲乱码一区二区三区| 制服丝袜专区在线| 亚洲欧洲一区| 538prom精品视频线放| 国产白嫩美女无套久久| 欧美日本一区二区高清播放视频| 国产精品91在线观看| 天天舔天天干天天操| 伊人开心综合网| 我看黄色一级片| 一本色道久久综合亚洲精品酒店 | 亚洲精品一区二区三区四区五区| 98色花堂精品视频在线观看| 欧美成人伊人久久综合网| 任你操精品视频| 视频一区在线播放| 欧美精品欧美精品| 忘忧草在线日韩www影院| 日韩久久久久久| 小泽玛利亚一区二区免费| 麻豆91在线看| 一区二区三区国| 国产一区精品福利| 国产网站欧美日韩免费精品在线观看 | 成人免费在线视频观看| 91欧美视频在线| 精品久久久久中文字幕小说 | 最近2019年中文视频免费在线观看| 99久久精品国产亚洲| av在线一区二区三区| 色欲色香天天天综合网www| 风间由美性色一区二区三区四区| 精品中文字幕乱| 亚洲大尺度网站| 亚洲一区二区三区在线看| 佐山爱在线视频| 欧美日一区二区在线观看| 成人欧美一区二区三区黑人免费| 欧美xxxxhdvideosex| 精品国一区二区三区| 国产无码精品在线观看| 97se亚洲国产综合自在线不卡 | 裸体一区二区三区| 综合色婷婷一区二区亚洲欧美国产| 国语自产精品视频在线看抢先版结局| 原创国产精品91| 国产精品久久777777换脸| 亚洲三级在线看| 精品视频在线观看日韩| 日日碰狠狠添天天爽| 久久国产夜色精品鲁鲁99| 久久久久久久久久久久久国产| 日韩高清一区| 性欧美办公室18xxxxhd| 色播色播色播色播色播在线| 欧美性猛交xxxx黑人交| 日韩精品一区二区三区在线视频| 极品少妇一区二区| 性高湖久久久久久久久aaaaa| 精品精品精品| 国产精品人成电影| 97超碰在线公开在线看免费| 精品乱人伦小说| 中文在线第一页| 中文字幕一区视频| 日本不卡视频一区| 欧美aaa在线| 免费观看中文字幕| 久久影院资源站| 国产视频观看一区| 二区在线播放| 国产丝袜高跟一区| 国产绿帽一区二区三区| 五月天丁香久久| 国内毛片毛片毛片毛片毛片| 不卡视频在线看| 一女二男3p波多野结衣| 亚洲精品社区| 一区二区三区我不卡| 韩国女主播一区二区三区| 国产精品吴梦梦| h片在线观看视频免费免费| 中文国产成人精品久久一| 丰满人妻一区二区| 欧美男人的天堂一二区| 老熟妇仑乱一区二区av| 亚洲精品乱码久久久久| 色综合99久久久无码国产精品| 国产成人三级在线观看| 另类小说第一页| 99亚洲视频| 91国在线高清视频| 日韩在线高清| 欧美日韩精品综合| 国产精品白浆| 91视频国产高清| 亚洲a∨精品一区二区三区导航| 欧美黄色性视频| 日本高清中文字幕在线| 亚洲欧洲一区二区三区在线观看| 俄罗斯嫩小性bbwbbw| 欧美猛男超大videosgay| 无码任你躁久久久久久久| 午夜精品影院在线观看| 一区视频免费观看 | 青娱乐在线视频免费观看| 国产目拍亚洲精品99久久精品| 亚洲天堂av网站| 国产成人一级电影| 久久久福利影院| 精品一区二区三区免费观看| 无需播放器的av| 丝袜a∨在线一区二区三区不卡| 国产精品国产亚洲精品看不卡| 午夜久久免费观看| 亚洲美女视频在线| 女人扒开屁股爽桶30分钟| 一区二区亚洲| 激情五月婷婷六月| 欧美日韩国产精品一区二区亚洲| 中文有码久久| 婷婷伊人综合| 亚洲一区二区在| 久久激情电影| 一区二区在线观看网站| 日韩欧美大片| 中文精品一区二区三区| 我不卡影院28| 青青草免费在线视频观看| 欧美激情在线| cao在线观看| 一区视频在线| jizzjizz国产精品喷水| 国产精品美女| 麻豆传传媒久久久爱| 老牛嫩草一区二区三区日本| 国产免费成人在线| 日本亚洲一区二区| 黄色手机在线视频| 韩国毛片一区二区三区| japan高清日本乱xxxxx| 国产成人精品影院| 国产精品久久不卡| 久久久久久久久久久电影| av黄色在线免费观看| 中文字幕第一区综合| 国产又粗又长又硬| 亚洲啪啪综合av一区二区三区| 久久免费看少妇高潮v片特黄 | 成人黄色大片在线观看 | 任你躁在线精品免费| 六十路精品视频| 精品国产91久久久久久浪潮蜜月| 天天综合色天天综合色hd| 9999国产精品| 精品一区二区三区无码视频| 99精品国产一区二区青青牛奶| 免费日韩中文字幕| 麻豆精品精品国产自在97香蕉| 国产永久免费网站| 成人午夜av在线| 理论片在线不卡免费观看| 日本在线免费| 国内久久久精品| 欧美成人精品三级网站| 91久久嫩草影院一区二区| 大桥未久女教师av一区二区| 人偷久久久久久久偷女厕| 97精品国产| 国产精品无码av在线播放| 日韩精品福利网| 4438x全国最大成人| 久久一夜天堂av一区二区三区| 大地资源高清在线视频观看| 亚州成人在线电影| 久草热在线观看| 亚洲成av人片在线观看香蕉| yes4444视频在线观看| 久久久久久久久久国产精品| 久久精品 人人爱| 国产在线精品日韩| 久久亚洲精品中文字幕蜜潮电影| 极品美女扒开粉嫩小泬| 黄色日韩网站视频| 野外性满足hd| 亚洲免费在线观看视频| 18国产免费视频| 亚洲精品久久7777777| 欧美jizzhd69巨大| 日本中文字幕久久看| 秋霞一区二区| 一本一道久久a久久综合精品| 国产日韩亚洲欧美精品| 亚洲综合123| 亚洲国产精品99久久久久久久久| 91av在线免费视频| 91精品国产综合久久精品| 免费动漫网站在线观看| 午夜精品久久久久久久久久久久 | 亚洲精品影视| 日本一二三四区视频| 国产欧美精品一区二区色综合朱莉| 国产第100页| 日韩一区二区三区在线视频| av电影在线观看网址| 日产精品久久久一区二区福利 | 亚洲免费视频一区| 国产一区二区三区的电影 | 国产精品无码一区二区桃花视频| 日韩精品视频中文在线观看| 国产精品一品| 国产精品手机在线| 国产精品草草| 欧美人与性动交α欧美精品| 国产精品第13页| 伊人久久国产精品| 在线不卡国产精品| 精品欧美一区二区三区在线观看 | 国产精品1000部啪视频| 亚洲国产aⅴ成人精品无吗| 精品二区在线观看| 萌白酱国产一区二区| www.久久久.com| 在线观看日韩片| 黑人巨大精品欧美一区| 色偷偷www8888| 在线不卡免费av| 国产日产一区二区三区| 成人激情黄色网| 亚洲精品中文字幕乱码| 看看黄色一级片| 亚洲黄色录像片| 丰满少妇高潮在线观看| 欧美大片免费看| 高潮无码精品色欲av午夜福利| 国产精品久久久久久久久免费桃花 | h视频网站在线观看| 国产精品欧美激情在线播放| 欧美日韩精品在线一区| 欧美三级理论片| 综合久久给合久久狠狠狠97色| 国产欧美一区二区三区视频在线观看| 久久精品成人动漫| 精品视频在线观看网站| 丁香六月激情网| 99免费精品在线观看| 人妻 日韩精品 中文字幕| 一本久久综合亚洲鲁鲁| 精品国产黄a∨片高清在线| 在线观看成人av| 成人小视频免费观看| 激情五月色婷婷| 亚洲无限av看| 精品999日本久久久影院| 久久国产午夜精品理论片最新版本| 成人久久18免费网站麻豆| 国产视频91在线| 尤物yw午夜国产精品视频明星| 91国产精品| 欧美国产日韩激情| 国产亚洲一区字幕| av老司机久久| 欧美性一区二区三区| 成人久久电影| 一本色道久久hezyo无码| 色综合久久久久久久久| 日本在线观看www| 国产精品对白刺激久久久| 午夜在线视频观看日韩17c| 国产中文字幕久久| 亚洲福利在线视频| www.久久久久久| 国产精品成人在线观看| 中日韩av在线| 欧美激情亚洲综合一区| 全球成人免费直播| 催眠调教后宫乱淫校园| 欧美人伦禁忌dvd放荡欲情| 高清精品在线| 一区二区在线中文字幕电影视频| 99视频在线观看一区三区|