Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7e1ce5a4 authored by Vasant Hegde's avatar Vasant Hegde Committed by Benjamin Herrenschmidt
Browse files

powerpc/powernv: Move SG list structure to header file



Move SG list and entry structure to header file so that
it can be used in other places as well.

Signed-off-by: default avatarVasant Hegde <hegdevasant@linux.vnet.ibm.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 24366360
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -33,6 +33,28 @@ struct opal_takeover_args {
	u64	rd_loc;			/* r11 */
};

/*
 * SG entry
 *
 * WARNING: The current implementation requires each entry
 * to represent a block that is 4k aligned *and* each block
 * size except the last one in the list to be as well.
 */
struct opal_sg_entry {
	void    *data;
	long    length;
};

/* sg list */
struct opal_sg_list {
	unsigned long num_entries;
	struct opal_sg_list *next;
	struct opal_sg_entry entry[];
};

/* We calculate number of sg entries based on PAGE_SIZE */
#define SG_ENTRIES_PER_NODE ((PAGE_SIZE - 16) / sizeof(struct opal_sg_entry))

extern long opal_query_takeover(u64 *hal_size, u64 *hal_align);

extern long opal_do_takeover(struct opal_takeover_args *args);
+6 −25
Original line number Diff line number Diff line
@@ -103,27 +103,6 @@ struct image_header_t {
	uint32_t	size;
};

/* Scatter/gather entry */
struct opal_sg_entry {
	void	*data;
	long	length;
};

/* We calculate number of entries based on PAGE_SIZE */
#define SG_ENTRIES_PER_NODE ((PAGE_SIZE - 16) / sizeof(struct opal_sg_entry))

/*
 * This struct is very similar but not identical to that
 * needed by the opal flash update. All we need to do for
 * opal is rewrite num_entries into a version/length and
 * translate the pointers to absolute.
 */
struct opal_sg_list {
	unsigned long num_entries;
	struct opal_sg_list *next;
	struct opal_sg_entry entry[SG_ENTRIES_PER_NODE];
};

struct validate_flash_t {
	int		status;		/* Return status */
	void		*buf;		/* Candiate image buffer */
@@ -333,7 +312,7 @@ static struct opal_sg_list *image_data_to_sglist(void)
	addr = image_data.data;
	size = image_data.size;

	sg1 = kzalloc((sizeof(struct opal_sg_list)), GFP_KERNEL);
	sg1 = kzalloc(PAGE_SIZE, GFP_KERNEL);
	if (!sg1)
		return NULL;

@@ -351,8 +330,7 @@ static struct opal_sg_list *image_data_to_sglist(void)

		sg1->num_entries++;
		if (sg1->num_entries >= SG_ENTRIES_PER_NODE) {
			sg1->next = kzalloc((sizeof(struct opal_sg_list)),
					    GFP_KERNEL);
			sg1->next = kzalloc(PAGE_SIZE, GFP_KERNEL);
			if (!sg1->next) {
				pr_err("%s : Failed to allocate memory\n",
				       __func__);
@@ -402,7 +380,10 @@ static int opal_flash_update(int op)
		else
			sg->next = NULL;

		/* Make num_entries into the version/length field */
		/*
		 * Convert num_entries to version/length format
		 * to satisfy OPAL.
		 */
		sg->num_entries = (SG_LIST_VERSION << 56) |
			(sg->num_entries * sizeof(struct opal_sg_entry) + 16);
	}