Merge branch 'mpe'
This commit is contained in:
@ -32,7 +32,6 @@
|
|||||||
#include <asm/rtas.h>
|
#include <asm/rtas.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
#include <asm/iseries/it_exp_vpd_panel.h>
|
|
||||||
#include <asm/prom.h>
|
#include <asm/prom.h>
|
||||||
#include <asm/vdso_datapage.h>
|
#include <asm/vdso_datapage.h>
|
||||||
|
|
||||||
|
@ -56,7 +56,6 @@
|
|||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/mmu.h>
|
#include <asm/mmu.h>
|
||||||
#include <asm/lmb.h>
|
#include <asm/lmb.h>
|
||||||
#include <asm/iseries/it_lp_naca.h>
|
|
||||||
#include <asm/firmware.h>
|
#include <asm/firmware.h>
|
||||||
#include <asm/xmon.h>
|
#include <asm/xmon.h>
|
||||||
#include <asm/udbg.h>
|
#include <asm/udbg.h>
|
||||||
|
@ -14,7 +14,6 @@ endif
|
|||||||
obj-$(CONFIG_PPC64) += checksum_64.o copypage_64.o copyuser_64.o \
|
obj-$(CONFIG_PPC64) += checksum_64.o copypage_64.o copyuser_64.o \
|
||||||
memcpy_64.o usercopy_64.o mem_64.o string.o \
|
memcpy_64.o usercopy_64.o mem_64.o string.o \
|
||||||
strcase.o
|
strcase.o
|
||||||
obj-$(CONFIG_PPC_ISERIES) += e2a.o
|
|
||||||
obj-$(CONFIG_XMON) += sstep.o
|
obj-$(CONFIG_XMON) += sstep.o
|
||||||
|
|
||||||
ifeq ($(CONFIG_PPC64),y)
|
ifeq ($(CONFIG_PPC64),y)
|
||||||
|
@ -1,116 +0,0 @@
|
|||||||
/*
|
|
||||||
* EBCDIC to ASCII conversion
|
|
||||||
*
|
|
||||||
* This function moved here from arch/powerpc/platforms/iseries/viopath.c
|
|
||||||
*
|
|
||||||
* (C) Copyright 2000-2004 IBM Corporation
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 of the
|
|
||||||
* License, or (at your option) anyu later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful, but
|
|
||||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software Foundation,
|
|
||||||
* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/module.h>
|
|
||||||
|
|
||||||
unsigned char e2a(unsigned char x)
|
|
||||||
{
|
|
||||||
switch (x) {
|
|
||||||
case 0xF0:
|
|
||||||
return '0';
|
|
||||||
case 0xF1:
|
|
||||||
return '1';
|
|
||||||
case 0xF2:
|
|
||||||
return '2';
|
|
||||||
case 0xF3:
|
|
||||||
return '3';
|
|
||||||
case 0xF4:
|
|
||||||
return '4';
|
|
||||||
case 0xF5:
|
|
||||||
return '5';
|
|
||||||
case 0xF6:
|
|
||||||
return '6';
|
|
||||||
case 0xF7:
|
|
||||||
return '7';
|
|
||||||
case 0xF8:
|
|
||||||
return '8';
|
|
||||||
case 0xF9:
|
|
||||||
return '9';
|
|
||||||
case 0xC1:
|
|
||||||
return 'A';
|
|
||||||
case 0xC2:
|
|
||||||
return 'B';
|
|
||||||
case 0xC3:
|
|
||||||
return 'C';
|
|
||||||
case 0xC4:
|
|
||||||
return 'D';
|
|
||||||
case 0xC5:
|
|
||||||
return 'E';
|
|
||||||
case 0xC6:
|
|
||||||
return 'F';
|
|
||||||
case 0xC7:
|
|
||||||
return 'G';
|
|
||||||
case 0xC8:
|
|
||||||
return 'H';
|
|
||||||
case 0xC9:
|
|
||||||
return 'I';
|
|
||||||
case 0xD1:
|
|
||||||
return 'J';
|
|
||||||
case 0xD2:
|
|
||||||
return 'K';
|
|
||||||
case 0xD3:
|
|
||||||
return 'L';
|
|
||||||
case 0xD4:
|
|
||||||
return 'M';
|
|
||||||
case 0xD5:
|
|
||||||
return 'N';
|
|
||||||
case 0xD6:
|
|
||||||
return 'O';
|
|
||||||
case 0xD7:
|
|
||||||
return 'P';
|
|
||||||
case 0xD8:
|
|
||||||
return 'Q';
|
|
||||||
case 0xD9:
|
|
||||||
return 'R';
|
|
||||||
case 0xE2:
|
|
||||||
return 'S';
|
|
||||||
case 0xE3:
|
|
||||||
return 'T';
|
|
||||||
case 0xE4:
|
|
||||||
return 'U';
|
|
||||||
case 0xE5:
|
|
||||||
return 'V';
|
|
||||||
case 0xE6:
|
|
||||||
return 'W';
|
|
||||||
case 0xE7:
|
|
||||||
return 'X';
|
|
||||||
case 0xE8:
|
|
||||||
return 'Y';
|
|
||||||
case 0xE9:
|
|
||||||
return 'Z';
|
|
||||||
}
|
|
||||||
return ' ';
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(e2a);
|
|
||||||
|
|
||||||
unsigned char* strne2a(unsigned char *dest, const unsigned char *src, size_t n)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
n = strnlen(src, n);
|
|
||||||
|
|
||||||
for (i = 0; i < n; i++)
|
|
||||||
dest[i] = e2a(src[i]);
|
|
||||||
|
|
||||||
return dest;
|
|
||||||
}
|
|
@ -146,6 +146,7 @@ void hpte_update(struct mm_struct *mm, unsigned long addr,
|
|||||||
psize = mmu_huge_psize;
|
psize = mmu_huge_psize;
|
||||||
#else
|
#else
|
||||||
BUG();
|
BUG();
|
||||||
|
psize = pte_pagesize_index(pte); /* shutup gcc */
|
||||||
#endif
|
#endif
|
||||||
} else
|
} else
|
||||||
psize = pte_pagesize_index(pte);
|
psize = pte_pagesize_index(pte);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2005-2006 Michael Ellerman, IBM Corporation
|
* Copyright (C) 2005-2006 Michael Ellerman, IBM Corporation
|
||||||
|
* Copyright (C) 2000-2004, IBM Corporation
|
||||||
*
|
*
|
||||||
* Description:
|
* Description:
|
||||||
* This file contains all the routines to build a flattened device
|
* This file contains all the routines to build a flattened device
|
||||||
@ -33,13 +34,13 @@
|
|||||||
#include <asm/iseries/hv_types.h>
|
#include <asm/iseries/hv_types.h>
|
||||||
#include <asm/iseries/hv_lp_config.h>
|
#include <asm/iseries/hv_lp_config.h>
|
||||||
#include <asm/iseries/hv_call_xm.h>
|
#include <asm/iseries/hv_call_xm.h>
|
||||||
#include <asm/iseries/it_exp_vpd_panel.h>
|
|
||||||
#include <asm/udbg.h>
|
#include <asm/udbg.h>
|
||||||
|
|
||||||
#include "processor_vpd.h"
|
#include "processor_vpd.h"
|
||||||
#include "call_hpt.h"
|
#include "call_hpt.h"
|
||||||
#include "call_pci.h"
|
#include "call_pci.h"
|
||||||
#include "pci.h"
|
#include "pci.h"
|
||||||
|
#include "it_exp_vpd_panel.h"
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
#define DBG(fmt...) udbg_printf(fmt)
|
#define DBG(fmt...) udbg_printf(fmt)
|
||||||
@ -76,6 +77,43 @@ static char __initdata device_type_pci[] = "pci";
|
|||||||
static char __initdata device_type_vdevice[] = "vdevice";
|
static char __initdata device_type_vdevice[] = "vdevice";
|
||||||
static char __initdata device_type_vscsi[] = "vscsi";
|
static char __initdata device_type_vscsi[] = "vscsi";
|
||||||
|
|
||||||
|
|
||||||
|
/* EBCDIC to ASCII conversion routines */
|
||||||
|
|
||||||
|
static unsigned char __init e2a(unsigned char x)
|
||||||
|
{
|
||||||
|
switch (x) {
|
||||||
|
case 0x81 ... 0x89:
|
||||||
|
return x - 0x81 + 'a';
|
||||||
|
case 0x91 ... 0x99:
|
||||||
|
return x - 0x91 + 'j';
|
||||||
|
case 0xA2 ... 0xA9:
|
||||||
|
return x - 0xA2 + 's';
|
||||||
|
case 0xC1 ... 0xC9:
|
||||||
|
return x - 0xC1 + 'A';
|
||||||
|
case 0xD1 ... 0xD9:
|
||||||
|
return x - 0xD1 + 'J';
|
||||||
|
case 0xE2 ... 0xE9:
|
||||||
|
return x - 0xE2 + 'S';
|
||||||
|
case 0xF0 ... 0xF9:
|
||||||
|
return x - 0xF0 + '0';
|
||||||
|
}
|
||||||
|
return ' ';
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned char * __init strne2a(unsigned char *dest,
|
||||||
|
const unsigned char *src, size_t n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
n = strnlen(src, n);
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
dest[i] = e2a(src[i]);
|
||||||
|
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
static struct iseries_flat_dt * __init dt_init(void)
|
static struct iseries_flat_dt * __init dt_init(void)
|
||||||
{
|
{
|
||||||
struct iseries_flat_dt *dt;
|
struct iseries_flat_dt *dt;
|
||||||
|
@ -18,9 +18,22 @@
|
|||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <asm/iseries/hv_lp_config.h>
|
#include <asm/iseries/hv_lp_config.h>
|
||||||
|
#include "it_lp_naca.h"
|
||||||
|
|
||||||
HvLpIndex HvLpConfig_getLpIndex_outline(void)
|
HvLpIndex HvLpConfig_getLpIndex_outline(void)
|
||||||
{
|
{
|
||||||
return HvLpConfig_getLpIndex();
|
return HvLpConfig_getLpIndex();
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(HvLpConfig_getLpIndex_outline);
|
EXPORT_SYMBOL(HvLpConfig_getLpIndex_outline);
|
||||||
|
|
||||||
|
HvLpIndex HvLpConfig_getLpIndex(void)
|
||||||
|
{
|
||||||
|
return itLpNaca.xLpIndex;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(HvLpConfig_getLpIndex);
|
||||||
|
|
||||||
|
HvLpIndex HvLpConfig_getPrimaryLpIndex(void)
|
||||||
|
{
|
||||||
|
return itLpNaca.xPrimaryLpIndex;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(HvLpConfig_getPrimaryLpIndex);
|
||||||
|
@ -87,6 +87,23 @@ static void tce_free_iSeries(struct iommu_table *tbl, long index, long npages)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure passed to HvCallXm_getTceTableParms
|
||||||
|
*/
|
||||||
|
struct iommu_table_cb {
|
||||||
|
unsigned long itc_busno; /* Bus number for this tce table */
|
||||||
|
unsigned long itc_start; /* Will be NULL for secondary */
|
||||||
|
unsigned long itc_totalsize; /* Size (in pages) of whole table */
|
||||||
|
unsigned long itc_offset; /* Index into real tce table of the
|
||||||
|
start of our section */
|
||||||
|
unsigned long itc_size; /* Size (in pages) of our section */
|
||||||
|
unsigned long itc_index; /* Index of this tce table */
|
||||||
|
unsigned short itc_maxtables; /* Max num of tables for partition */
|
||||||
|
unsigned char itc_virtbus; /* Flag to indicate virtual bus */
|
||||||
|
unsigned char itc_slotno; /* IOA Tce Slot Index */
|
||||||
|
unsigned char itc_rsvd[4];
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Call Hv with the architected data structure to get TCE table info.
|
* Call Hv with the architected data structure to get TCE table info.
|
||||||
* info. Put the returned data into the Linux representation of the
|
* info. Put the returned data into the Linux representation of the
|
||||||
|
@ -15,8 +15,8 @@
|
|||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
#ifndef _ASM_POWERPC_ISERIES_IT_EXT_VPD_PANEL_H
|
#ifndef _PLATFORMS_ISERIES_IT_EXT_VPD_PANEL_H
|
||||||
#define _ASM_POWERPC_ISERIES_IT_EXT_VPD_PANEL_H
|
#define _PLATFORMS_ISERIES_IT_EXT_VPD_PANEL_H
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This struct maps the panel information
|
* This struct maps the panel information
|
||||||
@ -48,4 +48,4 @@ struct ItExtVpdPanel {
|
|||||||
|
|
||||||
extern struct ItExtVpdPanel xItExtVpdPanel;
|
extern struct ItExtVpdPanel xItExtVpdPanel;
|
||||||
|
|
||||||
#endif /* _ASM_POWERPC_ISERIES_IT_EXT_VPD_PANEL_H */
|
#endif /* _PLATFORMS_ISERIES_IT_EXT_VPD_PANEL_H */
|
@ -15,8 +15,8 @@
|
|||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
#ifndef _ASM_POWERPC_ISERIES_IT_LP_NACA_H
|
#ifndef _PLATFORMS_ISERIES_IT_LP_NACA_H
|
||||||
#define _ASM_POWERPC_ISERIES_IT_LP_NACA_H
|
#define _PLATFORMS_ISERIES_IT_LP_NACA_H
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
@ -77,4 +77,4 @@ extern struct ItLpNaca itLpNaca;
|
|||||||
#define ITLPNACA_HWSYNCEDTBS 0x20 /* Hardware synced TBs */
|
#define ITLPNACA_HWSYNCEDTBS 0x20 /* Hardware synced TBs */
|
||||||
#define ITLPNACA_HMTINT 0x10 /* Utilize MHT for interrupts */
|
#define ITLPNACA_HMTINT 0x10 /* Utilize MHT for interrupts */
|
||||||
|
|
||||||
#endif /* _ASM_POWERPC_ISERIES_IT_LP_NACA_H */
|
#endif /* _PLATFORMS_ISERIES_IT_LP_NACA_H */
|
@ -13,12 +13,10 @@
|
|||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
#include <asm/abs_addr.h>
|
#include <asm/abs_addr.h>
|
||||||
#include <asm/iseries/it_lp_naca.h>
|
|
||||||
#include <asm/lppaca.h>
|
#include <asm/lppaca.h>
|
||||||
#include <asm/iseries/it_lp_reg_save.h>
|
#include <asm/iseries/it_lp_reg_save.h>
|
||||||
#include <asm/paca.h>
|
#include <asm/paca.h>
|
||||||
#include <asm/iseries/lpar_map.h>
|
#include <asm/iseries/lpar_map.h>
|
||||||
#include <asm/iseries/it_exp_vpd_panel.h>
|
|
||||||
#include <asm/iseries/it_lp_queue.h>
|
#include <asm/iseries/it_lp_queue.h>
|
||||||
|
|
||||||
#include "naca.h"
|
#include "naca.h"
|
||||||
@ -27,6 +25,8 @@
|
|||||||
#include "ipl_parms.h"
|
#include "ipl_parms.h"
|
||||||
#include "processor_vpd.h"
|
#include "processor_vpd.h"
|
||||||
#include "release_data.h"
|
#include "release_data.h"
|
||||||
|
#include "it_exp_vpd_panel.h"
|
||||||
|
#include "it_lp_naca.h"
|
||||||
|
|
||||||
/* The HvReleaseData is the root of the information shared between
|
/* The HvReleaseData is the root of the information shared between
|
||||||
* the hypervisor and Linux.
|
* the hypervisor and Linux.
|
||||||
@ -127,14 +127,12 @@ struct ItLpNaca itLpNaca = {
|
|||||||
(u64)instruction_access_slb_iSeries /* 0x480 I-SLB */
|
(u64)instruction_access_slb_iSeries /* 0x480 I-SLB */
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
EXPORT_SYMBOL(itLpNaca);
|
|
||||||
|
|
||||||
/* May be filled in by the hypervisor so cannot end up in the BSS */
|
/* May be filled in by the hypervisor so cannot end up in the BSS */
|
||||||
struct ItIplParmsReal xItIplParmsReal __attribute__((__section__(".data")));
|
struct ItIplParmsReal xItIplParmsReal __attribute__((__section__(".data")));
|
||||||
|
|
||||||
/* May be filled in by the hypervisor so cannot end up in the BSS */
|
/* May be filled in by the hypervisor so cannot end up in the BSS */
|
||||||
struct ItExtVpdPanel xItExtVpdPanel __attribute__((__section__(".data")));
|
struct ItExtVpdPanel xItExtVpdPanel __attribute__((__section__(".data")));
|
||||||
EXPORT_SYMBOL(xItExtVpdPanel);
|
|
||||||
|
|
||||||
#define maxPhysicalProcessors 32
|
#define maxPhysicalProcessors 32
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
#include <asm/iseries/it_lp_queue.h>
|
#include <asm/iseries/it_lp_queue.h>
|
||||||
#include <asm/iseries/hv_lp_event.h>
|
#include <asm/iseries/hv_lp_event.h>
|
||||||
#include <asm/iseries/hv_call_event.h>
|
#include <asm/iseries/hv_call_event.h>
|
||||||
#include <asm/iseries/it_lp_naca.h>
|
#include "it_lp_naca.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The LpQueue is used to pass event data from the hypervisor to
|
* The LpQueue is used to pass event data from the hypervisor to
|
||||||
|
@ -59,6 +59,7 @@
|
|||||||
#include "irq.h"
|
#include "irq.h"
|
||||||
#include "vpd_areas.h"
|
#include "vpd_areas.h"
|
||||||
#include "processor_vpd.h"
|
#include "processor_vpd.h"
|
||||||
|
#include "it_lp_naca.h"
|
||||||
#include "main_store.h"
|
#include "main_store.h"
|
||||||
#include "call_sm.h"
|
#include "call_sm.h"
|
||||||
#include "call_hpt.h"
|
#include "call_hpt.h"
|
||||||
|
@ -41,8 +41,8 @@
|
|||||||
|
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
#include <asm/prom.h>
|
||||||
#include <asm/iseries/hv_types.h>
|
#include <asm/iseries/hv_types.h>
|
||||||
#include <asm/iseries/it_exp_vpd_panel.h>
|
|
||||||
#include <asm/iseries/hv_lp_event.h>
|
#include <asm/iseries/hv_lp_event.h>
|
||||||
#include <asm/iseries/hv_lp_config.h>
|
#include <asm/iseries/hv_lp_config.h>
|
||||||
#include <asm/iseries/mf.h>
|
#include <asm/iseries/mf.h>
|
||||||
@ -116,6 +116,7 @@ static int proc_viopath_show(struct seq_file *m, void *v)
|
|||||||
dma_addr_t handle;
|
dma_addr_t handle;
|
||||||
HvLpEvent_Rc hvrc;
|
HvLpEvent_Rc hvrc;
|
||||||
DECLARE_MUTEX_LOCKED(Semaphore);
|
DECLARE_MUTEX_LOCKED(Semaphore);
|
||||||
|
struct device_node *node;
|
||||||
|
|
||||||
buf = kmalloc(HW_PAGE_SIZE, GFP_KERNEL);
|
buf = kmalloc(HW_PAGE_SIZE, GFP_KERNEL);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
@ -143,20 +144,26 @@ static int proc_viopath_show(struct seq_file *m, void *v)
|
|||||||
|
|
||||||
buf[HW_PAGE_SIZE-1] = '\0';
|
buf[HW_PAGE_SIZE-1] = '\0';
|
||||||
seq_printf(m, "%s", buf);
|
seq_printf(m, "%s", buf);
|
||||||
seq_printf(m, "AVAILABLE_VETH=%x\n", vlanMap);
|
|
||||||
seq_printf(m, "SRLNBR=%c%c%c%c%c%c%c\n",
|
|
||||||
e2a(xItExtVpdPanel.mfgID[2]),
|
|
||||||
e2a(xItExtVpdPanel.mfgID[3]),
|
|
||||||
e2a(xItExtVpdPanel.systemSerial[1]),
|
|
||||||
e2a(xItExtVpdPanel.systemSerial[2]),
|
|
||||||
e2a(xItExtVpdPanel.systemSerial[3]),
|
|
||||||
e2a(xItExtVpdPanel.systemSerial[4]),
|
|
||||||
e2a(xItExtVpdPanel.systemSerial[5]));
|
|
||||||
|
|
||||||
dma_unmap_single(iSeries_vio_dev, handle, HW_PAGE_SIZE,
|
dma_unmap_single(iSeries_vio_dev, handle, HW_PAGE_SIZE,
|
||||||
DMA_FROM_DEVICE);
|
DMA_FROM_DEVICE);
|
||||||
kfree(buf);
|
kfree(buf);
|
||||||
|
|
||||||
|
seq_printf(m, "AVAILABLE_VETH=%x\n", vlanMap);
|
||||||
|
|
||||||
|
node = of_find_node_by_path("/");
|
||||||
|
buf = NULL;
|
||||||
|
if (node != NULL)
|
||||||
|
buf = get_property(node, "system-id", NULL);
|
||||||
|
|
||||||
|
if (buf == NULL)
|
||||||
|
seq_printf(m, "SRLNBR=<UNKNOWN>\n");
|
||||||
|
else
|
||||||
|
/* Skip "IBM," on front of serial number, see dt.c */
|
||||||
|
seq_printf(m, "SRLNBR=%s\n", buf + 4);
|
||||||
|
|
||||||
|
of_node_put(node);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,7 +188,7 @@ static void __init iSeries_Parse_Vpd(u8 *VpdData, int VpdDataLen,
|
|||||||
{
|
{
|
||||||
u8 *TagPtr = VpdData;
|
u8 *TagPtr = VpdData;
|
||||||
int DataLen = VpdDataLen - 3;
|
int DataLen = VpdDataLen - 3;
|
||||||
u8 PhbId;
|
u8 PhbId = 0xff;
|
||||||
|
|
||||||
while ((*TagPtr != VpdEndOfAreaTag) && (DataLen > 0)) {
|
while ((*TagPtr != VpdEndOfAreaTag) && (DataLen > 0)) {
|
||||||
int AreaLen = *(TagPtr + 1) + (*(TagPtr + 2) * 256);
|
int AreaLen = *(TagPtr + 1) + (*(TagPtr + 2) * 256);
|
||||||
@ -205,15 +205,16 @@ static void __init iSeries_Parse_Vpd(u8 *VpdData, int VpdDataLen,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init iSeries_Get_Location_Code(u16 bus, HvAgentId agent,
|
static int __init iSeries_Get_Location_Code(u16 bus, HvAgentId agent,
|
||||||
u8 *frame, char card[4])
|
u8 *frame, char card[4])
|
||||||
{
|
{
|
||||||
|
int status = 0;
|
||||||
int BusVpdLen = 0;
|
int BusVpdLen = 0;
|
||||||
u8 *BusVpdPtr = kmalloc(BUS_VPDSIZE, GFP_KERNEL);
|
u8 *BusVpdPtr = kmalloc(BUS_VPDSIZE, GFP_KERNEL);
|
||||||
|
|
||||||
if (BusVpdPtr == NULL) {
|
if (BusVpdPtr == NULL) {
|
||||||
printk("PCI: Bus VPD Buffer allocation failure.\n");
|
printk("PCI: Bus VPD Buffer allocation failure.\n");
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
BusVpdLen = HvCallPci_getBusVpd(bus, iseries_hv_addr(BusVpdPtr),
|
BusVpdLen = HvCallPci_getBusVpd(bus, iseries_hv_addr(BusVpdPtr),
|
||||||
BUS_VPDSIZE);
|
BUS_VPDSIZE);
|
||||||
@ -228,8 +229,10 @@ static void __init iSeries_Get_Location_Code(u16 bus, HvAgentId agent,
|
|||||||
goto out_free;
|
goto out_free;
|
||||||
}
|
}
|
||||||
iSeries_Parse_Vpd(BusVpdPtr, BusVpdLen, agent, frame, card);
|
iSeries_Parse_Vpd(BusVpdPtr, BusVpdLen, agent, frame, card);
|
||||||
|
status = 1;
|
||||||
out_free:
|
out_free:
|
||||||
kfree(BusVpdPtr);
|
kfree(BusVpdPtr);
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -246,7 +249,7 @@ void __init iSeries_Device_Information(struct pci_dev *PciDev, int count)
|
|||||||
struct device_node *DevNode = PciDev->sysdata;
|
struct device_node *DevNode = PciDev->sysdata;
|
||||||
struct pci_dn *pdn;
|
struct pci_dn *pdn;
|
||||||
u16 bus;
|
u16 bus;
|
||||||
u8 frame;
|
u8 frame = 0;
|
||||||
char card[4];
|
char card[4];
|
||||||
HvSubBusNumber subbus;
|
HvSubBusNumber subbus;
|
||||||
HvAgentId agent;
|
HvAgentId agent;
|
||||||
@ -262,10 +265,11 @@ void __init iSeries_Device_Information(struct pci_dev *PciDev, int count)
|
|||||||
subbus = pdn->bussubno;
|
subbus = pdn->bussubno;
|
||||||
agent = ISERIES_PCI_AGENTID(ISERIES_GET_DEVICE_FROM_SUBBUS(subbus),
|
agent = ISERIES_PCI_AGENTID(ISERIES_GET_DEVICE_FROM_SUBBUS(subbus),
|
||||||
ISERIES_GET_FUNCTION_FROM_SUBBUS(subbus));
|
ISERIES_GET_FUNCTION_FROM_SUBBUS(subbus));
|
||||||
iSeries_Get_Location_Code(bus, agent, &frame, card);
|
|
||||||
|
|
||||||
printk("%d. PCI: Bus%3d, Device%3d, Vendor %04X Frame%3d, Card %4s ",
|
if (iSeries_Get_Location_Code(bus, agent, &frame, card)) {
|
||||||
count, bus, PCI_SLOT(PciDev->devfn), PciDev->vendor,
|
printk("%d. PCI: Bus%3d, Device%3d, Vendor %04X Frame%3d, "
|
||||||
frame, card);
|
"Card %4s 0x%04X\n", count, bus,
|
||||||
printk("0x%04X\n", (int)(PciDev->class >> 8));
|
PCI_SLOT(PciDev->devfn), PciDev->vendor, frame,
|
||||||
|
card, (int)(PciDev->class >> 8));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,23 +16,6 @@
|
|||||||
#define HvCallXmSetTce HvCallXm + 11
|
#define HvCallXmSetTce HvCallXm + 11
|
||||||
#define HvCallXmSetTces HvCallXm + 13
|
#define HvCallXmSetTces HvCallXm + 13
|
||||||
|
|
||||||
/*
|
|
||||||
* Structure passed to HvCallXm_getTceTableParms
|
|
||||||
*/
|
|
||||||
struct iommu_table_cb {
|
|
||||||
unsigned long itc_busno; /* Bus number for this tce table */
|
|
||||||
unsigned long itc_start; /* Will be NULL for secondary */
|
|
||||||
unsigned long itc_totalsize; /* Size (in pages) of whole table */
|
|
||||||
unsigned long itc_offset; /* Index into real tce table of the
|
|
||||||
start of our section */
|
|
||||||
unsigned long itc_size; /* Size (in pages) of our section */
|
|
||||||
unsigned long itc_index; /* Index of this tce table */
|
|
||||||
unsigned short itc_maxtables; /* Max num of tables for partition */
|
|
||||||
unsigned char itc_virtbus; /* Flag to indicate virtual bus */
|
|
||||||
unsigned char itc_slotno; /* IOA Tce Slot Index */
|
|
||||||
unsigned char itc_rsvd[4];
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline void HvCallXm_getTceTableParms(u64 cb)
|
static inline void HvCallXm_getTceTableParms(u64 cb)
|
||||||
{
|
{
|
||||||
HvCall1(HvCallXmGetTceTableParms, cb);
|
HvCall1(HvCallXmGetTceTableParms, cb);
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
|
|
||||||
#include <asm/iseries/hv_call_sc.h>
|
#include <asm/iseries/hv_call_sc.h>
|
||||||
#include <asm/iseries/hv_types.h>
|
#include <asm/iseries/hv_types.h>
|
||||||
#include <asm/iseries/it_lp_naca.h>
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
HvCallCfg_Cur = 0,
|
HvCallCfg_Cur = 0,
|
||||||
@ -44,16 +43,8 @@ enum {
|
|||||||
#define HvCallCfgGetHostingLpIndex HvCallCfg + 32
|
#define HvCallCfgGetHostingLpIndex HvCallCfg + 32
|
||||||
|
|
||||||
extern HvLpIndex HvLpConfig_getLpIndex_outline(void);
|
extern HvLpIndex HvLpConfig_getLpIndex_outline(void);
|
||||||
|
extern HvLpIndex HvLpConfig_getLpIndex(void);
|
||||||
static inline HvLpIndex HvLpConfig_getLpIndex(void)
|
extern HvLpIndex HvLpConfig_getPrimaryLpIndex(void);
|
||||||
{
|
|
||||||
return itLpNaca.xLpIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline HvLpIndex HvLpConfig_getPrimaryLpIndex(void)
|
|
||||||
{
|
|
||||||
return itLpNaca.xPrimaryLpIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline u64 HvLpConfig_getMsChunks(void)
|
static inline u64 HvLpConfig_getMsChunks(void)
|
||||||
{
|
{
|
||||||
|
@ -169,11 +169,6 @@ extern u32 booke_wdt_enabled;
|
|||||||
extern u32 booke_wdt_period;
|
extern u32 booke_wdt_period;
|
||||||
#endif /* CONFIG_BOOKE_WDT */
|
#endif /* CONFIG_BOOKE_WDT */
|
||||||
|
|
||||||
/* EBCDIC -> ASCII conversion for [0-9A-Z] on iSeries */
|
|
||||||
extern unsigned char e2a(unsigned char);
|
|
||||||
extern unsigned char* strne2a(unsigned char *dest,
|
|
||||||
const unsigned char *src, size_t n);
|
|
||||||
|
|
||||||
struct device_node;
|
struct device_node;
|
||||||
extern void note_scsi_host(struct device_node *, void *);
|
extern void note_scsi_host(struct device_node *, void *);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user