Lines Matching refs:sc

104 #define	IFF_DUMPPKTS_RECV(sc, wh)					\
105 (((sc->malo_debug & MALO_DEBUG_RECV) && \
106 ((sc->malo_debug & MALO_DEBUG_RECV_ALL) || !IS_BEACON(wh))))
107 #define IFF_DUMPPKTS_XMIT(sc) \
108 (sc->malo_debug & MALO_DEBUG_XMIT)
109 #define DPRINTF(sc, m, fmt, ...) do { \
110 if (sc->malo_debug & (m)) \
114 #define DPRINTF(sc, m, fmt, ...) do { \
115 (void) sc; \
157 malo_bar0_read4(struct malo_softc *sc, bus_size_t off)
159 return bus_space_read_4(sc->malo_io0t, sc->malo_io0h, off);
163 malo_bar0_write4(struct malo_softc *sc, bus_size_t off, uint32_t val)
165 DPRINTF(sc, MALO_DEBUG_FW, "%s: off 0x%jx val 0x%x\n",
168 bus_space_write_4(sc->malo_io0t, sc->malo_io0h, off, val);
172 malo_attach(uint16_t devid, struct malo_softc *sc)
174 struct ieee80211com *ic = &sc->malo_ic;
179 MALO_LOCK_INIT(sc);
180 callout_init_mtx(&sc->malo_watchdog_timer, &sc->malo_mtx, 0);
181 mbufq_init(&sc->malo_snd, ifqmaxlen);
183 mh = malo_hal_attach(sc->malo_dev, devid,
184 sc->malo_io1h, sc->malo_io1t, sc->malo_dmat);
186 device_printf(sc->malo_dev, "unable to attach HAL\n");
190 sc->malo_mh = mh;
199 device_printf(sc->malo_dev, "unable to setup firmware\n");
203 error = malo_hal_gethwspecs(mh, &sc->malo_hwspecs);
205 device_printf(sc->malo_dev, "unable to fetch h/w specs\n");
209 DPRINTF(sc, MALO_DEBUG_FW,
215 sc->malo_hwspecs.hwversion,
216 sc->malo_hwspecs.hostinterface, sc->malo_hwspecs.maxnum_wcb,
217 sc->malo_hwspecs.maxnum_mcaddr, sc->malo_hwspecs.maxnum_tx_wcb,
218 sc->malo_hwspecs.regioncode, sc->malo_hwspecs.num_antenna,
219 sc->malo_hwspecs.fw_releasenum, sc->malo_hwspecs.wcbbase0,
220 sc->malo_hwspecs.rxdesc_read, sc->malo_hwspecs.rxdesc_write,
221 sc->malo_hwspecs.ul_fw_awakecookie,
222 sc->malo_hwspecs.wcbbase[0], sc->malo_hwspecs.wcbbase[1],
223 sc->malo_hwspecs.wcbbase[2], sc->malo_hwspecs.wcbbase[3]);
231 sc->malo_txantenna = 0x2; /* h/w default */
232 sc->malo_rxantenna = 0xffff; /* h/w default */
239 error = malo_dma_setup(sc);
241 device_printf(sc->malo_dev,
245 error = malo_setup_hwdma(sc); /* push to firmware */
249 sc->malo_tq = taskqueue_create_fast("malo_taskq", M_NOWAIT,
250 taskqueue_thread_enqueue, &sc->malo_tq);
251 taskqueue_start_threads(&sc->malo_tq, 1, PI_NET,
252 "%s taskq", device_get_nameunit(sc->malo_dev));
254 TASK_INIT(&sc->malo_rxtask, 0, malo_rx_proc, sc);
255 TASK_INIT(&sc->malo_txtask, 0, malo_tx_proc, sc);
257 ic->ic_softc = sc;
258 ic->ic_name = device_get_nameunit(sc->malo_dev);
271 IEEE80211_ADDR_COPY(ic->ic_macaddr, sc->malo_hwspecs.macaddr);
295 sc->malo_invalid = 0; /* ready to go, enable int handling */
298 &sc->malo_tx_th.wt_ihdr, sizeof(sc->malo_tx_th),
300 &sc->malo_rx_th.wr_ihdr, sizeof(sc->malo_rx_th),
306 malo_sysctlattach(sc);
310 malo_announce(sc);
314 malo_dma_cleanup(sc);
318 sc->malo_invalid = 1;
329 struct malo_softc *sc = ic->ic_softc;
334 device_printf(sc->malo_dev, "multiple vaps not supported\n");
345 device_printf(sc->malo_dev, "%s mode not supported\n",
376 struct malo_softc *sc = arg;
377 struct malo_hal *mh = sc->malo_mh;
380 if (sc->malo_invalid) {
385 DPRINTF(sc, MALO_DEBUG_ANY, "%s: invalid; ignored\n", __func__);
396 DPRINTF(sc, MALO_DEBUG_INTR, "%s: status 0x%x imask 0x%x\n",
397 __func__, status, sc->malo_imask);
400 taskqueue_enqueue(sc->malo_tq, &sc->malo_rxtask);
402 taskqueue_enqueue(sc->malo_tq, &sc->malo_txtask);
411 sc->malo_stats.mst_rx_badtkipicv++;
414 if (((status | sc->malo_imask) ^ sc->malo_imask) != 0)
415 DPRINTF(sc, MALO_DEBUG_INTR,
433 malo_desc_setup(struct malo_softc *sc, const char *name,
440 DPRINTF(sc, MALO_DEBUG_RESET,
451 error = bus_dma_tag_create(bus_get_dma_tag(sc->malo_dev),/* parent */
464 device_printf(sc->malo_dev, "cannot allocate %s DMA tag\n",
473 device_printf(sc->malo_dev,
483 device_printf(sc->malo_dev,
491 DPRINTF(sc, MALO_DEBUG_RESET,
509 malo_rxdma_setup(struct malo_softc *sc)
515 error = malo_desc_setup(sc, "rx", &sc->malo_rxdma,
527 device_printf(sc->malo_dev,
531 sc->malo_rxdma.dd_bufptr = bf;
533 STAILQ_INIT(&sc->malo_rxbuf);
534 ds = sc->malo_rxdma.dd_desc;
537 bf->bf_daddr = DS2PHYS(&sc->malo_rxdma, ds);
538 error = bus_dmamap_create(sc->malo_dmat, BUS_DMA_NOWAIT,
541 device_printf(sc->malo_dev,
547 STAILQ_INSERT_TAIL(&sc->malo_rxbuf, bf, bf_list);
553 malo_txdma_setup(struct malo_softc *sc, struct malo_txq *txq)
559 error = malo_desc_setup(sc, "tx", &txq->dma,
569 device_printf(sc->malo_dev, "malloc of %u tx buffers failed\n",
581 error = bus_dmamap_create(sc->malo_dmat, BUS_DMA_NOWAIT,
584 device_printf(sc->malo_dev,
597 malo_desc_cleanup(struct malo_softc *sc, struct malo_descdma *dd)
607 malo_rxdma_cleanup(struct malo_softc *sc)
611 STAILQ_FOREACH(bf, &sc->malo_rxbuf, bf_list) {
617 bus_dmamap_destroy(sc->malo_dmat, bf->bf_dmamap);
621 STAILQ_INIT(&sc->malo_rxbuf);
622 if (sc->malo_rxdma.dd_bufptr != NULL) {
623 free(sc->malo_rxdma.dd_bufptr, M_MALODEV);
624 sc->malo_rxdma.dd_bufptr = NULL;
626 if (sc->malo_rxdma.dd_desc_len != 0)
627 malo_desc_cleanup(sc, &sc->malo_rxdma);
631 malo_txdma_cleanup(struct malo_softc *sc, struct malo_txq *txq)
650 bus_dmamap_destroy(sc->malo_dmat, bf->bf_dmamap);
661 malo_desc_cleanup(sc, &txq->dma);
665 malo_dma_cleanup(struct malo_softc *sc)
670 malo_txdma_cleanup(sc, &sc->malo_txq[i]);
672 malo_rxdma_cleanup(sc);
676 malo_dma_setup(struct malo_softc *sc)
681 error = malo_rxdma_setup(sc);
687 error = malo_txdma_setup(sc, &sc->malo_txq[i]);
689 malo_dma_cleanup(sc);
694 malo_txq_init(sc, &sc->malo_txq[i], i);
701 malo_hal_set_rxtxdma(struct malo_softc *sc)
705 malo_bar0_write4(sc, sc->malo_hwspecs.rxdesc_read,
706 sc->malo_hwdma.rxdesc_read);
707 malo_bar0_write4(sc, sc->malo_hwspecs.rxdesc_write,
708 sc->malo_hwdma.rxdesc_read);
711 malo_bar0_write4(sc,
712 sc->malo_hwspecs.wcbbase[i], sc->malo_hwdma.wcbbase[i]);
722 malo_setup_hwdma(struct malo_softc *sc)
727 sc->malo_hwdma.rxdesc_read = sc->malo_rxdma.dd_desc_paddr;
730 txq = &sc->malo_txq[i];
731 sc->malo_hwdma.wcbbase[i] = txq->dma.dd_desc_paddr;
733 sc->malo_hwdma.maxnum_txwcb = malo_txbuf;
734 sc->malo_hwdma.maxnum_wcb = MALO_NUM_TX_QUEUES;
736 malo_hal_set_rxtxdma(sc);
742 malo_txq_init(struct malo_softc *sc, struct malo_txq *txq, int qnum)
747 MALO_TXQ_LOCK_INIT(sc, txq);
767 malo_tx_cleanupq(struct malo_softc *sc, struct malo_txq *txq)
777 malo_getbuf(struct malo_softc *sc, struct malo_txq *txq)
789 DPRINTF(sc, MALO_DEBUG_XMIT,
791 sc->malo_stats.mst_tx_qstop++;
797 malo_tx_dmasetup(struct malo_softc *sc, struct malo_txbuf *bf, struct mbuf *m0)
806 error = bus_dmamap_load_mbuf_sg(sc->malo_dmat, bf->bf_dmamap, m0,
813 sc->malo_stats.mst_tx_busdma++;
822 sc->malo_stats.mst_tx_linear++;
826 sc->malo_stats.mst_tx_nombuf++;
830 error = bus_dmamap_load_mbuf_sg(sc->malo_dmat, bf->bf_dmamap, m0,
834 sc->malo_stats.mst_tx_busdma++;
841 sc->malo_stats.mst_tx_nodata++;
845 DPRINTF(sc, MALO_DEBUG_XMIT, "%s: m %p len %u\n",
847 bus_dmamap_sync(sc->malo_dmat, bf->bf_dmamap, BUS_DMASYNC_PREWRITE);
927 malo_tx_processq(struct malo_softc *sc, struct malo_txq *txq)
935 DPRINTF(sc, MALO_DEBUG_TX_PROC, "%s: tx queue %u\n",
955 if (sc->malo_debug & MALO_DEBUG_XMIT_DESC)
965 sc->malo_stats.mst_ant_tx[txant]++;
967 sc->malo_stats.mst_tx_retries++;
969 sc->malo_stats.mst_tx_mretries++;
971 sc->malo_stats.mst_tx_rate = ds->datarate;
974 sc->malo_stats.mst_tx_linkerror++;
976 sc->malo_stats.mst_tx_xretries++;
978 sc->malo_stats.mst_tx_aging++;
990 bus_dmamap_sync(sc->malo_dmat, bf->bf_dmamap,
992 bus_dmamap_unload(sc->malo_dmat, bf->bf_dmamap);
1010 struct malo_softc *sc = arg;
1017 MALO_LOCK(sc);
1019 if (!STAILQ_EMPTY(&sc->malo_txq[i].active))
1020 nreaped += malo_tx_processq(sc, &sc->malo_txq[i]);
1024 sc->malo_timer = 0;
1025 malo_start(sc);
1027 MALO_UNLOCK(sc);
1031 malo_tx_start(struct malo_softc *sc, struct ieee80211_node *ni,
1039 struct ieee80211com *ic = &sc->malo_ic;
1095 sc->malo_tx_th.wt_flags = 0; /* XXX */
1097 sc->malo_tx_th.wt_flags |= IEEE80211_RADIOTAP_F_WEP;
1098 sc->malo_tx_th.wt_txpower = ni->ni_txpower;
1099 sc->malo_tx_th.wt_antenna = sc->malo_txantenna;
1117 device_printf(sc->malo_dev,
1144 error = malo_tx_dmasetup(sc, bf, m0);
1171 sc->malo_stats.mst_tx_mgmt++;
1180 device_printf(sc->malo_dev, "bogus frame type 0x%x (%s)\n",
1188 if (IFF_DUMPPKTS_XMIT(sc))
1201 sc->malo_timer = 5;
1209 struct malo_softc *sc = ic->ic_softc;
1212 MALO_LOCK(sc);
1213 if (!sc->malo_running) {
1214 MALO_UNLOCK(sc);
1217 error = mbufq_enqueue(&sc->malo_snd, m);
1219 MALO_UNLOCK(sc);
1222 malo_start(sc);
1223 MALO_UNLOCK(sc);
1228 malo_start(struct malo_softc *sc)
1231 struct malo_txq *txq = &sc->malo_txq[0];
1236 MALO_LOCK_ASSERT(sc);
1238 if (!sc->malo_running || sc->malo_invalid)
1241 while ((m = mbufq_dequeue(&sc->malo_snd)) != NULL) {
1243 bf = malo_getbuf(sc, txq);
1245 mbufq_prepend(&sc->malo_snd, m);
1246 sc->malo_stats.mst_tx_qstop++;
1252 if (malo_tx_start(sc, ni, bf, m)) {
1273 malo_hal_txstart(sc->malo_mh, 0/*XXX*/);
1291 malo_hal_txstart(sc->malo_mh, 0/*XXX*/);
1298 struct malo_softc *sc = arg;
1300 callout_reset(&sc->malo_watchdog_timer, hz, malo_watchdog, sc);
1301 if (sc->malo_timer == 0 || --sc->malo_timer > 0)
1304 if (sc->malo_running && !sc->malo_invalid) {
1305 device_printf(sc->malo_dev, "watchdog timeout\n");
1309 counter_u64_add(sc->malo_ic.ic_oerrors, 1);
1310 sc->malo_stats.mst_watchdog++;
1315 malo_hal_reset(struct malo_softc *sc)
1318 struct ieee80211com *ic = &sc->malo_ic;
1319 struct malo_hal *mh = sc->malo_mh;
1327 malo_hal_set_rxtxdma(sc);
1331 malo_hal_setantenna(mh, MHA_ANTENNATYPE_RX, sc->malo_rxantenna);
1332 malo_hal_setantenna(mh, MHA_ANTENNATYPE_TX, sc->malo_txantenna);
1334 malo_chan_set(sc, ic->ic_curchan);
1342 malo_getrxmbuf(struct malo_softc *sc, struct malo_rxbuf *bf)
1351 sc->malo_stats.mst_rx_nombuf++; /* XXX */
1354 error = bus_dmamap_load(sc->malo_dmat, bf->bf_dmamap,
1358 device_printf(sc->malo_dev,
1364 bus_dmamap_sync(sc->malo_dmat, bf->bf_dmamap, BUS_DMASYNC_PREWRITE);
1370 malo_rxbuf_init(struct malo_softc *sc, struct malo_rxbuf *bf)
1376 bf->bf_m = malo_getrxmbuf(sc, bf);
1381 MALO_RXDESC_SYNC(sc, ds, BUS_DMASYNC_PREWRITE);
1398 MALO_RXDESC_SYNC(sc, ds, BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
1408 malo_startrecv(struct malo_softc *sc)
1413 if (sc->malo_recvsetup == 1) {
1414 malo_mode_init(sc); /* set filters, etc. */
1419 STAILQ_FOREACH(bf, &sc->malo_rxbuf, bf_list) {
1420 int error = malo_rxbuf_init(sc, bf);
1422 DPRINTF(sc, MALO_DEBUG_RECV,
1436 htole32(STAILQ_FIRST(&sc->malo_rxbuf)->bf_daddr);
1439 sc->malo_recvsetup = 1;
1441 malo_mode_init(sc); /* set filters, etc. */
1447 malo_init_locked(struct malo_softc *sc)
1449 struct malo_hal *mh = sc->malo_mh;
1452 MALO_LOCK_ASSERT(sc);
1458 malo_stop(sc);
1463 if (!malo_hal_reset(sc)) {
1464 device_printf(sc->malo_dev,
1472 error = malo_startrecv(sc);
1474 device_printf(sc->malo_dev,
1483 sc->malo_imask = MALO_A2HRIC_BIT_RX_RDY
1492 sc->malo_running = 1;
1493 malo_hal_intrset(mh, sc->malo_imask);
1494 callout_reset(&sc->malo_watchdog_timer, hz, malo_watchdog, sc);
1500 struct malo_softc *sc = (struct malo_softc *) arg;
1501 struct ieee80211com *ic = &sc->malo_ic;
1503 MALO_LOCK(sc);
1504 malo_init_locked(sc);
1505 MALO_UNLOCK(sc);
1507 if (sc->malo_running)
1515 malo_setmcastfilter(struct malo_softc *sc)
1517 struct ieee80211com *ic = &sc->malo_ic;
1553 malo_hal_setmcast(sc->malo_mh, nmc, macs);
1564 malo_mode_init(struct malo_softc *sc)
1566 struct ieee80211com *ic = &sc->malo_ic;
1567 struct malo_hal *mh = sc->malo_mh;
1570 malo_setmcastfilter(sc);
1576 malo_tx_draintxq(struct malo_softc *sc, struct malo_txq *txq)
1596 if (sc->malo_debug & MALO_DEBUG_RESET) {
1597 struct ieee80211com *ic = &sc->malo_ic;
1605 bus_dmamap_unload(sc->malo_dmat, bf->bf_dmamap);
1625 malo_stop(struct malo_softc *sc)
1627 struct malo_hal *mh = sc->malo_mh;
1630 DPRINTF(sc, MALO_DEBUG_ANY, "%s: invalid %u running %u\n",
1631 __func__, sc->malo_invalid, sc->malo_running);
1633 MALO_LOCK_ASSERT(sc);
1635 if (!sc->malo_running)
1647 sc->malo_running = 0;
1648 callout_stop(&sc->malo_watchdog_timer);
1649 sc->malo_timer = 0;
1657 malo_tx_draintxq(sc, &sc->malo_txq[i]);
1663 struct malo_softc *sc = ic->ic_softc;
1666 MALO_LOCK(sc);
1677 if (!sc->malo_running && !sc->malo_invalid) {
1678 malo_init(sc);
1686 malo_mode_init(sc);
1687 } else if (sc->malo_running)
1688 malo_stop(sc);
1689 MALO_UNLOCK(sc);
1703 struct malo_softc *sc = ic->ic_softc;
1704 struct malo_hal *mh = sc->malo_mh;
1708 if (!sc->malo_running)
1711 DPRINTF(sc, MALO_DEBUG_RESET,
1722 device_printf(sc->malo_dev, "setting %s slot failed\n",
1730 struct malo_softc *sc = ic->ic_softc;
1731 struct malo_hal *mh = sc->malo_mh;
1734 DPRINTF(sc, MALO_DEBUG_STATE, "%s: %s -> %s\n", __func__,
1750 DPRINTF(sc, MALO_DEBUG_STATE,
1761 malo_hal_setassocid(sc->malo_mh, ni->ni_bssid, ni->ni_associd);
1774 struct malo_softc *sc = ic->ic_softc;
1778 if (!sc->malo_running || sc->malo_invalid) {
1789 txq = &sc->malo_txq[0];
1790 bf = malo_getbuf(sc, txq);
1799 if (malo_tx_start(sc, ni, bf, m) != 0) {
1821 malo_hal_txstart(sc->malo_mh, 0/*XXX*/);
1827 malo_sysctlattach(struct malo_softc *sc)
1830 struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(sc->malo_dev);
1831 struct sysctl_oid *tree = device_get_sysctl_tree(sc->malo_dev);
1833 sc->malo_debug = malo_debug;
1835 "debug", CTLFLAG_RW, &sc->malo_debug, 0,
1841 malo_announce(struct malo_softc *sc)
1844 device_printf(sc->malo_dev,
1846 sc->malo_hwspecs.hwversion,
1847 (sc->malo_hwspecs.fw_releasenum >> 24) & 0xff,
1848 (sc->malo_hwspecs.fw_releasenum >> 16) & 0xff,
1849 (sc->malo_hwspecs.fw_releasenum >> 8) & 0xff,
1850 (sc->malo_hwspecs.fw_releasenum >> 0) & 0xff,
1851 sc->malo_hwspecs.regioncode);
1854 device_printf(sc->malo_dev,
1857 device_printf(sc->malo_dev,
1881 malo_chan_set(struct malo_softc *sc, struct ieee80211_channel *chan)
1883 struct malo_hal *mh = sc->malo_mh;
1886 DPRINTF(sc, MALO_DEBUG_RESET, "%s: chan %u MHz/flags 0x%x\n",
1901 sc->malo_tx_th.wt_chan_freq = htole16(chan->ic_freq);
1902 sc->malo_rx_th.wr_chan_freq = htole16(chan->ic_freq);
1904 sc->malo_tx_th.wt_chan_flags = htole16(IEEE80211_CHAN_G);
1905 sc->malo_rx_th.wr_chan_flags = htole16(IEEE80211_CHAN_G);
1907 sc->malo_tx_th.wt_chan_flags = htole16(IEEE80211_CHAN_B);
1908 sc->malo_rx_th.wr_chan_flags = htole16(IEEE80211_CHAN_B);
1910 sc->malo_curchan = hchan;
1911 malo_hal_intrset(mh, sc->malo_imask);
1919 struct malo_softc *sc = ic->ic_softc;
1921 DPRINTF(sc, MALO_DEBUG_STATE, "%s\n", __func__);
1927 struct malo_softc *sc = ic->ic_softc;
1929 DPRINTF(sc, MALO_DEBUG_STATE, "%s\n", __func__);
1935 struct malo_softc *sc = ic->ic_softc;
1937 (void) malo_chan_set(sc, ic->ic_curchan);
1943 struct malo_softc *sc = arg;
1944 struct ieee80211com *ic = &sc->malo_ic;
1954 DPRINTF(sc, MALO_DEBUG_RX_PROC,
1957 sc->malo_hwspecs.rxdesc_read,
1958 malo_bar0_read4(sc, sc->malo_hwspecs.rxdesc_read),
1959 sc->malo_hwspecs.rxdesc_write,
1960 malo_bar0_read4(sc, sc->malo_hwspecs.rxdesc_write));
1962 readptr = malo_bar0_read4(sc, sc->malo_hwspecs.rxdesc_read);
1963 writeptr = malo_bar0_read4(sc, sc->malo_hwspecs.rxdesc_write);
1967 bf = sc->malo_rxnext;
1970 bf = STAILQ_FIRST(&sc->malo_rxbuf);
1982 DPRINTF(sc, MALO_DEBUG_ANY,
1984 (void)malo_rxbuf_init(sc, bf);
1987 MALO_RXDESC_SYNC(sc, ds,
1995 if (sc->malo_debug & MALO_DEBUG_RECV_DESC)
2007 bus_dmamap_sync(sc->malo_dmat, bf->bf_dmamap,
2037 mnew = malo_getrxmbuf(sc, bf);
2061 sc->malo_rx_th.wr_flags = 0;
2062 sc->malo_rx_th.wr_rate = ds->rate;
2063 sc->malo_rx_th.wr_antsignal = rssi;
2064 sc->malo_rx_th.wr_antnoise = ds->nf;
2067 if (IFF_DUMPPKTS_RECV(sc, wh)) {
2082 (void) malo_rxbuf_init(sc, bf);
2086 malo_bar0_write4(sc, sc->malo_hwspecs.rxdesc_read, readptr);
2087 sc->malo_rxnext = bf;
2089 if (mbufq_first(&sc->malo_snd) != NULL)
2090 malo_start(sc);
2097 malo_tx_cleanup(struct malo_softc *sc)
2102 malo_tx_cleanupq(sc, &sc->malo_txq[i]);
2106 malo_detach(struct malo_softc *sc)
2108 struct ieee80211com *ic = &sc->malo_ic;
2110 malo_stop(sc);
2112 if (sc->malo_tq != NULL) {
2113 taskqueue_drain(sc->malo_tq, &sc->malo_rxtask);
2114 taskqueue_drain(sc->malo_tq, &sc->malo_txtask);
2115 taskqueue_free(sc->malo_tq);
2116 sc->malo_tq = NULL;
2132 callout_drain(&sc->malo_watchdog_timer);
2133 malo_dma_cleanup(sc);
2134 malo_tx_cleanup(sc);
2135 malo_hal_detach(sc->malo_mh);
2136 mbufq_drain(&sc->malo_snd);
2137 MALO_LOCK_DESTROY(sc);
2143 malo_shutdown(struct malo_softc *sc)
2146 malo_stop(sc);
2150 malo_suspend(struct malo_softc *sc)
2153 malo_stop(sc);
2157 malo_resume(struct malo_softc *sc)
2160 if (sc->malo_ic.ic_nrunning > 0)
2161 malo_init(sc);