[Bug 204521] [new driver] [request] Port rtsx from OpenBSD to FreeBSD
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Thu Jun 11 09:16:45 UTC 2020
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=204521
--- Comment #195 from Gary Jennejohn <gljennjohn at gmail.com> ---
This is the code I have in my test version of the driver for suspend/resume.
Never tested, but it might save some time. NOTE that this is copy/paste so the
formatting will probably need to be fixed!
/*
* Device suspend routine.
* do what rtsx_activate in OpenBSD does
*/
static int
rtsx_suspend(device_t dev)
{
struct rtsx_softc *sc = device_get_softc(dev);
int i;
uint16_t reg;
RTSX_LOCK(sc);
i = 0;
for (reg = 0xFDA0; reg < 0xFDAE; reg++)
(void)rtsx_read(sc, reg, &sc->regs[i++]);
for (reg = 0xFD52; reg < 0xFD69; reg++)
(void)rtsx_read(sc, reg, &sc->regs[i++]);
for (reg = 0xFE20; reg < 0xFE34; reg++)
(void)rtsx_read(sc, reg, &sc->regs[i++]);
sc->regs4[0] = READ4(sc, RTSX_HCBAR);
sc->regs4[1] = READ4(sc, RTSX_HCBCTLR);
sc->regs4[2] = READ4(sc, RTSX_HDBAR);
sc->regs4[3] = READ4(sc, RTSX_HDBCTLR);
sc->regs4[4] = READ4(sc, RTSX_HAIMR);
sc->regs4[5] = READ4(sc, RTSX_BIER);
/* Not saving RTSX_BIPR. */
RTSX_UNLOCK(sc);
return (0);
}
/*
* Device resume routine.
* do what rtsx_activate in OpenBSD does
*/
static int
rtsx_resume(device_t dev)
{
struct rtsx_softc *sc = device_get_softc(dev);
int i;
uint16_t reg;
RTSX_LOCK(sc);
WRITE4(sc, RTSX_HCBAR, sc->regs4[0]);
WRITE4(sc, RTSX_HCBCTLR, sc->regs4[1]);
WRITE4(sc, RTSX_HDBAR, sc->regs4[2]);
WRITE4(sc, RTSX_HDBCTLR, sc->regs4[3]);
WRITE4(sc, RTSX_HAIMR, sc->regs4[4]);
WRITE4(sc, RTSX_BIER, sc->regs4[5]);
/* Not writing RTSX_BIPR since doing so would clear it. */
i = 0;
for (reg = 0xFDA0; reg < 0xFDAE; reg++)
(void)rtsx_write(sc, reg, 0xff, sc->regs[i++]);
for (reg = 0xFD52; reg < 0xFD69; reg++)
(void)rtsx_write(sc, reg, 0xff, sc->regs[i++]);
for (reg = 0xFE20; reg < 0xFE34; reg++)
(void)rtsx_write(sc, reg, 0xff, sc->regs[i++]);
RTSX_UNLOCK(sc);
return (0);
}
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-bugs
mailing list