From patchwork Fri Mar 29 03:28:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xin Li X-Patchwork-Id: 10876317 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 07AAC17E1 for ; Fri, 29 Mar 2019 03:31:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E551229095 for ; Fri, 29 Mar 2019 03:31:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D9618290A0; Fri, 29 Mar 2019 03:31:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 6DB7929098 for ; Fri, 29 Mar 2019 03:31:23 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1h9iCb-00047g-1I; Fri, 29 Mar 2019 03:29:09 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1h9iCZ-00047b-L6 for xen-devel@lists.xen.org; Fri, 29 Mar 2019 03:29:07 +0000 X-Inumbo-ID: cd96666d-51d2-11e9-bc90-bc764e045a96 Received: from mail-wm1-x342.google.com (unknown [2a00:1450:4864:20::342]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS id cd96666d-51d2-11e9-bc90-bc764e045a96; Fri, 29 Mar 2019 03:29:05 +0000 (UTC) Received: by mail-wm1-x342.google.com with SMTP id f3so938216wmj.4 for ; Thu, 28 Mar 2019 20:29:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=QIeL1ed6AhrpZCHRZ9U05emCm6OB99Q6MNAlcZnK/BM=; b=MMt0iZP38ydM529h8cpUfSNzZLWY2Vy0yiEh+ZycbJrMtRO12LJfiBcZhf74ZJYmU5 HXBDn4Fko9uqfXD1O0ezp8OL2/1xvgeQWJERqC+69mhRQGsCUqgggUESBUCUveHk0mwh 71IFnnOXoxz0ijHz/LfHE8RbmriVONjqvJcCOJfuJf0zBMiQhm9/PgDmgEvV3fKgA2bU zFkTDpAN/y8ijBynnIFxnNaEqPBq62jZixoMsartH4u1u2JcEc8K6TRcLVYenn+urHPu gxq/G8f5AvOmhLf1QSW7FY85K1WIe3gLMHZUfMXVJj7LDudYzxs1ucU5QAzo/3E0l1MF 33Zg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=QIeL1ed6AhrpZCHRZ9U05emCm6OB99Q6MNAlcZnK/BM=; b=FH8lVufostFkGrmVaKsUlwFx55b37/aTzi2mr9dCq1kFqNdk3SN/8spRdpHkVf5LrF 9kZ5B5Gqhmxaj1K+ANKjVCqXp9czuCvyy2Au8PxL6OCFAIXpkox6loEbolSgHhbIWuMN vrC+nKGoKQXsHXn9Qqe+VzhdURtLgYaaDphMCWnExcxDxVBuQL2FrRYy4Tjq2gYRsvew u8P44uyNsC0/17hlu/g0OpfJOL7tta//Bhy/QaCSOZq+vfyHlwDqTgXLoSuQ/rjgvtPO Jq2SAPPvLHjbEcl4WU5rD0sRWBFZ4pYfaqqXSP8TRFW9M3QmJNbMF8Y4nCoK+fKuFn1q +0xg== X-Gm-Message-State: APjAAAWZvxBc0CzauxiohJcVgf6cIOP4BEINTpRqrJesWQ3gylGQmH/p Ai6JwCg2PUIbwP2EtCPNkiOHxENS2iA= X-Google-Smtp-Source: APXvYqzQiGAVFfu/qOz1IFzWfEazR9Up21C0aTt8kVl6yu0YNmSklXpsq138QBge0dKoJP82Y+8f2A== X-Received: by 2002:a1c:7e10:: with SMTP id z16mr2079240wmc.117.1553830143936; Thu, 28 Mar 2019 20:29:03 -0700 (PDT) Received: from lcy2-dt16.xenrtcloud ([185.25.67.249]) by smtp.gmail.com with ESMTPSA id f128sm841369wme.28.2019.03.28.20.29.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 28 Mar 2019 20:29:02 -0700 (PDT) From: Xin Li X-Google-Original-From: Xin Li To: xen-devel@lists.xen.org Date: Fri, 29 Mar 2019 03:28:57 +0000 Message-Id: <20190329032857.14596-1-xin.li@citrix.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Subject: [Xen-devel] [PATCH v2 1/1] hvmloader: add SMBIOS type 2 info for customized string X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Xin Li , Sergey Dyasli , Andrew Cooper , Jan Beulich , Igor Druzhinin Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP Extend smbios type 2 struct to match specification, add support to write it when customized string provided and no smbios passed in. Signed-off-by: Xin Li Reviewed-by: Jan Beulich --- CC: Jan Beulich CC: Igor Druzhinin CC: Sergey Dyasli CC: Andrew Cooper v2 1: write the struct if any of the strings is provided 2: add contained_handles as flexible array member 3: update commit message and fix style issue --- tools/firmware/hvmloader/smbios.c | 69 ++++++++++++++++++++++++- tools/firmware/hvmloader/smbios_types.h | 7 +++ xen/include/public/hvm/hvm_xs_strings.h | 6 +++ 3 files changed, 80 insertions(+), 2 deletions(-) diff --git a/tools/firmware/hvmloader/smbios.c b/tools/firmware/hvmloader/smbios.c index 40d8399be1..97a054e9e3 100644 --- a/tools/firmware/hvmloader/smbios.c +++ b/tools/firmware/hvmloader/smbios.c @@ -497,9 +497,11 @@ static void * smbios_type_2_init(void *start) { struct smbios_type_2 *p = (struct smbios_type_2 *)start; + const char *s; uint8_t *ptr; void *pts; uint32_t length; + unsigned int counter = 0; pts = get_smbios_pt_struct(2, &length); if ( (pts != NULL)&&(length > 0) ) @@ -518,8 +520,71 @@ smbios_type_2_init(void *start) return (start + length); } - /* Only present when passed in */ - return start; + memset(p, 0, sizeof(*p)); + p->header.type = 2; + p->header.length = sizeof(struct smbios_type_2); + p->header.handle = SMBIOS_HANDLE_TYPE2; + p->feature_flags = 0x09; /* Board is a hosting board and replaceable */ + p->chassis_handle = SMBIOS_HANDLE_TYPE3; + p->board_type = 0x0a; /* Motherboard */ + start += sizeof(*p); + + s = xenstore_read(HVM_XS_BASEBOARD_MANUFACTURER, NULL); + if ( (s != NULL) && (*s != '\0') ) + { + strcpy(start, s); + start += strlen(s) + 1; + p->manufacturer_str = ++counter; + } + + s = xenstore_read(HVM_XS_BASEBOARD_PRODUCT_NAME, NULL); + if ( (s != NULL) && (*s != '\0') ) + { + strcpy(start, s); + start += strlen(s) + 1; + p->product_name_str = ++counter; + } + + s = xenstore_read(HVM_XS_BASEBOARD_VERSION, NULL); + if ( (s != NULL) && (*s != '\0') ) + { + strcpy(start, s); + start += strlen(s) + 1; + p->version_str = ++counter; + } + + s = xenstore_read(HVM_XS_BASEBOARD_SERIAL_NUMBER, NULL); + if ( (s != NULL) && (*s != '\0') ) + { + strcpy(start, s); + start += strlen(s) + 1; + p->serial_number_str = ++counter; + } + + s = xenstore_read(HVM_XS_BASEBOARD_ASSET_TAG, NULL); + if ( (s != NULL) && (*s != '\0') ) + { + strcpy(start, s); + start += strlen(s) + 1; + p->asset_tag_str = ++counter; + } + + s = xenstore_read(HVM_XS_BASEBOARD_LOCATION_IN_CHASSIS, NULL); + if ( (s != NULL) && (*s != '\0') ) + { + strcpy(start, s); + start += strlen(s) + 1; + p->location_in_chassis_str = ++counter; + } + + if ( counter ) + { + *(uint8_t *)start = 0; + return start + 1; + } + + /* Only present when passed in or with customized string */ + return start - sizeof(*p); } /* Type 3 -- System Enclosure */ diff --git a/tools/firmware/hvmloader/smbios_types.h b/tools/firmware/hvmloader/smbios_types.h index acb63e2fe9..7c648ece71 100644 --- a/tools/firmware/hvmloader/smbios_types.h +++ b/tools/firmware/hvmloader/smbios_types.h @@ -90,6 +90,13 @@ struct smbios_type_2 { uint8_t product_name_str; uint8_t version_str; uint8_t serial_number_str; + uint8_t asset_tag_str; + uint8_t feature_flags; + uint8_t location_in_chassis_str; + uint16_t chassis_handle; + uint8_t board_type; + uint8_t contained_handle_count; + uint16_t contained_handles[]; } __attribute__ ((packed)); /* System Enclosure - Contained Elements */ diff --git a/xen/include/public/hvm/hvm_xs_strings.h b/xen/include/public/hvm/hvm_xs_strings.h index fea1dd4407..fba2546424 100644 --- a/xen/include/public/hvm/hvm_xs_strings.h +++ b/xen/include/public/hvm/hvm_xs_strings.h @@ -69,6 +69,12 @@ #define HVM_XS_SYSTEM_PRODUCT_NAME "bios-strings/system-product-name" #define HVM_XS_SYSTEM_VERSION "bios-strings/system-version" #define HVM_XS_SYSTEM_SERIAL_NUMBER "bios-strings/system-serial-number" +#define HVM_XS_BASEBOARD_MANUFACTURER "bios-strings/baseboard-manufacturer" +#define HVM_XS_BASEBOARD_PRODUCT_NAME "bios-strings/baseboard-product-name" +#define HVM_XS_BASEBOARD_VERSION "bios-strings/baseboard-version" +#define HVM_XS_BASEBOARD_SERIAL_NUMBER "bios-strings/baseboard-serial-number" +#define HVM_XS_BASEBOARD_ASSET_TAG "bios-strings/baseboard-asset-tag" +#define HVM_XS_BASEBOARD_LOCATION_IN_CHASSIS "bios-strings/baseboard-location-in-chassis" #define HVM_XS_ENCLOSURE_MANUFACTURER "bios-strings/enclosure-manufacturer" #define HVM_XS_ENCLOSURE_SERIAL_NUMBER "bios-strings/enclosure-serial-number" #define HVM_XS_ENCLOSURE_ASSET_TAG "bios-strings/enclosure-asset-tag"