1*c4bf625eSHasso Tepper /*- 2*c4bf625eSHasso Tepper * Copyright (c) 2006-2007 Daniel Roethlisberger <daniel@roe.ch> 3*c4bf625eSHasso Tepper * All rights reserved. 4*c4bf625eSHasso Tepper * 5*c4bf625eSHasso Tepper * Redistribution and use in source and binary forms, with or without 6*c4bf625eSHasso Tepper * modification, are permitted provided that the following conditions 7*c4bf625eSHasso Tepper * are met: 8*c4bf625eSHasso Tepper * 1. Redistributions of source code must retain the above copyright 9*c4bf625eSHasso Tepper * notice unmodified, this list of conditions, and the following 10*c4bf625eSHasso Tepper * disclaimer. 11*c4bf625eSHasso Tepper * 2. Redistributions in binary form must reproduce the above copyright 12*c4bf625eSHasso Tepper * notice, this list of conditions and the following disclaimer in the 13*c4bf625eSHasso Tepper * documentation and/or other materials provided with the distribution. 14*c4bf625eSHasso Tepper * 15*c4bf625eSHasso Tepper * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16*c4bf625eSHasso Tepper * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17*c4bf625eSHasso Tepper * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18*c4bf625eSHasso Tepper * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19*c4bf625eSHasso Tepper * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20*c4bf625eSHasso Tepper * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21*c4bf625eSHasso Tepper * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22*c4bf625eSHasso Tepper * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23*c4bf625eSHasso Tepper * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24*c4bf625eSHasso Tepper * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25*c4bf625eSHasso Tepper * SUCH DAMAGE. 26*c4bf625eSHasso Tepper * 27*c4bf625eSHasso Tepper * $FreeBSD: src/sys/dev/cmx/cmx_pccard.c,v 1.1 2008/03/06 08:09:45 rink Exp $ 28*c4bf625eSHasso Tepper * $DragonFly: src/sys/dev/misc/cmx/cmx_pccard.c,v 1.1 2008/04/23 08:57:10 hasso Exp $ 29*c4bf625eSHasso Tepper */ 30*c4bf625eSHasso Tepper 31*c4bf625eSHasso Tepper #include <sys/param.h> 32*c4bf625eSHasso Tepper #include <sys/systm.h> 33*c4bf625eSHasso Tepper #include <sys/kernel.h> 34*c4bf625eSHasso Tepper #include <sys/socket.h> 35*c4bf625eSHasso Tepper #include <sys/selinfo.h> 36*c4bf625eSHasso Tepper #include <sys/lock.h> 37*c4bf625eSHasso Tepper 38*c4bf625eSHasso Tepper #include <sys/module.h> 39*c4bf625eSHasso Tepper #include <sys/bus.h> 40*c4bf625eSHasso Tepper #include <sys/resource.h> 41*c4bf625eSHasso Tepper #include <sys/rman.h> 42*c4bf625eSHasso Tepper 43*c4bf625eSHasso Tepper #include "cmxvar.h" 44*c4bf625eSHasso Tepper 45*c4bf625eSHasso Tepper #include <bus/pccard/pccardvar.h> 46*c4bf625eSHasso Tepper #include <bus/pccard/pccard_cis.h> 47*c4bf625eSHasso Tepper #include <bus/pccard/pccarddevs.h> 48*c4bf625eSHasso Tepper 49*c4bf625eSHasso Tepper static const struct pccard_product cmx_pccard_products[] = { 50*c4bf625eSHasso Tepper PCMCIA_CARD(OMNIKEY, CM4040, 0), 51*c4bf625eSHasso Tepper { NULL } 52*c4bf625eSHasso Tepper }; 53*c4bf625eSHasso Tepper 54*c4bf625eSHasso Tepper /* 55*c4bf625eSHasso Tepper * Probe for the card. 56*c4bf625eSHasso Tepper */ 57*c4bf625eSHasso Tepper static int 58*c4bf625eSHasso Tepper cmx_pccard_probe(device_t dev) 59*c4bf625eSHasso Tepper { 60*c4bf625eSHasso Tepper const struct pccard_product *pp; 61*c4bf625eSHasso Tepper if ((pp = pccard_product_lookup(dev, cmx_pccard_products, 62*c4bf625eSHasso Tepper sizeof(cmx_pccard_products[0]), NULL)) != NULL) { 63*c4bf625eSHasso Tepper if (pp->pp_name != NULL) 64*c4bf625eSHasso Tepper device_set_desc(dev, pp->pp_name); 65*c4bf625eSHasso Tepper return 0; 66*c4bf625eSHasso Tepper } 67*c4bf625eSHasso Tepper return EIO; 68*c4bf625eSHasso Tepper } 69*c4bf625eSHasso Tepper 70*c4bf625eSHasso Tepper /* 71*c4bf625eSHasso Tepper * Attach to the pccard, and call bus independant attach and 72*c4bf625eSHasso Tepper * resource allocation routines. 73*c4bf625eSHasso Tepper */ 74*c4bf625eSHasso Tepper static int 75*c4bf625eSHasso Tepper cmx_pccard_attach(device_t dev) 76*c4bf625eSHasso Tepper { 77*c4bf625eSHasso Tepper int rv = 0; 78*c4bf625eSHasso Tepper cmx_init_softc(dev); 79*c4bf625eSHasso Tepper 80*c4bf625eSHasso Tepper if ((rv = cmx_alloc_resources(dev)) != 0) { 81*c4bf625eSHasso Tepper device_printf(dev, "cmx_alloc_resources() failed!\n"); 82*c4bf625eSHasso Tepper cmx_release_resources(dev); 83*c4bf625eSHasso Tepper return rv; 84*c4bf625eSHasso Tepper } 85*c4bf625eSHasso Tepper 86*c4bf625eSHasso Tepper if ((rv = cmx_attach(dev)) != 0) { 87*c4bf625eSHasso Tepper device_printf(dev, "cmx_attach() failed!\n"); 88*c4bf625eSHasso Tepper cmx_release_resources(dev); 89*c4bf625eSHasso Tepper return rv; 90*c4bf625eSHasso Tepper } 91*c4bf625eSHasso Tepper 92*c4bf625eSHasso Tepper device_printf(dev, "attached\n"); 93*c4bf625eSHasso Tepper return 0; 94*c4bf625eSHasso Tepper } 95*c4bf625eSHasso Tepper 96*c4bf625eSHasso Tepper static device_method_t cmx_pccard_methods[] = { 97*c4bf625eSHasso Tepper DEVMETHOD(device_probe, cmx_pccard_probe), 98*c4bf625eSHasso Tepper DEVMETHOD(device_attach, cmx_pccard_attach), 99*c4bf625eSHasso Tepper DEVMETHOD(device_detach, cmx_detach), 100*c4bf625eSHasso Tepper 101*c4bf625eSHasso Tepper { 0, 0 } 102*c4bf625eSHasso Tepper }; 103*c4bf625eSHasso Tepper 104*c4bf625eSHasso Tepper static driver_t cmx_pccard_driver = { 105*c4bf625eSHasso Tepper "cmx", 106*c4bf625eSHasso Tepper cmx_pccard_methods, 107*c4bf625eSHasso Tepper sizeof(struct cmx_softc), 108*c4bf625eSHasso Tepper }; 109*c4bf625eSHasso Tepper 110*c4bf625eSHasso Tepper DRIVER_MODULE(cmx, pccard, cmx_pccard_driver, cmx_devclass, 0, 0); 111*c4bf625eSHasso Tepper 112