forked from Minki/linux
6473d160b4
I noticed that many source files include <linux/pci.h> while they do not appear to need it. Here is an attempt to clean it all up. In order to find all possibly affected files, I searched for all files including <linux/pci.h> but without any other occurence of "pci" or "PCI". I removed the include statement from all of these, then I compiled an allmodconfig kernel on both i386 and x86_64 and fixed the false positives manually. My tests covered 66% of the affected files, so there could be false positives remaining. Untested files are: arch/alpha/kernel/err_common.c arch/alpha/kernel/err_ev6.c arch/alpha/kernel/err_ev7.c arch/ia64/sn/kernel/huberror.c arch/ia64/sn/kernel/xpnet.c arch/m68knommu/kernel/dma.c arch/mips/lib/iomap.c arch/powerpc/platforms/pseries/ras.c arch/ppc/8260_io/enet.c arch/ppc/8260_io/fcc_enet.c arch/ppc/8xx_io/enet.c arch/ppc/syslib/ppc4xx_sgdma.c arch/sh64/mach-cayman/iomap.c arch/xtensa/kernel/xtensa_ksyms.c arch/xtensa/platform-iss/setup.c drivers/i2c/busses/i2c-at91.c drivers/i2c/busses/i2c-mpc.c drivers/media/video/saa711x.c drivers/misc/hdpuftrs/hdpu_cpustate.c drivers/misc/hdpuftrs/hdpu_nexus.c drivers/net/au1000_eth.c drivers/net/fec_8xx/fec_main.c drivers/net/fec_8xx/fec_mii.c drivers/net/fs_enet/fs_enet-main.c drivers/net/fs_enet/mac-fcc.c drivers/net/fs_enet/mac-fec.c drivers/net/fs_enet/mac-scc.c drivers/net/fs_enet/mii-bitbang.c drivers/net/fs_enet/mii-fec.c drivers/net/ibm_emac/ibm_emac_core.c drivers/net/lasi_82596.c drivers/parisc/hppb.c drivers/sbus/sbus.c drivers/video/g364fb.c drivers/video/platinumfb.c drivers/video/stifb.c drivers/video/valkyriefb.c include/asm-arm/arch-ixp4xx/dma.h sound/oss/au1550_ac97.c I would welcome test reports for these files. I am fine with removing the untested files from the patch if the general opinion is that these changes aren't safe. The tested part would still be nice to have. Note that this patch depends on another header fixup patch I submitted to LKML yesterday: [PATCH] scatterlist.h needs types.h http://lkml.org/lkml/2007/3/01/141 Signed-off-by: Jean Delvare <khali@linux-fr.org> Cc: Badari Pulavarty <pbadari@us.ibm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
151 lines
4.3 KiB
C
151 lines
4.3 KiB
C
/*
|
|
* Copyright (C) 2004 IBM Corporation
|
|
*
|
|
* Authors:
|
|
* Leendert van Doorn <leendert@watson.ibm.com>
|
|
* Dave Safford <safford@watson.ibm.com>
|
|
* Reiner Sailer <sailer@watson.ibm.com>
|
|
* Kylene Hall <kjhall@us.ibm.com>
|
|
*
|
|
* Maintained by: <tpmdd_devel@lists.sourceforge.net>
|
|
*
|
|
* Device driver for TCG/TCPA TPM (trusted platform module).
|
|
* Specifications at www.trustedcomputinggroup.org
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation, version 2 of the
|
|
* License.
|
|
*
|
|
*/
|
|
#include <linux/module.h>
|
|
#include <linux/delay.h>
|
|
#include <linux/fs.h>
|
|
#include <linux/sched.h>
|
|
#include <linux/miscdevice.h>
|
|
#include <linux/platform_device.h>
|
|
#include <linux/io.h>
|
|
|
|
enum tpm_timeout {
|
|
TPM_TIMEOUT = 5, /* msecs */
|
|
};
|
|
|
|
/* TPM addresses */
|
|
enum tpm_addr {
|
|
TPM_SUPERIO_ADDR = 0x2E,
|
|
TPM_ADDR = 0x4E,
|
|
};
|
|
|
|
extern ssize_t tpm_show_pubek(struct device *, struct device_attribute *attr,
|
|
char *);
|
|
extern ssize_t tpm_show_pcrs(struct device *, struct device_attribute *attr,
|
|
char *);
|
|
extern ssize_t tpm_show_caps(struct device *, struct device_attribute *attr,
|
|
char *);
|
|
extern ssize_t tpm_show_caps_1_2(struct device *, struct device_attribute *attr,
|
|
char *);
|
|
extern ssize_t tpm_store_cancel(struct device *, struct device_attribute *attr,
|
|
const char *, size_t);
|
|
extern ssize_t tpm_show_enabled(struct device *, struct device_attribute *attr,
|
|
char *);
|
|
extern ssize_t tpm_show_active(struct device *, struct device_attribute *attr,
|
|
char *);
|
|
extern ssize_t tpm_show_owned(struct device *, struct device_attribute *attr,
|
|
char *);
|
|
extern ssize_t tpm_show_temp_deactivated(struct device *,
|
|
struct device_attribute *attr, char *);
|
|
|
|
struct tpm_chip;
|
|
|
|
struct tpm_vendor_specific {
|
|
const u8 req_complete_mask;
|
|
const u8 req_complete_val;
|
|
const u8 req_canceled;
|
|
void __iomem *iobase; /* ioremapped address */
|
|
unsigned long base; /* TPM base address */
|
|
|
|
int irq;
|
|
|
|
int region_size;
|
|
int have_region;
|
|
|
|
int (*recv) (struct tpm_chip *, u8 *, size_t);
|
|
int (*send) (struct tpm_chip *, u8 *, size_t);
|
|
void (*cancel) (struct tpm_chip *);
|
|
u8 (*status) (struct tpm_chip *);
|
|
struct miscdevice miscdev;
|
|
struct attribute_group *attr_group;
|
|
struct list_head list;
|
|
int locality;
|
|
unsigned long timeout_a, timeout_b, timeout_c, timeout_d; /* jiffies */
|
|
unsigned long duration[3]; /* jiffies */
|
|
|
|
wait_queue_head_t read_queue;
|
|
wait_queue_head_t int_queue;
|
|
};
|
|
|
|
struct tpm_chip {
|
|
struct device *dev; /* Device stuff */
|
|
|
|
int dev_num; /* /dev/tpm# */
|
|
int num_opens; /* only one allowed */
|
|
int time_expired;
|
|
|
|
/* Data passed to and from the tpm via the read/write calls */
|
|
u8 *data_buffer;
|
|
atomic_t data_pending;
|
|
struct semaphore buffer_mutex;
|
|
|
|
struct timer_list user_read_timer; /* user needs to claim result */
|
|
struct work_struct work;
|
|
struct semaphore tpm_mutex; /* tpm is processing */
|
|
|
|
struct tpm_vendor_specific vendor;
|
|
|
|
struct dentry **bios_dir;
|
|
|
|
struct list_head list;
|
|
};
|
|
|
|
#define to_tpm_chip(n) container_of(n, struct tpm_chip, vendor)
|
|
|
|
static inline int tpm_read_index(int base, int index)
|
|
{
|
|
outb(index, base);
|
|
return inb(base+1) & 0xFF;
|
|
}
|
|
|
|
static inline void tpm_write_index(int base, int index, int value)
|
|
{
|
|
outb(index, base);
|
|
outb(value & 0xFF, base+1);
|
|
}
|
|
|
|
extern void tpm_get_timeouts(struct tpm_chip *);
|
|
extern void tpm_gen_interrupt(struct tpm_chip *);
|
|
extern void tpm_continue_selftest(struct tpm_chip *);
|
|
extern unsigned long tpm_calc_ordinal_duration(struct tpm_chip *, u32);
|
|
extern struct tpm_chip* tpm_register_hardware(struct device *,
|
|
const struct tpm_vendor_specific *);
|
|
extern int tpm_open(struct inode *, struct file *);
|
|
extern int tpm_release(struct inode *, struct file *);
|
|
extern ssize_t tpm_write(struct file *, const char __user *, size_t,
|
|
loff_t *);
|
|
extern ssize_t tpm_read(struct file *, char __user *, size_t, loff_t *);
|
|
extern void tpm_remove_hardware(struct device *);
|
|
extern int tpm_pm_suspend(struct device *, pm_message_t);
|
|
extern int tpm_pm_resume(struct device *);
|
|
|
|
#ifdef CONFIG_ACPI
|
|
extern struct dentry ** tpm_bios_log_setup(char *);
|
|
extern void tpm_bios_log_teardown(struct dentry **);
|
|
#else
|
|
static inline struct dentry ** tpm_bios_log_setup(char *name)
|
|
{
|
|
return NULL;
|
|
}
|
|
static inline void tpm_bios_log_teardown(struct dentry **dir)
|
|
{
|
|
}
|
|
#endif
|