summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/man/man4/Makefile2
-rw-r--r--share/man/man4/amdsmn.464
-rw-r--r--share/man/man4/amdtemp.410
-rw-r--r--stand/forth/loader.conf1
-rw-r--r--sys/amd64/conf/NOTES5
-rw-r--r--sys/conf/files.amd641
-rw-r--r--sys/conf/files.i3861
-rw-r--r--sys/dev/amdsmn/amdsmn.c193
-rw-r--r--sys/dev/amdsmn/amdsmn.h32
-rw-r--r--sys/dev/amdtemp/amdtemp.c46
-rw-r--r--sys/modules/Makefile2
-rw-r--r--sys/modules/amdsmn/Makefile8
12 files changed, 358 insertions, 7 deletions
diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile
index 6cd0e5a..075164c 100644
--- a/share/man/man4/Makefile
+++ b/share/man/man4/Makefile
@@ -46,6 +46,7 @@ MAN= aac.4 \
amdpm.4 \
${_amdsbwd.4} \
${_amdsmb.4} \
+ ${_amdsmn.4} \
${_amdtemp.4} \
${_bxe.4} \
amr.4 \
@@ -792,6 +793,7 @@ _attimer.4= attimer.4
_aibs.4= aibs.4
_amdsbwd.4= amdsbwd.4
_amdsmb.4= amdsmb.4
+_amdsmn.4= amdsmn.4
_amdtemp.4= amdtemp.4
_asmc.4= asmc.4
_bxe.4= bxe.4
diff --git a/share/man/man4/amdsmn.4 b/share/man/man4/amdsmn.4
new file mode 100644
index 0000000..8e279cc
--- /dev/null
+++ b/share/man/man4/amdsmn.4
@@ -0,0 +1,64 @@
+.\"-
+.\" Copyright (c) 2017 Conrad Meyer <cem@FreeBSD.org>
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd September 5, 2017
+.Dt AMDSMN 4
+.Os
+.Sh NAME
+.Nm amdsmn
+.Nd device driver for
+.Tn AMD
+processor System Management Network
+.Sh SYNOPSIS
+To compile this driver into the kernel, place the following line in your
+kernel configuration file:
+.Bd -ragged -offset indent
+.Cd "device amdsmn"
+.Ed
+.Pp
+Alternatively, to load the driver as a module at boot time, place the
+following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+amdsmn_load="YES"
+.Ed
+.Sh DESCRIPTION
+The
+.Nm
+driver provides support for resources on the System Management Network bus
+in
+.Tn AMD
+Family 17h processors.
+.Sh SEE ALSO
+.Xr loader 8
+.Sh HISTORY
+The
+.Nm
+driver first appeared in
+.Fx 12.0 .
+.Sh AUTHORS
+.An Conrad Meyer Aq Mt cem@FreeBSD.org
diff --git a/share/man/man4/amdtemp.4 b/share/man/man4/amdtemp.4
index 2b9bcc3..8d1764f 100644
--- a/share/man/man4/amdtemp.4
+++ b/share/man/man4/amdtemp.4
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 27, 2015
+.Dd September 5, 2017
.Dt AMDTEMP 4
.Os
.Sh NAME
@@ -53,7 +53,7 @@ The
driver provides support for the on-die digital thermal sensor present
in
.Tn AMD
-Family 0Fh, 10h, 11h, 12h, 14h, 15h, and 16h processors.
+Family 0Fh, 10h, 11h, 12h, 14h, 15h, 16h, and 17h processors.
.Pp
For Family 0Fh processors, the
.Nm
@@ -64,8 +64,8 @@ The driver also creates
in the corresponding CPU device's sysctl tree, displaying the maximum
temperature of the two sensors located in each CPU core.
.Pp
-For Family 10h, 11h, 12h, 14h, 15h, and 16h processors, the driver reports each
-package's temperature through a sysctl node, named
+For Family 10h, 11h, 12h, 14h, 15h, 16h, and 17h processors, the driver reports
+each package's temperature through a sysctl node, named
.Va dev.amdtemp.%d.core0.sensor0 .
The driver also creates
.Va dev.cpu.%d.temperature
@@ -107,5 +107,5 @@ specified maximum case temperature and maximum thermal power dissipation
according to
.Rs
.%T BIOS and Kernel Developer's Guide (BKDG) for AMD Processors
-.%U http://developer.amd.com/documentation/guides/Pages/default.aspx
+.%U http://developer.amd.com/resources/developer-guides-manuals/
.Re
diff --git a/stand/forth/loader.conf b/stand/forth/loader.conf
index 9136659..061918a 100644
--- a/stand/forth/loader.conf
+++ b/stand/forth/loader.conf
@@ -533,6 +533,7 @@ coretemp_load="NO" # Intel Core CPU temperature monitor
vkbd_load="NO" # Virtual AT keyboard interface
vpd_load="NO" # Vital Product Data kernel interface
vpo_load="NO" # Parallel to SCSI interface driver
+amdsmn_load="NO" # AMD Family 17h System Management Network
amdtemp_load="NO" # AMD K8/K10/K11 temperature monitor
tpm_load="NO" # Trusted Platform Module
wbwd_load="NO" # Winbond watchdog
diff --git a/sys/amd64/conf/NOTES b/sys/amd64/conf/NOTES
index 8022c22..33d2542 100644
--- a/sys/amd64/conf/NOTES
+++ b/sys/amd64/conf/NOTES
@@ -599,6 +599,11 @@ device cpuctl
options ENABLE_ALART # Control alarm on Intel intpm driver
#
+# AMD System Management Network (SMN)
+#
+device amdsmn
+
+#
# Number of initial kernel page table pages used for early bootstrap.
# This number should include enough pages to map the kernel and any
# modules or other data loaded with the kernel by the loader. Each
diff --git a/sys/conf/files.amd64 b/sys/conf/files.amd64
index 4bbe63c..3e19915 100644
--- a/sys/conf/files.amd64
+++ b/sys/conf/files.amd64
@@ -192,6 +192,7 @@ dev/agp/agp_amd64.c optional agp
dev/agp/agp_i810.c optional agp
dev/agp/agp_via.c optional agp
dev/amdsbwd/amdsbwd.c optional amdsbwd
+dev/amdsmn/amdsmn.c optional amdsmn | amdtemp
dev/amdtemp/amdtemp.c optional amdtemp
dev/arcmsr/arcmsr.c optional arcmsr pci
dev/asmc/asmc.c optional asmc isa
diff --git a/sys/conf/files.i386 b/sys/conf/files.i386
index e96f783..8aee3cf 100644
--- a/sys/conf/files.i386
+++ b/sys/conf/files.i386
@@ -175,6 +175,7 @@ dev/agp/agp_sis.c optional agp
dev/agp/agp_via.c optional agp
dev/aic/aic_isa.c optional aic isa
dev/amdsbwd/amdsbwd.c optional amdsbwd
+dev/amdsmn/amdsmn.c optional amdsmn | amdtemp
dev/amdtemp/amdtemp.c optional amdtemp
dev/arcmsr/arcmsr.c optional arcmsr pci
dev/asmc/asmc.c optional asmc isa
diff --git a/sys/dev/amdsmn/amdsmn.c b/sys/dev/amdsmn/amdsmn.c
new file mode 100644
index 0000000..bc2ed7c
--- /dev/null
+++ b/sys/dev/amdsmn/amdsmn.c
@@ -0,0 +1,193 @@
+/*-
+ * Copyright (c) 2017 Conrad Meyer <cem@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Driver for the AMD Family 17h CPU System Management Network.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/bus.h>
+#include <sys/conf.h>
+#include <sys/lock.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/mutex.h>
+#include <sys/sysctl.h>
+#include <sys/systm.h>
+
+#include <machine/cpufunc.h>
+#include <machine/md_var.h>
+#include <machine/specialreg.h>
+
+#include <dev/pci/pcivar.h>
+#include <x86/pci_cfgreg.h>
+
+#include <dev/amdsmn/amdsmn.h>
+
+#define SMN_ADDR_REG 0x60
+#define SMN_DATA_REG 0x64
+
+struct amdsmn_softc {
+ struct mtx smn_lock;
+};
+
+static struct pciid {
+ uint32_t device_id;
+} amdsmn_ids[] = {
+ { 0x14501022 },
+};
+
+/*
+ * Device methods.
+ */
+static void amdsmn_identify(driver_t *driver, device_t parent);
+static int amdsmn_probe(device_t dev);
+static int amdsmn_attach(device_t dev);
+static int amdsmn_detach(device_t dev);
+
+static device_method_t amdsmn_methods[] = {
+ /* Device interface */
+ DEVMETHOD(device_identify, amdsmn_identify),
+ DEVMETHOD(device_probe, amdsmn_probe),
+ DEVMETHOD(device_attach, amdsmn_attach),
+ DEVMETHOD(device_detach, amdsmn_detach),
+ DEVMETHOD_END
+};
+
+static driver_t amdsmn_driver = {
+ "amdsmn",
+ amdsmn_methods,
+ sizeof(struct amdsmn_softc),
+};
+
+static devclass_t amdsmn_devclass;
+DRIVER_MODULE(amdsmn, hostb, amdsmn_driver, amdsmn_devclass, NULL, NULL);
+MODULE_VERSION(amdsmn, 1);
+
+static bool
+amdsmn_match(device_t parent)
+{
+ uint32_t devid;
+ size_t i;
+
+ devid = pci_get_devid(parent);
+ for (i = 0; i < nitems(amdsmn_ids); i++)
+ if (amdsmn_ids[i].device_id == devid)
+ return (true);
+ return (false);
+}
+
+static void
+amdsmn_identify(driver_t *driver, device_t parent)
+{
+ device_t child;
+
+ /* Make sure we're not being doubly invoked. */
+ if (device_find_child(parent, "amdsmn", -1) != NULL)
+ return;
+ if (!amdsmn_match(parent))
+ return;
+
+ child = device_add_child(parent, "amdsmn", -1);
+ if (child == NULL)
+ device_printf(parent, "add amdsmn child failed\n");
+}
+
+static int
+amdsmn_probe(device_t dev)
+{
+ uint32_t family;
+
+ if (resource_disabled("amdsmn", 0))
+ return (ENXIO);
+ if (!amdsmn_match(device_get_parent(dev)))
+ return (ENXIO);
+
+ family = CPUID_TO_FAMILY(cpu_id);
+
+ switch (family) {
+ case 0x17:
+ break;
+ default:
+ return (ENXIO);
+ }
+ device_set_desc(dev, "AMD Family 17h System Management Network");
+
+ return (BUS_PROBE_GENERIC);
+}
+
+static int
+amdsmn_attach(device_t dev)
+{
+ struct amdsmn_softc *sc = device_get_softc(dev);
+
+ mtx_init(&sc->smn_lock, "SMN mtx", "SMN", MTX_DEF);
+ return (0);
+}
+
+int
+amdsmn_detach(device_t dev)
+{
+ struct amdsmn_softc *sc = device_get_softc(dev);
+
+ mtx_destroy(&sc->smn_lock);
+ return (0);
+}
+
+int
+amdsmn_read(device_t dev, uint32_t addr, uint32_t *value)
+{
+ struct amdsmn_softc *sc = device_get_softc(dev);
+ device_t parent;
+
+ parent = device_get_parent(dev);
+
+ mtx_lock(&sc->smn_lock);
+ pci_write_config(parent, SMN_ADDR_REG, addr, 4);
+ *value = pci_read_config(parent, SMN_DATA_REG, 4);
+ mtx_unlock(&sc->smn_lock);
+
+ return (0);
+}
+
+int
+amdsmn_write(device_t dev, uint32_t addr, uint32_t value)
+{
+ struct amdsmn_softc *sc = device_get_softc(dev);
+ device_t parent;
+
+ parent = device_get_parent(dev);
+
+ mtx_lock(&sc->smn_lock);
+ pci_write_config(parent, SMN_ADDR_REG, addr, 4);
+ pci_write_config(parent, SMN_DATA_REG, value, 4);
+ mtx_unlock(&sc->smn_lock);
+
+ return (0);
+}
diff --git a/sys/dev/amdsmn/amdsmn.h b/sys/dev/amdsmn/amdsmn.h
new file mode 100644
index 0000000..c3225ff
--- /dev/null
+++ b/sys/dev/amdsmn/amdsmn.h
@@ -0,0 +1,32 @@
+/*-
+ * Copyright (c) 2017 Conrad Meyer <cem@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#pragma once
+
+int amdsmn_read(device_t dev, uint32_t addr, uint32_t *value);
+int amdsmn_write(device_t dev, uint32_t addr, uint32_t value);
diff --git a/sys/dev/amdtemp/amdtemp.c b/sys/dev/amdtemp/amdtemp.c
index 1e658e6..2080c92 100644
--- a/sys/dev/amdtemp/amdtemp.c
+++ b/sys/dev/amdtemp/amdtemp.c
@@ -49,6 +49,8 @@ __FBSDID("$FreeBSD$");
#include <dev/pci/pcivar.h>
#include <x86/pci_cfgreg.h>
+#include <dev/amdsmn/amdsmn.h>
+
typedef enum {
CORE0_SENSOR0,
CORE0_SENSOR1,
@@ -59,7 +61,6 @@ typedef enum {
} amdsensor_t;
struct amdtemp_softc {
- device_t sc_dev;
int sc_ncores;
int sc_ntemps;
int sc_flags;
@@ -70,6 +71,7 @@ struct amdtemp_softc {
int32_t (*sc_gettemp)(device_t, amdsensor_t);
struct sysctl_oid *sc_sysctl_cpu[MAXCPU];
struct intr_config_hook sc_ich;
+ device_t sc_smn;
};
#define VENDORID_AMD 0x1022
@@ -82,6 +84,7 @@ struct amdtemp_softc {
#define DEVICEID_AMD_MISC16 0x1533
#define DEVICEID_AMD_MISC16_M30H 0x1583
#define DEVICEID_AMD_MISC17 0x141d
+#define DEVICEID_AMD_HOSTB17H 0x1450
static struct amdtemp_product {
uint16_t amdtemp_vendorid;
@@ -96,6 +99,7 @@ static struct amdtemp_product {
{ VENDORID_AMD, DEVICEID_AMD_MISC16 },
{ VENDORID_AMD, DEVICEID_AMD_MISC16_M30H },
{ VENDORID_AMD, DEVICEID_AMD_MISC17 },
+ { VENDORID_AMD, DEVICEID_AMD_HOSTB17H },
{ 0, 0 }
};
@@ -105,6 +109,11 @@ static struct amdtemp_product {
#define AMDTEMP_REPTMP_CTRL 0xa4
/*
+ * Reported Temperature, Family 17h
+ */
+#define AMDTEMP_17H_CUR_TMP 0x59800
+
+/*
* Thermaltrip Status Register (Family 0Fh only)
*/
#define AMDTEMP_THERMTP_STAT 0xe4
@@ -133,6 +142,7 @@ static int amdtemp_detach(device_t dev);
static int amdtemp_match(device_t dev);
static int32_t amdtemp_gettemp0f(device_t dev, amdsensor_t sensor);
static int32_t amdtemp_gettemp(device_t dev, amdsensor_t sensor);
+static int32_t amdtemp_gettemp17h(device_t dev, amdsensor_t sensor);
static int amdtemp_sysctl(SYSCTL_HANDLER_ARGS);
static device_method_t amdtemp_methods[] = {
@@ -153,6 +163,8 @@ static driver_t amdtemp_driver = {
static devclass_t amdtemp_devclass;
DRIVER_MODULE(amdtemp, hostb, amdtemp_driver, amdtemp_devclass, NULL, NULL);
+MODULE_VERSION(amdtemp, 1);
+MODULE_DEPEND(amdtemp, amdsmn, 1, 1, 1);
static int
amdtemp_match(device_t dev)
@@ -195,6 +207,8 @@ amdtemp_probe(device_t dev)
if (resource_disabled("amdtemp", 0))
return (ENXIO);
+ if (!amdtemp_match(device_get_parent(dev)))
+ return (ENXIO);
family = CPUID_TO_FAMILY(cpu_id);
model = CPUID_TO_MODEL(cpu_id);
@@ -211,6 +225,7 @@ amdtemp_probe(device_t dev)
case 0x14:
case 0x15:
case 0x16:
+ case 0x17:
break;
default:
return (ENXIO);
@@ -240,7 +255,7 @@ amdtemp_attach(device_t dev)
cpuid = cpu_id;
family = CPUID_TO_FAMILY(cpuid);
model = CPUID_TO_MODEL(cpuid);
- if (family != 0x0f || model >= 0x40) {
+ if ((family != 0x0f || model >= 0x40) && family != 0x17) {
cpuid = pci_read_config(dev, AMDTEMP_CPUID, 4);
family = CPUID_TO_FAMILY(cpuid);
model = CPUID_TO_MODEL(cpuid);
@@ -342,6 +357,17 @@ amdtemp_attach(device_t dev)
sc->sc_gettemp = amdtemp_gettemp;
break;
+ case 0x17:
+ sc->sc_ntemps = 1;
+ sc->sc_gettemp = amdtemp_gettemp17h;
+ sc->sc_smn = device_find_child(
+ device_get_parent(dev), "amdsmn", -1);
+ if (sc->sc_smn == NULL) {
+ if (bootverbose)
+ device_printf(dev, "No SMN device found\n");
+ return (ENXIO);
+ }
+ break;
}
/* Find number of cores per package. */
@@ -557,3 +583,19 @@ amdtemp_gettemp(device_t dev, amdsensor_t sensor)
return (temp);
}
+
+static int32_t
+amdtemp_gettemp17h(device_t dev, amdsensor_t sensor)
+{
+ struct amdtemp_softc *sc = device_get_softc(dev);
+ uint32_t temp;
+ int error;
+
+ error = amdsmn_read(sc->sc_smn, AMDTEMP_17H_CUR_TMP, &temp);
+ KASSERT(error == 0, ("amdsmn_read"));
+
+ temp = ((temp >> 21) & 0x7ff) * 5 / 4;
+ temp += AMDTEMP_ZERO_C_TO_K + sc->sc_offset * 10;
+
+ return (temp);
+}
diff --git a/sys/modules/Makefile b/sys/modules/Makefile
index 5569895..812f688 100644
--- a/sys/modules/Makefile
+++ b/sys/modules/Makefile
@@ -36,6 +36,7 @@ SUBDIR= \
alq \
${_amd_ecc_inject} \
${_amdsbwd} \
+ ${_amdsmn} \
${_amdtemp} \
amr \
${_an} \
@@ -631,6 +632,7 @@ _aesni= aesni
.endif
_amd_ecc_inject=amd_ecc_inject
_amdsbwd= amdsbwd
+_amdsmn= amdsmn
_amdtemp= amdtemp
_arcmsr= arcmsr
_asmc= asmc
diff --git a/sys/modules/amdsmn/Makefile b/sys/modules/amdsmn/Makefile
new file mode 100644
index 0000000..1f03027
--- /dev/null
+++ b/sys/modules/amdsmn/Makefile
@@ -0,0 +1,8 @@
+# $FreeBSD$
+
+.PATH: ${SRCTOP}/sys/dev/amdsmn
+
+KMOD= amdsmn
+SRCS= amdsmn.c bus_if.h device_if.h pci_if.h
+
+.include <bsd.kmod.mk>
OpenPOWER on IntegriCloud