Skip to content

Commit 8fcb98f

Browse files
caildavem330
authored andcommitted
net: aquantia: Convert hw and caps structures to const static pointers
This removes unnecessary structure copying, and prepares the driver for separate firmware ops table introduction. We also remove extra copy of capabilities structure (which is const actually) and also replace it with a const pointer in aq_nic_cfg. Signed-off-by: Igor Russkikh <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 4948293 commit 8fcb98f

File tree

2 files changed

+50
-50
lines changed

2 files changed

+50
-50
lines changed

drivers/net/ethernet/aquantia/atlantic/aq_nic.c

Lines changed: 49 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,6 @@ static void aq_nic_cfg_init_defaults(struct aq_nic_s *self)
6666
{
6767
struct aq_nic_cfg_s *cfg = &self->aq_nic_cfg;
6868

69-
cfg->aq_hw_caps = &self->aq_hw_caps;
70-
7169
cfg->vecs = AQ_CFG_VECS_DEF;
7270
cfg->tcs = AQ_CFG_TCS_DEF;
7371

@@ -123,20 +121,20 @@ int aq_nic_cfg_start(struct aq_nic_s *self)
123121
cfg->irq_type = aq_pci_func_get_irq_type(self->aq_pci_func);
124122

125123
if ((cfg->irq_type == AQ_HW_IRQ_LEGACY) ||
126-
(self->aq_hw_caps.vecs == 1U) ||
124+
(cfg->aq_hw_caps->vecs == 1U) ||
127125
(cfg->vecs == 1U)) {
128126
cfg->is_rss = 0U;
129127
cfg->vecs = 1U;
130128
}
131129

132-
cfg->link_speed_msk &= self->aq_hw_caps.link_speed_msk;
133-
cfg->hw_features = self->aq_hw_caps.hw_features;
130+
cfg->link_speed_msk &= cfg->aq_hw_caps->link_speed_msk;
131+
cfg->hw_features = cfg->aq_hw_caps->hw_features;
134132
return 0;
135133
}
136134

137135
static int aq_nic_update_link_status(struct aq_nic_s *self)
138136
{
139-
int err = self->aq_hw_ops.hw_get_link_status(self->aq_hw);
137+
int err = self->aq_hw_ops->hw_get_link_status(self->aq_hw);
140138

141139
if (err)
142140
return err;
@@ -178,8 +176,8 @@ static void aq_nic_service_timer_cb(struct timer_list *t)
178176
if (err)
179177
goto err_exit;
180178

181-
if (self->aq_hw_ops.hw_update_stats)
182-
self->aq_hw_ops.hw_update_stats(self->aq_hw);
179+
if (self->aq_hw_ops->hw_update_stats)
180+
self->aq_hw_ops->hw_update_stats(self->aq_hw);
183181

184182
aq_nic_update_ndev_stats(self);
185183

@@ -230,12 +228,14 @@ struct aq_nic_s *aq_nic_alloc_cold(struct pci_dev *pdev,
230228

231229
self->aq_pci_func = aq_pci_func;
232230

233-
self->aq_hw_ops = *aq_hw_ops;
234-
self->aq_hw_caps = *aq_hw_caps;
231+
self->aq_hw_ops = aq_hw_ops;
232+
self->aq_nic_cfg.aq_hw_caps = aq_hw_caps;
233+
self->aq_hw->aq_nic_cfg = &self->aq_nic_cfg;
235234
self->port = (u8)port;
236235

237-
self->aq_hw = self->aq_hw_ops.create(aq_pci_func, self->port);
238-
self->aq_hw->aq_nic_cfg = &self->aq_nic_cfg;
236+
self->aq_hw = self->aq_hw_ops->create(aq_pci_func, self->port);
237+
if (err < 0)
238+
goto err_exit;
239239

240240
aq_nic_cfg_init_defaults(self);
241241

@@ -255,7 +255,7 @@ int aq_nic_ndev_register(struct aq_nic_s *self)
255255
err = -EINVAL;
256256
goto err_exit;
257257
}
258-
err = self->aq_hw_ops.hw_get_mac_permanent(self->aq_hw,
258+
err = self->aq_hw_ops->hw_get_mac_permanent(self->aq_hw,
259259
self->ndev->dev_addr);
260260
if (err < 0)
261261
goto err_exit;
@@ -289,7 +289,7 @@ int aq_nic_ndev_init(struct aq_nic_s *self)
289289
self->ndev->features = aq_hw_caps->hw_features;
290290
self->ndev->priv_flags = aq_hw_caps->hw_priv_flags;
291291
self->ndev->mtu = aq_nic_cfg->mtu - ETH_HLEN;
292-
self->ndev->max_mtu = self->aq_hw_caps.mtu - ETH_FCS_LEN - ETH_HLEN;
292+
self->ndev->max_mtu = aq_hw_caps->mtu - ETH_FCS_LEN - ETH_HLEN;
293293

294294
return 0;
295295
}
@@ -303,7 +303,7 @@ void aq_nic_ndev_free(struct aq_nic_s *self)
303303
unregister_netdev(self->ndev);
304304

305305
if (self->aq_hw)
306-
self->aq_hw_ops.destroy(self->aq_hw);
306+
self->aq_hw_ops->destroy(self->aq_hw);
307307

308308
free_netdev(self->ndev);
309309

@@ -365,18 +365,18 @@ int aq_nic_init(struct aq_nic_s *self)
365365
unsigned int i = 0U;
366366

367367
self->power_state = AQ_HW_POWER_STATE_D0;
368-
err = self->aq_hw_ops.hw_reset(self->aq_hw);
368+
err = self->aq_hw_ops->hw_reset(self->aq_hw);
369369
if (err < 0)
370370
goto err_exit;
371371

372-
err = self->aq_hw_ops.hw_init(self->aq_hw,
372+
err = self->aq_hw_ops->hw_init(self->aq_hw,
373373
aq_nic_get_ndev(self)->dev_addr);
374374
if (err < 0)
375375
goto err_exit;
376376

377377
for (i = 0U, aq_vec = self->aq_vec[0];
378378
self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i])
379-
aq_vec_init(aq_vec, &self->aq_hw_ops, self->aq_hw);
379+
aq_vec_init(aq_vec, self->aq_hw_ops, self->aq_hw);
380380

381381
err_exit:
382382
return err;
@@ -388,13 +388,13 @@ int aq_nic_start(struct aq_nic_s *self)
388388
int err = 0;
389389
unsigned int i = 0U;
390390

391-
err = self->aq_hw_ops.hw_multicast_list_set(self->aq_hw,
391+
err = self->aq_hw_ops->hw_multicast_list_set(self->aq_hw,
392392
self->mc_list.ar,
393393
self->mc_list.count);
394394
if (err < 0)
395395
goto err_exit;
396396

397-
err = self->aq_hw_ops.hw_packet_filter_set(self->aq_hw,
397+
err = self->aq_hw_ops->hw_packet_filter_set(self->aq_hw,
398398
self->packet_filter);
399399
if (err < 0)
400400
goto err_exit;
@@ -406,7 +406,7 @@ int aq_nic_start(struct aq_nic_s *self)
406406
goto err_exit;
407407
}
408408

409-
err = self->aq_hw_ops.hw_start(self->aq_hw);
409+
err = self->aq_hw_ops->hw_start(self->aq_hw);
410410
if (err < 0)
411411
goto err_exit;
412412

@@ -431,7 +431,7 @@ int aq_nic_start(struct aq_nic_s *self)
431431
goto err_exit;
432432
}
433433

434-
err = self->aq_hw_ops.hw_irq_enable(self->aq_hw,
434+
err = self->aq_hw_ops->hw_irq_enable(self->aq_hw,
435435
AQ_CFG_IRQ_MASK);
436436
if (err < 0)
437437
goto err_exit;
@@ -616,7 +616,7 @@ int aq_nic_xmit(struct aq_nic_s *self, struct sk_buff *skb)
616616
frags = aq_nic_map_skb(self, skb, ring);
617617

618618
if (likely(frags)) {
619-
err = self->aq_hw_ops.hw_ring_tx_xmit(self->aq_hw,
619+
err = self->aq_hw_ops->hw_ring_tx_xmit(self->aq_hw,
620620
ring,
621621
frags);
622622
if (err >= 0) {
@@ -633,14 +633,14 @@ int aq_nic_xmit(struct aq_nic_s *self, struct sk_buff *skb)
633633

634634
int aq_nic_update_interrupt_moderation_settings(struct aq_nic_s *self)
635635
{
636-
return self->aq_hw_ops.hw_interrupt_moderation_set(self->aq_hw);
636+
return self->aq_hw_ops->hw_interrupt_moderation_set(self->aq_hw);
637637
}
638638

639639
int aq_nic_set_packet_filter(struct aq_nic_s *self, unsigned int flags)
640640
{
641641
int err = 0;
642642

643-
err = self->aq_hw_ops.hw_packet_filter_set(self->aq_hw, flags);
643+
err = self->aq_hw_ops->hw_packet_filter_set(self->aq_hw, flags);
644644
if (err < 0)
645645
goto err_exit;
646646

@@ -672,11 +672,11 @@ int aq_nic_set_multicast_list(struct aq_nic_s *self, struct net_device *ndev)
672672
* multicast mask
673673
*/
674674
self->packet_filter |= IFF_ALLMULTI;
675-
self->aq_hw->aq_nic_cfg->mc_list_count = 0;
676-
return self->aq_hw_ops.hw_packet_filter_set(self->aq_hw,
675+
self->aq_nic_cfg.mc_list_count = 0;
676+
return self->aq_hw_ops->hw_packet_filter_set(self->aq_hw,
677677
self->packet_filter);
678678
} else {
679-
return self->aq_hw_ops.hw_multicast_list_set(self->aq_hw,
679+
return self->aq_hw_ops->hw_multicast_list_set(self->aq_hw,
680680
self->mc_list.ar,
681681
self->mc_list.count);
682682
}
@@ -691,7 +691,7 @@ int aq_nic_set_mtu(struct aq_nic_s *self, int new_mtu)
691691

692692
int aq_nic_set_mac(struct aq_nic_s *self, struct net_device *ndev)
693693
{
694-
return self->aq_hw_ops.hw_set_mac_address(self->aq_hw, ndev->dev_addr);
694+
return self->aq_hw_ops->hw_set_mac_address(self->aq_hw, ndev->dev_addr);
695695
}
696696

697697
unsigned int aq_nic_get_link_speed(struct aq_nic_s *self)
@@ -706,8 +706,9 @@ int aq_nic_get_regs(struct aq_nic_s *self, struct ethtool_regs *regs, void *p)
706706

707707
regs->version = 1;
708708

709-
err = self->aq_hw_ops.hw_get_regs(self->aq_hw,
710-
&self->aq_hw_caps, regs_buff);
709+
err = self->aq_hw_ops->hw_get_regs(self->aq_hw,
710+
self->aq_nic_cfg.aq_hw_caps,
711+
regs_buff);
711712
if (err < 0)
712713
goto err_exit;
713714

@@ -717,15 +718,15 @@ int aq_nic_get_regs(struct aq_nic_s *self, struct ethtool_regs *regs, void *p)
717718

718719
int aq_nic_get_regs_count(struct aq_nic_s *self)
719720
{
720-
return self->aq_hw_caps.mac_regs_count;
721+
return self->aq_nic_cfg.aq_hw_caps->mac_regs_count;
721722
}
722723

723724
void aq_nic_get_stats(struct aq_nic_s *self, u64 *data)
724725
{
725726
unsigned int i = 0U;
726727
unsigned int count = 0U;
727728
struct aq_vec_s *aq_vec = NULL;
728-
struct aq_stats_s *stats = self->aq_hw_ops.hw_get_hw_stats(self->aq_hw);
729+
struct aq_stats_s *stats = self->aq_hw_ops->hw_get_hw_stats(self->aq_hw);
729730

730731
if (!stats)
731732
goto err_exit;
@@ -770,7 +771,7 @@ err_exit:;
770771
static void aq_nic_update_ndev_stats(struct aq_nic_s *self)
771772
{
772773
struct net_device *ndev = self->ndev;
773-
struct aq_stats_s *stats = self->aq_hw_ops.hw_get_hw_stats(self->aq_hw);
774+
struct aq_stats_s *stats = self->aq_hw_ops->hw_get_hw_stats(self->aq_hw);
774775

775776
ndev->stats.rx_packets = stats->uprc + stats->mprc + stats->bprc;
776777
ndev->stats.rx_bytes = stats->ubrc + stats->mbrc + stats->bbrc;
@@ -791,27 +792,27 @@ void aq_nic_get_link_ksettings(struct aq_nic_s *self,
791792

792793
ethtool_link_ksettings_zero_link_mode(cmd, supported);
793794

794-
if (self->aq_hw_caps.link_speed_msk & AQ_NIC_RATE_10G)
795+
if (self->aq_nic_cfg.aq_hw_caps->link_speed_msk & AQ_NIC_RATE_10G)
795796
ethtool_link_ksettings_add_link_mode(cmd, supported,
796797
10000baseT_Full);
797798

798-
if (self->aq_hw_caps.link_speed_msk & AQ_NIC_RATE_5G)
799+
if (self->aq_nic_cfg.aq_hw_caps->link_speed_msk & AQ_NIC_RATE_5G)
799800
ethtool_link_ksettings_add_link_mode(cmd, supported,
800801
5000baseT_Full);
801802

802-
if (self->aq_hw_caps.link_speed_msk & AQ_NIC_RATE_2GS)
803+
if (self->aq_nic_cfg.aq_hw_caps->link_speed_msk & AQ_NIC_RATE_2GS)
803804
ethtool_link_ksettings_add_link_mode(cmd, supported,
804805
2500baseT_Full);
805806

806-
if (self->aq_hw_caps.link_speed_msk & AQ_NIC_RATE_1G)
807+
if (self->aq_nic_cfg.aq_hw_caps->link_speed_msk & AQ_NIC_RATE_1G)
807808
ethtool_link_ksettings_add_link_mode(cmd, supported,
808809
1000baseT_Full);
809810

810-
if (self->aq_hw_caps.link_speed_msk & AQ_NIC_RATE_100M)
811+
if (self->aq_nic_cfg.aq_hw_caps->link_speed_msk & AQ_NIC_RATE_100M)
811812
ethtool_link_ksettings_add_link_mode(cmd, supported,
812813
100baseT_Full);
813814

814-
if (self->aq_hw_caps.flow_control)
815+
if (self->aq_nic_cfg.aq_hw_caps->flow_control)
815816
ethtool_link_ksettings_add_link_mode(cmd, supported,
816817
Pause);
817818

@@ -858,7 +859,7 @@ int aq_nic_set_link_ksettings(struct aq_nic_s *self,
858859
int err = 0;
859860

860861
if (cmd->base.autoneg == AUTONEG_ENABLE) {
861-
rate = self->aq_hw_caps.link_speed_msk;
862+
rate = self->aq_nic_cfg.aq_hw_caps->link_speed_msk;
862863
self->aq_nic_cfg.is_autoneg = true;
863864
} else {
864865
speed = cmd->base.speed;
@@ -889,15 +890,15 @@ int aq_nic_set_link_ksettings(struct aq_nic_s *self,
889890
goto err_exit;
890891
break;
891892
}
892-
if (!(self->aq_hw_caps.link_speed_msk & rate)) {
893+
if (!(self->aq_nic_cfg.aq_hw_caps->link_speed_msk & rate)) {
893894
err = -1;
894895
goto err_exit;
895896
}
896897

897898
self->aq_nic_cfg.is_autoneg = false;
898899
}
899900

900-
err = self->aq_hw_ops.hw_set_link_speed(self->aq_hw, rate);
901+
err = self->aq_hw_ops->hw_set_link_speed(self->aq_hw, rate);
901902
if (err < 0)
902903
goto err_exit;
903904

@@ -916,7 +917,7 @@ u32 aq_nic_get_fw_version(struct aq_nic_s *self)
916917
{
917918
u32 fw_version = 0U;
918919

919-
self->aq_hw_ops.hw_get_fw_version(self->aq_hw, &fw_version);
920+
self->aq_hw_ops->hw_get_fw_version(self->aq_hw, &fw_version);
920921

921922
return fw_version;
922923
}
@@ -931,7 +932,7 @@ int aq_nic_stop(struct aq_nic_s *self)
931932

932933
del_timer_sync(&self->service_timer);
933934

934-
self->aq_hw_ops.hw_irq_disable(self->aq_hw, AQ_CFG_IRQ_MASK);
935+
self->aq_hw_ops->hw_irq_disable(self->aq_hw, AQ_CFG_IRQ_MASK);
935936

936937
if (self->aq_nic_cfg.is_polling)
937938
del_timer_sync(&self->polling_timer);
@@ -942,7 +943,7 @@ int aq_nic_stop(struct aq_nic_s *self)
942943
self->aq_vecs > i; ++i, aq_vec = self->aq_vec[i])
943944
aq_vec_stop(aq_vec);
944945

945-
return self->aq_hw_ops.hw_stop(self->aq_hw);
946+
return self->aq_hw_ops->hw_stop(self->aq_hw);
946947
}
947948

948949
void aq_nic_deinit(struct aq_nic_s *self)
@@ -958,9 +959,9 @@ void aq_nic_deinit(struct aq_nic_s *self)
958959
aq_vec_deinit(aq_vec);
959960

960961
if (self->power_state == AQ_HW_POWER_STATE_D0) {
961-
(void)self->aq_hw_ops.hw_deinit(self->aq_hw);
962+
(void)self->aq_hw_ops->hw_deinit(self->aq_hw);
962963
} else {
963-
(void)self->aq_hw_ops.hw_set_power(self->aq_hw,
964+
(void)self->aq_hw_ops->hw_set_power(self->aq_hw,
964965
self->power_state);
965966
}
966967

drivers/net/ethernet/aquantia/atlantic/aq_nic.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,7 @@ struct aq_nic_s {
6969
unsigned int packet_filter;
7070
unsigned int power_state;
7171
u8 port;
72-
struct aq_hw_ops aq_hw_ops;
73-
struct aq_hw_caps_s aq_hw_caps;
72+
const struct aq_hw_ops *aq_hw_ops;
7473
struct aq_nic_cfg_s aq_nic_cfg;
7574
struct timer_list service_timer;
7675
struct timer_list polling_timer;

0 commit comments

Comments
 (0)