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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? htc_recv.c

?? Linux下SDIO設(shè)備的驅(qū)動程序
?? C
字號:
/* * Copyright (c) 2004-2006 Atheros Communications Inc. * *  Wireless Network driver for Atheros AR6001 * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License version 2 as *  published by the Free Software Foundation; * *  Software distributed under the License is distributed on an "AS *  IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or *  implied. See the License for the specific language governing *  rights and limitations under the License. * * * This file contains the routines handling the receive path. */#include "htc_internal.h"/* ------ Global Variable Declarations ------- */#ifdef DEBUGextern A_UINT32 debughtc;#endif/* ------ Static Variables ------ *//* ------ Functions ------ *//* Makes a buffer available to the HTC module */A_STATUSHTCBufferReceive(HTC_TARGET *target,                 HTC_ENDPOINT_ID endPointId,                 A_UCHAR *buffer,                 A_UINT32 length,                 void *cookie){    A_STATUS status;    HTC_ENDPOINT *endPoint;    HTC_DATA_REQUEST_QUEUE *recvQueue;    AR_DEBUG_PRINTF(ATH_DEBUG_TRC | ATH_DEBUG_RECV,                    ("HTCBufferReceive: Enter (endPointId: %d, buffer: 0x%p, length: %d, cookie: 0x%p)\n", endPointId, buffer, length, cookie));    AR_DEBUG_ASSERT((endPointId >= ENDPOINT1) && (endPointId <= ENDPOINT4));    /* Extract the end point instance */    endPoint = &target->endPoint[endPointId];    AR_DEBUG_ASSERT(endPoint != NULL);    recvQueue = &endPoint->recvQueue;    AR_DEBUG_PRINTF(ATH_DEBUG_INF | ATH_DEBUG_RECV, ("recvQueue: %p\n",                    recvQueue));    /* Add this posted buffer to the pending receive queue */    status = addToMboxQueue(recvQueue, buffer, length, 0, cookie);    if (status != A_OK) {        AR_DEBUG_PRINTF(ATH_DEBUG_ERR | ATH_DEBUG_RECV,                        ("Mailbox (%d) Send queue full. Unable to add buffer\n",                        GET_ENDPOINT_ID(endPoint)));        return A_ERROR;    }    /*     * If this API was called as a result of a HTC_DATA_AVAILABLE event to     * the upper layer, indicating that HTC is out of buffers, then we should     * receive the frame in the buffer supplied otherwise we simply add the     * buffer to the Pending Receive Queue     */    if (endPoint->rxLengthPending) {        htcReceiveFrame(endPoint);    }    AR_DEBUG_PRINTF(ATH_DEBUG_TRC | ATH_DEBUG_RECV,                    ("HTCBufferReceive: Exit\n"));    return A_OK;}voidhtcReceiveFrame(HTC_ENDPOINT *endPoint){    A_STATUS status;    A_UINT32 address;    A_UINT32 paddedLength;    A_UINT32 frameLength;    HIF_REQUEST request;    HTC_ENDPOINT_ID endPointId;    HTC_QUEUE_ELEMENT *element;    HTC_MBOX_BUFFER *mboxBuffer;    HTC_DATA_REQUEST_QUEUE *recvQueue;    HTC_TARGET *target;    HTC_EVENT_INFO eventInfo;    HIF_DATAMODE dmode;    AR_DEBUG_PRINTF(ATH_DEBUG_TRC | ATH_DEBUG_RECV,                    ("htcReceiveFrame - Enter\n"));    /* Get the context */    AR_DEBUG_ASSERT(endPoint != NULL);    endPointId = GET_ENDPOINT_ID(endPoint);    target = endPoint->target;    AR_DEBUG_ASSERT(target != NULL);    recvQueue = &endPoint->recvQueue;    AR_DEBUG_ASSERT(recvQueue != NULL);    /*     * Receive the frame if we have any pending frames and a buffer to     * receive it into.     */     if (IS_DATA_QUEUE_EMPTY(recvQueue)) {         AR_DEBUG_PRINTF(ATH_DEBUG_WARN | ATH_DEBUG_RECV,                         ("Mailbox (%d) recv queue empty. Unable to remove buffer\n", endPointId));         /*          * Communicate this situation to the host via the HTC_DATA_AVAILABLE          * event to request some buffers in the queue.          */         endPoint->rxLengthPending = htcGetFrameLength(endPoint);         AR_DEBUG_ASSERT(endPoint->rxLengthPending);         FRAME_EVENT(eventInfo, NULL, endPoint->rxLengthPending,                     0, A_OK, NULL);         dispatchEvent(target, endPointId, HTC_DATA_AVAILABLE, &eventInfo);         return;     }     /*      * Get the length from the lookahead register if there is nothing      * pending.      */     if (endPoint->rxLengthPending) {         frameLength = endPoint->rxLengthPending;         endPoint->rxLengthPending = 0;     } else {         frameLength = htcGetFrameLength(endPoint);     }     AR_DEBUG_ASSERT((frameLength > 0) &&                     (frameLength <= HTC_MESSAGE_SIZE_MAX));     AR_DEBUG_PRINTF(ATH_DEBUG_INF | ATH_DEBUG_RECV, ("Frame Length: %d\n",                     frameLength));     /* Adjust the length to be a multiple of block size if appropriate */     paddedLength = (frameLength + (endPoint->blockSize - 1)) &                    (~(endPoint->blockSize - 1));     /*      * Receive the frame(s). Pull an empty buffer from the head of the      * Pending Receive Queue.      */     element = removeFromMboxQueue(recvQueue);     mboxBuffer = GET_MBOX_BUFFER(element);     mboxBuffer->actualLength = paddedLength;     dmode = (endPoint->blockSize > 1) ? HIF_BLOCK_BASIS : HIF_BYTE_BASIS;     HIF_FRAME_REQUEST(&request, HIF_READ, HIF_EXTENDED_IO,                       HIF_ASYNCHRONOUS, dmode, HIF_INCREMENTAL_ADDRESS);     address = endPoint->address;     status = HIFReadWrite(target->device, address, mboxBuffer->buffer,                           mboxBuffer->actualLength, &request, element);#ifndef HTC_SYNC     if (status != A_OK) {#else     if (status != A_OK && status != A_PENDING) {#endif         AR_DEBUG_PRINTF(ATH_DEBUG_ERR | ATH_DEBUG_RECV,                         ("Frame reception failed\n"));         if (!IS_ELEMENT_FREE(element)) {             mboxBuffer->actualLength = 0;             FRAME_EVENT(eventInfo, mboxBuffer->buffer,                         mboxBuffer->bufferLength, mboxBuffer->actualLength,                         A_ECANCELED, mboxBuffer->cookie);             RECYCLE_DATA_REQUEST_ELEMENT(element);             dispatchEvent(target, endPointId, HTC_BUFFER_RECEIVED,                           &eventInfo);             AR_DEBUG_PRINTF(ATH_DEBUG_TRC | ATH_DEBUG_RECV,                             ("htcReceiveFrame - Exit\n"));             return;         }     }#ifdef HTC_SYNC	else if (status == A_OK) {		element->completionCB(element, status);	}#endif    AR_DEBUG_PRINTF(ATH_DEBUG_TRC | ATH_DEBUG_RECV,                    ("htcReceiveFrame - Exit\n"));}A_UINT32htcGetFrameLength(HTC_ENDPOINT *endPoint){    HTC_TARGET *target;    A_UINT32 frameLength;    HTC_ENDPOINT_ID endPointId;    /* Get the context */    AR_DEBUG_ASSERT(endPoint != NULL);    target = endPoint->target;    AR_DEBUG_ASSERT(target != NULL);    endPointId = GET_ENDPOINT_ID(endPoint);    AR_DEBUG_ASSERT(target->table.rx_lookahead_valid & (1 << endPointId));    /* The length is contained in the first two bytes - HTC_HEADER_LEN */    frameLength = (target->table.rx_lookahead[endPointId] & 0xFFFF) +                  HTC_HEADER_LEN;    AR_DEBUG_ASSERT(frameLength);    return frameLength;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品久久一区| 亚洲欧美日韩国产另类专区| 久久久国产午夜精品 | 精品毛片乱码1区2区3区 | 不卡视频在线观看| 91精品国产一区二区三区| 亚洲欧美日韩中文播放 | 一本到一区二区三区| 精品日韩欧美在线| 午夜欧美视频在线观看| 成人动漫一区二区在线| 久久久三级国产网站| 理论电影国产精品| 欧美一级二级三级蜜桃| 亚洲线精品一区二区三区八戒| 国产成人免费在线| 亚洲精品在线电影| 久久电影国产免费久久电影| 欧日韩精品视频| 综合色中文字幕| 成人国产精品免费| 日本一区二区三区dvd视频在线| 久久精品噜噜噜成人av农村| 欧美人伦禁忌dvd放荡欲情| 一区二区免费看| 色视频成人在线观看免| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 日韩欧美亚洲国产精品字幕久久久 | 中文字幕巨乱亚洲| 国产一区二区三区蝌蚪| 亚洲国产高清在线观看视频| 精品无人区卡一卡二卡三乱码免费卡| 欧美日韩成人一区| 天天综合天天做天天综合| 欧美日韩小视频| 舔着乳尖日韩一区| 日韩精品一区二区三区在线播放| 日本不卡一区二区三区| 欧美一级黄色录像| 国精品**一区二区三区在线蜜桃| 久久久午夜精品理论片中文字幕| 国产精品一级黄| 亚洲国产精品精华液2区45| 成人午夜视频在线观看| 自拍偷拍亚洲激情| 欧美日韩精品福利| 日韩 欧美一区二区三区| 欧美成人午夜电影| 国产成人精品影视| 夜夜揉揉日日人人青青一国产精品| 欧洲视频一区二区| 天堂精品中文字幕在线| 精品国产免费视频| 波多野结衣中文字幕一区二区三区| 亚洲欧美偷拍卡通变态| 欧美精品少妇一区二区三区| 久久精品国产**网站演员| 国产人成一区二区三区影院| 成人高清视频在线观看| 亚洲一区av在线| 欧美大片一区二区| 不卡视频一二三四| 天堂影院一区二区| 亚洲国产高清不卡| 在线看不卡av| 国产在线麻豆精品观看| 亚洲精品中文在线观看| 欧美成人欧美edvon| www.欧美亚洲| 国产电影精品久久禁18| 亚洲伦理在线精品| 精品国免费一区二区三区| av高清久久久| 蜜桃久久久久久久| 中文字幕一区二区三区在线观看 | 亚洲成av人片在线| 久久免费视频色| 欧美日韩亚洲综合在线| 精品中文字幕一区二区小辣椒| **欧美大码日韩| 337p日本欧洲亚洲大胆精品| 在线精品视频免费观看| 成人激情小说乱人伦| 强制捆绑调教一区二区| 亚洲欧美aⅴ...| 久久男人中文字幕资源站| 欧美日韩三级视频| 国产成人在线视频网站| 欧美aaaaa成人免费观看视频| 亚洲欧美色图小说| 亚洲国产激情av| 久久亚洲一区二区三区四区| 欧美老肥妇做.爰bbww视频| 91丝袜呻吟高潮美腿白嫩在线观看| 美脚の诱脚舐め脚责91| 亚洲福中文字幕伊人影院| 国产精品欧美一级免费| 久久亚洲精华国产精华液 | 成人app网站| 国产一区二区福利| 国产91在线观看| 国产露脸91国语对白| 美女免费视频一区二区| 日韩国产欧美在线视频| 亚洲第一福利视频在线| 一区二区三区中文字幕精品精品| 国产精品久久久久久久久动漫| 欧美精品一区二区高清在线观看| 日韩色视频在线观看| 欧美一区二区三区啪啪| 制服丝袜亚洲播放| 91精品免费在线| 337p亚洲精品色噜噜| 在线播放中文字幕一区| 在线播放/欧美激情| 日韩一区二区视频| 日韩久久免费av| 久久久久久亚洲综合影院红桃| 26uuu精品一区二区三区四区在线| 日韩欧美一级特黄在线播放| 日韩一区二区三区四区| 久久综合中文字幕| 久久精品视频一区| 中文字幕不卡三区| 日韩伦理免费电影| 亚洲图片有声小说| 亚洲成a人在线观看| 免费在线欧美视频| 国产美女久久久久| 成人av免费网站| 日本韩国欧美一区| 欧美一区二区性放荡片| 欧美精品一区二区久久久| 国产精品麻豆欧美日韩ww| 一区二区三区国产豹纹内裤在线 | 欧美日韩国产成人在线免费| 制服丝袜av成人在线看| 精品福利二区三区| 中文字幕一区二区三区视频| 亚洲一区精品在线| 久久精品国产**网站演员| 成人一区二区三区| 欧美日韩在线播放一区| 日韩美女视频在线| 成人欧美一区二区三区| 日韩精品高清不卡| 粉嫩aⅴ一区二区三区四区| 91福利社在线观看| 日韩欧美精品在线视频| 国产精品久久久久婷婷二区次| 亚洲福利视频一区| 国产精品一区二区三区四区| 91久久精品一区二区| 2014亚洲片线观看视频免费| 一区二区三区在线影院| 国产资源精品在线观看| 欧美性受xxxx黑人xyx性爽| 精品国产乱码久久久久久久| 亚洲欧美国产三级| 国产一区二区三区蝌蚪| 欧美性videosxxxxx| 国产欧美日本一区二区三区| 亚洲国产另类av| hitomi一区二区三区精品| 91精品婷婷国产综合久久| 中文字幕一区免费在线观看| 99久久99久久精品免费观看| 欧美高清一级片在线| 国产精品不卡在线观看| 国产在线一区观看| 欧美精品v国产精品v日韩精品| 一区在线观看免费| 国产精品一区二区久激情瑜伽| 91精品国产综合久久国产大片| 亚洲精品国产精华液| 成人av在线一区二区| 精品精品国产高清a毛片牛牛| 午夜精品福利一区二区蜜股av | 91精品国产麻豆国产自产在线 | 国产精品少妇自拍| 久久99精品国产麻豆婷婷| 欧美另类变人与禽xxxxx| 亚洲黄色性网站| av不卡免费电影| 欧美激情综合网| 国产高清不卡一区| 精品av综合导航| 美女视频免费一区| 日韩三级在线观看| 日韩成人免费看| 69堂国产成人免费视频| 亚洲午夜av在线| 欧美酷刑日本凌虐凌虐| 亚洲综合清纯丝袜自拍| 91亚洲午夜精品久久久久久| 国产精品免费久久| 波多野结衣中文字幕一区二区三区| 中文字幕精品一区二区三区精品| 国产成人免费视频精品含羞草妖精| 久久精品一区二区三区不卡|