sizeof(struct hermes_tx_descriptor) + sizeof(struct ieee80211_hdr_4addr),
offsetof(struct hermes_tx_descriptor_802_11, addr2),
static void __orinoco_ev_txexc(struct net_device *dev, hermes_t *hw){	struct orinoco_private *priv = netdev_priv(dev);	struct net_device_stats *stats = &priv->stats;	u16 fid = hermes_read_regn(hw, TXCOMPLFID);	u16 status;	struct hermes_tx_descriptor_802_11 hdr;	int err = 0;	if (fid == DUMMY_FID)		return; /* Nothing's really happened */	/* Read the frame header */	err = hermes_bap_pread(hw, IRQ_BAP, &hdr,			       sizeof(struct hermes_tx_descriptor) +			       sizeof(struct ieee80211_hdr_4addr),			       fid, 0);	hermes_write_regn(hw, TXCOMPLFID, DUMMY_FID);	stats->tx_errors++;	if (err) {		printk(KERN_WARNING "%s: Unable to read descriptor on Tx error "		       "(FID=%04X error %d)\n",		       dev->name, fid, err);		return;	}		DEBUG(1, "%s: Tx error, err %d (FID=%04X)\n", dev->name,	      err, fid);    	/* We produce a TXDROP event only for retry or lifetime	 * exceeded, because that's the only status that really mean	 * that this particular node went away.	 * Other errors means that *we* screwed up. - Jean II */	status = le16_to_cpu(hdr.status);	if (status & (HERMES_TXSTAT_RETRYERR | HERMES_TXSTAT_AGEDERR)) {		union iwreq_data	wrqu;		/* Copy 802.11 dest address.		 * We use the 802.11 header because the frame may		 * not be 802.3 or may be mangled...		 * In Ad-Hoc mode, it will be the node address.		 * In managed mode, it will be most likely the AP addr		 * User space will figure out how to convert it to		 * whatever it needs (IP address or else).		 * - Jean II */		memcpy(wrqu.addr.sa_data, hdr.addr1, ETH_ALEN);		wrqu.addr.sa_family = ARPHRD_ETHER;		/* Send event to user space */		wireless_send_event(dev, IWEVTXDROP, &wrqu, NULL);	}	netif_wake_queue(dev);}