Commit 046f93dc authored by David Kershner's avatar David Kershner Committed by Greg Kroah-Hartman

staging: unisys: visorbus: Replace parser_param_start with parser_name_get

Replace the general CONTROLVM string parser setup which only handled the
name string with a specific name string retrieval function.
Signed-off-by: default avatarBryan Thompson <bryan.thompson@unisys.com>
Signed-off-by: default avatarDavid Kershner <david.kershner@unisys.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 396e36c9
...@@ -352,45 +352,12 @@ parser_id_get(struct parser_context *ctx) ...@@ -352,45 +352,12 @@ parser_id_get(struct parser_context *ctx)
{ {
struct spar_controlvm_parameters_header *phdr = NULL; struct spar_controlvm_parameters_header *phdr = NULL;
if (!ctx)
return NULL_UUID_LE;
phdr = (struct spar_controlvm_parameters_header *)(ctx->data); phdr = (struct spar_controlvm_parameters_header *)(ctx->data);
return phdr->id; return phdr->id;
} }
/*
* Describes the state from the perspective of which controlvm messages have
* been received for a bus or device.
*/
enum PARSER_WHICH_STRING {
PARSERSTRING_NAME
};
static void
parser_param_start(struct parser_context *ctx,
enum PARSER_WHICH_STRING which_string)
{
struct spar_controlvm_parameters_header *phdr = NULL;
if (!ctx)
return;
phdr = (struct spar_controlvm_parameters_header *)(ctx->data);
switch (which_string) {
case PARSERSTRING_NAME:
ctx->curr = ctx->data + phdr->name_offset;
ctx->bytes_remaining = phdr->name_length;
break;
default:
break;
}
}
static void parser_done(struct parser_context *ctx) static void parser_done(struct parser_context *ctx)
{ {
if (!ctx)
return;
controlvm_payload_bytes_buffered -= ctx->param_bytes; controlvm_payload_bytes_buffered -= ctx->param_bytes;
kfree(ctx); kfree(ctx);
} }
...@@ -404,8 +371,6 @@ parser_string_get(struct parser_context *ctx) ...@@ -404,8 +371,6 @@ parser_string_get(struct parser_context *ctx)
void *value = NULL; void *value = NULL;
int i; int i;
if (!ctx)
return NULL;
pscan = ctx->curr; pscan = ctx->curr;
nscan = ctx->bytes_remaining; nscan = ctx->bytes_remaining;
if (nscan == 0) if (nscan == 0)
...@@ -428,6 +393,17 @@ parser_string_get(struct parser_context *ctx) ...@@ -428,6 +393,17 @@ parser_string_get(struct parser_context *ctx)
return value; return value;
} }
static void *
parser_name_get(struct parser_context *ctx)
{
struct spar_controlvm_parameters_header *phdr = NULL;
phdr = (struct spar_controlvm_parameters_header *)(ctx->data);
ctx->curr = ctx->data + phdr->name_offset;
ctx->bytes_remaining = phdr->name_length;
return parser_string_get(ctx);
}
struct visor_busdev { struct visor_busdev {
u32 bus_no; u32 bus_no;
u32 dev_no; u32 dev_no;
...@@ -850,9 +826,10 @@ bus_configure(struct controlvm_message *inmsg, ...@@ -850,9 +826,10 @@ bus_configure(struct controlvm_message *inmsg,
if (err) if (err)
goto err_respond; goto err_respond;
bus_info->partition_uuid = parser_id_get(parser_ctx); if (parser_ctx) {
parser_param_start(parser_ctx, PARSERSTRING_NAME); bus_info->partition_uuid = parser_id_get(parser_ctx);
bus_info->name = parser_string_get(parser_ctx); bus_info->name = parser_name_get(parser_ctx);
}
POSTCODE_LINUX(BUS_CONFIGURE_EXIT_PC, 0, bus_no, POSTCODE_LINUX(BUS_CONFIGURE_EXIT_PC, 0, bus_no,
DIAG_SEVERITY_PRINT); DIAG_SEVERITY_PRINT);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment