// 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_DEVICES_BLOCK_DRIVERS_AHCI_BUS_H_
#define SRC_DEVICES_BLOCK_DRIVERS_AHCI_BUS_H_

#include <lib/ddk/device.h>
#include <lib/ddk/io-buffer.h>
#include <lib/zx/pmt.h>
#include <lib/zx/vmo.h>
#include <zircon/types.h>

#include <fbl/macros.h>

namespace ahci {

class Bus {
 public:
  virtual ~Bus() {}

  DISALLOW_COPY_AND_ASSIGN_ALLOW_MOVE(Bus);

  // Configure the bus for use. Registers should be accessible after this call.
  virtual zx_status_t Configure(zx_device_t* parent) = 0;

  // Initialize io_buffer, returning the mapped physical and virtual addresses.
  // In parameters are the same as those of io_buffer_init().
  virtual zx_status_t IoBufferInit(io_buffer_t* buffer_, size_t size, uint32_t flags,
                                   zx_paddr_t* phys_out, void** virt_out) = 0;

  // Pin a set of pages for bus transaction initiators (if supported).
  // Parameters the same as zx_bti_pin();
  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) = 0;

  // Read or write a 32-bit register.
  // If the bus encounters an error, non-error status will be returned.
  // A bus error typically means the device is no longer accessible. This may be due to hot-
  // unplug and should be handled gracefully.
  virtual zx_status_t RegRead(size_t offset, uint32_t* val_out) = 0;
  virtual zx_status_t RegWrite(size_t offset, uint32_t val) = 0;

  // Wait on an interrupt from the bus's interrupt source.
  virtual zx_status_t InterruptWait() = 0;
  // Cancel a pending interrupt wait.
  virtual void InterruptCancel() = 0;

  // Non-virtual functions.

  // Wait until all bits in |mask| are cleared in |reg| or timeout expires.
  zx_status_t WaitForClear(size_t offset, uint32_t mask, zx::duration timeout);
  // Wait until one bit in |mask| is set in |reg| or timeout expires.
  zx_status_t WaitForSet(size_t offset, uint32_t mask, zx::duration timeout);

 protected:
  Bus() {}
};

}  // namespace ahci

#endif  // SRC_DEVICES_BLOCK_DRIVERS_AHCI_BUS_H_
