Lines Matching refs:link
100 struct acpi_pci_link *link = context; in acpi_pci_link_check_possible() local
124 link->irq.possible[i] = p->interrupts[i]; in acpi_pci_link_check_possible()
125 link->irq.possible_count++; in acpi_pci_link_check_possible()
127 link->irq.triggering = p->triggering; in acpi_pci_link_check_possible()
128 link->irq.polarity = p->polarity; in acpi_pci_link_check_possible()
129 link->irq.resource_type = ACPI_RESOURCE_TYPE_IRQ; in acpi_pci_link_check_possible()
150 link->irq.possible[i] = p->interrupts[i]; in acpi_pci_link_check_possible()
151 link->irq.possible_count++; in acpi_pci_link_check_possible()
153 link->irq.triggering = p->triggering; in acpi_pci_link_check_possible()
154 link->irq.polarity = p->polarity; in acpi_pci_link_check_possible()
155 link->irq.resource_type = ACPI_RESOURCE_TYPE_EXTENDED_IRQ; in acpi_pci_link_check_possible()
167 static int acpi_pci_link_get_possible(struct acpi_pci_link *link) in acpi_pci_link_get_possible() argument
171 status = acpi_walk_resources(link->device->handle, METHOD_NAME__PRS, in acpi_pci_link_get_possible()
172 acpi_pci_link_check_possible, link); in acpi_pci_link_get_possible()
180 link->irq.possible_count)); in acpi_pci_link_get_possible()
242 static int acpi_pci_link_get_current(struct acpi_pci_link *link) in acpi_pci_link_get_current() argument
248 link->irq.active = 0; in acpi_pci_link_get_current()
253 result = acpi_bus_get_status(link->device); in acpi_pci_link_get_current()
259 if (!link->device->status.enabled) { in acpi_pci_link_get_current()
269 status = acpi_walk_resources(link->device->handle, METHOD_NAME__CRS, in acpi_pci_link_get_current()
282 link->irq.active = irq; in acpi_pci_link_get_current()
284 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Link at IRQ %d \n", link->irq.active)); in acpi_pci_link_get_current()
290 static int acpi_pci_link_set(struct acpi_pci_link *link, int irq) in acpi_pci_link_set() argument
310 switch (link->irq.resource_type) { in acpi_pci_link_set()
314 resource->res.data.irq.triggering = link->irq.triggering; in acpi_pci_link_set()
316 link->irq.polarity; in acpi_pci_link_set()
317 if (link->irq.triggering == ACPI_EDGE_SENSITIVE) in acpi_pci_link_set()
332 link->irq.triggering; in acpi_pci_link_set()
334 link->irq.polarity; in acpi_pci_link_set()
335 if (link->irq.triggering == ACPI_EDGE_SENSITIVE) in acpi_pci_link_set()
345 printk(KERN_ERR PREFIX "Invalid Resource_type %d\n", link->irq.resource_type); in acpi_pci_link_set()
354 status = acpi_set_current_resources(link->device->handle, &buffer); in acpi_pci_link_set()
364 result = acpi_bus_get_status(link->device); in acpi_pci_link_set()
369 if (!link->device->status.enabled) { in acpi_pci_link_set()
372 acpi_device_name(link->device), in acpi_pci_link_set()
373 acpi_device_bid(link->device)); in acpi_pci_link_set()
377 result = acpi_pci_link_get_current(link); in acpi_pci_link_set()
386 if (link->irq.active != irq) { in acpi_pci_link_set()
393 acpi_device_name(link->device), in acpi_pci_link_set()
394 acpi_device_bid(link->device), link->irq.active, irq); in acpi_pci_link_set()
395 link->irq.active = irq; in acpi_pci_link_set()
398 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Set IRQ %d\n", link->irq.active)); in acpi_pci_link_set()
472 struct acpi_pci_link *link; in acpi_irq_penalty_init() local
478 list_for_each_entry(link, &acpi_link_list, list) { in acpi_irq_penalty_init()
484 if (link->irq.possible_count) { in acpi_irq_penalty_init()
487 link->irq.possible_count; in acpi_irq_penalty_init()
489 for (i = 0; i < link->irq.possible_count; i++) { in acpi_irq_penalty_init()
490 if (link->irq.possible[i] < ACPI_MAX_ISA_IRQ) in acpi_irq_penalty_init()
491 acpi_irq_penalty[link->irq. in acpi_irq_penalty_init()
496 } else if (link->irq.active) { in acpi_irq_penalty_init()
497 acpi_irq_penalty[link->irq.active] += in acpi_irq_penalty_init()
507 static int acpi_pci_link_allocate(struct acpi_pci_link *link) in acpi_pci_link_allocate() argument
512 if (link->irq.initialized) { in acpi_pci_link_allocate()
513 if (link->refcnt == 0) in acpi_pci_link_allocate()
515 acpi_pci_link_set(link, link->irq.active); in acpi_pci_link_allocate()
522 for (i = 0; i < link->irq.possible_count; ++i) { in acpi_pci_link_allocate()
523 if (link->irq.active == link->irq.possible[i]) in acpi_pci_link_allocate()
529 if (i == link->irq.possible_count) { in acpi_pci_link_allocate()
532 " in _PRS\n", link->irq.active); in acpi_pci_link_allocate()
533 link->irq.active = 0; in acpi_pci_link_allocate()
539 if (link->irq.active) in acpi_pci_link_allocate()
540 irq = link->irq.active; in acpi_pci_link_allocate()
542 irq = link->irq.possible[link->irq.possible_count - 1]; in acpi_pci_link_allocate()
544 if (acpi_irq_balance || !link->irq.active) { in acpi_pci_link_allocate()
549 for (i = (link->irq.possible_count - 1); i >= 0; i--) { in acpi_pci_link_allocate()
551 acpi_irq_penalty[link->irq.possible[i]]) in acpi_pci_link_allocate()
552 irq = link->irq.possible[i]; in acpi_pci_link_allocate()
558 acpi_device_name(link->device), in acpi_pci_link_allocate()
559 acpi_device_bid(link->device)); in acpi_pci_link_allocate()
564 if (acpi_pci_link_set(link, irq)) { in acpi_pci_link_allocate()
567 acpi_device_name(link->device), in acpi_pci_link_allocate()
568 acpi_device_bid(link->device)); in acpi_pci_link_allocate()
571 acpi_irq_penalty[link->irq.active] += PIRQ_PENALTY_PCI_USING; in acpi_pci_link_allocate()
573 acpi_device_name(link->device), in acpi_pci_link_allocate()
574 acpi_device_bid(link->device), link->irq.active); in acpi_pci_link_allocate()
577 link->irq.initialized = 1; in acpi_pci_link_allocate()
591 struct acpi_pci_link *link; in acpi_pci_link_allocate_irq() local
599 link = acpi_driver_data(device); in acpi_pci_link_allocate_irq()
600 if (!link) { in acpi_pci_link_allocate_irq()
612 if (acpi_pci_link_allocate(link)) { in acpi_pci_link_allocate_irq()
617 if (!link->irq.active) { in acpi_pci_link_allocate_irq()
622 link->refcnt++; in acpi_pci_link_allocate_irq()
626 *triggering = link->irq.triggering; in acpi_pci_link_allocate_irq()
628 *polarity = link->irq.polarity; in acpi_pci_link_allocate_irq()
630 *name = acpi_device_bid(link->device); in acpi_pci_link_allocate_irq()
633 acpi_device_bid(link->device))); in acpi_pci_link_allocate_irq()
634 return (link->irq.active); in acpi_pci_link_allocate_irq()
644 struct acpi_pci_link *link; in acpi_pci_link_free_irq() local
653 link = acpi_driver_data(device); in acpi_pci_link_free_irq()
654 if (!link) { in acpi_pci_link_free_irq()
660 if (!link->irq.initialized) { in acpi_pci_link_free_irq()
675 link->refcnt--; in acpi_pci_link_free_irq()
679 acpi_device_bid(link->device))); in acpi_pci_link_free_irq()
681 if (link->refcnt == 0) in acpi_pci_link_free_irq()
682 acpi_evaluate_object(link->device->handle, "_DIS", NULL, NULL); in acpi_pci_link_free_irq()
685 return (link->irq.active); in acpi_pci_link_free_irq()
696 struct acpi_pci_link *link; in acpi_pci_link_add() local
700 link = kzalloc(sizeof(struct acpi_pci_link), GFP_KERNEL); in acpi_pci_link_add()
701 if (!link) in acpi_pci_link_add()
704 link->device = device; in acpi_pci_link_add()
707 device->driver_data = link; in acpi_pci_link_add()
710 result = acpi_pci_link_get_possible(link); in acpi_pci_link_add()
715 acpi_pci_link_get_current(link); in acpi_pci_link_add()
719 for (i = 0; i < link->irq.possible_count; i++) { in acpi_pci_link_add()
720 if (link->irq.active == link->irq.possible[i]) { in acpi_pci_link_add()
721 printk(KERN_CONT " *%d", link->irq.possible[i]); in acpi_pci_link_add()
724 printk(KERN_CONT " %d", link->irq.possible[i]); in acpi_pci_link_add()
730 printk(KERN_CONT " *%d", link->irq.active); in acpi_pci_link_add()
732 if (!link->device->status.enabled) in acpi_pci_link_add()
737 list_add_tail(&link->list, &acpi_link_list); in acpi_pci_link_add()
745 kfree(link); in acpi_pci_link_add()
750 static int acpi_pci_link_resume(struct acpi_pci_link *link) in acpi_pci_link_resume() argument
752 if (link->refcnt && link->irq.active && link->irq.initialized) in acpi_pci_link_resume()
753 return (acpi_pci_link_set(link, link->irq.active)); in acpi_pci_link_resume()
760 struct acpi_pci_link *link; in irqrouter_resume() local
762 list_for_each_entry(link, &acpi_link_list, list) { in irqrouter_resume()
763 acpi_pci_link_resume(link); in irqrouter_resume()
769 struct acpi_pci_link *link; in acpi_pci_link_remove() local
771 link = acpi_driver_data(device); in acpi_pci_link_remove()
774 list_del(&link->list); in acpi_pci_link_remove()
777 kfree(link); in acpi_pci_link_remove()