OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [drivers/] [char/] [tpm/] [tpm.h] - Blame information for rev 65

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
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/delay.h>
23
#include <linux/fs.h>
24
#include <linux/mutex.h>
25
#include <linux/sched.h>
26
#include <linux/miscdevice.h>
27
#include <linux/platform_device.h>
28
#include <linux/io.h>
29
 
30
enum tpm_timeout {
31
        TPM_TIMEOUT = 5,        /* msecs */
32
};
33
 
34
/* TPM addresses */
35
enum tpm_addr {
36
        TPM_SUPERIO_ADDR = 0x2E,
37
        TPM_ADDR = 0x4E,
38
};
39
 
40
extern ssize_t tpm_show_pubek(struct device *, struct device_attribute *attr,
41
                                char *);
42
extern ssize_t tpm_show_pcrs(struct device *, struct device_attribute *attr,
43
                                char *);
44
extern ssize_t tpm_show_caps(struct device *, struct device_attribute *attr,
45
                                char *);
46
extern ssize_t tpm_show_caps_1_2(struct device *, struct device_attribute *attr,
47
                                char *);
48
extern ssize_t tpm_store_cancel(struct device *, struct device_attribute *attr,
49
                                const char *, size_t);
50
extern ssize_t tpm_show_enabled(struct device *, struct device_attribute *attr,
51
                                char *);
52
extern ssize_t tpm_show_active(struct device *, struct device_attribute *attr,
53
                                char *);
54
extern ssize_t tpm_show_owned(struct device *, struct device_attribute *attr,
55
                                char *);
56
extern ssize_t tpm_show_temp_deactivated(struct device *,
57
                                         struct device_attribute *attr, char *);
58
 
59
struct tpm_chip;
60
 
61
struct tpm_vendor_specific {
62
        const u8 req_complete_mask;
63
        const u8 req_complete_val;
64
        const u8 req_canceled;
65
        void __iomem *iobase;           /* ioremapped address */
66
        unsigned long base;             /* TPM base address */
67
 
68
        int irq;
69
 
70
        int region_size;
71
        int have_region;
72
 
73
        int (*recv) (struct tpm_chip *, u8 *, size_t);
74
        int (*send) (struct tpm_chip *, u8 *, size_t);
75
        void (*cancel) (struct tpm_chip *);
76
        u8 (*status) (struct tpm_chip *);
77
        struct miscdevice miscdev;
78
        struct attribute_group *attr_group;
79
        struct list_head list;
80
        int locality;
81
        unsigned long timeout_a, timeout_b, timeout_c, timeout_d; /* jiffies */
82
        unsigned long duration[3]; /* jiffies */
83
 
84
        wait_queue_head_t read_queue;
85
        wait_queue_head_t int_queue;
86
};
87
 
88
struct tpm_chip {
89
        struct device *dev;     /* Device stuff */
90
 
91
        int dev_num;            /* /dev/tpm# */
92
        int num_opens;          /* only one allowed */
93
        int time_expired;
94
 
95
        /* Data passed to and from the tpm via the read/write calls */
96
        u8 *data_buffer;
97
        atomic_t data_pending;
98
        struct mutex buffer_mutex;
99
 
100
        struct timer_list user_read_timer;      /* user needs to claim result */
101
        struct work_struct work;
102
        struct mutex tpm_mutex; /* tpm is processing */
103
 
104
        struct tpm_vendor_specific vendor;
105
 
106
        struct dentry **bios_dir;
107
 
108
        struct list_head list;
109
};
110
 
111
#define to_tpm_chip(n) container_of(n, struct tpm_chip, vendor)
112
 
113
static inline int tpm_read_index(int base, int index)
114
{
115
        outb(index, base);
116
        return inb(base+1) & 0xFF;
117
}
118
 
119
static inline void tpm_write_index(int base, int index, int value)
120
{
121
        outb(index, base);
122
        outb(value & 0xFF, base+1);
123
}
124
 
125
extern void tpm_get_timeouts(struct tpm_chip *);
126
extern void tpm_gen_interrupt(struct tpm_chip *);
127
extern void tpm_continue_selftest(struct tpm_chip *);
128
extern unsigned long tpm_calc_ordinal_duration(struct tpm_chip *, u32);
129
extern struct tpm_chip* tpm_register_hardware(struct device *,
130
                                 const struct tpm_vendor_specific *);
131
extern int tpm_open(struct inode *, struct file *);
132
extern int tpm_release(struct inode *, struct file *);
133
extern ssize_t tpm_write(struct file *, const char __user *, size_t,
134
                         loff_t *);
135
extern ssize_t tpm_read(struct file *, char __user *, size_t, loff_t *);
136
extern void tpm_remove_hardware(struct device *);
137
extern int tpm_pm_suspend(struct device *, pm_message_t);
138
extern int tpm_pm_resume(struct device *);
139
 
140
#ifdef CONFIG_ACPI
141
extern struct dentry ** tpm_bios_log_setup(char *);
142
extern void tpm_bios_log_teardown(struct dentry **);
143
#else
144
static inline struct dentry ** tpm_bios_log_setup(char *name)
145
{
146
        return NULL;
147
}
148
static inline void tpm_bios_log_teardown(struct dentry **dir)
149
{
150
}
151
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.