From 49e98ff9bfdbe2ddce843808713de383132002e0 Mon Sep 17 00:00:00 2001 From: gordboy <35108003+gordboy@users.noreply.github.com> Date: Wed, 18 Mar 2020 14:28:46 +0000 Subject: [PATCH] Fix for kernel 5.6 --- README.md | 2 +- os_dep/linux/rtw_proc.c | 113 ++++++++++++++++++++++++++++++++++------ 2 files changed, 97 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 3bd56e3..5b1a7ec 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Only supports 8812AU chipset. -Works fine with 5.3.11 kernel. Source now builds with no warnings or errors. +Works fine with 5.6.rc5 kernel. Source now builds with no warnings or errors. Added (cosmeticly edited) original Realtek_Changelog.txt, this README.md and dkms.conf. diff --git a/os_dep/linux/rtw_proc.c b/os_dep/linux/rtw_proc.c index 6c0322a..d6c0823 100644 --- a/os_dep/linux/rtw_proc.c +++ b/os_dep/linux/rtw_proc.c @@ -61,12 +61,19 @@ inline struct proc_dir_entry *rtw_proc_create_dir(const char *name, struct proc_ return entry; } +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)) +inline struct proc_dir_entry *rtw_proc_create_entry(const char *name, struct proc_dir_entry *parent, + const struct proc_ops *pops, void * data) +#else inline struct proc_dir_entry *rtw_proc_create_entry(const char *name, struct proc_dir_entry *parent, const struct file_operations *fops, void * data) +#endif { struct proc_dir_entry *entry; -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)) + entry = proc_create_data(name, S_IFREG | S_IRUGO | S_IWUGO, parent, pops, data); +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26)) entry = proc_create_data(name, S_IFREG | S_IRUGO | S_IWUGO, parent, fops, data); #else entry = create_proc_entry(name, S_IFREG | S_IRUGO | S_IWUGO, parent); @@ -238,7 +245,24 @@ static ssize_t rtw_drv_proc_write(struct file *file, const char __user *buffer, return -EROFS; } -static const struct file_operations rtw_drv_proc_seq_fops = { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)) +static const struct proc_ops rtw_drv_proc_seq_ops = { + .proc_open = rtw_drv_proc_open, + .proc_read = seq_read, + .proc_lseek = seq_lseek, + .proc_release = seq_release, + .proc_write = rtw_drv_proc_write, +}; + +static const struct proc_ops rtw_drv_proc_sseq_ops = { + .proc_open = rtw_drv_proc_open, + .proc_read = seq_read, + .proc_lseek = seq_lseek, + .proc_release = single_release, + .proc_write = rtw_drv_proc_write, +}; +#else +static const struct file_operations rtw_drv_proc_seq_ops = { .owner = THIS_MODULE, .open = rtw_drv_proc_open, .read = seq_read, @@ -247,7 +271,7 @@ static const struct file_operations rtw_drv_proc_seq_fops = { .write = rtw_drv_proc_write, }; -static const struct file_operations rtw_drv_proc_sseq_fops = { +static const struct file_operations rtw_drv_proc_sseq_ops = { .owner = THIS_MODULE, .open = rtw_drv_proc_open, .read = seq_read, @@ -255,6 +279,7 @@ static const struct file_operations rtw_drv_proc_sseq_fops = { .release = single_release, .write = rtw_drv_proc_write, }; +#endif int rtw_drv_proc_init(void) { @@ -276,9 +301,9 @@ int rtw_drv_proc_init(void) for (i = 0; i < drv_proc_hdls_num; i++) { if (drv_proc_hdls[i].type == RTW_PROC_HDL_TYPE_SEQ) - entry = rtw_proc_create_entry(drv_proc_hdls[i].name, rtw_proc, &rtw_drv_proc_seq_fops, (void *)i); + entry = rtw_proc_create_entry(drv_proc_hdls[i].name, rtw_proc, &rtw_drv_proc_seq_ops, (void *)i); else if (drv_proc_hdls[i].type == RTW_PROC_HDL_TYPE_SSEQ) - entry = rtw_proc_create_entry(drv_proc_hdls[i].name, rtw_proc, &rtw_drv_proc_sseq_fops, (void *)i); + entry = rtw_proc_create_entry(drv_proc_hdls[i].name, rtw_proc, &rtw_drv_proc_sseq_ops, (void *)i); else entry = NULL; @@ -4158,7 +4183,24 @@ static ssize_t rtw_adapter_proc_write(struct file *file, const char __user *buff return -EROFS; } -static const struct file_operations rtw_adapter_proc_seq_fops = { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)) +static const struct proc_ops rtw_adapter_proc_seq_ops = { + .proc_open = rtw_adapter_proc_open, + .proc_read = seq_read, + .proc_lseek = seq_lseek, + .proc_release = seq_release, + .proc_write = rtw_adapter_proc_write, +}; + +static const struct proc_ops rtw_adapter_proc_sseq_ops = { + .proc_open = rtw_adapter_proc_open, + .proc_read = seq_read, + .proc_lseek = seq_lseek, + .proc_release = single_release, + .proc_write = rtw_adapter_proc_write, +}; +#else +static const struct file_operations rtw_adapter_proc_seq_ops = { .owner = THIS_MODULE, .open = rtw_adapter_proc_open, .read = seq_read, @@ -4167,7 +4209,7 @@ static const struct file_operations rtw_adapter_proc_seq_fops = { .write = rtw_adapter_proc_write, }; -static const struct file_operations rtw_adapter_proc_sseq_fops = { +static const struct file_operations rtw_adapter_proc_sseq_ops = { .owner = THIS_MODULE, .open = rtw_adapter_proc_open, .read = seq_read, @@ -4175,6 +4217,7 @@ static const struct file_operations rtw_adapter_proc_sseq_fops = { .release = single_release, .write = rtw_adapter_proc_write, }; +#endif int proc_get_odm_adaptivity(struct seq_file *m, void *v) { @@ -4327,7 +4370,24 @@ static ssize_t rtw_odm_proc_write(struct file *file, const char __user *buffer, return -EROFS; } -static const struct file_operations rtw_odm_proc_seq_fops = { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)) +static const struct proc_ops rtw_odm_proc_seq_ops = { + .proc_open = rtw_odm_proc_open, + .proc_read = seq_read, + .proc_lseek = seq_lseek, + .proc_release = seq_release, + .proc_write = rtw_odm_proc_write, +}; + +static const struct proc_ops rtw_odm_proc_sseq_ops = { + .proc_open = rtw_odm_proc_open, + .proc_read = seq_read, + .proc_lseek = seq_lseek, + .proc_release = single_release, + .proc_write = rtw_odm_proc_write, +}; +#else +static const struct file_operations rtw_odm_proc_seq_ops = { .owner = THIS_MODULE, .open = rtw_odm_proc_open, .read = seq_read, @@ -4336,7 +4396,7 @@ static const struct file_operations rtw_odm_proc_seq_fops = { .write = rtw_odm_proc_write, }; -static const struct file_operations rtw_odm_proc_sseq_fops = { +static const struct file_operations rtw_odm_proc_sseq_ops = { .owner = THIS_MODULE, .open = rtw_odm_proc_open, .read = seq_read, @@ -4344,6 +4404,7 @@ static const struct file_operations rtw_odm_proc_sseq_fops = { .release = single_release, .write = rtw_odm_proc_write, }; +#endif struct proc_dir_entry *rtw_odm_proc_init(struct net_device *dev) { @@ -4372,9 +4433,9 @@ struct proc_dir_entry *rtw_odm_proc_init(struct net_device *dev) for (i = 0; i < odm_proc_hdls_num; i++) { if (odm_proc_hdls[i].type == RTW_PROC_HDL_TYPE_SEQ) - entry = rtw_proc_create_entry(odm_proc_hdls[i].name, dir_odm, &rtw_odm_proc_seq_fops, (void *)i); + entry = rtw_proc_create_entry(odm_proc_hdls[i].name, dir_odm, &rtw_odm_proc_seq_ops, (void *)i); else if (odm_proc_hdls[i].type == RTW_PROC_HDL_TYPE_SSEQ) - entry = rtw_proc_create_entry(odm_proc_hdls[i].name, dir_odm, &rtw_odm_proc_sseq_fops, (void *)i); + entry = rtw_proc_create_entry(odm_proc_hdls[i].name, dir_odm, &rtw_odm_proc_sseq_ops, (void *)i); else entry = NULL; @@ -4468,7 +4529,24 @@ static ssize_t rtw_mcc_proc_write(struct file *file, const char __user *buffer, return -EROFS; } -static const struct file_operations rtw_mcc_proc_seq_fops = { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0)) +static const struct proc_ops rtw_mcc_proc_seq_ops = { + .proc_open = rtw_mcc_proc_open, + .proc_read = seq_read, + .proc_lseek = seq_lseek, + .proc_release = seq_release, + .proc_write = rtw_mcc_proc_write, +}; + +static const struct file_operations rtw_mcc_proc_sseq_ops = { + .proc_open = rtw_mcc_proc_open, + .proc_read = seq_read, + .proc_lseek = seq_lseek, + .proc_release = single_release, + .proc_write = rtw_mcc_proc_write, +}; +#else +static const struct file_operations rtw_mcc_proc_seq_ops = { .owner = THIS_MODULE, .open = rtw_mcc_proc_open, .read = seq_read, @@ -4477,7 +4555,7 @@ static const struct file_operations rtw_mcc_proc_seq_fops = { .write = rtw_mcc_proc_write, }; -static const struct file_operations rtw_mcc_proc_sseq_fops = { +static const struct file_operations rtw_mcc_proc_sseq_ops = { .owner = THIS_MODULE, .open = rtw_mcc_proc_open, .read = seq_read, @@ -4485,6 +4563,7 @@ static const struct file_operations rtw_mcc_proc_sseq_fops = { .release = single_release, .write = rtw_mcc_proc_write, }; +#endif struct proc_dir_entry *rtw_mcc_proc_init(struct net_device *dev) { @@ -4513,9 +4592,9 @@ struct proc_dir_entry *rtw_mcc_proc_init(struct net_device *dev) for (i = 0; i < mcc_proc_hdls_num; i++) { if (mcc_proc_hdls[i].type == RTW_PROC_HDL_TYPE_SEQ) - entry = rtw_proc_create_entry(mcc_proc_hdls[i].name, dir_mcc, &rtw_mcc_proc_seq_fops, (void *)i); + entry = rtw_proc_create_entry(mcc_proc_hdls[i].name, dir_mcc, &rtw_mcc_proc_seq_ops, (void *)i); else if (mcc_proc_hdls[i].type == RTW_PROC_HDL_TYPE_SSEQ) - entry = rtw_proc_create_entry(mcc_proc_hdls[i].name, dir_mcc, &rtw_mcc_proc_sseq_fops, (void *)i); + entry = rtw_proc_create_entry(mcc_proc_hdls[i].name, dir_mcc, &rtw_mcc_proc_sseq_ops, (void *)i); else entry = NULL; @@ -4578,9 +4657,9 @@ struct proc_dir_entry *rtw_adapter_proc_init(struct net_device *dev) for (i = 0; i < adapter_proc_hdls_num; i++) { if (adapter_proc_hdls[i].type == RTW_PROC_HDL_TYPE_SEQ) - entry = rtw_proc_create_entry(adapter_proc_hdls[i].name, dir_dev, &rtw_adapter_proc_seq_fops, (void *)i); + entry = rtw_proc_create_entry(adapter_proc_hdls[i].name, dir_dev, &rtw_adapter_proc_seq_ops, (void *)i); else if (adapter_proc_hdls[i].type == RTW_PROC_HDL_TYPE_SSEQ) - entry = rtw_proc_create_entry(adapter_proc_hdls[i].name, dir_dev, &rtw_adapter_proc_sseq_fops, (void *)i); + entry = rtw_proc_create_entry(adapter_proc_hdls[i].name, dir_dev, &rtw_adapter_proc_sseq_ops, (void *)i); else entry = NULL;