Rev 4377 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 4377 | Rev 4692 | ||
|---|---|---|---|
| Line 54... | Line 54... | ||
| 54 | * |
54 | * |
| 55 | * @return 0 on success or an error code from errno.h. |
55 | * @return 0 on success or an error code from errno.h. |
| 56 | */ |
56 | */ |
| 57 | int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size) |
57 | int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size) |
| 58 | { |
58 | { |
| 59 | count_t bits; |
59 | size_t bits; |
| 60 | 60 | ||
| 61 | bits = ioaddr + size; |
61 | bits = ioaddr + size; |
| 62 | if (bits > IO_PORTS) |
62 | if (bits > IO_PORTS) |
| 63 | return ENOENT; |
63 | return ENOENT; |
| 64 | 64 | ||
| Line 96... | Line 96... | ||
| 96 | } |
96 | } |
| 97 | 97 | ||
| 98 | /* |
98 | /* |
| 99 | * Enable the range and we are done. |
99 | * Enable the range and we are done. |
| 100 | */ |
100 | */ |
| 101 | bitmap_clear_range(&task->arch.iomap, (index_t) ioaddr, (count_t) size); |
101 | bitmap_clear_range(&task->arch.iomap, (size_t) ioaddr, (size_t) size); |
| 102 | 102 | ||
| 103 | /* |
103 | /* |
| 104 | * Increment I/O Permission bitmap generation counter. |
104 | * Increment I/O Permission bitmap generation counter. |
| 105 | */ |
105 | */ |
| 106 | task->arch.iomapver++; |
106 | task->arch.iomapver++; |
| Line 115... | Line 115... | ||
| 115 | * |
115 | * |
| 116 | * Interrupts must be disabled prior this call. |
116 | * Interrupts must be disabled prior this call. |
| 117 | */ |
117 | */ |
| 118 | void io_perm_bitmap_install(void) |
118 | void io_perm_bitmap_install(void) |
| 119 | { |
119 | { |
| 120 | count_t bits; |
120 | size_t bits; |
| 121 | ptr_16_64_t cpugdtr; |
121 | ptr_16_64_t cpugdtr; |
| 122 | descriptor_t *gdt_p; |
122 | descriptor_t *gdt_p; |
| 123 | tss_descriptor_t *tss_desc; |
123 | tss_descriptor_t *tss_desc; |
| 124 | count_t ver; |
124 | size_t ver; |
| 125 | 125 | ||
| 126 | /* First, copy the I/O Permission Bitmap. */ |
126 | /* First, copy the I/O Permission Bitmap. */ |
| 127 | spinlock_lock(&TASK->lock); |
127 | spinlock_lock(&TASK->lock); |
| 128 | ver = TASK->arch.iomapver; |
128 | ver = TASK->arch.iomapver; |
| 129 | if ((bits = TASK->arch.iomap.bits)) { |
129 | if ((bits = TASK->arch.iomap.bits)) { |