BUS_MAP_RESOURCE(9)
π BUS_MAP_RESOURCE(9) β from the Kernel Developer's Manual, but make it group-chat π
okay bestie, welcome to the BUS_MAP_RESOURCE(9) page from the Kernel Developer's Manual β kernel-dev brain, group-chat delivery, no cap β¨
πΈ NAME πΈ
bus_map_resource, bus_unmap_resource, resource_init_map_request β map or unmap an active resource π
β¨ SYNOPSIS β¨
#include <sys/param.h>
#include <sys/bus.h>
#include <machine/bus.h>
#include <sys/rman.h>
#include <machine/resource.h>
int
bus_map_resource(device_t dev, struct resource *r,
struct resource_map_request *args, struct resource_map *map);
int
bus_unmap_resource(device_t dev, struct resource *r,
struct resource_map *map);
void
resource_init_map_request(struct resource_map_request *args);
π¦ DESCRIPTION π¦
okay so these functions literally create or destroy a mapping of a previously activated resource. Mappings permit CPU access to the resource via the bus_space(9) API β that's the whole vibe π₯
The arguments are as follows, bestie:
devβ the device that owns the resource πrβ a pointer to thestruct resourcereturned bybus_alloc_resource(9)argsβ a set of optional properties to apply when creating a mapping. This argument can be set toNULLto request a mapping of the entire resource with the default properties β¨mapβ the resource mapping to create or destroy π
π Resource Mappings π
Resource mappings are described by a struct resource_map object. This structure contains a bus_space(9) tag and handle in the r_bustag and r_bushandle members that can be used for CPU access to the mapping. The structure also contains a r_vaddr member which contains the virtual address of the mapping if one exists π
The wrapper API for struct resource objects described in bus_activate_resource(9) can also be used with struct resource_map. For example, a pointer to a mapping object can be passed as the first argument to bus_read_4(). This wrapper API is preferred over using the r_bustag and r_bushandle members directly β highkey the move π
π§ Optional Mapping Properties π§
The struct resource_map_request object passed in args can be used to specify optional properties of a mapping. The structure must be initialized by invoking resource_init_map_request(). Properties are then specified by setting one or more of these members:
offset,lengthβ these two members specify a region of the resource to map. By default a mapping is created for the entire resource. Theoffsetis relative to the start of the resource πΈmemattrβ specifies a memory attribute to use when mapping the resource. By default memory mappings use theVM_MEMATTR_UNCACHEABLEattribute π
β RETURN VALUES β
Zero is returned on success, otherwise an error is returned. So yeah: 0 = slay, anything else = bestie, something went wrong π
π EXAMPLES π
This maps a PCI memory BAR with the write-combining memory attribute and reads the first 32-bit word:
struct resource *r;
struct resource_map map;
struct resource_map_request req;
uint32_t val;
int rid;
rid = PCIR_BAR(0);
r = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE |
RF_UNMAPPED);
resource_init_map_request(&req);
req.memattr = VM_MEMATTR_WRITE_COMBINING;
bus_map_resource(dev, SYS_RES_MEMORY, r, &req, &map);
val = bus_read_4(&map, 0);
π₯ SEE ALSO π₯
Go read these next, iykyk πβ¨
π AUTHORS π
This manual page was written by John Baldwin <jhb@FreeBSD.org>. Iconic behavior, honestly π
xoxo, your Debian baddie π β this page is dated March 13, 2024, the footer source/version vibe is Debian, and the manual stamp is BUS_MAP_RESOURCE(9) β¨ periodt
π¦ where this page comes from
- freebsd 15.1: base 15.1
- Copyright (c) 2016 John H. Baldwin <jhb@FreeBSD.org>
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms