scc_bfe_quicc.c revision 227843
1176772Sraj/*- 2176772Sraj * Copyright (c) 2006 Marcel Moolenaar 3176772Sraj * All rights reserved. 4176772Sraj * 5176772Sraj * Redistribution and use in source and binary forms, with or without 6176772Sraj * modification, are permitted provided that the following conditions 7176772Sraj * are met: 8176772Sraj * 9176772Sraj * 1. Redistributions of source code must retain the above copyright 10176772Sraj * notice, this list of conditions and the following disclaimer. 11176772Sraj * 2. Redistributions in binary form must reproduce the above copyright 12176772Sraj * notice, this list of conditions and the following disclaimer in the 13176772Sraj * documentation and/or other materials provided with the distribution. 14176772Sraj * 15176772Sraj * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16176772Sraj * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17176772Sraj * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18176772Sraj * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19176772Sraj * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20176772Sraj * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21176772Sraj * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22176772Sraj * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23176772Sraj * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24176772Sraj * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25176772Sraj */ 26176772Sraj 27176772Sraj#include <sys/cdefs.h> 28176772Sraj__FBSDID("$FreeBSD: head/sys/dev/scc/scc_bfe_quicc.c 227843 2011-11-22 21:28:20Z marius $"); 29176772Sraj 30176772Sraj#define __RMAN_RESOURCE_VISIBLE 31176772Sraj 32176772Sraj#include <sys/param.h> 33176772Sraj#include <sys/systm.h> 34176772Sraj#include <sys/bus.h> 35176772Sraj#include <sys/conf.h> 36176772Sraj#include <sys/kernel.h> 37176772Sraj#include <sys/module.h> 38176772Sraj 39176772Sraj#include <dev/quicc/quicc_bus.h> 40176772Sraj 41176772Sraj#include <machine/bus.h> 42176772Sraj#include <sys/rman.h> 43176772Sraj#include <machine/resource.h> 44176772Sraj 45176772Sraj#include <dev/scc/scc_bfe.h> 46176772Sraj 47176772Srajstatic int 48176772Srajscc_quicc_probe(device_t dev) 49176772Sraj{ 50176772Sraj device_t parent; 51176772Sraj struct scc_softc *sc; 52176772Sraj uintptr_t devtype, rclk; 53176772Sraj int error; 54176772Sraj 55176772Sraj parent = device_get_parent(dev); 56176772Sraj 57176772Sraj error = BUS_READ_IVAR(parent, dev, QUICC_IVAR_DEVTYPE, &devtype); 58176772Sraj if (error) 59176772Sraj return (error); 60176772Sraj if (devtype != QUICC_DEVTYPE_SCC) 61176772Sraj return (ENXIO); 62176772Sraj 63176772Sraj device_set_desc(dev, "QUICC quad channel SCC"); 64176772Sraj 65176772Sraj sc = device_get_softc(dev); 66176772Sraj sc->sc_class = &scc_quicc_class; 67176772Sraj if (BUS_READ_IVAR(parent, dev, QUICC_IVAR_BRGCLK, &rclk)) 68176772Sraj rclk = 0; 69176772Sraj return (scc_bfe_probe(dev, 0, rclk, 0)); 70176772Sraj} 71176772Sraj 72178600Smarcelstatic int 73178600Smarcelscc_quicc_attach(device_t dev) 74178600Smarcel{ 75178600Smarcel 76178600Smarcel return (scc_bfe_attach(dev, 0)); 77178600Smarcel} 78178600Smarcel 79176772Srajstatic device_method_t scc_quicc_methods[] = { 80176772Sraj /* Device interface */ 81176772Sraj DEVMETHOD(device_probe, scc_quicc_probe), 82178600Smarcel DEVMETHOD(device_attach, scc_quicc_attach), 83176772Sraj DEVMETHOD(device_detach, scc_bfe_detach), 84176772Sraj 85176772Sraj DEVMETHOD(bus_alloc_resource, scc_bus_alloc_resource), 86176772Sraj DEVMETHOD(bus_release_resource, scc_bus_release_resource), 87176772Sraj DEVMETHOD(bus_get_resource, scc_bus_get_resource), 88176772Sraj DEVMETHOD(bus_read_ivar, scc_bus_read_ivar), 89176772Sraj DEVMETHOD(bus_setup_intr, scc_bus_setup_intr), 90176772Sraj DEVMETHOD(bus_teardown_intr, scc_bus_teardown_intr), 91227843Smarius 92227843Smarius DEVMETHOD_END 93176772Sraj}; 94176772Sraj 95176772Srajstatic driver_t scc_quicc_driver = { 96176772Sraj scc_driver_name, 97176772Sraj scc_quicc_methods, 98176772Sraj sizeof(struct scc_softc), 99176772Sraj}; 100176772Sraj 101176772SrajDRIVER_MODULE(scc, quicc, scc_quicc_driver, scc_devclass, 0, 0); 102