forked from Minki/linux
powerpc: Merge HvLpEvent.c into lpevents.c
These two files were intimately connected, so just merge them. Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
This commit is contained in:
parent
99a2379cdd
commit
544cbbaed4
@ -18,6 +18,7 @@
|
||||
#include <asm/iSeries/ItLpQueue.h>
|
||||
#include <asm/iSeries/HvLpEvent.h>
|
||||
#include <asm/iSeries/HvCallEvent.h>
|
||||
#include <asm/iSeries/ItLpNaca.h>
|
||||
|
||||
/*
|
||||
* The LpQueue is used to pass event data from the hypervisor to
|
||||
@ -42,7 +43,8 @@ static char *event_types[HvLpEvent_Type_NumTypes] = {
|
||||
};
|
||||
|
||||
/* Array of LpEvent handler functions */
|
||||
extern LpEventHandler lpEventHandler[HvLpEvent_Type_NumTypes];
|
||||
static LpEventHandler lpEventHandler[HvLpEvent_Type_NumTypes];
|
||||
static unsigned lpEventHandlerPaths[HvLpEvent_Type_NumTypes];
|
||||
|
||||
static struct HvLpEvent * get_next_hvlpevent(void)
|
||||
{
|
||||
@ -198,6 +200,70 @@ void setup_hvlpevent_queue(void)
|
||||
hvlpevent_queue.xIndex = 0;
|
||||
}
|
||||
|
||||
/* Register a handler for an LpEvent type */
|
||||
int HvLpEvent_registerHandler(HvLpEvent_Type eventType, LpEventHandler handler)
|
||||
{
|
||||
if (eventType < HvLpEvent_Type_NumTypes) {
|
||||
lpEventHandler[eventType] = handler;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
EXPORT_SYMBOL(HvLpEvent_registerHandler);
|
||||
|
||||
int HvLpEvent_unregisterHandler(HvLpEvent_Type eventType)
|
||||
{
|
||||
might_sleep();
|
||||
|
||||
if (eventType < HvLpEvent_Type_NumTypes) {
|
||||
if (!lpEventHandlerPaths[eventType]) {
|
||||
lpEventHandler[eventType] = NULL;
|
||||
/*
|
||||
* We now sleep until all other CPUs have scheduled.
|
||||
* This ensures that the deletion is seen by all
|
||||
* other CPUs, and that the deleted handler isn't
|
||||
* still running on another CPU when we return.
|
||||
*/
|
||||
synchronize_rcu();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
EXPORT_SYMBOL(HvLpEvent_unregisterHandler);
|
||||
|
||||
/*
|
||||
* lpIndex is the partition index of the target partition.
|
||||
* needed only for VirtualIo, VirtualLan and SessionMgr. Zero
|
||||
* indicates to use our partition index - for the other types.
|
||||
*/
|
||||
int HvLpEvent_openPath(HvLpEvent_Type eventType, HvLpIndex lpIndex)
|
||||
{
|
||||
if ((eventType < HvLpEvent_Type_NumTypes) &&
|
||||
lpEventHandler[eventType]) {
|
||||
if (lpIndex == 0)
|
||||
lpIndex = itLpNaca.xLpIndex;
|
||||
HvCallEvent_openLpEventPath(lpIndex, eventType);
|
||||
++lpEventHandlerPaths[eventType];
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
int HvLpEvent_closePath(HvLpEvent_Type eventType, HvLpIndex lpIndex)
|
||||
{
|
||||
if ((eventType < HvLpEvent_Type_NumTypes) &&
|
||||
lpEventHandler[eventType] &&
|
||||
lpEventHandlerPaths[eventType]) {
|
||||
if (lpIndex == 0)
|
||||
lpIndex = itLpNaca.xLpIndex;
|
||||
HvCallEvent_closeLpEventPath(lpIndex, eventType);
|
||||
--lpEventHandlerPaths[eventType];
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int proc_lpevents_show(struct seq_file *m, void *v)
|
||||
{
|
||||
int cpu, i;
|
||||
|
@ -1,88 +0,0 @@
|
||||
/*
|
||||
* Copyright 2001 Mike Corrigan IBM Corp
|
||||
*
|
||||
* 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) any later version.
|
||||
*/
|
||||
#include <linux/stddef.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/iSeries/HvLpEvent.h>
|
||||
#include <asm/iSeries/HvCallEvent.h>
|
||||
#include <asm/iSeries/ItLpNaca.h>
|
||||
|
||||
/* Array of LpEvent handler functions */
|
||||
LpEventHandler lpEventHandler[HvLpEvent_Type_NumTypes];
|
||||
unsigned lpEventHandlerPaths[HvLpEvent_Type_NumTypes];
|
||||
|
||||
/* Register a handler for an LpEvent type */
|
||||
|
||||
int HvLpEvent_registerHandler( HvLpEvent_Type eventType, LpEventHandler handler )
|
||||
{
|
||||
int rc = 1;
|
||||
if ( eventType < HvLpEvent_Type_NumTypes ) {
|
||||
lpEventHandler[eventType] = handler;
|
||||
rc = 0;
|
||||
}
|
||||
return rc;
|
||||
|
||||
}
|
||||
|
||||
int HvLpEvent_unregisterHandler( HvLpEvent_Type eventType )
|
||||
{
|
||||
int rc = 1;
|
||||
|
||||
might_sleep();
|
||||
|
||||
if ( eventType < HvLpEvent_Type_NumTypes ) {
|
||||
if ( !lpEventHandlerPaths[eventType] ) {
|
||||
lpEventHandler[eventType] = NULL;
|
||||
rc = 0;
|
||||
|
||||
/* We now sleep until all other CPUs have scheduled. This ensures that
|
||||
* the deletion is seen by all other CPUs, and that the deleted handler
|
||||
* isn't still running on another CPU when we return. */
|
||||
synchronize_rcu();
|
||||
}
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(HvLpEvent_registerHandler);
|
||||
EXPORT_SYMBOL(HvLpEvent_unregisterHandler);
|
||||
|
||||
/* (lpIndex is the partition index of the target partition.
|
||||
* needed only for VirtualIo, VirtualLan and SessionMgr. Zero
|
||||
* indicates to use our partition index - for the other types)
|
||||
*/
|
||||
int HvLpEvent_openPath( HvLpEvent_Type eventType, HvLpIndex lpIndex )
|
||||
{
|
||||
int rc = 1;
|
||||
if ( eventType < HvLpEvent_Type_NumTypes &&
|
||||
lpEventHandler[eventType] ) {
|
||||
if ( lpIndex == 0 )
|
||||
lpIndex = itLpNaca.xLpIndex;
|
||||
HvCallEvent_openLpEventPath( lpIndex, eventType );
|
||||
++lpEventHandlerPaths[eventType];
|
||||
rc = 0;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
int HvLpEvent_closePath( HvLpEvent_Type eventType, HvLpIndex lpIndex )
|
||||
{
|
||||
int rc = 1;
|
||||
if ( eventType < HvLpEvent_Type_NumTypes &&
|
||||
lpEventHandler[eventType] &&
|
||||
lpEventHandlerPaths[eventType] ) {
|
||||
if ( lpIndex == 0 )
|
||||
lpIndex = itLpNaca.xLpIndex;
|
||||
HvCallEvent_closeLpEventPath( lpIndex, eventType );
|
||||
--lpEventHandlerPaths[eventType];
|
||||
rc = 0;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ pci-obj-$(CONFIG_PPC_MULTIPLATFORM) += pci_dn.o pci_direct_iommu.o
|
||||
|
||||
obj-$(CONFIG_PCI) += pci.o pci_iommu.o iomap.o $(pci-obj-y)
|
||||
|
||||
obj-$(CONFIG_PPC_ISERIES) += HvLpEvent.o iSeries_proc.o iSeries_htab.o \
|
||||
obj-$(CONFIG_PPC_ISERIES) += iSeries_proc.o iSeries_htab.o \
|
||||
iSeries_iommu.o
|
||||
|
||||
obj-$(CONFIG_PPC_MULTIPLATFORM) += nvram.o i8259.o prom_init.o
|
||||
|
Loading…
Reference in New Issue
Block a user