1 /* 2 * The PCI Library -- Parameters 3 * 4 * Copyright (c) 2008 Martin Mares <[email protected]> 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 } 88 89