Improved granularity of SCSI log time measurement and added absolute timestamp
This commit is contained in:
parent
aac571ad56
commit
7d44b745a8
@ -1 +1 @@
|
|||||||
#define Cdrskin_timestamP "2013.05.30.133008"
|
#define Cdrskin_timestamP "2013.06.09.152602"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||||
|
|
||||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||||
Copyright (c) 2006 - 2012 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2006 - 2013 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -31,6 +31,7 @@
|
|||||||
#include "libburn.h"
|
#include "libburn.h"
|
||||||
#include "drive.h"
|
#include "drive.h"
|
||||||
#include "transport.h"
|
#include "transport.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
/* ts A60825 : The storage location for back_hacks.h variables. */
|
/* ts A60825 : The storage location for back_hacks.h variables. */
|
||||||
#define BURN_BACK_HACKS_INIT 1
|
#define BURN_BACK_HACKS_INIT 1
|
||||||
@ -43,6 +44,9 @@ struct libdax_msgs *libdax_messenger= NULL;
|
|||||||
|
|
||||||
int burn_running = 0;
|
int burn_running = 0;
|
||||||
|
|
||||||
|
double lib_start_time;
|
||||||
|
|
||||||
|
|
||||||
/* ts A60813 : GNU/Linux: whether to use O_EXCL on open() of device files
|
/* ts A60813 : GNU/Linux: whether to use O_EXCL on open() of device files
|
||||||
ts B00212 : FreeBSD: whether to use flock(LOCK_EX) after open()
|
ts B00212 : FreeBSD: whether to use flock(LOCK_EX) after open()
|
||||||
*/
|
*/
|
||||||
@ -136,6 +140,8 @@ int burn_initialize(void)
|
|||||||
|
|
||||||
if (burn_running)
|
if (burn_running)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
lib_start_time = burn_get_time(0);
|
||||||
burn_support_untested_profiles = 0;
|
burn_support_untested_profiles = 0;
|
||||||
ret = burn_msgs_initialize();
|
ret = burn_msgs_initialize();
|
||||||
if (ret <= 0)
|
if (ret <= 0)
|
||||||
|
@ -1,10 +1,17 @@
|
|||||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||||
|
|
||||||
|
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||||
|
Copyright (c) 2006 - 2013 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
|
Provided under GPL version 2 or later.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef BURN__INIT_H
|
#ifndef BURN__INIT_H
|
||||||
#define BURN__INIT_H
|
#define BURN__INIT_H
|
||||||
|
|
||||||
extern int burn_running;
|
extern int burn_running;
|
||||||
|
|
||||||
|
extern double lib_start_time;
|
||||||
|
|
||||||
/** Indicator for burn_drive_get_status() wether a signal hit parts of the
|
/** Indicator for burn_drive_get_status() wether a signal hit parts of the
|
||||||
thread team.
|
thread team.
|
||||||
0= all works well ,
|
0= all works well ,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2006 - 2011 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2006 - 2013 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later
|
Provided under GPL version 2 or later
|
||||||
and under FreeBSD license revised, i.e. without advertising clause.
|
and under FreeBSD license revised, i.e. without advertising clause.
|
||||||
*/
|
*/
|
||||||
@ -861,8 +861,11 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
|
|
||||||
memset(&ccb->csio.sense_data, 0, sizeof(ccb->csio.sense_data));
|
memset(&ccb->csio.sense_data, 0, sizeof(ccb->csio.sense_data));
|
||||||
memset(c->sense, 0, sizeof(c->sense));
|
memset(c->sense, 0, sizeof(c->sense));
|
||||||
|
c->start_time = burn_get_time(0);
|
||||||
|
|
||||||
err = cam_send_ccb(d->cam, ccb);
|
err = cam_send_ccb(d->cam, ccb);
|
||||||
|
|
||||||
|
c->end_time = burn_get_time(0);
|
||||||
ignore_error = sense_len = 0;
|
ignore_error = sense_len = 0;
|
||||||
/* ts B00325 : CAM_AUTOSNS_VALID advised by Alexander Motin */
|
/* ts B00325 : CAM_AUTOSNS_VALID advised by Alexander Motin */
|
||||||
if (ccb->ccb_h.status & CAM_AUTOSNS_VALID) {
|
if (ccb->ccb_h.status & CAM_AUTOSNS_VALID) {
|
||||||
@ -959,19 +962,12 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
c->sense[13] = 0x00;
|
c->sense[13] = 0x00;
|
||||||
done = 1;
|
done = 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
/* >>> Need own duration time measurement.
|
|
||||||
Then remove bit1 from flag.
|
|
||||||
*/
|
|
||||||
done = scsi_eval_cmd_outcome(d, c, fp, c->sense,
|
done = scsi_eval_cmd_outcome(d, c, fp, c->sense,
|
||||||
sense_len, 0, start_time,
|
sense_len, start_time,
|
||||||
timeout_ms, i,
|
timeout_ms, i, !!ignore_error);
|
||||||
2 | !!ignore_error);
|
|
||||||
if (d->cancel)
|
if (d->cancel)
|
||||||
done = 1;
|
done = 1;
|
||||||
} else {
|
|
||||||
done = 1;
|
|
||||||
}
|
|
||||||
} while (!done);
|
} while (!done);
|
||||||
ret = 1;
|
ret = 1;
|
||||||
ex:;
|
ex:;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2009 - 2011 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2009 - 2013 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -669,9 +669,12 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
for(i = 0; !done; i++) {
|
for(i = 0; !done; i++) {
|
||||||
|
|
||||||
memset(c->sense, 0, sizeof(c->sense));
|
memset(c->sense, 0, sizeof(c->sense));
|
||||||
|
c->start_time = burn_get_time(0);
|
||||||
|
|
||||||
i_status = mmc_run_cmd(p_cdio, timeout_ms, &cdb, e_direction,
|
i_status = mmc_run_cmd(p_cdio, timeout_ms, &cdb, e_direction,
|
||||||
dxfer_len, c->page->data);
|
dxfer_len, c->page->data);
|
||||||
|
|
||||||
|
c->end_time = burn_get_time(0);
|
||||||
sense_valid = mmc_last_cmd_sense(p_cdio, &sense_pt);
|
sense_valid = mmc_last_cmd_sense(p_cdio, &sense_pt);
|
||||||
if (sense_valid >= 18) {
|
if (sense_valid >= 18) {
|
||||||
memcpy(c->sense, (unsigned char *) sense_pt,
|
memcpy(c->sense, (unsigned char *) sense_pt,
|
||||||
@ -717,7 +720,7 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
else
|
else
|
||||||
sense_len = 0;
|
sense_len = 0;
|
||||||
done = scsi_eval_cmd_outcome(d, c, fp, c->sense, sense_len,
|
done = scsi_eval_cmd_outcome(d, c, fp, c->sense, sense_len,
|
||||||
0, start_time, timeout_ms, i, 2);
|
start_time, timeout_ms, i, 0);
|
||||||
if (d->cancel)
|
if (d->cancel)
|
||||||
done = 1;
|
done = 1;
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||||
|
|
||||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||||
Copyright (c) 2006 - 2011 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2006 - 2013 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -404,8 +404,8 @@ static int sgio_log_cmd(unsigned char *cmd, int cmd_len, FILE *fp_in, int flag)
|
|||||||
/* ts B11110 */
|
/* ts B11110 */
|
||||||
static int sgio_log_reply(unsigned char *opcode, int data_dir,
|
static int sgio_log_reply(unsigned char *opcode, int data_dir,
|
||||||
unsigned char *data, int dxfer_len,
|
unsigned char *data, int dxfer_len,
|
||||||
void *fp_in, unsigned char sense[18],
|
void *fp_in, unsigned char sense[18], int sense_len,
|
||||||
int sense_len, int duration, int flag)
|
double duration, int flag)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -420,6 +420,7 @@ static int sgio_test(int fd)
|
|||||||
unsigned char test_ops[] = { 0, 0, 0, 0, 0, 0 };
|
unsigned char test_ops[] = { 0, 0, 0, 0, 0, 0 };
|
||||||
sg_io_hdr_t s;
|
sg_io_hdr_t s;
|
||||||
int ret;
|
int ret;
|
||||||
|
double c_start_time, c_end_time;
|
||||||
|
|
||||||
memset(&s, 0, sizeof(sg_io_hdr_t));
|
memset(&s, 0, sizeof(sg_io_hdr_t));
|
||||||
s.interface_id = 'S';
|
s.interface_id = 'S';
|
||||||
@ -430,10 +431,12 @@ static int sgio_test(int fd)
|
|||||||
|
|
||||||
sgio_log_cmd(s.cmdp, s.cmd_len, NULL, 0);
|
sgio_log_cmd(s.cmdp, s.cmd_len, NULL, 0);
|
||||||
|
|
||||||
|
c_start_time = burn_get_time(0);
|
||||||
ret= ioctl(fd, SG_IO, &s);
|
ret= ioctl(fd, SG_IO, &s);
|
||||||
|
c_end_time = burn_get_time(0);
|
||||||
|
|
||||||
sgio_log_reply(s.cmdp, NO_TRANSFER, NULL, 0,
|
sgio_log_reply(s.cmdp, NO_TRANSFER, NULL, 0, NULL,
|
||||||
NULL, s.sbp, s.sb_len_wr, s.duration, 0);
|
s.sbp, s.sb_len_wr, c_end_time - c_start_time, 0);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -446,6 +449,7 @@ static int sgio_inquiry_cd_drive(int fd, char *fname)
|
|||||||
unsigned char *sense = NULL;
|
unsigned char *sense = NULL;
|
||||||
char *msg = NULL, *msg_pt;
|
char *msg = NULL, *msg_pt;
|
||||||
int ret = 0, i;
|
int ret = 0, i;
|
||||||
|
double c_start_time, c_end_time;
|
||||||
|
|
||||||
BURN_ALLOC_MEM(buf, struct buffer, 1);
|
BURN_ALLOC_MEM(buf, struct buffer, 1);
|
||||||
BURN_ALLOC_MEM(sense, unsigned char, 128);
|
BURN_ALLOC_MEM(sense, unsigned char, 128);
|
||||||
@ -465,7 +469,9 @@ static int sgio_inquiry_cd_drive(int fd, char *fname)
|
|||||||
|
|
||||||
sgio_log_cmd(s.cmdp, s.cmd_len, NULL, 0);
|
sgio_log_cmd(s.cmdp, s.cmd_len, NULL, 0);
|
||||||
|
|
||||||
|
c_start_time = burn_get_time(0);
|
||||||
ret = ioctl(fd, SG_IO, &s);
|
ret = ioctl(fd, SG_IO, &s);
|
||||||
|
c_end_time = burn_get_time(0);
|
||||||
if (ret == -1) {
|
if (ret == -1) {
|
||||||
sprintf(msg,
|
sprintf(msg,
|
||||||
"INQUIRY on '%s' : ioctl(SG_IO) failed , errno= %d",
|
"INQUIRY on '%s' : ioctl(SG_IO) failed , errno= %d",
|
||||||
@ -476,8 +482,8 @@ static int sgio_inquiry_cd_drive(int fd, char *fname)
|
|||||||
goto ex;
|
goto ex;
|
||||||
}
|
}
|
||||||
|
|
||||||
sgio_log_reply(s.cmdp, FROM_DRIVE, buf->data, s.dxfer_len,
|
sgio_log_reply(s.cmdp, FROM_DRIVE, buf->data, s.dxfer_len, NULL,
|
||||||
NULL, s.sbp, s.sb_len_wr, s.duration, 0);
|
s.sbp, s.sb_len_wr, c_end_time - c_start_time, 0);
|
||||||
|
|
||||||
if (s.sb_len_wr > 0 || s.host_status != Libburn_sg_host_oK ||
|
if (s.sb_len_wr > 0 || s.host_status != Libburn_sg_host_oK ||
|
||||||
s.driver_status != Libburn_sg_driver_oK) {
|
s.driver_status != Libburn_sg_driver_oK) {
|
||||||
@ -1992,8 +1998,12 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
for(i = 0; !done; i++) {
|
for(i = 0; !done; i++) {
|
||||||
|
|
||||||
memset(c->sense, 0, sizeof(c->sense));
|
memset(c->sense, 0, sizeof(c->sense));
|
||||||
|
c->start_time = burn_get_time(0);
|
||||||
|
|
||||||
err = ioctl(d->fd, SG_IO, &s);
|
err = ioctl(d->fd, SG_IO, &s);
|
||||||
|
|
||||||
|
c->end_time = burn_get_time(0);
|
||||||
|
|
||||||
/* ts A61010 */
|
/* ts A61010 */
|
||||||
/* a ssert(err != -1); */
|
/* a ssert(err != -1); */
|
||||||
if (err == -1) {
|
if (err == -1) {
|
||||||
@ -2009,7 +2019,7 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
{ret = -1; goto ex;}
|
{ret = -1; goto ex;}
|
||||||
}
|
}
|
||||||
done = scsi_eval_cmd_outcome(d, c, fp, s.sbp, s.sb_len_wr,
|
done = scsi_eval_cmd_outcome(d, c, fp, s.sbp, s.sb_len_wr,
|
||||||
s.duration, start_time, s.timeout, i, 0);
|
start_time, s.timeout, i, 0);
|
||||||
if (d->cancel)
|
if (d->cancel)
|
||||||
done = 1;
|
done = 1;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Copyright (c) 2010 - 2011 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2010 - 2013 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -637,8 +637,12 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
for(i = 0; !done; i++) {
|
for(i = 0; !done; i++) {
|
||||||
|
|
||||||
memset(c->sense, 0, sizeof(c->sense));
|
memset(c->sense, 0, sizeof(c->sense));
|
||||||
|
c->start_time = burn_get_time(0);
|
||||||
|
|
||||||
ret = ioctl(d->fd, USCSICMD, &cgc);
|
ret = ioctl(d->fd, USCSICMD, &cgc);
|
||||||
|
|
||||||
|
c->end_time = burn_get_time(0);
|
||||||
|
|
||||||
/* For cgc.uscsi_status see SAM-3 5.3.1, Table 22
|
/* For cgc.uscsi_status see SAM-3 5.3.1, Table 22
|
||||||
0 = GOOD , 2 = CHECK CONDITION : Sense Data are delivered
|
0 = GOOD , 2 = CHECK CONDITION : Sense Data are delivered
|
||||||
8 = BUSY
|
8 = BUSY
|
||||||
@ -669,8 +673,8 @@ int sg_issue_command(struct burn_drive *d, struct command *c)
|
|||||||
sense_len = 18;
|
sense_len = 18;
|
||||||
else
|
else
|
||||||
sense_len = 0;
|
sense_len = 0;
|
||||||
done = scsi_eval_cmd_outcome(d, c, fp, c->sense, sense_len, 0,
|
done = scsi_eval_cmd_outcome(d, c, fp, c->sense, sense_len,
|
||||||
start_time, timeout_ms, i, 2);
|
start_time, timeout_ms, i, 0);
|
||||||
if (d->cancel)
|
if (d->cancel)
|
||||||
done = 1;
|
done = 1;
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||||
|
|
||||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||||
Copyright (c) 2006 - 2012 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2006 - 2013 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -33,6 +33,7 @@
|
|||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "init.h"
|
#include "init.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
#include "libdax_msgs.h"
|
#include "libdax_msgs.h"
|
||||||
extern struct libdax_msgs *libdax_messenger;
|
extern struct libdax_msgs *libdax_messenger;
|
||||||
@ -1649,9 +1650,8 @@ int scsi_log_cmd(struct command *c, void *fp_in, int flag)
|
|||||||
*/
|
*/
|
||||||
int scsi_log_reply(unsigned char *opcode, int data_dir, unsigned char *data,
|
int scsi_log_reply(unsigned char *opcode, int data_dir, unsigned char *data,
|
||||||
int dxfer_len, void *fp_in, unsigned char sense[18],
|
int dxfer_len, void *fp_in, unsigned char sense[18],
|
||||||
int sense_len, int duration, int flag)
|
int sense_len, double duration, int flag)
|
||||||
{
|
{
|
||||||
char durtxt[20];
|
|
||||||
FILE *fp = fp_in;
|
FILE *fp = fp_in;
|
||||||
int key, asc, ascq, i, l;
|
int key, asc, ascq, i, l;
|
||||||
|
|
||||||
@ -1667,20 +1667,18 @@ int scsi_log_reply(unsigned char *opcode, int data_dir, unsigned char *data,
|
|||||||
for (i = 0 ; i < l; i++)
|
for (i = 0 ; i < l; i++)
|
||||||
fprintf(fp, " %2.2X", sense[i]);
|
fprintf(fp, " %2.2X", sense[i]);
|
||||||
fprintf(fp, "\n");
|
fprintf(fp, "\n");
|
||||||
durtxt[0] = 0;
|
|
||||||
if (!(flag & 2))
|
|
||||||
sprintf(durtxt, " (%6d ms)", duration);
|
|
||||||
spc_decode_sense(sense, 0, &key, &asc, &ascq);
|
spc_decode_sense(sense, 0, &key, &asc, &ascq);
|
||||||
fprintf(fp, "+++ key=%X asc=%2.2Xh ascq=%2.2Xh%s\n",
|
fprintf(fp, "+++ key=%X asc=%2.2Xh ascq=%2.2Xh\n",
|
||||||
(unsigned int) key, (unsigned int) asc,
|
(unsigned int) key, (unsigned int) asc,
|
||||||
(unsigned int) ascq, durtxt);
|
(unsigned int) ascq);
|
||||||
} else {
|
} else {
|
||||||
scsi_show_command_reply(opcode, data_dir, data,
|
scsi_show_command_reply(opcode, data_dir, data,
|
||||||
dxfer_len, fp, 0);
|
dxfer_len, fp, 0);
|
||||||
|
|
||||||
if (!(flag & 2))
|
|
||||||
fprintf(fp,"%6d ms\n", duration);
|
|
||||||
}
|
}
|
||||||
|
if (!(flag & 2))
|
||||||
|
fprintf(fp, " %6.f us [ %.f ]\n",
|
||||||
|
duration * 1.0e6,
|
||||||
|
(burn_get_time(0) - lib_start_time) * 1.0e6);
|
||||||
if (burn_sg_log_scsi & 4)
|
if (burn_sg_log_scsi & 4)
|
||||||
fflush(fp);
|
fflush(fp);
|
||||||
}
|
}
|
||||||
@ -1698,16 +1696,19 @@ int scsi_log_reply(unsigned char *opcode, int data_dir, unsigned char *data,
|
|||||||
@param flag bit0 causes an error message
|
@param flag bit0 causes an error message
|
||||||
bit1 do not print duration
|
bit1 do not print duration
|
||||||
*/
|
*/
|
||||||
int scsi_log_err(struct command *c, void *fp_in, unsigned char sense[18],
|
int scsi_log_err(struct burn_drive *d, struct command *c,
|
||||||
int sense_len, int duration, int flag)
|
void *fp_in, unsigned char sense[18],
|
||||||
|
int sense_len, int flag)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
unsigned char *data = NULL;
|
unsigned char *data = NULL;
|
||||||
|
|
||||||
if (c->page != NULL)
|
if (c->page != NULL)
|
||||||
data = c->page->data;
|
data = c->page->data;
|
||||||
|
|
||||||
ret= scsi_log_reply(c->opcode, c->dir, data, c->dxfer_len ,
|
ret= scsi_log_reply(c->opcode, c->dir, data, c->dxfer_len ,
|
||||||
fp_in, sense, sense_len, duration, flag);
|
fp_in, sense, sense_len,
|
||||||
|
c->end_time - c->start_time, flag);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1720,7 +1721,7 @@ int scsi_log_err(struct command *c, void *fp_in, unsigned char sense[18],
|
|||||||
*/
|
*/
|
||||||
int scsi_eval_cmd_outcome(struct burn_drive *d, struct command *c, void *fp,
|
int scsi_eval_cmd_outcome(struct burn_drive *d, struct command *c, void *fp,
|
||||||
unsigned char *sense, int sense_len,
|
unsigned char *sense, int sense_len,
|
||||||
int duration, time_t start_time, int timeout_ms,
|
time_t start_time, int timeout_ms,
|
||||||
int loop_count, int flag)
|
int loop_count, int flag)
|
||||||
{
|
{
|
||||||
enum response outcome;
|
enum response outcome;
|
||||||
@ -1728,7 +1729,7 @@ int scsi_eval_cmd_outcome(struct burn_drive *d, struct command *c, void *fp,
|
|||||||
char *msg = NULL;
|
char *msg = NULL;
|
||||||
|
|
||||||
if (burn_sg_log_scsi & 3)
|
if (burn_sg_log_scsi & 3)
|
||||||
scsi_log_err(c, fp, sense, sense_len, duration,
|
scsi_log_err(d, c, fp, sense, sense_len,
|
||||||
(sense_len > 0) | (flag & 2));
|
(sense_len > 0) | (flag & 2));
|
||||||
if (sense_len <= 0)
|
if (sense_len <= 0)
|
||||||
{done = 1; goto ex;}
|
{done = 1; goto ex;}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||||
|
|
||||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||||
Copyright (c) 2006 - 2012 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2006 - 2013 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -87,15 +87,16 @@ int scsi_log_cmd(struct command *c, void *fp, int flag);
|
|||||||
*/
|
*/
|
||||||
int scsi_log_reply(unsigned char *opcode, int data_dir, unsigned char *data,
|
int scsi_log_reply(unsigned char *opcode, int data_dir, unsigned char *data,
|
||||||
int dxfer_len, void *fp_in, unsigned char sense[18],
|
int dxfer_len, void *fp_in, unsigned char sense[18],
|
||||||
int sense_len, int duration, int flag);
|
int sense_len, double duration, int flag);
|
||||||
|
|
||||||
/* ts A91221 (former sg_log_err ts A91108) */
|
/* ts A91221 (former sg_log_err ts A91108) */
|
||||||
/** Legacy frontend to scsi_log_reply().
|
/** Legacy frontend to scsi_log_reply().
|
||||||
@param flag bit0 causes an error message
|
@param flag bit0 causes an error message
|
||||||
bit1 do not print duration
|
bit1 do not print duration
|
||||||
*/
|
*/
|
||||||
int scsi_log_err(struct command *c, void *fp, unsigned char sense[18],
|
int scsi_log_err(struct burn_drive *d, struct command *c,
|
||||||
int sense_len, int duration, int flag);
|
void *fp, unsigned char sense[18],
|
||||||
|
int sense_len, int flag);
|
||||||
|
|
||||||
/* ts B00728 */
|
/* ts B00728 */
|
||||||
int spc_decode_sense(unsigned char *sense, int senselen,
|
int spc_decode_sense(unsigned char *sense, int senselen,
|
||||||
@ -109,7 +110,7 @@ int spc_decode_sense(unsigned char *sense, int senselen,
|
|||||||
*/
|
*/
|
||||||
int scsi_eval_cmd_outcome(struct burn_drive *d, struct command *c, void *fp_in,
|
int scsi_eval_cmd_outcome(struct burn_drive *d, struct command *c, void *fp_in,
|
||||||
unsigned char *sense, int sense_len,
|
unsigned char *sense, int sense_len,
|
||||||
int duration, time_t start_time, int timeout_ms,
|
time_t start_time, int timeout_ms,
|
||||||
int loop_count, int flag);
|
int loop_count, int flag);
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
/* -*- indent-tabs-mode: t; tab-width: 8; c-basic-offset: 8; -*- */
|
||||||
|
|
||||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||||
Copyright (c) 2006 - 2012 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2006 - 2013 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -65,6 +65,10 @@ struct command
|
|||||||
int retry;
|
int retry;
|
||||||
struct buffer *page;
|
struct buffer *page;
|
||||||
int timeout; /* milliseconds */
|
int timeout; /* milliseconds */
|
||||||
|
|
||||||
|
double start_time;
|
||||||
|
double end_time;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct burn_scsi_inquiry_data
|
struct burn_scsi_inquiry_data
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
/* Copyright (c) 2004 - 2006 Derek Foreman, Ben Jansens
|
||||||
Copyright (c) 2006 - 2010 Thomas Schmitt <scdbackup@gmx.net>
|
Copyright (c) 2006 - 2013 Thomas Schmitt <scdbackup@gmx.net>
|
||||||
Provided under GPL version 2 or later.
|
Provided under GPL version 2 or later.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -15,6 +15,9 @@
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
|
||||||
/* ts A80914 : This is unneeded. Version info comes from libburn.h.
|
/* ts A80914 : This is unneeded. Version info comes from libburn.h.
|
||||||
#include "v ersion.h"
|
#include "v ersion.h"
|
||||||
@ -342,3 +345,25 @@ void burn_int_to_lsb(int val, char *target)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ts B30609 */
|
||||||
|
double burn_get_time(int flag)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct timeval tv;
|
||||||
|
|
||||||
|
#ifdef Xorriso_use_clock_gettime_monotoniC
|
||||||
|
|
||||||
|
struct timespec tp;
|
||||||
|
ret = clock_gettime(CLOCK_MONOTONIC, &tp)
|
||||||
|
if (ret == 0)
|
||||||
|
return ((double) tp.tv_sec) + ((double) tp.tv_nsec) * 1.0e-9;
|
||||||
|
|
||||||
|
#endif /* Xorriso_use_clock_gettime_monotoniC */
|
||||||
|
|
||||||
|
ret = gettimeofday(&tv, NULL);
|
||||||
|
if (ret == 0)
|
||||||
|
return ((double) tv.tv_sec) + ((double) tv.tv_usec) * 1.0e-6;
|
||||||
|
return (double) time(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,4 +11,7 @@ char *burn_printify(char *msg);
|
|||||||
/* ts B30521 */
|
/* ts B30521 */
|
||||||
void burn_int_to_lsb(int val, char *target);
|
void burn_int_to_lsb(int val, char *target);
|
||||||
|
|
||||||
|
/* ts B30609 */
|
||||||
|
double burn_get_time(int flag);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user