1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun/* 3*4882a593Smuzhiyun * "Indirect" DCR access 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (c) 2004 Eugene Surovegin <ebs@ebshome.net> 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun#include <asm/ppc_asm.h> 9*4882a593Smuzhiyun#include <asm/processor.h> 10*4882a593Smuzhiyun#include <asm/bug.h> 11*4882a593Smuzhiyun#include <asm/export.h> 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun#define DCR_ACCESS_PROLOG(table) \ 14*4882a593Smuzhiyun cmplwi cr0,r3,1024; \ 15*4882a593Smuzhiyun rlwinm r3,r3,4,18,27; \ 16*4882a593Smuzhiyun lis r5,table@h; \ 17*4882a593Smuzhiyun ori r5,r5,table@l; \ 18*4882a593Smuzhiyun add r3,r3,r5; \ 19*4882a593Smuzhiyun bge- 1f; \ 20*4882a593Smuzhiyun mtctr r3; \ 21*4882a593Smuzhiyun bctr; \ 22*4882a593Smuzhiyun1: trap; \ 23*4882a593Smuzhiyun EMIT_BUG_ENTRY 1b,__FILE__,__LINE__,0; \ 24*4882a593Smuzhiyun blr 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun_GLOBAL(__mfdcr) 27*4882a593Smuzhiyun DCR_ACCESS_PROLOG(__mfdcr_table) 28*4882a593SmuzhiyunEXPORT_SYMBOL(__mfdcr) 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun_GLOBAL(__mtdcr) 31*4882a593Smuzhiyun DCR_ACCESS_PROLOG(__mtdcr_table) 32*4882a593SmuzhiyunEXPORT_SYMBOL(__mtdcr) 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun__mfdcr_table: 35*4882a593Smuzhiyun mfdcr r3,0; blr 36*4882a593Smuzhiyun__mtdcr_table: 37*4882a593Smuzhiyun mtdcr 0,r4; blr 38*4882a593Smuzhiyun 39*4882a593Smuzhiyundcr = 1 40*4882a593Smuzhiyun .rept 1023 41*4882a593Smuzhiyun mfdcr r3,dcr; blr 42*4882a593Smuzhiyun mtdcr dcr,r4; blr 43*4882a593Smuzhiyun dcr = dcr + 1 44*4882a593Smuzhiyun .endr 45