Subversion Repositories HelenOS

Rev

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)) {