~ubuntu-branches/ubuntu/trusty/apex/trusty

« back to all changes in this revision

Viewing changes to include/asm-arm/domain.h

  • Committer: Bazaar Package Importer
  • Author(s): Oliver Grawert
  • Date: 2009-11-10 11:55:15 UTC
  • mfrom: (2.2.2 squeeze)
  • Revision ID: james.westby@ubuntu.com-20091110115515-6jjsf6rc8py35awe
Tags: 1.6.10ubuntu1
* Merge from debian testing, remaining changes:
  - Move apex VMA address to 4MiB to leave enough space for the ubuntu
  kernel and not overwrite apex in ram when loading.
  - nslu2 configuration: set CONFIG_RAMDISK_SIZE=0x0055FFF0 instead of
  0x005FFFF0 to make enough room for ubuntu initramfs.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *  linux/include/asm-arm/domain.h
 
3
 *
 
4
 *  Copyright (C) 1999 Russell King.
 
5
 *
 
6
 * This program is free software; you can redistribute it and/or modify
 
7
 * it under the terms of the GNU General Public License version 2 as
 
8
 * published by the Free Software Foundation.
 
9
 */
 
10
#ifndef __ASM_PROC_DOMAIN_H
 
11
#define __ASM_PROC_DOMAIN_H
 
12
 
 
13
/*
 
14
 * Domain numbers
 
15
 *
 
16
 *  DOMAIN_IO     - domain 2 includes all IO only
 
17
 *  DOMAIN_USER   - domain 1 includes all user memory only
 
18
 *  DOMAIN_KERNEL - domain 0 includes all kernel memory only
 
19
 *
 
20
 * The domain numbering depends on whether we support 36 physical
 
21
 * address for I/O or not.  Addresses above the 32 bit boundary can
 
22
 * only be mapped using supersections and supersections can only
 
23
 * be set for domain 0.  We could just default to DOMAIN_IO as zero,
 
24
 * but there may be systems with supersection support and no 36-bit
 
25
 * addressing.  In such cases, we want to map system memory with
 
26
 * supersections to reduce TLB misses and footprint.
 
27
 *
 
28
 * 36-bit addressing and supersections are only available on
 
29
 * CPUs based on ARMv6+ or the Intel XSC3 core.
 
30
 */
 
31
#ifndef CONFIG_IO_36
 
32
#define DOMAIN_KERNEL   0
 
33
#define DOMAIN_TABLE    0
 
34
#define DOMAIN_USER     1
 
35
#define DOMAIN_IO       2
 
36
#else
 
37
#define DOMAIN_KERNEL   2
 
38
#define DOMAIN_TABLE    2
 
39
#define DOMAIN_USER     1
 
40
#define DOMAIN_IO       0
 
41
#endif
 
42
 
 
43
/*
 
44
 * Domain types
 
45
 */
 
46
#define DOMAIN_NOACCESS 0
 
47
#define DOMAIN_CLIENT   1
 
48
#define DOMAIN_MANAGER  3
 
49
 
 
50
#define domain_val(dom,type)    ((type) << (2*(dom)))
 
51
 
 
52
#ifndef __ASSEMBLY__
 
53
 
 
54
#ifdef CONFIG_MMU
 
55
#define set_domain(x)                                   \
 
56
        do {                                            \
 
57
        __asm__ __volatile__(                           \
 
58
        "mcr    p15, 0, %0, c3, c0      @ set domain"   \
 
59
          : : "r" (x));                                 \
 
60
        isb();                                          \
 
61
        } while (0)
 
62
 
 
63
#define modify_domain(dom,type)                                 \
 
64
        do {                                                    \
 
65
        struct thread_info *thread = current_thread_info();     \
 
66
        unsigned int domain = thread->cpu_domain;               \
 
67
        domain &= ~domain_val(dom, DOMAIN_MANAGER);             \
 
68
        thread->cpu_domain = domain | domain_val(dom, type);    \
 
69
        set_domain(thread->cpu_domain);                         \
 
70
        } while (0)
 
71
 
 
72
#else
 
73
#define set_domain(x)           do { } while (0)
 
74
#define modify_domain(dom,type) do { } while (0)
 
75
#endif
 
76
 
 
77
#endif
 
78
#endif /* !__ASSEMBLY__ */