亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
日本韩国一区二区三区| 欧美久久一二区| 三级欧美韩日大片在线看| 久久亚洲综合色| 欧洲视频一区二区| 国产毛片精品一区| 天天亚洲美女在线视频| 亚洲少妇30p| 国产亚洲一区二区在线观看| 欧美日韩高清不卡| 色综合天天性综合| 国内精品自线一区二区三区视频| 亚洲精品水蜜桃| 欧美国产精品一区| 精品国产一区二区三区不卡| 欧美日韩精品一区视频| 91麻豆国产香蕉久久精品| 国产中文字幕精品| 日本美女视频一区二区| 亚洲综合免费观看高清在线观看| 欧美国产97人人爽人人喊| 日韩欧美成人激情| 在线播放中文字幕一区| 欧美这里有精品| 99精品视频一区二区| 国产成人免费9x9x人网站视频| 日韩av不卡在线观看| 亚洲成人精品一区| 一区二区三区不卡视频在线观看| 中文字幕一区二区在线播放| 久久久久久久久免费| 精品久久久久久久久久久久久久久| 精品视频免费在线| 日本韩国欧美在线| 日本精品视频一区二区三区| 成人国产在线观看| 东方欧美亚洲色图在线| 国产精品一区二区三区乱码| 国产乱一区二区| 国产麻豆日韩欧美久久| 国产精品影视天天线| 久久91精品国产91久久小草| 久久99国产精品免费| 国产中文字幕精品| 国产另类ts人妖一区二区| 国产一区二区三区香蕉| 国产一级精品在线| 国产高清无密码一区二区三区| 国产老妇另类xxxxx| 国产91精品久久久久久久网曝门| 国产成人a级片| fc2成人免费人成在线观看播放| 不卡区在线中文字幕| 99视频在线精品| 色婷婷综合五月| 欧美日韩三级一区| 日韩一级黄色大片| 精品国产亚洲一区二区三区在线观看| 久久综合久久综合九色| 欧美一区二区三区日韩视频| 精品久久久久久最新网址| 国产亚洲美州欧州综合国| 国产日韩三级在线| 亚洲天堂2016| 亚洲第一会所有码转帖| 精品午夜久久福利影院 | 欧美在线free| 欧美一级专区免费大片| 国产三级精品视频| 一区二区三区精品在线| 天天免费综合色| 国产精品一区二区你懂的| 一本色道**综合亚洲精品蜜桃冫| 欧美少妇性性性| 欧美精品一区男女天堂| 亚洲视频在线一区| 日本三级亚洲精品| 国产福利一区二区三区在线视频| 91蜜桃免费观看视频| 91精品福利在线一区二区三区| 久久精品人人做人人综合| 一区二区三区精品视频在线| 国内成人精品2018免费看| av在线这里只有精品| 3d动漫精品啪啪| 国产欧美一区二区精品忘忧草| 亚洲一二三级电影| 国产风韵犹存在线视精品| 欧美三级一区二区| 中文字幕免费在线观看视频一区| 亚洲18女电影在线观看| 成人一区二区三区视频在线观看| 欧美视频一区二区三区四区| 中文天堂在线一区| 日韩黄色免费网站| 99国产精品视频免费观看| 精品国产sm最大网站免费看| 亚洲国产精品视频| 成人免费视频视频| 精品国产凹凸成av人网站| 亚洲午夜激情网站| 99久久久免费精品国产一区二区| 精品国产亚洲一区二区三区在线观看| 亚洲综合偷拍欧美一区色| 成人午夜精品一区二区三区| 日韩欧美国产不卡| 视频一区二区三区在线| 色8久久精品久久久久久蜜| 国产精品网站导航| 国产精品88888| 精品久久一区二区三区| 日产精品久久久久久久性色| 欧美性视频一区二区三区| 国产精品嫩草久久久久| 国产精品一区二区黑丝| 欧美大白屁股肥臀xxxxxx| 亚洲国产精品麻豆| 欧洲国内综合视频| 国产精品福利影院| 国产不卡免费视频| 久久久久久一级片| 国产资源在线一区| 2021久久国产精品不只是精品| 青青草精品视频| 制服丝袜亚洲色图| 爽爽淫人综合网网站| 欧美日韩久久一区二区| 亚洲激情五月婷婷| 在线观看精品一区| 一区二区三区在线免费视频 | 成人av网址在线观看| 欧美激情一区在线观看| 国产91精品免费| 欧美激情中文字幕一区二区| 国产精品1区2区3区| 国产欧美精品在线观看| 成人短视频下载| 自拍偷拍亚洲欧美日韩| 色www精品视频在线观看| 亚洲精品国产a久久久久久| 色婷婷av一区二区三区大白胸| 一区二区三区精品在线观看| 欧美视频一区二区在线观看| 午夜精品爽啪视频| 日韩欧美一二区| 国产麻豆成人传媒免费观看| 国产午夜亚洲精品羞羞网站| 国产成人精品免费网站| 亚洲视频在线一区二区| 欧美亚洲国产一区二区三区va| 天堂午夜影视日韩欧美一区二区| 91精品国产91热久久久做人人 | 风间由美一区二区三区在线观看 | 蜜臀精品一区二区三区在线观看| 日韩视频一区二区| 国产一区欧美日韩| 亚洲国产成人私人影院tom| 一本色道久久综合精品竹菊| 亚洲不卡在线观看| 日韩一级精品视频在线观看| 国产精品综合av一区二区国产馆| 欧美激情一区二区| 日本精品裸体写真集在线观看| 丝袜亚洲另类欧美综合| 精品国精品国产| 99久久精品国产网站| 天天综合网天天综合色| 久久免费午夜影院| 色域天天综合网| 乱一区二区av| 亚洲色图欧洲色图| 91精品国产91久久久久久最新毛片 | 久久伊人蜜桃av一区二区| av不卡一区二区三区| 石原莉奈在线亚洲三区| 国产日韩av一区二区| 欧美群妇大交群中文字幕| 国产精品一区二区在线观看不卡| 亚洲女厕所小便bbb| 日韩欧美一级片| 一本到高清视频免费精品| 奇米色一区二区| 亚洲视频图片小说| 精品va天堂亚洲国产| 在线亚洲一区二区| 国产一区999| 亚洲成人自拍偷拍| 亚洲国产精品传媒在线观看| 在线播放亚洲一区| 北条麻妃国产九九精品视频| 日日欢夜夜爽一区| 亚洲欧洲在线观看av| 精品国内二区三区| 欧美美女一区二区三区| 国产成人自拍在线| 男女男精品视频| 亚洲一区二区三区四区五区中文| 国产色综合一区| 欧美mv日韩mv| 欧美一区永久视频免费观看|