Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
net
xen-netback
common.h
Go to the documentation of this file.
1
/*
2
* This program is free software; you can redistribute it and/or
3
* modify it under the terms of the GNU General Public License version 2
4
* as published by the Free Software Foundation; or, when distributed
5
* separately from the Linux kernel or incorporated into other
6
* software packages, subject to the following license:
7
*
8
* Permission is hereby granted, free of charge, to any person obtaining a copy
9
* of this source file (the "Software"), to deal in the Software without
10
* restriction, including without limitation the rights to use, copy, modify,
11
* merge, publish, distribute, sublicense, and/or sell copies of the Software,
12
* and to permit persons to whom the Software is furnished to do so, subject to
13
* the following conditions:
14
*
15
* The above copyright notice and this permission notice shall be included in
16
* all copies or substantial portions of the Software.
17
*
18
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
24
* IN THE SOFTWARE.
25
*/
26
27
#ifndef __XEN_NETBACK__COMMON_H__
28
#define __XEN_NETBACK__COMMON_H__
29
30
#define pr_fmt(fmt) KBUILD_MODNAME ":%s: " fmt, __func__
31
32
#include <linux/module.h>
33
#include <
linux/interrupt.h
>
34
#include <linux/slab.h>
35
#include <linux/ip.h>
36
#include <linux/in.h>
37
#include <
linux/io.h
>
38
#include <linux/netdevice.h>
39
#include <
linux/etherdevice.h
>
40
#include <linux/wait.h>
41
#include <linux/sched.h>
42
43
#include <
xen/interface/io/netif.h
>
44
#include <
xen/interface/grant_table.h
>
45
#include <
xen/grant_table.h
>
46
#include <
xen/xenbus.h
>
47
48
struct
xen_netbk
;
49
50
struct
xenvif
{
51
/* Unique identifier for this interface. */
52
domid_t
domid
;
53
unsigned
int
handle
;
54
55
/* Reference to netback processing backend. */
56
struct
xen_netbk
*
netbk
;
57
58
u8
fe_dev_addr
[6];
59
60
/* Physical parameters of the comms window. */
61
unsigned
int
irq
;
62
63
/* List of frontends to notify after a batch of frames sent. */
64
struct
list_head
notify_list
;
65
66
/* The shared rings and indexes. */
67
struct
xen_netif_tx_back_ring
tx
;
68
struct
xen_netif_rx_back_ring
rx
;
69
70
/* Frontend feature information. */
71
u8
can_sg
:1;
72
u8
gso
:1;
73
u8
gso_prefix
:1;
74
u8
csum
:1;
75
76
/* Internal feature information. */
77
u8
can_queue
:1;
/* can queue packets for receiver? */
78
79
/*
80
* Allow xenvif_start_xmit() to peek ahead in the rx request
81
* ring. This is a prediction of what rx_req_cons will be
82
* once all queued skbs are put on the ring.
83
*/
84
RING_IDX
rx_req_cons_peek
;
85
86
/* Transmit shaping: allow 'credit_bytes' every 'credit_usec'. */
87
unsigned
long
credit_bytes
;
88
unsigned
long
credit_usec
;
89
unsigned
long
remaining_credit
;
90
struct
timer_list
credit_timeout
;
91
92
/* Statistics */
93
unsigned
long
rx_gso_checksum_fixup
;
94
95
/* Miscellaneous private stuff. */
96
struct
list_head
schedule_list
;
97
atomic_t
refcnt
;
98
struct
net_device
*
dev
;
99
100
wait_queue_head_t
waiting_to_free
;
101
};
102
103
static
inline
struct
xenbus_device
*xenvif_to_xenbus_device(
struct
xenvif
*vif)
104
{
105
return
to_xenbus_device(vif->
dev
->dev.parent);
106
}
107
108
#define XEN_NETIF_TX_RING_SIZE __CONST_RING_SIZE(xen_netif_tx, PAGE_SIZE)
109
#define XEN_NETIF_RX_RING_SIZE __CONST_RING_SIZE(xen_netif_rx, PAGE_SIZE)
110
111
struct
xenvif
*
xenvif_alloc
(
struct
device
*parent,
112
domid_t
domid
,
113
unsigned
int
handle
);
114
115
int
xenvif_connect
(
struct
xenvif
*vif,
unsigned
long
tx_ring_ref,
116
unsigned
long
rx_ring_ref,
unsigned
int
evtchn);
117
void
xenvif_disconnect
(
struct
xenvif
*vif);
118
119
void
xenvif_get
(
struct
xenvif
*vif);
120
void
xenvif_put
(
struct
xenvif
*vif);
121
122
int
xenvif_xenbus_init
(
void
);
123
124
int
xenvif_schedulable
(
struct
xenvif
*vif);
125
126
int
xen_netbk_rx_ring_full
(
struct
xenvif
*vif);
127
128
int
xen_netbk_must_stop_queue
(
struct
xenvif
*vif);
129
130
/* (Un)Map communication rings. */
131
void
xen_netbk_unmap_frontend_rings
(
struct
xenvif
*vif);
132
int
xen_netbk_map_frontend_rings
(
struct
xenvif
*vif,
133
grant_ref_t
tx_ring_ref,
134
grant_ref_t
rx_ring_ref);
135
136
/* (De)Register a xenvif with the netback backend. */
137
void
xen_netbk_add_xenvif
(
struct
xenvif
*vif);
138
void
xen_netbk_remove_xenvif
(
struct
xenvif
*vif);
139
140
/* (De)Schedule backend processing for a xenvif */
141
void
xen_netbk_schedule_xenvif
(
struct
xenvif
*vif);
142
void
xen_netbk_deschedule_xenvif
(
struct
xenvif
*vif);
143
144
/* Check for SKBs from frontend and schedule backend processing */
145
void
xen_netbk_check_rx_xenvif
(
struct
xenvif
*vif);
146
/* Receive an SKB from the frontend */
147
void
xenvif_receive_skb
(
struct
xenvif
*vif,
struct
sk_buff
*
skb
);
148
149
/* Queue an SKB for transmission to the frontend */
150
void
xen_netbk_queue_tx_skb
(
struct
xenvif
*vif,
struct
sk_buff
*
skb
);
151
/* Notify xenvif that ring now has space to send an skb to the frontend */
152
void
xenvif_notify_tx_completion
(
struct
xenvif
*vif);
153
154
/* Returns number of ring slots required to send an skb to the frontend */
155
unsigned
int
xen_netbk_count_skb_slots
(
struct
xenvif
*vif,
struct
sk_buff
*
skb
);
156
157
#endif
/* __XEN_NETBACK__COMMON_H__ */
Generated on Thu Jan 10 2013 12:57:11 for Linux Kernel by
1.8.2