cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

rsi_91x_usb_ops.c (1809B)


      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 */
     28void 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
     56out:
     57	rsi_dbg(INFO_ZONE, "%s: Terminated thread\n", __func__);
     58	skb_queue_purge(&dev->rx_q);
     59	kthread_complete_and_exit(&dev->rx_thread.completion, 0);
     60}
     61