// 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);
};
