mei: streamline amthif write complete function
Rename the function mei_amthif_irq_process_completed to mei_amthif_irq_write_complete Remove cl from the parameter list as it can be extracted from cb block. Extract the common flow from if statements and document the logic properly Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
		
							parent
							
								
									ea3b5fb710
								
							
						
					
					
						commit
						24c656e55f
					
				| @ -431,74 +431,64 @@ unsigned int mei_amthif_poll(struct mei_device *dev, | ||||
|  * | ||||
|  * returns 0, OK; otherwise, error. | ||||
|  */ | ||||
| int mei_amthif_irq_process_completed(struct mei_device *dev, s32 *slots, | ||||
| 			struct mei_cl_cb *cb_pos, | ||||
| 			struct mei_cl *cl, | ||||
| 			struct mei_cl_cb *cmpl_list) | ||||
| int mei_amthif_irq_write_complete(struct mei_device *dev, s32 *slots, | ||||
| 			struct mei_cl_cb *cb, struct mei_cl_cb *cmpl_list) | ||||
| { | ||||
| 	struct mei_msg_hdr *mei_hdr; | ||||
| 	struct mei_cl *cl = cb->cl; | ||||
| 	size_t len = dev->iamthif_msg_buf_size - dev->iamthif_msg_buf_index; | ||||
| 	size_t msg_slots = mei_data2slots(len); | ||||
| 
 | ||||
| 	if ((*slots * sizeof(u32)) >= (sizeof(struct mei_msg_hdr) + | ||||
| 			dev->iamthif_msg_buf_size - | ||||
| 			dev->iamthif_msg_buf_index)) { | ||||
| 		mei_hdr = (struct mei_msg_hdr *) &dev->wr_msg_buf[0]; | ||||
| 		mei_hdr->host_addr = cl->host_client_id; | ||||
| 		mei_hdr->me_addr = cl->me_client_id; | ||||
| 		mei_hdr->length = dev->iamthif_msg_buf_size - | ||||
| 			dev->iamthif_msg_buf_index; | ||||
| 	mei_hdr = (struct mei_msg_hdr *)&dev->wr_msg_buf[0]; | ||||
| 	mei_hdr->host_addr = cl->host_client_id; | ||||
| 	mei_hdr->me_addr = cl->me_client_id; | ||||
| 	mei_hdr->reserved = 0; | ||||
| 
 | ||||
| 	if (*slots >= msg_slots) { | ||||
| 		mei_hdr->length = len; | ||||
| 		mei_hdr->msg_complete = 1; | ||||
| 		mei_hdr->reserved = 0; | ||||
| 	/* Split the message only if we can write the whole host buffer */ | ||||
| 	} else if (*slots == dev->hbuf_depth) { | ||||
| 		msg_slots = *slots; | ||||
| 		len = (*slots * sizeof(u32)) - sizeof(struct mei_msg_hdr); | ||||
| 		mei_hdr->length = len; | ||||
| 		mei_hdr->msg_complete = 0; | ||||
| 	} else { | ||||
| 		/* wait for next time the host buffer is empty */ | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 		*slots -= mei_data2slots(mei_hdr->length); | ||||
| 	dev_dbg(&dev->pdev->dev, "msg: len = %d complete = %d\n", | ||||
| 			mei_hdr->length, mei_hdr->msg_complete); | ||||
| 
 | ||||
| 		if (mei_write_message(dev, mei_hdr, | ||||
| 					(dev->iamthif_msg_buf + | ||||
| 					dev->iamthif_msg_buf_index), | ||||
| 					mei_hdr->length)) { | ||||
| 	*slots -=  msg_slots; | ||||
| 	if (mei_write_message(dev, mei_hdr, | ||||
| 		dev->iamthif_msg_buf + dev->iamthif_msg_buf_index, | ||||
| 		mei_hdr->length)) { | ||||
| 			dev->iamthif_state = MEI_IAMTHIF_IDLE; | ||||
| 			cl->status = -ENODEV; | ||||
| 			list_del(&cb_pos->list); | ||||
| 			list_del(&cb->list); | ||||
| 			return -ENODEV; | ||||
| 		} else { | ||||
| 			if (mei_flow_ctrl_reduce(dev, cl)) | ||||
| 				return -ENODEV; | ||||
| 			dev->iamthif_msg_buf_index += mei_hdr->length; | ||||
| 			cb_pos->buf_idx = dev->iamthif_msg_buf_index; | ||||
| 			cl->status = 0; | ||||
| 			dev->iamthif_state = MEI_IAMTHIF_FLOW_CONTROL; | ||||
| 			dev->iamthif_flow_control_pending = true; | ||||
| 			/* save iamthif cb sent to amthi client */ | ||||
| 			dev->iamthif_current_cb = cb_pos; | ||||
| 			list_move_tail(&cb_pos->list, | ||||
| 					&dev->write_waiting_list.list); | ||||
| 
 | ||||
| 		} | ||||
| 	} else if (*slots == dev->hbuf_depth) { | ||||
| 		/* buffer is still empty */ | ||||
| 		mei_hdr = (struct mei_msg_hdr *) &dev->wr_msg_buf[0]; | ||||
| 		mei_hdr->host_addr = cl->host_client_id; | ||||
| 		mei_hdr->me_addr = cl->me_client_id; | ||||
| 		mei_hdr->length = | ||||
| 			(*slots * sizeof(u32)) - sizeof(struct mei_msg_hdr); | ||||
| 		mei_hdr->msg_complete = 0; | ||||
| 		mei_hdr->reserved = 0; | ||||
| 
 | ||||
| 		*slots -= mei_data2slots(mei_hdr->length); | ||||
| 
 | ||||
| 		if (mei_write_message(dev, mei_hdr, | ||||
| 					(dev->iamthif_msg_buf + | ||||
| 					dev->iamthif_msg_buf_index), | ||||
| 					mei_hdr->length)) { | ||||
| 			cl->status = -ENODEV; | ||||
| 			list_del(&cb_pos->list); | ||||
| 		} else { | ||||
| 			dev->iamthif_msg_buf_index += mei_hdr->length; | ||||
| 		} | ||||
| 		return -EMSGSIZE; | ||||
| 	} else { | ||||
| 		return -EBADMSG; | ||||
| 	} | ||||
| 
 | ||||
| 	if (mei_flow_ctrl_reduce(dev, cl)) | ||||
| 		return -ENODEV; | ||||
| 
 | ||||
| 	dev->iamthif_msg_buf_index += mei_hdr->length; | ||||
| 	cl->status = 0; | ||||
| 
 | ||||
| 	if (mei_hdr->msg_complete) { | ||||
| 		dev->iamthif_state = MEI_IAMTHIF_FLOW_CONTROL; | ||||
| 		dev->iamthif_flow_control_pending = true; | ||||
| 
 | ||||
| 		/* save iamthif cb sent to amthi client */ | ||||
| 		cb->buf_idx = dev->iamthif_msg_buf_index; | ||||
| 		dev->iamthif_current_cb = cb; | ||||
| 
 | ||||
| 		list_move_tail(&cb->list, &dev->write_waiting_list.list); | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -1046,8 +1046,8 @@ static int mei_irq_thread_write_handler(struct mei_cl_cb *cmpl_list, | ||||
| 					cl->host_client_id); | ||||
| 				continue; | ||||
| 			} | ||||
| 			ret = mei_amthif_irq_process_completed(dev, slots, pos, | ||||
| 								cl, cmpl_list); | ||||
| 			ret = mei_amthif_irq_write_complete(dev, slots, | ||||
| 							pos, cmpl_list); | ||||
| 			if (ret) | ||||
| 				return ret; | ||||
| 
 | ||||
|  | ||||
| @ -407,10 +407,8 @@ void mei_amthif_run_next_cmd(struct mei_device *dev); | ||||
| int mei_amthif_read_message(struct mei_cl_cb *complete_list, | ||||
| 		struct mei_device *dev, struct mei_msg_hdr *mei_hdr); | ||||
| 
 | ||||
| int mei_amthif_irq_process_completed(struct mei_device *dev, s32 *slots, | ||||
| 			struct mei_cl_cb *cb_pos, | ||||
| 			struct mei_cl *cl, | ||||
| 			struct mei_cl_cb *cmpl_list); | ||||
| int mei_amthif_irq_write_complete(struct mei_device *dev, s32 *slots, | ||||
| 			struct mei_cl_cb *cb, struct mei_cl_cb *cmpl_list); | ||||
| 
 | ||||
| void mei_amthif_complete(struct mei_device *dev, struct mei_cl_cb *cb); | ||||
| int mei_amthif_irq_read_message(struct mei_cl_cb *complete_list, | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user