# -*- Mode: Python -*-
# vim: filetype=python
#
# This work is licensed under the terms of the GNU GPL, version 2 or later.
# See the COPYING file in the top-level directory.

##
# ********************
# Common machine types
# ********************
##

##
# @S390CpuEntitlement:
#
# An enumeration of CPU entitlements that can be assumed by a virtual
# S390 CPU
#
# Since: 8.2
##
{ 'enum': 'S390CpuEntitlement',
  'data': [ 'auto', 'low', 'medium', 'high' ] }

##
# @CpuTopologyLevel:
#
# An enumeration of CPU topology levels.
#
# @thread: thread level, which would also be called SMT level or
#     logical processor level.  The @threads option in
#     `SMPConfiguration` is used to configure the topology of this
#     level.
#
# @core: core level.  The @cores option in `SMPConfiguration` is used
#     to configure the topology of this level.
#
# @module: module level.  The @modules option in `SMPConfiguration` is
#     used to configure the topology of this level.
#
# @cluster: cluster level.  The @clusters option in `SMPConfiguration`
#     is used to configure the topology of this level.
#
# @die: die level.  The @dies option in `SMPConfiguration` is used to
#     configure the topology of this level.
#
# @socket: socket level, which would also be called package level.
#     The @sockets option in `SMPConfiguration` is used to configure
#     the topology of this level.
#
# @book: book level.  The @books option in `SMPConfiguration` is used
#     to configure the topology of this level.
#
# @drawer: drawer level.  The @drawers option in `SMPConfiguration` is
#     used to configure the topology of this level.
#
# @default: default level.  Some architectures will have default
#     topology settings (e.g., cache topology), and this special
#     level means following the architecture-specific settings.
#
# Since: 9.2
##
{ 'enum': 'CpuTopologyLevel',
  'data': [ 'thread', 'core', 'module', 'cluster', 'die',
            'socket', 'book', 'drawer', 'default' ] }

##
# @CacheLevelAndType:
#
# Caches a system may have.  The enumeration value here is the
# combination of cache level and cache type.
#
# @l1d: L1 data cache.
#
# @l1i: L1 instruction cache.
#
# @l2: L2 (unified) cache.
#
# @l3: L3 (unified) cache
#
# Since: 9.2
##
{ 'enum': 'CacheLevelAndType',
  'data': [ 'l1d', 'l1i', 'l2', 'l3' ] }

##
# @SmpCacheProperties:
#
# Cache information for SMP system.
#
# @cache: Cache name, which is the combination of cache level
#     and cache type.
#
# @topology: Cache topology level.  It accepts the CPU topology
#     enumeration as the parameter, i.e., CPUs in the same
#     topology container share the same cache.
#
# Since: 9.2
##
{ 'struct': 'SmpCacheProperties',
  'data': {
  'cache': 'CacheLevelAndType',
  'topology': 'CpuTopologyLevel' } }

##
# @SmpCachePropertiesWrapper:
#
# List wrapper of `SmpCacheProperties`.
#
# @caches: the list of `SmpCacheProperties`.
#
# Since 9.2
##
{ 'struct': 'SmpCachePropertiesWrapper',
  'data': { 'caches': ['SmpCacheProperties'] } }
