OpenCores
URL https://opencores.org/ocsvn/c0or1k/c0or1k/trunk

Subversion Repositories c0or1k

[/] [c0or1k/] [trunk/] [include/] [l4/] [generic/] [container.h] - Rev 2

Compare with Previous | Blame | View Log

/*
 * Definitions for Codezero Containers
 *
 * Copyright (C) 2009 Bahadir Balban
 */
#ifndef __CONTAINER_H__
#define __CONTAINER_H__
 
#include <l4/generic/scheduler.h>
#include <l4/generic/space.h>
#include <l4/generic/capability.h>
#include <l4/generic/resource.h>
#include <l4/generic/tcb.h>
#include <l4/lib/idpool.h>
#include <l4/api/mutex.h>
#include <l4/lib/list.h>
#include <l4/lib/idpool.h>
 
#define curcont			(current->container)
 
#define CONFIG_CONTAINER_NAMESIZE		64
#define CONFIG_MAX_CAPS_USED			16
#define CONFIG_MAX_PAGERS_USED			1
 
/* Container macro. No locks needed! */
 
struct pager {
	struct ktcb *tcb;
	unsigned long start_lma;
	unsigned long start_vma;
	unsigned long start_address;
	unsigned long stack_address;
	unsigned long memsize;
	struct cap_list cap_list;
 
	/*
	 * Section markings,
	 * We dont care for other types of sections,
	 * RO will be included inside RX.
	 */
	unsigned long rw_sections_start;
	unsigned long rw_sections_end;
	unsigned long rx_sections_start;
	unsigned long rx_sections_end;
};
 
 
struct container {
	l4id_t cid;				/* Unique container id */
	int npagers;				/* # of pagers */
	struct link list;			/* List ref for containers */
	struct address_space_list space_list;	/* List of address spaces */
	char name[CONFIG_CONTAINER_NAMESIZE];	/* Name of container */
	struct ktcb_list ktcb_list;		/* List of threads */
	struct link pager_list;			/* List of pagers */
 
	struct id_pool *thread_id_pool;		/* Id pools for thread/spaces */
	struct id_pool *space_id_pool;
 
	struct mutex_queue_head mutex_queue_head; /* Userspace mutex list */
	struct cap_list cap_list; 		/* Capabilities shared by whole container */
	struct pager *pager;			/* Boot-time array of pagers */
};
 
/* Compact, raw capability structure */
struct cap_info {
	l4id_t target;
	unsigned int type;
	u32 access;
	unsigned long start;
	unsigned long end;
	unsigned long size;
	unsigned int attr;	/* Attributes (like device types) */
	l4id_t irq;
};
 
 
struct pager_info {
	unsigned long pager_lma;
	unsigned long pager_vma;
	unsigned long pager_size;
	unsigned long start_address;
	unsigned long stack_address;
 
	/*
	 * Section markings,
	 * We dont care for other types of sections,
	 * RO will be included inside RX.
	 */
	unsigned long rw_sections_start;
	unsigned long rw_sections_end;
	unsigned long rx_sections_start;
	unsigned long rx_sections_end;
 
	/* Number of capabilities defined */
	int ncaps;
 
	/*
	 * Zero or more ipc caps,
	 * One or more thread pool caps,
	 * One or more space pool caps,
	 * One or more exregs caps,
	 * One or more tcontrol caps,
	 * One or more cputime caps,
	 * One or more physmem caps,
	 * One or more virtmem caps,
	 * Zero or more umutex caps,
	 */
	struct cap_info caps[CONFIG_MAX_CAPS_USED];
};
 
/*
 * This auto-generated structure is
 * used to create run-time containers
 */
struct container_info {
	char name[CONFIG_CONTAINER_NAMESIZE];
	int npagers;
	struct pager_info pager[CONFIG_MAX_PAGERS_USED];
};
 
extern struct container_info cinfo[];
 
void kres_insert_container(struct container *c,
			    struct kernel_resources *kres);
 
struct container *container_create(void);
 
int container_init_pagers(struct kernel_resources *kres);
 
int init_containers(struct kernel_resources *kres);
struct container *container_find(struct kernel_resources *kres, l4id_t cid);
 
#endif /* __CONTAINER_H__ */
 
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.