|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include "../scsi.h" ! 3: #include "../scsish.h" ! 4: #include "fns.h" ! 5: ! 6: int ! 7: gen_readt(int niargs, int *iargs, int ncargs, char **cargs, char *err) ! 8: { ! 9: struct scsi_cmd cmd; ! 10: struct scsi_return ret; ! 11: int n, i; ! 12: unsigned long ns, ss; ! 13: long bs, addr; ! 14: long t1, t2; ! 15: ! 16: #pragma ref ncargs ! 17: #pragma ref cargs ! 18: ! 19: if(niargs == 1) ! 20: iargs[1] = 0; ! 21: set10(cmd, 0x25, iargs[1]<<5, 0, 0, 0, 0, 0, 0, 0, 0); ! 22: if(n = s_io(0, &cmd, 0, &ret, 8, err)) ! 23: return(n); ! 24: ns = longat(&ret.data[0]); ! 25: ss = longat(&ret.data[4]); ! 26: bs = ss? sizeof(ret.data)/ss : 1; ! 27: time(&t1); ! 28: srand(t1); ! 29: addr = nrand(ns-iargs[0])-1; ! 30: printf("read(%d,%d): %d blocks @%d (chunk=%dx%d),", s_id, iargs[1], iargs[0], addr, bs, ss); ! 31: fflush(stdout); ! 32: time(&t1); ! 33: for(i = iargs[0]; i > 0; i -= bs){ ! 34: set10(cmd, 0x28, iargs[1]<<5, addr>>24, addr>>16, addr>>8, addr, ! 35: 0, 0, bs*0, 0); ! 36: if(n = s_io(0, &cmd, 0, &ret, bs*ss, err)) ! 37: return(n); ! 38: addr += bs; ! 39: } ! 40: time(&t2); ! 41: printf(" t=%ds (%.0fKB/s)\n", t2-t1, (iargs[0]*(float)ss/1024.)/((t1 == t2)? 1:t2-t1)); ! 42: return(0); ! 43: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.