diff options
author | Daniel De Graaf <dgdegra@tycho.nsa.gov> | 2013-03-21 16:11:20 -0400 |
---|---|---|
committer | Ian Campbell <ian.campbell@citrix.com> | 2013-04-12 14:28:17 +0100 |
commit | 368fcb52643105d80c4705afa557647c8f7114c5 (patch) | |
tree | d8b7fc9260c92ff9297ebc6303e01ac5a929ee28 | |
parent | e66cb3294f3aa815ae6741b7030dfeb2ea801284 (diff) | |
download | xen-368fcb52643105d80c4705afa557647c8f7114c5.tar.gz xen-368fcb52643105d80c4705afa557647c8f7114c5.tar.bz2 xen-368fcb52643105d80c4705afa557647c8f7114c5.zip |
mini-os/tpmback: set up callbacks before enumeration
The open/close callbacks in tpmback cannot be properly initalized in
order to catch the initial enumeration events because init_tpmback
clears the callbacks and then asynchronously starts the enumeration of
existing tpmback devices. Fix this by passing the callbacks to
init_tpmback so they can be installed before enumeration.
This also removes the unused callbacks for suspend and resume.
Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
-rw-r--r-- | extras/mini-os/include/tpmback.h | 12 | ||||
-rw-r--r-- | extras/mini-os/tpmback.c | 31 | ||||
-rw-r--r-- | stubdom/vtpm/vtpm.c | 2 | ||||
-rw-r--r-- | stubdom/vtpmmgr/init.c | 2 |
4 files changed, 6 insertions, 41 deletions
diff --git a/extras/mini-os/include/tpmback.h b/extras/mini-os/include/tpmback.h index ec9eda4b57..3c11c347a3 100644 --- a/extras/mini-os/include/tpmback.h +++ b/extras/mini-os/include/tpmback.h @@ -56,7 +56,7 @@ struct tpmcmd { typedef struct tpmcmd tpmcmd_t; /* Initialize the tpm backend driver */ -void init_tpmback(void); +void init_tpmback(void (*open_cb)(domid_t, unsigned int), void (*close_cb)(domid_t, unsigned int)); /* Shutdown tpm backend driver */ void shutdown_tpmback(void); @@ -94,14 +94,4 @@ int tpmback_num_frontends(void); * The return value is internally allocated, so don't free it */ unsigned char* tpmback_get_uuid(domid_t domid, unsigned int handle); -/* Specify a function to call when a new tpm device connects */ -void tpmback_set_open_callback(void (*cb)(domid_t, unsigned int)); - -/* Specify a function to call when a tpm device disconnects */ -void tpmback_set_close_callback(void (*cb)(domid_t, unsigned int)); - -//Not Implemented -void tpmback_set_suspend_callback(void (*cb)(domid_t, unsigned int)); -void tpmback_set_resume_callback(void (*cb)(domid_t, unsigned int)); - #endif diff --git a/extras/mini-os/tpmback.c b/extras/mini-os/tpmback.c index 9917765133..cff3861ad2 100644 --- a/extras/mini-os/tpmback.c +++ b/extras/mini-os/tpmback.c @@ -114,8 +114,6 @@ struct tpmback_dev { /* Callbacks */ void (*open_callback)(domid_t, unsigned int); void (*close_callback)(domid_t, unsigned int); - void (*suspend_callback)(domid_t, unsigned int); - void (*resume_callback)(domid_t, unsigned int); }; typedef struct tpmback_dev tpmback_dev_t; @@ -131,8 +129,6 @@ static tpmback_dev_t gtpmdev = { .events = NULL, .open_callback = NULL, .close_callback = NULL, - .suspend_callback = NULL, - .resume_callback = NULL, }; struct wait_queue_head waitq; int globalinit = 0; @@ -809,23 +805,6 @@ unsigned char* tpmback_get_uuid(domid_t domid, unsigned int handle) return tpmif->uuid; } -void tpmback_set_open_callback(void (*cb)(domid_t, unsigned int)) -{ - gtpmdev.open_callback = cb; -} -void tpmback_set_close_callback(void (*cb)(domid_t, unsigned int)) -{ - gtpmdev.close_callback = cb; -} -void tpmback_set_suspend_callback(void (*cb)(domid_t, unsigned int)) -{ - gtpmdev.suspend_callback = cb; -} -void tpmback_set_resume_callback(void (*cb)(domid_t, unsigned int)) -{ - gtpmdev.resume_callback = cb; -} - static void event_listener(void) { const char* bepath = "backend/vtpm"; @@ -872,7 +851,7 @@ void event_thread(void* p) { event_listener(); } -void init_tpmback(void) +void init_tpmback(void (*open_cb)(domid_t, unsigned int), void (*close_cb)(domid_t, unsigned int)) { if(!globalinit) { init_waitqueue_head(&waitq); @@ -884,8 +863,8 @@ void init_tpmback(void) gtpmdev.num_tpms = 0; gtpmdev.flags = 0; - gtpmdev.open_callback = gtpmdev.close_callback = NULL; - gtpmdev.suspend_callback = gtpmdev.resume_callback = NULL; + gtpmdev.open_callback = open_cb; + gtpmdev.close_callback = close_cb; eventthread = create_thread("tpmback-listener", event_thread, NULL); @@ -893,10 +872,6 @@ void init_tpmback(void) void shutdown_tpmback(void) { - /* Disable callbacks */ - gtpmdev.open_callback = gtpmdev.close_callback = NULL; - gtpmdev.suspend_callback = gtpmdev.resume_callback = NULL; - TPMBACK_LOG("Shutting down tpm backend\n"); /* Set the quit flag */ gtpmdev.flags = TPMIF_CLOSED; diff --git a/stubdom/vtpm/vtpm.c b/stubdom/vtpm/vtpm.c index 71aef78d17..3362ea816b 100644 --- a/stubdom/vtpm/vtpm.c +++ b/stubdom/vtpm/vtpm.c @@ -367,7 +367,7 @@ int main(int argc, char **argv) } /* Initialize devices */ - init_tpmback(); + init_tpmback(NULL, NULL); if((tpmfront_dev = init_tpmfront(NULL)) == NULL) { error("Unable to initialize tpmfront device"); goto abort_posttpmfront; diff --git a/stubdom/vtpmmgr/init.c b/stubdom/vtpmmgr/init.c index a158020f1d..00dd9f3516 100644 --- a/stubdom/vtpmmgr/init.c +++ b/stubdom/vtpmmgr/init.c @@ -462,7 +462,7 @@ TPM_RESULT vtpmmgr_init(int argc, char** argv) { } //Setup tpmback device - init_tpmback(); + init_tpmback(NULL, NULL); //Setup tpm access switch(opts.tpmdriver) { |