if_malo.c (246e7a2b6494cd991b08ac669ed761ecea0cc98c) | if_malo.c (c8dfaf382fa6df9dc6fd1e1c3356e0c8bf607e6a) |
---|---|
1/*- 2 * Copyright (c) 2008 Weongyo Jeong <weongyo@freebsd.org> 3 * Copyright (c) 2007 Marvell Semiconductor, Inc. 4 * Copyright (c) 2007 Sam Leffler, Errno Consulting 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 1231 unchanged lines hidden (view full) --- 1240 1241 MALO_TXQ_LOCK(txq); 1242 if (!IS_DATA_FRAME(wh)) 1243 ds->status |= htole32(1); 1244 ds->status |= htole32(MALO_TXD_STATUS_FW_OWNED); 1245 STAILQ_INSERT_TAIL(&txq->active, bf, bf_list); 1246 MALO_TXDESC_SYNC(txq, ds, BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 1247 | 1/*- 2 * Copyright (c) 2008 Weongyo Jeong <weongyo@freebsd.org> 3 * Copyright (c) 2007 Marvell Semiconductor, Inc. 4 * Copyright (c) 2007 Sam Leffler, Errno Consulting 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 1231 unchanged lines hidden (view full) --- 1240 1241 MALO_TXQ_LOCK(txq); 1242 if (!IS_DATA_FRAME(wh)) 1243 ds->status |= htole32(1); 1244 ds->status |= htole32(MALO_TXD_STATUS_FW_OWNED); 1245 STAILQ_INSERT_TAIL(&txq->active, bf, bf_list); 1246 MALO_TXDESC_SYNC(txq, ds, BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); 1247 |
1248 ifp->if_opackets++; | 1248 if_inc_counter(ifp, IFCOUNTER_OPACKETS, 1); |
1249 sc->malo_timer = 5; 1250 MALO_TXQ_UNLOCK(txq); 1251 return 0; 1252#undef IEEE80211_DIR_DSTODS 1253} 1254 1255static void 1256malo_start(struct ifnet *ifp) --- 21 unchanged lines hidden (view full) --- 1278 ifp->if_drv_flags |= IFF_DRV_OACTIVE; 1279 sc->malo_stats.mst_tx_qstop++; 1280 break; 1281 } 1282 /* 1283 * Pass the frame to the h/w for transmission. 1284 */ 1285 if (malo_tx_start(sc, ni, bf, m)) { | 1249 sc->malo_timer = 5; 1250 MALO_TXQ_UNLOCK(txq); 1251 return 0; 1252#undef IEEE80211_DIR_DSTODS 1253} 1254 1255static void 1256malo_start(struct ifnet *ifp) --- 21 unchanged lines hidden (view full) --- 1278 ifp->if_drv_flags |= IFF_DRV_OACTIVE; 1279 sc->malo_stats.mst_tx_qstop++; 1280 break; 1281 } 1282 /* 1283 * Pass the frame to the h/w for transmission. 1284 */ 1285 if (malo_tx_start(sc, ni, bf, m)) { |
1286 ifp->if_oerrors++; | 1286 if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); |
1287 if (bf != NULL) { 1288 bf->bf_m = NULL; 1289 bf->bf_node = NULL; 1290 MALO_TXQ_LOCK(txq); 1291 STAILQ_INSERT_HEAD(&txq->free, bf, bf_list); 1292 MALO_TXQ_UNLOCK(txq); 1293 } 1294 ieee80211_free_node(ni); --- 41 unchanged lines hidden (view full) --- 1336 return; 1337 1338 ifp = sc->malo_ifp; 1339 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) && !sc->malo_invalid) { 1340 if_printf(ifp, "watchdog timeout\n"); 1341 1342 /* XXX no way to reset h/w. now */ 1343 | 1287 if (bf != NULL) { 1288 bf->bf_m = NULL; 1289 bf->bf_node = NULL; 1290 MALO_TXQ_LOCK(txq); 1291 STAILQ_INSERT_HEAD(&txq->free, bf, bf_list); 1292 MALO_TXQ_UNLOCK(txq); 1293 } 1294 ieee80211_free_node(ni); --- 41 unchanged lines hidden (view full) --- 1336 return; 1337 1338 ifp = sc->malo_ifp; 1339 if ((ifp->if_drv_flags & IFF_DRV_RUNNING) && !sc->malo_invalid) { 1340 if_printf(ifp, "watchdog timeout\n"); 1341 1342 /* XXX no way to reset h/w. now */ 1343 |
1344 ifp->if_oerrors++; | 1344 if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); |
1345 sc->malo_stats.mst_watchdog++; 1346 } 1347} 1348 1349static int 1350malo_hal_reset(struct malo_softc *sc) 1351{ 1352 static int first = 0; --- 512 unchanged lines hidden (view full) --- 1865 m_freem(m); 1866 return ENOBUFS; 1867 } 1868 1869 /* 1870 * Pass the frame to the h/w for transmission. 1871 */ 1872 if (malo_tx_start(sc, ni, bf, m) != 0) { | 1345 sc->malo_stats.mst_watchdog++; 1346 } 1347} 1348 1349static int 1350malo_hal_reset(struct malo_softc *sc) 1351{ 1352 static int first = 0; --- 512 unchanged lines hidden (view full) --- 1865 m_freem(m); 1866 return ENOBUFS; 1867 } 1868 1869 /* 1870 * Pass the frame to the h/w for transmission. 1871 */ 1872 if (malo_tx_start(sc, ni, bf, m) != 0) { |
1873 ifp->if_oerrors++; | 1873 if_inc_counter(ifp, IFCOUNTER_OERRORS, 1); |
1874 bf->bf_m = NULL; 1875 bf->bf_node = NULL; 1876 MALO_TXQ_LOCK(txq); 1877 STAILQ_INSERT_HEAD(&txq->free, bf, bf_list); 1878 txq->nfree++; 1879 MALO_TXQ_UNLOCK(txq); 1880 1881 ieee80211_free_node(ni); --- 191 unchanged lines hidden (view full) --- 2073 readptr = le32toh(ds->physnext); 2074 2075#ifdef MALO_DEBUG 2076 if (sc->malo_debug & MALO_DEBUG_RECV_DESC) 2077 malo_printrxbuf(bf, 0); 2078#endif 2079 status = ds->status; 2080 if (status & MALO_RXD_STATUS_DECRYPT_ERR_MASK) { | 1874 bf->bf_m = NULL; 1875 bf->bf_node = NULL; 1876 MALO_TXQ_LOCK(txq); 1877 STAILQ_INSERT_HEAD(&txq->free, bf, bf_list); 1878 txq->nfree++; 1879 MALO_TXQ_UNLOCK(txq); 1880 1881 ieee80211_free_node(ni); --- 191 unchanged lines hidden (view full) --- 2073 readptr = le32toh(ds->physnext); 2074 2075#ifdef MALO_DEBUG 2076 if (sc->malo_debug & MALO_DEBUG_RECV_DESC) 2077 malo_printrxbuf(bf, 0); 2078#endif 2079 status = ds->status; 2080 if (status & MALO_RXD_STATUS_DECRYPT_ERR_MASK) { |
2081 ifp->if_ierrors++; | 2081 if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); |
2082 goto rx_next; 2083 } 2084 /* 2085 * Sync the data buffer. 2086 */ 2087 len = le16toh(ds->pktlen); 2088 bus_dmamap_sync(sc->malo_dmat, bf->bf_dmamap, 2089 BUS_DMASYNC_POSTREAD); --- 22 unchanged lines hidden (view full) --- 2112 * the front. Hence there's no need to vet the packet length. 2113 * If the frame in fact is too small it should be discarded 2114 * at the net80211 layer. 2115 */ 2116 2117 /* XXX don't need mbuf, just dma buffer */ 2118 mnew = malo_getrxmbuf(sc, bf); 2119 if (mnew == NULL) { | 2082 goto rx_next; 2083 } 2084 /* 2085 * Sync the data buffer. 2086 */ 2087 len = le16toh(ds->pktlen); 2088 bus_dmamap_sync(sc->malo_dmat, bf->bf_dmamap, 2089 BUS_DMASYNC_POSTREAD); --- 22 unchanged lines hidden (view full) --- 2112 * the front. Hence there's no need to vet the packet length. 2113 * If the frame in fact is too small it should be discarded 2114 * at the net80211 layer. 2115 */ 2116 2117 /* XXX don't need mbuf, just dma buffer */ 2118 mnew = malo_getrxmbuf(sc, bf); 2119 if (mnew == NULL) { |
2120 ifp->if_ierrors++; | 2120 if_inc_counter(ifp, IFCOUNTER_IERRORS, 1); |
2121 goto rx_next; 2122 } 2123 /* 2124 * Attach the dma buffer to the mbuf; malo_rxbuf_init will 2125 * re-setup the rx descriptor using the replacement dma 2126 * buffer we just installed above. 2127 */ 2128 bf->bf_m = mnew; --- 24 unchanged lines hidden (view full) --- 2153 sc->malo_rx_th.wr_antnoise = ds->nf; 2154 } 2155#ifdef MALO_DEBUG 2156 if (IFF_DUMPPKTS_RECV(sc, wh)) { 2157 ieee80211_dump_pkt(ic, mtod(m, caddr_t), 2158 len, ds->rate, rssi); 2159 } 2160#endif | 2121 goto rx_next; 2122 } 2123 /* 2124 * Attach the dma buffer to the mbuf; malo_rxbuf_init will 2125 * re-setup the rx descriptor using the replacement dma 2126 * buffer we just installed above. 2127 */ 2128 bf->bf_m = mnew; --- 24 unchanged lines hidden (view full) --- 2153 sc->malo_rx_th.wr_antnoise = ds->nf; 2154 } 2155#ifdef MALO_DEBUG 2156 if (IFF_DUMPPKTS_RECV(sc, wh)) { 2157 ieee80211_dump_pkt(ic, mtod(m, caddr_t), 2158 len, ds->rate, rssi); 2159 } 2160#endif |
2161 ifp->if_ipackets++; | 2161 if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1); |
2162 2163 /* dispatch */ 2164 ni = ieee80211_find_rxnode(ic, 2165 (struct ieee80211_frame_min *)wh); 2166 if (ni != NULL) { 2167 (void) ieee80211_input(ni, m, rssi, ds->nf); 2168 ieee80211_free_node(ni); 2169 } else --- 108 unchanged lines hidden --- | 2162 2163 /* dispatch */ 2164 ni = ieee80211_find_rxnode(ic, 2165 (struct ieee80211_frame_min *)wh); 2166 if (ni != NULL) { 2167 (void) ieee80211_input(ni, m, rssi, ds->nf); 2168 ieee80211_free_node(ni); 2169 } else --- 108 unchanged lines hidden --- |