// Copyright 2019 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.

#ifndef SRC_STORAGE_BLOCK_DRIVERS_AHCI_PCI_BUS_H_
#define SRC_STORAGE_BLOCK_DRIVERS_AHCI_PCI_BUS_H_

#include <lib/device-protocol/pci.h>
#include <lib/mmio/mmio.h>
#include <lib/zx/bti.h>
#include <lib/zx/interrupt.h>
#include <zircon/types.h>

#include <ddk/protocol/pci.h>

#include "bus.h"

namespace ahci {

class PciBus : public Bus {
 public:
  virtual ~PciBus() override;
  virtual zx_status_t Configure(zx_device_t* parent) override;
  virtual zx_status_t IoBufferInit(io_buffer_t* buffer_, size_t size, uint32_t flags,
                                   zx_paddr_t* phys_out, void** virt_out) override;
  virtual zx_status_t BtiPin(uint32_t options, const zx::unowned_vmo& vmo, uint64_t offset,
                             uint64_t size, zx_paddr_t* addrs, size_t addrs_count,
                             zx::pmt* pmt_out) override;

  virtual zx_status_t RegRead(size_t offset, uint32_t* val_out) override;
  virtual zx_status_t RegWrite(size_t offset, uint32_t val) override;

  virtual zx_status_t InterruptWait() override;
  virtual void InterruptCancel() override;

 private:
  pci_protocol_t pci_;
  std::optional<ddk::MmioBuffer> mmio_;
  zx::bti bti_;
  zx::interrupt irq_;
};

}  // namespace ahci

#endif  // SRC_STORAGE_BLOCK_DRIVERS_AHCI_PCI_BUS_H_
