📄 ee_cmd.c,v
字号:
head 1.1;access;symbols;locks dls:1.1; strict;comment @ * @;1.1date 97.09.21.19.25.55; author dls; state Dist;branches;next ;desc@@1.1log@pre-3e code@text@/* ee_cmd.c - ee_cmd, ee_wait, ee_ack */#include <conf.h>#include <kernel.h>#include <network.h>#include <i386.h>#include <ee.h>/*------------------------------------------------------------------------ * ee_cmd - issue an Intel 82586 command *------------------------------------------------------------------------ */intee_cmd(ped, cmd, arg1, arg2, arg3)struct etdev *ped;unsigned short cmd;char *arg1, *arg2, *arg3;{ struct devsw *pdev = ped->ed_pdev; struct scb *pscb = ped->ed_scb; struct cbl *pcbl = ped->ed_cbl; ee_wait(ped); /* build command block */ pcbl->cbl_status = 0; pcbl->cbl_cmd = cmd | EECMD_EL; switch (cmd & EECMD_MASK) { case EECMD_CONFIG: blkcopy(pcbl->cbl_cfg, arg1, CFLEN); break; case EECMD_IASET: blkcopy(pcbl->cbl_addr, arg1, EP_ALEN); break; case EECMD_TX: pcbl->cbl_tbd = H2IO(ped, ped->ed_tbd); break; case EECMD_NOP: break; /* not implemented yet */ case EECMD_MCSET: pcbl->cbl_alen = EP_ALEN * (int)arg2; blkcopy(pcbl->cbl_mca, arg1, pcbl->cbl_alen); break; } pscb->scb_cmd = SCBCMD_CUS; pscb->scb_status = 0; pscb->scb_cbloff = H2IO(ped, pcbl); outb(pdev->dvcsr + CAC, 0); /* start the 82586 */}/*------------------------------------------------------------------------ * ee_wait - wait for 82586 to become ready *------------------------------------------------------------------------ */ee_wait(ped)struct etdev *ped;{ struct devsw *pdev = ped->ed_pdev; struct scb *pscb = ped->ed_scb; int i; for (i=0; i<5000; ++i) if (!pscb->scb_cmd) return; kprintf("ee%d: ee_wait timed out, SCB status %x cmd %x\n", pdev->dvminor, pscb->scb_status, pscb->scb_cmd);}/*------------------------------------------------------------------------ * ee_ack - acknowledge status return by Intel 82586 *------------------------------------------------------------------------ */ee_ack(ped, status)struct etdev *ped;unsigned short status;{ struct devsw *pdev = ped->ed_pdev; struct scb *pscb = ped->ed_scb; ee_wait(ped); pscb->scb_cmd = status & 0xf000; outb(pdev->dvcsr+CAC, 0);}@
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -