Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
332e4af8
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
332e4af8
编写于
6月 28, 2008
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'davem-next' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6
上级
1b63ba8a
be0976be
变更
42
展开全部
隐藏空白更改
内联
并排
Showing
42 changed file
with
1142 addition
and
758 deletion
+1142
-758
Documentation/networking/dm9000.txt
Documentation/networking/dm9000.txt
+167
-0
arch/blackfin/mach-bf527/boards/ezkit.c
arch/blackfin/mach-bf527/boards/ezkit.c
+6
-1
arch/blackfin/mach-bf533/boards/H8606.c
arch/blackfin/mach-bf533/boards/H8606.c
+6
-1
arch/blackfin/mach-bf537/boards/generic_board.c
arch/blackfin/mach-bf537/boards/generic_board.c
+6
-1
drivers/net/8139cp.c
drivers/net/8139cp.c
+0
-1
drivers/net/8139too.c
drivers/net/8139too.c
+6
-7
drivers/net/Kconfig
drivers/net/Kconfig
+19
-12
drivers/net/cxgb3/cxgb3_offload.c
drivers/net/cxgb3/cxgb3_offload.c
+20
-1
drivers/net/cxgb3/t3cdev.h
drivers/net/cxgb3/t3cdev.h
+2
-1
drivers/net/dl2k.c
drivers/net/dl2k.c
+1
-1
drivers/net/dm9000.c
drivers/net/dm9000.c
+620
-579
drivers/net/dm9000.h
drivers/net/dm9000.h
+11
-0
drivers/net/e1000/e1000_main.c
drivers/net/e1000/e1000_main.c
+0
-34
drivers/net/e1000e/e1000.h
drivers/net/e1000e/e1000.h
+4
-0
drivers/net/e1000e/netdev.c
drivers/net/e1000e/netdev.c
+42
-6
drivers/net/fealnx.c
drivers/net/fealnx.c
+12
-31
drivers/net/forcedeth.c
drivers/net/forcedeth.c
+5
-0
drivers/net/igb/igb.h
drivers/net/igb/igb.h
+4
-0
drivers/net/igb/igb_main.c
drivers/net/igb/igb_main.c
+41
-6
drivers/net/ixgbe/ixgbe.h
drivers/net/ixgbe/ixgbe.h
+9
-0
drivers/net/ixgbe/ixgbe_ethtool.c
drivers/net/ixgbe/ixgbe_ethtool.c
+11
-0
drivers/net/ixgbe/ixgbe_main.c
drivers/net/ixgbe/ixgbe_main.c
+90
-21
drivers/net/pci-skeleton.c
drivers/net/pci-skeleton.c
+0
-1
drivers/net/sh_eth.c
drivers/net/sh_eth.c
+2
-2
drivers/net/sh_eth.h
drivers/net/sh_eth.h
+2
-2
drivers/net/tsi108_eth.c
drivers/net/tsi108_eth.c
+0
-1
drivers/net/tulip/21142.c
drivers/net/tulip/21142.c
+2
-4
drivers/net/tulip/de2104x.c
drivers/net/tulip/de2104x.c
+4
-6
drivers/net/tulip/eeprom.c
drivers/net/tulip/eeprom.c
+2
-4
drivers/net/tulip/interrupt.c
drivers/net/tulip/interrupt.c
+2
-3
drivers/net/tulip/media.c
drivers/net/tulip/media.c
+2
-3
drivers/net/tulip/pnic.c
drivers/net/tulip/pnic.c
+2
-3
drivers/net/tulip/pnic2.c
drivers/net/tulip/pnic2.c
+2
-3
drivers/net/tulip/timer.c
drivers/net/tulip/timer.c
+3
-3
drivers/net/tulip/tulip.h
drivers/net/tulip/tulip.h
+2
-2
drivers/net/tulip/tulip_core.c
drivers/net/tulip/tulip_core.c
+3
-5
drivers/net/typhoon.c
drivers/net/typhoon.c
+0
-3
drivers/net/usb/rndis_host.c
drivers/net/usb/rndis_host.c
+7
-7
drivers/net/wireless/rndis_wlan.c
drivers/net/wireless/rndis_wlan.c
+2
-2
drivers/pci/pci-acpi.c
drivers/pci/pci-acpi.c
+20
-0
include/linux/dm9000.h
include/linux/dm9000.h
+1
-0
include/linux/usb/rndis_host.h
include/linux/usb/rndis_host.h
+2
-1
未找到文件。
Documentation/networking/dm9000.txt
0 → 100644
浏览文件 @
332e4af8
DM9000 Network driver
=====================
Copyright 2008 Simtec Electronics,
Ben Dooks <ben@simtec.co.uk> <ben-linux@fluff.org>
Introduction
------------
This file describes how to use the DM9000 platform-device based network driver
that is contained in the files drivers/net/dm9000.c and drivers/net/dm9000.h.
The driver supports three DM9000 variants, the DM9000E which is the first chip
supported as well as the newer DM9000A and DM9000B devices. It is currently
maintained and tested by Ben Dooks, who should be CC: to any patches for this
driver.
Defining the platform device
----------------------------
The minimum set of resources attached to the platform device are as follows:
1) The physical address of the address register
2) The physical address of the data register
3) The IRQ line the device's interrupt pin is connected to.
These resources should be specified in that order, as the ordering of the
two address regions is important (the driver expects these to be address
and then data).
An example from arch/arm/mach-s3c2410/mach-bast.c is:
static struct resource bast_dm9k_resource[] = {
[0] = {
.start = S3C2410_CS5 + BAST_PA_DM9000,
.end = S3C2410_CS5 + BAST_PA_DM9000 + 3,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = S3C2410_CS5 + BAST_PA_DM9000 + 0x40,
.end = S3C2410_CS5 + BAST_PA_DM9000 + 0x40 + 0x3f,
.flags = IORESOURCE_MEM,
},
[2] = {
.start = IRQ_DM9000,
.end = IRQ_DM9000,
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
}
};
static struct platform_device bast_device_dm9k = {
.name = "dm9000",
.id = 0,
.num_resources = ARRAY_SIZE(bast_dm9k_resource),
.resource = bast_dm9k_resource,
};
Note the setting of the IRQ trigger flag in bast_dm9k_resource[2].flags,
as this will generate a warning if it is not present. The trigger from
the flags field will be passed to request_irq() when registering the IRQ
handler to ensure that the IRQ is setup correctly.
This shows a typical platform device, without the optional configuration
platform data supplied. The next example uses the same resources, but adds
the optional platform data to pass extra configuration data:
static struct dm9000_plat_data bast_dm9k_platdata = {
.flags = DM9000_PLATF_16BITONLY,
};
static struct platform_device bast_device_dm9k = {
.name = "dm9000",
.id = 0,
.num_resources = ARRAY_SIZE(bast_dm9k_resource),
.resource = bast_dm9k_resource,
.dev = {
.platform_data = &bast_dm9k_platdata,
}
};
The platform data is defined in include/linux/dm9000.h and described below.
Platform data
-------------
Extra platform data for the DM9000 can describe the IO bus width to the
device, whether or not an external PHY is attached to the device and
the availability of an external configuration EEPROM.
The flags for the platform data .flags field are as follows:
DM9000_PLATF_8BITONLY
The IO should be done with 8bit operations.
DM9000_PLATF_16BITONLY
The IO should be done with 16bit operations.
DM9000_PLATF_32BITONLY
The IO should be done with 32bit operations.
DM9000_PLATF_EXT_PHY
The chip is connected to an external PHY.
DM9000_PLATF_NO_EEPROM
This can be used to signify that the board does not have an
EEPROM, or that the EEPROM should be hidden from the user.
DM9000_PLATF_SIMPLE_PHY
Switch to using the simpler PHY polling method which does not
try and read the MII PHY state regularly. This is only available
when using the internal PHY. See the section on link state polling
for more information.
The config symbol DM9000_FORCE_SIMPLE_PHY_POLL, Kconfig entry
"Force simple NSR based PHY polling" allows this flag to be
forced on at build time.
PHY Link state polling
----------------------
The driver keeps track of the link state and informs the network core
about link (carrier) availablilty. This is managed by several methods
depending on the version of the chip and on which PHY is being used.
For the internal PHY, the original (and currently default) method is
to read the MII state, either when the status changes if we have the
necessary interrupt support in the chip or every two seconds via a
periodic timer.
To reduce the overhead for the internal PHY, there is now the option
of using the DM9000_FORCE_SIMPLE_PHY_POLL config, or DM9000_PLATF_SIMPLE_PHY
platform data option to read the summary information without the
expensive MII accesses. This method is faster, but does not print
as much information.
When using an external PHY, the driver currently has to poll the MII
link status as there is no method for getting an interrupt on link change.
DM9000A / DM9000B
-----------------
These chips are functionally similar to the DM9000E and are supported easily
by the same driver. The features are:
1) Interrupt on internal PHY state change. This means that the periodic
polling of the PHY status may be disabled on these devices when using
the internal PHY.
2) TCP/UDP checksum offloading, which the driver does not currently support.
ethtool
-------
The driver supports the ethtool interface for access to the driver
state information, the PHY state and the EEPROM.
arch/blackfin/mach-bf527/boards/ezkit.c
浏览文件 @
332e4af8
...
...
@@ -323,10 +323,15 @@ static struct platform_device smc91x_device = {
static
struct
resource
dm9000_resources
[]
=
{
[
0
]
=
{
.
start
=
0x203FB800
,
.
end
=
0x203FB800
+
8
,
.
end
=
0x203FB800
+
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
0x203FB800
+
4
,
.
end
=
0x203FB800
+
5
,
.
flags
=
IORESOURCE_MEM
,
},
[
2
]
=
{
.
start
=
IRQ_PF9
,
.
end
=
IRQ_PF9
,
.
flags
=
(
IORESOURCE_IRQ
|
IORESOURCE_IRQ_HIGHEDGE
),
...
...
arch/blackfin/mach-bf533/boards/H8606.c
浏览文件 @
332e4af8
...
...
@@ -65,10 +65,15 @@ static struct platform_device rtc_device = {
static
struct
resource
dm9000_resources
[]
=
{
[
0
]
=
{
.
start
=
0x20300000
,
.
end
=
0x20300000
+
8
,
.
end
=
0x20300000
+
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
0x20300000
+
4
,
.
end
=
0x20300000
+
5
,
.
flags
=
IORESOURCE_MEM
,
},
[
2
]
=
{
.
start
=
IRQ_PF10
,
.
end
=
IRQ_PF10
,
.
flags
=
(
IORESOURCE_IRQ
|
IORESOURCE_IRQ_HIGHEDGE
),
...
...
arch/blackfin/mach-bf537/boards/generic_board.c
浏览文件 @
332e4af8
...
...
@@ -166,10 +166,15 @@ static struct platform_device smc91x_device = {
static
struct
resource
dm9000_resources
[]
=
{
[
0
]
=
{
.
start
=
0x203FB800
,
.
end
=
0x203FB800
+
8
,
.
end
=
0x203FB800
+
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
0x203FB800
+
4
,
.
end
=
0x203FB800
+
5
,
.
flags
=
IORESOURCE_MEM
,
},
[
2
]
=
{
.
start
=
IRQ_PF9
,
.
end
=
IRQ_PF9
,
.
flags
=
(
IORESOURCE_IRQ
|
IORESOURCE_IRQ_HIGHEDGE
),
...
...
drivers/net/8139cp.c
浏览文件 @
332e4af8
...
...
@@ -1213,7 +1213,6 @@ static int cp_close (struct net_device *dev)
spin_unlock_irqrestore
(
&
cp
->
lock
,
flags
);
synchronize_irq
(
dev
->
irq
);
free_irq
(
dev
->
irq
,
dev
);
cp_free_rings
(
cp
);
...
...
drivers/net/8139too.c
浏览文件 @
332e4af8
...
...
@@ -107,8 +107,8 @@
#include <linux/mii.h>
#include <linux/completion.h>
#include <linux/crc32.h>
#include <
asm
/io.h>
#include <
asm
/uaccess.h>
#include <
linux
/io.h>
#include <
linux
/uaccess.h>
#include <asm/irq.h>
#define RTL8139_DRIVER_NAME DRV_NAME " Fast Ethernet driver " DRV_VERSION
...
...
@@ -134,7 +134,7 @@
#if RTL8139_DEBUG
/* note: prints function name for you */
# define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __
FUNCTION
__ , ## args)
# define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __
func
__ , ## args)
#else
# define DPRINTK(fmt, args...)
#endif
...
...
@@ -145,7 +145,7 @@
# define assert(expr) \
if(unlikely(!(expr))) { \
printk(KERN_ERR "Assertion failed! %s,%s,%s,line=%d\n", \
#expr,__FILE__,__FUNCTION__,__LINE__);
\
#expr, __FILE__, __func__, __LINE__);
\
}
#endif
...
...
@@ -219,7 +219,7 @@ enum {
#define RTL8139B_IO_SIZE 256
#define RTL8129_CAPS HAS_MII_XCVR
#define RTL8139_CAPS
HAS_CHIP_XCVR|HAS_LNK_CHNG
#define RTL8139_CAPS
(HAS_CHIP_XCVR|HAS_LNK_CHNG)
typedef
enum
{
RTL8139
=
0
,
...
...
@@ -1889,7 +1889,7 @@ static void rtl8139_rx_err (u32 rx_status, struct net_device *dev,
}
#if RX_BUF_IDX == 3
static
__inline__
void
wrap_copy
(
struct
sk_buff
*
skb
,
const
unsigned
char
*
ring
,
static
inline
void
wrap_copy
(
struct
sk_buff
*
skb
,
const
unsigned
char
*
ring
,
u32
offset
,
unsigned
int
size
)
{
u32
left
=
RX_BUF_LEN
-
offset
;
...
...
@@ -2231,7 +2231,6 @@ static int rtl8139_close (struct net_device *dev)
spin_unlock_irqrestore
(
&
tp
->
lock
,
flags
);
synchronize_irq
(
dev
->
irq
);
/* racy, but that's ok here */
free_irq
(
dev
->
irq
,
dev
);
rtl8139_tx_clear
(
tp
);
...
...
drivers/net/Kconfig
浏览文件 @
332e4af8
...
...
@@ -938,6 +938,23 @@ config DM9000
To compile this driver as a module, choose M here. The module
will be called dm9000.
config DM9000_DEBUGLEVEL
int "DM9000 maximum debug level"
depends on DM9000
default 4
help
The maximum level of debugging code compiled into the DM9000
driver.
config DM9000_FORCE_SIMPLE_PHY_POLL
bool "Force simple NSR based PHY polling"
depends on DM9000
---help---
This configuration forces the DM9000 to use the NSR's LinkStatus
bit to determine if the link is up or down instead of the more
costly MII PHY reads. Note, this will not work if the chip is
operating with an external PHY.
config ENC28J60
tristate "ENC28J60 support"
depends on EXPERIMENTAL && SPI && NET_ETHERNET
...
...
@@ -955,14 +972,6 @@ config ENC28J60_WRITEVERIFY
Enable the verify after the buffer write useful for debugging purpose.
If unsure, say N.
config DM9000_DEBUGLEVEL
int "DM9000 maximum debug level"
depends on DM9000
default 4
help
The maximum level of debugging code compiled into the DM9000
driver.
config SMC911X
tristate "SMSC LAN911[5678] support"
select CRC32
...
...
@@ -2025,9 +2034,6 @@ config E1000E
To compile this driver as a module, choose M here. The module
will be called e1000e.
config E1000E_ENABLED
def_bool E1000E != n
config IP1000
tristate "IP1000 Gigabit Ethernet support"
depends on PCI && EXPERIMENTAL
...
...
@@ -2462,7 +2468,8 @@ config EHEA
config IXGBE
tristate "Intel(R) 10GbE PCI Express adapters support"
depends on PCI
depends on PCI && INET
select INET_LRO
---help---
This driver supports Intel(R) 10GbE PCI Express family of
adapters. For more information on how to identify your adapter, go
...
...
drivers/net/cxgb3/cxgb3_offload.c
浏览文件 @
332e4af8
...
...
@@ -1248,6 +1248,25 @@ static inline void unregister_tdev(struct t3cdev *tdev)
mutex_unlock
(
&
cxgb3_db_lock
);
}
static
inline
int
adap2type
(
struct
adapter
*
adapter
)
{
int
type
=
0
;
switch
(
adapter
->
params
.
rev
)
{
case
T3_REV_A
:
type
=
T3A
;
break
;
case
T3_REV_B
:
case
T3_REV_B2
:
type
=
T3B
;
break
;
case
T3_REV_C
:
type
=
T3C
;
break
;
}
return
type
;
}
void
__devinit
cxgb3_adapter_ofld
(
struct
adapter
*
adapter
)
{
struct
t3cdev
*
tdev
=
&
adapter
->
tdev
;
...
...
@@ -1257,7 +1276,7 @@ void __devinit cxgb3_adapter_ofld(struct adapter *adapter)
cxgb3_set_dummy_ops
(
tdev
);
tdev
->
send
=
t3_offload_tx
;
tdev
->
ctl
=
cxgb_offload_ctl
;
tdev
->
type
=
adap
ter
->
params
.
rev
==
0
?
T3A
:
T3B
;
tdev
->
type
=
adap
2type
(
adapter
)
;
register_tdev
(
tdev
);
}
...
...
drivers/net/cxgb3/t3cdev.h
浏览文件 @
332e4af8
...
...
@@ -45,7 +45,8 @@ struct cxgb3_client;
enum
t3ctype
{
T3A
=
0
,
T3B
T3B
,
T3C
,
};
struct
t3cdev
{
...
...
drivers/net/dl2k.c
浏览文件 @
332e4af8
...
...
@@ -1753,7 +1753,7 @@ rio_close (struct net_device *dev)
/* Stop Tx and Rx logics */
writel
(
TxDisable
|
RxDisable
|
StatsDisable
,
ioaddr
+
MACCtrl
);
synchronize_irq
(
dev
->
irq
);
free_irq
(
dev
->
irq
,
dev
);
del_timer_sync
(
&
np
->
timer
);
...
...
drivers/net/dm9000.c
浏览文件 @
332e4af8
此差异已折叠。
点击以展开。
drivers/net/dm9000.h
浏览文件 @
332e4af8
...
...
@@ -45,6 +45,9 @@
#define DM9000_CHIPR 0x2C
#define DM9000_SMCR 0x2F
#define CHIPR_DM9000A 0x19
#define CHIPR_DM9000B 0x1B
#define DM9000_MRCMDX 0xF0
#define DM9000_MRCMD 0xF2
#define DM9000_MRRL 0xF4
...
...
@@ -131,5 +134,13 @@
#define DM9000_PKT_RDY 0x01
/* Packet ready to receive */
#define DM9000_PKT_MAX 1536
/* Received packet max size */
/* DM9000A / DM9000B definitions */
#define IMR_LNKCHNG (1<<5)
#define IMR_UNDERRUN (1<<4)
#define ISR_LNKCHNG (1<<5)
#define ISR_UNDERRUN (1<<4)
#endif
/* _DM9000X_H_ */
drivers/net/e1000/e1000_main.c
浏览文件 @
332e4af8
...
...
@@ -47,12 +47,6 @@ static const char e1000_copyright[] = "Copyright (c) 1999-2006 Intel Corporation
* Macro expands to...
* {PCI_DEVICE(PCI_VENDOR_ID_INTEL, device_id)}
*/
#ifdef CONFIG_E1000E_ENABLED
#define PCIE(x)
#else
#define PCIE(x) x,
#endif
static
struct
pci_device_id
e1000_pci_tbl
[]
=
{
INTEL_E1000_ETHERNET_DEVICE
(
0x1000
),
INTEL_E1000_ETHERNET_DEVICE
(
0x1001
),
...
...
@@ -79,14 +73,6 @@ static struct pci_device_id e1000_pci_tbl[] = {
INTEL_E1000_ETHERNET_DEVICE
(
0x1026
),
INTEL_E1000_ETHERNET_DEVICE
(
0x1027
),
INTEL_E1000_ETHERNET_DEVICE
(
0x1028
),
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x1049
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x104A
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x104B
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x104C
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x104D
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x105E
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x105F
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x1060
))
INTEL_E1000_ETHERNET_DEVICE
(
0x1075
),
INTEL_E1000_ETHERNET_DEVICE
(
0x1076
),
INTEL_E1000_ETHERNET_DEVICE
(
0x1077
),
...
...
@@ -95,28 +81,9 @@ PCIE( INTEL_E1000_ETHERNET_DEVICE(0x1060))
INTEL_E1000_ETHERNET_DEVICE
(
0x107A
),
INTEL_E1000_ETHERNET_DEVICE
(
0x107B
),
INTEL_E1000_ETHERNET_DEVICE
(
0x107C
),
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x107D
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x107E
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x107F
))
INTEL_E1000_ETHERNET_DEVICE
(
0x108A
),
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x108B
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x108C
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x1096
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x1098
))
INTEL_E1000_ETHERNET_DEVICE
(
0x1099
),
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x109A
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x10A4
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x10A5
))
INTEL_E1000_ETHERNET_DEVICE
(
0x10B5
),
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x10B9
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x10BA
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x10BB
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x10BC
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x10C4
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x10C5
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x10D5
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x10D9
))
PCIE
(
INTEL_E1000_ETHERNET_DEVICE
(
0x10DA
))
/* required last entry */
{
0
,}
};
...
...
@@ -5284,7 +5251,6 @@ e1000_netpoll(struct net_device *netdev)
disable_irq
(
adapter
->
pdev
->
irq
);
e1000_intr
(
adapter
->
pdev
->
irq
,
netdev
);
e1000_clean_tx_irq
(
adapter
,
adapter
->
tx_ring
);
#ifndef CONFIG_E1000_NAPI
adapter
->
clean_rx
(
adapter
,
adapter
->
rx_ring
);
#endif
...
...
drivers/net/e1000e/e1000.h
浏览文件 @
332e4af8
...
...
@@ -283,6 +283,10 @@ struct e1000_adapter {
unsigned
long
led_status
;
unsigned
int
flags
;
/* for ioport free */
int
bars
;
int
need_ioport
;
};
struct
e1000_info
{
...
...
drivers/net/e1000e/netdev.c
浏览文件 @
332e4af8
...
...
@@ -4003,7 +4003,11 @@ static int e1000_resume(struct pci_dev *pdev)
pci_set_power_state
(
pdev
,
PCI_D0
);
pci_restore_state
(
pdev
);
e1000e_disable_l1aspm
(
pdev
);
err
=
pci_enable_device
(
pdev
);
if
(
adapter
->
need_ioport
)
err
=
pci_enable_device
(
pdev
);
else
err
=
pci_enable_device_mem
(
pdev
);
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"Cannot enable PCI device from suspend
\n
"
);
...
...
@@ -4104,9 +4108,14 @@ static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev)
struct
net_device
*
netdev
=
pci_get_drvdata
(
pdev
);
struct
e1000_adapter
*
adapter
=
netdev_priv
(
netdev
);
struct
e1000_hw
*
hw
=
&
adapter
->
hw
;
int
err
;
e1000e_disable_l1aspm
(
pdev
);
if
(
pci_enable_device
(
pdev
))
{
if
(
adapter
->
need_ioport
)
err
=
pci_enable_device
(
pdev
);
else
err
=
pci_enable_device_mem
(
pdev
);
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"Cannot re-enable PCI device after reset.
\n
"
);
return
PCI_ERS_RESULT_DISCONNECT
;
...
...
@@ -4184,6 +4193,21 @@ static void e1000_print_device_info(struct e1000_adapter *adapter)
(
pba_num
>>
8
),
(
pba_num
&
0xff
));
}
/**
* e1000e_is_need_ioport - determine if an adapter needs ioport resources or not
* @pdev: PCI device information struct
*
* Returns true if an adapters needs ioport resources
**/
static
int
e1000e_is_need_ioport
(
struct
pci_dev
*
pdev
)
{
switch
(
pdev
->
device
)
{
/* Currently there are no adapters that need ioport resources */
default:
return
false
;
}
}
/**
* e1000_probe - Device Initialization Routine
* @pdev: PCI device information struct
...
...
@@ -4209,9 +4233,19 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
int
i
,
err
,
pci_using_dac
;
u16
eeprom_data
=
0
;
u16
eeprom_apme_mask
=
E1000_EEPROM_APME
;
int
bars
,
need_ioport
;
e1000e_disable_l1aspm
(
pdev
);
err
=
pci_enable_device
(
pdev
);
/* do not allocate ioport bars when not needed */
need_ioport
=
e1000e_is_need_ioport
(
pdev
);
if
(
need_ioport
)
{
bars
=
pci_select_bars
(
pdev
,
IORESOURCE_MEM
|
IORESOURCE_IO
);
err
=
pci_enable_device
(
pdev
);
}
else
{
bars
=
pci_select_bars
(
pdev
,
IORESOURCE_MEM
);
err
=
pci_enable_device_mem
(
pdev
);
}
if
(
err
)
return
err
;
...
...
@@ -4234,7 +4268,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
}
}
err
=
pci_request_
regions
(
pdev
,
e1000e_driver_name
);
err
=
pci_request_
selected_regions
(
pdev
,
bars
,
e1000e_driver_name
);
if
(
err
)
goto
err_pci_reg
;
...
...
@@ -4259,6 +4293,8 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
adapter
->
hw
.
adapter
=
adapter
;
adapter
->
hw
.
mac
.
type
=
ei
->
mac
;
adapter
->
msg_enable
=
(
1
<<
NETIF_MSG_DRV
|
NETIF_MSG_PROBE
)
-
1
;
adapter
->
bars
=
bars
;
adapter
->
need_ioport
=
need_ioport
;
mmio_start
=
pci_resource_start
(
pdev
,
0
);
mmio_len
=
pci_resource_len
(
pdev
,
0
);
...
...
@@ -4498,7 +4534,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
err_ioremap:
free_netdev
(
netdev
);
err_alloc_etherdev:
pci_release_
regions
(
pdev
);
pci_release_
selected_regions
(
pdev
,
bars
);
err_pci_reg:
err_dma:
pci_disable_device
(
pdev
);
...
...
@@ -4546,7 +4582,7 @@ static void __devexit e1000_remove(struct pci_dev *pdev)
iounmap
(
adapter
->
hw
.
hw_addr
);
if
(
adapter
->
hw
.
flash_address
)
iounmap
(
adapter
->
hw
.
flash_address
);
pci_release_
regions
(
pdev
);
pci_release_
selected_regions
(
pdev
,
adapter
->
bars
);
free_netdev
(
netdev
);
...
...
drivers/net/fealnx.c
浏览文件 @
332e4af8
...
...
@@ -90,6 +90,7 @@ static int full_duplex[MAX_UNITS] = { -1, -1, -1, -1, -1, -1, -1, -1 };
#include <asm/processor.h>
/* Processor type for cache alignment. */
#include <asm/io.h>
#include <asm/uaccess.h>
#include <asm/byteorder.h>
/* These identify the driver base version and may not be removed. */
static
char
version
[]
=
...
...
@@ -861,40 +862,20 @@ static int netdev_open(struct net_device *dev)
Wait the specified 50 PCI cycles after a reset by initializing
Tx and Rx queues and the address filter list.
FIXME (Ueimor): optimistic for alpha + posted writes ? */
#if defined(__powerpc__) || defined(__sparc__)
// 89/9/1 modify,
// np->bcrvalue=0x04 | 0x0x38; /* big-endian, 256 burst length */
np
->
bcrvalue
=
0x04
|
0x10
;
/* big-endian, tx 8 burst length */
np
->
crvalue
=
0xe00
;
/* rx 128 burst length */
#elif defined(__alpha__) || defined(__x86_64__)
// 89/9/1 modify,
// np->bcrvalue=0x38; /* little-endian, 256 burst length */
np
->
bcrvalue
=
0x10
;
/* little-endian, 8 burst length */
np
->
crvalue
=
0xe00
;
/* rx 128 burst length */
#elif defined(__i386__)
#if defined(MODULE)
// 89/9/1 modify,
// np->bcrvalue=0x38; /* little-endian, 256 burst length */
np
->
bcrvalue
=
0x10
;
/* little-endian, 8 burst length */
np
->
crvalue
=
0xe00
;
/* rx 128 burst length */
#else
/* When not a module we can work around broken '486 PCI boards. */
#define x86 boot_cpu_data.x86
// 89/9/1 modify,
// np->bcrvalue=(x86 <= 4 ? 0x10 : 0x38);
np
->
bcrvalue
=
0x10
;
np
->
crvalue
=
(
x86
<=
4
?
0xa00
:
0xe00
);
if
(
x86
<=
4
)
printk
(
KERN_INFO
"%s: This is a 386/486 PCI system, setting burst "
"length to %x.
\n
"
,
dev
->
name
,
(
x86
<=
4
?
0x10
:
0x38
));
#ifdef __BIG_ENDIAN
np
->
bcrvalue
|=
0x04
;
/* big-endian */
#endif
#else
// 89/9/1 modify,
// np->bcrvalue=0x38;
np
->
bcrvalue
=
0x10
;
np
->
crvalue
=
0xe00
;
/* rx 128 burst length */
#warning Processor architecture undefined!
#if defined(__i386__) && !defined(MODULE)
if
(
boot_cpu_data
.
x86
<=
4
)
np
->
crvalue
=
0xa00
;
else
#endif
np
->
crvalue
=
0xe00
;
/* rx 128 burst length */
// 89/12/29 add,
// 90/1/16 modify,
// np->imrvalue=FBE|TUNF|CNTOVF|RBU|TI|RI;
...
...
drivers/net/forcedeth.c
浏览文件 @
332e4af8
...
...
@@ -5559,6 +5559,11 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
/* set mac address */
nv_copy_mac_to_hw
(
dev
);
/* Workaround current PCI init glitch: wakeup bits aren't
* being set from PCI PM capability.
*/
device_init_wakeup
(
&
pci_dev
->
dev
,
1
);
/* disable WOL */
writel
(
0
,
base
+
NvRegWakeUpFlags
);
np
->
wolenabled
=
0
;
...
...
drivers/net/igb/igb.h
浏览文件 @
332e4af8
...
...
@@ -271,6 +271,10 @@ struct igb_adapter {
unsigned
int
msi_enabled
;
u32
eeprom_wol
;
/* for ioport free */
int
bars
;
int
need_ioport
;
};
enum
e1000_state_t
{
...
...
drivers/net/igb/igb_main.c
浏览文件 @
332e4af8
...
...
@@ -820,6 +820,21 @@ void igb_reset(struct igb_adapter *adapter)
adapter
->
hw
.
phy
.
ops
.
get_phy_info
(
&
adapter
->
hw
);
}
/**
* igb_is_need_ioport - determine if an adapter needs ioport resources or not
* @pdev: PCI device information struct
*
* Returns true if an adapter needs ioport resources
**/
static
int
igb_is_need_ioport
(
struct
pci_dev
*
pdev
)
{
switch
(
pdev
->
device
)
{
/* Currently there are no adapters that need ioport resources */
default:
return
false
;
}
}
/**
* igb_probe - Device Initialization Routine
* @pdev: PCI device information struct
...
...
@@ -844,8 +859,17 @@ static int __devinit igb_probe(struct pci_dev *pdev,
u16
eeprom_data
=
0
;
u16
eeprom_apme_mask
=
IGB_EEPROM_APME
;
u32
part_num
;
int
bars
,
need_ioport
;
err
=
pci_enable_device
(
pdev
);
/* do not allocate ioport bars when not needed */
need_ioport
=
igb_is_need_ioport
(
pdev
);
if
(
need_ioport
)
{
bars
=
pci_select_bars
(
pdev
,
IORESOURCE_MEM
|
IORESOURCE_IO
);
err
=
pci_enable_device
(
pdev
);
}
else
{
bars
=
pci_select_bars
(
pdev
,
IORESOURCE_MEM
);
err
=
pci_enable_device_mem
(
pdev
);
}
if
(
err
)
return
err
;
...
...
@@ -867,7 +891,7 @@ static int __devinit igb_probe(struct pci_dev *pdev,
}
}
err
=
pci_request_
regions
(
pdev
,
igb_driver_name
);
err
=
pci_request_
selected_regions
(
pdev
,
bars
,
igb_driver_name
);
if
(
err
)
goto
err_pci_reg
;
...
...
@@ -888,6 +912,8 @@ static int __devinit igb_probe(struct pci_dev *pdev,
hw
=
&
adapter
->
hw
;
hw
->
back
=
adapter
;
adapter
->
msg_enable
=
NETIF_MSG_DRV
|
NETIF_MSG_PROBE
;
adapter
->
bars
=
bars
;
adapter
->
need_ioport
=
need_ioport
;
mmio_start
=
pci_resource_start
(
pdev
,
0
);
mmio_len
=
pci_resource_len
(
pdev
,
0
);
...
...
@@ -1128,7 +1154,7 @@ static int __devinit igb_probe(struct pci_dev *pdev,
err_ioremap:
free_netdev
(
netdev
);
err_alloc_etherdev:
pci_release_
regions
(
pdev
);
pci_release_
selected_regions
(
pdev
,
bars
);
err_pci_reg:
err_dma:
pci_disable_device
(
pdev
);
...
...
@@ -1175,7 +1201,7 @@ static void __devexit igb_remove(struct pci_dev *pdev)
iounmap
(
adapter
->
hw
.
hw_addr
);
if
(
adapter
->
hw
.
flash_address
)
iounmap
(
adapter
->
hw
.
flash_address
);
pci_release_
regions
(
pdev
);
pci_release_
selected_regions
(
pdev
,
adapter
->
bars
);
free_netdev
(
netdev
);
...
...
@@ -3976,7 +4002,11 @@ static int igb_resume(struct pci_dev *pdev)
pci_set_power_state
(
pdev
,
PCI_D0
);
pci_restore_state
(
pdev
);
err
=
pci_enable_device
(
pdev
);
if
(
adapter
->
need_ioport
)
err
=
pci_enable_device
(
pdev
);
else
err
=
pci_enable_device_mem
(
pdev
);
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"igb: Cannot enable PCI device from suspend
\n
"
);
...
...
@@ -4079,8 +4109,13 @@ static pci_ers_result_t igb_io_slot_reset(struct pci_dev *pdev)
struct
net_device
*
netdev
=
pci_get_drvdata
(
pdev
);
struct
igb_adapter
*
adapter
=
netdev_priv
(
netdev
);
struct
e1000_hw
*
hw
=
&
adapter
->
hw
;
int
err
;
if
(
pci_enable_device
(
pdev
))
{
if
(
adapter
->
need_ioport
)
err
=
pci_enable_device
(
pdev
);
else
err
=
pci_enable_device_mem
(
pdev
);
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"Cannot re-enable PCI device after reset.
\n
"
);
return
PCI_ERS_RESULT_DISCONNECT
;
...
...
drivers/net/ixgbe/ixgbe.h
浏览文件 @
332e4af8
...
...
@@ -32,6 +32,7 @@
#include <linux/types.h>
#include <linux/pci.h>
#include <linux/netdevice.h>
#include <linux/inet_lro.h>
#include "ixgbe_type.h"
#include "ixgbe_common.h"
...
...
@@ -100,6 +101,9 @@
#define IXGBE_TX_FLAGS_VLAN_MASK 0xffff0000
#define IXGBE_TX_FLAGS_VLAN_SHIFT 16
#define IXGBE_MAX_LRO_DESCRIPTORS 8
#define IXGBE_MAX_LRO_AGGREGATE 32
/* wrapper around a pointer to a socket buffer,
* so a DMA handle can be stored along with the buffer */
struct
ixgbe_tx_buffer
{
...
...
@@ -150,6 +154,8 @@ struct ixgbe_ring {
/* cpu for tx queue */
int
cpu
;
#endif
struct
net_lro_mgr
lro_mgr
;
bool
lro_used
;
struct
ixgbe_queue_stats
stats
;
u8
v_idx
;
/* maps directly to the index for this ring in the hardware
* vector array, can also be used for finding the bit in EICR
...
...
@@ -287,6 +293,9 @@ struct ixgbe_adapter {
unsigned
long
state
;
u64
tx_busy
;
u64
lro_aggregated
;
u64
lro_flushed
;
u64
lro_no_desc
;
};
enum
ixbge_state_t
{
...
...
drivers/net/ixgbe/ixgbe_ethtool.c
浏览文件 @
332e4af8
...
...
@@ -90,6 +90,8 @@ static struct ixgbe_stats ixgbe_gstrings_stats[] = {
{
"rx_header_split"
,
IXGBE_STAT
(
rx_hdr_split
)},
{
"alloc_rx_page_failed"
,
IXGBE_STAT
(
alloc_rx_page_failed
)},
{
"alloc_rx_buff_failed"
,
IXGBE_STAT
(
alloc_rx_buff_failed
)},
{
"lro_aggregated"
,
IXGBE_STAT
(
lro_aggregated
)},
{
"lro_flushed"
,
IXGBE_STAT
(
lro_flushed
)},
};
#define IXGBE_QUEUE_STATS_LEN \
...
...
@@ -787,6 +789,7 @@ static void ixgbe_get_ethtool_stats(struct net_device *netdev,
int
stat_count
=
sizeof
(
struct
ixgbe_queue_stats
)
/
sizeof
(
u64
);
int
j
,
k
;
int
i
;
u64
aggregated
=
0
,
flushed
=
0
,
no_desc
=
0
;
ixgbe_update_stats
(
adapter
);
for
(
i
=
0
;
i
<
IXGBE_GLOBAL_STATS_LEN
;
i
++
)
{
...
...
@@ -801,11 +804,17 @@ static void ixgbe_get_ethtool_stats(struct net_device *netdev,
i
+=
k
;
}
for
(
j
=
0
;
j
<
adapter
->
num_rx_queues
;
j
++
)
{
aggregated
+=
adapter
->
rx_ring
[
j
].
lro_mgr
.
stats
.
aggregated
;
flushed
+=
adapter
->
rx_ring
[
j
].
lro_mgr
.
stats
.
flushed
;
no_desc
+=
adapter
->
rx_ring
[
j
].
lro_mgr
.
stats
.
no_desc
;
queue_stat
=
(
u64
*
)
&
adapter
->
rx_ring
[
j
].
stats
;
for
(
k
=
0
;
k
<
stat_count
;
k
++
)
data
[
i
+
k
]
=
queue_stat
[
k
];
i
+=
k
;
}
adapter
->
lro_aggregated
=
aggregated
;
adapter
->
lro_flushed
=
flushed
;
adapter
->
lro_no_desc
=
no_desc
;
}
static
void
ixgbe_get_strings
(
struct
net_device
*
netdev
,
u32
stringset
,
...
...
@@ -973,6 +982,8 @@ static struct ethtool_ops ixgbe_ethtool_ops = {
.
get_ethtool_stats
=
ixgbe_get_ethtool_stats
,
.
get_coalesce
=
ixgbe_get_coalesce
,
.
set_coalesce
=
ixgbe_set_coalesce
,
.
get_flags
=
ethtool_op_get_flags
,
.
set_flags
=
ethtool_op_set_flags
,
};
void
ixgbe_set_ethtool_ops
(
struct
net_device
*
netdev
)
...
...
drivers/net/ixgbe/ixgbe_main.c
浏览文件 @
332e4af8
...
...
@@ -389,24 +389,39 @@ static int __ixgbe_notify_dca(struct device *dev, void *data)
* ixgbe_receive_skb - Send a completed packet up the stack
* @adapter: board private structure
* @skb: packet to send up
* @is_vlan: packet has a VLAN tag
* @tag: VLAN tag from descriptor
* @status: hardware indication of status of receive
* @rx_ring: rx descriptor ring (for a specific queue) to setup
* @rx_desc: rx descriptor
**/
static
void
ixgbe_receive_skb
(
struct
ixgbe_adapter
*
adapter
,
struct
sk_buff
*
skb
,
bool
is_vlan
,
u16
tag
)
struct
sk_buff
*
skb
,
u8
status
,
struct
ixgbe_ring
*
ring
,
union
ixgbe_adv_rx_desc
*
rx_desc
)
{
if
(
!
(
adapter
->
flags
&
IXGBE_FLAG_IN_NETPOLL
))
{
if
(
adapter
->
vlgrp
&&
is_vlan
)
vlan_hwaccel_receive_skb
(
skb
,
adapter
->
vlgrp
,
tag
);
else
netif_receive_skb
(
skb
);
}
else
{
bool
is_vlan
=
(
status
&
IXGBE_RXD_STAT_VP
);
u16
tag
=
le16_to_cpu
(
rx_desc
->
wb
.
upper
.
vlan
);
if
(
adapter
->
netdev
->
features
&
NETIF_F_LRO
&&
skb
->
ip_summed
==
CHECKSUM_UNNECESSARY
)
{
if
(
adapter
->
vlgrp
&&
is_vlan
)
vlan_hwaccel_rx
(
skb
,
adapter
->
vlgrp
,
tag
);
lro_vlan_hwaccel_receive_skb
(
&
ring
->
lro_mgr
,
skb
,
adapter
->
vlgrp
,
tag
,
rx_desc
);
else
netif_rx
(
skb
);
lro_receive_skb
(
&
ring
->
lro_mgr
,
skb
,
rx_desc
);
ring
->
lro_used
=
true
;
}
else
{
if
(
!
(
adapter
->
flags
&
IXGBE_FLAG_IN_NETPOLL
))
{
if
(
adapter
->
vlgrp
&&
is_vlan
)
vlan_hwaccel_receive_skb
(
skb
,
adapter
->
vlgrp
,
tag
);
else
netif_receive_skb
(
skb
);
}
else
{
if
(
adapter
->
vlgrp
&&
is_vlan
)
vlan_hwaccel_rx
(
skb
,
adapter
->
vlgrp
,
tag
);
else
netif_rx
(
skb
);
}
}
}
...
...
@@ -546,8 +561,8 @@ static bool ixgbe_clean_rx_irq(struct ixgbe_adapter *adapter,
struct
sk_buff
*
skb
;
unsigned
int
i
;
u32
upper_len
,
len
,
staterr
;
u16
hdr_info
,
vlan_tag
;
bool
is_vlan
,
cleaned
=
false
;
u16
hdr_info
;
bool
cleaned
=
false
;
int
cleaned_count
=
0
;
unsigned
int
total_rx_bytes
=
0
,
total_rx_packets
=
0
;
...
...
@@ -556,8 +571,6 @@ static bool ixgbe_clean_rx_irq(struct ixgbe_adapter *adapter,
rx_desc
=
IXGBE_RX_DESC_ADV
(
*
rx_ring
,
i
);
staterr
=
le32_to_cpu
(
rx_desc
->
wb
.
upper
.
status_error
);
rx_buffer_info
=
&
rx_ring
->
rx_buffer_info
[
i
];
is_vlan
=
(
staterr
&
IXGBE_RXD_STAT_VP
);
vlan_tag
=
le16_to_cpu
(
rx_desc
->
wb
.
upper
.
vlan
);
while
(
staterr
&
IXGBE_RXD_STAT_DD
)
{
if
(
*
work_done
>=
work_to_do
)
...
...
@@ -635,7 +648,7 @@ static bool ixgbe_clean_rx_irq(struct ixgbe_adapter *adapter,
total_rx_packets
++
;
skb
->
protocol
=
eth_type_trans
(
skb
,
netdev
);
ixgbe_receive_skb
(
adapter
,
skb
,
is_vlan
,
vlan_tag
);
ixgbe_receive_skb
(
adapter
,
skb
,
staterr
,
rx_ring
,
rx_desc
);
netdev
->
last_rx
=
jiffies
;
next_desc:
...
...
@@ -652,8 +665,11 @@ static bool ixgbe_clean_rx_irq(struct ixgbe_adapter *adapter,
rx_buffer_info
=
next_buffer
;
staterr
=
le32_to_cpu
(
rx_desc
->
wb
.
upper
.
status_error
);
is_vlan
=
(
staterr
&
IXGBE_RXD_STAT_VP
);
vlan_tag
=
le16_to_cpu
(
rx_desc
->
wb
.
upper
.
vlan
);
}
if
(
rx_ring
->
lro_used
)
{
lro_flush_all
(
&
rx_ring
->
lro_mgr
);
rx_ring
->
lro_used
=
false
;
}
rx_ring
->
next_to_clean
=
i
;
...
...
@@ -1381,6 +1397,33 @@ static void ixgbe_configure_tx(struct ixgbe_adapter *adapter)
(((S) & (PAGE_SIZE - 1)) ? 1 : 0))
#define IXGBE_SRRCTL_BSIZEHDRSIZE_SHIFT 2
/**
* ixgbe_get_skb_hdr - helper function for LRO header processing
* @skb: pointer to sk_buff to be added to LRO packet
* @iphdr: pointer to tcp header structure
* @tcph: pointer to tcp header structure
* @hdr_flags: pointer to header flags
* @priv: private data
**/
static
int
ixgbe_get_skb_hdr
(
struct
sk_buff
*
skb
,
void
**
iphdr
,
void
**
tcph
,
u64
*
hdr_flags
,
void
*
priv
)
{
union
ixgbe_adv_rx_desc
*
rx_desc
=
priv
;
/* Verify that this is a valid IPv4 TCP packet */
if
(
!
(
rx_desc
->
wb
.
lower
.
lo_dword
.
pkt_info
&
(
IXGBE_RXDADV_PKTTYPE_IPV4
|
IXGBE_RXDADV_PKTTYPE_TCP
)))
return
-
1
;
/* Set network headers */
skb_reset_network_header
(
skb
);
skb_set_transport_header
(
skb
,
ip_hdrlen
(
skb
));
*
iphdr
=
ip_hdr
(
skb
);
*
tcph
=
tcp_hdr
(
skb
);
*
hdr_flags
=
LRO_IPV4
|
LRO_TCP
;
return
0
;
}
/**
* ixgbe_configure_rx - Configure 8254x Receive Unit after Reset
* @adapter: board private structure
...
...
@@ -1470,6 +1513,17 @@ static void ixgbe_configure_rx(struct ixgbe_adapter *adapter)
adapter
->
rx_ring
[
i
].
tail
=
IXGBE_RDT
(
i
);
}
/* Intitial LRO Settings */
adapter
->
rx_ring
[
i
].
lro_mgr
.
max_aggr
=
IXGBE_MAX_LRO_AGGREGATE
;
adapter
->
rx_ring
[
i
].
lro_mgr
.
max_desc
=
IXGBE_MAX_LRO_DESCRIPTORS
;
adapter
->
rx_ring
[
i
].
lro_mgr
.
get_skb_header
=
ixgbe_get_skb_hdr
;
adapter
->
rx_ring
[
i
].
lro_mgr
.
features
=
LRO_F_EXTRACT_VLAN_ID
;
if
(
!
(
adapter
->
flags
&
IXGBE_FLAG_IN_NETPOLL
))
adapter
->
rx_ring
[
i
].
lro_mgr
.
features
|=
LRO_F_NAPI
;
adapter
->
rx_ring
[
i
].
lro_mgr
.
dev
=
adapter
->
netdev
;
adapter
->
rx_ring
[
i
].
lro_mgr
.
ip_summed
=
CHECKSUM_UNNECESSARY
;
adapter
->
rx_ring
[
i
].
lro_mgr
.
ip_summed_aggr
=
CHECKSUM_UNNECESSARY
;
if
(
adapter
->
flags
&
IXGBE_FLAG_RSS_ENABLED
)
{
/* Fill out redirection table */
for
(
i
=
0
,
j
=
0
;
i
<
128
;
i
++
,
j
++
)
{
...
...
@@ -2490,12 +2544,18 @@ int ixgbe_setup_rx_resources(struct ixgbe_adapter *adapter,
struct
pci_dev
*
pdev
=
adapter
->
pdev
;
int
size
;
size
=
sizeof
(
struct
net_lro_desc
)
*
IXGBE_MAX_LRO_DESCRIPTORS
;
rxdr
->
lro_mgr
.
lro_arr
=
vmalloc
(
size
);
if
(
!
rxdr
->
lro_mgr
.
lro_arr
)
return
-
ENOMEM
;
memset
(
rxdr
->
lro_mgr
.
lro_arr
,
0
,
size
);
size
=
sizeof
(
struct
ixgbe_rx_buffer
)
*
rxdr
->
count
;
rxdr
->
rx_buffer_info
=
vmalloc
(
size
);
if
(
!
rxdr
->
rx_buffer_info
)
{
DPRINTK
(
PROBE
,
ERR
,
"vmalloc allocation failed for the rx desc ring
\n
"
);
return
-
ENOMEM
;
goto
alloc_failed
;
}
memset
(
rxdr
->
rx_buffer_info
,
0
,
size
);
...
...
@@ -2509,13 +2569,18 @@ int ixgbe_setup_rx_resources(struct ixgbe_adapter *adapter,
DPRINTK
(
PROBE
,
ERR
,
"Memory allocation failed for the rx desc ring
\n
"
);
vfree
(
rxdr
->
rx_buffer_info
);
return
-
ENOMEM
;
goto
alloc_failed
;
}
rxdr
->
next_to_clean
=
0
;
rxdr
->
next_to_use
=
0
;
return
0
;
alloc_failed:
vfree
(
rxdr
->
lro_mgr
.
lro_arr
);
rxdr
->
lro_mgr
.
lro_arr
=
NULL
;
return
-
ENOMEM
;
}
/**
...
...
@@ -2566,6 +2631,9 @@ static void ixgbe_free_rx_resources(struct ixgbe_adapter *adapter,
{
struct
pci_dev
*
pdev
=
adapter
->
pdev
;
vfree
(
rx_ring
->
lro_mgr
.
lro_arr
);
rx_ring
->
lro_mgr
.
lro_arr
=
NULL
;
ixgbe_clean_rx_ring
(
adapter
,
rx_ring
);
vfree
(
rx_ring
->
rx_buffer_info
);
...
...
@@ -3518,6 +3586,7 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
NETIF_F_HW_VLAN_RX
|
NETIF_F_HW_VLAN_FILTER
;
netdev
->
features
|=
NETIF_F_LRO
;
netdev
->
features
|=
NETIF_F_TSO
;
netdev
->
features
|=
NETIF_F_TSO6
;
...
...
drivers/net/pci-skeleton.c
浏览文件 @
332e4af8
...
...
@@ -1739,7 +1739,6 @@ static int netdrv_close (struct net_device *dev)
spin_unlock_irqrestore
(
&
tp
->
lock
,
flags
);
synchronize_irq
(
dev
->
irq
);
free_irq
(
dev
->
irq
,
dev
);
netdrv_tx_clear
(
dev
);
...
...
drivers/net/sh_eth.c
浏览文件 @
332e4af8
...
...
@@ -322,7 +322,7 @@ static int sh_eth_dev_init(struct net_device *ndev)
ctrl_outl
((
FIFO_SIZE_T
|
FIFO_SIZE_R
),
ioaddr
+
FDR
);
ctrl_outl
(
0
,
ioaddr
+
TFTR
);
ctrl_outl
(
RMCR_RST
,
ioaddr
+
RMCR
);
ctrl_outl
(
0
,
ioaddr
+
RMCR
);
rx_int_var
=
mdp
->
rx_int_var
=
DESC_I_RINT8
|
DESC_I_RINT5
;
tx_int_var
=
mdp
->
tx_int_var
=
DESC_I_TINT2
;
...
...
@@ -994,7 +994,7 @@ static int sh_mdio_init(struct net_device *ndev, int id)
/* Hook up MII support for ethtool */
mdp
->
mii_bus
->
name
=
"sh_mii"
;
mdp
->
mii_bus
->
dev
=
&
ndev
->
dev
;
mdp
->
mii_bus
->
id
=
id
;
mdp
->
mii_bus
->
id
[
0
]
=
id
;
/* PHY IRQ */
mdp
->
mii_bus
->
irq
=
kmalloc
(
sizeof
(
int
)
*
PHY_MAX_ADDR
,
GFP_KERNEL
);
...
...
drivers/net/sh_eth.h
浏览文件 @
332e4af8
...
...
@@ -40,8 +40,6 @@
#define PKT_BUF_SZ 1538
/* Chip Base Address */
#define SH_ETH0_BASE 0xA7000000
#define SH_ETH1_BASE 0xA7000400
#define SH_TSU_ADDR 0xA7000804
/* Chip Registers */
...
...
@@ -462,3 +460,5 @@ static void swaps(char *src, int len)
*
p
=
swab32
(
*
p
);
#endif
}
#endif
drivers/net/tsi108_eth.c
浏览文件 @
332e4af8
...
...
@@ -1437,7 +1437,6 @@ static int tsi108_close(struct net_device *dev)
dev_kfree_skb
(
skb
);
}
synchronize_irq
(
data
->
irq_num
);
free_irq
(
data
->
irq_num
,
dev
);
/* Discard the RX ring. */
...
...
drivers/net/tulip/21142.c
浏览文件 @
332e4af8
/*
drivers/net/tulip/21142.c
Maintained by Valerie Henson <val_henson@linux.intel.com>
Copyright 2000,2001 The Linux Kernel Team
Written/copyright 1994-2001 by Donald Becker.
...
...
@@ -9,9 +8,8 @@
of the GNU General Public License, incorporated herein by reference.
Please refer to Documentation/DocBook/tulip-user.{pdf,ps,html}
for more information on this driver, or visit the project
Web page at http://sourceforge.net/projects/tulip/
for more information on this driver.
Please submit bugs to http://bugzilla.kernel.org/ .
*/
#include <linux/delay.h>
...
...
drivers/net/tulip/de2104x.c
浏览文件 @
332e4af8
...
...
@@ -124,8 +124,6 @@ MODULE_PARM_DESC (rx_copybreak, "de2104x Breakpoint at which Rx packets are copi
/* Time in jiffies before concluding the transmitter is hung. */
#define TX_TIMEOUT (6*HZ)
#define DE_UNALIGNED_16(a) (u16)(get_unaligned((u16 *)(a)))
/* This is a mysterious value that can be written to CSR11 in the 21040 (only)
to support a pre-NWay full-duplex signaling mechanism using short frames.
No one knows what it should be, but if left at its default value some
...
...
@@ -1811,7 +1809,7 @@ static void __devinit de21041_get_srom_info (struct de_private *de)
goto
bad_srom
;
/* get default media type */
switch
(
DE_UNALIGNED_16
(
&
il
->
default_media
))
{
switch
(
get_unaligned
(
&
il
->
default_media
))
{
case
0x0001
:
de
->
media_type
=
DE_MEDIA_BNC
;
break
;
case
0x0002
:
de
->
media_type
=
DE_MEDIA_AUI
;
break
;
case
0x0204
:
de
->
media_type
=
DE_MEDIA_TP_FD
;
break
;
...
...
@@ -1875,9 +1873,9 @@ static void __devinit de21041_get_srom_info (struct de_private *de)
bufp
+=
sizeof
(
ib
->
opts
);
if
(
ib
->
opts
&
MediaCustomCSRs
)
{
de
->
media
[
idx
].
csr13
=
DE_UNALIGNED_16
(
&
ib
->
csr13
);
de
->
media
[
idx
].
csr14
=
DE_UNALIGNED_16
(
&
ib
->
csr14
);
de
->
media
[
idx
].
csr15
=
DE_UNALIGNED_16
(
&
ib
->
csr15
);
de
->
media
[
idx
].
csr13
=
get_unaligned
(
&
ib
->
csr13
);
de
->
media
[
idx
].
csr14
=
get_unaligned
(
&
ib
->
csr14
);
de
->
media
[
idx
].
csr15
=
get_unaligned
(
&
ib
->
csr15
);
bufp
+=
sizeof
(
ib
->
csr13
)
+
sizeof
(
ib
->
csr14
)
+
sizeof
(
ib
->
csr15
);
...
...
drivers/net/tulip/eeprom.c
浏览文件 @
332e4af8
/*
drivers/net/tulip/eeprom.c
Maintained by Valerie Henson <val_henson@linux.intel.com>
Copyright 2000,2001 The Linux Kernel Team
Written/copyright 1994-2001 by Donald Becker.
...
...
@@ -9,9 +8,8 @@
of the GNU General Public License, incorporated herein by reference.
Please refer to Documentation/DocBook/tulip-user.{pdf,ps,html}
for more information on this driver, or visit the project
Web page at http://sourceforge.net/projects/tulip/
for more information on this driver.
Please submit bug reports to http://bugzilla.kernel.org/.
*/
#include <linux/pci.h>
...
...
drivers/net/tulip/interrupt.c
浏览文件 @
332e4af8
/*
drivers/net/tulip/interrupt.c
Maintained by Valerie Henson <val_henson@linux.intel.com>
Copyright 2000,2001 The Linux Kernel Team
Written/copyright 1994-2001 by Donald Becker.
...
...
@@ -9,8 +8,8 @@
of the GNU General Public License, incorporated herein by reference.
Please refer to Documentation/DocBook/tulip-user.{pdf,ps,html}
for more information on this driver
, or visit the project
Web page at http://sourceforge.net/projects/tulip/
for more information on this driver
.
Please submit bugs to http://bugzilla.kernel.org/ .
*/
...
...
drivers/net/tulip/media.c
浏览文件 @
332e4af8
/*
drivers/net/tulip/media.c
Maintained by Valerie Henson <val_henson@linux.intel.com>
Copyright 2000,2001 The Linux Kernel Team
Written/copyright 1994-2001 by Donald Becker.
...
...
@@ -9,9 +8,9 @@
of the GNU General Public License, incorporated herein by reference.
Please refer to Documentation/DocBook/tulip-user.{pdf,ps,html}
for more information on this driver, or visit the project
Web page at http://sourceforge.net/projects/tulip/
for more information on this driver.
Please submit bugs to http://bugzilla.kernel.org/ .
*/
#include <linux/kernel.h>
...
...
drivers/net/tulip/pnic.c
浏览文件 @
332e4af8
/*
drivers/net/tulip/pnic.c
Maintained by Valerie Henson <val_henson@linux.intel.com>
Copyright 2000,2001 The Linux Kernel Team
Written/copyright 1994-2001 by Donald Becker.
...
...
@@ -9,9 +8,9 @@
of the GNU General Public License, incorporated herein by reference.
Please refer to Documentation/DocBook/tulip-user.{pdf,ps,html}
for more information on this driver, or visit the project
Web page at http://sourceforge.net/projects/tulip/
for more information on this driver.
Please submit bugs to http://bugzilla.kernel.org/ .
*/
#include <linux/kernel.h>
...
...
drivers/net/tulip/pnic2.c
浏览文件 @
332e4af8
/*
drivers/net/tulip/pnic2.c
Maintained by Valerie Henson <val_henson@linux.intel.com>
Copyright 2000,2001 The Linux Kernel Team
Written/copyright 1994-2001 by Donald Becker.
Modified to hep support PNIC_II by Kevin B. Hendricks
...
...
@@ -10,9 +9,9 @@
of the GNU General Public License, incorporated herein by reference.
Please refer to Documentation/DocBook/tulip-user.{pdf,ps,html}
for more information on this driver, or visit the project
Web page at http://sourceforge.net/projects/tulip/
for more information on this driver.
Please submit bugs to http://bugzilla.kernel.org/ .
*/
...
...
drivers/net/tulip/timer.c
浏览文件 @
332e4af8
/*
drivers/net/tulip/timer.c
Maintained by Valerie Henson <val_henson@linux.intel.com>
Copyright 2000,2001 The Linux Kernel Team
Written/copyright 1994-2001 by Donald Becker.
...
...
@@ -9,11 +8,12 @@
of the GNU General Public License, incorporated herein by reference.
Please refer to Documentation/DocBook/tulip-user.{pdf,ps,html}
for more information on this driver, or visit the project
Web page at http://sourceforge.net/projects/tulip/
for more information on this driver.
Please submit bugs to http://bugzilla.kernel.org/ .
*/
#include "tulip.h"
...
...
drivers/net/tulip/tulip.h
浏览文件 @
332e4af8
...
...
@@ -8,9 +8,9 @@
of the GNU General Public License, incorporated herein by reference.
Please refer to Documentation/DocBook/tulip-user.{pdf,ps,html}
for more information on this driver, or visit the project
Web page at http://sourceforge.net/projects/tulip/
for more information on this driver.
Please submit bugs to http://bugzilla.kernel.org/ .
*/
#ifndef __NET_TULIP_H__
...
...
drivers/net/tulip/tulip_core.c
浏览文件 @
332e4af8
/*
tulip_core.c: A DEC 21x4x-family ethernet driver for Linux. */
/*
tulip_core.c: A DEC 21x4x-family ethernet driver for Linux.
/*
Maintained by Valerie Henson <val_henson@linux.intel.com>
Copyright 2000,2001 The Linux Kernel Team
Written/copyright 1994-2001 by Donald Becker.
...
...
@@ -9,9 +7,9 @@
of the GNU General Public License, incorporated herein by reference.
Please refer to Documentation/DocBook/tulip-user.{pdf,ps,html}
for more information on this driver, or visit the project
Web page at http://sourceforge.net/projects/tulip/
for more information on this driver.
Please submit bugs to http://bugzilla.kernel.org/ .
*/
...
...
drivers/net/typhoon.c
浏览文件 @
332e4af8
...
...
@@ -334,8 +334,6 @@ enum state_values {
#define TYPHOON_RESET_TIMEOUT_NOSLEEP ((6 * 1000000) / TYPHOON_UDELAY)
#define TYPHOON_WAIT_TIMEOUT ((1000000 / 2) / TYPHOON_UDELAY)
#define typhoon_synchronize_irq(x) synchronize_irq(x)
#if defined(NETIF_F_TSO)
#define skb_tso_size(x) (skb_shinfo(x)->gso_size)
#define TSO_NUM_DESCRIPTORS 2
...
...
@@ -2143,7 +2141,6 @@ typhoon_close(struct net_device *dev)
printk
(
KERN_ERR
"%s: unable to stop runtime
\n
"
,
dev
->
name
);
/* Make sure there is no irq handler running on a different CPU. */
typhoon_synchronize_irq
(
dev
->
irq
);
free_irq
(
dev
->
irq
,
dev
);
typhoon_free_rx_rings
(
tp
);
...
...
drivers/net/usb/rndis_host.c
浏览文件 @
332e4af8
...
...
@@ -74,7 +74,7 @@ EXPORT_SYMBOL_GPL(rndis_status);
* Call context is likely probe(), before interface name is known,
* which is why we won't try to use it in the diagnostics.
*/
int
rndis_command
(
struct
usbnet
*
dev
,
struct
rndis_msg_hdr
*
buf
)
int
rndis_command
(
struct
usbnet
*
dev
,
struct
rndis_msg_hdr
*
buf
,
int
buflen
)
{
struct
cdc_state
*
info
=
(
void
*
)
&
dev
->
data
;
int
master_ifnum
;
...
...
@@ -121,7 +121,7 @@ int rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf)
USB_CDC_GET_ENCAPSULATED_RESPONSE
,
USB_DIR_IN
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
0
,
master_ifnum
,
buf
,
CONTROL_BUFFER_SIZE
,
buf
,
buflen
,
RNDIS_CONTROL_TIMEOUT_MS
);
if
(
likely
(
retval
>=
8
))
{
msg_len
=
le32_to_cpu
(
buf
->
msg_len
);
...
...
@@ -239,7 +239,7 @@ static int rndis_query(struct usbnet *dev, struct usb_interface *intf,
u
.
get
->
len
=
cpu_to_le32
(
in_len
);
u
.
get
->
offset
=
ccpu2
(
20
);
retval
=
rndis_command
(
dev
,
u
.
header
);
retval
=
rndis_command
(
dev
,
u
.
header
,
CONTROL_BUFFER_SIZE
);
if
(
unlikely
(
retval
<
0
))
{
dev_err
(
&
intf
->
dev
,
"RNDIS_MSG_QUERY(0x%08x) failed, %d
\n
"
,
oid
,
retval
);
...
...
@@ -328,7 +328,7 @@ generic_rndis_bind(struct usbnet *dev, struct usb_interface *intf, int flags)
u
.
init
->
max_transfer_size
=
cpu_to_le32
(
dev
->
rx_urb_size
);
net
->
change_mtu
=
NULL
;
retval
=
rndis_command
(
dev
,
u
.
header
);
retval
=
rndis_command
(
dev
,
u
.
header
,
CONTROL_BUFFER_SIZE
);
if
(
unlikely
(
retval
<
0
))
{
/* it might not even be an RNDIS device!! */
dev_err
(
&
intf
->
dev
,
"RNDIS init failed, %d
\n
"
,
retval
);
...
...
@@ -409,7 +409,7 @@ generic_rndis_bind(struct usbnet *dev, struct usb_interface *intf, int flags)
u
.
set
->
offset
=
ccpu2
((
sizeof
*
u
.
set
)
-
8
);
*
(
__le32
*
)(
u
.
buf
+
sizeof
*
u
.
set
)
=
RNDIS_DEFAULT_FILTER
;
retval
=
rndis_command
(
dev
,
u
.
header
);
retval
=
rndis_command
(
dev
,
u
.
header
,
CONTROL_BUFFER_SIZE
);
if
(
unlikely
(
retval
<
0
))
{
dev_err
(
&
intf
->
dev
,
"rndis set packet filter, %d
\n
"
,
retval
);
goto
halt_fail_and_release
;
...
...
@@ -424,7 +424,7 @@ generic_rndis_bind(struct usbnet *dev, struct usb_interface *intf, int flags)
memset
(
u
.
halt
,
0
,
sizeof
*
u
.
halt
);
u
.
halt
->
msg_type
=
RNDIS_MSG_HALT
;
u
.
halt
->
msg_len
=
ccpu2
(
sizeof
*
u
.
halt
);
(
void
)
rndis_command
(
dev
,
(
void
*
)
u
.
halt
);
(
void
)
rndis_command
(
dev
,
(
void
*
)
u
.
halt
,
CONTROL_BUFFER_SIZE
);
fail_and_release:
usb_set_intfdata
(
info
->
data
,
NULL
);
usb_driver_release_interface
(
driver_of
(
intf
),
info
->
data
);
...
...
@@ -449,7 +449,7 @@ void rndis_unbind(struct usbnet *dev, struct usb_interface *intf)
if
(
halt
)
{
halt
->
msg_type
=
RNDIS_MSG_HALT
;
halt
->
msg_len
=
ccpu2
(
sizeof
*
halt
);
(
void
)
rndis_command
(
dev
,
(
void
*
)
halt
);
(
void
)
rndis_command
(
dev
,
(
void
*
)
halt
,
CONTROL_BUFFER_SIZE
);
kfree
(
halt
);
}
...
...
drivers/net/wireless/rndis_wlan.c
浏览文件 @
332e4af8
...
...
@@ -448,7 +448,7 @@ static int rndis_query_oid(struct usbnet *dev, __le32 oid, void *data, int *len)
u
.
get
->
msg_len
=
ccpu2
(
sizeof
*
u
.
get
);
u
.
get
->
oid
=
oid
;
ret
=
rndis_command
(
dev
,
u
.
header
);
ret
=
rndis_command
(
dev
,
u
.
header
,
buflen
);
if
(
ret
==
0
)
{
ret
=
le32_to_cpu
(
u
.
get_c
->
len
);
*
len
=
(
*
len
>
ret
)
?
ret
:
*
len
;
...
...
@@ -498,7 +498,7 @@ static int rndis_set_oid(struct usbnet *dev, __le32 oid, void *data, int len)
u
.
set
->
handle
=
ccpu2
(
0
);
memcpy
(
u
.
buf
+
sizeof
(
*
u
.
set
),
data
,
len
);
ret
=
rndis_command
(
dev
,
u
.
header
);
ret
=
rndis_command
(
dev
,
u
.
header
,
buflen
);
if
(
ret
==
0
)
ret
=
rndis_error_status
(
u
.
set_c
->
status
);
...
...
drivers/pci/pci-acpi.c
浏览文件 @
332e4af8
...
...
@@ -315,6 +315,25 @@ static pci_power_t acpi_pci_choose_state(struct pci_dev *pdev,
}
return
PCI_POWER_ERROR
;
}
static
int
acpi_platform_enable_wakeup
(
struct
device
*
dev
,
int
is_on
)
{
struct
acpi_device
*
adev
;
int
status
;
if
(
!
device_can_wakeup
(
dev
))
return
-
EINVAL
;
if
(
is_on
&&
!
device_may_wakeup
(
dev
))
return
-
EINVAL
;
status
=
acpi_bus_get_device
(
DEVICE_ACPI_HANDLE
(
dev
),
&
adev
);
if
(
status
<
0
)
return
status
;
adev
->
wakeup
.
state
.
enabled
=
!!
is_on
;
return
0
;
}
#endif
static
int
acpi_pci_set_power_state
(
struct
pci_dev
*
dev
,
pci_power_t
state
)
...
...
@@ -399,6 +418,7 @@ static int __init acpi_pci_init(void)
return
0
;
#ifdef CONFIG_ACPI_SLEEP
platform_pci_choose_state
=
acpi_pci_choose_state
;
platform_enable_wakeup
=
acpi_platform_enable_wakeup
;
#endif
platform_pci_set_power_state
=
acpi_pci_set_power_state
;
return
0
;
...
...
include/linux/dm9000.h
浏览文件 @
332e4af8
...
...
@@ -21,6 +21,7 @@
#define DM9000_PLATF_32BITONLY (0x0004)
#define DM9000_PLATF_EXT_PHY (0x0008)
#define DM9000_PLATF_NO_EEPROM (0x0010)
#define DM9000_PLATF_SIMPLE_PHY (0x0020)
/* Use NSR to find LinkStatus */
/* platfrom data for platfrom device structure's platfrom_data field */
...
...
include/linux/usb/rndis_host.h
浏览文件 @
332e4af8
...
...
@@ -260,7 +260,8 @@ struct rndis_keepalive_c { /* IN (optionally OUT) */
extern
void
rndis_status
(
struct
usbnet
*
dev
,
struct
urb
*
urb
);
extern
int
rndis_command
(
struct
usbnet
*
dev
,
struct
rndis_msg_hdr
*
buf
);
extern
int
rndis_command
(
struct
usbnet
*
dev
,
struct
rndis_msg_hdr
*
buf
,
int
buflen
);
extern
int
generic_rndis_bind
(
struct
usbnet
*
dev
,
struct
usb_interface
*
intf
,
int
flags
);
extern
void
rndis_unbind
(
struct
usbnet
*
dev
,
struct
usb_interface
*
intf
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录