Merge branch 'mpe'
This commit is contained in:
Коммит
790e05d8c2
|
@ -32,7 +32,6 @@
|
|||
#include <asm/rtas.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/time.h>
|
||||
#include <asm/iseries/it_exp_vpd_panel.h>
|
||||
#include <asm/prom.h>
|
||||
#include <asm/vdso_datapage.h>
|
||||
|
||||
|
|
|
@ -56,7 +56,6 @@
|
|||
#include <asm/page.h>
|
||||
#include <asm/mmu.h>
|
||||
#include <asm/lmb.h>
|
||||
#include <asm/iseries/it_lp_naca.h>
|
||||
#include <asm/firmware.h>
|
||||
#include <asm/xmon.h>
|
||||
#include <asm/udbg.h>
|
||||
|
|
|
@ -14,7 +14,6 @@ endif
|
|||
obj-$(CONFIG_PPC64) += checksum_64.o copypage_64.o copyuser_64.o \
|
||||
memcpy_64.o usercopy_64.o mem_64.o string.o \
|
||||
strcase.o
|
||||
obj-$(CONFIG_PPC_ISERIES) += e2a.o
|
||||
obj-$(CONFIG_XMON) += sstep.o
|
||||
|
||||
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;
|
||||
#else
|
||||
BUG();
|
||||
psize = pte_pagesize_index(pte); /* shutup gcc */
|
||||
#endif
|
||||
} else
|
||||
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:
|
||||
* 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_lp_config.h>
|
||||
#include <asm/iseries/hv_call_xm.h>
|
||||
#include <asm/iseries/it_exp_vpd_panel.h>
|
||||
#include <asm/udbg.h>
|
||||
|
||||
#include "processor_vpd.h"
|
||||
#include "call_hpt.h"
|
||||
#include "call_pci.h"
|
||||
#include "pci.h"
|
||||
#include "it_exp_vpd_panel.h"
|
||||
|
||||
#ifdef DEBUG
|
||||
#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_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)
|
||||
{
|
||||
struct iseries_flat_dt *dt;
|
||||
|
|
|
@ -18,9 +18,22 @@
|
|||
|
||||
#include <linux/module.h>
|
||||
#include <asm/iseries/hv_lp_config.h>
|
||||
#include "it_lp_naca.h"
|
||||
|
||||
HvLpIndex HvLpConfig_getLpIndex_outline(void)
|
||||
{
|
||||
return HvLpConfig_getLpIndex();
|
||||
}
|
||||
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.
|
||||
* 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
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#ifndef _ASM_POWERPC_ISERIES_IT_EXT_VPD_PANEL_H
|
||||
#define _ASM_POWERPC_ISERIES_IT_EXT_VPD_PANEL_H
|
||||
#ifndef _PLATFORMS_ISERIES_IT_EXT_VPD_PANEL_H
|
||||
#define _PLATFORMS_ISERIES_IT_EXT_VPD_PANEL_H
|
||||
|
||||
/*
|
||||
* This struct maps the panel information
|
||||
|
@ -48,4 +48,4 @@ struct ItExtVpdPanel {
|
|||
|
||||
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
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
#ifndef _ASM_POWERPC_ISERIES_IT_LP_NACA_H
|
||||
#define _ASM_POWERPC_ISERIES_IT_LP_NACA_H
|
||||
#ifndef _PLATFORMS_ISERIES_IT_LP_NACA_H
|
||||
#define _PLATFORMS_ISERIES_IT_LP_NACA_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
|
@ -77,4 +77,4 @@ extern struct ItLpNaca itLpNaca;
|
|||
#define ITLPNACA_HWSYNCEDTBS 0x20 /* Hardware synced TBs */
|
||||
#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/ptrace.h>
|
||||
#include <asm/abs_addr.h>
|
||||
#include <asm/iseries/it_lp_naca.h>
|
||||
#include <asm/lppaca.h>
|
||||
#include <asm/iseries/it_lp_reg_save.h>
|
||||
#include <asm/paca.h>
|
||||
#include <asm/iseries/lpar_map.h>
|
||||
#include <asm/iseries/it_exp_vpd_panel.h>
|
||||
#include <asm/iseries/it_lp_queue.h>
|
||||
|
||||
#include "naca.h"
|
||||
|
@ -27,6 +25,8 @@
|
|||
#include "ipl_parms.h"
|
||||
#include "processor_vpd.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 hypervisor and Linux.
|
||||
|
@ -127,14 +127,12 @@ struct ItLpNaca itLpNaca = {
|
|||
(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 */
|
||||
struct ItIplParmsReal xItIplParmsReal __attribute__((__section__(".data")));
|
||||
|
||||
/* May be filled in by the hypervisor so cannot end up in the BSS */
|
||||
struct ItExtVpdPanel xItExtVpdPanel __attribute__((__section__(".data")));
|
||||
EXPORT_SYMBOL(xItExtVpdPanel);
|
||||
|
||||
#define maxPhysicalProcessors 32
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#include <asm/iseries/it_lp_queue.h>
|
||||
#include <asm/iseries/hv_lp_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
|
||||
|
|
|
@ -59,6 +59,7 @@
|
|||
#include "irq.h"
|
||||
#include "vpd_areas.h"
|
||||
#include "processor_vpd.h"
|
||||
#include "it_lp_naca.h"
|
||||
#include "main_store.h"
|
||||
#include "call_sm.h"
|
||||
#include "call_hpt.h"
|
||||
|
|
|
@ -41,8 +41,8 @@
|
|||
|
||||
#include <asm/system.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/prom.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_config.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;
|
||||
HvLpEvent_Rc hvrc;
|
||||
DECLARE_MUTEX_LOCKED(Semaphore);
|
||||
struct device_node *node;
|
||||
|
||||
buf = kmalloc(HW_PAGE_SIZE, GFP_KERNEL);
|
||||
if (!buf)
|
||||
|
@ -143,20 +144,26 @@ static int proc_viopath_show(struct seq_file *m, void *v)
|
|||
|
||||
buf[HW_PAGE_SIZE-1] = '\0';
|
||||
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_FROM_DEVICE);
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -188,7 +188,7 @@ static void __init iSeries_Parse_Vpd(u8 *VpdData, int VpdDataLen,
|
|||
{
|
||||
u8 *TagPtr = VpdData;
|
||||
int DataLen = VpdDataLen - 3;
|
||||
u8 PhbId;
|
||||
u8 PhbId = 0xff;
|
||||
|
||||
while ((*TagPtr != VpdEndOfAreaTag) && (DataLen > 0)) {
|
||||
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])
|
||||
{
|
||||
int status = 0;
|
||||
int BusVpdLen = 0;
|
||||
u8 *BusVpdPtr = kmalloc(BUS_VPDSIZE, GFP_KERNEL);
|
||||
|
||||
if (BusVpdPtr == NULL) {
|
||||
printk("PCI: Bus VPD Buffer allocation failure.\n");
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
BusVpdLen = HvCallPci_getBusVpd(bus, iseries_hv_addr(BusVpdPtr),
|
||||
BUS_VPDSIZE);
|
||||
|
@ -228,8 +229,10 @@ static void __init iSeries_Get_Location_Code(u16 bus, HvAgentId agent,
|
|||
goto out_free;
|
||||
}
|
||||
iSeries_Parse_Vpd(BusVpdPtr, BusVpdLen, agent, frame, card);
|
||||
status = 1;
|
||||
out_free:
|
||||
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 pci_dn *pdn;
|
||||
u16 bus;
|
||||
u8 frame;
|
||||
u8 frame = 0;
|
||||
char card[4];
|
||||
HvSubBusNumber subbus;
|
||||
HvAgentId agent;
|
||||
|
@ -262,10 +265,11 @@ void __init iSeries_Device_Information(struct pci_dev *PciDev, int count)
|
|||
subbus = pdn->bussubno;
|
||||
agent = ISERIES_PCI_AGENTID(ISERIES_GET_DEVICE_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 ",
|
||||
count, bus, PCI_SLOT(PciDev->devfn), PciDev->vendor,
|
||||
frame, card);
|
||||
printk("0x%04X\n", (int)(PciDev->class >> 8));
|
||||
if (iSeries_Get_Location_Code(bus, agent, &frame, card)) {
|
||||
printk("%d. PCI: Bus%3d, Device%3d, Vendor %04X Frame%3d, "
|
||||
"Card %4s 0x%04X\n", count, bus,
|
||||
PCI_SLOT(PciDev->devfn), PciDev->vendor, frame,
|
||||
card, (int)(PciDev->class >> 8));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,23 +16,6 @@
|
|||
#define HvCallXmSetTce HvCallXm + 11
|
||||
#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)
|
||||
{
|
||||
HvCall1(HvCallXmGetTceTableParms, cb);
|
||||
|
|
|
@ -25,7 +25,6 @@
|
|||
|
||||
#include <asm/iseries/hv_call_sc.h>
|
||||
#include <asm/iseries/hv_types.h>
|
||||
#include <asm/iseries/it_lp_naca.h>
|
||||
|
||||
enum {
|
||||
HvCallCfg_Cur = 0,
|
||||
|
@ -44,16 +43,8 @@ enum {
|
|||
#define HvCallCfgGetHostingLpIndex HvCallCfg + 32
|
||||
|
||||
extern HvLpIndex HvLpConfig_getLpIndex_outline(void);
|
||||
|
||||
static inline HvLpIndex HvLpConfig_getLpIndex(void)
|
||||
{
|
||||
return itLpNaca.xLpIndex;
|
||||
}
|
||||
|
||||
static inline HvLpIndex HvLpConfig_getPrimaryLpIndex(void)
|
||||
{
|
||||
return itLpNaca.xPrimaryLpIndex;
|
||||
}
|
||||
extern HvLpIndex HvLpConfig_getLpIndex(void);
|
||||
extern HvLpIndex HvLpConfig_getPrimaryLpIndex(void);
|
||||
|
||||
static inline u64 HvLpConfig_getMsChunks(void)
|
||||
{
|
||||
|
|
|
@ -169,11 +169,6 @@ extern u32 booke_wdt_enabled;
|
|||
extern u32 booke_wdt_period;
|
||||
#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;
|
||||
extern void note_scsi_host(struct device_node *, void *);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче