@@ -438,16 +438,15 @@ static int acpi_pci_link_set(struct acpi_pci_link *link, int irq)
438
438
* enabled system.
439
439
*/
440
440
441
- #define ACPI_MAX_IRQS 256
442
- #define ACPI_MAX_ISA_IRQ 16
441
+ #define ACPI_MAX_ISA_IRQS 16
443
442
444
443
#define PIRQ_PENALTY_PCI_POSSIBLE (16*16)
445
444
#define PIRQ_PENALTY_PCI_USING (16*16*16)
446
445
#define PIRQ_PENALTY_ISA_TYPICAL (16*16*16*16)
447
446
#define PIRQ_PENALTY_ISA_USED (16*16*16*16*16)
448
447
#define PIRQ_PENALTY_ISA_ALWAYS (16*16*16*16*16*16)
449
448
450
- static int acpi_irq_penalty [ ACPI_MAX_IRQS ] = {
449
+ static int acpi_isa_irq_penalty [ ACPI_MAX_ISA_IRQS ] = {
451
450
PIRQ_PENALTY_ISA_ALWAYS , /* IRQ0 timer */
452
451
PIRQ_PENALTY_ISA_ALWAYS , /* IRQ1 keyboard */
453
452
PIRQ_PENALTY_ISA_ALWAYS , /* IRQ2 cascade */
@@ -500,8 +499,8 @@ static int acpi_irq_get_penalty(int irq)
500
499
{
501
500
int penalty = 0 ;
502
501
503
- if (irq < ACPI_MAX_ISA_IRQ )
504
- penalty += acpi_irq_penalty [irq ];
502
+ if (irq < ACPI_MAX_ISA_IRQS )
503
+ penalty += acpi_isa_irq_penalty [irq ];
505
504
506
505
/*
507
506
* Penalize IRQ used by ACPI SCI. If ACPI SCI pin attributes conflict
@@ -541,14 +540,15 @@ int __init acpi_irq_penalty_init(void)
541
540
link -> irq .possible_count ;
542
541
543
542
for (i = 0 ; i < link -> irq .possible_count ; i ++ ) {
544
- if (link -> irq .possible [i ] < ACPI_MAX_ISA_IRQ )
545
- acpi_irq_penalty [link -> irq .
543
+ if (link -> irq .possible [i ] < ACPI_MAX_ISA_IRQS )
544
+ acpi_isa_irq_penalty [link -> irq .
546
545
possible [i ]] +=
547
546
penalty ;
548
547
}
549
548
550
- } else if (link -> irq .active ) {
551
- acpi_irq_penalty [link -> irq .active ] +=
549
+ } else if (link -> irq .active &&
550
+ (link -> irq .active < ACPI_MAX_ISA_IRQS )) {
551
+ acpi_isa_irq_penalty [link -> irq .active ] +=
552
552
PIRQ_PENALTY_PCI_POSSIBLE ;
553
553
}
554
554
}
@@ -831,7 +831,7 @@ static void acpi_pci_link_remove(struct acpi_device *device)
831
831
}
832
832
833
833
/*
834
- * modify acpi_irq_penalty [] from cmdline
834
+ * modify acpi_isa_irq_penalty [] from cmdline
835
835
*/
836
836
static int __init acpi_irq_penalty_update (char * str , int used )
837
837
{
@@ -840,24 +840,24 @@ static int __init acpi_irq_penalty_update(char *str, int used)
840
840
for (i = 0 ; i < 16 ; i ++ ) {
841
841
int retval ;
842
842
int irq ;
843
+ int new_penalty ;
843
844
844
845
retval = get_option (& str , & irq );
845
846
846
847
if (!retval )
847
848
break ; /* no number found */
848
849
849
- if (irq < 0 )
850
- continue ;
851
-
852
- if (irq >= ARRAY_SIZE (acpi_irq_penalty ))
850
+ /* see if this is a ISA IRQ */
851
+ if ((irq < 0 ) || (irq >= ACPI_MAX_ISA_IRQS ))
853
852
continue ;
854
853
855
854
if (used )
856
- acpi_irq_penalty [ irq ] = acpi_irq_get_penalty (irq ) +
857
- PIRQ_PENALTY_ISA_USED ;
855
+ new_penalty = acpi_irq_get_penalty (irq ) +
856
+ PIRQ_PENALTY_ISA_USED ;
858
857
else
859
- acpi_irq_penalty [ irq ] = 0 ;
858
+ new_penalty = 0 ;
860
859
860
+ acpi_isa_irq_penalty [irq ] = new_penalty ;
861
861
if (retval != 2 ) /* no next number */
862
862
break ;
863
863
}
@@ -873,14 +873,14 @@ static int __init acpi_irq_penalty_update(char *str, int used)
873
873
*/
874
874
void acpi_penalize_isa_irq (int irq , int active )
875
875
{
876
- if (irq >= 0 && irq < ARRAY_SIZE (acpi_irq_penalty ))
877
- acpi_irq_penalty [irq ] = acpi_irq_get_penalty (irq ) +
876
+ if (( irq >= 0 ) && ( irq < ARRAY_SIZE (acpi_isa_irq_penalty ) ))
877
+ acpi_isa_irq_penalty [irq ] = acpi_irq_get_penalty (irq ) +
878
878
active ? PIRQ_PENALTY_ISA_USED : PIRQ_PENALTY_PCI_USING ;
879
879
}
880
880
881
881
bool acpi_isa_irq_available (int irq )
882
882
{
883
- return irq >= 0 && (irq >= ARRAY_SIZE (acpi_irq_penalty ) ||
883
+ return irq >= 0 && (irq >= ARRAY_SIZE (acpi_isa_irq_penalty ) ||
884
884
acpi_irq_get_penalty (irq ) < PIRQ_PENALTY_ISA_ALWAYS );
885
885
}
886
886
0 commit comments