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