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: Vasant Hegde <hegdevasant@linux.vnet.ibm.com> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
Родитель
2436636003
Коммит
7e1ce5a492
|
@ -33,6 +33,28 @@ struct opal_takeover_args {
|
||||||
u64 rd_loc; /* r11 */
|
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_query_takeover(u64 *hal_size, u64 *hal_align);
|
||||||
|
|
||||||
extern long opal_do_takeover(struct opal_takeover_args *args);
|
extern long opal_do_takeover(struct opal_takeover_args *args);
|
||||||
|
|
|
@ -103,27 +103,6 @@ struct image_header_t {
|
||||||
uint32_t size;
|
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 {
|
struct validate_flash_t {
|
||||||
int status; /* Return status */
|
int status; /* Return status */
|
||||||
void *buf; /* Candiate image buffer */
|
void *buf; /* Candiate image buffer */
|
||||||
|
@ -333,7 +312,7 @@ static struct opal_sg_list *image_data_to_sglist(void)
|
||||||
addr = image_data.data;
|
addr = image_data.data;
|
||||||
size = image_data.size;
|
size = image_data.size;
|
||||||
|
|
||||||
sg1 = kzalloc((sizeof(struct opal_sg_list)), GFP_KERNEL);
|
sg1 = kzalloc(PAGE_SIZE, GFP_KERNEL);
|
||||||
if (!sg1)
|
if (!sg1)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -351,8 +330,7 @@ static struct opal_sg_list *image_data_to_sglist(void)
|
||||||
|
|
||||||
sg1->num_entries++;
|
sg1->num_entries++;
|
||||||
if (sg1->num_entries >= SG_ENTRIES_PER_NODE) {
|
if (sg1->num_entries >= SG_ENTRIES_PER_NODE) {
|
||||||
sg1->next = kzalloc((sizeof(struct opal_sg_list)),
|
sg1->next = kzalloc(PAGE_SIZE, GFP_KERNEL);
|
||||||
GFP_KERNEL);
|
|
||||||
if (!sg1->next) {
|
if (!sg1->next) {
|
||||||
pr_err("%s : Failed to allocate memory\n",
|
pr_err("%s : Failed to allocate memory\n",
|
||||||
__func__);
|
__func__);
|
||||||
|
@ -402,7 +380,10 @@ static int opal_flash_update(int op)
|
||||||
else
|
else
|
||||||
sg->next = NULL;
|
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 = (SG_LIST_VERSION << 56) |
|
||||||
(sg->num_entries * sizeof(struct opal_sg_entry) + 16);
|
(sg->num_entries * sizeof(struct opal_sg_entry) + 16);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче