// Copyright 2023 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.
@available(added=HEAD)
library fuchsia.hardware.sdmmc;

type SdmmcMetadata = table {
    /// Maximum bus operating frequency. The SDMMC core driver will cap the bus frequency to this
    /// level. The default value is UINT32_MAX if no metadata is specified.
    1: max_frequency uint32;
    /// Host-specific speed capabilities. The default value is 0 (no flags) if no metadata is
    /// specified.
    2: speed_capabilities SdmmcHostPrefs;
    /// If true, utilize the on-device volatile cache. The default value is true if no metadata is
    /// specified. Ignored if the attached device or inserted card does not have storage.
    3: enable_cache bool;
    /// If true, this SDMMC controller corresponds to a removable card slot that may have an
    /// MMC/SD/SDIO card inserted or removed at any time. In this case, failure to probe during
    /// driver initialization is not considered fatal. The default value is false if no metadata is
    /// specified.
    4: removable bool;
    /// Use command packing (batching) up to this many commands. If zero, command packing is
    /// disabled. The default value is 16 if no metadata is specified. Ignored if the attached
    /// device or inserted card does not support command packing.
    5: max_command_packing uint32;
    // TODO(https://fxbug.dev/42084501): Remove this field after the Banjo-to-FIDL migration is
    /// complete. If true, use the FIDL SDMMC protocol. If false, use the Banjo SDMMC protocol. The
    /// default value is true if no metadata is specified.
    6: use_fidl bool;
};
