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

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

?? wmi.c

?? WLAN在AR6000程序中的驅動代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
        wmi_gpio_data_rx(wmip, datap, len);
        break;
    case (WMIX_GPIO_ACK_EVENTID):
        wmi_gpio_ack_rx(wmip, datap, len);
        break;
#endif /* CONFIG_HOST_GPIO_SUPPORT */
    default:
        WMI_DEBUG_PRINTF(ATH_LOG_ERR,
			             "Host received unknown extended reply/event with id 0x%x\n",
                         id);
        wmip->wmi_stats.cmd_id_err++;
        status = A_ERROR;
        break;
    }

    return status;
}

/*
 * Control Path
 */
A_STATUS
wmi_control_rx(struct wmi_t *wmip, void *osbuf)
{
    WMI_CMD_HDR *cmd;
    A_UINT16 id;
    A_UINT8 *datap;
    A_UINT32 len;
    A_STATUS status = A_OK;

    AR_DEBUG_ASSERT(osbuf != NULL);
    if (a_netbuf_to_len(osbuf) < sizeof(WMI_CMD_HDR)) {
        WMI_DEBUG_PRINTF(ATH_LOG_ERR,"wmi event rx: bad packet\n");
        wmip->wmi_stats.cmd_len_err++;
        return A_ERROR;
    }

    cmd = (WMI_CMD_HDR *)a_netbuf_to_data(osbuf);
    id = cmd->commandId;

    if (a_netbuf_pull(osbuf, sizeof(WMI_CMD_HDR)) != A_OK) {
        WMI_DEBUG_PRINTF(ATH_LOG_ERR,"wmi event rx: bad packet\n");
        wmip->wmi_stats.cmd_len_err++;
        return A_ERROR;
    }

    datap = a_netbuf_to_data(osbuf);
    len = a_netbuf_to_len(osbuf);

    switch (id) {
    case (WMI_CREATE_PSTREAM_CMDID):
        status = wmi_create_pstream_reply_rx(wmip, datap, len);
        break;
    case (WMI_DELETE_PSTREAM_CMDID):
        status = wmi_delete_pstream_reply_rx(wmip, datap, len);
        break;
    case (WMI_GET_BITRATE_CMDID):
        status = wmi_bitrate_reply_rx(wmip, datap, len);
        break;
    case (WMI_GET_CHANNEL_LIST_CMDID):
        status = wmi_channelList_reply_rx(wmip, datap, len);
        break;
    case (WMI_GET_TX_PWR_CMDID):
        status = wmi_txPwr_reply_rx(wmip, datap, len);
        break;
    case (WMI_READY_EVENTID):
        status = wmi_ready_event_rx(wmip, datap, len);
        break;
    case (WMI_CONNECT_EVENTID):
        status = wmi_connect_event_rx(wmip, datap, len);
        break;
    case (WMI_DISCONNECT_EVENTID):
        status = wmi_disconnect_event_rx(wmip, datap, len);
        break;
    case (WMI_TKIP_MICERR_EVENTID):
        status = wmi_tkip_micerr_event_rx(wmip, datap, len);
        break;
    case (WMI_BSSINFO_EVENTID):
        status = wmi_bssInfo_event_rx(wmip, datap, len);
        break;
    case (WMI_REGDOMAIN_EVENTID):
        status = wmi_regDomain_event_rx(wmip, datap, len);
        break;
    case (WMI_PSTREAM_TIMEOUT_EVENTID):
        status = wmi_pstream_timeout_event_rx(wmip, datap, len);
        break;
    case (WMI_NEIGHBOR_REPORT_EVENTID):
        status = wmi_neighborReport_event_rx(wmip, datap, len);
        break;
    case (WMI_SCAN_COMPLETE_EVENTID):
        status = wmi_scanComplete_rx(wmip, datap, len);
        break;
    case (WMI_CMDERROR_EVENTID):
        status = wmi_errorEvent_rx(wmip, datap, len);
        break;
    case (WMI_REPORT_STATISTICS_EVENTID):
        status = wmi_statsEvent_rx(wmip, datap, len);
        break;
    case (WMI_RSSI_THRESHOLD_EVENTID):
        status = wmi_rssiThresholdEvent_rx(wmip, datap, len);
        break;
    case (WMI_ERROR_REPORT_EVENTID):
        status = wmi_reportErrorEvent_rx(wmip, datap, len);
        break;
    case (WMI_OPT_RX_FRAME_EVENTID):
        status = wmi_opt_frame_event_rx(wmip, datap, len);
        break;
    case (WMI_EXTENSION_EVENTID):
        status = wmi_control_rx_xtnd(wmip, osbuf);
        break;
#ifndef AR6K_FIRMWARE_1_0
    case (WMI_REPORT_ROAM_TBL_EVENTID):
        status = wmi_roam_tbl_event_rx(wmip, datap, len);
        break;
    case (WMI_CAC_EVENTID):
        status = wmi_cac_event_rx(wmip, datap, len);
        break;
    case (WMI_REPORT_ROAM_DATA_EVENTID):
        status = wmi_road_data_event_rx(wmip, datap, len);
        break;
#endif 
   default:
        WMI_DEBUG_PRINTF(ATH_LOG_ERR,"Host received unknown reply/event with id 0x%x\n",
                         id);
        wmip->wmi_stats.cmd_id_err++;
        status = A_ERROR;
        break;
    }


    return status;
}

static A_STATUS
wmi_create_pstream_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) 
{
    WMI_CRE_PRIORITY_STREAM_REPLY *reply;
    A_INT8 priNum = 0, i;
    A_UINT8 dir;

    if (len < sizeof(WMI_CRE_PRIORITY_STREAM_REPLY)) {
        WMI_DEBUG_PRINTF(ATH_LOG_ERR,"wmi: create pstream reply too short (%d)!!\n", len);
        return A_EINVAL;
    }

    reply = (WMI_CRE_PRIORITY_STREAM_REPLY *)datap;
    WMI_DEBUG_PRINTF(ATH_LOG_ERR,"wmi: create pstream reply: status = %d, tx mbox = %d\n", reply->status, reply->txQueueNumber);

    dir = reply->trafficDirection;
    if (dir == BIDIR_TRAFFIC) {
        wmip->wmi_pstreamCmdInProgress[UPLINK_TRAFFIC][reply->trafficClass] = FALSE;
        wmip->wmi_pstreamCmdInProgress[DNLINK_TRAFFIC][reply->trafficClass] = FALSE;
    } else {
        wmip->wmi_pstreamCmdInProgress[dir][reply->trafficClass] = FALSE;
    }
    wmip->wmi_cpstreamCmdInProgress = FALSE;

    if (reply->status == A_FAILED_CREATE_REMOVE_PSTREAM_FIRST) {
        /* do nothing */
        return A_OK;
    }

    if (reply->status == A_SUCCEEDED) {
        if (reply->trafficDirection == DNLINK_TRAFFIC ||
            reply->trafficDirection == BIDIR_TRAFFIC) {
            wmip->wmi_olderPriRxMbox = wmip->wmi_newerPriRxMbox;
            wmip->wmi_newerPriRxMbox = reply->rxQueueNumber;
            wmip->wmi_mboxMap[DNLINK_TRAFFIC][reply->rxQueueNumber].trafficClass = reply->trafficClass;
            wmip->wmi_mboxMap[DNLINK_TRAFFIC][reply->rxQueueNumber].priorityNum = 0;
            wmip->wmi_trafficClassMap[DNLINK_TRAFFIC][reply->trafficClass] = reply->rxQueueNumber;
        }

        if (reply->trafficDirection == UPLINK_TRAFFIC ||
            reply->trafficDirection == BIDIR_TRAFFIC) {
            wmip->wmi_trafficClassMap[UPLINK_TRAFFIC][reply->trafficClass] = reply->txQueueNumber;
            wmip->wmi_numQoSStream++;
            for (i = 0; i < WMI_MAX_NUM_PRI_STREAMS; i++) {
                if (!wmip->wmi_priority[i].inUse) {
                    priNum = i;
                    wmip->wmi_priority[i].inUse = 1;
                    wmip->wmi_priority[i].mbox = reply->txQueueNumber;
                    break;
                }
            }
            wmip->wmi_mboxMap[UPLINK_TRAFFIC][reply->txQueueNumber].trafficClass = reply->trafficClass;
            wmip->wmi_mboxMap[UPLINK_TRAFFIC][reply->txQueueNumber].priorityNum = priNum;
            ar6000_set_numdataendpts(wmip->wmi_devt, wmip->wmi_numQoSStream+1);
        }
    }

    return reply->status;
}

static A_STATUS
wmi_delete_pstream_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
{
    WMI_DEL_PRIORITY_STREAM_REPLY *reply;
    A_UINT8 dir;

    if (len < sizeof(WMI_DEL_PRIORITY_STREAM_REPLY)) {
        return A_EINVAL;
    }

    reply = (WMI_DEL_PRIORITY_STREAM_REPLY *)datap;
    WMI_DEBUG_PRINTF(ATH_LOG_INF,"wmi: delete pstream reply: status = %d, rx mbox = %d\n", reply->status, reply->rxQueueNumber);

    dir = reply->trafficDirection;
    if (dir == BIDIR_TRAFFIC) {
        wmip->wmi_pstreamCmdInProgress[UPLINK_TRAFFIC][reply->trafficClass] = FALSE;
        wmip->wmi_pstreamCmdInProgress[DNLINK_TRAFFIC][reply->trafficClass] = FALSE;
    } else {
        wmip->wmi_pstreamCmdInProgress[dir][reply->trafficClass] = FALSE;
    }

    if (reply->status == A_OK) {
        /* update internal states for Rx Path */
        if (reply->trafficDirection == DNLINK_TRAFFIC || reply->trafficDirection == BIDIR_TRAFFIC) {
            A_UINT8 qNum = reply->rxQueueNumber;
            A_UINT8 class = wmip->wmi_mboxMap[DNLINK_TRAFFIC][qNum].trafficClass;
            wmip->wmi_trafficClassMap[DNLINK_TRAFFIC][class] = WMI_NOT_MAPPED;
            wmip->wmi_mboxMap[DNLINK_TRAFFIC][qNum].priorityNum = WMI_NOT_MAPPED;
            wmip->wmi_mboxMap[DNLINK_TRAFFIC][qNum].trafficClass = WMM_AC_BE;
            if (wmip->wmi_newerPriRxMbox == qNum) {
                wmip->wmi_newerPriRxMbox = wmip->wmi_olderPriRxMbox;
                wmip->wmi_olderPriRxMbox = qNum;
            }
        }
    }

    return reply->status;
}

static A_STATUS
wmi_ready_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
{
    WMI_READY_EVENT *ev = (WMI_READY_EVENT *)datap;

    if (len < sizeof(WMI_READY_EVENT)) {
        return A_EINVAL;
    }
    WMI_DEBUG_PRINTF(ATH_LOG_INF,"wmi: ready event\n");
    wmip->wmi_ready = TRUE;
    ar6000_ready_event(wmip->wmi_devt, ev->macaddr, ev->phyCapability);

    return A_OK;
}

static A_STATUS
wmi_connect_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
{
    WMI_CONNECT_EVENT *ev;

    if (len < sizeof(WMI_CONNECT_EVENT)) {
        return A_EINVAL;
    }
    ev = (WMI_CONNECT_EVENT *)datap;
    WMI_DEBUG_PRINTF(ATH_LOG_INF,"wmi: connected event at freq %d ", ev->channel);
    WMI_DEBUG_PRINTF(ATH_LOG_INF,"with bssid %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n",
                     ev->bssid[0], ev->bssid[1], ev->bssid[2],
                     ev->bssid[3], ev->bssid[4], ev->bssid[5]);

    A_MEMCPY(wmip->wmi_bssid, ev->bssid, ATH_MAC_LEN);

#ifndef AR6K_FIRMWARE_1_0
    ar6000_connect_event(wmip->wmi_devt, ev->channel, ev->bssid,
                         ev->listenInterval, ev->assocReqLen, ev->assocRespLen,
                         ev->assocInfo, ev->beaconIeLen);
#else
	    ar6000_connect_event(wmip->wmi_devt, ev->channel, ev->bssid,
                         ev->listenInterval, ev->assocReqLen, ev->assocRespLen,
                         ev->assocInfo, 0);
#endif
    return A_OK;
}

static A_STATUS
wmi_regDomain_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
{
    WMI_REG_DOMAIN_EVENT *ev;

    if (len < sizeof(*ev)) {
        return A_EINVAL;
    }
    ev = (WMI_REG_DOMAIN_EVENT *)datap;

    ar6000_regDomain_event(wmip->wmi_devt, ev->regDomain);

    return A_OK;
}

static A_STATUS
wmi_neighborReport_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
{
    WMI_NEIGHBOR_REPORT_EVENT *ev;
    int numAps;

    if (len < sizeof(*ev)) {
        return A_EINVAL;
    }
    ev = (WMI_NEIGHBOR_REPORT_EVENT *)datap;
    numAps = ev->numberOfAps;

    if (len < (A_INT32)(sizeof(*ev) + ((numAps - 1) * sizeof(WMI_NEIGHBOR_INFO)))) {
        return A_EINVAL;
    }

    ar6000_neighborReport_event(wmip->wmi_devt, numAps, ev->neighbor);

    return A_OK;
}

static A_STATUS
wmi_disconnect_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
{
    WMI_DISCONNECT_EVENT *ev;

    if (len < sizeof(WMI_DISCONNECT_EVENT)) {
        return A_EINVAL;
    }
    WMI_DEBUG_PRINTF(ATH_LOG_INF,"wmi: disconnected event\n");

    ev = (WMI_DISCONNECT_EVENT *)datap;

    A_MEMZERO(wmip->wmi_bssid, sizeof(wmip->wmi_bssid));

    ar6000_disconnect_event(wmip->wmi_devt, ev->disconnectReason, ev->bssid,
                            ev->assocRespLen, ev->assocInfo);

    return A_OK;
}

static A_STATUS
wmi_tkip_micerr_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
{
    WMI_TKIP_MICERR_EVENT *ev;

    if (len < sizeof(*ev)) {
        return A_EINVAL;
    }
    WMI_DEBUG_PRINTF(ATH_LOG_INF,"wmi: tkip micerr event\n");

    ev = (WMI_TKIP_MICERR_EVENT *)datap;
    ar6000_tkip_micerr_event(wmip->wmi_devt, ev->keyid, ev->ismcast);

    return A_OK;
}

static A_STATUS
wmi_bssInfo_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
{
    bss_t *bss;
    WMI_BSS_INFO_HDR *bih;
    A_UINT8 *buf;

    if (len <= sizeof(WMI_BSS_INFO_HDR)) {
        return A_EINVAL;
    }

    bih = (WMI_BSS_INFO_HDR *)datap;
    buf = datap + sizeof(WMI_BSS_INFO_HDR);
    len -= sizeof(WMI_BSS_INFO_HDR);

    WMI_DEBUG_PRINTF(ATH_LOG_INF,"wmi: bssInfo event %2.2x:%2.2x\n",
                      bih->bssid[4], bih->bssid[5]);

    bss = wlan_find_node(&wmip->wmi_scan_table, bih->bssid);
    if (bss != NULL) {
        /*
         * Free up the node.  Not the most efficient process given
         * we are about to allocate a new node but it is simple and should be
         * adequate.
         */
        wlan_node_ret_n_remove(&wmip->wmi_scan_table, bss);
    }

    bss = wlan_node_alloc(&wmip->wmi_scan_table, len);
    if (bss == NULL) {
        return A_NO_MEMORY;
    }

    bss->ni_rssi        = bih->rssi;
    AR_DEBUG_ASSERT(bss->ni_buf != NULL);
    A_MEMCPY(bss->ni_buf, buf, len);

    if (wlan_parse_beacon(bss->ni_buf, len, &bss->ni_cie) != A_OK) {
        wlan_node_free(bss);
        return A_EINVAL;
    }

    /*
     * Update the frequency in ie_chan, overwriting of channel number
     * which is done in wlan_parse_beacon
     */
    bss->ni_cie.ie_chan = bih->channel;
    wlan_setup_node(&wmip->wmi_scan_table, bss, bih->bssid);

    return A_OK;
}

static A_STATUS
wmi_opt_frame_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
{
    bss_t *bss;
    WMI_OPT_RX_INFO_HDR *bih;
    A_UINT8 *buf;

    if (len <= sizeof(WMI_OPT_RX_INFO_HDR)) {
        return A_EINVAL;
    }

    bih = (WMI_OPT_RX_INFO_HDR *)datap;
    buf = datap + sizeof(WMI_OPT_RX_INFO_HDR);
    len -= sizeof(WMI_OPT_RX_INFO_HDR);

    WMI_DEBUG_PRINTF(ATH_LOG_INF, 
                     "wmi: opt frame event %2.2x:%2.2x\n",
                      bih->bssid[4], bih->bssid[5]);

    bss = wlan_find_node(&wmip->wmi_scan_table, bih->bssid);
    if (bss != NULL) {
        /*
         * Free up the node.  Not the most efficient process given
         * we are about to allocate a new node but it is simple and should be
         * adequate.
         */
        wlan_node_ret_n_remove(&wmip->wmi_scan_table, bss);
    }

    bss = wlan_node_alloc(&wmip->wmi_scan_table, len);
    if (bss == NULL) {
        return A_NO_MEMORY;
    }
    
    bss->ni_rssi        = bih->rssi;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区免费视频| 国产在线国偷精品免费看| 一区二区在线观看视频在线观看| 色天使久久综合网天天| 国产视频一区在线观看| 色综合久久综合| 国产精品一区三区| 精品久久免费看| 亚洲国产精品一区二区久久恐怖片 | 日本一区二区三区久久久久久久久不| 亚洲色图一区二区| 国产精品综合久久| 日韩欧美三级在线| 亚洲电影第三页| 91视视频在线观看入口直接观看www | 在线看国产一区二区| 国产蜜臀av在线一区二区三区| 蜜臀久久99精品久久久画质超高清 | 欧美一区二区女人| 亚洲不卡在线观看| 日本韩国一区二区三区| 中文字幕视频一区| 福利视频网站一区二区三区| 亚洲精品在线观| 久久国产成人午夜av影院| 正在播放亚洲一区| 奇米四色…亚洲| 91麻豆精品国产自产在线| 亚洲国产日韩a在线播放| 色欧美片视频在线观看| 中文字幕一区二区三区不卡在线| 成人黄色777网| 国产精品第一页第二页第三页| 成人综合婷婷国产精品久久免费| 久久久久久久综合狠狠综合| 国产一区二区三区最好精华液| 精品国产乱码久久久久久图片| 精品一区二区三区免费视频| 精品国产欧美一区二区| 国产在线视频一区二区| 国产亚洲污的网站| www.激情成人| 亚洲午夜精品在线| 欧美日韩精品一区二区天天拍小说 | 久久99久久99小草精品免视看| 亚洲精品一区二区三区在线观看| 国产美女精品人人做人人爽| 中文字幕欧美日本乱码一线二线| 高清不卡在线观看| 亚洲精品欧美专区| 欧美男生操女生| 国产一区二区在线电影| 中日韩av电影| 欧美性色黄大片| 美女一区二区视频| 国产亚洲欧美一区在线观看| 91在线视频网址| 丝袜脚交一区二区| 欧美成人video| 波多野结衣在线一区| 亚洲影院理伦片| 日韩精品中午字幕| www.一区二区| 视频一区视频二区在线观看| 久久久99精品免费观看| 91婷婷韩国欧美一区二区| 视频在线观看一区| 中文子幕无线码一区tr| 欧美日韩精品一区二区三区四区| 激情小说欧美图片| 亚洲欧美激情一区二区| 日韩欧美国产三级电影视频| 成人aa视频在线观看| 日本成人在线不卡视频| 一区二区中文视频| 91精品国产综合久久精品性色| 国产麻豆视频一区二区| 午夜伦理一区二区| 国产精品成人一区二区三区夜夜夜| 欧美日韩一区在线观看| 久久精品72免费观看| 亚洲免费三区一区二区| 26uuu欧美| 欧美高清视频在线高清观看mv色露露十八 | 不卡大黄网站免费看| 蜜桃视频免费观看一区| 亚洲黄色小视频| 国产女主播在线一区二区| 欧美日本韩国一区| 91网站最新网址| 成人综合日日夜夜| 国内外精品视频| 日韩影视精彩在线| 亚洲一区二区三区四区在线观看| 国产精品无遮挡| 久久久.com| 精品sm在线观看| 91精品黄色片免费大全| 欧洲一区二区av| 色综合色综合色综合色综合色综合| 国产一本一道久久香蕉| 久久99精品国产| 免费一级片91| 日韩激情中文字幕| 日韩中文字幕av电影| 亚洲午夜免费视频| 亚洲国产精品影院| 一区二区三区国产精品| 亚洲视频网在线直播| 最新中文字幕一区二区三区| 国产精品女同一区二区三区| 26uuu另类欧美亚洲曰本| 欧美精品一区二区三区在线播放| 欧美一区二区啪啪| 日韩一区二区三| 欧美大片拔萝卜| 久久综合99re88久久爱| 久久亚洲捆绑美女| 国产亚洲一二三区| 国产精品美女久久久久久久 | 亚洲黄色av一区| 亚洲欧美国产毛片在线| 亚洲欧美视频一区| 亚洲精品免费在线| 亚洲资源在线观看| 婷婷开心激情综合| 免费观看日韩av| 狠狠v欧美v日韩v亚洲ⅴ| 国产精品夜夜嗨| 不卡av电影在线播放| 色999日韩国产欧美一区二区| 欧美在线观看视频在线| 91麻豆精品国产自产在线| 欧美精品一区二区三区一线天视频| 精品国产乱码久久久久久牛牛| 国产精品素人一区二区| 亚洲狠狠丁香婷婷综合久久久| 午夜精品久久久久久久久久| 毛片基地黄久久久久久天堂| 国产mv日韩mv欧美| 在线免费观看一区| 欧美成人在线直播| 亚洲欧洲韩国日本视频| 亚洲国产精品久久久男人的天堂| 奇米影视一区二区三区| 波多野结衣精品在线| 色香色香欲天天天影视综合网| 正在播放一区二区| 国产精品福利一区二区| 日韩精品一级中文字幕精品视频免费观看 | hitomi一区二区三区精品| 欧美在线视频全部完| 欧美大片国产精品| 一区二区三区四区在线免费观看| 日本不卡视频在线| 91一区二区三区在线观看| 777午夜精品免费视频| 中文字幕精品综合| 无吗不卡中文字幕| 国产成人精品一区二区三区网站观看 | 亚洲成av人片在www色猫咪| 国产麻豆91精品| 欧美日韩国产天堂| 国产欧美精品一区二区色综合朱莉| 亚洲主播在线观看| 成人黄色大片在线观看| 日韩一区二区免费在线观看| 亚洲精品伦理在线| 国产成人免费高清| 日韩你懂的电影在线观看| 1区2区3区欧美| 韩国女主播成人在线| 欧美日韩激情一区二区| 综合激情网...| 国产成人免费xxxxxxxx| 欧美大胆人体bbbb| 婷婷丁香久久五月婷婷| 一本到不卡免费一区二区| 久久久www免费人成精品| 日韩专区中文字幕一区二区| 色久优优欧美色久优优| 国产精品网站在线观看| 国产一区二区三区精品视频| 欧美一二三四在线| 亚洲国产成人高清精品| 99久久99精品久久久久久| 国产欧美一二三区| 激情文学综合丁香| 欧美精品色一区二区三区| 亚洲欧美区自拍先锋| 97se亚洲国产综合自在线| 国产日韩精品一区二区三区在线| 久久99热99| 日韩视频免费观看高清完整版| 午夜视频在线观看一区| 欧美视频中文一区二区三区在线观看| 亚洲少妇30p| 91福利在线导航| 亚洲一区二区在线免费看| 在线免费观看日本欧美|