aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-10-13 11:14:41 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-10-13 11:14:41 -0400
commit411fdc1a711665cb4bd13df2a75213153d463375 (patch)
tree3d228fb3563d2270ae2bcf5272298748017b9b9f
parent7f14daa19ea36b200d237ad3ac5826ae25360461 (diff)
parent81c06b10bcd4c7e8c88b4b425c55402b1d65fd0e (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.c6
-rw-r--r--arch/i386/mach-voyager/voyager_smp.c52
-rw-r--r--include/asm-i386/vic.h2
-rw-r--r--include/asm-i386/voyager.h160
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
46static void 46static void
47voyager_dump(int dummy1, struct pt_regs *dummy2, struct tty_struct *dummy3) 47voyager_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). */
168void 168void
169voyager_timer_interrupt(struct pt_regs *regs) 169voyager_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);
85static void ack_special_QIC_CPI(__u8 cpi); 85static void ack_special_QIC_CPI(__u8 cpi);
86static void ack_VIC_CPI(__u8 cpi); 86static void ack_VIC_CPI(__u8 cpi);
87static void send_CPI_allbutself(__u8 cpi); 87static void send_CPI_allbutself(__u8 cpi);
88static void enable_vic_irq(unsigned int irq); 88static void mask_vic_irq(unsigned int irq);
89static void disable_vic_irq(unsigned int irq); 89static void unmask_vic_irq(unsigned int irq);
90static unsigned int startup_vic_irq(unsigned int irq); 90static unsigned int startup_vic_irq(unsigned int irq);
91static void enable_local_vic_irq(unsigned int irq); 91static void enable_local_vic_irq(unsigned int irq);
92static void disable_local_vic_irq(unsigned int irq); 92static 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 */
208static struct hw_interrupt_type vic_irq_type = { 208static 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)
1144fastcall void 1141fastcall void
1145smp_qic_timer_interrupt(struct pt_regs *regs) 1142smp_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 */
1272void 1269void
1273smp_vic_timer_interrupt(struct pt_regs *regs) 1270smp_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 */
1398static void fastcall
1399handle_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)
1531static unsigned int 1537static unsigned int
1532startup_vic_irq(unsigned int irq) 1538startup_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
1560static void 1566static void
1561enable_vic_irq(unsigned int irq) 1567unmask_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
1593static void 1599static void
1594disable_vic_irq(unsigned int irq) 1600mask_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
1825static void 1831static 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
61extern void smp_vic_timer_interrupt(struct pt_regs *regs); 61extern 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
120typedef struct voyager_eeprom_hdr { 120typedef 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 */
157typedef struct voyager_sp_table { 157typedef 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
164typedef struct voyager_jtag_table { 164typedef 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
172typedef struct voyager_asic_data_table { 172typedef 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
330typedef struct { 330typedef 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
335struct QuadDescription { 335struct 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
345struct ProcBoardInfo { 345struct 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
352struct CacheDescription { 352struct 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
364struct CPU_Description { 364struct 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
371struct CPU_Info { 371struct 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/*