[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] Allow adjustment of the size of TPM transfer buffers



# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID dd87869f877ca9c68c97f36b3870908fb279edb9
# Parent  a9dce0ffc90198bbc0cef139212efd4b8f3b129b
Allow adjustment of the size of TPM transfer buffers 
to the size that a lower-layer driver supports.

Signed-off-by: Stefan Berger <stefanb@xxxxxxxxxx>

diff -r a9dce0ffc901 -r dd87869f877c 
linux-2.6-xen-sparse/drivers/char/tpm/tpm_nopci.c
--- a/linux-2.6-xen-sparse/drivers/char/tpm/tpm_nopci.c Mon Oct  3 14:04:27 2005
+++ b/linux-2.6-xen-sparse/drivers/char/tpm/tpm_nopci.c Mon Oct  3 14:05:37 2005
@@ -30,7 +30,8 @@
 
 enum {
        TPM_MINOR = 224,        /* officially assigned */
-       TPM_BUFSIZE = 2048,
+       TPM_MIN_BUFSIZE = 2048,
+       TPM_MAX_BUFSIZE = 65536,
        TPM_NUM_DEVICES = 256,
        TPM_NUM_MASK_ENTRIES = TPM_NUM_DEVICES / (8 * sizeof(int))
 };
@@ -63,7 +64,7 @@
 
        down(&chip->buffer_mutex);
        atomic_set(&chip->data_pending, 0);
-       memset(chip->data_buffer, 0, TPM_BUFSIZE);
+       memset(chip->data_buffer, 0, chip->vendor->buffersize);
        up(&chip->buffer_mutex);
 }
 
@@ -458,7 +459,8 @@
 
        spin_unlock(&driver_lock);
 
-       chip->data_buffer = kmalloc(TPM_BUFSIZE * sizeof(u8), GFP_KERNEL);
+       chip->data_buffer = kmalloc(chip->vendor->buffersize * sizeof(u8),
+                                   GFP_KERNEL);
        if (chip->data_buffer == NULL) {
                chip->num_opens--;
                put_device(chip->dev);
@@ -507,8 +509,8 @@
 
        down(&chip->buffer_mutex);
 
-       if (in_size > TPM_BUFSIZE)
-               in_size = TPM_BUFSIZE;
+       if (in_size > chip->vendor->buffersize)
+               in_size = chip->vendor->buffersize;
 
        if (copy_from_user
            (chip->data_buffer, (void __user *) buf, in_size)) {
@@ -517,7 +519,9 @@
        }
 
        /* atomic tpm command send and result receive */
-       out_size = tpm_transmit(chip, chip->data_buffer, TPM_BUFSIZE);
+       out_size = tpm_transmit(chip,
+                               chip->data_buffer,
+                               chip->vendor->buffersize);
 
        atomic_set(&chip->data_pending, out_size);
        up(&chip->buffer_mutex);
@@ -667,6 +671,12 @@
 
        chip->vendor = entry;
 
+       if (entry->buffersize < TPM_MIN_BUFSIZE) {
+               entry->buffersize = TPM_MIN_BUFSIZE;
+       } else if (entry->buffersize > TPM_MAX_BUFSIZE) {
+               entry->buffersize = TPM_MAX_BUFSIZE;
+       }
+
        chip->dev_num = -1;
 
        for (i = 0; i < TPM_NUM_MASK_ENTRIES; i++)
diff -r a9dce0ffc901 -r dd87869f877c 
linux-2.6-xen-sparse/drivers/char/tpm/tpm_nopci.h
--- a/linux-2.6-xen-sparse/drivers/char/tpm/tpm_nopci.h Mon Oct  3 14:04:27 2005
+++ b/linux-2.6-xen-sparse/drivers/char/tpm/tpm_nopci.h Mon Oct  3 14:05:37 2005
@@ -62,6 +62,7 @@
        u8 req_complete_val;
        u8 req_canceled;
        u16 base;               /* TPM base address */
+       u32 buffersize;         /* The device's requested buffersize */
 
        int (*recv) (struct tpm_chip *, u8 *, size_t);
        int (*send) (struct tpm_chip *, u8 *, size_t);
diff -r a9dce0ffc901 -r dd87869f877c 
linux-2.6-xen-sparse/drivers/char/tpm/tpm_xen.c
--- a/linux-2.6-xen-sparse/drivers/char/tpm/tpm_xen.c   Mon Oct  3 14:04:27 2005
+++ b/linux-2.6-xen-sparse/drivers/char/tpm/tpm_xen.c   Mon Oct  3 14:05:37 2005
@@ -445,6 +445,7 @@
        .base = 0,
        .attr = TPM_DEVICE_ATTRS,
        .miscdev.fops = &tpm_xen_ops,
+       .buffersize = 64 * 1024,
 };
 
 static struct device tpm_device = {
@@ -476,6 +477,8 @@
                tpm_fe_unregister_receiver();
                return rc;
        }
+
+       tpm_xen.buffersize = tpmfe.max_tx_size;
 
        if ((rc = tpm_register_hardware_nopci(&tpm_device, &tpm_xen)) < 0) {
                device_unregister(&tpm_device);

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.