gpu: pvr: get rid of unnecessary hash lookups for the proc object
[sgx.git] / pvr / osperproc.c
1 /**********************************************************************
2  *
3  * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved.
4  *
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.
8  *
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.
13  *
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.
17  *
18  * The full GNU General Public License is included in this distribution in
19  * the file called "COPYING".
20  *
21  * Contact Information:
22  * Imagination Technologies Ltd. <gpl-support@imgtec.com>
23  * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK
24  *
25  ******************************************************************************/
26
27 #include "services_headers.h"
28 #include "osperproc.h"
29
30 #include "env_perproc.h"
31 #include "proc.h"
32
33 enum PVRSRV_ERROR OSPerProcessPrivateDataInit(void **phOsPrivateData)
34 {
35         enum PVRSRV_ERROR eError;
36         void *hBlockAlloc;
37         struct PVRSRV_ENV_PER_PROCESS_DATA *psEnvPerProc;
38
39         eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP,
40                             sizeof(struct PVRSRV_ENV_PER_PROCESS_DATA),
41                             phOsPrivateData, &hBlockAlloc);
42
43         if (eError != PVRSRV_OK) {
44                 *phOsPrivateData = NULL;
45
46                 PVR_DPF(PVR_DBG_ERROR, "%s: OSAllocMem failed (%d)", __func__,
47                          eError);
48                 return eError;
49         }
50
51         psEnvPerProc = (struct PVRSRV_ENV_PER_PROCESS_DATA *)*phOsPrivateData;
52         OSMemSet(psEnvPerProc, 0, sizeof(*psEnvPerProc));
53
54         psEnvPerProc->hBlockAlloc = hBlockAlloc;
55
56         LinuxMMapPerProcessConnect(psEnvPerProc);
57
58         return PVRSRV_OK;
59 }
60
61 enum PVRSRV_ERROR OSPerProcessPrivateDataDeInit(void *hOsPrivateData)
62 {
63         struct PVRSRV_ENV_PER_PROCESS_DATA *psEnvPerProc;
64
65         if (hOsPrivateData == NULL)
66                 return PVRSRV_OK;
67
68         psEnvPerProc = (struct PVRSRV_ENV_PER_PROCESS_DATA *)hOsPrivateData;
69
70         LinuxMMapPerProcessDisconnect(psEnvPerProc);
71
72         RemovePerProcessProcDir(psEnvPerProc);
73
74         OSFreeMem(PVRSRV_OS_NON_PAGEABLE_HEAP,
75                            sizeof(struct PVRSRV_ENV_PER_PROCESS_DATA),
76                            hOsPrivateData, psEnvPerProc->hBlockAlloc);
77         return PVRSRV_OK;
78 }
79
80 enum PVRSRV_ERROR OSPerProcessSetHandleOptions(struct PVRSRV_HANDLE_BASE
81                                                *psHandleBase)
82 {
83         return LinuxMMapPerProcessHandleOptions(psHandleBase);
84 }