Exemplo n.º 1
0
static __constructor__ void __init_rtdm_interface(void)
{
	/* The following call may fail; binding errors will be
	   eventually caught later when the user tries to open a
	   device or socket. */

	__rtdm_muxid =
		xeno_bind_skin_opt(RTDM_SKIN_MAGIC, "rtdm", "xeno_rtdm");
	__rtdm_muxid = __xn_mux_shifted_id(__rtdm_muxid);

}
Exemplo n.º 2
0
static __constructor__ void __init_xeno_interface(void)
{
	T_CTSK pk_ctsk;
	ER err;

	__uitron_muxid = xeno_bind_skin(uITRON_SKIN_MAGIC, "uitron", "xeno_uitron");
	__uitron_muxid = __xn_mux_shifted_id(__uitron_muxid);

	/* Shadow the main thread. */
	pk_ctsk.stksz = 0;
	pk_ctsk.itskpri = 0;	/* non-RT shadow. */
	err = shd_tsk(1, &pk_ctsk);

	if (err) {
		fprintf(stderr, "Xenomai uITRON skin init: shd_tsk() failed, status %d", err);
		exit(EXIT_FAILURE);
	}
}
Exemplo n.º 3
0
void __init_xeno_interface(void)
{
	__native_muxid =
	    xeno_bind_skin(XENO_SKIN_MAGIC, "native", "xeno_native");

#ifdef CONFIG_XENO_HW_DIRECT_TSC
	native_timer_init(__native_muxid);
#endif /* CONFIG_XENO_HW_DIRECT_TSC */
	
	__native_muxid = __xn_mux_shifted_id(__native_muxid);

	/* Allocate a TSD key for indexing self task pointers. */

	if (pthread_key_create(&__native_tskey, &__flush_tsd) != 0) {
		fprintf(stderr, "Xenomai: failed to allocate new TSD key?!\n");
		exit(1);
	}
}
Exemplo n.º 4
0
static __constructor__ void __init_xeno_interface(void)
{
	int err;

	__native_muxid =
	    xeno_bind_skin(XENO_SKIN_MAGIC, "native", "xeno_native");

	__native_muxid = __xn_mux_shifted_id(__native_muxid);

	if (fork_handler_registered)
		return;

	err = pthread_atfork(NULL, NULL, &__init_xeno_interface);
	if (err) {
		fprintf(stderr, "Xenomai native skin init: "
			"pthread_atfork: %s\n", strerror(err));
		exit(EXIT_FAILURE);
	}
	fork_handler_registered = 1;
}
Exemplo n.º 5
0
static __constructor__ void __init_xeno_interface(void)
{
	u_long err, tid;

	__psos_muxid = xeno_bind_skin(PSOS_SKIN_MAGIC, "psos", "xeno_psos");

	err = XENOMAI_SYSCALL2(__xn_sys_info, __psos_muxid, &__psos_sysinfo);

	if (err) {
		fprintf(stderr, "Xenomai pSOS skin init: cannot retrieve sysinfo, status %ld", err);
		exit(EXIT_FAILURE);
	}

	__psos_muxid = __xn_mux_shifted_id(__psos_muxid);

	/* Shadow the main thread. */
	err = t_shadow("MAIN", 0, 0, &tid);

	if (err) {
		fprintf(stderr, "Xenomai pSOS skin init: t_shadow() failed, status %ld", err);
		exit(EXIT_FAILURE);
	}
}
Exemplo n.º 6
0
void __init_xeno_interface(void)
{
	u_long err, tid;

	__psos_muxid = xeno_bind_skin(PSOS_SKIN_MAGIC, "psos", "xeno_psos");

	err = XENOMAI_SYSCALL2(__xn_sys_info, __psos_muxid, &__psos_sysinfo);

	if (err) {
		fprintf(stderr, "Xenomai pSOS skin init: cannot retrieve sysinfo, status %ld", err);
		exit(EXIT_FAILURE);
	}

	__psos_muxid = __xn_mux_shifted_id(__psos_muxid);

	/* Shadow the main thread. mlock the whole memory for the time
	   of the syscall, in order to avoid the SIGXCPU signal. */
	if (mlockall(MCL_CURRENT | MCL_FUTURE)) {
		perror("Xenomai pSOS skin init: mlockall() failed");
		exit(EXIT_FAILURE);
	}

	err = t_shadow("MAIN", 0, 0, &tid);

	if (err) {
		fprintf(stderr, "Xenomai pSOS skin init: t_shadow() failed, status %ld", err);
		exit(EXIT_FAILURE);
	}

#ifndef CONFIG_XENO_PSOS_AUTO_MLOCKALL
	if (munlockall()) {
		perror("Xenomai pSOS skin init: munlockall");
		exit(EXIT_FAILURE);
	}
#endif /* !CONFIG_XENO_PSOS_AUTO_MLOCKALL */
}
Exemplo n.º 7
0
static __constructor__ void __init_xeno_interface(void)
{
	__vrtx_muxid =
	    xeno_bind_skin(VRTX_SKIN_MAGIC, "vrtx", "xeno_vrtx");
	__vrtx_muxid = __xn_mux_shifted_id(__vrtx_muxid);
}
Exemplo n.º 8
0
static __constructor__ void __init_posix_interface(void)
{
	struct sched_param parm;
	int policy;
	int muxid, err;
	const char *noshadow;

	rt_print_auto_init(1);

	muxid =
	    xeno_bind_skin(PSE51_SKIN_MAGIC, "POSIX", "xeno_posix");

#ifdef XNARCH_HAVE_NONPRIV_TSC
	pse51_clock_init(muxid);
#endif /* XNARCH_HAVE_NONPRIV_TSC */

	__pse51_muxid = __xn_mux_shifted_id(muxid);

	muxid = XENOMAI_SYSBIND(RTDM_SKIN_MAGIC,
				XENOMAI_FEAT_DEP, XENOMAI_ABI_REV, NULL);
	if (muxid > 0) {
		__pse51_rtdm_muxid = __xn_mux_shifted_id(muxid);
		__pse51_rtdm_fd_start = FD_SETSIZE - XENOMAI_SKINCALL0(__pse51_rtdm_muxid,
								 __rtdm_fdcount);
	}

	pse51_mutex_init();

	noshadow = getenv("XENO_NOSHADOW");
	if ((!noshadow || !*noshadow) && xeno_get_current() == XN_NO_HANDLE) {
		err = __real_pthread_getschedparam(pthread_self(), &policy,
						   &parm);
		if (err) {
			fprintf(stderr, "Xenomai Posix skin init: "
				"pthread_getschedparam: %s\n", strerror(err));
			exit(EXIT_FAILURE);
		}

		err = __wrap_pthread_setschedparam(pthread_self(), policy,
						   &parm);
		if (err) {
			fprintf(stderr, "Xenomai Posix skin init: "
				"pthread_setschedparam: %s\n", strerror(err));
			exit(EXIT_FAILURE);
		}
	}

	if (fork_handler_registered)
		return;

	err = pthread_atfork(NULL, NULL, &__init_posix_interface);
	if (err) {
		fprintf(stderr, "Xenomai Posix skin init: "
			"pthread_atfork: %s\n", strerror(err));
		exit(EXIT_FAILURE);
	}
	fork_handler_registered = 1;

	if (sizeof(struct __shadow_mutex) > sizeof(pthread_mutex_t)) {
		fprintf(stderr, "sizeof(pthread_mutex_t): %d <"
			" sizeof(shadow_mutex): %d !\n",
			(int) sizeof(pthread_mutex_t),
			(int) sizeof(struct __shadow_mutex));
		exit(EXIT_FAILURE);
	}
}
Exemplo n.º 9
0
void __init_posix_interface(void)
{
	struct xnbindreq breq;
	
#ifndef CONFIG_XENO_LIBS_DLOPEN
	struct sched_param parm;
	int policy;
#endif /* !CONFIG_XENO_LIBS_DLOPEN */
	int muxid, err;

	rt_print_auto_init(1);

	muxid =
	    xeno_bind_skin(PSE51_SKIN_MAGIC, "POSIX", "xeno_posix");

	pse51_clock_init(muxid);

	__pse51_muxid = __xn_mux_shifted_id(muxid);

	breq.feat_req = XENOMAI_FEAT_DEP;
	breq.abi_rev = XENOMAI_ABI_REV;
	muxid = XENOMAI_SYSBIND(RTDM_SKIN_MAGIC, &breq);
	if (muxid > 0) {
		__rtdm_muxid = __xn_mux_shifted_id(muxid);
		__rtdm_fd_start = FD_SETSIZE - XENOMAI_SKINCALL0(__rtdm_muxid,
								 __rtdm_fdcount);
	}

	/* If not dlopening, we are going to shadow the main thread, so mlock
	   the whole memory for the time of the syscall, in order to avoid the
	   SIGXCPU signal. */
#if defined(CONFIG_XENO_POSIX_AUTO_MLOCKALL) || !defined(CONFIG_XENO_LIBS_DLOPEN)
	if (mlockall(MCL_CURRENT | MCL_FUTURE)) {
		perror("Xenomai Posix skin init: mlockall");
		exit(EXIT_FAILURE);
	}
#endif /* auto mlockall || !dlopen */

	/* Don't use auto-shadowing if we are likely invoked from dlopen. */
#ifndef CONFIG_XENO_LIBS_DLOPEN
	err = __STD(pthread_getschedparam(pthread_self(), &policy, &parm));
	if (err) {
		fprintf(stderr, "Xenomai Posix skin init: "
			"pthread_getschedparam: %s\n", strerror(err));
		exit(EXIT_FAILURE);
	}

	err = __wrap_pthread_setschedparam(pthread_self(), policy, &parm);
	if (err) {
		fprintf(stderr, "Xenomai Posix skin init: "
			"pthread_setschedparam: %s\n", strerror(err));
		exit(EXIT_FAILURE);
	}

#ifndef CONFIG_XENO_POSIX_AUTO_MLOCKALL
	if (munlockall()) {
		perror("Xenomai Posix skin init: munlockall");
		exit(EXIT_FAILURE);
	}
#endif /* !CONFIG_XENO_POSIX_AUTO_MLOCKALL */
#endif /* !CONFIG_XENO_LIBS_DLOPEN */

	if (fork_handler_registered)
		return;

	err = pthread_atfork(NULL, NULL, &__init_posix_interface);
	if (err) {
		fprintf(stderr, "Xenomai Posix skin init: "
			"pthread_atfork: %s\n", strerror(err));
		exit(EXIT_FAILURE);
	}
	fork_handler_registered = 1;

	if (sizeof(struct __shadow_mutex) > sizeof(pthread_mutex_t)) {
		fprintf(stderr, "sizeof(pthread_mutex_t): %d <"
			" sizeof(shadow_mutex): %d !\n",
			(int) sizeof(pthread_mutex_t),
			(int) sizeof(struct __shadow_mutex));
		exit(EXIT_FAILURE);
	}
}