/*
* Copyright (c) 2006 Ondrej Palkovsky
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* - The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/** @addtogroup abi_generic
* @{
*/
/** @file
*/
#ifndef _ABI_IPC_METHODS_H_
#define _ABI_IPC_METHODS_H_
#include <abi/cap.h>
/* Well known phone descriptors */
static cap_phone_handle_t const PHONE_NS = (cap_phone_handle_t) (CAP_NIL + 1);
/** Kernel IPC interfaces
*
*/
enum {
IPC_IF_KERNEL = 0,
};
/** System-specific IPC methods
*
* These methods have special behaviour. These methods also
* have the implicit kernel interface zero (0).
*
*/
enum {
/** This message is sent to answerbox when the phone is hung up
*
* The numerical value zero (0) of this method is important,
* so as the value can be easily tested in conditions.
*/
IPC_M_PHONE_HUNGUP = 0,
/** Protocol for initializing new callback connections.
*
* Sender asks the recipient to create a new connection from
* the recipient to the sender.
*
* Sender:
* - uspace: arg1 .. callback iface
* arg2 .. <custom>
* arg3 .. <custom>
* arg4 .. <unused>
* arg5 .. sender-assigned label
* - kernel: arg5 .. new recipient's connection phone capability
*
* recipient:
* - uspace: arg1 .. <unused>
* arg2 .. <unused>
* arg3 .. <unused>
* arg4 .. <unused>
* arg5 .. <unused>
*
*/
IPC_M_CONNECT_TO_ME,
/** Protocol for initializing new forward connections.
*
* Sender asks the recipient to create a new connection from
* the sender to the recipient. The message can be forwarded,
* thus the immediate recipient acts as a broker and the connection
* is created to the final recipient.
*
* Sender:
* - uspace: arg1 .. iface
* arg2 .. <custom>
* arg3 .. <custom>
* arg4 .. flags (e.g. IPC_FLAG_BLOCKING)
* arg5 .. unused
*
* Recipient:
* - uspace: arg1 .. <unused>
* arg2 .. <unused>
* arg3 .. <unused>
* arg4 .. <unused>
* arg5 .. recipient-assigned label
* - kernel: arg5 .. new sender's connection phone capability
*
*/
IPC_M_CONNECT_ME_TO,
/** Share a single page over IPC.
*
* - ARG1 - page-aligned offset from the beginning of the memory object
* - ARG2 - page size
* - ARG3 - user defined memory object ID
* - ARG4 - user defined memory object ID
* - ARG5 - user defined memory object ID
*
* on answer, the recipient must set:
*
* - ARG1 - source user page address
*/
IPC_M_PAGE_IN,
/** Receive an address space area over IPC.
*
* Sender:
* - uspace: arg1 .. address space area size
* arg2 .. sender's address space area starting address
* lower bound
* arg3 .. <custom>
* arg4 .. <unused>
* arg5 .. <unused>
*
* Recipient:
* - uspace: arg1 .. recipient's address space area starting address
* arg2 .. shared address space areas sharing flags
* arg3 .. <unused>
* arg4 .. <unused>
* - kernel: arg5 .. new sender's address space area starting address
*
*/
IPC_M_SHARE_IN,
/** Send as_area over IPC.
*
* - ARG1 - source as_area base address
* - ARG2 - size of source as_area (filled automatically by kernel)
* - ARG3 - flags of the as_area being sent
*
* on answer, the recipient must set:
*
* - ARG1 - dst as_area lower bound
* - ARG2 - dst as_area base address pointer
* (filled automatically by the kernel)
*/
IPC_M_SHARE_OUT,
/** Receive data from another address space over IPC.
*
* Sender:
* - uspace: arg1 .. sender's destination buffer address
* arg2 .. sender's destination buffer size
* arg3 .. flags (IPC_XF_RESTRICT)
* arg4 .. <unused>
* arg5 .. <unused>
*
* Recipient:
* - uspace: arg1 .. recipient's source buffer address
* arg2 .. recipient's source buffer size
* arg3 .. <unused>
* arg4 .. <unused>
* arg5 .. <unused>
*
*/
IPC_M_DATA_READ,
/** Send data to another address space over IPC.
*
* Sender:
* - uspace: arg1 .. sender's source buffer address
* arg2 .. sender's source buffer size
* arg3 .. flags (IPC_XF_RESTRICT)
* arg4 .. <unused>
* arg5 .. <unused>
*
* Recipient:
* - uspace: arg1 .. recipient's destination buffer address
* arg2 .. recipient's destination buffer size
* arg3 .. <unused>
* arg4 .. <unused>
* arg5 .. <unused>
*
*/
IPC_M_DATA_WRITE,
/** Authorize change of recipient's state in a third party task.
*
* - ARG1 - user protocol defined data
* - ARG2 - user protocol defined data
* - ARG3 - user protocol defined data
* - ARG5 - sender's phone to the third party task
*
* on EOK answer, the recipient must set:
*
* - ARG1 - recipient's phone to the third party task
*/
IPC_M_STATE_CHANGE_AUTHORIZE,
/** Debug the recipient.
*
* - ARG1 - specifies the debug method (from udebug_method_t)
* - other arguments are specific to the debug method
*/
IPC_M_DEBUG,
};
/** Last system IPC method */
enum {
IPC_M_LAST_SYSTEM = 511,
};
#endif
/** @}
*/