Preparations for formatting BD-RE
This commit is contained in:
parent
422a97a2f2
commit
4e949d79fe
@ -1 +1 @@
|
|||||||
#define Cdrskin_timestamP "2008.04.23.110116"
|
#define Cdrskin_timestamP "2008.04.25.131531"
|
||||||
|
139
libburn/mmc.c
139
libburn/mmc.c
@ -55,10 +55,15 @@ extern struct libdax_msgs *libdax_messenger;
|
|||||||
#define Libburn_support_dvd_plus_R 1
|
#define Libburn_support_dvd_plus_R 1
|
||||||
|
|
||||||
/* ts A80410 : <<< Dangerous experiment: Pretend that DVD-RAM is BD-RE
|
/* ts A80410 : <<< Dangerous experiment: Pretend that DVD-RAM is BD-RE
|
||||||
#define Libburn_dvd_ram_as_bd_rE yes
|
# define Libburn_dvd_ram_as_bd_rE yes
|
||||||
|
*/
|
||||||
|
/* ts A80425 : Prevents command FORMAT UNIT for DVD-RAM or BD-RE.
|
||||||
|
Useful only to test the selection of format descriptors without
|
||||||
|
actually formatting the media.
|
||||||
|
# define Libburn_do_not_format_dvd_ram_or_bd_rE 1
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* DVD progress report:
|
/* DVD/BD progress report:
|
||||||
ts A61219 : It seems to work with a used (i.e. thoroughly formatted) DVD+RW.
|
ts A61219 : It seems to work with a used (i.e. thoroughly formatted) DVD+RW.
|
||||||
Error messages of class DEBUG appear because of inability to
|
Error messages of class DEBUG appear because of inability to
|
||||||
read TOC or track info. Nevertheless, the written images verify.
|
read TOC or track info. Nevertheless, the written images verify.
|
||||||
@ -97,6 +102,10 @@ extern struct libdax_msgs *libdax_messenger;
|
|||||||
ts A70330 : Allowed finalizing of DVD+R.
|
ts A70330 : Allowed finalizing of DVD+R.
|
||||||
ts A80228 : Made DVD+R/DL support official after nightmorph reported success
|
ts A80228 : Made DVD+R/DL support official after nightmorph reported success
|
||||||
in http://libburnia-project.org/ticket/13
|
in http://libburnia-project.org/ticket/13
|
||||||
|
ts A80416 : drive->do_stream_recording brings DVD-RAM to full nominal
|
||||||
|
writing speed at cost of no defect management.
|
||||||
|
ts A80416 : Giulio Orsero reports success with BD-RE writing. With
|
||||||
|
drive->do_stream_recording it does full nominal speed.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* ts A70519 : With MMC commands of data direction FROM_DRIVE:
|
/* ts A70519 : With MMC commands of data direction FROM_DRIVE:
|
||||||
@ -2363,6 +2372,35 @@ static int mmc_read_format_capacities_al(struct burn_drive *d,
|
|||||||
d->media_lba_limit = d->format_curr_max_size / 2048;
|
d->media_lba_limit = d->format_curr_max_size / 2048;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef Libburn_dvd_ram_as_bd_rE
|
||||||
|
/* <<< dummy format descriptor list as obtained from dvd+rw-mediainfo
|
||||||
|
by Giulio Orsero in April 2008
|
||||||
|
*/
|
||||||
|
d->num_format_descr = 5;
|
||||||
|
d->format_descriptors[0].type = 0x00;
|
||||||
|
d->format_descriptors[0].size = (off_t) 11826176 * (off_t) 2048;
|
||||||
|
d->format_descriptors[0].tdp = 0x3000;
|
||||||
|
d->format_descriptors[1].type = 0x30;
|
||||||
|
d->format_descriptors[1].size = (off_t) 11826176 * (off_t) 2048;
|
||||||
|
d->format_descriptors[1].tdp = 0x3000;
|
||||||
|
d->format_descriptors[2].type = 0x30;
|
||||||
|
d->format_descriptors[2].size = (off_t) 11564032 * (off_t) 2048;
|
||||||
|
d->format_descriptors[2].tdp = 0x5000;
|
||||||
|
d->format_descriptors[3].type = 0x30;
|
||||||
|
d->format_descriptors[3].size = (off_t) 12088320 * (off_t) 2048;
|
||||||
|
d->format_descriptors[3].tdp = 0x1000;
|
||||||
|
d->format_descriptors[4].type = 0x31;
|
||||||
|
d->format_descriptors[4].size = (off_t) 12219392 * (off_t) 2048;
|
||||||
|
d->format_descriptors[4].tdp = 0x800;
|
||||||
|
d->best_format_type = 0x00;
|
||||||
|
d->best_format_size = (off_t) 11826176 * (off_t) 2048;
|
||||||
|
|
||||||
|
/* silencing compiler warnings about unused variables */
|
||||||
|
num_blocks = size = sign = i = max_score = num_descr = score = type = 0;
|
||||||
|
|
||||||
|
#else /* Libburn_dvd_ram_as_bd_rE */
|
||||||
|
|
||||||
if (top_wanted == 0x00 || top_wanted == 0x10)
|
if (top_wanted == 0x00 || top_wanted == 0x10)
|
||||||
sign = -1; /* the caller clearly desires full format */
|
sign = -1; /* the caller clearly desires full format */
|
||||||
|
|
||||||
@ -2421,6 +2459,9 @@ static int mmc_read_format_capacities_al(struct burn_drive *d,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* ! Libburn_dvd_ram_as_bd_rE */
|
||||||
|
|
||||||
|
|
||||||
/* <<<
|
/* <<<
|
||||||
sprintf(msg,
|
sprintf(msg,
|
||||||
"best_format_type = %2.2Xh , best_format_size = %.f",
|
"best_format_type = %2.2Xh , best_format_size = %.f",
|
||||||
@ -2627,7 +2668,7 @@ selected_not_suitable:;
|
|||||||
d->current_profile == 0x14 ||
|
d->current_profile == 0x14 ||
|
||||||
d->current_profile == 0x1a ||
|
d->current_profile == 0x1a ||
|
||||||
d->current_profile == 0x12 ||
|
d->current_profile == 0x12 ||
|
||||||
(0 && d->current_profile == 0x43))) /* >>> */
|
d->current_profile == 0x43))
|
||||||
goto unsuitable_media;
|
goto unsuitable_media;
|
||||||
|
|
||||||
format_type = d->format_descriptors[index].type;
|
format_type = d->format_descriptors[index].type;
|
||||||
@ -2647,6 +2688,8 @@ selected_not_suitable:;
|
|||||||
c.page->data[9 + i] =
|
c.page->data[9 + i] =
|
||||||
( d->format_descriptors[index].tdp >>
|
( d->format_descriptors[index].tdp >>
|
||||||
(16 - 8 * i)) & 0xff;
|
(16 - 8 * i)) & 0xff;
|
||||||
|
if (format_type == 0x30)
|
||||||
|
format_sub_type = 3; /* Quick certification */
|
||||||
sprintf(descr, "%s (descr %d)", d->current_profile_text,index);
|
sprintf(descr, "%s (descr %d)", d->current_profile_text,index);
|
||||||
return_immediately = 1; /* caller must do the waiting */
|
return_immediately = 1; /* caller must do the waiting */
|
||||||
|
|
||||||
@ -2844,24 +2887,73 @@ no_suitable_formatting_type:;
|
|||||||
c.opcode[1] |= 0x08;
|
c.opcode[1] |= 0x08;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
} else if (0 && d->current_profile == 0x43 &&
|
} else if (d->current_profile == 0x43 &&
|
||||||
burn_support_untested_profiles) {
|
burn_support_untested_profiles) {
|
||||||
/* BD-RE */
|
/* BD-RE */
|
||||||
format_type = 0x00;
|
index = -1;
|
||||||
if(flag & 4) {
|
format_size = -1;
|
||||||
/* >>> search for format 0x31 */;
|
if (d->num_format_descr <= 0)
|
||||||
/* >>> if 0x31 : */
|
goto no_suitable_formatting_type;
|
||||||
/* >>> format_type = 0x31; */
|
if (d->format_descriptors[0].type != 0)
|
||||||
/* >>> else */
|
goto no_suitable_formatting_type;
|
||||||
/* >>> search largest 0x30 format descriptor */;
|
for (i = 0; i < d->num_format_descr; i++) {
|
||||||
} else {
|
format_type = d->format_descriptors[i].type;
|
||||||
/* >>> search for smallest 0x30 descriptor >= size */;
|
i_size = d->format_descriptors[i].size;
|
||||||
|
if (format_type != 0x00 && format_type != 0x30 &&
|
||||||
|
format_type != 0x31)
|
||||||
|
continue;
|
||||||
|
if (flag & 32) { /* No defect mgt */
|
||||||
|
/* search largest format 0x31 */
|
||||||
|
if(format_type != 0x31)
|
||||||
|
continue;
|
||||||
|
format_sub_type = 3; /* Quick certification */
|
||||||
|
} else if(size_mode == 2) { /* max payload size */
|
||||||
|
/* search largest 0x30 format descriptor */
|
||||||
|
if(format_type != 0x30)
|
||||||
|
continue;
|
||||||
|
format_sub_type = 3; /* Quick certification */
|
||||||
|
} else if(size_mode == 3) { /* default payload size */
|
||||||
|
index = 0;
|
||||||
|
continue;
|
||||||
|
} else { /* defect managed format with size wish */
|
||||||
|
/* search for smallest 0x30 >= size */
|
||||||
|
if(format_type != 0x30)
|
||||||
|
continue;
|
||||||
|
if (i_size < size)
|
||||||
|
continue;
|
||||||
|
if (format_size >= 0 && i_size >= format_size)
|
||||||
|
continue;
|
||||||
|
index = i;
|
||||||
|
format_size = i_size;
|
||||||
|
format_sub_type = 3; /* Quick certification */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/* common for all cases which search largest
|
||||||
|
descriptors */
|
||||||
|
if (i_size > format_size) {
|
||||||
|
format_size = i_size;
|
||||||
|
index = i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* >>> */;
|
if (size_mode == 2 && index < 0 && !(flag & 32))
|
||||||
|
index = 0;
|
||||||
|
if (index < 0)
|
||||||
|
goto no_suitable_formatting_type;
|
||||||
|
format_type = d->format_descriptors[index].type;
|
||||||
|
num_of_blocks = d->format_descriptors[index].size / 2048;
|
||||||
|
mmc_int_to_four_char(c.page->data + 4, num_of_blocks);
|
||||||
|
for (i = 0; i < 3; i++)
|
||||||
|
c.page->data[9 + i] =
|
||||||
|
( d->format_descriptors[index].tdp >>
|
||||||
|
(16 - 8 * i)) & 0xff;
|
||||||
|
sprintf(descr, "%s", d->current_profile_text);
|
||||||
|
return_immediately = 1; /* caller must do the waiting */
|
||||||
|
c.page->data[1] |= 0x80; /* FOV = this flag vector is valid */
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
/* >>> other formattable types to come */
|
/* >>> other formattable types to come */
|
||||||
|
|
||||||
unsuitable_media:;
|
unsuitable_media:;
|
||||||
sprintf(msg, "Unsuitable media detected. Profile %4.4Xh %s",
|
sprintf(msg, "Unsuitable media detected. Profile %4.4Xh %s",
|
||||||
d->current_profile, d->current_profile_text);
|
d->current_profile, d->current_profile_text);
|
||||||
@ -2892,21 +2984,18 @@ unsuitable_media:;
|
|||||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_ZERO,
|
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_ZERO,
|
||||||
msg, 0, 0);
|
msg, 0, 0);
|
||||||
|
|
||||||
/*
|
#ifdef Libburn_do_not_format_dvd_ram_or_bd_rE
|
||||||
# define Libburn_do_not_format_dvd_raM 1
|
if(d->current_profile == 0x43 || d->current_profile == 0x12) {
|
||||||
*/
|
sprintf(msg,
|
||||||
if(d->current_profile == 0x43
|
"Formatting of %s not implemented yet - This is a dummy",
|
||||||
#ifdef Libburn_do_not_format_dvd_raM
|
d->current_profile_text);
|
||||||
|| d->current_profile == 0x12
|
|
||||||
#endif
|
|
||||||
) {
|
|
||||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||||
0x00000002,
|
0x00000002,
|
||||||
LIBDAX_MSGS_SEV_WARNING, LIBDAX_MSGS_PRIO_ZERO,
|
LIBDAX_MSGS_SEV_WARNING, LIBDAX_MSGS_PRIO_ZERO,
|
||||||
"Formatting of BD-RE not implemented yet - This is a dummy",
|
msg, 0, 0);
|
||||||
0, 0);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
#endif /* Libburn_do_not_format_dvd_ram_or_bd_rE */
|
||||||
|
|
||||||
d->issue_command(d, &c);
|
d->issue_command(d, &c);
|
||||||
if (c.error && !tolerate_failure) {
|
if (c.error && !tolerate_failure) {
|
||||||
|
Loading…
Reference in New Issue
Block a user