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

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

?? spci.c

?? scsi腳本文件(scripts)編程例子
?? C
字號:
/*--------------------------------------------------*/
/*                                                  */
/* Module SPCI.C                                    */
/*                                                  */
/* PCI access functions for sample code.            */
/*                                                  */
/* Adapted from Symbios Logic                       */
/*    Software Development Kit                      */
/*                                                  */
/* Project: A Programmer's Guide to SCSI            */
/* Copyright (C) 1997, Brian Sawert.                */
/* All rights reserved.                             */
/*                                                  */
/*--------------------------------------------------*/


#include <stdio.h>
#include <stdlib.h>
#include <dos.h>

#include "gen_tool.h"         // generic tools
#include "spci.h"             // PCI definitions
#include "s8xx.h"             // Symbios 8XX definitions

#pragma inline                // enable inline assembly


/*---------- defines and macros ----------*/

/*---------- global variables ----------*/

/*---------- external variables ----------*/

/*---------- local functions ----------*/

/*---------- external functions ----------*/

/*---------- function definitions ----------*/


/*--------------------------------------------------*/
/*                                                  */
/* Routine to get PCI BIOS information.             */
/*                                                  */
/* Usage:   WORD PCI_GetPCIBIOSVersion(             */
/*    pci_bios *ppcibios);                          */
/*                                                  */
/* Parameters:                                      */
/*    ppcibios:      pointer to pci_bios struct     */
/*                                                  */
/* Return value:                                    */
/*    Returns PCI BIOS version number on success,   */
/*    0 if PCI BIOS not found. Fills pci_bios       */
/*    struct on success.                            */
/*                                                  */
/*--------------------------------------------------*/

WORD PCI_GetPCIBIOSVersion(pci_bios *ppcibios)
{
   WORD r_ax, r_bx, r_cx, r_dx;  // register variables
   DWORD r_edx;
   DWORD pci_sig;                // PCI signature
   WORD retval = PCI_NO_BIOS;


   pci_sig = 0x20494350L;        // " ICP" signature

   // call PCI function to check for BIOS
   r_ax = ((PCI_FUNCTION_ID << 8) | PCI_BIOS_PRESENT);

   asm {
      .386
      mov ax, [r_ax]
      int PCI_BIOS_INT
      mov DWORD PTR [r_edx], edx
      mov [r_dx], dx
      mov [r_cx], cx
      mov [r_bx], bx
      mov [r_ax], ax
   }

   if (r_dx == LOWORD(pci_sig)) {
   // PCI BIOS is present

      if (r_cx == HIWORD(pci_sig) &&
         (r_bx & 0xff00) == 0x0100) {
      // PCI BIOS version 1.x
         retval = PCI_BIOS_REV_1X;
      }
      else if (r_edx == pci_sig) {
      // PCI BIOS version 2.x
         retval = PCI_BIOS_REV_2X;
      }
      else {
      // unknown version
         retval = PCI_UNKNOWN_BIOS;
      }

      if (ppcibios != NULL) {
      // fill BIOS info struct
         ppcibios->access = (r_ax & 0xff);
         ppcibios->version = r_bx;
         ppcibios->lastbus = (r_cx & 0xff);
      }
   }

   return retval;
}



/*--------------------------------------------------*/
/*                                                  */
/* Routine to locate PCI device.                    */
/*                                                  */
/* Usage:   int PCI_FindDevice(                     */
/*    pci_device *ppcidevice);                      */
/*                                                  */
/* Parameters:                                      */
/*    ppcidevice:    pointer to pci_device struct   */
/*                                                  */
/* Return value:                                    */
/*    Returns 1 if device found, 0 otherwise.       */
/*    Fills pci_device struct on success.           */
/*                                                  */
/*--------------------------------------------------*/

int PCI_FindDevice(pci_device *ppcidevice)
{
// struct REGPACK regs;
   WORD r_ax, r_bx, r_cx, r_dx, r_si;
   DWORD config;
   int retval = 0;


   // make sure we have a PCI BIOS
      if (PCI_GetPCIBIOSVersion(NULL) != PCI_NO_BIOS) {
   // PCI BIOS is present

      // call PCI function to find device
      r_ax = ((PCI_FUNCTION_ID << 8) |
         (PCI_FIND_DEVICE));

      r_cx = ppcidevice->dev_id;
      r_dx = ppcidevice->vend_id;
      r_si = ppcidevice->dev_index;

      asm {
         .386
         mov ax, [r_ax]
         mov cx, [r_cx]
         mov dx, [r_dx]
         mov si, [r_si]
         int PCI_BIOS_INT
         mov ax, 0
         adc ax, 0
         mov [r_bx], bx
         mov [r_ax], ax

      }

      if (r_ax == 0) {
      // carry bit is clear - call succeeded

         // save device bus number
         ppcidevice->bus_num = ((r_bx & 0xFF00) >> 8);

         // save device number
         ppcidevice->dev_num = (r_bx & 0x00FF);

         // save device function
         ppcidevice->function = (r_bx & 0x0007);

         // get command register
         ppcidevice->command =
            (WORD) PCI_GetConfigRegister(
            ppcidevice, PCI_CONFIG_REG_CMD);

         // get revision ID
         ppcidevice->rev_id =
            (BYTE) PCI_GetConfigRegister(
            ppcidevice, PCI_CONFIG_REG_REVID);

         // get subsystem and vendor ID
         config = PCI_GetConfigRegister(
            ppcidevice, PCI_CONFIG_REG_SUBV);
         ppcidevice->sub_vend_id = (WORD) config;
         ppcidevice->sub_id = (WORD) (config >> 16);

         // get I/O base address
         config = PCI_GetConfigRegister(
            ppcidevice, C8XX_CONFIG_REG_IOB);
         ppcidevice->io_base = (config & 0xFFFFFFFEL);

         // get SCRIPTS RAM base address
         ppcidevice->ram_base = PCI_GetConfigRegister(
            ppcidevice, C8XX_CONFIG_REG_RAMB);

         // get ROM base address
         ppcidevice->rom_base = PCI_GetConfigRegister(
            ppcidevice, PCI_CONFIG_REG_ROM);

         // get interrupt number
         config = PCI_GetConfigRegister(
            ppcidevice, PCI_CONFIG_REG_INTL);
         ppcidevice->intl = (BYTE) config;

         retval = 1;
      }
   }

   return retval;
}



/*--------------------------------------------------*/
/*                                                  */
/* Routine to read PCI configuration register.      */
/*                                                  */
/* Usage:   DWORD PCI_GetConfigRegister(            */
/*    pci_device *ppcidevice, WORD offset)          */
/*                                                  */
/* Parameters:                                      */
/*    ppcidevice:    pointer to pci_device struct   */
/*    offset:        config register offset         */
/*                                                  */
/* Return value:                                    */
/*    Returns register value on success,            */
/*    0 otherwise.                                  */
/*                                                  */
/*--------------------------------------------------*/

DWORD PCI_GetConfigRegister(pci_device *ppcidevice,
   WORD offset)
{
   WORD r_ax, r_bx, r_di, r_dx, r_cx;
   DWORD r_ecx;
   WORD pci_version;
   DWORD retval = 0L;


   // get PCI version
   pci_version = PCI_GetPCIBIOSVersion(NULL);

   if (!(pci_version == PCI_NO_BIOS ||
      pci_version == PCI_UNKNOWN_BIOS)) {
   // PCI BIOS present

      // call PCI function to read register
      r_ax = ((PCI_FUNCTION_ID << 8) |
         (PCI_READ_CONFIG_DWORD));

      // set bus number and device number
      r_bx = ((ppcidevice->bus_num & 0xff) << 8) |
         (ppcidevice->dev_num & 0xff);

      // set configuration register offset
      r_di = offset;

      asm {
         .386
         mov ax, [r_ax]
         mov bx, [r_bx]
         mov di, [r_di]
         int PCI_BIOS_INT
         mov DWORD PTR [r_ecx], ecx
         mov [r_dx], dx
         mov [r_cx], cx
      }

      if (pci_version == PCI_BIOS_REV_1X) {
      // PCI version 1.x
         retval = r_dx;
         retval = (retval << 16) | r_cx;
      }
      else if (pci_version == PCI_BIOS_REV_2X) {
      // PCI version 2.x
         retval = r_ecx;
      }
   }

   return retval;
}



/*--------------------------------------------------*/
/*                                                  */
/* Routine to write to PCI configuration register.  */
/*                                                  */
/* Usage:   void PCI_SetConfigRegister(             */
/*    pci_device *ppcidevice, WORD offset,          */
/*    DWORD value)                                  */
/*                                                  */
/* Parameters:                                      */
/*    ppcidevice:    pointer to pci_device struct   */
/*    offset:        config register offset         */
/*    value:         value to write to register     */
/*                                                  */
/* Return value:                                    */
/*    Returns 0 if no PCI BIOS, 1 otherwise.        */
/*                                                  */
/*--------------------------------------------------*/

WORD PCI_SetConfigRegister(pci_device *ppcidevice,
   WORD offset, DWORD value)
{
   WORD r_ax, r_bx, r_di, r_dx, r_cx;
   DWORD r_ecx;
   WORD pci_version;
   WORD retval = 0;


   // get PCI version
   pci_version = PCI_GetPCIBIOSVersion(NULL);

   if (!(pci_version == PCI_NO_BIOS ||
      pci_version == PCI_UNKNOWN_BIOS)) {
   // PCI BIOS present

      retval = 1;

      // call PCI function to write to register
      r_ax = ((PCI_FUNCTION_ID << 8) |
         (PCI_WRITE_CONFIG_DWORD));

      // set bus number and device number
      r_bx = ((ppcidevice->bus_num & 0xff) << 8) |
         (ppcidevice->dev_num & 0xff);

      // set configuration register offset
      r_di = offset;

      if (pci_version == PCI_BIOS_REV_1X) {
      // PCI version 1.x
         r_cx = (WORD) value;
         r_dx = (WORD) (value >> 16);
      }
      else if (pci_version == PCI_BIOS_REV_2X) {
      // PCI version 2.x
         r_ecx = value;
      }

      asm {
         .386
         mov ax, [r_ax]
         mov bx, [r_bx]
         mov cx, [r_cx]
         mov dx, [r_dx]
         mov di, [r_di]
         mov ecx, DWORD PTR [r_ecx]
         int PCI_BIOS_INT
      }
   }

   return retval;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情久久五月天| 亚洲 欧美综合在线网络| 捆绑变态av一区二区三区| 欧美日韩中文精品| 视频精品一区二区| 日韩欧美一二三| 国产在线国偷精品产拍免费yy | 白白色 亚洲乱淫| 国产精品久久影院| 一本色道久久综合精品竹菊| 日韩毛片精品高清免费| 欧美中文字幕久久| 五月婷婷激情综合网| 7777精品伊人久久久大香线蕉最新版 | 99久久免费国产| 一区二区欧美精品| 91精品国产欧美一区二区18| 极品少妇xxxx偷拍精品少妇| 国产精品蜜臀在线观看| 在线国产亚洲欧美| 久久精品国产亚洲a| 国产亚洲欧洲997久久综合| 波波电影院一区二区三区| 亚洲午夜日本在线观看| 欧美成人性福生活免费看| 不卡的电视剧免费网站有什么| 一区二区高清在线| 欧美精品一区二| 色婷婷亚洲综合| 精品一区二区三区香蕉蜜桃 | 国产不卡视频一区| 亚洲丝袜精品丝袜在线| 欧美一区二区福利在线| 成人毛片视频在线观看| 丝袜诱惑制服诱惑色一区在线观看| 精品捆绑美女sm三区| 91丝袜高跟美女视频| 卡一卡二国产精品| 一区二区三区四区中文字幕| 欧美大片在线观看一区二区| 91片在线免费观看| 精品无人区卡一卡二卡三乱码免费卡| 亚洲天堂久久久久久久| 日韩色视频在线观看| 色拍拍在线精品视频8848| 亚洲另类春色国产| 欧美一区二区日韩| 国产精品一卡二| 一本到一区二区三区| 国内精品伊人久久久久av影院| 一二三区精品视频| 成人激情av网| 欧美高清性hdvideosex| 欧美精品日韩综合在线| 一区二区不卡在线视频 午夜欧美不卡在| 在线播放中文一区| 久久色中文字幕| 日韩精品一区二区在线观看| 4438x亚洲最大成人网| 日本韩国欧美在线| 久久日韩粉嫩一区二区三区| 91麻豆福利精品推荐| 精品国产第一区二区三区观看体验| 欧美色视频一区| 中文字幕一区二| 欧美一区二区三区免费大片| 欧美大片顶级少妇| 亚洲激情自拍偷拍| 成人听书哪个软件好| 亚洲成人在线观看视频| 亚洲成人精品在线观看| 中文字幕的久久| 国产成人亚洲综合a∨婷婷| 亚洲精品一卡二卡| 日韩激情av在线| 国产中文字幕精品| 久久久久高清精品| 国产永久精品大片wwwapp| 色哟哟日韩精品| 亚洲日本在线天堂| 欧美精品v国产精品v日韩精品| 国产成a人亚洲| 日产国产欧美视频一区精品| 欧美性大战久久久久久久蜜臀 | 欧美激情一区二区在线| 欧美日韩一区二区三区视频| 国产美女在线观看一区| 日韩精品电影在线观看| 欧美一区二区三区视频免费| 91国偷自产一区二区开放时间| 中文字幕佐山爱一区二区免费| 午夜电影久久久| 亚洲精品写真福利| 91福利在线观看| www.成人网.com| 成人一区二区三区在线观看| 国产精品一区二区男女羞羞无遮挡| 欧美一区二区视频在线观看| 在线免费不卡电影| 亚洲第一会所有码转帖| 亚洲高清视频在线| 午夜国产精品一区| 亚洲综合激情网| 亚洲美女在线一区| 亚洲免费观看视频| 国产91精品一区二区麻豆亚洲| 国产精品羞羞答答xxdd| 麻豆精品一区二区综合av| 久久影院午夜论| 欧美精品一区二区三区久久久| 亚洲精品你懂的| 亚洲精品美腿丝袜| 欧美精品aⅴ在线视频| 在线观看亚洲一区| 在线播放欧美女士性生活| 9191国产精品| 欧美午夜精品久久久久久超碰| 色94色欧美sute亚洲线路一久| www.欧美日韩| 91在线免费播放| 在线亚洲欧美专区二区| 久久国产精品99精品国产| 欧美三级视频在线观看| 日韩理论片在线| 欧美精品一区在线观看| 国产亚洲精品aa| 精品久久久久一区二区国产| 亚洲欧美激情一区二区| 精品少妇一区二区三区在线视频| 久久久不卡影院| 国产精品日韩成人| 国产精品99久久久久久似苏梦涵| 视频一区免费在线观看| 久久av资源站| 欧美一级二级在线观看| 国产亚洲欧洲一区高清在线观看| 国产拍欧美日韩视频二区| 国产精品嫩草久久久久| 日韩欧美国产一二三区| 91免费精品国自产拍在线不卡| 美女在线观看视频一区二区| 一区二区三区在线视频播放| 久久超碰97中文字幕| 亚洲高清免费视频| 久久精工是国产品牌吗| 国产91精品免费| 亚洲久草在线视频| 久久久久久97三级| 亚洲一区av在线| 国产欧美日本一区视频| 国内精品国产三级国产a久久| 日韩一级完整毛片| 91蜜桃视频在线| 欧美精品一区二区三区久久久| 日韩电影免费一区| 精品一区二区三区在线观看 | 中文字幕国产一区| 99精品黄色片免费大全| 成人激情小说乱人伦| 欧美精品一区二区三区蜜桃| 性感美女极品91精品| 色噜噜夜夜夜综合网| 亚洲人成7777| 99v久久综合狠狠综合久久| 中文字幕免费不卡在线| 国产一区二区三区四区五区美女| 欧美一三区三区四区免费在线看 | 亚洲精品视频在线观看免费| 成人av在线播放网址| 中文久久乱码一区二区| 高清不卡一区二区在线| 国产三级三级三级精品8ⅰ区| 国产在线一区二区综合免费视频| 日韩一区二区在线播放| 国产人成亚洲第一网站在线播放| 91国内精品野花午夜精品| 亚洲专区一二三| 欧美一级片在线观看| 成人听书哪个软件好| 亚洲国产精品久久久男人的天堂| 欧美老肥妇做.爰bbww| 国产成人亚洲精品狼色在线| 亚洲欧美怡红院| 日韩免费看的电影| 欧美日韩在线播放| 成人午夜av影视| 粉嫩aⅴ一区二区三区四区五区| 国产一区二区三区免费| 欧美视频自拍偷拍| 男女男精品视频网| 久久免费电影网| av男人天堂一区| 亚洲一区欧美一区| 欧美精品日韩一区| 精一区二区三区| 国产精品国产馆在线真实露脸| 91片在线免费观看| 日韩av电影天堂| 欧美激情在线一区二区三区| 91在线视频播放地址|