1176a9270SRobert Mustacchi /* 2176a9270SRobert Mustacchi * This file and its contents are supplied under the terms of the 3176a9270SRobert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0. 4176a9270SRobert Mustacchi * You may only use this file in accordance with the terms of version 5176a9270SRobert Mustacchi * 1.0 of the CDDL. 6176a9270SRobert Mustacchi * 7176a9270SRobert Mustacchi * A full copy of the text of the CDDL should have accompanied this 8176a9270SRobert Mustacchi * source. A copy of the CDDL is also available via the Internet at 9176a9270SRobert Mustacchi * http://www.illumos.org/license/CDDL. 10176a9270SRobert Mustacchi */ 11176a9270SRobert Mustacchi 12176a9270SRobert Mustacchi /* 13064d431aSRobert Mustacchi * Copyright 2024 Oxide Computer Company 14176a9270SRobert Mustacchi */ 15176a9270SRobert Mustacchi 16176a9270SRobert Mustacchi #ifndef _SMBIOS_TEST_H 17176a9270SRobert Mustacchi #define _SMBIOS_TEST_H 18176a9270SRobert Mustacchi 19176a9270SRobert Mustacchi /* 20176a9270SRobert Mustacchi * Test framework for SMBIOS tests 21176a9270SRobert Mustacchi */ 22176a9270SRobert Mustacchi 23176a9270SRobert Mustacchi #include <smbios.h> 24176a9270SRobert Mustacchi #include <sys/smbios.h> 25176a9270SRobert Mustacchi #include <sys/smbios_impl.h> 26176a9270SRobert Mustacchi #include <err.h> 27176a9270SRobert Mustacchi #include <stdint.h> 28176a9270SRobert Mustacchi #include <endian.h> 29176a9270SRobert Mustacchi #include <stdlib.h> 30176a9270SRobert Mustacchi 31176a9270SRobert Mustacchi #ifdef __cplusplus 32176a9270SRobert Mustacchi extern "C" { 33176a9270SRobert Mustacchi #endif 34176a9270SRobert Mustacchi 35176a9270SRobert Mustacchi /* 36176a9270SRobert Mustacchi * Number of bytes we allocate at a given time for an SMBIOS table. 37176a9270SRobert Mustacchi */ 38176a9270SRobert Mustacchi #define SMBIOS_TEST_ALLOC_SIZE 1024 39176a9270SRobert Mustacchi 40176a9270SRobert Mustacchi typedef struct smbios_test_table { 41176a9270SRobert Mustacchi smbios_entry_point_t stt_type; 42176a9270SRobert Mustacchi void *stt_data; 43176a9270SRobert Mustacchi size_t stt_buflen; 44176a9270SRobert Mustacchi size_t stt_offset; 45176a9270SRobert Mustacchi uint_t stt_nents; 46176a9270SRobert Mustacchi uint_t stt_version; 47176a9270SRobert Mustacchi uint_t stt_nextid; 48176a9270SRobert Mustacchi smbios_entry_t stt_entry; 49176a9270SRobert Mustacchi } smbios_test_table_t; 50176a9270SRobert Mustacchi 51176a9270SRobert Mustacchi /* 52176a9270SRobert Mustacchi * General Interfaces used to construct tables. 53176a9270SRobert Mustacchi */ 54176a9270SRobert Mustacchi extern smbios_test_table_t *smbios_test_table_init(smbios_entry_point_t, 55176a9270SRobert Mustacchi uint_t); 56176a9270SRobert Mustacchi extern void smbios_test_table_append_raw(smbios_test_table_t *, const void *, 57176a9270SRobert Mustacchi size_t); 58176a9270SRobert Mustacchi extern void smbios_test_table_append_string(smbios_test_table_t *, 59176a9270SRobert Mustacchi const char *); 60d53cdfabSRobert Mustacchi extern void smbios_test_table_str_fini(smbios_test_table_t *); 61176a9270SRobert Mustacchi extern uint16_t smbios_test_table_append(smbios_test_table_t *, const void *, 62176a9270SRobert Mustacchi size_t); 63176a9270SRobert Mustacchi extern void smbios_test_table_append_eot(smbios_test_table_t *); 64176a9270SRobert Mustacchi 65176a9270SRobert Mustacchi typedef boolean_t (*smbios_test_mktable_f)(smbios_test_table_t *); 66176a9270SRobert Mustacchi typedef boolean_t (*smbios_test_verify_f)(smbios_hdl_t *); 67176a9270SRobert Mustacchi 68176a9270SRobert Mustacchi typedef struct smbios_test { 69176a9270SRobert Mustacchi int st_entry; 70176a9270SRobert Mustacchi int st_tvers; 71176a9270SRobert Mustacchi int st_libvers; 72176a9270SRobert Mustacchi smbios_test_mktable_f st_mktable; 73176a9270SRobert Mustacchi boolean_t st_canopen; 74176a9270SRobert Mustacchi smbios_test_verify_f st_verify; 75176a9270SRobert Mustacchi const char *st_desc; 76176a9270SRobert Mustacchi } smbios_test_t; 77176a9270SRobert Mustacchi 78176a9270SRobert Mustacchi /* 79176a9270SRobert Mustacchi * Test functions 80176a9270SRobert Mustacchi */ 81176a9270SRobert Mustacchi extern boolean_t smbios_test_slot_mktable(smbios_test_table_t *); 82c6795799SRobert Mustacchi extern boolean_t smbios_test_slot_mktable_34_nopeers(smbios_test_table_t *); 83c6795799SRobert Mustacchi extern boolean_t smbios_test_slot_mktable_34_peers(smbios_test_table_t *); 84d53cdfabSRobert Mustacchi extern boolean_t smbios_test_slot_mktable_35(smbios_test_table_t *); 85176a9270SRobert Mustacchi extern boolean_t smbios_test_slot_verify(smbios_hdl_t *); 86c6795799SRobert Mustacchi extern boolean_t smbios_test_slot_verify_34_nopeers(smbios_hdl_t *); 87c6795799SRobert Mustacchi extern boolean_t smbios_test_slot_verify_34_peers(smbios_hdl_t *); 88d53cdfabSRobert Mustacchi extern boolean_t smbios_test_slot_verify_34_overrun(smbios_hdl_t *); 89d53cdfabSRobert Mustacchi extern boolean_t smbios_test_slot_verify_35(smbios_hdl_t *); 90d53cdfabSRobert Mustacchi 91176a9270SRobert Mustacchi extern boolean_t smbios_test_badvers_mktable(smbios_test_table_t *); 92d53cdfabSRobert Mustacchi extern boolean_t smbios_test_verify_badids(smbios_hdl_t *); 93176a9270SRobert Mustacchi 94176a9270SRobert Mustacchi extern boolean_t smbios_test_memdevice_mktable_32(smbios_test_table_t *); 95176a9270SRobert Mustacchi extern boolean_t smbios_test_memdevice_mktable_33(smbios_test_table_t *); 96176a9270SRobert Mustacchi extern boolean_t smbios_test_memdevice_mktable_33ext(smbios_test_table_t *); 976bc074b1SRobert Mustacchi extern boolean_t smbios_test_memdevice_mktable_37(smbios_test_table_t *); 98176a9270SRobert Mustacchi extern boolean_t smbios_test_memdevice_verify_32(smbios_hdl_t *); 99176a9270SRobert Mustacchi extern boolean_t smbios_test_memdevice_verify_32_33(smbios_hdl_t *); 1006bc074b1SRobert Mustacchi extern boolean_t smbios_test_memdevice_verify_32_37(smbios_hdl_t *); 101176a9270SRobert Mustacchi extern boolean_t smbios_test_memdevice_verify_33(smbios_hdl_t *); 102176a9270SRobert Mustacchi extern boolean_t smbios_test_memdevice_verify_33ext(smbios_hdl_t *); 1036bc074b1SRobert Mustacchi extern boolean_t smbios_test_memdevice_verify_37(smbios_hdl_t *); 104176a9270SRobert Mustacchi 105176a9270SRobert Mustacchi extern boolean_t smbios_test_pinfo_mktable_amd64(smbios_test_table_t *); 106176a9270SRobert Mustacchi extern boolean_t smbios_test_pinfo_verify_amd64(smbios_hdl_t *); 107176a9270SRobert Mustacchi extern boolean_t smbios_test_pinfo_mktable_riscv(smbios_test_table_t *); 108176a9270SRobert Mustacchi extern boolean_t smbios_test_pinfo_verify_riscv(smbios_hdl_t *); 109176a9270SRobert Mustacchi extern boolean_t smbios_test_pinfo_mktable_invlen1(smbios_test_table_t *); 110176a9270SRobert Mustacchi extern boolean_t smbios_test_pinfo_mktable_invlen2(smbios_test_table_t *); 111176a9270SRobert Mustacchi extern boolean_t smbios_test_pinfo_mktable_invlen3(smbios_test_table_t *); 112176a9270SRobert Mustacchi extern boolean_t smbios_test_pinfo_mktable_invlen4(smbios_test_table_t *); 113176a9270SRobert Mustacchi extern boolean_t smbios_test_pinfo_verify_invlen1(smbios_hdl_t *); 114176a9270SRobert Mustacchi extern boolean_t smbios_test_pinfo_verify_invlen2(smbios_hdl_t *); 115176a9270SRobert Mustacchi extern boolean_t smbios_test_pinfo_verify_invlen3(smbios_hdl_t *); 116176a9270SRobert Mustacchi extern boolean_t smbios_test_pinfo_verify_invlen4(smbios_hdl_t *); 117176a9270SRobert Mustacchi extern boolean_t smbios_test_pinfo_verify_badtype(smbios_hdl_t *); 118176a9270SRobert Mustacchi 119d53cdfabSRobert Mustacchi extern boolean_t smbios_test_strprop_mktable_invlen1(smbios_test_table_t *); 120d53cdfabSRobert Mustacchi extern boolean_t smbios_test_strprop_mktable_invlen2(smbios_test_table_t *); 121d53cdfabSRobert Mustacchi extern boolean_t smbios_test_strprop_mktable_badstr(smbios_test_table_t *); 122d53cdfabSRobert Mustacchi extern boolean_t smbios_test_strprop_mktable_basic(smbios_test_table_t *); 123d53cdfabSRobert Mustacchi extern boolean_t smbios_test_strprop_verify_invlen1(smbios_hdl_t *); 124d53cdfabSRobert Mustacchi extern boolean_t smbios_test_strprop_verify_invlen2(smbios_hdl_t *); 125d53cdfabSRobert Mustacchi extern boolean_t smbios_test_strprop_verify_badstr(smbios_hdl_t *); 126d53cdfabSRobert Mustacchi extern boolean_t smbios_test_strprop_verify_badtype(smbios_hdl_t *); 127d53cdfabSRobert Mustacchi extern boolean_t smbios_test_strprop_verify_basic(smbios_hdl_t *); 128d53cdfabSRobert Mustacchi 129d53cdfabSRobert Mustacchi extern boolean_t smbios_test_fwinfo_mktable_invlen_base(smbios_test_table_t *); 130d53cdfabSRobert Mustacchi extern boolean_t smbios_test_fwinfo_mktable_invlen_comps(smbios_test_table_t *); 131d53cdfabSRobert Mustacchi extern boolean_t smbios_test_fwinfo_mktable_nocomps(smbios_test_table_t *); 132d53cdfabSRobert Mustacchi extern boolean_t smbios_test_fwinfo_mktable_comps(smbios_test_table_t *); 133d53cdfabSRobert Mustacchi extern boolean_t smbios_test_fwinfo_verify_invlen_base(smbios_hdl_t *); 134d53cdfabSRobert Mustacchi extern boolean_t smbios_test_fwinfo_verify_invlen_comps(smbios_hdl_t *); 135d53cdfabSRobert Mustacchi extern boolean_t smbios_test_fwinfo_verify_badtype(smbios_hdl_t *); 136d53cdfabSRobert Mustacchi extern boolean_t smbios_test_fwinfo_verify_nocomps(smbios_hdl_t *); 137d53cdfabSRobert Mustacchi extern boolean_t smbios_test_fwinfo_verify_comps(smbios_hdl_t *); 138d53cdfabSRobert Mustacchi 139d53cdfabSRobert Mustacchi extern boolean_t smbios_test_verify_strings(smbios_hdl_t *); 140d53cdfabSRobert Mustacchi 141d53cdfabSRobert Mustacchi extern boolean_t smbios_test_chassis_mktable_invlen_base(smbios_test_table_t *); 142d53cdfabSRobert Mustacchi extern boolean_t smbios_test_chassis_mktable_base(smbios_test_table_t *); 143851677fbSRobert Mustacchi extern boolean_t smbios_test_chassis_mktable_part(smbios_test_table_t *); 144d53cdfabSRobert Mustacchi extern boolean_t smbios_test_chassis_mktable_comps(smbios_test_table_t *); 145d53cdfabSRobert Mustacchi extern boolean_t smbios_test_chassis_mktable_sku(smbios_test_table_t *); 146d53cdfabSRobert Mustacchi extern boolean_t smbios_test_chassis_mktable_sku_nocomps(smbios_test_table_t *); 147d53cdfabSRobert Mustacchi extern boolean_t smbios_test_chassis_verify_invlen(smbios_hdl_t *); 148d53cdfabSRobert Mustacchi extern boolean_t smbios_test_chassis_verify_base(smbios_hdl_t *); 149d53cdfabSRobert Mustacchi extern boolean_t smbios_test_chassis_verify_comps(smbios_hdl_t *); 150d53cdfabSRobert Mustacchi extern boolean_t smbios_test_chassis_verify_sku_nocomps(smbios_hdl_t *); 151d53cdfabSRobert Mustacchi extern boolean_t smbios_test_chassis_verify_sku(smbios_hdl_t *); 152d53cdfabSRobert Mustacchi 1531d1fc316SRobert Mustacchi extern boolean_t smbios_test_proc_mktable_25(smbios_test_table_t *); 1541d1fc316SRobert Mustacchi extern boolean_t smbios_test_proc_mktable_36(smbios_test_table_t *); 155*49f72993SRobert Mustacchi extern boolean_t smbios_test_proc_mktable_38(smbios_test_table_t *); 1561d1fc316SRobert Mustacchi extern boolean_t smbios_test_proc_verify_25(smbios_hdl_t *); 1571d1fc316SRobert Mustacchi extern boolean_t smbios_test_proc_verify_36(smbios_hdl_t *); 1581d1fc316SRobert Mustacchi extern boolean_t smbios_test_proc_verify_36_25(smbios_hdl_t *); 159*49f72993SRobert Mustacchi extern boolean_t smbios_test_proc_verify_38(smbios_hdl_t *); 1601d1fc316SRobert Mustacchi 161679a141eSToomas Soome extern boolean_t smbios_test_extmem_mktable_invlen_cs(smbios_test_table_t *); 162679a141eSToomas Soome extern boolean_t smbios_test_extmem_mktable_nocs(smbios_test_table_t *); 163679a141eSToomas Soome extern boolean_t smbios_test_extmem_mktable_cs(smbios_test_table_t *); 164679a141eSToomas Soome extern boolean_t smbios_test_extmem_verify_invlen_cs(smbios_hdl_t *); 165679a141eSToomas Soome extern boolean_t smbios_test_extmem_verify_nocs(smbios_hdl_t *); 166679a141eSToomas Soome extern boolean_t smbios_test_extmem_verify_cs(smbios_hdl_t *); 167679a141eSToomas Soome 168064d431aSRobert Mustacchi extern boolean_t smbios_test_addinfo_mktable_noent(smbios_test_table_t *); 169064d431aSRobert Mustacchi extern boolean_t smbios_test_addinfo_mktable_ents(smbios_test_table_t *); 170064d431aSRobert Mustacchi extern boolean_t smbios_test_addinfo_mktable_invlen_base(smbios_test_table_t *); 171064d431aSRobert Mustacchi extern boolean_t smbios_test_addinfo_mktable_invlen_ent(smbios_test_table_t *); 172064d431aSRobert Mustacchi extern boolean_t smbios_test_addinfo_mktable_invlen_multient( 173064d431aSRobert Mustacchi smbios_test_table_t *); 174064d431aSRobert Mustacchi extern boolean_t smbios_test_addinfo_mktable_invlen_entdata( 175064d431aSRobert Mustacchi smbios_test_table_t *); 176064d431aSRobert Mustacchi extern boolean_t smbios_test_addinfo_verify_noent(smbios_hdl_t *); 177064d431aSRobert Mustacchi extern boolean_t smbios_test_addinfo_verify_ents(smbios_hdl_t *); 178064d431aSRobert Mustacchi extern boolean_t smbios_test_addinfo_verify_invlen_base(smbios_hdl_t *); 179064d431aSRobert Mustacchi extern boolean_t smbios_test_addinfo_verify_invlen_ent(smbios_hdl_t *); 180064d431aSRobert Mustacchi extern boolean_t smbios_test_addinfo_verify_invlen_multient(smbios_hdl_t *); 181064d431aSRobert Mustacchi extern boolean_t smbios_test_addinfo_verify_invlen_entdata(smbios_hdl_t *); 182064d431aSRobert Mustacchi 183176a9270SRobert Mustacchi #ifdef __cplusplus 184176a9270SRobert Mustacchi } 185176a9270SRobert Mustacchi #endif 186176a9270SRobert Mustacchi 187176a9270SRobert Mustacchi #endif /* _SMBIOS_TEST_H */ 188