Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
6d1d07e4
Commit
6d1d07e4
authored
Jul 30, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/pub/scm/linux/kernel/git/lenb/to-linus
parents
d7a465b4
adbedd34
Changes
13
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
972 additions
and
233 deletions
+972
-233
arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c
arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c
+7
-0
arch/i386/pci/acpi.c
arch/i386/pci/acpi.c
+1
-0
arch/i386/pci/common.c
arch/i386/pci/common.c
+6
-0
arch/i386/pci/irq.c
arch/i386/pci/irq.c
+1
-0
arch/i386/pci/pci.h
arch/i386/pci/pci.h
+1
-0
drivers/acpi/ec.c
drivers/acpi/ec.c
+722
-171
drivers/acpi/pci_irq.c
drivers/acpi/pci_irq.c
+59
-26
drivers/acpi/pci_link.c
drivers/acpi/pci_link.c
+87
-16
drivers/acpi/processor_idle.c
drivers/acpi/processor_idle.c
+17
-14
drivers/net/sk98lin/skge.c
drivers/net/sk98lin/skge.c
+63
-0
include/acpi/acpi_drivers.h
include/acpi/acpi_drivers.h
+2
-1
include/linux/acpi.h
include/linux/acpi.h
+0
-4
sound/pci/intel8x0.c
sound/pci/intel8x0.c
+6
-1
No files found.
arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c
View file @
6d1d07e4
...
...
@@ -442,6 +442,13 @@ acpi_cpufreq_cpu_init (
(
u32
)
data
->
acpi_data
.
states
[
i
].
transition_latency
);
cpufreq_frequency_table_get_attr
(
data
->
freq_table
,
policy
->
cpu
);
/*
* the first call to ->target() should result in us actually
* writing something to the appropriate registers.
*/
data
->
resume
=
1
;
return
(
result
);
err_freqfree:
...
...
arch/i386/pci/acpi.c
View file @
6d1d07e4
...
...
@@ -30,6 +30,7 @@ static int __init pci_acpi_init(void)
acpi_irq_penalty_init
();
pcibios_scanned
++
;
pcibios_enable_irq
=
acpi_pci_irq_enable
;
pcibios_disable_irq
=
acpi_pci_irq_disable
;
if
(
pci_routeirq
)
{
/*
...
...
arch/i386/pci/common.c
View file @
6d1d07e4
...
...
@@ -254,3 +254,9 @@ int pcibios_enable_device(struct pci_dev *dev, int mask)
return
pcibios_enable_irq
(
dev
);
}
void
pcibios_disable_device
(
struct
pci_dev
*
dev
)
{
if
(
pcibios_disable_irq
)
pcibios_disable_irq
(
dev
);
}
arch/i386/pci/irq.c
View file @
6d1d07e4
...
...
@@ -56,6 +56,7 @@ struct irq_router_handler {
};
int
(
*
pcibios_enable_irq
)(
struct
pci_dev
*
dev
)
=
NULL
;
void
(
*
pcibios_disable_irq
)(
struct
pci_dev
*
dev
)
=
NULL
;
/*
* Check passed address for the PCI IRQ Routing Table signature
...
...
arch/i386/pci/pci.h
View file @
6d1d07e4
...
...
@@ -73,3 +73,4 @@ extern int pcibios_scanned;
extern
spinlock_t
pci_config_lock
;
extern
int
(
*
pcibios_enable_irq
)(
struct
pci_dev
*
dev
);
extern
void
(
*
pcibios_disable_irq
)(
struct
pci_dev
*
dev
);
drivers/acpi/ec.c
View file @
6d1d07e4
This diff is collapsed.
Click to expand it.
drivers/acpi/pci_irq.c
View file @
6d1d07e4
...
...
@@ -269,7 +269,51 @@ acpi_pci_irq_del_prt (int segment, int bus)
/* --------------------------------------------------------------------------
PCI Interrupt Routing Support
-------------------------------------------------------------------------- */
typedef
int
(
*
irq_lookup_func
)(
struct
acpi_prt_entry
*
,
int
*
,
int
*
,
char
**
);
static
int
acpi_pci_allocate_irq
(
struct
acpi_prt_entry
*
entry
,
int
*
edge_level
,
int
*
active_high_low
,
char
**
link
)
{
int
irq
;
ACPI_FUNCTION_TRACE
(
"acpi_pci_allocate_irq"
);
if
(
entry
->
link
.
handle
)
{
irq
=
acpi_pci_link_allocate_irq
(
entry
->
link
.
handle
,
entry
->
link
.
index
,
edge_level
,
active_high_low
,
link
);
if
(
irq
<
0
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_WARN
,
"Invalid IRQ link routing entry
\n
"
));
return_VALUE
(
-
1
);
}
}
else
{
irq
=
entry
->
link
.
index
;
*
edge_level
=
ACPI_LEVEL_SENSITIVE
;
*
active_high_low
=
ACPI_ACTIVE_LOW
;
}
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Found IRQ %d
\n
"
,
irq
));
return_VALUE
(
irq
);
}
static
int
acpi_pci_free_irq
(
struct
acpi_prt_entry
*
entry
,
int
*
edge_level
,
int
*
active_high_low
,
char
**
link
)
{
int
irq
;
ACPI_FUNCTION_TRACE
(
"acpi_pci_free_irq"
);
if
(
entry
->
link
.
handle
)
{
irq
=
acpi_pci_link_free_irq
(
entry
->
link
.
handle
);
}
else
{
irq
=
entry
->
link
.
index
;
}
return_VALUE
(
irq
);
}
/*
* acpi_pci_irq_lookup
* success: return IRQ >= 0
...
...
@@ -282,12 +326,13 @@ acpi_pci_irq_lookup (
int
pin
,
int
*
edge_level
,
int
*
active_high_low
,
char
**
link
)
char
**
link
,
irq_lookup_func
func
)
{
struct
acpi_prt_entry
*
entry
=
NULL
;
int
segment
=
pci_domain_nr
(
bus
);
int
bus_nr
=
bus
->
number
;
int
irq
;
int
ret
;
ACPI_FUNCTION_TRACE
(
"acpi_pci_irq_lookup"
);
...
...
@@ -301,22 +346,8 @@ acpi_pci_irq_lookup (
return_VALUE
(
-
1
);
}
if
(
entry
->
link
.
handle
)
{
irq
=
acpi_pci_link_get_irq
(
entry
->
link
.
handle
,
entry
->
link
.
index
,
edge_level
,
active_high_low
,
link
);
if
(
irq
<
0
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_WARN
,
"Invalid IRQ link routing entry
\n
"
));
return_VALUE
(
-
1
);
}
}
else
{
irq
=
entry
->
link
.
index
;
*
edge_level
=
ACPI_LEVEL_SENSITIVE
;
*
active_high_low
=
ACPI_ACTIVE_LOW
;
}
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Found IRQ %d
\n
"
,
irq
));
return_VALUE
(
irq
);
ret
=
func
(
entry
,
edge_level
,
active_high_low
,
link
);
return_VALUE
(
ret
);
}
/*
...
...
@@ -330,7 +361,8 @@ acpi_pci_irq_derive (
int
pin
,
int
*
edge_level
,
int
*
active_high_low
,
char
**
link
)
char
**
link
,
irq_lookup_func
func
)
{
struct
pci_dev
*
bridge
=
dev
;
int
irq
=
-
1
;
...
...
@@ -363,7 +395,7 @@ acpi_pci_irq_derive (
}
irq
=
acpi_pci_irq_lookup
(
bridge
->
bus
,
PCI_SLOT
(
bridge
->
devfn
),
pin
,
edge_level
,
active_high_low
,
link
);
pin
,
edge_level
,
active_high_low
,
link
,
func
);
}
if
(
irq
<
0
)
{
...
...
@@ -415,7 +447,7 @@ acpi_pci_irq_enable (
* values override any BIOS-assigned IRQs set during boot.
*/
irq
=
acpi_pci_irq_lookup
(
dev
->
bus
,
PCI_SLOT
(
dev
->
devfn
),
pin
,
&
edge_level
,
&
active_high_low
,
&
link
);
&
edge_level
,
&
active_high_low
,
&
link
,
acpi_pci_allocate_irq
);
/*
* If no PRT entry was found, we'll try to derive an IRQ from the
...
...
@@ -423,7 +455,7 @@ acpi_pci_irq_enable (
*/
if
(
irq
<
0
)
irq
=
acpi_pci_irq_derive
(
dev
,
pin
,
&
edge_level
,
&
active_high_low
,
&
link
);
&
active_high_low
,
&
link
,
acpi_pci_allocate_irq
);
/*
* No IRQ known to the ACPI subsystem - maybe the BIOS /
...
...
@@ -462,7 +494,9 @@ acpi_pci_irq_enable (
EXPORT_SYMBOL
(
acpi_pci_irq_enable
);
#ifdef CONFIG_ACPI_DEALLOCATE_IRQ
/* FIXME: implement x86/x86_64 version */
void
__attribute__
((
weak
))
acpi_unregister_gsi
(
u32
i
)
{}
void
acpi_pci_irq_disable
(
struct
pci_dev
*
dev
)
...
...
@@ -489,14 +523,14 @@ acpi_pci_irq_disable (
* First we check the PCI IRQ routing table (PRT) for an IRQ.
*/
gsi
=
acpi_pci_irq_lookup
(
dev
->
bus
,
PCI_SLOT
(
dev
->
devfn
),
pin
,
&
edge_level
,
&
active_high_low
,
NULL
);
&
edge_level
,
&
active_high_low
,
NULL
,
acpi_pci_free_irq
);
/*
* If no PRT entry was found, we'll try to derive an IRQ from the
* device's parent bridge.
*/
if
(
gsi
<
0
)
gsi
=
acpi_pci_irq_derive
(
dev
,
pin
,
&
edge_level
,
&
active_high_low
,
NULL
);
&
edge_level
,
&
active_high_low
,
NULL
,
acpi_pci_free_irq
);
if
(
gsi
<
0
)
return_VOID
;
...
...
@@ -512,4 +546,3 @@ acpi_pci_irq_disable (
return_VOID
;
}
#endif
/* CONFIG_ACPI_DEALLOCATE_IRQ */
drivers/acpi/pci_link.c
View file @
6d1d07e4
...
...
@@ -68,6 +68,10 @@ static struct acpi_driver acpi_pci_link_driver = {
},
};
/*
* If a link is initialized, we never change its active and initialized
* later even the link is disable. Instead, we just repick the active irq
*/
struct
acpi_pci_link_irq
{
u8
active
;
/* Current IRQ */
u8
edge_level
;
/* All IRQs */
...
...
@@ -76,8 +80,7 @@ struct acpi_pci_link_irq {
u8
possible_count
;
u8
possible
[
ACPI_PCI_LINK_MAX_POSSIBLE
];
u8
initialized
:
1
;
u8
suspend_resume
:
1
;
u8
reserved
:
6
;
u8
reserved
:
7
;
};
struct
acpi_pci_link
{
...
...
@@ -85,12 +88,14 @@ struct acpi_pci_link {
struct
acpi_device
*
device
;
acpi_handle
handle
;
struct
acpi_pci_link_irq
irq
;
int
refcnt
;
};
static
struct
{
int
count
;
struct
list_head
entries
;
}
acpi_link
;
DECLARE_MUTEX
(
acpi_link_lock
);
/* --------------------------------------------------------------------------
...
...
@@ -532,12 +537,12 @@ static int acpi_pci_link_allocate(
ACPI_FUNCTION_TRACE
(
"acpi_pci_link_allocate"
);
if
(
link
->
irq
.
suspend_resume
)
{
acpi_pci_link_set
(
link
,
link
->
irq
.
active
);
link
->
irq
.
suspend_resume
=
0
;
}
if
(
link
->
irq
.
initialized
)
if
(
link
->
irq
.
initialized
)
{
if
(
link
->
refcnt
==
0
)
/* This means the link is disabled but initialized */
acpi_pci_link_set
(
link
,
link
->
irq
.
active
);
return_VALUE
(
0
);
}
/*
* search for active IRQ in list of possible IRQs.
...
...
@@ -596,13 +601,13 @@ static int acpi_pci_link_allocate(
}
/*
* acpi_pci_link_
get
_irq
* acpi_pci_link_
allocate
_irq
* success: return IRQ >= 0
* failure: return -1
*/
int
acpi_pci_link_
get
_irq
(
acpi_pci_link_
allocate
_irq
(
acpi_handle
handle
,
int
index
,
int
*
edge_level
,
...
...
@@ -613,7 +618,7 @@ acpi_pci_link_get_irq (
struct
acpi_device
*
device
=
NULL
;
struct
acpi_pci_link
*
link
=
NULL
;
ACPI_FUNCTION_TRACE
(
"acpi_pci_link_
get
_irq"
);
ACPI_FUNCTION_TRACE
(
"acpi_pci_link_
allocate
_irq"
);
result
=
acpi_bus_get_device
(
handle
,
&
device
);
if
(
result
)
{
...
...
@@ -633,21 +638,70 @@ acpi_pci_link_get_irq (
return_VALUE
(
-
1
);
}
if
(
acpi_pci_link_allocate
(
link
))
down
(
&
acpi_link_lock
);
if
(
acpi_pci_link_allocate
(
link
))
{
up
(
&
acpi_link_lock
);
return_VALUE
(
-
1
);
}
if
(
!
link
->
irq
.
active
)
{
up
(
&
acpi_link_lock
);
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Link active IRQ is 0!
\n
"
));
return_VALUE
(
-
1
);
}
link
->
refcnt
++
;
up
(
&
acpi_link_lock
);
if
(
edge_level
)
*
edge_level
=
link
->
irq
.
edge_level
;
if
(
active_high_low
)
*
active_high_low
=
link
->
irq
.
active_high_low
;
if
(
name
)
*
name
=
acpi_device_bid
(
link
->
device
);
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Link %s is referenced
\n
"
,
acpi_device_bid
(
link
->
device
)));
return_VALUE
(
link
->
irq
.
active
);
}
/*
* We don't change link's irq information here. After it is reenabled, we
* continue use the info
*/
int
acpi_pci_link_free_irq
(
acpi_handle
handle
)
{
struct
acpi_device
*
device
=
NULL
;
struct
acpi_pci_link
*
link
=
NULL
;
acpi_status
result
;
ACPI_FUNCTION_TRACE
(
"acpi_pci_link_free_irq"
);
result
=
acpi_bus_get_device
(
handle
,
&
device
);
if
(
result
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Invalid link device
\n
"
));
return_VALUE
(
-
1
);
}
link
=
(
struct
acpi_pci_link
*
)
acpi_driver_data
(
device
);
if
(
!
link
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Invalid link context
\n
"
));
return_VALUE
(
-
1
);
}
down
(
&
acpi_link_lock
);
if
(
!
link
->
irq
.
initialized
)
{
up
(
&
acpi_link_lock
);
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Link isn't initialized
\n
"
));
return_VALUE
(
-
1
);
}
link
->
refcnt
--
;
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Link %s is dereferenced
\n
"
,
acpi_device_bid
(
link
->
device
)));
if
(
link
->
refcnt
==
0
)
{
acpi_ut_evaluate_object
(
link
->
handle
,
"_DIS"
,
0
,
NULL
);
}
up
(
&
acpi_link_lock
);
return_VALUE
(
link
->
irq
.
active
);
}
/* --------------------------------------------------------------------------
Driver Interface
-------------------------------------------------------------------------- */
...
...
@@ -677,6 +731,7 @@ acpi_pci_link_add (
strcpy
(
acpi_device_class
(
device
),
ACPI_PCI_LINK_CLASS
);
acpi_driver_data
(
device
)
=
link
;
down
(
&
acpi_link_lock
);
result
=
acpi_pci_link_get_possible
(
link
);
if
(
result
)
goto
end
;
...
...
@@ -712,6 +767,7 @@ acpi_pci_link_add (
end:
/* disable all links -- to be activated on use */
acpi_ut_evaluate_object
(
link
->
handle
,
"_DIS"
,
0
,
NULL
);
up
(
&
acpi_link_lock
);
if
(
result
)
kfree
(
link
);
...
...
@@ -726,19 +782,32 @@ irqrouter_suspend(
{
struct
list_head
*
node
=
NULL
;
struct
acpi_pci_link
*
link
=
NULL
;
int
ret
=
0
;
ACPI_FUNCTION_TRACE
(
"irqrouter_suspend"
);
list_for_each
(
node
,
&
acpi_link
.
entries
)
{
link
=
list_entry
(
node
,
struct
acpi_pci_link
,
node
);
if
(
!
link
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Invalid link context
\n
"
));
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Invalid link context
\n
"
));
continue
;
}
if
(
link
->
irq
.
active
&&
link
->
irq
.
initialized
)
link
->
irq
.
suspend_resume
=
1
;
if
(
link
->
irq
.
initialized
&&
link
->
refcnt
!=
0
/* We ignore legacy IDE device irq */
&&
link
->
irq
.
active
!=
14
&&
link
->
irq
.
active
!=
15
)
{
printk
(
KERN_WARNING
PREFIX
"%d drivers with interrupt %d neglected to call"
" pci_disable_device at .suspend
\n
"
,
link
->
refcnt
,
link
->
irq
.
active
);
printk
(
KERN_WARNING
PREFIX
"Fix the driver, or rmmod before suspend
\n
"
);
link
->
refcnt
=
0
;
ret
=
-
EINVAL
;
}
}
return_VALUE
(
0
);
return_VALUE
(
ret
);
}
...
...
@@ -756,8 +825,9 @@ acpi_pci_link_remove (
link
=
(
struct
acpi_pci_link
*
)
acpi_driver_data
(
device
);
/* TBD: Acquire/release lock */
down
(
&
acpi_link_lock
);
list_del
(
&
link
->
node
);
up
(
&
acpi_link_lock
);
kfree
(
link
);
...
...
@@ -849,6 +919,7 @@ int __init acpi_irq_balance_set(char *str)
__setup
(
"acpi_irq_balance"
,
acpi_irq_balance_set
);
/* FIXME: we will remove this interface after all drivers call pci_disable_device */
static
struct
sysdev_class
irqrouter_sysdev_class
=
{
set_kset_name
(
"irqrouter"
),
.
suspend
=
irqrouter_suspend
,
...
...
drivers/acpi/processor_idle.c
View file @
6d1d07e4
...
...
@@ -81,30 +81,33 @@ module_param(bm_history, uint, 0644);
*
* To skip this limit, boot/load with a large max_cstate limit.
*/
static
int
no_c2c3
(
struct
dmi_system_id
*
id
)
static
int
set_max_cstate
(
struct
dmi_system_id
*
id
)
{
if
(
max_cstate
>
ACPI_PROCESSOR_MAX_POWER
)
return
0
;
printk
(
KERN_NOTICE
PREFIX
"%s detected -
C2,C3
disabled."
printk
(
KERN_NOTICE
PREFIX
"%s detected -
%s
disabled."
" Override with
\"
processor.max_cstate=%d
\"\n
"
,
id
->
ident
,
((
int
)
id
->
driver_data
==
1
)
?
"C2,C3"
:
"C3"
,
ACPI_PROCESSOR_MAX_POWER
+
1
);
max_cstate
=
1
;
max_cstate
=
(
int
)
id
->
driver_data
;
return
0
;
}
static
struct
dmi_system_id
__initdata
processor_power_dmi_table
[]
=
{
{
no_c2c3
,
"IBM ThinkPad R40e"
,
{
{
set_max_cstate
,
"IBM ThinkPad R40e"
,
{
DMI_MATCH
(
DMI_BIOS_VENDOR
,
"IBM"
),
DMI_MATCH
(
DMI_BIOS_VERSION
,
"1SET60WW"
)
}},
{
no_c2c3
,
"Medion 41700"
,
{
DMI_MATCH
(
DMI_BIOS_VERSION
,
"1SET60WW"
)
},
(
void
*
)
1
},
{
set_max_cstate
,
"Medion 41700"
,
{
DMI_MATCH
(
DMI_BIOS_VENDOR
,
"Phoenix Technologies LTD"
),
DMI_MATCH
(
DMI_BIOS_VERSION
,
"R01-A1J"
)
},
(
void
*
)
1
},
{
set_max_cstate
,
"Clevo 5600D"
,
{
DMI_MATCH
(
DMI_BIOS_VENDOR
,
"Phoenix Technologies LTD"
),
DMI_MATCH
(
DMI_BIOS_VERSION
,
"R01-A1J"
)
}},
DMI_MATCH
(
DMI_BIOS_VERSION
,
"SHE845M0.86C.0013.D.0302131307"
)
},
(
void
*
)
2
},
{},
};
...
...
@@ -549,7 +552,8 @@ static int acpi_processor_get_power_info_default_c1 (struct acpi_processor *pr)
ACPI_FUNCTION_TRACE
(
"acpi_processor_get_power_info_default_c1"
);
for
(
i
=
0
;
i
<
ACPI_PROCESSOR_MAX_POWER
;
i
++
)
memset
(
pr
->
power
.
states
,
0
,
sizeof
(
struct
acpi_processor_cx
));
memset
(
&
(
pr
->
power
.
states
[
i
]),
0
,
sizeof
(
struct
acpi_processor_cx
));
/* if info is obtained from pblk/fadt, type equals state */
pr
->
power
.
states
[
ACPI_STATE_C1
].
type
=
ACPI_STATE_C1
;
...
...
@@ -580,7 +584,8 @@ static int acpi_processor_get_power_info_cst (struct acpi_processor *pr)
pr
->
power
.
count
=
0
;
for
(
i
=
0
;
i
<
ACPI_PROCESSOR_MAX_POWER
;
i
++
)
memset
(
pr
->
power
.
states
,
0
,
sizeof
(
struct
acpi_processor_cx
));
memset
(
&
(
pr
->
power
.
states
[
i
]),
0
,
sizeof
(
struct
acpi_processor_cx
));
status
=
acpi_evaluate_object
(
pr
->
handle
,
"_CST"
,
NULL
,
&
buffer
);
if
(
ACPI_FAILURE
(
status
))
{
...
...
@@ -763,7 +768,6 @@ static void acpi_processor_power_verify_c3(
}
if
(
pr
->
flags
.
bm_check
)
{
printk
(
"Disabling BM access before entering C3
\n
"
);
/* bus mastering control is necessary */
if
(
!
pr
->
flags
.
bm_control
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
...
...
@@ -771,7 +775,6 @@ static void acpi_processor_power_verify_c3(
return_VOID
;
}
}
else
{
printk
(
"Invalidating cache before entering C3
\n
"
);
/*
* WBINVD should be set in fadt, for C3 state to be
* supported on when bm_check is not required.
...
...
@@ -842,7 +845,7 @@ static int acpi_processor_get_power_info (
result
=
acpi_processor_get_power_info_cst
(
pr
);
if
((
result
)
||
(
acpi_processor_power_verify
(
pr
)
<
2
))
{
result
=
acpi_processor_get_power_info_fadt
(
pr
);
if
(
result
)
if
(
(
result
)
||
(
acpi_processor_power_verify
(
pr
)
<
2
)
)
result
=
acpi_processor_get_power_info_default_c1
(
pr
);
}
...
...
drivers/net/sk98lin/skge.c
View file @
6d1d07e4
...
...
@@ -5133,6 +5133,67 @@ static void __devexit skge_remove_one(struct pci_dev *pdev)
kfree
(
pAC
);
}
#ifdef CONFIG_PM
static
int
skge_suspend
(
struct
pci_dev
*
pdev
,
pm_message_t
state
)
{
struct
net_device
*
dev
=
pci_get_drvdata
(
pdev
);
DEV_NET
*
pNet
=
netdev_priv
(
dev
);
SK_AC
*
pAC
=
pNet
->
pAC
;
struct
net_device
*
otherdev
=
pAC
->
dev
[
1
];
if
(
pNet
->
Up
)
{
pAC
->
WasIfUp
[
0
]
=
SK_TRUE
;
DoPrintInterfaceChange
=
SK_FALSE
;
SkDrvDeInitAdapter
(
pAC
,
0
);
/* performs SkGeClose */
}
if
(
otherdev
!=
dev
)
{
pNet
=
netdev_priv
(
otherdev
);
if
(
pNet
->
Up
)
{
pAC
->
WasIfUp
[
1
]
=
SK_TRUE
;
DoPrintInterfaceChange
=
SK_FALSE
;
SkDrvDeInitAdapter
(
pAC
,
1
);
/* performs SkGeClose */
}
}
pci_save_state
(
pdev
);
pci_enable_wake
(
pdev
,
pci_choose_state
(
pdev
,
state
),
0
);
if
(
pAC
->
AllocFlag
&
SK_ALLOC_IRQ
)
{
free_irq
(
dev
->
irq
,
dev
);
}
pci_disable_device
(
pdev
);
pci_set_power_state
(
pdev
,
pci_choose_state
(
pdev
,
state
));
return
0
;
}
static
int
skge_resume
(
struct
pci_dev
*
pdev
)
{
struct
net_device
*
dev
=
pci_get_drvdata
(
pdev
);
DEV_NET
*
pNet
=
netdev_priv
(
dev
);
SK_AC
*
pAC
=
pNet
->
pAC
;
pci_set_power_state
(
pdev
,
PCI_D0
);
pci_restore_state
(
pdev
);
pci_enable_device
(
pdev
);
pci_set_master
(
pdev
);
if
(
pAC
->
GIni
.
GIMacsFound
==
2
)
request_irq
(
dev
->
irq
,
SkGeIsr
,
SA_SHIRQ
,
pAC
->
Name
,
dev
);
else
request_irq
(
dev
->
irq
,
SkGeIsrOnePort
,
SA_SHIRQ
,
pAC
->
Name
,
dev
);
if
(
pAC
->
WasIfUp
[
0
]
==
SK_TRUE
)
{
DoPrintInterfaceChange
=
SK_FALSE
;
SkDrvInitAdapter
(
pAC
,
0
);
/* first device */
}
if
(
pAC
->
dev
[
1
]
!=
dev
&&
pAC
->
WasIfUp
[
1
]
==
SK_TRUE
)
{
DoPrintInterfaceChange
=
SK_FALSE
;
SkDrvInitAdapter
(
pAC
,
1
);
/* first device */
}
return
0
;
}
#endif
static
struct
pci_device_id
skge_pci_tbl
[]
=
{
{
PCI_VENDOR_ID_3COM
,
0x1700
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
0
},
{
PCI_VENDOR_ID_3COM
,
0x80eb
,
PCI_ANY_ID
,
PCI_ANY_ID
,
0
,
0
,
0
},
...
...
@@ -5158,6 +5219,8 @@ static struct pci_driver skge_driver = {
.
id_table
=
skge_pci_tbl
,
.
probe
=
skge_probe_one
,
.
remove
=
__devexit_p
(
skge_remove_one
),
.
suspend
=
skge_suspend
,
.
resume
=
skge_resume
,
};
static
int
__init
skge_init
(
void
)
...
...
include/acpi/acpi_drivers.h
View file @
6d1d07e4
...
...
@@ -56,8 +56,9 @@
/* ACPI PCI Interrupt Link (pci_link.c) */
int
acpi_irq_penalty_init
(
void
);
int
acpi_pci_link_
get
_irq
(
acpi_handle
handle
,
int
index
,
int
*
edge_level
,
int
acpi_pci_link_
allocate
_irq
(
acpi_handle
handle
,
int
index
,
int
*
edge_level
,
int
*
active_high_low
,
char
**
name
);
int
acpi_pci_link_free_irq
(
acpi_handle
handle
);
/* ACPI PCI Interrupt Routing (pci_irq.c) */
...
...
include/linux/acpi.h
View file @
6d1d07e4
...
...
@@ -453,9 +453,7 @@ int acpi_gsi_to_irq (u32 gsi, unsigned int *irq);
* If this matches the last registration, any IRQ resources for gsi
* are freed.
*/
#ifdef CONFIG_ACPI_DEALLOCATE_IRQ
void
acpi_unregister_gsi
(
u32
gsi
);
#endif
#ifdef CONFIG_ACPI_PCI
...
...
@@ -480,9 +478,7 @@ struct pci_dev;
int
acpi_pci_irq_enable
(
struct
pci_dev
*
dev
);
void
acpi_penalize_isa_irq
(
int
irq
,
int
active
);
#ifdef CONFIG_ACPI_DEALLOCATE_IRQ
void
acpi_pci_irq_disable
(
struct
pci_dev
*
dev
);
#endif
struct
acpi_pci_driver
{
struct
acpi_pci_driver
*
next
;
...
...
sound/pci/intel8x0.c
View file @
6d1d07e4
...
...
@@ -2376,6 +2376,9 @@ static int intel8x0_suspend(snd_card_t *card, pm_message_t state)
snd_ac97_suspend
(
chip
->
ac97
[
i
]);
if
(
chip
->
device_type
==
DEVICE_INTEL_ICH4
)
chip
->
sdm_saved
=
igetbyte
(
chip
,
ICHREG
(
SDM
));
if
(
chip
->
irq
>=
0
)
free_irq
(
chip
->
irq
,
(
void
*
)
chip
);
pci_disable_device
(
chip
->
pci
);
return
0
;
}
...
...
@@ -2387,7 +2390,9 @@ static int intel8x0_resume(snd_card_t *card)
pci_enable_device
(
chip
->
pci
);
pci_set_master
(
chip
->
pci
);
snd_intel8x0_chip_init
(
chip
,
0
);
request_irq
(
chip
->
irq
,
snd_intel8x0_interrupt
,
SA_INTERRUPT
|
SA_SHIRQ
,
card
->
shortname
,
(
void
*
)
chip
);
synchronize_irq
(
chip
->
irq
);
snd_intel8x0_chip_init
(
chip
,
1
);
/* re-initialize mixer stuff */
if
(
chip
->
device_type
==
DEVICE_INTEL_ICH4
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment