コード例 #1
0
ファイル: root_thread.c プロジェクト: BaseZwe/f9-kernel
void __USER_TEXT __pong_thread(void *kip_ptr, void *utcb_ptr)
{
	uint32_t msg[8] = { 0 };

	while (1)
		L4_Ipc(L4_NILTHREAD, threads[PING_THREAD], 0, msg);
}
コード例 #2
0
void abort(void)
{
	printf("testbench abort() called!\n");
	L4_ThreadId_t dummy;
	for(;;) {
		L4_Ipc(L4_nilthread, L4_nilthread, L4_Timeouts(L4_Never, L4_Never),
			&dummy);
	}
}
コード例 #3
0
ファイル: new_bench_irq_ipc.c プロジェクト: hro424/okl4-sh
static void
pager (void)
{
    L4_ThreadId_t tid;
    L4_MsgTag_t tag;
    L4_Msg_t msg;

    L4_Send(master_tid);
    for (;;) {
        tag = L4_Wait(&tid);

        for (;;) {
            L4_Word_t faddr, fip;
            L4_MsgStore(tag, &msg);

            if (L4_UntypedWords (tag) != 2 ||
                !L4_IpcSucceeded (tag)) {
                printf ("Malformed pagefault IPC from %p (tag=%p)\n",
                        (void *) tid.raw, (void *) tag.raw);
                L4_KDB_Enter ("malformed pf");
                break;
            }

            faddr = L4_MsgWord(&msg, 0);
            fip   = L4_MsgWord (&msg, 1);
            L4_MsgClear(&msg);
            {
                L4_MapItem_t map;
                L4_SpaceId_t space;
                L4_Word_t seg, offset, cache, rwx, size;
                int r;

                seg = get_seg(KBENCH_SPACE, faddr, &offset, &cache, &rwx);
                assert(seg != ~0UL);

                size = L4_GetMinPageBits();
                faddr &= ~((1ul << size)-1);
                offset &= ~((1ul << size)-1);

                space.raw = __L4_TCR_SenderSpace();

                L4_MapItem_Map(&map, seg, offset, faddr, size,
                               cache, rwx);
                r = L4_ProcessMapItem(space, map);
                assert(r == 1);
            }
            L4_MsgLoad(&msg);
//            tag = L4_ReplyWait (tid, &tid);
            tag = L4_MsgTag();
            L4_Set_SendBlock(&tag);
            L4_Set_ReceiveBlock(&tag);
            tag = L4_Ipc(tid, L4_anythread, tag, &tid);
        }
    }
}
コード例 #4
0
ファイル: bench_ipc.c プロジェクト: hro424/okl4-sh
static inline L4_Word_t
pingpong_ipc_fass (L4_ThreadId_t dest, L4_Word_t untyped)
{
    L4_MsgTag_t tag;
    tag.raw =  0;
    tag.X.u = untyped;
    tag.X.flags = (4 | 8);

    L4_ThreadId_t from;
    tag = L4_Ipc(dest, dest, tag, &from);
    return tag.raw;
}
コード例 #5
0
ファイル: bench_ipc.c プロジェクト: hro424/okl4-sh
static inline L4_Word_t
pingpong_ipc_rpc_server(L4_ThreadId_t dest, L4_Word_t untyped,
        L4_ThreadId_t *cap)
{
    L4_MsgTag_t tag;
    tag.raw = 0;
    tag.X.u = untyped;      //Untyped item number
    tag.X.flags = (4);      //RBLOCK

    tag = L4_Ipc(dest, L4_anythread, tag, cap);
    return tag.raw;
}
コード例 #6
0
ファイル: bench_ipc.c プロジェクト: hro424/okl4-sh
static inline L4_Word_t
pingpong_ipc_open (L4_ThreadId_t dest, L4_Word_t untyped)
{
    L4_MsgTag_t tag;
    tag.raw = 0;
    tag.X.u = untyped;      //Untyped item number
    tag.X.flags = (4 | 8);  //SRBLOCK
   
    L4_ThreadId_t from;
    tag = L4_Ipc(dest, L4_anythread, tag, &from);
    return tag.raw;
}
コード例 #7
0
ファイル: timer.c プロジェクト: dafyddcrosby/L4OS
static void
utimer(void)
{
	L4_KDB_SetThreadName(sos_my_tid(), "utimer");
	L4_Accept(L4_UntypedWordsAcceptor);

	List *entryq;
	entryq = list_empty();

	for (;;) {
		L4_Yield();

		// Walk the timer list
		L4_Word_t now = L4_KDB_GetTick();
		list_delete(entryq, processExpired, &now);

		// Wait for a new packet either blocking or non-blocking
		L4_MsgTag_t tag = L4_Niltag;
		if (list_null(entryq))
			L4_Set_ReceiveBlock(&tag);
		else
			L4_Clear_ReceiveBlock(&tag);

		L4_ThreadId_t wait_tid = L4_nilthread;
		tag = L4_Ipc(L4_nilthread, L4_anythread, tag, &wait_tid);

		if (!L4_IpcFailed(tag)) {
			// Received a time out request queue it
			L4_Msg_t msg; L4_MsgStore(tag, &msg);	// Get the message
			utimer_entry_t *entry = (utimer_entry_t *) L4_MsgWord(&msg, 0);
			entry->fTid  = wait_tid;
			list_shift(entryq, entry);
		}
		else if (3 == L4_ErrorCode()) // Receive error # 1
			continue;	// no-partner - non-blocking
		else
			assert(!"Unhandled IPC error");
	}
}
コード例 #8
0
ファイル: root_thread.c プロジェクト: BaseZwe/f9-kernel
void __USER_TEXT __root_thread(kip_t *kip_ptr, utcb_t *utcb_ptr)
{
	l4_thread_t myself = utcb_ptr->t_globalid;
	char *free_mem = (char *) get_free_base(kip_ptr);

	uint32_t msg[8] = { 0 };

	/* Allocate utcbs and stacks in Free memory region */
	char *utcbs[2] = {
		free_mem, free_mem + UTCB_SIZE
	};
	char *stacks[2] = {
		free_mem + 2 * UTCB_SIZE,
		free_mem + 2 * UTCB_SIZE + STACK_SIZE
	};

	threads[PING_THREAD] = L4_THREAD_NUM(PING_THREAD,
			kip_ptr->thread_info.s.user_base);	/* Ping */
	threads[PONG_THREAD] = L4_THREAD_NUM(PONG_THREAD,
			kip_ptr->thread_info.s.user_base);	/* Pong */

	L4_ThreadControl(threads[PING_THREAD], myself,
			0, myself, utcbs[PING_THREAD]);
	L4_ThreadControl(threads[PONG_THREAD], myself,
			0, myself, utcbs[PONG_THREAD]);

	L4_Map(myself, (memptr_t) stacks[PING_THREAD], STACK_SIZE);
	L4_Map(myself, (memptr_t) stacks[PONG_THREAD], STACK_SIZE);

	L4_Start(threads[PING_THREAD], ping_thread,
			stacks[PING_THREAD] + STACK_SIZE);
	L4_Start(threads[PONG_THREAD], pong_thread,
			stacks[PONG_THREAD] + STACK_SIZE);

	while (1)
		L4_Ipc(L4_NILTHREAD, L4_NILTHREAD, 0, msg);
}