diff --git a/kernel/drivers/ndiswrapper/files/kernel-5.3.patch b/kernel/drivers/ndiswrapper/files/kernel-5.3.patch
new file mode 100644
index 00000000..33e3ed3b
--- /dev/null
+++ b/kernel/drivers/ndiswrapper/files/kernel-5.3.patch
@@ -0,0 +1,69 @@
+diff --git a/ndiswrapper/driver/ntoskernel.c b/ndiswrapper/driver/ntoskernel.c
+index 4fe0dc1..4dd7a89 100644
+--- a/ndiswrapper/driver/ntoskernel.c
++++ b/ndiswrapper/driver/ntoskernel.c
+@@ -2524,7 +2524,11 @@ int ntoskernel_init(void)
+ info->task = NULL;
+ info->count = 0;
+ #ifdef CONFIG_SMP
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5,3,0)
+ cpumask_setall(&info->cpus_allowed);
++#else
++ cpumask_setall(&info->cpus_mask);
++#endif
+ #endif
+ }
+ } while (0);
+diff --git a/ndiswrapper/driver/ntoskernel.h b/ndiswrapper/driver/ntoskernel.h
+index 3c4c6ff..8a71ae3 100644
+--- a/ndiswrapper/driver/ntoskernel.h
++++ b/ndiswrapper/driver/ntoskernel.h
+@@ -107,7 +107,11 @@ static cpumask_t cpumasks[NR_CPUS];
+ #endif /* CONFIG_SMP */
+
+ #ifndef tsk_cpus_allowed
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5,3,0)
+ #define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed)
++#else
++#define tsk_cpus_allowed(tsk) (&(tsk)->cpus_mask)
++#endif
+ #endif
+
+ #ifndef __packed
+@@ -631,7 +635,12 @@ struct irql_info {
+ int count;
+ struct mutex lock;
+ #ifdef CONFIG_SMP
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5,3,0)
+ cpumask_t cpus_allowed;
++#else
++ const cpumask_t *cpus_ptr;
++ cpumask_t cpus_mask;
++#endif
+ #endif
+ struct task_struct *task;
+ };
+@@ -658,7 +667,11 @@ static inline KIRQL raise_irql(KIRQL newirql)
+ /* TODO: is this enough to pin down to current cpu? */
+ #ifdef CONFIG_SMP
+ assert(task_cpu(current) == smp_processor_id());
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5,3,0)
+ cpumask_copy(&info->cpus_allowed, tsk_cpus_allowed(current));
++#else
++ cpumask_copy(&info->cpus_mask, tsk_cpus_allowed(current));
++#endif
+ set_cpus_allowed_ptr(current, cpumask_of(smp_processor_id()));
+ #endif
+ put_cpu_var(irql_info);
+@@ -682,7 +695,11 @@ static inline void lower_irql(KIRQL oldirql)
+ if (--info->count == 0) {
+ info->task = NULL;
+ #ifdef CONFIG_SMP
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5,3,0)
+ set_cpus_allowed_ptr(current, &info->cpus_allowed);
++#else
++ set_cpus_allowed_ptr(current, &info->cpus_mask);
++#endif
+ #endif
+ mutex_unlock(&info->lock);
+ }
diff --git a/kernel/drivers/ndiswrapper/files/kernel-5.4.patch b/kernel/drivers/ndiswrapper/files/kernel-5.4.patch
new file mode 100644
index 00000000..9e3212d8
--- /dev/null
+++ b/kernel/drivers/ndiswrapper/files/kernel-5.4.patch
@@ -0,0 +1,22 @@
+diff -u -r ndiswrapper-1.62/driver/wrapndis.c ndiswrapper-1.62-5.4/driver/wrapndis.c
+--- ndiswrapper-1.62/driver/wrapndis.c 2019-02-11 04:11:14.000000000 +0000
++++ ndiswrapper-1.62-5.4/driver/wrapndis.c 2019-11-26 00:02:39.035464963 +0000
+@@ -457,10 +457,18 @@
+ for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
+ skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
+ sg_element++;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5,4,0)
+ sg_element->length = frag->size;
++#else
++ sg_element->length = skb_frag_size(frag);
++#endif
+ sg_element->address =
+ pci_map_page(wnd->wd->pci.pdev, skb_frag_page(frag),
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5,4,0)
+ frag->page_offset, frag->size,
++#else
++ skb_frag_off(frag), skb_frag_size(frag),
++#endif
+ PCI_DMA_TODEVICE);
+ TRACE3("%llx, %u", sg_element->address, sg_element->length);
+ }
diff --git a/kernel/drivers/ndiswrapper/pspec.xml b/kernel/drivers/ndiswrapper/pspec.xml
index 2fd06b2f..0be562de 100644
--- a/kernel/drivers/ndiswrapper/pspec.xml
+++ b/kernel/drivers/ndiswrapper/pspec.xml
@@ -15,19 +15,18 @@
module-ndiswrapper allows you to use Windows XP drivers for WLAN cards without proper Linux drivers.
http://download.sourceforge.net/ndiswrapper/ndiswrapper-1.62.tar.gz
- kernel-module-headers
+ kernel-module-headers
-
+
+ kernel-5.3.patch
+ kernel-5.4.patch
+
ndiswrapper
- kernel
+ kernel
/lib/modules
@@ -43,6 +42,13 @@
+
+ 2019-12-27
+ 1.62
+ Rebuild
+ Idris Kalp
+ idriskalp@gmail.com
+
2019-06-26
1.62