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