/*
 * Copyright (C) 2024 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, embodiment or
 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 *
 * SPDX-License-Identifier: Apache-2.0 OR BSD-2-Clause-Patent
 *
 * This file is dual-licensed under Apache 2.0 and BSD-2-Clause-Patent.
 * You may choose to use this file under the terms of either:
 *  (a) the Apache License, Version 2.0, or
 *  (b) the BSD 2-Clause Patent License.
 *
 * Unless you expressly elect the BSD-2-Clause-Patent terms, the Apache-2.0
 * license terms apply by default.
 */

#ifndef __GBL_EFI_COMMON_H__
#define __GBL_EFI_COMMON_H__

#define GBL_PROTOCOL_REVISION(major, minor) ((((major) & 0xFFFF) << 16) | ((minor) & 0xFFFF))

#define EFI_ENUM(camelname, width, ...) \
  enum { __VA_ARGS__ };                 \
  typedef width camelname

#endif /* __GBL_EFI_COMMON_H__ */
