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_OR_UBDL ); 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 * params_get(struct parameters * params)44params_get ( struct parameters *params ) { 45 ref_get ( ¶ms->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 params_put(struct parameters * params)55params_put ( struct parameters *params ) { 56 ref_put ( ¶ms->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 * claim_parameters(struct parameters * params)66claim_parameters ( struct parameters *params ) { 67 68 /* Remove from list of parameter lists */ 69 list_del ( ¶ms->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 */ 84