74 DBGCP ( intf,
"XENSTORE raw request:\n" );
109 const char *
string ) {
131 DBGCP ( intf,
"XENSTORE raw response:\n" );
185 DBGC2 ( xen,
"XENSTORE request ID %d type %d ", req_id,
type );
189 while ( (
string =
va_arg (
tmp,
const char * ) ) !=
NULL ) {
190 DBGC2 ( xen,
"%s%s", (
msg.len ?
"/" :
"" ),
string );
205 while ( (
string =
va_arg (
key,
const char * ) ) !=
NULL ) {
215 if ( ( xenrc = xenevent_send ( xen, &event ) ) != 0 ) {
217 DBGC ( xen,
"XENSTORE could not notify back end: %s\n",
246 while ( ! xenevent_pending ( xen, xen->
store.
port ) )
264 DBGC ( xen,
"XENSTORE response ID mismatch (got %d, expected " 272 DBGC ( xen,
"XENSTORE could not allocate %d bytes for " 273 "response\n",
msg.len );
280 DBGC ( xen,
"XENSTORE response error \"%s\"\n", *
value );
285 DBGC2 ( xen,
"XENSTORE response ID %d\n",
req_id );
288 string += (
strlen (
string ) + 1 ) ) {
289 DBGC2 ( xen,
" - \"%s\"\n",
string );
316 char *response_value;
327 &response_len ) ) != 0 )
332 *response = response_value;
334 free ( response_value );
405 if ( ( *
value ==
'\0' ) || ( *endp !=
'\0' ) ) {
406 DBGC ( xen,
"XENSTORE found invalid numeric value \"%s\"\n",
538 child += (
strlen ( child ) + 1 ) ) {
541 if (
asprintf ( &child_key,
"%s/%s",
key, child ) < 0 ){
542 DBGC ( xen,
"XENSTORE could not allocate child " 543 "key \"%s/%s\"\n",
key, child );
#define EINVAL
Invalid argument.
struct arbelprm_rc_send_wqe rc
uint8_t readb(volatile uint8_t *io_addr)
Read byte from memory-mapped device.
void msg(unsigned int row, const char *fmt,...)
Print message centred on specified row.
uint32_t XENSTORE_RING_IDX
unsigned long strtoul(const char *string, char **endp, int base)
Convert string to numeric value.
static int xenstore_response(struct xen_hypervisor *xen, uint32_t req_id, char **value, size_t *len)
Receive XenStore response.
static void xenstore_recv(struct xen_hypervisor *xen, void *data, size_t len)
Receive XenStore response raw data.
char req[XENSTORE_RING_SIZE]
uint32_t type
Operating system type.
uint32_t readl(volatile uint32_t *io_addr)
Read 32-bit dword from memory-mapped device.
XENSTORE_RING_IDX rsp_cons
static void xenstore_send(struct xen_hypervisor *xen, const void *data, size_t len)
Send XenStore request raw data.
static int xenstore_vread(struct xen_hypervisor *xen, char **value, va_list key)
Read XenStore value.
#define va_copy(dest, src)
int xenstore_read(struct xen_hypervisor *xen, char **value,...)
Read XenStore value.
int xenstore_write_num(struct xen_hypervisor *xen, unsigned long num,...)
Write XenStore numeric value.
int xenstore_write(struct xen_hypervisor *xen, const char *value,...)
Write XenStore value.
void writeb(uint8_t data, volatile uint8_t *io_addr)
Write byte to memory-mapped device.
#define EXEN(xenrc)
Convert a Xen status code to an iPXE status code.
Dynamic memory allocation.
static int xenstore_request(struct xen_hypervisor *xen, enum xsd_sockmsg_type type, uint32_t req_id, const char *value, va_list key)
Send XenStore request.
#define ENOMEM
Not enough space.
char unsigned long const char unsigned long char ** children
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
pseudo_bit_t value[0x00020]
void writel(uint32_t data, volatile uint32_t *io_addr)
Write 32-bit dword to memory-mapped device.
#define EPROTO
Protocol error.
char * strerror(int errno)
Retrieve string representation of error number.
static void(* free)(struct refcnt *refcnt))
void * zalloc(size_t size)
Allocate cleared memory.
uint16_t cons
Consumer index.
int xenstore_directory(struct xen_hypervisor *xen, char **children, size_t *len,...)
Read XenStore directory.
int asprintf(char **strp, const char *fmt,...)
Write a formatted string to newly allocated memory.
int xenstore_read_num(struct xen_hypervisor *xen, unsigned long *num,...)
Read XenStore numeric value.
evtchn_port_t port
Event channel.
size_t strlen(const char *src)
Get length of string.
XENSTORE_RING_IDX rsp_prod
void xenstore_dump(struct xen_hypervisor *xen, const char *key)
Dump XenStore directory contents (for debugging)
XENSTORE_RING_IDX req_prod
static int xenstore_message(struct xen_hypervisor *xen, enum xsd_sockmsg_type type, char **response, size_t *len, const char *request, va_list key)
Issue a XenStore message.
struct xenstore_domain_interface * intf
XenStore domain interface.
static int xenstore_vwrite(struct xen_hypervisor *xen, const char *value, va_list key)
Write XenStore value.
void cpu_nap(void)
Sleep with interrupts enabled until next CPU interrupt.
__builtin_va_list va_list
#define EIO
Input/output error.
XENSTORE_RING_IDX req_cons
u8 request[0]
List of IEs requested.
uint8_t data[48]
Additional event data.
struct xen_store store
XenStore.
static void xenstore_send_string(struct xen_hypervisor *xen, const char *string)
Send XenStore request string (excluding terminating NUL)
int snprintf(char *buf, size_t size, const char *fmt,...)
Write a formatted string to a buffer.
uint16_t offset
Offset to command line.
char rsp[XENSTORE_RING_SIZE]
#define va_start(ap, last)
#define MASK_XENSTORE_IDX(idx)
#define XENSTORE_RING_SIZE
int xenstore_rm(struct xen_hypervisor *xen,...)
Delete XenStore value.
#define NULL
NULL pointer (VOID *)
static uint32_t xenstore_req_id
Request identifier.