Changeset 73e9b49 in mainline
- Timestamp:
- 2006-04-17T16:24:04Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 17b1b99
- Parents:
- 9fa16b20
- Location:
- arch
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/amd64/include/pm.h
r9fa16b20 r73e9b49 69 69 #define TSS_BASIC_SIZE 104 70 70 #define TSS_IOMAP_SIZE (16*1024+1) /* 16K for bitmap + 1 terminating byte for convenience */ 71 72 #define IO_PORTS (64*1024) 71 73 72 74 #ifndef __ASM__ -
arch/amd64/src/ddi/ddi.c
r9fa16b20 r73e9b49 31 31 #include <arch/types.h> 32 32 #include <typedefs.h> 33 #include <adt/bitmap.h> 34 #include <mm/slab.h> 35 #include <arch/pm.h> 36 #include <errno.h> 33 37 34 38 /** Enable I/O space range for task. … … 44 48 int ddi_enable_iospace_arch(task_t *task, __address ioaddr, size_t size) 45 49 { 50 count_t bits; 51 52 bits = ioaddr + size; 53 if (bits > IO_PORTS) 54 return ENOENT; 55 56 if (task->arch.iomap.bits < bits) { 57 bitmap_t oldiomap; 58 __u8 *newmap; 59 60 /* 61 * The I/O permission bitmap is too small and needs to be grown. 62 */ 63 64 newmap = (__u8 *) malloc(BITS2BYTES(bits), FRAME_ATOMIC); 65 if (!newmap) 66 return ENOMEM; 67 68 bitmap_initialize(&oldiomap, task->arch.iomap.map, task->arch.iomap.bits); 69 bitmap_initialize(&task->arch.iomap, newmap, bits); 70 71 /* 72 * Mark the new range inaccessible. 73 */ 74 bitmap_set_range(&task->arch.iomap, oldiomap.bits, bits - oldiomap.bits); 75 76 /* 77 * In case there really existed smaller iomap, 78 * copy its contents and deallocate it. 79 */ 80 if (oldiomap.bits) { 81 bitmap_copy(&task->arch.iomap, &oldiomap, task->arch.iomap.bits); 82 free(oldiomap.map); 83 } 84 } 85 86 /* 87 * Enable the range and we are done. 88 */ 89 bitmap_clear_range(&task->arch.iomap, (index_t) ioaddr, (count_t) size); 90 46 91 return 0; 47 92 } -
arch/ia32/include/pm.h
r9fa16b20 r73e9b49 58 58 #define TSS_BASIC_SIZE 104 59 59 #define TSS_IOMAP_SIZE (16*1024+1) /* 16K for bitmap + 1 terminating byte for convenience */ 60 61 #define IO_PORTS (64*1024) 60 62 61 63 #ifndef __ASM__ -
arch/ia32/src/ddi/ddi.c
r9fa16b20 r73e9b49 31 31 #include <arch/types.h> 32 32 #include <typedefs.h> 33 #include <adt/bitmap.h> 34 #include <mm/slab.h> 35 #include <arch/pm.h> 36 #include <errno.h> 33 37 34 38 /** Enable I/O space range for task. … … 44 48 int ddi_enable_iospace_arch(task_t *task, __address ioaddr, size_t size) 45 49 { 50 count_t bits; 51 52 bits = ioaddr + size; 53 if (bits > IO_PORTS) 54 return ENOENT; 55 56 if (task->arch.iomap.bits < bits) { 57 bitmap_t oldiomap; 58 __u8 *newmap; 59 60 /* 61 * The I/O permission bitmap is too small and needs to be grown. 62 */ 63 64 newmap = (__u8 *) malloc(BITS2BYTES(bits), FRAME_ATOMIC); 65 if (!newmap) 66 return ENOMEM; 67 68 bitmap_initialize(&oldiomap, task->arch.iomap.map, task->arch.iomap.bits); 69 bitmap_initialize(&task->arch.iomap, newmap, bits); 70 71 /* 72 * Mark the new range inaccessible. 73 */ 74 bitmap_set_range(&task->arch.iomap, oldiomap.bits, bits - oldiomap.bits); 75 76 /* 77 * In case there really existed smaller iomap, 78 * copy its contents and deallocate it. 79 */ 80 if (oldiomap.bits) { 81 bitmap_copy(&task->arch.iomap, &oldiomap, task->arch.iomap.bits); 82 free(oldiomap.map); 83 } 84 } 85 86 /* 87 * Enable the range and we are done. 88 */ 89 bitmap_clear_range(&task->arch.iomap, (index_t) ioaddr, (count_t) size); 90 46 91 return 0; 47 92 }
Note:
See TracChangeset
for help on using the changeset viewer.