• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/acpi/

Lines Matching defs:link

27  *      1. Support more than one IRQ resource entry per link device (index).
77 * If a link is initialized, we never change its active and initialized
78 * later even the link is disable. Instead, we just repick the active irq
106 * set context (link) possible list from resource list
111 struct acpi_pci_link *link = context;
135 link->irq.possible[i] = p->interrupts[i];
136 link->irq.possible_count++;
138 link->irq.triggering = p->triggering;
139 link->irq.polarity = p->polarity;
140 link->irq.resource_type = ACPI_RESOURCE_TYPE_IRQ;
161 link->irq.possible[i] = p->interrupts[i];
162 link->irq.possible_count++;
164 link->irq.triggering = p->triggering;
165 link->irq.polarity = p->polarity;
166 link->irq.resource_type = ACPI_RESOURCE_TYPE_EXTENDED_IRQ;
178 static int acpi_pci_link_get_possible(struct acpi_pci_link *link)
182 status = acpi_walk_resources(link->device->handle, METHOD_NAME__PRS,
183 acpi_pci_link_check_possible, link);
191 link->irq.possible_count));
247 * Run _CRS and set link->irq.active
253 static int acpi_pci_link_get_current(struct acpi_pci_link *link)
259 link->irq.active = 0;
263 /* Query _STA, set link->device->status */
264 result = acpi_bus_get_status(link->device);
270 if (!link->device->status.enabled) {
280 status = acpi_walk_resources(link->device->handle, METHOD_NAME__CRS,
293 link->irq.active = irq;
295 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Link at IRQ %d \n", link->irq.active));
301 static int acpi_pci_link_set(struct acpi_pci_link *link, int irq)
321 switch (link->irq.resource_type) {
325 resource->res.data.irq.triggering = link->irq.triggering;
327 link->irq.polarity;
328 if (link->irq.triggering == ACPI_EDGE_SENSITIVE)
343 link->irq.triggering;
345 link->irq.polarity;
346 if (link->irq.triggering == ACPI_EDGE_SENSITIVE)
356 printk(KERN_ERR PREFIX "Invalid Resource_type %d\n", link->irq.resource_type);
364 status = acpi_set_current_resources(link->device->handle, &buffer);
374 result = acpi_bus_get_status(link->device);
379 if (!link->device->status.enabled) {
382 acpi_device_name(link->device),
383 acpi_device_bid(link->device));
386 /* Query _CRS, set link->irq.active */
387 result = acpi_pci_link_get_current(link);
394 * set link->irq.active
396 if (link->irq.active != irq) {
403 acpi_device_name(link->device),
404 acpi_device_bid(link->device), link->irq.active, irq);
405 link->irq.active = irq;
408 ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Set IRQ %d\n", link->irq.active));
441 * Since this heuristic can't tell the difference between a link
442 * that no device will attach to, vs. a link which may be shared
482 struct acpi_pci_link *link;
488 list_for_each_entry(link, &acpi_link_list, list) {
494 if (link->irq.possible_count) {
497 link->irq.possible_count;
499 for (i = 0; i < link->irq.possible_count; i++) {
500 if (link->irq.possible[i] < ACPI_MAX_ISA_IRQ)
501 acpi_irq_penalty[link->irq.
506 } else if (link->irq.active) {
507 acpi_irq_penalty[link->irq.active] +=
518 static int acpi_pci_link_allocate(struct acpi_pci_link *link)
523 if (link->irq.initialized) {
524 if (link->refcnt == 0)
525 /* This means the link is disabled but initialized */
526 acpi_pci_link_set(link, link->irq.active);
533 for (i = 0; i < link->irq.possible_count; ++i) {
534 if (link->irq.active == link->irq.possible[i])
540 if (i == link->irq.possible_count) {
543 " in _PRS\n", link->irq.active);
544 link->irq.active = 0;
550 if (link->irq.active)
551 irq = link->irq.active;
553 irq = link->irq.possible[link->irq.possible_count - 1];
555 if (acpi_irq_balance || !link->irq.active) {
560 for (i = (link->irq.possible_count - 1); i >= 0; i--) {
562 acpi_irq_penalty[link->irq.possible[i]])
563 irq = link->irq.possible[i];
567 /* Attempt to enable the link device at this IRQ. */
568 if (acpi_pci_link_set(link, irq)) {
571 acpi_device_name(link->device),
572 acpi_device_bid(link->device));
575 acpi_irq_penalty[link->irq.active] += PIRQ_PENALTY_PCI_USING;
577 acpi_device_name(link->device),
578 acpi_device_bid(link->device), link->irq.active);
581 link->irq.initialized = 1;
595 struct acpi_pci_link *link;
599 printk(KERN_ERR PREFIX "Invalid link device\n");
603 link = acpi_driver_data(device);
604 if (!link) {
605 printk(KERN_ERR PREFIX "Invalid link context\n");
616 if (acpi_pci_link_allocate(link)) {
621 if (!link->irq.active) {
626 link->refcnt++;
630 *triggering = link->irq.triggering;
632 *polarity = link->irq.polarity;
634 *name = acpi_device_bid(link->device);
637 acpi_device_bid(link->device)));
638 return (link->irq.active);
642 * We don't change link's irq information here. After it is reenabled, we
648 struct acpi_pci_link *link;
653 printk(KERN_ERR PREFIX "Invalid link device\n");
657 link = acpi_driver_data(device);
658 if (!link) {
659 printk(KERN_ERR PREFIX "Invalid link context\n");
664 if (!link->irq.initialized) {
671 * The Link reference count allows us to _DISable an unused link
674 * which blindly restores the link state.
679 link->refcnt--;
683 acpi_device_bid(link->device)));
685 if (link->refcnt == 0)
686 acpi_evaluate_object(link->device->handle, "_DIS", NULL, NULL);
689 return (link->irq.active);
699 struct acpi_pci_link *link;
703 link = kzalloc(sizeof(struct acpi_pci_link), GFP_KERNEL);
704 if (!link)
707 link->device = device;
710 device->driver_data = link;
713 result = acpi_pci_link_get_possible(link);
717 /* query and set link->irq.active */
718 acpi_pci_link_get_current(link);
722 for (i = 0; i < link->irq.possible_count; i++) {
723 if (link->irq.active == link->irq.possible[i]) {
724 printk(" *%d", link->irq.possible[i]);
727 printk(" %d", link->irq.possible[i]);
733 printk(" *%d", link->irq.active);
735 if (!link->device->status.enabled)
740 list_add_tail(&link->list, &acpi_link_list);
748 kfree(link);
753 static int acpi_pci_link_resume(struct acpi_pci_link *link)
755 if (link->refcnt && link->irq.active && link->irq.initialized)
756 return (acpi_pci_link_set(link, link->irq.active));
763 struct acpi_pci_link *link;
765 list_for_each_entry(link, &acpi_link_list, list) {
766 acpi_pci_link_resume(link);
773 struct acpi_pci_link *link;
775 link = acpi_driver_data(device);
778 list_del(&link->list);
781 kfree(link);