struct aq_rss_parameters *rss_params);
 
        int (*hw_get_regs)(struct aq_hw_s *self,
-                          struct aq_hw_caps_s *aq_hw_caps, u32 *regs_buff);
+                          const struct aq_hw_caps_s *aq_hw_caps,
+                          u32 *regs_buff);
 
        int (*hw_update_stats)(struct aq_hw_s *self);
 
 
 MODULE_AUTHOR(AQ_CFG_DRV_AUTHOR);
 MODULE_DESCRIPTION(AQ_CFG_DRV_DESC);
 
-static struct aq_hw_ops *aq_pci_probe_get_hw_ops_by_id(struct pci_dev *pdev)
+static const struct aq_hw_ops *aq_pci_probe_get_hw_ops_by_id(struct pci_dev *pdev)
 {
-       struct aq_hw_ops *ops = NULL;
+       const struct aq_hw_ops *ops = NULL;
 
        ops = hw_atl_a0_get_ops_by_id(pdev);
        if (!ops)
 static int aq_pci_probe(struct pci_dev *pdev,
                        const struct pci_device_id *pci_id)
 {
-       struct aq_hw_ops *aq_hw_ops = NULL;
+       const struct aq_hw_ops *aq_hw_ops = NULL;
        struct aq_pci_func_s *aq_pci_func = NULL;
        int err = 0;
 
 
 
 int aq_nic_ndev_init(struct aq_nic_s *self)
 {
-       struct aq_hw_caps_s *aq_hw_caps = self->aq_nic_cfg.aq_hw_caps;
+       const struct aq_hw_caps_s *aq_hw_caps = self->aq_nic_cfg.aq_hw_caps;
        struct aq_nic_cfg_s *aq_nic_cfg = &self->aq_nic_cfg;
 
        self->ndev->hw_features |= aq_hw_caps->hw_features;
 
 #define AQ_NIC_RATE_100M       BIT(5)
 
 struct aq_nic_cfg_s {
-       struct aq_hw_caps_s *aq_hw_caps;
+       const struct aq_hw_caps_s *aq_hw_caps;
        u64 hw_features;
        u32 rxds;               /* rx ring size, descriptors # */
        u32 txds;               /* tx ring size, descriptors # */
 
        struct aq_hw_caps_s aq_hw_caps;
 };
 
-struct aq_pci_func_s *aq_pci_func_alloc(struct aq_hw_ops *aq_hw_ops,
+struct aq_pci_func_s *aq_pci_func_alloc(const struct aq_hw_ops *aq_hw_ops,
                                        struct pci_dev *pdev,
                                        const struct net_device_ops *ndev_ops,
                                        const struct ethtool_ops *eth_ops)
 
 #include "aq_common.h"
 #include "aq_nic.h"
 
-struct aq_pci_func_s *aq_pci_func_alloc(struct aq_hw_ops *hw_ops,
+struct aq_pci_func_s *aq_pci_func_alloc(const struct aq_hw_ops *hw_ops,
                                        struct pci_dev *pdev,
                                        const struct net_device_ops *ndev_ops,
                                        const struct ethtool_ops *eth_ops);
 
 #include <linux/netdevice.h>
 
 struct aq_vec_s {
-       struct aq_hw_ops *aq_hw_ops;
+       const struct aq_hw_ops *aq_hw_ops;
        struct aq_hw_s *aq_hw;
        struct aq_nic_s *aq_nic;
        unsigned int tx_rings;
        return self;
 }
 
-int aq_vec_init(struct aq_vec_s *self, struct aq_hw_ops *aq_hw_ops,
+int aq_vec_init(struct aq_vec_s *self, const struct aq_hw_ops *aq_hw_ops,
                struct aq_hw_s *aq_hw)
 {
        struct aq_ring_s *ring = NULL;
 
 irqreturn_t aq_vec_isr_legacy(int irq, void *private);
 struct aq_vec_s *aq_vec_alloc(struct aq_nic_s *aq_nic, unsigned int idx,
                              struct aq_nic_cfg_s *aq_nic_cfg);
-int aq_vec_init(struct aq_vec_s *self, struct aq_hw_ops *aq_hw_ops,
+int aq_vec_init(struct aq_vec_s *self, const struct aq_hw_ops *aq_hw_ops,
                struct aq_hw_s *aq_hw);
 void aq_vec_deinit(struct aq_vec_s *self);
 void aq_vec_free(struct aq_vec_s *self);
 
        return err;
 }
 
-static struct aq_hw_ops hw_atl_ops_ = {
+static const struct aq_hw_ops hw_atl_ops_ = {
        .create               = hw_atl_a0_create,
        .destroy              = hw_atl_a0_destroy,
        .get_hw_caps          = hw_atl_a0_get_hw_caps,
        .hw_get_fw_version           = hw_atl_utils_get_fw_version,
 };
 
-struct aq_hw_ops *hw_atl_a0_get_ops_by_id(struct pci_dev *pdev)
+const struct aq_hw_ops *hw_atl_a0_get_ops_by_id(struct pci_dev *pdev)
 {
        bool is_vid_ok = (pdev->vendor == PCI_VENDOR_ID_AQUANTIA);
        bool is_did_ok = ((pdev->device == HW_ATL_DEVICE_ID_0001) ||
 
 
 #endif
 
-struct aq_hw_ops *hw_atl_a0_get_ops_by_id(struct pci_dev *pdev);
+const struct aq_hw_ops *hw_atl_a0_get_ops_by_id(struct pci_dev *pdev);
 
 #endif /* HW_ATL_A0_H */
 
        return err;
 }
 
-static struct aq_hw_ops hw_atl_ops_ = {
+static const struct aq_hw_ops hw_atl_ops_ = {
        .create               = hw_atl_b0_create,
        .destroy              = hw_atl_b0_destroy,
        .get_hw_caps          = hw_atl_b0_get_hw_caps,
        .hw_get_fw_version           = hw_atl_utils_get_fw_version,
 };
 
-struct aq_hw_ops *hw_atl_b0_get_ops_by_id(struct pci_dev *pdev)
+const struct aq_hw_ops *hw_atl_b0_get_ops_by_id(struct pci_dev *pdev)
 {
        bool is_vid_ok = (pdev->vendor == PCI_VENDOR_ID_AQUANTIA);
        bool is_did_ok = ((pdev->device == HW_ATL_DEVICE_ID_0001) ||
 
 
 #endif
 
-struct aq_hw_ops *hw_atl_b0_get_ops_by_id(struct pci_dev *pdev);
+const struct aq_hw_ops *hw_atl_b0_get_ops_by_id(struct pci_dev *pdev);
 
 #endif /* HW_ATL_B0_H */
 
 }
 
 static int hw_atl_utils_init_ucp(struct aq_hw_s *self,
-                                struct aq_hw_caps_s *aq_hw_caps)
+                                const struct aq_hw_caps_s *aq_hw_caps)
 {
        int err = 0;
 
 };
 
 int hw_atl_utils_hw_get_regs(struct aq_hw_s *self,
-                            struct aq_hw_caps_s *aq_hw_caps,
+                            const struct aq_hw_caps_s *aq_hw_caps,
                             u32 *regs_buff)
 {
        unsigned int i = 0U;
 
 unsigned int hw_atl_utils_mbps_2_speed_index(unsigned int mbps);
 
 int hw_atl_utils_hw_get_regs(struct aq_hw_s *self,
-                            struct aq_hw_caps_s *aq_hw_caps,
+                            const struct aq_hw_caps_s *aq_hw_caps,
                             u32 *regs_buff);
 
 int hw_atl_utils_hw_set_power(struct aq_hw_s *self,