Rev 4346 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4346 | Rev 4691 | ||
---|---|---|---|
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)) { |