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 */
v5.9
  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#ifdef CONFIG_ARC_PLAT_EZNPS
 21struct eznps_dp {
 22	unsigned int eflags;
 23	unsigned int gpa1;
 24};
 25#endif
 26
 27/* Arch specific stuff which needs to be saved per task.
 28 * However these items are not so important so as to earn a place in
 29 * struct thread_info
 30 */
 31struct thread_struct {
 32	unsigned long ksp;	/* kernel mode stack pointer */
 33	unsigned long callee_reg;	/* pointer to callee regs */
 34	unsigned long fault_address;	/* dbls as brkpt holder as well */
 35#ifdef CONFIG_ARC_DSP_SAVE_RESTORE_REGS
 36	struct dsp_callee_regs dsp;
 37#endif
 38#ifdef CONFIG_ARC_FPU_SAVE_RESTORE
 39	struct arc_fpu fpu;
 40#endif
 41#ifdef CONFIG_ARC_PLAT_EZNPS
 42	struct eznps_dp dp;
 43#endif
 44};
 45
 46#define INIT_THREAD  {                          \
 47	.ksp = sizeof(init_stack) + (unsigned long) init_stack, \
 48}
 49
 50/* Forward declaration, a strange C thing */
 51struct task_struct;
 52
 53#define task_pt_regs(p) \
 54	((struct pt_regs *)(THREAD_SIZE + (void *)task_stack_page(p)) - 1)
 55
 56/* Free all resources held by a thread */
 57#define release_thread(thread) do { } while (0)
 58
 59/*
 60 * A lot of busy-wait loops in SMP are based off of non-volatile data otherwise
 61 * get optimised away by gcc
 62 */
 63#ifndef CONFIG_EZNPS_MTM_EXT
 64
 65#define cpu_relax()		barrier()
 66
 67#else
 68
 69#define cpu_relax()     \
 70	__asm__ __volatile__ (".word %0" : : "i"(CTOP_INST_SCHD_RW) : "memory")
 71
 72#endif
 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
 89extern void start_thread(struct pt_regs * regs, unsigned long pc,
 90			 unsigned long usp);
 91
 92extern unsigned int get_wchan(struct task_struct *p);
 93
 94#endif /* !__ASSEMBLY__ */
 95
 96/*
 97 * Default System Memory Map on ARC
 98 *
 99 * ---------------------------- (lower 2G, Translated) -------------------------
100 * 0x0000_0000		0x5FFF_FFFF	(user vaddr: TASK_SIZE)
101 * 0x6000_0000		0x6FFF_FFFF	(reserved gutter between U/K)
102 * 0x7000_0000		0x7FFF_FFFF	(kvaddr: vmalloc/modules/pkmap..)
103 *
104 * PAGE_OFFSET ---------------- (Upper 2G, Untranslated) -----------------------
105 * 0x8000_0000		0xBFFF_FFFF	(kernel direct mapped)
106 * 0xC000_0000		0xFFFF_FFFF	(peripheral uncached space)
107 * -----------------------------------------------------------------------------
108 */
109
110#define TASK_SIZE	0x60000000
111
112#define VMALLOC_START	(PAGE_OFFSET - (CONFIG_ARC_KVADDR_SIZE << 20))
113
114/* 1 PGDIR_SIZE each for fixmap/pkmap, 2 PGDIR_SIZE gutter (see asm/highmem.h) */
115#define VMALLOC_SIZE	((CONFIG_ARC_KVADDR_SIZE << 20) - PGDIR_SIZE * 4)
116
117#define VMALLOC_END	(VMALLOC_START + VMALLOC_SIZE)
118
119#define USER_KERNEL_GUTTER    (VMALLOC_START - TASK_SIZE)
120
121#ifdef CONFIG_ARC_PLAT_EZNPS
122/* NPS architecture defines special window of 129M in user address space for
123 * special memory areas, when accessing this window the MMU do not use TLB.
124 * Instead MMU direct the access to:
125 * 0x57f00000:0x57ffffff -- 1M of closely coupled memory (aka CMEM)
126 * 0x58000000:0x5fffffff -- 16 huge pages, 8M each, with fixed map (aka FMTs)
127 *
128 * CMEM - is the fastest memory we got and its size is 16K.
129 * FMT  - is used to map either to internal/external memory.
130 * Internal memory is the second fast memory and its size is 16M
131 * External memory is the biggest memory (16G) and also the slowest.
132 *
133 * STACK_TOP need to be PMD align (21bit) that is why we supply 0x57e00000.
134 */
135#define STACK_TOP       0x57e00000
136#else
137#define STACK_TOP       TASK_SIZE
138#endif
139
140#define STACK_TOP_MAX   STACK_TOP
141
142/* This decides where the kernel will search for a free chunk of vm
143 * space during mmap's.
144 */
145#define TASK_UNMAPPED_BASE      (TASK_SIZE / 3)
146
147#endif /* __ASM_ARC_PROCESSOR_H */