Page MenuHomeFreeBSD

D41028.id124688.diff
No OneTemporary

D41028.id124688.diff

diff --git a/sys/kern/subr_bus_dma.c b/sys/kern/subr_bus_dma.c
--- a/sys/kern/subr_bus_dma.c
+++ b/sys/kern/subr_bus_dma.c
@@ -583,6 +583,10 @@
error = _bus_dmamap_load_mbuf_sg(dmat, map, mem->u.md_mbuf,
NULL, &nsegs, flags);
break;
+ case MEMDESC_VMPAGES:
+ error = _bus_dmamap_load_ma(dmat, map, mem->u.md_ma,
+ mem->md_len, mem->md_offset, flags, NULL, &nsegs);
+ break;
}
nsegs++;
diff --git a/sys/sys/memdesc.h b/sys/sys/memdesc.h
--- a/sys/sys/memdesc.h
+++ b/sys/sys/memdesc.h
@@ -35,6 +35,7 @@
struct bus_dma_segment;
struct uio;
struct mbuf;
+struct vm_page;
union ccb;
/*
@@ -49,11 +50,15 @@
struct bio *md_bio;
struct uio *md_uio;
struct mbuf *md_mbuf;
+ struct vm_page **md_ma;
} u;
union { /* type specific data. */
- size_t md_len; /* VADDR, PADDR */
+ size_t md_len; /* VADDR, PADDR, VMPAGES */
int md_nseg; /* VLIST, PLIST */
};
+ union {
+ uint32_t md_offset; /* VMPAGES */
+ };
uint32_t md_type; /* Type of memory. */
};
@@ -64,6 +69,7 @@
#define MEMDESC_BIO 5 /* Pointer to a bio (block io). */
#define MEMDESC_UIO 6 /* Pointer to a uio (any io). */
#define MEMDESC_MBUF 7 /* Pointer to a mbuf (network io). */
+#define MEMDESC_VMPAGES 8 /* Pointer to array of VM pages. */
static inline struct memdesc
memdesc_vaddr(void *vaddr, size_t len)
@@ -146,6 +152,19 @@
return (mem);
}
+static inline struct memdesc
+memdesc_vmpages(struct vm_page **ma, size_t len, u_int ma_offset)
+{
+ struct memdesc mem;
+
+ mem.u.md_ma = ma;
+ mem.md_len = len;
+ mem.md_type = MEMDESC_VMPAGES;
+ mem.md_offset = ma_offset;
+
+ return (mem);
+}
+
struct memdesc memdesc_ccb(union ccb *ccb);
#endif /* _SYS_MEMDESC_H_ */

File Metadata

Mime Type
text/plain
Expires
Sat, Aug 8, 3:41 PM (18 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
36238562
Default Alt Text
D41028.id124688.diff (1 KB)

Event Timeline