summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/cam
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-08-07 12:12:37 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-09-21 10:29:36 +0200
commitde261e0404e1fe54544275fc57d5b982df4f42b4 (patch)
tree856cbdf23d6809b99c4d642d066bc45cd67c26e6 /freebsd/sys/cam
parentlibbsd.txt: Use rtems_bsd_ifconfig_lo0() (diff)
downloadrtems-libbsd-de261e0404e1fe54544275fc57d5b982df4f42b4.tar.bz2
Update to FreeBSD head 2017-06-01
Git mirror commit dfb26efac4ce9101dda240e94d9ab53f80a9e131. Update #3472.
Diffstat (limited to 'freebsd/sys/cam')
-rw-r--r--freebsd/sys/cam/ata/ata_all.h4
-rw-r--r--freebsd/sys/cam/scsi/scsi_all.c69
-rw-r--r--freebsd/sys/cam/scsi/scsi_all.h12
3 files changed, 57 insertions, 28 deletions
diff --git a/freebsd/sys/cam/ata/ata_all.h b/freebsd/sys/cam/ata/ata_all.h
index ea902d09..a279aa91 100644
--- a/freebsd/sys/cam/ata/ata_all.h
+++ b/freebsd/sys/cam/ata/ata_all.h
@@ -110,7 +110,9 @@ int ata_status_sbuf(struct ccb_ataio *ataio, struct sbuf *sb);
int ata_res_sbuf(struct ata_res *res, struct sbuf *sb);
void ata_print_ident(struct ata_params *ident_data);
+void ata_print_ident_sbuf(struct ata_params *ident_data, struct sbuf *sb);
void ata_print_ident_short(struct ata_params *ident_data);
+void ata_print_ident_short_sbuf(struct ata_params *ident_data, struct sbuf *sb);
uint32_t ata_logical_sector_size(struct ata_params *ident_data);
uint64_t ata_physical_sector_size(struct ata_params *ident_data);
@@ -150,7 +152,9 @@ int ata_identify_match(caddr_t identbuffer, caddr_t table_entry);
int ata_static_identify_match(caddr_t identbuffer, caddr_t table_entry);
void semb_print_ident(struct sep_identify_data *ident_data);
+void semb_print_ident_sbuf(struct sep_identify_data *ident_data, struct sbuf *sb);
void semb_print_ident_short(struct sep_identify_data *ident_data);
+void semb_print_ident_short_sbuf(struct sep_identify_data *ident_data, struct sbuf *sb);
void semb_receive_diagnostic_results(struct ccb_ataio *ataio,
u_int32_t retries, void (*cbfcnp)(struct cam_periph *, union ccb*),
diff --git a/freebsd/sys/cam/scsi/scsi_all.c b/freebsd/sys/cam/scsi/scsi_all.c
index 1c3a8c3b..99f6c37d 100644
--- a/freebsd/sys/cam/scsi/scsi_all.c
+++ b/freebsd/sys/cam/scsi/scsi_all.c
@@ -1621,7 +1621,7 @@ static struct asc_table_entry asc_table[] = {
{ SST(0x20, 0x01, SS_RDEF, /* XXX TBD */
"Access denied - initiator pending-enrolled") },
/* DT PWROMAEBK */
- { SST(0x20, 0x02, SS_RDEF, /* XXX TBD */
+ { SST(0x20, 0x02, SS_FATAL | EPERM,
"Access denied - no access rights") },
/* DT PWROMAEBK */
{ SST(0x20, 0x03, SS_RDEF, /* XXX TBD */
@@ -5178,7 +5178,7 @@ scsi_sense_print(struct ccb_scsiio *csio)
sbuf_finish(&sb);
- printf("%s", sbuf_data(&sb));
+ sbuf_putbuf(&sb);
}
#else /* !_KERNEL */
@@ -5373,11 +5373,10 @@ scsi_get_ascq(struct scsi_sense_data *sense_data, u_int sense_len,
* for this routine to function properly.
*/
void
-scsi_print_inquiry(struct scsi_inquiry_data *inq_data)
+scsi_print_inquiry_sbuf(struct sbuf *sb, struct scsi_inquiry_data *inq_data)
{
u_int8_t type;
char *dtype, *qtype;
- char vendor[16], product[48], revision[16], rstr[12];
type = SID_TYPE(inq_data);
@@ -5466,41 +5465,55 @@ scsi_print_inquiry(struct scsi_inquiry_data *inq_data)
break;
}
- cam_strvis(vendor, inq_data->vendor, sizeof(inq_data->vendor),
- sizeof(vendor));
- cam_strvis(product, inq_data->product, sizeof(inq_data->product),
- sizeof(product));
- cam_strvis(revision, inq_data->revision, sizeof(inq_data->revision),
- sizeof(revision));
+ scsi_print_inquiry_short_sbuf(sb, inq_data);
+
+ sbuf_printf(sb, "%s %s ", SID_IS_REMOVABLE(inq_data) ? "Removable" : "Fixed", dtype);
if (SID_ANSI_REV(inq_data) == SCSI_REV_0)
- snprintf(rstr, sizeof(rstr), "SCSI");
+ sbuf_printf(sb, "SCSI ");
else if (SID_ANSI_REV(inq_data) <= SCSI_REV_SPC) {
- snprintf(rstr, sizeof(rstr), "SCSI-%d",
- SID_ANSI_REV(inq_data));
+ sbuf_printf(sb, "SCSI-%d ", SID_ANSI_REV(inq_data));
} else {
- snprintf(rstr, sizeof(rstr), "SPC-%d SCSI",
- SID_ANSI_REV(inq_data) - 2);
+ sbuf_printf(sb, "SPC-%d SCSI ", SID_ANSI_REV(inq_data) - 2);
}
- printf("<%s %s %s> %s %s %s device%s\n",
- vendor, product, revision,
- SID_IS_REMOVABLE(inq_data) ? "Removable" : "Fixed",
- dtype, rstr, qtype);
+ sbuf_printf(sb, "device%s\n", qtype);
}
void
-scsi_print_inquiry_short(struct scsi_inquiry_data *inq_data)
+scsi_print_inquiry(struct scsi_inquiry_data *inq_data)
+{
+ struct sbuf sb;
+ char buffer[120];
+
+ sbuf_new(&sb, buffer, 120, SBUF_FIXEDLEN);
+ scsi_print_inquiry_sbuf(&sb, inq_data);
+ sbuf_finish(&sb);
+ sbuf_putbuf(&sb);
+}
+
+void
+scsi_print_inquiry_short_sbuf(struct sbuf *sb, struct scsi_inquiry_data *inq_data)
{
- char vendor[16], product[48], revision[16];
- cam_strvis(vendor, inq_data->vendor, sizeof(inq_data->vendor),
- sizeof(vendor));
- cam_strvis(product, inq_data->product, sizeof(inq_data->product),
- sizeof(product));
- cam_strvis(revision, inq_data->revision, sizeof(inq_data->revision),
- sizeof(revision));
+ sbuf_printf(sb, "<");
+ cam_strvis_sbuf(sb, inq_data->vendor, sizeof(inq_data->vendor), 0);
+ sbuf_printf(sb, " ");
+ cam_strvis_sbuf(sb, inq_data->product, sizeof(inq_data->product), 0);
+ sbuf_printf(sb, " ");
+ cam_strvis_sbuf(sb, inq_data->revision, sizeof(inq_data->revision), 0);
+ sbuf_printf(sb, "> ");
+}
+
+void
+scsi_print_inquiry_short(struct scsi_inquiry_data *inq_data)
+{
+ struct sbuf sb;
+ char buffer[84];
- printf("<%s %s %s>", vendor, product, revision);
+ sbuf_new(&sb, buffer, 84, SBUF_FIXEDLEN);
+ scsi_print_inquiry_short_sbuf(&sb, inq_data);
+ sbuf_finish(&sb);
+ sbuf_putbuf(&sb);
}
#ifndef __rtems__
diff --git a/freebsd/sys/cam/scsi/scsi_all.h b/freebsd/sys/cam/scsi/scsi_all.h
index f85d285e..3a11a15e 100644
--- a/freebsd/sys/cam/scsi/scsi_all.h
+++ b/freebsd/sys/cam/scsi/scsi_all.h
@@ -565,6 +565,7 @@ struct scsi_log_sense
#define SLS_ERROR_LASTN_PAGE 0x07
#define SLS_LOGICAL_BLOCK_PROVISIONING 0x0c
#define SLS_SELF_TEST_PAGE 0x10
+#define SLS_SOLID_STATE_MEDIA 0x11
#define SLS_STAT_AND_PERF 0x19
#define SLS_IE_PAGE 0x2f
#define SLS_PAGE_CTRL_MASK 0xC0
@@ -624,6 +625,13 @@ struct scsi_log_param_header {
u_int8_t param_len;
};
+struct scsi_log_media_pct_used {
+ struct scsi_log_param_header hdr;
+#define SLP_SS_MEDIA_PCT_USED 0x0001
+ uint8_t reserved[3];
+ uint8_t pct_used;
+};
+
struct scsi_log_stat_and_perf {
struct scsi_log_param_header hdr;
#define SLP_SAP 0x0001
@@ -3820,7 +3828,11 @@ char * scsi_cdb_string(u_int8_t *cdb_ptr, char *cdb_string,
void scsi_cdb_sbuf(u_int8_t *cdb_ptr, struct sbuf *sb);
void scsi_print_inquiry(struct scsi_inquiry_data *inq_data);
+void scsi_print_inquiry_sbuf(struct sbuf *sb,
+ struct scsi_inquiry_data *inq_data);
void scsi_print_inquiry_short(struct scsi_inquiry_data *inq_data);
+void scsi_print_inquiry_short_sbuf(struct sbuf *sb,
+ struct scsi_inquiry_data *inq_data);
u_int scsi_calc_syncsrate(u_int period_factor);
u_int scsi_calc_syncparam(u_int period);