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

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

?? tpm-tis-device

?? xen虛擬機源代碼安裝包
??
?? 第 1 頁 / 共 3 頁
字號:
+static CPUWriteMemoryFunc *tis_writefn[3]={+    tis_mem_writel,+    tis_mem_writel,+    tis_mem_writel+};++/*+ * Save the internal state of this interface for later resumption.+ * Need to get any outstanding responses from the vTPM back, so+ * this might delay the suspend for a while.+ */+static void tpm_save(QEMUFile* f,void* opaque)+{+    tpmState* s=(tpmState*)opaque;+    uint8_t locty = s->active_loc;+    int c;++    /* need to wait for outstanding requests to complete */+    if (s->loc[locty].state == STATE_EXECUTION) {+        int repeats = 30; /* 30 seconds; really should be infty */+        while (repeats > 0 &&+               !(s->loc[s->active_loc].sts & STS_DATA_AVAILABLE)) {+            int n = TPM_Receive(s, &s->buffer);+            if (n > 0) {+                if (IS_VALID_LOC(s->active_loc)) {+                    s->loc[s->active_loc].sts = STS_VALID | STS_DATA_AVAILABLE;+                    s->loc[s->active_loc].state = STATE_COMPLETION;+                    tis_raise_irq(s, s->active_loc, INT_DATA_AVAILABLE);+                }+                /* close the connection with the vTPM for good */+                close_vtpm_channel(s, 1);+                break;+            }+            sleep(1);+        }+    }++    if (IS_COMM_WITH_VTPM(s)) {+        close_vtpm_channel(s, 1);+    }++    qemu_put_be32s(f,&s->offset);+    qemu_put_buffer(f, s->buffer.buf, TPM_MAX_PKT);+    qemu_put_8s(f, &s->active_loc);+    qemu_put_8s(f, &s->irq_pending);+    for (c = 0; c < NUM_LOCALITIES; c++) {+        qemu_put_be32s(f, &s->loc[c].state);+        qemu_put_8s(f, &s->loc[c].access);+        qemu_put_8s(f, &s->loc[c].sts);+        qemu_put_be32s(f, &s->loc[c].inte);+        qemu_put_be32s(f, &s->loc[c].ints);+    }+}++/*+ * load TIS interface state+ */+static int tpm_load(QEMUFile* f,void* opaque,int version_id)+{+    tpmState* s=(tpmState*)opaque;+    int c;++    if (version_id != 1)+        return -EINVAL;++    qemu_get_be32s(f,&s->offset);+    qemu_get_buffer(f, s->buffer.buf, TPM_MAX_PKT);+    qemu_get_8s(f, &s->active_loc);+    qemu_get_8s(f, &s->irq_pending);+    for (c = 0; c < NUM_LOCALITIES; c++) {+        qemu_get_be32s(f, &s->loc[c].state);+        qemu_get_8s(f, &s->loc[c].access);+        qemu_get_8s(f, &s->loc[c].sts);+        qemu_get_be32s(f, &s->loc[c].inte);+        qemu_get_be32s(f, &s->loc[c].ints);+    }++    /* need to be able to get the instance number from the xenstore */+    s->vtpm_instance = vtpm_instance_from_xenstore();+    if (s->vtpm_instance == VTPM_BAD_INSTANCE)+        return -EINVAL;+    tpm_initialize_instance(s, s->vtpm_instance);++    return 0;+}+++typedef struct LPCtpmState {+    tpmState tpm;+    int mem;+} LPCtpmState;+++/*+ * initialize TIS interface+ */+void tpm_tis_init(SetIRQFunc *set_irq, void *opaque, int irq)+{+    LPCtpmState *d;+    tpmState *s;+    int c = 0;+    uint32_t vtpm_in;++    vtpm_in = vtpm_instance_from_xenstore();+    /* no valid vtpm instance -> no device */+    if (vtpm_in == VTPM_BAD_INSTANCE)+        return;++    d = qemu_mallocz(sizeof(LPCtpmState));+    d->mem = cpu_register_io_memory(0, tis_readfn, tis_writefn, d);++    if (d->mem == -1) {+       return;+    }++    cpu_register_physical_memory(TIS_ADDR_BASE,+                                 0x1000 * NUM_LOCALITIES, d->mem);++    /* initialize tpmState */+    s = &d->tpm;++    s->offset = 0;+    s->active_loc = NO_LOCALITY;++    while (c < NUM_LOCALITIES) {+        s->loc[c].access = (1 << 7);+        s->loc[c].sts = 0;+        s->loc[c].inte = (1 << 3);+        s->loc[c].ints = 0;+        s->loc[c].state = STATE_IDLE;+        c++;+    }+    s->poll_timer = qemu_new_timer(vm_clock, tis_poll_timer, s);+    s->set_irq = set_irq;+    s->irq_opaque = opaque;+    s->irq = irq;+    s->vtpm_instance = vtpm_in;+    s->Transmitlayer = -1;+    s->tpmTx.fd[0] = -1;+    s->tpmTx.fd[1] = -1;+    s->aborting_locty = NO_LOCALITY;++    tpm_initialize_instance(s, s->vtpm_instance);+    memset(s->buffer.buf,0,sizeof(s->buffer.buf));++    register_savevm("tpm-tis", 0, 1, tpm_save, tpm_load, s);+}++/****************************************************************************/+/*  optional verbose logging of data to/from vtpm                           */+/****************************************************************************/+#ifdef DEBUG_TPM+static void showBuff(unsigned char *buff, char *string)+{+    uint32_t i, len;++    len = tpm_get_size_from_buffer(buff);+    fprintf(logfile,"%s length = %d\n", string, len);+    for (i = 0; i < len; i++) {+        if (i && !(i % 16)) {+            fprintf(logfile,"\n");+        }+        fprintf(logfile,"%.2X ", buff[i]);+    }+    fprintf(logfile,"\n");+}+#endif++/****************************************************************************/+/* Transmit request to TPM and read Response                                */+/****************************************************************************/++const static unsigned char tpm_failure[] = {+    0x00, 0x00,+    0x00, 0x00, 0x00, 0x0a,+    0x00, 0x00, 0x00, 0x09+};+++/*+ * Send a TPM request.+ */+static int TPM_Send(tpmState *s, tpmBuffer *buffer, uint8_t locty, char *msg)+{+    int len;+    uint32_t size = tpm_get_size_from_buffer(buffer->buf);++    /* try to establish a connection to the vTPM */+    if ( !IS_COMM_WITH_VTPM(s)) {+        open_vtpm_channel(s);+    }++    if ( !IS_COMM_WITH_VTPM(s)) {+        unsigned char tag = buffer->buf[1];++        /* there's a failure response from the TPM */+        memcpy(buffer->buf, tpm_failure, sizeof(tpm_failure));+        buffer->buf[1] = tag + 3;+        if (IS_VALID_LOC(s->active_loc)) {+            s->loc[s->active_loc].sts = STS_DATA_AVAILABLE | STS_VALID;+        }+#ifdef DEBUG_TPM+        fprintf(logfile,"No TPM running!\n");+#endif+        /* the request went out ok. */+        return sizeof(buffer->instance) + size;+    }++#ifdef DEBUG_TPM+    showBuff(buffer->buf, "To TPM");+#endif++    /* transmit the locality in the highest 3 bits */+    buffer->instance[0] &= 0x1f;+    buffer->instance[0] |= (locty << 5);++    len = vTPMTransmit[s->Transmitlayer].write(s, buffer);+    if (len < 0) {+        s->Transmitlayer = -1;+    }+    return len;+}++/*+ * Try to receive data from the file descriptor. Since it is in+ * non-blocking mode it is possible that no data are actually received -+ * whatever calls this function needs to try again later.+ */+static int TPM_Receive(tpmState *s, tpmBuffer *buffer)+{+    int off;++    off = vTPMTransmit[s->Transmitlayer].read(s, buffer);++    if (off < 0) {+        /* EAGAIN is set in errno due to non-blocking mode */+        return -1;+    }++    if (off == 0) {+#ifdef DEBUG_TPM+        fprintf(logfile,"TPM GONE? errno=%d\n",errno);+#endif+        close_vtpm_channel(s, 1);+        /* pretend that data are available */+        if (IS_VALID_LOC(s->active_loc)) {+            s->loc[s->active_loc].sts = STS_VALID | STS_DATA_AVAILABLE;+            s->loc[s->active_loc].state = STATE_COMPLETION;+            tis_raise_irq(s, s->active_loc, INT_DATA_AVAILABLE);+        }+        return -1;+    }++#ifdef DEBUG_TPM+    if (off > sizeof(buffer->instance ) + 6) {+        uint32_t size = tpm_get_size_from_buffer(buffer->buf);+        if (size + sizeof(buffer->instance) != off) {+            fprintf(logfile,"TPM: Packet size is bad! %d != %d\n",+                    (int)(size + sizeof(buffer->instance)),+                    off);+        } else {+            uint32_t ret;+            showBuff(buffer->buf, "From TPM");+            ret = (buffer->buf[8])*256 + buffer->buf[9];+            if (ret)+                fprintf(logfile,"Receive failed with error %d\n", ret);+            else+                fprintf(logfile,"Receive succeeded. Got response of length %d (=%d)\n",+                       size, off);+        }+    }+#endif++    /* assuming reading in one chunk for now */+    return off;+}+++/****************************************************************************+   Helper functions for reading data from the xenstore such as+   reading virtual TPM instance information+ ****************************************************************************/+int has_tpm_device(void)+{+    int ret = 0;+    struct xs_handle *handle = xs_daemon_open();+    if (handle) {+        ret = xenstore_domain_has_devtype(handle, "vtpm");+        xs_daemon_close(handle);+    }+    return ret;+}+++/*+ * Wait until hotplug scripts have finished then read the vTPM instance+ * number from the xenstore.+ */+static uint32_t vtpm_instance_from_xenstore(void)+{+    unsigned int num;+    uint32_t number = VTPM_BAD_INSTANCE;+    int end = 0;+    char *token = "tok";+    int subscribed = 0;+    int ctr = 0;+    fd_set readfds;++    struct xs_handle *handle = xs_daemon_open();++    FD_ZERO(&readfds);++    if (handle) {+        char **e = xenstore_domain_get_devices(handle, "vtpm", &num);+        int fd = xs_fileno(handle);+        FD_SET(fd, &readfds);+        if (e) {+            do {+                struct timeval tv = {+                    .tv_sec  = 30,+                    .tv_usec = 0,+                };+                /* need to make sure that the hotplug scripts have finished */+                char *status = xenstore_read_hotplug_status(handle,+                                                            "vtpm",+                                                            e[0]);+                if (status) {+                    if (!strcmp(status, "connected")) {+                        char *inst = xenstore_backend_read_variable(handle,+                                                                    "vtpm",+                                                                    e[0],+                                                                   "instance");+                        if (1 != (sscanf(inst,"%d",&number)))+                            number = VTPM_BAD_INSTANCE;+                        free(inst);+                    } else {+                        fprintf(logfile,+                                "bad status '%s' from vtpm hotplug\n",+                                status);+                    }+                    free(status);+                    end = 1;+                } else {+                    /* no status, yet */+                    int rc;+                    unsigned int nr;+                    char **f;++                    if (!subscribed) {+                        rc = xenstore_subscribe_to_hotplug_status(handle,+                                                                  "vtpm",+                                                                  e[0],+                                                                  token);+                        if (rc != 0)+                            break;+                        subscribed = 1;+                    }+                    rc = select(fd+1, &readfds, NULL, NULL, &tv);+                    /* get what's available -- drain the fd */+                    f = xs_read_watch(handle, &nr);+                    ctr++;+                    free(f);+                    if (ctr > 2)+                        end = 1;+                }+            } while (end == 0);+            free(e);+        }+        if (subscribed) {+            /* clean up */+            xenstore_unsubscribe_from_hotplug_status(handle,+                                                     "vtpm",+                                                     e[0],+                                                     token);+        }+        xs_daemon_close(handle);+    }+    if (number == VTPM_BAD_INSTANCE)+        fprintf(logfile, "no valid vtpm instance");+    else+        fprintf(logfile,"vtpm instance:%d\n",number);+    return number;+}Index: ioemu/vl.h===================================================================--- ioemu.orig/vl.h	2007-05-10 15:19:29.000000000 +0100+++ ioemu/vl.h	2007-05-10 15:19:29.000000000 +0100@@ -1086,6 +1086,10 @@ /* smbus_eeprom.c */ SMBusDevice *smbus_eeprom_device_init(uint8_t addr, uint8_t *buf); +/* tpm_tis.c */+int has_tpm_device(void);+void tpm_tis_init(SetIRQFunc *set_irq, void *irq_opaque, int irq);+ /* piix4acpi.c */ extern void pci_piix4_acpi_init(PCIBus *bus, int devfn); 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区二区在线观看视频 | 另类综合日韩欧美亚洲| 777亚洲妇女| 另类小说视频一区二区| 欧美精品一区二区三区久久久| 精品写真视频在线观看| 国产午夜亚洲精品理论片色戒 | 老司机免费视频一区二区| 精品国产91亚洲一区二区三区婷婷| 极品少妇xxxx精品少妇偷拍 | 亚洲婷婷综合色高清在线| 色婷婷国产精品久久包臀| 无码av中文一区二区三区桃花岛| 制服丝袜av成人在线看| 国产伦精品一区二区三区免费迷| 中文字幕av免费专区久久| 色婷婷综合久久久久中文| 日韩经典中文字幕一区| 国产日韩欧美不卡在线| 91精彩视频在线| 久久精品二区亚洲w码| 中文字幕在线免费不卡| 欧美久久久一区| 国产jizzjizz一区二区| 亚洲国产另类av| 国产午夜精品久久久久久免费视| 91蝌蚪porny九色| 美女性感视频久久| 亚洲日本在线视频观看| 日韩欧美国产麻豆| 91在线观看一区二区| 日韩国产精品91| 中文字幕一区二区三区在线观看 | 日韩久久免费av| 色综合久久久久网| 国产一区二区三区四| 亚洲线精品一区二区三区| 日本一区二区三区视频视频| 欧美综合亚洲图片综合区| 韩国av一区二区| 亚洲高清免费视频| 国产精品久久久久影院老司| 在线观看91视频| 成人激情动漫在线观看| 美女久久久精品| 亚洲综合久久久久| 综合色中文字幕| 国产亚洲精品免费| 精品捆绑美女sm三区| 欧美日韩精品专区| a在线欧美一区| 国产麻豆91精品| 老汉av免费一区二区三区| 亚洲超碰97人人做人人爱| 国产精品久久久久久亚洲伦| 欧美精品一区二区三区蜜臀| 91精品国产色综合久久久蜜香臀| 色婷婷综合久久| 色一情一伦一子一伦一区| 福利一区二区在线观看| 国产精品69毛片高清亚洲| 久久精品国产亚洲5555| 日韩av中文字幕一区二区 | 中日韩av电影| 久久免费美女视频| 26uuuu精品一区二区| 欧美一级精品大片| 欧美嫩在线观看| 欧美精品久久99| 欧美美女激情18p| 欧美日韩国产123区| 欧美日韩国产小视频在线观看| 在线观看不卡一区| 精品视频1区2区3区| 欧美绝品在线观看成人午夜影视| 欧美三级视频在线观看| 欧美男男青年gay1069videost| 欧美性猛交xxxx黑人交| 欧美日韩高清一区二区不卡| 欧美日本免费一区二区三区| 精品视频一区二区不卡| 91精品国产91热久久久做人人| 欧美一区二区三区的| 亚洲精品一区二区三区四区高清| 欧美va亚洲va香蕉在线| 久久精品一区蜜桃臀影院| 国产精品国产三级国产aⅴ入口 | 天天影视色香欲综合网老头| 亚洲成人免费在线| 日韩av网站在线观看| 国产在线精品一区二区不卡了| 国模一区二区三区白浆| 岛国av在线一区| 在线影院国内精品| 日韩午夜在线播放| 国产精品丝袜在线| 亚洲综合自拍偷拍| 日本亚洲电影天堂| 国产丶欧美丶日本不卡视频| thepron国产精品| 欧美色倩网站大全免费| 欧美成人伊人久久综合网| 国产视频一区在线观看| 亚洲精选在线视频| 久久狠狠亚洲综合| 国产成人精品影视| 欧美亚洲免费在线一区| 精品日韩欧美在线| 亚洲欧洲av在线| 日韩国产欧美视频| 欧美精品精品一区| 国产日韩欧美综合在线| 亚洲欧美一区二区三区极速播放 | 中文字幕av一区二区三区高| 一二三区精品福利视频| 捆绑变态av一区二区三区| 91在线高清观看| 欧美成人一级视频| 一区二区三区四区中文字幕| 精东粉嫩av免费一区二区三区| 91论坛在线播放| 精品国产露脸精彩对白| 亚洲精品一二三| 国产精品69毛片高清亚洲| 欧美日韩国产首页| 综合久久给合久久狠狠狠97色| 日韩成人午夜精品| 91免费视频网| 久久先锋影音av鲁色资源网| 夜夜操天天操亚洲| 不卡av在线免费观看| 欧美一区二区在线看| 亚洲免费av高清| 国产精品99久久久久久似苏梦涵| 欧美三级三级三级爽爽爽| 日本一区二区成人在线| 免费观看日韩电影| 欧美最猛黑人xxxxx猛交| 中文字幕欧美三区| 国产原创一区二区| 欧美日本一道本| 一区二区视频免费在线观看| 风流少妇一区二区| 26uuu色噜噜精品一区| 日本欧美在线看| 国产日韩av一区| 美女免费视频一区| 91精品国产综合久久精品图片| 亚洲欧美日韩久久精品| 成人在线视频首页| 国产欧美一区二区精品性| 国产一区二三区| 日韩一二三四区| 日本三级亚洲精品| 欧美一区二区视频在线观看2020 | 国产精品蜜臀av| 激情综合色综合久久综合| 欧美三级日韩在线| 亚洲国产精品一区二区尤物区| 色视频欧美一区二区三区| 国产精品久久久久永久免费观看| 国产成人免费在线视频| 国产女同互慰高潮91漫画| 丰满白嫩尤物一区二区| 欧美激情一区二区三区| 成人av手机在线观看| 国产精品三级电影| 99在线精品免费| 亚洲欧美日韩久久| 欧美午夜电影一区| 日本不卡123| 日韩免费观看2025年上映的电影| 日本亚洲最大的色成网站www| 91精品国产综合久久精品性色| 奇米四色…亚洲| 久久久久久亚洲综合| 日韩视频在线一区二区| 国内欧美视频一区二区| 久久精品夜色噜噜亚洲a∨| yourporn久久国产精品| 亚洲夂夂婷婷色拍ww47| 欧美日韩精品三区| 久久99久久99小草精品免视看| 久久久精品免费免费| 成人av在线资源网站| 亚洲制服丝袜av| 日韩精品一区二区三区四区| 国产一区二区三区精品视频| 中文字幕成人网| 欧美网站一区二区| 极品少妇xxxx精品少妇偷拍| 中文字幕一区二区在线观看| 欧美私人免费视频| 久久精品噜噜噜成人88aⅴ| 国产女主播视频一区二区| 91成人免费在线| 精一区二区三区| 亚洲男人的天堂网| 日韩精品专区在线影院重磅| 成人av免费在线播放|