/* notification that a previously read-only page is about to become * writable, if an error is returned it will cause a SIGBUS */ vm_fault_t (*page_mkwrite)(struct vm_fault *vmf);
/* same as page_mkwrite when using VM_PFNMAP|VM_MIXEDMAP */ vm_fault_t (*pfn_mkwrite)(struct vm_fault *vmf);
/* called by access_process_vm when get_user_pages() fails, typically * for use by special VMAs that can switch between memory and hardware */ int (*access)(struct vm_area_struct *vma, unsigned long addr, void *buf, int len, int write);
/* Called by the /proc/PID/maps code to ask the vma whether it * has a special name. Returning non-NULL will also cause this * vma to be dumped unconditionally. */ const char *(*name)(struct vm_area_struct *vma); ... };
/* Remap-pfn-range will mark the range VM_IO */ if (remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff, size, vma->vm_page_prot)) { return -EAGAIN; } return 0; }
static struct map_desc ixp4xx_of_io_desc[] __initdata = { /* * This is needed for runtime system configuration checks, * such as reading if hardware so-and-so is present. This * could eventually be converted into a syscon once all boards * are converted to device tree. */ { .virtual = IXP4XX_EXP_CFG_BASE_VIRT, .pfn = __phys_to_pfn(IXP4XX_EXP_CFG_BASE_PHYS), .length = SZ_4K, .type = MT_DEVICE, }, #ifdef CONFIG_DEBUG_UART_8250 /* This is needed for LL-debug/earlyprintk/debug-macro.S */ { .virtual = CONFIG_DEBUG_UART_VIRT, .pfn = __phys_to_pfn(CONFIG_DEBUG_UART_PHYS), .length = SZ_4K, .type = MT_DEVICE, }, #endif };
/* * We handle 4 differen SoC families. These compatible strings are enough * to provide the core so that different boards can add their more detailed * specifics. */ static const char *ixp4xx_of_board_compat[] = { "intel,ixp42x", "intel,ixp43x", "intel,ixp45x", "intel,ixp46x", NULL, };