770 /*
771 * count a chained packet only once.
772 */
773 if (tx_msg_p->tx_message != NULL) {
774 freemsg(tx_msg_p->tx_message);
775 tx_msg_p->tx_message = NULL;
776 }
777 tx_msg_p->flags.dma_type = USE_NONE;
778 tx_rd_index = tx_ring_p->rd_index;
779 tx_rd_index = (tx_rd_index + 1) &
780 tx_ring_p->tx_wrap_mask;
781 tx_ring_p->rd_index = tx_rd_index;
782 tx_ring_p->descs_pending--;
783 tx_desc_p = &tx_desc_ring_vp[tx_rd_index];
784 tx_msg_p = &tx_msg_ring[tx_rd_index];
785 }
786
787 status = (nmblks <= ((int)tx_ring_p->tx_ring_size -
788 (int)tx_ring_p->descs_pending - TX_FULL_MARK));
789 if (status) {
790 (void) cas32((uint32_t *)&tx_ring_p->queueing, 1, 0);
791 }
792 } else {
793 status = (nmblks <= ((int)tx_ring_p->tx_ring_size -
794 (int)tx_ring_p->descs_pending - TX_FULL_MARK));
795 }
796
797 HXGE_DEBUG_MSG((hxgep, TX_CTL,
798 "<== hxge_txdma_reclaim status = 0x%08x", status));
799 return (status);
800 }
801
802 uint_t
803 hxge_tx_intr(caddr_t arg1, caddr_t arg2)
804 {
805 p_hxge_ldv_t ldvp = (p_hxge_ldv_t)arg1;
806 p_hxge_t hxgep = (p_hxge_t)arg2;
807 p_hxge_ldg_t ldgp;
808 uint8_t channel;
809 uint32_t vindex;
810 hpi_handle_t handle;
|
770 /*
771 * count a chained packet only once.
772 */
773 if (tx_msg_p->tx_message != NULL) {
774 freemsg(tx_msg_p->tx_message);
775 tx_msg_p->tx_message = NULL;
776 }
777 tx_msg_p->flags.dma_type = USE_NONE;
778 tx_rd_index = tx_ring_p->rd_index;
779 tx_rd_index = (tx_rd_index + 1) &
780 tx_ring_p->tx_wrap_mask;
781 tx_ring_p->rd_index = tx_rd_index;
782 tx_ring_p->descs_pending--;
783 tx_desc_p = &tx_desc_ring_vp[tx_rd_index];
784 tx_msg_p = &tx_msg_ring[tx_rd_index];
785 }
786
787 status = (nmblks <= ((int)tx_ring_p->tx_ring_size -
788 (int)tx_ring_p->descs_pending - TX_FULL_MARK));
789 if (status) {
790 (void) atomic_cas_32((uint32_t *)&tx_ring_p->queueing,
791 1, 0);
792 }
793 } else {
794 status = (nmblks <= ((int)tx_ring_p->tx_ring_size -
795 (int)tx_ring_p->descs_pending - TX_FULL_MARK));
796 }
797
798 HXGE_DEBUG_MSG((hxgep, TX_CTL,
799 "<== hxge_txdma_reclaim status = 0x%08x", status));
800 return (status);
801 }
802
803 uint_t
804 hxge_tx_intr(caddr_t arg1, caddr_t arg2)
805 {
806 p_hxge_ldv_t ldvp = (p_hxge_ldv_t)arg1;
807 p_hxge_t hxgep = (p_hxge_t)arg2;
808 p_hxge_ldg_t ldgp;
809 uint8_t channel;
810 uint32_t vindex;
811 hpi_handle_t handle;
|