diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-13 11:14:41 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-13 11:14:41 -0400 |
commit | 411fdc1a711665cb4bd13df2a75213153d463375 (patch) | |
tree | 3d228fb3563d2270ae2bcf5272298748017b9b9f | |
parent | 7f14daa19ea36b200d237ad3ac5826ae25360461 (diff) | |
parent | 81c06b10bcd4c7e8c88b4b425c55402b1d65fd0e (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/voyager-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/jejb/voyager-2.6:
[VOYAGER] fix up ptregs removal mess
[VOYAGER] fix up attribute packed specifiers in voyager.h
[VOYAGER] fix genirq mess
-rw-r--r-- | arch/i386/mach-voyager/voyager_basic.c | 6 | ||||
-rw-r--r-- | arch/i386/mach-voyager/voyager_smp.c | 52 | ||||
-rw-r--r-- | include/asm-i386/vic.h | 2 | ||||
-rw-r--r-- | include/asm-i386/voyager.h | 160 |
4 files changed, 113 insertions, 107 deletions
diff --git a/arch/i386/mach-voyager/voyager_basic.c b/arch/i386/mach-voyager/voyager_basic.c index c639d30d8bdc..8fe7e4593d5f 100644 --- a/arch/i386/mach-voyager/voyager_basic.c +++ b/arch/i386/mach-voyager/voyager_basic.c | |||
@@ -44,7 +44,7 @@ struct voyager_SUS *voyager_SUS = NULL; | |||
44 | 44 | ||
45 | #ifdef CONFIG_SMP | 45 | #ifdef CONFIG_SMP |
46 | static void | 46 | static void |
47 | voyager_dump(int dummy1, struct pt_regs *dummy2, struct tty_struct *dummy3) | 47 | voyager_dump(int dummy1, struct tty_struct *dummy3) |
48 | { | 48 | { |
49 | /* get here via a sysrq */ | 49 | /* get here via a sysrq */ |
50 | voyager_smp_dump(); | 50 | voyager_smp_dump(); |
@@ -166,7 +166,7 @@ voyager_memory_detect(int region, __u32 *start, __u32 *length) | |||
166 | * off the timer tick to the SMP code, since the VIC doesn't have an | 166 | * off the timer tick to the SMP code, since the VIC doesn't have an |
167 | * internal timer (The QIC does, but that's another story). */ | 167 | * internal timer (The QIC does, but that's another story). */ |
168 | void | 168 | void |
169 | voyager_timer_interrupt(struct pt_regs *regs) | 169 | voyager_timer_interrupt(void) |
170 | { | 170 | { |
171 | if((jiffies & 0x3ff) == 0) { | 171 | if((jiffies & 0x3ff) == 0) { |
172 | 172 | ||
@@ -202,7 +202,7 @@ voyager_timer_interrupt(struct pt_regs *regs) | |||
202 | } | 202 | } |
203 | } | 203 | } |
204 | #ifdef CONFIG_SMP | 204 | #ifdef CONFIG_SMP |
205 | smp_vic_timer_interrupt(regs); | 205 | smp_vic_timer_interrupt(); |
206 | #endif | 206 | #endif |
207 | } | 207 | } |
208 | 208 | ||
diff --git a/arch/i386/mach-voyager/voyager_smp.c b/arch/i386/mach-voyager/voyager_smp.c index d42422fc4af3..f3fea2ad50fe 100644 --- a/arch/i386/mach-voyager/voyager_smp.c +++ b/arch/i386/mach-voyager/voyager_smp.c | |||
@@ -85,8 +85,8 @@ static int ack_QIC_CPI(__u8 cpi); | |||
85 | static void ack_special_QIC_CPI(__u8 cpi); | 85 | static void ack_special_QIC_CPI(__u8 cpi); |
86 | static void ack_VIC_CPI(__u8 cpi); | 86 | static void ack_VIC_CPI(__u8 cpi); |
87 | static void send_CPI_allbutself(__u8 cpi); | 87 | static void send_CPI_allbutself(__u8 cpi); |
88 | static void enable_vic_irq(unsigned int irq); | 88 | static void mask_vic_irq(unsigned int irq); |
89 | static void disable_vic_irq(unsigned int irq); | 89 | static void unmask_vic_irq(unsigned int irq); |
90 | static unsigned int startup_vic_irq(unsigned int irq); | 90 | static unsigned int startup_vic_irq(unsigned int irq); |
91 | static void enable_local_vic_irq(unsigned int irq); | 91 | static void enable_local_vic_irq(unsigned int irq); |
92 | static void disable_local_vic_irq(unsigned int irq); | 92 | static void disable_local_vic_irq(unsigned int irq); |
@@ -205,15 +205,12 @@ ack_CPI(__u8 cpi) | |||
205 | /* The VIC IRQ descriptors -- these look almost identical to the | 205 | /* The VIC IRQ descriptors -- these look almost identical to the |
206 | * 8259 IRQs except that masks and things must be kept per processor | 206 | * 8259 IRQs except that masks and things must be kept per processor |
207 | */ | 207 | */ |
208 | static struct hw_interrupt_type vic_irq_type = { | 208 | static struct irq_chip vic_chip = { |
209 | .typename = "VIC-level", | 209 | .name = "VIC", |
210 | .startup = startup_vic_irq, | 210 | .startup = startup_vic_irq, |
211 | .shutdown = disable_vic_irq, | 211 | .mask = mask_vic_irq, |
212 | .enable = enable_vic_irq, | 212 | .unmask = unmask_vic_irq, |
213 | .disable = disable_vic_irq, | 213 | .set_affinity = set_vic_irq_affinity, |
214 | .ack = before_handle_vic_irq, | ||
215 | .end = after_handle_vic_irq, | ||
216 | .set_affinity = set_vic_irq_affinity, | ||
217 | }; | 214 | }; |
218 | 215 | ||
219 | /* used to count up as CPUs are brought on line (starts at 0) */ | 216 | /* used to count up as CPUs are brought on line (starts at 0) */ |
@@ -1144,9 +1141,9 @@ smp_apic_timer_interrupt(struct pt_regs *regs) | |||
1144 | fastcall void | 1141 | fastcall void |
1145 | smp_qic_timer_interrupt(struct pt_regs *regs) | 1142 | smp_qic_timer_interrupt(struct pt_regs *regs) |
1146 | { | 1143 | { |
1147 | ack_QIC_CPI(QIC_TIMER_CPI); | ||
1148 | struct pt_regs *old_regs = set_irq_regs(regs); | 1144 | struct pt_regs *old_regs = set_irq_regs(regs); |
1149 | wrapper_smp_local_timer_interrupt(void); | 1145 | ack_QIC_CPI(QIC_TIMER_CPI); |
1146 | wrapper_smp_local_timer_interrupt(); | ||
1150 | set_irq_regs(old_regs); | 1147 | set_irq_regs(old_regs); |
1151 | } | 1148 | } |
1152 | 1149 | ||
@@ -1270,12 +1267,10 @@ smp_send_stop(void) | |||
1270 | /* this function is triggered in time.c when a clock tick fires | 1267 | /* this function is triggered in time.c when a clock tick fires |
1271 | * we need to re-broadcast the tick to all CPUs */ | 1268 | * we need to re-broadcast the tick to all CPUs */ |
1272 | void | 1269 | void |
1273 | smp_vic_timer_interrupt(struct pt_regs *regs) | 1270 | smp_vic_timer_interrupt(void) |
1274 | { | 1271 | { |
1275 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
1276 | send_CPI_allbutself(VIC_TIMER_CPI); | 1272 | send_CPI_allbutself(VIC_TIMER_CPI); |
1277 | smp_local_timer_interrupt(); | 1273 | smp_local_timer_interrupt(); |
1278 | set_irq_regs(old_regs); | ||
1279 | } | 1274 | } |
1280 | 1275 | ||
1281 | /* local (per CPU) timer interrupt. It does both profiling and | 1276 | /* local (per CPU) timer interrupt. It does both profiling and |
@@ -1310,7 +1305,7 @@ smp_local_timer_interrupt(void) | |||
1310 | per_cpu(prof_counter, cpu); | 1305 | per_cpu(prof_counter, cpu); |
1311 | } | 1306 | } |
1312 | 1307 | ||
1313 | update_process_times(user_mode_vm(irq_regs)); | 1308 | update_process_times(user_mode_vm(get_irq_regs())); |
1314 | } | 1309 | } |
1315 | 1310 | ||
1316 | if( ((1<<cpu) & voyager_extended_vic_processors) == 0) | 1311 | if( ((1<<cpu) & voyager_extended_vic_processors) == 0) |
@@ -1397,6 +1392,17 @@ setup_profiling_timer(unsigned int multiplier) | |||
1397 | return 0; | 1392 | return 0; |
1398 | } | 1393 | } |
1399 | 1394 | ||
1395 | /* This is a bit of a mess, but forced on us by the genirq changes | ||
1396 | * there's no genirq handler that really does what voyager wants | ||
1397 | * so hack it up with the simple IRQ handler */ | ||
1398 | static void fastcall | ||
1399 | handle_vic_irq(unsigned int irq, struct irq_desc *desc) | ||
1400 | { | ||
1401 | before_handle_vic_irq(irq); | ||
1402 | handle_simple_irq(irq, desc); | ||
1403 | after_handle_vic_irq(irq); | ||
1404 | } | ||
1405 | |||
1400 | 1406 | ||
1401 | /* The CPIs are handled in the per cpu 8259s, so they must be | 1407 | /* The CPIs are handled in the per cpu 8259s, so they must be |
1402 | * enabled to be received: FIX: enabling the CPIs in the early | 1408 | * enabled to be received: FIX: enabling the CPIs in the early |
@@ -1433,7 +1439,7 @@ smp_intr_init(void) | |||
1433 | * This is for later: first 16 correspond to PC IRQs; next 16 | 1439 | * This is for later: first 16 correspond to PC IRQs; next 16 |
1434 | * are Primary MC IRQs and final 16 are Secondary MC IRQs */ | 1440 | * are Primary MC IRQs and final 16 are Secondary MC IRQs */ |
1435 | for(i = 0; i < 48; i++) | 1441 | for(i = 0; i < 48; i++) |
1436 | irq_desc[i].chip = &vic_irq_type; | 1442 | set_irq_chip_and_handler(i, &vic_chip, handle_vic_irq); |
1437 | } | 1443 | } |
1438 | 1444 | ||
1439 | /* send a CPI at level cpi to a set of cpus in cpuset (set 1 bit per | 1445 | /* send a CPI at level cpi to a set of cpus in cpuset (set 1 bit per |
@@ -1531,7 +1537,7 @@ ack_VIC_CPI(__u8 cpi) | |||
1531 | static unsigned int | 1537 | static unsigned int |
1532 | startup_vic_irq(unsigned int irq) | 1538 | startup_vic_irq(unsigned int irq) |
1533 | { | 1539 | { |
1534 | enable_vic_irq(irq); | 1540 | unmask_vic_irq(irq); |
1535 | 1541 | ||
1536 | return 0; | 1542 | return 0; |
1537 | } | 1543 | } |
@@ -1558,7 +1564,7 @@ startup_vic_irq(unsigned int irq) | |||
1558 | * adjust their masks accordingly. */ | 1564 | * adjust their masks accordingly. */ |
1559 | 1565 | ||
1560 | static void | 1566 | static void |
1561 | enable_vic_irq(unsigned int irq) | 1567 | unmask_vic_irq(unsigned int irq) |
1562 | { | 1568 | { |
1563 | /* linux doesn't to processor-irq affinity, so enable on | 1569 | /* linux doesn't to processor-irq affinity, so enable on |
1564 | * all CPUs we know about */ | 1570 | * all CPUs we know about */ |
@@ -1567,7 +1573,7 @@ enable_vic_irq(unsigned int irq) | |||
1567 | __u32 processorList = 0; | 1573 | __u32 processorList = 0; |
1568 | unsigned long flags; | 1574 | unsigned long flags; |
1569 | 1575 | ||
1570 | VDEBUG(("VOYAGER: enable_vic_irq(%d) CPU%d affinity 0x%lx\n", | 1576 | VDEBUG(("VOYAGER: unmask_vic_irq(%d) CPU%d affinity 0x%lx\n", |
1571 | irq, cpu, cpu_irq_affinity[cpu])); | 1577 | irq, cpu, cpu_irq_affinity[cpu])); |
1572 | spin_lock_irqsave(&vic_irq_lock, flags); | 1578 | spin_lock_irqsave(&vic_irq_lock, flags); |
1573 | for_each_online_cpu(real_cpu) { | 1579 | for_each_online_cpu(real_cpu) { |
@@ -1591,7 +1597,7 @@ enable_vic_irq(unsigned int irq) | |||
1591 | } | 1597 | } |
1592 | 1598 | ||
1593 | static void | 1599 | static void |
1594 | disable_vic_irq(unsigned int irq) | 1600 | mask_vic_irq(unsigned int irq) |
1595 | { | 1601 | { |
1596 | /* lazy disable, do nothing */ | 1602 | /* lazy disable, do nothing */ |
1597 | } | 1603 | } |
@@ -1819,7 +1825,7 @@ set_vic_irq_affinity(unsigned int irq, cpumask_t mask) | |||
1819 | * disabled again as it comes in (voyager lazy disable). If | 1825 | * disabled again as it comes in (voyager lazy disable). If |
1820 | * the affinity map is tightened to disable the interrupt on a | 1826 | * the affinity map is tightened to disable the interrupt on a |
1821 | * cpu, it will be pushed off when it comes in */ | 1827 | * cpu, it will be pushed off when it comes in */ |
1822 | enable_vic_irq(irq); | 1828 | unmask_vic_irq(irq); |
1823 | } | 1829 | } |
1824 | 1830 | ||
1825 | static void | 1831 | static void |
diff --git a/include/asm-i386/vic.h b/include/asm-i386/vic.h index 4abfcfb91eb8..53100f353612 100644 --- a/include/asm-i386/vic.h +++ b/include/asm-i386/vic.h | |||
@@ -58,4 +58,4 @@ static const int VIC_CPI_Registers[] = | |||
58 | 58 | ||
59 | #define VIC_BOOT_INTERRUPT_MASK 0xfe | 59 | #define VIC_BOOT_INTERRUPT_MASK 0xfe |
60 | 60 | ||
61 | extern void smp_vic_timer_interrupt(struct pt_regs *regs); | 61 | extern void smp_vic_timer_interrupt(void); |
diff --git a/include/asm-i386/voyager.h b/include/asm-i386/voyager.h index e74c54aa757f..5b27838905b2 100644 --- a/include/asm-i386/voyager.h +++ b/include/asm-i386/voyager.h | |||
@@ -118,33 +118,33 @@ typedef struct voyager_module { | |||
118 | } voyager_module_t; | 118 | } voyager_module_t; |
119 | 119 | ||
120 | typedef struct voyager_eeprom_hdr { | 120 | typedef struct voyager_eeprom_hdr { |
121 | __u8 module_id[4] __attribute__((packed)); | 121 | __u8 module_id[4]; |
122 | __u8 version_id __attribute__((packed)); | 122 | __u8 version_id; |
123 | __u8 config_id __attribute__((packed)); | 123 | __u8 config_id; |
124 | __u16 boundry_id __attribute__((packed)); /* boundary scan id */ | 124 | __u16 boundry_id; /* boundary scan id */ |
125 | __u16 ee_size __attribute__((packed)); /* size of EEPROM */ | 125 | __u16 ee_size; /* size of EEPROM */ |
126 | __u8 assembly[11] __attribute__((packed)); /* assembly # */ | 126 | __u8 assembly[11]; /* assembly # */ |
127 | __u8 assembly_rev __attribute__((packed)); /* assembly rev */ | 127 | __u8 assembly_rev; /* assembly rev */ |
128 | __u8 tracer[4] __attribute__((packed)); /* tracer number */ | 128 | __u8 tracer[4]; /* tracer number */ |
129 | __u16 assembly_cksum __attribute__((packed)); /* asm checksum */ | 129 | __u16 assembly_cksum; /* asm checksum */ |
130 | __u16 power_consump __attribute__((packed)); /* pwr requirements */ | 130 | __u16 power_consump; /* pwr requirements */ |
131 | __u16 num_asics __attribute__((packed)); /* number of asics */ | 131 | __u16 num_asics; /* number of asics */ |
132 | __u16 bist_time __attribute__((packed)); /* min. bist time */ | 132 | __u16 bist_time; /* min. bist time */ |
133 | __u16 err_log_offset __attribute__((packed)); /* error log offset */ | 133 | __u16 err_log_offset; /* error log offset */ |
134 | __u16 scan_path_offset __attribute__((packed));/* scan path offset */ | 134 | __u16 scan_path_offset;/* scan path offset */ |
135 | __u16 cct_offset __attribute__((packed)); | 135 | __u16 cct_offset; |
136 | __u16 log_length __attribute__((packed)); /* length of err log */ | 136 | __u16 log_length; /* length of err log */ |
137 | __u16 xsum_end __attribute__((packed)); /* offset to end of | 137 | __u16 xsum_end; /* offset to end of |
138 | checksum */ | 138 | checksum */ |
139 | __u8 reserved[4] __attribute__((packed)); | 139 | __u8 reserved[4]; |
140 | __u8 sflag __attribute__((packed)); /* starting sentinal */ | 140 | __u8 sflag; /* starting sentinal */ |
141 | __u8 part_number[13] __attribute__((packed)); /* prom part number */ | 141 | __u8 part_number[13]; /* prom part number */ |
142 | __u8 version[10] __attribute__((packed)); /* version number */ | 142 | __u8 version[10]; /* version number */ |
143 | __u8 signature[8] __attribute__((packed)); | 143 | __u8 signature[8]; |
144 | __u16 eeprom_chksum __attribute__((packed)); | 144 | __u16 eeprom_chksum; |
145 | __u32 data_stamp_offset __attribute__((packed)); | 145 | __u32 data_stamp_offset; |
146 | __u8 eflag __attribute__((packed)); /* ending sentinal */ | 146 | __u8 eflag ; /* ending sentinal */ |
147 | } voyager_eprom_hdr_t; | 147 | } __attribute__((packed)) voyager_eprom_hdr_t; |
148 | 148 | ||
149 | 149 | ||
150 | 150 | ||
@@ -155,30 +155,30 @@ typedef struct voyager_eeprom_hdr { | |||
155 | * in the module EPROMs. We really only care about the IDs and | 155 | * in the module EPROMs. We really only care about the IDs and |
156 | * offsets */ | 156 | * offsets */ |
157 | typedef struct voyager_sp_table { | 157 | typedef struct voyager_sp_table { |
158 | __u8 asic_id __attribute__((packed)); | 158 | __u8 asic_id; |
159 | __u8 bypass_flag __attribute__((packed)); | 159 | __u8 bypass_flag; |
160 | __u16 asic_data_offset __attribute__((packed)); | 160 | __u16 asic_data_offset; |
161 | __u16 config_data_offset __attribute__((packed)); | 161 | __u16 config_data_offset; |
162 | } voyager_sp_table_t; | 162 | } __attribute__((packed)) voyager_sp_table_t; |
163 | 163 | ||
164 | typedef struct voyager_jtag_table { | 164 | typedef struct voyager_jtag_table { |
165 | __u8 icode[4] __attribute__((packed)); | 165 | __u8 icode[4]; |
166 | __u8 runbist[4] __attribute__((packed)); | 166 | __u8 runbist[4]; |
167 | __u8 intest[4] __attribute__((packed)); | 167 | __u8 intest[4]; |
168 | __u8 samp_preld[4] __attribute__((packed)); | 168 | __u8 samp_preld[4]; |
169 | __u8 ireg_len __attribute__((packed)); | 169 | __u8 ireg_len; |
170 | } voyager_jtt_t; | 170 | } __attribute__((packed)) voyager_jtt_t; |
171 | 171 | ||
172 | typedef struct voyager_asic_data_table { | 172 | typedef struct voyager_asic_data_table { |
173 | __u8 jtag_id[4] __attribute__((packed)); | 173 | __u8 jtag_id[4]; |
174 | __u16 length_bsr __attribute__((packed)); | 174 | __u16 length_bsr; |
175 | __u16 length_bist_reg __attribute__((packed)); | 175 | __u16 length_bist_reg; |
176 | __u32 bist_clk __attribute__((packed)); | 176 | __u32 bist_clk; |
177 | __u16 subaddr_bits __attribute__((packed)); | 177 | __u16 subaddr_bits; |
178 | __u16 seed_bits __attribute__((packed)); | 178 | __u16 seed_bits; |
179 | __u16 sig_bits __attribute__((packed)); | 179 | __u16 sig_bits; |
180 | __u16 jtag_offset __attribute__((packed)); | 180 | __u16 jtag_offset; |
181 | } voyager_at_t; | 181 | } __attribute__((packed)) voyager_at_t; |
182 | 182 | ||
183 | /* Voyager Interrupt Controller (VIC) registers */ | 183 | /* Voyager Interrupt Controller (VIC) registers */ |
184 | 184 | ||
@@ -328,52 +328,52 @@ struct voyager_bios_info { | |||
328 | #define NUMBER_OF_POS_REGS 8 | 328 | #define NUMBER_OF_POS_REGS 8 |
329 | 329 | ||
330 | typedef struct { | 330 | typedef struct { |
331 | __u8 MC_Slot __attribute__((packed)); | 331 | __u8 MC_Slot; |
332 | __u8 POS_Values[NUMBER_OF_POS_REGS] __attribute__((packed)); | 332 | __u8 POS_Values[NUMBER_OF_POS_REGS]; |
333 | } MC_SlotInformation_t; | 333 | } __attribute__((packed)) MC_SlotInformation_t; |
334 | 334 | ||
335 | struct QuadDescription { | 335 | struct QuadDescription { |
336 | __u8 Type __attribute__((packed)); /* for type 0 (DYADIC or MONADIC) all fields | 336 | __u8 Type; /* for type 0 (DYADIC or MONADIC) all fields |
337 | * will be zero except for slot */ | 337 | * will be zero except for slot */ |
338 | __u8 StructureVersion __attribute__((packed)); | 338 | __u8 StructureVersion; |
339 | __u32 CPI_BaseAddress __attribute__((packed)); | 339 | __u32 CPI_BaseAddress; |
340 | __u32 LARC_BankSize __attribute__((packed)); | 340 | __u32 LARC_BankSize; |
341 | __u32 LocalMemoryStateBits __attribute__((packed)); | 341 | __u32 LocalMemoryStateBits; |
342 | __u8 Slot __attribute__((packed)); /* Processor slots 1 - 4 */ | 342 | __u8 Slot; /* Processor slots 1 - 4 */ |
343 | }; | 343 | } __attribute__((packed)); |
344 | 344 | ||
345 | struct ProcBoardInfo { | 345 | struct ProcBoardInfo { |
346 | __u8 Type __attribute__((packed)); | 346 | __u8 Type; |
347 | __u8 StructureVersion __attribute__((packed)); | 347 | __u8 StructureVersion; |
348 | __u8 NumberOfBoards __attribute__((packed)); | 348 | __u8 NumberOfBoards; |
349 | struct QuadDescription QuadData[MAX_PROCESSOR_BOARDS] __attribute__((packed)); | 349 | struct QuadDescription QuadData[MAX_PROCESSOR_BOARDS]; |
350 | }; | 350 | } __attribute__((packed)); |
351 | 351 | ||
352 | struct CacheDescription { | 352 | struct CacheDescription { |
353 | __u8 Level __attribute__((packed)); | 353 | __u8 Level; |
354 | __u32 TotalSize __attribute__((packed)); | 354 | __u32 TotalSize; |
355 | __u16 LineSize __attribute__((packed)); | 355 | __u16 LineSize; |
356 | __u8 Associativity __attribute__((packed)); | 356 | __u8 Associativity; |
357 | __u8 CacheType __attribute__((packed)); | 357 | __u8 CacheType; |
358 | __u8 WriteType __attribute__((packed)); | 358 | __u8 WriteType; |
359 | __u8 Number_CPUs_SharedBy __attribute__((packed)); | 359 | __u8 Number_CPUs_SharedBy; |
360 | __u8 Shared_CPUs_Hardware_IDs[MAX_SHARED_CPUS] __attribute__((packed)); | 360 | __u8 Shared_CPUs_Hardware_IDs[MAX_SHARED_CPUS]; |
361 | 361 | ||
362 | }; | 362 | } __attribute__((packed)); |
363 | 363 | ||
364 | struct CPU_Description { | 364 | struct CPU_Description { |
365 | __u8 CPU_HardwareId __attribute__((packed)); | 365 | __u8 CPU_HardwareId; |
366 | char *FRU_String __attribute__((packed)); | 366 | char *FRU_String; |
367 | __u8 NumberOfCacheLevels __attribute__((packed)); | 367 | __u8 NumberOfCacheLevels; |
368 | struct CacheDescription CacheLevelData[MAX_CACHE_LEVELS] __attribute__((packed)); | 368 | struct CacheDescription CacheLevelData[MAX_CACHE_LEVELS]; |
369 | }; | 369 | } __attribute__((packed)); |
370 | 370 | ||
371 | struct CPU_Info { | 371 | struct CPU_Info { |
372 | __u8 Type __attribute__((packed)); | 372 | __u8 Type; |
373 | __u8 StructureVersion __attribute__((packed)); | 373 | __u8 StructureVersion; |
374 | __u8 NumberOf_CPUs __attribute__((packed)); | 374 | __u8 NumberOf_CPUs; |
375 | struct CPU_Description CPU_Data[MAX_CPUS] __attribute__((packed)); | 375 | struct CPU_Description CPU_Data[MAX_CPUS]; |
376 | }; | 376 | } __attribute__((packed)); |
377 | 377 | ||
378 | 378 | ||
379 | /* | 379 | /* |