puc_pccard.c revision 158124
121173Sjkh/*- 250479Speter * Copyright (c) 2002 Poul-Henning Kamp. All rights reserved. 350479Speter * 421173Sjkh * Redistribution and use in source and binary forms, with or without 521173Sjkh * modification, are permitted provided that the following conditions 621173Sjkh * are met: 721173Sjkh * 1. Redistributions of source code must retain the above copyright 821173Sjkh * notice unmodified, this list of conditions, and the following 921173Sjkh * disclaimer. 1021173Sjkh * 2. Redistributions in binary form must reproduce the above copyright 1121173Sjkh * notice, this list of conditions and the following disclaimer in the 1221173Sjkh * documentation and/or other materials provided with the distribution. 1321173Sjkh * 14159363Strhodes * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 15159363Strhodes * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16159363Strhodes * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17159363Strhodes * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 18159363Strhodes * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19159363Strhodes * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20159363Strhodes * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2164057Salex * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2264057Salex * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2364057Salex * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2421173Sjkh * 2564057Salex */ 2664057Salex 27100446Swosch#include <sys/cdefs.h> 2821369Smax__FBSDID("$FreeBSD: head/sys/dev/puc/puc_pccard.c 158124 2006-04-28 21:21:53Z marcel $"); 2964057Salex 3093217Sru#include <sys/param.h> 3164057Salex#include <sys/systm.h> 3221173Sjkh#include <sys/kernel.h> 3393217Sru#include <sys/module.h> 3421173Sjkh#include <sys/bus.h> 3521173Sjkh#include <sys/conf.h> 3664047Salex#include <sys/malloc.h> 3764047Salex 3864047Salex#include <machine/bus.h> 3964047Salex#include <machine/resource.h> 4021173Sjkh#include <sys/rman.h> 4121173Sjkh 4221173Sjkh#include <dev/pccard/pccardvar.h> 4321173Sjkh 4493217Sru#include <dev/puc/puc_bfe.h> 4521173Sjkh#include <dev/puc/puc_cfg.h> 46215293Sjoel 47215293Sjoel/* http://www.argosy.com.tw/product/sp320.htm */ 48215293Sjoelconst struct puc_cfg puc_pccard_rscom = { 4921173Sjkh 0, 0, 0, 0, 5021173Sjkh "ARGOSY SP320 Dual port serial PCMCIA", 5164047Salex DEFAULT_RCLK, 5221173Sjkh PUC_PORT_2S, 0, 1, 0, 5393217Sru}; 5421173Sjkh 5521173Sjkhstatic int 5621173Sjkhpuc_pccard_probe(device_t dev) 5721173Sjkh{ 5821173Sjkh const char *vendor, *product; 5921173Sjkh int error; 6021173Sjkh 6121173Sjkh error = pccard_get_vendor_str(dev, &vendor); 6293217Sru if (error) 6337283Sjkh return(error); 6421173Sjkh error = pccard_get_product_str(dev, &product); 6521173Sjkh if (error) 6621173Sjkh return(error); 6721173Sjkh if (!strcmp(vendor, "PCMCIA") && !strcmp(product, "RS-COM 2P")) 6821173Sjkh return (puc_bfe_probe(dev, &puc_pccard_rscom)); 6921173Sjkh 70156171Sceri return (ENXIO); 71156171Sceri} 7221173Sjkh 7321173Sjkhstatic device_method_t puc_pccard_methods[] = { 7465298Smarkm /* Device interface */ 7521173Sjkh DEVMETHOD(device_probe, puc_pccard_probe), 7621173Sjkh DEVMETHOD(device_attach, puc_bfe_attach), 7721173Sjkh DEVMETHOD(device_detach, puc_bfe_detach), 7821173Sjkh 7921173Sjkh DEVMETHOD(bus_alloc_resource, puc_bus_alloc_resource), 8021173Sjkh DEVMETHOD(bus_release_resource, puc_bus_release_resource), 8121173Sjkh DEVMETHOD(bus_get_resource, puc_bus_get_resource), 8221173Sjkh DEVMETHOD(bus_read_ivar, puc_bus_read_ivar), 8321173Sjkh DEVMETHOD(bus_setup_intr, puc_bus_setup_intr), 8421173Sjkh DEVMETHOD(bus_teardown_intr, puc_bus_teardown_intr), 8521173Sjkh DEVMETHOD(bus_print_child, bus_generic_print_child), 8621173Sjkh DEVMETHOD(bus_driver_added, bus_generic_driver_added), 8721173Sjkh { 0, 0 } 8821173Sjkh}; 8921173Sjkh 90100446Swoschstatic driver_t puc_pccard_driver = { 91 puc_driver_name, 92 puc_pccard_methods, 93 sizeof(struct puc_softc), 94}; 95 96DRIVER_MODULE(puc, pccard, puc_pccard_driver, puc_devclass, 0, 0); 97