13bed8d67469cc7129b0babc0211c32fa68408ce0David Howells/*
23bed8d67469cc7129b0babc0211c32fa68408ce0David Howells * Copyright 2004-2009 Analog Devices Inc.
33bed8d67469cc7129b0babc0211c32fa68408ce0David Howells *               Tony Kou (tonyko@lineo.ca)
43bed8d67469cc7129b0babc0211c32fa68408ce0David Howells *
53bed8d67469cc7129b0babc0211c32fa68408ce0David Howells * Licensed under the GPL-2 or later
63bed8d67469cc7129b0babc0211c32fa68408ce0David Howells */
73bed8d67469cc7129b0babc0211c32fa68408ce0David Howells
83bed8d67469cc7129b0babc0211c32fa68408ce0David Howells#ifndef _BLACKFIN_SWITCH_TO_H
93bed8d67469cc7129b0babc0211c32fa68408ce0David Howells#define _BLACKFIN_SWITCH_TO_H
103bed8d67469cc7129b0babc0211c32fa68408ce0David Howells
113bed8d67469cc7129b0babc0211c32fa68408ce0David Howells#define prepare_to_switch()     do { } while(0)
123bed8d67469cc7129b0babc0211c32fa68408ce0David Howells
133bed8d67469cc7129b0babc0211c32fa68408ce0David Howells/*
143bed8d67469cc7129b0babc0211c32fa68408ce0David Howells * switch_to(n) should switch tasks to task ptr, first checking that
153bed8d67469cc7129b0babc0211c32fa68408ce0David Howells * ptr isn't the current task, in which case it does nothing.
163bed8d67469cc7129b0babc0211c32fa68408ce0David Howells */
173bed8d67469cc7129b0babc0211c32fa68408ce0David Howells
183bed8d67469cc7129b0babc0211c32fa68408ce0David Howells#include <asm/l1layout.h>
193bed8d67469cc7129b0babc0211c32fa68408ce0David Howells#include <asm/mem_map.h>
203bed8d67469cc7129b0babc0211c32fa68408ce0David Howells
213bed8d67469cc7129b0babc0211c32fa68408ce0David Howellsasmlinkage struct task_struct *resume(struct task_struct *prev, struct task_struct *next);
223bed8d67469cc7129b0babc0211c32fa68408ce0David Howells
233bed8d67469cc7129b0babc0211c32fa68408ce0David Howells#ifndef CONFIG_SMP
243bed8d67469cc7129b0babc0211c32fa68408ce0David Howells#define switch_to(prev,next,last) \
253bed8d67469cc7129b0babc0211c32fa68408ce0David Howellsdo {    \
263bed8d67469cc7129b0babc0211c32fa68408ce0David Howells	memcpy (&task_thread_info(prev)->l1_task_info, L1_SCRATCH_TASK_INFO, \
273bed8d67469cc7129b0babc0211c32fa68408ce0David Howells		sizeof *L1_SCRATCH_TASK_INFO); \
283bed8d67469cc7129b0babc0211c32fa68408ce0David Howells	memcpy (L1_SCRATCH_TASK_INFO, &task_thread_info(next)->l1_task_info, \
293bed8d67469cc7129b0babc0211c32fa68408ce0David Howells		sizeof *L1_SCRATCH_TASK_INFO); \
303bed8d67469cc7129b0babc0211c32fa68408ce0David Howells	(last) = resume (prev, next);   \
313bed8d67469cc7129b0babc0211c32fa68408ce0David Howells} while (0)
323bed8d67469cc7129b0babc0211c32fa68408ce0David Howells#else
333bed8d67469cc7129b0babc0211c32fa68408ce0David Howells#define switch_to(prev, next, last) \
343bed8d67469cc7129b0babc0211c32fa68408ce0David Howellsdo {    \
353bed8d67469cc7129b0babc0211c32fa68408ce0David Howells	(last) = resume(prev, next);   \
363bed8d67469cc7129b0babc0211c32fa68408ce0David Howells} while (0)
373bed8d67469cc7129b0babc0211c32fa68408ce0David Howells#endif
383bed8d67469cc7129b0babc0211c32fa68408ce0David Howells
393bed8d67469cc7129b0babc0211c32fa68408ce0David Howells#endif /* _BLACKFIN_SWITCH_TO_H */
40