From patchwork Thu Mar 28 09:05:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xin Li X-Patchwork-Id: 10874581 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 34DB71708 for ; Thu, 28 Mar 2019 09:07:17 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1E58828683 for ; Thu, 28 Mar 2019 09:07:17 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1278B28C9A; Thu, 28 Mar 2019 09:07:17 +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 F03E128BF2 for ; Thu, 28 Mar 2019 09:07:12 +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 1h9QyQ-00006x-2W; Thu, 28 Mar 2019 09:05:22 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1h9QyP-00006p-9g for xen-devel@lists.xen.org; Thu, 28 Mar 2019 09:05:21 +0000 X-Inumbo-ID: 9bf9307e-5138-11e9-bc90-bc764e045a96 Received: from mail-wr1-x443.google.com (unknown [2a00:1450:4864:20::443]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS id 9bf9307e-5138-11e9-bc90-bc764e045a96; Thu, 28 Mar 2019 09:05:19 +0000 (UTC) Received: by mail-wr1-x443.google.com with SMTP id w1so21875327wrp.2 for ; Thu, 28 Mar 2019 02:05:19 -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=IizYqv2cCVO+kYFqH6ndyARK3By5rL+sRJu4jL1FbTk=; b=nyhGaaHSFC7mD3U2LiGEY/xoaibkQGKZYkwQVFwI9G8ZK6GqXPIHeOJ3RPuJeMBJV2 f2yRTCbYlOYcsa0OXA5KSQ04ko+sBsm3aAk91vpLvgmD34BbWR+QRz/PzEeLrunwZjGq PAgxRKxpVRcOw1f6Mm+EtLINkbvcMW/ss7rP63ZHuWMehhOWpVx5pdA96CDfFOWrgWWu mnv89kswvwz4CxaoICUuOJCXr+LX17mfiQiLEw7bJ4V+eLRxgwCh2NqEpejjwzX0wzxu k2u5F6waoR7LVY4VTPdDUpdDW99qaqa0T5+JkpuAr2dHwdeur9mcj6R0m3wEYUgiFbbV BNeQ== 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=IizYqv2cCVO+kYFqH6ndyARK3By5rL+sRJu4jL1FbTk=; b=A9VftjOay/HbigMhKa9Co2dwvPK0dfkTH5bBex+YQi4rg0V6dIbnTgDw1nPwhHuMUi znIidAINEb2OUJBSKE2eZvxUh3oiW11muPvd2yzaeU5q8YDTRgH6npp2sA6HiBqWdTI+ Enp+fmmhx/JlfjWRX7AlniNbyLdartCLg17XhLKNzdaSn1xhcaSJIKn8txW+gweqDXL4 GA33RENNUopXydqf7+8UkeKjTXB3Pm80Tr+jb0qeC+h8wvWiUC4DDRjk2BKzSLp85s7W j8GRoXAlKwXjQq6qf9OJ+/99e2nv5YiyTjeEz1cC7F3PMg0ZmvWSu3rmkEf2AZ68P3up qGSg== X-Gm-Message-State: APjAAAVthPxSZKyS2IUDDHmkiD+7TWMJZZXA5AjlnjbvGhME74QAJIvi ccYk/amw1XqaS067+ZY0z1pEIJlx X-Google-Smtp-Source: APXvYqyo0t5He84/7xeXVgALxNT6e/s3mAo+9PXDqMReecRCW9hCU/vmWgmF7YMnoOlYXpRatZbMgQ== X-Received: by 2002:a5d:6a12:: with SMTP id m18mr8598262wru.325.1553763918222; Thu, 28 Mar 2019 02:05:18 -0700 (PDT) Received: from lcy2-dt16.xenrtcloud ([185.25.67.249]) by smtp.gmail.com with ESMTPSA id e1sm35511093wrw.66.2019.03.28.02.05.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 28 Mar 2019 02:05:17 -0700 (PDT) From: Xin Li X-Google-Original-From: Xin Li To: xen-devel@lists.xen.org Date: Thu, 28 Mar 2019 09:05:06 +0000 Message-Id: <20190328090506.26035-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 Acked-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..226c38efb2 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; + uint32_t 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(struct smbios_type_2); + + 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); + } + else + /* Only present when passed in or with customized string */ + return (start - sizeof(struct smbios_type_2)); } /* 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"