IBNOS
handle.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014, Michael Müller
3  * Copyright (c) 2014, Sebastian Lackner
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright notice, this
10  * list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright notice,
12  * this list of conditions and the following disclaimer in the documentation
13  * and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
19  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  *
26  */
27 
28 #ifndef _H_HANDLE_
29 #define _H_HANDLE_
30 
31 #ifdef __KERNEL__
32 
33  #include <stdint.h>
34  #include <stdbool.h>
35 
36  #include <process/object.h>
37 
42  #define MIN_HANDLES 0x100
43  #define MAX_HANDLES 0x10000
44 
45  struct handleTable
46  {
47  uint32_t count;
48  uint32_t free_begin;
49  uint32_t free_end;
50  struct object **handles;
51  };
52 
53  void handleTableInit(struct handleTable *table);
54  void handleForkTable(struct handleTable *destination, struct handleTable *source);
55  void handleTableFree(struct handleTable *table);
56 
57  uint32_t handleAllocate(struct handleTable *table, struct object *object);
58  bool handleSet(struct handleTable *table, uint32_t handle, struct object *object);
59  struct object *handleGet(struct handleTable *table, uint32_t handle);
60  bool handleRelease(struct handleTable *table, uint32_t handle);
61 
62  uint32_t handleCount(struct handleTable *table);
63 
67 #endif
68 
69 #endif /* _H_HANDLE_ */
bool handleSet(struct handleTable *table, uint32_t handle, struct object *object)
Associates a handle (index) with a kernel object.
Definition: handle.c:168
struct object * handleGet(struct handleTable *table, uint32_t handle)
Returns the kernel object associated to a handle.
Definition: handle.c:213
void handleTableInit(struct handleTable *table)
Initializes the handle table structure which is part of each process.
Definition: handle.c:48
void handleForkTable(struct handleTable *destination, struct handleTable *source)
Forks a handle table.
Definition: handle.c:68
uint32_t handleCount(struct handleTable *table)
Returns the number of handles in a handletable.
Definition: handle.c:268
Definition: object.h:69
uint32_t free_end
Definition: handle.h:49
void handleTableFree(struct handleTable *table)
Releases the memory of the handle table and all associated objects.
Definition: handle.c:94
uint32_t free_begin
Definition: handle.h:48
struct object ** handles
Definition: handle.h:50
bool handleRelease(struct handleTable *table, uint32_t handle)
Releases the object associated with a handle.
Definition: handle.c:227
uint32_t handleAllocate(struct handleTable *table, struct object *object)
Allocates a handle (index) for a specific kernel object.
Definition: handle.c:117
uint32_t count
Definition: handle.h:47