ia64/xen-unstable

view linux-2.6-xen-sparse/drivers/char/tpm/tpm.h @ 8745:514f2585d102

Converge the TPM drivers in the Xen repository
with those coming from the 2.6.15 kernel. Some files can now be
taken from 2.6.15 directly and can therefore be removed.

Signed-off-by: Stefan Berger <stefanb@us.ibm.com>
author cl349@firebug.cl.cam.ac.uk
date Fri Feb 03 09:31:28 2006 +0000 (2006-02-03)
parents 2494b4e00cbb
children 2401f414d1ad
line source
1 /*
2 * Copyright (C) 2004 IBM Corporation
3 *
4 * Authors:
5 * Leendert van Doorn <leendert@watson.ibm.com>
6 * Dave Safford <safford@watson.ibm.com>
7 * Reiner Sailer <sailer@watson.ibm.com>
8 * Kylene Hall <kjhall@us.ibm.com>
9 *
10 * Maintained by: <tpmdd_devel@lists.sourceforge.net>
11 *
12 * Device driver for TCG/TCPA TPM (trusted platform module).
13 * Specifications at www.trustedcomputinggroup.org
14 *
15 * This program is free software; you can redistribute it and/or
16 * modify it under the terms of the GNU General Public License as
17 * published by the Free Software Foundation, version 2 of the
18 * License.
19 *
20 */
21 #include <linux/module.h>
22 #include <linux/pci.h>
23 #include <linux/delay.h>
24 #include <linux/fs.h>
25 #include <linux/miscdevice.h>
26 #include <linux/platform_device.h>
28 enum tpm_timeout {
29 TPM_TIMEOUT = 5, /* msecs */
30 };
32 /* TPM addresses */
33 enum tpm_addr {
34 TPM_SUPERIO_ADDR = 0x2E,
35 TPM_ADDR = 0x4E,
36 };
38 extern ssize_t tpm_show_pubek(struct device *, struct device_attribute *attr,
39 char *);
40 extern ssize_t tpm_show_pcrs(struct device *, struct device_attribute *attr,
41 char *);
42 extern ssize_t tpm_show_caps(struct device *, struct device_attribute *attr,
43 char *);
44 extern ssize_t tpm_store_cancel(struct device *, struct device_attribute *attr,
45 const char *, size_t);
47 struct tpm_chip;
49 struct tpm_vendor_specific {
50 u8 req_complete_mask;
51 u8 req_complete_val;
52 u8 req_canceled;
53 u32 buffersize;
54 void __iomem *iobase; /* ioremapped address */
55 unsigned long base; /* TPM base address */
57 int region_size;
58 int have_region;
60 int (*recv) (struct tpm_chip *, u8 *, size_t);
61 int (*send) (struct tpm_chip *, u8 *, size_t);
62 void (*cancel) (struct tpm_chip *);
63 u8 (*status) (struct tpm_chip *);
64 struct miscdevice miscdev;
65 struct attribute_group *attr_group;
66 };
68 struct tpm_chip {
69 struct device *dev; /* Device stuff */
71 int dev_num; /* /dev/tpm# */
72 int num_opens; /* only one allowed */
73 int time_expired;
75 /* Data passed to and from the tpm via the read/write calls */
76 u8 *data_buffer;
77 atomic_t data_pending;
78 atomic_t data_position;
79 struct semaphore buffer_mutex;
81 struct timer_list user_read_timer; /* user needs to claim result */
82 struct work_struct work;
83 struct semaphore tpm_mutex; /* tpm is processing */
85 struct tpm_vendor_specific *vendor;
87 struct dentry **bios_dir;
89 struct list_head list;
90 };
92 static inline int tpm_read_index(int base, int index)
93 {
94 outb(index, base);
95 return inb(base+1) & 0xFF;
96 }
98 static inline void tpm_write_index(int base, int index, int value)
99 {
100 outb(index, base);
101 outb(value & 0xFF, base+1);
102 }
104 extern int tpm_register_hardware(struct device *,
105 struct tpm_vendor_specific *);
106 extern int tpm_open(struct inode *, struct file *);
107 extern int tpm_release(struct inode *, struct file *);
108 extern ssize_t tpm_write(struct file *, const char __user *, size_t,
109 loff_t *);
110 extern ssize_t tpm_read(struct file *, char __user *, size_t, loff_t *);
111 extern void tpm_remove_hardware(struct device *);
112 extern int tpm_pm_suspend(struct device *, pm_message_t);
113 extern int tpm_pm_resume(struct device *);
115 #ifdef CONFIG_ACPI
116 extern struct dentry ** tpm_bios_log_setup(char *);
117 extern void tpm_bios_log_teardown(struct dentry **);
118 #else
119 static inline struct dentry* tpm_bios_log_setup(char *name)
120 {
121 return NULL;
122 }
123 static inline void tpm_bios_log_teardown(struct dentry **dir)
124 {
125 }
126 #endif