aboutsummaryrefslogtreecommitdiff
path: root/sys/compat/linuxkpi/common/include/linux/highmem.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/compat/linuxkpi/common/include/linux/highmem.h')
-rw-r--r--sys/compat/linuxkpi/common/include/linux/highmem.h27
1 files changed, 25 insertions, 2 deletions
diff --git a/sys/compat/linuxkpi/common/include/linux/highmem.h b/sys/compat/linuxkpi/common/include/linux/highmem.h
index 58a9cdcdf60f..b704e77b6c2f 100644
--- a/sys/compat/linuxkpi/common/include/linux/highmem.h
+++ b/sys/compat/linuxkpi/common/include/linux/highmem.h
@@ -45,6 +45,7 @@
#include <linux/mm.h>
#include <linux/page.h>
+#include <linux/hardirq.h>
#define PageHighMem(p) (0)
@@ -61,7 +62,7 @@ kmap(struct page *page)
struct sf_buf *sf;
if (PMAP_HAS_DMAP) {
- return ((void *)PHYS_TO_DMAP(page_to_phys(page)));
+ return (PHYS_TO_DMAP(page_to_phys(page)));
} else {
sched_pin();
sf = sf_buf_alloc(page, SFB_NOWAIT | SFB_CPUPRIVATE);
@@ -69,7 +70,7 @@ kmap(struct page *page)
sched_unpin();
return (NULL);
}
- return ((void *)sf_buf_kva(sf));
+ return (sf_buf_kva(sf));
}
}
@@ -99,6 +100,19 @@ kmap_local_page(struct page *page)
}
static inline void *
+kmap_local_folio(struct folio *folio, size_t offset)
+{
+ struct page *page;
+ char *vaddr;
+
+ page = &folio->page;
+ vaddr = kmap_local_page(page);
+ vaddr += offset;
+
+ return (vaddr);
+}
+
+static inline void *
kmap_local_page_prot(struct page *page, pgprot_t prot)
{
@@ -167,4 +181,13 @@ memcpy_to_page(struct page *page, size_t offset, const char *from, size_t len)
kunmap_local(to);
}
+static inline void
+memcpy_to_folio(struct folio *folio, size_t offset, const char *from, size_t len)
+{
+ struct page *page;
+
+ page = &folio->page;
+ memcpy_to_page(page, offset, from, len);
+}
+
#endif /* _LINUXKPI_LINUX_HIGHMEM_H_ */