Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 471040
Collapse All | Expand All

(-)src/freebsd_pci.c.orig (+146 lines)
Lines 1-6 Link Here
1
/*
1
/*
2
 * (C) Copyright Eric Anholt 2006
2
 * (C) Copyright Eric Anholt 2006
3
 * (C) Copyright IBM Corporation 2006
3
 * (C) Copyright IBM Corporation 2006
4
 * (C) Copyright Mark Kettenis 2011
5
 * (C) Copyright Robert Millan 2012
4
 * All Rights Reserved.
6
 * All Rights Reserved.
5
 *
7
 *
6
 * Permission is hereby granted, free of charge, to any person obtaining a
8
 * Permission is hereby granted, free of charge, to any person obtaining a
Lines 561-566 Link Here
561
    freebsd_pci_sys = NULL;
563
    freebsd_pci_sys = NULL;
562
}
564
}
563
565
566
#if defined(__i386__) || defined(__amd64__)
567
#include <machine/cpufunc.h>
568
#endif
569
570
static struct pci_io_handle *
571
pci_device_freebsd_open_legacy_io(struct pci_io_handle *ret,
572
    struct pci_device *dev, pciaddr_t base, pciaddr_t size)
573
{
574
#if defined(__i386__) || defined(__amd64__)
575
	ret->fd = open("/dev/io", O_RDWR | O_CLOEXEC);
576
577
	if (ret->fd < 0)
578
		return NULL;
579
580
	ret->base = base;
581
	ret->size = size;
582
	return ret;
583
#elif defined(PCI_MAGIC_IO_RANGE)
584
	ret->memory = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED,
585
	    aperturefd, PCI_MAGIC_IO_RANGE + base);
586
	if (ret->memory == MAP_FAILED)
587
		return NULL;
588
589
	ret->base = base;
590
	ret->size = size;
591
	return ret;
592
#else
593
	return NULL;
594
#endif
595
}
596
597
#if defined(__i386__) || defined(__amd64__)
598
static void
599
pci_device_freebsd_close_io(struct pci_device *dev, struct pci_io_handle *handle)
600
{
601
	if (handle->fd > -1)
602
		close(handle->fd);
603
}
604
#endif
605
606
static uint32_t
607
pci_device_freebsd_read32(struct pci_io_handle *handle, uint32_t reg)
608
{
609
#if defined(__i386__) || defined(__amd64__)
610
	return inl(handle->base + reg);
611
#else
612
	return *(uint32_t *)((uintptr_t)handle->memory + reg);
613
#endif
614
}
615
616
static uint16_t
617
pci_device_freebsd_read16(struct pci_io_handle *handle, uint32_t reg)
618
{
619
#if defined(__i386__) || defined(__amd64__)
620
	return inw(handle->base + reg);
621
#else
622
	return *(uint16_t *)((uintptr_t)handle->memory + reg);
623
#endif
624
}
625
626
static uint8_t
627
pci_device_freebsd_read8(struct pci_io_handle *handle, uint32_t reg)
628
{
629
#if defined(__i386__) || defined(__amd64__)
630
	return inb(handle->base + reg);
631
#else
632
	return *(uint8_t *)((uintptr_t)handle->memory + reg);
633
#endif
634
}
635
636
static void
637
pci_device_freebsd_write32(struct pci_io_handle *handle, uint32_t reg,
638
    uint32_t data)
639
{
640
#if defined(__i386__) || defined(__amd64__)
641
	outl(handle->base + reg, data);
642
#else
643
	*(uint16_t *)((uintptr_t)handle->memory + reg) = data;
644
#endif
645
}
646
647
static void
648
pci_device_freebsd_write16(struct pci_io_handle *handle, uint32_t reg,
649
    uint16_t data)
650
{
651
#if defined(__i386__) || defined(__amd64__)
652
	outw(handle->base + reg, data);
653
#else
654
	*(uint8_t *)((uintptr_t)handle->memory + reg) = data;
655
#endif
656
}
657
658
static void
659
pci_device_freebsd_write8(struct pci_io_handle *handle, uint32_t reg,
660
    uint8_t data)
661
{
662
#if defined(__i386__) || defined(__amd64__)
663
	outb(handle->base + reg, data);
664
#else
665
	*(uint32_t *)((uintptr_t)handle->memory + reg) = data;
666
#endif
667
}
668
669
static int
670
pci_device_freebsd_map_legacy(struct pci_device *dev, pciaddr_t base,
671
    pciaddr_t size, unsigned map_flags, void **addr)
672
{
673
	struct pci_device_mapping map;
674
	int err;
675
676
	map.base = base;
677
	map.size = size;
678
	map.flags = map_flags;
679
	map.memory = NULL;
680
	err = pci_device_freebsd_map_range(dev, &map);
681
	*addr = map.memory;
682
683
	return err;
684
}
685
686
static int
687
pci_device_freebsd_unmap_legacy(struct pci_device *dev, void *addr,
688
    pciaddr_t size)
689
{
690
	struct pci_device_mapping map;
691
692
	map.memory = addr;
693
	map.size = size;
694
	map.flags = 0;
695
	return pci_device_freebsd_unmap_range(dev, &map);
696
}
697
564
static const struct pci_system_methods freebsd_pci_methods = {
698
static const struct pci_system_methods freebsd_pci_methods = {
565
    .destroy = pci_system_freebsd_destroy,
699
    .destroy = pci_system_freebsd_destroy,
566
    .destroy_device = NULL, /* nothing to do for this */
700
    .destroy_device = NULL, /* nothing to do for this */
Lines 571-576 Link Here
571
    .read = pci_device_freebsd_read,
705
    .read = pci_device_freebsd_read,
572
    .write = pci_device_freebsd_write,
706
    .write = pci_device_freebsd_write,
573
    .fill_capabilities = pci_fill_capabilities_generic,
707
    .fill_capabilities = pci_fill_capabilities_generic,
708
    .open_legacy_io = pci_device_freebsd_open_legacy_io,
709
#if defined(__i386__) || defined(__amd64__)
710
    .close_io = pci_device_freebsd_close_io,
711
#endif
712
    .read32 = pci_device_freebsd_read32,
713
    .read16 = pci_device_freebsd_read16,
714
    .read8 = pci_device_freebsd_read8,
715
    .write32 = pci_device_freebsd_write32,
716
    .write16 = pci_device_freebsd_write16,
717
    .write8 = pci_device_freebsd_write8,
718
    .map_legacy = pci_device_freebsd_map_legacy,
719
    .unmap_legacy = pci_device_freebsd_unmap_legacy,
574
};
720
};
575
721
576
/**
722
/**

Return to bug 471040