Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
18c7c2df
Commit
18c7c2df
authored
Nov 21, 2016
by
danh-arm
Committed by
GitHub
Nov 21, 2016
Browse files
Merge pull request #758 from douglas-raillard-arm/dr/doc_interrupt_handler
Docs: Clarify IRQ/FIQ handler API in Interrupt Design Guide
parents
686019d2
94a8ca24
Changes
1
Hide whitespace changes
Inline
Side-by-side
docs/interrupt-framework-design.md
View file @
18c7c2df
...
...
@@ -335,9 +335,9 @@ during the registration of a handler for an interrupt type.
This component declares the following prototype for a handler of an interrupt type.
typedef uint64_t (*interrupt_type_handler_t)(uint32_t id,
uint32_t flags,
void *handle,
void *cookie);
uint32_t flags,
void *handle,
void *cookie);
The
`id`
is parameter is reserved and could be used in the future for passing
the interrupt id of the highest pending interrupt only if there is a foolproof
...
...
@@ -358,10 +358,16 @@ The `handle` parameter points to the `cpu_context` structure of the current CPU
for the security state specified in the
`flags`
parameter.
Once the handler routine completes, execution will return to either the secure
or non-secure state. The handler routine should return a pointer to
`cpu_context`
structure of the current CPU for the target security state. It
should treat all error conditions as critical errors and take appropriate action
within its implementation e.g. use assertion failures.
or non-secure state. The handler routine must return a pointer to
`cpu_context`
structure of the current CPU for the target security state. On
AArch64, this return value is currently ignored by the caller as the
appropriate
`cpu_context`
to be used is expected to be set by the handler
via the context management library APIs.
A portable interrupt handler implementation must set the target context both in
the structure pointed to by the returned pointer and via the context management
library APIs. The handler should treat all error conditions as critical errors
and take appropriate action within its implementation e.g. use assertion
failures.
The runtime firmware provides the following API for registering a handler for a
particular type of interrupt. A Secure Payload Dispatcher service should use
...
...
@@ -370,8 +376,8 @@ interrupts. This API also requires the caller to specify the routing model for
the type of interrupt.
int32_t register_interrupt_type_handler(uint32_t type,
interrupt_type_handler handler,
uint64_t flags);
interrupt_type_handler handler,
uint64_t flags);
The
`type`
parameter can be one of the three interrupt types listed above i.e.
...
...
@@ -962,13 +968,13 @@ as the resume SMC FID. It is important to note that `TSP_FID_RESUME` is a
secure software sequence for issuing a `
standard
` SMC would look like this,
assuming `
P.STATE.I=0
` in the non secure state :
int rc;
rc = smc(TSP_STD_SMC_FID, ...);
/* Issue a Standard SMC call */
/* The pending non-secure interrupt is handled by the interrupt handler
and returns back here. */
while (rc == SMC_PREEMPTED) {
/* Check if the SMC call is preempted */
rc = smc(TSP_FID_RESUME);
/* Issue resume SMC call */
}
int rc;
rc = smc(TSP_STD_SMC_FID, ...);
/* Issue a Standard SMC call */
/* The pending non-secure interrupt is handled by the interrupt handler
and returns back here. */
while (rc == SMC_PREEMPTED) {
/* Check if the SMC call is preempted */
rc = smc(TSP_FID_RESUME);
/* Issue resume SMC call */
}
The `
TSP_STD_SMC_FID
` is any `
standard
` SMC function identifier and the smc()
function invokes a SMC call with the required arguments. The pending non-secure
...
...
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