Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 2104 → Rev 2105

/trunk/kernel/generic/include/proc/task.h
36,6 → 36,7
#define KERN_TASK_H_
 
#include <cpu.h>
#include <ipc/ipc.h>
#include <synch/spinlock.h>
#include <synch/mutex.h>
#include <synch/rwlock.h>
51,47 → 52,8
#include <mm/tlb.h>
#include <proc/scheduler.h>
 
#define IPC_MAX_PHONES 16
 
struct answerbox;
struct task;
struct thread;
 
typedef enum {
IPC_PHONE_FREE = 0, /**< Phone is free and can be allocated */
IPC_PHONE_CONNECTING, /**< Phone is connecting somewhere */
IPC_PHONE_CONNECTED, /**< Phone is connected */
IPC_PHONE_HUNGUP, /**< Phone is hung up, waiting for answers to come */
IPC_PHONE_SLAMMED /**< Phone was hungup from server */
} ipc_phone_state_t;
 
/** Structure identifying phone (in TASK structure) */
typedef struct {
SPINLOCK_DECLARE(lock);
link_t link;
struct answerbox *callee;
ipc_phone_state_t state;
atomic_t active_calls;
} phone_t;
 
typedef struct answerbox {
SPINLOCK_DECLARE(lock);
 
struct task *task;
 
waitq_t wq;
 
link_t connected_phones; /**< Phones connected to this answerbox */
link_t calls; /**< Received calls */
link_t dispatched_calls; /* Should be hash table in the future */
 
link_t answers; /**< Answered calls */
 
SPINLOCK_DECLARE(irq_lock);
link_t irq_notifs; /**< Notifications from IRQ handlers */
link_t irq_head; /**< IRQs with notifications to this answerbox. */
} answerbox_t;
 
/** Task structure. */
typedef struct task {
/** Task lock.
/trunk/kernel/generic/include/ipc/ipc.h
158,9 → 158,49
 
#ifdef KERNEL
 
#include <proc/task.h>
#define IPC_MAX_PHONES 16
 
#include <synch/waitq.h>
 
struct answerbox;
struct task;
 
typedef enum {
IPC_PHONE_FREE = 0, /**< Phone is free and can be allocated */
IPC_PHONE_CONNECTING, /**< Phone is connecting somewhere */
IPC_PHONE_CONNECTED, /**< Phone is connected */
IPC_PHONE_HUNGUP, /**< Phone is hung up, waiting for answers to come */
IPC_PHONE_SLAMMED /**< Phone was hungup from server */
} ipc_phone_state_t;
 
/** Structure identifying phone (in TASK structure) */
typedef struct {
SPINLOCK_DECLARE(lock);
link_t link;
struct answerbox *callee;
ipc_phone_state_t state;
atomic_t active_calls;
} phone_t;
 
typedef struct answerbox {
SPINLOCK_DECLARE(lock);
 
struct task *task;
 
waitq_t wq;
 
link_t connected_phones; /**< Phones connected to this answerbox */
link_t calls; /**< Received calls */
link_t dispatched_calls; /* Should be hash table in the future */
 
link_t answers; /**< Answered calls */
 
SPINLOCK_DECLARE(irq_lock);
link_t irq_notifs; /**< Notifications from IRQ handlers */
link_t irq_head; /**< IRQs with notifications to this answerbox. */
} answerbox_t;
 
typedef struct {
unative_t args[IPC_CALL_LEN];
phone_t *phone;
} ipc_data_t;
171,7 → 211,7
int flags;
 
/* Identification of the caller */
task_t *sender;
struct task *sender;
/* The caller box is different from sender->answerbox
* for synchronous calls
*/
/trunk/kernel/arch/sparc64/include/mm/page.h
46,8 → 46,6
 
#ifndef __ASM__
 
//#include <arch/types.h>
//#include <genarch/mm/page_ht.h>
#include <arch/interrupt.h>
 
extern uintptr_t physmem_base;