Copyright (c) 2003 M. Warner Losh All rights reserved. This program is free software. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer...
NAMEbus_activate_resource , bus_deactivate_resource - activate or deactivate a resource
SYNOPSISIn sys/param.h In sys/bus.h
In machine/bus.h In sys/rman.h In machine/resource.h Ft int Fo bus_activate_resource Fa device_t dev int type int rid struct resource *r Fc Ft int Fo bus_deactivate_resource Fa device_t dev int type int rid struct resource *r Fc
DESCRIPTIONThese functions activate or deactivate a previously allocated resource. In general, resources must be activated before they can be accessed by the driver. Bus drivers may perform additional actions to ensure that the resource is ready to be accessed. For example, the PCI bus driver enables memory decoding in a PCI device's command register when activating a memory resource.
The arguments are as follows:
- Fa dev
- The device that requests ownership of the resource. Before allocation, the resource is owned by the parent bus.
- Fa type
The type of resource you want to allocate.
It is one of:
- for PCI bus numbers
- for IRQs
- for ISA DMA lines
- for I/O ports
- for I/O memory
- Fa rid
- A pointer to a bus specific handle that identifies the resource being allocated.
- Fa r
- A pointer to the Vt struct resource returned by bus_alloc_resource9.
Resource MappingResources which can be mapped for CPU access by a bus_space9 tag and handle will create a mapping of the entire resource when activated. The tag and handle for this mapping are stored in Fa r and can be retrieved via rman_get_bustag9 and rman_get_bushandle9. These can be used with the bus_space9 API to access device registers or memory described by Fa r . If the mapping is associated with a virtual address, the virtual address can be retrieved via rman_get_virtual9.
This implicit mapping can be disabled by passing the RF_UNMAPPED flag to bus_alloc_resource9. A driver may use this if it wishes to allocate its own mappings of a resource using bus_map_resource9.
A wrapper API for bus_space9 is also provided that accepts the associated resource as the first argument in place of the bus_space9 tag and handle. The functions in this wrapper API are named similarly to the bus_space9 API except that ``_space'' is removed from their name. For example, Fn bus_read_4 can be used in place of Fn bus_space_read_4 . The wrapper API is preferred in new drivers.
These two statements both read a 32-bit register at the start of a resource:
bus_space_read_4(rman_get_bustag(res), rman_get_bushandle(res), 0); bus_read_4(res, 0);