1211201Stakawata/* 2211201Stakawata * Copyright (c) 2008, 2009 Michael Shalayeff 3211201Stakawata * Copyright (c) 2009, 2010 Hans-Joerg Hoexer 4211201Stakawata * All rights reserved. 5211201Stakawata * 6211201Stakawata * Permission to use, copy, modify, and distribute this software for any 7211201Stakawata * purpose with or without fee is hereby granted, provided that the above 8211201Stakawata * copyright notice and this permission notice appear in all copies. 9211201Stakawata * 10211201Stakawata * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11211201Stakawata * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12211201Stakawata * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13211201Stakawata * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14211201Stakawata * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER IN 15211201Stakawata * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT 16211201Stakawata * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17211201Stakawata */ 18211201Stakawata#include <sys/cdefs.h> 19211201Stakawata__FBSDID("$FreeBSD: releng/10.2/sys/dev/tpm/tpm_acpi.c 211201 2010-08-12 00:16:18Z takawata $"); 20211201Stakawata 21211201Stakawata#include <sys/param.h> 22211201Stakawata#include <sys/systm.h> 23211201Stakawata#include <sys/kernel.h> 24211201Stakawata#include <sys/malloc.h> 25211201Stakawata#include <sys/proc.h> 26211201Stakawata 27211201Stakawata#include <sys/module.h> 28211201Stakawata#include <sys/conf.h> 29211201Stakawata#include <sys/uio.h> 30211201Stakawata#include <sys/bus.h> 31211201Stakawata 32211201Stakawata#include <machine/bus.h> 33211201Stakawata#include <sys/rman.h> 34211201Stakawata#include <machine/resource.h> 35211201Stakawata 36211201Stakawata#include <machine/md_var.h> 37211201Stakawata 38211201Stakawata#include <isa/isareg.h> 39211201Stakawata#include <isa/isavar.h> 40211201Stakawata#include "tpmvar.h" 41211201Stakawata 42211201Stakawata#include "opt_acpi.h" 43211201Stakawata#include <contrib/dev/acpica/include/acpi.h> 44211201Stakawata#include <contrib/dev/acpica/include/accommon.h> 45211201Stakawata#include <dev/acpica/acpivar.h> 46211201Stakawata 47211201Stakawata 48211201Stakawata 49211201Stakawatachar *tpm_ids[] = {"ATM1200", "BCM0102", "INTC0102", "SNO3504", "WEC1000", 50211201Stakawata "PNP0C31", NULL}; 51211201Stakawata 52211201Stakawatastatic int 53211201Stakawatatpm_acpi_probe(device_t dev) 54211201Stakawata{ 55211201Stakawata if (ACPI_ID_PROBE(device_get_parent(dev), dev, tpm_ids) != NULL) { 56211201Stakawata device_set_desc(dev, "Trusted Platform Module"); 57211201Stakawata return BUS_PROBE_DEFAULT; 58211201Stakawata } 59211201Stakawata 60211201Stakawata return ENXIO; 61211201Stakawata} 62211201Stakawata 63211201Stakawatastatic device_method_t tpm_acpi_methods[] = { 64211201Stakawata#if 0 65211201Stakawata /*In some case, TPM existance is found only in TPCA header*/ 66211201Stakawata DEVMETHOD(device_identify, tpm_acpi_identify), 67211201Stakawata#endif 68211201Stakawata 69211201Stakawata DEVMETHOD(device_probe, tpm_acpi_probe), 70211201Stakawata DEVMETHOD(device_attach, tpm_attach), 71211201Stakawata DEVMETHOD(device_detach, tpm_detach), 72211201Stakawata DEVMETHOD(device_suspend, tpm_suspend), 73211201Stakawata DEVMETHOD(device_resume, tpm_resume), 74211201Stakawata { 0, 0 } 75211201Stakawata}; 76211201Stakawatastatic driver_t tpm_acpi_driver = { 77211201Stakawata "tpm", tpm_acpi_methods, sizeof(struct tpm_softc), 78211201Stakawata}; 79211201Stakawata 80211201Stakawatadevclass_t tpm_devclass; 81211201StakawataDRIVER_MODULE(tpm, acpi, tpm_acpi_driver, tpm_devclass, 0, 0); 82