[Denali] Add identify device command.

This commit is contained in:
Drew Galbraith 2023-12-08 14:30:08 -08:00
parent 81469496d1
commit d90c8eb1ef
9 changed files with 109 additions and 44 deletions

View file

@ -0,0 +1,39 @@
#pragma once
#include <glacier/container/array_view.h>
#include <glacier/status/error.h>
#include <mammoth/util/memory_region.h>
#include <ztypes.h>
#include "ahci/ahci.h"
#include "ahci/command.h"
class AhciPort {
public:
AhciPort() {}
// Caller retains ownership of the pointer.
AhciPort(AhciPortHba* port_struct);
void DumpInfo();
bool IsSata() { return port_struct_->signature == 0x101; }
bool IsInit() { return port_struct_ != nullptr && command_structures_; }
glcr::ErrorCode IssueCommand(Command* command);
void HandleIrq();
AhciPort(const AhciPort&) = delete;
AhciPort& operator=(const AhciPort&) = delete;
private:
volatile AhciPortHba* port_struct_ = nullptr;
mmth::OwnedMemoryRegion command_structures_;
volatile CommandList* command_list_ = nullptr;
volatile ReceivedFis* received_fis_ = nullptr;
glcr::ArrayView<CommandTable> command_tables_;
Command* commands_[32];
uint32_t commands_issued_ = 0;
};