Subversion Repositories Kolibri OS

Rev

Rev 2325 | Rev 2327 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2325 Rev 2326
Line 502... Line 502...
502
    {
502
    {
503
        dbgprintf("PCI device %x:%x bus:%x devfn:%x\n",
503
        dbgprintf("PCI device %x:%x bus:%x devfn:%x\n",
504
                dev->pci_dev.vendor,
504
                dev->pci_dev.vendor,
505
                dev->pci_dev.device,
505
                dev->pci_dev.device,
506
                dev->pci_dev.bus,
506
                dev->pci_dev.busnr,
507
                dev->pci_dev.devfn);
507
                dev->pci_dev.devfn);
508
 
508
 
Line 509... Line 509...
509
    }
509
    }
510
    return 0;
510
    return 0;
511
}
511
}
Line 567... Line 567...
567
        }
567
        }
568
    }
568
    }
569
    return NULL;
569
    return NULL;
570
};
570
};
571
571
 
-
 
572
 
-
 
573
struct pci_dev * pci_get_bus_and_slot(unsigned int bus, unsigned int devfn)
-
 
574
{
-
 
575
    pci_dev_t *dev;
-
 
576
 
-
 
577
    for(dev = (pci_dev_t*)devices.next;
-
 
578
        &dev->link != &devices;
-
 
579
        dev = (pci_dev_t*)dev->link.next)
-
 
580
    {
-
 
581
        if ( dev->pci_dev.busnr == bus && dev->pci_dev.devfn == devfn)
-
 
582
            return &dev->pci_dev;
-
 
583
    }
-
 
584
    return NULL;
-
 
585
}
-
 
586
 
-
 
587
struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from)
-
 
588
{
-
 
589
    pci_dev_t *dev;
-
 
590
 
-
 
591
    dev = (pci_dev_t*)devices.next;
-
 
592
 
-
 
593
    if(from != NULL)
-
 
594
    {
-
 
595
        for(; &dev->link != &devices;
-
 
596
            dev = (pci_dev_t*)dev->link.next)
-
 
597
        {
-
 
598
            if( &dev->pci_dev == from)
-
 
599
            {
-
 
600
                dev = (pci_dev_t*)dev->link.next;
-
 
601
                break;
-
 
602
            };
-
 
603
        }
-
 
604
    };
-
 
605
 
-
 
606
    for(; &dev->link != &devices;
-
 
607
        dev = (pci_dev_t*)dev->link.next)
-
 
608
    {
-
 
609
        if( dev->pci_dev.class == class)
-
 
610
        {
-
 
611
            return &dev->pci_dev;
-
 
612
        }
-
 
613
    }
-
 
614
 
-
 
615
   return NULL;
-
 
616
}
-
 
617
 
-
 
618
 
-
 
619
#define PIO_OFFSET      0x10000UL
-
 
620
#define PIO_MASK        0x0ffffUL
-
 
621
#define PIO_RESERVED    0x40000UL
-
 
622
 
-
 
623
#define IO_COND(addr, is_pio, is_mmio) do {            \
-
 
624
    unsigned long port = (unsigned long __force)addr;  \
-
 
625
    if (port >= PIO_RESERVED) {                        \
-
 
626
        is_mmio;                                       \
-
 
627
    } else if (port > PIO_OFFSET) {                    \
-
 
628
        port &= PIO_MASK;                              \
-
 
629
        is_pio;                                        \
-
 
630
    };                                                 \
-
 
631
} while (0)
-
 
632
 
-
 
633
/* Create a virtual mapping cookie for an IO port range */
-
 
634
void __iomem *ioport_map(unsigned long port, unsigned int nr)
-
 
635
{
-
 
636
    if (port > PIO_MASK)
-
 
637
        return NULL;
-
 
638
    return (void __iomem *) (unsigned long) (port + PIO_OFFSET);
-
 
639
}
-
 
640
 
-
 
641
void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
-
 
642
{
-
 
643
    resource_size_t start = pci_resource_start(dev, bar);
-
 
644
    resource_size_t len = pci_resource_len(dev, bar);
-
 
645
    unsigned long flags = pci_resource_flags(dev, bar);
-
 
646
 
-
 
647
    if (!len || !start)
-
 
648
        return NULL;
-
 
649
    if (maxlen && len > maxlen)
-
 
650
        len = maxlen;
-
 
651
    if (flags & IORESOURCE_IO)
-
 
652
        return ioport_map(start, len);
-
 
653
    if (flags & IORESOURCE_MEM) {
-
 
654
        return ioremap(start, len);
-
 
655
    }
-
 
656
    /* What? */
-
 
657
    return NULL;
-
 
658
}
-
 
659
 
-
 
660
void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
-
 
661
{
-
 
662
    IO_COND(addr, /* nothing */, iounmap(addr));
-
 
663
}
-
 
664
-
 
665