iseries_asm.h

来自「是关于linux2.5.1的完全源码」· C头文件 代码 · 共 63 行

H
63
字号
/* * BK Id: %F% %I% %G% %U% %#% *//* * arch/ppc/kernel/iSeries_asm.h * * Definitions used by various bits of low-level assembly code on iSeries. * * Copyright (C) 2001 IBM Corp. * *  This program is free software; you can redistribute it and/or *  modify it under the terms of the GNU General Public License *  as published by the Free Software Foundation; either version *  2 of the License, or (at your option) any later version. */#define CHECKLPQUEUE(ra,rb,rc)         \	mfspr   rb,SPRG1;       /* Get Paca address */\	lbz ra,PACALPPACA+LPPACAIPIINT(rb); /* Get IPI int flag */\	cmpi    0,ra,0;         /* IPI occurred in hypervisor ? */\	bne 99f;            /* If so, skip rest */\	lwz ra,PACALPQUEUE(rb); /* Get LpQueue address */\	cmpi    0,ra,0;         /* Does LpQueue exist? */\	beq 99f;            /* If not skip rest */\	lbz rb,LPQINUSEWORD(ra);    /* Test for LpQueue recursion */\	cmpi    0,rb,1;         /* If we are about to recurse */\	beq 99f;            /* If so, skip rest */\	lwz rb,LPQCUREVENTPTR(ra);  /* Get current LpEvent */\	lbz rb,LPEVENTFLAGS(rb);    /* Get Valid bit */\	lbz rc,LPQOVERFLOW(ra); /* Get LpQueue overflow */\	andi.   ra,rb,0x0080;       /* Isolate Valid bit */\	or. ra,ra,rc;       /* 0 == no pending events */\99:#define CHECKDECR(ra,rb)           \	mfspr   rb,SPRG1;       /* Get Paca address */\	lbz ra,PACALPPACA+LPPACADECRINT(rb); /* Get DECR int flag */\	cmpi    0,ra,0;         /* DECR occurred in hypervisor ? */\	beq 99f;            /* If not, skip rest */\	xor ra,ra,ra;           \	stb ra,PACALPPACA+LPPACADECRINT(rb); /* Clear DECR int flag */\99:#define CHECKANYINT(ra,rb,rc)			\	mfspr	rb,SPRG1;		/* Get Paca address */\	ld	ra,PACALPPACA+LPPACAANYINT(rb); /* Get all interrupt flags */\					/* Note use of ld, protected by soft/hard disabled */\	cmpldi	0,ra,0;			/* Any interrupt occurred while soft disabled? */\	bne	99f;			/* If so, skip rest */\	lwz	ra,PACALPQUEUE(rb);	/* Get LpQueue address */\	cmpi	0,ra,0;			/* Does LpQueue exist? */\	beq	99f;			/* If not skip rest */\	lwz	rb,LPQINUSEWORD(ra);	/* Test for LpQueue recursion */\	cmpi	0,rb,1;			/* If we are about to recurse */\	beq	99f;			/* If so, skip rest */\	lwz	rb,LPQCUREVENTPTR(ra);	/* Get current LpEvent */\	lbz	rb,LPEVENTFLAGS(rb);	/* Get Valid bit */\	lbz	rc,LPQOVERFLOW(ra);	/* Get LpQueue overflow */\	andi.	ra,rb,0x0080;		/* Isolate Valid bit */\	or.	ra,ra,rc;		/* 0 == no pending events */\99:

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?