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

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

?? tpm-tis-device

?? xen虛擬機源代碼安裝包
??
?? 第 1 頁 / 共 3 頁
字號:
# HG changeset patch# User kaf24@localhost.localdomain# Node ID d60b709724f48397b95da3d56299213cae391789# Parent  bbcac2aea0e8196cd75a3bf6dbe57bebf8c1e5b2[QEMU] Add a TIS device model compliant to the 1.2 TPM specification.It implements all registers necessary to make the Linux TIS driverwork (tpm_tis.c). All of the basic registers supported by this type ofdevice are implemented. Also the locality selection has beenimplemented, but has not been tested. The legacy registers asdescribed in the specification are not supported.Current caveat: The device has so far not yet been integrated with thevirtual TPM available in the repository. It will require changes tothe virtual TPM spawned by the vTPM manager to offer an additional messageinterface. The TIS interface itself then needs to have an additionaltransport implemented. (see vTPMTransmit array).The relevant specification for the device model can be found here:https://www.trustedcomputinggroup.org/groups/pc_client/TCG_PCClientTPMSpecification_1-20_1-00_FINAL.pdfSigned-off-by: Stefan Berger <stefanb@us.ibm.com>Index: ioemu/Makefile.target===================================================================--- ioemu.orig/Makefile.target	2007-05-10 15:19:29.000000000 +0100+++ ioemu/Makefile.target	2007-05-10 15:19:29.000000000 +0100@@ -400,6 +400,7 @@ VL_OBJS+= piix4acpi.o VL_OBJS+= xenstore.o VL_OBJS+= xen_platform.o+VL_OBJS+= tpm_tis.o CPPFLAGS += -DHAS_AUDIO endif ifeq ($(TARGET_BASE_ARCH), ppc)Index: ioemu/hw/pc.c===================================================================--- ioemu.orig/hw/pc.c	2007-05-10 15:19:28.000000000 +0100+++ ioemu/hw/pc.c	2007-05-10 15:19:29.000000000 +0100@@ -730,6 +730,9 @@         }     } +    if (has_tpm_device())+        tpm_tis_init(&pic_set_irq_new, isa_pic, 11);+     kbd_init();     DMA_init(0); #ifdef HAS_AUDIOIndex: ioemu/hw/tpm_tis.c===================================================================--- /dev/null	1970-01-01 00:00:00.000000000 +0000+++ ioemu/hw/tpm_tis.c	2007-05-10 15:19:29.000000000 +0100@@ -0,0 +1,1128 @@+/*+ * tpm_tis.c - QEMU emulator for a 1.2 TPM with TIS interface+ *+ * Copyright (C) 2006 IBM Corporation+ *+ * Author: Stefan Berger <stefanb@us.ibm.com>+ *         David Safford <safford@us.ibm.com>+ *+ * 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, version 2 of the+ * License.+ *+ *+ * Implementation of the TIS interface according to specs at+ * https://www.trustedcomputinggroup.org/groups/pc_client/TCG_PCClientTPMSpecification_1-20_1-00_FINAL.pdf+ *+ */++#include <sys/types.h>+#include <sys/stat.h>+#include <sys/socket.h>+#include <sys/un.h>+#include <fcntl.h>+#include <errno.h>+#include "vl.h"++//#define DEBUG_TPM++#define TPM_MAX_PKT	              4096++#define VTPM_BAD_INSTANCE             (uint32_t)0xffffffff++#define TIS_ADDR_BASE                 0xFED40000++/* tis registers */+#define TPM_REG_ACCESS                0x00+#define TPM_REG_INT_ENABLE            0x08+#define TPM_REG_INT_VECTOR            0x0c+#define TPM_REG_INT_STATUS            0x10+#define TPM_REG_INTF_CAPABILITY       0x14+#define TPM_REG_STS                   0x18+#define TPM_REG_DATA_FIFO             0x24+#define TPM_REG_DID_VID               0xf00+#define TPM_REG_RID                   0xf04++#define STS_VALID                    (1 << 7)+#define STS_COMMAND_READY            (1 << 6)+#define STS_TPM_GO                   (1 << 5)+#define STS_DATA_AVAILABLE           (1 << 4)+#define STS_EXPECT                   (1 << 3)+#define STS_RESPONSE_RETRY           (1 << 1)++#define ACCESS_TPM_REG_VALID_STS     (1 << 7)+#define ACCESS_ACTIVE_LOCALITY       (1 << 5)+#define ACCESS_BEEN_SEIZED           (1 << 4)+#define ACCESS_SEIZE                 (1 << 3)+#define ACCESS_PENDING_REQUEST       (1 << 2)+#define ACCESS_REQUEST_USE           (1 << 1)+#define ACCESS_TPM_ESTABLISHMENT     (1 << 0)++#define INT_ENABLED                  (1 << 31)+#define INT_DATA_AVAILABLE           (1 << 0)+#define INT_LOCALITY_CHANGED         (1 << 2)+#define INT_COMMAND_READY            (1 << 7)++#define INTERRUPTS_SUPPORTED         (INT_LOCALITY_CHANGED | \+                                      INT_DATA_AVAILABLE   | \+                                      INT_COMMAND_READY)+#define CAPABILITIES_SUPPORTED       ((1 << 4) |            \+                                      INTERRUPTS_SUPPORTED)++enum {+  STATE_IDLE = 0,+  STATE_READY,+  STATE_COMPLETION,+  STATE_EXECUTION,+  STATE_RECEPTION+};++#define NUM_LOCALITIES   5+#define NO_LOCALITY      0xff++#define IS_VALID_LOC(x) ((x) < NUM_LOCALITIES)++#define TPM_DID          0x0001+#define TPM_VID          0x0001+#define TPM_RID          0x0001++/* if the connection to the vTPM should be closed after a successfully+   received response; set to '0' to allow keeping the connection */+#define FORCE_CLOSE      0++/* local data structures */++typedef struct TPMTx {+    int fd[2];+} tpmTx;++typedef struct TPMBuffer {+    uint8_t instance[4];      /* instance number in network byte order */+    uint8_t buf[TPM_MAX_PKT];+} __attribute__((packed)) tpmBuffer;++/* locality data */+typedef struct TPMLocal {+    uint32_t state;+    uint8_t access;+    uint8_t sts;+    uint32_t inte;+    uint32_t ints;+} tpmLoc;++/* overall state of the TPM interface; 's' marks as save upon suspension */+typedef struct TPMState {+    uint32_t offset;            /* s */+    tpmBuffer buffer;           /* s */+    uint8_t active_loc;         /* s */+    uint8_t aborting_locty;+    uint8_t next_locty;+    uint8_t irq_pending;        /* s */+    tpmLoc loc[NUM_LOCALITIES]; /* s */+    QEMUTimer *poll_timer;+    SetIRQFunc *set_irq;+    void *irq_opaque;+    int irq;+    int poll_attempts;+    uint32_t vtpm_instance;  /* vtpm inst. number; determined from xenstore*/+    int Transmitlayer;+    tpmTx tpmTx;+} tpmState;+++/* local prototypes */+static int TPM_Send(tpmState *s, tpmBuffer *buffer, uint8_t locty, char *msg);+static int TPM_Receive(tpmState *s, tpmBuffer *buffer);+static uint32_t vtpm_instance_from_xenstore(void);+static void tis_poll_timer(void *opaque);+static void tis_prep_next_interrupt(tpmState *s);+static void tis_raise_irq(tpmState *s, uint8_t locty, uint32_t irqmask);+static void close_vtpm_channel(tpmState *s, int force);+static void open_vtpm_channel(tpmState *s);+static void tis_attempt_receive(tpmState *s, uint8_t locty);++/* transport layer functions: local sockets */+static int create_local_socket(tpmState *s, uint32_t vtpm_instance);+static int write_local_socket(tpmState *s, const tpmBuffer *);+static int read_local_socket(tpmState *s, tpmBuffer *);+static int close_local_socket(tpmState *s, int force);+static int has_channel_local_socket(tpmState *s);+#define LOCAL_SOCKET_PATH      "/var/vtpm/vtpm_all.socket"+++#define NUM_TRANSPORTS 1++struct vTPM_transmit {+    int (*open) (tpmState *s, uint32_t vtpm_instance);+    int (*write) (tpmState *s, const tpmBuffer *);+    int (*read) (tpmState *s, tpmBuffer *);+    int (*close) (tpmState *s, int);+    int (*has_channel) (tpmState *s);+} vTPMTransmit[NUM_TRANSPORTS] = {+    { .open = create_local_socket,+      .write = write_local_socket,+      .read = read_local_socket,+      .close = close_local_socket,+      .has_channel = has_channel_local_socket,+    }+};+++#define IS_COMM_WITH_VTPM(s)                            \+     ((s)->Transmitlayer >= 0 &&                        \+      vTPMTransmit[(s)->Transmitlayer].has_channel(s))+++/**********************************************************************+ helper functions+ *********************************************************************/++static inline uint32_t tpm_get_size_from_buffer(const uint8_t *buffer)+{+    uint32_t len = (buffer[4] << 8) + buffer[5];+    return len;+}++static inline void tpm_initialize_instance(tpmState *s, uint32_t instance)+{+    s->buffer.instance[0] = (instance >> 24) & 0xff;+    s->buffer.instance[1] = (instance >> 16) & 0xff;+    s->buffer.instance[2] = (instance >>  8) & 0xff;+    s->buffer.instance[3] = (instance >>  0) & 0xff;+}++/*+ * open communication channel with a vTPM+ */+static void open_vtpm_channel(tpmState *s)+{+    int idx;+    /* search a usable transmit layer */+    for (idx = 0; idx < NUM_TRANSPORTS; idx++) {+        if (1 == vTPMTransmit[idx].open(s, s->vtpm_instance)) {+            /* found one */+            s->Transmitlayer = idx;+            break;+        }+    }+}++/*+ * close the communication channel with the vTPM+ */+static inline void close_vtpm_channel(tpmState *s, int force)+{+    if (1 == vTPMTransmit[s->Transmitlayer].close(s, force)) {+        s->Transmitlayer = -1;+    }+}++static inline uint8_t locality_from_addr(target_phys_addr_t addr)+{+    return (uint8_t)((addr >> 12) & 0x7);+}+++/**********************************************************************+    low-level transmission layer methods+ *********************************************************************/++/*+ * the 'open' method that creates the filedescriptor for communicating+ * only one is needed for reading and writing+ */+static int create_local_socket(tpmState *s, uint32_t vtpm_instance)+{+    int success = 1;+    if (s->tpmTx.fd[0] < 0) {+        s->tpmTx.fd[0] = socket(PF_LOCAL, SOCK_STREAM, 0);++        if (has_channel_local_socket(s)) {+            struct sockaddr_un addr;+            memset(&addr, 0x0, sizeof(addr));+            addr.sun_family = AF_LOCAL;+            strcpy(addr.sun_path, LOCAL_SOCKET_PATH);+            if (connect(s->tpmTx.fd[0],+                        (struct sockaddr *)&addr,+                        sizeof(addr)) != 0) {+                close_local_socket(s, 1);+                success = 0;+            } else {+                /* put filedescriptor in non-blocking mode for polling */+                int flags = fcntl(s->tpmTx.fd[0], F_GETFL);+                fcntl(s->tpmTx.fd[0], F_SETFL, flags | O_NONBLOCK);+            }+#ifdef DEBUG_TPM+            if (success)+                fprintf(logfile,"Successfully connected using local socket "+                                LOCAL_SOCKET_PATH ".\n");+            else+                fprintf(logfile,"Could not connect to local socket "+                                LOCAL_SOCKET_PATH ".\n");+#endif+        } else {+            success = 0;+        }+    }+    return success;+}++/*+ * the 'write' method for sending requests to the vTPM+ * four bytes with the vTPM instance number are prepended to each request+ * the locality in which the command was sent is transmitted in the+ * highest 3 bits+ */+static int write_local_socket(tpmState *s, const tpmBuffer *buffer)+{+    uint32_t size = tpm_get_size_from_buffer(buffer->buf);+    int len;++    len = write(s->tpmTx.fd[0],+                buffer->instance,+                sizeof(buffer->instance) + size);+    if (len == sizeof(buffer->instance) + size) {+        return len;+    } else {+        return -1;+    }+}++/*+ * the 'read' method for receiving of responses from the TPM+ * this function expects that four bytes with the instance number+ * are received from the vTPM+ */+static int read_local_socket(tpmState *s, tpmBuffer *buffer)+{+    int off;+#ifdef DEBUG_TPM+    fprintf(logfile, "Reading from fd %d\n", s->tpmTx.fd[0]);+#endif+    off = read(s->tpmTx.fd[0],+               buffer->instance,+               sizeof(buffer->instance)+TPM_MAX_PKT);+#ifdef DEBUG_TPM+    fprintf(logfile, "Read %d bytes\n", off);+#endif+    return off;+}++/*+ * the 'close' method+ * shut down communication with the vTPM+ * 'force' = 1 indicates that the socket *must* be closed+ * 'force' = 0 indicates that a connection may be maintained+ */+static int close_local_socket(tpmState *s, int force)+{+    if (force) {+        close(s->tpmTx.fd[0]);+#ifdef DEBUG_TPM+        fprintf(logfile,"Closed connection with fd %d\n",s->tpmTx.fd[0]);+#endif+        s->tpmTx.fd[0] = -1;+        return 1; /* socket was closed */+    }+#ifdef DEBUG_TPM+    fprintf(logfile,"Keeping connection with fd %d\n",s->tpmTx.fd[0]);+#endif+    return 0;+}++/*+ * the 'has_channel' method that checks whether there's a communication+ * channel with the vTPM+ */+static int has_channel_local_socket(tpmState *s)+{+    return (s->tpmTx.fd[0] > 0);+}++/**********************************************************************/++/*+ * read a byte of response data

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99国产麻豆精品| 国产日韩综合av| 欧美视频日韩视频在线观看| www.亚洲激情.com| 9i在线看片成人免费| 国产激情一区二区三区四区 | 国产午夜精品理论片a级大结局 | 亚洲韩国精品一区| 一区二区在线观看免费 | 成人福利视频在线看| 国产麻豆精品一区二区| 黄网站免费久久| 狠狠v欧美v日韩v亚洲ⅴ| 久久爱www久久做| 极品少妇xxxx偷拍精品少妇| 紧缚奴在线一区二区三区| 韩国v欧美v日本v亚洲v| 精品一区二区三区的国产在线播放| 久久精品二区亚洲w码| 久久精品国产久精国产| 久久国产成人午夜av影院| 韩国女主播成人在线| 国产99精品在线观看| 丁香婷婷综合激情五月色| www.av亚洲| 在线观看www91| 91精品一区二区三区久久久久久| 欧美大肚乱孕交hd孕妇| 久久久亚洲欧洲日产国码αv| 日本一区二区三区在线不卡| 17c精品麻豆一区二区免费| 亚洲激情综合网| 丝瓜av网站精品一区二区| 国产·精品毛片| 一区二区三区蜜桃| 日韩av一区二区三区四区| 国产三级欧美三级日产三级99| 精品国产一区二区精华| 欧美大片在线观看一区| 日韩欧美高清在线| 欧美在线免费观看视频| ㊣最新国产の精品bt伙计久久| 色婷婷亚洲精品| 欧美日韩在线播| 欧美成人性福生活免费看| 久久久久久久电影| 亚洲欧美区自拍先锋| 亚洲一区二区三区中文字幕在线| 青草国产精品久久久久久| 国产伦精品一区二区三区视频青涩| 成人精品国产福利| 在线播放91灌醉迷j高跟美女| 精品国产乱码久久久久久闺蜜 | 欧美成人女星排行榜| 欧美国产日韩一二三区| 亚瑟在线精品视频| 成人午夜电影小说| 在线播放国产精品二区一二区四区 | 成人性生交大片免费看视频在线| 欧美天堂一区二区三区| 久久婷婷色综合| 亚洲综合小说图片| 国产一二精品视频| 欧美日韩成人综合在线一区二区| 久久久久久**毛片大全| 亚洲444eee在线观看| 高清不卡在线观看av| 欧美日韩1区2区| 国产精品不卡一区| 激情成人综合网| 56国语精品自产拍在线观看| 国产精品视频麻豆| 国内精品伊人久久久久av影院| 在线观看亚洲精品视频| 国产清纯在线一区二区www| 首页亚洲欧美制服丝腿| 91视频91自| 亚洲国产成人一区二区三区| 麻豆精品一二三| 欧美日韩一区二区三区高清| 亚洲欧洲日韩一区二区三区| 亚洲成av人片| 欧美午夜免费电影| 日本美女一区二区| 久久久精品免费网站| 99免费精品在线观看| 丁香啪啪综合成人亚洲小说| 国产在线看一区| 亚洲综合色成人| 久久新电视剧免费观看| 色网综合在线观看| 激情图片小说一区| 国产精品亲子伦对白| 欧美日韩日日骚| 色哟哟亚洲精品| 国产一区美女在线| 精品少妇一区二区三区 | 国产精品国产三级国产专播品爱网| 亚洲欧美日韩国产中文在线| 国产酒店精品激情| 91精品免费在线观看| 国产专区欧美精品| 中文字幕字幕中文在线中不卡视频| 国产一区二区免费看| 色哟哟欧美精品| 麻豆国产欧美一区二区三区| 国产高清不卡一区二区| 亚洲一区在线视频观看| 国产成人精品免费看| 天天综合色天天| 中文字幕中文乱码欧美一区二区| 国内成人自拍视频| 1000部国产精品成人观看| 欧美性生活一区| 亚洲成av人片一区二区梦乃| 久久美女高清视频| 欧美曰成人黄网| 91同城在线观看| 97se亚洲国产综合自在线观| 久久精品99久久久| 亚洲精品一区在线观看| 国产一区二区美女| 亚洲美女电影在线| 91精品国产麻豆国产自产在线 | 久久成人久久爱| 激情欧美日韩一区二区| 欧美国产一区在线| 成人激情小说乱人伦| 久久久亚洲高清| 91在线视频播放| 亚洲第一av色| 欧美激情在线一区二区三区| 色婷婷国产精品久久包臀| 国产九九视频一区二区三区| 日本亚洲免费观看| 国产精品全国免费观看高清| 久久精品一区八戒影视| 91亚洲永久精品| 中文字幕日韩一区| 欧美色图免费看| 91精品久久久久久久91蜜桃| av一本久道久久综合久久鬼色| 国产在线日韩欧美| 欧美视频在线一区二区三区| 91麻豆精品国产无毒不卡在线观看| 一区二区三区在线视频免费 | 欧美国产一区二区| 99精品久久只有精品| 欧美国产激情二区三区| 波多野结衣精品在线| 亚洲综合一二三区| 91精品办公室少妇高潮对白| 视频精品一区二区| 精品国产免费一区二区三区香蕉| 男女男精品视频| 国产精品进线69影院| 色狠狠一区二区三区香蕉| 亚洲一区影音先锋| 国产亚洲婷婷免费| 久久97超碰色| 亚洲日本免费电影| 日韩你懂的在线播放| 国产黑丝在线一区二区三区| 亚洲日本免费电影| 精品不卡在线视频| 色婷婷综合久久久| 国产麻豆一精品一av一免费| 亚洲一区在线视频| 国产精品免费网站在线观看| 欧美肥胖老妇做爰| 国产精品一区在线观看乱码| 国产精品视频线看| 日韩一区二区在线观看| 91浏览器在线视频| 精品制服美女丁香| 国产日韩欧美a| 欧美精品黑人性xxxx| 蜜臀av国产精品久久久久| 亚洲欧美日韩精品久久久久| 日韩免费观看高清完整版| 亚洲日本在线a| 337p亚洲精品色噜噜噜| 国产日韩欧美不卡在线| 琪琪久久久久日韩精品| 亚洲一区二区三区视频在线播放 | 99精品国产91久久久久久| 欧美人妖巨大在线| 亚洲国产一区二区在线播放| 99久久99久久综合| 七七婷婷婷婷精品国产| 久久新电视剧免费观看| 在线播放中文一区| 欧美三级欧美一级| 亚洲成av人片| 久久久不卡网国产精品一区| 色视频成人在线观看免| 蜜桃91丨九色丨蝌蚪91桃色| 日韩黄色一级片| 欧美探花视频资源| 久久成人免费网站|