void qlcnic_83xx_config_intr_coal(struct qlcnic_adapter *adapter)
 {
        int err;
-       u32 temp;
+       u16 temp;
        struct qlcnic_cmd_args cmd;
        struct qlcnic_nic_intr_coalesce *coal = &adapter->ahw->coal;
 
                return;
 
        qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_CONFIG_INTR_COAL);
-       cmd.req.arg[1] = 1 | (adapter->recv_ctx->context_id << 16);
+       if (coal->type == QLCNIC_INTR_COAL_TYPE_RX) {
+               temp = adapter->recv_ctx->context_id;
+               cmd.req.arg[1] = QLCNIC_INTR_COAL_TYPE_RX | temp << 16;
+               temp = coal->rx_time_us;
+               cmd.req.arg[2] = coal->rx_packets | temp << 16;
+       } else if (coal->type == QLCNIC_INTR_COAL_TYPE_TX) {
+               temp = adapter->tx_ring->ctx_id;
+               cmd.req.arg[1] = QLCNIC_INTR_COAL_TYPE_TX | temp << 16;
+               temp = coal->tx_time_us;
+               cmd.req.arg[2] = coal->tx_packets | temp << 16;
+       }
        cmd.req.arg[3] = coal->flag;
-       temp = coal->rx_time_us << 16;
-       cmd.req.arg[2] = coal->rx_packets | temp;
        err = qlcnic_issue_cmd(adapter, &cmd);
        if (err != QLCNIC_RCODE_SUCCESS)
                dev_info(&adapter->pdev->dev,
 
                        struct ethtool_coalesce *ethcoal)
 {
        struct qlcnic_adapter *adapter = netdev_priv(netdev);
+       struct qlcnic_nic_intr_coalesce *coal;
+       u32 rx_coalesce_usecs, rx_max_frames;
+       u32 tx_coalesce_usecs, tx_max_frames;
 
        if (!test_bit(__QLCNIC_DEV_UP, &adapter->state))
                return -EINVAL;
        */
        if (ethcoal->rx_coalesce_usecs > 0xffff ||
                ethcoal->rx_max_coalesced_frames > 0xffff ||
-               ethcoal->tx_coalesce_usecs ||
-               ethcoal->tx_max_coalesced_frames ||
+               ethcoal->tx_coalesce_usecs > 0xffff ||
+               ethcoal->tx_max_coalesced_frames > 0xffff ||
                ethcoal->rx_coalesce_usecs_irq ||
                ethcoal->rx_max_coalesced_frames_irq ||
                ethcoal->tx_coalesce_usecs_irq ||
                ethcoal->tx_max_coalesced_frames_high)
                return -EINVAL;
 
-       if (!ethcoal->rx_coalesce_usecs ||
-               !ethcoal->rx_max_coalesced_frames) {
-               adapter->ahw->coal.flag = QLCNIC_INTR_DEFAULT;
-               adapter->ahw->coal.rx_time_us =
-                       QLCNIC_DEFAULT_INTR_COALESCE_RX_TIME_US;
-               adapter->ahw->coal.rx_packets =
-                       QLCNIC_DEFAULT_INTR_COALESCE_RX_PACKETS;
+       coal = &adapter->ahw->coal;
+
+       if (qlcnic_83xx_check(adapter)) {
+               if (!ethcoal->tx_coalesce_usecs ||
+                   !ethcoal->tx_max_coalesced_frames ||
+                   !ethcoal->rx_coalesce_usecs ||
+                   !ethcoal->rx_max_coalesced_frames) {
+                       coal->flag = QLCNIC_INTR_DEFAULT;
+                       coal->type = QLCNIC_INTR_COAL_TYPE_RX;
+                       coal->rx_time_us = QLCNIC_DEF_INTR_COALESCE_RX_TIME_US;
+                       coal->rx_packets = QLCNIC_DEF_INTR_COALESCE_RX_PACKETS;
+                       coal->tx_time_us = QLCNIC_DEF_INTR_COALESCE_TX_TIME_US;
+                       coal->tx_packets = QLCNIC_DEF_INTR_COALESCE_TX_PACKETS;
+               } else {
+                       tx_coalesce_usecs = ethcoal->tx_coalesce_usecs;
+                       tx_max_frames = ethcoal->tx_max_coalesced_frames;
+                       rx_coalesce_usecs = ethcoal->rx_coalesce_usecs;
+                       rx_max_frames = ethcoal->rx_max_coalesced_frames;
+                       coal->flag = 0;
+
+                       if ((coal->rx_time_us == rx_coalesce_usecs) &&
+                           (coal->rx_packets == rx_max_frames)) {
+                               coal->type = QLCNIC_INTR_COAL_TYPE_TX;
+                               coal->tx_time_us = tx_coalesce_usecs;
+                               coal->tx_packets = tx_max_frames;
+                       } else if ((coal->tx_time_us == tx_coalesce_usecs) &&
+                                  (coal->tx_packets == tx_max_frames)) {
+                               coal->type = QLCNIC_INTR_COAL_TYPE_RX;
+                               coal->rx_time_us = rx_coalesce_usecs;
+                               coal->rx_packets = rx_max_frames;
+                       } else {
+                               coal->type = QLCNIC_INTR_COAL_TYPE_RX;
+                               coal->rx_time_us = rx_coalesce_usecs;
+                               coal->rx_packets = rx_max_frames;
+                               coal->tx_time_us = tx_coalesce_usecs;
+                               coal->tx_packets = tx_max_frames;
+                       }
+               }
        } else {
-               adapter->ahw->coal.flag = 0;
-               adapter->ahw->coal.rx_time_us = ethcoal->rx_coalesce_usecs;
-               adapter->ahw->coal.rx_packets =
-                       ethcoal->rx_max_coalesced_frames;
+               if (!ethcoal->rx_coalesce_usecs ||
+                   !ethcoal->rx_max_coalesced_frames) {
+                       coal->flag = QLCNIC_INTR_DEFAULT;
+                       coal->rx_time_us = QLCNIC_DEF_INTR_COALESCE_RX_TIME_US;
+                       coal->rx_packets = QLCNIC_DEF_INTR_COALESCE_RX_PACKETS;
+               } else {
+                       coal->flag = 0;
+                       coal->rx_time_us = ethcoal->rx_coalesce_usecs;
+                       coal->rx_packets = ethcoal->rx_max_coalesced_frames;
+               }
        }
 
        qlcnic_config_intr_coalesce(adapter);
 
        ethcoal->rx_coalesce_usecs = adapter->ahw->coal.rx_time_us;
        ethcoal->rx_max_coalesced_frames = adapter->ahw->coal.rx_packets;
+       ethcoal->tx_coalesce_usecs = adapter->ahw->coal.tx_time_us;
+       ethcoal->tx_max_coalesced_frames = adapter->ahw->coal.tx_packets;
 
        return 0;
 }
 
 
 static int qlcnic_alloc_adapter_resources(struct qlcnic_adapter *adapter)
 {
+       struct qlcnic_hardware_context *ahw = adapter->ahw;
        int err = 0;
+
        adapter->recv_ctx = kzalloc(sizeof(struct qlcnic_recv_context),
                                GFP_KERNEL);
        if (!adapter->recv_ctx) {
                goto err_out;
        }
        /* Initialize interrupt coalesce parameters */
-       adapter->ahw->coal.flag = QLCNIC_INTR_DEFAULT;
-       adapter->ahw->coal.rx_time_us = QLCNIC_DEFAULT_INTR_COALESCE_RX_TIME_US;
-       adapter->ahw->coal.rx_packets = QLCNIC_DEFAULT_INTR_COALESCE_RX_PACKETS;
+       ahw->coal.flag = QLCNIC_INTR_DEFAULT;
+       ahw->coal.type = QLCNIC_INTR_COAL_TYPE_RX;
+       ahw->coal.rx_time_us = QLCNIC_DEF_INTR_COALESCE_RX_TIME_US;
+       ahw->coal.rx_packets = QLCNIC_DEF_INTR_COALESCE_RX_PACKETS;
+       if (qlcnic_83xx_check(adapter)) {
+               ahw->coal.tx_time_us = QLCNIC_DEF_INTR_COALESCE_TX_TIME_US;
+               ahw->coal.tx_packets = QLCNIC_DEF_INTR_COALESCE_TX_PACKETS;
+       }
        /* clear stats */
        memset(&adapter->stats, 0, sizeof(adapter->stats));
 err_out: