Rev 1705 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1705 | Rev 1780 | ||
|---|---|---|---|
| Line 53... | Line 53... | ||
| 53 | * @param ioaddr Startign I/O space address. |
53 | * @param ioaddr Startign I/O space address. |
| 54 | * @param size Size of the enabled I/O range. |
54 | * @param size Size of the enabled I/O range. |
| 55 | * |
55 | * |
| 56 | * @return 0 on success or an error code from errno.h. |
56 | * @return 0 on success or an error code from errno.h. |
| 57 | */ |
57 | */ |
| 58 | int ddi_iospace_enable_arch(task_t *task, __address ioaddr, size_t size) |
58 | int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size) |
| 59 | { |
59 | { |
| 60 | count_t bits; |
60 | count_t bits; |
| 61 | 61 | ||
| 62 | bits = ioaddr + size; |
62 | bits = ioaddr + size; |
| 63 | if (bits > IO_PORTS) |
63 | if (bits > IO_PORTS) |
| 64 | return ENOENT; |
64 | return ENOENT; |
| 65 | 65 | ||
| 66 | if (task->arch.iomap.bits < bits) { |
66 | if (task->arch.iomap.bits < bits) { |
| 67 | bitmap_t oldiomap; |
67 | bitmap_t oldiomap; |
| 68 | __u8 *newmap; |
68 | uint8_t *newmap; |
| 69 | 69 | ||
| 70 | /* |
70 | /* |
| 71 | * The I/O permission bitmap is too small and needs to be grown. |
71 | * The I/O permission bitmap is too small and needs to be grown. |
| 72 | */ |
72 | */ |
| 73 | 73 | ||
| 74 | newmap = (__u8 *) malloc(BITS2BYTES(bits), FRAME_ATOMIC); |
74 | newmap = (uint8_t *) malloc(BITS2BYTES(bits), FRAME_ATOMIC); |
| 75 | if (!newmap) |
75 | if (!newmap) |
| 76 | return ENOMEM; |
76 | return ENOMEM; |
| 77 | 77 | ||
| 78 | bitmap_initialize(&oldiomap, task->arch.iomap.map, task->arch.iomap.bits); |
78 | bitmap_initialize(&oldiomap, task->arch.iomap.map, task->arch.iomap.bits); |
| 79 | bitmap_initialize(&task->arch.iomap, newmap, bits); |
79 | bitmap_initialize(&task->arch.iomap, newmap, bits); |