aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2024-04-07 23:48:42 +0000
committerWarner Losh <imp@FreeBSD.org>2024-05-11 18:09:50 +0000
commite84a75f936028bf3947f72f11eac4e25baf91b3a (patch)
treeb957364d7b45851d67fc40236b78b9b71aed61ed
parent2f923a0cedb8db9b8bd042c5b457dee6333604fe (diff)
downloadsrc-e84a75f936028bf3947f72f11eac4e25baf91b3a.tar.gz
src-e84a75f936028bf3947f72f11eac4e25baf91b3a.zip
nvme: Add telemetry page definitions
Add definition for page types 7 and 8 for host initiated telemetry and controller initiated telemetry (they differ by one byte, but that byte that's defined in the host version is reserved in the controller version). Sponsored by: Netflix
-rw-r--r--sys/dev/nvme/nvme.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/sys/dev/nvme/nvme.h b/sys/dev/nvme/nvme.h
index bca4df92cb25..a389fc443743 100644
--- a/sys/dev/nvme/nvme.h
+++ b/sys/dev/nvme/nvme.h
@@ -1652,6 +1652,30 @@ struct nvme_device_self_test_page {
_Static_assert(sizeof(struct nvme_device_self_test_page) == 564,
"bad size for nvme_device_self_test_page");
+/*
+ * Header structure for both host initiated telemetry (page 7) and controller
+ * initiated telemetry (page 8).
+ */
+struct nvme_telemetry_log_page {
+ uint8_t identifier;
+ uint8_t rsvd[4];
+ uint8_t oui[3];
+ uint16_t da1_last;
+ uint16_t da2_last;
+ uint16_t da3_last;
+ uint8_t rsvd2[2];
+ uint32_t da4_last;
+ uint8_t rsvd3[361];
+ uint8_t hi_gen;
+ uint8_t ci_avail;
+ uint8_t ci_gen;
+ uint8_t reason[128];
+ /* Blocks of telemetry data follow */
+} __packed __aligned(4);
+
+_Static_assert(sizeof(struct nvme_telemetry_log_page) == 512,
+ "bad size for nvme_telemetry_log");
+
struct nvme_discovery_log_entry {
uint8_t trtype;
uint8_t adrfam;