blob: 7d84daf1340b52dbf6160d66e3341b2e12d8a59f [file] [log] [blame]
* tbiroot.S
* Copyright (C) 2001, 2002, 2012 Imagination Technologies.
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 2 as published by the
* Free Software Foundation.
* Module that creates and via ___TBI function returns a TBI Root Block for
* interrupt and background processing on the current thread.
.file "tbiroot.S"
#include <asm/metag_regs.h>
* Get data structures and defines from the TBI C header
#include <asm/tbx.h>
/* If signals need to be exchanged we must create a TBI Root Block */
.balign 8
.global ___pTBIs
.type ___pTBIs,object
.long 0 /* Bgnd+Int root block ptrs */
.long 0
.size ___pTBIs,.-___pTBIs
* Return ___pTBIs value specific to execution level with promotion/demotion
* Register Usage: D1Ar1 is Id, D0Re0 is the primary result
* D1Re0 is secondary result (___pTBIs for other exec level)
.balign 4
.global ___TBI
.type ___TBI,function
TSTT D1Ar1,#HI(TBID_ISTAT_BIT) /* Bgnd or Int level? */
MOVT A1LbP,#HI(___pTBIs)
ADD A1LbP,A1LbP,#LO(___pTBIs)
GETL D0Re0,D1Re0,[A1LbP] /* Base of root block table */
SWAPNZ D0Re0,D1Re0 /* Swap if asked */
.size ___TBI,.-___TBI
* Return identifier of the current thread in TBI segment or signal format with
* secondary mask to indicate privilege and interrupt level of thread
.balign 4
.global ___TBIThrdPrivId
.type ___TBIThrdPrivId,function
.global ___TBIThreadId
.type ___TBIThreadId,function
#ifndef METAC_0_1
MOV D1Re0,TXSTATUS /* Are we privileged or int? */
MOV D0Re0,TXENABLE /* Which thread are we? */
/* Disable privilege adaption for now */
/* Thread 0 only */
XOR D0Re0,D0Re0,D0Re0
XOR D1Re0,D1Re0,D1Re0
MOV PC,D1RtP /* Return */
.size ___TBIThrdPrivId,.-___TBIThrdPrivId
.size ___TBIThreadId,.-___TBIThreadId
* End of tbiroot.S