]>
Commit | Line | Data |
---|---|---|
d6dcc545 MM |
1 | /* |
2 | * The PCI Library -- Parameters | |
3 | * | |
4 | * Copyright (c) 2008 Martin Mares <mj@ucw.cz> | |
5 | * | |
6 | * Can be freely distributed and used under the terms of the GNU GPL. | |
7 | */ | |
8 | ||
9 | #include <stdio.h> | |
10 | #include <stdlib.h> | |
11 | #include <string.h> | |
12 | ||
13 | #include "internal.h" | |
14 | ||
15 | char * | |
16 | pci_get_param(struct pci_access *acc, char *param) | |
17 | { | |
18 | struct pci_param *p; | |
19 | ||
20 | for (p=acc->params; p; p=p->next) | |
21 | if (!strcmp(p->param, param)) | |
22 | return p->value; | |
23 | return NULL; | |
24 | } | |
25 | ||
26 | void | |
27 | pci_define_param(struct pci_access *acc, char *param, char *value, char *help) | |
28 | { | |
29 | struct pci_param *p = pci_malloc(acc, sizeof(*p)); | |
30 | ||
31 | p->next = acc->params; | |
32 | acc->params = p; | |
33 | p->param = param; | |
34 | p->value = value; | |
35 | p->value_malloced = 0; | |
36 | p->help = help; | |
37 | } | |
38 | ||
39 | int | |
40 | pci_set_param_internal(struct pci_access *acc, char *param, char *value, int copy) | |
41 | { | |
42 | struct pci_param *p; | |
43 | ||
44 | for (p=acc->params; p; p=p->next) | |
45 | if (!strcmp(p->param, param)) | |
46 | { | |
47 | if (p->value_malloced) | |
48 | pci_mfree(p->value); | |
49 | p->value_malloced = copy; | |
50 | if (copy) | |
51 | p->value = pci_strdup(acc, value); | |
52 | else | |
53 | p->value = value; | |
54 | return 0; | |
55 | } | |
56 | return -1; | |
57 | } | |
58 | ||
59 | int | |
60 | pci_set_param(struct pci_access *acc, char *param, char *value) | |
61 | { | |
62 | return pci_set_param_internal(acc, param, value, 1); | |
63 | } | |
64 | ||
65 | void | |
66 | pci_free_params(struct pci_access *acc) | |
67 | { | |
68 | struct pci_param *p; | |
69 | ||
70 | while (p = acc->params) | |
71 | { | |
72 | acc->params = p->next; | |
73 | if (p->value_malloced) | |
74 | pci_mfree(p->value); | |
75 | pci_mfree(p); | |
76 | } | |
77 | } | |
78 | ||
79 | struct pci_param * | |
80 | pci_walk_params(struct pci_access *acc, struct pci_param *prev) | |
81 | { | |
82 | /* So far, the params form a simple linked list, but this can change in the future */ | |
83 | if (!prev) | |
84 | return acc->params; | |
85 | else | |
86 | return prev->next; | |
87 | } |