Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/pci/pci_user.c
Show First 20 Lines • Show All 872 Lines • ▼ Show 20 Lines | pci_bar_mmap(device_t pcidev, struct pci_bar_mmap *pbm) | ||||
pm = pci_find_bar(pcidev, pbm->pbm_reg); | pm = pci_find_bar(pcidev, pbm->pbm_reg); | ||||
if (pm == NULL) | if (pm == NULL) | ||||
return (EINVAL); | return (EINVAL); | ||||
if (!pci_bar_enabled(pcidev, pm)) | if (!pci_bar_enabled(pcidev, pm)) | ||||
return (EBUSY); /* XXXKIB enable if _ACTIVATE */ | return (EBUSY); /* XXXKIB enable if _ACTIVATE */ | ||||
if (!PCI_BAR_MEM(pm->pm_value)) | if (!PCI_BAR_MEM(pm->pm_value)) | ||||
return (EIO); | return (EIO); | ||||
membase = pm->pm_value & PCIM_BAR_MEM_BASE; | membase = pm->pm_value & PCIM_BAR_MEM_BASE; | ||||
error = BUS_TRANSLATE_RESOURCE(pcidev, SYS_RES_MEMORY, membase, | |||||
&membase); | |||||
if (error != 0) | |||||
return (error); | |||||
pbase = trunc_page(membase); | pbase = trunc_page(membase); | ||||
plen = round_page(membase + ((pci_addr_t)1 << pm->pm_size)) - | plen = round_page(membase + ((pci_addr_t)1 << pm->pm_size)) - | ||||
pbase; | pbase; | ||||
prot = VM_PROT_READ | (((pbm->pbm_flags & PCIIO_BAR_MMAP_RW) != 0) ? | prot = VM_PROT_READ | (((pbm->pbm_flags & PCIIO_BAR_MMAP_RW) != 0) ? | ||||
VM_PROT_WRITE : 0); | VM_PROT_WRITE : 0); | ||||
/* Create vm structures and mmap. */ | /* Create vm structures and mmap. */ | ||||
sg = sglist_alloc(1, M_WAITOK); | sg = sglist_alloc(1, M_WAITOK); | ||||
▲ Show 20 Lines • Show All 421 Lines • Show Last 20 Lines |