--- old/usr/src/cmd/Makefile	Mon Jul  1 21:15:22 2013
+++ new/usr/src/cmd/Makefile	Mon Jul  1 21:15:22 2013
@@ -168,6 +168,7 @@
 	fold		\
 	format		\
 	fs.d		\
+	fsdadm		\
 	fstyp		\
 	fuser		\
 	fwflash		\
--- /dev/null	Mon Jul  1 21:15:23 2013
+++ new/usr/src/cmd/fsdadm/Makefile	Mon Jul  1 21:15:23 2013
@@ -0,0 +1,47 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2013 Damian Bogel. All rights reserved.
+#
+
+PROG = fsdadm
+OBJS = fsdadm.o
+SRCS = $(OBJS:%.o=%.c)
+
+FILEMODE = 0555
+
+include ../Makefile.cmd
+
+CLEANFILES += $(OBJS)
+
+CFLAGS += $(CCVERBOSE)
+CFLAG64 += $(CCVERBOSE)
+
+LDLIBS += -lfsd
+
+all: $(PROG)
+
+$(PROG): $(OBJS)
+	$(LINK.c) -o $@ $(OBJS) $(LDLIBS)
+	$(POST_PROCESS)
+
+%.o: %.c
+	$(COMPILE.c) $<
+
+clean:
+	-$(RM) $(CLEANFILES)
+
+lint: lint_PROG
+
+install: all $(ROOTUSRSBINPROG)
+
+include ../Makefile.targ
--- /dev/null	Mon Jul  1 21:15:23 2013
+++ new/usr/src/cmd/fsdadm/fsdadm.c	Mon Jul  1 21:15:23 2013
@@ -0,0 +1,54 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source.  A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright 2013 Damian Bogel. All rights reserved.
+ */
+
+/*
+ * Command used to control the fsd pseudo-device driver.
+ */
+
+
+#include <errno.h>
+#include <fcntl.h>
+#include <libfsd.h>
+#include <stdio.h>
+#include <string.h>
+#include <stropts.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+/*
+ * TODO
+ * - lint says that that fsd_open() is used but not defined
+ * - print proper error message
+ */
+
+int
+main(int argc, char *argv[])
+{
+	int fd;
+	if (argc != 2) {
+		(void) fprintf(stderr, "Usage: %s message\n", argv[0]);
+		return (EINVAL);
+	}
+
+	fd = fsd_open();
+	if (fd == INVALID_FSD_HANDLE) {
+		(void) fprintf(stderr, "Error: Something gone wrong.");
+		return (-1); /* TODO */
+	}
+	fsd_print_msg(argv[1], fd);
+	fsd_close(fd);
+	return (0);
+}
--- old/usr/src/lib/Makefile	Mon Jul  1 21:15:23 2013
+++ new/usr/src/lib/Makefile	Mon Jul  1 21:15:23 2013
@@ -23,6 +23,7 @@
 # Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
 # Copyright (c) 2012 by Delphix. All rights reserved.
 # Copyright (c) 2012, Joyent, Inc. All rights reserved.
+# Copyright 2013 Damian Bogel. All rights reserved.
 
 include ../Makefile.master
 
@@ -159,7 +160,8 @@
 	librdc		\
 	libinstzones	\
 	libpkg		\
-	libpcidb
+	libpcidb	\
+	libfsd
 
 SUBDIRS += \
 	passwdutil	\
--- /dev/null	Mon Jul  1 21:15:23 2013
+++ new/usr/src/lib/libfsd/Makefile	Mon Jul  1 21:15:23 2013
@@ -0,0 +1,53 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
+# Copyright 2013 Damian Bogel. All rights reserved.
+#
+
+include ../Makefile.lib
+
+HDRS = libfsd.h
+HDRDIR = common
+SUBDIRS = $(MACH)
+$(BUILD64)SUBDIRS += $(MACH64)
+
+all	:= TARGET= all
+clean	:= TARGET= clean
+clobber	:= TARGET= clobber
+install	:= TARGET= install
+lint	:= TARGET= lint
+
+.KEEP_STATE:
+
+all clean clobber install lint: $(SUBDIRS)
+
+install_h: $(ROOTHDRS)
+
+check: $(CHECKHDRS)
+
+$(SUBDIRS): FRC
+	@cd $@; pwd; $(MAKE) $(TARGET)
+
+FRC:
+
+include ../Makefile.targ
--- /dev/null	Mon Jul  1 21:15:23 2013
+++ new/usr/src/lib/libfsd/Makefile.com	Mon Jul  1 21:15:23 2013
@@ -0,0 +1,47 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
+# Copyright 2013 Damian Bogel. All rights reserved.
+#
+
+LIBRARY = libfsd.a
+VERS    = .1
+OBJECTS = libfsd.o
+
+include ../../Makefile.lib
+
+SRCDIR =	../common
+LIBS =		$(DYNLIB) $(LINTLIB)
+$(LINTLIB) :=	SRCS = $(SRCDIR)/$(LINTSRC)
+LDLIBS +=	-lc
+
+CFLAGS +=	$(CCVERBOSE)
+CPPFLAGS +=	-I../common
+
+.KEEP_STATE:
+
+all:		$(LIBS)
+
+lint:		lintcheck
+
+include ../../Makefile.targ
--- /dev/null	Mon Jul  1 21:15:23 2013
+++ new/usr/src/lib/libfsd/amd64/Makefile	Mon Jul  1 21:15:23 2013
@@ -0,0 +1,18 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2013 Damian Bogel. All rights reserved.
+#
+include ../Makefile.com
+include ../../Makefile.lib.64
+
+install: all $(ROOTLIBS64) $(ROOTLINKS64)
--- /dev/null	Mon Jul  1 21:15:23 2013
+++ new/usr/src/lib/libfsd/common/libfsd.c	Mon Jul  1 21:15:23 2013
@@ -0,0 +1,50 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source.  A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright 2013 Damian Bogel. All rights reserved.
+ */
+
+/*
+ * TODO:
+ * fsd_open: return opaque handle (INVALID_FSD_HANDLE)
+ */
+
+#include <fcntl.h>
+#include <string.h>
+#include <stropts.h>
+#include <sys/fsd.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+int
+fsd_open()
+{
+	return (open(FSD_DEVICE_PATH, O_RDWR));
+}
+
+void
+fsd_close(int fd)
+{
+	(void) close(fd);
+}
+
+/* TODO: what about strlcpy and const char vs int8_t? */
+void
+fsd_print_msg(const char *msg, int fd)
+{
+	struct fsd_msg m;
+	m.len = strlen(msg);
+	m.len = strlcpy(m.s, msg, FSD_MAX_MSG_LEN);
+	(void) ioctl(fd, FSD_PRINT_MSG, (intptr_t)&m);
+
+}
--- /dev/null	Mon Jul  1 21:15:23 2013
+++ new/usr/src/lib/libfsd/common/libfsd.h	Mon Jul  1 21:15:23 2013
@@ -0,0 +1,37 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source.  A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright 2013 Damian Bogel.  All rights reserved.
+ */
+
+/*
+ * Library used to drive fsd pseudo-device driver.
+ */
+
+#ifndef _LIBFSD_H
+#define	_LIBFSD_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define	INVALID_FSD_HANDLE	-1
+
+extern int fsd_open();
+extern void fsd_close(int fd);
+extern void fsd_print_msg(const char *msg, int fd);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LIBFSD_H */
--- /dev/null	Mon Jul  1 21:15:23 2013
+++ new/usr/src/lib/libfsd/common/llib-lfsd	Mon Jul  1 21:15:23 2013
@@ -0,0 +1,19 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source. A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright 2013 Damian Bogel. All rights reserved.
+ */
+
+ /* LINTLIBRARY */
+ /* PROTOLIB1 */
+
+#include <libfsd.h>
--- /dev/null	Mon Jul  1 21:15:23 2013
+++ new/usr/src/lib/libfsd/common/mapfile-vers	Mon Jul  1 21:15:23 2013
@@ -0,0 +1,39 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source. A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2013 Damian Bogel. All rights reserved.
+#
+
+#
+# MAPFILE HEADER START
+#
+# WARNING:  STOP NOW.  DO NOT MODIFY THIS FILE.
+# Object versioning must comply with the rules detailed in
+#
+# 	usr/src/lib/README.mapfiles
+#
+# You should not be making modifications here until you've read the most current
+# copy of that file. If you need help, contact a gatekeeper for guidance.
+#
+# MAPFILE HEADER END
+#
+
+$mapfile_version 2
+
+SYMBOL_VERSION ILLUMOSprivate {
+	global:
+		fsd_open;
+		fsd_close;
+		fsd_print_msg;
+	local:
+		*;
+};
--- /dev/null	Mon Jul  1 21:15:23 2013
+++ new/usr/src/lib/libfsd/i386/Makefile	Mon Jul  1 21:15:23 2013
@@ -0,0 +1,18 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+
+#
+# Copyright 2013 Damian Bogel. All rights reserved.
+#
+
+include ../Makefile.com
+
+install: all $(ROOTLIBS) $(ROOTLINKS) $(ROOTLINT)
--- old/usr/src/uts/common/Makefile.files	Mon Jul  1 21:15:23 2013
+++ new/usr/src/uts/common/Makefile.files	Mon Jul  1 21:15:23 2013
@@ -933,6 +933,8 @@
 PMCS8001FW_C_OBJS +=	pmcs_fw_hdr.o
 PMCS8001FW_OBJS +=		$(PMCS8001FW_C_OBJS) SPCBoot.o ila.o firmware.o
 
+FSD_OBJS +=	fsd.o fsd_impl.o
+
 #
 #	Build up defines and paths.
 
--- old/usr/src/uts/common/Makefile.rules	Mon Jul  1 21:15:23 2013
+++ new/usr/src/uts/common/Makefile.rules	Mon Jul  1 21:15:23 2013
@@ -25,6 +25,10 @@
 #
 
 #
+# Copyright 2013 Damian Bogel. All rights reserved.
+#
+
+#
 # uts/common/Makefile.rules
 #
 #	This Makefile defines all the file build rules for the directory
@@ -729,6 +733,10 @@
 	$(COMPILE.c) -o $@ $<
 	$(CTFCONVERT_O)
 
+$(OBJS_DIR)/%.o:		$(UTSBASE)/common/io/fsd/%.c
+	$(COMPILE.c) -o $@ $<
+	$(CTFCONVERT_O)
+
 $(OBJS_DIR)/%.o:		$(UTSBASE)/common/io/hme/%.c
 	$(COMPILE.c) -o $@ $<
 	$(CTFCONVERT_O)
@@ -2091,6 +2099,9 @@
 $(LINTS_DIR)/%.ln:		$(UTSBASE)/common/io/fcoe/%.c
 	@($(LHEAD) $(LINT.c) $< $(LTAIL))
 
+$(LINTS_DIR)/%.ln:		$(UTSBASE)/common/io/fsd/%.c
+	@($(LHEAD) $(LINT.c) $< $(LTAIL))
+
 $(LINTS_DIR)/%.ln:		$(UTSBASE)/common/io/hme/%.c
 	@($(LHEAD) $(LINT.c) $< $(LTAIL))
 
--- /dev/null	Mon Jul  1 21:15:24 2013
+++ new/usr/src/uts/common/io/fsd/fsd.c	Mon Jul  1 21:15:24 2013
@@ -0,0 +1,212 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source.  A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright 2013 Damian Bogel. All rights reserved.
+ */
+
+/*
+ * Kernel module part of the Hello World pseudo-device driver for illumos.
+ */
+
+/*
+ * TODO:
+ * - fsd_open(): check privilages
+ */
+
+#include <sys/conf.h>
+#include <sys/cred.h>
+#include <sys/ddi.h>
+#include <sys/devops.h>
+#include <sys/errno.h>
+#include <sys/file.h>
+#include <sys/fsd.h>
+#include <sys/modctl.h>
+#include <sys/open.h>
+#include <sys/stat.h>
+#include <sys/sunddi.h>
+#include <sys/types.h>
+
+#include "fsd_impl.h"
+
+/* Internal fsd world variables */
+static dev_info_t	*fsd_devinfo;
+
+static int
+fsd_attach(dev_info_t *dip, ddi_attach_cmd_t cmd)
+{
+	if (cmd != DDI_ATTACH)
+		return (DDI_FAILURE);
+
+	if (fsd_devinfo != NULL)
+		return (DDI_FAILURE);
+
+	int instance;
+	instance = ddi_get_instance(dip);
+	if (ddi_create_minor_node(dip, "fsd", S_IFCHR, instance,
+	    DDI_PSEUDO, 0) == DDI_FAILURE) {
+		fsd_print("Failed to create minor node\n");
+		return (DDI_FAILURE);
+	}
+	fsd_devinfo = dip;
+	return (DDI_SUCCESS);
+}
+
+static int
+fsd_detach(dev_info_t *dip, ddi_detach_cmd_t cmd)
+{
+	if (cmd != DDI_DETACH)
+		return (DDI_FAILURE);
+	ddi_remove_minor_node(dip, NULL);
+	fsd_devinfo = NULL;
+	return (DDI_SUCCESS);
+}
+
+static int
+fsd_getinfo(
+	dev_info_t *dip,
+	ddi_info_cmd_t infocmd,
+	void *arg,
+	void **resultp
+)
+{
+	_NOTE(ARGUNUSED(dip));
+	switch (infocmd) {
+	case DDI_INFO_DEVT2DEVINFO:
+		*resultp = (void*)(uintptr_t)getminor((dev_t)arg);
+		return (DDI_SUCCESS);
+	case DDI_INFO_DEVT2INSTANCE:
+		*resultp = fsd_devinfo;
+		return (DDI_SUCCESS);
+	default:
+		return (DDI_FAILURE);
+	}
+}
+
+static int
+fsd_open(dev_t *devp, int oflag, int sflag, cred_t *cred_p)
+{
+	_NOTE(ARGUNUSED(devp));
+	_NOTE(ARGUNUSED(oflag));
+	_NOTE(ARGUNUSED(sflag));
+	_NOTE(ARGUNUSED(cred_p));
+	return (0);
+}
+
+static int
+fsd_close(dev_t dev, int flag, int otyp, cred_t *cred_p)
+{
+	_NOTE(ARGUNUSED(dev));
+	_NOTE(ARGUNUSED(flag));
+	_NOTE(ARGUNUSED(otyp));
+	_NOTE(ARGUNUSED(cred_p));
+	return (0);
+}
+
+static int
+fsd_ioctl(
+	dev_t dev,
+	int cmd,
+	intptr_t arg,
+	int mode,
+	cred_t *cred_p,
+	int *rval_p
+)
+{
+	_NOTE(ARGUNUSED(dev));
+	_NOTE(ARGUNUSED(cred_p));
+	_NOTE(ARGUNUSED(rval_p));
+
+	switch (cmd) {
+	case FSD_PRINT_MSG:
+	{
+		struct fsd_msg m;
+		if (ddi_copyin(
+		    (void*)arg, &m.len, sizeof (m.len), mode) != 0)
+			return (EFAULT);
+		if (m.len > FSD_MAX_MSG_LEN)
+			return (EINVAL);
+		if (ddi_copyin(
+		    (void*)((uintptr_t)arg + sizeof (m.len)),
+		    m.s, m.len, mode) != 0)
+			return (EFAULT);
+		m.s[m.len] = '\0';
+		fsd_print(m.s);
+		break;
+	}
+	default:
+		return (EINVAL);
+	}
+	return (0);
+}
+
+
+static struct cb_ops cb_ops = {
+	fsd_open,	/* open(9E) */
+	fsd_close,	/* close(9E) */
+	nodev,		/* strategy(9E) */
+	nodev,		/* print(9E) */
+	nodev,		/* dump(9E) */
+	nodev,		/* read(9E) */
+	nodev,		/* write(9E) */
+	fsd_ioctl,	/* ioctl(9E) */
+	nodev,		/* devmap(9E) */
+	nodev,		/* mmap(9E) */
+	nodev,		/* segmap(9E) */
+	nochpoll,	/* chpoll(9E) */
+	ddi_prop_op,	/* prop_op(9E) */
+	NULL,		/* streamtab(9E) */
+	D_MP | D_64BIT,	/* cb_flag(9E) */
+	CB_REV,		/* cb_rev(9E) */
+	nodev,		/* aread(9E) */
+	nodev,		/* awrite(9E) */
+};
+
+static struct dev_ops dev_ops = {
+	DEVO_REV,		/* driver build version */
+	0,			/* reference count */
+	fsd_getinfo,		/* getinfo */
+	nulldev,
+	nulldev,		/* probe */
+	fsd_attach,		/* attach */
+	fsd_detach,		/* detach */
+	nodev,
+	&cb_ops,		/* cb_ops */
+	NULL,			/* bus_ops */
+	NULL,			/* power */
+	ddi_quiesce_not_needed,	/* quiesce */
+};
+
+static struct modldrv modldrv = {
+	&mod_driverops,	"Filesystem Disturber Driver", &dev_ops
+};
+
+static struct modlinkage modlinkage = {
+	MODREV_1, &modldrv, NULL
+};
+
+int
+_init(void)
+{
+	return (mod_install(&modlinkage));
+}
+
+int
+_info(struct modinfo *modinfop)
+{
+	return (mod_info(&modlinkage, modinfop));
+}
+
+int
+_fini(void)
+{
+	return (mod_remove(&modlinkage));
+}
--- /dev/null	Mon Jul  1 21:15:24 2013
+++ new/usr/src/uts/common/io/fsd/fsd.conf	Mon Jul  1 21:15:24 2013
@@ -0,0 +1,25 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License, Version 1.0 only
+# (the "License"). You may not use this file except in compliance
+# with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2013 Damian Bogel. All rights reserved.
+#
+node="fsd" parent="pseudo" instance=0;
--- /dev/null	Mon Jul  1 21:15:24 2013
+++ new/usr/src/uts/common/io/fsd/fsd_impl.c	Mon Jul  1 21:15:24 2013
@@ -0,0 +1,24 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source.  A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright 2013 Damian Bogel.  All rights reserved.
+ */
+
+#include <sys/cmn_err.h>
+#include <sys/ddi.h>
+#include <sys/sunddi.h>
+
+void
+fsd_print(const int8_t *str)
+{
+	(void) cmn_err(CE_CONT, "%s\n", str);
+}
--- /dev/null	Mon Jul  1 21:15:24 2013
+++ new/usr/src/uts/common/io/fsd/fsd_impl.h	Mon Jul  1 21:15:24 2013
@@ -0,0 +1,35 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source.  A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright 2013 Damian Bogel. All rights reserved.
+ */
+
+#ifndef _FSD_IMPL_H
+#define	_FSD_IMPL_H
+
+/*
+ * Public interface for the fsd driver.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <sys/fsd.h>
+
+void fsd_print(const int8_t *str);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FSD_IMPL_H */
--- old/usr/src/uts/common/sys/Makefile	Mon Jul  1 21:15:24 2013
+++ new/usr/src/uts/common/sys/Makefile	Mon Jul  1 21:15:24 2013
@@ -21,6 +21,9 @@
 #
 # Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
 #
+#
+# Copyright 2013 Damian Bogel. All rights reserved.
+#
 
 include $(SRC)/uts/Makefile.uts
 
@@ -241,6 +244,7 @@
 	flock.h			\
 	flock_impl.h		\
 	fork.h			\
+	fsd.h			\
 	fss.h			\
 	fsspriocntl.h		\
 	fsid.h			\
--- /dev/null	Mon Jul  1 21:15:24 2013
+++ new/usr/src/uts/common/sys/fsd.h	Mon Jul  1 21:15:24 2013
@@ -0,0 +1,40 @@
+/*
+ * This file and its contents are supplied under the terms of the
+ * Common Development and Distribution License ("CDDL"), version 1.0.
+ * You may only use this file in accordance with the terms of version
+ * 1.0 of the CDDL.
+ *
+ * A full copy of the text of the CDDL should have accompanied this
+ * source.  A copy of the CDDL is also available via the Internet at
+ * http://www.illumos.org/license/CDDL.
+ */
+
+/*
+ * Copyright 2013 Damian Bogel.  All rights reserved.
+ */
+
+#ifndef _FSD_H
+#define	_FSD_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <sys/inttypes.h>
+
+#define	FSD_DEVICE_PATH	"/dev/fsd"
+
+#define	FSD_PRINT_MSG	1
+
+#define	FSD_MAX_MSG_LEN	255
+
+struct fsd_msg {
+	uint32_t len;
+	int8_t s[FSD_MAX_MSG_LEN];
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FSD_H */
--- old/usr/src/uts/intel/Makefile.intel.shared	Mon Jul  1 21:15:24 2013
+++ new/usr/src/uts/intel/Makefile.intel.shared	Mon Jul  1 21:15:24 2013
@@ -22,6 +22,10 @@
 # Copyright (c) 2012 Nexenta Systems, Inc. All rights reserved.
 
 #
+# Copyright 2013 Damian Bogel. All rights reserved.
+#
+
+#
 #	This makefile contains the common definitions for all intel
 #	implementation architecture independent modules.
 #
@@ -240,6 +244,7 @@
 DRV_KMODS	+= fdc
 DRV_KMODS	+= fm
 DRV_KMODS	+= fssnap
+DRV_KMODS	+= fsd
 DRV_KMODS	+= hxge
 DRV_KMODS	+= i8042
 DRV_KMODS	+= i915
--- /dev/null	Mon Jul  1 21:15:24 2013
+++ new/usr/src/uts/intel/fsd/Makefile	Mon Jul  1 21:15:24 2013
@@ -0,0 +1,64 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License, Version 1.0 only
+# (the "License"). You may not use this file except in compliance
+# with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2012 Joyent, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+#
+# Copyright 2013 Damian Bogel. All rights reserved.
+#
+
+UTSBASE	= ../..
+
+MODULE	= fsd
+OBJECTS	= $(FSD_OBJS:%=$(OBJS_DIR)/%)
+LINTS	= $(FSD_OBJS:%.o=$(LINTS_DIR)/%.ln)
+ROOTMODULE	= $(ROOT_DRV_DIR)/$(MODULE)
+CONF_SRCDIR	= $(UTSBASE)/common/io/fsd
+
+include $(UTSBASE)/intel/Makefile.intel
+
+ALL_TARGET	= $(BINARY) $(SRC_CONFILE)
+LINT_TARGET	= $(MODULE).lint
+INSTALL_TARGET	= $(BINARY) $(ROOTMODULE) $(ROOT_CONFFILE)
+
+LDFLAGS += -dy
+
+.KEEP_STATE:
+
+def:	$(DEF_DEPS)
+
+all:	$(ALL_DEPS)
+
+clean:	$(CLEAN_DEPS)
+
+clobber:	$(CLOBBER_DEPS)
+
+lint:	$(LINT_DEPS)
+
+modlintlib:	$(MODLINTLIB_DEPS)
+
+clean.lint:	$(CLEAN_LINT_DEPS)
+
+install:	$(INSTALL_DEPS)
+
+include $(UTSBASE)/intel/Makefile.targ
