📄 drv_jvc.c
字号:
/* ----------------------------------------------------------------- * Set subcode for Teac Drives.----------------------------------------------------------------- */LOCAL intset_subcode(scgp, subcode_data, length) SCSI *scgp; u_char *subcode_data; int length;{ register struct scg_cmd *scmd = scgp->scmd; fillbytes((caddr_t)scmd, sizeof(*scmd), '\0'); scmd->addr = (caddr_t)subcode_data; scmd->size = length; scmd->flags = SCG_DISRE_ENA; scmd->cdb_len = SC_G1_CDBLEN; scmd->sense_len = CCS_SENSE_LEN; scmd->target = scgp->target; scmd->cdb.g1_cdb.cmd = SC_SET_SUBCODE; scmd->cdb.g1_cdb.lun = scgp->lun; g1_cdblen(&scmd->cdb.g1_cdb, length); scgp->cmdname = "set subcode"; return (scsicmd(scgp));}LOCAL intread_disk_info_teac(scgp, data, length, type) SCSI *scgp; u_char *data; int length; int type;{ register struct scg_cmd *scmd = scgp->scmd; fillbytes((caddr_t)scmd, sizeof(*scmd), '\0'); scmd->addr = (caddr_t)data; scmd->size = length; scmd->flags = SCG_RECV_DATA |SCG_DISRE_ENA; scmd->cdb_len = SC_G1_CDBLEN; scmd->sense_len = CCS_SENSE_LEN; scmd->target = scgp->target; scmd->cdb.g1_cdb.cmd = SC_READ_DISK_INFO; scmd->cdb.g1_cdb.lun = scgp->lun; scmd->cdb.g1_cdb.reladr = type & 1; scmd->cdb.g1_cdb.res = (type & 2) >> 1; scgp->cmdname = "read disk info teac"; return (scsicmd(scgp));}/* ----------------------------------------------------------------- * Perform the freeze command for Teac Drives.----------------------------------------------------------------- */LOCAL intteac_freeze(scgp, bp_flag) SCSI *scgp; int bp_flag;{ register struct scg_cmd *scmd = scgp->scmd; fillbytes((caddr_t)scmd, sizeof(*scmd), '\0'); scmd->addr = (caddr_t)0; scmd->size = 0; scmd->flags = SCG_DISRE_ENA; scmd->cdb_len = SC_G5_CDBLEN; scmd->sense_len = CCS_SENSE_LEN; scmd->target = scgp->target; scmd->timeout = 8 * 60; /* Needs up to 4 minutes */ scmd->cdb.g5_cdb.cmd = SC_FREEZE; scmd->cdb.g5_cdb.lun = scgp->lun; scmd->cdb.g5_cdb.addr[3] = bp_flag ? 0x80 : 0; scgp->cmdname = "teac_freeze"; return (scsicmd(scgp));}LOCAL intteac_wr_pma(scgp) SCSI *scgp;{ register struct scg_cmd *scmd = scgp->scmd; fillbytes((caddr_t)scmd, sizeof(*scmd), '\0'); scmd->addr = (caddr_t)0; scmd->size = 0; scmd->flags = SCG_DISRE_ENA; scmd->cdb_len = SC_G5_CDBLEN; scmd->sense_len = CCS_SENSE_LEN; scmd->target = scgp->target; scmd->cdb.g5_cdb.cmd = SC_WRITE_PMA; scmd->cdb.g5_cdb.lun = scgp->lun; scgp->cmdname = "teac_write_pma"; return (scsicmd(scgp));}/* ----------------------------------------------------------------- * Read PMA for Teac Drives.----------------------------------------------------------------- */LOCAL intteac_rd_pma(scgp) SCSI *scgp;{ unsigned char xx[256]; register struct scg_cmd *scmd = scgp->scmd; fillbytes((caddr_t)xx, sizeof(xx), '\0'); fillbytes((caddr_t)scmd, sizeof(*scmd), '\0'); scmd->addr = (caddr_t)xx; scmd->size = sizeof(xx); scmd->flags = SCG_RECV_DATA |SCG_DISRE_ENA; scmd->cdb_len = SC_G1_CDBLEN; scmd->sense_len = CCS_SENSE_LEN; scmd->target = scgp->target; scmd->cdb.g1_cdb.cmd = SC_READ_PMA; scmd->cdb.g1_cdb.lun = scgp->lun; g1_cdblen(&scmd->cdb.g1_cdb, sizeof(xx)); scgp->cmdname = "teac_read_pma";/* return (scsicmd(scgp));*/ if (scsicmd(scgp) < 0) return (-1); if (scgp->verbose) { scsiprbytes("PMA Data", xx, sizeof(xx) - scsigetresid(scgp)); } if (lverbose) { unsigned i; Uchar *p; scsiprbytes("PMA Header: ", xx, 4); i = xx[2]; p = &xx[4]; for (; i <= xx[3]; i++) { scsiprbytes("PMA: ", p, 10); p += 10; } } return (0);}/* ----------------------------------------------------------------- * Next writable address for Teac Drives.----------------------------------------------------------------- */LOCAL intnext_wr_addr_teac(scgp, start_lba, last_lba) SCSI *scgp; long start_lba; long last_lba;{ unsigned char xx[256]; register struct scg_cmd *scmd = scgp->scmd; fillbytes((caddr_t)xx, sizeof(xx), '\0'); fillbytes((caddr_t)scmd, sizeof(*scmd), '\0'); scmd->addr = (caddr_t)xx; scmd->size = sizeof(xx); scmd->flags = SCG_RECV_DATA |SCG_DISRE_ENA; scmd->cdb_len = SC_G5_CDBLEN; scmd->sense_len = CCS_SENSE_LEN; scmd->target = scgp->target; scmd->cdb.g5_cdb.cmd = SC_NEXT_WR_ADDRESS; scmd->cdb.g5_cdb.lun = scgp->lun; i_to_4_byte(&scmd->cdb.g5_cdb.addr[0], start_lba); i_to_4_byte(&scmd->cdb.g5_cdb.count[0], last_lba); if (scgp->verbose) printf("start lba: %ld last lba: %ld\n", start_lba, last_lba); scgp->cmdname = "next writable address";/* return (scsicmd(scgp));*/ if (scsicmd(scgp) < 0) return (-1); if (scgp->verbose) { scsiprbytes("WRa Data", xx, sizeof(xx) - scsigetresid(scgp)); printf("NWA: %ld\n", a_to_4_byte(xx)); } return (0);}LOCAL intblank_jvc(scgp, addr, blanktype) SCSI *scgp; long addr; int blanktype;{ extern char *blank_types[]; if (lverbose) { printf("Blanking %s\n", blank_types[blanktype & 0x07]); flush(); } return (scsi_blank(scgp, addr, blanktype));}LOCAL intbuf_cap_teac(scgp, sp, fp) SCSI *scgp; long *sp; /* Size pointer */ long *fp; /* Free pointer */{ Ulong freespace; Ulong bufsize; long ret; int per; ret = read_peak_buffer_cap_teac(scgp); if (ret < 0) return (-1); bufsize = ret; freespace = 0; if (sp) *sp = bufsize; if (fp) *fp = freespace; if (scgp->verbose || (sp == 0 && fp == 0)) printf("BFree: %ld K BSize: %ld K\n", freespace >> 10, bufsize >> 10); if (bufsize == 0) return (0); per = (100 * (bufsize - freespace)) / bufsize; if (per < 0) return (0); if (per > 100) return (100); return (per);}LOCAL longread_peak_buffer_cap_teac(scgp) SCSI *scgp;{ Uchar xx[4]; register struct scg_cmd *scmd = scgp->scmd; fillbytes((caddr_t)xx, sizeof(xx), '\0'); fillbytes((caddr_t)scmd, sizeof(*scmd), '\0'); scmd->addr = (caddr_t)xx; scmd->size = sizeof(xx); scmd->flags = SCG_RECV_DATA |SCG_DISRE_ENA; scmd->cdb_len = SC_G5_CDBLEN; scmd->sense_len = CCS_SENSE_LEN; scmd->target = scgp->target; scmd->cdb.g5_cdb.cmd = SC_READ_PEAK_BUF_CAP; scmd->cdb.g5_cdb.lun = scgp->lun; scgp->cmdname = "read peak buffer capacity";#define BDEBUG#ifndef BDEBUG return (scsicmd(scgp));#else if (scsicmd(scgp) < 0) return (-1);/* if (scgp->verbose) {*/ scsiprbytes("WRa Data", xx, sizeof(xx) - scsigetresid(scgp)); printf("Buffer cap: %ld\n", a_to_u_3_byte(&xx[1]));/* }*/ return (a_to_u_3_byte(&xx[1]));/* return (0);*/#endif}#define BI_ONE_BYTE 0xC0#define BI_448_BYTE 0x40#define BI_APP_CODE 0x10LOCAL intbuffer_inquiry_teac(scgp, fmt) SCSI *scgp; int fmt;{ Uchar xx[448]; register struct scg_cmd *scmd = scgp->scmd; fillbytes((caddr_t)xx, sizeof(xx), '\0'); fillbytes((caddr_t)scmd, sizeof(*scmd), '\0'); scmd->addr = (caddr_t)xx; scmd->size = sizeof(xx); scmd->size = 448; scmd->flags = SCG_RECV_DATA |SCG_DISRE_ENA; scmd->cdb_len = SC_G5_CDBLEN; scmd->sense_len = CCS_SENSE_LEN; scmd->target = scgp->target; scmd->cdb.g5_cdb.cmd = SC_BUFFER_INQUIRY; scmd->cdb.g5_cdb.lun = scgp->lun; if (fmt > 0) { scmd->cdb.g5_cdb.addr[3] = fmt; if (fmt == BI_ONE_BYTE) scmd->size = 1; } else { scmd->cdb.g5_cdb.addr[3] = BI_448_BYTE;/* scmd->cdb.g5_cdb.addr[3] = BI_APP_CODE;*/ } scgp->cmdname = "buffer inquiry";#define BDEBUG#ifndef BDEBUG return (scsicmd(scgp));#else if (scsicmd(scgp) < 0) return (-1);/* if (scgp->verbose) {*//* scsiprbytes("WRa Data", xx, sizeof(xx) - scsigetresid(scgp));*//* scsiprbytes("WRa Data", xx, 1);*/ if (fmt > 0) printf("fmt: %X ", fmt); scsiprbytes("WRa Data", xx, 9); printf("%d\n", xx[8] - xx[1]);/* printf("Buffer cap: %ld\n", a_to_u_3_byte(&xx[1]));*//* }*/ return (0);#endif}#ifdef XXBUFFERLOCAL voidcheck_buffer_teac(scgp) SCSI *scgp;{ printf("-------\n"); buffer_inquiry_teac(scgp, 0);#ifdef SL usleep(40000); buffer_inquiry_teac(scgp, 0);#endif read_peak_buffer_cap_teac(scgp);}#endif/*--------------------------------------------------------------------------*/#ifdef XXDEBUG#include "scsimmc.h"LOCAL int g7_teac __PR((SCSI *scgp));LOCAL int g6_teac __PR((SCSI *scgp));LOCAL intg7_teac(scgp) SCSI *scgp;{ Uchar xx[2048]; register struct scg_cmd *scmd = scgp->scmd; fillbytes((caddr_t)xx, sizeof(xx), '\0'); fillbytes((caddr_t)scmd, sizeof(*scmd), '\0'); scmd->addr = (caddr_t)xx; scmd->size = sizeof(xx); scmd->flags = SCG_RECV_DATA |SCG_DISRE_ENA; scmd->cdb_len = SC_G5_CDBLEN; scmd->sense_len = CCS_SENSE_LEN; scmd->target = scgp->target; scmd->cdb.g5_cdb.cmd = 0xDf;/* scmd->cdb.g5_cdb.cmd = 0xE5;*/ scmd->cdb.g5_cdb.lun = scgp->lun;/* scmd->cdb.g5_cdb.addr[3] = BI_ONE_BYTE;*//* scmd->size = 1;*//* scmd->cdb.g5_cdb.addr[3] = BI_448_BYTE;*//* scmd->cdb.g5_cdb.addr[3] = BI_APP_CODE;*/ scgp->cmdname = "g7 teac";/* return (scsicmd(scgp));*/ if (scsicmd(scgp) < 0) return (-1);/* if (scgp->verbose) {*/ scsiprbytes("WRa Data", xx, sizeof(xx) - scsigetresid(scgp));/* scsiprbytes("WRa Data", xx, 1);*//* scsiprbytes("WRa Data", xx, 9);*//*printf("%d\n", xx[8] - xx[1]);*//* printf("Buffer cap: %ld\n", a_to_u_3_byte(&xx[1]));*//* }*/ return (0);}LOCAL intg6_teac(scgp) SCSI *scgp;{ Uchar xx[2048]; register struct scg_cmd *scmd = scgp->scmd; fillbytes((caddr_t)xx, sizeof(xx), '\0'); fillbytes((caddr_t)scmd, sizeof(*scmd), '\0'); scmd->addr = (caddr_t)xx; scmd->size = sizeof(xx); scmd->flags = SCG_RECV_DATA |SCG_DISRE_ENA; scmd->cdb_len = SC_G1_CDBLEN; scmd->sense_len = CCS_SENSE_LEN; scmd->target = scgp->target; scmd->cdb.g1_cdb.cmd = 0xC1; scmd->cdb.g1_cdb.cmd = 0xC3; scmd->cdb.g1_cdb.cmd = 0xC6; scmd->cdb.g1_cdb.cmd = 0xC7; /* Read TOC */ scmd->cdb.g1_cdb.cmd = 0xCe; scmd->cdb.g1_cdb.cmd = 0xCF; scmd->cdb.g1_cdb.cmd = 0xC7; /* Read TOC */ scmd->cdb.g1_cdb.lun = scgp->lun; scgp->cmdname = "g6 teac";/* return (scsicmd(scgp));*/ if (scsicmd(scgp) < 0) return (-1);/* if (scgp->verbose) {*/ scsiprbytes("WRa Data", xx, sizeof(xx) - scsigetresid(scgp));/* scsiprbytes("WRa Data", xx, 1);*//* scsiprbytes("WRa Data", xx, 9);*//*printf("%d\n", xx[8] - xx[1]);*//* printf("Buffer cap: %ld\n", a_to_u_3_byte(&xx[1]));*//* }*/ return (0);}LOCAL voidxxtest_teac(scgp) SCSI *scgp;{ read_peak_buffer_cap_teac(scgp);/*#define XDI*/#ifdef XDI { u_char cbuf[512];/* read_disk_info_teac(scgp, data, length, type)*//* read_disk_info_teac(scgp, cbuf, 512, 2);*//* read_disk_info_teac(scgp, cbuf, 512, 2);*/ read_disk_info_teac(scgp, cbuf, 512, 3); scsiprbytes("DI Data", cbuf, sizeof(cbuf) - scsigetresid(scgp)); }#endif /* XDI */ buffer_inquiry_teac(scgp, -1);/*#define XBU*/#ifdef XBU { int i; for (i = 0; i < 63; i++) { scgp->silent++; buffer_inquiry_teac(scgp, i<<2); scgp->silent--; } }#endif /* XBU *//* printf("LLLL\n");*//* g7_teac(scgp);*//* g6_teac(scgp);*/}#endif /* XXDEBUG */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -