root/usr/src/lib/fm/topo/modules/common/dimm/topo_dimm.h
/*
 * This file and its contents are supplied under the terms of the
 * Common Development and Distribution License ("CDDL"), version 1.0.
 * You may only use this file in accordance with the terms of version
 * 1.0 of the CDDL.
 *
 * A full copy of the text of the CDDL should have accompanied this
 * source.  A copy of the CDDL is also available via the Internet at
 * http://www.illumos.org/license/CDDL.
 */

/*
 * Copyright 2023 Oxide Computer Company
 */

#ifndef _TOPO_DIMM_H
#define _TOPO_DIMM_H

/*
 * This is an interface to the topo DIMM enumerator. The purpose of this module
 * is to have a common interface to create DIMMs that potentially consumes both
 * platform-specific information (e.g. zen_umc, imc, etc.) and general
 * information (e.g. various SPD revisions, SMBIOS, etc).
 *
 * Currently, the primary supported enumeration entry point is the DIMM entry
 * point. The parent should not create the range. That will be taken care of
 * automatically.
 */

#ifdef __cplusplus
extern "C" {
#endif

#define TOPO_MOD_DIMM   "dimm"
#define TOPO_MOD_DIMM_VERS      1

/*
 * Information to enumerate a given DIMM. This will expand as we have more
 * integration with other variants (and fold SMBIOS information, this'll expand.
 * This structure should be consider private and not a stable interface.
 */
typedef struct {
        uint32_t td_nspd;
        const uint8_t *td_spd;
} topo_dimm_t;

#ifdef __cplusplus
}
#endif

#endif /* _TOPO_DIMM_H */