|
|
1.1 root 1: /*
2: * scsi_commands.h: header file for scsi_command.c
3: *
4: * History
5: * -------
6: * Tue Sep 3 15:00:13 PDT 1991 James C. Lee at NeXT
7: * Created (copied a lot of data structures & functions calls from
8: * perftest.c by Mike DeMoney)
9: */
10:
11: #ifndef SCSI_COMMANDS
12: #define SCSI_COMMANDS
13:
14: #import <sys/time.h>
15: #import <bsd/dev/disk.h>
16: #import <sys/types.h>
17: #import <bsd/dev/scsireg.h>
18:
19: #define Version "0.00"
20:
21:
22: struct mode_sense_cmd {
23: u_int msc_opcode:8,
24: msc_lun:3,
25: msc_mbz1:5,
26: msc_pcf:2,
27: msc_page:6,
28: msc_mbz2:8;
29: u_char msc_len;
30: u_char msc_ctrl;
31: };
32:
33: struct param_list_header {
34: u_char plh_len;
35: u_char plh_medium;
36: u_char plh_wp:1,
37: plh_reserved:7;
38: u_char plh_blkdesclen;
39: };
40:
41: struct block_descriptor {
42: u_int bd_density:8,
43: bd_nblk:24;
44: u_int bd_reserved:8,
45: bd_blklen:24;
46: };
47:
48: struct device_format_params {
49: u_char dfp_savable:1,
50: dfp_reserved:1,
51: dfp_pagecode:6;
52: u_char dfp_pagelen;
53: u_short dfp_trkszone;
54: u_short dfp_altsecszone;
55: u_short dfp_alttrkszone;
56: u_short dfp_alttrksvol;
57: u_short dfp_sectors;
58: u_short dfp_bytessector;
59: u_short dfp_interleave;
60: u_short dfp_trkskew;
61: u_short dfp_cylskew;
62: u_char dfp_ssec:1,
63: dfp_hsec:1,
64: dfp_rmb:1,
65: dfp_surf:1,
66: dfp_reserved2:4;
67: u_char dfp_reserved3;
68: u_char dfp_reserved4;
69: u_char dfp_reserved5;
70: };
71:
72: struct rigid_drive_params {
73: u_char rdp_savable:1,
74: rdp_reserved:1,
75: rdp_pagecode:6;
76: u_char rdp_pagelen;
77:
78: u_char rdp_maxcylmsb;
79: u_char rdp_maxcylinb;
80: u_char rdp_maxcyllsb;
81:
82: u_char rdp_maxheads;
83:
84: u_char rdp_wpstartmsb;
85: u_char rdp_wpstartinb;
86: u_char rdp_wpstartlsb;
87:
88: u_char rdp_rwcstartmsb;
89: u_char rdp_rwcstartinb;
90: u_char rdp_rwcstartlsb;
91:
92: u_char rdp_stepratemsb;
93: u_char rdp_stepratelsb;
94:
95: u_char rdp_landcylmsb;
96: u_char rdp_landcylinb;
97: u_char rdp_landcyllsb;
98:
99: u_char rdp_reserved2;
100: u_char rdp_reserved3;
101: u_char rdp_reserved4;
102: };
103:
104: #define THREE_BYTE(x) \
105: (((x##msb)<<16)|((x##inb)<<8)|(x##lsb))
106:
107: #define TWO_BYTE(x) \
108: (((x##msb)<<8)|(x##lsb))
109:
110: struct mode_sense_reply {
111: struct param_list_header msr_plh;
112: struct block_descriptor msr_bd;
113: union {
114: struct device_format_params u_msr_dfp;
115: struct rigid_drive_params u_msr_rdp;
116: }u;
117: };
118:
119:
120: /* C functions */
121: void fatal(const char *msg, ...);
122: int do_inquiry(int fd, struct inquiry_reply *irp, struct esense_reply *erp);
123: int do_testunitready(int fd, struct timeval *tvp, struct esense_reply *erp);
124: int do_modesense(int fd, struct mode_sense_reply *msrp, int page,
125: struct esense_reply *erp);
126: int do_readcapacity(int fd, struct capacity_reply *crp,
127: struct esense_reply *erp);
128: int do_seek(int fd, int lba, struct timeval *tvp, struct esense_reply *erp);
129: int do_read(int fd, int lba, int nblks, struct timeval *tvp,
130: struct esense_reply *erp);
131: int do_write(int fd, int lba, int nblks, struct timeval *tvp,
132: struct esense_reply *erp);
133: int do_readbuffer(int fd, int alloc_len, int *avail_len, struct timeval *tvp,
134: struct esense_reply *erp);
135: int do_writebuffer(int fd, int alloc_len, struct timeval *tvp,
136: struct esense_reply *erp);
137:
138: void sprint_er(char *string, struct esense_reply *er);
139: void fprint_er(int fd, struct esense_reply *erp);
140:
141: #endif /* #ifndef SCSI_COMMANDS */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.