#pragma once #include #include #include #include #include #include #include #include #include "hw/pcie.h" #include "lib/yellowstone/yellowstone.yunq.server.h" class YellowstoneServer : public YellowstoneServerBase { public: static glcr::ErrorOr> Create(); glcr::ErrorCode HandleGetAhciInfo(const Empty&, AhciInfo&) override; glcr::ErrorCode HandleGetDenali(const Empty&, DenaliInfo&) override; glcr::ErrorCode HandleRegisterEndpoint(const RegisterEndpointRequest&, Empty&) override; glcr::ErrorCode WaitDenaliRegistered(); glcr::ErrorCode WaitVictoriaFallsRegistered(); glcr::SharedPtr GetVFSClient(); private: // TODO: Store these in a data structure. z_cap_t denali_cap_ = 0; uint64_t device_id_ = 0; uint64_t lba_offset_ = 0; z_cap_t victoria_falls_cap_ = 0; glcr::SharedPtr vfs_client_; PciReader pci_reader_; Mutex has_denali_mutex_; Mutex has_victoriafalls_mutex_; YellowstoneServer(z_cap_t endpoint_cap, Mutex&& denali_mutex, Mutex&& victoriafalls_mutex); };