1 /**********************************************************************
3 * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms and conditions of the GNU General Public License,
7 * version 2, as published by the Free Software Foundation.
9 * This program is distributed in the hope it will be useful but, except
10 * as otherwise stated in writing, without any warranty; without even the
11 * implied warranty of merchantability or fitness for a particular purpose.
12 * See the GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
18 * The full GNU General Public License is included in this distribution in
19 * the file called "COPYING".
21 * Contact Information:
22 * Imagination Technologies Ltd. <gpl-support@imgtec.com>
23 * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK
25 ******************************************************************************/
27 #include "services_headers.h"
28 #include "kerneldisplay.h"
32 #include "sgxinfokm.h"
34 #include "sysconfig.h"
36 SYS_DATA *gpsSysData = (SYS_DATA *) IMG_NULL;
39 static SYS_SPECIFIC_DATA gsSysSpecificData;
40 SYS_SPECIFIC_DATA *gpsSysSpecificData;
42 static IMG_UINT32 gui32SGXDeviceID;
43 static SGX_DEVICE_MAP gsSGXDeviceMap;
44 static PVRSRV_DEVICE_NODE *gpsSGXDevNode;
46 #define DEVICE_SGX_INTERRUPT (1 << 0)
49 IMG_UINT32 PVRSRV_BridgeDispatchKM(IMG_UINT32 Ioctl,
54 IMG_UINT32 * pdwBytesTransferred);
56 static PVRSRV_ERROR SysLocateDevices(SYS_DATA * psSysData)
59 PVR_UNREFERENCED_PARAMETER(psSysData);
61 gsSGXDeviceMap.ui32Flags = 0x0;
64 gsSGXDeviceMap.sRegsSysPBase.uiAddr =
65 SYS_OMAP3430_SGX_REGS_SYS_PHYS_BASE;
66 gsSGXDeviceMap.sRegsCpuPBase =
67 SysSysPAddrToCpuPAddr(gsSGXDeviceMap.sRegsSysPBase);
68 gsSGXDeviceMap.ui32RegsSize = SYS_OMAP3430_SGX_REGS_SIZE;
70 gsSGXDeviceMap.ui32IRQ = SYS_OMAP3430_SGX_IRQ;
76 IMG_CHAR *SysCreateVersionString(IMG_CPU_PHYADDR sRegRegion)
78 static IMG_CHAR aszVersionString[100];
80 IMG_UINT32 ui32SGXRevision;
82 IMG_VOID *pvRegsLinAddr;
84 pvRegsLinAddr = OSMapPhysToLin(sRegRegion,
85 SYS_OMAP3430_SGX_REGS_SIZE,
87 PVRSRV_HAP_KERNEL_ONLY, IMG_NULL);
92 ui32SGXRevision = OSReadHWReg((IMG_PVOID) ((IMG_PBYTE) pvRegsLinAddr),
93 EUR_CR_CORE_REVISION);
95 if (SysAcquireData(&psSysData) != PVRSRV_OK) {
99 i32Count = OSSNPrintf(aszVersionString, 100,
100 "SGX revision = %u.%u.%u",
102 int)((ui32SGXRevision &
103 EUR_CR_CORE_REVISION_MAJOR_MASK)
104 >> EUR_CR_CORE_REVISION_MAJOR_SHIFT),
106 int)((ui32SGXRevision &
107 EUR_CR_CORE_REVISION_MINOR_MASK)
108 >> EUR_CR_CORE_REVISION_MINOR_SHIFT),
110 int)((ui32SGXRevision &
111 EUR_CR_CORE_REVISION_MAINTENANCE_MASK)
112 >> EUR_CR_CORE_REVISION_MAINTENANCE_SHIFT)
115 OSUnMapPhysToLin(pvRegsLinAddr,
116 SYS_OMAP3430_SGX_REGS_SIZE,
117 PVRSRV_HAP_UNCACHED | PVRSRV_HAP_KERNEL_ONLY,
120 if (i32Count == -1) {
124 return aszVersionString;
127 PVRSRV_ERROR SysInitialise(IMG_VOID)
131 PVRSRV_DEVICE_NODE *psDeviceNode;
132 IMG_CPU_PHYADDR TimerRegPhysBase;
134 gpsSysData = &gsSysData;
135 OSMemSet(gpsSysData, 0, sizeof(SYS_DATA));
137 gpsSysSpecificData = &gsSysSpecificData;
138 OSMemSet(gpsSysSpecificData, 0, sizeof(SYS_SPECIFIC_DATA));
140 gpsSysData->pvSysSpecificData = gpsSysSpecificData;
142 eError = OSInitEnvData(&gpsSysData->pvEnvSpecificData);
143 if (eError != PVRSRV_OK) {
144 PVR_DPF((PVR_DBG_ERROR,
145 "SysInitialise: Failed to setup env structure"));
146 SysDeinitialise(gpsSysData);
147 gpsSysData = IMG_NULL;
150 SYS_SPECIFIC_DATA_SET(&gsSysSpecificData,
151 SYS_SPECIFIC_DATA_ENABLE_ENVDATA);
153 gpsSysData->ui32NumDevices = SYS_DEVICE_COUNT;
155 for (i = 0; i < SYS_DEVICE_COUNT; i++) {
156 gpsSysData->sDeviceID[i].uiID = i;
157 gpsSysData->sDeviceID[i].bInUse = IMG_FALSE;
160 gpsSysData->psDeviceNodeList = IMG_NULL;
161 gpsSysData->psQueueList = IMG_NULL;
163 eError = SysInitialiseCommon(gpsSysData);
164 if (eError != PVRSRV_OK) {
165 PVR_DPF((PVR_DBG_ERROR,
166 "SysInitialise: Failed in SysInitialiseCommon"));
167 SysDeinitialise(gpsSysData);
168 gpsSysData = IMG_NULL;
172 TimerRegPhysBase.uiAddr =
173 SYS_OMAP3430_GP11TIMER_PHYS_BASE + SYS_OMAP3430_GPTIMER_REGS;
174 gpsSysData->pvSOCTimerRegisterKM = IMG_NULL;
175 gpsSysData->hSOCTimerRegisterOSMemHandle = 0;
176 OSReservePhys(TimerRegPhysBase,
178 PVRSRV_HAP_MULTI_PROCESS | PVRSRV_HAP_UNCACHED,
179 (IMG_VOID **) & gpsSysData->pvSOCTimerRegisterKM,
180 &gpsSysData->hSOCTimerRegisterOSMemHandle);
183 eError = SysLocateDevices(gpsSysData);
184 if (eError != PVRSRV_OK) {
185 PVR_DPF((PVR_DBG_ERROR,
186 "SysInitialise: Failed to locate devices"));
187 SysDeinitialise(gpsSysData);
188 gpsSysData = IMG_NULL;
191 SYS_SPECIFIC_DATA_SET(&gsSysSpecificData,
192 SYS_SPECIFIC_DATA_ENABLE_LOCATEDEV);
194 eError = PVRSRVRegisterDevice(gpsSysData, SGXRegisterDevice,
195 DEVICE_SGX_INTERRUPT, &gui32SGXDeviceID);
196 if (eError != PVRSRV_OK) {
197 PVR_DPF((PVR_DBG_ERROR,
198 "SysInitialise: Failed to register device!"));
199 SysDeinitialise(gpsSysData);
200 gpsSysData = IMG_NULL;
203 SYS_SPECIFIC_DATA_SET(&gsSysSpecificData,
204 SYS_SPECIFIC_DATA_ENABLE_REGDEV);
206 psDeviceNode = gpsSysData->psDeviceNodeList;
207 while (psDeviceNode) {
209 switch (psDeviceNode->sDevId.eDeviceType) {
210 case PVRSRV_DEVICE_TYPE_SGX:
212 DEVICE_MEMORY_INFO *psDevMemoryInfo;
213 DEVICE_MEMORY_HEAP_INFO *psDeviceMemoryHeap;
215 psDeviceNode->psLocalDevMemArena = IMG_NULL;
217 psDevMemoryInfo = &psDeviceNode->sDevMemoryInfo;
219 psDevMemoryInfo->psDeviceMemoryHeap;
221 for (i = 0; i < psDevMemoryInfo->ui32HeapCount;
223 psDeviceMemoryHeap[i].ui32Attribs |=
224 PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG;
227 gpsSGXDevNode = psDeviceNode;
228 gsSysSpecificData.psSGXDevNode = psDeviceNode;
233 PVR_DPF((PVR_DBG_ERROR,
234 "SysInitialise: Failed to find SGX device node!"));
235 return PVRSRV_ERROR_INIT_FAILURE;
238 psDeviceNode = psDeviceNode->psNext;
242 SYS_SPECIFIC_DATA_SET(&gsSysSpecificData,
243 SYS_SPECIFIC_DATA_ENABLE_PDUMPINIT);
245 eError = InitSystemClocks(gpsSysData);
246 if (eError != PVRSRV_OK) {
247 PVR_DPF((PVR_DBG_ERROR,
248 "SysInitialise: Failed to init system clocks (%d)",
250 SysDeinitialise(gpsSysData);
251 gpsSysData = IMG_NULL;
255 eError = EnableSystemClocks(gpsSysData);
256 if (eError != PVRSRV_OK) {
257 PVR_DPF((PVR_DBG_ERROR,
258 "SysInitialise: Failed to Enable system clocks (%d)",
260 SysDeinitialise(gpsSysData);
261 gpsSysData = IMG_NULL;
264 SYS_SPECIFIC_DATA_SET(&gsSysSpecificData,
265 SYS_SPECIFIC_DATA_ENABLE_SYSCLOCKS);
267 eError = OSInitPerf(gpsSysData);
268 if (eError != PVRSRV_OK) {
269 PVR_DPF((PVR_DBG_ERROR,
270 "SysInitialise: Failed to init DVFS (%d)", eError));
271 SysDeinitialise(gpsSysData);
272 gpsSysData = IMG_NULL;
275 eError = EnableSGXClocks(gpsSysData);
276 if (eError != PVRSRV_OK) {
277 PVR_DPF((PVR_DBG_ERROR,
278 "SysInitialise: Failed to Enable SGX clocks (%d)",
280 SysDeinitialise(gpsSysData);
281 gpsSysData = IMG_NULL;
285 eError = PVRSRVInitialiseDevice(gui32SGXDeviceID);
286 if (eError != PVRSRV_OK) {
287 PVR_DPF((PVR_DBG_ERROR,
288 "SysInitialise: Failed to initialise device!"));
289 SysDeinitialise(gpsSysData);
290 gpsSysData = IMG_NULL;
293 SYS_SPECIFIC_DATA_SET(&gsSysSpecificData,
294 SYS_SPECIFIC_DATA_ENABLE_INITDEV);
297 DisableSGXClocks(gpsSysData);
302 PVRSRV_ERROR SysFinalise(IMG_VOID)
304 PVRSRV_ERROR eError = PVRSRV_OK;
306 eError = EnableSGXClocks(gpsSysData);
307 if (eError != PVRSRV_OK) {
308 PVR_DPF((PVR_DBG_ERROR,
309 "SysInitialise: Failed to Enable SGX clocks (%d)",
311 SysDeinitialise(gpsSysData);
312 gpsSysData = IMG_NULL;
317 eError = OSInstallMISR(gpsSysData);
318 if (eError != PVRSRV_OK) {
319 PVR_DPF((PVR_DBG_ERROR, "SysFinalise: Failed to install MISR"));
320 SysDeinitialise(gpsSysData);
321 gpsSysData = IMG_NULL;
324 SYS_SPECIFIC_DATA_SET(&gsSysSpecificData,
325 SYS_SPECIFIC_DATA_ENABLE_MISR);
328 OSInstallDeviceLISR(gpsSysData, gsSGXDeviceMap.ui32IRQ, "SGX ISR",
330 if (eError != PVRSRV_OK) {
331 PVR_DPF((PVR_DBG_ERROR, "SysFinalise: Failed to install ISR"));
332 SysDeinitialise(gpsSysData);
333 gpsSysData = IMG_NULL;
336 SYS_SPECIFIC_DATA_SET(&gsSysSpecificData,
337 SYS_SPECIFIC_DATA_ENABLE_LISR);
339 gpsSysData->pszVersionString =
340 SysCreateVersionString(gsSGXDeviceMap.sRegsCpuPBase);
341 if (!gpsSysData->pszVersionString) {
342 PVR_DPF((PVR_DBG_ERROR,
343 "SysFinalise: Failed to create a system version string"));
345 PVR_DPF((PVR_DBG_WARNING, "SysFinalise: Version string: %s",
346 gpsSysData->pszVersionString));
350 DisableSGXClocks(gpsSysData);
352 gpsSysSpecificData->bSGXInitComplete = IMG_TRUE;
357 PVRSRV_ERROR SysDeinitialise(SYS_DATA * psSysData)
361 PVR_UNREFERENCED_PARAMETER(psSysData);
363 if (SYS_SPECIFIC_DATA_TEST
364 (gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LISR)) {
365 eError = OSUninstallDeviceLISR(psSysData);
366 if (eError != PVRSRV_OK) {
367 PVR_DPF((PVR_DBG_ERROR,
368 "SysDeinitialise: OSUninstallDeviceLISR failed"));
373 if (SYS_SPECIFIC_DATA_TEST
374 (gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_MISR)) {
375 eError = OSUninstallMISR(psSysData);
376 if (eError != PVRSRV_OK) {
377 PVR_DPF((PVR_DBG_ERROR,
378 "SysDeinitialise: OSUninstallMISR failed"));
383 eError = OSCleanupPerf(psSysData);
384 if (eError != PVRSRV_OK) {
385 PVR_DPF((PVR_DBG_ERROR,
386 "SysDeinitialise: OSCleanupDvfs failed"));
390 if (SYS_SPECIFIC_DATA_TEST
391 (gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_INITDEV)) {
392 PVR_ASSERT(SYS_SPECIFIC_DATA_TEST
394 SYS_SPECIFIC_DATA_ENABLE_SYSCLOCKS));
396 eError = EnableSGXClocks(gpsSysData);
397 if (eError != PVRSRV_OK) {
398 PVR_DPF((PVR_DBG_ERROR,
399 "SysDeinitialise: EnableSGXClocks failed"));
403 eError = PVRSRVDeinitialiseDevice(gui32SGXDeviceID);
404 if (eError != PVRSRV_OK) {
405 PVR_DPF((PVR_DBG_ERROR,
406 "SysDeinitialise: failed to de-init the device"));
411 if (SYS_SPECIFIC_DATA_TEST
412 (gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_SYSCLOCKS)) {
413 DisableSystemClocks(gpsSysData);
416 CleanupSystemClocks(gpsSysData);
418 if (SYS_SPECIFIC_DATA_TEST
419 (gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_ENVDATA)) {
420 eError = OSDeInitEnvData(gpsSysData->pvEnvSpecificData);
421 if (eError != PVRSRV_OK) {
422 PVR_DPF((PVR_DBG_ERROR,
423 "SysDeinitialise: failed to de-init env structure"));
428 if (gpsSysData->pvSOCTimerRegisterKM) {
429 OSUnReservePhys(gpsSysData->pvSOCTimerRegisterKM,
431 PVRSRV_HAP_MULTI_PROCESS | PVRSRV_HAP_UNCACHED,
432 gpsSysData->hSOCTimerRegisterOSMemHandle);
435 SysDeinitialiseCommon(gpsSysData);
438 if (SYS_SPECIFIC_DATA_TEST
439 (gpsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_PDUMPINIT)) {
443 gpsSysSpecificData->ui32SysSpecificData = 0;
444 gpsSysSpecificData->bSGXInitComplete = IMG_FALSE;
446 gpsSysData = IMG_NULL;
451 PVRSRV_ERROR SysGetDeviceMemoryMap(PVRSRV_DEVICE_TYPE eDeviceType,
452 IMG_VOID ** ppvDeviceMap)
455 switch (eDeviceType) {
456 case PVRSRV_DEVICE_TYPE_SGX:
459 *ppvDeviceMap = (IMG_VOID *) & gsSGXDeviceMap;
465 PVR_DPF((PVR_DBG_ERROR,
466 "SysGetDeviceMemoryMap: unsupported device type"));
472 IMG_DEV_PHYADDR SysCpuPAddrToDevPAddr(PVRSRV_DEVICE_TYPE eDeviceType,
473 IMG_CPU_PHYADDR CpuPAddr)
475 IMG_DEV_PHYADDR DevPAddr;
477 PVR_UNREFERENCED_PARAMETER(eDeviceType);
479 DevPAddr.uiAddr = CpuPAddr.uiAddr;
484 IMG_CPU_PHYADDR SysSysPAddrToCpuPAddr(IMG_SYS_PHYADDR sys_paddr)
486 IMG_CPU_PHYADDR cpu_paddr;
488 cpu_paddr.uiAddr = sys_paddr.uiAddr;
492 IMG_SYS_PHYADDR SysCpuPAddrToSysPAddr(IMG_CPU_PHYADDR cpu_paddr)
494 IMG_SYS_PHYADDR sys_paddr;
496 sys_paddr.uiAddr = cpu_paddr.uiAddr;
500 IMG_DEV_PHYADDR SysSysPAddrToDevPAddr(PVRSRV_DEVICE_TYPE eDeviceType,
501 IMG_SYS_PHYADDR SysPAddr)
503 IMG_DEV_PHYADDR DevPAddr;
505 PVR_UNREFERENCED_PARAMETER(eDeviceType);
507 DevPAddr.uiAddr = SysPAddr.uiAddr;
512 IMG_SYS_PHYADDR SysDevPAddrToSysPAddr(PVRSRV_DEVICE_TYPE eDeviceType,
513 IMG_DEV_PHYADDR DevPAddr)
515 IMG_SYS_PHYADDR SysPAddr;
517 PVR_UNREFERENCED_PARAMETER(eDeviceType);
519 SysPAddr.uiAddr = DevPAddr.uiAddr;
524 IMG_VOID SysRegisterExternalDevice(PVRSRV_DEVICE_NODE * psDeviceNode)
526 PVR_UNREFERENCED_PARAMETER(psDeviceNode);
529 IMG_VOID SysRemoveExternalDevice(PVRSRV_DEVICE_NODE * psDeviceNode)
531 PVR_UNREFERENCED_PARAMETER(psDeviceNode);
534 IMG_UINT32 SysGetInterruptSource(SYS_DATA * psSysData,
535 PVRSRV_DEVICE_NODE * psDeviceNode)
537 PVR_UNREFERENCED_PARAMETER(psSysData);
539 return psDeviceNode->ui32SOCInterruptBit;
542 IMG_VOID SysClearInterrupts(SYS_DATA * psSysData, IMG_UINT32 ui32ClearBits)
544 PVR_UNREFERENCED_PARAMETER(psSysData);
545 PVR_UNREFERENCED_PARAMETER(ui32ClearBits);
547 /* Flush posted write for the irq status to avoid spurious interrupts */
548 OSReadHWReg(((PVRSRV_SGXDEV_INFO *) gpsSGXDevNode->pvDevice)->
549 pvRegsBaseKM, EUR_CR_EVENT_HOST_CLEAR);
552 PVRSRV_ERROR SysSystemPrePowerState(PVR_POWER_STATE eNewPowerState)
554 PVRSRV_ERROR eError = PVRSRV_OK;
556 if (eNewPowerState == PVRSRV_POWER_STATE_D3) {
557 PVR_TRACE(("SysSystemPrePowerState: Entering state D3"));
559 if (SYS_SPECIFIC_DATA_TEST
560 (&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_LISR)) {
561 eError = OSUninstallDeviceLISR(gpsSysData);
562 if (eError != PVRSRV_OK) {
563 PVR_DPF((PVR_DBG_ERROR,
564 "SysSystemPrePowerState: OSUninstallDeviceLISR failed (%d)",
568 SYS_SPECIFIC_DATA_SET(&gsSysSpecificData,
569 SYS_SPECIFIC_DATA_PM_UNINSTALL_LISR);
570 SYS_SPECIFIC_DATA_CLEAR(&gsSysSpecificData,
571 SYS_SPECIFIC_DATA_ENABLE_LISR);
574 if (SYS_SPECIFIC_DATA_TEST
575 (&gsSysSpecificData, SYS_SPECIFIC_DATA_ENABLE_SYSCLOCKS)) {
576 DisableSystemClocks(gpsSysData);
578 SYS_SPECIFIC_DATA_SET(&gsSysSpecificData,
579 SYS_SPECIFIC_DATA_PM_DISABLE_SYSCLOCKS);
580 SYS_SPECIFIC_DATA_CLEAR(&gsSysSpecificData,
581 SYS_SPECIFIC_DATA_ENABLE_SYSCLOCKS);
588 PVRSRV_ERROR SysSystemPostPowerState(PVR_POWER_STATE eNewPowerState)
590 PVRSRV_ERROR eError = PVRSRV_OK;
592 if (eNewPowerState == PVRSRV_POWER_STATE_D0) {
593 PVR_TRACE(("SysSystemPostPowerState: Entering state D0"));
595 if (SYS_SPECIFIC_DATA_TEST
597 SYS_SPECIFIC_DATA_PM_DISABLE_SYSCLOCKS)) {
598 eError = EnableSystemClocks(gpsSysData);
599 if (eError != PVRSRV_OK) {
600 PVR_DPF((PVR_DBG_ERROR,
601 "SysSystemPostPowerState: EnableSystemClocks failed (%d)",
605 SYS_SPECIFIC_DATA_SET(&gsSysSpecificData,
606 SYS_SPECIFIC_DATA_ENABLE_SYSCLOCKS);
607 SYS_SPECIFIC_DATA_CLEAR(&gsSysSpecificData,
608 SYS_SPECIFIC_DATA_PM_DISABLE_SYSCLOCKS);
610 if (SYS_SPECIFIC_DATA_TEST
611 (&gsSysSpecificData, SYS_SPECIFIC_DATA_PM_UNINSTALL_LISR)) {
613 OSInstallDeviceLISR(gpsSysData,
614 gsSGXDeviceMap.ui32IRQ,
615 "SGX ISR", gpsSGXDevNode);
616 if (eError != PVRSRV_OK) {
617 PVR_DPF((PVR_DBG_ERROR,
618 "SysSystemPostPowerState: OSInstallDeviceLISR failed to install ISR (%d)",
622 SYS_SPECIFIC_DATA_SET(&gsSysSpecificData,
623 SYS_SPECIFIC_DATA_ENABLE_LISR);
624 SYS_SPECIFIC_DATA_CLEAR(&gsSysSpecificData,
625 SYS_SPECIFIC_DATA_PM_UNINSTALL_LISR);
631 PVRSRV_ERROR SysDevicePrePowerState(IMG_UINT32 ui32DeviceIndex,
632 PVR_POWER_STATE eNewPowerState,
633 PVR_POWER_STATE eCurrentPowerState)
635 PVR_UNREFERENCED_PARAMETER(eCurrentPowerState);
637 if (ui32DeviceIndex != gui32SGXDeviceID) {
640 if (eNewPowerState == PVRSRV_POWER_STATE_D3) {
641 PVR_TRACE(("SysDevicePrePowerState: SGX Entering state D3"));
642 DisableSGXClocks(gpsSysData);
647 PVRSRV_ERROR SysDevicePostPowerState(IMG_UINT32 ui32DeviceIndex,
648 PVR_POWER_STATE eNewPowerState,
649 PVR_POWER_STATE eCurrentPowerState)
651 PVRSRV_ERROR eError = PVRSRV_OK;
653 PVR_UNREFERENCED_PARAMETER(eNewPowerState);
655 if (ui32DeviceIndex != gui32SGXDeviceID) {
658 if (eCurrentPowerState == PVRSRV_POWER_STATE_D3) {
659 PVR_TRACE(("SysDevicePostPowerState: SGX Leaving state D3"));
660 eError = EnableSGXClocks(gpsSysData);
666 PVRSRV_ERROR SysOEMFunction(IMG_UINT32 ui32ID,
669 IMG_VOID * pvOut, IMG_UINT32 ulOutSize)
671 PVR_UNREFERENCED_PARAMETER(ui32ID);
672 PVR_UNREFERENCED_PARAMETER(pvIn);
673 PVR_UNREFERENCED_PARAMETER(ulInSize);
674 PVR_UNREFERENCED_PARAMETER(pvOut);
675 PVR_UNREFERENCED_PARAMETER(ulOutSize);
677 if ((ui32ID == OEM_GET_EXT_FUNCS) &&
678 (ulOutSize == sizeof(PVRSRV_DC_OEM_JTABLE))) {
680 PVRSRV_DC_OEM_JTABLE *psOEMJTable =
681 (PVRSRV_DC_OEM_JTABLE *) pvOut;
682 psOEMJTable->pfnOEMBridgeDispatch = &PVRSRV_BridgeDispatchKM;
686 return PVRSRV_ERROR_INVALID_PARAMS;