blob: 5d991af90f99e01cb1db6617291077a21888d53b [file] [log] [blame]
// Copyright 2018 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.
#include <fbl/alloc_checker.h>
#include <utility>
#include "vim-audio-utils.h"
namespace audio {
namespace vim2 {
fbl::RefPtr<Registers> Registers::Create(const pdev_protocol_t* pdev,
uint32_t which_mmio,
zx_status_t* out_res) {
ZX_DEBUG_ASSERT(pdev != nullptr);
mmio_buffer_t mmio;
*out_res = pdev_map_mmio_buffer(pdev, which_mmio, ZX_CACHE_POLICY_UNCACHED_DEVICE, &mmio);
if (*out_res != ZX_OK) {
return nullptr;
}
fbl::AllocChecker ac;
auto ret = fbl::AdoptRef(new (&ac) Registers(mmio));
if (!ac.check()) {
*out_res = ZX_ERR_NO_MEMORY;
return nullptr;
}
return ret;
}
fbl::RefPtr<RefCountedVmo> RefCountedVmo::Create(zx::vmo vmo) {
if (!vmo.is_valid()) {
return nullptr;
}
fbl::AllocChecker ac;
auto ret = fbl::AdoptRef(new (&ac) RefCountedVmo(std::move(vmo)));
if (!ac.check()) {
return nullptr;
}
return ret;
}
} // namespace vim2
} // namespace audio