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

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

?? htc.c

?? Linux下SDIO設備的驅動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * 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 HTC APIs that are exposed to higher layers. */#include "htc_internal.h"/* ------ Global Variable Declarations ------- */HTC_TARGET *AtherosTargetList[HIF_MAX_DEVICES];HTC_GLOBAL_EVENT_TABLE AtherosEventTable;A_MUTEX_T creditCS, counterCS, instanceCS;A_WAITQUEUE_HEAD htcEvent;#ifdef DEBUGextern A_UINT32 debughtc;extern A_UINT32 txcreditsavailable[HTC_MAILBOX_NUM_MAX];extern A_UINT32 txcreditsconsumed[HTC_MAILBOX_NUM_MAX];extern A_UINT32 txcreditintrenable[HTC_MAILBOX_NUM_MAX];extern A_UINT32 txcreditintrenableaggregate[HTC_MAILBOX_NUM_MAX];#endifextern int tx_attempt[HTC_MAILBOX_NUM_MAX];    /* Num of attempts to add */extern int tx_post[HTC_MAILBOX_NUM_MAX];       /* Num of attemps succeded */extern int tx_complete[HTC_MAILBOX_NUM_MAX];   /* Num of tx complete *//* Initializes the HTC module */A_STATUSHTCInit(void){    HTC_CALLBACKS htcCallbacks;    static A_BOOL HTCInitialized = FALSE;    AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("HTCInit: Enter\n"));    if (HTCInitialized) {        AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("HTCInit: Exit\n"));        return A_OK;    }    A_MEMZERO(&AtherosEventTable, sizeof(HTC_GLOBAL_EVENT_TABLE));    A_MEMZERO(&htcCallbacks, sizeof(HTC_CALLBACKS));    A_INIT_WAITQUEUE_HEAD(&htcEvent);    htcCallbacks.deviceInsertedHandler = htcTargetInsertedHandler;    htcCallbacks.deviceRemovedHandler = htcTargetRemovedHandler;    htcCallbacks.rwCompletionHandler = htcRWCompletionHandler;#ifdef CF        htcCallbacks.deviceInterruptEnabler = htcInterruptEnabler;        htcCallbacks.deviceInterruptDisabler = htcInterruptDisabler;#endif /* CF */    htcCallbacks.dsrHandler = htcDSRHandler;    HIFRegisterCallbacks(&htcCallbacks);    HTCInitialized = TRUE;    AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("HTCInit: Exit\n"));    return A_OK;}/* Enables Dragon interrupts */A_STATUSHTCStart(HTC_TARGET *target){    A_STATUS status;    A_UINT32 address;    HIF_REQUEST request;    AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("HTCStart Enter\n"));    /* Unmask the host controller interrupts */    HIFUnMaskInterrupt(target->device);    /* Enable all the interrupts except for the dragon interrupt */    target->table.int_status_enable = INT_STATUS_ENABLE_ERROR_SET(0x01) |                                      INT_STATUS_ENABLE_CPU_SET(0x01) |                                      INT_STATUS_ENABLE_COUNTER_SET(0x01) |                                      INT_STATUS_ENABLE_MBOX_DATA_SET(0x0F);    /* Set up the CPU Interrupt Status Register */    target->table.cpu_int_status_enable = CPU_INT_STATUS_ENABLE_BIT_SET(0x00);    /* Set up the Error Interrupt Status Register */    target->table.error_status_enable =                                  ERROR_STATUS_ENABLE_RX_UNDERFLOW_SET(0x01) |                                  ERROR_STATUS_ENABLE_TX_OVERFLOW_SET(0x01);    /* Set up the Counter Interrupt Status Register */    target->table.counter_int_status_enable =        COUNTER_INT_STATUS_ENABLE_BIT_SET(0xFF);    /* Write to the register */    HIF_FRAME_REQUEST(&request, HIF_WRITE, HIF_EXTENDED_IO, HIF_SYNCHRONOUS,                      HIF_BYTE_BASIS, HIF_INCREMENTAL_ADDRESS);    address = getRegAddr(INT_STATUS_ENABLE_REG, ENDPOINT_UNUSED);    status = HIFReadWrite(target->device, address,                          &target->table.int_status_enable, 4, &request, NULL);    if (status != A_OK) {        /* Can't write it for some reason */        AR_DEBUG_PRINTF(ATH_DEBUG_ERR,                        ("Failed to enable INT_STATUS_ENABLE | CPU_INT_STATUS_ENABLE | ERROR_STATUS_ENABLE | COUNTER_INT_STATUS_ENABLE, err: %d\n", status));        HTCStop(target);        return status;    }#ifdef DEBUG    txcreditintrenable[ENDPOINT1] += 1;    txcreditintrenable[ENDPOINT2] += 1;    txcreditintrenable[ENDPOINT3] += 1;    txcreditintrenable[ENDPOINT4] += 1;    txcreditintrenableaggregate[ENDPOINT1] += 1;    txcreditintrenableaggregate[ENDPOINT2] += 1;    txcreditintrenableaggregate[ENDPOINT3] += 1;    txcreditintrenableaggregate[ENDPOINT4] += 1;#endif /* DEBUG */    /* Wait on a timed semaphore that will get signalled once the block       size negotiation with the target has completed. Furthermore, we have       to do it only once during the lifetime of the target detection */    if (!target->ready) {        AR_DEBUG_PRINTF(ATH_DEBUG_INF,                        ("Waiting for the block size negotiation to finish\n"));        A_WAIT_EVENT_INTERRUPTIBLE_TIMEOUT(htcEvent, (target->ready == TRUE),                                           HTC_TARGET_RESPONSE_TIMEOUT);        if (target->ready) {            status = A_OK;        } else {            status = A_ERROR;            AR_DEBUG_PRINTF(ATH_DEBUG_ERR,                                ("Failed to negotiate the block sizes\n"));            HTCStop(target);        }    }    AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("HTCStart Exit\n"));    return status;}/* * Provides an interface for the higher layer module to register for * different events supported by the HTC module */A_STATUSHTCEventReg(HTC_TARGET *target, HTC_ENDPOINT_ID endPointId,            HTC_EVENT_ID eventId, HTC_EVENT_HANDLER eventHandler,            void *param){    /*     * Add the event handler against the specified event and store it in     * the event table     */    A_STATUS status;    HTC_ENDPOINT *endPoint;    HTC_EVENT_INFO eventInfo;    HTC_DATA_REQUEST_QUEUE *sendQueue, *recvQueue;    AR_DEBUG_PRINTF(ATH_DEBUG_TRC,                    ("HTCEventReg: Enter (eventId: 0x%x, endPointId: %d)\n",                    eventId, endPointId));    if (eventHandler) {        if ((status = addToEventTable(target, endPointId, eventId,                                      eventHandler, param)) != A_OK)        {            AR_DEBUG_PRINTF(ATH_DEBUG_ERR,                            ("Could not add the event 0x%x to the event table\n", eventId));            return status;        }    }    switch(eventId) {        case HTC_TARGET_AVAILABLE:            if (eventHandler != NULL) {                /*                 * Dispatch a Target Available event for all the targets                 * present. Iterate through the global list of targets but                 * currently we shall simply look for the first instance                 */                target = AtherosTargetList[0];                if (target != NULL) {                    FRAME_EVENT(eventInfo, (A_UCHAR *)target->device,                                sizeof(HIF_DEVICE *), sizeof(HIF_DEVICE *),                                A_OK, NULL);                    dispatchEvent(target, ENDPOINT_UNUSED, eventId, &eventInfo);                }            } else {                /* Initiate a shut down procedure */            }            break;        case HTC_TARGET_UNAVAILABLE:            break;        case HTC_BUFFER_RECEIVED:            if (eventHandler == NULL) {                /* Flush the queue before unregistering the event handler */                endPoint = &target->endPoint[endPointId];                recvQueue = &endPoint->recvQueue;                flushMboxQueue(endPoint, recvQueue, HTC_BUFFER_RECEIVED);            }            break;        case HTC_SKB_RECEIVED:            AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("skb not handled currently\n"));            break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本色道久久综合亚洲91| 午夜精品免费在线观看| 欧美激情在线一区二区三区| 国产精品―色哟哟| 亚洲成精国产精品女| 久久av老司机精品网站导航| 成人综合激情网| 91美女视频网站| 678五月天丁香亚洲综合网| 欧美www视频| 亚洲欧美激情一区二区| 日韩av中文字幕一区二区| 国产一区在线观看视频| 在线免费不卡视频| 日韩欧美高清在线| 亚洲午夜在线电影| 国产精一区二区三区| 欧美一区二区三区四区高清| 国产视频一区二区在线| 午夜欧美视频在线观看| 色先锋久久av资源部| 国产婷婷色一区二区三区| 久久精品国产亚洲一区二区三区| 91精品1区2区| 国产精品超碰97尤物18| 国产福利一区在线观看| 欧美大片免费久久精品三p| 亚洲一卡二卡三卡四卡无卡久久 | 不卡av在线免费观看| 久久久亚洲欧洲日产国码αv| 五月激情综合色| 欧美色图一区二区三区| 亚洲色图一区二区| 粉嫩蜜臀av国产精品网站| 欧美精品一区二区三区久久久| 天天影视涩香欲综合网| 欧美色图一区二区三区| 午夜私人影院久久久久| 欧美在线视频不卡| 亚洲精品国产精品乱码不99| 欧美在线三级电影| 亚洲观看高清完整版在线观看| 欧美日韩精品一区视频| 麻豆成人在线观看| 精品久久一区二区| 国产suv精品一区二区883| 1024亚洲合集| 欧美韩日一区二区三区四区| 精品中文av资源站在线观看| 精品av久久707| 成人动漫一区二区三区| 一区二区三区中文字幕| 欧美一区二区三区色| 成人美女在线视频| 亚洲一二三四久久| 日韩一区二区三区精品视频| 成人av影院在线| 亚洲大型综合色站| 国产三级精品三级在线专区| 欧美在线短视频| 国产专区综合网| 亚洲一卡二卡三卡四卡五卡| 欧美一二三区在线观看| 91欧美激情一区二区三区成人| 午夜欧美电影在线观看| 亚洲国产精品精华液ab| 欧美一区二区三区播放老司机| 色呦呦日韩精品| 高清国产午夜精品久久久久久| 亚洲高清免费在线| 亚洲婷婷国产精品电影人久久| 欧美sm极限捆绑bd| 欧美日韩国产精品成人| 色又黄又爽网站www久久| 成人午夜电影久久影院| 欧美高清激情brazzers| 国产69精品久久久久777| 日日夜夜一区二区| 亚洲欧美日韩综合aⅴ视频| 国产视频不卡一区| 久久久久国产精品麻豆| 日韩一区二区免费电影| 欧美亚一区二区| 99精品欧美一区二区蜜桃免费| 国产一区二区三区蝌蚪| 婷婷中文字幕综合| 午夜激情综合网| 亚洲在线中文字幕| 樱花草国产18久久久久| 国产精品久久久久9999吃药| 国产视频一区在线播放| 久久久午夜精品| 日韩久久免费av| 久久久久久综合| 国产人久久人人人人爽| 中文字幕在线视频一区| 国产精品久久久久久户外露出| 中文字幕亚洲一区二区va在线| 亚洲天堂av老司机| 夜夜爽夜夜爽精品视频| 日韩精品色哟哟| 青青草97国产精品免费观看无弹窗版| 男男视频亚洲欧美| 国产一区二区不卡在线| 97久久超碰精品国产| 欧美色欧美亚洲另类二区| 欧美三级日韩三级国产三级| 91精品欧美一区二区三区综合在 | 欧美午夜一区二区| 欧美三级日本三级少妇99| 91精品国产综合久久久蜜臀粉嫩| 欧美电影免费观看高清完整版在| 日本一区二区三区国色天香| 夜夜操天天操亚洲| 美日韩一区二区三区| www.亚洲免费av| 欧美日韩国产高清一区二区| 久久久久久久久久美女| 亚洲精品国产精华液| 青草av.久久免费一区| 91在线播放网址| 欧美电视剧在线看免费| 亚洲精品大片www| 国产福利不卡视频| 欧美韩国日本不卡| 蜜臀av亚洲一区中文字幕| 91国偷自产一区二区使用方法| 久久亚洲精品小早川怜子| 亚洲国产成人av网| 99久久精品免费观看| 久久精品人人做人人爽人人| 日韩中文字幕不卡| 99re热视频这里只精品| 久久先锋影音av鲁色资源网| 日本亚洲欧美天堂免费| 欧美日韩精品一区二区| 一区二区三区日韩精品| caoporn国产一区二区| 中文字幕成人网| 国产成人免费av在线| 久久精品视频一区二区| 国产一区二区按摩在线观看| 日韩一区国产二区欧美三区| 日韩精品亚洲一区| 日韩欧美国产一区二区在线播放 | 国产精品你懂的在线欣赏| 成人av在线一区二区| 国产精品毛片久久久久久久| 不卡的av中国片| **性色生活片久久毛片| 日本韩国欧美一区| 五月天国产精品| 日韩欧美电影一区| 高清不卡一区二区在线| 综合久久国产九一剧情麻豆| 色噜噜狠狠色综合中国| 亚洲h动漫在线| 欧美大片日本大片免费观看| 成人午夜av电影| 一区二区三区四区不卡在线| 欧美猛男gaygay网站| 久久国产剧场电影| 亚洲国产精品v| 欧美伊人久久久久久久久影院| 日韩—二三区免费观看av| 久久这里只精品最新地址| 不卡的av电影| 日韩中文字幕一区二区三区| 中文字幕不卡三区| 欧美性videosxxxxx| 国产成人av电影在线观看| 亚洲精品ww久久久久久p站| 26uuu色噜噜精品一区二区| 91蝌蚪porny九色| 久久国产欧美日韩精品| 亚洲欧美偷拍另类a∨色屁股| 日韩欧美区一区二| 91蝌蚪porny成人天涯| 激情成人午夜视频| 一二三四区精品视频| 国产视频一区二区在线观看| 在线91免费看| 日本久久电影网| 国产91色综合久久免费分享| 男人的天堂亚洲一区| 亚洲成人激情社区| 樱花影视一区二区| 中文字幕一区二区三| 欧美精品一区二区三区蜜桃视频 | 久久久精品人体av艺术| 欧美日韩国产片| 91美女蜜桃在线| 不卡在线观看av| 成人av免费在线观看| 国精产品一区一区三区mba桃花| 香蕉成人伊视频在线观看| 亚洲午夜在线视频| 亚洲午夜电影在线| 一区二区三区鲁丝不卡| 亚洲欧美中日韩|