Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

badaddr(9r) [osf1 man page]

BADADDR(9r)															       BADADDR(9r)

NAME
BADADDR - General: Probes the address during device autoconfiguration SYNOPSIS
int BADADDR( caddr_t addr, int length, struct bus_ctlr_common *ptr ); ARGUMENTS
Specifies the address of the device registers or memory. Specifies the length (in bytes) of the data to be checked. Valid values are 1, 2, and 4 on 32-bit machines and 4 and 8 on 64-bit machines. Specifies a pointer to a bus_ctlr_common structure. You cast this argument as a pointer to either a bus or controller structure. DESCRIPTION
The BADADDR routine generates a call to a machine-dependent routine that does a read access check of the data at the supplied address and dismisses any machine check exception that may result from the attempted access. You call this routine to probe for memory or I/O devices at a specified address during device autoconfiguration. NOTES
You can use BADADDR in device drivers that are statically configured into the kernel. However, you cannot use BADADDR if the driver is dynamically configured into the kernel. If you implement the driver to be both statically and dynamically configured, you can declare a variable and use it to control the call to BADADDR. The following code fragment shows the use of such a variable used in the probe routine for the /dev/none driver: . . . if (none_is_dynamic) { /* Code to handle tasks associated with a dynamically * * configured driver */ . . . } else { /* Code to handle tasks (including the call to BADADDR) * * associated with a statically configured driver * * including call to BADADDR */ } . . . The EISA and ISA buses do not generate a machine check when BADADDR performs a read access to a nonexistent location. These buses always return success when BADADDR performs a read access to their address space. For the PCI bus and the VMEbus, you must do the following before calling BADADDR: Call the iohandle_to_phys routine to convert the I/O han- dle to a valid system physical address Call the PHYS_TO_KSEG routine to convert the valid system physical address to a kernel-unmapped vir- tual address Call the BADADDR routine, passing this kernel-unmapped virtual address as the first argument RETURN VALUES
The BADADDR routine returns the value 0 (zero) if the data is accessible or a nonzero value if the data is not accessible. BADADDR(9r)

Check Out this Related Man Page

svatophys(9r)															     svatophys(9r)

NAME
svatophys - General: Converts a system virtual address to a physical address SYNOPSIS
kern_return_t svatophys( vm_offset_t kern_addr, vm_offset_t *phys_addr ); ARGUMENTS
Specifies the kernel virtual address. Specifies a pointer to the physical address to be filled in. DESCRIPTION
The svatophys routine converts a system virtual address to the corresponding physical address. All address and data structure manipulation done within the kernel is performed using system virtual addresses. Typically, system virtual addresses are a means of mapping physical memory and I/O space, which often consists of device registers and DMA buffers. In contrast to this, devices are usually unaware of any virtual addressing and for this reason use physical addresses. You use the svatophys routine to perform this address translation. As an example of where you can use this address translation, a disk device driver can use DMA buffers to transfer blocks of data to the disk (for the case of a write operation). The data to be written to disk is present in system memory at a system virtual address known to the driver. To initiate the DMA operation, the disk driver can set up a command packet to specify a write operation to the underlying disk controller hardware. This write command packet contains (among other things) the location of the DMA buffer as a physical address and the length of the buffer. Here, the driver calls the svatophys routine to translate the system virtual address of the DMA buffer to a physical address in the command packet issued to the disk driver. RETURN VALUES
The svatophys routine returns the following: The address translation has been completed successfully. Unable to perform address transla- tion. This value indicates that the address specified by the kern_addr argument is not a valid kernel or system virtual address. svatophys(9r)
Man Page