@@ -57,16 +57,6 @@ static int rmnet_is_real_dev_registered(const struct net_device *real_dev)
57
57
return (rx_handler == rmnet_rx_handler );
58
58
}
59
59
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
-
70
60
/* Needs rtnl lock */
71
61
static struct rmnet_real_dev_info *
72
62
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)
83
73
if (!rmnet_is_real_dev_registered (dev )) {
84
74
ep = rmnet_vnd_get_endpoint (dev );
85
75
} 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 );
90
77
91
78
ep = & r -> muxed_ep [config_id ];
92
79
}
@@ -139,70 +126,23 @@ static int rmnet_register_real_device(struct net_device *real_dev)
139
126
return 0 ;
140
127
}
141
128
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 )
157
132
{
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 ;
191
134
192
135
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 );
197
137
138
+ ep = rmnet_get_endpoint (dev , mux_id );
198
139
/* This config is cleared on every set, so its ok to not
199
140
* clear it on a device delete.
200
141
*/
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 ;
206
146
}
207
147
208
148
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,
242
182
if (err )
243
183
goto err2 ;
244
184
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
+
248
190
rmnet_set_endpoint_config (real_dev , mux_id , mode , dev );
249
191
rmnet_set_endpoint_config (dev , mux_id , mode , real_dev );
250
192
return 0 ;
@@ -376,10 +318,14 @@ struct rtnl_link_ops rmnet_link_ops __read_mostly = {
376
318
.get_size = rmnet_get_size ,
377
319
};
378
320
321
+ /* Needs either rcu_read_lock() or rtnl lock */
379
322
struct rmnet_real_dev_info *
380
323
rmnet_get_real_dev_info (struct net_device * real_dev )
381
324
{
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 ;
383
329
}
384
330
385
331
/* Startup/Shutdown */
0 commit comments