From: Haavard Skinnemoen <hskinnemoen@atmel.com>
To: linux-arch@vger.kernel.org
Cc: Haavard Skinnemoen <hskinnemoen@atmel.com>
Subject: [PATCH 2/13] Generic ioremap_page_range: alpha conversion
Date: Tue, 08 Aug 2006 14:23:04 +0200 [thread overview]
Message-ID: <11550397954093-git-send-email-hskinnemoen@atmel.com> (raw)
In-Reply-To: <11550397954098-git-send-email-hskinnemoen@atmel.com>
Convert Alpha to use generic ioremap_page_range() by turning
__alpha_remap_area_pages() into an inline wrapper around
ioremap_page_range().
Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
---
arch/alpha/kernel/proto.h | 15 ++++++--
arch/alpha/mm/Makefile | 2 +
arch/alpha/mm/remap.c | 86 ---------------------------------------------
3 files changed, 13 insertions(+), 90 deletions(-)
diff --git a/arch/alpha/kernel/proto.h b/arch/alpha/kernel/proto.h
index 2a6e3da..21f7128 100644
--- a/arch/alpha/kernel/proto.h
+++ b/arch/alpha/kernel/proto.h
@@ -1,5 +1,7 @@
#include <linux/interrupt.h>
+#include <linux/io.h>
+#include <asm/pgtable.h>
/* Prototypes of functions used across modules here in this directory. */
@@ -181,9 +183,16 @@ extern void titan_dispatch_irqs(u64, str
extern void switch_to_system_map(void);
extern void srm_paging_stop(void);
-/* ../mm/remap.c */
-extern int __alpha_remap_area_pages(unsigned long, unsigned long,
- unsigned long, unsigned long);
+static inline int
+__alpha_remap_area_pages(unsigned long address, unsigned long phys_addr,
+ unsigned long size, unsigned long flags)
+{
+ pgprot_t prot;
+
+ prot = __pgprot(_PAGE_VALID | _PAGE_ASM | _PAGE_KRE
+ | _PAGE_KWE | flags);
+ return ioremap_page_range(address, address + size, phys_addr, prot);
+}
/* irq.c */
diff --git a/arch/alpha/mm/Makefile b/arch/alpha/mm/Makefile
index 6edd9a0..09399c5 100644
--- a/arch/alpha/mm/Makefile
+++ b/arch/alpha/mm/Makefile
@@ -4,6 +4,6 @@ #
EXTRA_CFLAGS := -Werror
-obj-y := init.o fault.o extable.o remap.o
+obj-y := init.o fault.o extable.o
obj-$(CONFIG_DISCONTIGMEM) += numa.o
diff --git a/arch/alpha/mm/remap.c b/arch/alpha/mm/remap.c
deleted file mode 100644
index a78356c..0000000
--- a/arch/alpha/mm/remap.c
+++ /dev/null
@@ -1,86 +0,0 @@
-#include <linux/vmalloc.h>
-#include <asm/pgalloc.h>
-#include <asm/cacheflush.h>
-
-static inline void
-remap_area_pte(pte_t * pte, unsigned long address, unsigned long size,
- unsigned long phys_addr, unsigned long flags)
-{
- unsigned long end;
- unsigned long pfn;
-
- address &= ~PMD_MASK;
- end = address + size;
- if (end > PMD_SIZE)
- end = PMD_SIZE;
- if (address >= end)
- BUG();
- pfn = phys_addr >> PAGE_SHIFT;
- do {
- if (!pte_none(*pte)) {
- printk("remap_area_pte: page already exists\n");
- BUG();
- }
- set_pte(pte, pfn_pte(pfn,
- __pgprot(_PAGE_VALID | _PAGE_ASM |
- _PAGE_KRE | _PAGE_KWE | flags)));
- address += PAGE_SIZE;
- pfn++;
- pte++;
- } while (address && (address < end));
-}
-
-static inline int
-remap_area_pmd(pmd_t * pmd, unsigned long address, unsigned long size,
- unsigned long phys_addr, unsigned long flags)
-{
- unsigned long end;
-
- address &= ~PGDIR_MASK;
- end = address + size;
- if (end > PGDIR_SIZE)
- end = PGDIR_SIZE;
- phys_addr -= address;
- if (address >= end)
- BUG();
- do {
- pte_t * pte = pte_alloc_kernel(pmd, address);
- if (!pte)
- return -ENOMEM;
- remap_area_pte(pte, address, end - address,
- address + phys_addr, flags);
- address = (address + PMD_SIZE) & PMD_MASK;
- pmd++;
- } while (address && (address < end));
- return 0;
-}
-
-int
-__alpha_remap_area_pages(unsigned long address, unsigned long phys_addr,
- unsigned long size, unsigned long flags)
-{
- pgd_t * dir;
- int error = 0;
- unsigned long end = address + size;
-
- phys_addr -= address;
- dir = pgd_offset(&init_mm, address);
- flush_cache_all();
- if (address >= end)
- BUG();
- do {
- pmd_t *pmd;
- pmd = pmd_alloc(&init_mm, dir, address);
- error = -ENOMEM;
- if (!pmd)
- break;
- if (remap_area_pmd(pmd, address, end - address,
- phys_addr + address, flags))
- break;
- error = 0;
- address = (address + PGDIR_SIZE) & PGDIR_MASK;
- dir++;
- } while (address && (address < end));
- return error;
-}
-
--
1.4.0
next prev parent reply other threads:[~2006-08-08 12:23 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-08-08 12:23 [PATCH 0/13] Generic ioremap_page_range: introduction Haavard Skinnemoen
2006-08-08 12:23 ` [PATCH 1/13] Generic ioremap_page_range: implementation Haavard Skinnemoen
2006-08-08 12:23 ` Haavard Skinnemoen [this message]
2006-08-08 12:23 ` [PATCH 3/13] Generic ioremap_page_range: arm conversion Haavard Skinnemoen
2006-08-08 12:23 ` [PATCH 4/13] Generic ioremap_page_range: avr32 conversion Haavard Skinnemoen
2006-08-08 12:23 ` [PATCH 5/13] Generic ioremap_page_range: cris conversion Haavard Skinnemoen
2006-08-08 12:23 ` [PATCH 6/13] Generic ioremap_page_range: i386 conversion Haavard Skinnemoen
2006-08-08 12:23 ` [PATCH 7/13] Generic ioremap_page_range: m32r conversion Haavard Skinnemoen
2006-08-08 12:23 ` [PATCH 8/13] Generic ioremap_page_range: mips conversion Haavard Skinnemoen
2006-08-08 12:23 ` [PATCH 9/13] Generic ioremap_page_range: parisc conversion Haavard Skinnemoen
2006-08-08 12:23 ` [PATCH 10/13] Generic ioremap_page_range: s390 conversion Haavard Skinnemoen
2006-08-08 12:23 ` [PATCH 11/13] Generic ioremap_page_range: sh conversion Haavard Skinnemoen
2006-08-08 12:23 ` [PATCH 12/13] Generic ioremap_page_range: sh64 conversion Haavard Skinnemoen
2006-08-08 12:23 ` [PATCH 13/13] Generic ioremap_page_range: x86_64 conversion Haavard Skinnemoen
2006-08-08 12:28 ` Andi Kleen
2006-08-08 12:30 ` Jan-Benedict Glaw
2006-08-08 14:38 ` [PATCH 9/13] Generic ioremap_page_range: parisc conversion Kyle McMartin
2006-08-08 14:48 ` Kyle McMartin
2006-08-08 15:13 ` Haavard Skinnemoen
2006-08-08 15:37 ` James Bottomley
2006-08-08 22:26 ` [PATCH 0/13] Generic ioremap_page_range: introduction David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=11550397954093-git-send-email-hskinnemoen@atmel.com \
--to=hskinnemoen@atmel.com \
--cc=linux-arch@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.