1 // Copyright 2018 The Fuchsia Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #pragma once 6 7 #include <ddk/protocol/platform/device.h> 8 #include <ddk/protocol/platform-device-lib.h> 9 #include <ddktl/mmio.h> 10 #include <fbl/macros.h> 11 #include <fbl/ref_counted.h> 12 #include <fbl/ref_ptr.h> 13 #include <fbl/unique_ptr.h> 14 #include <lib/zx/vmo.h> 15 #include <zircon/compiler.h> 16 #include <zircon/types.h> 17 18 #include <utility> 19 20 namespace audio { 21 namespace vim2 { 22 23 class Registers : public fbl::RefCounted<Registers>, 24 public ddk::MmioBuffer { 25 public: 26 static fbl::RefPtr<Registers> Create(const pdev_protocol_t* pdev, 27 uint32_t which_mmio, 28 zx_status_t* out_res); 29 DISALLOW_COPY_ASSIGN_AND_MOVE(Registers); 30 31 private: 32 friend class fbl::RefPtr<Registers>; 33 Registers(mmio_buffer_t & mmio)34 Registers(mmio_buffer_t& mmio) : ddk::MmioBuffer(mmio) {} 35 ~Registers() = default; 36 }; 37 38 class RefCountedVmo : public fbl::RefCounted<RefCountedVmo>{ 39 public: 40 static fbl::RefPtr<RefCountedVmo> Create(zx::vmo vmo); 41 DISALLOW_COPY_ASSIGN_AND_MOVE(RefCountedVmo); 42 vmo()43 const zx::vmo& vmo() { return vmo_; } 44 45 private: 46 friend class fbl::RefPtr<RefCountedVmo>; 47 RefCountedVmo(zx::vmo vmo)48 explicit RefCountedVmo(zx::vmo vmo) : vmo_(std::move(vmo)) { } 49 ~RefCountedVmo() = default; 50 51 const zx::vmo vmo_; 52 }; 53 54 } // namespace vim2 55 } // namespace audio 56