Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
263fb5b1
K
Kernel
项目概览
openeuler
/
Kernel
接近 2 年 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
263fb5b1
编写于
2月 08, 2011
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/net/e1000e/netdev.c
上级
8d13a2a9
c69b9092
变更
31
隐藏空白更改
内联
并排
Showing
31 changed file
with
306 addition
and
149 deletion
+306
-149
drivers/net/benet/be_cmds.c
drivers/net/benet/be_cmds.c
+5
-0
drivers/net/bnx2x/bnx2x_main.c
drivers/net/bnx2x/bnx2x_main.c
+23
-9
drivers/net/can/pch_can.c
drivers/net/can/pch_can.c
+3
-2
drivers/net/e1000/e1000_hw.c
drivers/net/e1000/e1000_hw.c
+3
-1
drivers/net/e1000/e1000_hw.h
drivers/net/e1000/e1000_hw.h
+1
-0
drivers/net/e1000e/netdev.c
drivers/net/e1000e/netdev.c
+0
-1
drivers/net/ixgbe/ixgbe_common.c
drivers/net/ixgbe/ixgbe_common.c
+3
-0
drivers/net/ixgbe/ixgbe_fcoe.c
drivers/net/ixgbe/ixgbe_fcoe.c
+1
-1
drivers/net/ixgbe/ixgbe_main.c
drivers/net/ixgbe/ixgbe_main.c
+10
-6
drivers/net/ixgbe/ixgbe_sriov.c
drivers/net/ixgbe/ixgbe_sriov.c
+0
-2
drivers/net/ixgbe/ixgbe_x540.c
drivers/net/ixgbe/ixgbe_x540.c
+3
-3
drivers/net/sis900.c
drivers/net/sis900.c
+1
-0
drivers/net/usb/cdc_ncm.c
drivers/net/usb/cdc_ncm.c
+147
-80
drivers/net/wireless/ath/ath9k/ath9k.h
drivers/net/wireless/ath/ath9k/ath9k.h
+1
-1
drivers/net/wireless/ath/ath9k/main.c
drivers/net/wireless/ath/ath9k/main.c
+0
-2
drivers/net/wireless/ath/ath9k/xmit.c
drivers/net/wireless/ath/ath9k/xmit.c
+6
-1
drivers/net/wireless/ath/carl9170/rx.c
drivers/net/wireless/ath/carl9170/rx.c
+1
-1
drivers/net/wireless/iwlwifi/iwl-6000.c
drivers/net/wireless/iwlwifi/iwl-6000.c
+2
-0
drivers/net/wireless/iwlwifi/iwl-agn.c
drivers/net/wireless/iwlwifi/iwl-agn.c
+6
-0
drivers/net/wireless/wl1251/main.c
drivers/net/wireless/wl1251/main.c
+3
-0
drivers/ssb/pcmcia.c
drivers/ssb/pcmcia.c
+1
-1
include/linux/usb/cdc.h
include/linux/usb/cdc.h
+18
-5
net/batman-adv/unicast.c
net/batman-adv/unicast.c
+10
-5
net/caif/chnl_net.c
net/caif/chnl_net.c
+2
-2
net/core/dev.c
net/core/dev.c
+16
-11
net/mac80211/cfg.c
net/mac80211/cfg.c
+2
-0
net/mac80211/ieee80211_i.h
net/mac80211/ieee80211_i.h
+1
-1
net/mac80211/status.c
net/mac80211/status.c
+6
-1
net/mac80211/tx.c
net/mac80211/tx.c
+1
-1
net/x25/x25_facilities.c
net/x25/x25_facilities.c
+19
-9
net/x25/x25_in.c
net/x25/x25_in.c
+11
-3
未找到文件。
drivers/net/benet/be_cmds.c
浏览文件 @
263fb5b1
...
...
@@ -1786,6 +1786,10 @@ int be_cmd_get_seeprom_data(struct be_adapter *adapter,
spin_lock_bh
(
&
adapter
->
mcc_lock
);
wrb
=
wrb_from_mccq
(
adapter
);
if
(
!
wrb
)
{
status
=
-
EBUSY
;
goto
err
;
}
req
=
nonemb_cmd
->
va
;
sge
=
nonembedded_sgl
(
wrb
);
...
...
@@ -1801,6 +1805,7 @@ int be_cmd_get_seeprom_data(struct be_adapter *adapter,
status
=
be_mcc_notify_wait
(
adapter
);
err:
spin_unlock_bh
(
&
adapter
->
mcc_lock
);
return
status
;
}
...
...
drivers/net/bnx2x/bnx2x_main.c
浏览文件 @
263fb5b1
...
...
@@ -4300,9 +4300,12 @@ void bnx2x_set_storm_rx_mode(struct bnx2x *bp)
def_q_filters
|=
BNX2X_ACCEPT_UNICAST
|
BNX2X_ACCEPT_BROADCAST
|
BNX2X_ACCEPT_MULTICAST
;
#ifdef BCM_CNIC
cl_id
=
bnx2x_fcoe
(
bp
,
cl_id
);
bnx2x_rxq_set_mac_filters
(
bp
,
cl_id
,
BNX2X_ACCEPT_UNICAST
|
BNX2X_ACCEPT_MULTICAST
);
if
(
!
NO_FCOE
(
bp
))
{
cl_id
=
bnx2x_fcoe
(
bp
,
cl_id
);
bnx2x_rxq_set_mac_filters
(
bp
,
cl_id
,
BNX2X_ACCEPT_UNICAST
|
BNX2X_ACCEPT_MULTICAST
);
}
#endif
break
;
...
...
@@ -4310,18 +4313,29 @@ void bnx2x_set_storm_rx_mode(struct bnx2x *bp)
def_q_filters
|=
BNX2X_ACCEPT_UNICAST
|
BNX2X_ACCEPT_BROADCAST
|
BNX2X_ACCEPT_ALL_MULTICAST
;
#ifdef BCM_CNIC
cl_id
=
bnx2x_fcoe
(
bp
,
cl_id
);
bnx2x_rxq_set_mac_filters
(
bp
,
cl_id
,
BNX2X_ACCEPT_UNICAST
|
BNX2X_ACCEPT_MULTICAST
);
/*
* Prevent duplication of multicast packets by configuring FCoE
* L2 Client to receive only matched unicast frames.
*/
if
(
!
NO_FCOE
(
bp
))
{
cl_id
=
bnx2x_fcoe
(
bp
,
cl_id
);
bnx2x_rxq_set_mac_filters
(
bp
,
cl_id
,
BNX2X_ACCEPT_UNICAST
);
}
#endif
break
;
case
BNX2X_RX_MODE_PROMISC
:
def_q_filters
|=
BNX2X_PROMISCUOUS_MODE
;
#ifdef BCM_CNIC
cl_id
=
bnx2x_fcoe
(
bp
,
cl_id
);
bnx2x_rxq_set_mac_filters
(
bp
,
cl_id
,
BNX2X_ACCEPT_UNICAST
|
BNX2X_ACCEPT_MULTICAST
);
/*
* Prevent packets duplication by configuring DROP_ALL for FCoE
* L2 Client.
*/
if
(
!
NO_FCOE
(
bp
))
{
cl_id
=
bnx2x_fcoe
(
bp
,
cl_id
);
bnx2x_rxq_set_mac_filters
(
bp
,
cl_id
,
BNX2X_ACCEPT_NONE
);
}
#endif
/* pass management unicast packets as well */
llh_mask
|=
NIG_LLH0_BRB1_DRV_MASK_REG_LLH0_BRB1_DRV_MASK_UNCST
;
...
...
drivers/net/can/pch_can.c
浏览文件 @
263fb5b1
...
...
@@ -187,7 +187,7 @@ static struct can_bittiming_const pch_can_bittiming_const = {
.
name
=
KBUILD_MODNAME
,
.
tseg1_min
=
1
,
.
tseg1_max
=
16
,
.
tseg2_min
=
1
,
.
tseg2_min
=
2
,
.
tseg2_max
=
8
,
.
sjw_max
=
4
,
.
brp_min
=
1
,
...
...
@@ -959,13 +959,13 @@ static void __devexit pch_can_remove(struct pci_dev *pdev)
struct
pch_can_priv
*
priv
=
netdev_priv
(
ndev
);
unregister_candev
(
priv
->
ndev
);
pci_iounmap
(
pdev
,
priv
->
regs
);
if
(
priv
->
use_msi
)
pci_disable_msi
(
priv
->
dev
);
pci_release_regions
(
pdev
);
pci_disable_device
(
pdev
);
pci_set_drvdata
(
pdev
,
NULL
);
pch_can_reset
(
priv
);
pci_iounmap
(
pdev
,
priv
->
regs
);
free_candev
(
priv
->
ndev
);
}
...
...
@@ -1238,6 +1238,7 @@ static int __devinit pch_can_probe(struct pci_dev *pdev,
priv
->
use_msi
=
0
;
}
else
{
netdev_err
(
ndev
,
"PCH CAN opened with MSI
\n
"
);
pci_set_master
(
pdev
);
priv
->
use_msi
=
1
;
}
...
...
drivers/net/e1000/e1000_hw.c
浏览文件 @
263fb5b1
...
...
@@ -124,6 +124,7 @@ static s32 e1000_set_phy_type(struct e1000_hw *hw)
case
M88E1000_I_PHY_ID
:
case
M88E1011_I_PHY_ID
:
case
M88E1111_I_PHY_ID
:
case
M88E1118_E_PHY_ID
:
hw
->
phy_type
=
e1000_phy_m88
;
break
;
case
IGP01E1000_I_PHY_ID
:
...
...
@@ -3222,7 +3223,8 @@ static s32 e1000_detect_gig_phy(struct e1000_hw *hw)
break
;
case
e1000_ce4100
:
if
((
hw
->
phy_id
==
RTL8211B_PHY_ID
)
||
(
hw
->
phy_id
==
RTL8201N_PHY_ID
))
(
hw
->
phy_id
==
RTL8201N_PHY_ID
)
||
(
hw
->
phy_id
==
M88E1118_E_PHY_ID
))
match
=
true
;
break
;
case
e1000_82541
:
...
...
drivers/net/e1000/e1000_hw.h
浏览文件 @
263fb5b1
...
...
@@ -2917,6 +2917,7 @@ struct e1000_host_command_info {
#define M88E1000_14_PHY_ID M88E1000_E_PHY_ID
#define M88E1011_I_REV_4 0x04
#define M88E1111_I_PHY_ID 0x01410CC0
#define M88E1118_E_PHY_ID 0x01410E40
#define L1LXT971A_PHY_ID 0x001378E0
#define RTL8211B_PHY_ID 0x001CC910
...
...
drivers/net/e1000e/netdev.c
浏览文件 @
263fb5b1
...
...
@@ -4311,7 +4311,6 @@ static void e1000_watchdog_task(struct work_struct *work)
* to get done, so reset controller to flush Tx.
* (Do the reset outside of interrupt context).
*/
adapter
->
tx_timeout_count
++
;
schedule_work
(
&
adapter
->
reset_task
);
/* return immediately since reset is imminent */
return
;
...
...
drivers/net/ixgbe/ixgbe_common.c
浏览文件 @
263fb5b1
...
...
@@ -1370,6 +1370,9 @@ s32 ixgbe_init_rx_addrs_generic(struct ixgbe_hw *hw)
hw_dbg
(
hw
,
" New MAC Addr =%pM
\n
"
,
hw
->
mac
.
addr
);
hw
->
mac
.
ops
.
set_rar
(
hw
,
0
,
hw
->
mac
.
addr
,
0
,
IXGBE_RAH_AV
);
/* clear VMDq pool/queue selection for RAR 0 */
hw
->
mac
.
ops
.
clear_vmdq
(
hw
,
0
,
IXGBE_CLEAR_VMDQ_ALL
);
}
hw
->
addr_ctrl
.
overflow_promisc
=
0
;
...
...
drivers/net/ixgbe/ixgbe_fcoe.c
浏览文件 @
263fb5b1
...
...
@@ -165,7 +165,7 @@ int ixgbe_fcoe_ddp_get(struct net_device *netdev, u16 xid,
unsigned
int
thisoff
=
0
;
unsigned
int
thislen
=
0
;
u32
fcbuff
,
fcdmarw
,
fcfltrw
;
dma_addr_t
addr
;
dma_addr_t
addr
=
0
;
if
(
!
netdev
||
!
sgl
)
return
0
;
...
...
drivers/net/ixgbe/ixgbe_main.c
浏览文件 @
263fb5b1
...
...
@@ -52,7 +52,7 @@ char ixgbe_driver_name[] = "ixgbe";
static
const
char
ixgbe_driver_string
[]
=
"Intel(R) 10 Gigabit PCI Express Network Driver"
;
#define DRV_VERSION "3.
0.12
-k2"
#define DRV_VERSION "3.
2.9
-k2"
const
char
ixgbe_driver_version
[]
=
DRV_VERSION
;
static
char
ixgbe_copyright
[]
=
"Copyright (c) 1999-2010 Intel Corporation."
;
...
...
@@ -3176,9 +3176,16 @@ static void ixgbe_set_rx_buffer_len(struct ixgbe_adapter *adapter)
u32
mhadd
,
hlreg0
;
/* Decide whether to use packet split mode or not */
/* On by default */
adapter
->
flags
|=
IXGBE_FLAG_RX_PS_ENABLED
;
/* Do not use packet split if we're in SR-IOV Mode */
if
(
!
adapter
->
num_vfs
)
adapter
->
flags
|=
IXGBE_FLAG_RX_PS_ENABLED
;
if
(
adapter
->
num_vfs
)
adapter
->
flags
&=
~
IXGBE_FLAG_RX_PS_ENABLED
;
/* Disable packet split due to 82599 erratum #45 */
if
(
hw
->
mac
.
type
==
ixgbe_mac_82599EB
)
adapter
->
flags
&=
~
IXGBE_FLAG_RX_PS_ENABLED
;
/* Set the RX buffer length according to the mode */
if
(
adapter
->
flags
&
IXGBE_FLAG_RX_PS_ENABLED
)
{
...
...
@@ -4863,16 +4870,13 @@ static int ixgbe_alloc_q_vectors(struct ixgbe_adapter *adapter)
{
int
q_idx
,
num_q_vectors
;
struct
ixgbe_q_vector
*
q_vector
;
int
napi_vectors
;
int
(
*
poll
)(
struct
napi_struct
*
,
int
);
if
(
adapter
->
flags
&
IXGBE_FLAG_MSIX_ENABLED
)
{
num_q_vectors
=
adapter
->
num_msix_vectors
-
NON_Q_VECTORS
;
napi_vectors
=
adapter
->
num_rx_queues
;
poll
=
&
ixgbe_clean_rxtx_many
;
}
else
{
num_q_vectors
=
1
;
napi_vectors
=
1
;
poll
=
&
ixgbe_poll
;
}
...
...
drivers/net/ixgbe/ixgbe_sriov.c
浏览文件 @
263fb5b1
...
...
@@ -110,12 +110,10 @@ static int ixgbe_set_vf_vlan(struct ixgbe_adapter *adapter, int add, int vid,
return
adapter
->
hw
.
mac
.
ops
.
set_vfta
(
&
adapter
->
hw
,
vid
,
vf
,
(
bool
)
add
);
}
static
void
ixgbe_set_vmolr
(
struct
ixgbe_hw
*
hw
,
u32
vf
,
bool
aupe
)
{
u32
vmolr
=
IXGBE_READ_REG
(
hw
,
IXGBE_VMOLR
(
vf
));
vmolr
|=
(
IXGBE_VMOLR_ROMPE
|
IXGBE_VMOLR_ROPE
|
IXGBE_VMOLR_BAM
);
if
(
aupe
)
vmolr
|=
IXGBE_VMOLR_AUPE
;
...
...
drivers/net/ixgbe/ixgbe_x540.c
浏览文件 @
263fb5b1
...
...
@@ -133,17 +133,17 @@ static s32 ixgbe_reset_hw_X540(struct ixgbe_hw *hw)
}
ctrl
=
IXGBE_READ_REG
(
hw
,
IXGBE_CTRL
);
IXGBE_WRITE_REG
(
hw
,
IXGBE_CTRL
,
(
ctrl
|
IXGBE_CTRL_RST
));
IXGBE_WRITE_REG
(
hw
,
IXGBE_CTRL
,
(
ctrl
|
reset_bit
));
IXGBE_WRITE_FLUSH
(
hw
);
/* Poll for reset bit to self-clear indicating reset is complete */
for
(
i
=
0
;
i
<
10
;
i
++
)
{
udelay
(
1
);
ctrl
=
IXGBE_READ_REG
(
hw
,
IXGBE_CTRL
);
if
(
!
(
ctrl
&
IXGBE_CTRL_RST
))
if
(
!
(
ctrl
&
reset_bit
))
break
;
}
if
(
ctrl
&
IXGBE_CTRL_RST
)
{
if
(
ctrl
&
reset_bit
)
{
status
=
IXGBE_ERR_RESET_FAILED
;
hw_dbg
(
hw
,
"Reset polling failed to complete.
\n
"
);
}
...
...
drivers/net/sis900.c
浏览文件 @
263fb5b1
...
...
@@ -1777,6 +1777,7 @@ static int sis900_rx(struct net_device *net_dev)
"cur_rx:%4.4d, dirty_rx:%4.4d
\n
"
,
net_dev
->
name
,
sis_priv
->
cur_rx
,
sis_priv
->
dirty_rx
);
dev_kfree_skb
(
skb
);
break
;
}
...
...
drivers/net/usb/cdc_ncm.c
浏览文件 @
263fb5b1
/*
* cdc_ncm.c
*
* Copyright (C) ST-Ericsson 2010
* Copyright (C) ST-Ericsson 2010
-2011
* Contact: Alexey Orishko <alexey.orishko@stericsson.com>
* Original author: Hans Petter Selasky <hans.petter.selasky@stericsson.com>
*
...
...
@@ -54,7 +54,7 @@
#include <linux/usb/usbnet.h>
#include <linux/usb/cdc.h>
#define DRIVER_VERSION "
17-Jan
-2011"
#define DRIVER_VERSION "
7-Feb
-2011"
/* CDC NCM subclass 3.2.1 */
#define USB_CDC_NCM_NDP16_LENGTH_MIN 0x10
...
...
@@ -77,6 +77,9 @@
*/
#define CDC_NCM_DPT_DATAGRAMS_MAX 32
/* Maximum amount of IN datagrams in NTB */
#define CDC_NCM_DPT_DATAGRAMS_IN_MAX 0
/* unlimited */
/* Restart the timer, if amount of datagrams is less than given value */
#define CDC_NCM_RESTART_TIMER_DATAGRAM_CNT 3
...
...
@@ -85,11 +88,6 @@
(sizeof(struct usb_cdc_ncm_nth16) + sizeof(struct usb_cdc_ncm_ndp16) + \
(CDC_NCM_DPT_DATAGRAMS_MAX + 1) * sizeof(struct usb_cdc_ncm_dpe16))
struct
connection_speed_change
{
__le32
USBitRate
;
/* holds 3GPP downlink value, bits per second */
__le32
DSBitRate
;
/* holds 3GPP uplink value, bits per second */
}
__attribute__
((
packed
));
struct
cdc_ncm_data
{
struct
usb_cdc_ncm_nth16
nth16
;
struct
usb_cdc_ncm_ndp16
ndp16
;
...
...
@@ -198,10 +196,10 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx)
{
struct
usb_cdc_notification
req
;
u32
val
;
__le16
max_datagram_size
;
u8
flags
;
u8
iface_no
;
int
err
;
u16
ntb_fmt_supported
;
iface_no
=
ctx
->
control
->
cur_altsetting
->
desc
.
bInterfaceNumber
;
...
...
@@ -223,6 +221,9 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx)
ctx
->
tx_remainder
=
le16_to_cpu
(
ctx
->
ncm_parm
.
wNdpOutPayloadRemainder
);
ctx
->
tx_modulus
=
le16_to_cpu
(
ctx
->
ncm_parm
.
wNdpOutDivisor
);
ctx
->
tx_ndp_modulus
=
le16_to_cpu
(
ctx
->
ncm_parm
.
wNdpOutAlignment
);
/* devices prior to NCM Errata shall set this field to zero */
ctx
->
tx_max_datagrams
=
le16_to_cpu
(
ctx
->
ncm_parm
.
wNtbOutMaxDatagrams
);
ntb_fmt_supported
=
le16_to_cpu
(
ctx
->
ncm_parm
.
bmNtbFormatsSupported
);
if
(
ctx
->
func_desc
!=
NULL
)
flags
=
ctx
->
func_desc
->
bmNetworkCapabilities
;
...
...
@@ -231,22 +232,58 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx)
pr_debug
(
"dwNtbInMaxSize=%u dwNtbOutMaxSize=%u "
"wNdpOutPayloadRemainder=%u wNdpOutDivisor=%u "
"wNdpOutAlignment=%u flags=0x%x
\n
"
,
"wNdpOutAlignment=%u
wNtbOutMaxDatagrams=%u
flags=0x%x
\n
"
,
ctx
->
rx_max
,
ctx
->
tx_max
,
ctx
->
tx_remainder
,
ctx
->
tx_modulus
,
ctx
->
tx_ndp_modulus
,
flags
);
ctx
->
tx_ndp_modulus
,
ctx
->
tx_max_datagrams
,
flags
);
/* max count of tx datagrams without terminating NULL entry */
ctx
->
tx_max_datagrams
=
CDC_NCM_DPT_DATAGRAMS_MAX
;
/* max count of tx datagrams */
if
((
ctx
->
tx_max_datagrams
==
0
)
||
(
ctx
->
tx_max_datagrams
>
CDC_NCM_DPT_DATAGRAMS_MAX
))
ctx
->
tx_max_datagrams
=
CDC_NCM_DPT_DATAGRAMS_MAX
;
/* verify maximum size of received NTB in bytes */
if
((
ctx
->
rx_max
<
(
CDC_NCM_MIN_HDR_SIZE
+
CDC_NCM_MIN_DATAGRAM_SIZE
))
||
(
ctx
->
rx_max
>
CDC_NCM_NTB_MAX_SIZE_RX
))
{
if
(
ctx
->
rx_max
<
USB_CDC_NCM_NTB_MIN_IN_SIZE
)
{
pr_debug
(
"Using min receive length=%d
\n
"
,
USB_CDC_NCM_NTB_MIN_IN_SIZE
);
ctx
->
rx_max
=
USB_CDC_NCM_NTB_MIN_IN_SIZE
;
}
if
(
ctx
->
rx_max
>
CDC_NCM_NTB_MAX_SIZE_RX
)
{
pr_debug
(
"Using default maximum receive length=%d
\n
"
,
CDC_NCM_NTB_MAX_SIZE_RX
);
ctx
->
rx_max
=
CDC_NCM_NTB_MAX_SIZE_RX
;
}
/* inform device about NTB input size changes */
if
(
ctx
->
rx_max
!=
le32_to_cpu
(
ctx
->
ncm_parm
.
dwNtbInMaxSize
))
{
req
.
bmRequestType
=
USB_TYPE_CLASS
|
USB_DIR_OUT
|
USB_RECIP_INTERFACE
;
req
.
bNotificationType
=
USB_CDC_SET_NTB_INPUT_SIZE
;
req
.
wValue
=
0
;
req
.
wIndex
=
cpu_to_le16
(
iface_no
);
if
(
flags
&
USB_CDC_NCM_NCAP_NTB_INPUT_SIZE
)
{
struct
usb_cdc_ncm_ndp_input_size
ndp_in_sz
;
req
.
wLength
=
8
;
ndp_in_sz
.
dwNtbInMaxSize
=
cpu_to_le32
(
ctx
->
rx_max
);
ndp_in_sz
.
wNtbInMaxDatagrams
=
cpu_to_le16
(
CDC_NCM_DPT_DATAGRAMS_MAX
);
ndp_in_sz
.
wReserved
=
0
;
err
=
cdc_ncm_do_request
(
ctx
,
&
req
,
&
ndp_in_sz
,
0
,
NULL
,
1000
);
}
else
{
__le32
dwNtbInMaxSize
=
cpu_to_le32
(
ctx
->
rx_max
);
req
.
wLength
=
4
;
err
=
cdc_ncm_do_request
(
ctx
,
&
req
,
&
dwNtbInMaxSize
,
0
,
NULL
,
1000
);
}
if
(
err
)
pr_debug
(
"Setting NTB Input Size failed
\n
"
);
}
/* verify maximum size of transmitted NTB in bytes */
if
((
ctx
->
tx_max
<
(
CDC_NCM_MIN_HDR_SIZE
+
CDC_NCM_MIN_DATAGRAM_SIZE
))
||
...
...
@@ -297,47 +334,84 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx)
/* additional configuration */
/* set CRC Mode */
req
.
bmRequestType
=
USB_TYPE_CLASS
|
USB_DIR_OUT
|
USB_RECIP_INTERFACE
;
req
.
bNotificationType
=
USB_CDC_SET_CRC_MODE
;
req
.
wValue
=
cpu_to_le16
(
USB_CDC_NCM_CRC_NOT_APPENDED
);
req
.
wIndex
=
cpu_to_le16
(
iface_no
);
req
.
wLength
=
0
;
err
=
cdc_ncm_do_request
(
ctx
,
&
req
,
NULL
,
0
,
NULL
,
1000
);
if
(
err
)
pr_debug
(
"Setting CRC mode off failed
\n
"
);
if
(
flags
&
USB_CDC_NCM_NCAP_CRC_MODE
)
{
req
.
bmRequestType
=
USB_TYPE_CLASS
|
USB_DIR_OUT
|
USB_RECIP_INTERFACE
;
req
.
bNotificationType
=
USB_CDC_SET_CRC_MODE
;
req
.
wValue
=
cpu_to_le16
(
USB_CDC_NCM_CRC_NOT_APPENDED
);
req
.
wIndex
=
cpu_to_le16
(
iface_no
);
req
.
wLength
=
0
;
err
=
cdc_ncm_do_request
(
ctx
,
&
req
,
NULL
,
0
,
NULL
,
1000
);
if
(
err
)
pr_debug
(
"Setting CRC mode off failed
\n
"
);
}
/* set NTB format */
req
.
bmRequestType
=
USB_TYPE_CLASS
|
USB_DIR_OUT
|
USB_RECIP_INTERFACE
;
req
.
bNotificationType
=
USB_CDC_SET_NTB_FORMAT
;
req
.
wValue
=
cpu_to_le16
(
USB_CDC_NCM_NTB16_FORMAT
);
req
.
wIndex
=
cpu_to_le16
(
iface_no
);
req
.
wLength
=
0
;
/* set NTB format, if both formats are supported */
if
(
ntb_fmt_supported
&
USB_CDC_NCM_NTH32_SIGN
)
{
req
.
bmRequestType
=
USB_TYPE_CLASS
|
USB_DIR_OUT
|
USB_RECIP_INTERFACE
;
req
.
bNotificationType
=
USB_CDC_SET_NTB_FORMAT
;
req
.
wValue
=
cpu_to_le16
(
USB_CDC_NCM_NTB16_FORMAT
);
req
.
wIndex
=
cpu_to_le16
(
iface_no
);
req
.
wLength
=
0
;
err
=
cdc_ncm_do_request
(
ctx
,
&
req
,
NULL
,
0
,
NULL
,
1000
);
if
(
err
)
pr_debug
(
"Setting NTB format to 16-bit failed
\n
"
);
}
err
=
cdc_ncm_do_request
(
ctx
,
&
req
,
NULL
,
0
,
NULL
,
1000
);
if
(
err
)
pr_debug
(
"Setting NTB format to 16-bit failed
\n
"
);
ctx
->
max_datagram_size
=
CDC_NCM_MIN_DATAGRAM_SIZE
;
/* set Max Datagram Size (MTU) */
req
.
bmRequestType
=
USB_TYPE_CLASS
|
USB_DIR_IN
|
USB_RECIP_INTERFACE
;
req
.
bNotificationType
=
USB_CDC_GET_MAX_DATAGRAM_SIZE
;
req
.
wValue
=
0
;
req
.
wIndex
=
cpu_to_le16
(
iface_no
);
req
.
wLength
=
cpu_to_le16
(
2
);
if
(
flags
&
USB_CDC_NCM_NCAP_MAX_DATAGRAM_SIZE
)
{
__le16
max_datagram_size
;
u16
eth_max_sz
=
le16_to_cpu
(
ctx
->
ether_desc
->
wMaxSegmentSize
);
req
.
bmRequestType
=
USB_TYPE_CLASS
|
USB_DIR_IN
|
USB_RECIP_INTERFACE
;
req
.
bNotificationType
=
USB_CDC_GET_MAX_DATAGRAM_SIZE
;
req
.
wValue
=
0
;
req
.
wIndex
=
cpu_to_le16
(
iface_no
);
req
.
wLength
=
cpu_to_le16
(
2
);
err
=
cdc_ncm_do_request
(
ctx
,
&
req
,
&
max_datagram_size
,
0
,
NULL
,
1000
);
if
(
err
)
{
pr_debug
(
"GET_MAX_DATAGRAM_SIZE failed, use size=%u
\n
"
,
CDC_NCM_MIN_DATAGRAM_SIZE
);
}
else
{
ctx
->
max_datagram_size
=
le16_to_cpu
(
max_datagram_size
);
/* Check Eth descriptor value */
if
(
eth_max_sz
<
CDC_NCM_MAX_DATAGRAM_SIZE
)
{
if
(
ctx
->
max_datagram_size
>
eth_max_sz
)
ctx
->
max_datagram_size
=
eth_max_sz
;
}
else
{
if
(
ctx
->
max_datagram_size
>
CDC_NCM_MAX_DATAGRAM_SIZE
)
ctx
->
max_datagram_size
=
CDC_NCM_MAX_DATAGRAM_SIZE
;
}
err
=
cdc_ncm_do_request
(
ctx
,
&
req
,
&
max_datagram_size
,
0
,
NULL
,
1000
);
if
(
err
)
{
pr_debug
(
" GET_MAX_DATAGRAM_SIZE failed, using size=%u
\n
"
,
CDC_NCM_MIN_DATAGRAM_SIZE
);
/* use default */
ctx
->
max_datagram_size
=
CDC_NCM_MIN_DATAGRAM_SIZE
;
}
else
{
ctx
->
max_datagram_size
=
le16_to_cpu
(
max_datagram_size
);
if
(
ctx
->
max_datagram_size
<
CDC_NCM_MIN_DATAGRAM_SIZE
)
ctx
->
max_datagram_size
=
CDC_NCM_MIN_DATAGRAM_SIZE
;
/* if value changed, update device */
req
.
bmRequestType
=
USB_TYPE_CLASS
|
USB_DIR_OUT
|
USB_RECIP_INTERFACE
;
req
.
bNotificationType
=
USB_CDC_SET_MAX_DATAGRAM_SIZE
;
req
.
wValue
=
0
;
req
.
wIndex
=
cpu_to_le16
(
iface_no
);
req
.
wLength
=
2
;
max_datagram_size
=
cpu_to_le16
(
ctx
->
max_datagram_size
);
err
=
cdc_ncm_do_request
(
ctx
,
&
req
,
&
max_datagram_size
,
0
,
NULL
,
1000
);
if
(
err
)
pr_debug
(
"SET_MAX_DATAGRAM_SIZE failed
\n
"
);
}
if
(
ctx
->
max_datagram_size
<
CDC_NCM_MIN_DATAGRAM_SIZE
)
ctx
->
max_datagram_size
=
CDC_NCM_MIN_DATAGRAM_SIZE
;
else
if
(
ctx
->
max_datagram_size
>
CDC_NCM_MAX_DATAGRAM_SIZE
)
ctx
->
max_datagram_size
=
CDC_NCM_MAX_DATAGRAM_SIZE
;
}
if
(
ctx
->
netdev
->
mtu
!=
(
ctx
->
max_datagram_size
-
ETH_HLEN
))
...
...
@@ -466,19 +540,13 @@ static int cdc_ncm_bind(struct usbnet *dev, struct usb_interface *intf)
ctx
->
ether_desc
=
(
const
struct
usb_cdc_ether_desc
*
)
buf
;
dev
->
hard_mtu
=
le16_to_cpu
(
ctx
->
ether_desc
->
wMaxSegmentSize
);
if
(
dev
->
hard_mtu
<
(
CDC_NCM_MIN_DATAGRAM_SIZE
-
ETH_HLEN
))
dev
->
hard_mtu
=
CDC_NCM_MIN_DATAGRAM_SIZE
-
ETH_HLEN
;
else
if
(
dev
->
hard_mtu
>
(
CDC_NCM_MAX_DATAGRAM_SIZE
-
ETH_HLEN
))
dev
->
hard_mtu
=
CDC_NCM_MAX_DATAGRAM_SIZE
-
ETH_HLEN
;
if
(
dev
->
hard_mtu
<
CDC_NCM_MIN_DATAGRAM_SIZE
)
dev
->
hard_mtu
=
CDC_NCM_MIN_DATAGRAM_SIZE
;
else
if
(
dev
->
hard_mtu
>
CDC_NCM_MAX_DATAGRAM_SIZE
)
dev
->
hard_mtu
=
CDC_NCM_MAX_DATAGRAM_SIZE
;
break
;
case
USB_CDC_NCM_TYPE
:
...
...
@@ -628,13 +696,13 @@ cdc_ncm_fill_tx_frame(struct cdc_ncm_ctx *ctx, struct sk_buff *skb)
u32
offset
;
u32
last_offset
;
u16
n
=
0
;
u8
timeout
=
0
;
u8
ready2send
=
0
;
/* if there is a remaining skb, it gets priority */
if
(
skb
!=
NULL
)
swap
(
skb
,
ctx
->
tx_rem_skb
);
else
timeout
=
1
;
ready2send
=
1
;
/*
* +----------------+
...
...
@@ -682,9 +750,10 @@ cdc_ncm_fill_tx_frame(struct cdc_ncm_ctx *ctx, struct sk_buff *skb)
for
(;
n
<
ctx
->
tx_max_datagrams
;
n
++
)
{
/* check if end of transmit buffer is reached */
if
(
offset
>=
ctx
->
tx_max
)
if
(
offset
>=
ctx
->
tx_max
)
{
ready2send
=
1
;
break
;
}
/* compute maximum buffer size */
rem
=
ctx
->
tx_max
-
offset
;
...
...
@@ -711,9 +780,7 @@ cdc_ncm_fill_tx_frame(struct cdc_ncm_ctx *ctx, struct sk_buff *skb)
}
ctx
->
tx_rem_skb
=
skb
;
skb
=
NULL
;
/* loop one more time */
timeout
=
1
;
ready2send
=
1
;
}
break
;
}
...
...
@@ -756,7 +823,7 @@ cdc_ncm_fill_tx_frame(struct cdc_ncm_ctx *ctx, struct sk_buff *skb)
ctx
->
tx_curr_last_offset
=
last_offset
;
goto
exit_no_skb
;
}
else
if
((
n
<
ctx
->
tx_max_datagrams
)
&&
(
timeout
==
0
))
{
}
else
if
((
n
<
ctx
->
tx_max_datagrams
)
&&
(
ready2send
==
0
))
{
/* wait for more frames */
/* push variables */
ctx
->
tx_curr_skb
=
skb_out
;
...
...
@@ -813,7 +880,7 @@ cdc_ncm_fill_tx_frame(struct cdc_ncm_ctx *ctx, struct sk_buff *skb)
cpu_to_le16
(
sizeof
(
ctx
->
tx_ncm
.
nth16
));
ctx
->
tx_ncm
.
nth16
.
wSequence
=
cpu_to_le16
(
ctx
->
tx_seq
);
ctx
->
tx_ncm
.
nth16
.
wBlockLength
=
cpu_to_le16
(
last_offset
);
ctx
->
tx_ncm
.
nth16
.
w
F
pIndex
=
ALIGN
(
sizeof
(
struct
usb_cdc_ncm_nth16
),
ctx
->
tx_ncm
.
nth16
.
w
Nd
pIndex
=
ALIGN
(
sizeof
(
struct
usb_cdc_ncm_nth16
),
ctx
->
tx_ndp_modulus
);
memcpy
(
skb_out
->
data
,
&
(
ctx
->
tx_ncm
.
nth16
),
sizeof
(
ctx
->
tx_ncm
.
nth16
));
...
...
@@ -825,13 +892,13 @@ cdc_ncm_fill_tx_frame(struct cdc_ncm_ctx *ctx, struct sk_buff *skb)
rem
=
sizeof
(
ctx
->
tx_ncm
.
ndp16
)
+
((
ctx
->
tx_curr_frame_num
+
1
)
*
sizeof
(
struct
usb_cdc_ncm_dpe16
));
ctx
->
tx_ncm
.
ndp16
.
wLength
=
cpu_to_le16
(
rem
);
ctx
->
tx_ncm
.
ndp16
.
wNext
F
pIndex
=
0
;
/* reserved */
ctx
->
tx_ncm
.
ndp16
.
wNext
Nd
pIndex
=
0
;
/* reserved */
memcpy
(((
u8
*
)
skb_out
->
data
)
+
ctx
->
tx_ncm
.
nth16
.
w
F
pIndex
,
memcpy
(((
u8
*
)
skb_out
->
data
)
+
ctx
->
tx_ncm
.
nth16
.
w
Nd
pIndex
,
&
(
ctx
->
tx_ncm
.
ndp16
),
sizeof
(
ctx
->
tx_ncm
.
ndp16
));
memcpy
(((
u8
*
)
skb_out
->
data
)
+
ctx
->
tx_ncm
.
nth16
.
w
F
pIndex
+
memcpy
(((
u8
*
)
skb_out
->
data
)
+
ctx
->
tx_ncm
.
nth16
.
w
Nd
pIndex
+
sizeof
(
ctx
->
tx_ncm
.
ndp16
),
&
(
ctx
->
tx_ncm
.
dpe16
),
(
ctx
->
tx_curr_frame_num
+
1
)
*
...
...
@@ -961,7 +1028,7 @@ static int cdc_ncm_rx_fixup(struct usbnet *dev, struct sk_buff *skb_in)
goto
error
;
}
temp
=
le16_to_cpu
(
ctx
->
rx_ncm
.
nth16
.
w
F
pIndex
);
temp
=
le16_to_cpu
(
ctx
->
rx_ncm
.
nth16
.
w
Nd
pIndex
);
if
((
temp
+
sizeof
(
ctx
->
rx_ncm
.
ndp16
))
>
actlen
)
{
pr_debug
(
"invalid DPT16 index
\n
"
);
goto
error
;
...
...
@@ -1048,10 +1115,10 @@ static int cdc_ncm_rx_fixup(struct usbnet *dev, struct sk_buff *skb_in)
static
void
cdc_ncm_speed_change
(
struct
cdc_ncm_ctx
*
ctx
,
struct
connection
_speed_change
*
data
)
struct
usb_cdc
_speed_change
*
data
)
{
uint32_t
rx_speed
=
le32_to_cpu
(
data
->
USBit
Rate
);
uint32_t
tx_speed
=
le32_to_cpu
(
data
->
DS
BitRate
);
uint32_t
rx_speed
=
le32_to_cpu
(
data
->
DLBitR
Rate
);
uint32_t
tx_speed
=
le32_to_cpu
(
data
->
UL
BitRate
);
/*
* Currently the USB-NET API does not support reporting the actual
...
...
@@ -1092,7 +1159,7 @@ static void cdc_ncm_status(struct usbnet *dev, struct urb *urb)
/* test for split data in 8-byte chunks */
if
(
test_and_clear_bit
(
EVENT_STS_SPLIT
,
&
dev
->
flags
))
{
cdc_ncm_speed_change
(
ctx
,
(
struct
connection
_speed_change
*
)
urb
->
transfer_buffer
);
(
struct
usb_cdc
_speed_change
*
)
urb
->
transfer_buffer
);
return
;
}
...
...
@@ -1120,12 +1187,12 @@ static void cdc_ncm_status(struct usbnet *dev, struct urb *urb)
break
;
case
USB_CDC_NOTIFY_SPEED_CHANGE
:
if
(
urb
->
actual_length
<
(
sizeof
(
*
event
)
+
sizeof
(
struct
connection
_speed_change
)))
if
(
urb
->
actual_length
<
(
sizeof
(
*
event
)
+
sizeof
(
struct
usb_cdc
_speed_change
)))
set_bit
(
EVENT_STS_SPLIT
,
&
dev
->
flags
);
else
cdc_ncm_speed_change
(
ctx
,
(
struct
connection
_speed_change
*
)
&
event
[
1
]);
(
struct
usb_cdc
_speed_change
*
)
&
event
[
1
]);
break
;
default:
...
...
drivers/net/wireless/ath/ath9k/ath9k.h
浏览文件 @
263fb5b1
...
...
@@ -218,6 +218,7 @@ struct ath_frame_info {
struct
ath_buf_state
{
u8
bf_type
;
u8
bfs_paprd
;
unsigned
long
bfs_paprd_timestamp
;
enum
ath9k_internal_frame_type
bfs_ftype
;
};
...
...
@@ -600,7 +601,6 @@ struct ath_softc {
struct
work_struct
paprd_work
;
struct
work_struct
hw_check_work
;
struct
completion
paprd_complete
;
bool
paprd_pending
;
unsigned
int
hw_busy_count
;
...
...
drivers/net/wireless/ath/ath9k/main.c
浏览文件 @
263fb5b1
...
...
@@ -342,7 +342,6 @@ static bool ath_paprd_send_frame(struct ath_softc *sc, struct sk_buff *skb, int
tx_info
->
control
.
rates
[
1
].
idx
=
-
1
;
init_completion
(
&
sc
->
paprd_complete
);
sc
->
paprd_pending
=
true
;
txctl
.
paprd
=
BIT
(
chain
);
if
(
ath_tx_start
(
hw
,
skb
,
&
txctl
)
!=
0
)
{
...
...
@@ -353,7 +352,6 @@ static bool ath_paprd_send_frame(struct ath_softc *sc, struct sk_buff *skb, int
time_left
=
wait_for_completion_timeout
(
&
sc
->
paprd_complete
,
msecs_to_jiffies
(
ATH_PAPRD_TIMEOUT
));
sc
->
paprd_pending
=
false
;
if
(
!
time_left
)
ath_dbg
(
ath9k_hw_common
(
sc
->
sc_ah
),
ATH_DBG_CALIBRATE
,
...
...
drivers/net/wireless/ath/ath9k/xmit.c
浏览文件 @
263fb5b1
...
...
@@ -1752,6 +1752,9 @@ static void ath_tx_start_dma(struct ath_softc *sc, struct ath_buf *bf,
ar9003_hw_set_paprd_txdesc
(
sc
->
sc_ah
,
bf
->
bf_desc
,
bf
->
bf_state
.
bfs_paprd
);
if
(
txctl
->
paprd
)
bf
->
bf_state
.
bfs_paprd_timestamp
=
jiffies
;
ath_tx_send_normal
(
sc
,
txctl
->
txq
,
tid
,
&
bf_head
);
}
...
...
@@ -1909,7 +1912,9 @@ static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf,
bf
->
bf_buf_addr
=
0
;
if
(
bf
->
bf_state
.
bfs_paprd
)
{
if
(
!
sc
->
paprd_pending
)
if
(
time_after
(
jiffies
,
bf
->
bf_state
.
bfs_paprd_timestamp
+
msecs_to_jiffies
(
ATH_PAPRD_TIMEOUT
)))
dev_kfree_skb_any
(
skb
);
else
complete
(
&
sc
->
paprd_complete
);
...
...
drivers/net/wireless/ath/carl9170/rx.c
浏览文件 @
263fb5b1
...
...
@@ -564,7 +564,7 @@ static void carl9170_ps_beacon(struct ar9170 *ar, void *data, unsigned int len)
cam
=
ieee80211_check_tim
(
tim_ie
,
tim_len
,
ar
->
common
.
curaid
);
/* 2. Maybe the AP wants to send multicast/broadcast data? */
cam
=
!!
(
tim_ie
->
bitmap_ctrl
&
0x01
);
cam
|
=
!!
(
tim_ie
->
bitmap_ctrl
&
0x01
);
if
(
!
cam
)
{
/* back to low-power land. */
...
...
drivers/net/wireless/iwlwifi/iwl-6000.c
浏览文件 @
263fb5b1
...
...
@@ -678,6 +678,8 @@ struct iwl_cfg iwl6000i_2bg_cfg = {
.fw_name_pre = IWL6050_FW_PRE, \
.ucode_api_max = IWL6050_UCODE_API_MAX, \
.ucode_api_min = IWL6050_UCODE_API_MIN, \
.valid_tx_ant = ANT_AB,
/* .cfg overwrite */
\
.valid_rx_ant = ANT_AB,
/* .cfg overwrite */
\
.ops = &iwl6050_ops, \
.eeprom_ver = EEPROM_6050_EEPROM_VERSION, \
.eeprom_calib_ver = EEPROM_6050_TX_POWER_VERSION, \
...
...
drivers/net/wireless/iwlwifi/iwl-agn.c
浏览文件 @
263fb5b1
...
...
@@ -1183,6 +1183,9 @@ static void iwl_irq_tasklet_legacy(struct iwl_priv *priv)
/* only Re-enable if disabled by irq */
if
(
test_bit
(
STATUS_INT_ENABLED
,
&
priv
->
status
))
iwl_enable_interrupts
(
priv
);
/* Re-enable RF_KILL if it occurred */
else
if
(
handled
&
CSR_INT_BIT_RF_KILL
)
iwl_enable_rfkill_int
(
priv
);
#ifdef CONFIG_IWLWIFI_DEBUG
if
(
iwl_get_debug_level
(
priv
)
&
(
IWL_DL_ISR
))
{
...
...
@@ -1397,6 +1400,9 @@ static void iwl_irq_tasklet(struct iwl_priv *priv)
/* only Re-enable if disabled by irq */
if
(
test_bit
(
STATUS_INT_ENABLED
,
&
priv
->
status
))
iwl_enable_interrupts
(
priv
);
/* Re-enable RF_KILL if it occurred */
else
if
(
handled
&
CSR_INT_BIT_RF_KILL
)
iwl_enable_rfkill_int
(
priv
);
}
/* the threshold ratio of actual_ack_cnt to expected_ack_cnt in percent */
...
...
drivers/net/wireless/wl1251/main.c
浏览文件 @
263fb5b1
...
...
@@ -1050,6 +1050,9 @@ static void wl1251_op_bss_info_changed(struct ieee80211_hw *hw,
if
(
changed
&
BSS_CHANGED_BEACON
)
{
beacon
=
ieee80211_beacon_get
(
hw
,
vif
);
if
(
!
beacon
)
goto
out_sleep
;
ret
=
wl1251_cmd_template_set
(
wl
,
CMD_BEACON
,
beacon
->
data
,
beacon
->
len
);
...
...
drivers/ssb/pcmcia.c
浏览文件 @
263fb5b1
...
...
@@ -733,7 +733,7 @@ int ssb_pcmcia_get_invariants(struct ssb_bus *bus,
/* Fetch the vendor specific tuples. */
res
=
pcmcia_loop_tuple
(
bus
->
host_pcmcia
,
SSB_PCMCIA_CIS
,
ssb_pcmcia_do_get_invariants
,
sprom
);
ssb_pcmcia_do_get_invariants
,
iv
);
if
((
res
==
0
)
||
(
res
==
-
ENOSPC
))
return
0
;
...
...
include/linux/usb/cdc.h
浏览文件 @
263fb5b1
...
...
@@ -89,7 +89,7 @@ struct usb_cdc_acm_descriptor {
#define USB_CDC_COMM_FEATURE 0x01
#define USB_CDC_CAP_LINE 0x02
#define USB_CDC_CAP_BRK 0x04
#define USB_CDC_CAP_BRK
0x04
#define USB_CDC_CAP_NOTIFY 0x08
/* "Union Functional Descriptor" from CDC spec 5.2.3.8 */
...
...
@@ -271,6 +271,11 @@ struct usb_cdc_notification {
__le16
wLength
;
}
__attribute__
((
packed
));
struct
usb_cdc_speed_change
{
__le32
DLBitRRate
;
/* contains the downlink bit rate (IN pipe) */
__le32
ULBitRate
;
/* contains the uplink bit rate (OUT pipe) */
}
__attribute__
((
packed
));
/*-------------------------------------------------------------------------*/
/*
...
...
@@ -292,7 +297,7 @@ struct usb_cdc_ncm_ntb_parameters {
__le16
wNdpOutDivisor
;
__le16
wNdpOutPayloadRemainder
;
__le16
wNdpOutAlignment
;
__le16
w
Padding2
;
__le16
w
NtbOutMaxDatagrams
;
}
__attribute__
((
packed
));
/*
...
...
@@ -307,7 +312,7 @@ struct usb_cdc_ncm_nth16 {
__le16
wHeaderLength
;
__le16
wSequence
;
__le16
wBlockLength
;
__le16
w
F
pIndex
;
__le16
w
Nd
pIndex
;
}
__attribute__
((
packed
));
struct
usb_cdc_ncm_nth32
{
...
...
@@ -315,7 +320,7 @@ struct usb_cdc_ncm_nth32 {
__le16
wHeaderLength
;
__le16
wSequence
;
__le32
dwBlockLength
;
__le32
dw
F
pIndex
;
__le32
dw
Nd
pIndex
;
}
__attribute__
((
packed
));
/*
...
...
@@ -337,7 +342,7 @@ struct usb_cdc_ncm_dpe16 {
struct
usb_cdc_ncm_ndp16
{
__le32
dwSignature
;
__le16
wLength
;
__le16
wNext
F
pIndex
;
__le16
wNext
Nd
pIndex
;
struct
usb_cdc_ncm_dpe16
dpe16
[
0
];
}
__attribute__
((
packed
));
...
...
@@ -375,6 +380,7 @@ struct usb_cdc_ncm_ndp32 {
#define USB_CDC_NCM_NCAP_ENCAP_COMMAND (1 << 2)
#define USB_CDC_NCM_NCAP_MAX_DATAGRAM_SIZE (1 << 3)
#define USB_CDC_NCM_NCAP_CRC_MODE (1 << 4)
#define USB_CDC_NCM_NCAP_NTB_INPUT_SIZE (1 << 5)
/* CDC NCM subclass Table 6-3: NTB Parameter Structure */
#define USB_CDC_NCM_NTB16_SUPPORTED (1 << 0)
...
...
@@ -392,6 +398,13 @@ struct usb_cdc_ncm_ndp32 {
#define USB_CDC_NCM_NTB_MIN_IN_SIZE 2048
#define USB_CDC_NCM_NTB_MIN_OUT_SIZE 2048
/* NTB Input Size Structure */
struct
usb_cdc_ncm_ndp_input_size
{
__le32
dwNtbInMaxSize
;
__le16
wNtbInMaxDatagrams
;
__le16
wReserved
;
}
__attribute__
((
packed
));
/* CDC NCM subclass 6.2.11 SetCrcMode */
#define USB_CDC_NCM_CRC_NOT_APPENDED 0x00
#define USB_CDC_NCM_CRC_APPENDED 0x01
...
...
net/batman-adv/unicast.c
浏览文件 @
263fb5b1
...
...
@@ -50,12 +50,12 @@ static struct sk_buff *frag_merge_packet(struct list_head *head,
skb
=
tfp
->
skb
;
}
if
(
skb_linearize
(
skb
)
<
0
||
skb_linearize
(
tmp_skb
)
<
0
)
goto
err
;
skb_pull
(
tmp_skb
,
sizeof
(
struct
unicast_frag_packet
));
if
(
pskb_expand_head
(
skb
,
0
,
tmp_skb
->
len
,
GFP_ATOMIC
)
<
0
)
{
/* free buffered skb, skb will be freed later */
kfree_skb
(
tfp
->
skb
);
return
NULL
;
}
if
(
pskb_expand_head
(
skb
,
0
,
tmp_skb
->
len
,
GFP_ATOMIC
)
<
0
)
goto
err
;
/* move free entry to end */
tfp
->
skb
=
NULL
;
...
...
@@ -70,6 +70,11 @@ static struct sk_buff *frag_merge_packet(struct list_head *head,
unicast_packet
->
packet_type
=
BAT_UNICAST
;
return
skb
;
err:
/* free buffered skb, skb will be freed later */
kfree_skb
(
tfp
->
skb
);
return
NULL
;
}
static
void
frag_create_entry
(
struct
list_head
*
head
,
struct
sk_buff
*
skb
)
...
...
net/caif/chnl_net.c
浏览文件 @
263fb5b1
...
...
@@ -394,9 +394,7 @@ static void ipcaif_net_setup(struct net_device *dev)
priv
->
conn_req
.
sockaddr
.
u
.
dgm
.
connection_id
=
-
1
;
priv
->
flowenabled
=
false
;
ASSERT_RTNL
();
init_waitqueue_head
(
&
priv
->
netmgmt_wq
);
list_add
(
&
priv
->
list_field
,
&
chnl_net_list
);
}
...
...
@@ -453,6 +451,8 @@ static int ipcaif_newlink(struct net *src_net, struct net_device *dev,
ret
=
register_netdevice
(
dev
);
if
(
ret
)
pr_warn
(
"device rtml registration failed
\n
"
);
else
list_add
(
&
caifdev
->
list_field
,
&
chnl_net_list
);
return
ret
;
}
...
...
net/core/dev.c
浏览文件 @
263fb5b1
...
...
@@ -5807,31 +5807,36 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name,
dev_net_set
(
dev
,
&
init_net
);
dev
->
gso_max_size
=
GSO_MAX_SIZE
;
INIT_LIST_HEAD
(
&
dev
->
ethtool_ntuple_list
.
list
);
dev
->
ethtool_ntuple_list
.
count
=
0
;
INIT_LIST_HEAD
(
&
dev
->
napi_list
);
INIT_LIST_HEAD
(
&
dev
->
unreg_list
);
INIT_LIST_HEAD
(
&
dev
->
link_watch_list
);
dev
->
priv_flags
=
IFF_XMIT_DST_RELEASE
;
setup
(
dev
);
dev
->
num_tx_queues
=
txqs
;
dev
->
real_num_tx_queues
=
txqs
;
if
(
netif_alloc_netdev_queues
(
dev
))
goto
free_
pcpu
;
goto
free_
all
;
#ifdef CONFIG_RPS
dev
->
num_rx_queues
=
rxqs
;
dev
->
real_num_rx_queues
=
rxqs
;
if
(
netif_alloc_rx_queues
(
dev
))
goto
free_
pcpu
;
goto
free_
all
;
#endif
dev
->
gso_max_size
=
GSO_MAX_SIZE
;
INIT_LIST_HEAD
(
&
dev
->
ethtool_ntuple_list
.
list
);
dev
->
ethtool_ntuple_list
.
count
=
0
;
INIT_LIST_HEAD
(
&
dev
->
napi_list
);
INIT_LIST_HEAD
(
&
dev
->
unreg_list
);
INIT_LIST_HEAD
(
&
dev
->
link_watch_list
);
dev
->
priv_flags
=
IFF_XMIT_DST_RELEASE
;
setup
(
dev
);
strcpy
(
dev
->
name
,
name
);
dev
->
group
=
INIT_NETDEV_GROUP
;
return
dev
;
free_all:
free_netdev
(
dev
);
return
NULL
;
free_pcpu:
free_percpu
(
dev
->
pcpu_refcnt
);
kfree
(
dev
->
_tx
);
...
...
net/mac80211/cfg.c
浏览文件 @
263fb5b1
...
...
@@ -1838,6 +1838,7 @@ static int ieee80211_mgmt_tx(struct wiphy *wiphy, struct net_device *dev,
*
cookie
^=
2
;
IEEE80211_SKB_CB
(
skb
)
->
flags
|=
IEEE80211_TX_CTL_TX_OFFCHAN
;
local
->
hw_roc_skb
=
skb
;
local
->
hw_roc_skb_for_status
=
skb
;
mutex_unlock
(
&
local
->
mtx
);
return
0
;
...
...
@@ -1891,6 +1892,7 @@ static int ieee80211_mgmt_tx_cancel_wait(struct wiphy *wiphy,
if
(
ret
==
0
)
{
kfree_skb
(
local
->
hw_roc_skb
);
local
->
hw_roc_skb
=
NULL
;
local
->
hw_roc_skb_for_status
=
NULL
;
}
mutex_unlock
(
&
local
->
mtx
);
...
...
net/mac80211/ieee80211_i.h
浏览文件 @
263fb5b1
...
...
@@ -951,7 +951,7 @@ struct ieee80211_local {
struct
ieee80211_channel
*
hw_roc_channel
;
struct
net_device
*
hw_roc_dev
;
struct
sk_buff
*
hw_roc_skb
;
struct
sk_buff
*
hw_roc_skb
,
*
hw_roc_skb_for_status
;
struct
work_struct
hw_roc_start
,
hw_roc_done
;
enum
nl80211_channel_type
hw_roc_channel_type
;
unsigned
int
hw_roc_duration
;
...
...
net/mac80211/status.c
浏览文件 @
263fb5b1
...
...
@@ -327,6 +327,7 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
if
(
info
->
flags
&
IEEE80211_TX_INTFL_NL80211_FRAME_TX
)
{
struct
ieee80211_work
*
wk
;
u64
cookie
=
(
unsigned
long
)
skb
;
rcu_read_lock
();
list_for_each_entry_rcu
(
wk
,
&
local
->
work_list
,
list
)
{
...
...
@@ -338,8 +339,12 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
break
;
}
rcu_read_unlock
();
if
(
local
->
hw_roc_skb_for_status
==
skb
)
{
cookie
=
local
->
hw_roc_cookie
^
2
;
local
->
hw_roc_skb_for_status
=
NULL
;
}
cfg80211_mgmt_tx_status
(
skb
->
dev
,
(
unsigned
long
)
skb
,
skb
->
data
,
skb
->
len
,
skb
->
dev
,
cookie
,
skb
->
data
,
skb
->
len
,
!!
(
info
->
flags
&
IEEE80211_TX_STAT_ACK
),
GFP_ATOMIC
);
}
...
...
net/mac80211/tx.c
浏览文件 @
263fb5b1
...
...
@@ -1549,7 +1549,7 @@ static int ieee80211_skb_resize(struct ieee80211_local *local,
skb_orphan
(
skb
);
}
if
(
skb_
header_
cloned
(
skb
))
if
(
skb_cloned
(
skb
))
I802_DEBUG_INC
(
local
->
tx_expand_skb_head_cloned
);
else
if
(
head_need
||
tail_need
)
I802_DEBUG_INC
(
local
->
tx_expand_skb_head
);
...
...
net/x25/x25_facilities.c
浏览文件 @
263fb5b1
...
...
@@ -27,9 +27,19 @@
#include <net/sock.h>
#include <net/x25.h>
/*
* Parse a set of facilities into the facilities structures. Unrecognised
* facilities are written to the debug log file.
/**
* x25_parse_facilities - Parse facilities from skb into the facilities structs
*
* @skb: sk_buff to parse
* @facilities: Regular facilites, updated as facilities are found
* @dte_facs: ITU DTE facilities, updated as DTE facilities are found
* @vc_fac_mask: mask is updated with all facilities found
*
* Return codes:
* -1 - Parsing error, caller should drop call and clean up
* 0 - Parse OK, this skb has no facilities
* >0 - Parse OK, returns the length of the facilities header
*
*/
int
x25_parse_facilities
(
struct
sk_buff
*
skb
,
struct
x25_facilities
*
facilities
,
struct
x25_dte_facilities
*
dte_facs
,
unsigned
long
*
vc_fac_mask
)
...
...
@@ -62,7 +72,7 @@ int x25_parse_facilities(struct sk_buff *skb, struct x25_facilities *facilities,
switch
(
*
p
&
X25_FAC_CLASS_MASK
)
{
case
X25_FAC_CLASS_A
:
if
(
len
<
2
)
return
0
;
return
-
1
;
switch
(
*
p
)
{
case
X25_FAC_REVERSE
:
if
((
p
[
1
]
&
0x81
)
==
0x81
)
{
...
...
@@ -107,7 +117,7 @@ int x25_parse_facilities(struct sk_buff *skb, struct x25_facilities *facilities,
break
;
case
X25_FAC_CLASS_B
:
if
(
len
<
3
)
return
0
;
return
-
1
;
switch
(
*
p
)
{
case
X25_FAC_PACKET_SIZE
:
facilities
->
pacsize_in
=
p
[
1
];
...
...
@@ -130,7 +140,7 @@ int x25_parse_facilities(struct sk_buff *skb, struct x25_facilities *facilities,
break
;
case
X25_FAC_CLASS_C
:
if
(
len
<
4
)
return
0
;
return
-
1
;
printk
(
KERN_DEBUG
"X.25: unknown facility %02X, "
"values %02X, %02X, %02X
\n
"
,
p
[
0
],
p
[
1
],
p
[
2
],
p
[
3
]);
...
...
@@ -139,18 +149,18 @@ int x25_parse_facilities(struct sk_buff *skb, struct x25_facilities *facilities,
break
;
case
X25_FAC_CLASS_D
:
if
(
len
<
p
[
1
]
+
2
)
return
0
;
return
-
1
;
switch
(
*
p
)
{
case
X25_FAC_CALLING_AE
:
if
(
p
[
1
]
>
X25_MAX_DTE_FACIL_LEN
||
p
[
1
]
<=
1
)
return
0
;
return
-
1
;
dte_facs
->
calling_len
=
p
[
2
];
memcpy
(
dte_facs
->
calling_ae
,
&
p
[
3
],
p
[
1
]
-
1
);
*
vc_fac_mask
|=
X25_MASK_CALLING_AE
;
break
;
case
X25_FAC_CALLED_AE
:
if
(
p
[
1
]
>
X25_MAX_DTE_FACIL_LEN
||
p
[
1
]
<=
1
)
return
0
;
return
-
1
;
dte_facs
->
called_len
=
p
[
2
];
memcpy
(
dte_facs
->
called_ae
,
&
p
[
3
],
p
[
1
]
-
1
);
*
vc_fac_mask
|=
X25_MASK_CALLED_AE
;
...
...
net/x25/x25_in.c
浏览文件 @
263fb5b1
...
...
@@ -91,10 +91,10 @@ static int x25_state1_machine(struct sock *sk, struct sk_buff *skb, int frametyp
{
struct
x25_address
source_addr
,
dest_addr
;
int
len
;
struct
x25_sock
*
x25
=
x25_sk
(
sk
);
switch
(
frametype
)
{
case
X25_CALL_ACCEPTED
:
{
struct
x25_sock
*
x25
=
x25_sk
(
sk
);
x25_stop_timer
(
sk
);
x25
->
condition
=
0x00
;
...
...
@@ -113,14 +113,16 @@ static int x25_state1_machine(struct sock *sk, struct sk_buff *skb, int frametyp
&
dest_addr
);
if
(
len
>
0
)
skb_pull
(
skb
,
len
);
else
if
(
len
<
0
)
goto
out_clear
;
len
=
x25_parse_facilities
(
skb
,
&
x25
->
facilities
,
&
x25
->
dte_facilities
,
&
x25
->
vc_facil_mask
);
if
(
len
>
0
)
skb_pull
(
skb
,
len
);
else
return
-
1
;
else
if
(
len
<
0
)
goto
out_clear
;
/*
* Copy any Call User Data.
*/
...
...
@@ -144,6 +146,12 @@ static int x25_state1_machine(struct sock *sk, struct sk_buff *skb, int frametyp
}
return
0
;
out_clear:
x25_write_internal
(
sk
,
X25_CLEAR_REQUEST
);
x25
->
state
=
X25_STATE_2
;
x25_start_t23timer
(
sk
);
return
0
;
}
/*
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录