1/* 2 * Copyright 2007, Hugo Santos. All Rights Reserved. 3 * Copyright 2007, Axel Dörfler, axeld@pinc-software.de. All Rights Reserved. 4 * Distributed under the terms of the MIT License. 5 */ 6 7#include <sys/bus.h> 8#include <sys/systm.h> 9 10#include <machine/bus.h> 11 12#include <net/if.h> 13#include <net/if_media.h> 14 15#include "if_xlreg.h" 16 17 18HAIKU_FBSD_DRIVER_GLUE(3com, xl, pci); 19 20extern driver_t *DRIVER_MODULE_NAME(bmtphy, miibus); 21extern driver_t *DRIVER_MODULE_NAME(ukphy, miibus); 22extern driver_t *DRIVER_MODULE_NAME(xlphy, miibus); 23 24 25driver_t * 26__haiku_select_miibus_driver(device_t dev) 27{ 28 driver_t *drivers[] = { 29 DRIVER_MODULE_NAME(bmtphy, miibus), 30 DRIVER_MODULE_NAME(ukphy, miibus), 31 DRIVER_MODULE_NAME(xlphy, miibus), 32 NULL 33 }; 34 35 return __haiku_probe_miibus(dev, drivers); 36} 37 38 39int 40__haiku_disable_interrupts(device_t dev) 41{ 42 struct xl_softc *sc = device_get_softc(dev); 43 u_int16_t status = CSR_READ_2(sc, XL_STATUS); 44 45 if (status == 0xffff || (status & XL_INTRS) == 0) 46 return 0; 47 48 CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_STAT_ENB); 49 CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_INTR_ACK | (status & XL_INTRS)); 50 atomic_set((int32 *)&sc->xl_intr_status, status); 51 return 1; 52} 53 54 55void 56__haiku_reenable_interrupts(device_t dev) 57{ 58 struct xl_softc *sc = device_get_softc(dev); 59 CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_STAT_ENB | XL_INTRS); 60} 61 62 63HAIKU_DRIVER_REQUIREMENTS(FBSD_TASKQUEUES | FBSD_SWI_TASKQUEUE); 64