puc_pccard.c revision 102897
1102714Sphk/*- 2102714Sphk * Copyright (c) 2002 Poul-Henning Kamp. All rights reserved. 3102714Sphk * 4102714Sphk * Redistribution and use in source and binary forms, with or without 5102714Sphk * modification, are permitted provided that the following conditions 6102714Sphk * are met: 7102714Sphk * 1. Redistributions of source code must retain the above copyright 8102714Sphk * notice unmodified, this list of conditions, and the following 9102714Sphk * disclaimer. 10102714Sphk * 2. Redistributions in binary form must reproduce the above copyright 11102714Sphk * notice, this list of conditions and the following disclaimer in the 12102714Sphk * documentation and/or other materials provided with the distribution. 13102714Sphk * 14102714Sphk * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 15102714Sphk * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16102714Sphk * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17102714Sphk * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 18102714Sphk * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19102714Sphk * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20102714Sphk * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21102714Sphk * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22102714Sphk * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23102714Sphk * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24102714Sphk * 25102714Sphk * $FreeBSD: head/sys/dev/puc/puc_pccard.c 102897 2002-09-03 11:31:34Z phk $ 26102714Sphk */ 27102714Sphk 28102751Sjmallett#include "opt_puc.h" 29102751Sjmallett 30102714Sphk#include <sys/param.h> 31102714Sphk#include <sys/systm.h> 32102714Sphk#include <sys/kernel.h> 33102714Sphk#include <sys/bus.h> 34102714Sphk#include <sys/conf.h> 35102714Sphk#include <sys/malloc.h> 36102714Sphk 37102714Sphk#include <machine/bus.h> 38102714Sphk#include <machine/resource.h> 39102714Sphk#include <sys/rman.h> 40102714Sphk 41102714Sphk#define PUC_ENTRAILS 1 42102714Sphk#include <dev/puc/pucvar.h> 43102714Sphk 44102734Sphk#include <dev/sio/sioreg.h> 45102714Sphk#include <dev/pccard/pccardvar.h> 46102714Sphk 47102714Sphkconst struct puc_device_description rscom_devices = { 48102714Sphk 49102897Sphk "ARGOSY SP320 Dual port serial PCMCIA", 50102897Sphk /* http://www.argosy.com.tw/product/sp320.htm */ 51102734Sphk NULL, 52102714Sphk { 0, 0, 0, 0 }, 53102714Sphk { 0, 0, 0, 0 }, 54102714Sphk { 55102734Sphk { PUC_PORT_TYPE_COM, 0x0, 0x00, DEFAULT_RCLK }, 56102734Sphk { PUC_PORT_TYPE_COM, 0x1, 0x00, DEFAULT_RCLK }, 57102714Sphk } 58102714Sphk}; 59102714Sphk 60102714Sphk 61102714Sphkstatic int 62102714Sphkpuc_pccard_probe(device_t dev) 63102714Sphk{ 64102714Sphk char *vendor, *product; 65102714Sphk int error; 66102714Sphk 67102714Sphk error = pccard_get_vendor_str(dev, &vendor); 68102714Sphk if (error) 69102714Sphk return(error); 70102714Sphk error = pccard_get_product_str(dev, &product); 71102714Sphk if (error) 72102714Sphk return(error); 73102734Sphk if (!strcmp(vendor, "PCMCIA") && !strcmp(product, "RS-COM 2P")) { 74102734Sphk device_set_desc(dev, rscom_devices.name); 75102714Sphk return (0); 76102734Sphk } 77102714Sphk 78102714Sphk return (ENXIO); 79102714Sphk} 80102714Sphk 81102714Sphkstatic int 82102714Sphkpuc_pccard_attach(device_t dev) 83102714Sphk{ 84102714Sphk 85102714Sphk return (puc_attach(dev, &rscom_devices)); 86102714Sphk} 87102714Sphk 88102714Sphkstatic device_method_t puc_pccard_methods[] = { 89102714Sphk /* Device interface */ 90102714Sphk DEVMETHOD(device_probe, puc_pccard_probe), 91102714Sphk DEVMETHOD(device_attach, puc_pccard_attach), 92102714Sphk 93102714Sphk DEVMETHOD(bus_alloc_resource, puc_alloc_resource), 94102714Sphk DEVMETHOD(bus_release_resource, puc_release_resource), 95102714Sphk DEVMETHOD(bus_get_resource, puc_get_resource), 96102714Sphk DEVMETHOD(bus_read_ivar, puc_read_ivar), 97102714Sphk DEVMETHOD(bus_setup_intr, puc_setup_intr), 98102714Sphk DEVMETHOD(bus_teardown_intr, puc_teardown_intr), 99102714Sphk DEVMETHOD(bus_print_child, bus_generic_print_child), 100102714Sphk DEVMETHOD(bus_driver_added, bus_generic_driver_added), 101102714Sphk { 0, 0 } 102102714Sphk}; 103102714Sphk 104102714Sphkstatic driver_t puc_pccard_driver = { 105102714Sphk "puc", 106102714Sphk puc_pccard_methods, 107102714Sphk sizeof(struct puc_softc), 108102714Sphk}; 109102714Sphk 110102714SphkDRIVER_MODULE(puc, pccard, puc_pccard_driver, puc_devclass, 0, 0); 111