svn commit: r357848 - head/sys/cam/scsi

Warner Losh imp at FreeBSD.org
Thu Feb 13 01:23:32 UTC 2020


Author: imp
Date: Thu Feb 13 01:23:32 2020
New Revision: 357848
URL: https://svnweb.freebsd.org/changeset/base/357848

Log:
  Export the current da flags as bitfield
  
  Export the current flags. They can be useful to other programs wanting to do
  special thigns for removable or similar devices.
  
  Differential Revision: https://reviews.freebsd.org/D23417

Modified:
  head/sys/cam/scsi/scsi_da.c

Modified: head/sys/cam/scsi/scsi_da.c
==============================================================================
--- head/sys/cam/scsi/scsi_da.c	Wed Feb 12 23:54:38 2020	(r357847)
+++ head/sys/cam/scsi/scsi_da.c	Thu Feb 13 01:23:32 2020	(r357848)
@@ -122,6 +122,28 @@ typedef enum {
 	DA_FLAG_CAN_ATA_ZONE	= 0x040000,
 	DA_FLAG_TUR_PENDING	= 0x080000
 } da_flags;
+#define DA_FLAG_STRING		\
+	"\020"			\
+	"\001PACK_INVALID"	\
+	"\002NEW_PACK"		\
+	"\003PACK_LOCKED"	\
+	"\004PACK_REMOVABLE"	\
+	"\005UNUSED"		\
+	"\006NEED_OTAG"		\
+	"\007WAS_OTAG"		\
+	"\010RETRY_UA"		\
+	"\011OPEN"		\
+	"\012SCTX_INIT"		\
+	"\013CAN_RC16"		\
+	"\014PROBED"		\
+	"\015DIRTY"		\
+	"\016ANNOUCNED"		\
+	"\017CAN_ATA_DMA"	\
+	"\020CAN_ATA_LOG"	\
+	"\021CAN_ATA_IDLOG"	\
+	"\022CAN_ATA_SUPACP"	\
+	"\023CAN_ATA_ZONE"	\
+	"\024TUR_PENDING"
 
 typedef enum {
 	DA_Q_NONE		= 0x00,
@@ -1442,6 +1464,7 @@ static	void		dasysctlinit(void *context, int pending);
 static	int		dasysctlsofttimeout(SYSCTL_HANDLER_ARGS);
 static	int		dacmdsizesysctl(SYSCTL_HANDLER_ARGS);
 static	int		dadeletemethodsysctl(SYSCTL_HANDLER_ARGS);
+static	int		daflagssysctl(SYSCTL_HANDLER_ARGS);
 static	int		dazonemodesysctl(SYSCTL_HANDLER_ARGS);
 static	int		dazonesupsysctl(SYSCTL_HANDLER_ARGS);
 static	int		dadeletemaxsysctl(SYSCTL_HANDLER_ARGS);
@@ -2316,6 +2339,11 @@ dasysctlinit(void *context, int pending)
 		       0,
 		       "DIF protection type");
 
+	SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree),
+	    OID_AUTO, "flags", CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE,
+	    softc, 0, daflagssysctl, "A",
+	    "Flags for drive");
+
 #ifdef CAM_TEST_FAILURE
 	SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree),
 		OID_AUTO, "invalidate", CTLTYPE_U64 | CTLFLAG_RW | CTLFLAG_MPSAFE,
@@ -2588,6 +2616,24 @@ dadeletemethodchoose(struct da_softc *softc, da_delete
 
 	/* Fallback to default. */
 	dadeletemethodset(softc, default_method);
+}
+
+static int
+daflagssysctl(SYSCTL_HANDLER_ARGS)
+{
+	struct sbuf sbuf;
+	struct da_softc *softc = arg1;
+	int error;
+
+	sbuf_new_for_sysctl(&sbuf, NULL, 0, req);
+	if (softc->flags != 0)
+		sbuf_printf(&sbuf, "0x%b", softc->flags, DA_FLAG_STRING);
+	else
+		sbuf_printf(&sbuf, "0");
+	error = sbuf_finish(&sbuf);
+	sbuf_delete(&sbuf);
+
+	return (error);
 }
 
 static int


More information about the svn-src-all mailing list