diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-09-05 08:05:11 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-09-05 08:05:11 -0400 |
commit | 75d8f2931a803b803cb4a850448460475c20f30b (patch) | |
tree | 9853b9084fa55609c8e4abbc1763bc500e05da50 /drivers/net | |
parent | ffb690d5aa36d38d7bed7579e3f07b84ff6b3a08 (diff) | |
parent | e93c7d1bc350189511d32cec2f0af79c30e7fa47 (diff) |
Merge branch 'asoc-omap' into for-3.7
Diffstat (limited to 'drivers/net')
34 files changed, 163 insertions, 320 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 6fae5f3ec7f6..d688a8af432c 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c | |||
@@ -398,7 +398,7 @@ int bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, | |||
398 | sizeof(qdisc_skb_cb(skb)->slave_dev_queue_mapping)); | 398 | sizeof(qdisc_skb_cb(skb)->slave_dev_queue_mapping)); |
399 | skb->queue_mapping = qdisc_skb_cb(skb)->slave_dev_queue_mapping; | 399 | skb->queue_mapping = qdisc_skb_cb(skb)->slave_dev_queue_mapping; |
400 | 400 | ||
401 | if (unlikely(netpoll_tx_running(slave_dev))) | 401 | if (unlikely(netpoll_tx_running(bond->dev))) |
402 | bond_netpoll_send_skb(bond_get_slave_by_dev(bond, slave_dev), skb); | 402 | bond_netpoll_send_skb(bond_get_slave_by_dev(bond, slave_dev), skb); |
403 | else | 403 | else |
404 | dev_queue_xmit(skb); | 404 | dev_queue_xmit(skb); |
@@ -1235,12 +1235,12 @@ static inline int slave_enable_netpoll(struct slave *slave) | |||
1235 | struct netpoll *np; | 1235 | struct netpoll *np; |
1236 | int err = 0; | 1236 | int err = 0; |
1237 | 1237 | ||
1238 | np = kzalloc(sizeof(*np), GFP_KERNEL); | 1238 | np = kzalloc(sizeof(*np), GFP_ATOMIC); |
1239 | err = -ENOMEM; | 1239 | err = -ENOMEM; |
1240 | if (!np) | 1240 | if (!np) |
1241 | goto out; | 1241 | goto out; |
1242 | 1242 | ||
1243 | err = __netpoll_setup(np, slave->dev); | 1243 | err = __netpoll_setup(np, slave->dev, GFP_ATOMIC); |
1244 | if (err) { | 1244 | if (err) { |
1245 | kfree(np); | 1245 | kfree(np); |
1246 | goto out; | 1246 | goto out; |
@@ -1257,9 +1257,7 @@ static inline void slave_disable_netpoll(struct slave *slave) | |||
1257 | return; | 1257 | return; |
1258 | 1258 | ||
1259 | slave->np = NULL; | 1259 | slave->np = NULL; |
1260 | synchronize_rcu_bh(); | 1260 | __netpoll_free_rcu(np); |
1261 | __netpoll_cleanup(np); | ||
1262 | kfree(np); | ||
1263 | } | 1261 | } |
1264 | static inline bool slave_dev_support_netpoll(struct net_device *slave_dev) | 1262 | static inline bool slave_dev_support_netpoll(struct net_device *slave_dev) |
1265 | { | 1263 | { |
@@ -1292,7 +1290,7 @@ static void bond_netpoll_cleanup(struct net_device *bond_dev) | |||
1292 | read_unlock(&bond->lock); | 1290 | read_unlock(&bond->lock); |
1293 | } | 1291 | } |
1294 | 1292 | ||
1295 | static int bond_netpoll_setup(struct net_device *dev, struct netpoll_info *ni) | 1293 | static int bond_netpoll_setup(struct net_device *dev, struct netpoll_info *ni, gfp_t gfp) |
1296 | { | 1294 | { |
1297 | struct bonding *bond = netdev_priv(dev); | 1295 | struct bonding *bond = netdev_priv(dev); |
1298 | struct slave *slave; | 1296 | struct slave *slave; |
diff --git a/drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c b/drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c index 0f2d1a710909..151453309401 100644 --- a/drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c +++ b/drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c | |||
@@ -174,8 +174,10 @@ static int __devinit fs_enet_mdio_probe(struct platform_device *ofdev) | |||
174 | 174 | ||
175 | new_bus->phy_mask = ~0; | 175 | new_bus->phy_mask = ~0; |
176 | new_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL); | 176 | new_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL); |
177 | if (!new_bus->irq) | 177 | if (!new_bus->irq) { |
178 | ret = -ENOMEM; | ||
178 | goto out_unmap_regs; | 179 | goto out_unmap_regs; |
180 | } | ||
179 | 181 | ||
180 | new_bus->parent = &ofdev->dev; | 182 | new_bus->parent = &ofdev->dev; |
181 | dev_set_drvdata(&ofdev->dev, new_bus); | 183 | dev_set_drvdata(&ofdev->dev, new_bus); |
diff --git a/drivers/net/ethernet/freescale/fs_enet/mii-fec.c b/drivers/net/ethernet/freescale/fs_enet/mii-fec.c index 55bb867258e6..cdf702a59485 100644 --- a/drivers/net/ethernet/freescale/fs_enet/mii-fec.c +++ b/drivers/net/ethernet/freescale/fs_enet/mii-fec.c | |||
@@ -137,8 +137,10 @@ static int __devinit fs_enet_mdio_probe(struct platform_device *ofdev) | |||
137 | snprintf(new_bus->id, MII_BUS_ID_SIZE, "%x", res.start); | 137 | snprintf(new_bus->id, MII_BUS_ID_SIZE, "%x", res.start); |
138 | 138 | ||
139 | fec->fecp = ioremap(res.start, resource_size(&res)); | 139 | fec->fecp = ioremap(res.start, resource_size(&res)); |
140 | if (!fec->fecp) | 140 | if (!fec->fecp) { |
141 | ret = -ENOMEM; | ||
141 | goto out_fec; | 142 | goto out_fec; |
143 | } | ||
142 | 144 | ||
143 | if (get_bus_freq) { | 145 | if (get_bus_freq) { |
144 | clock = get_bus_freq(ofdev->dev.of_node); | 146 | clock = get_bus_freq(ofdev->dev.of_node); |
@@ -172,8 +174,10 @@ static int __devinit fs_enet_mdio_probe(struct platform_device *ofdev) | |||
172 | 174 | ||
173 | new_bus->phy_mask = ~0; | 175 | new_bus->phy_mask = ~0; |
174 | new_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL); | 176 | new_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL); |
175 | if (!new_bus->irq) | 177 | if (!new_bus->irq) { |
178 | ret = -ENOMEM; | ||
176 | goto out_unmap_regs; | 179 | goto out_unmap_regs; |
180 | } | ||
177 | 181 | ||
178 | new_bus->parent = &ofdev->dev; | 182 | new_bus->parent = &ofdev->dev; |
179 | dev_set_drvdata(&ofdev->dev, new_bus); | 183 | dev_set_drvdata(&ofdev->dev, new_bus); |
diff --git a/drivers/net/ethernet/mellanox/mlx4/icm.c b/drivers/net/ethernet/mellanox/mlx4/icm.c index 88b7b3e75ab1..daf417923661 100644 --- a/drivers/net/ethernet/mellanox/mlx4/icm.c +++ b/drivers/net/ethernet/mellanox/mlx4/icm.c | |||
@@ -358,13 +358,14 @@ void mlx4_table_put_range(struct mlx4_dev *dev, struct mlx4_icm_table *table, | |||
358 | } | 358 | } |
359 | 359 | ||
360 | int mlx4_init_icm_table(struct mlx4_dev *dev, struct mlx4_icm_table *table, | 360 | int mlx4_init_icm_table(struct mlx4_dev *dev, struct mlx4_icm_table *table, |
361 | u64 virt, int obj_size, int nobj, int reserved, | 361 | u64 virt, int obj_size, u32 nobj, int reserved, |
362 | int use_lowmem, int use_coherent) | 362 | int use_lowmem, int use_coherent) |
363 | { | 363 | { |
364 | int obj_per_chunk; | 364 | int obj_per_chunk; |
365 | int num_icm; | 365 | int num_icm; |
366 | unsigned chunk_size; | 366 | unsigned chunk_size; |
367 | int i; | 367 | int i; |
368 | u64 size; | ||
368 | 369 | ||
369 | obj_per_chunk = MLX4_TABLE_CHUNK_SIZE / obj_size; | 370 | obj_per_chunk = MLX4_TABLE_CHUNK_SIZE / obj_size; |
370 | num_icm = (nobj + obj_per_chunk - 1) / obj_per_chunk; | 371 | num_icm = (nobj + obj_per_chunk - 1) / obj_per_chunk; |
@@ -380,10 +381,12 @@ int mlx4_init_icm_table(struct mlx4_dev *dev, struct mlx4_icm_table *table, | |||
380 | table->coherent = use_coherent; | 381 | table->coherent = use_coherent; |
381 | mutex_init(&table->mutex); | 382 | mutex_init(&table->mutex); |
382 | 383 | ||
384 | size = (u64) nobj * obj_size; | ||
383 | for (i = 0; i * MLX4_TABLE_CHUNK_SIZE < reserved * obj_size; ++i) { | 385 | for (i = 0; i * MLX4_TABLE_CHUNK_SIZE < reserved * obj_size; ++i) { |
384 | chunk_size = MLX4_TABLE_CHUNK_SIZE; | 386 | chunk_size = MLX4_TABLE_CHUNK_SIZE; |
385 | if ((i + 1) * MLX4_TABLE_CHUNK_SIZE > nobj * obj_size) | 387 | if ((i + 1) * MLX4_TABLE_CHUNK_SIZE > size) |
386 | chunk_size = PAGE_ALIGN(nobj * obj_size - i * MLX4_TABLE_CHUNK_SIZE); | 388 | chunk_size = PAGE_ALIGN(size - |
389 | i * MLX4_TABLE_CHUNK_SIZE); | ||
387 | 390 | ||
388 | table->icm[i] = mlx4_alloc_icm(dev, chunk_size >> PAGE_SHIFT, | 391 | table->icm[i] = mlx4_alloc_icm(dev, chunk_size >> PAGE_SHIFT, |
389 | (use_lowmem ? GFP_KERNEL : GFP_HIGHUSER) | | 392 | (use_lowmem ? GFP_KERNEL : GFP_HIGHUSER) | |
diff --git a/drivers/net/ethernet/mellanox/mlx4/icm.h b/drivers/net/ethernet/mellanox/mlx4/icm.h index 19e4efc0b342..a67744f53506 100644 --- a/drivers/net/ethernet/mellanox/mlx4/icm.h +++ b/drivers/net/ethernet/mellanox/mlx4/icm.h | |||
@@ -78,7 +78,7 @@ int mlx4_table_get_range(struct mlx4_dev *dev, struct mlx4_icm_table *table, | |||
78 | void mlx4_table_put_range(struct mlx4_dev *dev, struct mlx4_icm_table *table, | 78 | void mlx4_table_put_range(struct mlx4_dev *dev, struct mlx4_icm_table *table, |
79 | int start, int end); | 79 | int start, int end); |
80 | int mlx4_init_icm_table(struct mlx4_dev *dev, struct mlx4_icm_table *table, | 80 | int mlx4_init_icm_table(struct mlx4_dev *dev, struct mlx4_icm_table *table, |
81 | u64 virt, int obj_size, int nobj, int reserved, | 81 | u64 virt, int obj_size, u32 nobj, int reserved, |
82 | int use_lowmem, int use_coherent); | 82 | int use_lowmem, int use_coherent); |
83 | void mlx4_cleanup_icm_table(struct mlx4_dev *dev, struct mlx4_icm_table *table); | 83 | void mlx4_cleanup_icm_table(struct mlx4_dev *dev, struct mlx4_icm_table *table); |
84 | void *mlx4_table_find(struct mlx4_icm_table *table, int obj, dma_addr_t *dma_handle); | 84 | void *mlx4_table_find(struct mlx4_icm_table *table, int obj, dma_addr_t *dma_handle); |
diff --git a/drivers/net/ethernet/mellanox/mlx4/mcg.c b/drivers/net/ethernet/mellanox/mlx4/mcg.c index 4ec3835e1bc2..a018ea2a43de 100644 --- a/drivers/net/ethernet/mellanox/mlx4/mcg.c +++ b/drivers/net/ethernet/mellanox/mlx4/mcg.c | |||
@@ -432,8 +432,10 @@ static int add_promisc_qp(struct mlx4_dev *dev, u8 port, | |||
432 | if ((be32_to_cpu(mgm->qp[i]) & MGM_QPN_MASK) == qpn) { | 432 | if ((be32_to_cpu(mgm->qp[i]) & MGM_QPN_MASK) == qpn) { |
433 | /* Entry already exists, add to duplicates */ | 433 | /* Entry already exists, add to duplicates */ |
434 | dqp = kmalloc(sizeof *dqp, GFP_KERNEL); | 434 | dqp = kmalloc(sizeof *dqp, GFP_KERNEL); |
435 | if (!dqp) | 435 | if (!dqp) { |
436 | err = -ENOMEM; | ||
436 | goto out_mailbox; | 437 | goto out_mailbox; |
438 | } | ||
437 | dqp->qpn = qpn; | 439 | dqp->qpn = qpn; |
438 | list_add_tail(&dqp->list, &entry->duplicates); | 440 | list_add_tail(&dqp->list, &entry->duplicates); |
439 | found = true; | 441 | found = true; |
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4.h b/drivers/net/ethernet/mellanox/mlx4/mlx4.h index 59ebc0339638..4d9df8f2a126 100644 --- a/drivers/net/ethernet/mellanox/mlx4/mlx4.h +++ b/drivers/net/ethernet/mellanox/mlx4/mlx4.h | |||
@@ -249,7 +249,7 @@ struct mlx4_bitmap { | |||
249 | struct mlx4_buddy { | 249 | struct mlx4_buddy { |
250 | unsigned long **bits; | 250 | unsigned long **bits; |
251 | unsigned int *num_free; | 251 | unsigned int *num_free; |
252 | int max_order; | 252 | u32 max_order; |
253 | spinlock_t lock; | 253 | spinlock_t lock; |
254 | }; | 254 | }; |
255 | 255 | ||
@@ -258,7 +258,7 @@ struct mlx4_icm; | |||
258 | struct mlx4_icm_table { | 258 | struct mlx4_icm_table { |
259 | u64 virt; | 259 | u64 virt; |
260 | int num_icm; | 260 | int num_icm; |
261 | int num_obj; | 261 | u32 num_obj; |
262 | int obj_size; | 262 | int obj_size; |
263 | int lowmem; | 263 | int lowmem; |
264 | int coherent; | 264 | int coherent; |
diff --git a/drivers/net/ethernet/mellanox/mlx4/mr.c b/drivers/net/ethernet/mellanox/mlx4/mr.c index af55b7ce5341..c202d3ad2a0e 100644 --- a/drivers/net/ethernet/mellanox/mlx4/mr.c +++ b/drivers/net/ethernet/mellanox/mlx4/mr.c | |||
@@ -37,6 +37,7 @@ | |||
37 | #include <linux/export.h> | 37 | #include <linux/export.h> |
38 | #include <linux/slab.h> | 38 | #include <linux/slab.h> |
39 | #include <linux/kernel.h> | 39 | #include <linux/kernel.h> |
40 | #include <linux/vmalloc.h> | ||
40 | 41 | ||
41 | #include <linux/mlx4/cmd.h> | 42 | #include <linux/mlx4/cmd.h> |
42 | 43 | ||
@@ -120,7 +121,7 @@ static int mlx4_buddy_init(struct mlx4_buddy *buddy, int max_order) | |||
120 | buddy->max_order = max_order; | 121 | buddy->max_order = max_order; |
121 | spin_lock_init(&buddy->lock); | 122 | spin_lock_init(&buddy->lock); |
122 | 123 | ||
123 | buddy->bits = kzalloc((buddy->max_order + 1) * sizeof (long *), | 124 | buddy->bits = kcalloc(buddy->max_order + 1, sizeof (long *), |
124 | GFP_KERNEL); | 125 | GFP_KERNEL); |
125 | buddy->num_free = kcalloc((buddy->max_order + 1), sizeof *buddy->num_free, | 126 | buddy->num_free = kcalloc((buddy->max_order + 1), sizeof *buddy->num_free, |
126 | GFP_KERNEL); | 127 | GFP_KERNEL); |
@@ -129,10 +130,12 @@ static int mlx4_buddy_init(struct mlx4_buddy *buddy, int max_order) | |||
129 | 130 | ||
130 | for (i = 0; i <= buddy->max_order; ++i) { | 131 | for (i = 0; i <= buddy->max_order; ++i) { |
131 | s = BITS_TO_LONGS(1 << (buddy->max_order - i)); | 132 | s = BITS_TO_LONGS(1 << (buddy->max_order - i)); |
132 | buddy->bits[i] = kmalloc(s * sizeof (long), GFP_KERNEL); | 133 | buddy->bits[i] = kcalloc(s, sizeof (long), GFP_KERNEL | __GFP_NOWARN); |
133 | if (!buddy->bits[i]) | 134 | if (!buddy->bits[i]) { |
134 | goto err_out_free; | 135 | buddy->bits[i] = vzalloc(s * sizeof(long)); |
135 | bitmap_zero(buddy->bits[i], 1 << (buddy->max_order - i)); | 136 | if (!buddy->bits[i]) |
137 | goto err_out_free; | ||
138 | } | ||
136 | } | 139 | } |
137 | 140 | ||
138 | set_bit(0, buddy->bits[buddy->max_order]); | 141 | set_bit(0, buddy->bits[buddy->max_order]); |
@@ -142,7 +145,10 @@ static int mlx4_buddy_init(struct mlx4_buddy *buddy, int max_order) | |||
142 | 145 | ||
143 | err_out_free: | 146 | err_out_free: |
144 | for (i = 0; i <= buddy->max_order; ++i) | 147 | for (i = 0; i <= buddy->max_order; ++i) |
145 | kfree(buddy->bits[i]); | 148 | if (buddy->bits[i] && is_vmalloc_addr(buddy->bits[i])) |
149 | vfree(buddy->bits[i]); | ||
150 | else | ||
151 | kfree(buddy->bits[i]); | ||
146 | 152 | ||
147 | err_out: | 153 | err_out: |
148 | kfree(buddy->bits); | 154 | kfree(buddy->bits); |
@@ -156,7 +162,10 @@ static void mlx4_buddy_cleanup(struct mlx4_buddy *buddy) | |||
156 | int i; | 162 | int i; |
157 | 163 | ||
158 | for (i = 0; i <= buddy->max_order; ++i) | 164 | for (i = 0; i <= buddy->max_order; ++i) |
159 | kfree(buddy->bits[i]); | 165 | if (is_vmalloc_addr(buddy->bits[i])) |
166 | vfree(buddy->bits[i]); | ||
167 | else | ||
168 | kfree(buddy->bits[i]); | ||
160 | 169 | ||
161 | kfree(buddy->bits); | 170 | kfree(buddy->bits); |
162 | kfree(buddy->num_free); | 171 | kfree(buddy->num_free); |
@@ -668,7 +677,7 @@ int mlx4_init_mr_table(struct mlx4_dev *dev) | |||
668 | return err; | 677 | return err; |
669 | 678 | ||
670 | err = mlx4_buddy_init(&mr_table->mtt_buddy, | 679 | err = mlx4_buddy_init(&mr_table->mtt_buddy, |
671 | ilog2(dev->caps.num_mtts / | 680 | ilog2((u32)dev->caps.num_mtts / |
672 | (1 << log_mtts_per_seg))); | 681 | (1 << log_mtts_per_seg))); |
673 | if (err) | 682 | if (err) |
674 | goto err_buddy; | 683 | goto err_buddy; |
@@ -678,7 +687,7 @@ int mlx4_init_mr_table(struct mlx4_dev *dev) | |||
678 | mlx4_alloc_mtt_range(dev, | 687 | mlx4_alloc_mtt_range(dev, |
679 | fls(dev->caps.reserved_mtts - 1)); | 688 | fls(dev->caps.reserved_mtts - 1)); |
680 | if (priv->reserved_mtts < 0) { | 689 | if (priv->reserved_mtts < 0) { |
681 | mlx4_warn(dev, "MTT table of order %d is too small.\n", | 690 | mlx4_warn(dev, "MTT table of order %u is too small.\n", |
682 | mr_table->mtt_buddy.max_order); | 691 | mr_table->mtt_buddy.max_order); |
683 | err = -ENOMEM; | 692 | err = -ENOMEM; |
684 | goto err_reserve_mtts; | 693 | goto err_reserve_mtts; |
diff --git a/drivers/net/ethernet/mellanox/mlx4/profile.c b/drivers/net/ethernet/mellanox/mlx4/profile.c index 9ee4725363d5..8e0c3cc2a1ec 100644 --- a/drivers/net/ethernet/mellanox/mlx4/profile.c +++ b/drivers/net/ethernet/mellanox/mlx4/profile.c | |||
@@ -76,7 +76,7 @@ u64 mlx4_make_profile(struct mlx4_dev *dev, | |||
76 | u64 size; | 76 | u64 size; |
77 | u64 start; | 77 | u64 start; |
78 | int type; | 78 | int type; |
79 | int num; | 79 | u32 num; |
80 | int log_num; | 80 | int log_num; |
81 | }; | 81 | }; |
82 | 82 | ||
@@ -105,7 +105,7 @@ u64 mlx4_make_profile(struct mlx4_dev *dev, | |||
105 | si_meminfo(&si); | 105 | si_meminfo(&si); |
106 | request->num_mtt = | 106 | request->num_mtt = |
107 | roundup_pow_of_two(max_t(unsigned, request->num_mtt, | 107 | roundup_pow_of_two(max_t(unsigned, request->num_mtt, |
108 | min(1UL << 31, | 108 | min(1UL << (31 - log_mtts_per_seg), |
109 | si.totalram >> (log_mtts_per_seg - 1)))); | 109 | si.totalram >> (log_mtts_per_seg - 1)))); |
110 | 110 | ||
111 | profile[MLX4_RES_QP].size = dev_cap->qpc_entry_sz; | 111 | profile[MLX4_RES_QP].size = dev_cap->qpc_entry_sz; |
diff --git a/drivers/net/ethernet/renesas/Kconfig b/drivers/net/ethernet/renesas/Kconfig index 46df3a04030c..24c2305d7948 100644 --- a/drivers/net/ethernet/renesas/Kconfig +++ b/drivers/net/ethernet/renesas/Kconfig | |||
@@ -8,7 +8,7 @@ config SH_ETH | |||
8 | (CPU_SUBTYPE_SH7710 || CPU_SUBTYPE_SH7712 || \ | 8 | (CPU_SUBTYPE_SH7710 || CPU_SUBTYPE_SH7712 || \ |
9 | CPU_SUBTYPE_SH7763 || CPU_SUBTYPE_SH7619 || \ | 9 | CPU_SUBTYPE_SH7763 || CPU_SUBTYPE_SH7619 || \ |
10 | CPU_SUBTYPE_SH7724 || CPU_SUBTYPE_SH7734 || \ | 10 | CPU_SUBTYPE_SH7724 || CPU_SUBTYPE_SH7734 || \ |
11 | CPU_SUBTYPE_SH7757 || ARCH_R8A7740) | 11 | CPU_SUBTYPE_SH7757 || ARCH_R8A7740 || ARCH_R8A7779) |
12 | select CRC32 | 12 | select CRC32 |
13 | select NET_CORE | 13 | select NET_CORE |
14 | select MII | 14 | select MII |
@@ -18,4 +18,4 @@ config SH_ETH | |||
18 | Renesas SuperH Ethernet device driver. | 18 | Renesas SuperH Ethernet device driver. |
19 | This driver supporting CPUs are: | 19 | This driver supporting CPUs are: |
20 | - SH7619, SH7710, SH7712, SH7724, SH7734, SH7763, SH7757, | 20 | - SH7619, SH7710, SH7712, SH7724, SH7734, SH7763, SH7757, |
21 | and R8A7740. | 21 | R8A7740 and R8A7779. |
diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c index af0b867a6cf6..bad8f2eec9b4 100644 --- a/drivers/net/ethernet/renesas/sh_eth.c +++ b/drivers/net/ethernet/renesas/sh_eth.c | |||
@@ -78,7 +78,7 @@ static void sh_eth_select_mii(struct net_device *ndev) | |||
78 | #endif | 78 | #endif |
79 | 79 | ||
80 | /* There is CPU dependent code */ | 80 | /* There is CPU dependent code */ |
81 | #if defined(CONFIG_CPU_SUBTYPE_SH7724) | 81 | #if defined(CONFIG_CPU_SUBTYPE_SH7724) || defined(CONFIG_ARCH_R8A7779) |
82 | #define SH_ETH_RESET_DEFAULT 1 | 82 | #define SH_ETH_RESET_DEFAULT 1 |
83 | static void sh_eth_set_duplex(struct net_device *ndev) | 83 | static void sh_eth_set_duplex(struct net_device *ndev) |
84 | { | 84 | { |
@@ -93,13 +93,18 @@ static void sh_eth_set_duplex(struct net_device *ndev) | |||
93 | static void sh_eth_set_rate(struct net_device *ndev) | 93 | static void sh_eth_set_rate(struct net_device *ndev) |
94 | { | 94 | { |
95 | struct sh_eth_private *mdp = netdev_priv(ndev); | 95 | struct sh_eth_private *mdp = netdev_priv(ndev); |
96 | unsigned int bits = ECMR_RTM; | ||
97 | |||
98 | #if defined(CONFIG_ARCH_R8A7779) | ||
99 | bits |= ECMR_ELB; | ||
100 | #endif | ||
96 | 101 | ||
97 | switch (mdp->speed) { | 102 | switch (mdp->speed) { |
98 | case 10: /* 10BASE */ | 103 | case 10: /* 10BASE */ |
99 | sh_eth_write(ndev, sh_eth_read(ndev, ECMR) & ~ECMR_RTM, ECMR); | 104 | sh_eth_write(ndev, sh_eth_read(ndev, ECMR) & ~bits, ECMR); |
100 | break; | 105 | break; |
101 | case 100:/* 100BASE */ | 106 | case 100:/* 100BASE */ |
102 | sh_eth_write(ndev, sh_eth_read(ndev, ECMR) | ECMR_RTM, ECMR); | 107 | sh_eth_write(ndev, sh_eth_read(ndev, ECMR) | bits, ECMR); |
103 | break; | 108 | break; |
104 | default: | 109 | default: |
105 | break; | 110 | break; |
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index fd8882f9602a..c136162e6473 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | |||
@@ -2077,7 +2077,7 @@ struct stmmac_priv *stmmac_dvr_probe(struct device *device, | |||
2077 | goto error_netdev_register; | 2077 | goto error_netdev_register; |
2078 | } | 2078 | } |
2079 | 2079 | ||
2080 | priv->stmmac_clk = clk_get(priv->device, NULL); | 2080 | priv->stmmac_clk = clk_get(priv->device, STMMAC_RESOURCE_NAME); |
2081 | if (IS_ERR(priv->stmmac_clk)) { | 2081 | if (IS_ERR(priv->stmmac_clk)) { |
2082 | pr_warning("%s: warning: cannot get CSR clock\n", __func__); | 2082 | pr_warning("%s: warning: cannot get CSR clock\n", __func__); |
2083 | goto error_clk_get; | 2083 | goto error_clk_get; |
diff --git a/drivers/net/ethernet/ti/davinci_cpdma.c b/drivers/net/ethernet/ti/davinci_cpdma.c index 3b5c4571b55e..d15c888e9df8 100644 --- a/drivers/net/ethernet/ti/davinci_cpdma.c +++ b/drivers/net/ethernet/ti/davinci_cpdma.c | |||
@@ -538,11 +538,12 @@ EXPORT_SYMBOL_GPL(cpdma_chan_create); | |||
538 | 538 | ||
539 | int cpdma_chan_destroy(struct cpdma_chan *chan) | 539 | int cpdma_chan_destroy(struct cpdma_chan *chan) |
540 | { | 540 | { |
541 | struct cpdma_ctlr *ctlr = chan->ctlr; | 541 | struct cpdma_ctlr *ctlr; |
542 | unsigned long flags; | 542 | unsigned long flags; |
543 | 543 | ||
544 | if (!chan) | 544 | if (!chan) |
545 | return -EINVAL; | 545 | return -EINVAL; |
546 | ctlr = chan->ctlr; | ||
546 | 547 | ||
547 | spin_lock_irqsave(&ctlr->lock, flags); | 548 | spin_lock_irqsave(&ctlr->lock, flags); |
548 | if (chan->state != CPDMA_STATE_IDLE) | 549 | if (chan->state != CPDMA_STATE_IDLE) |
diff --git a/drivers/net/irda/ks959-sir.c b/drivers/net/irda/ks959-sir.c index 824e2a93fe8a..5f3aeac3f86d 100644 --- a/drivers/net/irda/ks959-sir.c +++ b/drivers/net/irda/ks959-sir.c | |||
@@ -542,6 +542,7 @@ static int ks959_net_open(struct net_device *netdev) | |||
542 | sprintf(hwname, "usb#%d", kingsun->usbdev->devnum); | 542 | sprintf(hwname, "usb#%d", kingsun->usbdev->devnum); |
543 | kingsun->irlap = irlap_open(netdev, &kingsun->qos, hwname); | 543 | kingsun->irlap = irlap_open(netdev, &kingsun->qos, hwname); |
544 | if (!kingsun->irlap) { | 544 | if (!kingsun->irlap) { |
545 | err = -ENOMEM; | ||
545 | dev_err(&kingsun->usbdev->dev, "irlap_open failed\n"); | 546 | dev_err(&kingsun->usbdev->dev, "irlap_open failed\n"); |
546 | goto free_mem; | 547 | goto free_mem; |
547 | } | 548 | } |
diff --git a/drivers/net/irda/ksdazzle-sir.c b/drivers/net/irda/ksdazzle-sir.c index 5a278ab83c2f..2d4b6a1ab202 100644 --- a/drivers/net/irda/ksdazzle-sir.c +++ b/drivers/net/irda/ksdazzle-sir.c | |||
@@ -436,6 +436,7 @@ static int ksdazzle_net_open(struct net_device *netdev) | |||
436 | sprintf(hwname, "usb#%d", kingsun->usbdev->devnum); | 436 | sprintf(hwname, "usb#%d", kingsun->usbdev->devnum); |
437 | kingsun->irlap = irlap_open(netdev, &kingsun->qos, hwname); | 437 | kingsun->irlap = irlap_open(netdev, &kingsun->qos, hwname); |
438 | if (!kingsun->irlap) { | 438 | if (!kingsun->irlap) { |
439 | err = -ENOMEM; | ||
439 | dev_err(&kingsun->usbdev->dev, "irlap_open failed\n"); | 440 | dev_err(&kingsun->usbdev->dev, "irlap_open failed\n"); |
440 | goto free_mem; | 441 | goto free_mem; |
441 | } | 442 | } |
diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index f9347ea3d381..b3321129a83c 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c | |||
@@ -640,15 +640,9 @@ static int netconsole_netdev_event(struct notifier_block *this, | |||
640 | * rtnl_lock already held | 640 | * rtnl_lock already held |
641 | */ | 641 | */ |
642 | if (nt->np.dev) { | 642 | if (nt->np.dev) { |
643 | spin_unlock_irqrestore( | ||
644 | &target_list_lock, | ||
645 | flags); | ||
646 | __netpoll_cleanup(&nt->np); | 643 | __netpoll_cleanup(&nt->np); |
647 | spin_lock_irqsave(&target_list_lock, | ||
648 | flags); | ||
649 | dev_put(nt->np.dev); | 644 | dev_put(nt->np.dev); |
650 | nt->np.dev = NULL; | 645 | nt->np.dev = NULL; |
651 | netconsole_target_put(nt); | ||
652 | } | 646 | } |
653 | nt->enabled = 0; | 647 | nt->enabled = 0; |
654 | stopped = true; | 648 | stopped = true; |
diff --git a/drivers/net/phy/mdio-mux.c b/drivers/net/phy/mdio-mux.c index 5c120189ec86..4d4d25efc1e1 100644 --- a/drivers/net/phy/mdio-mux.c +++ b/drivers/net/phy/mdio-mux.c | |||
@@ -132,7 +132,7 @@ int mdio_mux_init(struct device *dev, | |||
132 | pb->mii_bus = parent_bus; | 132 | pb->mii_bus = parent_bus; |
133 | 133 | ||
134 | ret_val = -ENODEV; | 134 | ret_val = -ENODEV; |
135 | for_each_child_of_node(dev->of_node, child_bus_node) { | 135 | for_each_available_child_of_node(dev->of_node, child_bus_node) { |
136 | u32 v; | 136 | u32 v; |
137 | 137 | ||
138 | r = of_property_read_u32(child_bus_node, "reg", &v); | 138 | r = of_property_read_u32(child_bus_node, "reg", &v); |
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c index 87707ab39430..341b65dbbcd3 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c | |||
@@ -795,16 +795,17 @@ static void team_port_leave(struct team *team, struct team_port *port) | |||
795 | } | 795 | } |
796 | 796 | ||
797 | #ifdef CONFIG_NET_POLL_CONTROLLER | 797 | #ifdef CONFIG_NET_POLL_CONTROLLER |
798 | static int team_port_enable_netpoll(struct team *team, struct team_port *port) | 798 | static int team_port_enable_netpoll(struct team *team, struct team_port *port, |
799 | gfp_t gfp) | ||
799 | { | 800 | { |
800 | struct netpoll *np; | 801 | struct netpoll *np; |
801 | int err; | 802 | int err; |
802 | 803 | ||
803 | np = kzalloc(sizeof(*np), GFP_KERNEL); | 804 | np = kzalloc(sizeof(*np), gfp); |
804 | if (!np) | 805 | if (!np) |
805 | return -ENOMEM; | 806 | return -ENOMEM; |
806 | 807 | ||
807 | err = __netpoll_setup(np, port->dev); | 808 | err = __netpoll_setup(np, port->dev, gfp); |
808 | if (err) { | 809 | if (err) { |
809 | kfree(np); | 810 | kfree(np); |
810 | return err; | 811 | return err; |
@@ -833,7 +834,8 @@ static struct netpoll_info *team_netpoll_info(struct team *team) | |||
833 | } | 834 | } |
834 | 835 | ||
835 | #else | 836 | #else |
836 | static int team_port_enable_netpoll(struct team *team, struct team_port *port) | 837 | static int team_port_enable_netpoll(struct team *team, struct team_port *port, |
838 | gfp_t gfp) | ||
837 | { | 839 | { |
838 | return 0; | 840 | return 0; |
839 | } | 841 | } |
@@ -913,7 +915,7 @@ static int team_port_add(struct team *team, struct net_device *port_dev) | |||
913 | } | 915 | } |
914 | 916 | ||
915 | if (team_netpoll_info(team)) { | 917 | if (team_netpoll_info(team)) { |
916 | err = team_port_enable_netpoll(team, port); | 918 | err = team_port_enable_netpoll(team, port, GFP_KERNEL); |
917 | if (err) { | 919 | if (err) { |
918 | netdev_err(dev, "Failed to enable netpoll on device %s\n", | 920 | netdev_err(dev, "Failed to enable netpoll on device %s\n", |
919 | portname); | 921 | portname); |
@@ -1443,7 +1445,7 @@ static void team_netpoll_cleanup(struct net_device *dev) | |||
1443 | } | 1445 | } |
1444 | 1446 | ||
1445 | static int team_netpoll_setup(struct net_device *dev, | 1447 | static int team_netpoll_setup(struct net_device *dev, |
1446 | struct netpoll_info *npifo) | 1448 | struct netpoll_info *npifo, gfp_t gfp) |
1447 | { | 1449 | { |
1448 | struct team *team = netdev_priv(dev); | 1450 | struct team *team = netdev_priv(dev); |
1449 | struct team_port *port; | 1451 | struct team_port *port; |
@@ -1451,7 +1453,7 @@ static int team_netpoll_setup(struct net_device *dev, | |||
1451 | 1453 | ||
1452 | mutex_lock(&team->lock); | 1454 | mutex_lock(&team->lock); |
1453 | list_for_each_entry(port, &team->port_list, list) { | 1455 | list_for_each_entry(port, &team->port_list, list) { |
1454 | err = team_port_enable_netpoll(team, port); | 1456 | err = team_port_enable_netpoll(team, port, gfp); |
1455 | if (err) { | 1457 | if (err) { |
1456 | __team_netpoll_cleanup(team); | 1458 | __team_netpoll_cleanup(team); |
1457 | break; | 1459 | break; |
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c index 2ea126a16d79..328397c66730 100644 --- a/drivers/net/usb/qmi_wwan.c +++ b/drivers/net/usb/qmi_wwan.c | |||
@@ -247,30 +247,12 @@ err: | |||
247 | */ | 247 | */ |
248 | static int qmi_wwan_bind_shared(struct usbnet *dev, struct usb_interface *intf) | 248 | static int qmi_wwan_bind_shared(struct usbnet *dev, struct usb_interface *intf) |
249 | { | 249 | { |
250 | int rv; | ||
251 | struct qmi_wwan_state *info = (void *)&dev->data; | 250 | struct qmi_wwan_state *info = (void *)&dev->data; |
252 | 251 | ||
253 | /* ZTE makes devices where the interface descriptors and endpoint | ||
254 | * configurations of two or more interfaces are identical, even | ||
255 | * though the functions are completely different. If set, then | ||
256 | * driver_info->data is a bitmap of acceptable interface numbers | ||
257 | * allowing us to bind to one such interface without binding to | ||
258 | * all of them | ||
259 | */ | ||
260 | if (dev->driver_info->data && | ||
261 | !test_bit(intf->cur_altsetting->desc.bInterfaceNumber, &dev->driver_info->data)) { | ||
262 | dev_info(&intf->dev, "not on our whitelist - ignored"); | ||
263 | rv = -ENODEV; | ||
264 | goto err; | ||
265 | } | ||
266 | |||
267 | /* control and data is shared */ | 252 | /* control and data is shared */ |
268 | info->control = intf; | 253 | info->control = intf; |
269 | info->data = intf; | 254 | info->data = intf; |
270 | rv = qmi_wwan_register_subdriver(dev); | 255 | return qmi_wwan_register_subdriver(dev); |
271 | |||
272 | err: | ||
273 | return rv; | ||
274 | } | 256 | } |
275 | 257 | ||
276 | static void qmi_wwan_unbind(struct usbnet *dev, struct usb_interface *intf) | 258 | static void qmi_wwan_unbind(struct usbnet *dev, struct usb_interface *intf) |
@@ -356,214 +338,64 @@ static const struct driver_info qmi_wwan_shared = { | |||
356 | .manage_power = qmi_wwan_manage_power, | 338 | .manage_power = qmi_wwan_manage_power, |
357 | }; | 339 | }; |
358 | 340 | ||
359 | static const struct driver_info qmi_wwan_force_int0 = { | ||
360 | .description = "Qualcomm WWAN/QMI device", | ||
361 | .flags = FLAG_WWAN, | ||
362 | .bind = qmi_wwan_bind_shared, | ||
363 | .unbind = qmi_wwan_unbind, | ||
364 | .manage_power = qmi_wwan_manage_power, | ||
365 | .data = BIT(0), /* interface whitelist bitmap */ | ||
366 | }; | ||
367 | |||
368 | static const struct driver_info qmi_wwan_force_int1 = { | ||
369 | .description = "Qualcomm WWAN/QMI device", | ||
370 | .flags = FLAG_WWAN, | ||
371 | .bind = qmi_wwan_bind_shared, | ||
372 | .unbind = qmi_wwan_unbind, | ||
373 | .manage_power = qmi_wwan_manage_power, | ||
374 | .data = BIT(1), /* interface whitelist bitmap */ | ||
375 | }; | ||
376 | |||
377 | static const struct driver_info qmi_wwan_force_int2 = { | ||
378 | .description = "Qualcomm WWAN/QMI device", | ||
379 | .flags = FLAG_WWAN, | ||
380 | .bind = qmi_wwan_bind_shared, | ||
381 | .unbind = qmi_wwan_unbind, | ||
382 | .manage_power = qmi_wwan_manage_power, | ||
383 | .data = BIT(2), /* interface whitelist bitmap */ | ||
384 | }; | ||
385 | |||
386 | static const struct driver_info qmi_wwan_force_int3 = { | ||
387 | .description = "Qualcomm WWAN/QMI device", | ||
388 | .flags = FLAG_WWAN, | ||
389 | .bind = qmi_wwan_bind_shared, | ||
390 | .unbind = qmi_wwan_unbind, | ||
391 | .manage_power = qmi_wwan_manage_power, | ||
392 | .data = BIT(3), /* interface whitelist bitmap */ | ||
393 | }; | ||
394 | |||
395 | static const struct driver_info qmi_wwan_force_int4 = { | ||
396 | .description = "Qualcomm WWAN/QMI device", | ||
397 | .flags = FLAG_WWAN, | ||
398 | .bind = qmi_wwan_bind_shared, | ||
399 | .unbind = qmi_wwan_unbind, | ||
400 | .manage_power = qmi_wwan_manage_power, | ||
401 | .data = BIT(4), /* interface whitelist bitmap */ | ||
402 | }; | ||
403 | |||
404 | /* Sierra Wireless provide equally useless interface descriptors | ||
405 | * Devices in QMI mode can be switched between two different | ||
406 | * configurations: | ||
407 | * a) USB interface #8 is QMI/wwan | ||
408 | * b) USB interfaces #8, #19 and #20 are QMI/wwan | ||
409 | * | ||
410 | * Both configurations provide a number of other interfaces (serial++), | ||
411 | * some of which have the same endpoint configuration as we expect, so | ||
412 | * a whitelist or blacklist is necessary. | ||
413 | * | ||
414 | * FIXME: The below whitelist should include BIT(20). It does not | ||
415 | * because I cannot get it to work... | ||
416 | */ | ||
417 | static const struct driver_info qmi_wwan_sierra = { | ||
418 | .description = "Sierra Wireless wwan/QMI device", | ||
419 | .flags = FLAG_WWAN, | ||
420 | .bind = qmi_wwan_bind_shared, | ||
421 | .unbind = qmi_wwan_unbind, | ||
422 | .manage_power = qmi_wwan_manage_power, | ||
423 | .data = BIT(8) | BIT(19), /* interface whitelist bitmap */ | ||
424 | }; | ||
425 | |||
426 | #define HUAWEI_VENDOR_ID 0x12D1 | 341 | #define HUAWEI_VENDOR_ID 0x12D1 |
427 | 342 | ||
343 | /* map QMI/wwan function by a fixed interface number */ | ||
344 | #define QMI_FIXED_INTF(vend, prod, num) \ | ||
345 | USB_DEVICE_INTERFACE_NUMBER(vend, prod, num), \ | ||
346 | .driver_info = (unsigned long)&qmi_wwan_shared | ||
347 | |||
428 | /* Gobi 1000 QMI/wwan interface number is 3 according to qcserial */ | 348 | /* Gobi 1000 QMI/wwan interface number is 3 according to qcserial */ |
429 | #define QMI_GOBI1K_DEVICE(vend, prod) \ | 349 | #define QMI_GOBI1K_DEVICE(vend, prod) \ |
430 | USB_DEVICE(vend, prod), \ | 350 | QMI_FIXED_INTF(vend, prod, 3) |
431 | .driver_info = (unsigned long)&qmi_wwan_force_int3 | ||
432 | 351 | ||
433 | /* Gobi 2000 and Gobi 3000 QMI/wwan interface number is 0 according to qcserial */ | 352 | /* Gobi 2000/3000 QMI/wwan interface number is 0 according to qcserial */ |
434 | #define QMI_GOBI_DEVICE(vend, prod) \ | 353 | #define QMI_GOBI_DEVICE(vend, prod) \ |
435 | USB_DEVICE(vend, prod), \ | 354 | QMI_FIXED_INTF(vend, prod, 0) |
436 | .driver_info = (unsigned long)&qmi_wwan_force_int0 | ||
437 | 355 | ||
438 | static const struct usb_device_id products[] = { | 356 | static const struct usb_device_id products[] = { |
357 | /* 1. CDC ECM like devices match on the control interface */ | ||
439 | { /* Huawei E392, E398 and possibly others sharing both device id and more... */ | 358 | { /* Huawei E392, E398 and possibly others sharing both device id and more... */ |
440 | .match_flags = USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_INT_INFO, | 359 | USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, USB_CLASS_VENDOR_SPEC, 1, 9), |
441 | .idVendor = HUAWEI_VENDOR_ID, | ||
442 | .bInterfaceClass = USB_CLASS_VENDOR_SPEC, | ||
443 | .bInterfaceSubClass = 1, | ||
444 | .bInterfaceProtocol = 9, /* CDC Ethernet *control* interface */ | ||
445 | .driver_info = (unsigned long)&qmi_wwan_info, | 360 | .driver_info = (unsigned long)&qmi_wwan_info, |
446 | }, | 361 | }, |
447 | { /* Vodafone/Huawei K5005 (12d1:14c8) and similar modems */ | 362 | { /* Vodafone/Huawei K5005 (12d1:14c8) and similar modems */ |
448 | .match_flags = USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_INT_INFO, | 363 | USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, USB_CLASS_VENDOR_SPEC, 1, 57), |
449 | .idVendor = HUAWEI_VENDOR_ID, | ||
450 | .bInterfaceClass = USB_CLASS_VENDOR_SPEC, | ||
451 | .bInterfaceSubClass = 1, | ||
452 | .bInterfaceProtocol = 57, /* CDC Ethernet *control* interface */ | ||
453 | .driver_info = (unsigned long)&qmi_wwan_info, | 364 | .driver_info = (unsigned long)&qmi_wwan_info, |
454 | }, | 365 | }, |
455 | { /* Huawei E392, E398 and possibly others in "Windows mode" | 366 | |
456 | * using a combined control and data interface without any CDC | 367 | /* 2. Combined interface devices matching on class+protocol */ |
457 | * functional descriptors | 368 | { /* Huawei E392, E398 and possibly others in "Windows mode" */ |
458 | */ | 369 | USB_VENDOR_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, USB_CLASS_VENDOR_SPEC, 1, 17), |
459 | .match_flags = USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_INT_INFO, | ||
460 | .idVendor = HUAWEI_VENDOR_ID, | ||
461 | .bInterfaceClass = USB_CLASS_VENDOR_SPEC, | ||
462 | .bInterfaceSubClass = 1, | ||
463 | .bInterfaceProtocol = 17, | ||
464 | .driver_info = (unsigned long)&qmi_wwan_shared, | 370 | .driver_info = (unsigned long)&qmi_wwan_shared, |
465 | }, | 371 | }, |
466 | { /* Pantech UML290 */ | 372 | { /* Pantech UML290 */ |
467 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, | 373 | USB_DEVICE_AND_INTERFACE_INFO(0x106c, 0x3718, USB_CLASS_VENDOR_SPEC, 0xf0, 0xff), |
468 | .idVendor = 0x106c, | ||
469 | .idProduct = 0x3718, | ||
470 | .bInterfaceClass = 0xff, | ||
471 | .bInterfaceSubClass = 0xf0, | ||
472 | .bInterfaceProtocol = 0xff, | ||
473 | .driver_info = (unsigned long)&qmi_wwan_shared, | 374 | .driver_info = (unsigned long)&qmi_wwan_shared, |
474 | }, | 375 | }, |
475 | { /* ZTE MF820D */ | 376 | { /* Pantech UML290 - newer firmware */ |
476 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, | 377 | USB_DEVICE_AND_INTERFACE_INFO(0x106c, 0x3718, USB_CLASS_VENDOR_SPEC, 0xf1, 0xff), |
477 | .idVendor = 0x19d2, | 378 | .driver_info = (unsigned long)&qmi_wwan_shared, |
478 | .idProduct = 0x0167, | ||
479 | .bInterfaceClass = 0xff, | ||
480 | .bInterfaceSubClass = 0xff, | ||
481 | .bInterfaceProtocol = 0xff, | ||
482 | .driver_info = (unsigned long)&qmi_wwan_force_int4, | ||
483 | }, | ||
484 | { /* ZTE MF821D */ | ||
485 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, | ||
486 | .idVendor = 0x19d2, | ||
487 | .idProduct = 0x0326, | ||
488 | .bInterfaceClass = 0xff, | ||
489 | .bInterfaceSubClass = 0xff, | ||
490 | .bInterfaceProtocol = 0xff, | ||
491 | .driver_info = (unsigned long)&qmi_wwan_force_int4, | ||
492 | }, | ||
493 | { /* ZTE (Vodafone) K3520-Z */ | ||
494 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, | ||
495 | .idVendor = 0x19d2, | ||
496 | .idProduct = 0x0055, | ||
497 | .bInterfaceClass = 0xff, | ||
498 | .bInterfaceSubClass = 0xff, | ||
499 | .bInterfaceProtocol = 0xff, | ||
500 | .driver_info = (unsigned long)&qmi_wwan_force_int1, | ||
501 | }, | ||
502 | { /* ZTE (Vodafone) K3565-Z */ | ||
503 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, | ||
504 | .idVendor = 0x19d2, | ||
505 | .idProduct = 0x0063, | ||
506 | .bInterfaceClass = 0xff, | ||
507 | .bInterfaceSubClass = 0xff, | ||
508 | .bInterfaceProtocol = 0xff, | ||
509 | .driver_info = (unsigned long)&qmi_wwan_force_int4, | ||
510 | }, | ||
511 | { /* ZTE (Vodafone) K3570-Z */ | ||
512 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, | ||
513 | .idVendor = 0x19d2, | ||
514 | .idProduct = 0x1008, | ||
515 | .bInterfaceClass = 0xff, | ||
516 | .bInterfaceSubClass = 0xff, | ||
517 | .bInterfaceProtocol = 0xff, | ||
518 | .driver_info = (unsigned long)&qmi_wwan_force_int4, | ||
519 | }, | ||
520 | { /* ZTE (Vodafone) K3571-Z */ | ||
521 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, | ||
522 | .idVendor = 0x19d2, | ||
523 | .idProduct = 0x1010, | ||
524 | .bInterfaceClass = 0xff, | ||
525 | .bInterfaceSubClass = 0xff, | ||
526 | .bInterfaceProtocol = 0xff, | ||
527 | .driver_info = (unsigned long)&qmi_wwan_force_int4, | ||
528 | }, | ||
529 | { /* ZTE (Vodafone) K3765-Z */ | ||
530 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, | ||
531 | .idVendor = 0x19d2, | ||
532 | .idProduct = 0x2002, | ||
533 | .bInterfaceClass = 0xff, | ||
534 | .bInterfaceSubClass = 0xff, | ||
535 | .bInterfaceProtocol = 0xff, | ||
536 | .driver_info = (unsigned long)&qmi_wwan_force_int4, | ||
537 | }, | ||
538 | { /* ZTE (Vodafone) K4505-Z */ | ||
539 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, | ||
540 | .idVendor = 0x19d2, | ||
541 | .idProduct = 0x0104, | ||
542 | .bInterfaceClass = 0xff, | ||
543 | .bInterfaceSubClass = 0xff, | ||
544 | .bInterfaceProtocol = 0xff, | ||
545 | .driver_info = (unsigned long)&qmi_wwan_force_int4, | ||
546 | }, | ||
547 | { /* ZTE MF60 */ | ||
548 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, | ||
549 | .idVendor = 0x19d2, | ||
550 | .idProduct = 0x1402, | ||
551 | .bInterfaceClass = 0xff, | ||
552 | .bInterfaceSubClass = 0xff, | ||
553 | .bInterfaceProtocol = 0xff, | ||
554 | .driver_info = (unsigned long)&qmi_wwan_force_int2, | ||
555 | }, | ||
556 | { /* Sierra Wireless MC77xx in QMI mode */ | ||
557 | .match_flags = USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_INT_INFO, | ||
558 | .idVendor = 0x1199, | ||
559 | .idProduct = 0x68a2, | ||
560 | .bInterfaceClass = 0xff, | ||
561 | .bInterfaceSubClass = 0xff, | ||
562 | .bInterfaceProtocol = 0xff, | ||
563 | .driver_info = (unsigned long)&qmi_wwan_sierra, | ||
564 | }, | 379 | }, |
565 | 380 | ||
566 | /* Gobi 1000 devices */ | 381 | /* 3. Combined interface devices matching on interface number */ |
382 | {QMI_FIXED_INTF(0x19d2, 0x0055, 1)}, /* ZTE (Vodafone) K3520-Z */ | ||
383 | {QMI_FIXED_INTF(0x19d2, 0x0063, 4)}, /* ZTE (Vodafone) K3565-Z */ | ||
384 | {QMI_FIXED_INTF(0x19d2, 0x0104, 4)}, /* ZTE (Vodafone) K4505-Z */ | ||
385 | {QMI_FIXED_INTF(0x19d2, 0x0167, 4)}, /* ZTE MF820D */ | ||
386 | {QMI_FIXED_INTF(0x19d2, 0x0326, 4)}, /* ZTE MF821D */ | ||
387 | {QMI_FIXED_INTF(0x19d2, 0x1008, 4)}, /* ZTE (Vodafone) K3570-Z */ | ||
388 | {QMI_FIXED_INTF(0x19d2, 0x1010, 4)}, /* ZTE (Vodafone) K3571-Z */ | ||
389 | {QMI_FIXED_INTF(0x19d2, 0x1018, 3)}, /* ZTE (Vodafone) K5006-Z */ | ||
390 | {QMI_FIXED_INTF(0x19d2, 0x1402, 2)}, /* ZTE MF60 */ | ||
391 | {QMI_FIXED_INTF(0x19d2, 0x2002, 4)}, /* ZTE (Vodafone) K3765-Z */ | ||
392 | {QMI_FIXED_INTF(0x0f3d, 0x68a2, 8)}, /* Sierra Wireless MC7700 */ | ||
393 | {QMI_FIXED_INTF(0x114f, 0x68a2, 8)}, /* Sierra Wireless MC7750 */ | ||
394 | {QMI_FIXED_INTF(0x1199, 0x68a2, 8)}, /* Sierra Wireless MC7710 in QMI mode */ | ||
395 | {QMI_FIXED_INTF(0x1199, 0x68a2, 19)}, /* Sierra Wireless MC7710 in QMI mode */ | ||
396 | {QMI_FIXED_INTF(0x1199, 0x901c, 8)}, /* Sierra Wireless EM7700 */ | ||
397 | |||
398 | /* 4. Gobi 1000 devices */ | ||
567 | {QMI_GOBI1K_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */ | 399 | {QMI_GOBI1K_DEVICE(0x05c6, 0x9212)}, /* Acer Gobi Modem Device */ |
568 | {QMI_GOBI1K_DEVICE(0x03f0, 0x1f1d)}, /* HP un2400 Gobi Modem Device */ | 400 | {QMI_GOBI1K_DEVICE(0x03f0, 0x1f1d)}, /* HP un2400 Gobi Modem Device */ |
569 | {QMI_GOBI1K_DEVICE(0x03f0, 0x371d)}, /* HP un2430 Mobile Broadband Module */ | 401 | {QMI_GOBI1K_DEVICE(0x03f0, 0x371d)}, /* HP un2430 Mobile Broadband Module */ |
@@ -579,7 +411,7 @@ static const struct usb_device_id products[] = { | |||
579 | {QMI_GOBI1K_DEVICE(0x05c6, 0x9222)}, /* Generic Gobi Modem device */ | 411 | {QMI_GOBI1K_DEVICE(0x05c6, 0x9222)}, /* Generic Gobi Modem device */ |
580 | {QMI_GOBI1K_DEVICE(0x05c6, 0x9009)}, /* Generic Gobi Modem device */ | 412 | {QMI_GOBI1K_DEVICE(0x05c6, 0x9009)}, /* Generic Gobi Modem device */ |
581 | 413 | ||
582 | /* Gobi 2000 and 3000 devices */ | 414 | /* 5. Gobi 2000 and 3000 devices */ |
583 | {QMI_GOBI_DEVICE(0x413c, 0x8186)}, /* Dell Gobi 2000 Modem device (N0218, VU936) */ | 415 | {QMI_GOBI_DEVICE(0x413c, 0x8186)}, /* Dell Gobi 2000 Modem device (N0218, VU936) */ |
584 | {QMI_GOBI_DEVICE(0x05c6, 0x920b)}, /* Generic Gobi 2000 Modem device */ | 416 | {QMI_GOBI_DEVICE(0x05c6, 0x920b)}, /* Generic Gobi 2000 Modem device */ |
585 | {QMI_GOBI_DEVICE(0x05c6, 0x9225)}, /* Sony Gobi 2000 Modem device (N0279, VU730) */ | 417 | {QMI_GOBI_DEVICE(0x05c6, 0x9225)}, /* Sony Gobi 2000 Modem device (N0279, VU730) */ |
@@ -589,6 +421,8 @@ static const struct usb_device_id products[] = { | |||
589 | {QMI_GOBI_DEVICE(0x05c6, 0x9265)}, /* Asus Gobi 2000 Modem device (VR305) */ | 421 | {QMI_GOBI_DEVICE(0x05c6, 0x9265)}, /* Asus Gobi 2000 Modem device (VR305) */ |
590 | {QMI_GOBI_DEVICE(0x05c6, 0x9235)}, /* Top Global Gobi 2000 Modem device (VR306) */ | 422 | {QMI_GOBI_DEVICE(0x05c6, 0x9235)}, /* Top Global Gobi 2000 Modem device (VR306) */ |
591 | {QMI_GOBI_DEVICE(0x05c6, 0x9275)}, /* iRex Technologies Gobi 2000 Modem device (VR307) */ | 423 | {QMI_GOBI_DEVICE(0x05c6, 0x9275)}, /* iRex Technologies Gobi 2000 Modem device (VR307) */ |
424 | {QMI_GOBI_DEVICE(0x1199, 0x68a5)}, /* Sierra Wireless Modem */ | ||
425 | {QMI_GOBI_DEVICE(0x1199, 0x68a9)}, /* Sierra Wireless Modem */ | ||
592 | {QMI_GOBI_DEVICE(0x1199, 0x9001)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ | 426 | {QMI_GOBI_DEVICE(0x1199, 0x9001)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ |
593 | {QMI_GOBI_DEVICE(0x1199, 0x9002)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ | 427 | {QMI_GOBI_DEVICE(0x1199, 0x9002)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ |
594 | {QMI_GOBI_DEVICE(0x1199, 0x9003)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ | 428 | {QMI_GOBI_DEVICE(0x1199, 0x9003)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ |
@@ -600,11 +434,14 @@ static const struct usb_device_id products[] = { | |||
600 | {QMI_GOBI_DEVICE(0x1199, 0x9009)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ | 434 | {QMI_GOBI_DEVICE(0x1199, 0x9009)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ |
601 | {QMI_GOBI_DEVICE(0x1199, 0x900a)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ | 435 | {QMI_GOBI_DEVICE(0x1199, 0x900a)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ |
602 | {QMI_GOBI_DEVICE(0x1199, 0x9011)}, /* Sierra Wireless Gobi 2000 Modem device (MC8305) */ | 436 | {QMI_GOBI_DEVICE(0x1199, 0x9011)}, /* Sierra Wireless Gobi 2000 Modem device (MC8305) */ |
437 | {QMI_FIXED_INTF(0x1199, 0x9011, 5)}, /* alternate interface number!? */ | ||
603 | {QMI_GOBI_DEVICE(0x16d8, 0x8002)}, /* CMDTech Gobi 2000 Modem device (VU922) */ | 438 | {QMI_GOBI_DEVICE(0x16d8, 0x8002)}, /* CMDTech Gobi 2000 Modem device (VU922) */ |
604 | {QMI_GOBI_DEVICE(0x05c6, 0x9205)}, /* Gobi 2000 Modem device */ | 439 | {QMI_GOBI_DEVICE(0x05c6, 0x9205)}, /* Gobi 2000 Modem device */ |
605 | {QMI_GOBI_DEVICE(0x1199, 0x9013)}, /* Sierra Wireless Gobi 3000 Modem device (MC8355) */ | 440 | {QMI_GOBI_DEVICE(0x1199, 0x9013)}, /* Sierra Wireless Gobi 3000 Modem device (MC8355) */ |
606 | {QMI_GOBI_DEVICE(0x1199, 0x9015)}, /* Sierra Wireless Gobi 3000 Modem device */ | 441 | {QMI_GOBI_DEVICE(0x1199, 0x9015)}, /* Sierra Wireless Gobi 3000 Modem device */ |
607 | {QMI_GOBI_DEVICE(0x1199, 0x9019)}, /* Sierra Wireless Gobi 3000 Modem device */ | 442 | {QMI_GOBI_DEVICE(0x1199, 0x9019)}, /* Sierra Wireless Gobi 3000 Modem device */ |
443 | {QMI_GOBI_DEVICE(0x1199, 0x901b)}, /* Sierra Wireless MC7770 */ | ||
444 | |||
608 | { } /* END */ | 445 | { } /* END */ |
609 | }; | 446 | }; |
610 | MODULE_DEVICE_TABLE(usb, products); | 447 | MODULE_DEVICE_TABLE(usb, products); |
diff --git a/drivers/net/usb/sierra_net.c b/drivers/net/usb/sierra_net.c index d75d1f56becf..7be49ea60b6d 100644 --- a/drivers/net/usb/sierra_net.c +++ b/drivers/net/usb/sierra_net.c | |||
@@ -68,15 +68,8 @@ static atomic_t iface_counter = ATOMIC_INIT(0); | |||
68 | */ | 68 | */ |
69 | #define SIERRA_NET_USBCTL_BUF_LEN 1024 | 69 | #define SIERRA_NET_USBCTL_BUF_LEN 1024 |
70 | 70 | ||
71 | /* list of interface numbers - used for constructing interface lists */ | ||
72 | struct sierra_net_iface_info { | ||
73 | const u32 infolen; /* number of interface numbers on list */ | ||
74 | const u8 *ifaceinfo; /* pointer to the array holding the numbers */ | ||
75 | }; | ||
76 | |||
77 | struct sierra_net_info_data { | 71 | struct sierra_net_info_data { |
78 | u16 rx_urb_size; | 72 | u16 rx_urb_size; |
79 | struct sierra_net_iface_info whitelist; | ||
80 | }; | 73 | }; |
81 | 74 | ||
82 | /* Private data structure */ | 75 | /* Private data structure */ |
@@ -637,21 +630,6 @@ static int sierra_net_change_mtu(struct net_device *net, int new_mtu) | |||
637 | return usbnet_change_mtu(net, new_mtu); | 630 | return usbnet_change_mtu(net, new_mtu); |
638 | } | 631 | } |
639 | 632 | ||
640 | static int is_whitelisted(const u8 ifnum, | ||
641 | const struct sierra_net_iface_info *whitelist) | ||
642 | { | ||
643 | if (whitelist) { | ||
644 | const u8 *list = whitelist->ifaceinfo; | ||
645 | int i; | ||
646 | |||
647 | for (i = 0; i < whitelist->infolen; i++) { | ||
648 | if (list[i] == ifnum) | ||
649 | return 1; | ||
650 | } | ||
651 | } | ||
652 | return 0; | ||
653 | } | ||
654 | |||
655 | static int sierra_net_get_fw_attr(struct usbnet *dev, u16 *datap) | 633 | static int sierra_net_get_fw_attr(struct usbnet *dev, u16 *datap) |
656 | { | 634 | { |
657 | int result = 0; | 635 | int result = 0; |
@@ -706,11 +684,6 @@ static int sierra_net_bind(struct usbnet *dev, struct usb_interface *intf) | |||
706 | dev_dbg(&dev->udev->dev, "%s", __func__); | 684 | dev_dbg(&dev->udev->dev, "%s", __func__); |
707 | 685 | ||
708 | ifacenum = intf->cur_altsetting->desc.bInterfaceNumber; | 686 | ifacenum = intf->cur_altsetting->desc.bInterfaceNumber; |
709 | /* We only accept certain interfaces */ | ||
710 | if (!is_whitelisted(ifacenum, &data->whitelist)) { | ||
711 | dev_dbg(&dev->udev->dev, "Ignoring interface: %d", ifacenum); | ||
712 | return -ENODEV; | ||
713 | } | ||
714 | numendpoints = intf->cur_altsetting->desc.bNumEndpoints; | 687 | numendpoints = intf->cur_altsetting->desc.bNumEndpoints; |
715 | /* We have three endpoints, bulk in and out, and a status */ | 688 | /* We have three endpoints, bulk in and out, and a status */ |
716 | if (numendpoints != 3) { | 689 | if (numendpoints != 3) { |
@@ -945,13 +918,8 @@ struct sk_buff *sierra_net_tx_fixup(struct usbnet *dev, struct sk_buff *skb, | |||
945 | return NULL; | 918 | return NULL; |
946 | } | 919 | } |
947 | 920 | ||
948 | static const u8 sierra_net_ifnum_list[] = { 7, 10, 11 }; | ||
949 | static const struct sierra_net_info_data sierra_net_info_data_direct_ip = { | 921 | static const struct sierra_net_info_data sierra_net_info_data_direct_ip = { |
950 | .rx_urb_size = 8 * 1024, | 922 | .rx_urb_size = 8 * 1024, |
951 | .whitelist = { | ||
952 | .infolen = ARRAY_SIZE(sierra_net_ifnum_list), | ||
953 | .ifaceinfo = sierra_net_ifnum_list | ||
954 | } | ||
955 | }; | 923 | }; |
956 | 924 | ||
957 | static const struct driver_info sierra_net_info_direct_ip = { | 925 | static const struct driver_info sierra_net_info_direct_ip = { |
@@ -965,15 +933,19 @@ static const struct driver_info sierra_net_info_direct_ip = { | |||
965 | .data = (unsigned long)&sierra_net_info_data_direct_ip, | 933 | .data = (unsigned long)&sierra_net_info_data_direct_ip, |
966 | }; | 934 | }; |
967 | 935 | ||
936 | #define DIRECT_IP_DEVICE(vend, prod) \ | ||
937 | {USB_DEVICE_INTERFACE_NUMBER(vend, prod, 7), \ | ||
938 | .driver_info = (unsigned long)&sierra_net_info_direct_ip}, \ | ||
939 | {USB_DEVICE_INTERFACE_NUMBER(vend, prod, 10), \ | ||
940 | .driver_info = (unsigned long)&sierra_net_info_direct_ip}, \ | ||
941 | {USB_DEVICE_INTERFACE_NUMBER(vend, prod, 11), \ | ||
942 | .driver_info = (unsigned long)&sierra_net_info_direct_ip} | ||
943 | |||
968 | static const struct usb_device_id products[] = { | 944 | static const struct usb_device_id products[] = { |
969 | {USB_DEVICE(0x1199, 0x68A3), /* Sierra Wireless USB-to-WWAN modem */ | 945 | DIRECT_IP_DEVICE(0x1199, 0x68A3), /* Sierra Wireless USB-to-WWAN modem */ |
970 | .driver_info = (unsigned long) &sierra_net_info_direct_ip}, | 946 | DIRECT_IP_DEVICE(0x0F3D, 0x68A3), /* AT&T Direct IP modem */ |
971 | {USB_DEVICE(0x0F3D, 0x68A3), /* AT&T Direct IP modem */ | 947 | DIRECT_IP_DEVICE(0x1199, 0x68AA), /* Sierra Wireless Direct IP LTE modem */ |
972 | .driver_info = (unsigned long) &sierra_net_info_direct_ip}, | 948 | DIRECT_IP_DEVICE(0x0F3D, 0x68AA), /* AT&T Direct IP LTE modem */ |
973 | {USB_DEVICE(0x1199, 0x68AA), /* Sierra Wireless Direct IP LTE modem */ | ||
974 | .driver_info = (unsigned long) &sierra_net_info_direct_ip}, | ||
975 | {USB_DEVICE(0x0F3D, 0x68AA), /* AT&T Direct IP LTE modem */ | ||
976 | .driver_info = (unsigned long) &sierra_net_info_direct_ip}, | ||
977 | 949 | ||
978 | {}, /* last item */ | 950 | {}, /* last item */ |
979 | }; | 951 | }; |
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c index 93e0cfb739b8..ce9d4f2c9776 100644 --- a/drivers/net/vmxnet3/vmxnet3_drv.c +++ b/drivers/net/vmxnet3/vmxnet3_drv.c | |||
@@ -3019,6 +3019,7 @@ vmxnet3_probe_device(struct pci_dev *pdev, | |||
3019 | netdev->watchdog_timeo = 5 * HZ; | 3019 | netdev->watchdog_timeo = 5 * HZ; |
3020 | 3020 | ||
3021 | INIT_WORK(&adapter->work, vmxnet3_reset_work); | 3021 | INIT_WORK(&adapter->work, vmxnet3_reset_work); |
3022 | set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); | ||
3022 | 3023 | ||
3023 | if (adapter->intr.type == VMXNET3_IT_MSIX) { | 3024 | if (adapter->intr.type == VMXNET3_IT_MSIX) { |
3024 | int i; | 3025 | int i; |
@@ -3043,7 +3044,6 @@ vmxnet3_probe_device(struct pci_dev *pdev, | |||
3043 | goto err_register; | 3044 | goto err_register; |
3044 | } | 3045 | } |
3045 | 3046 | ||
3046 | set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state); | ||
3047 | vmxnet3_check_link(adapter, false); | 3047 | vmxnet3_check_link(adapter, false); |
3048 | atomic_inc(&devices_found); | 3048 | atomic_inc(&devices_found); |
3049 | return 0; | 3049 | return 0; |
diff --git a/drivers/net/wan/dscc4.c b/drivers/net/wan/dscc4.c index 9eb6479306d6..ef36cafd44b7 100644 --- a/drivers/net/wan/dscc4.c +++ b/drivers/net/wan/dscc4.c | |||
@@ -774,14 +774,15 @@ static int __devinit dscc4_init_one(struct pci_dev *pdev, | |||
774 | } | 774 | } |
775 | /* Global interrupt queue */ | 775 | /* Global interrupt queue */ |
776 | writel((u32)(((IRQ_RING_SIZE >> 5) - 1) << 20), ioaddr + IQLENR1); | 776 | writel((u32)(((IRQ_RING_SIZE >> 5) - 1) << 20), ioaddr + IQLENR1); |
777 | |||
778 | rc = -ENOMEM; | ||
779 | |||
777 | priv->iqcfg = (__le32 *) pci_alloc_consistent(pdev, | 780 | priv->iqcfg = (__le32 *) pci_alloc_consistent(pdev, |
778 | IRQ_RING_SIZE*sizeof(__le32), &priv->iqcfg_dma); | 781 | IRQ_RING_SIZE*sizeof(__le32), &priv->iqcfg_dma); |
779 | if (!priv->iqcfg) | 782 | if (!priv->iqcfg) |
780 | goto err_free_irq_5; | 783 | goto err_free_irq_5; |
781 | writel(priv->iqcfg_dma, ioaddr + IQCFG); | 784 | writel(priv->iqcfg_dma, ioaddr + IQCFG); |
782 | 785 | ||
783 | rc = -ENOMEM; | ||
784 | |||
785 | /* | 786 | /* |
786 | * SCC 0-3 private rx/tx irq structures | 787 | * SCC 0-3 private rx/tx irq structures |
787 | * IQRX/TXi needs to be set soon. Learned it the hard way... | 788 | * IQRX/TXi needs to be set soon. Learned it the hard way... |
diff --git a/drivers/net/wimax/i2400m/fw.c b/drivers/net/wimax/i2400m/fw.c index 283237f6f074..def12b38cbf7 100644 --- a/drivers/net/wimax/i2400m/fw.c +++ b/drivers/net/wimax/i2400m/fw.c | |||
@@ -326,8 +326,10 @@ int i2400m_barker_db_init(const char *_options) | |||
326 | unsigned barker; | 326 | unsigned barker; |
327 | 327 | ||
328 | options_orig = kstrdup(_options, GFP_KERNEL); | 328 | options_orig = kstrdup(_options, GFP_KERNEL); |
329 | if (options_orig == NULL) | 329 | if (options_orig == NULL) { |
330 | result = -ENOMEM; | ||
330 | goto error_parse; | 331 | goto error_parse; |
332 | } | ||
331 | options = options_orig; | 333 | options = options_orig; |
332 | 334 | ||
333 | while ((token = strsep(&options, ",")) != NULL) { | 335 | while ((token = strsep(&options, ",")) != NULL) { |
diff --git a/drivers/net/wireless/at76c50x-usb.c b/drivers/net/wireless/at76c50x-usb.c index efc162e0b511..88b8d64c90f1 100644 --- a/drivers/net/wireless/at76c50x-usb.c +++ b/drivers/net/wireless/at76c50x-usb.c | |||
@@ -342,7 +342,7 @@ static int at76_dfu_get_status(struct usb_device *udev, | |||
342 | return ret; | 342 | return ret; |
343 | } | 343 | } |
344 | 344 | ||
345 | static u8 at76_dfu_get_state(struct usb_device *udev, u8 *state) | 345 | static int at76_dfu_get_state(struct usb_device *udev, u8 *state) |
346 | { | 346 | { |
347 | int ret; | 347 | int ret; |
348 | 348 | ||
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c index 8c4c040a47b8..2aab20ee9f38 100644 --- a/drivers/net/wireless/ath/ath5k/base.c +++ b/drivers/net/wireless/ath/ath5k/base.c | |||
@@ -2056,9 +2056,7 @@ ath5k_beacon_update_timers(struct ath5k_hw *ah, u64 bc_tsf) | |||
2056 | void | 2056 | void |
2057 | ath5k_beacon_config(struct ath5k_hw *ah) | 2057 | ath5k_beacon_config(struct ath5k_hw *ah) |
2058 | { | 2058 | { |
2059 | unsigned long flags; | 2059 | spin_lock_bh(&ah->block); |
2060 | |||
2061 | spin_lock_irqsave(&ah->block, flags); | ||
2062 | ah->bmisscount = 0; | 2060 | ah->bmisscount = 0; |
2063 | ah->imask &= ~(AR5K_INT_BMISS | AR5K_INT_SWBA); | 2061 | ah->imask &= ~(AR5K_INT_BMISS | AR5K_INT_SWBA); |
2064 | 2062 | ||
@@ -2085,7 +2083,7 @@ ath5k_beacon_config(struct ath5k_hw *ah) | |||
2085 | 2083 | ||
2086 | ath5k_hw_set_imr(ah, ah->imask); | 2084 | ath5k_hw_set_imr(ah, ah->imask); |
2087 | mmiowb(); | 2085 | mmiowb(); |
2088 | spin_unlock_irqrestore(&ah->block, flags); | 2086 | spin_unlock_bh(&ah->block); |
2089 | } | 2087 | } |
2090 | 2088 | ||
2091 | static void ath5k_tasklet_beacon(unsigned long data) | 2089 | static void ath5k_tasklet_beacon(unsigned long data) |
diff --git a/drivers/net/wireless/ath/ath5k/mac80211-ops.c b/drivers/net/wireless/ath/ath5k/mac80211-ops.c index 260e7dc7f751..d56453e43d7e 100644 --- a/drivers/net/wireless/ath/ath5k/mac80211-ops.c +++ b/drivers/net/wireless/ath/ath5k/mac80211-ops.c | |||
@@ -254,7 +254,6 @@ ath5k_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif, | |||
254 | struct ath5k_vif *avf = (void *)vif->drv_priv; | 254 | struct ath5k_vif *avf = (void *)vif->drv_priv; |
255 | struct ath5k_hw *ah = hw->priv; | 255 | struct ath5k_hw *ah = hw->priv; |
256 | struct ath_common *common = ath5k_hw_common(ah); | 256 | struct ath_common *common = ath5k_hw_common(ah); |
257 | unsigned long flags; | ||
258 | 257 | ||
259 | mutex_lock(&ah->lock); | 258 | mutex_lock(&ah->lock); |
260 | 259 | ||
@@ -300,9 +299,9 @@ ath5k_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif, | |||
300 | } | 299 | } |
301 | 300 | ||
302 | if (changes & BSS_CHANGED_BEACON) { | 301 | if (changes & BSS_CHANGED_BEACON) { |
303 | spin_lock_irqsave(&ah->block, flags); | 302 | spin_lock_bh(&ah->block); |
304 | ath5k_beacon_update(hw, vif); | 303 | ath5k_beacon_update(hw, vif); |
305 | spin_unlock_irqrestore(&ah->block, flags); | 304 | spin_unlock_bh(&ah->block); |
306 | } | 305 | } |
307 | 306 | ||
308 | if (changes & BSS_CHANGED_BEACON_ENABLED) | 307 | if (changes & BSS_CHANGED_BEACON_ENABLED) |
diff --git a/drivers/net/wireless/ath/ath9k/mac.c b/drivers/net/wireless/ath/ath9k/mac.c index 7990cd55599c..b42be910a83d 100644 --- a/drivers/net/wireless/ath/ath9k/mac.c +++ b/drivers/net/wireless/ath/ath9k/mac.c | |||
@@ -773,15 +773,10 @@ bool ath9k_hw_intrpend(struct ath_hw *ah) | |||
773 | } | 773 | } |
774 | EXPORT_SYMBOL(ath9k_hw_intrpend); | 774 | EXPORT_SYMBOL(ath9k_hw_intrpend); |
775 | 775 | ||
776 | void ath9k_hw_disable_interrupts(struct ath_hw *ah) | 776 | void ath9k_hw_kill_interrupts(struct ath_hw *ah) |
777 | { | 777 | { |
778 | struct ath_common *common = ath9k_hw_common(ah); | 778 | struct ath_common *common = ath9k_hw_common(ah); |
779 | 779 | ||
780 | if (!(ah->imask & ATH9K_INT_GLOBAL)) | ||
781 | atomic_set(&ah->intr_ref_cnt, -1); | ||
782 | else | ||
783 | atomic_dec(&ah->intr_ref_cnt); | ||
784 | |||
785 | ath_dbg(common, INTERRUPT, "disable IER\n"); | 780 | ath_dbg(common, INTERRUPT, "disable IER\n"); |
786 | REG_WRITE(ah, AR_IER, AR_IER_DISABLE); | 781 | REG_WRITE(ah, AR_IER, AR_IER_DISABLE); |
787 | (void) REG_READ(ah, AR_IER); | 782 | (void) REG_READ(ah, AR_IER); |
@@ -793,6 +788,17 @@ void ath9k_hw_disable_interrupts(struct ath_hw *ah) | |||
793 | (void) REG_READ(ah, AR_INTR_SYNC_ENABLE); | 788 | (void) REG_READ(ah, AR_INTR_SYNC_ENABLE); |
794 | } | 789 | } |
795 | } | 790 | } |
791 | EXPORT_SYMBOL(ath9k_hw_kill_interrupts); | ||
792 | |||
793 | void ath9k_hw_disable_interrupts(struct ath_hw *ah) | ||
794 | { | ||
795 | if (!(ah->imask & ATH9K_INT_GLOBAL)) | ||
796 | atomic_set(&ah->intr_ref_cnt, -1); | ||
797 | else | ||
798 | atomic_dec(&ah->intr_ref_cnt); | ||
799 | |||
800 | ath9k_hw_kill_interrupts(ah); | ||
801 | } | ||
796 | EXPORT_SYMBOL(ath9k_hw_disable_interrupts); | 802 | EXPORT_SYMBOL(ath9k_hw_disable_interrupts); |
797 | 803 | ||
798 | void ath9k_hw_enable_interrupts(struct ath_hw *ah) | 804 | void ath9k_hw_enable_interrupts(struct ath_hw *ah) |
diff --git a/drivers/net/wireless/ath/ath9k/mac.h b/drivers/net/wireless/ath/ath9k/mac.h index 0eba36dca6f8..4a745e68dd94 100644 --- a/drivers/net/wireless/ath/ath9k/mac.h +++ b/drivers/net/wireless/ath/ath9k/mac.h | |||
@@ -738,6 +738,7 @@ bool ath9k_hw_intrpend(struct ath_hw *ah); | |||
738 | void ath9k_hw_set_interrupts(struct ath_hw *ah); | 738 | void ath9k_hw_set_interrupts(struct ath_hw *ah); |
739 | void ath9k_hw_enable_interrupts(struct ath_hw *ah); | 739 | void ath9k_hw_enable_interrupts(struct ath_hw *ah); |
740 | void ath9k_hw_disable_interrupts(struct ath_hw *ah); | 740 | void ath9k_hw_disable_interrupts(struct ath_hw *ah); |
741 | void ath9k_hw_kill_interrupts(struct ath_hw *ah); | ||
741 | 742 | ||
742 | void ar9002_hw_attach_mac_ops(struct ath_hw *ah); | 743 | void ar9002_hw_attach_mac_ops(struct ath_hw *ah); |
743 | 744 | ||
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 6049d8b82855..a22df749b8db 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c | |||
@@ -462,8 +462,10 @@ irqreturn_t ath_isr(int irq, void *dev) | |||
462 | if (!ath9k_hw_intrpend(ah)) | 462 | if (!ath9k_hw_intrpend(ah)) |
463 | return IRQ_NONE; | 463 | return IRQ_NONE; |
464 | 464 | ||
465 | if(test_bit(SC_OP_HW_RESET, &sc->sc_flags)) | 465 | if (test_bit(SC_OP_HW_RESET, &sc->sc_flags)) { |
466 | ath9k_hw_kill_interrupts(ah); | ||
466 | return IRQ_HANDLED; | 467 | return IRQ_HANDLED; |
468 | } | ||
467 | 469 | ||
468 | /* | 470 | /* |
469 | * Figure out the reason(s) for the interrupt. Note | 471 | * Figure out the reason(s) for the interrupt. Note |
diff --git a/drivers/net/wireless/ath/ath9k/pci.c b/drivers/net/wireless/ath/ath9k/pci.c index d455de9162ec..a978984d78a5 100644 --- a/drivers/net/wireless/ath/ath9k/pci.c +++ b/drivers/net/wireless/ath/ath9k/pci.c | |||
@@ -321,6 +321,7 @@ static int ath_pci_suspend(struct device *device) | |||
321 | * Otherwise the chip never moved to full sleep, | 321 | * Otherwise the chip never moved to full sleep, |
322 | * when no interface is up. | 322 | * when no interface is up. |
323 | */ | 323 | */ |
324 | ath9k_stop_btcoex(sc); | ||
324 | ath9k_hw_disable(sc->sc_ah); | 325 | ath9k_hw_disable(sc->sc_ah); |
325 | ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_FULL_SLEEP); | 326 | ath9k_hw_setpower(sc->sc_ah, ATH9K_PM_FULL_SLEEP); |
326 | 327 | ||
diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c index 12aca02228c2..4480c0cc655f 100644 --- a/drivers/net/wireless/ath/ath9k/recv.c +++ b/drivers/net/wireless/ath/ath9k/recv.c | |||
@@ -1044,7 +1044,6 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp) | |||
1044 | struct ieee80211_hw *hw = sc->hw; | 1044 | struct ieee80211_hw *hw = sc->hw; |
1045 | struct ieee80211_hdr *hdr; | 1045 | struct ieee80211_hdr *hdr; |
1046 | int retval; | 1046 | int retval; |
1047 | bool decrypt_error = false; | ||
1048 | struct ath_rx_status rs; | 1047 | struct ath_rx_status rs; |
1049 | enum ath9k_rx_qtype qtype; | 1048 | enum ath9k_rx_qtype qtype; |
1050 | bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA); | 1049 | bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA); |
@@ -1066,6 +1065,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp) | |||
1066 | tsf_lower = tsf & 0xffffffff; | 1065 | tsf_lower = tsf & 0xffffffff; |
1067 | 1066 | ||
1068 | do { | 1067 | do { |
1068 | bool decrypt_error = false; | ||
1069 | /* If handling rx interrupt and flush is in progress => exit */ | 1069 | /* If handling rx interrupt and flush is in progress => exit */ |
1070 | if (test_bit(SC_OP_RXFLUSH, &sc->sc_flags) && (flush == 0)) | 1070 | if (test_bit(SC_OP_RXFLUSH, &sc->sc_flags) && (flush == 0)) |
1071 | break; | 1071 | break; |
diff --git a/drivers/net/wireless/p54/p54usb.c b/drivers/net/wireless/p54/p54usb.c index 7f207b6e9552..effb044a8a9d 100644 --- a/drivers/net/wireless/p54/p54usb.c +++ b/drivers/net/wireless/p54/p54usb.c | |||
@@ -42,7 +42,7 @@ MODULE_FIRMWARE("isl3887usb"); | |||
42 | * whenever you add a new device. | 42 | * whenever you add a new device. |
43 | */ | 43 | */ |
44 | 44 | ||
45 | static struct usb_device_id p54u_table[] __devinitdata = { | 45 | static struct usb_device_id p54u_table[] = { |
46 | /* Version 1 devices (pci chip + net2280) */ | 46 | /* Version 1 devices (pci chip + net2280) */ |
47 | {USB_DEVICE(0x0411, 0x0050)}, /* Buffalo WLI2-USB2-G54 */ | 47 | {USB_DEVICE(0x0411, 0x0050)}, /* Buffalo WLI2-USB2-G54 */ |
48 | {USB_DEVICE(0x045e, 0x00c2)}, /* Microsoft MN-710 */ | 48 | {USB_DEVICE(0x045e, 0x00c2)}, /* Microsoft MN-710 */ |
diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c index 241162e8111d..7a4ae9ee1c63 100644 --- a/drivers/net/wireless/rndis_wlan.c +++ b/drivers/net/wireless/rndis_wlan.c | |||
@@ -1803,6 +1803,7 @@ static struct ndis_80211_pmkid *update_pmkid(struct usbnet *usbdev, | |||
1803 | struct cfg80211_pmksa *pmksa, | 1803 | struct cfg80211_pmksa *pmksa, |
1804 | int max_pmkids) | 1804 | int max_pmkids) |
1805 | { | 1805 | { |
1806 | struct ndis_80211_pmkid *new_pmkids; | ||
1806 | int i, err, newlen; | 1807 | int i, err, newlen; |
1807 | unsigned int count; | 1808 | unsigned int count; |
1808 | 1809 | ||
@@ -1833,11 +1834,12 @@ static struct ndis_80211_pmkid *update_pmkid(struct usbnet *usbdev, | |||
1833 | /* add new pmkid */ | 1834 | /* add new pmkid */ |
1834 | newlen = sizeof(*pmkids) + (count + 1) * sizeof(pmkids->bssid_info[0]); | 1835 | newlen = sizeof(*pmkids) + (count + 1) * sizeof(pmkids->bssid_info[0]); |
1835 | 1836 | ||
1836 | pmkids = krealloc(pmkids, newlen, GFP_KERNEL); | 1837 | new_pmkids = krealloc(pmkids, newlen, GFP_KERNEL); |
1837 | if (!pmkids) { | 1838 | if (!new_pmkids) { |
1838 | err = -ENOMEM; | 1839 | err = -ENOMEM; |
1839 | goto error; | 1840 | goto error; |
1840 | } | 1841 | } |
1842 | pmkids = new_pmkids; | ||
1841 | 1843 | ||
1842 | pmkids->length = cpu_to_le32(newlen); | 1844 | pmkids->length = cpu_to_le32(newlen); |
1843 | pmkids->bssid_info_count = cpu_to_le32(count + 1); | 1845 | pmkids->bssid_info_count = cpu_to_le32(count + 1); |
diff --git a/drivers/net/wireless/rtl818x/rtl8187/dev.c b/drivers/net/wireless/rtl818x/rtl8187/dev.c index 71a30b026089..533024095c43 100644 --- a/drivers/net/wireless/rtl818x/rtl8187/dev.c +++ b/drivers/net/wireless/rtl818x/rtl8187/dev.c | |||
@@ -44,7 +44,7 @@ MODULE_AUTHOR("Larry Finger <Larry.Finger@lwfinger.net>"); | |||
44 | MODULE_DESCRIPTION("RTL8187/RTL8187B USB wireless driver"); | 44 | MODULE_DESCRIPTION("RTL8187/RTL8187B USB wireless driver"); |
45 | MODULE_LICENSE("GPL"); | 45 | MODULE_LICENSE("GPL"); |
46 | 46 | ||
47 | static struct usb_device_id rtl8187_table[] __devinitdata = { | 47 | static struct usb_device_id rtl8187_table[] = { |
48 | /* Asus */ | 48 | /* Asus */ |
49 | {USB_DEVICE(0x0b05, 0x171d), .driver_info = DEVICE_RTL8187}, | 49 | {USB_DEVICE(0x0b05, 0x171d), .driver_info = DEVICE_RTL8187}, |
50 | /* Belkin */ | 50 | /* Belkin */ |