Lines Matching refs:ioda
120 phb->ioda.pe_array[pe_no].phb = phb;
121 phb->ioda.pe_array[pe_no].pe_number = pe_no;
122 phb->ioda.pe_array[pe_no].dma_setup_done = false;
135 return &phb->ioda.pe_array[pe_no];
140 if (!(pe_no >= 0 && pe_no < phb->ioda.total_pe_num)) {
146 mutex_lock(&phb->ioda.pe_alloc_mutex);
147 if (test_and_set_bit(pe_no, phb->ioda.pe_alloc))
150 mutex_unlock(&phb->ioda.pe_alloc_mutex);
160 mutex_lock(&phb->ioda.pe_alloc_mutex);
163 for (pe = phb->ioda.total_pe_num - 1; pe >= 0; pe--) {
164 if (test_bit(pe, phb->ioda.pe_alloc)) {
177 set_bit(i, phb->ioda.pe_alloc);
180 ret = &phb->ioda.pe_array[pe];
183 mutex_unlock(&phb->ioda.pe_alloc_mutex);
195 mutex_lock(&phb->ioda.pe_alloc_mutex);
196 clear_bit(pe_num, phb->ioda.pe_alloc);
197 mutex_unlock(&phb->ioda.pe_alloc_mutex);
210 phb->ioda.m64_bar_idx,
211 phb->ioda.m64_base,
213 phb->ioda.m64_size);
222 phb->ioda.m64_bar_idx,
234 if (phb->ioda.reserved_pe_idx == 0)
235 r->start += (2 * phb->ioda.m64_segsize);
236 else if (phb->ioda.reserved_pe_idx == (phb->ioda.total_pe_num - 1))
237 r->end -= (2 * phb->ioda.m64_segsize);
240 phb->ioda.reserved_pe_idx);
246 rc, desc, phb->ioda.m64_bar_idx);
249 phb->ioda.m64_bar_idx,
262 base = phb->ioda.m64_base;
263 sgsz = phb->ioda.m64_segsize;
307 size = ALIGN(phb->ioda.total_pe_num / 8, sizeof(unsigned long));
323 if (bitmap_empty(pe_alloc, phb->ioda.total_pe_num)) {
334 while ((i = find_next_bit(pe_alloc, phb->ioda.total_pe_num, i + 1)) <
335 phb->ioda.total_pe_num) {
336 pe = &phb->ioda.pe_array[i];
338 phb->ioda.m64_segmap[pe->pe_number] = pe->pe_number;
412 phb->ioda.m64_size = resource_size(res);
413 phb->ioda.m64_segsize = phb->ioda.m64_size / phb->ioda.total_pe_num;
414 phb->ioda.m64_base = pci_addr;
422 phb->ioda.m64_bar_alloc = (unsigned long)-1;
426 phb->ioda.m64_bar_idx = m64_range[0] + m64_range[1];
428 pr_info(" Using M64 #%d as default window\n", phb->ioda.m64_bar_idx);
432 clear_bit(i, &phb->ioda.m64_bar_alloc);
443 struct pnv_ioda_pe *pe = &phb->ioda.pe_array[pe_no];
487 pe = &phb->ioda.pe_array[pe_no];
529 if (pe_no < 0 || pe_no >= phb->ioda.total_pe_num)
536 pe = &phb->ioda.pe_array[pe_no];
585 int pe_number = phb->ioda.pe_rmap[bdfn];
590 return &phb->ioda.pe_array[pe_number];
602 return &phb->ioda.pe_array[pdn->pe_number];
697 parent = &phb->ioda.pe_array[pdn->pe_number];
785 phb->ioda.pe_rmap[rid] = IODA_INVALID_PE;
867 phb->ioda.pe_rmap[rid] = pe->pe_number;
920 mutex_lock(&phb->ioda.pe_list_mutex);
921 list_add_tail(&pe->list, &phb->ioda.pe_list);
922 mutex_unlock(&phb->ioda.pe_list_mutex);
942 pe_num = phb->ioda.pe_rmap[bus->number << 8];
944 pe = &phb->ioda.pe_array[pe_num];
950 pe = &phb->ioda.pe_array[phb->ioda.root_pe_idx];
988 list_add_tail(&pe->list, &phb->ioda.pe_list);
1128 pe = &phb->ioda.pe_array[pdn->pe_number];
1427 if (window_size > pe->phb->ioda.m32_pci_base) {
1428 res_start = pe->phb->ioda.m32_pci_base >> tbl->it_page_shift;
1598 phb->ioda.m32_pci_base);
1602 pe->table_group.tce32_size = phb->ioda.m32_pci_base;
1663 if (!phb->ioda.irq_chip_init) {
1670 phb->ioda.irq_chip_init = 1;
1671 phb->ioda.irq_chip = *ichip;
1672 phb->ioda.irq_chip.irq_eoi = pnv_ioda2_msi_eoi;
1674 irq_set_chip(virq, &phb->ioda.irq_chip);
1994 region.start = res->start - phb->ioda.io_pci_base;
1995 region.end = res->end - phb->ioda.io_pci_base;
1996 index = region.start / phb->ioda.io_segsize;
1998 while (index < phb->ioda.total_pe_num &&
2000 phb->ioda.io_segmap[index] = pe->pe_number;
2009 region.start += phb->ioda.io_segsize;
2016 phb->ioda.m32_pci_base;
2019 phb->ioda.m32_pci_base;
2020 index = region.start / phb->ioda.m32_segsize;
2022 while (index < phb->ioda.total_pe_num &&
2024 phb->ioda.m32_segmap[index] = pe->pe_number;
2033 region.start += phb->ioda.m32_segsize;
2098 for (pe_num = 0; pe_num < phb->ioda.total_pe_num; pe_num++) {
2099 struct pnv_ioda_pe *pe = &phb->ioda.pe_array[pe_num];
2101 if (!test_bit(pe_num, phb->ioda.pe_alloc))
2224 if (phb->ioda.m64_segsize && pnv_pci_is_m64_flags(type))
2225 return phb->ioda.m64_segsize;
2227 return phb->ioda.m32_segsize;
2229 return phb->ioda.io_segsize;
2266 phb->ioda.m64_segsize)
2384 for (idx = 0; idx < phb->ioda.total_pe_num; idx++) {
2389 phb->ioda.reserved_pe_idx, win, 0, idx);
2405 phb->ioda.m32_segmap);
2416 mutex_lock(&phb->ioda.pe_list_mutex);
2418 mutex_unlock(&phb->ioda.pe_list_mutex);
2447 if (phb->ioda.root_pe_idx == pe->pe_number)
2484 pe = &phb->ioda.pe_array[pdn->pe_number];
2505 list_for_each_entry(pe, &phb->ioda.pe_list, list) {
2620 mutex_init(&phb->ioda.pe_alloc_mutex);
2654 phb->ioda.total_pe_num = 1;
2657 phb->ioda.total_pe_num = be32_to_cpup(prop32);
2660 phb->ioda.reserved_pe_idx = be32_to_cpup(prop32);
2663 for (segno = 0; segno < ARRAY_SIZE(phb->ioda.pe_rmap); segno++)
2664 phb->ioda.pe_rmap[segno] = IODA_INVALID_PE;
2669 phb->ioda.m32_size = resource_size(&hose->mem_resources[0]);
2671 phb->ioda.m32_size += 0x10000;
2673 phb->ioda.m32_segsize = phb->ioda.m32_size / phb->ioda.total_pe_num;
2674 phb->ioda.m32_pci_base = hose->mem_resources[0].start - hose->mem_offset[0];
2675 phb->ioda.io_size = hose->pci_io_size;
2676 phb->ioda.io_segsize = phb->ioda.io_size / phb->ioda.total_pe_num;
2677 phb->ioda.io_pci_base = 0; /* XXX calculate this ? */
2680 size = ALIGN(max_t(unsigned, phb->ioda.total_pe_num, 8) / 8,
2683 size += phb->ioda.total_pe_num * sizeof(phb->ioda.m64_segmap[0]);
2685 size += phb->ioda.total_pe_num * sizeof(phb->ioda.m32_segmap[0]);
2687 size += phb->ioda.total_pe_num * sizeof(struct pnv_ioda_pe);
2692 phb->ioda.pe_alloc = aux;
2693 phb->ioda.m64_segmap = aux + m64map_off;
2694 phb->ioda.m32_segmap = aux + m32map_off;
2695 for (segno = 0; segno < phb->ioda.total_pe_num; segno++) {
2696 phb->ioda.m64_segmap[segno] = IODA_INVALID_PE;
2697 phb->ioda.m32_segmap[segno] = IODA_INVALID_PE;
2699 phb->ioda.pe_array = aux + pemap_off;
2706 pnv_ioda_reserve_pe(phb, phb->ioda.reserved_pe_idx);
2707 if (phb->ioda.reserved_pe_idx == 0) {
2708 phb->ioda.root_pe_idx = 1;
2709 pnv_ioda_reserve_pe(phb, phb->ioda.root_pe_idx);
2710 } else if (phb->ioda.reserved_pe_idx == (phb->ioda.total_pe_num - 1)) {
2711 phb->ioda.root_pe_idx = phb->ioda.reserved_pe_idx - 1;
2712 pnv_ioda_reserve_pe(phb, phb->ioda.root_pe_idx);
2716 phb->ioda.root_pe_idx = root_pe->pe_number;
2719 INIT_LIST_HEAD(&phb->ioda.pe_list);
2720 mutex_init(&phb->ioda.pe_list_mutex);
2732 phb->ioda.total_pe_num, phb->ioda.reserved_pe_idx,
2733 phb->ioda.m32_size, phb->ioda.m32_segsize);
2734 if (phb->ioda.m64_size)
2736 phb->ioda.m64_size, phb->ioda.m64_segsize);
2737 if (phb->ioda.io_size)
2739 phb->ioda.io_size, phb->ioda.io_segsize);