diff options
| author | Jason Gunthorpe <jgunthorpe@obsidianresearch.com> | 2013-11-26 15:30:43 -0500 |
|---|---|---|
| committer | Peter Huewe <peterhuewe@gmx.de> | 2014-01-06 08:37:25 -0500 |
| commit | 01ad1fa75dd243909d62dba25a93254b20d5fe81 (patch) | |
| tree | f7a09e61ead8f9e0a1002dde7e53d0376b8b3c19 | |
| parent | 1e3b73a95793555860512008035f6822406a2a79 (diff) | |
tpm: Create a tpm_class_ops structure and use it in the drivers
This replaces the static initialization of a tpm_vendor_specific
structure in the drivers with the standard Linux idiom of providing
a const structure of function pointers.
Signed-off-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Reviewed-by: Joel Schopp <jschopp@linux.vnet.ibm.com>
Reviewed-by: Ashley Lai <adlai@linux.vnet.ibm.com>
[phuewe: did apply manually due to commit
191ffc6bde3 tpm/tpm_i2c_atmel: fix coccinelle warnings]
Signed-off-by: Peter Huewe <peterhuewe@gmx.de>
| -rw-r--r-- | drivers/char/tpm/tpm-interface.c | 10 | ||||
| -rw-r--r-- | drivers/char/tpm/tpm.h | 6 | ||||
| -rw-r--r-- | drivers/char/tpm/tpm_atmel.c | 2 | ||||
| -rw-r--r-- | drivers/char/tpm/tpm_i2c_atmel.c | 2 | ||||
| -rw-r--r-- | drivers/char/tpm/tpm_i2c_infineon.c | 2 | ||||
| -rw-r--r-- | drivers/char/tpm/tpm_i2c_nuvoton.c | 2 | ||||
| -rw-r--r-- | drivers/char/tpm/tpm_i2c_stm_st33.c | 2 | ||||
| -rw-r--r-- | drivers/char/tpm/tpm_ibmvtpm.c | 2 | ||||
| -rw-r--r-- | drivers/char/tpm/tpm_infineon.c | 2 | ||||
| -rw-r--r-- | drivers/char/tpm/tpm_nsc.c | 2 | ||||
| -rw-r--r-- | drivers/char/tpm/tpm_tis.c | 2 | ||||
| -rw-r--r-- | drivers/char/tpm/xen-tpmfront.c | 2 | ||||
| -rw-r--r-- | include/linux/tpm.h | 12 |
13 files changed, 33 insertions, 15 deletions
diff --git a/drivers/char/tpm/tpm-interface.c b/drivers/char/tpm/tpm-interface.c index 389d483a887c..1b012463da7c 100644 --- a/drivers/char/tpm/tpm-interface.c +++ b/drivers/char/tpm/tpm-interface.c | |||
| @@ -1060,7 +1060,7 @@ static void tpm_dev_release(struct device *dev) | |||
| 1060 | * pci_disable_device | 1060 | * pci_disable_device |
| 1061 | */ | 1061 | */ |
| 1062 | struct tpm_chip *tpm_register_hardware(struct device *dev, | 1062 | struct tpm_chip *tpm_register_hardware(struct device *dev, |
| 1063 | const struct tpm_vendor_specific *entry) | 1063 | const struct tpm_class_ops *ops) |
| 1064 | { | 1064 | { |
| 1065 | struct tpm_chip *chip; | 1065 | struct tpm_chip *chip; |
| 1066 | 1066 | ||
| @@ -1073,7 +1073,13 @@ struct tpm_chip *tpm_register_hardware(struct device *dev, | |||
| 1073 | mutex_init(&chip->tpm_mutex); | 1073 | mutex_init(&chip->tpm_mutex); |
| 1074 | INIT_LIST_HEAD(&chip->list); | 1074 | INIT_LIST_HEAD(&chip->list); |
| 1075 | 1075 | ||
| 1076 | memcpy(&chip->vendor, entry, sizeof(struct tpm_vendor_specific)); | 1076 | chip->vendor.req_complete_mask = ops->req_complete_mask; |
| 1077 | chip->vendor.req_complete_val = ops->req_complete_val; | ||
| 1078 | chip->vendor.req_canceled = ops->req_canceled; | ||
| 1079 | chip->vendor.recv = ops->recv; | ||
| 1080 | chip->vendor.send = ops->send; | ||
| 1081 | chip->vendor.cancel = ops->cancel; | ||
| 1082 | chip->vendor.status = ops->status; | ||
| 1077 | 1083 | ||
| 1078 | chip->dev_num = find_first_zero_bit(dev_mask, TPM_NUM_DEVICES); | 1084 | chip->dev_num = find_first_zero_bit(dev_mask, TPM_NUM_DEVICES); |
| 1079 | 1085 | ||
diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h index 14ba1627d78e..a56af2c13518 100644 --- a/drivers/char/tpm/tpm.h +++ b/drivers/char/tpm/tpm.h | |||
| @@ -64,8 +64,8 @@ enum tpm_duration { | |||
| 64 | struct tpm_chip; | 64 | struct tpm_chip; |
| 65 | 65 | ||
| 66 | struct tpm_vendor_specific { | 66 | struct tpm_vendor_specific { |
| 67 | const u8 req_complete_mask; | 67 | u8 req_complete_mask; |
| 68 | const u8 req_complete_val; | 68 | u8 req_complete_val; |
| 69 | bool (*req_canceled)(struct tpm_chip *chip, u8 status); | 69 | bool (*req_canceled)(struct tpm_chip *chip, u8 status); |
| 70 | void __iomem *iobase; /* ioremapped address */ | 70 | void __iomem *iobase; /* ioremapped address */ |
| 71 | unsigned long base; /* TPM base address */ | 71 | unsigned long base; /* TPM base address */ |
| @@ -336,7 +336,7 @@ extern void tpm_gen_interrupt(struct tpm_chip *); | |||
| 336 | extern int tpm_do_selftest(struct tpm_chip *); | 336 | extern int tpm_do_selftest(struct tpm_chip *); |
| 337 | extern unsigned long tpm_calc_ordinal_duration(struct tpm_chip *, u32); | 337 | extern unsigned long tpm_calc_ordinal_duration(struct tpm_chip *, u32); |
| 338 | extern struct tpm_chip* tpm_register_hardware(struct device *, | 338 | extern struct tpm_chip* tpm_register_hardware(struct device *, |
| 339 | const struct tpm_vendor_specific *); | 339 | const struct tpm_class_ops *ops); |
| 340 | extern void tpm_dev_vendor_release(struct tpm_chip *); | 340 | extern void tpm_dev_vendor_release(struct tpm_chip *); |
| 341 | extern void tpm_remove_hardware(struct device *); | 341 | extern void tpm_remove_hardware(struct device *); |
| 342 | extern int tpm_pm_suspend(struct device *); | 342 | extern int tpm_pm_suspend(struct device *); |
diff --git a/drivers/char/tpm/tpm_atmel.c b/drivers/char/tpm/tpm_atmel.c index 7e665d047c93..6069d13ae4ac 100644 --- a/drivers/char/tpm/tpm_atmel.c +++ b/drivers/char/tpm/tpm_atmel.c | |||
| @@ -121,7 +121,7 @@ static bool tpm_atml_req_canceled(struct tpm_chip *chip, u8 status) | |||
| 121 | return (status == ATML_STATUS_READY); | 121 | return (status == ATML_STATUS_READY); |
| 122 | } | 122 | } |
| 123 | 123 | ||
| 124 | static const struct tpm_vendor_specific tpm_atmel = { | 124 | static const struct tpm_class_ops tpm_atmel = { |
| 125 | .recv = tpm_atml_recv, | 125 | .recv = tpm_atml_recv, |
| 126 | .send = tpm_atml_send, | 126 | .send = tpm_atml_send, |
| 127 | .cancel = tpm_atml_cancel, | 127 | .cancel = tpm_atml_cancel, |
diff --git a/drivers/char/tpm/tpm_i2c_atmel.c b/drivers/char/tpm/tpm_i2c_atmel.c index fe8bdce7d24f..77272925dee6 100644 --- a/drivers/char/tpm/tpm_i2c_atmel.c +++ b/drivers/char/tpm/tpm_i2c_atmel.c | |||
| @@ -140,7 +140,7 @@ static bool i2c_atmel_req_canceled(struct tpm_chip *chip, u8 status) | |||
| 140 | return false; | 140 | return false; |
| 141 | } | 141 | } |
| 142 | 142 | ||
| 143 | static const struct tpm_vendor_specific i2c_atmel = { | 143 | static const struct tpm_class_ops i2c_atmel = { |
| 144 | .status = i2c_atmel_read_status, | 144 | .status = i2c_atmel_read_status, |
| 145 | .recv = i2c_atmel_recv, | 145 | .recv = i2c_atmel_recv, |
| 146 | .send = i2c_atmel_send, | 146 | .send = i2c_atmel_send, |
diff --git a/drivers/char/tpm/tpm_i2c_infineon.c b/drivers/char/tpm/tpm_i2c_infineon.c index ac1218f41afe..52b9b2b2f300 100644 --- a/drivers/char/tpm/tpm_i2c_infineon.c +++ b/drivers/char/tpm/tpm_i2c_infineon.c | |||
| @@ -566,7 +566,7 @@ static bool tpm_tis_i2c_req_canceled(struct tpm_chip *chip, u8 status) | |||
| 566 | return (status == TPM_STS_COMMAND_READY); | 566 | return (status == TPM_STS_COMMAND_READY); |
| 567 | } | 567 | } |
| 568 | 568 | ||
| 569 | static struct tpm_vendor_specific tpm_tis_i2c = { | 569 | static const struct tpm_class_ops tpm_tis_i2c = { |
| 570 | .status = tpm_tis_i2c_status, | 570 | .status = tpm_tis_i2c_status, |
| 571 | .recv = tpm_tis_i2c_recv, | 571 | .recv = tpm_tis_i2c_recv, |
| 572 | .send = tpm_tis_i2c_send, | 572 | .send = tpm_tis_i2c_send, |
diff --git a/drivers/char/tpm/tpm_i2c_nuvoton.c b/drivers/char/tpm/tpm_i2c_nuvoton.c index 1e6905ba0dea..7b158efd49f7 100644 --- a/drivers/char/tpm/tpm_i2c_nuvoton.c +++ b/drivers/char/tpm/tpm_i2c_nuvoton.c | |||
| @@ -455,7 +455,7 @@ static bool i2c_nuvoton_req_canceled(struct tpm_chip *chip, u8 status) | |||
| 455 | return (status == TPM_STS_COMMAND_READY); | 455 | return (status == TPM_STS_COMMAND_READY); |
| 456 | } | 456 | } |
| 457 | 457 | ||
| 458 | static const struct tpm_vendor_specific tpm_i2c = { | 458 | static const struct tpm_class_ops tpm_i2c = { |
| 459 | .status = i2c_nuvoton_read_status, | 459 | .status = i2c_nuvoton_read_status, |
| 460 | .recv = i2c_nuvoton_recv, | 460 | .recv = i2c_nuvoton_recv, |
| 461 | .send = i2c_nuvoton_send, | 461 | .send = i2c_nuvoton_send, |
diff --git a/drivers/char/tpm/tpm_i2c_stm_st33.c b/drivers/char/tpm/tpm_i2c_stm_st33.c index 6902f7b11e48..874b3be330bc 100644 --- a/drivers/char/tpm/tpm_i2c_stm_st33.c +++ b/drivers/char/tpm/tpm_i2c_stm_st33.c | |||
| @@ -574,7 +574,7 @@ static bool tpm_st33_i2c_req_canceled(struct tpm_chip *chip, u8 status) | |||
| 574 | return (status == TPM_STS_COMMAND_READY); | 574 | return (status == TPM_STS_COMMAND_READY); |
| 575 | } | 575 | } |
| 576 | 576 | ||
| 577 | static struct tpm_vendor_specific st_i2c_tpm = { | 577 | static const struct tpm_class_ops st_i2c_tpm = { |
| 578 | .send = tpm_stm_i2c_send, | 578 | .send = tpm_stm_i2c_send, |
| 579 | .recv = tpm_stm_i2c_recv, | 579 | .recv = tpm_stm_i2c_recv, |
| 580 | .cancel = tpm_stm_i2c_cancel, | 580 | .cancel = tpm_stm_i2c_cancel, |
diff --git a/drivers/char/tpm/tpm_ibmvtpm.c b/drivers/char/tpm/tpm_ibmvtpm.c index ff064f08b48e..af74c57e5090 100644 --- a/drivers/char/tpm/tpm_ibmvtpm.c +++ b/drivers/char/tpm/tpm_ibmvtpm.c | |||
| @@ -403,7 +403,7 @@ static bool tpm_ibmvtpm_req_canceled(struct tpm_chip *chip, u8 status) | |||
| 403 | return (status == 0); | 403 | return (status == 0); |
| 404 | } | 404 | } |
| 405 | 405 | ||
| 406 | static const struct tpm_vendor_specific tpm_ibmvtpm = { | 406 | static const struct tpm_class_ops tpm_ibmvtpm = { |
| 407 | .recv = tpm_ibmvtpm_recv, | 407 | .recv = tpm_ibmvtpm_recv, |
| 408 | .send = tpm_ibmvtpm_send, | 408 | .send = tpm_ibmvtpm_send, |
| 409 | .cancel = tpm_ibmvtpm_cancel, | 409 | .cancel = tpm_ibmvtpm_cancel, |
diff --git a/drivers/char/tpm/tpm_infineon.c b/drivers/char/tpm/tpm_infineon.c index 9525be5c136c..dc0a2554034e 100644 --- a/drivers/char/tpm/tpm_infineon.c +++ b/drivers/char/tpm/tpm_infineon.c | |||
| @@ -371,7 +371,7 @@ static u8 tpm_inf_status(struct tpm_chip *chip) | |||
| 371 | return tpm_data_in(STAT); | 371 | return tpm_data_in(STAT); |
| 372 | } | 372 | } |
| 373 | 373 | ||
| 374 | static const struct tpm_vendor_specific tpm_inf = { | 374 | static const struct tpm_class_ops tpm_inf = { |
| 375 | .recv = tpm_inf_recv, | 375 | .recv = tpm_inf_recv, |
| 376 | .send = tpm_inf_send, | 376 | .send = tpm_inf_send, |
| 377 | .cancel = tpm_inf_cancel, | 377 | .cancel = tpm_inf_cancel, |
diff --git a/drivers/char/tpm/tpm_nsc.c b/drivers/char/tpm/tpm_nsc.c index ad980be553dc..3179ec9cffdc 100644 --- a/drivers/char/tpm/tpm_nsc.c +++ b/drivers/char/tpm/tpm_nsc.c | |||
| @@ -232,7 +232,7 @@ static bool tpm_nsc_req_canceled(struct tpm_chip *chip, u8 status) | |||
| 232 | return (status == NSC_STATUS_RDY); | 232 | return (status == NSC_STATUS_RDY); |
| 233 | } | 233 | } |
| 234 | 234 | ||
| 235 | static const struct tpm_vendor_specific tpm_nsc = { | 235 | static const struct tpm_class_ops tpm_nsc = { |
| 236 | .recv = tpm_nsc_recv, | 236 | .recv = tpm_nsc_recv, |
| 237 | .send = tpm_nsc_send, | 237 | .send = tpm_nsc_send, |
| 238 | .cancel = tpm_nsc_cancel, | 238 | .cancel = tpm_nsc_cancel, |
diff --git a/drivers/char/tpm/tpm_tis.c b/drivers/char/tpm/tpm_tis.c index a362edec58d4..8094b081a8be 100644 --- a/drivers/char/tpm/tpm_tis.c +++ b/drivers/char/tpm/tpm_tis.c | |||
| @@ -432,7 +432,7 @@ static bool tpm_tis_req_canceled(struct tpm_chip *chip, u8 status) | |||
| 432 | } | 432 | } |
| 433 | } | 433 | } |
| 434 | 434 | ||
| 435 | static struct tpm_vendor_specific tpm_tis = { | 435 | static const struct tpm_class_ops tpm_tis = { |
| 436 | .status = tpm_tis_status, | 436 | .status = tpm_tis_status, |
| 437 | .recv = tpm_tis_recv, | 437 | .recv = tpm_tis_recv, |
| 438 | .send = tpm_tis_send, | 438 | .send = tpm_tis_send, |
diff --git a/drivers/char/tpm/xen-tpmfront.c b/drivers/char/tpm/xen-tpmfront.c index d4f6b5213443..92b097064df5 100644 --- a/drivers/char/tpm/xen-tpmfront.c +++ b/drivers/char/tpm/xen-tpmfront.c | |||
| @@ -143,7 +143,7 @@ static int vtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count) | |||
| 143 | return length; | 143 | return length; |
| 144 | } | 144 | } |
| 145 | 145 | ||
| 146 | static const struct tpm_vendor_specific tpm_vtpm = { | 146 | static const struct tpm_class_ops tpm_vtpm = { |
| 147 | .status = vtpm_status, | 147 | .status = vtpm_status, |
| 148 | .recv = vtpm_recv, | 148 | .recv = vtpm_recv, |
| 149 | .send = vtpm_send, | 149 | .send = vtpm_send, |
diff --git a/include/linux/tpm.h b/include/linux/tpm.h index 9a9051bb1a03..fff1d0976f80 100644 --- a/include/linux/tpm.h +++ b/include/linux/tpm.h | |||
| @@ -29,6 +29,18 @@ | |||
| 29 | */ | 29 | */ |
| 30 | #define TPM_ANY_NUM 0xFFFF | 30 | #define TPM_ANY_NUM 0xFFFF |
| 31 | 31 | ||
| 32 | struct tpm_chip; | ||
| 33 | |||
| 34 | struct tpm_class_ops { | ||
| 35 | const u8 req_complete_mask; | ||
| 36 | const u8 req_complete_val; | ||
| 37 | bool (*req_canceled)(struct tpm_chip *chip, u8 status); | ||
| 38 | int (*recv) (struct tpm_chip *chip, u8 *buf, size_t len); | ||
| 39 | int (*send) (struct tpm_chip *chip, u8 *buf, size_t len); | ||
| 40 | void (*cancel) (struct tpm_chip *chip); | ||
| 41 | u8 (*status) (struct tpm_chip *chip); | ||
| 42 | }; | ||
| 43 | |||
| 32 | #if defined(CONFIG_TCG_TPM) || defined(CONFIG_TCG_TPM_MODULE) | 44 | #if defined(CONFIG_TCG_TPM) || defined(CONFIG_TCG_TPM_MODULE) |
| 33 | 45 | ||
| 34 | extern int tpm_pcr_read(u32 chip_num, int pcr_idx, u8 *res_buf); | 46 | extern int tpm_pcr_read(u32 chip_num, int pcr_idx, u8 *res_buf); |
