@@ -101,103 +101,95 @@ static int mana_ib_probe(struct auxiliary_device *adev,
101101 const struct auxiliary_device_id * id )
102102{
103103 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 ;
104106 struct gdma_dev * mdev = madev -> mdev ;
105107 struct net_device * ndev ;
106- struct mana_context * mc ;
107108 struct mana_ib_dev * dev ;
108109 u8 mac_addr [ETH_ALEN ];
109110 int ret ;
110111
111- mc = mdev -> driver_data ;
112-
113112 dev = ib_alloc_device (mana_ib_dev , ib_dev );
114113 if (!dev )
115114 return - ENOMEM ;
116115
117116 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-
124117 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 ;
184121 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+ }
190179 }
191180
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 );
194183 if (!dev -> av_pool ) {
195184 ret = - ENOMEM ;
196185 goto destroy_rnic ;
197186 }
198187
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 );
201193 if (ret )
202194 goto deallocate_pool ;
203195
@@ -208,15 +200,16 @@ static int mana_ib_probe(struct auxiliary_device *adev,
208200deallocate_pool :
209201 dma_pool_destroy (dev -> av_pool );
210202destroy_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 );
213205destroy_eqs :
214- mana_ib_destroy_eqs (dev );
206+ if (mana_ib_is_rnic (dev ))
207+ mana_ib_destroy_eqs (dev );
215208deregister_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 );
219211free_ib_device :
212+ xa_destroy (& dev -> qp_table_wq );
220213 ib_dealloc_device (& dev -> ib_dev );
221214 return ret ;
222215}
@@ -227,25 +220,24 @@ static void mana_ib_remove(struct auxiliary_device *adev)
227220
228221 ib_unregister_device (& dev -> ib_dev );
229222 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+ }
230228 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 );
235229 ib_dealloc_device (& dev -> ib_dev );
236230}
237231
238232static const struct auxiliary_device_id mana_id_table [] = {
239- {
240- .name = "mana.rdma" ,
241- },
233+ { .name = "mana.rdma" , },
234+ { .name = "mana.eth" , },
242235 {},
243236};
244237
245238MODULE_DEVICE_TABLE (auxiliary , mana_id_table );
246239
247240static struct auxiliary_driver mana_driver = {
248- .name = "rdma" ,
249241 .probe = mana_ib_probe ,
250242 .remove = mana_ib_remove ,
251243 .id_table = mana_id_table ,
0 commit comments