kfree(buf);
        return ret;
 }
+
+const struct il_debugfs_ops il3945_debugfs_ops = {
+       .rx_stats_read = il3945_ucode_rx_stats_read,
+       .tx_stats_read = il3945_ucode_tx_stats_read,
+       .general_stats_read = il3945_ucode_general_stats_read,
+};
 
        D_INFO("*** LOAD DRIVER ***\n");
        il->cfg = cfg;
        il->ops = &il3945_ops;
+#ifdef CONFIG_IWLEGACY_DEBUGFS
+       il->debugfs_ops = &il3945_debugfs_ops;
+#endif
        il->pci_dev = pdev;
        il->inta_mask = CSR_INI_SET_MASK;
 
 
        },
        .send_tx_power = il3945_send_tx_power,
        .is_valid_rtc_data_addr = il3945_hw_valid_rtc_data_addr,
-
-#ifdef CONFIG_IWLEGACY_DEBUGFS
-       .debugfs_ops = {
-                       .rx_stats_read = il3945_ucode_rx_stats_read,
-                       .tx_stats_read = il3945_ucode_tx_stats_read,
-                       .general_stats_read = il3945_ucode_general_stats_read,
-                       },
-#endif
 };
 
 static const struct il_legacy_ops il3945_legacy_ops = {
 
 } __packed;
 
 #ifdef CONFIG_IWLEGACY_DEBUGFS
-ssize_t il3945_ucode_rx_stats_read(struct file *file, char __user *user_buf,
-                                  size_t count, loff_t *ppos);
-ssize_t il3945_ucode_tx_stats_read(struct file *file, char __user *user_buf,
-                                  size_t count, loff_t *ppos);
-ssize_t il3945_ucode_general_stats_read(struct file *file,
-                                       char __user *user_buf, size_t count,
-                                       loff_t *ppos);
+extern const struct il_debugfs_ops il3945_debugfs_ops;
 #endif
 
 #endif
 
        kfree(buf);
        return ret;
 }
+
+const struct il_debugfs_ops il4965_debugfs_ops = {
+       .rx_stats_read = il4965_ucode_rx_stats_read,
+       .tx_stats_read = il4965_ucode_tx_stats_read,
+       .general_stats_read = il4965_ucode_general_stats_read,
+};
 
        D_INFO("*** LOAD DRIVER ***\n");
        il->cfg = cfg;
        il->ops = &il4965_ops;
+#ifdef CONFIG_IWLEGACY_DEBUGFS
+       il->debugfs_ops = &il4965_debugfs_ops;
+#endif
        il->pci_dev = pdev;
        il->inta_mask = CSR_INI_SET_MASK;
 
 
        .temp_ops = {
                     .temperature = il4965_temperature_calib,
                     },
-#ifdef CONFIG_IWLEGACY_DEBUGFS
-       .debugfs_ops = {
-                       .rx_stats_read = il4965_ucode_rx_stats_read,
-                       .tx_stats_read = il4965_ucode_tx_stats_read,
-                       .general_stats_read = il4965_ucode_general_stats_read,
-                       },
-#endif
 };
 
 static const struct il_legacy_ops il4965_legacy_ops = {
 
 
 /* Debug */
 #ifdef CONFIG_IWLEGACY_DEBUGFS
-ssize_t il4965_ucode_rx_stats_read(struct file *file, char __user *user_buf,
-                                  size_t count, loff_t *ppos);
-ssize_t il4965_ucode_tx_stats_read(struct file *file, char __user *user_buf,
-                                  size_t count, loff_t *ppos);
-ssize_t il4965_ucode_general_stats_read(struct file *file,
-                                       char __user *user_buf, size_t count,
-                                       loff_t *ppos);
+extern const struct il_debugfs_ops il4965_debugfs_ops;
 #endif
 
 /****************************/
 
 };
 
 struct il_priv {
-
-       /* ieee device used by generic ieee processing code */
        struct ieee80211_hw *hw;
        struct ieee80211_channel *ieee_channels;
        struct ieee80211_rate *ieee_rates;
+
        struct il_cfg *cfg;
        const struct il_ops *ops;
+#ifdef CONFIG_IWLEGACY_DEBUGFS
+       const struct il_debugfs_ops *debugfs_ops;
+#endif
 
        /* temporary frame storage list */
        struct list_head free_frames;
        /* temperature */
        struct il_temp_ops temp_ops;
 
-#ifdef CONFIG_IWLEGACY_DEBUGFS
-       struct il_debugfs_ops debugfs_ops;
-#endif
-
 };
 
 struct il_led_ops {
 
                             size_t count, loff_t *ppos)
 {
        struct il_priv *il = file->private_data;
-       return il->ops->lib->debugfs_ops.rx_stats_read(file, user_buf, count, ppos);
+
+       return il->debugfs_ops->rx_stats_read(file, user_buf, count, ppos);
 }
 
 static ssize_t
                             size_t count, loff_t *ppos)
 {
        struct il_priv *il = file->private_data;
-       return il->ops->lib->debugfs_ops.tx_stats_read(file, user_buf, count, ppos);
+
+       return il->debugfs_ops->tx_stats_read(file, user_buf, count, ppos);
 }
 
 static ssize_t
                                  size_t count, loff_t *ppos)
 {
        struct il_priv *il = file->private_data;
-       return il->ops->lib->debugfs_ops.general_stats_read(file, user_buf, count, ppos);
+
+       return il->debugfs_ops->general_stats_read(file, user_buf, count, ppos);
 }
 
 static ssize_t