| /* |
| * Copyright 2017, Data61, CSIRO (ABN 41 687 119 230) |
| * |
| * SPDX-License-Identifier: BSD-2-Clause |
| */ |
| #pragma once |
| |
| #include <stdint.h> |
| |
| #include <sel4/sel4.h> |
| |
| #include <simple/simple.h> |
| #include <vka/vka.h> |
| #include <vspace/vspace.h> |
| #include <sel4utils/process.h> |
| |
| /** @file API for allowing a thread to act as the parent to a serial server |
| * thread. |
| * |
| * Provides the APIs for spawning the server thread, allocating new badge |
| * values to client threads, and minting the Server's Endpoint to Client |
| * threads. |
| */ |
| |
| /** Spawns the server thread. Server thread is spawned within the VSpace and |
| * CSpace of the thread that spawned it. |
| * |
| * CAUTION: |
| * All vka_t, vpsace_t, and simple_t instances passed to this library by |
| * reference must remain functional throughout the lifetime of the server. |
| * |
| * @param parent_simple Initialized simple_t for the parent process that is |
| * spawning the server thread. |
| * @param parent_vka Initialized vka_t for the parent process that is spawning |
| * the server thread. |
| * @param parent_vspace Initialized vspace_t for the parent process that is |
| * spawning the server thread. |
| * @param priority Server thread's priority. |
| * @return seL4_Error value. |
| */ |
| seL4_Error serial_server_parent_spawn_thread(simple_t *parent_simple, |
| vka_t *parent_vka, |
| vspace_t *parent_vspace, |
| uint8_t priority); |
| |
| /** Mints a new, badged copy of the Server's Endpoint cap into the caller's |
| * already-provided slot, dest_slot. |
| * |
| * @param dest_slot The caller-allocated slot into which the caller expects the |
| * new badged Endpoint cap to be placed. |
| * @return 0 if successful, non-zero on error. |
| */ |
| int serial_server_allocate_client_badged_ep(cspacepath_t dest_slot); |
| |
| /** Mints a new, badged copy of the Server's Endpoint cap and returns it. |
| * |
| * @param client_vka Initialized vka_t instance. |
| * @param new_client_badge_value The badge value to assign the new Endpoint cap. |
| * @param badged_server_ep_cspath [out] resultant new badged Endpoint cap. |
| * @return 0 if successful, non-zero on error. |
| */ |
| int serial_server_parent_vka_mint_endpoint(vka_t *client_vka, |
| cspacepath_t *badged_server_ep_cspath); |
| |
| /** Mints a new, badged copy of the Server's Endpoint cap into the specified |
| * destination process' CSpace, and returns the slot it was minto into, as its |
| * return value. |
| * |
| * @param p Destination process. |
| * @param new_client_badge_value badge value to assign to the new Endpoint cap. |
| * @return The cap-ptr to the slot that the cap was minted into. |
| */ |
| seL4_CPtr serial_server_parent_mint_endpoint_to_process(sel4utils_process_t *p); |