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

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

?? plxchipapi.c

?? PCI接口產(chǎn)品中橋芯片PLX6000、PLX8000、PLX9000和PLXsrv驅(qū)動(dòng)模塊源碼
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/*******************************************************************************
 * Copyright (c) 2007 PLX Technology, Inc.
 *
 * PLX Technology Inc. licenses this software under specific terms and
 * conditions.  Use of any of the software or derviatives thereof in any
 * product without a PLX Technology chip is strictly prohibited.
 *
 * PLX Technology, Inc. provides this software AS IS, WITHOUT ANY WARRANTY,
 * EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTY OF
 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  PLX makes no guarantee
 * or representations regarding the use of, or the results of the use of,
 * the software and documentation in terms of correctness, accuracy,
 * reliability, currentness, or otherwise; and you rely on the software,
 * documentation and results solely at your own risk.
 *
 * IN NO EVENT SHALL PLX BE LIABLE FOR ANY LOSS OF USE, LOSS OF BUSINESS,
 * LOSS OF PROFITS, INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES
 * OF ANY KIND.  IN NO EVENT SHALL PLX'S TOTAL LIABILITY EXCEED THE SUM
 * PAID TO PLX FOR THE PRODUCT LICENSED HEREUNDER.
 *
 ******************************************************************************/

/******************************************************************************
 *
 * File Name:
 *
 *      PlxChipApi.c
 *
 * Description:
 *
 *      Implements chip-specific API functions
 *
 * Revision History:
 *
 *      06-01-07 : PLX SDK v5.10
 *
 ******************************************************************************/


#include "Eep_9000.h"
#include "PciSupport.h"
#include "PlxChipApi.h"
#include "SupportFunc.h"




/******************************************************************************
 *
 * Function   :  PlxChip_BoardReset
 *
 * Description:  Resets a device using software reset feature of PLX chip
 *
 ******************************************************************************/
RETURN_CODE
PlxChip_BoardReset(
    DEVICE_EXTENSION *pdx
    )
{
    U8  MU_Enabled;
    U8  EepromPresent;
    U32 RegValue;
    U32 RegInterrupt;
    U32 RegHotSwap;
    U32 RegPowerMgmnt;


    // Clear any PCI errors
    PLX_PCI_REG_READ(
        pdx,
        CFG_COMMAND,
        &RegValue
        );

    if (RegValue & (0xf8 << 24))
    {
        // Write value back to clear aborts
        PLX_PCI_REG_WRITE(
            pdx,
            CFG_COMMAND,
            RegValue
            );
    }

    // Save state of I2O Decode Enable
    RegValue =
        PLX_9000_REG_READ(
            pdx,
            PCI8311_FIFO_CTRL_STAT
            );

    MU_Enabled = (U8)(RegValue & (1 << 0));

    // Determine if an EEPROM is present
    RegValue =
        PLX_9000_REG_READ(
            pdx,
            PCI8311_EEPROM_CTRL_STAT
            );

    // Make sure S/W Reset & EEPROM reload bits are clear
    RegValue &= ~((1 << 30) | (1 << 29));

    // Remember if EEPROM is present
    EepromPresent = (U8)((RegValue >> 28) & (1 << 0));

    // Save interrupt line
    PLX_PCI_REG_READ(
        pdx,
        CFG_INT_LINE,
        &RegInterrupt
        );

    // Save some registers if EEPROM present
    if (EepromPresent)
    {
        PLX_PCI_REG_READ(
            pdx,
            PCI8311_HS_CAP_ID,
            &RegHotSwap
            );

        PLX_PCI_REG_READ(
            pdx,
            PCI8311_PM_CSR,
            &RegPowerMgmnt
            );
    }

    // Issue Software Reset to hold PLX chip in reset
    PLX_9000_REG_WRITE(
        pdx,
        PCI8311_EEPROM_CTRL_STAT,
        RegValue | (1 << 30)
        );

    // Delay for a bit
    Plx_sleep(100);

    // Bring chip out of reset
    PLX_9000_REG_WRITE(
        pdx,
        PCI8311_EEPROM_CTRL_STAT,
        RegValue
        );

    // Issue EEPROM reload in case now programmed
    PLX_9000_REG_WRITE(
        pdx,
        PCI8311_EEPROM_CTRL_STAT,
        RegValue | (1 << 29)
        );

    // Delay for a bit
    Plx_sleep(10);

    // Clear EEPROM reload
    PLX_9000_REG_WRITE(
        pdx,
        PCI8311_EEPROM_CTRL_STAT,
        RegValue
        );

    // Restore I2O Decode Enable state
    if (MU_Enabled)
    {
        // Save state of I2O Decode Enable
        RegValue =
            PLX_9000_REG_READ(
                pdx,
                PCI8311_FIFO_CTRL_STAT
                );

        PLX_9000_REG_WRITE(
            pdx,
            PCI8311_FIFO_CTRL_STAT,
            RegValue | (1 << 0)
            );
    }

    // Restore interrupt line
    PLX_PCI_REG_WRITE(
        pdx,
        CFG_INT_LINE,
        RegInterrupt
        );

    // If EEPROM was present, restore registers
    if (EepromPresent)
    {
        // Mask out HS bits that can be cleared
        RegHotSwap &= ~((1 << 23) | (1 << 22) | (1 << 17));

        PLX_PCI_REG_WRITE(
            pdx,
            PCI8311_HS_CAP_ID,
            RegHotSwap
            );

        // Mask out PM bits that can be cleared
        RegPowerMgmnt &= ~(1 << 15);

        PLX_PCI_REG_READ(
            pdx,
            PCI8311_PM_CSR,
            &RegPowerMgmnt
            );
    }

    return ApiSuccess;
}




/******************************************************************************
 *
 * Function   :  PlxChip_InterruptEnable
 *
 * Description:  Enables specific interupts of the PLX Chip
 *
 ******************************************************************************/
RETURN_CODE
PlxChip_InterruptEnable(
    DEVICE_EXTENSION *pdx,
    PLX_INTERRUPT    *pPlxIntr
    )
{
    U32          QueueCsr;
    U32          QueueCsr_Original;
    U32          RegValue;
    PLX_REG_DATA RegData;


    // Setup to synchronize access to Interrupt Control/Status Register
    RegData.pdx         = pdx;
    RegData.offset      = PCI8311_INT_CTRL_STAT;
    RegData.BitsToSet   = 0;
    RegData.BitsToClear = 0;

    if (pPlxIntr->PciMain)
        RegData.BitsToSet |= (1 << 8);

    if (pPlxIntr->PciAbort)
        RegData.BitsToSet |= (1 << 10);

    if (pPlxIntr->TargetRetryAbort)
        RegData.BitsToSet |= (1 << 12);

    if (pPlxIntr->LocalToPci_1)
        RegData.BitsToSet |= (1 << 11);

    if (pPlxIntr->Doorbell)
        RegData.BitsToSet |= (1 << 9);

    if (pPlxIntr->PowerManagement)
        RegData.BitsToSet |= (1 << 4);

    if (pPlxIntr->DmaChannel_0)
    {
        RegData.BitsToSet |= (1 << 18);

        // Make sure DMA done interrupt is enabled & routed to PCI
        RegValue =
            PLX_9000_REG_READ(
                pdx,
                PCI8311_DMA0_MODE
                );

        PLX_9000_REG_WRITE(
            pdx,
            PCI8311_DMA0_MODE,
            RegValue | (1 << 17) | (1 << 10)
            );
    }

    if (pPlxIntr->DmaChannel_1)
    {
        RegData.BitsToSet |= (1 << 19);

        // Make sure DMA done interrupt is enabled & routed to PCI
        RegValue =
            PLX_9000_REG_READ(
                pdx,
                PCI8311_DMA1_MODE
                );

        PLX_9000_REG_WRITE(
            pdx,
            PCI8311_DMA1_MODE,
            RegValue | (1 << 17) | (1 << 10)
            );
    }

    // Inbound Post Queue Interrupt Control/Status Register
    QueueCsr_Original =
        PLX_9000_REG_READ(
            pdx,
            PCI8311_FIFO_CTRL_STAT
            );

    QueueCsr = QueueCsr_Original;

    if (pPlxIntr->MuOutboundPost)
    {
        PLX_9000_REG_WRITE(
            pdx,
            PCI8311_OUTPOST_INT_MASK,
            0
            );
    }

    if (pPlxIntr->MuInboundPost)
        QueueCsr &= ~(1 << 4);

    if (pPlxIntr->MuOutboundOverflow)
    {
        RegData.BitsToSet |=  (1 << 1);
        QueueCsr          &= ~(1 << 6);
    }

    // Write register values if they have changed
    if (RegData.BitsToSet != 0)
    {
        // Synchronize write of Interrupt Control/Status Register
        KeSynchronizeExecution(
            pdx->pInterruptObject,
            PlxSynchronizedRegisterModify,
            &RegData
            );
    }

    if (QueueCsr != QueueCsr_Original)
    {
        PLX_9000_REG_WRITE(
            pdx,
            PCI8311_FIFO_CTRL_STAT,
            QueueCsr
            );
    }

    return ApiSuccess;
}




/******************************************************************************
 *
 * Function   :  PlxChip_InterruptDisable
 *
 * Description:  Disables specific interrupts of the PLX Chip
 *
 ******************************************************************************/
RETURN_CODE
PlxChip_InterruptDisable(
    DEVICE_EXTENSION *pdx,
    PLX_INTERRUPT    *pPlxIntr
    )
{
    U32          QueueCsr;
    U32          QueueCsr_Original;
    U32          RegValue;
    PLX_REG_DATA RegData;


    // Setup to synchronize access to Interrupt Control/Status Register
    RegData.pdx         = pdx;
    RegData.offset      = PCI8311_INT_CTRL_STAT;
    RegData.BitsToSet   = 0;
    RegData.BitsToClear = 0;

    if (pPlxIntr->PciMain)
        RegData.BitsToClear |= (1 << 8);

    if (pPlxIntr->PciAbort)
        RegData.BitsToClear |= (1 << 10);

    if (pPlxIntr->TargetRetryAbort)
        RegData.BitsToClear |= (1 << 12);

    if (pPlxIntr->LocalToPci_1)
        RegData.BitsToClear |= (1 << 11);

    if (pPlxIntr->Doorbell)
        RegData.BitsToClear |= (1 << 9);

    if (pPlxIntr->PowerManagement)
        RegData.BitsToClear |= (1 << 4);

    if (pPlxIntr->DmaChannel_0)
    {
        // Check if DMA interrupt is routed to PCI
        RegValue =
            PLX_9000_REG_READ(
                pdx,
                PCI8311_DMA0_MODE
                );

        if (RegValue & (1 << 17))
        {
            RegData.BitsToClear |= (1 << 18);

            // Disable DMA interrupt enable
            PLX_9000_REG_WRITE(
                pdx,
                PCI8311_DMA0_MODE,
                RegValue & ~(1 << 10)
                );
        }
    }

    if (pPlxIntr->DmaChannel_1)
    {
        // Check if DMA interrupt is routed to PCI
        RegValue =
            PLX_9000_REG_READ(
                pdx,
                PCI8311_DMA1_MODE
                );

        if (RegValue & (1 << 17))
        {
            RegData.BitsToClear |= (1 << 19);

            // Disable DMA interrupt enable
            PLX_9000_REG_WRITE(
                pdx,
                PCI8311_DMA1_MODE,
                RegValue & ~(1 << 10)
                );
        }
    }

    // Inbound Post Queue Interrupt Control/Status Register
    QueueCsr_Original =
        PLX_9000_REG_READ(
            pdx,
            PCI8311_FIFO_CTRL_STAT
            );

    QueueCsr = QueueCsr_Original;

    if (pPlxIntr->MuOutboundPost)
    {
        PLX_9000_REG_WRITE(
            pdx,
            PCI8311_OUTPOST_INT_MASK,
            (1 << 3)
            );
    }

    if (pPlxIntr->MuInboundPost)
        QueueCsr |= (1 << 4);

    if (pPlxIntr->MuOutboundOverflow)
        QueueCsr |= (1 << 6);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩成人免费看| 亚洲欧洲一区二区在线播放| 青青草一区二区三区| 91精品国产91热久久久做人人| 欧美一区二区精品| 麻豆成人av在线| 精品福利在线导航| 粉嫩绯色av一区二区在线观看| 日韩欧美三级在线| 精一区二区三区| 国产精品网曝门| 久久99精品国产.久久久久| 欧美成人国产一区二区| 国产经典欧美精品| 亚洲亚洲精品在线观看| 欧美一区二区精美| 不卡电影一区二区三区| 国产免费成人在线视频| 91亚洲午夜精品久久久久久| 视频一区在线播放| 国产亚洲欧美激情| 欧美视频中文字幕| 国产一区视频在线看| 国产精品三级视频| 国产米奇在线777精品观看| 日韩一区二区三区观看| 国产成人免费在线观看不卡| 亚洲一区二区三区四区在线观看| 色综合久久综合网97色综合| 日韩1区2区日韩1区2区| 亚洲国产精品v| 国产成人午夜电影网| 久久久久久亚洲综合| 色综合中文综合网| 亚洲综合色区另类av| 日韩欧美激情四射| 一本色道亚洲精品aⅴ| 久久se精品一区精品二区| 中文字幕巨乱亚洲| 99国产麻豆精品| 免费视频一区二区| 尤物在线观看一区| 国产欧美日韩一区二区三区在线观看| 国产精品456| 偷窥少妇高潮呻吟av久久免费| 91福利区一区二区三区| 国产精品影视网| 国产精品色婷婷久久58| 欧美成人女星排名| 欧美日本视频在线| 天天做天天摸天天爽国产一区| 欧美一区二区在线不卡| av一二三不卡影片| 亚洲综合激情小说| 国产精品乱人伦一区二区| 日韩欧美激情四射| 日韩视频永久免费| 懂色av中文字幕一区二区三区 | 亚洲高清久久久| 国产精品福利一区二区三区| 欧美xxxxxxxx| 日韩三级在线观看| 成人黄页毛片网站| 国产乱码一区二区三区| 亚洲色图色小说| 国产精品国产精品国产专区不蜜 | 亚洲免费观看高清完整版在线观看熊| 欧美无砖专区一中文字| 91欧美一区二区| 91麻豆免费在线观看| 成人av中文字幕| 午夜精品久久久久| 午夜精品一区二区三区三上悠亚| 日韩美女在线视频| 91精品国产色综合久久久蜜香臀| 成人高清免费观看| 日韩福利电影在线观看| 午夜精品在线看| 国产精品久线观看视频| 欧美高清在线一区二区| 国产精品久久久久久久裸模| 欧美怡红院视频| 欧美天天综合网| 成人毛片视频在线观看| 99精品黄色片免费大全| 久久99久久99小草精品免视看| 国产精品久久久久久久第一福利 | 亚洲男同1069视频| 日韩精品在线网站| 精品国产乱子伦一区| 久久色.com| 国产精品美女久久久久aⅴ国产馆| 91精品国产综合久久香蕉麻豆| 成人中文字幕在线| 色综合久久精品| 欧美精三区欧美精三区| youjizz国产精品| 欧美自拍丝袜亚洲| 欧美一区永久视频免费观看| 欧美大尺度电影在线| 国产亚洲精品aa午夜观看| 中文字幕亚洲综合久久菠萝蜜| 日韩你懂的在线观看| 久久久国产综合精品女国产盗摄| 欧美日韩一区三区| 日韩一级黄色大片| 欧美国产日本韩| 一区二区三区在线视频免费| 青青草原综合久久大伊人精品优势 | 久久精品一二三| 亚洲欧美在线视频观看| 亚洲一线二线三线视频| 最新国产成人在线观看| 日韩国产在线一| 成人福利视频网站| 欧美一区二区三区视频免费播放| 欧美日韩一区二区三区四区五区 | 亚洲欧洲日产国码二区| 亚洲va欧美va人人爽午夜| 国内精品国产成人国产三级粉色| 美美哒免费高清在线观看视频一区二区| 一区二区三区日韩| 久久99国产精品免费| 91网站在线播放| 精品国产自在久精品国产| 日韩一区二区在线免费观看| 亚洲国产激情av| 亚洲欧美一区二区久久| 最新热久久免费视频| 轻轻草成人在线| 国内成人自拍视频| 欧美网站大全在线观看| 欧美国产一区二区在线观看| 另类调教123区| 国产一区二区美女| 欧美福利视频导航| 亚洲精品国产高清久久伦理二区| 亚洲视频图片小说| 国产精品一线二线三线| 91精品国产综合久久精品麻豆| 日韩欧美中文一区二区| 久久综合99re88久久爱| 午夜伦理一区二区| 日本道免费精品一区二区三区| 欧美揉bbbbb揉bbbbb| 国产精品久久久久天堂| 亚洲国产一区二区三区青草影视 | 欧美日本在线播放| 亚洲女与黑人做爰| 成年人网站91| 国产精品久久看| 午夜精品久久久久久久 | 久久品道一品道久久精品| 亚洲成av人片一区二区三区| 一本色道a无线码一区v| 91精品久久久久久久久99蜜臂| 精品处破学生在线二十三| 三级成人在线视频| 欧美日韩国产a| 亚洲h动漫在线| 欧美三级电影在线看| 久久久国产精品午夜一区ai换脸| 亚洲色图欧美偷拍| 99久久久无码国产精品| 欧美一区二区三区小说| 五月激情综合色| 成人中文字幕电影| 国产精品国模大尺度视频| 成人免费毛片aaaaa**| 国产蜜臀av在线一区二区三区| 午夜精品影院在线观看| 欧美男生操女生| 热久久国产精品| 2021国产精品久久精品| 亚洲第一狼人社区| 成人综合婷婷国产精品久久免费| 欧美精品黑人性xxxx| 中文字幕不卡的av| 99re亚洲国产精品| 337p粉嫩大胆噜噜噜噜噜91av | 久久久久久久久久久久久久久99| 亚洲免费大片在线观看| 91美女片黄在线观看91美女| 欧美大白屁股肥臀xxxxxx| 久久99精品国产.久久久久久| 欧美性色黄大片手机版| 午夜影院在线观看欧美| 日韩精品资源二区在线| 国产精品综合一区二区三区| 17c精品麻豆一区二区免费| 色狠狠桃花综合| 毛片一区二区三区| 国产婷婷精品av在线| 日本韩国一区二区| 国产精品免费久久久久| 欧美色综合久久| 国产一区二区福利视频| 精品欧美一区二区在线观看| 亚洲一级不卡视频| 精品成人私密视频|