Module Name:    src
Committed By:   mbalmer
Date:           Mon Dec 17 20:38:01 UTC 2012

Modified Files:
        src/distrib/sets/lists/man: mi
        src/share/man/man4: Makefile
        src/sys/arch/i386/conf: ALL GENERIC
        src/sys/dev/pci: files.pci
Added Files:
        src/share/man/man4: ibmcd.4
        src/sys/dev/pci: ibmcd.c

Log Message:
Adding ibmcd(4), a device driver for the IBM 4810 BSP cash drawer port as
found e.g. in SurePOS 300 series point of sale terminals.  The driver
provides a gpio(4) device with three pins:  pin 0 to open drawer, pin 1
to read the status and pin 2 to read whether a cash drawer is connected or
not.


To generate a diff of this commit:
cvs rdiff -u -r1.1412 -r1.1413 src/distrib/sets/lists/man/mi
cvs rdiff -u -r1.593 -r1.594 src/share/man/man4/Makefile
cvs rdiff -u -r0 -r1.1 src/share/man/man4/ibmcd.4
cvs rdiff -u -r1.348 -r1.349 src/sys/arch/i386/conf/ALL
cvs rdiff -u -r1.1084 -r1.1085 src/sys/arch/i386/conf/GENERIC
cvs rdiff -u -r1.360 -r1.361 src/sys/dev/pci/files.pci
cvs rdiff -u -r0 -r1.1 src/sys/dev/pci/ibmcd.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/sets/lists/man/mi
diff -u src/distrib/sets/lists/man/mi:1.1412 src/distrib/sets/lists/man/mi:1.1413
--- src/distrib/sets/lists/man/mi:1.1412	Sun Dec 16 20:33:43 2012
+++ src/distrib/sets/lists/man/mi	Mon Dec 17 20:38:00 2012
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1412 2012/12/16 20:33:43 christos Exp $
+# $NetBSD: mi,v 1.1413 2012/12/17 20:38:00 mbalmer Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -1180,6 +1180,7 @@
 ./usr/share/man/cat4/i4btrc.0			man-obsolete		obsolete
 ./usr/share/man/cat4/i915drm.0			man-sys-catman		.cat
 ./usr/share/man/cat4/iavc.0			man-sys-catman		.cat
+./usr/share/man/cat4/ibmcd.0			man-sys-catman		.cat
 ./usr/share/man/cat4/ibmhawk.0			man-sys-catman		.cat
 ./usr/share/man/cat4/ichlpcib.0			man-obsolete		obsolete
 ./usr/share/man/cat4/ichsmb.0			man-sys-catman		.cat
@@ -4074,6 +4075,7 @@
 ./usr/share/man/html4/i386/viac7temp.html	man-sys-htmlman		html
 ./usr/share/man/html4/i915drm.html		man-sys-htmlman		html
 ./usr/share/man/html4/iavc.html			man-sys-htmlman		html
+./usr/share/man/html4/ibmcd.html		man-sys-htmlman		html
 ./usr/share/man/html4/ibmhawk.html		man-sys-htmlman		html
 ./usr/share/man/html4/ichlpcib.html		man-obsolete		obsolete
 ./usr/share/man/html4/ichsmb.html		man-sys-htmlman		html
@@ -6798,6 +6800,7 @@
 ./usr/share/man/man4/i4btrc.4			man-obsolete		obsolete
 ./usr/share/man/man4/i915drm.4			man-sys-man		.man
 ./usr/share/man/man4/iavc.4			man-sys-man		.man
+./usr/share/man/man4/ibmcd.4			man-sys-man		.man
 ./usr/share/man/man4/ibmhawk.4			man-sys-man		.man
 ./usr/share/man/man4/ichlpcib.4			man-obsolete		obsolete
 ./usr/share/man/man4/ichsmb.4			man-sys-man		.man

Index: src/share/man/man4/Makefile
diff -u src/share/man/man4/Makefile:1.593 src/share/man/man4/Makefile:1.594
--- src/share/man/man4/Makefile:1.593	Sun Dec 16 13:09:18 2012
+++ src/share/man/man4/Makefile	Mon Dec 17 20:37:59 2012
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.593 2012/12/16 13:09:18 mbalmer Exp $
+#	$NetBSD: Makefile,v 1.594 2012/12/17 20:37:59 mbalmer Exp $
 #	@(#)Makefile	8.1 (Berkeley) 6/18/93
 
 MAN=	aac.4 ac97.4 acardide.4 aceride.4 acphy.4 \
@@ -29,7 +29,7 @@ MAN=	aac.4 ac97.4 acardide.4 aceride.4 a
 	glxtphy.4 gpib.4 gpio.4 gpiolock.4 gpiopwm.4 gpiosim.4 gre.4 \
 	gphyter.4 gsip.4 \
 	hdaudio.4 hifn.4 hme.4 hpacel.4 hpqlb.4 hptide.4 \
-	ibmhawk.4 ichsmb.4 icmp.4 icp.4 icsphy.4 iee.4 ieee80211.4 \
+	ibmcd.4 ibmhawk.4 ichsmb.4 icmp.4 icp.4 icsphy.4 iee.4 ieee80211.4 \
 	ifmedia.4 igphy.4 igsfb.4 iha.4 ihphy.4 iic.4 inet.4 ikphy.4 inphy.4 \
 	intersil7170.4 \
 	ioasic.4 ioat.4 iop.4 iophy.4 iopsp.4 ip.4 ipkdb.4 ipmi.4 ipw.4 \

Index: src/sys/arch/i386/conf/ALL
diff -u src/sys/arch/i386/conf/ALL:1.348 src/sys/arch/i386/conf/ALL:1.349
--- src/sys/arch/i386/conf/ALL:1.348	Sun Dec 16 18:52:17 2012
+++ src/sys/arch/i386/conf/ALL	Mon Dec 17 20:38:00 2012
@@ -1,4 +1,4 @@
-# $NetBSD: ALL,v 1.348 2012/12/16 18:52:17 mbalmer Exp $
+# $NetBSD: ALL,v 1.349 2012/12/17 20:38:00 mbalmer Exp $
 # From NetBSD: GENERIC,v 1.787 2006/10/01 18:37:54 bouyer Exp
 #
 # ALL machine description file
@@ -17,7 +17,7 @@ include 	"arch/i386/conf/std.i386"
 
 options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
 
-#ident 		"ALL-$Revision: 1.348 $"
+#ident 		"ALL-$Revision: 1.349 $"
 
 maxusers	64		# estimated number of users
 
@@ -521,6 +521,10 @@ isa0	at pcib?
 ptcd0	at isa?
 gpio*	at ptcd?
 
+# IBM 4810 BSP cash drawer port
+ibmcd*	at pci? dev ? function ?
+gpio*	at ibmcd?
+
 # PCMCIA bus support
 pcmcia* at pcic? controller ? socket ?
 pcmcia* at tcic? controller ? socket ?

Index: src/sys/arch/i386/conf/GENERIC
diff -u src/sys/arch/i386/conf/GENERIC:1.1084 src/sys/arch/i386/conf/GENERIC:1.1085
--- src/sys/arch/i386/conf/GENERIC:1.1084	Mon Dec 10 02:03:45 2012
+++ src/sys/arch/i386/conf/GENERIC	Mon Dec 17 20:38:00 2012
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.1084 2012/12/10 02:03:45 dholland Exp $
+# $NetBSD: GENERIC,v 1.1085 2012/12/17 20:38:00 mbalmer Exp $
 #
 # GENERIC machine description file
 #
@@ -22,7 +22,7 @@ include 	"arch/i386/conf/std.i386"
 
 options 	INCLUDE_CONFIG_FILE	# embed config file in kernel binary
 
-#ident 		"GENERIC-$Revision: 1.1084 $"
+#ident 		"GENERIC-$Revision: 1.1085 $"
 
 maxusers	64		# estimated number of users
 
@@ -477,6 +477,9 @@ puc*	at pci? dev ? function ?	# PCI "uni
 
 pwdog*	at pci ? dev ? function ?	# QUANCOM PWDOG1
 
+#ibmcd*	at pci ? dev ? function ?	# IBM 4810 BSP cash drawer port
+#gpio*	at ibmcd?
+
 agp*	at pchb?
 
 

Index: src/sys/dev/pci/files.pci
diff -u src/sys/dev/pci/files.pci:1.360 src/sys/dev/pci/files.pci:1.361
--- src/sys/dev/pci/files.pci:1.360	Thu Aug  2 00:17:44 2012
+++ src/sys/dev/pci/files.pci	Mon Dec 17 20:37:59 2012
@@ -1,4 +1,4 @@
-#	$NetBSD: files.pci,v 1.360 2012/08/02 00:17:44 macallan Exp $
+#	$NetBSD: files.pci,v 1.361 2012/12/17 20:37:59 mbalmer Exp $
 #
 # Config file and device description for machine-independent PCI code.
 # Included by ports that need it.  Requires that the SCSI files be
@@ -1091,6 +1091,11 @@ device	pwdog: sysmon_envsys
 attach	pwdog at pci
 file	dev/pci/pwdog.c		pwdog
 
+# IBM 4810 BSP cash drawer port
+device	ibmcd: gpiobus
+attach	ibmcd at pci
+file	dev/pci/ibmcd.c		ibmcd
+
 # SIS 315 Pro frame buffer
 device  sisfb: wsemuldisplaydev, rasops8, rasops15, rasops16, rasops32, vcons
 attach  sisfb at pci

Added files:

Index: src/share/man/man4/ibmcd.4
diff -u /dev/null src/share/man/man4/ibmcd.4:1.1
--- /dev/null	Mon Dec 17 20:38:02 2012
+++ src/share/man/man4/ibmcd.4	Mon Dec 17 20:37:59 2012
@@ -0,0 +1,68 @@
+.\"	$NetBSD: ibmcd.4,v 1.1 2012/12/17 20:37:59 mbalmer Exp $
+.\"
+.\" Copyright (c) 2012 Marc Balmer <m...@msys.ch>
+.\" 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.
+.\"
+.Dd December 17, 2012
+.Dt IBMCD 4
+.Os
+.Sh NAME
+.Nm ibmcd
+.Nd support for the IBM 4810 BSP cash drawer port
+.Sh SYNOPSIS
+.Cd "ibmcd* at at pci ? dev ? function ?"
+.Cd "gpio* at ibmcd?"
+.Sh DESCRIPTION
+The
+.Nm
+driver controls the cash drawer port of the IBM 4810 BSP PCI device found
+in IBM point of sale terminals (e.g. in the SurePOS 300 series) using the GPIO
+subsystem.
+.Pp
+.Nm
+provides a GPIO device with three pins: pin 0 is used to control the cash drawer
+while pin 1 can be used to read the current state of the sense input pin.
+A logical 0 means the cash drawer is closed, a logical 1 means the cash drawer
+is open.
+.Pp
+Pin 2 reports if a cash drawer is connected.
+A logical 0 means there is no cash drawer connected, a logical 1 means the cash drawer is connected.
+.Pp
+To open the cash drawer, set pin 0 to logical 1.
+There is no need to reset pin 0 to logical 0 afterwards as the device generates
+a oneshot impulse.
+.Sh SEE ALSO
+.Xr gpio 4 ,
+.Xr gpioctl 8 ,
+.Xr ptcd 4
+.Sh HISTORY
+The
+.Nm
+driver first appeared in
+.Nx 6.1 .
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+driver was written by
+.An Marc Balmer Aq m...@msys.ch .

Index: src/sys/dev/pci/ibmcd.c
diff -u /dev/null src/sys/dev/pci/ibmcd.c:1.1
--- /dev/null	Mon Dec 17 20:38:02 2012
+++ src/sys/dev/pci/ibmcd.c	Mon Dec 17 20:38:00 2012
@@ -0,0 +1,238 @@
+/* $NetBSD: ibmcd.c,v 1.1 2012/12/17 20:38:00 mbalmer Exp $ */
+
+/*
+ * Copyright (c) 2012 Marc Balmer <m...@msys.ch>
+ * 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 IBM 4810 BSP cash drawer port.
+ */
+
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/device.h>
+#include <sys/gpio.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/systm.h>
+
+#include <dev/gpio/gpiovar.h>
+
+#include <dev/pci/pcivar.h>
+#include <dev/pci/pcireg.h>
+#include <dev/pci/pcidevs.h>
+
+/* registers */
+#define IBMCD_STATUS		0x00
+#define IBMCD_CONTROL		0x01
+
+#define IBMCD_CMD_OPEN		0x6d
+#define IBMCD_DO_OPEN		0x01
+
+#define IBMCD_CLOSED		0x80
+#define IBMCD_NOT_CONNECTED	0x40
+
+/* GPIO constants */
+#define IBMCD_NPINS		3
+#define PIN_OPEN		0
+#define	PIN_STATUS		1
+#define PIN_CONNECTED		2
+
+struct ibmcd_softc {
+	bus_space_tag_t		sc_iot;
+	bus_space_handle_t	sc_ioh;
+	bus_size_t		sc_iosize;
+
+	/* GPIO interface */
+	struct gpio_chipset_tag	sc_gpio_gc;
+	gpio_pin_t		sc_gpio_pins[IBMCD_NPINS];
+};
+
+static int ibmcd_match(device_t, cfdata_t, void *);
+static void ibmcd_attach(device_t, device_t, void *);
+static int ibmcd_detach(device_t, int);
+#if (__NetBSD_Version__ >= 600000000)
+static bool ibmcd_suspend(device_t, const pmf_qual_t *);
+static bool ibmcd_resume(device_t, const pmf_qual_t *);
+#endif
+int ibmcd_gpio_pin_read(void *, int);
+void ibmcd_gpio_pin_write(void *, int, int);
+void ibmcd_gpio_pin_ctl(void *, int, int);
+
+CFATTACH_DECL2_NEW(ibmcd, sizeof(struct ibmcd_softc), ibmcd_match,
+    ibmcd_attach, ibmcd_detach, NULL, NULL, NULL);
+
+static int
+ibmcd_match(device_t parent, cfdata_t match, void *aux)
+{
+	struct pci_attach_args *pa = (struct pci_attach_args *)aux;
+
+	if (PCI_VENDOR(pa->pa_id) == PCI_VENDOR_IBM &&
+	    PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_IBM_4810_BSP)
+		return 1;
+	return 0;
+}
+
+void
+ibmcd_attach(device_t parent, device_t self, void *aux)
+{
+	struct ibmcd_softc *sc = device_private(self);
+	struct pci_attach_args *const pa = (struct pci_attach_args *)aux;
+	struct gpiobus_attach_args gba;
+	pcireg_t memtype;
+
+	memtype = pci_mapreg_type(pa->pa_pc, pa->pa_tag, PCI_MAPREG_START);
+	if (pci_mapreg_map(pa, PCI_MAPREG_START, memtype, 0, &sc->sc_iot,
+	    &sc->sc_ioh, NULL, &sc->sc_iosize)) {
+		aprint_error("\n");
+		aprint_error_dev(self, "PCI %s region not found\n",
+		    memtype == PCI_MAPREG_TYPE_IO ? "I/O" : "memory");
+		return;
+	}
+	printf(": IBM 4810 BSP cash drawer\n");
+
+#if (__NetBSD_Version__ >= 600000000)
+	pmf_device_register(self, ibmcd_suspend, ibmcd_resume);
+#endif
+	/* Initialize pins array */
+	sc->sc_gpio_pins[PIN_OPEN].pin_num = 0;
+	sc->sc_gpio_pins[PIN_OPEN].pin_caps = GPIO_PIN_OUTPUT;
+	sc->sc_gpio_pins[PIN_STATUS].pin_num = 1;
+	sc->sc_gpio_pins[PIN_STATUS].pin_caps = GPIO_PIN_INPUT;
+	sc->sc_gpio_pins[PIN_CONNECTED].pin_num = 2;
+	sc->sc_gpio_pins[PIN_CONNECTED].pin_caps = GPIO_PIN_INPUT;
+
+	/* Create controller tag */
+	sc->sc_gpio_gc.gp_cookie = sc;
+	sc->sc_gpio_gc.gp_pin_read = ibmcd_gpio_pin_read;
+	sc->sc_gpio_gc.gp_pin_write = ibmcd_gpio_pin_write;
+	sc->sc_gpio_gc.gp_pin_ctl = ibmcd_gpio_pin_ctl;
+
+	gba.gba_gc = &sc->sc_gpio_gc;
+	gba.gba_pins = sc->sc_gpio_pins;
+	gba.gba_npins = IBMCD_NPINS;
+
+	/* Attach GPIO framework */
+	config_found_ia(self, "gpiobus", &gba, gpiobus_print);
+
+}
+
+static int
+ibmcd_detach(device_t self, int flags)
+{
+	struct ibmcd_softc *sc = device_private(self);
+
+#if (__NetBSD_Version__ >= 600000000)
+	pmf_device_deregister(self);
+#endif
+	if (sc->sc_iosize)
+		bus_space_unmap(sc->sc_iot, sc->sc_ioh, sc->sc_iosize);
+	return 0;
+}
+
+#if (__NetBSD_Version__ >= 600000000)
+static bool
+ibmcd_resume(device_t self, const pmf_qual_t *qual)
+{
+	return true;
+}
+
+static bool
+ibmcd_suspend(device_t self, const pmf_qual_t *qual)
+{
+	return true;
+}
+#endif
+
+int
+ibmcd_gpio_pin_read(void *arg, int pin)
+{
+	struct ibmcd_softc *sc = arg;
+	uint8_t data;
+
+	data = bus_space_read_1(sc->sc_iot, sc->sc_ioh, IBMCD_STATUS);
+
+	switch (pin) {
+	case PIN_STATUS:
+		return data & IBMCD_CLOSED ? 0 : 1;
+	case PIN_CONNECTED:
+		return data & IBMCD_NOT_CONNECTED ? 0 : 1;
+	default:
+		return 0;
+	}
+}
+
+void
+ibmcd_gpio_pin_write(void *arg, int pin, int value)
+{
+	struct ibmcd_softc *sc = arg;
+
+	if (pin != PIN_OPEN)
+		return;
+
+	bus_space_write_1(sc->sc_iot, sc->sc_ioh, IBMCD_STATUS,
+	    value ? IBMCD_DO_OPEN : 0);
+	bus_space_write_1(sc->sc_iot, sc->sc_ioh, IBMCD_CONTROL,
+	    IBMCD_CMD_OPEN);
+}
+
+void
+ibmcd_gpio_pin_ctl(void *arg, int pin, int flags)
+{
+	/* We ignore pin control requests since the pin functions are fixed. */
+}
+
+MODULE(MODULE_CLASS_DRIVER, ibmcd, "pci");
+
+#ifdef _MODULE
+#include "ioconf.c"
+#endif
+
+static int
+ibmcd_modcmd(modcmd_t cmd, void *opaque)
+{
+	int error;
+
+	error = 0;
+	switch (cmd) {
+	case MODULE_CMD_INIT:
+#ifdef _MODULE
+		error = config_init_component(cfdriver_ioconf_ibmcd,
+		    cfattach_ioconf_ibmcd, cfdata_ioconf_ibmcd);
+		if (error)
+			aprint_error("%s: unable to init component\n",
+			    ibmcd_cd.cd_name);
+#endif
+		break;
+	case MODULE_CMD_FINI:
+#ifdef _MODULE
+		config_fini_component(cfdriver_ioconf_ibmcd,
+		    cfattach_ioconf_ibmcd, cfdata_ioconf_ibmcd);
+#endif
+		break;
+	default:
+		error = ENOTTY;
+	}
+	return error;
+}

Reply via email to