亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? smbios.c

?? xen 3.2.2 源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * smbios.c - Generate SMBIOS tables for Xen HVM domU's. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Copyright (C) IBM Corporation, 2006 * * Authors: Andrew D. Ball <aball@us.ibm.com> */#include <stdint.h>#include <xen/version.h>#include "smbios_types.h"#include "util.h"#include "hypercall.h"#include "e820.h"static intwrite_smbios_tables(void *start,                    uint32_t vcpus, uint64_t memsize,                    uint8_t uuid[16], char *xen_version,                    uint32_t xen_major_version, uint32_t xen_minor_version);static voidget_cpu_manufacturer(char *buf, int len);static voidsmbios_entry_point_init(void *start,                        uint16_t max_structure_size,                        uint16_t structure_table_length,                        uint32_t structure_table_address,                        uint16_t number_of_structures);static void *smbios_type_0_init(void *start, const char *xen_version,                   uint32_t xen_major_version, uint32_t xen_minor_version);static void *smbios_type_1_init(void *start, const char *xen_version,                    uint8_t uuid[16]);static void *smbios_type_3_init(void *start);static void *smbios_type_4_init(void *start, unsigned int cpu_number,                   char *cpu_manufacturer);static void *smbios_type_16_init(void *start, uint32_t memory_size_mb);static void *smbios_type_17_init(void *start, uint32_t memory_size_mb);static void *smbios_type_19_init(void *start, uint32_t memory_size_mb);static void *smbios_type_20_init(void *start, uint32_t memory_size_mb);static void *smbios_type_32_init(void *start);static void *smbios_type_127_init(void *start);static voidget_cpu_manufacturer(char *buf, int len){    char id[12];    uint32_t eax = 0;    cpuid(0, &eax, (uint32_t *)&id[0], (uint32_t *)&id[8],          (uint32_t *)&id[4]);    if (memcmp(id, "GenuineIntel", 12) == 0)        strncpy(buf, "Intel", len);    else if (memcmp(id, "AuthenticAMD", 12) == 0)        strncpy(buf, "AMD", len);    else        strncpy(buf, "unknown", len);}static intwrite_smbios_tables(void *start,                    uint32_t vcpus, uint64_t memsize,                    uint8_t uuid[16], char *xen_version,                    uint32_t xen_major_version, uint32_t xen_minor_version){    unsigned cpu_num, nr_structs = 0, max_struct_size = 0;    char *p, *q;    char cpu_manufacturer[15];    get_cpu_manufacturer(cpu_manufacturer, 15);    p = (char *)start + sizeof(struct smbios_entry_point);#define do_struct(fn) do {                      \    q = (fn);                                   \    nr_structs++;                               \    if ( (q - p) > max_struct_size )            \        max_struct_size = q - p;                \    p = q;                                      \} while (0)    do_struct(smbios_type_0_init(p, xen_version, xen_major_version,                                 xen_minor_version));    do_struct(smbios_type_1_init(p, xen_version, uuid));    do_struct(smbios_type_3_init(p));    for ( cpu_num = 1; cpu_num <= vcpus; cpu_num++ )        do_struct(smbios_type_4_init(p, cpu_num, cpu_manufacturer));    do_struct(smbios_type_16_init(p, memsize));    do_struct(smbios_type_17_init(p, memsize));    do_struct(smbios_type_19_init(p, memsize));    do_struct(smbios_type_20_init(p, memsize));    do_struct(smbios_type_32_init(p));    do_struct(smbios_type_127_init(p));#undef do_struct    smbios_entry_point_init(        start, max_struct_size,        (p - (char *)start) - sizeof(struct smbios_entry_point),        SMBIOS_PHYSICAL_ADDRESS + sizeof(struct smbios_entry_point),        nr_structs);    return ((char *)p - (char *)start);}/* Calculate how much pseudo-physical memory (in MB) is allocated to us. */static uint64_tget_memsize(void){    struct e820entry *map = HVM_E820;    uint8_t num_entries = *HVM_E820_NR;    uint64_t memsize = 0;    int i;    /*     * Walk through e820map, ignoring any entries that aren't marked     * as usable or reserved.     */    for ( i = 0; i < num_entries; i++ )    {        if ( (map->type == E820_RAM) || (map->type == E820_RESERVED) )            memsize += map->size;        map++;    }    /*     * Round up to the nearest MB.  The user specifies domU pseudo-physical      * memory in megabytes, so not doing this could easily lead to reporting      * one less MB than the user specified.     */    return (memsize + (1 << 20) - 1) >> 20;}inthvm_write_smbios_tables(void){    xen_domain_handle_t uuid;    uint16_t xen_major_version, xen_minor_version;    uint32_t xen_version;    char xen_extra_version[XEN_EXTRAVERSION_LEN];    /* guess conservatively on buffer length for Xen version string */    char xen_version_str[80];    /* temporary variables used to build up Xen version string */    char *p = NULL; /* points to next point of insertion */    unsigned len = 0; /* length of string already composed */    char tmp[16]; /* holds result of itoa() */    unsigned tmp_len; /* length of next string to add */    hypercall_xen_version(XENVER_guest_handle, uuid);    BUILD_BUG_ON(sizeof(xen_domain_handle_t) != 16);    /* xen_version major and minor */    xen_version = hypercall_xen_version(XENVER_version, NULL);    xen_major_version = (uint16_t) (xen_version >> 16);    xen_minor_version = (uint16_t) xen_version;    hypercall_xen_version(XENVER_extraversion, xen_extra_version);    /* build up human-readable Xen version string */    p = xen_version_str;    len = 0;    itoa(tmp, xen_major_version);    tmp_len = strlen(tmp);    len += tmp_len;    if ( len >= sizeof(xen_version_str) )        goto error_out;    strcpy(p, tmp);    p += tmp_len;    len++;    if ( len >= sizeof(xen_version_str) )        goto error_out;    *p = '.';    p++;    itoa(tmp, xen_minor_version);    tmp_len = strlen(tmp);    len += tmp_len;    if ( len >= sizeof(xen_version_str) )        goto error_out;    strcpy(p, tmp);    p += tmp_len;    tmp_len = strlen(xen_extra_version);    len += tmp_len;    if ( len >= sizeof(xen_version_str) )        goto error_out;    strcpy(p, xen_extra_version);    p += tmp_len;    xen_version_str[sizeof(xen_version_str)-1] = '\0';    /* NB. 0xC0000 is a safe large memory area for scratch. */    len = write_smbios_tables((void *)0xC0000,                              get_vcpu_nr(), get_memsize(),                              uuid, xen_version_str,                              xen_major_version, xen_minor_version);    if ( len > SMBIOS_MAXIMUM_SIZE )        goto error_out;    /* Okay, not too large: copy out of scratch to final location. */    memcpy((void *)SMBIOS_PHYSICAL_ADDRESS, (void *)0xC0000, len);    return len; error_out:    printf("Could not write SMBIOS tables, error in hvmloader.c:"           "hvm_write_smbios_tables()\n");    return 0;}static voidsmbios_entry_point_init(void *start,                        uint16_t max_structure_size,                        uint16_t structure_table_length,                        uint32_t structure_table_address,                        uint16_t number_of_structures){    uint8_t sum;    int i;    struct smbios_entry_point *ep = (struct smbios_entry_point *)start;    strncpy(ep->anchor_string, "_SM_", 4);    ep->length = 0x1f;    ep->smbios_major_version = 2;    ep->smbios_minor_version = 4;    ep->max_structure_size = max_structure_size;    ep->entry_point_revision = 0;    memset(ep->formatted_area, 0, 5);    strncpy(ep->intermediate_anchor_string, "_DMI_", 5);        ep->structure_table_length = structure_table_length;    ep->structure_table_address = structure_table_address;    ep->number_of_structures = number_of_structures;    ep->smbios_bcd_revision = 0x24;    ep->checksum = 0;    ep->intermediate_checksum = 0;        sum = 0;    for ( i = 0; i < 0x10; i++ )        sum += ((int8_t *)start)[i];    ep->checksum = -sum;    sum = 0;    for ( i = 0x10; i < ep->length; i++ )        sum += ((int8_t *)start)[i];    ep->intermediate_checksum = -sum;}/* Type 0 -- BIOS Information */static void *smbios_type_0_init(void *start, const char *xen_version,                   uint32_t xen_major_version, uint32_t xen_minor_version){    struct smbios_type_0 *p = (struct smbios_type_0 *)start;    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲乱码日产精品bd| 日韩一区二区三区精品视频| 欧美午夜免费电影| 日韩免费高清视频| 日韩精品乱码免费| 久久99精品久久久久久久久久久久| 久久99精品久久久久| 成人国产精品免费观看| 欧美日韩黄色影视| 久久精品亚洲乱码伦伦中文| 亚洲自拍偷拍图区| 久久99深爱久久99精品| 91网上在线视频| 日韩一卡二卡三卡国产欧美| 欧美国产精品v| 午夜久久久久久久久久一区二区| 激情丁香综合五月| 欧美在线一区二区| 久久久亚洲精华液精华液精华液| 一级精品视频在线观看宜春院 | 99精品黄色片免费大全| 在线观看www91| 亚洲国产精品成人综合色在线婷婷| 亚洲自拍偷拍九九九| 国产精品一线二线三线| 欧美日韩黄色影视| 中文字幕第一区二区| 奇米一区二区三区av| 色噜噜狠狠成人网p站| 久久综合色鬼综合色| 亚洲国产精品综合小说图片区| 国产露脸91国语对白| 91精品国产综合久久国产大片| 国产精品成人在线观看| 久久se精品一区精品二区| 欧美在线免费观看亚洲| 欧美极品另类videosde| 日韩高清欧美激情| 色婷婷综合久久久中文字幕| 久久伊人中文字幕| 日韩激情在线观看| 色综合色狠狠天天综合色| 久久九九全国免费| 蜜桃视频一区二区三区在线观看| www.欧美日韩国产在线| 精品成人免费观看| 日本中文在线一区| 欧美日韩高清一区二区不卡| 久久精品免视看| 麻豆成人免费电影| 一本色道久久加勒比精品| 中文字幕免费不卡在线| 狠狠色丁香久久婷婷综合丁香| 色拍拍在线精品视频8848| 国产精品久久久久久久裸模| 国产福利不卡视频| 精品1区2区在线观看| 免费在线一区观看| 91麻豆精品国产91久久久资源速度| 亚洲精品一卡二卡| 日本精品免费观看高清观看| 日韩理论在线观看| av在线不卡网| 最新久久zyz资源站| 成人美女视频在线观看| 国产午夜精品理论片a级大结局| 蓝色福利精品导航| 亚洲一区二区在线视频| 欧美天堂亚洲电影院在线播放| 一区二区三区精品视频| 在线影院国内精品| 一卡二卡欧美日韩| 欧美日韩美女一区二区| 偷拍自拍另类欧美| 91精品国产美女浴室洗澡无遮挡| 石原莉奈在线亚洲三区| 欧美肥妇free| 麻豆精品视频在线| 2021中文字幕一区亚洲| 国产精品影视天天线| 中文字幕av在线一区二区三区| 成人美女视频在线观看18| 1区2区3区欧美| 欧洲av一区二区嗯嗯嗯啊| 亚洲午夜久久久久久久久电影网| 欧美性猛片xxxx免费看久爱| 亚洲mv大片欧洲mv大片精品| 在线播放欧美女士性生活| 美女视频黄a大片欧美| 久久综合视频网| www.av精品| 亚洲国产日韩综合久久精品| 欧美高清dvd| 国产在线看一区| 国产精品超碰97尤物18| 在线看国产一区二区| 五月天激情综合网| 精品欧美乱码久久久久久 | 久久精品夜色噜噜亚洲aⅴ| 风流少妇一区二区| 亚洲欧美自拍偷拍色图| 欧美性生活久久| 激情小说欧美图片| 综合久久国产九一剧情麻豆| 欧美日韩aaa| 岛国精品一区二区| 91麻豆福利精品推荐| 亚洲3atv精品一区二区三区| 日韩欧美一级在线播放| 成人午夜av在线| 亚洲一区二区三区在线播放| 精品1区2区在线观看| 99久久国产综合精品麻豆| 午夜久久久影院| 国产日韩欧美精品综合| 欧美怡红院视频| 国产一区二区伦理片| 亚洲一区中文在线| 久久久久免费观看| 欧美专区亚洲专区| 国内精品久久久久影院一蜜桃| 综合久久久久久| 欧美成人性福生活免费看| 99综合影院在线| 久久精品国产99国产| 亚洲日本va在线观看| 欧美zozo另类异族| 欧美丝袜自拍制服另类| 国产不卡在线视频| 蜜桃精品视频在线观看| 亚洲青青青在线视频| 久久综合狠狠综合| 精品视频在线免费看| 丁香一区二区三区| 日本大胆欧美人术艺术动态| 亚洲欧美日韩国产综合在线 | 免费在线欧美视频| 樱桃国产成人精品视频| 久久久www免费人成精品| 欧美人牲a欧美精品| 99精品一区二区三区| 久久超碰97人人做人人爱| 亚洲综合成人在线| 国产精品久久久久久一区二区三区| 日韩精品专区在线影院观看| 欧美在线影院一区二区| 99久久综合99久久综合网站| 久久er99热精品一区二区| 亚洲成人av电影| 亚洲理论在线观看| 国产精品久久久久久久久动漫| 精品国产青草久久久久福利| 欧美人与性动xxxx| 在线观看一区二区精品视频| 99久久久免费精品国产一区二区| 国内精品国产成人| 久久99久国产精品黄毛片色诱| 亚洲成人av中文| 一区二区三区中文字幕精品精品| 国产精品理论片| 国产欧美日韩精品一区| 久久天天做天天爱综合色| 欧美一级高清片在线观看| 欧美男人的天堂一二区| 欧美系列亚洲系列| 在线精品视频小说1| 色猫猫国产区一区二在线视频| 99天天综合性| av在线播放一区二区三区| 成人动漫av在线| 国产成人鲁色资源国产91色综| 久久66热re国产| 美女爽到高潮91| 精品一区中文字幕| 久久99国产精品成人| 美国av一区二区| 精一区二区三区| 老司机精品视频导航| 精品综合久久久久久8888| 久久国产生活片100| 国内精品在线播放| 国产黄人亚洲片| 成人精品国产免费网站| 成人av网址在线| av在线一区二区三区| 一本一道综合狠狠老| 在线日韩国产精品| 欧美日韩的一区二区| 欧美日韩三级视频| 欧美高清你懂得| 欧美v国产在线一区二区三区| wwwwww.欧美系列| 中文字幕av资源一区| 亚洲人成小说网站色在线| 亚洲一区二区在线视频| 视频一区二区三区入口| 极品瑜伽女神91| 成人夜色视频网站在线观看| 成人a级免费电影| 色视频一区二区|