root/drivers/net/wireless/mediatek/mt76/mcu.c

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

DEFINITIONS

This source file includes following definitions.
  1. mt76_mcu_msg_alloc
  2. mt76_mcu_get_response
  3. mt76_mcu_rx_event

   1 // SPDX-License-Identifier: ISC
   2 /*
   3  * Copyright (C) 2019 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
   4  */
   5 
   6 #include "mt76.h"
   7 
   8 struct sk_buff *
   9 mt76_mcu_msg_alloc(const void *data, int head_len,
  10                    int data_len, int tail_len)
  11 {
  12         struct sk_buff *skb;
  13 
  14         skb = alloc_skb(head_len + data_len + tail_len,
  15                         GFP_KERNEL);
  16         if (!skb)
  17                 return NULL;
  18 
  19         skb_reserve(skb, head_len);
  20         if (data && data_len)
  21                 skb_put_data(skb, data, data_len);
  22 
  23         return skb;
  24 }
  25 EXPORT_SYMBOL_GPL(mt76_mcu_msg_alloc);
  26 
  27 /* mmio */
  28 struct sk_buff *mt76_mcu_get_response(struct mt76_dev *dev,
  29                                       unsigned long expires)
  30 {
  31         unsigned long timeout;
  32 
  33         if (!time_is_after_jiffies(expires))
  34                 return NULL;
  35 
  36         timeout = expires - jiffies;
  37         wait_event_timeout(dev->mmio.mcu.wait,
  38                            !skb_queue_empty(&dev->mmio.mcu.res_q),
  39                            timeout);
  40         return skb_dequeue(&dev->mmio.mcu.res_q);
  41 }
  42 EXPORT_SYMBOL_GPL(mt76_mcu_get_response);
  43 
  44 void mt76_mcu_rx_event(struct mt76_dev *dev, struct sk_buff *skb)
  45 {
  46         skb_queue_tail(&dev->mmio.mcu.res_q, skb);
  47         wake_up(&dev->mmio.mcu.wait);
  48 }
  49 EXPORT_SYMBOL_GPL(mt76_mcu_rx_event);

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