HelenOS sources

root/abi/include/abi/ipc/methods.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


/*
 * 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

/** @}
 */

/* [<][>][^][v][top][bottom][index][help] */
HelenOS homepage, sources at GitHub