* <zaitcev> Sounds reasonable
*/
-#include <linux/module.h>
+#include <linux/config.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <asm/io.h>
#include <asm/vaddrs.h>
#include <asm/oplib.h>
-#include <asm/prom.h>
-#include <asm/of_device.h>
-#include <asm/sbus.h>
#include <asm/page.h>
#include <asm/pgalloc.h>
#include <asm/dma.h>
phyres->start + offset, size, name);
}
-void __iomem *of_ioremap(struct resource *res, unsigned long offset,
- unsigned long size, char *name)
-{
- return _sparc_alloc_io(res->flags & 0xF,
- res->start + offset,
- size, name);
-}
-EXPORT_SYMBOL(of_ioremap);
-
-void of_iounmap(void __iomem *base, unsigned long size)
-{
- iounmap(base);
-}
-EXPORT_SYMBOL(of_iounmap);
-
/*
*/
void sbus_iounmap(volatile void __iomem *addr, unsigned long size)
pa &= PAGE_MASK;
sparc_mapiorange(bus, pa, res->start, res->end - res->start + 1);
- return (void __iomem *)(unsigned long)(res->start + offset);
+ return (void __iomem *) (res->start + offset);
}
/*
unsigned long plen;
plen = res->end - res->start + 1;
- BUG_ON((plen & (PAGE_SIZE-1)) != 0);
+ if ((plen & (PAGE_SIZE-1)) != 0) BUG();
sparc_unmapiorange(res->start, plen);
release_resource(res);
}
#ifdef CONFIG_SBUS
-void sbus_set_sbus64(struct sbus_dev *sdev, int x)
-{
+void sbus_set_sbus64(struct sbus_dev *sdev, int x) {
printk("sbus_set_sbus64: unsupported\n");
}
-extern unsigned int sun4d_build_irq(struct sbus_dev *sdev, int irq);
-void __init sbus_fill_device_irq(struct sbus_dev *sdev)
-{
- struct linux_prom_irqs irqs[PROMINTR_MAX];
- int len;
-
- len = prom_getproperty(sdev->prom_node, "intr",
- (char *)irqs, sizeof(irqs));
- if (len != -1) {
- sdev->num_irqs = len / 8;
- if (sdev->num_irqs == 0) {
- sdev->irqs[0] = 0;
- } else if (sparc_cpu_model == sun4d) {
- for (len = 0; len < sdev->num_irqs; len++)
- sdev->irqs[len] =
- sun4d_build_irq(sdev, irqs[len].pri);
- } else {
- for (len = 0; len < sdev->num_irqs; len++)
- sdev->irqs[len] = irqs[len].pri;
- }
- } else {
- int interrupts[PROMINTR_MAX];
-
- /* No "intr" node found-- check for "interrupts" node.
- * This node contains SBus interrupt levels, not IPLs
- * as in "intr", and no vector values. We convert
- * SBus interrupt levels to PILs (platform specific).
- */
- len = prom_getproperty(sdev->prom_node, "interrupts",
- (char *)interrupts, sizeof(interrupts));
- if (len == -1) {
- sdev->irqs[0] = 0;
- sdev->num_irqs = 0;
- } else {
- sdev->num_irqs = len / sizeof(int);
- for (len = 0; len < sdev->num_irqs; len++) {
- sdev->irqs[len] =
- sbint_to_irq(sdev, interrupts[len]);
- }
- }
- }
-}
-
/*
* Allocate a chunk of memory suitable for DMA.
* Typically devices use them for control blocks.
if (mmu_map_dma_area(dma_addrp, va, res->start, len_total) != 0)
goto err_noiommu;
- /* Set the resource name, if known. */
- if (sdev) {
- res->name = sdev->prom_name;
- }
-
- return (void *)(unsigned long)res->start;
+ return (void *)res->start;
err_noiommu:
release_resource(res);
{
printk("sbus_dma_sync_sg_for_device: not implemented yet\n");
}
-
-/* Support code for sbus_init(). */
-/*
- * XXX This functions appears to be a distorted version of
- * prom_sbus_ranges_init(), with all sun4d stuff cut away.
- * Ask DaveM what is going on here, how is sun4d supposed to work... XXX
- */
-/* added back sun4d patch from Thomas Bogendoerfer - should be OK (crn) */
-void __init sbus_arch_bus_ranges_init(struct device_node *pn, struct sbus_bus *sbus)
-{
- int parent_node = pn->node;
-
- if (sparc_cpu_model == sun4d) {
- struct linux_prom_ranges iounit_ranges[PROMREG_MAX];
- int num_iounit_ranges, len;
-
- len = prom_getproperty(parent_node, "ranges",
- (char *) iounit_ranges,
- sizeof (iounit_ranges));
- if (len != -1) {
- num_iounit_ranges =
- (len / sizeof(struct linux_prom_ranges));
- prom_adjust_ranges(sbus->sbus_ranges,
- sbus->num_sbus_ranges,
- iounit_ranges, num_iounit_ranges);
- }
- }
-}
-
-void __init sbus_setup_iommu(struct sbus_bus *sbus, struct device_node *dp)
-{
- struct device_node *parent = dp->parent;
-
- if (sparc_cpu_model != sun4d &&
- parent != NULL &&
- !strcmp(parent->name, "iommu")) {
- extern void iommu_init(int iommu_node, struct sbus_bus *sbus);
-
- iommu_init(parent->node, sbus);
- }
-
- if (sparc_cpu_model == sun4d) {
- extern void iounit_init(int sbi_node, int iounit_node,
- struct sbus_bus *sbus);
-
- iounit_init(dp->node, parent->node, sbus);
- }
-}
-
-void __init sbus_setup_arch_props(struct sbus_bus *sbus, struct device_node *dp)
-{
- if (sparc_cpu_model == sun4d) {
- struct device_node *parent = dp->parent;
-
- sbus->devid = of_getintprop_default(parent, "device-id", 0);
- sbus->board = of_getintprop_default(parent, "board#", 0);
- }
-}
-
-int __init sbus_arch_preinit(void)
-{
- extern void register_proc_sparc_ioport(void);
-
- register_proc_sparc_ioport();
-
-#ifdef CONFIG_SUN4
- {
- extern void sun4_dvma_init(void);
- sun4_dvma_init();
- }
- return 1;
-#else
- return 0;
-#endif
-}
-
-void __init sbus_arch_postinit(void)
-{
- if (sparc_cpu_model == sun4d) {
- extern void sun4d_init_sbi_irq(void);
- sun4d_init_sbi_irq();
- }
-}
#endif /* CONFIG_SBUS */
#ifdef CONFIG_PCI
dma_addr_t pci_map_single(struct pci_dev *hwdev, void *ptr, size_t size,
int direction)
{
- BUG_ON(direction == PCI_DMA_NONE);
+ if (direction == PCI_DMA_NONE)
+ BUG();
/* IIep is write-through, not flushing. */
return virt_to_phys(ptr);
}
void pci_unmap_single(struct pci_dev *hwdev, dma_addr_t ba, size_t size,
int direction)
{
- BUG_ON(direction == PCI_DMA_NONE);
+ if (direction == PCI_DMA_NONE)
+ BUG();
if (direction != PCI_DMA_TODEVICE) {
mmu_inval_dma_area((unsigned long)phys_to_virt(ba),
(size + PAGE_SIZE-1) & PAGE_MASK);
dma_addr_t pci_map_page(struct pci_dev *hwdev, struct page *page,
unsigned long offset, size_t size, int direction)
{
- BUG_ON(direction == PCI_DMA_NONE);
+ if (direction == PCI_DMA_NONE)
+ BUG();
/* IIep is write-through, not flushing. */
return page_to_phys(page) + offset;
}
void pci_unmap_page(struct pci_dev *hwdev,
dma_addr_t dma_address, size_t size, int direction)
{
- BUG_ON(direction == PCI_DMA_NONE);
+ if (direction == PCI_DMA_NONE)
+ BUG();
/* mmu_inval_dma_area XXX */
}
{
int n;
- BUG_ON(direction == PCI_DMA_NONE);
+ if (direction == PCI_DMA_NONE)
+ BUG();
/* IIep is write-through, not flushing. */
for (n = 0; n < nents; n++) {
- BUG_ON(page_address(sg->page) == NULL);
+ if (page_address(sg->page) == NULL) BUG();
sg->dvma_address = virt_to_phys(page_address(sg->page));
sg->dvma_length = sg->length;
sg++;
{
int n;
- BUG_ON(direction == PCI_DMA_NONE);
+ if (direction == PCI_DMA_NONE)
+ BUG();
if (direction != PCI_DMA_TODEVICE) {
for (n = 0; n < nents; n++) {
- BUG_ON(page_address(sg->page) == NULL);
+ if (page_address(sg->page) == NULL) BUG();
mmu_inval_dma_area(
(unsigned long) page_address(sg->page),
(sg->length + PAGE_SIZE-1) & PAGE_MASK);
*/
void pci_dma_sync_single_for_cpu(struct pci_dev *hwdev, dma_addr_t ba, size_t size, int direction)
{
- BUG_ON(direction == PCI_DMA_NONE);
+ if (direction == PCI_DMA_NONE)
+ BUG();
if (direction != PCI_DMA_TODEVICE) {
mmu_inval_dma_area((unsigned long)phys_to_virt(ba),
(size + PAGE_SIZE-1) & PAGE_MASK);
void pci_dma_sync_single_for_device(struct pci_dev *hwdev, dma_addr_t ba, size_t size, int direction)
{
- BUG_ON(direction == PCI_DMA_NONE);
+ if (direction == PCI_DMA_NONE)
+ BUG();
if (direction != PCI_DMA_TODEVICE) {
mmu_inval_dma_area((unsigned long)phys_to_virt(ba),
(size + PAGE_SIZE-1) & PAGE_MASK);
{
int n;
- BUG_ON(direction == PCI_DMA_NONE);
+ if (direction == PCI_DMA_NONE)
+ BUG();
if (direction != PCI_DMA_TODEVICE) {
for (n = 0; n < nents; n++) {
- BUG_ON(page_address(sg->page) == NULL);
+ if (page_address(sg->page) == NULL) BUG();
mmu_inval_dma_area(
(unsigned long) page_address(sg->page),
(sg->length + PAGE_SIZE-1) & PAGE_MASK);
{
int n;
- BUG_ON(direction == PCI_DMA_NONE);
+ if (direction == PCI_DMA_NONE)
+ BUG();
if (direction != PCI_DMA_TODEVICE) {
for (n = 0; n < nents; n++) {
- BUG_ON(page_address(sg->page) == NULL);
+ if (page_address(sg->page) == NULL) BUG();
mmu_inval_dma_area(
(unsigned long) page_address(sg->page),
(sg->length + PAGE_SIZE-1) & PAGE_MASK);
if (p + 32 >= e) /* Better than nothing */
break;
if ((nm = r->name) == 0) nm = "???";
- p += sprintf(p, "%016llx-%016llx: %s\n",
- (unsigned long long)r->start,
- (unsigned long long)r->end, nm);
+ p += sprintf(p, "%08lx-%08lx: %s\n", r->start, r->end, nm);
}
return p-buf;