FeatureStore: Add Protobuf definition Adds the protocol buffer messages for NVMe features like Arbitration, Power Management, etc. Design-Doc: go/bmc-redfish-nvme-get-set-features Google-Bug-Id: 405609473 Change-Id: I5e574ac00c7c66ee417ca3f0070d4e82209c196e Signed-off-by: Guangzong Chen <guangzong@google.com>
diff --git a/proto/nvme_features.proto b/proto/nvme_features.proto new file mode 100644 index 0000000..84af23d --- /dev/null +++ b/proto/nvme_features.proto
@@ -0,0 +1,157 @@ +syntax = "proto3"; + +package google.gbmc.nvme.base; + +// 01h - Arbitration +// This feature controls the arbitration of commands among different submission queues. +message Arbitration { + // Bit 7:0 - Arbitration Burst (AB) + // Specifies the maximum number of commands that the controller may launch at one time from a particular submission queue. + uint32 arbitration_burst = 1; + // Bit 15:8 - Low Priority Weight (LPW) + // Specifies the number of commands that may be executed from the low priority service class in each round. + uint32 low_priority_weight = 2; + // Bit 23:16 - Medium Priority Weight (MPW) + // Specifies the number of commands that may be executed from the medium priority service class in each round. + uint32 medium_priority_weight = 3; + // Bit 31:24 - High Priority Weight (HPW) + // Specifies the number of commands that may be executed from the high priority service class in each round. + uint32 high_priority_weight = 4; +} + +// 02h - Power Management +// This feature allows the host to configure the power state of the controller. +message PowerManagement { + // Bit 4:0 - Power State (PS) + // Specifies the power state that the controller should transition to. + uint32 power_state = 1; + // Bit 8 - Workload Hint (WH) + // Indicates the type of workload that the controller should optimize for. + uint32 workload_hint = 2; +} + +// 04h - Temperature Threshold +// This feature allows the host to set temperature thresholds for the controller or a specific namespace. +message TemperatureThreshold { + enum ThresholdType { + OVER_TEMPERATURE = 0; + UNDER_TEMPERATURE = 1; + } + // Bit 15:00 - Temperature Threshold (TMPTH) + // Specifies the threshold value in Kelvins. + uint32 temperature_threshold = 1; + // Bit 19:16 - Threshold Temperature Select (TMPSEL) + // Selects the temperature sensor. + uint32 threshold_temperature_select = 2; + // Bit 21:20 - Threshold Type Select (THSEL) + // Selects the type of temperature threshold (Over, Under). + ThresholdType threshold_type_select = 3; +} + +// 05h - Error Recovery +// This feature controls the error recovery settings for the NVM command set. +message ErrorRecovery { + enum State { + DISABLED = 0; + ENABLED = 1; + } + // Bit 15:00 - Time Limited Error Recovery (TLER) + // Indicates a limited retry timeout value in 100 millisecond units. + uint32 tler = 1; + // Bit 16 - Deallocated or Unwritten Logical Block Error Enable (DULBE) + // If set to ENABLED, then the Deallocated or Unwritten Logical Block error is enabled. + State dulbe_enable = 2; +} + +// 06h - Volatile Write Cache +// This feature controls the operation of the volatile write cache, if present. +message VolatileWriteCache { + enum State { + DISABLED = 0; + ENABLED = 1; + } + // Bit 0 - Volatile Write Cache Enable (WCE) + // If set to ENABLED, the volatile write cache is enabled. + State write_cache_enable = 1; +} + +// 07h - Number of Queues +// This feature configures the number of submission and completion queues. +message NumberOfQueues { + // Bit 15:00 - Number of Submission Queues (NSQR) + // Specifies the number of I/O submission queues requested by the host. + uint32 number_of_submission_queues = 1; + // Bit 31:16 - Number of Completion Queues (NCQR) + // Specifies the number of I/O completion queues requested by the host. + uint32 number_of_completion_queues = 2; +} + +// 08h - Interrupt Coalescing +// This feature controls the interrupt coalescing settings. +message InterruptCoalescing { + // Bit 7:0 - Aggregation Threshold (THR) + // Specifies the minimum number of completion queue entries to aggregate before signaling an interrupt. + uint32 aggregation_threshold = 1; + // Bit 15:8 - Aggregation Time (TIME) + // Specifies the maximum time to aggregate interrupts in units of 100 microseconds. + uint32 aggregation_time = 2; +} + +// 09h - Interrupt Vector Configuration +// This feature configures a specific interrupt vector. +message InterruptVectorConfiguration { + enum CoalescingState { + COALESCING_ENABLED = 0; + COALESCING_DISABLED = 1; + } + // Bit 15:00 - Interrupt Vector (IV) + // Specifies the interrupt vector to be configured. + uint32 interrupt_vector = 1; + // Bit 16 - Coalescing Disable (CD) + // If set to COALESCING_DISABLED, interrupt coalescing is disabled for this vector. + CoalescingState coalescing_disable = 2; +} + +// 0Ah - Write Atomicity Normal +// This feature controls the write atomicity settings for normal write operations. +message WriteAtomicityNormal { + enum NormalWriteAtomicityState { + NORMAL_WRITE_ATOMICITY_ENABLED = 0; + NORMAL_WRITE_ATOMICITY_DISABLED = 1; + } + // Bit 0 - Disable Normal (DN) + // If set to NORMAL_WRITE_ATOMICITY_DISABLED, the controller shall disable normal write atomicity. + NormalWriteAtomicityState disable_normal = 1; +} + +// 0Bh - Asynchronous Event Configuration +// This feature controls the configuration of asynchronous events. +message AsynchronousEventConfiguration { + enum EventState { + EVENT_DISABLED = 0; + EVENT_ENABLED = 1; + } + // Bit 7:0 - SMART / Health Critical Warnings + // Specifies which SMART/Health critical warnings should trigger an asynchronous event notification. + uint32 smart_critical_warning_config = 1; + // Bit 8 - Namespace Attribute Notices + EventState namespace_attribute_notice_config = 2; + // Bit 9 - Firmware Activation Notices + EventState fw_activation_notice_config = 3; + // Bit 10 - Telemetry Log Notices + EventState telemetry_log_notice_config = 4; + // Bit 11 - Asymmetric Namespace Access Change Notices + EventState asymmetric_namespace_access_change_config = 5; + // Bit 12 - Predictable Latency Event Aggregate Log Change Notices + EventState predictable_latency_event_aggregate_log_change_config = 6; + // Bit 13 - LBA Status Information Alert Notices + EventState lba_status_information_alert_config = 7; + // Bit 14 - Endurance Group Event Aggregate Log Change Notices + EventState endurance_group_event_aggregate_log_change_config = 8; + // Bit 15 - Normal NVM Subsystem Shutdown + EventState normal_nvm_subsystem_shutdown_config = 9; + // Bit 27 - Zone Descriptor Changed Notices + EventState zone_descriptor_changed_config = 10; + // Bit 31 - Discovery Log Page Change Notification + EventState discovery_log_page_change_config = 11; +}