Skip to content

Commit 032ee46

Browse files
Subash Abhinov Kasiviswanathandavem330
authored andcommitted
net: qualcomm: rmnet: Refactor the new rmnet dev creation
Data format can be directly set from rmnet_newlink() since the rmnet real dev info is already available. Since __rmnet_get_real_dev_info() is no longer used in rmnet_config.c after removal of those functions, move content to rmnet_get_real_dev_info(). __rmnet_set_endpoint_config() is collapsed into rmnet_set_endpoint_config() since only mux_id was being set additionally within it. Remove an unnecessary mux_id check. Set the mux_id for the rmnet_dev within rmnet_vnd_newlink() itself. Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org> Cc: Dan Williams <dcbw@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 2d516c0 commit 032ee46

File tree

3 files changed

+26
-84
lines changed

3 files changed

+26
-84
lines changed

drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c

Lines changed: 21 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,6 @@ static int rmnet_is_real_dev_registered(const struct net_device *real_dev)
5757
return (rx_handler == rmnet_rx_handler);
5858
}
5959

60-
/* Needs either rcu_read_lock() or rtnl lock */
61-
static struct rmnet_real_dev_info*
62-
__rmnet_get_real_dev_info(const struct net_device *real_dev)
63-
{
64-
if (rmnet_is_real_dev_registered(real_dev))
65-
return rcu_dereference_rtnl(real_dev->rx_handler_data);
66-
else
67-
return NULL;
68-
}
69-
7060
/* Needs rtnl lock */
7161
static struct rmnet_real_dev_info*
7262
rmnet_get_real_dev_info_rtnl(const struct net_device *real_dev)
@@ -83,10 +73,7 @@ rmnet_get_endpoint(struct net_device *dev, int config_id)
8373
if (!rmnet_is_real_dev_registered(dev)) {
8474
ep = rmnet_vnd_get_endpoint(dev);
8575
} else {
86-
r = __rmnet_get_real_dev_info(dev);
87-
88-
if (!r)
89-
return NULL;
76+
r = rmnet_get_real_dev_info_rtnl(dev);
9077

9178
ep = &r->muxed_ep[config_id];
9279
}
@@ -139,70 +126,23 @@ static int rmnet_register_real_device(struct net_device *real_dev)
139126
return 0;
140127
}
141128

142-
static int rmnet_set_ingress_data_format(struct net_device *dev, u32 idf)
143-
{
144-
struct rmnet_real_dev_info *r;
145-
146-
netdev_dbg(dev, "Ingress format 0x%08X\n", idf);
147-
148-
r = __rmnet_get_real_dev_info(dev);
149-
150-
r->ingress_data_format = idf;
151-
152-
return 0;
153-
}
154-
155-
static int rmnet_set_egress_data_format(struct net_device *dev, u32 edf,
156-
u16 agg_size, u16 agg_count)
129+
static void rmnet_set_endpoint_config(struct net_device *dev,
130+
u8 mux_id, u8 rmnet_mode,
131+
struct net_device *egress_dev)
157132
{
158-
struct rmnet_real_dev_info *r;
159-
160-
netdev_dbg(dev, "Egress format 0x%08X agg size %d cnt %d\n",
161-
edf, agg_size, agg_count);
162-
163-
r = __rmnet_get_real_dev_info(dev);
164-
165-
r->egress_data_format = edf;
166-
167-
return 0;
168-
}
169-
170-
static int __rmnet_set_endpoint_config(struct net_device *dev, int config_id,
171-
struct rmnet_endpoint *ep)
172-
{
173-
struct rmnet_endpoint *dev_ep;
174-
175-
dev_ep = rmnet_get_endpoint(dev, config_id);
176-
177-
if (!dev_ep)
178-
return -EINVAL;
179-
180-
memcpy(dev_ep, ep, sizeof(struct rmnet_endpoint));
181-
dev_ep->mux_id = config_id;
182-
183-
return 0;
184-
}
185-
186-
static int rmnet_set_endpoint_config(struct net_device *dev,
187-
int config_id, u8 rmnet_mode,
188-
struct net_device *egress_dev)
189-
{
190-
struct rmnet_endpoint ep;
133+
struct rmnet_endpoint *ep;
191134

192135
netdev_dbg(dev, "id %d mode %d dev %s\n",
193-
config_id, rmnet_mode, egress_dev->name);
194-
195-
if (config_id >= RMNET_MAX_LOGICAL_EP)
196-
return -EINVAL;
136+
mux_id, rmnet_mode, egress_dev->name);
197137

138+
ep = rmnet_get_endpoint(dev, mux_id);
198139
/* This config is cleared on every set, so its ok to not
199140
* clear it on a device delete.
200141
*/
201-
memset(&ep, 0, sizeof(struct rmnet_endpoint));
202-
ep.rmnet_mode = rmnet_mode;
203-
ep.egress_dev = egress_dev;
204-
205-
return __rmnet_set_endpoint_config(dev, config_id, &ep);
142+
memset(ep, 0, sizeof(struct rmnet_endpoint));
143+
ep->rmnet_mode = rmnet_mode;
144+
ep->egress_dev = egress_dev;
145+
ep->mux_id = mux_id;
206146
}
207147

208148
static int rmnet_newlink(struct net *src_net, struct net_device *dev,
@@ -242,9 +182,11 @@ static int rmnet_newlink(struct net *src_net, struct net_device *dev,
242182
if (err)
243183
goto err2;
244184

245-
rmnet_vnd_set_mux(dev, mux_id);
246-
rmnet_set_egress_data_format(real_dev, egress_format, 0, 0);
247-
rmnet_set_ingress_data_format(real_dev, ingress_format);
185+
netdev_dbg(dev, "data format [ingress 0x%08X] [egress 0x%08X]\n",
186+
ingress_format, egress_format);
187+
r->egress_data_format = egress_format;
188+
r->ingress_data_format = ingress_format;
189+
248190
rmnet_set_endpoint_config(real_dev, mux_id, mode, dev);
249191
rmnet_set_endpoint_config(dev, mux_id, mode, real_dev);
250192
return 0;
@@ -376,10 +318,14 @@ struct rtnl_link_ops rmnet_link_ops __read_mostly = {
376318
.get_size = rmnet_get_size,
377319
};
378320

321+
/* Needs either rcu_read_lock() or rtnl lock */
379322
struct rmnet_real_dev_info*
380323
rmnet_get_real_dev_info(struct net_device *real_dev)
381324
{
382-
return __rmnet_get_real_dev_info(real_dev);
325+
if (rmnet_is_real_dev_registered(real_dev))
326+
return rcu_dereference_rtnl(real_dev->rx_handler_data);
327+
else
328+
return NULL;
383329
}
384330

385331
/* Startup/Shutdown */

drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ void rmnet_vnd_setup(struct net_device *rmnet_dev)
9393
int rmnet_vnd_newlink(u8 id, struct net_device *rmnet_dev,
9494
struct rmnet_real_dev_info *r)
9595
{
96+
struct rmnet_priv *priv;
9697
int rc;
9798

9899
if (r->rmnet_devices[id])
@@ -103,6 +104,10 @@ int rmnet_vnd_newlink(u8 id, struct net_device *rmnet_dev,
103104
r->rmnet_devices[id] = rmnet_dev;
104105
r->nr_rmnet_devs++;
105106
rmnet_dev->rtnl_link_ops = &rmnet_link_ops;
107+
108+
priv = netdev_priv(rmnet_dev);
109+
priv->mux_id = id;
110+
106111
netdev_dbg(rmnet_dev, "rmnet dev created\n");
107112
}
108113

@@ -127,14 +132,6 @@ u8 rmnet_vnd_get_mux(struct net_device *rmnet_dev)
127132
return priv->mux_id;
128133
}
129134

130-
void rmnet_vnd_set_mux(struct net_device *rmnet_dev, u8 mux_id)
131-
{
132-
struct rmnet_priv *priv;
133-
134-
priv = netdev_priv(rmnet_dev);
135-
priv->mux_id = mux_id;
136-
}
137-
138135
/* Gets the logical endpoint configuration for a RmNet virtual network device
139136
* node. Caller should confirm that devices is a RmNet VND before calling.
140137
*/

drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,5 @@ int rmnet_vnd_dellink(u8 id, struct rmnet_real_dev_info *r);
2424
void rmnet_vnd_rx_fixup(struct sk_buff *skb, struct net_device *dev);
2525
void rmnet_vnd_tx_fixup(struct sk_buff *skb, struct net_device *dev);
2626
u8 rmnet_vnd_get_mux(struct net_device *rmnet_dev);
27-
void rmnet_vnd_set_mux(struct net_device *rmnet_dev, u8 mux_id);
2827
void rmnet_vnd_setup(struct net_device *dev);
2928
#endif /* _RMNET_VND_H_ */

0 commit comments

Comments
 (0)