@@ -101,103 +101,95 @@ static int mana_ib_probe(struct auxiliary_device *adev,
101
101
const struct auxiliary_device_id * id )
102
102
{
103
103
struct mana_adev * madev = container_of (adev , struct mana_adev , adev );
104
+ struct gdma_context * gc = madev -> mdev -> gdma_context ;
105
+ struct mana_context * mc = gc -> mana .driver_data ;
104
106
struct gdma_dev * mdev = madev -> mdev ;
105
107
struct net_device * ndev ;
106
- struct mana_context * mc ;
107
108
struct mana_ib_dev * dev ;
108
109
u8 mac_addr [ETH_ALEN ];
109
110
int ret ;
110
111
111
- mc = mdev -> driver_data ;
112
-
113
112
dev = ib_alloc_device (mana_ib_dev , ib_dev );
114
113
if (!dev )
115
114
return - ENOMEM ;
116
115
117
116
ib_set_device_ops (& dev -> ib_dev , & mana_ib_dev_ops );
118
-
119
- dev -> ib_dev .phys_port_cnt = mc -> num_ports ;
120
-
121
- ibdev_dbg (& dev -> ib_dev , "mdev=%p id=%d num_ports=%d\n" , mdev ,
122
- mdev -> dev_id .as_uint32 , dev -> ib_dev .phys_port_cnt );
123
-
124
117
dev -> ib_dev .node_type = RDMA_NODE_IB_CA ;
125
-
126
- /*
127
- * num_comp_vectors needs to set to the max MSIX index
128
- * when interrupts and event queues are implemented
129
- */
130
- dev -> ib_dev .num_comp_vectors = mdev -> gdma_context -> max_num_queues ;
131
- dev -> ib_dev .dev .parent = mdev -> gdma_context -> dev ;
132
-
133
- ndev = mana_get_primary_netdev (mc , 0 , & dev -> dev_tracker );
134
- if (!ndev ) {
135
- ret = - ENODEV ;
136
- ibdev_err (& dev -> ib_dev , "Failed to get netdev for IB port 1" );
137
- goto free_ib_device ;
138
- }
139
- ether_addr_copy (mac_addr , ndev -> dev_addr );
140
- addrconf_addr_eui48 ((u8 * )& dev -> ib_dev .node_guid , ndev -> dev_addr );
141
- ret = ib_device_set_netdev (& dev -> ib_dev , ndev , 1 );
142
- /* mana_get_primary_netdev() returns ndev with refcount held */
143
- netdev_put (ndev , & dev -> dev_tracker );
144
- if (ret ) {
145
- ibdev_err (& dev -> ib_dev , "Failed to set ib netdev, ret %d" , ret );
146
- goto free_ib_device ;
147
- }
148
-
149
- ret = mana_gd_register_device (& mdev -> gdma_context -> mana_ib );
150
- if (ret ) {
151
- ibdev_err (& dev -> ib_dev , "Failed to register device, ret %d" ,
152
- ret );
153
- goto free_ib_device ;
154
- }
155
- dev -> gdma_dev = & mdev -> gdma_context -> mana_ib ;
156
-
157
- dev -> nb .notifier_call = mana_ib_netdev_event ;
158
- ret = register_netdevice_notifier (& dev -> nb );
159
- if (ret ) {
160
- ibdev_err (& dev -> ib_dev , "Failed to register net notifier, %d" ,
161
- ret );
162
- goto deregister_device ;
163
- }
164
-
165
- ret = mana_ib_gd_query_adapter_caps (dev );
166
- if (ret ) {
167
- ibdev_err (& dev -> ib_dev , "Failed to query device caps, ret %d" ,
168
- ret );
169
- goto deregister_net_notifier ;
170
- }
171
-
172
- ib_set_device_ops (& dev -> ib_dev , & mana_ib_stats_ops );
173
-
174
- ret = mana_ib_create_eqs (dev );
175
- if (ret ) {
176
- ibdev_err (& dev -> ib_dev , "Failed to create EQs, ret %d" , ret );
177
- goto deregister_net_notifier ;
178
- }
179
-
180
- ret = mana_ib_gd_create_rnic_adapter (dev );
181
- if (ret )
182
- goto destroy_eqs ;
183
-
118
+ dev -> ib_dev .num_comp_vectors = gc -> max_num_queues ;
119
+ dev -> ib_dev .dev .parent = gc -> dev ;
120
+ dev -> gdma_dev = mdev ;
184
121
xa_init_flags (& dev -> qp_table_wq , XA_FLAGS_LOCK_IRQ );
185
- ret = mana_ib_gd_config_mac (dev , ADDR_OP_ADD , mac_addr );
186
- if (ret ) {
187
- ibdev_err (& dev -> ib_dev , "Failed to add Mac address, ret %d" ,
188
- ret );
189
- goto destroy_rnic ;
122
+
123
+ if (mana_ib_is_rnic (dev )) {
124
+ dev -> ib_dev .phys_port_cnt = 1 ;
125
+ ndev = mana_get_primary_netdev (mc , 0 , & dev -> dev_tracker );
126
+ if (!ndev ) {
127
+ ret = - ENODEV ;
128
+ ibdev_err (& dev -> ib_dev , "Failed to get netdev for IB port 1" );
129
+ goto free_ib_device ;
130
+ }
131
+ ether_addr_copy (mac_addr , ndev -> dev_addr );
132
+ addrconf_addr_eui48 ((u8 * )& dev -> ib_dev .node_guid , ndev -> dev_addr );
133
+ ret = ib_device_set_netdev (& dev -> ib_dev , ndev , 1 );
134
+ /* mana_get_primary_netdev() returns ndev with refcount held */
135
+ netdev_put (ndev , & dev -> dev_tracker );
136
+ if (ret ) {
137
+ ibdev_err (& dev -> ib_dev , "Failed to set ib netdev, ret %d" , ret );
138
+ goto free_ib_device ;
139
+ }
140
+
141
+ dev -> nb .notifier_call = mana_ib_netdev_event ;
142
+ ret = register_netdevice_notifier (& dev -> nb );
143
+ if (ret ) {
144
+ ibdev_err (& dev -> ib_dev , "Failed to register net notifier, %d" ,
145
+ ret );
146
+ goto free_ib_device ;
147
+ }
148
+
149
+ ret = mana_ib_gd_query_adapter_caps (dev );
150
+ if (ret ) {
151
+ ibdev_err (& dev -> ib_dev , "Failed to query device caps, ret %d" , ret );
152
+ goto deregister_net_notifier ;
153
+ }
154
+
155
+ ib_set_device_ops (& dev -> ib_dev , & mana_ib_stats_ops );
156
+
157
+ ret = mana_ib_create_eqs (dev );
158
+ if (ret ) {
159
+ ibdev_err (& dev -> ib_dev , "Failed to create EQs, ret %d" , ret );
160
+ goto deregister_net_notifier ;
161
+ }
162
+
163
+ ret = mana_ib_gd_create_rnic_adapter (dev );
164
+ if (ret )
165
+ goto destroy_eqs ;
166
+
167
+ ret = mana_ib_gd_config_mac (dev , ADDR_OP_ADD , mac_addr );
168
+ if (ret ) {
169
+ ibdev_err (& dev -> ib_dev , "Failed to add Mac address, ret %d" , ret );
170
+ goto destroy_rnic ;
171
+ }
172
+ } else {
173
+ dev -> ib_dev .phys_port_cnt = mc -> num_ports ;
174
+ ret = mana_eth_query_adapter_caps (dev );
175
+ if (ret ) {
176
+ ibdev_err (& dev -> ib_dev , "Failed to query ETH device caps, ret %d" , ret );
177
+ goto free_ib_device ;
178
+ }
190
179
}
191
180
192
- dev -> av_pool = dma_pool_create ("mana_ib_av" , mdev -> gdma_context -> dev ,
193
- MANA_AV_BUFFER_SIZE , MANA_AV_BUFFER_SIZE , 0 );
181
+ dev -> av_pool = dma_pool_create ("mana_ib_av" , gc -> dev , MANA_AV_BUFFER_SIZE ,
182
+ MANA_AV_BUFFER_SIZE , 0 );
194
183
if (!dev -> av_pool ) {
195
184
ret = - ENOMEM ;
196
185
goto destroy_rnic ;
197
186
}
198
187
199
- ret = ib_register_device (& dev -> ib_dev , "mana_%d" ,
200
- mdev -> gdma_context -> dev );
188
+ ibdev_dbg (& dev -> ib_dev , "mdev=%p id=%d num_ports=%d\n" , mdev ,
189
+ mdev -> dev_id .as_uint32 , dev -> ib_dev .phys_port_cnt );
190
+
191
+ ret = ib_register_device (& dev -> ib_dev , mana_ib_is_rnic (dev ) ? "mana_%d" : "manae_%d" ,
192
+ gc -> dev );
201
193
if (ret )
202
194
goto deallocate_pool ;
203
195
@@ -208,15 +200,16 @@ static int mana_ib_probe(struct auxiliary_device *adev,
208
200
deallocate_pool :
209
201
dma_pool_destroy (dev -> av_pool );
210
202
destroy_rnic :
211
- xa_destroy ( & dev -> qp_table_wq );
212
- mana_ib_gd_destroy_rnic_adapter (dev );
203
+ if ( mana_ib_is_rnic ( dev ))
204
+ mana_ib_gd_destroy_rnic_adapter (dev );
213
205
destroy_eqs :
214
- mana_ib_destroy_eqs (dev );
206
+ if (mana_ib_is_rnic (dev ))
207
+ mana_ib_destroy_eqs (dev );
215
208
deregister_net_notifier :
216
- unregister_netdevice_notifier (& dev -> nb );
217
- deregister_device :
218
- mana_gd_deregister_device (dev -> gdma_dev );
209
+ if (mana_ib_is_rnic (dev ))
210
+ unregister_netdevice_notifier (& dev -> nb );
219
211
free_ib_device :
212
+ xa_destroy (& dev -> qp_table_wq );
220
213
ib_dealloc_device (& dev -> ib_dev );
221
214
return ret ;
222
215
}
@@ -227,25 +220,24 @@ static void mana_ib_remove(struct auxiliary_device *adev)
227
220
228
221
ib_unregister_device (& dev -> ib_dev );
229
222
dma_pool_destroy (dev -> av_pool );
223
+ if (mana_ib_is_rnic (dev )) {
224
+ mana_ib_gd_destroy_rnic_adapter (dev );
225
+ mana_ib_destroy_eqs (dev );
226
+ unregister_netdevice_notifier (& dev -> nb );
227
+ }
230
228
xa_destroy (& dev -> qp_table_wq );
231
- mana_ib_gd_destroy_rnic_adapter (dev );
232
- mana_ib_destroy_eqs (dev );
233
- unregister_netdevice_notifier (& dev -> nb );
234
- mana_gd_deregister_device (dev -> gdma_dev );
235
229
ib_dealloc_device (& dev -> ib_dev );
236
230
}
237
231
238
232
static const struct auxiliary_device_id mana_id_table [] = {
239
- {
240
- .name = "mana.rdma" ,
241
- },
233
+ { .name = "mana.rdma" , },
234
+ { .name = "mana.eth" , },
242
235
{},
243
236
};
244
237
245
238
MODULE_DEVICE_TABLE (auxiliary , mana_id_table );
246
239
247
240
static struct auxiliary_driver mana_driver = {
248
- .name = "rdma" ,
249
241
.probe = mana_ib_probe ,
250
242
.remove = mana_ib_remove ,
251
243
.id_table = mana_id_table ,
0 commit comments