From 8a77bb82592b55519bbdbf490df127df0aca45f6 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Fri, 21 Sep 2007 12:04:27 +0000 Subject: [PATCH] Had to revoke Immed bit on load command. LG GSA-4082B : premature "no media" --- libburn/trunk/cdrskin/cdrskin_timestamp.h | 2 +- libburn/trunk/libburn/sbc.c | 3 ++- libburn/trunk/libburn/spc.c | 25 +++++++++++++++++++++-- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/libburn/trunk/cdrskin/cdrskin_timestamp.h b/libburn/trunk/cdrskin/cdrskin_timestamp.h index dcdfe106..1920ee1f 100644 --- a/libburn/trunk/cdrskin/cdrskin_timestamp.h +++ b/libburn/trunk/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2007.09.20.125854" +#define Cdrskin_timestamP "2007.09.21.120333" diff --git a/libburn/trunk/libburn/sbc.c b/libburn/trunk/libburn/sbc.c index 3d59ec98..ad279dfa 100644 --- a/libburn/trunk/libburn/sbc.c +++ b/libburn/trunk/libburn/sbc.c @@ -37,7 +37,8 @@ void sbc_load(struct burn_drive *d) */ c.retry = 1; - c.opcode[1] |= 1; /* ts A70918 : Immed */ + /* ts A70921 : Had to revoke Immed because of LG GSA-4082B */ + /* c.opcode[1] |= 1; /* ts A70918 : Immed */ c.dir = NO_TRANSFER; d->issue_command(d, &c); diff --git a/libburn/trunk/libburn/spc.c b/libburn/trunk/libburn/spc.c index 9cd5be96..dadd3f62 100644 --- a/libburn/trunk/libburn/spc.c +++ b/libburn/trunk/libburn/spc.c @@ -103,22 +103,41 @@ int spc_test_unit_ready(struct burn_drive *d) int spc_wait_unit_attention(struct burn_drive *d, int max_sec, char *cmd_text, int flag) { - int i, ret = 1, key, asc, ascq; + int i, ret = 1, key = 0, asc = 0, ascq = 0; char msg[160]; if (!(flag & 1)) usleep(100000); for(i = !(flag & 1); i < max_sec * 10; i++) { ret = spc_test_unit_ready_r(d, &key, &asc, &ascq); + +/* <<< + fprintf(stderr, +"libburn_EXPERIMENTAL: i= %d ret= %d key= %X asc= %2.2X ascq= %2.2X\n", + i, ret, (unsigned) key, (unsigned) asc, (unsigned) ascq); +*/ + if(ret > 0) /* ready */ break; if(key!=0x2 || asc!=0x4) { if (key == 0x2 && asc == 0x3A) { ret = 1; /* medium not present = ok */ +/* <<< + ts A70912 : + My LG GSA-4082B on asynchronous load: + first it reports no media 2,3A,00, + then it reports not ready 2,04,00, + further media inquiry retrieves wrong data + + if(i<=100) + goto slumber; +*/ break; } if (key == 0x6 && asc == 0x28 && ascq == 0x00) - continue; /* media change notice = try again */ + /* media change notice = try again */ + goto slumber; + sprintf(msg, "Asynchromous SCSI error on %s: key=%X asc=%2.2Xh ascq=%2.2Xh", cmd_text, (unsigned) key, (unsigned) asc, @@ -130,8 +149,10 @@ int spc_wait_unit_attention(struct burn_drive *d, int max_sec, char *cmd_text, d->cancel = 1; break; } +slumber:; usleep(100000); } + sprintf(msg, "Async %s %s after %d.%d seconds", cmd_text, (ret > 0 ? "succeeded" : "failed"), i / 10, i % 10); libdax_msgs_submit(libdax_messenger, d->global_index, 0x00020150,