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

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

?? bmi.c

?? Atheros Communications AR6001 WLAN Driver for SDIO installation Read Me March 26,2007 (based on
?? C
?? 第 1 頁 / 共 2 頁
字號:
//------------------------------------------------------------------------------
// <copyright file="bmi.c" company="Atheros">
//    Copyright (c) 2006 Microsoft Corporation.  All rights reserved.
//    Copyright (c) 2006 Atheros Corporation.  All rights reserved.
//
//    The use and distribution terms for this software are covered by the
//    Microsoft Limited Permissive License (Ms-LPL) 
//    http://www.microsoft.com/resources/sharedsource/licensingbasics/limitedpermissivelicense.mspx 
//    which can be found in the file MS-LPL.txt at the root of this distribution.
//    By using this software in any fashion, you are agreeing to be bound by
//    the terms of this license.
//
//    You must not remove this notice, or any other, from this software.
// </copyright>
// 
// <summary>
//    Windows CE Wifi Driver for AR-6000
// </summary>
//------------------------------------------------------------------------------
//==============================================================================
// This file contains the routines that implement the Boot loader messaging 
// interface
//
// Author(s): ="Atheros"
//==============================================================================

#include "hif.h"
#include "bmi.h"
#include "htc.h"
#include "bmi_internal.h"
#include "osapi.h"


/* Although we had envisioned BMI to run on top of HTC, this is not what the final implementation boiled down to on dragon. Its a part of BSP and does not use the HTC protocol either. On the host side, however, we were still living with the original idea. I think the time has come to accept the truth and separate it from HTC which has been carrying BMI's burden all this while. It shall make HTC state machine relatively simpler */

/* ------ Static Variables ------ */

/* ------ Global Variable Declarations ------- */
A_BOOL bmiDone;

/* APIs visible to the driver */
void
BMIInit(void) 
{
    bmiDone = FALSE;
}

A_STATUS 
BMIDone(HIF_DEVICE *device) 
{
    A_STATUS status;
    A_UINT32 cid;

    if (bmiDone) {
        BMI_DEBUG_PRINTF(ATH_LOG_ERR,"Command disallowed\n");
        return A_ERROR;
    }

    BMI_DEBUG_PRINTF(ATH_LOG_INF,"BMI Done: Enter (device: 0x%p)\n", device);
    bmiDone = TRUE;
    cid = BMI_DONE;

    status = bmiBufferSend(device, (A_UCHAR *)&cid, sizeof(cid));
    if (status != A_OK) {
        BMI_DEBUG_PRINTF(ATH_LOG_ERR,"Unable to write to the device\n");
        return A_ERROR;
    }
    BMI_DEBUG_PRINTF(ATH_LOG_INF,"BMI Done: Exit\n");

    return A_OK;
}

A_STATUS 
BMIGetTargetId(HIF_DEVICE *device, A_UINT32 *id) 
{
    A_STATUS status;
    A_UINT32 cid;

    if (bmiDone) {
        BMI_DEBUG_PRINTF(ATH_LOG_ERR,"Command disallowed\n");
        return A_ERROR;
    }

    BMI_DEBUG_PRINTF(ATH_LOG_INF,"BMI Get Target ID: Enter (device: 0x%p)\n", device);
    cid = BMI_GET_TARGET_ID;

    status = bmiBufferSend(device, (A_UCHAR *)&cid, sizeof(cid));
    if (status != A_OK) {
        BMI_DEBUG_PRINTF(ATH_LOG_ERR,"Unable to write to the device\n");
        return A_ERROR;
    }

    status = bmiBufferReceive(device, (A_UCHAR *)id, sizeof(*id));
    if (status != A_OK) {
        BMI_DEBUG_PRINTF(ATH_LOG_ERR,"Unable to read from the device\n");
        return A_ERROR;
    }
    BMI_DEBUG_PRINTF(ATH_LOG_INF,"BMI Get Target ID: Exit (ID: 0x%x)\n", *id);

    return A_OK;
}

A_STATUS 
BMIReadMemory(HIF_DEVICE *device, 
              A_UINT32 address, 
              A_UCHAR *buffer, 
              A_UINT32 length) 
{
    A_UINT32 cid;
    A_STATUS status;
    A_UINT32 offset;
    A_UINT32 remaining, rxlen;
    A_UCHAR data[BMI_DATASZ_MAX + sizeof(cid) + sizeof(address) + sizeof(length)];

    if (bmiDone) {
        BMI_DEBUG_PRINTF(ATH_LOG_ERR,"Command disallowed\n");
        return A_ERROR;
    }

    BMI_DEBUG_PRINTF(ATH_LOG_INF,
       "BMI Read Memory: Enter (device: 0x%p, address: 0x%x, length: %d)\n", 
        device, address, length);

    cid = BMI_READ_MEMORY;

#ifdef ONLY_16BIT
    length = length + (length % 2);
#endif
    remaining = length;
    while (remaining)
    {
        rxlen = (remaining < BMI_DATASZ_MAX) ? remaining : BMI_DATASZ_MAX;
        offset = 0;
        A_MEMCPY(&data[offset], &cid, sizeof(cid));
        offset += sizeof(cid);
        A_MEMCPY(&data[offset], &address, sizeof(address));
        offset += sizeof(address);
        A_MEMCPY(&data[offset], &rxlen, sizeof(rxlen));
        offset += sizeof(length);
        status = bmiBufferSend(device, data, offset);
        if (status != A_OK) {
            BMI_DEBUG_PRINTF(ATH_LOG_ERR,"Unable to write to the device\n");
            return A_ERROR;
        }
        status = bmiBufferReceive(device, data, rxlen);
        if (status != A_OK) {
            BMI_DEBUG_PRINTF(ATH_LOG_ERR,"Unable to read from the device\n");
            return A_ERROR;
        }
        A_MEMCPY(&buffer[length - remaining], data, rxlen);
        remaining -= rxlen; address += rxlen;
    }

    BMI_DEBUG_PRINTF(ATH_LOG_INF,"BMI Read Memory: Exit\n");
    return A_OK;
}

A_STATUS 
BMIWriteMemory(HIF_DEVICE *device, 
               A_UINT32 address, 
               A_UCHAR *buffer, 
               A_UINT32 length) 
{
    A_UINT32 cid;
    A_STATUS status;
    A_UINT32 offset;
    A_UINT32 remaining, txlen;
    A_UCHAR data[BMI_DATASZ_MAX + sizeof(cid) + sizeof(address) + sizeof(length)];
	A_UINT32 header=sizeof(cid) + sizeof(address) + sizeof(length);

    if (bmiDone) {
        BMI_DEBUG_PRINTF(ATH_LOG_ERR,"Command disallowed\n");
        return A_ERROR;
    }

    BMI_DEBUG_PRINTF(ATH_LOG_INF,
         "BMI Write Memory: Enter (device: 0x%p, address: 0x%x, length: %d)\n", 
          device, address, length);

    cid = BMI_WRITE_MEMORY;

#ifdef ONLY_16BIT
    length = length + (length % 2);
#endif
    remaining = length;
    while (remaining)
    {
        txlen = (remaining < (BMI_DATASZ_MAX - header)) ? 
                                       remaining : (BMI_DATASZ_MAX - header);
        offset = 0;
        A_MEMCPY(&data[offset], &cid, sizeof(cid));
        offset += sizeof(cid);
        A_MEMCPY(&data[offset], &address, sizeof(address));
        offset += sizeof(address);
        A_MEMCPY(&data[offset], &txlen, sizeof(txlen));
        offset += sizeof(txlen);
        A_MEMCPY(&data[offset], &buffer[length - remaining], txlen);
        offset += txlen;
        status = bmiBufferSend(device, data, offset);
        if (status != A_OK) {
            BMI_DEBUG_PRINTF(ATH_LOG_ERR,"Unable to write to the device\n");
            return A_ERROR;
        }
        remaining -= txlen; address += txlen;
    }

    BMI_DEBUG_PRINTF(ATH_LOG_INF,"BMI Write Memory: Exit\n");

    return A_OK;
}

A_STATUS 
BMIExecute(HIF_DEVICE *device, 
           A_UINT32 address, 
           A_UINT32 *param) 
{
    A_UINT32 cid;
    A_STATUS status;
    A_UINT32 offset;
    A_UCHAR data[sizeof(cid) + sizeof(address) + sizeof(*param)];

    if (bmiDone) {
        BMI_DEBUG_PRINTF(ATH_LOG_ERR,"Command disallowed\n");
        return A_ERROR;
    }

    BMI_DEBUG_PRINTF(ATH_LOG_INF,
       "BMI Execute: Enter (device: 0x%p, address: 0x%x, param: %d)\n", 
        device, address, *param);

    cid = BMI_EXECUTE;

    offset = 0;
    A_MEMCPY(&data[offset], &cid, sizeof(cid));
    offset += sizeof(cid);
    A_MEMCPY(&data[offset], &address, sizeof(address));
    offset += sizeof(address);
    A_MEMCPY(&data[offset], param, sizeof(*param));
    offset += sizeof(*param);
    status = bmiBufferSend(device, data, offset);
    if (status != A_OK) {
        BMI_DEBUG_PRINTF(ATH_LOG_ERR,"Unable to write to the device\n");
        return A_ERROR;
    }

    status = bmiBufferReceive(device, data, sizeof(*param));
    if (status != A_OK) {
        BMI_DEBUG_PRINTF(ATH_LOG_ERR,"Unable to read from the device\n");
        return A_ERROR;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品一区二区三区在线| 国产精品不卡一区| 久久精品人人爽人人爽| 亚洲影视资源网| 大胆亚洲人体视频| 日本精品一级二级| 国产婷婷一区二区| 日本美女视频一区二区| 一本久久综合亚洲鲁鲁五月天| 日韩免费电影网站| 偷窥国产亚洲免费视频| 99久久亚洲一区二区三区青草 | 日韩电影在线看| 成人小视频免费在线观看| 日韩欧美国产一区在线观看| 亚洲电影在线免费观看| 91小视频在线| 国产精品国产自产拍高清av | 麻豆精品视频在线观看视频| 欧美日韩国产小视频| 亚洲免费在线电影| 成人黄色网址在线观看| 日本一区二区三区高清不卡 | 蓝色福利精品导航| 欧美一区二区精美| 偷拍日韩校园综合在线| 欧美日韩久久一区| 婷婷开心久久网| 在线不卡a资源高清| 亚洲香蕉伊在人在线观| 在线观看一区二区视频| 国产精品网站在线| 成人久久久精品乱码一区二区三区| 久久免费电影网| 国产精品原创巨作av| 国产欧美一区二区精品婷婷| 国产在线播放一区三区四| 精品国产麻豆免费人成网站| 国产在线一区观看| 国产精品免费网站在线观看| thepron国产精品| 一区二区三区四区高清精品免费观看 | bt欧美亚洲午夜电影天堂| 国产精品天美传媒| 91在线porny国产在线看| 亚洲黄色在线视频| 欧美乱妇20p| 久久99精品国产麻豆婷婷洗澡| 精品久久久久av影院| 国产精品一级片| 亚洲激情第一区| 欧美一区二区二区| 国产一区二区三区蝌蚪| 日韩码欧中文字| 欧美精选午夜久久久乱码6080| 久草在线在线精品观看| 国产精品久久久久四虎| 欧美日韩一区在线| 精品在线一区二区三区| 国产精品视频线看| 欧美日韩国产大片| 国产精品主播直播| 亚洲一区二区视频| 久久久精品国产免费观看同学| 99久久综合99久久综合网站| 日韩国产高清影视| 中文字幕欧美日本乱码一线二线| 欧美亚洲禁片免费| 久久99精品久久只有精品| 亚洲欧美日韩综合aⅴ视频| 欧美一级一区二区| 99久久伊人久久99| 精品一区二区三区的国产在线播放| 国产日本欧洲亚洲| 欧美男人的天堂一二区| 成人黄色网址在线观看| 欧美aaa在线| 一区二区三区小说| 久久久久久久久岛国免费| 欧洲一区二区av| 大桥未久av一区二区三区中文| 午夜av区久久| 亚洲日本乱码在线观看| 久久久久亚洲综合| 5858s免费视频成人| 色综合久久久久综合99| 国产主播一区二区| 人人超碰91尤物精品国产| 最新中文字幕一区二区三区| 久久精子c满五个校花| 欧美一区二区三区公司| 欧洲亚洲国产日韩| 97久久精品人人做人人爽50路| 国产一区二区三区久久久| 亚洲h在线观看| 亚洲天堂av老司机| 国产欧美一区二区精品忘忧草| 日韩美女视频一区二区在线观看| 在线看日韩精品电影| hitomi一区二区三区精品| 成人午夜免费视频| 国产激情一区二区三区| 国产在线不卡一区| 国产一区二区毛片| 九九九久久久精品| 青青草国产精品97视觉盛宴| 日韩精品电影一区亚洲| 亚洲va欧美va天堂v国产综合| 亚洲日本va在线观看| 国产精品入口麻豆原神| 国产喂奶挤奶一区二区三区| 欧美精品一区二区不卡| 欧美不卡激情三级在线观看| 日韩一区二区三区三四区视频在线观看| 欧美色区777第一页| 欧美浪妇xxxx高跟鞋交| 欧美乱妇一区二区三区不卡视频 | 白白色 亚洲乱淫| 成人性生交大片免费看视频在线| 国产夫妻精品视频| 不卡的av在线播放| 91蜜桃传媒精品久久久一区二区| 一本高清dvd不卡在线观看| 91蜜桃免费观看视频| 欧美亚洲一区三区| 欧美视频一二三区| 欧美一级高清片| 2024国产精品| 中文字幕第一区第二区| 国产精品久久99| 亚洲一区二区三区不卡国产欧美 | 国产成人午夜99999| 国产成人亚洲综合a∨婷婷| 不卡视频在线看| 91黄色激情网站| 日韩精品在线网站| 国产欧美日韩综合| 一区二区三区中文免费| 日韩精品免费专区| 激情偷乱视频一区二区三区| 成人精品免费视频| 在线免费观看一区| 日韩午夜电影av| 欧美国产一区二区在线观看| 一区二区欧美国产| 麻豆极品一区二区三区| 99久久久精品| 日韩片之四级片| 综合亚洲深深色噜噜狠狠网站| 亚洲va国产天堂va久久en| 久久99国产精品免费| 99国产欧美另类久久久精品| 91麻豆精品国产91久久久久| 国产日韩三级在线| 亚洲一区二区三区精品在线| 国产乱人伦偷精品视频免下载 | 91免费观看视频| 欧美一区二区三区在| 中日韩免费视频中文字幕| 五月天欧美精品| 99riav一区二区三区| 欧美tickle裸体挠脚心vk| 亚洲精品视频自拍| 国产91精品一区二区| 制服丝袜亚洲网站| 亚洲精品综合在线| 国产成人免费视频一区| 日韩欧美一区二区在线视频| 一区二区三区四区乱视频| 成人一级视频在线观看| 日韩精品一区在线观看| 午夜精品福利视频网站| 色综合色狠狠综合色| 国产精品视频免费| 久99久精品视频免费观看| 欧美精品一二三| 亚洲国产欧美在线| 99国产欧美另类久久久精品| 亚洲国产精品国自产拍av| 精品在线播放午夜| 精品日韩成人av| 蜜桃视频免费观看一区| 欧美视频三区在线播放| 亚洲自拍都市欧美小说| 99久久99久久精品国产片果冻| 国产午夜亚洲精品不卡| 极品少妇xxxx精品少妇| 日韩视频免费观看高清完整版| 午夜精品福利在线| 欧美电影一区二区三区| 亚洲成av人影院在线观看网| 欧美午夜宅男影院| 伊人夜夜躁av伊人久久| 色呦呦网站一区| 一个色综合网站| 欧美色视频一区| 日日噜噜夜夜狠狠视频欧美人| 欧美日韩国产高清一区二区| 日韩黄色在线观看| 日韩欧美在线不卡|