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
8#include <sys/bus.h>
9#include <sys/rman.h>
10#include <sys/systm.h>
11
12#include <machine/bus.h>
13
14#include <net/if.h>
15#include <net/if_media.h>
16
17#include <dev/msk/if_mskreg.h>
18
19
20HAIKU_FBSD_DRIVER_GLUE(marvell_yukon, mskc, pci)
21HAIKU_DRIVER_REQUIREMENTS(0);
22
23extern driver_t *DRIVER_MODULE_NAME(e1000phy, miibus);
24extern driver_t *DRIVER_MODULE_NAME(ukphy, miibus);
25
26
27driver_t *
28__haiku_select_miibus_driver(device_t dev)
29{
30	driver_t *drivers[] = {
31		DRIVER_MODULE_NAME(e1000phy, miibus),
32		DRIVER_MODULE_NAME(ukphy, miibus),
33		NULL
34	};
35
36	return __haiku_probe_miibus(dev, drivers);
37}
38
39
40int
41HAIKU_CHECK_DISABLE_INTERRUPTS(device_t dev)
42{
43	struct msk_softc *sc = device_get_softc(dev);
44	uint32_t status;
45
46	/* Reading B0_Y2_SP_ISRC2 masks further interrupts. */
47	status = CSR_READ_4(sc, B0_Y2_SP_ISRC2);
48	if (status == 0 || status == 0xffffffff ||
49	    (sc->msk_pflags & MSK_FLAG_SUSPEND) != 0 ||
50	    (status & sc->msk_intrmask) == 0) {
51
52		/* Clear possibly spurious TWSI IRQ, see FreeBSD r234666. */
53		if ((status & Y2_IS_TWSI_RDY) != 0)
54			CSR_WRITE_4(sc, B2_I2C_IRQ, 1);
55
56		CSR_WRITE_4(sc, B0_Y2_SP_ICR, 2);
57		return 0;
58	}
59
60	sc->haiku_interrupt_status = status;
61	return 1;
62}
63
64
65void
66HAIKU_REENABLE_INTERRUPTS(device_t dev)
67{
68	struct msk_softc *sc = device_get_softc(dev);
69	CSR_WRITE_4(sc, B0_Y2_SP_ICR, 2);
70}
71