blob: 368b95dc96028b7bf01d4eeac395062c8a243c09 [file] [log] [blame]
// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_DEVICES_BLOCK_DRIVERS_NVME_COMMANDS_QUEUE_H_
#define SRC_DEVICES_BLOCK_DRIVERS_NVME_COMMANDS_QUEUE_H_
#include <hwreg/bitfields.h>
#include "src/devices/block/drivers/nvme/commands.h"
namespace nvme {
class CreateIoCompletionQueueSubmission : public Submission {
public:
CreateIoCompletionQueueSubmission() : Submission(AdminCommandOpcode::kCreateIoCompletionQueue) {}
DEF_SUBFIELD(dword10, 31, 16, queue_size);
DEF_SUBFIELD(dword10, 15, 0, queue_id);
DEF_SUBFIELD(dword11, 31, 16, interrupt_vector);
DEF_SUBBIT(dword11, 1, interrupt_en);
DEF_SUBBIT(dword11, 0, contiguous);
};
class CreateIoSubmissionQueueSubmission : public Submission {
public:
CreateIoSubmissionQueueSubmission() : Submission(AdminCommandOpcode::kCreateIoSubmissionQueue) {}
DEF_SUBFIELD(dword10, 31, 16, queue_size);
DEF_SUBFIELD(dword10, 15, 0, queue_id);
DEF_SUBFIELD(dword11, 31, 16, completion_queue_id);
// Only used for round-robin, which we don't support.
DEF_SUBFIELD(dword11, 2, 1, queue_prio);
DEF_SUBBIT(dword11, 0, contiguous);
};
class DeleteIoQueueSubmission : public Submission {
public:
explicit DeleteIoQueueSubmission(bool is_completion)
: Submission(is_completion ? AdminCommandOpcode::kDeleteIoCompletionQueue
: AdminCommandOpcode::kDeleteIoSubmissionQueue) {}
DEF_SUBFIELD(dword10, 15, 0, queue_id);
};
} // namespace nvme
#endif // SRC_DEVICES_BLOCK_DRIVERS_NVME_COMMANDS_QUEUE_H_