Ejemplo n.º 1
0
static void
intsmb_alrintr(struct intsmb_softc *sc)
{
    int slvcnt;
#ifdef ENABLE_ALART
    int error;
    uint8_t addr;
#endif

    /* Stop generating INTR from ALART. */
    slvcnt = bus_read_1(sc->io_res, PIIX4_SMBSLVCNT);
#ifdef ENABLE_ALART
    bus_write_1(sc->io_res, PIIX4_SMBSLVCNT,
                slvcnt & ~PIIX4_SMBSLVCNT_ALTEN);
#endif
    DELAY(5);

    /* Ask bus who asserted it and then ask it what's the matter. */
#ifdef ENABLE_ALART
    error = intsmb_free(sc);
    if (error)
        return;

    bus_write_1(sc->io_res, PIIX4_SMBHSTADD, SMBALTRESP | LSB);
    intsmb_start(sc, PIIX4_SMBHSTCNT_PROT_BYTE, 1);
    error = intsmb_stop_poll(sc);
    if (error)
        device_printf(sc->dev, "ALART: ERROR\n");
    else {
        addr = bus_read_1(sc->io_res, PIIX4_SMBHSTDAT0);
        device_printf(sc->dev, "ALART_RESPONSE: 0x%x\n", addr);
    }

    /* Re-enable INTR from ALART. */
    bus_write_1(sc->io_res, PIIX4_SMBSLVCNT,
                slvcnt | PIIX4_SMBSLVCNT_ALTEN);
    DELAY(5);
#endif
}
Ejemplo n.º 2
0
static int
intsmb_readw(device_t dev, u_char slave, char cmd, short *word)
{
	struct intsmb_softc *sc = device_get_softc(dev);
	int error;

	INTSMB_LOCK(sc);
	error = intsmb_free(sc);
	if (error) {
		INTSMB_UNLOCK(sc);
		return (error);
	}
	bus_write_1(sc->io_res, PIIX4_SMBHSTADD, slave | LSB);
	bus_write_1(sc->io_res, PIIX4_SMBHSTCMD, cmd);
	intsmb_start(sc, PIIX4_SMBHSTCNT_PROT_WDATA, 0);
	error = intsmb_stop(sc);
	if (error == 0) {
		*word = bus_read_1(sc->io_res, PIIX4_SMBHSTDAT0);
		*word |= bus_read_1(sc->io_res, PIIX4_SMBHSTDAT1) << 8;
	}
	INTSMB_UNLOCK(sc);
	return (error);
}