code:devstart - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki

Source

  • 仅在rkstart中被调用,用来对RKCS,RKWC,RKBA,RKDA这四个寄存器进行赋值
  • 传入四个参数 bp,devloc,devblk,hbcom
    • bp:在被调用时传入RK磁盘设备队列管理块的指针
    • devloc:在被调用时传入RK磁盘RKDA寄存器的地址
    • devblk:在被调用时传入根据当前b_blkno与b_dev.d_minor对应的RKDA寄存器的值
    • hbcom:在被调用时传入0

5087

5088 /* Device start routine for disks

5089  * and other devices that have the register

5090  * layout of the older DEC controllers (RF, RK, RP, TM)

5091  */

5092 #define IENABLE 0100

5093 #define WCOM 02

5094 #define RCOM 04

5095 #define GO 01

5096 devstart(bp, devloc, devblk, hbcom)

5097 struct buf *bp;

5098 int *devloc;

5099 {

5100      register int *dp;

5101      register struct buf *rbp;

5102      register int com;

  • com为待传给寄存器RKCS的局部变量
5103

5104      dp = devloc;

  • RKDA地址赋给dp
5105      rbp = bp;

5106      *dp = devblk; /* block address */

5107      *--dp = rbp->b_addr; /* buffer address */

5108      *--dp = rbp->b_wcount; /* word count */

  • RKDA置为devblk
  • RKBA置为b_addr
  • RKWC置为b_wcount
5109      com = (hbcom<<8) | IENABLE | GO |

5110           ((rbp->b_xmem & 03) << 4);

  • com置IENABLE,GO标志
  • 将第4,5两位置为rbp->xmem的高2位,rbp->xmem的意义参见struct buf
5111      if (rbp->b_flags&B_READ)

5112           com =| RCOM;

  • 如果为读,置RCOM标志
5113      else

5114           com =| WCOM;

  • 如果为写,置WCOM标志
5115      *--dp = com;
  • 将com赋值给RKCS
5116 }

5117 /* ------------------------- */

Caller

⚠️ **GitHub.com Fallback** ⚠️