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

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

?? dec21140.c

?? 基于psos操作系統的dec21140驅動
?? C
?? 第 1 頁 / 共 5 頁
字號:

    /*-----------------------------------------------------------------*/
    /* Set tx_hdr to the transmit header associated with the frame,    */
    /* and return the message block triplet.                           */
    /*-----------------------------------------------------------------*/
    tx_hdr = TxUsedBD->buffAddr1;
    if (tx_hdr->NoRetFlag == 0)
      NiFuncs.freemsg(tx_hdr->msg_ptr);

    /*-----------------------------------------------------------------*/
    /* Advance TxUsedBD to next descriptor following this frame.       */
    /*-----------------------------------------------------------------*/
    for (i = 0; i < tx_hdr->num_desc; ++i)
    {
      TxUsedBD->buffAddr1 = NULL;
      TxUsedBD->status = NULL;
      TxUsedBD->ctrlNsize = LAN_XMTD_TCH;
      COPYBACK((void *)TxUsedBD, 1);
      TxUsedBD = TxUsedBD->nextDesc;
      ++TxFreeDesc;
    }

    /*-----------------------------------------------------------------*/
    /* Finally, return the transmit header to the free list.           */
    /*-----------------------------------------------------------------*/
    tx_hdr->next = TxHdrFreeHead;
    TxHdrFreeHead  = tx_hdr;

    /*-----------------------------------------------------------------*/
    /* Here's a window for interrupts                                  */
    /*-----------------------------------------------------------------*/
    intRESTORE_IEN(ien);
    ien = intCLEAR_IEN();
  }

  intRESTORE_IEN(ien);
}

/***********************************************************************/
/* TxFillDesc: Move from outgoing queue to transmit descriptor ring    */
/*                                                                     */
/* OUTPUTS: TxUsedBD is updated                                        */
/*                                                                     */
/***********************************************************************/
static void TxFillDesc(void)
{
  LAN_BUFF_DESC *first_desc;
  LAN_TX_HDR    *tx_hdr;
  mblk_t        *msgBlk;
  ULONG         length, frameLen;
  Bool ien;

  if (FlushFlag) return;

  /*-------------------------------------------------------------------*/
  /* Free up some descriptors if possible.                             */
  /*-------------------------------------------------------------------*/
  TxBufDetach();

  for (;;)
  {
    /*-----------------------------------------------------------------*/
    /*-----------------------------------------------------------------*/
    ien = intCLEAR_IEN();

    /*-----------------------------------------------------------------*/
    /* If no messages queued or not enough descriptors available for   */
    /* the first queued frame, we can't do anything.                   */
    /*-----------------------------------------------------------------*/
    if ((TxHdrOutHead == NULL) || (TxFreeDesc < TxHdrOutHead->num_desc))
      break;

    /*-----------------------------------------------------------------*/
    /* Extract first message.                                          */
    /*-----------------------------------------------------------------*/
    tx_hdr = TxHdrOutHead;
    TxHdrOutHead = TxHdrOutHead->next;

    /*-----------------------------------------------------------------*/
    /* Fill first transmit descriptor.  We save a pointer to this      */
    /* buffer descriptor and we don't give ownership to the MAC for    */
    /* this first descriptor until after all the other descriptors for */
    /* this frame are set up.                                          */
    /*-----------------------------------------------------------------*/
    first_desc = TxNewBD;
    TxBufAttach((void *)tx_hdr, 14, LAN_XMTD_FS, 0);
    frameLen = 14;

    /*-----------------------------------------------------------------*/
    /* Now add buffers pointed to by message block triplet.            */
    /*-----------------------------------------------------------------*/
    msgBlk = tx_hdr->msg_ptr;
    while (msgBlk)
    {
      length    = msgBlk->b_wptr - msgBlk->b_rptr;
      frameLen += length;

      /*---------------------------------------------------------------*/
      /* Interrupt bit is set only for last descriptor in frame.       */
      /*---------------------------------------------------------------*/
      if (msgBlk->b_cont)
      {
        TxBufAttach(msgBlk->b_rptr, length, 0, MAC_OWNS_DESC);
      }
      else
      {
        if (frameLen < 64)
          length += (64 - frameLen);

        TxBufAttach(msgBlk->b_rptr, length, LAN_XMTD_IC | LAN_XMTD_LS,
                    MAC_OWNS_DESC);
      }

      msgBlk = msgBlk->b_cont;
    }

    /*-----------------------------------------------------------------*/
    /* Give descriptor to MAC and request transmission.                */
    /*-----------------------------------------------------------------*/
    first_desc->status = MAC_OWNS_DESC;
    COPYBACK((void *)first_desc, 1);
    ioLongWrite(CSR1, 1);

    /*-----------------------------------------------------------------*/
    /*-----------------------------------------------------------------*/
    intRESTORE_IEN(ien);
  }

  intRESTORE_IEN(ien);
}

/***********************************************************************/
/*       bzero: Zero memory at specified address                       */
/*                                                                     */
/***********************************************************************/
static void bzero(UCHAR *ptr, int length)
{
  while (length--)
    *ptr++ = 0;
}

static struct ether_addr
{
  ULONG word_1;     /* first 2 bytes of address in least sig 16-bits */
  ULONG word_2;     /* next 2 bytes of address in least sig 16-bits */
  ULONG word_3;     /* last 2 bytes of ethernet in least sig 16-bits */
} EtherBlock[16];
static struct eth_other
{
  UCHAR count;      /* open count */
  UCHAR next;       /* index of next free address slot */
} EtherOther[16];
static ULONG EtherAddrNum;
static ULONG EtherAddrEmpty;

/***********************************************************************/
static void lan_addr_clear(void)
{
  int i;

  for (i = 0; i < 16; ++i)
  {
    EtherBlock[i].word_1 = 0xFFFF;
    EtherBlock[i].word_2 = 0xFFFF;
    EtherBlock[i].word_3 = 0xFFFF;
    EtherOther[i].count = 0;
    EtherOther[i].next = i + 1;
  }
  EtherOther[15].next = 0;  /* points to nothing else */
  EtherOther[0].count = 1;  /* this one is also considered used */

  EtherAddrNum = 1;
  EtherAddrEmpty = 1;
}

/***********************************************************************/
static ULONG lan_add_mcast(UCHAR *addr)
{
  ULONG i;
  USHORT addr1, addr2, addr3;
  Bool ien;

  addr1 = (addr[1] << 8) | addr[0];
  addr2 = (addr[3] << 8) | addr[2];
  addr3 = (addr[5] << 8) | addr[4];

  ien = intCLEAR_IEN();

  /* If the address is already in the list, merely increment its counter */

  for (i = 1; i < 16; ++i)      /* Skip the broadcast address in slot 0 */
  {
    if ((addr3 == EtherBlock[i].word_3) &&
        (addr2 == EtherBlock[i].word_2) &&
        (addr1 == EtherBlock[i].word_1))
    {
      /* The address is in the list */
      EtherOther[i].count++;
      intRESTORE_IEN(ien);
      return 0;
    }
  }

  if (EtherAddrEmpty)
  {
    EtherAddrEmpty = EtherOther[EtherAddrEmpty].next;
    EtherBlock[EtherAddrEmpty].word_1 = addr1;
    EtherBlock[EtherAddrEmpty].word_2 = addr2;
    EtherBlock[EtherAddrEmpty].word_3 = addr3;
    EtherOther[EtherAddrEmpty].count = 1;
    ++EtherAddrNum;
    intRESTORE_IEN(ien);
    lan_addr_write();
    return 0;
  }

  intRESTORE_IEN(ien);
  return ENFILE;
}

/***********************************************************************/
static ULONG lan_del_mcast(UCHAR *addr)
{
  ULONG i;
  USHORT addr1, addr2, addr3;
  Bool ien;

  addr1 = (addr[1] << 8) | addr[0];
  addr2 = (addr[3] << 8) | addr[2];
  addr3 = (addr[5] << 8) | addr[4];

  ien = intCLEAR_IEN();

  /* Find the address in the list */

  for (i = 1; i < 16; ++i)      /* Skip the broadcast address in slot 0 */
  {
    if ((addr3 == EtherBlock[i].word_3) &&
        (addr2 == EtherBlock[i].word_2) &&
        (addr1 == EtherBlock[i].word_1))
    {
      /* The address is in the list.  Write the broadcast pattern */
      /* Into the address slot to tag it 'empty' */

      if (--EtherOther[i].count == 0)
      {
        EtherBlock[i].word_1 = 0xFFFF;
        EtherBlock[i].word_2 = 0xFFFF;
        EtherBlock[i].word_3 = 0xFFFF;
        EtherOther[i].next = EtherAddrEmpty;
        EtherAddrEmpty = i;
        --EtherAddrNum;
        intRESTORE_IEN(ien);
        lan_addr_write();
      }
      else
        intRESTORE_IEN(ien);
      return 0;
    }
  }
  intRESTORE_IEN(ien);
  return ENXIO;
}

/***********************************************************************/
/* enable_tm_sdram_access:                                             */
/*                                                                     */
/***********************************************************************/
static void enable_tm_sdram_access(void)
{
  unsigned cfg_data;

  cfg_data = pci_read_config_dword(0, 9, 0, 4);
  pci_write_config_dword(0, 9, 0, 4, cfg_data | 2);
  cfg_data = pci_read_config_dword(0, 9, 0, 4);
}

/***********************************************************************/
/* lan_addr_write: "Send" the setup packet to the chip                 */
/*                                                                     */
/***********************************************************************/
static void lan_addr_write(void)
{
  int command;
  volatile ULONG i;
  ULONG saved_csr6, saved_csr7;

  /*-------------------------------------------------------------------*/
  /* Stops TxFillDesc() from filling any more descriptors              */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色大成网站www久久九九| 国产精品欧美久久久久一区二区| 日本高清免费不卡视频| 国产91丝袜在线18| 国产成人一级电影| 国产jizzjizz一区二区| 不卡在线视频中文字幕| 成人黄色片在线观看| 97aⅴ精品视频一二三区| 99免费精品视频| 色综合天天天天做夜夜夜夜做| 久久不见久久见免费视频7 | 国内精品久久久久影院一蜜桃| 男女激情视频一区| 另类中文字幕网| 国产69精品久久久久777| 成人毛片视频在线观看| 一本色道**综合亚洲精品蜜桃冫| 日本久久一区二区| 欧美精品一二三区| 久久久久久久免费视频了| 久久久久久综合| 亚洲婷婷在线视频| 丝袜美腿成人在线| 老司机精品视频导航| 成人av网站免费| 欧美日韩亚洲综合在线| 国产午夜亚洲精品理论片色戒| 国产精品电影一区二区| 水蜜桃久久夜色精品一区的特点| 激情久久久久久久久久久久久久久久 | 欧美国产成人在线| 亚洲综合色区另类av| 日韩成人免费在线| 成人一区二区三区视频在线观看 | 日韩伦理av电影| 亚州成人在线电影| 亚洲国产成人在线| 亚洲国产精品影院| 丰满放荡岳乱妇91ww| 在线亚洲+欧美+日本专区| 精品日韩av一区二区| 亚洲欧美日韩在线不卡| 日本 国产 欧美色综合| 不卡的电影网站| 91精品国产一区二区三区香蕉| 国产精品素人视频| 精品在线免费观看| 欧美日韩一区二区在线视频| 国产女主播视频一区二区| 天天影视网天天综合色在线播放| 成人精品在线视频观看| 欧美成人video| 天堂成人国产精品一区| 色欧美片视频在线观看在线视频| 精品免费日韩av| 亚洲电影在线免费观看| 91在线观看成人| 欧美激情中文不卡| 国产精品一二三四| 久久在线免费观看| 美女视频网站黄色亚洲| 欧美视频在线播放| 一区二区三区精品视频| av电影在线观看不卡| 国产肉丝袜一区二区| 九色综合国产一区二区三区| 欧美区视频在线观看| 亚洲影视资源网| 在线欧美日韩精品| 亚洲狼人国产精品| 色婷婷综合久久久久中文一区二区| 久久综合色8888| 韩国精品一区二区| 欧美精品一区二区三区高清aⅴ| 免费看黄色91| 日韩欧美高清在线| 国产精品资源在线看| 久久久久久久久久久久久女国产乱| 久久99在线观看| 久久久精品黄色| 成人国产精品免费观看视频| 自拍偷自拍亚洲精品播放| 91在线小视频| 日韩不卡免费视频| 日韩一区二区三区四区| 九一久久久久久| 国产精品久久久久久久久动漫| 粉嫩蜜臀av国产精品网站| 中文字幕色av一区二区三区| 日本韩国欧美三级| 男人的天堂亚洲一区| 久久久精品欧美丰满| 9色porny自拍视频一区二区| 亚洲一区二区三区激情| 日韩午夜激情av| 99久久精品国产一区二区三区| 亚洲在线视频网站| 精品国产污污免费网站入口| 波波电影院一区二区三区| 午夜久久福利影院| 26uuu另类欧美| 欧美性xxxxx极品少妇| 激情六月婷婷久久| 亚洲综合无码一区二区| 久久久久久久久久久久电影| 91福利视频久久久久| 国产一区二区h| 亚洲精品videosex极品| 亚洲精品一区二区三区99| 91在线精品一区二区| 久久99久久99小草精品免视看| 亚洲色图欧美在线| 欧美刺激午夜性久久久久久久| 99re66热这里只有精品3直播| 日韩va欧美va亚洲va久久| 亚洲视频香蕉人妖| 亚洲精品一区二区精华| 欧美日韩国产成人在线免费| 风流少妇一区二区| 麻豆91免费看| 亚洲成人av电影| 亚洲人吸女人奶水| 久久精品人人爽人人爽| 欧美一区二区三区四区高清| 一本色道a无线码一区v| 成人黄页在线观看| 国产自产v一区二区三区c| 亚洲国产成人porn| 亚洲精品免费在线观看| 国产午夜精品一区二区三区视频| 欧美人体做爰大胆视频| 色综合中文综合网| 日韩丝袜美女视频| 日本高清不卡视频| 99久久99久久久精品齐齐| 国产成人亚洲综合a∨猫咪| 美女性感视频久久| 蜜臀av一级做a爰片久久| 亚洲图片欧美综合| 亚洲精品一二三四区| 亚洲欧美日本韩国| 亚洲日韩欧美一区二区在线| 亚洲国产精品ⅴa在线观看| 久久久久久久综合狠狠综合| www国产精品av| 国产日本欧美一区二区| 中文字幕免费一区| 久久久综合九色合综国产精品| 欧美mv日韩mv亚洲| 精品国产乱码久久久久久蜜臀| 日韩免费一区二区三区在线播放| 久久久精品2019中文字幕之3| 日韩视频免费直播| 日韩欧美国产综合一区 | 国产成a人亚洲精品| 国产91富婆露脸刺激对白| 粉嫩绯色av一区二区在线观看| 粉嫩aⅴ一区二区三区四区| 国产河南妇女毛片精品久久久| 国产成人综合亚洲网站| av在线播放不卡| 在线看国产一区二区| 欧美另类久久久品| 精品国产伦一区二区三区观看方式| 久久综合狠狠综合久久综合88| 久久九九久精品国产免费直播| 国产欧美va欧美不卡在线| 亚洲欧美日韩在线| 视频一区视频二区中文| 久久成人免费电影| gogogo免费视频观看亚洲一| 欧美专区亚洲专区| 日韩久久久精品| 国产精品人妖ts系列视频| 一区二区三区欧美久久| 久久精品理论片| 成人国产亚洲欧美成人综合网| 欧美午夜在线一二页| 精品国产伦一区二区三区免费| 国产精品亲子伦对白| 爽爽淫人综合网网站| 国产精品一区二区不卡| 欧美亚男人的天堂| 精品国产污污免费网站入口| 亚洲精品高清在线| 韩国理伦片一区二区三区在线播放 | 伊人性伊人情综合网| 乱中年女人伦av一区二区| 99视频在线观看一区三区| 91麻豆精品国产无毒不卡在线观看| 久久久高清一区二区三区| 亚洲一区在线观看网站| 国产精品一二三四| 69久久夜色精品国产69蝌蚪网| 日本一二三不卡| 精品影视av免费| 欧美日韩激情一区| 《视频一区视频二区| 国产综合成人久久大片91|