#include "common.h"
#include <linux/kthread.h>
#include <xen/xen.h>
#include <xen/events.h>
static void xenvif_update_needed_slots(struct xenvif_queue *queue,
const struct sk_buff *skb)
{ … }
static bool xenvif_rx_ring_slots_available(struct xenvif_queue *queue)
{ … }
bool xenvif_rx_queue_tail(struct xenvif_queue *queue, struct sk_buff *skb)
{ … }
static struct sk_buff *xenvif_rx_dequeue(struct xenvif_queue *queue)
{ … }
static void xenvif_rx_queue_purge(struct xenvif_queue *queue)
{ … }
static void xenvif_rx_queue_drop_expired(struct xenvif_queue *queue)
{ … }
static void xenvif_rx_copy_flush(struct xenvif_queue *queue)
{ … }
static void xenvif_rx_copy_add(struct xenvif_queue *queue,
struct xen_netif_rx_request *req,
unsigned int offset, void *data, size_t len)
{ … }
static unsigned int xenvif_gso_type(struct sk_buff *skb)
{ … }
struct xenvif_pkt_state { … };
static void xenvif_rx_next_skb(struct xenvif_queue *queue,
struct xenvif_pkt_state *pkt)
{ … }
static void xenvif_rx_complete(struct xenvif_queue *queue,
struct xenvif_pkt_state *pkt)
{ … }
static void xenvif_rx_next_frag(struct xenvif_pkt_state *pkt)
{ … }
static void xenvif_rx_next_chunk(struct xenvif_queue *queue,
struct xenvif_pkt_state *pkt,
unsigned int offset, void **data,
size_t *len)
{ … }
static void xenvif_rx_data_slot(struct xenvif_queue *queue,
struct xenvif_pkt_state *pkt,
struct xen_netif_rx_request *req,
struct xen_netif_rx_response *rsp)
{ … }
static void xenvif_rx_extra_slot(struct xenvif_queue *queue,
struct xenvif_pkt_state *pkt,
struct xen_netif_rx_request *req,
struct xen_netif_rx_response *rsp)
{ … }
static void xenvif_rx_skb(struct xenvif_queue *queue)
{ … }
#define RX_BATCH_SIZE …
static void xenvif_rx_action(struct xenvif_queue *queue)
{ … }
static RING_IDX xenvif_rx_queue_slots(const struct xenvif_queue *queue)
{ … }
static bool xenvif_rx_queue_stalled(const struct xenvif_queue *queue)
{ … }
static bool xenvif_rx_queue_ready(struct xenvif_queue *queue)
{ … }
bool xenvif_have_rx_work(struct xenvif_queue *queue, bool test_kthread)
{ … }
static long xenvif_rx_queue_timeout(struct xenvif_queue *queue)
{ … }
static void xenvif_wait_for_rx_work(struct xenvif_queue *queue)
{ … }
static void xenvif_queue_carrier_off(struct xenvif_queue *queue)
{ … }
static void xenvif_queue_carrier_on(struct xenvif_queue *queue)
{ … }
int xenvif_kthread_guest_rx(void *data)
{ … }