__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Interface based on include/net/netlink.h
 */
#ifndef _ASM_POWERPC_GUEST_STATE_BUFFER_H
#define _ASM_POWERPC_GUEST_STATE_BUFFER_H

#include "asm/hvcall.h"
#include <linux/gfp.h>
#include <linux/bitmap.h>
#include <asm/plpar_wrappers.h>

/**************************************************************************
 * Guest State Buffer Constants
 **************************************************************************/
/* Element without a value and any length */
#define KVMPPC_GSID_BLANK			0x0000
/* Size required for the L0's internal VCPU representation */
#define KVMPPC_GSID_HOST_STATE_SIZE		0x0001
 /* Minimum size for the H_GUEST_RUN_VCPU output buffer */
#define KVMPPC_GSID_RUN_OUTPUT_MIN_SIZE		0x0002
 /* "Logical" PVR value as defined in the PAPR */
#define KVMPPC_GSID_LOGICAL_PVR			0x0003
 /* L0 relative timebase offset */
#define KVMPPC_GSID_TB_OFFSET			0x0004
 /* Partition Scoped Page Table Info */
#define KVMPPC_GSID_PARTITION_TABLE		0x0005
 /* Process Table Info */
#define KVMPPC_GSID_PROCESS_TABLE		0x0006

/* H_GUEST_RUN_VCPU input buffer Info */
#define KVMPPC_GSID_RUN_INPUT			0x0C00
/* H_GUEST_RUN_VCPU output buffer Info */
#define KVMPPC_GSID_RUN_OUTPUT			0x0C01
#define KVMPPC_GSID_VPA				0x0C02

#define KVMPPC_GSID_GPR(x)			(0x1000 + (x))
#define KVMPPC_GSID_HDEC_EXPIRY_TB		0x1020
#define KVMPPC_GSID_NIA				0x1021
#define KVMPPC_GSID_MSR				0x1022
#define KVMPPC_GSID_LR				0x1023
#define KVMPPC_GSID_XER				0x1024
#define KVMPPC_GSID_CTR				0x1025
#define KVMPPC_GSID_CFAR			0x1026
#define KVMPPC_GSID_SRR0			0x1027
#define KVMPPC_GSID_SRR1			0x1028
#define KVMPPC_GSID_DAR				0x1029
#define KVMPPC_GSID_DEC_EXPIRY_TB		0x102A
#define KVMPPC_GSID_VTB				0x102B
#define KVMPPC_GSID_LPCR			0x102C
#define KVMPPC_GSID_HFSCR			0x102D
#define KVMPPC_GSID_FSCR			0x102E
#define KVMPPC_GSID_FPSCR			0x102F
#define KVMPPC_GSID_DAWR0			0x1030
#define KVMPPC_GSID_DAWR1			0x1031
#define KVMPPC_GSID_CIABR			0x1032
#define KVMPPC_GSID_PURR			0x1033
#define KVMPPC_GSID_SPURR			0x1034
#define KVMPPC_GSID_IC				0x1035
#define KVMPPC_GSID_SPRG0			0x1036
#define KVMPPC_GSID_SPRG1			0x1037
#define KVMPPC_GSID_SPRG2			0x1038
#define KVMPPC_GSID_SPRG3			0x1039
#define KVMPPC_GSID_PPR				0x103A
#define KVMPPC_GSID_MMCR(x)			(0x103B + (x))
#define KVMPPC_GSID_MMCRA			0x103F
#define KVMPPC_GSID_SIER(x)			(0x1040 + (x))
#define KVMPPC_GSID_BESCR			0x1043
#define KVMPPC_GSID_EBBHR			0x1044
#define KVMPPC_GSID_EBBRR			0x1045
#define KVMPPC_GSID_AMR				0x1046
#define KVMPPC_GSID_IAMR			0x1047
#define KVMPPC_GSID_AMOR			0x1048
#define KVMPPC_GSID_UAMOR			0x1049
#define KVMPPC_GSID_SDAR			0x104A
#define KVMPPC_GSID_SIAR			0x104B
#define KVMPPC_GSID_DSCR			0x104C
#define KVMPPC_GSID_TAR				0x104D
#define KVMPPC_GSID_DEXCR			0x104E
#define KVMPPC_GSID_HDEXCR			0x104F
#define KVMPPC_GSID_HASHKEYR			0x1050
#define KVMPPC_GSID_HASHPKEYR			0x1051
#define KVMPPC_GSID_CTRL			0x1052
#define KVMPPC_GSID_DPDES			0x1053

#define KVMPPC_GSID_CR				0x2000
#define KVMPPC_GSID_PIDR			0x2001
#define KVMPPC_GSID_DSISR			0x2002
#define KVMPPC_GSID_VSCR			0x2003
#define KVMPPC_GSID_VRSAVE			0x2004
#define KVMPPC_GSID_DAWRX0			0x2005
#define KVMPPC_GSID_DAWRX1			0x2006
#define KVMPPC_GSID_PMC(x)			(0x2007 + (x))
#define KVMPPC_GSID_WORT			0x200D
#define KVMPPC_GSID_PSPB			0x200E

#define KVMPPC_GSID_VSRS(x)			(0x3000 + (x))

#define KVMPPC_GSID_HDAR			0xF000
#define KVMPPC_GSID_HDSISR			0xF001
#define KVMPPC_GSID_HEIR			0xF002
#define KVMPPC_GSID_ASDR			0xF003

#define KVMPPC_GSE_GUESTWIDE_START KVMPPC_GSID_BLANK
#define KVMPPC_GSE_GUESTWIDE_END KVMPPC_GSID_PROCESS_TABLE
#define KVMPPC_GSE_GUESTWIDE_COUNT \
	(KVMPPC_GSE_GUESTWIDE_END - KVMPPC_GSE_GUESTWIDE_START + 1)

#define KVMPPC_GSE_META_START KVMPPC_GSID_RUN_INPUT
#define KVMPPC_GSE_META_END KVMPPC_GSID_VPA
#define KVMPPC_GSE_META_COUNT (KVMPPC_GSE_META_END - KVMPPC_GSE_META_START + 1)

#define KVMPPC_GSE_DW_REGS_START KVMPPC_GSID_GPR(0)
#define KVMPPC_GSE_DW_REGS_END KVMPPC_GSID_DPDES
#define KVMPPC_GSE_DW_REGS_COUNT \
	(KVMPPC_GSE_DW_REGS_END - KVMPPC_GSE_DW_REGS_START + 1)

#define KVMPPC_GSE_W_REGS_START KVMPPC_GSID_CR
#define KVMPPC_GSE_W_REGS_END KVMPPC_GSID_PSPB
#define KVMPPC_GSE_W_REGS_COUNT \
	(KVMPPC_GSE_W_REGS_END - KVMPPC_GSE_W_REGS_START + 1)

#define KVMPPC_GSE_VSRS_START KVMPPC_GSID_VSRS(0)
#define KVMPPC_GSE_VSRS_END KVMPPC_GSID_VSRS(63)
#define KVMPPC_GSE_VSRS_COUNT (KVMPPC_GSE_VSRS_END - KVMPPC_GSE_VSRS_START + 1)

#define KVMPPC_GSE_INTR_REGS_START KVMPPC_GSID_HDAR
#define KVMPPC_GSE_INTR_REGS_END KVMPPC_GSID_ASDR
#define KVMPPC_GSE_INTR_REGS_COUNT \
	(KVMPPC_GSE_INTR_REGS_END - KVMPPC_GSE_INTR_REGS_START + 1)

#define KVMPPC_GSE_IDEN_COUNT                                 \
	(KVMPPC_GSE_GUESTWIDE_COUNT + KVMPPC_GSE_META_COUNT + \
	 KVMPPC_GSE_DW_REGS_COUNT + KVMPPC_GSE_W_REGS_COUNT + \
	 KVMPPC_GSE_VSRS_COUNT + KVMPPC_GSE_INTR_REGS_COUNT)

/**
 * Ranges of guest state buffer elements
 */
enum {
	KVMPPC_GS_CLASS_GUESTWIDE = 0x01,
	KVMPPC_GS_CLASS_META = 0x02,
	KVMPPC_GS_CLASS_DWORD_REG = 0x04,
	KVMPPC_GS_CLASS_WORD_REG = 0x08,
	KVMPPC_GS_CLASS_VECTOR = 0x10,
	KVMPPC_GS_CLASS_INTR = 0x20,
};

/**
 * Types of guest state buffer elements
 */
enum {
	KVMPPC_GSE_BE32,
	KVMPPC_GSE_BE64,
	KVMPPC_GSE_VEC128,
	KVMPPC_GSE_PARTITION_TABLE,
	KVMPPC_GSE_PROCESS_TABLE,
	KVMPPC_GSE_BUFFER,
	__KVMPPC_GSE_TYPE_MAX,
};

/**
 * Flags for guest state elements
 */
enum {
	KVMPPC_GS_FLAGS_WIDE = 0x01,
};

/**
 * struct kvmppc_gs_part_table - deserialized partition table information
 * element
 * @address: start of the partition table
 * @ea_bits: number of bits in the effective address
 * @gpd_size: root page directory size
 */
struct kvmppc_gs_part_table {
	u64 address;
	u64 ea_bits;
	u64 gpd_size;
};

/**
 * struct kvmppc_gs_proc_table - deserialized process table information element
 * @address: start of the process table
 * @gpd_size: process table size
 */
struct kvmppc_gs_proc_table {
	u64 address;
	u64 gpd_size;
};

/**
 * struct kvmppc_gs_buff_info - deserialized meta guest state buffer information
 * @address: start of the guest state buffer
 * @size: size of the guest state buffer
 */
struct kvmppc_gs_buff_info {
	u64 address;
	u64 size;
};

/**
 * struct kvmppc_gs_header - serialized guest state buffer header
 * @nelem: count of guest state elements in the buffer
 * @data: start of the stream of elements in the buffer
 */
struct kvmppc_gs_header {
	__be32 nelems;
	char data[];
} __packed;

/**
 * struct kvmppc_gs_elem - serialized guest state buffer element
 * @iden: Guest State ID
 * @len: length of data
 * @data: the guest state buffer element's value
 */
struct kvmppc_gs_elem {
	__be16 iden;
	__be16 len;
	char data[];
} __packed;

/**
 * struct kvmppc_gs_buff - a guest state buffer with metadata.
 * @capacity: total length of the buffer
 * @len: current length of the elements and header
 * @guest_id: guest id associated with the buffer
 * @vcpu_id: vcpu_id associated with the buffer
 * @hdr: the serialised guest state buffer
 */
struct kvmppc_gs_buff {
	size_t capacity;
	size_t len;
	unsigned long guest_id;
	unsigned long vcpu_id;
	struct kvmppc_gs_header *hdr;
};

/**
 * struct kvmppc_gs_bitmap - a bitmap for element ids
 * @bitmap: a bitmap large enough for all Guest State IDs
 */
struct kvmppc_gs_bitmap {
	/* private: */
	DECLARE_BITMAP(bitmap, KVMPPC_GSE_IDEN_COUNT);
};

/**
 * struct kvmppc_gs_parser - a map of element ids to locations in a buffer
 * @iterator: bitmap used for iterating
 * @gses: contains the pointers to elements
 *
 * A guest state parser is used for deserialising a guest state buffer.
 * Given a buffer, it then allows looking up guest state elements using
 * a guest state id.
 */
struct kvmppc_gs_parser {
	/* private: */
	struct kvmppc_gs_bitmap iterator;
	struct kvmppc_gs_elem *gses[KVMPPC_GSE_IDEN_COUNT];
};

enum {
	GSM_GUEST_WIDE = 0x1,
	GSM_SEND = 0x2,
	GSM_RECEIVE = 0x4,
	GSM_GSB_OWNER = 0x8,
};

struct kvmppc_gs_msg;

/**
 * struct kvmppc_gs_msg_ops - guest state message behavior
 * @get_size: maximum size required for the message data
 * @fill_info: serializes to the guest state buffer format
 * @refresh_info: dserializes from the guest state buffer format
 */
struct kvmppc_gs_msg_ops {
	size_t (*get_size)(struct kvmppc_gs_msg *gsm);
	int (*fill_info)(struct kvmppc_gs_buff *gsb, struct kvmppc_gs_msg *gsm);
	int (*refresh_info)(struct kvmppc_gs_msg *gsm,
			    struct kvmppc_gs_buff *gsb);
};

/**
 * struct kvmppc_gs_msg - a guest state message
 * @bitmap: the guest state ids that should be included
 * @ops: modify message behavior for reading and writing to buffers
 * @flags: guest wide or thread wide
 * @data: location where buffer data will be written to or from.
 *
 * A guest state message is allows flexibility in sending in receiving data
 * in a guest state buffer format.
 */
struct kvmppc_gs_msg {
	struct kvmppc_gs_bitmap bitmap;
	struct kvmppc_gs_msg_ops *ops;
	unsigned long flags;
	void *data;
};

/**************************************************************************
 * Guest State IDs
 **************************************************************************/

u16 kvmppc_gsid_size(u16 iden);
unsigned long kvmppc_gsid_flags(u16 iden);
u64 kvmppc_gsid_mask(u16 iden);

/**************************************************************************
 * Guest State Buffers
 **************************************************************************/
struct kvmppc_gs_buff *kvmppc_gsb_new(size_t size, unsigned long guest_id,
				      unsigned long vcpu_id, gfp_t flags);
void kvmppc_gsb_free(struct kvmppc_gs_buff *gsb);
void *kvmppc_gsb_put(struct kvmppc_gs_buff *gsb, size_t size);
int kvmppc_gsb_send(struct kvmppc_gs_buff *gsb, unsigned long flags);
int kvmppc_gsb_recv(struct kvmppc_gs_buff *gsb, unsigned long flags);

/**
 * kvmppc_gsb_header() - the header of a guest state buffer
 * @gsb: guest state buffer
 *
 * Returns a pointer to the buffer header.
 */
static inline struct kvmppc_gs_header *
kvmppc_gsb_header(struct kvmppc_gs_buff *gsb)
{
	return gsb->hdr;
}

/**
 * kvmppc_gsb_data() - the elements of a guest state buffer
 * @gsb: guest state buffer
 *
 * Returns a pointer to the first element of the buffer data.
 */
static inline struct kvmppc_gs_elem *kvmppc_gsb_data(struct kvmppc_gs_buff *gsb)
{
	return (struct kvmppc_gs_elem *)kvmppc_gsb_header(gsb)->data;
}

/**
 * kvmppc_gsb_len() - the current length of a guest state buffer
 * @gsb: guest state buffer
 *
 * Returns the length including the header of a buffer.
 */
static inline size_t kvmppc_gsb_len(struct kvmppc_gs_buff *gsb)
{
	return gsb->len;
}

/**
 * kvmppc_gsb_capacity() - the capacity of a guest state buffer
 * @gsb: guest state buffer
 *
 * Returns the capacity of a buffer.
 */
static inline size_t kvmppc_gsb_capacity(struct kvmppc_gs_buff *gsb)
{
	return gsb->capacity;
}

/**
 * kvmppc_gsb_paddress() - the physical address of buffer
 * @gsb: guest state buffer
 *
 * Returns the physical address of the buffer.
 */
static inline u64 kvmppc_gsb_paddress(struct kvmppc_gs_buff *gsb)
{
	return __pa(kvmppc_gsb_header(gsb));
}

/**
 * kvmppc_gsb_nelems() - the number of elements in a buffer
 * @gsb: guest state buffer
 *
 * Returns the number of elements in a buffer
 */
static inline u32 kvmppc_gsb_nelems(struct kvmppc_gs_buff *gsb)
{
	return be32_to_cpu(kvmppc_gsb_header(gsb)->nelems);
}

/**
 * kvmppc_gsb_reset() - empty a guest state buffer
 * @gsb: guest state buffer
 *
 * Reset the number of elements and length of buffer to empty.
 */
static inline void kvmppc_gsb_reset(struct kvmppc_gs_buff *gsb)
{
	kvmppc_gsb_header(gsb)->nelems = cpu_to_be32(0);
	gsb->len = sizeof(struct kvmppc_gs_header);
}

/**
 * kvmppc_gsb_data_len() - the length of a buffer excluding the header
 * @gsb: guest state buffer
 *
 * Returns the length of a buffer excluding the header
 */
static inline size_t kvmppc_gsb_data_len(struct kvmppc_gs_buff *gsb)
{
	return gsb->len - sizeof(struct kvmppc_gs_header);
}

/**
 * kvmppc_gsb_data_cap() - the capacity of a buffer excluding the header
 * @gsb: guest state buffer
 *
 * Returns the capacity of a buffer excluding the header
 */
static inline size_t kvmppc_gsb_data_cap(struct kvmppc_gs_buff *gsb)
{
	return gsb->capacity - sizeof(struct kvmppc_gs_header);
}

/**
 * kvmppc_gsb_for_each_elem - iterate over the elements in a buffer
 * @i: loop counter
 * @pos: set to current element
 * @gsb: guest state buffer
 * @rem: initialized to buffer capacity, holds bytes currently remaining in
 *  stream
 */
#define kvmppc_gsb_for_each_elem(i, pos, gsb, rem)               \
	kvmppc_gse_for_each_elem(i, kvmppc_gsb_nelems(gsb), pos, \
				 kvmppc_gsb_data(gsb),           \
				 kvmppc_gsb_data_cap(gsb), rem)

/**************************************************************************
 * Guest State Elements
 **************************************************************************/

/**
 * kvmppc_gse_iden() - guest state ID of element
 * @gse: guest state element
 *
 * Return the guest state ID in host endianness.
 */
static inline u16 kvmppc_gse_iden(const struct kvmppc_gs_elem *gse)
{
	return be16_to_cpu(gse->iden);
}

/**
 * kvmppc_gse_len() - length of guest state element data
 * @gse: guest state element
 *
 * Returns the length of guest state element data
 */
static inline u16 kvmppc_gse_len(const struct kvmppc_gs_elem *gse)
{
	return be16_to_cpu(gse->len);
}

/**
 * kvmppc_gse_total_len() - total length of guest state element
 * @gse: guest state element
 *
 * Returns the length of the data plus the ID and size header.
 */
static inline u16 kvmppc_gse_total_len(const struct kvmppc_gs_elem *gse)
{
	return be16_to_cpu(gse->len) + sizeof(*gse);
}

/**
 * kvmppc_gse_total_size() - space needed for a given data length
 * @size: data length
 *
 * Returns size plus the space needed for the ID and size header.
 */
static inline u16 kvmppc_gse_total_size(u16 size)
{
	return sizeof(struct kvmppc_gs_elem) + size;
}

/**
 * kvmppc_gse_data() - pointer to data of a guest state element
 * @gse: guest state element
 *
 * Returns a pointer to the beginning of guest state element data.
 */
static inline void *kvmppc_gse_data(const struct kvmppc_gs_elem *gse)
{
	return (void *)gse->data;
}

/**
 * kvmppc_gse_ok() - checks space exists for guest state element
 * @gse: guest state element
 * @remaining: bytes of space remaining
 *
 * Returns true if the guest state element can fit in remaining space.
 */
static inline bool kvmppc_gse_ok(const struct kvmppc_gs_elem *gse,
				 int remaining)
{
	return remaining >= kvmppc_gse_total_len(gse);
}

/**
 * kvmppc_gse_next() - iterate to the next guest state element in a stream
 * @gse: stream of guest state elements
 * @remaining: length of the guest element stream
 *
 * Returns the next guest state element in a stream of elements. The length of
 * the stream is updated in remaining.
 */
static inline struct kvmppc_gs_elem *
kvmppc_gse_next(const struct kvmppc_gs_elem *gse, int *remaining)
{
	int len = sizeof(*gse) + kvmppc_gse_len(gse);

	*remaining -= len;
	return (struct kvmppc_gs_elem *)(gse->data + kvmppc_gse_len(gse));
}

/**
 * kvmppc_gse_for_each_elem - iterate over a stream of guest state elements
 * @i: loop counter
 * @max: number of elements
 * @pos: set to current element
 * @head: head of elements
 * @len: length of the stream
 * @rem: initialized to len, holds bytes currently remaining elements
 */
#define kvmppc_gse_for_each_elem(i, max, pos, head, len, rem)                  \
	for (i = 0, pos = head, rem = len; kvmppc_gse_ok(pos, rem) && i < max; \
	     pos = kvmppc_gse_next(pos, &(rem)), i++)

int __kvmppc_gse_put(struct kvmppc_gs_buff *gsb, u16 iden, u16 size,
		     const void *data);
int kvmppc_gse_parse(struct kvmppc_gs_parser *gsp, struct kvmppc_gs_buff *gsb);

/**
 * kvmppc_gse_put_be32() - add a be32 guest state element to a buffer
 * @gsb: guest state buffer to add element to
 * @iden: guest state ID
 * @val: big endian value
 */
static inline int kvmppc_gse_put_be32(struct kvmppc_gs_buff *gsb, u16 iden,
				      __be32 val)
{
	__be32 tmp;

	tmp = val;
	return __kvmppc_gse_put(gsb, iden, sizeof(__be32), &tmp);
}

/**
 * kvmppc_gse_put_u32() - add a host endian 32bit int guest state element to a
 * buffer
 * @gsb: guest state buffer to add element to
 * @iden: guest state ID
 * @val: host endian value
 */
static inline int kvmppc_gse_put_u32(struct kvmppc_gs_buff *gsb, u16 iden,
				     u32 val)
{
	__be32 tmp;

	val &= kvmppc_gsid_mask(iden);
	tmp = cpu_to_be32(val);
	return kvmppc_gse_put_be32(gsb, iden, tmp);
}

/**
 * kvmppc_gse_put_be64() - add a be64 guest state element to a buffer
 * @gsb: guest state buffer to add element to
 * @iden: guest state ID
 * @val: big endian value
 */
static inline int kvmppc_gse_put_be64(struct kvmppc_gs_buff *gsb, u16 iden,
				      __be64 val)
{
	__be64 tmp;

	tmp = val;
	return __kvmppc_gse_put(gsb, iden, sizeof(__be64), &tmp);
}

/**
 * kvmppc_gse_put_u64() - add a host endian 64bit guest state element to a
 * buffer
 * @gsb: guest state buffer to add element to
 * @iden: guest state ID
 * @val: host endian value
 */
static inline int kvmppc_gse_put_u64(struct kvmppc_gs_buff *gsb, u16 iden,
				     u64 val)
{
	__be64 tmp;

	val &= kvmppc_gsid_mask(iden);
	tmp = cpu_to_be64(val);
	return kvmppc_gse_put_be64(gsb, iden, tmp);
}

/**
 * __kvmppc_gse_put_reg() - add a register type guest state element to a buffer
 * @gsb: guest state buffer to add element to
 * @iden: guest state ID
 * @val: host endian value
 *
 * Adds a register type guest state element. Uses the guest state ID for
 * determining the length of the guest element. If the guest state ID has
 * bits that can not be set they will be cleared.
 */
static inline int __kvmppc_gse_put_reg(struct kvmppc_gs_buff *gsb, u16 iden,
				       u64 val)
{
	val &= kvmppc_gsid_mask(iden);
	if (kvmppc_gsid_size(iden) == sizeof(u64))
		return kvmppc_gse_put_u64(gsb, iden, val);

	if (kvmppc_gsid_size(iden) == sizeof(u32)) {
		u32 tmp;

		tmp = (u32)val;
		if (tmp != val)
			return -EINVAL;

		return kvmppc_gse_put_u32(gsb, iden, tmp);
	}
	return -EINVAL;
}

/**
 * kvmppc_gse_put_vector128() - add a vector guest state element to a buffer
 * @gsb: guest state buffer to add element to
 * @iden: guest state ID
 * @val: 16 byte vector value
 */
static inline int kvmppc_gse_put_vector128(struct kvmppc_gs_buff *gsb, u16 iden,
					   vector128 *val)
{
	__be64 tmp[2] = { 0 };
	union {
		__vector128 v;
		u64 dw[2];
	} u;

	u.v = *val;
	tmp[0] = cpu_to_be64(u.dw[TS_FPROFFSET]);
#ifdef CONFIG_VSX
	tmp[1] = cpu_to_be64(u.dw[TS_VSRLOWOFFSET]);
#endif
	return __kvmppc_gse_put(gsb, iden, sizeof(tmp), &tmp);
}

/**
 * kvmppc_gse_put_part_table() - add a partition table guest state element to a
 * buffer
 * @gsb: guest state buffer to add element to
 * @iden: guest state ID
 * @val: partition table value
 */
static inline int kvmppc_gse_put_part_table(struct kvmppc_gs_buff *gsb,
					    u16 iden,
					    struct kvmppc_gs_part_table val)
{
	__be64 tmp[3];

	tmp[0] = cpu_to_be64(val.address);
	tmp[1] = cpu_to_be64(val.ea_bits);
	tmp[2] = cpu_to_be64(val.gpd_size);
	return __kvmppc_gse_put(gsb, KVMPPC_GSID_PARTITION_TABLE, sizeof(tmp),
				&tmp);
}

/**
 * kvmppc_gse_put_proc_table() - add a process table guest state element to a
 * buffer
 * @gsb: guest state buffer to add element to
 * @iden: guest state ID
 * @val: process table value
 */
static inline int kvmppc_gse_put_proc_table(struct kvmppc_gs_buff *gsb,
					    u16 iden,
					    struct kvmppc_gs_proc_table val)
{
	__be64 tmp[2];

	tmp[0] = cpu_to_be64(val.address);
	tmp[1] = cpu_to_be64(val.gpd_size);
	return __kvmppc_gse_put(gsb, KVMPPC_GSID_PROCESS_TABLE, sizeof(tmp),
				&tmp);
}

/**
 * kvmppc_gse_put_buff_info() - adds a GSB description guest state element to a
 * buffer
 * @gsb: guest state buffer to add element to
 * @iden: guest state ID
 * @val: guest state buffer description value
 */
static inline int kvmppc_gse_put_buff_info(struct kvmppc_gs_buff *gsb, u16 iden,
					   struct kvmppc_gs_buff_info val)
{
	__be64 tmp[2];

	tmp[0] = cpu_to_be64(val.address);
	tmp[1] = cpu_to_be64(val.size);
	return __kvmppc_gse_put(gsb, iden, sizeof(tmp), &tmp);
}

int __kvmppc_gse_put(struct kvmppc_gs_buff *gsb, u16 iden, u16 size,
		     const void *data);

/**
 * kvmppc_gse_get_be32() - return the data of a be32 element
 * @gse: guest state element
 */
static inline __be32 kvmppc_gse_get_be32(const struct kvmppc_gs_elem *gse)
{
	if (WARN_ON(kvmppc_gse_len(gse) != sizeof(__be32)))
		return 0;
	return *(__be32 *)kvmppc_gse_data(gse);
}

/**
 * kvmppc_gse_get_u32() - return the data of a be32 element in host endianness
 * @gse: guest state element
 */
static inline u32 kvmppc_gse_get_u32(const struct kvmppc_gs_elem *gse)
{
	return be32_to_cpu(kvmppc_gse_get_be32(gse));
}

/**
 * kvmppc_gse_get_be64() - return the data of a be64 element
 * @gse: guest state element
 */
static inline __be64 kvmppc_gse_get_be64(const struct kvmppc_gs_elem *gse)
{
	if (WARN_ON(kvmppc_gse_len(gse) != sizeof(__be64)))
		return 0;
	return *(__be64 *)kvmppc_gse_data(gse);
}

/**
 * kvmppc_gse_get_u64() - return the data of a be64 element in host endianness
 * @gse: guest state element
 */
static inline u64 kvmppc_gse_get_u64(const struct kvmppc_gs_elem *gse)
{
	return be64_to_cpu(kvmppc_gse_get_be64(gse));
}

/**
 * kvmppc_gse_get_vector128() - return the data of a vector element
 * @gse: guest state element
 */
static inline void kvmppc_gse_get_vector128(const struct kvmppc_gs_elem *gse,
					    vector128 *v)
{
	union {
		__vector128 v;
		u64 dw[2];
	} u = { 0 };
	__be64 *src;

	if (WARN_ON(kvmppc_gse_len(gse) != sizeof(__vector128)))
		*v = u.v;

	src = (__be64 *)kvmppc_gse_data(gse);
	u.dw[TS_FPROFFSET] = be64_to_cpu(src[0]);
#ifdef CONFIG_VSX
	u.dw[TS_VSRLOWOFFSET] = be64_to_cpu(src[1]);
#endif
	*v = u.v;
}

/**************************************************************************
 * Guest State Bitmap
 **************************************************************************/

bool kvmppc_gsbm_test(struct kvmppc_gs_bitmap *gsbm, u16 iden);
void kvmppc_gsbm_set(struct kvmppc_gs_bitmap *gsbm, u16 iden);
void kvmppc_gsbm_clear(struct kvmppc_gs_bitmap *gsbm, u16 iden);
u16 kvmppc_gsbm_next(struct kvmppc_gs_bitmap *gsbm, u16 prev);

/**
 * kvmppc_gsbm_zero - zero the entire bitmap
 * @gsbm: guest state buffer bitmap
 */
static inline void kvmppc_gsbm_zero(struct kvmppc_gs_bitmap *gsbm)
{
	bitmap_zero(gsbm->bitmap, KVMPPC_GSE_IDEN_COUNT);
}

/**
 * kvmppc_gsbm_fill - fill the entire bitmap
 * @gsbm: guest state buffer bitmap
 */
static inline void kvmppc_gsbm_fill(struct kvmppc_gs_bitmap *gsbm)
{
	bitmap_fill(gsbm->bitmap, KVMPPC_GSE_IDEN_COUNT);
	clear_bit(0, gsbm->bitmap);
}

/**
 * kvmppc_gsbm_for_each - iterate the present guest state IDs
 * @gsbm: guest state buffer bitmap
 * @iden: current guest state ID
 */
#define kvmppc_gsbm_for_each(gsbm, iden)                  \
	for (iden = kvmppc_gsbm_next(gsbm, 0); iden != 0; \
	     iden = kvmppc_gsbm_next(gsbm, iden))

/**************************************************************************
 * Guest State Parser
 **************************************************************************/

void kvmppc_gsp_insert(struct kvmppc_gs_parser *gsp, u16 iden,
		       struct kvmppc_gs_elem *gse);
struct kvmppc_gs_elem *kvmppc_gsp_lookup(struct kvmppc_gs_parser *gsp,
					 u16 iden);

/**
 * kvmppc_gsp_for_each - iterate the <guest state IDs, guest state element>
 * pairs
 * @gsp: guest state buffer bitmap
 * @iden: current guest state ID
 * @gse: guest state element
 */
#define kvmppc_gsp_for_each(gsp, iden, gse)                              \
	for (iden = kvmppc_gsbm_next(&(gsp)->iterator, 0),               \
	    gse = kvmppc_gsp_lookup((gsp), iden);                        \
	     iden != 0; iden = kvmppc_gsbm_next(&(gsp)->iterator, iden), \
	    gse = kvmppc_gsp_lookup((gsp), iden))

/**************************************************************************
 * Guest State Message
 **************************************************************************/

/**
 * kvmppc_gsm_for_each - iterate the guest state IDs included in a guest state
 * message
 * @gsp: guest state buffer bitmap
 * @iden: current guest state ID
 * @gse: guest state element
 */
#define kvmppc_gsm_for_each(gsm, iden)                            \
	for (iden = kvmppc_gsbm_next(&gsm->bitmap, 0); iden != 0; \
	     iden = kvmppc_gsbm_next(&gsm->bitmap, iden))

int kvmppc_gsm_init(struct kvmppc_gs_msg *mgs, struct kvmppc_gs_msg_ops *ops,
		    void *data, unsigned long flags);

struct kvmppc_gs_msg *kvmppc_gsm_new(struct kvmppc_gs_msg_ops *ops, void *data,
				     unsigned long flags, gfp_t gfp_flags);
void kvmppc_gsm_free(struct kvmppc_gs_msg *gsm);
size_t kvmppc_gsm_size(struct kvmppc_gs_msg *gsm);
int kvmppc_gsm_fill_info(struct kvmppc_gs_msg *gsm, struct kvmppc_gs_buff *gsb);
int kvmppc_gsm_refresh_info(struct kvmppc_gs_msg *gsm,
			    struct kvmppc_gs_buff *gsb);

/**
 * kvmppc_gsm_include - indicate a guest state ID should be included when
 * serializing
 * @gsm: guest state message
 * @iden: guest state ID
 */
static inline void kvmppc_gsm_include(struct kvmppc_gs_msg *gsm, u16 iden)
{
	kvmppc_gsbm_set(&gsm->bitmap, iden);
}

/**
 * kvmppc_gsm_includes - check if a guest state ID will be included when
 * serializing
 * @gsm: guest state message
 * @iden: guest state ID
 */
static inline bool kvmppc_gsm_includes(struct kvmppc_gs_msg *gsm, u16 iden)
{
	return kvmppc_gsbm_test(&gsm->bitmap, iden);
}

/**
 * kvmppc_gsm_includes - indicate all guest state IDs should be included when
 * serializing
 * @gsm: guest state message
 * @iden: guest state ID
 */
static inline void kvmppc_gsm_include_all(struct kvmppc_gs_msg *gsm)
{
	kvmppc_gsbm_fill(&gsm->bitmap);
}

/**
 * kvmppc_gsm_include - clear the guest state IDs that should be included when
 * serializing
 * @gsm: guest state message
 */
static inline void kvmppc_gsm_reset(struct kvmppc_gs_msg *gsm)
{
	kvmppc_gsbm_zero(&gsm->bitmap);
}

/**
 * kvmppc_gsb_receive_data - flexibly update values from a guest state buffer
 * @gsb: guest state buffer
 * @gsm: guest state message
 *
 * Requests updated values for the guest state values included in the guest
 * state message. The guest state message will then deserialize the guest state
 * buffer.
 */
static inline int kvmppc_gsb_receive_data(struct kvmppc_gs_buff *gsb,
					  struct kvmppc_gs_msg *gsm)
{
	int rc;

	kvmppc_gsb_reset(gsb);
	rc = kvmppc_gsm_fill_info(gsm, gsb);
	if (rc < 0)
		return rc;

	rc = kvmppc_gsb_recv(gsb, gsm->flags);
	if (rc < 0)
		return rc;

	rc = kvmppc_gsm_refresh_info(gsm, gsb);
	if (rc < 0)
		return rc;
	return 0;
}

/**
 * kvmppc_gsb_recv - receive a single guest state ID
 * @gsb: guest state buffer
 * @gsm: guest state message
 * @iden: guest state identity
 */
static inline int kvmppc_gsb_receive_datum(struct kvmppc_gs_buff *gsb,
					   struct kvmppc_gs_msg *gsm, u16 iden)
{
	int rc;

	kvmppc_gsm_include(gsm, iden);
	rc = kvmppc_gsb_receive_data(gsb, gsm);
	if (rc < 0)
		return rc;
	kvmppc_gsm_reset(gsm);
	return 0;
}

/**
 * kvmppc_gsb_send_data - flexibly send values from a guest state buffer
 * @gsb: guest state buffer
 * @gsm: guest state message
 *
 * Sends the guest state values included in the guest state message.
 */
static inline int kvmppc_gsb_send_data(struct kvmppc_gs_buff *gsb,
				       struct kvmppc_gs_msg *gsm)
{
	int rc;

	kvmppc_gsb_reset(gsb);
	rc = kvmppc_gsm_fill_info(gsm, gsb);
	if (rc < 0)
		return rc;
	rc = kvmppc_gsb_send(gsb, gsm->flags);

	return rc;
}

/**
 * kvmppc_gsb_recv - send a single guest state ID
 * @gsb: guest state buffer
 * @gsm: guest state message
 * @iden: guest state identity
 */
static inline int kvmppc_gsb_send_datum(struct kvmppc_gs_buff *gsb,
					struct kvmppc_gs_msg *gsm, u16 iden)
{
	int rc;

	kvmppc_gsm_include(gsm, iden);
	rc = kvmppc_gsb_send_data(gsb, gsm);
	if (rc < 0)
		return rc;
	kvmppc_gsm_reset(gsm);
	return 0;
}

#endif /* _ASM_POWERPC_GUEST_STATE_BUFFER_H */

Filemanager

Name Type Size Permission Actions
book3s Folder 0755
nohash Folder 0755
vdso Folder 0755
8xx_immap.h File 13.81 KB 0644
Kbuild File 262 B 0644
accounting.h File 908 B 0644
archrandom.h File 417 B 0644
asm-compat.h File 1.94 KB 0644
asm-const.h File 443 B 0644
asm-offsets.h File 35 B 0644
asm-prototypes.h File 2.17 KB 0644
asm.h File 154 B 0644
async_tx.h File 908 B 0644
atomic.h File 11.55 KB 0644
backlight.h File 1.02 KB 0644
barrier.h File 3.95 KB 0644
bitops.h File 9.13 KB 0644
bootx.h File 1.12 KB 0644
bpf_perf_event.h File 233 B 0644
btext.h File 1006 B 0644
bug.h File 3.23 KB 0644
cache.h File 2.9 KB 0644
cacheflush.h File 3.91 KB 0644
cell-pmu.h File 3.41 KB 0644
cell-regs.h File 9.57 KB 0644
checksum.h File 5.73 KB 0644
clocksource.h File 185 B 0644
cmpxchg.h File 16.28 KB 0644
code-patching-asm.h File 397 B 0644
compat.h File 2.5 KB 0644
context_tracking.h File 250 B 0644
copro.h File 593 B 0644
cpm.h File 25 B 0644
cpm1.h File 21.06 KB 0644
cpm2.h File 48.4 KB 0644
cpu_has_feature.h File 1.31 KB 0644
cpu_setup.h File 2.48 KB 0644
cpufeature.h File 1.04 KB 0644
cpuidle.h File 3.33 KB 0644
cputable.h File 23.17 KB 0644
cputhreads.h File 2.83 KB 0644
cputime.h File 2.22 KB 0644
crashdump-ppc64.h File 624 B 0644
current.h File 680 B 0644
dbdma.h File 3.72 KB 0644
dbell.h File 3.93 KB 0644
dcr-generic.h File 930 B 0644
dcr-mmio.h File 1 KB 0644
dcr-native.h File 3.77 KB 0644
dcr-regs.h File 5.71 KB 0644
dcr.h File 2.06 KB 0644
debug.h File 1.9 KB 0644
delay.h File 3.22 KB 0644
device.h File 1.09 KB 0644
disassemble.h File 2.14 KB 0644
dma-direct.h File 391 B 0644
dma.h File 10.38 KB 0644
drmem.h File 2.94 KB 0644
dt_cpu_ftrs.h File 756 B 0644
dtl.h File 1.06 KB 0644
edac.h File 1.08 KB 0644
eeh.h File 14.79 KB 0644
eeh_event.h File 826 B 0644
ehv_pic.h File 963 B 0644
elf.h File 6.48 KB 0644
elfnote.h File 527 B 0644
emergency-restart.h File 43 B 0644
emulated_ops.h File 2.02 KB 0644
epapr_hcalls.h File 16.43 KB 0644
exception-64e.h File 5.72 KB 0644
exception-64s.h File 4.25 KB 0644
exec.h File 246 B 0644
extable.h File 1.18 KB 0644
fadump-internal.h File 5.35 KB 0644
fadump.h File 1.38 KB 0644
feature-fixups.h File 9.7 KB 0644
firmware.h File 5.47 KB 0644
fixmap.h File 3.46 KB 0644
floppy.h File 5.01 KB 0644
fpu.h File 509 B 0644
fsl_gtm.h File 1.17 KB 0644
fsl_hcalls.h File 17.2 KB 0644
fsl_lbc.h File 10.24 KB 0644
fsl_pamu_stash.h File 411 B 0644
fsl_pm.h File 1.16 KB 0644
ftrace.h File 5.08 KB 0644
futex.h File 2.19 KB 0644
grackle.h File 331 B 0644
guest-state-buffer.h File 27.38 KB 0644
hardirq.h File 948 B 0644
head-64.h File 5.36 KB 0644
heathrow.h File 2.53 KB 0644
highmem.h File 2.03 KB 0644
hmi.h File 971 B 0644
hugetlb.h File 2.3 KB 0644
hvcall.h File 22.61 KB 0644
hvconsole.h File 800 B 0644
hvcserver.h File 1.44 KB 0644
hvsi.h File 2.83 KB 0644
hw_breakpoint.h File 3.69 KB 0644
hw_irq.h File 12.64 KB 0644
hydra.h File 2.88 KB 0644
i8259.h File 361 B 0644
ibmebus.h File 2.18 KB 0644
icswx.h File 4.97 KB 0644
idle.h File 2.37 KB 0644
imc-pmu.h File 3.91 KB 0644
immap_cpm2.h File 10.5 KB 0644
inst.h File 3.9 KB 0644
interrupt.h File 20.21 KB 0644
io-defs.h File 3.09 KB 0644
io-workarounds.h File 1.28 KB 0644
io.h File 30.97 KB 0644
io_event_irq.h File 1.71 KB 0644
iommu.h File 10.19 KB 0644
ipic.h File 3.07 KB 0644
irq.h File 1.33 KB 0644
irq_work.h File 213 B 0644
irqflags.h File 239 B 0644
isa-bridge.h File 654 B 0644
jump_label.h File 1.3 KB 0644
kasan.h File 2.27 KB 0644
kdebug.h File 291 B 0644
kdump.h File 1.37 KB 0644
kexec.h File 6 KB 0644
kexec_ranges.h File 743 B 0644
keylargo.h File 10.8 KB 0644
kfence.h File 1.16 KB 0644
kgdb.h File 2.11 KB 0644
kprobes.h File 2.64 KB 0644
kup.h File 4.21 KB 0644
kvm_asm.h File 4.89 KB 0644
kvm_book3s.h File 23.17 KB 0644
kvm_book3s_32.h File 816 B 0644
kvm_book3s_64.h File 18.78 KB 0644
kvm_book3s_asm.h File 3.56 KB 0644
kvm_book3s_uvmem.h File 2.67 KB 0644
kvm_booke.h File 2.41 KB 0644
kvm_booke_hv_asm.h File 1.91 KB 0644
kvm_fpu.h File 2.15 KB 0644
kvm_guest.h File 573 B 0644
kvm_host.h File 22.43 KB 0644
kvm_para.h File 752 B 0644
kvm_ppc.h File 37.63 KB 0644
libata-portmap.h File 249 B 0644
linkage.h File 508 B 0644
livepatch.h File 604 B 0644
local.h File 3.36 KB 0644
lppaca.h File 4.53 KB 0644
lv1call.h File 18.12 KB 0644
machdep.h File 8.74 KB 0644
macio.h File 3.93 KB 0644
mc146818rtc.h File 736 B 0644
mce.h File 6.58 KB 0644
mediabay.h File 1.34 KB 0644
mem_encrypt.h File 456 B 0644
membarrier.h File 877 B 0644
mman.h File 1.11 KB 0644
mmiowb.h File 374 B 0644
mmu.h File 10.63 KB 0644
mmu_context.h File 8.67 KB 0644
mmzone.h File 902 B 0644
module.h File 2.38 KB 0644
module.lds.h File 95 B 0644
mpc5121.h File 3.77 KB 0644
mpc52xx.h File 9.76 KB 0644
mpc52xx_psc.h File 9.89 KB 0644
mpc5xxx.h File 610 B 0644
mpc6xx.h File 143 B 0644
mpc85xx.h File 2.33 KB 0644
mpic.h File 13.98 KB 0644
mpic_msgr.h File 3.36 KB 0644
mpic_timer.h File 1.16 KB 0644
msi_bitmap.h File 867 B 0644
nmi.h File 372 B 0644
nvram.h File 2.77 KB 0644
ohare.h File 1.64 KB 0644
opal-api.h File 30.97 KB 0644
opal.h File 17.01 KB 0644
paca.h File 8.66 KB 0644
page.h File 8.64 KB 0644
page_32.h File 1.51 KB 0644
page_64.h File 2.65 KB 0644
papr-sysparm.h File 1.51 KB 0644
paravirt.h File 6.18 KB 0644
paravirt_api_clock.h File 65 B 0644
parport.h File 960 B 0644
pasemi_dma.h File 22.73 KB 0644
pci-bridge.h File 9.36 KB 0644
pci.h File 3.51 KB 0644
percpu.h File 782 B 0644
perf_event.h File 1.47 KB 0644
perf_event_fsl_emb.h File 1.22 KB 0644
perf_event_server.h File 7.01 KB 0644
pgalloc.h File 2.2 KB 0644
pgtable-be-types.h File 2.37 KB 0644
pgtable-masks.h File 1.11 KB 0644
pgtable-types.h File 2.23 KB 0644
pgtable.h File 5.99 KB 0644
pkeys.h File 4.18 KB 0644
plpar_wrappers.h File 14.62 KB 0644
plpks.h File 5.09 KB 0644
pmac_feature.h File 13.35 KB 0644
pmac_low_i2c.h File 3.03 KB 0644
pmac_pfunc.h File 8.04 KB 0644
pmc.h File 1.09 KB 0644
pmi.h File 1.15 KB 0644
pnv-ocxl.h File 3 KB 0644
pnv-pci.h File 2.4 KB 0644
powernv.h File 454 B 0644
ppc-opcode.h File 32.59 KB 0644
ppc-pci.h File 2.77 KB 0644
ppc4xx.h File 328 B 0644
ppc_asm.h File 23.13 KB 0644
probes.h File 2.46 KB 0644
processor.h File 13.06 KB 0644
prom.h File 7 KB 0644
ps3.h File 14.84 KB 0644
ps3av.h File 22.81 KB 0644
ps3gpu.h File 1.88 KB 0644
ps3stor.h File 1.38 KB 0644
pte-walk.h File 1.52 KB 0644
ptrace.h File 11.81 KB 0644
qspinlock.h File 4.76 KB 0644
qspinlock_types.h File 1.59 KB 0644
reg.h File 63.24 KB 0644
reg_8xx.h File 2.8 KB 0644
reg_booke.h File 28.05 KB 0644
reg_fsl_emb.h File 3.94 KB 0644
rheap.h File 2.52 KB 0644
rio.h File 424 B 0644
rtas-types.h File 2.84 KB 0644
rtas-work-area.h File 2.75 KB 0644
rtas.h File 23.33 KB 0644
runlatch.h File 1.15 KB 0644
seccomp.h File 1.02 KB 0644
sections.h File 2.04 KB 0644
secure_boot.h File 476 B 0644
security_features.h File 3.43 KB 0644
secvar.h File 994 B 0644
serial.h File 473 B 0644
set_memory.h File 1.41 KB 0644
setjmp.h File 400 B 0644
setup.h File 2.79 KB 0644
sfp-machine.h File 12.38 KB 0644
shmparam.h File 206 B 0644
signal.h File 506 B 0644
simple_spinlock.h File 6.1 KB 0644
simple_spinlock_types.h File 487 B 0644
smp.h File 7.01 KB 0644
smu.h File 19.33 KB 0644
sparsemem.h File 843 B 0644
spinlock.h File 474 B 0644
spinlock_types.h File 380 B 0644
spu.h File 23.41 KB 0644
spu_csa.h File 6.02 KB 0644
spu_info.h File 272 B 0644
spu_priv1.h File 5.01 KB 0644
sstep.h File 4.6 KB 0644
stackprotector.h File 604 B 0644
stacktrace.h File 297 B 0644
static_call.h File 1.04 KB 0644
string.h File 2.8 KB 0644
svm.h File 591 B 0644
swab.h File 173 B 0644
swiotlb.h File 413 B 0644
switch_to.h File 3.15 KB 0644
synch.h File 2.11 KB 0644
syscall.h File 2.95 KB 0644
syscall_wrapper.h File 1.63 KB 0644
syscalls.h File 5.05 KB 0644
syscalls_32.h File 1.58 KB 0644
systemcfg.h File 1.69 KB 0644
task_size_32.h File 544 B 0644
task_size_64.h File 2.57 KB 0644
tce.h File 892 B 0644
text-patching.h File 7.37 KB 0644
thread_info.h File 7.7 KB 0644
time.h File 2.92 KB 0644
timex.h File 463 B 0644
tlb.h File 2.3 KB 0644
tlbflush.h File 271 B 0644
tm.h File 624 B 0644
topology.h File 4.07 KB 0644
trace.h File 7.26 KB 0644
trace_clock.h File 372 B 0644
tsi108.h File 3.19 KB 0644
tsi108_irq.h File 3.82 KB 0644
tsi108_pci.h File 1.16 KB 0644
types.h File 573 B 0644
uaccess.h File 14.44 KB 0644
udbg.h File 1.7 KB 0644
uic.h File 403 B 0644
ultravisor-api.h File 941 B 0644
ultravisor.h File 2.05 KB 0644
uninorth.h File 8.21 KB 0644
unistd.h File 1.45 KB 0644
uprobes.h File 770 B 0644
user.h File 1.95 KB 0644
vas.h File 7.91 KB 0644
vdso.h File 1022 B 0644
vdso_datapage.h File 1.72 KB 0644
vermagic.h File 612 B 0644
vga.h File 1.13 KB 0644
video.h File 431 B 0644
vio.h File 4.54 KB 0644
vmalloc.h File 554 B 0644
vphn.h File 802 B 0644
word-at-a-time.h File 4.79 KB 0644
xics.h File 4.39 KB 0644
xive-regs.h File 4.96 KB 0644
xive.h File 5.07 KB 0644
xmon.h File 733 B 0644
xor.h File 1017 B 0644
xor_altivec.h File 888 B 0644
Filemanager