root/drivers/net/wireless/rsi/rsi_91x_usb_ops.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. rsi_usb_rx_thread

   1 /**
   2  * Copyright (c) 2014 Redpine Signals Inc.
   3  *
   4  * Permission to use, copy, modify, and/or distribute this software for any
   5  * purpose with or without fee is hereby granted, provided that the above
   6  * copyright notice and this permission notice appear in all copies.
   7  *
   8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15  *
  16  */
  17 
  18 #include <linux/firmware.h>
  19 #include "rsi_usb.h"
  20 
  21 /**
  22  * rsi_usb_rx_thread() - This is a kernel thread to receive the packets from
  23  *                       the USB device.
  24  * @common: Pointer to the driver private structure.
  25  *
  26  * Return: None.
  27  */
  28 void rsi_usb_rx_thread(struct rsi_common *common)
  29 {
  30         struct rsi_hw *adapter = common->priv;
  31         struct rsi_91x_usbdev *dev = (struct rsi_91x_usbdev *)adapter->rsi_dev;
  32         int status;
  33         struct sk_buff *skb;
  34 
  35         do {
  36                 rsi_wait_event(&dev->rx_thread.event, EVENT_WAIT_FOREVER);
  37                 rsi_reset_event(&dev->rx_thread.event);
  38 
  39                 while (true) {
  40                         if (atomic_read(&dev->rx_thread.thread_done))
  41                                 goto out;
  42 
  43                         skb = skb_dequeue(&dev->rx_q);
  44                         if (!skb)
  45                                 break;
  46                         status = rsi_read_pkt(common, skb->data, 0);
  47                         if (status) {
  48                                 rsi_dbg(ERR_ZONE, "%s: Failed To read data",
  49                                         __func__);
  50                                 break;
  51                         }
  52                         dev_kfree_skb(skb);
  53                 }
  54         } while (1);
  55 
  56 out:
  57         rsi_dbg(INFO_ZONE, "%s: Terminated thread\n", __func__);
  58         skb_queue_purge(&dev->rx_q);
  59         complete_and_exit(&dev->rx_thread.completion, 0);
  60 }
  61 

/* [<][>][^][v][top][bottom][index][help] */