|
|
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.