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
ethernet
sfc
efx.h
Go to the documentation of this file.
1
/****************************************************************************
2
* Driver for Solarflare Solarstorm network controllers and boards
3
* Copyright 2005-2006 Fen Systems Ltd.
4
* Copyright 2006-2010 Solarflare Communications Inc.
5
*
6
* This program is free software; you can redistribute it and/or modify it
7
* under the terms of the GNU General Public License version 2 as published
8
* by the Free Software Foundation, incorporated herein by reference.
9
*/
10
11
#ifndef EFX_EFX_H
12
#define EFX_EFX_H
13
14
#include "
net_driver.h
"
15
#include "
filter.h
"
16
17
/* Solarstorm controllers use BAR 0 for I/O space and BAR 2(&3) for memory */
18
#define EFX_MEM_BAR 2
19
20
/* TX */
21
extern
int
efx_probe_tx_queue
(
struct
efx_tx_queue
*
tx_queue
);
22
extern
void
efx_remove_tx_queue
(
struct
efx_tx_queue
*
tx_queue
);
23
extern
void
efx_init_tx_queue
(
struct
efx_tx_queue
*
tx_queue
);
24
extern
void
efx_init_tx_queue_core_txq
(
struct
efx_tx_queue
*
tx_queue
);
25
extern
void
efx_fini_tx_queue
(
struct
efx_tx_queue
*
tx_queue
);
26
extern
void
efx_release_tx_buffers
(
struct
efx_tx_queue
*
tx_queue
);
27
extern
netdev_tx_t
28
efx_hard_start_xmit
(
struct
sk_buff
*
skb
,
struct
net_device
*net_dev);
29
extern
netdev_tx_t
30
efx_enqueue_skb
(
struct
efx_tx_queue
*
tx_queue
,
struct
sk_buff
*
skb
);
31
extern
void
efx_xmit_done
(
struct
efx_tx_queue
*
tx_queue
,
unsigned
int
index
);
32
extern
int
efx_setup_tc
(
struct
net_device
*net_dev,
u8
num_tc);
33
extern
unsigned
int
efx_tx_max_skb_descs
(
struct
efx_nic
*efx);
34
35
/* RX */
36
extern
int
efx_probe_rx_queue
(
struct
efx_rx_queue
*
rx_queue
);
37
extern
void
efx_remove_rx_queue
(
struct
efx_rx_queue
*
rx_queue
);
38
extern
void
efx_init_rx_queue
(
struct
efx_rx_queue
*
rx_queue
);
39
extern
void
efx_fini_rx_queue
(
struct
efx_rx_queue
*
rx_queue
);
40
extern
void
efx_rx_strategy
(
struct
efx_channel
*
channel
);
41
extern
void
efx_fast_push_rx_descriptors
(
struct
efx_rx_queue
*
rx_queue
);
42
extern
void
efx_rx_slow_fill
(
unsigned
long
context
);
43
extern
void
__efx_rx_packet
(
struct
efx_channel
*
channel
,
44
struct
efx_rx_buffer
*rx_buf);
45
extern
void
efx_rx_packet
(
struct
efx_rx_queue
*
rx_queue
,
unsigned
int
index
,
46
unsigned
int
len,
u16
flags
);
47
extern
void
efx_schedule_slow_fill
(
struct
efx_rx_queue
*
rx_queue
);
48
49
#define EFX_MAX_DMAQ_SIZE 4096UL
50
#define EFX_DEFAULT_DMAQ_SIZE 1024UL
51
#define EFX_MIN_DMAQ_SIZE 512UL
52
53
#define EFX_MAX_EVQ_SIZE 16384UL
54
#define EFX_MIN_EVQ_SIZE 512UL
55
56
/* Maximum number of TCP segments we support for soft-TSO */
57
#define EFX_TSO_MAX_SEGS 100
58
59
/* The smallest [rt]xq_entries that the driver supports. RX minimum
60
* is a bit arbitrary. For TX, we must have space for at least 2
61
* TSO skbs.
62
*/
63
#define EFX_RXQ_MIN_ENT 128U
64
#define EFX_TXQ_MIN_ENT(efx) (2 * efx_tx_max_skb_descs(efx))
65
66
/* Filters */
67
extern
int
efx_probe_filters
(
struct
efx_nic
*efx);
68
extern
void
efx_restore_filters
(
struct
efx_nic
*efx);
69
extern
void
efx_remove_filters
(
struct
efx_nic
*efx);
70
extern
s32
efx_filter_insert_filter
(
struct
efx_nic
*efx,
71
struct
efx_filter_spec
*spec,
72
bool
replace);
73
extern
int
efx_filter_remove_id_safe
(
struct
efx_nic
*efx,
74
enum
efx_filter_priority
priority
,
75
u32
filter_id);
76
extern
int
efx_filter_get_filter_safe
(
struct
efx_nic
*efx,
77
enum
efx_filter_priority
priority
,
78
u32
filter_id,
struct
efx_filter_spec
*);
79
extern
void
efx_filter_clear_rx
(
struct
efx_nic
*efx,
80
enum
efx_filter_priority
priority
);
81
extern
u32
efx_filter_count_rx_used
(
struct
efx_nic
*efx,
82
enum
efx_filter_priority
priority
);
83
extern
u32
efx_filter_get_rx_id_limit
(
struct
efx_nic
*efx);
84
extern
s32
efx_filter_get_rx_ids
(
struct
efx_nic
*efx,
85
enum
efx_filter_priority
priority
,
86
u32
*
buf
,
u32
size
);
87
#ifdef CONFIG_RFS_ACCEL
88
extern
int
efx_filter_rfs(
struct
net_device
*net_dev,
const
struct
sk_buff
*
skb
,
89
u16
rxq_index,
u32
flow_id);
90
extern
bool
__efx_filter_rfs_expire(
struct
efx_nic
*efx,
unsigned
quota);
91
static
inline
void
efx_filter_rfs_expire(
struct
efx_channel
*
channel
)
92
{
93
if
(channel->rfs_filters_added >= 60 &&
94
__efx_filter_rfs_expire(channel->
efx
, 100))
95
channel->rfs_filters_added -= 60;
96
}
97
#define efx_filter_rfs_enabled() 1
98
#else
99
static
inline
void
efx_filter_rfs_expire(
struct
efx_channel
*channel) {}
100
#define efx_filter_rfs_enabled() 0
101
#endif
102
103
/* Channels */
104
extern
int
efx_channel_dummy_op_int
(
struct
efx_channel
*channel);
105
extern
void
efx_channel_dummy_op_void
(
struct
efx_channel
*channel);
106
extern
void
efx_process_channel_now
(
struct
efx_channel
*channel);
107
extern
int
108
efx_realloc_channels
(
struct
efx_nic
*efx,
u32
rxq_entries,
u32
txq_entries);
109
110
/* Ports */
111
extern
int
efx_reconfigure_port
(
struct
efx_nic
*efx);
112
extern
int
__efx_reconfigure_port
(
struct
efx_nic
*efx);
113
114
/* Ethtool support */
115
extern
const
struct
ethtool_ops
efx_ethtool_ops
;
116
117
/* Reset handling */
118
extern
int
efx_reset
(
struct
efx_nic
*efx,
enum
reset_type
method
);
119
extern
void
efx_reset_down
(
struct
efx_nic
*efx,
enum
reset_type
method
);
120
extern
int
efx_reset_up
(
struct
efx_nic
*efx,
enum
reset_type
method
,
bool
ok);
121
122
/* Global */
123
extern
void
efx_schedule_reset
(
struct
efx_nic
*efx,
enum
reset_type
type
);
124
extern
int
efx_init_irq_moderation
(
struct
efx_nic
*efx,
unsigned
int
tx_usecs,
125
unsigned
int
rx_usecs,
bool
rx_adaptive,
126
bool
rx_may_override_tx);
127
extern
void
efx_get_irq_moderation
(
struct
efx_nic
*efx,
unsigned
int
*tx_usecs,
128
unsigned
int
*rx_usecs,
bool
*rx_adaptive);
129
130
/* Dummy PHY ops for PHY drivers */
131
extern
int
efx_port_dummy_op_int
(
struct
efx_nic
*efx);
132
extern
void
efx_port_dummy_op_void
(
struct
efx_nic
*efx);
133
134
135
/* MTD */
136
#ifdef CONFIG_SFC_MTD
137
extern
int
efx_mtd_probe
(
struct
efx_nic
*efx);
138
extern
void
efx_mtd_rename
(
struct
efx_nic
*efx);
139
extern
void
efx_mtd_remove
(
struct
efx_nic
*efx);
140
#else
141
static
inline
int
efx_mtd_probe
(
struct
efx_nic
*efx) {
return
0; }
142
static
inline
void
efx_mtd_rename
(
struct
efx_nic
*efx) {}
143
static
inline
void
efx_mtd_remove
(
struct
efx_nic
*efx) {}
144
#endif
145
146
static
inline
void
efx_schedule_channel(
struct
efx_channel
*channel)
147
{
148
netif_vdbg
(channel->
efx
,
intr
, channel->
efx
->net_dev,
149
"channel %d scheduling NAPI poll on CPU%d\n"
,
150
channel->
channel
,
raw_smp_processor_id
());
151
channel->
work_pending
=
true
;
152
153
napi_schedule(&channel->
napi_str
);
154
}
155
156
static
inline
void
efx_schedule_channel_irq(
struct
efx_channel
*channel)
157
{
158
channel->
event_test_cpu
=
raw_smp_processor_id
();
159
efx_schedule_channel(channel);
160
}
161
162
extern
void
efx_link_status_changed
(
struct
efx_nic
*efx);
163
extern
void
efx_link_set_advertising
(
struct
efx_nic
*efx,
u32
);
164
extern
void
efx_link_set_wanted_fc
(
struct
efx_nic
*efx,
u8
);
165
166
#endif
/* EFX_EFX_H */
Generated on Thu Jan 10 2013 14:04:50 for Linux Kernel by
1.8.2