void rmnet_mhi_rx_cb(mhi_cb_info *cb_info) { struct net_device *dev; struct rmnet_mhi_private *rmnet_mhi_ptr; if (NULL != cb_info && NULL != cb_info->result) { dev = (struct net_device *)cb_info->result->user_data; rmnet_mhi_ptr = netdev_priv(dev); } switch(cb_info->cb_reason) { case MHI_CB_XFER_SUCCESS: case MHI_CB_MHI_ENABLED: break; case MHI_CB_MHI_DISABLED: return; break; default: pr_err("%s(): Received bad return code %d from core", __func__, cb_info->cb_reason); break; } rx_interrupts_count[rmnet_mhi_ptr->dev_index]++; /* Disable interrupts */ mhi_mask_irq(rmnet_mhi_ptr->rx_client_handle); atomic_inc(&rmnet_mhi_ptr->irq_masked); /* We need to start a watchdog here, not sure how to do that yet */ if (napi_schedule_prep(&(rmnet_mhi_ptr->napi))) __napi_schedule(&(rmnet_mhi_ptr->napi)); else rx_interrupts_in_masked_irq[rmnet_mhi_ptr->dev_index]++; }
static int rmnet_mhi_open(struct net_device *dev) { struct rmnet_mhi_private *rmnet_mhi_ptr = *(struct rmnet_mhi_private **)netdev_priv(dev); rmnet_log(MSG_INFO, "Opened net dev interface for MHI chans %d and %d\n", rmnet_mhi_ptr->tx_channel, rmnet_mhi_ptr->rx_channel); netif_start_queue(dev); napi_enable(&(rmnet_mhi_ptr->napi)); /* Poll to check if any buffers are accumulated in the * transport buffers */ if (napi_schedule_prep(&(rmnet_mhi_ptr->napi))) { mhi_mask_irq(rmnet_mhi_ptr->rx_client_handle); atomic_inc(&rmnet_mhi_ptr->irq_masked_cntr); __napi_schedule(&(rmnet_mhi_ptr->napi)); } else { rx_interrupts_in_masked_irq[rmnet_mhi_ptr->dev_index]++; } return 0; }
static void rmnet_mhi_rx_cb(struct mhi_result *result) { struct net_device *dev; struct rmnet_mhi_private *rmnet_mhi_ptr; rmnet_mhi_ptr = result->user_data; dev = rmnet_mhi_ptr->dev; rmnet_log(MSG_VERBOSE, "Entered\n"); rx_interrupts_count[rmnet_mhi_ptr->dev_index]++; if (napi_schedule_prep(&(rmnet_mhi_ptr->napi))) { mhi_mask_irq(rmnet_mhi_ptr->rx_client_handle); atomic_inc(&rmnet_mhi_ptr->irq_masked_cntr); __napi_schedule(&(rmnet_mhi_ptr->napi)); } else { rx_interrupts_in_masked_irq[rmnet_mhi_ptr->dev_index]++; } rmnet_log(MSG_VERBOSE, "Exited\n"); }