Commit 01ad1fa7 authored by Jason Gunthorpe's avatar Jason Gunthorpe Committed by Peter Huewe

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: default avatarJason Gunthorpe <jgunthorpe@obsidianresearch.com>
Reviewed-by: default avatarJoel Schopp <jschopp@linux.vnet.ibm.com>
Reviewed-by: default avatarAshley Lai <adlai@linux.vnet.ibm.com>
[phuewe: did apply manually due to commit
191ffc6bde3 tpm/tpm_i2c_atmel: fix coccinelle warnings]
Signed-off-by: default avatarPeter Huewe <peterhuewe@gmx.de>
parent 1e3b73a9
...@@ -1060,7 +1060,7 @@ static void tpm_dev_release(struct device *dev) ...@@ -1060,7 +1060,7 @@ static void tpm_dev_release(struct device *dev)
* pci_disable_device * pci_disable_device
*/ */
struct tpm_chip *tpm_register_hardware(struct device *dev, struct tpm_chip *tpm_register_hardware(struct device *dev,
const struct tpm_vendor_specific *entry) const struct tpm_class_ops *ops)
{ {
struct tpm_chip *chip; struct tpm_chip *chip;
...@@ -1073,7 +1073,13 @@ struct tpm_chip *tpm_register_hardware(struct device *dev, ...@@ -1073,7 +1073,13 @@ struct tpm_chip *tpm_register_hardware(struct device *dev,
mutex_init(&chip->tpm_mutex); mutex_init(&chip->tpm_mutex);
INIT_LIST_HEAD(&chip->list); INIT_LIST_HEAD(&chip->list);
memcpy(&chip->vendor, entry, sizeof(struct tpm_vendor_specific)); chip->vendor.req_complete_mask = ops->req_complete_mask;
chip->vendor.req_complete_val = ops->req_complete_val;
chip->vendor.req_canceled = ops->req_canceled;
chip->vendor.recv = ops->recv;
chip->vendor.send = ops->send;
chip->vendor.cancel = ops->cancel;
chip->vendor.status = ops->status;
chip->dev_num = find_first_zero_bit(dev_mask, TPM_NUM_DEVICES); chip->dev_num = find_first_zero_bit(dev_mask, TPM_NUM_DEVICES);
......
...@@ -64,8 +64,8 @@ enum tpm_duration { ...@@ -64,8 +64,8 @@ enum tpm_duration {
struct tpm_chip; struct tpm_chip;
struct tpm_vendor_specific { struct tpm_vendor_specific {
const u8 req_complete_mask; u8 req_complete_mask;
const u8 req_complete_val; u8 req_complete_val;
bool (*req_canceled)(struct tpm_chip *chip, u8 status); bool (*req_canceled)(struct tpm_chip *chip, u8 status);
void __iomem *iobase; /* ioremapped address */ void __iomem *iobase; /* ioremapped address */
unsigned long base; /* TPM base address */ unsigned long base; /* TPM base address */
...@@ -336,7 +336,7 @@ extern void tpm_gen_interrupt(struct tpm_chip *); ...@@ -336,7 +336,7 @@ extern void tpm_gen_interrupt(struct tpm_chip *);
extern int tpm_do_selftest(struct tpm_chip *); extern int tpm_do_selftest(struct tpm_chip *);
extern unsigned long tpm_calc_ordinal_duration(struct tpm_chip *, u32); extern unsigned long tpm_calc_ordinal_duration(struct tpm_chip *, u32);
extern struct tpm_chip* tpm_register_hardware(struct device *, extern struct tpm_chip* tpm_register_hardware(struct device *,
const struct tpm_vendor_specific *); const struct tpm_class_ops *ops);
extern void tpm_dev_vendor_release(struct tpm_chip *); extern void tpm_dev_vendor_release(struct tpm_chip *);
extern void tpm_remove_hardware(struct device *); extern void tpm_remove_hardware(struct device *);
extern int tpm_pm_suspend(struct device *); extern int tpm_pm_suspend(struct device *);
......
...@@ -121,7 +121,7 @@ static bool tpm_atml_req_canceled(struct tpm_chip *chip, u8 status) ...@@ -121,7 +121,7 @@ static bool tpm_atml_req_canceled(struct tpm_chip *chip, u8 status)
return (status == ATML_STATUS_READY); return (status == ATML_STATUS_READY);
} }
static const struct tpm_vendor_specific tpm_atmel = { static const struct tpm_class_ops tpm_atmel = {
.recv = tpm_atml_recv, .recv = tpm_atml_recv,
.send = tpm_atml_send, .send = tpm_atml_send,
.cancel = tpm_atml_cancel, .cancel = tpm_atml_cancel,
......
...@@ -140,7 +140,7 @@ static bool i2c_atmel_req_canceled(struct tpm_chip *chip, u8 status) ...@@ -140,7 +140,7 @@ static bool i2c_atmel_req_canceled(struct tpm_chip *chip, u8 status)
return false; return false;
} }
static const struct tpm_vendor_specific i2c_atmel = { static const struct tpm_class_ops i2c_atmel = {
.status = i2c_atmel_read_status, .status = i2c_atmel_read_status,
.recv = i2c_atmel_recv, .recv = i2c_atmel_recv,
.send = i2c_atmel_send, .send = i2c_atmel_send,
......
...@@ -566,7 +566,7 @@ static bool tpm_tis_i2c_req_canceled(struct tpm_chip *chip, u8 status) ...@@ -566,7 +566,7 @@ static bool tpm_tis_i2c_req_canceled(struct tpm_chip *chip, u8 status)
return (status == TPM_STS_COMMAND_READY); return (status == TPM_STS_COMMAND_READY);
} }
static struct tpm_vendor_specific tpm_tis_i2c = { static const struct tpm_class_ops tpm_tis_i2c = {
.status = tpm_tis_i2c_status, .status = tpm_tis_i2c_status,
.recv = tpm_tis_i2c_recv, .recv = tpm_tis_i2c_recv,
.send = tpm_tis_i2c_send, .send = tpm_tis_i2c_send,
......
...@@ -455,7 +455,7 @@ static bool i2c_nuvoton_req_canceled(struct tpm_chip *chip, u8 status) ...@@ -455,7 +455,7 @@ static bool i2c_nuvoton_req_canceled(struct tpm_chip *chip, u8 status)
return (status == TPM_STS_COMMAND_READY); return (status == TPM_STS_COMMAND_READY);
} }
static const struct tpm_vendor_specific tpm_i2c = { static const struct tpm_class_ops tpm_i2c = {
.status = i2c_nuvoton_read_status, .status = i2c_nuvoton_read_status,
.recv = i2c_nuvoton_recv, .recv = i2c_nuvoton_recv,
.send = i2c_nuvoton_send, .send = i2c_nuvoton_send,
......
...@@ -574,7 +574,7 @@ static bool tpm_st33_i2c_req_canceled(struct tpm_chip *chip, u8 status) ...@@ -574,7 +574,7 @@ static bool tpm_st33_i2c_req_canceled(struct tpm_chip *chip, u8 status)
return (status == TPM_STS_COMMAND_READY); return (status == TPM_STS_COMMAND_READY);
} }
static struct tpm_vendor_specific st_i2c_tpm = { static const struct tpm_class_ops st_i2c_tpm = {
.send = tpm_stm_i2c_send, .send = tpm_stm_i2c_send,
.recv = tpm_stm_i2c_recv, .recv = tpm_stm_i2c_recv,
.cancel = tpm_stm_i2c_cancel, .cancel = tpm_stm_i2c_cancel,
......
...@@ -403,7 +403,7 @@ static bool tpm_ibmvtpm_req_canceled(struct tpm_chip *chip, u8 status) ...@@ -403,7 +403,7 @@ static bool tpm_ibmvtpm_req_canceled(struct tpm_chip *chip, u8 status)
return (status == 0); return (status == 0);
} }
static const struct tpm_vendor_specific tpm_ibmvtpm = { static const struct tpm_class_ops tpm_ibmvtpm = {
.recv = tpm_ibmvtpm_recv, .recv = tpm_ibmvtpm_recv,
.send = tpm_ibmvtpm_send, .send = tpm_ibmvtpm_send,
.cancel = tpm_ibmvtpm_cancel, .cancel = tpm_ibmvtpm_cancel,
......
...@@ -371,7 +371,7 @@ static u8 tpm_inf_status(struct tpm_chip *chip) ...@@ -371,7 +371,7 @@ static u8 tpm_inf_status(struct tpm_chip *chip)
return tpm_data_in(STAT); return tpm_data_in(STAT);
} }
static const struct tpm_vendor_specific tpm_inf = { static const struct tpm_class_ops tpm_inf = {
.recv = tpm_inf_recv, .recv = tpm_inf_recv,
.send = tpm_inf_send, .send = tpm_inf_send,
.cancel = tpm_inf_cancel, .cancel = tpm_inf_cancel,
......
...@@ -232,7 +232,7 @@ static bool tpm_nsc_req_canceled(struct tpm_chip *chip, u8 status) ...@@ -232,7 +232,7 @@ static bool tpm_nsc_req_canceled(struct tpm_chip *chip, u8 status)
return (status == NSC_STATUS_RDY); return (status == NSC_STATUS_RDY);
} }
static const struct tpm_vendor_specific tpm_nsc = { static const struct tpm_class_ops tpm_nsc = {
.recv = tpm_nsc_recv, .recv = tpm_nsc_recv,
.send = tpm_nsc_send, .send = tpm_nsc_send,
.cancel = tpm_nsc_cancel, .cancel = tpm_nsc_cancel,
......
...@@ -432,7 +432,7 @@ static bool tpm_tis_req_canceled(struct tpm_chip *chip, u8 status) ...@@ -432,7 +432,7 @@ static bool tpm_tis_req_canceled(struct tpm_chip *chip, u8 status)
} }
} }
static struct tpm_vendor_specific tpm_tis = { static const struct tpm_class_ops tpm_tis = {
.status = tpm_tis_status, .status = tpm_tis_status,
.recv = tpm_tis_recv, .recv = tpm_tis_recv,
.send = tpm_tis_send, .send = tpm_tis_send,
......
...@@ -143,7 +143,7 @@ static int vtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count) ...@@ -143,7 +143,7 @@ static int vtpm_recv(struct tpm_chip *chip, u8 *buf, size_t count)
return length; return length;
} }
static const struct tpm_vendor_specific tpm_vtpm = { static const struct tpm_class_ops tpm_vtpm = {
.status = vtpm_status, .status = vtpm_status,
.recv = vtpm_recv, .recv = vtpm_recv,
.send = vtpm_send, .send = vtpm_send,
......
...@@ -29,6 +29,18 @@ ...@@ -29,6 +29,18 @@
*/ */
#define TPM_ANY_NUM 0xFFFF #define TPM_ANY_NUM 0xFFFF
struct tpm_chip;
struct tpm_class_ops {
const u8 req_complete_mask;
const u8 req_complete_val;
bool (*req_canceled)(struct tpm_chip *chip, u8 status);
int (*recv) (struct tpm_chip *chip, u8 *buf, size_t len);
int (*send) (struct tpm_chip *chip, u8 *buf, size_t len);
void (*cancel) (struct tpm_chip *chip);
u8 (*status) (struct tpm_chip *chip);
};
#if defined(CONFIG_TCG_TPM) || defined(CONFIG_TCG_TPM_MODULE) #if defined(CONFIG_TCG_TPM) || defined(CONFIG_TCG_TPM_MODULE)
extern int tpm_pcr_read(u32 chip_num, int pcr_idx, u8 *res_buf); extern int tpm_pcr_read(u32 chip_num, int pcr_idx, u8 *res_buf);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment