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

library fuchsia.virtualization;

using zx;

/// Contains a memory statistic for the balloon device.
struct MemStat {
    uint16 tag;
    uint64 val;
};

/// A `BalloonController` controls a guest instance's memory balloon.
[Discoverable]
protocol BalloonController {
    /// Get the number of pages in the memory balloon.
    GetNumPages() -> (uint32 num_pages);

    /// Request a number of pages to be supplied to the memory balloon.
    ///
    /// If `num_pages` is greater than the current value, the guest instance will
    /// provide additional pages to the memory balloon. If `num_pages` is less
    /// than the current value, the guest instance is free to reclaim pages from
    /// the memory balloon.
    RequestNumPages(uint32 num_pages);

    /// Get memory statistics of the guest instance.
    GetMemStats() -> (zx.status status, vector<MemStat>? mem_stats);
};
