| // 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 |