Linux Audio

Check our new training course

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