aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorBill Paul <wpaul@FreeBSD.org>2003-12-13 09:07:35 +0000
committerBill Paul <wpaul@FreeBSD.org>2003-12-13 09:07:35 +0000
commitfc2ada1918a131fd58aac52ea10c63b565f22e5d (patch)
treefe35e6918639eaa040cfbefbd5fba79e6913aac3 /sys
parent153a70182bd2dfb562dc80896b18faa569817a75 (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/compat/ndis/ntoskrnl_var.h6
-rw-r--r--sys/compat/ndis/subr_ndis.c5
2 files changed, 10 insertions, 1 deletions
diff --git a/sys/compat/ndis/ntoskrnl_var.h b/sys/compat/ndis/ntoskrnl_var.h
index 68c79bd197eb..9447d1b82a7c 100644
--- a/sys/compat/ndis/ntoskrnl_var.h
+++ b/sys/compat/ndis/ntoskrnl_var.h
@@ -35,6 +35,12 @@
#ifndef _NTOSKRNL_VAR_H_
#define _NTOSKRNL_VAR_H_
+/* Note: assumes x86 page size of 4K. */
+#define PAGE_SHIFT 12
+#define SPAN_PAGES(ptr, len) \
+ ((uint32_t)((((uintptr_t)(ptr) & (PAGE_SIZE -1)) + \
+ (len) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
+
typedef uint32_t kspin_lock;
struct slist_entry {
diff --git a/sys/compat/ndis/subr_ndis.c b/sys/compat/ndis/subr_ndis.c
index c6e9a489db8a..0c78da9320af 100644
--- a/sys/compat/ndis/subr_ndis.c
+++ b/sys/compat/ndis/subr_ndis.c
@@ -84,6 +84,7 @@ __FBSDID("$FreeBSD$");
#include <compat/ndis/pe_var.h>
#include <compat/ndis/resource_var.h>
+#include <compat/ndis/ntoskrnl_var.h>
#include <compat/ndis/ndis_var.h>
#include <compat/ndis/cfg_var.h>
#include <dev/if_ndis/if_ndisvar.h>
@@ -1684,7 +1685,9 @@ __stdcall static uint32_t
ndis_numpages(buf)
ndis_buffer *buf;
{
- return(howmany(buf->nb_bytecount, PAGE_SIZE));
+ if (buf->nb_bytecount == 0)
+ return(1);
+ return(SPAN_PAGES(buf->nb_mappedsystemva, buf->nb_bytecount));
}
__stdcall static void