if_sn_pccard.c revision 56366
154994Simp/* 254994Simp * Copyright (c) 1999 M. Warner Losh <imp@village.org> 354994Simp * All rights reserved. 454994Simp * 554994Simp * Redistribution and use in source and binary forms, with or without 654994Simp * modification, are permitted provided that the following conditions 754994Simp * are met: 854994Simp * 1. Redistributions of source code must retain the above copyright 954994Simp * notice, this list of conditions and the following disclaimer. 1054994Simp * 2. Redistributions in binary form must reproduce the above copyright 1154994Simp * notice, this list of conditions and the following disclaimer in the 1254994Simp * documentation and/or other materials provided with the distribution. 1354994Simp * 1454994Simp * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1554994Simp * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1654994Simp * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1754994Simp * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 1854994Simp * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 1954994Simp * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2054994Simp * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2154994Simp * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2254994Simp * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2354994Simp * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2454994Simp * 2554994Simp * $FreeBSD: head/sys/dev/sn/if_sn_pccard.c 56366 2000-01-21 09:05:49Z hosokawa $ 2654994Simp */ 2754994Simp 2854994Simp/* 2954994Simp * Modifications for Megahertz X-Jack Ethernet Card (XJ-10BT) 3054994Simp * 3154994Simp * Copyright (c) 1996 by Tatsumi Hosokawa <hosokawa@jp.FreeBSD.org> 3254994Simp * BSD-nomads, Tokyo, Japan. 3354994Simp */ 3454994Simp 3554994Simp#include <sys/param.h> 3654994Simp#include <sys/systm.h> 3754994Simp#include <sys/kernel.h> 3854994Simp#include <sys/socket.h> 3954994Simp 4054994Simp#include <sys/module.h> 4154994Simp#include <sys/bus.h> 4254994Simp 4354994Simp#include <machine/bus.h> 4454994Simp#include <machine/resource.h> 4554994Simp#include <sys/rman.h> 4654994Simp 4756366Shosokawa#include <net/ethernet.h> 4854994Simp#include <net/if.h> 4954994Simp#include <net/if_arp.h> 5054994Simp#include <net/if_media.h> 5154994Simp 5254994Simp#include <machine/clock.h> 5354994Simp 5454994Simp#include <dev/sn/if_snreg.h> 5554994Simp#include <dev/sn/if_snvar.h> 5656366Shosokawa#include <dev/pccard/pccardvar.h> 5754994Simp 5854994Simp/* 5954994Simp * Initialize the device - called from Slot manager. 6054994Simp */ 6154994Simpstatic int 6254994Simpsn_pccard_probe(device_t dev) 6354994Simp{ 6454994Simp return (sn_probe(dev, 1)); 6554994Simp} 6654994Simp 6754994Simpstatic int 6854994Simpsn_pccard_attach(device_t dev) 6954994Simp{ 7056366Shosokawa struct sn_softc *sc = device_get_softc(dev); 7156366Shosokawa int i; 7256366Shosokawa u_char sum; 7356366Shosokawa u_char ether_addr[ETHER_ADDR_LEN]; 7456366Shosokawa 7556366Shosokawa pccard_get_ether(dev, ether_addr); 7656366Shosokawa for (i = 0, sum = 0; i < ETHER_ADDR_LEN; i++) 7756366Shosokawa sum |= ether_addr[i]; 7856366Shosokawa if (sum) 7956366Shosokawa bcopy(ether_addr, sc->arpcom.ac_enaddr, ETHER_ADDR_LEN); 8056366Shosokawa 8154994Simp return (sn_attach(dev)); 8254994Simp} 8354994Simp 8454994Simpstatic int 8554994Simpsn_pccard_detach(device_t dev) 8654994Simp{ 8754994Simp struct sn_softc *sc = device_get_softc(dev); 8854994Simp 8954994Simp sc->arpcom.ac_if.if_flags &= ~IFF_RUNNING; 9054994Simp if_detach(&sc->arpcom.ac_if); 9154994Simp sn_deactivate(dev); 9254994Simp return 0; 9354994Simp} 9454994Simp 9554994Simpstatic device_method_t sn_pccard_methods[] = { 9654994Simp /* Device interface */ 9754994Simp DEVMETHOD(device_probe, sn_pccard_probe), 9854994Simp DEVMETHOD(device_attach, sn_pccard_attach), 9954994Simp DEVMETHOD(device_detach, sn_pccard_detach), 10054994Simp 10154994Simp { 0, 0 } 10254994Simp}; 10354994Simp 10454994Simpstatic driver_t sn_pccard_driver = { 10554994Simp "sn", 10654994Simp sn_pccard_methods, 10754994Simp sizeof(struct sn_softc), 10854994Simp}; 10954994Simp 11054994Simpextern devclass_t sn_devclass; 11154994Simp 11254994SimpDRIVER_MODULE(sn, pccard, sn_pccard_driver, sn_devclass, 0, 0); 113