Lines Matching defs:tioca_kern
37 tioca_gart_init(struct tioca_kernel *tioca_kern)
45 tioca_common = tioca_kern->ca_common;
48 if (list_empty(tioca_kern->ca_devices))
102 tioca_kern->ca_ap_pagesize = 16384;
105 tioca_kern->ca_ap_pagesize = 4096;
108 tioca_kern->ca_ap_size = CA_APERATURE_SIZE;
109 tioca_kern->ca_ap_bus_base = CA_APERATURE_BASE;
110 tioca_kern->ca_gart_entries =
111 tioca_kern->ca_ap_size / tioca_kern->ca_ap_pagesize;
114 ap_reg |= tioca_kern->ca_ap_bus_base;
120 tioca_kern->ca_gart_size = tioca_kern->ca_gart_entries * sizeof(u64);
122 alloc_pages_node(tioca_kern->ca_closest_node,
124 get_order(tioca_kern->ca_gart_size));
130 tioca_kern->ca_gart_size,
131 get_order(tioca_kern->ca_gart_size));
135 tioca_kern->ca_gart = page_address(tmp);
136 tioca_kern->ca_gart_coretalk_addr =
137 PHYS_TO_TIODMA(virt_to_phys(tioca_kern->ca_gart));
144 tioca_kern->ca_pciap_base = CA_PCI32_MAPPED_BASE;
145 tioca_kern->ca_pciap_size = CA_PCI32_MAPPED_SIZE;
146 tioca_kern->ca_pcigart_start = offset / tioca_kern->ca_ap_pagesize;
147 tioca_kern->ca_pcigart_base =
148 tioca_kern->ca_gart_coretalk_addr + offset;
149 tioca_kern->ca_pcigart =
150 &tioca_kern->ca_gart[tioca_kern->ca_pcigart_start];
151 tioca_kern->ca_pcigart_entries =
152 tioca_kern->ca_pciap_size / tioca_kern->ca_ap_pagesize;
153 tioca_kern->ca_pcigart_pagemap =
154 kzalloc(tioca_kern->ca_pcigart_entries / 8, GFP_KERNEL);
155 if (!tioca_kern->ca_pcigart_pagemap) {
156 free_pages((unsigned long)tioca_kern->ca_gart,
157 get_order(tioca_kern->ca_gart_size));
162 tioca_kern->ca_gfxap_base = CA_AGP_MAPPED_BASE;
163 tioca_kern->ca_gfxap_size = CA_AGP_MAPPED_SIZE;
164 tioca_kern->ca_gfxgart_start = offset / tioca_kern->ca_ap_pagesize;
165 tioca_kern->ca_gfxgart_base =
166 tioca_kern->ca_gart_coretalk_addr + offset;
167 tioca_kern->ca_gfxgart =
168 &tioca_kern->ca_gart[tioca_kern->ca_gfxgart_start];
169 tioca_kern->ca_gfxgart_entries =
170 tioca_kern->ca_gfxap_size / tioca_kern->ca_ap_pagesize;
185 tioca_kern->ca_gart_iscoherent = 1;
202 writeq(tioca_kern->ca_gart_coretalk_addr|1, &ca_base->ca_gart_ptr_table);
216 tioca_fastwrite_enable(struct tioca_kernel *tioca_kern)
224 common = tioca_kern->ca_common;
231 list_for_each_entry(pdev, tioca_kern->ca_devices, bus_list) {
248 list_for_each_entry(pdev, tioca_kern->ca_devices, bus_list) {
351 struct tioca_kernel *tioca_kern;
359 tioca_kern = (struct tioca_kernel *)tioca_common->ca_kernel_private;
365 spin_lock_irqsave(&tioca_kern->ca_lock, flags);
380 ps = tioca_kern->ca_ap_pagesize; /* will be power of 2 */
386 map = tioca_kern->ca_pcigart_pagemap;
387 mapsize = tioca_kern->ca_pcigart_entries;
397 bus_addr = tioca_kern->ca_pciap_base + (entry * ps);
402 list_add(&ca_dmamap->cad_list, &tioca_kern->ca_dmamaps);
405 tioca_kern->ca_pcigart[entry] = tioca_paddr_to_gart(xio_addr);
413 tioca_kern->ca_pcigart[entry] = tioca_paddr_to_gart(xio_addr);
418 tioca_tlbflush(tioca_kern);
421 spin_unlock_irqrestore(&tioca_kern->ca_lock, flags);
440 struct tioca_kernel *tioca_kern;
446 tioca_kern = (struct tioca_kernel *)tioca_common->ca_kernel_private;
450 if (bus_addr < tioca_kern->ca_pciap_base ||
451 bus_addr >= (tioca_kern->ca_pciap_base + tioca_kern->ca_pciap_size))
454 spin_lock_irqsave(&tioca_kern->ca_lock, flags);
456 list_for_each_entry(map, &tioca_kern->ca_dmamaps, cad_list)
465 clear_bit(entry, tioca_kern->ca_pcigart_pagemap);
466 tioca_kern->ca_pcigart[entry] = 0;
468 tioca_tlbflush(tioca_kern);
471 spin_unlock_irqrestore(&tioca_kern->ca_lock, flags);
560 struct tioca_kernel *tioca_kern;
587 tioca_kern = kzalloc(sizeof(struct tioca_kernel), GFP_KERNEL);
588 if (!tioca_kern) {
593 tioca_kern->ca_common = tioca_common;
594 spin_lock_init(&tioca_kern->ca_lock);
595 INIT_LIST_HEAD(&tioca_kern->ca_dmamaps);
596 tioca_kern->ca_closest_node =
598 tioca_common->ca_kernel_private = (u64) tioca_kern;
603 tioca_kern->ca_devices = &bus->devices;
607 if (tioca_gart_init(tioca_kern) < 0) {
608 kfree(tioca_kern);
614 list_add(&tioca_kern->ca_list, &tioca_list);
628 controller->node = tioca_kern->ca_closest_node;