1*cf84ac9aSAndroid Build Coastguard Worker kernel_ulong_t shuffle_scno(kernel_ulong_t scno)2*cf84ac9aSAndroid Build Coastguard Workershuffle_scno(kernel_ulong_t scno) 3*cf84ac9aSAndroid Build Coastguard Worker { 4*cf84ac9aSAndroid Build Coastguard Worker if (scno < ARM_FIRST_SHUFFLED_SYSCALL) 5*cf84ac9aSAndroid Build Coastguard Worker return scno; 6*cf84ac9aSAndroid Build Coastguard Worker 7*cf84ac9aSAndroid Build Coastguard Worker /* __ARM_NR_cmpxchg? Swap with LAST_ORDINARY+1 */ 8*cf84ac9aSAndroid Build Coastguard Worker if (scno == ARM_FIRST_SHUFFLED_SYSCALL) 9*cf84ac9aSAndroid Build Coastguard Worker return 0x000ffff0; 10*cf84ac9aSAndroid Build Coastguard Worker if (scno == 0x000ffff0) 11*cf84ac9aSAndroid Build Coastguard Worker return ARM_FIRST_SHUFFLED_SYSCALL; 12*cf84ac9aSAndroid Build Coastguard Worker 13*cf84ac9aSAndroid Build Coastguard Worker #define ARM_SECOND_SHUFFLED_SYSCALL (ARM_FIRST_SHUFFLED_SYSCALL + 1) 14*cf84ac9aSAndroid Build Coastguard Worker /* 15*cf84ac9aSAndroid Build Coastguard Worker * Is it ARM specific syscall? 16*cf84ac9aSAndroid Build Coastguard Worker * Swap [0x000f0000, 0x000f0000 + LAST_SPECIAL] range 17*cf84ac9aSAndroid Build Coastguard Worker * with [SECOND_SHUFFLED, SECOND_SHUFFLED + LAST_SPECIAL] range. 18*cf84ac9aSAndroid Build Coastguard Worker */ 19*cf84ac9aSAndroid Build Coastguard Worker if (scno >= 0x000f0000 && 20*cf84ac9aSAndroid Build Coastguard Worker scno <= 0x000f0000 + ARM_LAST_SPECIAL_SYSCALL) { 21*cf84ac9aSAndroid Build Coastguard Worker return scno - 0x000f0000 + ARM_SECOND_SHUFFLED_SYSCALL; 22*cf84ac9aSAndroid Build Coastguard Worker } 23*cf84ac9aSAndroid Build Coastguard Worker if (scno <= ARM_SECOND_SHUFFLED_SYSCALL + ARM_LAST_SPECIAL_SYSCALL) { 24*cf84ac9aSAndroid Build Coastguard Worker return scno + 0x000f0000 - ARM_SECOND_SHUFFLED_SYSCALL; 25*cf84ac9aSAndroid Build Coastguard Worker } 26*cf84ac9aSAndroid Build Coastguard Worker 27*cf84ac9aSAndroid Build Coastguard Worker return scno; 28*cf84ac9aSAndroid Build Coastguard Worker } 29