brintos

brintos / linux-shallow public Read only

0
0
Text · 2.5 KiB · 98f1c37 Raw
85 lines · plain
1/*2 * Copyright 2013 Red Hat Inc.3 *4 * Permission is hereby granted, free of charge, to any person obtaining a5 * copy of this software and associated documentation files (the "Software"),6 * to deal in the Software without restriction, including without limitation7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,8 * and/or sell copies of the Software, and to permit persons to whom the9 * Software is furnished to do so, subject to the following conditions:10 *11 * The above copyright notice and this permission notice shall be included in12 * all copies or substantial portions of the Software.13 *14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR20 * OTHER DEALINGS IN THE SOFTWARE.21 *22 * Authors: Ben Skeggs23 */24 25#ifdef INCLUDE_PROC26process(PROC_IDLE, #idle, #idle_recv)27#endif28 29/******************************************************************************30 * IDLE data segment31 *****************************************************************************/32#ifdef INCLUDE_DATA33#endif34 35/******************************************************************************36 * IDLE code segment37 *****************************************************************************/38#ifdef INCLUDE_CODE39// description40//41// $r15 - current (idle)42// $r14 - message43// $r0  - zero44idle_recv:45	ret46 47// description48//49// $r15 - current (idle)50// $r0  - zero51idle:52	// set our "no interrupt has occurred during our execution" flag53	bset $flags $p054 55	// count IDLE invocations for debugging purposes56	nv_iord($r1, NV_PPWR_DSCRATCH(1))57	add b32 $r1 158	nv_iowr(NV_PPWR_DSCRATCH(1), $r1)59 60	// keep looping while there's pending messages for any process61	idle_loop:62	mov $r1 #proc_list_head63	bclr $flags $p264	idle_proc:65		// process the process' messages until there's none left66		idle_proc_exec:67			push $r168			mov b32 $r14 $r169			call(recv)70			pop $r171			bra not $p1 #idle_proc_next72			bset $flags $p273			bra #idle_proc_exec74		// next process!75		idle_proc_next:76		add b32 $r1 #proc_size77		cmp b32 $r1 $r1578		bra ne #idle_proc79	bra $p2 #idle_loop80 81	// sleep if no interrupts have occurred82	sleep $p083	bra #idle84#endif85