logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

bus_map_resource, bus_unmap_resource, resource_init_map_request — map or unmap an active resource

Authors

       This manual page was written by John Baldwin <jhb@FreeBSD.org>.

Debian                                          February 5, 2018                             BUS_MAP_RESOURCE(9)

Description

       These functions create or destroy a mapping of a previously  activated  resource.   Mappings  permit  CPU
       access to the resource via the bus_space(9) API.

       The arguments are as follows:

       dev     The device that owns the resource.

       type    The type of resource to map.  It is one of:

               SYS_RES_IOPORT  for I/O ports
               SYS_RES_MEMORY  for I/O memory

       r       A pointer to the structresource returned by bus_alloc_resource(9).

       args    A  set of optional properties to apply when creating a mapping.  This argument can be set to NULL
               to request a mapping of the entire resource with the default properties.

       map     The resource mapping to create or destroy.

   ResourceMappings
       Resource mappings are described by a structresource_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 structresource objects described in bus_activate_resource(9) can also be used with
       structresource_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.

   OptionalMappingProperties
       The  structresource_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.  The offset is relative to the start of the resource.

       memattr
               Specifies  a  memory  attribute to use when mapping the resource.  By default memory mappings use
               the VM_MEMATTR_UNCACHEABLE attribute.

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);

Name

       bus_map_resource, bus_unmap_resource, resource_init_map_request — map or unmap an active resource

Return Values

       Zero is returned on success, otherwise an error is returned.

See Also

bus_activate_resource(9), bus_alloc_resource(9), bus_space(9), device(9), driver(9)

Synopsis

#include<sys/param.h>#include<sys/bus.h>#include<machine/bus.h>#include<sys/rman.h>#include<machine/resource.h>intbus_map_resource(device_tdev,     inttype,    structresource*r,    structresource_map_request*args,
           structresource_map*map);

       intbus_unmap_resource(device_tdev, inttype, structresource*r, structresource_map*map);

       voidresource_init_map_request(structresource_map_request*args);

See Also