diff options
| author | John Baldwin <jhb@FreeBSD.org> | 2015-02-06 16:45:10 +0000 |
|---|---|---|
| committer | John Baldwin <jhb@FreeBSD.org> | 2015-02-06 16:45:10 +0000 |
| commit | c869aa71f056ba8078a9db78290c295a644cad84 (patch) | |
| tree | a94f64ba5185d4aec4bb28e8734dc3f2e25c7a95 /sys/dev/ipmi/ipmi_smic.c | |
| parent | 64de80195bba295c961a4cdf96dbe0e4979bdf2a (diff) | |
Notes
Diffstat (limited to 'sys/dev/ipmi/ipmi_smic.c')
| -rw-r--r-- | sys/dev/ipmi/ipmi_smic.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/sys/dev/ipmi/ipmi_smic.c b/sys/dev/ipmi/ipmi_smic.c index c79c86d574fb..4e26553e98e7 100644 --- a/sys/dev/ipmi/ipmi_smic.c +++ b/sys/dev/ipmi/ipmi_smic.c @@ -364,8 +364,11 @@ smic_loop(void *arg) while ((req = ipmi_dequeue_request(sc)) != NULL) { IPMI_UNLOCK(sc); ok = 0; - for (i = 0; i < 3 && !ok; i++) + for (i = 0; i < 3 && !ok; i++) { + IPMI_IO_LOCK(sc); ok = smic_polled_request(sc, req); + IPMI_IO_UNLOCK(sc); + } if (ok) req->ir_error = 0; else @@ -385,6 +388,24 @@ smic_startup(struct ipmi_softc *sc) "%s: smic", device_get_nameunit(sc->ipmi_dev))); } +static int +smic_driver_request(struct ipmi_softc *sc, struct ipmi_request *req, int timo) +{ + int i, ok; + + ok = 0; + for (i = 0; i < 3 && !ok; i++) { + IPMI_IO_LOCK(sc); + ok = smic_polled_request(sc, req); + IPMI_IO_UNLOCK(sc); + } + if (ok) + req->ir_error = 0; + else + req->ir_error = EIO; + return (req->ir_error); +} + int ipmi_smic_attach(struct ipmi_softc *sc) { @@ -393,6 +414,7 @@ ipmi_smic_attach(struct ipmi_softc *sc) /* Setup function pointers. */ sc->ipmi_startup = smic_startup; sc->ipmi_enqueue_request = ipmi_polled_enqueue_request; + sc->ipmi_driver_request = smic_driver_request; /* See if we can talk to the controller. */ flags = INB(sc, SMIC_FLAGS); |
