Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 6974
b: refs/heads/master
c: 56f1d5d
h: refs/heads/master
v: v3
  • Loading branch information
Natalie.Protasevich@unisys.com authored and Linus Torvalds committed Sep 5, 2005
1 parent 4ce6d5f commit 9104604
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 32 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a1740913cae231fb8e485306fb09671ed9a6e550
refs/heads/master: 56f1d5d52a21b93bc2984c920b17e0d80df5d1b2
5 changes: 3 additions & 2 deletions trunk/arch/i386/mach-es7000/es7000.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,8 @@ struct mip_reg {
#define MIP_SW_APIC 0x1020b
#define MIP_FUNC(VALUE) (VALUE & 0xff)

extern int parse_unisys_oem (char *oemptr, int oem_entries);
extern int find_unisys_acpi_oem_table(unsigned long *oem_addr, int *length);
extern int parse_unisys_oem (char *oemptr);
extern int find_unisys_acpi_oem_table(unsigned long *oem_addr);
extern void setup_unisys ();
extern int es7000_start_cpu(int cpu, unsigned long eip);
extern void es7000_sw_apic(void);
45 changes: 22 additions & 23 deletions trunk/arch/i386/mach-es7000/es7000plat.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,29 @@ es7000_rename_gsi(int ioapic, int gsi)

#endif // (CONFIG_X86_IO_APIC) && (CONFIG_ACPI_INTERPRETER || CONFIG_ACPI_BOOT)

void __init
setup_unisys ()
{
/*
* Determine the generation of the ES7000 currently running.
*
* es7000_plat = 1 if the machine is a 5xx ES7000 box
* es7000_plat = 2 if the machine is a x86_64 ES7000 box
*
*/
if (!(boot_cpu_data.x86 <= 15 && boot_cpu_data.x86_model <= 2))
es7000_plat = 2;
else
es7000_plat = 1;
ioapic_renumber_irq = es7000_rename_gsi;
}

/*
* Parse the OEM Table
*/

int __init
parse_unisys_oem (char *oemptr, int oem_entries)
parse_unisys_oem (char *oemptr)
{
int i;
int success = 0;
Expand All @@ -95,7 +112,7 @@ parse_unisys_oem (char *oemptr, int oem_entries)

tp += 8;

for (i=0; i <= oem_entries; i++) {
for (i=0; i <= 6; i++) {
type = *tp++;
size = *tp++;
tp -= 2;
Expand Down Expand Up @@ -130,34 +147,18 @@ parse_unisys_oem (char *oemptr, int oem_entries)
default:
break;
}
if (i == 6) break;
tp += size;
}

if (success < 2) {
es7000_plat = 0;
} else {
printk("\nEnabling ES7000 specific features...\n");
/*
* Determine the generation of the ES7000 currently running.
*
* es7000_plat = 0 if the machine is NOT a Unisys ES7000 box
* es7000_plat = 1 if the machine is a 5xx ES7000 box
* es7000_plat = 2 if the machine is a x86_64 ES7000 box
*
*/
if (!(boot_cpu_data.x86 <= 15 && boot_cpu_data.x86_model <= 2))
es7000_plat = 2;
else
es7000_plat = 1;

ioapic_renumber_irq = es7000_rename_gsi;
}
} else
setup_unisys();
return es7000_plat;
}

int __init
find_unisys_acpi_oem_table(unsigned long *oem_addr, int *length)
find_unisys_acpi_oem_table(unsigned long *oem_addr)
{
struct acpi_table_rsdp *rsdp = NULL;
unsigned long rsdp_phys = 0;
Expand Down Expand Up @@ -201,13 +202,11 @@ find_unisys_acpi_oem_table(unsigned long *oem_addr, int *length)
acpi_table_print(header, sdt.entry[i].pa);
t = (struct oem_table *) __acpi_map_table(sdt.entry[i].pa, header->length);
addr = (void *) __acpi_map_table(t->OEMTableAddr, t->OEMTableSize);
*length = header->length;
*oem_addr = (unsigned long) addr;
return 0;
}
}
}
Dprintk("ES7000: did not find Unisys ACPI OEM table!\n");
return -1;
}

Expand Down
30 changes: 24 additions & 6 deletions trunk/include/asm-i386/mach-es7000/mach_mpparse.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#ifndef __ASM_MACH_MPPARSE_H
#define __ASM_MACH_MPPARSE_H

#include <linux/acpi.h>

static inline void mpc_oem_bus_info(struct mpc_config_bus *m, char *name,
struct mpc_config_translation *translation)
{
Expand All @@ -12,8 +14,9 @@ static inline void mpc_oem_pci_bus(struct mpc_config_bus *m,
{
}

extern int parse_unisys_oem (char *oemptr, int oem_entries);
extern int find_unisys_acpi_oem_table(unsigned long *oem_addr, int *length);
extern int parse_unisys_oem (char *oemptr);
extern int find_unisys_acpi_oem_table(unsigned long *oem_addr);
extern void setup_unisys();

static inline int mps_oem_check(struct mp_config_table *mpc, char *oem,
char *productid)
Expand All @@ -22,18 +25,33 @@ static inline int mps_oem_check(struct mp_config_table *mpc, char *oem,
struct mp_config_oemtable *oem_table =
(struct mp_config_oemtable *)mpc->mpc_oemptr;
if (!strncmp(oem, "UNISYS", 6))
return parse_unisys_oem((char *)oem_table, oem_table->oem_length);
return parse_unisys_oem((char *)oem_table);
}
return 0;
}

static inline int es7000_check_dsdt()
{
struct acpi_table_header *header = NULL;
if(!acpi_get_table_header_early(ACPI_DSDT, &header))
acpi_table_print(header, 0);
if (!strncmp(header->oem_id, "UNISYS", 6))
return 1;
return 0;
}

/* Hook from generic ACPI tables.c */
static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id)
{
unsigned long oem_addr;
int oem_entries;
if (!find_unisys_acpi_oem_table(&oem_addr, &oem_entries))
return parse_unisys_oem((char *)oem_addr, oem_entries);
if (!find_unisys_acpi_oem_table(&oem_addr)) {
if (es7000_check_dsdt())
return parse_unisys_oem((char *)oem_addr);
else {
setup_unisys();
return 1;
}
}
return 0;
}

Expand Down

0 comments on commit 9104604

Please sign in to comment.