Lines Matching refs:bar

98 #define NFP_PCIE_P2C_FIXED_SIZE(bar)               (1 << (bar)->bitsize)  argument
99 #define NFP_PCIE_P2C_BULK_SIZE(bar) (1 << (bar)->bitsize) argument
100 #define NFP_PCIE_P2C_GENERAL_TARGET_OFFSET(bar, x) ((x) << ((bar)->bitsize - 2)) argument
101 #define NFP_PCIE_P2C_GENERAL_TOKEN_OFFSET(bar, x) ((x) << ((bar)->bitsize - 4)) argument
102 #define NFP_PCIE_P2C_GENERAL_SIZE(bar) (1 << ((bar)->bitsize - 4)) argument
150 struct nfp_bar bar[NFP_PCI_BAR_MAX]; member
174 static u32 nfp_bar_maptype(struct nfp_bar *bar) in nfp_bar_maptype() argument
176 return NFP_PCIE_BAR_PCIE2CPP_MapType_of(bar->barcfg); in nfp_bar_maptype()
179 static resource_size_t nfp_bar_resource_len(struct nfp_bar *bar) in nfp_bar_resource_len() argument
181 return pci_resource_len(bar->nfp->pdev, (bar->index / 8) * 2) / 8; in nfp_bar_resource_len()
184 static resource_size_t nfp_bar_resource_start(struct nfp_bar *bar) in nfp_bar_resource_start() argument
186 return pci_resource_start(bar->nfp->pdev, (bar->index / 8) * 2) in nfp_bar_resource_start()
187 + nfp_bar_resource_len(bar) * (bar->index & 7); in nfp_bar_resource_start()
194 compute_bar(const struct nfp6000_pcie *nfp, const struct nfp_bar *bar, in compute_bar() argument
223 u64 mask = ~(NFP_PCIE_P2C_FIXED_SIZE(bar) - 1); in compute_bar()
237 u64 mask = ~(NFP_PCIE_P2C_BULK_SIZE(bar) - 1); in compute_bar()
253 if (bar->bitsize < bitsize) in compute_bar()
268 nfp6000_bar_write(struct nfp6000_pcie *nfp, struct nfp_bar *bar, u32 newcfg) in nfp6000_bar_write() argument
272 xbar = NFP_PCIE_P2C_EXPBAR_OFFSET(bar->index); in nfp6000_bar_write()
283 bar->barcfg = newcfg; in nfp6000_bar_write()
289 reconfigure_bar(struct nfp6000_pcie *nfp, struct nfp_bar *bar, in reconfigure_bar() argument
296 err = compute_bar(nfp, bar, &newcfg, &newbase, in reconfigure_bar()
301 bar->base = newbase; in reconfigure_bar()
303 return nfp6000_bar_write(nfp, bar, newcfg); in reconfigure_bar()
307 static int matching_bar(struct nfp_bar *bar, u32 tgt, u32 act, u32 tok, in matching_bar() argument
314 maptype = NFP_PCIE_BAR_PCIE2CPP_MapType_of(bar->barcfg); in matching_bar()
315 bartgt = NFP_PCIE_BAR_PCIE2CPP_Target_BaseAddress_of(bar->barcfg); in matching_bar()
316 bartok = NFP_PCIE_BAR_PCIE2CPP_Token_BaseAddress_of(bar->barcfg); in matching_bar()
317 baract = NFP_PCIE_BAR_PCIE2CPP_Action_BaseAddress_of(bar->barcfg); in matching_bar()
319 barwidth = NFP_PCIE_BAR_PCIE2CPP_LengthSelect_of(bar->barcfg); in matching_bar()
358 bar->base <= offset && in matching_bar()
359 (bar->base + (1 << bar->bitsize)) >= (offset + size)) in matching_bar()
373 struct nfp_bar *bar = &nfp->bar[n]; in find_matching_bar() local
375 if (matching_bar(bar, tgt, act, tok, offset, size, width)) in find_matching_bar()
391 const struct nfp_bar *bar = &nfp->bar[n]; in find_unused_bar_noblock() local
394 if (!bar->bitsize) in find_unused_bar_noblock()
398 err = compute_bar(nfp, bar, NULL, NULL, in find_unused_bar_noblock()
403 if (!atomic_read(&bar->refcnt)) in find_unused_bar_noblock()
435 static void nfp_bar_get(struct nfp6000_pcie *nfp, struct nfp_bar *bar) in nfp_bar_get() argument
437 atomic_inc(&bar->refcnt); in nfp_bar_get()
440 static void nfp_bar_put(struct nfp6000_pcie *nfp, struct nfp_bar *bar) in nfp_bar_put() argument
442 if (atomic_dec_and_test(&bar->refcnt)) in nfp_bar_put()
471 nfp_bar_get(nfp, &nfp->bar[barnum]); in nfp_alloc_bar()
494 nfp_bar_get(nfp, &nfp->bar[barnum]); in nfp_alloc_bar()
495 retval = reconfigure_bar(nfp, &nfp->bar[barnum], in nfp_alloc_bar()
498 nfp_bar_put(nfp, &nfp->bar[barnum]); in nfp_alloc_bar()
561 struct nfp_bar *bar; in enable_bars() local
569 bar = &nfp->bar[0]; in enable_bars()
570 for (i = 0; i < ARRAY_SIZE(nfp->bar); i++, bar++) { in enable_bars()
577 bar--; in enable_bars()
581 bar->resource = res; in enable_bars()
582 bar->barcfg = 0; in enable_bars()
584 bar->nfp = nfp; in enable_bars()
585 bar->index = i; in enable_bars()
586 bar->mask = nfp_bar_resource_len(bar) - 1; in enable_bars()
587 bar->bitsize = fls(bar->mask); in enable_bars()
588 bar->base = 0; in enable_bars()
589 bar->iomem = NULL; in enable_bars()
592 nfp->bars = bar - &nfp->bar[0]; in enable_bars()
609 bar = &nfp->bar[0]; in enable_bars()
610 if (nfp_bar_resource_len(bar) >= NFP_PCI_MIN_MAP_SIZE) in enable_bars()
611 bar->iomem = ioremap(nfp_bar_resource_start(bar), in enable_bars()
612 nfp_bar_resource_len(bar)); in enable_bars()
613 if (bar->iomem) { in enable_bars()
617 atomic_inc(&bar->refcnt); in enable_bars()
620 nfp6000_bar_write(nfp, bar, barcfg_msix_general); in enable_bars()
622 nfp->expl.data = bar->iomem + NFP_PCIE_SRAM + in enable_bars()
628 nfp->iomem.csr = bar->iomem + NFP_PCIE_BAR(pf); in enable_bars()
633 nfp->iomem.csr = bar->iomem + NFP_PCIE_BAR(0); in enable_bars()
641 nfp->iomem.em = bar->iomem + NFP_PCIE_EM; in enable_bars()
661 bar = &nfp->bar[1]; in enable_bars()
663 atomic_inc(&bar->refcnt); in enable_bars()
666 nfp6000_bar_write(nfp, bar, barcfg_msix_xpb); in enable_bars()
677 bar = &nfp->bar[4 + i]; in enable_bars()
678 bar->iomem = ioremap(nfp_bar_resource_start(bar), in enable_bars()
679 nfp_bar_resource_len(bar)); in enable_bars()
680 if (bar->iomem) { in enable_bars()
683 atomic_inc(&bar->refcnt); in enable_bars()
686 nfp->expl.group[i].bitsize = bar->bitsize; in enable_bars()
687 nfp->expl.group[i].addr = bar->iomem; in enable_bars()
688 nfp6000_bar_write(nfp, bar, barcfg_explicit[i]); in enable_bars()
693 nfp->iomem.expl[i] = bar->iomem; in enable_bars()
697 sort(&nfp->bar[0], nfp->bars, sizeof(nfp->bar[0]), in enable_bars()
705 if (nfp->bar[0].iomem) in enable_bars()
706 iounmap(nfp->bar[0].iomem); in enable_bars()
712 struct nfp_bar *bar = &nfp->bar[0]; in disable_bars() local
715 for (n = 0; n < nfp->bars; n++, bar++) { in disable_bars()
716 if (bar->iomem) { in disable_bars()
717 iounmap(bar->iomem); in disable_bars()
718 bar->iomem = NULL; in disable_bars()
730 struct nfp_bar *bar; member
740 int bar; member
771 priv->width.bar = priv->width.read; in nfp6000_area_init()
773 priv->width.bar = priv->width.write; in nfp6000_area_init()
776 priv->bar = NULL; in nfp6000_area_init()
815 if (priv->bar) { in nfp6000_area_acquire()
822 priv->offset, priv->size, priv->width.bar, 1); in nfp6000_area_acquire()
828 priv->bar = &nfp->bar[barnum]; in nfp6000_area_acquire()
831 if (nfp_bar_maptype(priv->bar) == in nfp6000_area_acquire()
834 (NFP_PCIE_P2C_GENERAL_SIZE(priv->bar) - 1); in nfp6000_area_acquire()
836 priv->bar, priv->target); in nfp6000_area_acquire()
838 priv->bar, priv->token); in nfp6000_area_acquire()
840 priv->bar_offset = priv->offset & priv->bar->mask; in nfp6000_area_acquire()
848 priv->phys = nfp_bar_resource_start(priv->bar) + priv->bar_offset; in nfp6000_area_acquire()
855 if (priv->bar->iomem) in nfp6000_area_acquire()
856 priv->iomem = priv->bar->iomem + priv->bar_offset; in nfp6000_area_acquire()
863 (int)priv->size, priv->bar->index); in nfp6000_area_acquire()
873 nfp_bar_put(nfp, priv->bar); in nfp6000_area_acquire()
874 priv->bar = NULL; in nfp6000_area_acquire()
887 if (!priv->bar->iomem) in nfp6000_area_release()
890 nfp_bar_put(nfp, priv->bar); in nfp6000_area_release()
892 priv->bar = NULL; in nfp6000_area_release()
918 return priv->bar->resource; in nfp6000_area_resource()
957 if (WARN_ON(!priv->bar)) in nfp6000_area_read()
1020 if (WARN_ON(!priv->bar)) in nfp6000_area_write()
1054 } bar; member
1078 priv->bar.group = i; in nfp6000_explicit_acquire()
1079 priv->bar.area = j; in nfp6000_explicit_acquire()
1082 data_offset = (priv->bar.group << 9) + in nfp6000_explicit_acquire()
1083 (priv->bar.area << 7); in nfp6000_explicit_acquire()
1086 (priv->bar.area << priv->bitsize); in nfp6000_explicit_acquire()
1104 nfp->expl.group[priv->bar.group].free[priv->bar.area] = true; in nfp6000_explicit_release()
1144 ((priv->bar.group * 4 + priv->bar.area) << 1); in nfp6000_explicit_do()
1153 (priv->bar.group << 9) + (priv->bar.area << 7); in nfp6000_explicit_do()
1174 NFP_PCIE_BAR_EXPLICIT_BAR0(priv->bar.group, in nfp6000_explicit_do()
1175 priv->bar.area)); in nfp6000_explicit_do()
1177 NFP_PCIE_BAR_EXPLICIT_BAR1(priv->bar.group, in nfp6000_explicit_do()
1178 priv->bar.area)); in nfp6000_explicit_do()
1180 NFP_PCIE_BAR_EXPLICIT_BAR2(priv->bar.group, in nfp6000_explicit_do()
1181 priv->bar.area)); in nfp6000_explicit_do()
1184 NFP_PCIE_BAR_EXPLICIT_BAR0(priv->bar.group, in nfp6000_explicit_do()
1185 priv->bar.area)); in nfp6000_explicit_do()
1187 NFP_PCIE_BAR_EXPLICIT_BAR1(priv->bar.group, in nfp6000_explicit_do()
1188 priv->bar.area)); in nfp6000_explicit_do()
1190 NFP_PCIE_BAR_EXPLICIT_BAR2(priv->bar.group, in nfp6000_explicit_do()
1191 priv->bar.area)); in nfp6000_explicit_do()
1195 priv->bar.group, priv->bar.area), in nfp6000_explicit_do()
1200 priv->bar.group, priv->bar.area), in nfp6000_explicit_do()
1205 priv->bar.group, priv->bar.area), in nfp6000_explicit_do()