} while ( 0 )
/**
- * Map bus address as an I/O address
+ * Convert virtual address to a physical address
*
- * @v bus_addr Bus address
- * @v len Length of region
- * @ret io_addr I/O address
+ * @v addr Virtual address
+ * @ret phys_addr Physical address
*/
-void * ioremap ( unsigned long bus_addr, size_t len );
+unsigned long virt_to_phys ( volatile const void *addr );
/**
- * Unmap I/O address
+ * Convert physical address to a virtual address
*
- * @v io_addr I/O address
- */
-void iounmap ( volatile const void *io_addr );
-
-/**
- * Convert I/O address to bus address (for debug only)
+ * @v addr Virtual address
+ * @ret phys_addr Physical address
*
- * @v io_addr I/O address
- * @ret bus_addr Bus address
+ * This operation isn't actually valid within our memory model, and is
+ * impossible to achieve under -DKEEP_IT_REAL. Some drivers haven't
+ * been updated to avoid it yet, though.
*/
-unsigned long io_to_bus ( volatile const void *io_addr );
+void * phys_to_virt ( unsigned long phys_addr );
/**
* Convert virtual address to a bus address
*/
void * bus_to_virt ( unsigned long bus_addr );
+/**
+ * Map bus address as an I/O address
+ *
+ * @v bus_addr Bus address
+ * @v len Length of region
+ * @ret io_addr I/O address
+ */
+void * ioremap ( unsigned long bus_addr, size_t len );
+
+/**
+ * Unmap I/O address
+ *
+ * @v io_addr I/O address
+ */
+void iounmap ( volatile const void *io_addr );
+
+/**
+ * Convert I/O address to bus address (for debug only)
+ *
+ * @v io_addr I/O address
+ * @ret bus_addr Bus address
+ */
+unsigned long io_to_bus ( volatile const void *io_addr );
+
/**
* Read byte from memory-mapped device
*