Linux Audio

Check our new training course

Loading...
v5.14.15
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
  4 *
 
 
 
 
  5 * vineetg: March 2009
  6 *  -Implemented task_pt_regs( )
  7 *
  8 * Amit Bhor, Sameer Dhavale, Ashwin Chaugule: Codito Technologies 2004
  9 */
 10
 11#ifndef __ASM_ARC_PROCESSOR_H
 12#define __ASM_ARC_PROCESSOR_H
 13
 14#ifndef __ASSEMBLY__
 15
 16#include <asm/ptrace.h>
 17#include <asm/dsp.h>
 18#include <asm/fpu.h>
 
 
 
 
 
 
 
 19
 20/* Arch specific stuff which needs to be saved per task.
 21 * However these items are not so important so as to earn a place in
 22 * struct thread_info
 23 */
 24struct thread_struct {
 25	unsigned long ksp;	/* kernel mode stack pointer */
 26	unsigned long callee_reg;	/* pointer to callee regs */
 27	unsigned long fault_address;	/* dbls as brkpt holder as well */
 28#ifdef CONFIG_ARC_DSP_SAVE_RESTORE_REGS
 29	struct dsp_callee_regs dsp;
 30#endif
 31#ifdef CONFIG_ARC_FPU_SAVE_RESTORE
 32	struct arc_fpu fpu;
 33#endif
 34};
 35
 36#define INIT_THREAD  {                          \
 37	.ksp = sizeof(init_stack) + (unsigned long) init_stack, \
 38}
 39
 40/* Forward declaration, a strange C thing */
 41struct task_struct;
 42
 43#define task_pt_regs(p) \
 44	((struct pt_regs *)(THREAD_SIZE + (void *)task_stack_page(p)) - 1)
 45
 46/* Free all resources held by a thread */
 47#define release_thread(thread) do { } while (0)
 48
 49/*
 50 * A lot of busy-wait loops in SMP are based off of non-volatile data otherwise
 51 * get optimised away by gcc
 52 */
 
 
 53#define cpu_relax()		barrier()
 54
 
 
 
 
 
 
 
 
 
 
 55#define KSTK_EIP(tsk)   (task_pt_regs(tsk)->ret)
 56#define KSTK_ESP(tsk)   (task_pt_regs(tsk)->sp)
 57
 58/*
 59 * Where about of Task's sp, fp, blink when it was last seen in kernel mode.
 60 * Look in process.c for details of kernel stack layout
 61 */
 62#define TSK_K_ESP(tsk)		(tsk->thread.ksp)
 63
 64#define TSK_K_REG(tsk, off)	(*((unsigned long *)(TSK_K_ESP(tsk) + \
 65					sizeof(struct callee_regs) + off)))
 66
 67#define TSK_K_BLINK(tsk)	TSK_K_REG(tsk, 4)
 68#define TSK_K_FP(tsk)		TSK_K_REG(tsk, 0)
 69
 
 
 70extern void start_thread(struct pt_regs * regs, unsigned long pc,
 71			 unsigned long usp);
 72
 73extern unsigned int get_wchan(struct task_struct *p);
 74
 
 
 
 
 
 
 
 
 75#endif /* !__ASSEMBLY__ */
 76
 77/*
 78 * Default System Memory Map on ARC
 79 *
 80 * ---------------------------- (lower 2G, Translated) -------------------------
 81 * 0x0000_0000		0x5FFF_FFFF	(user vaddr: TASK_SIZE)
 82 * 0x6000_0000		0x6FFF_FFFF	(reserved gutter between U/K)
 83 * 0x7000_0000		0x7FFF_FFFF	(kvaddr: vmalloc/modules/pkmap..)
 84 *
 85 * PAGE_OFFSET ---------------- (Upper 2G, Untranslated) -----------------------
 86 * 0x8000_0000		0xBFFF_FFFF	(kernel direct mapped)
 87 * 0xC000_0000		0xFFFF_FFFF	(peripheral uncached space)
 88 * -----------------------------------------------------------------------------
 89 */
 90
 91#define TASK_SIZE	0x60000000
 92
 93#define VMALLOC_START	(PAGE_OFFSET - (CONFIG_ARC_KVADDR_SIZE << 20))
 94
 95/* 1 PGDIR_SIZE each for fixmap/pkmap, 2 PGDIR_SIZE gutter (see asm/highmem.h) */
 96#define VMALLOC_SIZE	((CONFIG_ARC_KVADDR_SIZE << 20) - PGDIR_SIZE * 4)
 97
 98#define VMALLOC_END	(VMALLOC_START + VMALLOC_SIZE)
 99
100#define USER_KERNEL_GUTTER    (VMALLOC_START - TASK_SIZE)
101
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102#define STACK_TOP       TASK_SIZE
 
 
103#define STACK_TOP_MAX   STACK_TOP
104
105/* This decides where the kernel will search for a free chunk of vm
106 * space during mmap's.
107 */
108#define TASK_UNMAPPED_BASE      (TASK_SIZE / 3)
109
110#endif /* __ASM_ARC_PROCESSOR_H */
v4.10.11
 
  1/*
  2 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
  3 *
  4 * This program is free software; you can redistribute it and/or modify
  5 * it under the terms of the GNU General Public License version 2 as
  6 * published by the Free Software Foundation.
  7 *
  8 * vineetg: March 2009
  9 *  -Implemented task_pt_regs( )
 10 *
 11 * Amit Bhor, Sameer Dhavale, Ashwin Chaugule: Codito Technologies 2004
 12 */
 13
 14#ifndef __ASM_ARC_PROCESSOR_H
 15#define __ASM_ARC_PROCESSOR_H
 16
 17#ifndef __ASSEMBLY__
 18
 19#include <asm/ptrace.h>
 20
 21#ifdef CONFIG_ARC_FPU_SAVE_RESTORE
 22/* These DPFP regs need to be saved/restored across ctx-sw */
 23struct arc_fpu {
 24	struct {
 25		unsigned int l, h;
 26	} aux_dpfp[2];
 27};
 28#endif
 29
 30/* Arch specific stuff which needs to be saved per task.
 31 * However these items are not so important so as to earn a place in
 32 * struct thread_info
 33 */
 34struct thread_struct {
 35	unsigned long ksp;	/* kernel mode stack pointer */
 36	unsigned long callee_reg;	/* pointer to callee regs */
 37	unsigned long fault_address;	/* dbls as brkpt holder as well */
 
 
 
 38#ifdef CONFIG_ARC_FPU_SAVE_RESTORE
 39	struct arc_fpu fpu;
 40#endif
 41};
 42
 43#define INIT_THREAD  {                          \
 44	.ksp = sizeof(init_stack) + (unsigned long) init_stack, \
 45}
 46
 47/* Forward declaration, a strange C thing */
 48struct task_struct;
 49
 50#define task_pt_regs(p) \
 51	((struct pt_regs *)(THREAD_SIZE + (void *)task_stack_page(p)) - 1)
 52
 53/* Free all resources held by a thread */
 54#define release_thread(thread) do { } while (0)
 55
 56/*
 57 * A lot of busy-wait loops in SMP are based off of non-volatile data otherwise
 58 * get optimised away by gcc
 59 */
 60#ifndef CONFIG_EZNPS_MTM_EXT
 61
 62#define cpu_relax()		barrier()
 63
 64#else
 65
 66#define cpu_relax()     \
 67	__asm__ __volatile__ (".word %0" : : "i"(CTOP_INST_SCHD_RW) : "memory")
 68
 69#endif
 70
 71#define copy_segments(tsk, mm)      do { } while (0)
 72#define release_segments(mm)        do { } while (0)
 73
 74#define KSTK_EIP(tsk)   (task_pt_regs(tsk)->ret)
 75#define KSTK_ESP(tsk)   (task_pt_regs(tsk)->sp)
 76
 77/*
 78 * Where about of Task's sp, fp, blink when it was last seen in kernel mode.
 79 * Look in process.c for details of kernel stack layout
 80 */
 81#define TSK_K_ESP(tsk)		(tsk->thread.ksp)
 82
 83#define TSK_K_REG(tsk, off)	(*((unsigned long *)(TSK_K_ESP(tsk) + \
 84					sizeof(struct callee_regs) + off)))
 85
 86#define TSK_K_BLINK(tsk)	TSK_K_REG(tsk, 4)
 87#define TSK_K_FP(tsk)		TSK_K_REG(tsk, 0)
 88
 89#define thread_saved_pc(tsk)	TSK_K_BLINK(tsk)
 90
 91extern void start_thread(struct pt_regs * regs, unsigned long pc,
 92			 unsigned long usp);
 93
 94extern unsigned int get_wchan(struct task_struct *p);
 95
 96/*
 97 * Default implementation of macro that returns current
 98 * instruction pointer ("program counter").
 99 * Should the PC register be read instead ? This macro does not seem to
100 * be used in many places so this wont be all that bad.
101 */
102#define current_text_addr() ({ __label__ _l; _l: &&_l; })
103
104#endif /* !__ASSEMBLY__ */
105
106/*
107 * Default System Memory Map on ARC
108 *
109 * ---------------------------- (lower 2G, Translated) -------------------------
110 * 0x0000_0000		0x5FFF_FFFF	(user vaddr: TASK_SIZE)
111 * 0x6000_0000		0x6FFF_FFFF	(reserved gutter between U/K)
112 * 0x7000_0000		0x7FFF_FFFF	(kvaddr: vmalloc/modules/pkmap..)
113 *
114 * PAGE_OFFSET ---------------- (Upper 2G, Untranslated) -----------------------
115 * 0x8000_0000		0xBFFF_FFFF	(kernel direct mapped)
116 * 0xC000_0000		0xFFFF_FFFF	(peripheral uncached space)
117 * -----------------------------------------------------------------------------
118 */
119
120#define TASK_SIZE	0x60000000
121
122#define VMALLOC_START	(PAGE_OFFSET - (CONFIG_ARC_KVADDR_SIZE << 20))
123
124/* 1 PGDIR_SIZE each for fixmap/pkmap, 2 PGDIR_SIZE gutter (see asm/highmem.h) */
125#define VMALLOC_SIZE	((CONFIG_ARC_KVADDR_SIZE << 20) - PGDIR_SIZE * 4)
126
127#define VMALLOC_END	(VMALLOC_START + VMALLOC_SIZE)
128
129#define USER_KERNEL_GUTTER    (VMALLOC_START - TASK_SIZE)
130
131#ifdef CONFIG_ARC_PLAT_EZNPS
132/* NPS architecture defines special window of 129M in user address space for
133 * special memory areas, when accessing this window the MMU do not use TLB.
134 * Instead MMU direct the access to:
135 * 0x57f00000:0x57ffffff -- 1M of closely coupled memory (aka CMEM)
136 * 0x58000000:0x5fffffff -- 16 huge pages, 8M each, with fixed map (aka FMTs)
137 *
138 * CMEM - is the fastest memory we got and its size is 16K.
139 * FMT  - is used to map either to internal/external memory.
140 * Internal memory is the second fast memory and its size is 16M
141 * External memory is the biggest memory (16G) and also the slowest.
142 *
143 * STACK_TOP need to be PMD align (21bit) that is why we supply 0x57e00000.
144 */
145#define STACK_TOP       0x57e00000
146#else
147#define STACK_TOP       TASK_SIZE
148#endif
149
150#define STACK_TOP_MAX   STACK_TOP
151
152/* This decides where the kernel will search for a free chunk of vm
153 * space during mmap's.
154 */
155#define TASK_UNMAPPED_BASE      (TASK_SIZE / 3)
156
157#endif /* __ASM_ARC_PROCESSOR_H */