forked from len0rd/rockbox
imxtools: add device info and serial number requests to scsitool
Change-Id: I17b679062fa53c20034e7db6f4080f8762a7818c
This commit is contained in:
parent
03a4ba5481
commit
08e466ff92
1 changed files with 64 additions and 2 deletions
|
@ -344,6 +344,40 @@ static int stmp_get_logical_drive_info(uint8_t drive, uint8_t info, void *data,
|
|||
return do_sense_analysis(ret, sense, sense_size);
|
||||
}
|
||||
|
||||
static int stmp_get_device_info(uint8_t info, void *data, int *len)
|
||||
{
|
||||
uint8_t cdb[16];
|
||||
memset(cdb, 0, sizeof(cdb));
|
||||
cdb[0] = SCSI_STMP_READ;
|
||||
cdb[1] = SCSI_STMP_CMD_GET_DEVICE_INFO;
|
||||
cdb[2] = info;
|
||||
|
||||
uint8_t sense[32];
|
||||
int sense_size = sizeof(sense);
|
||||
|
||||
int ret = do_scsi(cdb, sizeof(cdb), DO_READ, sense, &sense_size, data, len);
|
||||
if(ret < 0)
|
||||
return ret;
|
||||
return do_sense_analysis(ret, sense, sense_size);
|
||||
}
|
||||
|
||||
static int stmp_get_serial_number(uint8_t info, void *data, int *len)
|
||||
{
|
||||
uint8_t cdb[16];
|
||||
memset(cdb, 0, sizeof(cdb));
|
||||
cdb[0] = SCSI_STMP_READ;
|
||||
cdb[1] = SCSI_STMP_CMD_GET_CHIP_SERIAL_NUMBER;
|
||||
cdb[2] = info;
|
||||
|
||||
uint8_t sense[32];
|
||||
int sense_size = sizeof(sense);
|
||||
|
||||
int ret = do_scsi(cdb, sizeof(cdb), DO_READ, sense, &sense_size, data, len);
|
||||
if(ret < 0)
|
||||
return ret;
|
||||
return do_sense_analysis(ret, sense, sense_size);
|
||||
}
|
||||
|
||||
static const char *stmp_get_logical_media_type_string(uint32_t type)
|
||||
{
|
||||
switch(type)
|
||||
|
@ -417,10 +451,38 @@ static int do_work(void)
|
|||
uint16_t u16;
|
||||
uint32_t u32;
|
||||
uint64_t u64;
|
||||
uint8_t buf[52];
|
||||
uint8_t buf[1024];
|
||||
}u;
|
||||
|
||||
int len = 2;
|
||||
cprintf(GREEN, " Device\n");
|
||||
int len = 4;
|
||||
ret = stmp_get_device_info(0, &u.u32, &len);
|
||||
if(!ret && len == 4)
|
||||
{
|
||||
u.u32 = fix_endian32be(u.u32);
|
||||
cprintf_field(" Info 0: ", "%lu", (unsigned long)u.u32);
|
||||
}
|
||||
|
||||
len = 4;
|
||||
ret = stmp_get_device_info(1, &u.u32, &len);
|
||||
if(!ret && len == 4)
|
||||
{
|
||||
u.u32 = fix_endian32be(u.u32);
|
||||
cprintf_field(" Info 1: ", "%lu", (unsigned long)u.u32);
|
||||
}
|
||||
|
||||
len = 2;
|
||||
ret = stmp_get_serial_number(0, &u.u16, &len);
|
||||
if(!ret && len == 2)
|
||||
{
|
||||
u.u16 = fix_endian16be(u.u16);
|
||||
len = MIN(u.u16, sizeof(u.buf));
|
||||
ret = stmp_get_serial_number(1, u.buf, &len);
|
||||
cprintf_field(" Serial Number:", " ");
|
||||
print_hex(u.buf, len);
|
||||
}
|
||||
|
||||
len = 2;
|
||||
ret = stmp_get_logical_media_info(0, &u.u16, &len);
|
||||
if(!ret && len == 2)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue