[BACK]Return to mmc.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / cdio

Diff for /src/usr.bin/cdio/mmc.c between version 1.7 and 1.8

version 1.7, 2006/06/01 07:53:01 version 1.8, 2006/06/06 20:48:07
Line 19 
Line 19 
 #include <sys/limits.h>  #include <sys/limits.h>
 #include <sys/types.h>  #include <sys/types.h>
 #include <sys/scsiio.h>  #include <sys/scsiio.h>
   #include <scsi/cd.h>
   #include <scsi/scsi_all.h>
   #include <scsi/scsi_disk.h>
 #include <err.h>  #include <err.h>
 #include <errno.h>  #include <errno.h>
 #include <fcntl.h>  #include <fcntl.h>
Line 33 
Line 36 
 int  int
 blank(void)  blank(void)
 {  {
           struct scsi_blank *scb;
         scsireq_t scr;          scsireq_t scr;
         int r;          int r;
   
         bzero(&scr, sizeof(scr));          bzero(&scr, sizeof(scr));
         scr.cmd[0] = 0xa1;          scb = (struct scsi_blank *)scr.cmd;
         scr.cmd[1] = 0x01;          scb->opcode = BLANK;
         scr.cmdlen = 12;          scb->byte2 |= BLANK_MINIMAL;
           scr.cmdlen = sizeof(*scb);
         scr.datalen = 0;          scr.datalen = 0;
         scr.timeout = 120000;          scr.timeout = 120000;
         scr.flags = SCCMD_ESCAPE;          scr.flags = SCCMD_ESCAPE;
Line 59 
Line 64 
 int  int
 unit_ready(void)  unit_ready(void)
 {  {
           struct scsi_test_unit_ready *scb;
         scsireq_t scr;          scsireq_t scr;
         int r;          int r;
   
         bzero(&scr, sizeof(scr));          bzero(&scr, sizeof(scr));
         scr.cmd[0] = 0x00;          scb = (struct scsi_test_unit_ready *)scr.cmd;
         scr.cmdlen = 6;          scb->opcode = TEST_UNIT_READY;
           scr.cmdlen = sizeof(*scb);
         scr.datalen = 0;          scr.datalen = 0;
         scr.timeout = 120000;          scr.timeout = 120000;
         scr.flags = SCCMD_ESCAPE;          scr.flags = SCCMD_ESCAPE;
Line 77 
Line 84 
 int  int
 synchronize_cache(void)  synchronize_cache(void)
 {  {
           struct scsi_synchronize_cache *scb;
         scsireq_t scr;          scsireq_t scr;
         int r;          int r;
   
         bzero(&scr, sizeof(scr));          bzero(&scr, sizeof(scr));
         scr.cmd[0] = 0x35;          scb = (struct scsi_synchronize_cache *)scr.cmd;
         scr.cmdlen = 10;          scb->opcode = SYNCHRONIZE_CACHE;
           scr.cmdlen = sizeof(*scb);
         scr.datalen = 0;          scr.datalen = 0;
         scr.timeout = 120000;          scr.timeout = 120000;
         scr.flags = SCCMD_ESCAPE;          scr.flags = SCCMD_ESCAPE;
Line 95 
Line 104 
 int  int
 close_session(void)  close_session(void)
 {  {
           struct scsi_close_track *scb;
         scsireq_t scr;          scsireq_t scr;
         int r;          int r;
   
         bzero(&scr, sizeof(scr));          bzero(&scr, sizeof(scr));
         scr.cmd[0] = 0x5b;          scb = (struct scsi_close_track *)scr.cmd;
         scr.cmd[2] = 0x02; /* close session */          scb->opcode = CLOSE_TRACK;
         scr.cmd[5] = 0x00; /* track number */          scb->closefunc = CT_CLOSE_SESS;
         scr.cmdlen = 10;          scr.cmdlen = sizeof(*scb);
         scr.datalen = 0;          scr.datalen = 0;
         scr.timeout = 120000;          scr.timeout = 120000;
         scr.flags = SCCMD_ESCAPE;          scr.flags = SCCMD_ESCAPE;
Line 233 
Line 243 
 int  int
 mode_sense_write(unsigned char buf[])  mode_sense_write(unsigned char buf[])
 {  {
           struct scsi_mode_sense_big *scb;
         scsireq_t scr;          scsireq_t scr;
         int r;          int r;
   
         bzero(&scr, sizeof(scr));          bzero(&scr, sizeof(scr));
           scb = (struct scsi_mode_sense_big *)scr.cmd;
           scb->opcode = MODE_SENSE_BIG;
           /* XXX: need to set disable block descriptors and check SCSI drive */
           scb->page = WRITE_PARAM_PAGE;
           scb->length[1] = 0x46; /* 16 for the header + size from pg. 89 mmc-r10a.pdf */
           scr.cmdlen = sizeof(*scb);
         scr.timeout = 4000;          scr.timeout = 4000;
         scr.senselen = SENSEBUFLEN;          scr.senselen = SENSEBUFLEN;
         scr.cmd[0] = 0x5a;  
         scr.cmd[1] = 0x00;  
         scr.cmd[2] = 0x05; /* Write parameters mode page */  
         scr.cmd[7] = 0x00;  
         scr.cmd[8] = 0x46; /* 16 for the header + size from pg. 89 mmc-r10a.pdf */  
         scr.cmdlen = 10;  
         scr.datalen= 0x46;          scr.datalen= 0x46;
         scr.flags = SCCMD_ESCAPE|SCCMD_READ;          scr.flags = SCCMD_ESCAPE|SCCMD_READ;
         scr.databuf = (caddr_t)buf;          scr.databuf = (caddr_t)buf;
Line 256 
Line 267 
 int  int
 mode_select_write(unsigned char buf[])  mode_select_write(unsigned char buf[])
 {  {
           struct scsi_mode_select_big *scb;
         scsireq_t scr;          scsireq_t scr;
         int r;          int r;
   
         bzero(&scr, sizeof(scr));          bzero(&scr, sizeof(scr));
           scb = (struct scsi_mode_select_big *)scr.cmd;
           scb->opcode = MODE_SELECT_BIG;
   /*
    * INF-8020 says bit 4 in byte 2 is '1'
    * INF-8090 refers to it as 'PF(1)' then doesn't
    * describe it.
    */
           scb->byte2 = 0x10;
           scb->length[1] = 2 + buf[1] + 256 * buf[0];
         scr.timeout = 4000;          scr.timeout = 4000;
         scr.senselen = SENSEBUFLEN;          scr.senselen = SENSEBUFLEN;
         scr.cmd[0] = 0x55;          scr.cmdlen = sizeof(*scb);
         scr.cmd[1] = 0x10; /* pages aren't vendor specific */  
         scr.cmd[2] = 0x00;  
         scr.cmd[7] = 0x00;  
         scr.cmd[8] = 2 + buf[1] + 256 * buf[0];  
         scr.cmdlen = 10;  
         scr.datalen = 2 + buf[1] + 256 * buf[0];          scr.datalen = 2 + buf[1] + 256 * buf[0];
         scr.flags = SCCMD_ESCAPE|SCCMD_WRITE;          scr.flags = SCCMD_ESCAPE|SCCMD_WRITE;
         scr.databuf = (caddr_t)buf;          scr.databuf = (caddr_t)buf;
Line 280 
Line 296 
 get_disc_size(off_t *availblk)  get_disc_size(off_t *availblk)
 {  {
         u_char databuf[28];          u_char databuf[28];
           struct scsi_read_track_info *scb;
         scsireq_t scr;          scsireq_t scr;
         int r,tmp;          int r,tmp;
   
         bzero(&scr, sizeof(scr));          bzero(&scr, sizeof(scr));
           scb = (struct scsi_read_track_info *)scr.cmd;
         scr.timeout = 4000;          scr.timeout = 4000;
         scr.senselen = SENSEBUFLEN;          scr.senselen = SENSEBUFLEN;
         scr.cmd[0] = 0x52; /* READ TRACK INFO */          scb->opcode = READ_TRACK_INFO;
         scr.cmd[1] = 0x01;          scb->addrtype = RTI_TRACK;
         scr.cmd[5] = 0x01; /* Track 01 */          scb->addr[1] = 1;
         scr.cmd[7] = 0x00;          scb->data_len[3] = 0x1c;
         scr.cmd[8] = 0x1c;          scr.cmdlen = sizeof(*scb);
         scr.cmdlen = 10;  
         scr.datalen= 0x1c;          scr.datalen= 0x1c;
         scr.flags = SCCMD_ESCAPE|SCCMD_READ;          scr.flags = SCCMD_ESCAPE|SCCMD_READ;
         scr.databuf = (caddr_t)databuf;          scr.databuf = (caddr_t)databuf;

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.8