Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / include / ipxe / params.h
1 #ifndef _IPXE_PARAMS_H
2 #define _IPXE_PARAMS_H
3
4 /** @file
5  *
6  * Form parameters
7  *
8  */
9
10 FILE_LICENCE ( GPL2_OR_LATER );
11
12 #include <ipxe/list.h>
13 #include <ipxe/refcnt.h>
14
15 /** A form parameter list */
16 struct parameters {
17         /** Reference count */
18         struct refcnt refcnt;
19         /** List of all parameter lists */
20         struct list_head list;
21         /** Name */
22         const char *name;
23         /** Parameters */
24         struct list_head entries;
25 };
26
27 /** A form parameter */
28 struct parameter {
29         /** List of form parameters */
30         struct list_head list;
31         /** Key */
32         const char *key;
33         /** Value */
34         const char *value;
35 };
36
37 /**
38  * Increment form parameter list reference count
39  *
40  * @v params            Parameter list, or NULL
41  * @ret params          Parameter list as passed in
42  */
43 static inline __attribute__ (( always_inline )) struct parameters *
44 params_get ( struct parameters *params ) {
45         ref_get ( &params->refcnt );
46         return params;
47 }
48
49 /**
50  * Decrement form parameter list reference count
51  *
52  * @v params            Parameter list, or NULL
53  */
54 static inline __attribute__ (( always_inline )) void
55 params_put ( struct parameters *params ) {
56         ref_put ( &params->refcnt );
57 }
58
59 /**
60  * Claim ownership of form parameter list
61  *
62  * @v params            Parameter list
63  * @ret params          Parameter list
64  */
65 static inline __attribute__ (( always_inline )) struct parameters *
66 claim_parameters ( struct parameters *params ) {
67
68         /* Remove from list of parameter lists */
69         list_del ( &params->list );
70
71         return params;
72 }
73
74 /** Iterate over all form parameters in a list */
75 #define for_each_param( param, params )                         \
76         list_for_each_entry ( (param), &(params)->entries, list )
77
78 extern struct parameters * find_parameters ( const char *name );
79 extern struct parameters * create_parameters ( const char *name );
80 extern struct parameter * add_parameter ( struct parameters *params,
81                                           const char *key, const char *value );
82
83 #endif /* _IPXE_PARAMS_H */