svn commit: r248757 - head/sys/dev/nvme

Jim Harris jimharris at FreeBSD.org
Tue Mar 26 21:01:54 UTC 2013


Author: jimharris
Date: Tue Mar 26 21:01:53 2013
New Revision: 248757
URL: http://svnweb.freebsd.org/changeset/base/248757

Log:
  Add structure definitions and a controller command function for
  error log pages.
  
  Sponsored by:	Intel
  Reviewed by:	carl

Modified:
  head/sys/dev/nvme/nvme.h
  head/sys/dev/nvme/nvme_ctrlr_cmd.c
  head/sys/dev/nvme/nvme_private.h

Modified: head/sys/dev/nvme/nvme.h
==============================================================================
--- head/sys/dev/nvme/nvme.h	Tue Mar 26 21:00:18 2013	(r248756)
+++ head/sys/dev/nvme/nvme.h	Tue Mar 26 21:01:53 2013	(r248757)
@@ -622,6 +622,19 @@ enum nvme_log_page {
 	/* 0xC0-0xFF - vendor specific */
 };
 
+struct nvme_error_information_entry {
+
+	uint64_t		error_count;
+	uint16_t		sqid;
+	uint16_t		cid;
+	struct nvme_status	status;
+	uint16_t		error_location;
+	uint64_t		lba;
+	uint32_t		nsid;
+	uint8_t			vendor_specific;
+	uint8_t			reserved[35];
+} __packed __aligned(4);
+
 union nvme_critical_warning_state {
 
 	uint8_t		raw;

Modified: head/sys/dev/nvme/nvme_ctrlr_cmd.c
==============================================================================
--- head/sys/dev/nvme/nvme_ctrlr_cmd.c	Tue Mar 26 21:00:18 2013	(r248756)
+++ head/sys/dev/nvme/nvme_ctrlr_cmd.c	Tue Mar 26 21:01:53 2013	(r248757)
@@ -267,6 +267,25 @@ nvme_ctrlr_cmd_get_log_page(struct nvme_
 	nvme_ctrlr_submit_admin_request(ctrlr, req);
 }
 
+void
+nvme_ctrlr_cmd_get_error_page(struct nvme_controller *ctrlr,
+    struct nvme_error_information_entry *payload, uint32_t num_entries,
+    nvme_cb_fn_t cb_fn, void *cb_arg)
+{
+
+	KASSERT(num_entries > 0, ("%s called with num_entries==0\n", __func__));
+
+	/* Controller's error log page entries is 0-based. */
+	if (num_entries > (ctrlr->cdata.elpe + 1)) {
+		printf("%s num_entries=%d cdata.elpe=%d\n",
+		    __func__, num_entries, ctrlr->cdata.elpe);
+		num_entries = ctrlr->cdata.elpe + 1;
+	}
+
+	nvme_ctrlr_cmd_get_log_page(ctrlr, NVME_LOG_ERROR,
+	    NVME_GLOBAL_NAMESPACE_TAG, payload, sizeof(*payload) * num_entries,
+	    cb_fn, cb_arg);
+}
 
 void
 nvme_ctrlr_cmd_get_health_information_page(struct nvme_controller *ctrlr,

Modified: head/sys/dev/nvme/nvme_private.h
==============================================================================
--- head/sys/dev/nvme/nvme_private.h	Tue Mar 26 21:00:18 2013	(r248756)
+++ head/sys/dev/nvme/nvme_private.h	Tue Mar 26 21:01:53 2013	(r248757)
@@ -342,6 +342,11 @@ void	nvme_ctrlr_cmd_set_interrupt_coales
 						uint32_t threshold,
 						nvme_cb_fn_t cb_fn,
 						void *cb_arg);
+void	nvme_ctrlr_cmd_get_error_page(struct nvme_controller *ctrlr,
+				      struct nvme_error_information_entry *payload,
+				      uint32_t num_entries, /* 0 = max */
+				      nvme_cb_fn_t cb_fn,
+				      void *cb_arg);
 void	nvme_ctrlr_cmd_get_health_information_page(struct nvme_controller *ctrlr,
 						   uint32_t nsid,
 						   struct nvme_health_information_page *payload,


More information about the svn-src-all mailing list