sgxinit.o sgxreset.o sgxutils.o sgxkick.o \
sgxtransfer.o mmu.o pb.o perproc.o sysconfig.o \
sysutils.o osperproc.o bridged_support.o \
- bridged_sgx_bridge.o sgxpower.o pdump_common.o
+ bridged_sgx_bridge.o sgxpower.o pdump_common.o \
+ pvr_events.o
pvrsrvkm-objs-$(CONFIG_PVR_DEBUG) += pvr_debug.o
pvrsrvkm-objs-$(CONFIG_PVR_TIMING) += pvr_debug.o
return 0;
}
-static int bridged_ioctl(u32 cmd, void *in, void *out,
+static int bridged_ioctl(struct file *filp, u32 cmd, void *in, void *out,
struct PVRSRV_PER_PROCESS_DATA *per_proc)
{
int err = -EFAULT;
break;
case PVRSRV_BRIDGE_SGX_2DQUERYBLTSCOMPLETE:
- err = SGX2DQueryBlitsCompleteBW(cmd, in, out, per_proc);
+ err = SGX2DQueryBlitsCompleteBW(filp, cmd, in, out, per_proc);
break;
case PVRSRV_BRIDGE_SGX_GETMMUPDADDR:
return err;
}
-int BridgedDispatchKM(struct PVRSRV_PER_PROCESS_DATA *pd,
+int BridgedDispatchKM(struct file *filp, struct PVRSRV_PER_PROCESS_DATA *pd,
struct PVRSRV_BRIDGE_PACKAGE *pkg)
{
goto return_fault;
}
- err = bridged_ioctl(bid, in, out, pd);
+ err = bridged_ioctl(filp, bid, in, out, pd);
if (err < 0)
goto return_fault;
enum PVRSRV_ERROR CommonBridgeInit(void);
-int BridgedDispatchKM(struct PVRSRV_PER_PROCESS_DATA *psPerProc,
- struct PVRSRV_BRIDGE_PACKAGE *psBridgePackageKM);
+int BridgedDispatchKM(struct file *filp,
+ struct PVRSRV_PER_PROCESS_DATA *psPerProc,
+ struct PVRSRV_BRIDGE_PACKAGE *psBridgePackageKM);
#endif
#include "bridged_sgx_bridge.h"
#include "sgxutils.h"
#include "pdump_km.h"
+#include "pvr_events.h"
int SGXGetClientInfoBW(u32 ui32BridgeID,
struct PVRSRV_BRIDGE_IN_GETCLIENTINFO *psGetClientInfoIN,
return 0;
}
-int SGX2DQueryBlitsCompleteBW(u32 ui32BridgeID,
+int SGX2DQueryBlitsCompleteBW(struct file *filp, u32 ui32BridgeID,
struct PVRSRV_BRIDGE_IN_2DQUERYBLTSCOMPLETE *ps2DQueryBltsCompleteIN,
struct PVRSRV_BRIDGE_RETURN *psRetOUT,
struct PVRSRV_PER_PROCESS_DATA *psPerProc)
(struct PVRSRV_SGXDEV_INFO *)((struct PVRSRV_DEVICE_NODE *)
hDevCookieInt)->pvDevice;
+ if (ps2DQueryBltsCompleteIN->type == _PVR_SYNC_WAIT_EVENT) {
+ struct PVRSRV_FILE_PRIVATE_DATA *priv = filp->private_data;
+
+ if (pvr_sync_event_req(priv,
+ (struct PVRSRV_KERNEL_SYNC_INFO *)pvSyncInfo))
+ psRetOUT->eError = PVRSRV_ERROR_OUT_OF_MEMORY;
+
+ return 0;
+ }
+
psRetOUT->eError =
SGX2DQueryBlitsCompleteKM(psDevInfo,
(struct PVRSRV_KERNEL_SYNC_INFO *)
struct PVRSRV_BRIDGE_RETURN *psRetOUT,
struct PVRSRV_PER_PROCESS_DATA *psPerProc);
-int SGX2DQueryBlitsCompleteBW(u32 ui32BridgeID,
+int SGX2DQueryBlitsCompleteBW(struct file *filp, u32 ui32BridgeID,
struct PVRSRV_BRIDGE_IN_2DQUERYBLTSCOMPLETE *ps2DQueryBltsCompleteIN,
struct PVRSRV_BRIDGE_RETURN *psRetOUT,
struct PVRSRV_PER_PROCESS_DATA *psPerProc);
#include "proc.h"
#include "pvrmodule.h"
#include "private_data.h"
+#include "pvr_events.h"
#define DRVNAME "pvrsrvkm"
priv = filp->private_data;
+ pvr_release_events(priv);
+
PVRSRVProcessDisconnect(priv->ui32OpenPID);
OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP,
.open = pvr_open,
.release = pvr_release,
.mmap = PVRMMap,
+ .poll = pvr_poll,
+ .read = pvr_read,
};
static void pvr_shutdown(struct platform_device *pdev)
if (error < 0)
goto err4;
+ pvr_init_events();
+
return 0;
err4:
}
#endif
-long PVRSRV_BridgeDispatchKM(struct file *file, unsigned int cmd,
+long PVRSRV_BridgeDispatchKM(struct file *filp, unsigned int cmd,
unsigned long arg)
{
u32 ui32BridgeID = PVRSRV_GET_BRIDGE_ID(cmd);
sBridgePackageKM.ui32BridgeID = PVRSRV_GET_BRIDGE_ID(
sBridgePackageKM.ui32BridgeID);
- err = BridgedDispatchKM(psPerProc, &sBridgePackageKM);
+ err = BridgedDispatchKM(filp, psPerProc, &sBridgePackageKM);
if (err != PVRSRV_OK)
goto unlock_and_return;
#include "perproc.h"
#include "pdump_km.h"
#include "ra.h"
+#include "pvr_events.h"
#include "pvrversion.h"
enum PVRSRV_ERROR AllocateDeviceID(struct SYS_DATA *psSysData, u32 *pui32DevID)
OSEventObjectSignal(hOSEventKM);
}
+ pvr_handle_sync_events();
+
pvr_unlock();
}
enum pvr_sync_wait_seq_type {
_PVR_SYNC_WAIT_BLOCK,
_PVR_SYNC_WAIT_NONBLOCK,
+ _PVR_SYNC_WAIT_EVENT,
};
struct PVRSRV_BRIDGE_IN_2DQUERYBLTSCOMPLETE {