m_free(sd->sd_mbuf);
m_freem(sd->sd_mbuf);
hme_tint(sc)	struct hme_softc *sc;{	struct ifnet *ifp = &sc->sc_arpcom.ac_if;	bus_space_tag_t t = sc->sc_bustag;	bus_space_handle_t mac = sc->sc_mac;	unsigned int ri, txflags;	struct hme_sxd *sd;	/*	 * Unload collision counters	 */	ifp->if_collisions +=	    bus_space_read_4(t, mac, HME_MACI_NCCNT) +	    bus_space_read_4(t, mac, HME_MACI_FCCNT) +	    bus_space_read_4(t, mac, HME_MACI_EXCNT) +	    bus_space_read_4(t, mac, HME_MACI_LTCNT);	/*	 * then clear the hardware counters.	 */	bus_space_write_4(t, mac, HME_MACI_NCCNT, 0);	bus_space_write_4(t, mac, HME_MACI_FCCNT, 0);	bus_space_write_4(t, mac, HME_MACI_EXCNT, 0);	bus_space_write_4(t, mac, HME_MACI_LTCNT, 0);	/* Fetch current position in the transmit ring */	ri = sc->sc_tx_cons;	sd = &sc->sc_txd[ri];	for (;;) {		if (sc->sc_tx_cnt <= 0)			break;		txflags = HME_XD_GETFLAGS(sc->sc_pci, sc->sc_rb.rb_txd, ri);		if (txflags & HME_XD_OWN)			break;		ifp->if_flags &= ~IFF_OACTIVE;		if (txflags & HME_XD_EOP)			ifp->if_opackets++;		if (sd->sd_map != NULL) {			bus_dmamap_sync(sc->sc_dmatag, sd->sd_map,			    0, sd->sd_map->dm_mapsize, BUS_DMASYNC_POSTWRITE);			bus_dmamap_unload(sc->sc_dmatag, sd->sd_map);			bus_dmamap_destroy(sc->sc_dmatag, sd->sd_map);			sd->sd_map = NULL;		}		if (sd->sd_mbuf != NULL) {			m_free(sd->sd_mbuf);			sd->sd_mbuf = NULL;		}		if (++ri == HME_TX_RING_SIZE) {			ri = 0;			sd = sc->sc_txd;		} else			sd++;		--sc->sc_tx_cnt;	}	/* Update ring */	sc->sc_tx_cons = ri;	hme_start(ifp);	if (sc->sc_tx_cnt == 0)		ifp->if_timer = 0;	return (1);}