diff options
Diffstat (limited to 'drivers/misc/mei/init.c')
-rw-r--r-- | drivers/misc/mei/init.c | 78 |
1 files changed, 34 insertions, 44 deletions
diff --git a/drivers/misc/mei/init.c b/drivers/misc/mei/init.c index 4fcb0bb2c9f0..02784af1d1a1 100644 --- a/drivers/misc/mei/init.c +++ b/drivers/misc/mei/init.c | |||
@@ -43,6 +43,7 @@ const char *mei_dev_state_str(int state) | |||
43 | } | 43 | } |
44 | 44 | ||
45 | 45 | ||
46 | |||
46 | /** | 47 | /** |
47 | * mei_io_list_flush - removes list entry belonging to cl. | 48 | * mei_io_list_flush - removes list entry belonging to cl. |
48 | * | 49 | * |
@@ -331,25 +332,20 @@ void mei_reset(struct mei_device *dev, int interrupts_enabled) | |||
331 | void mei_host_start_message(struct mei_device *dev) | 332 | void mei_host_start_message(struct mei_device *dev) |
332 | { | 333 | { |
333 | struct mei_msg_hdr *mei_hdr; | 334 | struct mei_msg_hdr *mei_hdr; |
334 | struct hbm_host_version_request *host_start_req; | 335 | struct hbm_host_version_request *start_req; |
336 | const size_t len = sizeof(struct hbm_host_version_request); | ||
337 | |||
338 | mei_hdr = mei_hbm_hdr(&dev->wr_msg_buf[0], len); | ||
335 | 339 | ||
336 | /* host start message */ | 340 | /* host start message */ |
337 | mei_hdr = (struct mei_msg_hdr *) &dev->wr_msg_buf[0]; | 341 | start_req = (struct hbm_host_version_request *)&dev->wr_msg_buf[1]; |
338 | mei_hdr->host_addr = 0; | 342 | memset(start_req, 0, len); |
339 | mei_hdr->me_addr = 0; | 343 | start_req->hbm_cmd = HOST_START_REQ_CMD; |
340 | mei_hdr->length = sizeof(struct hbm_host_version_request); | 344 | start_req->host_version.major_version = HBM_MAJOR_VERSION; |
341 | mei_hdr->msg_complete = 1; | 345 | start_req->host_version.minor_version = HBM_MINOR_VERSION; |
342 | mei_hdr->reserved = 0; | 346 | |
343 | |||
344 | host_start_req = | ||
345 | (struct hbm_host_version_request *) &dev->wr_msg_buf[1]; | ||
346 | memset(host_start_req, 0, sizeof(struct hbm_host_version_request)); | ||
347 | host_start_req->hbm_cmd = HOST_START_REQ_CMD; | ||
348 | host_start_req->host_version.major_version = HBM_MAJOR_VERSION; | ||
349 | host_start_req->host_version.minor_version = HBM_MINOR_VERSION; | ||
350 | dev->recvd_msg = false; | 347 | dev->recvd_msg = false; |
351 | if (mei_write_message(dev, mei_hdr, (unsigned char *)host_start_req, | 348 | if (mei_write_message(dev, mei_hdr, (unsigned char *)start_req, len)) { |
352 | mei_hdr->length)) { | ||
353 | dev_dbg(&dev->pdev->dev, "write send version message to FW fail.\n"); | 349 | dev_dbg(&dev->pdev->dev, "write send version message to FW fail.\n"); |
354 | dev->dev_state = MEI_DEV_RESETING; | 350 | dev->dev_state = MEI_DEV_RESETING; |
355 | mei_reset(dev, 1); | 351 | mei_reset(dev, 1); |
@@ -369,20 +365,16 @@ void mei_host_start_message(struct mei_device *dev) | |||
369 | void mei_host_enum_clients_message(struct mei_device *dev) | 365 | void mei_host_enum_clients_message(struct mei_device *dev) |
370 | { | 366 | { |
371 | struct mei_msg_hdr *mei_hdr; | 367 | struct mei_msg_hdr *mei_hdr; |
372 | struct hbm_host_enum_request *host_enum_req; | 368 | struct hbm_host_enum_request *enum_req; |
373 | mei_hdr = (struct mei_msg_hdr *) &dev->wr_msg_buf[0]; | 369 | const size_t len = sizeof(struct hbm_host_enum_request); |
374 | /* enumerate clients */ | 370 | /* enumerate clients */ |
375 | mei_hdr->host_addr = 0; | 371 | mei_hdr = mei_hbm_hdr(&dev->wr_msg_buf[0], len); |
376 | mei_hdr->me_addr = 0; | 372 | |
377 | mei_hdr->length = sizeof(struct hbm_host_enum_request); | 373 | enum_req = (struct hbm_host_enum_request *) &dev->wr_msg_buf[1]; |
378 | mei_hdr->msg_complete = 1; | 374 | memset(enum_req, 0, sizeof(struct hbm_host_enum_request)); |
379 | mei_hdr->reserved = 0; | 375 | enum_req->hbm_cmd = HOST_ENUM_REQ_CMD; |
380 | 376 | ||
381 | host_enum_req = (struct hbm_host_enum_request *) &dev->wr_msg_buf[1]; | 377 | if (mei_write_message(dev, mei_hdr, (unsigned char *)enum_req, len)) { |
382 | memset(host_enum_req, 0, sizeof(struct hbm_host_enum_request)); | ||
383 | host_enum_req->hbm_cmd = HOST_ENUM_REQ_CMD; | ||
384 | if (mei_write_message(dev, mei_hdr, (unsigned char *)host_enum_req, | ||
385 | mei_hdr->length)) { | ||
386 | dev->dev_state = MEI_DEV_RESETING; | 378 | dev->dev_state = MEI_DEV_RESETING; |
387 | dev_dbg(&dev->pdev->dev, "write send enumeration request message to FW fail.\n"); | 379 | dev_dbg(&dev->pdev->dev, "write send enumeration request message to FW fail.\n"); |
388 | mei_reset(dev, 1); | 380 | mei_reset(dev, 1); |
@@ -443,33 +435,31 @@ void mei_allocate_me_clients_storage(struct mei_device *dev) | |||
443 | */ | 435 | */ |
444 | int mei_host_client_properties(struct mei_device *dev) | 436 | int mei_host_client_properties(struct mei_device *dev) |
445 | { | 437 | { |
446 | struct mei_msg_hdr *mei_header; | 438 | |
447 | struct hbm_props_request *host_cli_req; | 439 | struct mei_msg_hdr *mei_hdr; |
440 | struct hbm_props_request *prop_req; | ||
441 | const size_t len = sizeof(struct hbm_props_request); | ||
442 | |||
448 | int b; | 443 | int b; |
449 | u8 client_num = dev->me_client_presentation_num; | 444 | u8 client_num = dev->me_client_presentation_num; |
450 | 445 | ||
446 | prop_req = (struct hbm_props_request *)&dev->wr_msg_buf[1]; | ||
447 | |||
451 | b = dev->me_client_index; | 448 | b = dev->me_client_index; |
452 | b = find_next_bit(dev->me_clients_map, MEI_CLIENTS_MAX, b); | 449 | b = find_next_bit(dev->me_clients_map, MEI_CLIENTS_MAX, b); |
453 | if (b < MEI_CLIENTS_MAX) { | 450 | if (b < MEI_CLIENTS_MAX) { |
454 | dev->me_clients[client_num].client_id = b; | 451 | dev->me_clients[client_num].client_id = b; |
455 | dev->me_clients[client_num].mei_flow_ctrl_creds = 0; | 452 | dev->me_clients[client_num].mei_flow_ctrl_creds = 0; |
456 | mei_header = (struct mei_msg_hdr *)&dev->wr_msg_buf[0]; | 453 | mei_hdr = mei_hbm_hdr(&dev->wr_msg_buf[0], len); |
457 | mei_header->host_addr = 0; | ||
458 | mei_header->me_addr = 0; | ||
459 | mei_header->length = sizeof(struct hbm_props_request); | ||
460 | mei_header->msg_complete = 1; | ||
461 | mei_header->reserved = 0; | ||
462 | 454 | ||
463 | host_cli_req = (struct hbm_props_request *)&dev->wr_msg_buf[1]; | ||
464 | 455 | ||
465 | memset(host_cli_req, 0, sizeof(struct hbm_props_request)); | 456 | memset(prop_req, 0, sizeof(struct hbm_props_request)); |
466 | 457 | ||
467 | host_cli_req->hbm_cmd = HOST_CLIENT_PROPERTIES_REQ_CMD; | 458 | prop_req->hbm_cmd = HOST_CLIENT_PROPERTIES_REQ_CMD; |
468 | host_cli_req->address = b; | 459 | prop_req->address = b; |
469 | 460 | ||
470 | if (mei_write_message(dev, mei_header, | 461 | if (mei_write_message(dev, mei_hdr, |
471 | (unsigned char *)host_cli_req, | 462 | (unsigned char *)prop_req, len)) { |
472 | mei_header->length)) { | ||
473 | dev->dev_state = MEI_DEV_RESETING; | 463 | dev->dev_state = MEI_DEV_RESETING; |
474 | dev_dbg(&dev->pdev->dev, "write send enumeration request message to FW fail.\n"); | 464 | dev_dbg(&dev->pdev->dev, "write send enumeration request message to FW fail.\n"); |
475 | mei_reset(dev, 1); | 465 | mei_reset(dev, 1); |