Rev 2101 | Rev 2462 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2101 | Rev 2441 | ||
---|---|---|---|
Line 52... | Line 52... | ||
52 | */ |
52 | */ |
53 | 53 | ||
54 | #define FS_SIGNATURE 0x5f504d5f |
54 | #define FS_SIGNATURE 0x5f504d5f |
55 | #define CT_SIGNATURE 0x504d4350 |
55 | #define CT_SIGNATURE 0x504d4350 |
56 | 56 | ||
57 | int mps_fs_check(uint8_t *base); |
57 | static int mps_fs_check(uint8_t *base); |
58 | int mps_ct_check(void); |
58 | static int mps_ct_check(void); |
59 | 59 | ||
60 | int configure_via_ct(void); |
60 | static int configure_via_ct(void); |
61 | int configure_via_default(uint8_t n); |
61 | static int configure_via_default(uint8_t n); |
62 | 62 | ||
63 | int ct_processor_entry(struct __processor_entry *pr); |
63 | static int ct_processor_entry(struct __processor_entry *pr); |
64 | void ct_bus_entry(struct __bus_entry *bus); |
64 | static void ct_bus_entry(struct __bus_entry *bus); |
65 | void ct_io_apic_entry(struct __io_apic_entry *ioa); |
65 | static void ct_io_apic_entry(struct __io_apic_entry *ioa); |
66 | void ct_io_intr_entry(struct __io_intr_entry *iointr); |
66 | static void ct_io_intr_entry(struct __io_intr_entry *iointr); |
67 | void ct_l_intr_entry(struct __l_intr_entry *lintr); |
67 | static void ct_l_intr_entry(struct __l_intr_entry *lintr); |
68 | 68 | ||
69 | void ct_extended_entries(void); |
69 | static void ct_extended_entries(void); |
70 | 70 | ||
71 | static struct mps_fs *fs; |
71 | static struct mps_fs *fs; |
72 | static struct mps_ct *ct; |
72 | static struct mps_ct *ct; |
73 | 73 | ||
74 | struct __processor_entry *processor_entries = NULL; |
74 | struct __processor_entry *processor_entries = NULL; |
Line 106... | Line 106... | ||
106 | } |
106 | } |
107 | 107 | ||
108 | bool is_cpu_enabled(index_t i) |
108 | bool is_cpu_enabled(index_t i) |
109 | { |
109 | { |
110 | ASSERT(i < processor_entry_cnt); |
110 | ASSERT(i < processor_entry_cnt); |
111 | return processor_entries[i].cpu_flags & 0x1; |
111 | return (bool) ((processor_entries[i].cpu_flags & 0x01) == 0x01); |
112 | } |
112 | } |
113 | 113 | ||
114 | bool is_bsp(index_t i) |
114 | bool is_bsp(index_t i) |
115 | { |
115 | { |
116 | ASSERT(i < processor_entry_cnt); |
116 | ASSERT(i < processor_entry_cnt); |
117 | return processor_entries[i].cpu_flags & 0x2; |
117 | return (bool) ((processor_entries[i].cpu_flags & 0x02) == 0x02); |
118 | } |
118 | } |
119 | 119 | ||
120 | uint8_t get_cpu_apic_id(index_t i) |
120 | uint8_t get_cpu_apic_id(index_t i) |
121 | { |
121 | { |
122 | ASSERT(i < processor_entry_cnt); |
122 | ASSERT(i < processor_entry_cnt); |
Line 131... | Line 131... | ||
131 | { |
131 | { |
132 | unsigned int i; |
132 | unsigned int i; |
133 | uint8_t sum; |
133 | uint8_t sum; |
134 | 134 | ||
135 | for (i = 0, sum = 0; i < 16; i++) |
135 | for (i = 0, sum = 0; i < 16; i++) |
136 | sum += base[i]; |
136 | sum = (uint8_t) (sum + base[i]); |
137 | 137 | ||
138 | return !sum; |
138 | return !sum; |
139 | } |
139 | } |
140 | 140 | ||
141 | /* |
141 | /* |
Line 148... | Line 148... | ||
148 | uint8_t sum; |
148 | uint8_t sum; |
149 | int i; |
149 | int i; |
150 | 150 | ||
151 | /* count the checksum for the base table */ |
151 | /* count the checksum for the base table */ |
152 | for (i=0,sum=0; i < ct->base_table_length; i++) |
152 | for (i=0,sum=0; i < ct->base_table_length; i++) |
153 | sum += base[i]; |
153 | sum = (uint8_t) (sum + base[i]); |
154 | 154 | ||
155 | if (sum) |
155 | if (sum) |
156 | return 0; |
156 | return 0; |
157 | 157 | ||
158 | /* count the checksum for the extended table */ |
158 | /* count the checksum for the extended table */ |
159 | for (i=0,sum=0; i < ct->ext_table_length; i++) |
159 | for (i=0,sum=0; i < ct->ext_table_length; i++) |
160 | sum += ext[i]; |
160 | sum = (uint8_t) (sum + ext[i]); |
161 | 161 | ||
162 | return sum == ct->ext_table_checksum; |
162 | return sum == ct->ext_table_checksum; |
163 | } |
163 | } |
164 | 164 | ||
165 | void mps_init(void) |
165 | void mps_init(void) |
Line 284... | Line 284... | ||
284 | */ |
284 | */ |
285 | ct_extended_entries(); |
285 | ct_extended_entries(); |
286 | return cnt; |
286 | return cnt; |
287 | } |
287 | } |
288 | 288 | ||
289 | int configure_via_default(uint8_t n) |
289 | int configure_via_default(uint8_t n __attribute__((unused))) |
290 | { |
290 | { |
291 | /* |
291 | /* |
292 | * Not yet implemented. |
292 | * Not yet implemented. |
293 | */ |
293 | */ |
294 | printf("%s: not supported\n", __FUNCTION__); |
294 | printf("%s: not supported\n", __FUNCTION__); |
295 | return 1; |
295 | return 1; |
296 | } |
296 | } |
297 | 297 | ||
298 | 298 | ||
299 | int ct_processor_entry(struct __processor_entry *pr) |
299 | int ct_processor_entry(struct __processor_entry *pr __attribute__((unused))) |
300 | { |
300 | { |
301 | /* |
301 | /* |
302 | * Ignore processors which are not marked enabled. |
302 | * Ignore processors which are not marked enabled. |
303 | */ |
303 | */ |
304 | if ((pr->cpu_flags & (1<<0)) == 0) |
304 | if ((pr->cpu_flags & (1<<0)) == 0) |
Line 306... | Line 306... | ||
306 | 306 | ||
307 | apic_id_mask |= (1<<pr->l_apic_id); |
307 | apic_id_mask |= (1<<pr->l_apic_id); |
308 | return 1; |
308 | return 1; |
309 | } |
309 | } |
310 | 310 | ||
311 | void ct_bus_entry(struct __bus_entry *bus) |
311 | void ct_bus_entry(struct __bus_entry *bus __attribute__((unused))) |
312 | { |
312 | { |
313 | #ifdef MPSCT_VERBOSE |
313 | #ifdef MPSCT_VERBOSE |
314 | char buf[7]; |
314 | char buf[7]; |
315 | memcpy((void *) buf, (void *) bus->bus_type, 6); |
315 | memcpy((void *) buf, (void *) bus->bus_type, 6); |
316 | buf[6] = 0; |
316 | buf[6] = 0; |
Line 335... | Line 335... | ||
335 | 335 | ||
336 | io_apic = (uint32_t *)(uintptr_t)ioa->io_apic; |
336 | io_apic = (uint32_t *)(uintptr_t)ioa->io_apic; |
337 | } |
337 | } |
338 | 338 | ||
339 | //#define MPSCT_VERBOSE |
339 | //#define MPSCT_VERBOSE |
340 | void ct_io_intr_entry(struct __io_intr_entry *iointr) |
340 | void ct_io_intr_entry(struct __io_intr_entry *iointr __attribute__((unused))) |
341 | { |
341 | { |
342 | #ifdef MPSCT_VERBOSE |
342 | #ifdef MPSCT_VERBOSE |
343 | switch (iointr->intr_type) { |
343 | switch (iointr->intr_type) { |
344 | case 0: printf("INT"); break; |
344 | case 0: printf("INT"); break; |
345 | case 1: printf("NMI"); break; |
345 | case 1: printf("NMI"); break; |
Line 366... | Line 366... | ||
366 | printf("io_apic%d,pin%d", iointr->dst_io_apic_id, iointr->dst_io_apic_pin); |
366 | printf("io_apic%d,pin%d", iointr->dst_io_apic_id, iointr->dst_io_apic_pin); |
367 | putchar('\n'); |
367 | putchar('\n'); |
368 | #endif |
368 | #endif |
369 | } |
369 | } |
370 | 370 | ||
371 | void ct_l_intr_entry(struct __l_intr_entry *lintr) |
371 | void ct_l_intr_entry(struct __l_intr_entry *lintr __attribute__((unused))) |
372 | { |
372 | { |
373 | #ifdef MPSCT_VERBOSE |
373 | #ifdef MPSCT_VERBOSE |
374 | switch (lintr->intr_type) { |
374 | switch (lintr->intr_type) { |
375 | case 0: printf("INT"); break; |
375 | case 0: printf("INT"); break; |
376 | case 1: printf("NMI"); break; |
376 | case 1: printf("NMI"); break; |