7
static const struct xlat sg_io_dxfer_direction[] = {
8
{SG_DXFER_NONE, "SG_DXFER_NONE"},
9
{SG_DXFER_TO_DEV, "SG_DXFER_TO_DEV"},
10
{SG_DXFER_FROM_DEV, "SG_DXFER_FROM_DEV"},
11
{SG_DXFER_TO_FROM_DEV, "SG_DXFER_TO_FROM_DEV"},
16
print_sg_io_buffer(struct tcb *tcp, unsigned char *addr, int len)
18
unsigned char *buf = NULL;
23
allocated = (len > max_strlen) ? max_strlen : len;
25
(buf = malloc(allocated)) == NULL ||
26
umoven(tcp, (unsigned long) addr, allocated, (char *) buf) < 0) {
31
tprintf("%02x", buf[0]);
32
for (i = 1; i < allocated; ++i)
33
tprintf(", %02x", buf[i]);
40
print_sg_io_req(struct tcb *tcp, struct sg_io_hdr *sg_io)
42
tprintf("{'%c', ", sg_io->interface_id);
43
printxval(sg_io_dxfer_direction, sg_io->dxfer_direction,
45
tprintf(", cmd[%u]=[", sg_io->cmd_len);
46
print_sg_io_buffer(tcp, sg_io->cmdp, sg_io->cmd_len);
47
tprintf("], mx_sb_len=%d, ", sg_io->mx_sb_len);
48
tprintf("iovec_count=%d, ", sg_io->iovec_count);
49
tprintf("dxfer_len=%u, ", sg_io->dxfer_len);
50
tprintf("timeout=%u, ", sg_io->timeout);
51
tprintf("flags=%#x", sg_io->flags);
53
if (sg_io->dxfer_direction == SG_DXFER_TO_DEV ||
54
sg_io->dxfer_direction == SG_DXFER_TO_FROM_DEV) {
55
tprintf(", data[%u]=[", sg_io->dxfer_len);
56
printstr(tcp, (unsigned long) sg_io->dxferp,
63
print_sg_io_res(struct tcb *tcp, struct sg_io_hdr *sg_io)
65
if (sg_io->dxfer_direction == SG_DXFER_FROM_DEV ||
66
sg_io->dxfer_direction == SG_DXFER_TO_FROM_DEV) {
67
tprintf(", data[%u]=[", sg_io->dxfer_len);
68
printstr(tcp, (unsigned long) sg_io->dxferp,
72
tprintf(", status=%02x, ", sg_io->status);
73
tprintf("masked_status=%02x, ", sg_io->masked_status);
74
tprintf("sb[%u]=[", sg_io->sb_len_wr);
75
print_sg_io_buffer(tcp, sg_io->sbp, sg_io->sb_len_wr);
76
tprintf("], host_status=%#x, ", sg_io->host_status);
77
tprintf("driver_status=%#x, ", sg_io->driver_status);
78
tprintf("resid=%d, ", sg_io->resid);
79
tprintf("duration=%d, ", sg_io->duration);
80
tprintf("info=%#x}", sg_io->info);
84
scsi_ioctl(struct tcb *tcp, long code, long arg)
89
struct sg_io_hdr sg_io;
91
if (umove(tcp, arg, &sg_io) < 0)
92
tprintf(", %#lx", arg);
95
print_sg_io_req(tcp, &sg_io);
99
struct sg_io_hdr sg_io;
101
if (!syserror(tcp) && umove(tcp, arg, &sg_io) >= 0)
102
print_sg_io_res(tcp, &sg_io);
109
tprintf(", %#lx", arg);