|
@@ -1682,6 +1682,7 @@ static void *m2v(phys_addr_t maddr)
|
|
|
return __ka(m2p(maddr));
|
|
|
}
|
|
|
|
|
|
+/* Set the page permissions on an identity-mapped pages */
|
|
|
static void set_page_prot(void *addr, pgprot_t prot)
|
|
|
{
|
|
|
unsigned long pfn = __pa(addr) >> PAGE_SHIFT;
|
|
@@ -1929,6 +1930,29 @@ static void xen_set_fixmap(unsigned idx, phys_addr_t phys, pgprot_t prot)
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
+__init void xen_ident_map_ISA(void)
|
|
|
+{
|
|
|
+ unsigned long pa;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * If we're dom0, then linear map the ISA machine addresses into
|
|
|
+ * the kernel's address space.
|
|
|
+ */
|
|
|
+ if (!xen_initial_domain())
|
|
|
+ return;
|
|
|
+
|
|
|
+ xen_raw_printk("Xen: setup ISA identity maps\n");
|
|
|
+
|
|
|
+ for (pa = ISA_START_ADDRESS; pa < ISA_END_ADDRESS; pa += PAGE_SIZE) {
|
|
|
+ pte_t pte = mfn_pte(PFN_DOWN(pa), PAGE_KERNEL_IO);
|
|
|
+
|
|
|
+ if (HYPERVISOR_update_va_mapping(PAGE_OFFSET + pa, pte, 0))
|
|
|
+ BUG();
|
|
|
+ }
|
|
|
+
|
|
|
+ xen_flush_tlb();
|
|
|
+}
|
|
|
+
|
|
|
static __init void xen_post_allocator_init(void)
|
|
|
{
|
|
|
pv_mmu_ops.set_pte = xen_set_pte;
|