Lines 15-27
Link Here
|
15 |
static int timed_ioctl(cdrom_drive *d, int fd, int command, void *arg){ |
15 |
static int timed_ioctl(cdrom_drive *d, int fd, int command, void *arg){ |
16 |
struct timespec tv1; |
16 |
struct timespec tv1; |
17 |
struct timespec tv2; |
17 |
struct timespec tv2; |
18 |
int ret1=clock_gettime(d->private->clock,&tv1); |
18 |
int ret1=clock_gettime(d->private_data->clock,&tv1); |
19 |
int ret2=ioctl(fd, command,arg); |
19 |
int ret2=ioctl(fd, command,arg); |
20 |
int ret3=clock_gettime(d->private->clock,&tv2); |
20 |
int ret3=clock_gettime(d->private_data->clock,&tv2); |
21 |
if(ret1<0 || ret3<0){ |
21 |
if(ret1<0 || ret3<0){ |
22 |
d->private->last_milliseconds=-1; |
22 |
d->private_data->last_milliseconds=-1; |
23 |
}else{ |
23 |
}else{ |
24 |
d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.; |
24 |
d->private_data->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.; |
25 |
} |
25 |
} |
26 |
return ret2; |
26 |
return ret2; |
27 |
} |
27 |
} |
Lines 96-102
static void tweak_SG_buffer(cdrom_drive
Link Here
|
96 |
static void clear_garbage(cdrom_drive *d){ |
96 |
static void clear_garbage(cdrom_drive *d){ |
97 |
fd_set fdset; |
97 |
fd_set fdset; |
98 |
struct timeval tv; |
98 |
struct timeval tv; |
99 |
struct sg_header *sg_hd=d->private->sg_hd; |
99 |
struct sg_header *sg_hd=d->private_data->sg_hd; |
100 |
int flag=0; |
100 |
int flag=0; |
101 |
|
101 |
|
102 |
/* clear out any possibly preexisting garbage */ |
102 |
/* clear out any possibly preexisting garbage */ |
Lines 185-191
static int sg2_handle_scsi_cmd(cdrom_dri
Link Here
|
185 |
struct timespec tv2; |
185 |
struct timespec tv2; |
186 |
int tret1,tret2; |
186 |
int tret1,tret2; |
187 |
int status = 0; |
187 |
int status = 0; |
188 |
struct sg_header *sg_hd=d->private->sg_hd; |
188 |
struct sg_header *sg_hd=d->private_data->sg_hd; |
189 |
long writebytes=SG_OFF+cmd_len+in_size; |
189 |
long writebytes=SG_OFF+cmd_len+in_size; |
190 |
|
190 |
|
191 |
/* generic scsi device services */ |
191 |
/* generic scsi device services */ |
Lines 195-201
static int sg2_handle_scsi_cmd(cdrom_dri
Link Here
|
195 |
|
195 |
|
196 |
memset(sg_hd,0,sizeof(sg_hd)); |
196 |
memset(sg_hd,0,sizeof(sg_hd)); |
197 |
memset(sense_buffer,0,SG_MAX_SENSE); |
197 |
memset(sense_buffer,0,SG_MAX_SENSE); |
198 |
memcpy(d->private->sg_buffer,cmd,cmd_len+in_size); |
198 |
memcpy(d->private_data->sg_buffer,cmd,cmd_len+in_size); |
199 |
sg_hd->twelve_byte = cmd_len == 12; |
199 |
sg_hd->twelve_byte = cmd_len == 12; |
200 |
sg_hd->result = 0; |
200 |
sg_hd->result = 0; |
201 |
sg_hd->reply_len = SG_OFF + out_size; |
201 |
sg_hd->reply_len = SG_OFF + out_size; |
Lines 209-215
static int sg2_handle_scsi_cmd(cdrom_dri
Link Here
|
209 |
tell if the command failed. Scared yet? */ |
209 |
tell if the command failed. Scared yet? */ |
210 |
|
210 |
|
211 |
if(bytecheck && out_size>in_size){ |
211 |
if(bytecheck && out_size>in_size){ |
212 |
memset(d->private->sg_buffer+cmd_len+in_size,bytefill,out_size-in_size); |
212 |
memset(d->private_data->sg_buffer+cmd_len+in_size,bytefill,out_size-in_size); |
213 |
/* the size does not remove cmd_len due to the way the kernel |
213 |
/* the size does not remove cmd_len due to the way the kernel |
214 |
driver copies buffers */ |
214 |
driver copies buffers */ |
215 |
writebytes+=(out_size-in_size); |
215 |
writebytes+=(out_size-in_size); |
Lines 243-249
static int sg2_handle_scsi_cmd(cdrom_dri
Link Here
|
243 |
} |
243 |
} |
244 |
|
244 |
|
245 |
sigprocmask (SIG_BLOCK, &(d->sigset), NULL ); |
245 |
sigprocmask (SIG_BLOCK, &(d->sigset), NULL ); |
246 |
tret1=clock_gettime(d->private->clock,&tv1); |
246 |
tret1=clock_gettime(d->private_data->clock,&tv1); |
247 |
errno=0; |
247 |
errno=0; |
248 |
status = write(d->cdda_fd, sg_hd, writebytes ); |
248 |
status = write(d->cdda_fd, sg_hd, writebytes ); |
249 |
|
249 |
|
Lines 289-295
static int sg2_handle_scsi_cmd(cdrom_dri
Link Here
|
289 |
} |
289 |
} |
290 |
} |
290 |
} |
291 |
|
291 |
|
292 |
tret2=clock_gettime(d->private->clock,&tv2); |
292 |
tret2=clock_gettime(d->private_data->clock,&tv2); |
293 |
errno=0; |
293 |
errno=0; |
294 |
status = read(d->cdda_fd, sg_hd, SG_OFF + out_size); |
294 |
status = read(d->cdda_fd, sg_hd, SG_OFF + out_size); |
295 |
sigprocmask ( SIG_UNBLOCK, &(d->sigset), NULL ); |
295 |
sigprocmask ( SIG_UNBLOCK, &(d->sigset), NULL ); |
Lines 313-319
static int sg2_handle_scsi_cmd(cdrom_dri
Link Here
|
313 |
if(bytecheck && in_size+cmd_len<out_size){ |
313 |
if(bytecheck && in_size+cmd_len<out_size){ |
314 |
long i,flag=0; |
314 |
long i,flag=0; |
315 |
for(i=in_size;i<out_size;i++) |
315 |
for(i=in_size;i<out_size;i++) |
316 |
if(d->private->sg_buffer[i]!=bytefill){ |
316 |
if(d->private_data->sg_buffer[i]!=bytefill){ |
317 |
flag=1; |
317 |
flag=1; |
318 |
break; |
318 |
break; |
319 |
} |
319 |
} |
Lines 326-334
static int sg2_handle_scsi_cmd(cdrom_dri
Link Here
|
326 |
|
326 |
|
327 |
errno=0; |
327 |
errno=0; |
328 |
if(tret1<0 || tret2<0){ |
328 |
if(tret1<0 || tret2<0){ |
329 |
d->private->last_milliseconds=-1; |
329 |
d->private_data->last_milliseconds=-1; |
330 |
}else{ |
330 |
}else{ |
331 |
d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000 + (tv2.tv_nsec-tv1.tv_nsec)/1000000; |
331 |
d->private_data->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000 + (tv2.tv_nsec-tv1.tv_nsec)/1000000; |
332 |
} |
332 |
} |
333 |
return(0); |
333 |
return(0); |
334 |
} |
334 |
} |
Lines 347-353
static int sgio_handle_scsi_cmd(cdrom_dr
Link Here
|
347 |
|
347 |
|
348 |
memset(&hdr,0,sizeof(hdr)); |
348 |
memset(&hdr,0,sizeof(hdr)); |
349 |
memset(sense,0,sizeof(sense)); |
349 |
memset(sense,0,sizeof(sense)); |
350 |
memcpy(d->private->sg_buffer,cmd+cmd_len,in_size); |
350 |
memcpy(d->private_data->sg_buffer,cmd+cmd_len,in_size); |
351 |
|
351 |
|
352 |
hdr.cmdp = cmd; |
352 |
hdr.cmdp = cmd; |
353 |
hdr.cmd_len = cmd_len; |
353 |
hdr.cmd_len = cmd_len; |
Lines 355-361
static int sgio_handle_scsi_cmd(cdrom_dr
Link Here
|
355 |
hdr.mx_sb_len = SG_MAX_SENSE; |
355 |
hdr.mx_sb_len = SG_MAX_SENSE; |
356 |
hdr.timeout = 50000; |
356 |
hdr.timeout = 50000; |
357 |
hdr.interface_id = 'S'; |
357 |
hdr.interface_id = 'S'; |
358 |
hdr.dxferp = d->private->sg_buffer; |
358 |
hdr.dxferp = d->private_data->sg_buffer; |
359 |
hdr.flags = SG_FLAG_DIRECT_IO; /* direct IO if we can get it */ |
359 |
hdr.flags = SG_FLAG_DIRECT_IO; /* direct IO if we can get it */ |
360 |
|
360 |
|
361 |
/* scary buffer fill hack */ |
361 |
/* scary buffer fill hack */ |
Lines 400-406
static int sgio_handle_scsi_cmd(cdrom_dr
Link Here
|
400 |
if(bytecheck && in_size<out_size){ |
400 |
if(bytecheck && in_size<out_size){ |
401 |
long i,flag=0; |
401 |
long i,flag=0; |
402 |
for(i=in_size;i<out_size;i++) |
402 |
for(i=in_size;i<out_size;i++) |
403 |
if(d->private->sg_buffer[i]!=bytefill){ |
403 |
if(d->private_data->sg_buffer[i]!=bytefill){ |
404 |
flag=1; |
404 |
flag=1; |
405 |
break; |
405 |
break; |
406 |
} |
406 |
} |
Lines 412-418
static int sgio_handle_scsi_cmd(cdrom_dr
Link Here
|
412 |
} |
412 |
} |
413 |
|
413 |
|
414 |
/* Can't rely on .duration because we can't be certain kernel has HZ set to something useful */ |
414 |
/* Can't rely on .duration because we can't be certain kernel has HZ set to something useful */ |
415 |
/* d->private->last_milliseconds = hdr.duration; */ |
415 |
/* d->private_data->last_milliseconds = hdr.duration; */ |
416 |
|
416 |
|
417 |
errno = 0; |
417 |
errno = 0; |
418 |
return 0; |
418 |
return 0; |
Lines 445-453
static int test_unit_ready(cdrom_drive *
Link Here
|
445 |
|
445 |
|
446 |
handle_scsi_cmd(d, cmd, 6, 0, 56, 0,0, sense); |
446 |
handle_scsi_cmd(d, cmd, 6, 0, 56, 0,0, sense); |
447 |
|
447 |
|
448 |
key = d->private->sg_buffer[2] & 0xf; |
448 |
key = d->private_data->sg_buffer[2] & 0xf; |
449 |
ASC = d->private->sg_buffer[12]; |
449 |
ASC = d->private_data->sg_buffer[12]; |
450 |
ASCQ = d->private->sg_buffer[13]; |
450 |
ASCQ = d->private_data->sg_buffer[13]; |
451 |
|
451 |
|
452 |
if(key == 2 && ASC == 4 && ASCQ == 1) return 0; |
452 |
if(key == 2 && ASC == 4 && ASCQ == 1) return 0; |
453 |
return 1; |
453 |
return 1; |
Lines 492-498
static int mode_sense_atapi(cdrom_drive
Link Here
|
492 |
if (handle_scsi_cmd (d, cmd, 10, 0, size+4,'\377',1,sense)) return(1); |
492 |
if (handle_scsi_cmd (d, cmd, 10, 0, size+4,'\377',1,sense)) return(1); |
493 |
|
493 |
|
494 |
{ |
494 |
{ |
495 |
unsigned char *b=d->private->sg_buffer; |
495 |
unsigned char *b=d->private_data->sg_buffer; |
496 |
if(b[0])return(1); /* Handles only up to 256 bytes */ |
496 |
if(b[0])return(1); /* Handles only up to 256 bytes */ |
497 |
if(b[6])return(1); /* Handles only up to 256 bytes */ |
497 |
if(b[6])return(1); /* Handles only up to 256 bytes */ |
498 |
|
498 |
|
Lines 604-611
static int mode_select(cdrom_drive *d,in
Link Here
|
604 |
static unsigned int get_orig_sectorsize(cdrom_drive *d){ |
604 |
static unsigned int get_orig_sectorsize(cdrom_drive *d){ |
605 |
if(mode_sense(d,12,0x01))return(-1); |
605 |
if(mode_sense(d,12,0x01))return(-1); |
606 |
|
606 |
|
607 |
d->orgdens = d->private->sg_buffer[4]; |
607 |
d->orgdens = d->private_data->sg_buffer[4]; |
608 |
return(d->orgsize = ((int)(d->private->sg_buffer[10])<<8)+d->private->sg_buffer[11]); |
608 |
return(d->orgsize = ((int)(d->private_data->sg_buffer[10])<<8)+d->private_data->sg_buffer[11]); |
609 |
} |
609 |
} |
610 |
|
610 |
|
611 |
/* switch CDROM scsi drives to given sector size */ |
611 |
/* switch CDROM scsi drives to given sector size */ |
Lines 664-671
static int scsi_read_toc (cdrom_drive *d
Link Here
|
664 |
return(-4); |
664 |
return(-4); |
665 |
} |
665 |
} |
666 |
|
666 |
|
667 |
first=d->private->sg_buffer[2]; |
667 |
first=d->private_data->sg_buffer[2]; |
668 |
last=d->private->sg_buffer[3]; |
668 |
last=d->private_data->sg_buffer[3]; |
669 |
tracks=last-first+1; |
669 |
tracks=last-first+1; |
670 |
|
670 |
|
671 |
if (last > MAXTRK || first > MAXTRK || last<0 || first<0) { |
671 |
if (last > MAXTRK || first > MAXTRK || last<0 || first<0) { |
Lines 683-689
static int scsi_read_toc (cdrom_drive *d
Link Here
|
683 |
return(-5); |
683 |
return(-5); |
684 |
} |
684 |
} |
685 |
{ |
685 |
{ |
686 |
scsi_TOC *toc=(scsi_TOC *)(d->private->sg_buffer+4); |
686 |
scsi_TOC *toc=(scsi_TOC *)(d->private_data->sg_buffer+4); |
687 |
|
687 |
|
688 |
d->disc_toc[i-first].bFlags=toc->bFlags; |
688 |
d->disc_toc[i-first].bFlags=toc->bFlags; |
689 |
d->disc_toc[i-first].bTrack=i; |
689 |
d->disc_toc[i-first].bTrack=i; |
Lines 704-710
static int scsi_read_toc (cdrom_drive *d
Link Here
|
704 |
return(-2); |
704 |
return(-2); |
705 |
} |
705 |
} |
706 |
{ |
706 |
{ |
707 |
scsi_TOC *toc=(scsi_TOC *)(d->private->sg_buffer+4); |
707 |
scsi_TOC *toc=(scsi_TOC *)(d->private_data->sg_buffer+4); |
708 |
|
708 |
|
709 |
d->disc_toc[i-first].bFlags=toc->bFlags; |
709 |
d->disc_toc[i-first].bFlags=toc->bFlags; |
710 |
d->disc_toc[i-first].bTrack=0xAA; |
710 |
d->disc_toc[i-first].bTrack=0xAA; |
Lines 738-744
static int scsi_read_toc2 (cdrom_drive *
Link Here
|
738 |
} |
738 |
} |
739 |
|
739 |
|
740 |
/* copy to our structure and convert start sector */ |
740 |
/* copy to our structure and convert start sector */ |
741 |
tracks = d->private->sg_buffer[1]; |
741 |
tracks = d->private_data->sg_buffer[1]; |
742 |
if (tracks > MAXTRK) { |
742 |
if (tracks > MAXTRK) { |
743 |
cderror(d,"003: CDROM reporting illegal number of tracks\n"); |
743 |
cderror(d,"003: CDROM reporting illegal number of tracks\n"); |
744 |
return(-3); |
744 |
return(-3); |
Lines 754-786
static int scsi_read_toc2 (cdrom_drive *
Link Here
|
754 |
return(-5); |
754 |
return(-5); |
755 |
} |
755 |
} |
756 |
|
756 |
|
757 |
d->disc_toc[i].bFlags = d->private->sg_buffer[10]; |
757 |
d->disc_toc[i].bFlags = d->private_data->sg_buffer[10]; |
758 |
d->disc_toc[i].bTrack = i + 1; |
758 |
d->disc_toc[i].bTrack = i + 1; |
759 |
|
759 |
|
760 |
d->disc_toc[i].dwStartSector= d->adjust_ssize * |
760 |
d->disc_toc[i].dwStartSector= d->adjust_ssize * |
761 |
(((signed char)(d->private->sg_buffer[2])<<24) | |
761 |
(((signed char)(d->private_data->sg_buffer[2])<<24) | |
762 |
(d->private->sg_buffer[3]<<16)| |
762 |
(d->private_data->sg_buffer[3]<<16)| |
763 |
(d->private->sg_buffer[4]<<8)| |
763 |
(d->private_data->sg_buffer[4]<<8)| |
764 |
(d->private->sg_buffer[5])); |
764 |
(d->private_data->sg_buffer[5])); |
765 |
} |
765 |
} |
766 |
|
766 |
|
767 |
d->disc_toc[i].bFlags = 0; |
767 |
d->disc_toc[i].bFlags = 0; |
768 |
d->disc_toc[i].bTrack = i + 1; |
768 |
d->disc_toc[i].bTrack = i + 1; |
769 |
memcpy (&foo, d->private->sg_buffer+2, 4); |
769 |
memcpy (&foo, d->private_data->sg_buffer+2, 4); |
770 |
memcpy (&bar, d->private->sg_buffer+6, 4); |
770 |
memcpy (&bar, d->private_data->sg_buffer+6, 4); |
771 |
d->disc_toc[i].dwStartSector = d->adjust_ssize * (be32_to_cpu(foo) + |
771 |
d->disc_toc[i].dwStartSector = d->adjust_ssize * (be32_to_cpu(foo) + |
772 |
be32_to_cpu(bar)); |
772 |
be32_to_cpu(bar)); |
773 |
|
773 |
|
774 |
d->disc_toc[i].dwStartSector= d->adjust_ssize * |
774 |
d->disc_toc[i].dwStartSector= d->adjust_ssize * |
775 |
((((signed char)(d->private->sg_buffer[2])<<24) | |
775 |
((((signed char)(d->private_data->sg_buffer[2])<<24) | |
776 |
(d->private->sg_buffer[3]<<16)| |
776 |
(d->private_data->sg_buffer[3]<<16)| |
777 |
(d->private->sg_buffer[4]<<8)| |
777 |
(d->private_data->sg_buffer[4]<<8)| |
778 |
(d->private->sg_buffer[5]))+ |
778 |
(d->private_data->sg_buffer[5]))+ |
779 |
|
779 |
|
780 |
((((signed char)(d->private->sg_buffer[6])<<24) | |
780 |
((((signed char)(d->private_data->sg_buffer[6])<<24) | |
781 |
(d->private->sg_buffer[7]<<16)| |
781 |
(d->private_data->sg_buffer[7]<<16)| |
782 |
(d->private->sg_buffer[8]<<8)| |
782 |
(d->private_data->sg_buffer[8]<<8)| |
783 |
(d->private->sg_buffer[9])))); |
783 |
(d->private_data->sg_buffer[9])))); |
784 |
|
784 |
|
785 |
|
785 |
|
786 |
d->cd_extra = FixupTOC(d,tracks+1); |
786 |
d->cd_extra = FixupTOC(d,tracks+1); |
Lines 817-823
static int i_read_28 (cdrom_drive *d, vo
Link Here
|
817 |
cmd[8] = sectors; |
817 |
cmd[8] = sectors; |
818 |
if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
818 |
if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
819 |
return(ret); |
819 |
return(ret); |
820 |
if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
820 |
if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
821 |
return(0); |
821 |
return(0); |
822 |
} |
822 |
} |
823 |
|
823 |
|
Lines 836-842
static int i_read_A8 (cdrom_drive *d, vo
Link Here
|
836 |
cmd[9] = sectors; |
836 |
cmd[9] = sectors; |
837 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
837 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
838 |
return(ret); |
838 |
return(ret); |
839 |
if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
839 |
if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
840 |
return(0); |
840 |
return(0); |
841 |
} |
841 |
} |
842 |
|
842 |
|
Lines 854-860
static int i_read_D4_10 (cdrom_drive *d,
Link Here
|
854 |
cmd[8] = sectors; |
854 |
cmd[8] = sectors; |
855 |
if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
855 |
if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
856 |
return(ret); |
856 |
return(ret); |
857 |
if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
857 |
if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
858 |
return(0); |
858 |
return(0); |
859 |
} |
859 |
} |
860 |
|
860 |
|
Lines 872-878
static int i_read_D4_12 (cdrom_drive *d,
Link Here
|
872 |
cmd[9] = sectors; |
872 |
cmd[9] = sectors; |
873 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
873 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
874 |
return(ret); |
874 |
return(ret); |
875 |
if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
875 |
if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
876 |
return(0); |
876 |
return(0); |
877 |
} |
877 |
} |
878 |
|
878 |
|
Lines 890-896
static int i_read_D5 (cdrom_drive *d, vo
Link Here
|
890 |
cmd[8] = sectors; |
890 |
cmd[8] = sectors; |
891 |
if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
891 |
if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
892 |
return(ret); |
892 |
return(ret); |
893 |
if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
893 |
if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
894 |
return(0); |
894 |
return(0); |
895 |
} |
895 |
} |
896 |
|
896 |
|
Lines 908-914
static int i_read_D8 (cdrom_drive *d, vo
Link Here
|
908 |
cmd[9] = sectors; |
908 |
cmd[9] = sectors; |
909 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
909 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
910 |
return(ret); |
910 |
return(ret); |
911 |
if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
911 |
if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
912 |
return(0); |
912 |
return(0); |
913 |
} |
913 |
} |
914 |
|
914 |
|
Lines 922-928
static int i_read_mmc (cdrom_drive *d, v
Link Here
|
922 |
cmd[8] = sectors; |
922 |
cmd[8] = sectors; |
923 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
923 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
924 |
return(ret); |
924 |
return(ret); |
925 |
if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
925 |
if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
926 |
return(0); |
926 |
return(0); |
927 |
} |
927 |
} |
928 |
|
928 |
|
Lines 936-942
static int i_read_mmcB (cdrom_drive *d,
Link Here
|
936 |
cmd[8] = sectors; |
936 |
cmd[8] = sectors; |
937 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
937 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
938 |
return(ret); |
938 |
return(ret); |
939 |
if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
939 |
if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
940 |
return(0); |
940 |
return(0); |
941 |
} |
941 |
} |
942 |
|
942 |
|
Lines 950-956
static int i_read_mmc2 (cdrom_drive *d,
Link Here
|
950 |
cmd[8] = sectors; |
950 |
cmd[8] = sectors; |
951 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
951 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
952 |
return(ret); |
952 |
return(ret); |
953 |
if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
953 |
if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
954 |
return(0); |
954 |
return(0); |
955 |
} |
955 |
} |
956 |
|
956 |
|
Lines 964-970
static int i_read_mmc2B (cdrom_drive *d,
Link Here
|
964 |
cmd[8] = sectors; |
964 |
cmd[8] = sectors; |
965 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
965 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
966 |
return(ret); |
966 |
return(ret); |
967 |
if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
967 |
if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
968 |
return(0); |
968 |
return(0); |
969 |
} |
969 |
} |
970 |
|
970 |
|
Lines 978-984
static int i_read_mmc3 (cdrom_drive *d,
Link Here
|
978 |
cmd[8] = sectors; |
978 |
cmd[8] = sectors; |
979 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
979 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
980 |
return(ret); |
980 |
return(ret); |
981 |
if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
981 |
if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
982 |
return(0); |
982 |
return(0); |
983 |
} |
983 |
} |
984 |
|
984 |
|
Lines 992-998
static int i_read_mmc3B (cdrom_drive *d,
Link Here
|
992 |
cmd[8] = sectors; |
992 |
cmd[8] = sectors; |
993 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
993 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
994 |
return(ret); |
994 |
return(ret); |
995 |
if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
995 |
if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
996 |
return(0); |
996 |
return(0); |
997 |
} |
997 |
} |
998 |
|
998 |
|
Lines 1026-1032
static int i_read_msf (cdrom_drive *d, v
Link Here
|
1026 |
|
1026 |
|
1027 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
1027 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
1028 |
return(ret); |
1028 |
return(ret); |
1029 |
if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
1029 |
if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
1030 |
return(0); |
1030 |
return(0); |
1031 |
} |
1031 |
} |
1032 |
|
1032 |
|
Lines 1039-1045
static int i_read_msf2 (cdrom_drive *d,
Link Here
|
1039 |
|
1039 |
|
1040 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
1040 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
1041 |
return(ret); |
1041 |
return(ret); |
1042 |
if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
1042 |
if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
1043 |
return(0); |
1043 |
return(0); |
1044 |
} |
1044 |
} |
1045 |
|
1045 |
|
Lines 1052-1058
static int i_read_msf3 (cdrom_drive *d,
Link Here
|
1052 |
|
1052 |
|
1053 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
1053 |
if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense))) |
1054 |
return(ret); |
1054 |
return(ret); |
1055 |
if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
1055 |
if(p)memcpy(p,d->private_data->sg_buffer,sectors*CD_FRAMESIZE_RAW); |
1056 |
return(0); |
1056 |
return(0); |
1057 |
} |
1057 |
} |
1058 |
|
1058 |
|
Lines 1275-1281
long scsi_read_msf3 (cdrom_drive *d, voi
Link Here
|
1275 |
static int count_2352_bytes(cdrom_drive *d){ |
1275 |
static int count_2352_bytes(cdrom_drive *d){ |
1276 |
long i; |
1276 |
long i; |
1277 |
for(i=2351;i>=0;i--) |
1277 |
for(i=2351;i>=0;i--) |
1278 |
if(d->private->sg_buffer[i]!=(unsigned char)'\177') |
1278 |
if(d->private_data->sg_buffer[i]!=(unsigned char)'\177') |
1279 |
return(((i+3)>>2)<<2); |
1279 |
return(((i+3)>>2)<<2); |
1280 |
|
1280 |
|
1281 |
return(0); |
1281 |
return(0); |
Lines 1284-1290
static int count_2352_bytes(cdrom_drive
Link Here
|
1284 |
static int verify_nonzero(cdrom_drive *d){ |
1284 |
static int verify_nonzero(cdrom_drive *d){ |
1285 |
long i,flag=0; |
1285 |
long i,flag=0; |
1286 |
for(i=0;i<2352;i++) |
1286 |
for(i=0;i<2352;i++) |
1287 |
if(d->private->sg_buffer[i]!=0){ |
1287 |
if(d->private_data->sg_buffer[i]!=0){ |
1288 |
flag=1; |
1288 |
flag=1; |
1289 |
break; |
1289 |
break; |
1290 |
} |
1290 |
} |
Lines 1625-1631
static int check_mmc(cdrom_drive *d){
Link Here
|
1625 |
d->is_mmc=0; |
1625 |
d->is_mmc=0; |
1626 |
if(mode_sense(d,22,0x2A)==0){ |
1626 |
if(mode_sense(d,22,0x2A)==0){ |
1627 |
|
1627 |
|
1628 |
b=d->private->sg_buffer; |
1628 |
b=d->private_data->sg_buffer; |
1629 |
b+=b[3]+4; |
1629 |
b+=b[3]+4; |
1630 |
|
1630 |
|
1631 |
if((b[0]&0x3F)==0x2A){ |
1631 |
if((b[0]&0x3F)==0x2A){ |
Lines 1673-1679
unsigned char *scsi_inquiry(cdrom_drive
Link Here
|
1673 |
cderror(d,"008: Unable to identify CDROM model\n"); |
1673 |
cderror(d,"008: Unable to identify CDROM model\n"); |
1674 |
return(NULL); |
1674 |
return(NULL); |
1675 |
} |
1675 |
} |
1676 |
return (d->private->sg_buffer); |
1676 |
return (d->private_data->sg_buffer); |
1677 |
} |
1677 |
} |
1678 |
|
1678 |
|
1679 |
int scsi_init_drive(cdrom_drive *d){ |
1679 |
int scsi_init_drive(cdrom_drive *d){ |
Lines 1742-1749
int scsi_init_drive(cdrom_drive *d){
Link Here
|
1742 |
check_cache(d); |
1742 |
check_cache(d); |
1743 |
|
1743 |
|
1744 |
d->error_retry=1; |
1744 |
d->error_retry=1; |
1745 |
d->private->sg_hd=realloc(d->private->sg_hd,d->nsectors*CD_FRAMESIZE_RAW + SG_OFF + 128); |
1745 |
d->private_data->sg_hd=realloc(d->private_data->sg_hd,d->nsectors*CD_FRAMESIZE_RAW + SG_OFF + 128); |
1746 |
d->private->sg_buffer=((unsigned char *)d->private->sg_hd)+SG_OFF; |
1746 |
d->private_data->sg_buffer=((unsigned char *)d->private_data->sg_hd)+SG_OFF; |
1747 |
d->report_all=1; |
1747 |
d->report_all=1; |
1748 |
return(0); |
1748 |
return(0); |
1749 |
} |
1749 |
} |