First version
[3rdparty/ote_partner/tlk.git] / lib / ptable / ptable.c
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *  * Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  *  * Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in
12  *    the documentation and/or other materials provided with the 
13  *    distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
23  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  */
28
29 #include <list.h>
30 #include <stdlib.h>
31 #include <string.h>
32 #include <assert.h>
33 #include <lib/ptable.h>
34
35 void ptable_init(struct ptable *ptable)
36 {
37         ASSERT(ptable);
38
39         memset(ptable, 0, sizeof(struct ptable));
40 }
41
42 void ptable_add(struct ptable *ptable, char *name, unsigned start,
43                 unsigned length, unsigned flags)
44 {
45         struct ptentry *ptn;
46
47         ASSERT(ptable && ptable->count < MAX_PTABLE_PARTS);
48
49         ptn = &ptable->parts[ptable->count++];
50         strncpy(ptn->name, name, MAX_PTENTRY_NAME);
51         ptn->start = start;
52         ptn->length = length;
53         ptn->flags = flags;
54 }
55
56 void ptable_dump(struct ptable *ptable)
57 {
58         struct ptentry *ptn;
59         int i;
60
61         for (i = 0; i < ptable->count; ++i) {
62                 ptn = &ptable->parts[i];
63                 dprintf(INFO, "ptn %d name='%s' start=%08x len=%08x "
64                         "flags=%08x\n", i, ptn->name, ptn->start, ptn->length,
65                         ptn->flags);
66         }
67 }
68
69 struct ptentry *ptable_find(struct ptable *ptable, const char *name)
70 {
71         struct ptentry *ptn;
72         int i;
73
74         for (i = 0; i < ptable->count; ++i) {
75                 ptn = &ptable->parts[i];
76                 if (!strcmp(ptn->name, name))
77                         return ptn;
78         }
79
80         return NULL;
81 }
82
83 struct ptentry *ptable_get(struct ptable *ptable, int n)
84 {
85         if (n >= ptable->count)
86                 return NULL;
87         return &ptable->parts[n];
88 }
89
90 int ptable_size(struct ptable *ptable)
91 {
92     return ptable->count;
93 }