iPXE
params.h
Go to the documentation of this file.
1#ifndef _IPXE_PARAMS_H
2#define _IPXE_PARAMS_H
3
4/** @file
5 *
6 * Request parameters
7 *
8 */
9
10FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11FILE_SECBOOT ( PERMITTED );
12
13#include <ipxe/list.h>
14#include <ipxe/refcnt.h>
15
16/** A request parameter list */
17struct parameters {
18 /** Reference count */
19 struct refcnt refcnt;
20 /** List of all parameter lists */
22 /** Name */
23 const char *name;
24 /** Parameters */
26};
27
28/** A request parameter */
29struct parameter {
30 /** List of request parameters */
32 /** Key */
33 const char *key;
34 /** Value */
35 const char *value;
36 /** Flags */
37 unsigned int flags;
38};
39
40/** Request parameter is a form parameter */
41#define PARAMETER_FORM 0x0001
42
43/** Request parameter is a header parameter */
44#define PARAMETER_HEADER 0x0002
45
46/**
47 * Increment request parameter list reference count
48 *
49 * @v params Parameter list, or NULL
50 * @ret params Parameter list as passed in
51 */
52static inline __attribute__ (( always_inline )) struct parameters *
53params_get ( struct parameters *params ) {
54 ref_get ( &params->refcnt );
55 return params;
56}
57
58/**
59 * Decrement request parameter list reference count
60 *
61 * @v params Parameter list, or NULL
62 */
63static inline __attribute__ (( always_inline )) void
64params_put ( struct parameters *params ) {
65 ref_put ( &params->refcnt );
66}
67
68/**
69 * Claim ownership of request parameter list
70 *
71 * @v params Parameter list
72 * @ret params Parameter list
73 */
74static inline __attribute__ (( always_inline )) struct parameters *
75claim_parameters ( struct parameters *params ) {
76
77 /* Remove from list of parameter lists */
78 list_del ( &params->list );
79
80 return params;
81}
82
83/** Iterate over all request parameters in a list */
84#define for_each_param( param, params ) \
85 list_for_each_entry ( (param), &(params)->entries, list )
86
87extern struct parameters * find_parameters ( const char *name );
88extern struct parameters * create_parameters ( const char *name );
89extern struct parameter * add_parameter ( struct parameters *params,
90 const char *key, const char *value,
91 unsigned int flags );
92
93#endif /* _IPXE_PARAMS_H */
union @162305117151260234136356364136041353210355154177 key
Sense key.
Definition scsi.h:3
pseudo_bit_t value[0x00020]
Definition arbel.h:2
const char * name
Definition ath9k_hw.c:1986
uint8_t flags
Flags.
Definition ena.h:7
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:896
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
Definition compiler.h:926
#define __attribute__(x)
Definition compiler.h:10
struct parameters * create_parameters(const char *name)
Create request parameter list.
Definition params.c:87
struct parameter * add_parameter(struct parameters *params, const char *key, const char *value, unsigned int flags)
Add request parameter.
Definition params.c:130
struct parameters * find_parameters(const char *name)
Find request parameter list by name.
Definition params.c:69
Linked lists.
#define list_del(list)
Delete an entry from a list.
Definition list.h:120
Reference counting.
#define ref_get(refcnt)
Get additional reference to object.
Definition refcnt.h:93
#define ref_put(refcnt)
Drop reference to object.
Definition refcnt.h:107
A doubly-linked list entry (or list head)
Definition list.h:19
A request parameter.
Definition params.h:29
const char * key
Key.
Definition params.h:33
unsigned int flags
Flags.
Definition params.h:37
const char * value
Value.
Definition params.h:35
struct list_head list
List of request parameters.
Definition params.h:31
A request parameter list.
Definition params.h:17
struct list_head list
List of all parameter lists.
Definition params.h:21
const char * name
Name.
Definition params.h:23
struct list_head entries
Parameters.
Definition params.h:25
struct refcnt refcnt
Reference count.
Definition params.h:19