amd64: provide PHYS_IN_DMAP() and VIRT_IN_DMAP()

It is useful for quickly checking an address against the DMAP region.
These definitions exist already on arm64 and riscv.

Reviewed by:	kib, markj
MFC after:	3 days
Sponsored by:	Juniper Networks, Inc.
Sponsored by:	Klara, Inc.
Differential Revision:	https://reviews.freebsd.org/D32962
This commit is contained in:
Mitchell Horne 2021-11-17 11:29:02 -04:00
parent 1adebe3cd6
commit 90d4da6225

View file

@ -239,16 +239,19 @@
* because the result is not actually accessed until later, but the early
* vt fb startup needs to be reworked.
*/
#define PHYS_IN_DMAP(pa) (dmaplimit == 0 || (pa) < dmaplimit)
#define VIRT_IN_DMAP(va) ((va) >= DMAP_MIN_ADDRESS && \
(va) < (DMAP_MIN_ADDRESS + dmaplimit))
#define PMAP_HAS_DMAP 1
#define PHYS_TO_DMAP(x) ({ \
KASSERT(dmaplimit == 0 || (x) < dmaplimit, \
KASSERT(PHYS_IN_DMAP(x), \
("physical address %#jx not covered by the DMAP", \
(uintmax_t)x)); \
(x) | DMAP_MIN_ADDRESS; })
#define DMAP_TO_PHYS(x) ({ \
KASSERT((x) < (DMAP_MIN_ADDRESS + dmaplimit) && \
(x) >= DMAP_MIN_ADDRESS, \
KASSERT(VIRT_IN_DMAP(x), \
("virtual address %#jx not covered by the DMAP", \
(uintmax_t)x)); \
(x) & ~DMAP_MIN_ADDRESS; })