Rev 2116 | Rev 3940 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2116 | Rev 2141 | ||
---|---|---|---|
Line 97... | Line 97... | ||
97 | * @param flags Address space area flags for the mapping. |
97 | * @param flags Address space area flags for the mapping. |
98 | * |
98 | * |
99 | * @return 0 on success, EPERM if the caller lacks capabilities to use this |
99 | * @return 0 on success, EPERM if the caller lacks capabilities to use this |
100 | * syscall, ENOENT if there is no task matching the specified ID or the |
100 | * syscall, ENOENT if there is no task matching the specified ID or the |
101 | * physical address space is not enabled for mapping and ENOMEM if there |
101 | * physical address space is not enabled for mapping and ENOMEM if there |
102 | * was a problem in creating address space area. ENOTSUP is returned when |
102 | * was a problem in creating address space area. |
103 | * an attempt to create an illegal address alias is detected. |
- | |
104 | */ |
103 | */ |
105 | static int ddi_physmem_map(uintptr_t pf, uintptr_t vp, count_t pages, int flags) |
104 | static int ddi_physmem_map(uintptr_t pf, uintptr_t vp, count_t pages, int flags) |
106 | { |
105 | { |
107 | ipl_t ipl; |
106 | ipl_t ipl; |
108 | cap_t caps; |
107 | cap_t caps; |
Line 137... | Line 136... | ||
137 | */ |
136 | */ |
138 | spinlock_unlock(&parea_lock); |
137 | spinlock_unlock(&parea_lock); |
139 | interrupts_restore(ipl); |
138 | interrupts_restore(ipl); |
140 | return ENOENT; |
139 | return ENOENT; |
141 | } |
140 | } |
142 | - | ||
143 | #ifdef CONFIG_VIRT_IDX_DCACHE |
- | |
144 | if (PAGE_COLOR(parea->vbase) != PAGE_COLOR(vp)) { |
- | |
145 | /* |
- | |
146 | * Refuse to create an illegal address alias. |
- | |
147 | */ |
- | |
148 | spinlock_unlock(&parea_lock); |
- | |
149 | interrupts_restore(ipl); |
- | |
150 | return ENOTSUP; |
- | |
151 | } |
- | |
152 | #endif /* CONFIG_VIRT_IDX_DCACHE */ |
- | |
153 | - | ||
154 | spinlock_unlock(&parea_lock); |
141 | spinlock_unlock(&parea_lock); |
155 | 142 | ||
156 | spinlock_lock(&TASK->lock); |
143 | spinlock_lock(&TASK->lock); |
157 | 144 | ||
158 | if (!as_area_create(TASK->as, flags, pages * PAGE_SIZE, vp, AS_AREA_ATTR_NONE, |
145 | if (!as_area_create(TASK->as, flags, pages * PAGE_SIZE, vp, AS_AREA_ATTR_NONE, |