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
e1494263
Commit
e1494263
authored
Feb 27, 2003
by
Andy Grover
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ACPI: Modify drivers to use new acpi_walk_resource API (Bjorn Helgaas)
parent
da8bbd48
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
120 additions
and
106 deletions
+120
-106
drivers/acpi/acpi_ksyms.c
drivers/acpi/acpi_ksyms.c
+2
-0
drivers/acpi/ec.c
drivers/acpi/ec.c
+40
-33
drivers/acpi/pci_link.c
drivers/acpi/pci_link.c
+78
-73
No files found.
drivers/acpi/acpi_ksyms.c
View file @
e1494263
...
...
@@ -76,6 +76,7 @@ EXPORT_SYMBOL(acpi_acquire_global_lock);
EXPORT_SYMBOL
(
acpi_release_global_lock
);
EXPORT_SYMBOL
(
acpi_get_current_resources
);
EXPORT_SYMBOL
(
acpi_get_possible_resources
);
EXPORT_SYMBOL
(
acpi_walk_resources
);
EXPORT_SYMBOL
(
acpi_set_current_resources
);
EXPORT_SYMBOL
(
acpi_enable_event
);
EXPORT_SYMBOL
(
acpi_disable_event
);
...
...
@@ -86,6 +87,7 @@ EXPORT_SYMBOL(acpi_get_sleep_type_data);
EXPORT_SYMBOL
(
acpi_get_register
);
EXPORT_SYMBOL
(
acpi_set_register
);
EXPORT_SYMBOL
(
acpi_enter_sleep_state
);
EXPORT_SYMBOL
(
acpi_enter_sleep_state_s4bios
);
EXPORT_SYMBOL
(
acpi_get_system_info
);
EXPORT_SYMBOL
(
acpi_get_devices
);
...
...
drivers/acpi/ec.c
View file @
e1494263
...
...
@@ -644,15 +644,46 @@ acpi_ec_remove (
}
static
acpi_status
acpi_ec_io_ports
(
struct
acpi_resource
*
resource
,
void
*
context
)
{
struct
acpi_ec
*
ec
=
(
struct
acpi_ec
*
)
context
;
struct
acpi_generic_address
*
addr
;
if
(
resource
->
id
!=
ACPI_RSTYPE_IO
)
{
return
AE_OK
;
}
/*
* The first address region returned is the data port, and
* the second address region returned is the status/command
* port.
*/
if
(
ec
->
data_addr
.
register_bit_width
==
0
)
{
addr
=
&
ec
->
data_addr
;
}
else
if
(
ec
->
command_addr
.
register_bit_width
==
0
)
{
addr
=
&
ec
->
command_addr
;
}
else
{
return
AE_CTRL_TERMINATE
;
}
addr
->
address_space_id
=
ACPI_ADR_SPACE_SYSTEM_IO
;
addr
->
register_bit_width
=
8
;
addr
->
register_bit_offset
=
0
;
addr
->
address
=
resource
->
data
.
io
.
min_base_address
;
return
AE_OK
;
}
static
int
acpi_ec_start
(
struct
acpi_device
*
device
)
{
int
result
=
0
;
acpi_status
status
=
AE_OK
;
struct
acpi_ec
*
ec
=
NULL
;
struct
acpi_buffer
buffer
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
struct
acpi_resource
*
resource
=
NULL
;
ACPI_FUNCTION_TRACE
(
"acpi_ec_start"
);
...
...
@@ -667,33 +698,13 @@ acpi_ec_start (
/*
* Get I/O port addresses. Convert to GAS format.
*/
status
=
acpi_get_current_resources
(
ec
->
handle
,
&
buffer
);
if
(
ACPI_FAILURE
(
status
))
{
status
=
acpi_walk_resources
(
ec
->
handle
,
METHOD_NAME__CRS
,
acpi_ec_io_ports
,
ec
);
if
(
ACPI_FAILURE
(
status
)
||
ec
->
command_addr
.
register_bit_width
==
0
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Error getting I/O port addresses"
));
return_VALUE
(
-
ENODEV
);
}
resource
=
(
struct
acpi_resource
*
)
buffer
.
pointer
;
if
(
!
resource
||
(
resource
->
id
!=
ACPI_RSTYPE_IO
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Invalid or missing resource
\n
"
));
result
=
-
ENODEV
;
goto
end
;
}
ec
->
data_addr
.
address_space_id
=
ACPI_ADR_SPACE_SYSTEM_IO
;
ec
->
data_addr
.
register_bit_width
=
8
;
ec
->
data_addr
.
register_bit_offset
=
0
;
ec
->
data_addr
.
address
=
resource
->
data
.
io
.
min_base_address
;
resource
=
ACPI_NEXT_RESOURCE
(
resource
);
if
(
!
resource
||
(
resource
->
id
!=
ACPI_RSTYPE_IO
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Invalid or missing resource
\n
"
));
result
=
-
ENODEV
;
goto
end
;
}
ec
->
command_addr
.
address_space_id
=
ACPI_ADR_SPACE_SYSTEM_IO
;
ec
->
command_addr
.
register_bit_width
=
8
;
ec
->
command_addr
.
register_bit_offset
=
0
;
ec
->
command_addr
.
address
=
resource
->
data
.
io
.
min_base_address
;
ec
->
status_addr
=
ec
->
command_addr
;
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"gpe=0x%02x, ports=0x%2x,0x%2x
\n
"
,
...
...
@@ -706,8 +717,7 @@ acpi_ec_start (
status
=
acpi_install_gpe_handler
(
ec
->
gpe_bit
,
ACPI_EVENT_EDGE_TRIGGERED
,
&
acpi_ec_gpe_handler
,
ec
);
if
(
ACPI_FAILURE
(
status
))
{
result
=
-
ENODEV
;
goto
end
;
return_VALUE
(
-
ENODEV
);
}
status
=
acpi_install_address_space_handler
(
ec
->
handle
,
...
...
@@ -715,13 +725,10 @@ acpi_ec_start (
&
acpi_ec_space_setup
,
ec
);
if
(
ACPI_FAILURE
(
status
))
{
acpi_remove_gpe_handler
(
ec
->
gpe_bit
,
&
acpi_ec_gpe_handler
);
result
=
-
ENODEV
;
goto
end
;
return_VALUE
(
-
ENODEV
);
}
end:
acpi_os_free
(
buffer
.
pointer
);
return_VALUE
(
result
);
return_VALUE
(
AE_OK
);
}
...
...
drivers/acpi/pci_link.c
View file @
e1494263
...
...
@@ -90,42 +90,25 @@ static struct {
PCI Link Device Management
-------------------------------------------------------------------------- */
static
int
acpi_pci_link_get_possible
(
struct
acpi_pci_link
*
link
)
static
acpi_status
acpi_pci_link_check_possible
(
struct
acpi_resource
*
resource
,
void
*
context
)
{
int
result
=
0
;
acpi_status
status
=
AE_OK
;
struct
acpi_buffer
buffer
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
struct
acpi_resource
*
resource
=
NULL
;
struct
acpi_pci_link
*
link
=
(
struct
acpi_pci_link
*
)
context
;
int
i
=
0
;
ACPI_FUNCTION_TRACE
(
"acpi_pci_link_get_possible"
);
if
(
!
link
)
return_VALUE
(
-
EINVAL
);
status
=
acpi_get_possible_resources
(
link
->
handle
,
&
buffer
);
if
(
ACPI_FAILURE
(
status
)
||
!
buffer
.
pointer
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Error evaluating _PRS
\n
"
));
result
=
-
ENODEV
;
goto
end
;
}
resource
=
(
struct
acpi_resource
*
)
buffer
.
pointer
;
/* skip past dependent function resource (if present) */
if
(
resource
->
id
==
ACPI_RSTYPE_START_DPF
)
resource
=
ACPI_NEXT_RESOURCE
(
resource
);
ACPI_FUNCTION_TRACE
(
"acpi_pci_link_check_possible"
);
switch
(
resource
->
id
)
{
case
ACPI_RSTYPE_START_DPF
:
return
AE_OK
;
case
ACPI_RSTYPE_IRQ
:
{
struct
acpi_resource_irq
*
p
=
&
resource
->
data
.
irq
;
if
(
!
p
||
!
p
->
number_of_interrupts
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_WARN
,
"Blank IRQ resource
\n
"
));
result
=
-
ENODEV
;
goto
end
;
return
AE_OK
;
}
for
(
i
=
0
;
(
i
<
p
->
number_of_interrupts
&&
i
<
ACPI_PCI_LINK_MAX_POSSIBLE
);
i
++
)
{
if
(
!
p
->
interrupts
[
i
])
{
...
...
@@ -143,8 +126,7 @@ acpi_pci_link_get_possible (
if
(
!
p
||
!
p
->
number_of_interrupts
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_WARN
,
"Blank IRQ resource
\n
"
));
result
=
-
ENODEV
;
goto
end
;
return
AE_OK
;
}
for
(
i
=
0
;
(
i
<
p
->
number_of_interrupts
&&
i
<
ACPI_PCI_LINK_MAX_POSSIBLE
);
i
++
)
{
if
(
!
p
->
interrupts
[
i
])
{
...
...
@@ -159,18 +141,76 @@ acpi_pci_link_get_possible (
default:
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Resource is not an IRQ entry
\n
"
));
result
=
-
ENODEV
;
goto
end
;
break
;
return
AE_OK
;
}
return
AE_CTRL_TERMINATE
;
}
static
int
acpi_pci_link_get_possible
(
struct
acpi_pci_link
*
link
)
{
acpi_status
status
;
ACPI_FUNCTION_TRACE
(
"acpi_pci_link_get_possible"
);
if
(
!
link
)
return_VALUE
(
-
EINVAL
);
status
=
acpi_walk_resources
(
link
->
handle
,
METHOD_NAME__PRS
,
acpi_pci_link_check_possible
,
link
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Error evaluating _PRS
\n
"
));
return_VALUE
(
-
ENODEV
);
}
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Found %d possible IRQs
\n
"
,
link
->
irq
.
possible_count
));
end:
acpi_os_free
(
buffer
.
pointer
);
return_VALUE
(
0
);
}
return_VALUE
(
result
);
static
acpi_status
acpi_pci_link_check_current
(
struct
acpi_resource
*
resource
,
void
*
context
)
{
int
*
irq
=
(
int
*
)
context
;
ACPI_FUNCTION_TRACE
(
"acpi_pci_link_check_current"
);
switch
(
resource
->
id
)
{
case
ACPI_RSTYPE_IRQ
:
{
struct
acpi_resource_irq
*
p
=
&
resource
->
data
.
irq
;
if
(
!
p
||
!
p
->
number_of_interrupts
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_WARN
,
"Blank IRQ resource
\n
"
));
return
AE_OK
;
}
*
irq
=
p
->
interrupts
[
0
];
break
;
}
case
ACPI_RSTYPE_EXT_IRQ
:
{
struct
acpi_resource_ext_irq
*
p
=
&
resource
->
data
.
extended_irq
;
if
(
!
p
||
!
p
->
number_of_interrupts
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_WARN
,
"Blank IRQ resource
\n
"
));
return
AE_OK
;
}
*
irq
=
p
->
interrupts
[
0
];
break
;
}
default:
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Resource isn't an IRQ
\n
"
));
return
AE_OK
;
}
return
AE_CTRL_TERMINATE
;
}
...
...
@@ -180,8 +220,6 @@ acpi_pci_link_get_current (
{
int
result
=
0
;
acpi_status
status
=
AE_OK
;
struct
acpi_buffer
buffer
=
{
ACPI_ALLOCATE_BUFFER
,
NULL
};
struct
acpi_resource
*
resource
=
NULL
;
int
irq
=
0
;
ACPI_FUNCTION_TRACE
(
"acpi_pci_link_get_current"
);
...
...
@@ -206,47 +244,16 @@ acpi_pci_link_get_current (
* Query and parse _CRS to get the current IRQ assignment.
*/
status
=
acpi_get_current_resources
(
link
->
handle
,
&
buffer
);
status
=
acpi_walk_resources
(
link
->
handle
,
METHOD_NAME__CRS
,
acpi_pci_link_check_current
,
&
irq
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Error evaluating _CRS
\n
"
));
result
=
-
ENODEV
;
goto
end
;
}
resource
=
(
struct
acpi_resource
*
)
buffer
.
pointer
;
switch
(
resource
->
id
)
{
case
ACPI_RSTYPE_IRQ
:
{
struct
acpi_resource_irq
*
p
=
&
resource
->
data
.
irq
;
if
(
!
p
||
!
p
->
number_of_interrupts
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_WARN
,
"Blank IRQ resource
\n
"
));
result
=
-
ENODEV
;
goto
end
;
}
irq
=
p
->
interrupts
[
0
];
break
;
}
case
ACPI_RSTYPE_EXT_IRQ
:
{
struct
acpi_resource_ext_irq
*
p
=
&
resource
->
data
.
extended_irq
;
if
(
!
p
||
!
p
->
number_of_interrupts
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_WARN
,
"Blank IRQ resource
\n
"
));
result
=
-
ENODEV
;
goto
end
;
}
irq
=
p
->
interrupts
[
0
];
break
;
}
default:
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Resource isn't an IRQ
\n
"
));
result
=
-
ENODEV
;
goto
end
;
}
if
(
!
irq
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"
Invalid use of IRQ 0
\n
"
));
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"
No IRQ resource found
\n
"
));
result
=
-
ENODEV
;
goto
end
;
}
...
...
@@ -263,8 +270,6 @@ acpi_pci_link_get_current (
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"Link at IRQ %d
\n
"
,
link
->
irq
.
active
));
end:
acpi_os_free
(
buffer
.
pointer
);
return_VALUE
(
result
);
}
...
...
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