[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.21 and 1.22

version 1.21, 2008/06/22 21:04:01 version 1.22, 2008/06/30 23:35:39
Line 31 
Line 31 
 #include "extern.h"  #include "extern.h"
   
 extern int fd;  extern int fd;
   extern int mediacap;
 extern char *cdname;  extern char *cdname;
   
 #define SCSI_GET_CONFIGURATION          0x46  #define SCSI_GET_CONFIGURATION          0x46
   #define SCSI_SET_SPEED                  0xbb
   
   #define MMC_FEATURE_CDRW_CAV            0x27
 #define MMC_FEATURE_CD_TAO              0x2d  #define MMC_FEATURE_CD_TAO              0x2d
 #define MMC_FEATURE_CDRW_WRITE          0x37  #define MMC_FEATURE_CDRW_WRITE          0x37
   
Line 79 
Line 82 
                         break;  /* partial feature descriptor */                          break;  /* partial feature descriptor */
                 feature = betoh16(*(u_int16_t *)(buf + i));                  feature = betoh16(*(u_int16_t *)(buf + i));
   
                 if (feature == MMC_FEATURE_CD_TAO)                  if (feature == MMC_FEATURE_CDRW_CAV)
                           *cap |= MEDIACAP_CDRW_CAV;
                   else if (feature == MMC_FEATURE_CD_TAO)
                         *cap |= MEDIACAP_TAO;                          *cap |= MEDIACAP_TAO;
                 else if (feature == MMC_FEATURE_CDRW_WRITE)                  else if (feature == MMC_FEATURE_CDRW_WRITE)
                         *cap |= MEDIACAP_CDRW_WRITE;                          *cap |= MEDIACAP_CDRW_WRITE;
Line 91 
Line 96 
 }  }
   
 int  int
   set_speed(int wspeed)
   {
           scsireq_t scr;
           int r;
   
           memset(&scr, 0, sizeof(scr));
           scr.cmd[0] = SCSI_SET_SPEED;
           scr.cmd[1] = (mediacap & MEDIACAP_CDRW_CAV) != 0;
           *(u_int16_t *)(scr.cmd + 2) = htobe16(DRIVE_SPEED_OPTIMAL);
           *(u_int16_t *)(scr.cmd + 4) = htobe16(wspeed);
   
           scr.cmdlen = 12;
           scr.datalen = 0;
           scr.timeout = 120000;
           scr.flags = SCCMD_ESCAPE;
           scr.senselen = SENSEBUFLEN;
   
           r = ioctl(fd, SCIOCCOMMAND, &scr);
           return (r == 0 ? scr.retsts : -1);
   }
   
   int
 blank(void)  blank(void)
 {  {
         struct scsi_blank *scb;          struct scsi_blank *scb;
Line 210 
Line 237 
                         warnx("mode select failed: %d", r);                          warnx("mode select failed: %d", r);
                         return (r);                          return (r);
                 }                  }
   
                   set_speed(tr->speed);
                 writetrack(tr, track);                  writetrack(tr, track);
                 synchronize_cache();                  synchronize_cache();
         }          }

Legend:
Removed from v.1.21  
changed lines
  Added in v.1.22