Lines Matching refs:msg
48 struct ipmi_smi_msg *msg);
583 struct ipmi_recv_msg *msg);
683 struct ipmi_recv_msg *msg, *msg2; in free_recv_msg_list() local
685 list_for_each_entry_safe(msg, msg2, q, link) { in free_recv_msg_list()
686 list_del(&msg->link); in free_recv_msg_list()
687 ipmi_free_recv_msg(msg); in free_recv_msg_list()
693 struct ipmi_smi_msg *msg, *msg2; in free_smi_msg_list() local
695 list_for_each_entry_safe(msg, msg2, q, link) { in free_smi_msg_list()
696 list_del(&msg->link); in free_smi_msg_list()
697 ipmi_free_smi_msg(msg); in free_smi_msg_list()
922 static int deliver_response(struct ipmi_smi *intf, struct ipmi_recv_msg *msg) in deliver_response() argument
926 if (!msg->user) { in deliver_response()
929 intf->null_user_handler(intf, msg); in deliver_response()
934 ipmi_free_recv_msg(msg); in deliver_response()
941 ipmi_free_recv_msg(msg); in deliver_response()
942 atomic_dec(&msg->user->nr_msgs); in deliver_response()
945 struct ipmi_user *user = acquire_ipmi_user(msg->user, &index); in deliver_response()
949 user->handler->ipmi_recv_hndl(msg, user->handler_data); in deliver_response()
953 ipmi_free_recv_msg(msg); in deliver_response()
962 struct ipmi_recv_msg *msg) in deliver_local_response() argument
964 if (deliver_response(intf, msg)) in deliver_local_response()
971 struct ipmi_recv_msg *msg, int err) in deliver_err_response() argument
973 msg->recv_type = IPMI_RESPONSE_RECV_TYPE; in deliver_err_response()
974 msg->msg_data[0] = err; in deliver_err_response()
975 msg->msg.netfn |= 1; /* Convert to a response. */ in deliver_err_response()
976 msg->msg.data_len = 1; in deliver_err_response()
977 msg->msg.data = msg->msg_data; in deliver_err_response()
978 deliver_local_response(intf, msg); in deliver_err_response()
1114 struct ipmi_recv_msg *msg = intf->seq_table[seq].recv_msg; in intf_find_seq() local
1116 if ((msg->addr.channel == channel) && (msg->msg.cmd == cmd) in intf_find_seq()
1117 && (msg->msg.netfn == netfn) in intf_find_seq()
1118 && (ipmi_addr_equal(addr, &msg->addr))) { in intf_find_seq()
1119 *recv_msg = msg; in intf_find_seq()
1168 struct ipmi_recv_msg *msg = NULL; in intf_err_seq() local
1184 msg = ent->recv_msg; in intf_err_seq()
1189 if (msg) in intf_err_seq()
1190 deliver_err_response(intf, msg, err); in intf_err_seq()
1592 struct ipmi_recv_msg *msg, *msg2; in ipmi_set_gets_events() local
1624 list_for_each_entry_safe(msg, msg2, &intf->waiting_events, link) in ipmi_set_gets_events()
1625 list_move_tail(&msg->link, &msgs); in ipmi_set_gets_events()
1635 list_for_each_entry_safe(msg, msg2, &msgs, link) { in ipmi_set_gets_events()
1636 msg->user = user; in ipmi_set_gets_events()
1638 deliver_local_response(intf, msg); in ipmi_set_gets_events()
1788 struct kernel_ipmi_msg *msg, in format_ipmb_msg() argument
1805 smi_msg->data[i+4] = (msg->netfn << 2) | (ipmb_addr->lun & 0x3); in format_ipmb_msg()
1809 smi_msg->data[i+8] = msg->cmd; in format_ipmb_msg()
1812 if (msg->data_len > 0) in format_ipmb_msg()
1813 memcpy(&smi_msg->data[i + 9], msg->data, msg->data_len); in format_ipmb_msg()
1814 smi_msg->data_size = msg->data_len + 9; in format_ipmb_msg()
1830 struct kernel_ipmi_msg *msg, in format_lan_msg() argument
1842 smi_msg->data[5] = (msg->netfn << 2) | (lan_addr->lun & 0x3); in format_lan_msg()
1846 smi_msg->data[9] = msg->cmd; in format_lan_msg()
1849 if (msg->data_len > 0) in format_lan_msg()
1850 memcpy(&smi_msg->data[10], msg->data, msg->data_len); in format_lan_msg()
1851 smi_msg->data_size = msg->data_len + 10; in format_lan_msg()
1901 static bool is_maintenance_mode_cmd(struct kernel_ipmi_msg *msg) in is_maintenance_mode_cmd() argument
1903 return (((msg->netfn == IPMI_NETFN_APP_REQUEST) in is_maintenance_mode_cmd()
1904 && ((msg->cmd == IPMI_COLD_RESET_CMD) in is_maintenance_mode_cmd()
1905 || (msg->cmd == IPMI_WARM_RESET_CMD))) in is_maintenance_mode_cmd()
1906 || (msg->netfn == IPMI_NETFN_FIRMWARE_REQUEST)); in is_maintenance_mode_cmd()
1912 struct kernel_ipmi_msg *msg, in i_ipmi_req_sysintf() argument
1920 if (msg->netfn & 1) in i_ipmi_req_sysintf()
1932 if ((msg->netfn == IPMI_NETFN_APP_REQUEST) in i_ipmi_req_sysintf()
1933 && ((msg->cmd == IPMI_SEND_MSG_CMD) in i_ipmi_req_sysintf()
1934 || (msg->cmd == IPMI_GET_MSG_CMD) in i_ipmi_req_sysintf()
1935 || (msg->cmd == IPMI_READ_EVENT_MSG_BUFFER_CMD))) { in i_ipmi_req_sysintf()
1944 if (is_maintenance_mode_cmd(msg)) { in i_ipmi_req_sysintf()
1959 if (msg->data_len + 2 > IPMI_MAX_MSG_LENGTH) { in i_ipmi_req_sysintf()
1964 smi_msg->data[0] = (msg->netfn << 2) | (smi_addr->lun & 0x3); in i_ipmi_req_sysintf()
1965 smi_msg->data[1] = msg->cmd; in i_ipmi_req_sysintf()
1968 if (msg->data_len > 0) in i_ipmi_req_sysintf()
1969 memcpy(&smi_msg->data[2], msg->data, msg->data_len); in i_ipmi_req_sysintf()
1970 smi_msg->data_size = msg->data_len + 2; in i_ipmi_req_sysintf()
1979 struct kernel_ipmi_msg *msg, in i_ipmi_req_ipmb() argument
2021 if ((msg->data_len + 10 + broadcast) > IPMI_MAX_MSG_LENGTH) { in i_ipmi_req_ipmb()
2034 if (recv_msg->msg.netfn & 0x1) { in i_ipmi_req_ipmb()
2040 format_ipmb_msg(smi_msg, msg, ipmb_addr, msgid, in i_ipmi_req_ipmb()
2055 if (is_maintenance_mode_cmd(msg)) in i_ipmi_req_ipmb()
2088 format_ipmb_msg(smi_msg, msg, ipmb_addr, in i_ipmi_req_ipmb()
2099 recv_msg->msg.data = recv_msg->msg_data; in i_ipmi_req_ipmb()
2100 recv_msg->msg.data_len = smi_msg->data_size; in i_ipmi_req_ipmb()
2120 struct kernel_ipmi_msg *msg, in i_ipmi_req_ipmb_direct() argument
2126 bool is_cmd = !(recv_msg->msg.netfn & 0x1); in i_ipmi_req_ipmb_direct()
2132 if (!is_cmd && msg->data_len < 1) { in i_ipmi_req_ipmb_direct()
2137 if ((msg->data_len + 4) > IPMI_MAX_MSG_LENGTH) { in i_ipmi_req_ipmb_direct()
2152 smi_msg->data[0] = msg->netfn << 2 | daddr->rs_lun; in i_ipmi_req_ipmb_direct()
2155 smi_msg->data[0] = msg->netfn << 2 | daddr->rq_lun; in i_ipmi_req_ipmb_direct()
2159 smi_msg->data[3] = msg->cmd; in i_ipmi_req_ipmb_direct()
2161 memcpy(smi_msg->data + 4, msg->data, msg->data_len); in i_ipmi_req_ipmb_direct()
2162 smi_msg->data_size = msg->data_len + 4; in i_ipmi_req_ipmb_direct()
2172 struct kernel_ipmi_msg *msg, in i_ipmi_req_lan() argument
2201 if ((msg->data_len + 12) > IPMI_MAX_MSG_LENGTH) { in i_ipmi_req_lan()
2214 if (recv_msg->msg.netfn & 0x1) { in i_ipmi_req_lan()
2220 format_lan_msg(smi_msg, msg, lan_addr, msgid, in i_ipmi_req_lan()
2259 format_lan_msg(smi_msg, msg, lan_addr, in i_ipmi_req_lan()
2269 recv_msg->msg.data = recv_msg->msg_data; in i_ipmi_req_lan()
2270 recv_msg->msg.data_len = smi_msg->data_size; in i_ipmi_req_lan()
2297 struct kernel_ipmi_msg *msg, in i_ipmi_request() argument
2357 recv_msg->msg = *msg; in i_ipmi_request()
2360 rv = i_ipmi_req_sysintf(intf, addr, msgid, msg, smi_msg, in i_ipmi_request()
2363 rv = i_ipmi_req_ipmb(intf, addr, msgid, msg, smi_msg, recv_msg, in i_ipmi_request()
2367 rv = i_ipmi_req_ipmb_direct(intf, addr, msgid, msg, smi_msg, in i_ipmi_request()
2370 rv = i_ipmi_req_lan(intf, addr, msgid, msg, smi_msg, recv_msg, in i_ipmi_request()
2412 struct kernel_ipmi_msg *msg, in ipmi_request_settime() argument
2434 msg, in ipmi_request_settime()
2451 struct kernel_ipmi_msg *msg, in ipmi_request_supply_msgs() argument
2473 msg, in ipmi_request_supply_msgs()
2488 struct ipmi_recv_msg *msg) in bmc_device_id_handler() argument
2492 if ((msg->addr.addr_type != IPMI_SYSTEM_INTERFACE_ADDR_TYPE) in bmc_device_id_handler()
2493 || (msg->msg.netfn != IPMI_NETFN_APP_RESPONSE) in bmc_device_id_handler()
2494 || (msg->msg.cmd != IPMI_GET_DEVICE_ID_CMD)) { in bmc_device_id_handler()
2497 msg->addr.addr_type, msg->msg.netfn, msg->msg.cmd); in bmc_device_id_handler()
2501 if (msg->msg.data[0]) { in bmc_device_id_handler()
2503 msg->msg.data[0]); in bmc_device_id_handler()
2508 rv = ipmi_demangle_device_id(msg->msg.netfn, msg->msg.cmd, in bmc_device_id_handler()
2509 msg->msg.data, msg->msg.data_len, &intf->bmc->fetch_id); in bmc_device_id_handler()
2513 intf->bmc->cc = msg->msg.data[0]; in bmc_device_id_handler()
2531 struct kernel_ipmi_msg msg; in send_get_device_id_cmd() local
2537 msg.netfn = IPMI_NETFN_APP_REQUEST; in send_get_device_id_cmd()
2538 msg.cmd = IPMI_GET_DEVICE_ID_CMD; in send_get_device_id_cmd()
2539 msg.data = NULL; in send_get_device_id_cmd()
2540 msg.data_len = 0; in send_get_device_id_cmd()
2546 &msg, in send_get_device_id_cmd()
3268 struct kernel_ipmi_msg msg; in send_guid_cmd() local
3275 msg.netfn = IPMI_NETFN_APP_REQUEST; in send_guid_cmd()
3276 msg.cmd = IPMI_GET_DEVICE_GUID_CMD; in send_guid_cmd()
3277 msg.data = NULL; in send_guid_cmd()
3278 msg.data_len = 0; in send_guid_cmd()
3283 &msg, in send_guid_cmd()
3293 static void guid_handler(struct ipmi_smi *intf, struct ipmi_recv_msg *msg) in guid_handler() argument
3297 if ((msg->addr.addr_type != IPMI_SYSTEM_INTERFACE_ADDR_TYPE) in guid_handler()
3298 || (msg->msg.netfn != IPMI_NETFN_APP_RESPONSE) in guid_handler()
3299 || (msg->msg.cmd != IPMI_GET_DEVICE_GUID_CMD)) in guid_handler()
3303 if (msg->msg.data[0] != 0) { in guid_handler()
3309 if (msg->msg.data_len < UUID_SIZE + 1) { in guid_handler()
3313 msg->msg.data_len, UUID_SIZE + 1); in guid_handler()
3317 import_guid(&bmc->fetch_guid, msg->msg.data + 1); in guid_handler()
3351 struct kernel_ipmi_msg msg; in send_channel_info_cmd() local
3359 msg.netfn = IPMI_NETFN_APP_REQUEST; in send_channel_info_cmd()
3360 msg.cmd = IPMI_GET_CHANNEL_INFO_CMD; in send_channel_info_cmd()
3361 msg.data = data; in send_channel_info_cmd()
3362 msg.data_len = 1; in send_channel_info_cmd()
3368 &msg, in send_channel_info_cmd()
3379 channel_handler(struct ipmi_smi *intf, struct ipmi_recv_msg *msg) in channel_handler() argument
3386 if ((msg->addr.addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE) in channel_handler()
3387 && (msg->msg.netfn == IPMI_NETFN_APP_RESPONSE) in channel_handler()
3388 && (msg->msg.cmd == IPMI_GET_CHANNEL_INFO_CMD)) { in channel_handler()
3390 if (msg->msg.data[0] != 0) { in channel_handler()
3392 if (msg->msg.data[0] == IPMI_INVALID_COMMAND_ERR) { in channel_handler()
3411 if (msg->msg.data_len < 4) { in channel_handler()
3417 chans[ch].medium = msg->msg.data[2] & 0x7f; in channel_handler()
3418 chans[ch].protocol = msg->msg.data[3] & 0x1f; in channel_handler()
3705 struct ipmi_smi_msg *msg, in deliver_smi_err_response() argument
3709 msg->rsp[0] = msg->data[0] | 4; in deliver_smi_err_response()
3710 msg->rsp[1] = msg->data[1]; in deliver_smi_err_response()
3711 msg->rsp[2] = err; in deliver_smi_err_response()
3712 msg->rsp_size = 3; in deliver_smi_err_response()
3715 rv = handle_one_recv_msg(intf, msg); in deliver_smi_err_response()
3717 ipmi_free_smi_msg(msg); in deliver_smi_err_response()
3724 struct ipmi_smi_msg *msg; in cleanup_smi_msgs() local
3748 msg = list_entry(entry, struct ipmi_smi_msg, link); in cleanup_smi_msgs()
3749 deliver_smi_err_response(intf, msg, IPMI_ERR_UNSPECIFIED); in cleanup_smi_msgs()
3812 struct ipmi_smi_msg *msg) in handle_ipmb_get_msg_rsp() argument
3821 if (msg->rsp_size < 11) { in handle_ipmb_get_msg_rsp()
3827 if (msg->rsp[2] != 0) { in handle_ipmb_get_msg_rsp()
3833 ipmb_addr.slave_addr = msg->rsp[6]; in handle_ipmb_get_msg_rsp()
3834 ipmb_addr.channel = msg->rsp[3] & 0x0f; in handle_ipmb_get_msg_rsp()
3835 ipmb_addr.lun = msg->rsp[7] & 3; in handle_ipmb_get_msg_rsp()
3842 msg->rsp[7] >> 2, in handle_ipmb_get_msg_rsp()
3843 msg->rsp[3] & 0x0f, in handle_ipmb_get_msg_rsp()
3844 msg->rsp[8], in handle_ipmb_get_msg_rsp()
3845 (msg->rsp[4] >> 2) & (~1), in handle_ipmb_get_msg_rsp()
3856 memcpy(recv_msg->msg_data, &msg->rsp[9], msg->rsp_size - 9); in handle_ipmb_get_msg_rsp()
3862 recv_msg->msg.netfn = msg->rsp[4] >> 2; in handle_ipmb_get_msg_rsp()
3863 recv_msg->msg.data = recv_msg->msg_data; in handle_ipmb_get_msg_rsp()
3864 recv_msg->msg.data_len = msg->rsp_size - 10; in handle_ipmb_get_msg_rsp()
3875 struct ipmi_smi_msg *msg) in handle_ipmb_get_msg_cmd() argument
3886 if (msg->rsp_size < 10) { in handle_ipmb_get_msg_cmd()
3892 if (msg->rsp[2] != 0) { in handle_ipmb_get_msg_cmd()
3897 netfn = msg->rsp[4] >> 2; in handle_ipmb_get_msg_cmd()
3898 cmd = msg->rsp[8]; in handle_ipmb_get_msg_cmd()
3899 chan = msg->rsp[3] & 0xf; in handle_ipmb_get_msg_cmd()
3914 msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2); in handle_ipmb_get_msg_cmd()
3915 msg->data[1] = IPMI_SEND_MSG_CMD; in handle_ipmb_get_msg_cmd()
3916 msg->data[2] = msg->rsp[3]; in handle_ipmb_get_msg_cmd()
3917 msg->data[3] = msg->rsp[6]; in handle_ipmb_get_msg_cmd()
3918 msg->data[4] = ((netfn + 1) << 2) | (msg->rsp[7] & 0x3); in handle_ipmb_get_msg_cmd()
3919 msg->data[5] = ipmb_checksum(&msg->data[3], 2); in handle_ipmb_get_msg_cmd()
3920 msg->data[6] = intf->addrinfo[msg->rsp[3] & 0xf].address; in handle_ipmb_get_msg_cmd()
3922 msg->data[7] = (msg->rsp[7] & 0xfc) | (msg->rsp[4] & 0x3); in handle_ipmb_get_msg_cmd()
3923 msg->data[8] = msg->rsp[8]; /* cmd */ in handle_ipmb_get_msg_cmd()
3924 msg->data[9] = IPMI_INVALID_CMD_COMPLETION_CODE; in handle_ipmb_get_msg_cmd()
3925 msg->data[10] = ipmb_checksum(&msg->data[6], 4); in handle_ipmb_get_msg_cmd()
3926 msg->data_size = 11; in handle_ipmb_get_msg_cmd()
3929 msg->data_size, msg->data); in handle_ipmb_get_msg_cmd()
3933 smi_send(intf, intf->handlers, msg, 0); in handle_ipmb_get_msg_cmd()
3956 ipmb_addr->slave_addr = msg->rsp[6]; in handle_ipmb_get_msg_cmd()
3957 ipmb_addr->lun = msg->rsp[7] & 3; in handle_ipmb_get_msg_cmd()
3958 ipmb_addr->channel = msg->rsp[3] & 0xf; in handle_ipmb_get_msg_cmd()
3966 recv_msg->msgid = msg->rsp[7] >> 2; in handle_ipmb_get_msg_cmd()
3967 recv_msg->msg.netfn = msg->rsp[4] >> 2; in handle_ipmb_get_msg_cmd()
3968 recv_msg->msg.cmd = msg->rsp[8]; in handle_ipmb_get_msg_cmd()
3969 recv_msg->msg.data = recv_msg->msg_data; in handle_ipmb_get_msg_cmd()
3975 recv_msg->msg.data_len = msg->rsp_size - 10; in handle_ipmb_get_msg_cmd()
3976 memcpy(recv_msg->msg_data, &msg->rsp[9], in handle_ipmb_get_msg_cmd()
3977 msg->rsp_size - 10); in handle_ipmb_get_msg_cmd()
3989 struct ipmi_smi_msg *msg) in handle_ipmb_direct_rcv_cmd() argument
3996 unsigned char netfn = msg->rsp[0] >> 2; in handle_ipmb_direct_rcv_cmd()
3997 unsigned char cmd = msg->rsp[3]; in handle_ipmb_direct_rcv_cmd()
4013 msg->data[0] = (netfn + 1) << 2; in handle_ipmb_direct_rcv_cmd()
4014 msg->data[0] |= msg->rsp[2] & 0x3; /* rqLUN */ in handle_ipmb_direct_rcv_cmd()
4015 msg->data[1] = msg->rsp[1]; /* Addr */ in handle_ipmb_direct_rcv_cmd()
4016 msg->data[2] = msg->rsp[2] & ~0x3; /* rqSeq */ in handle_ipmb_direct_rcv_cmd()
4017 msg->data[2] |= msg->rsp[0] & 0x3; /* rsLUN */ in handle_ipmb_direct_rcv_cmd()
4018 msg->data[3] = cmd; in handle_ipmb_direct_rcv_cmd()
4019 msg->data[4] = IPMI_INVALID_CMD_COMPLETION_CODE; in handle_ipmb_direct_rcv_cmd()
4020 msg->data_size = 5; in handle_ipmb_direct_rcv_cmd()
4024 smi_send(intf, intf->handlers, msg, 0); in handle_ipmb_direct_rcv_cmd()
4048 daddr->slave_addr = msg->rsp[1]; in handle_ipmb_direct_rcv_cmd()
4049 daddr->rs_lun = msg->rsp[0] & 3; in handle_ipmb_direct_rcv_cmd()
4050 daddr->rq_lun = msg->rsp[2] & 3; in handle_ipmb_direct_rcv_cmd()
4058 recv_msg->msgid = (msg->rsp[2] >> 2); in handle_ipmb_direct_rcv_cmd()
4059 recv_msg->msg.netfn = msg->rsp[0] >> 2; in handle_ipmb_direct_rcv_cmd()
4060 recv_msg->msg.cmd = msg->rsp[3]; in handle_ipmb_direct_rcv_cmd()
4061 recv_msg->msg.data = recv_msg->msg_data; in handle_ipmb_direct_rcv_cmd()
4063 recv_msg->msg.data_len = msg->rsp_size - 4; in handle_ipmb_direct_rcv_cmd()
4064 memcpy(recv_msg->msg_data, msg->rsp + 4, in handle_ipmb_direct_rcv_cmd()
4065 msg->rsp_size - 4); in handle_ipmb_direct_rcv_cmd()
4077 struct ipmi_smi_msg *msg) in handle_ipmb_direct_rcv_rsp() argument
4082 recv_msg = msg->user_data; in handle_ipmb_direct_rcv_rsp()
4090 recv_msg->msgid = msg->msgid; in handle_ipmb_direct_rcv_rsp()
4094 daddr->slave_addr = msg->rsp[1]; in handle_ipmb_direct_rcv_rsp()
4095 daddr->rq_lun = msg->rsp[0] & 3; in handle_ipmb_direct_rcv_rsp()
4096 daddr->rs_lun = msg->rsp[2] & 3; in handle_ipmb_direct_rcv_rsp()
4097 recv_msg->msg.netfn = msg->rsp[0] >> 2; in handle_ipmb_direct_rcv_rsp()
4098 recv_msg->msg.cmd = msg->rsp[3]; in handle_ipmb_direct_rcv_rsp()
4099 memcpy(recv_msg->msg_data, &msg->rsp[4], msg->rsp_size - 4); in handle_ipmb_direct_rcv_rsp()
4100 recv_msg->msg.data = recv_msg->msg_data; in handle_ipmb_direct_rcv_rsp()
4101 recv_msg->msg.data_len = msg->rsp_size - 4; in handle_ipmb_direct_rcv_rsp()
4108 struct ipmi_smi_msg *msg) in handle_lan_get_msg_rsp() argument
4118 if (msg->rsp_size < 13) { in handle_lan_get_msg_rsp()
4124 if (msg->rsp[2] != 0) { in handle_lan_get_msg_rsp()
4130 lan_addr.session_handle = msg->rsp[4]; in handle_lan_get_msg_rsp()
4131 lan_addr.remote_SWID = msg->rsp[8]; in handle_lan_get_msg_rsp()
4132 lan_addr.local_SWID = msg->rsp[5]; in handle_lan_get_msg_rsp()
4133 lan_addr.channel = msg->rsp[3] & 0x0f; in handle_lan_get_msg_rsp()
4134 lan_addr.privilege = msg->rsp[3] >> 4; in handle_lan_get_msg_rsp()
4135 lan_addr.lun = msg->rsp[9] & 3; in handle_lan_get_msg_rsp()
4142 msg->rsp[9] >> 2, in handle_lan_get_msg_rsp()
4143 msg->rsp[3] & 0x0f, in handle_lan_get_msg_rsp()
4144 msg->rsp[10], in handle_lan_get_msg_rsp()
4145 (msg->rsp[6] >> 2) & (~1), in handle_lan_get_msg_rsp()
4156 memcpy(recv_msg->msg_data, &msg->rsp[11], msg->rsp_size - 11); in handle_lan_get_msg_rsp()
4162 recv_msg->msg.netfn = msg->rsp[6] >> 2; in handle_lan_get_msg_rsp()
4163 recv_msg->msg.data = recv_msg->msg_data; in handle_lan_get_msg_rsp()
4164 recv_msg->msg.data_len = msg->rsp_size - 12; in handle_lan_get_msg_rsp()
4175 struct ipmi_smi_msg *msg) in handle_lan_get_msg_cmd() argument
4186 if (msg->rsp_size < 12) { in handle_lan_get_msg_cmd()
4192 if (msg->rsp[2] != 0) { in handle_lan_get_msg_cmd()
4197 netfn = msg->rsp[6] >> 2; in handle_lan_get_msg_cmd()
4198 cmd = msg->rsp[10]; in handle_lan_get_msg_cmd()
4199 chan = msg->rsp[3] & 0xf; in handle_lan_get_msg_cmd()
4232 lan_addr->session_handle = msg->rsp[4]; in handle_lan_get_msg_cmd()
4233 lan_addr->remote_SWID = msg->rsp[8]; in handle_lan_get_msg_cmd()
4234 lan_addr->local_SWID = msg->rsp[5]; in handle_lan_get_msg_cmd()
4235 lan_addr->lun = msg->rsp[9] & 3; in handle_lan_get_msg_cmd()
4236 lan_addr->channel = msg->rsp[3] & 0xf; in handle_lan_get_msg_cmd()
4237 lan_addr->privilege = msg->rsp[3] >> 4; in handle_lan_get_msg_cmd()
4245 recv_msg->msgid = msg->rsp[9] >> 2; in handle_lan_get_msg_cmd()
4246 recv_msg->msg.netfn = msg->rsp[6] >> 2; in handle_lan_get_msg_cmd()
4247 recv_msg->msg.cmd = msg->rsp[10]; in handle_lan_get_msg_cmd()
4248 recv_msg->msg.data = recv_msg->msg_data; in handle_lan_get_msg_cmd()
4254 recv_msg->msg.data_len = msg->rsp_size - 12; in handle_lan_get_msg_cmd()
4255 memcpy(recv_msg->msg_data, &msg->rsp[11], in handle_lan_get_msg_cmd()
4256 msg->rsp_size - 12); in handle_lan_get_msg_cmd()
4274 struct ipmi_smi_msg *msg) in handle_oem_get_msg_cmd() argument
4289 if (msg->rsp_size < 4) { in handle_oem_get_msg_cmd()
4295 if (msg->rsp[2] != 0) { in handle_oem_get_msg_cmd()
4304 netfn = msg->rsp[0] >> 2; in handle_oem_get_msg_cmd()
4305 cmd = msg->rsp[1]; in handle_oem_get_msg_cmd()
4306 chan = msg->rsp[3] & 0xf; in handle_oem_get_msg_cmd()
4348 smi_addr->lun = msg->rsp[0] & 3; in handle_oem_get_msg_cmd()
4353 recv_msg->msg.netfn = msg->rsp[0] >> 2; in handle_oem_get_msg_cmd()
4354 recv_msg->msg.cmd = msg->rsp[1]; in handle_oem_get_msg_cmd()
4355 recv_msg->msg.data = recv_msg->msg_data; in handle_oem_get_msg_cmd()
4361 recv_msg->msg.data_len = msg->rsp_size - 4; in handle_oem_get_msg_cmd()
4362 memcpy(recv_msg->msg_data, &msg->rsp[4], in handle_oem_get_msg_cmd()
4363 msg->rsp_size - 4); in handle_oem_get_msg_cmd()
4375 struct ipmi_smi_msg *msg) in copy_event_into_recv_msg() argument
4383 smi_addr->lun = msg->rsp[0] & 3; in copy_event_into_recv_msg()
4385 recv_msg->msg.netfn = msg->rsp[0] >> 2; in copy_event_into_recv_msg()
4386 recv_msg->msg.cmd = msg->rsp[1]; in copy_event_into_recv_msg()
4387 memcpy(recv_msg->msg_data, &msg->rsp[3], msg->rsp_size - 3); in copy_event_into_recv_msg()
4388 recv_msg->msg.data = recv_msg->msg_data; in copy_event_into_recv_msg()
4389 recv_msg->msg.data_len = msg->rsp_size - 3; in copy_event_into_recv_msg()
4393 struct ipmi_smi_msg *msg) in handle_read_event_rsp() argument
4401 if (msg->rsp_size < 19) { in handle_read_event_rsp()
4407 if (msg->rsp[2] != 0) { in handle_read_event_rsp()
4446 copy_event_into_recv_msg(recv_msg, msg); in handle_read_event_rsp()
4475 copy_event_into_recv_msg(recv_msg, msg); in handle_read_event_rsp()
4495 struct ipmi_smi_msg *msg) in handle_bmc_rsp() argument
4500 recv_msg = msg->user_data; in handle_bmc_rsp()
4508 recv_msg->msgid = msg->msgid; in handle_bmc_rsp()
4513 smi_addr->lun = msg->rsp[0] & 3; in handle_bmc_rsp()
4514 recv_msg->msg.netfn = msg->rsp[0] >> 2; in handle_bmc_rsp()
4515 recv_msg->msg.cmd = msg->rsp[1]; in handle_bmc_rsp()
4516 memcpy(recv_msg->msg_data, &msg->rsp[2], msg->rsp_size - 2); in handle_bmc_rsp()
4517 recv_msg->msg.data = recv_msg->msg_data; in handle_bmc_rsp()
4518 recv_msg->msg.data_len = msg->rsp_size - 2; in handle_bmc_rsp()
4530 struct ipmi_smi_msg *msg) in handle_one_recv_msg() argument
4535 bool is_cmd = !((msg->rsp[0] >> 2) & 1); in handle_one_recv_msg()
4537 dev_dbg(intf->si_dev, "Recv: %*ph\n", msg->rsp_size, msg->rsp); in handle_one_recv_msg()
4539 if (msg->rsp_size < 2) { in handle_one_recv_msg()
4543 (msg->data[0] >> 2) | 1, msg->data[1], msg->rsp_size); in handle_one_recv_msg()
4547 msg->rsp[0] = msg->data[0] | (1 << 2); in handle_one_recv_msg()
4548 msg->rsp[1] = msg->data[1]; in handle_one_recv_msg()
4549 msg->rsp[2] = IPMI_ERR_UNSPECIFIED; in handle_one_recv_msg()
4550 msg->rsp_size = 3; in handle_one_recv_msg()
4551 } else if (msg->type == IPMI_SMI_MSG_TYPE_IPMB_DIRECT) { in handle_one_recv_msg()
4553 if (is_cmd && (msg->rsp_size < 4)) { in handle_one_recv_msg()
4557 if (!is_cmd && (msg->rsp_size < 5)) { in handle_one_recv_msg()
4560 msg->rsp[0] = msg->data[0] & 0xfc; /* NetFN */ in handle_one_recv_msg()
4561 msg->rsp[0] |= (1 << 2); /* Make it a response */ in handle_one_recv_msg()
4562 msg->rsp[0] |= msg->data[2] & 3; /* rqLUN */ in handle_one_recv_msg()
4563 msg->rsp[1] = msg->data[1]; /* Addr */ in handle_one_recv_msg()
4564 msg->rsp[2] = msg->data[2] & 0xfc; /* rqSeq */ in handle_one_recv_msg()
4565 msg->rsp[2] |= msg->data[0] & 0x3; /* rsLUN */ in handle_one_recv_msg()
4566 msg->rsp[3] = msg->data[3]; /* Cmd */ in handle_one_recv_msg()
4567 msg->rsp[4] = IPMI_ERR_UNSPECIFIED; in handle_one_recv_msg()
4568 msg->rsp_size = 5; in handle_one_recv_msg()
4570 } else if ((msg->data_size >= 2) in handle_one_recv_msg()
4571 && (msg->data[0] == (IPMI_NETFN_APP_REQUEST << 2)) in handle_one_recv_msg()
4572 && (msg->data[1] == IPMI_SEND_MSG_CMD) in handle_one_recv_msg()
4573 && (msg->user_data == NULL)) { in handle_one_recv_msg()
4591 if ((msg->rsp_size >= 3) && (msg->rsp[2] != 0) in handle_one_recv_msg()
4592 && (msg->rsp[2] != IPMI_NODE_BUSY_ERR) in handle_one_recv_msg()
4593 && (msg->rsp[2] != IPMI_LOST_ARBITRATION_ERR) in handle_one_recv_msg()
4594 && (msg->rsp[2] != IPMI_BUS_ERR) in handle_one_recv_msg()
4595 && (msg->rsp[2] != IPMI_NAK_ON_WRITE_ERR)) { in handle_one_recv_msg()
4596 int ch = msg->rsp[3] & 0xf; in handle_one_recv_msg()
4607 intf_err_seq(intf, msg->msgid, msg->rsp[2]); in handle_one_recv_msg()
4610 intf_start_seq_timer(intf, msg->msgid); in handle_one_recv_msg()
4613 } else if (((msg->rsp[0] >> 2) != ((msg->data[0] >> 2) | 1)) in handle_one_recv_msg()
4614 || (msg->rsp[1] != msg->data[1])) { in handle_one_recv_msg()
4621 (msg->data[0] >> 2) | 1, msg->data[1], in handle_one_recv_msg()
4622 msg->rsp[0] >> 2, msg->rsp[1]); in handle_one_recv_msg()
4627 if (msg->type == IPMI_SMI_MSG_TYPE_IPMB_DIRECT) { in handle_one_recv_msg()
4628 if ((msg->data[0] >> 2) & 1) { in handle_one_recv_msg()
4631 cc = msg->rsp[4]; in handle_one_recv_msg()
4635 requeue = handle_ipmb_direct_rcv_cmd(intf, msg); in handle_one_recv_msg()
4637 requeue = handle_ipmb_direct_rcv_rsp(intf, msg); in handle_one_recv_msg()
4638 } else if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2)) in handle_one_recv_msg()
4639 && (msg->rsp[1] == IPMI_SEND_MSG_CMD) in handle_one_recv_msg()
4640 && (msg->user_data != NULL)) { in handle_one_recv_msg()
4647 chan = msg->data[2] & 0x0f; in handle_one_recv_msg()
4651 cc = msg->rsp[2]; in handle_one_recv_msg()
4654 recv_msg = msg->user_data; in handle_one_recv_msg()
4661 recv_msg->msg.data = recv_msg->msg_data; in handle_one_recv_msg()
4663 recv_msg->msg.data_len = 1; in handle_one_recv_msg()
4665 } else if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2)) in handle_one_recv_msg()
4666 && (msg->rsp[1] == IPMI_GET_MSG_CMD)) { in handle_one_recv_msg()
4670 chan = msg->rsp[3] & 0xf; in handle_one_recv_msg()
4692 if (msg->rsp[4] & 0x04) { in handle_one_recv_msg()
4697 requeue = handle_ipmb_get_msg_rsp(intf, msg); in handle_one_recv_msg()
4703 requeue = handle_ipmb_get_msg_cmd(intf, msg); in handle_one_recv_msg()
4709 if (msg->rsp[6] & 0x04) { in handle_one_recv_msg()
4714 requeue = handle_lan_get_msg_rsp(intf, msg); in handle_one_recv_msg()
4720 requeue = handle_lan_get_msg_cmd(intf, msg); in handle_one_recv_msg()
4730 requeue = handle_oem_get_msg_cmd(intf, msg); in handle_one_recv_msg()
4740 } else if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2)) in handle_one_recv_msg()
4741 && (msg->rsp[1] == IPMI_READ_EVENT_MSG_BUFFER_CMD)) { in handle_one_recv_msg()
4743 requeue = handle_read_event_rsp(intf, msg); in handle_one_recv_msg()
4746 requeue = handle_bmc_rsp(intf, msg); in handle_one_recv_msg()
4861 struct ipmi_smi_msg *msg) in ipmi_smi_msg_received() argument
4872 list_add_tail(&msg->link, &intf->waiting_rcv_msgs); in ipmi_smi_msg_received()
4883 if (msg == intf->curr_msg) in ipmi_smi_msg_received()
4917 memcpy(smi_msg->data, recv_msg->msg.data, recv_msg->msg.data_len); in smi_from_recv_msg()
4918 smi_msg->data_size = recv_msg->msg.data_len; in smi_from_recv_msg()
4933 struct ipmi_recv_msg *msg; in check_msg_timeout() local
4951 msg = ent->recv_msg; in check_msg_timeout()
4952 list_add_tail(&msg->link, timeouts); in check_msg_timeout()
5012 struct ipmi_recv_msg *msg, *msg2; in ipmi_timeout_handler() local
5044 list_for_each_entry_safe(msg, msg2, &timeouts, link) in ipmi_timeout_handler()
5045 deliver_err_response(intf, msg, IPMI_TIMEOUT_COMPLETION_CODE); in ipmi_timeout_handler()
5127 static void free_smi_msg(struct ipmi_smi_msg *msg) in free_smi_msg() argument
5132 kfree(msg); in free_smi_msg()
5149 static void free_recv_msg(struct ipmi_recv_msg *msg) in free_recv_msg() argument
5154 kfree(msg); in free_recv_msg()
5170 void ipmi_free_recv_msg(struct ipmi_recv_msg *msg) in ipmi_free_recv_msg() argument
5172 if (msg->user && !oops_in_progress) in ipmi_free_recv_msg()
5173 kref_put(&msg->user->refcount, free_user); in ipmi_free_recv_msg()
5174 msg->done(msg); in ipmi_free_recv_msg()
5180 static void dummy_smi_done_handler(struct ipmi_smi_msg *msg) in dummy_smi_done_handler() argument
5185 static void dummy_recv_done_handler(struct ipmi_recv_msg *msg) in dummy_recv_done_handler() argument
5195 struct kernel_ipmi_msg *msg) in ipmi_panic_request_and_wait() argument
5208 msg, in ipmi_panic_request_and_wait()
5226 struct ipmi_recv_msg *msg) in event_receiver_fetcher() argument
5228 if ((msg->addr.addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE) in event_receiver_fetcher()
5229 && (msg->msg.netfn == IPMI_NETFN_SENSOR_EVENT_RESPONSE) in event_receiver_fetcher()
5230 && (msg->msg.cmd == IPMI_GET_EVENT_RECEIVER_CMD) in event_receiver_fetcher()
5231 && (msg->msg.data[0] == IPMI_CC_NO_ERROR)) { in event_receiver_fetcher()
5233 intf->event_receiver = msg->msg.data[1]; in event_receiver_fetcher()
5234 intf->event_receiver_lun = msg->msg.data[2] & 0x3; in event_receiver_fetcher()
5238 static void device_id_fetcher(struct ipmi_smi *intf, struct ipmi_recv_msg *msg) in device_id_fetcher() argument
5240 if ((msg->addr.addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE) in device_id_fetcher()
5241 && (msg->msg.netfn == IPMI_NETFN_APP_RESPONSE) in device_id_fetcher()
5242 && (msg->msg.cmd == IPMI_GET_DEVICE_ID_CMD) in device_id_fetcher()
5243 && (msg->msg.data[0] == IPMI_CC_NO_ERROR)) { in device_id_fetcher()
5248 intf->local_sel_device = (msg->msg.data[6] >> 2) & 1; in device_id_fetcher()
5249 intf->local_event_generator = (msg->msg.data[6] >> 5) & 1; in device_id_fetcher()
5255 struct kernel_ipmi_msg msg; in send_panic_events() local
5272 msg.netfn = 0x04; /* Sensor or Event. */ in send_panic_events()
5273 msg.cmd = 2; /* Platform event command. */ in send_panic_events()
5274 msg.data = data; in send_panic_events()
5275 msg.data_len = 8; in send_panic_events()
5293 ipmi_panic_request_and_wait(intf, &addr, &msg); in send_panic_events()
5324 msg.netfn = IPMI_NETFN_APP_REQUEST; in send_panic_events()
5325 msg.cmd = IPMI_GET_DEVICE_ID_CMD; in send_panic_events()
5326 msg.data = NULL; in send_panic_events()
5327 msg.data_len = 0; in send_panic_events()
5329 ipmi_panic_request_and_wait(intf, &addr, &msg); in send_panic_events()
5333 msg.netfn = IPMI_NETFN_SENSOR_EVENT_REQUEST; in send_panic_events()
5334 msg.cmd = IPMI_GET_EVENT_RECEIVER_CMD; in send_panic_events()
5335 msg.data = NULL; in send_panic_events()
5336 msg.data_len = 0; in send_panic_events()
5338 ipmi_panic_request_and_wait(intf, &addr, &msg); in send_panic_events()
5372 msg.netfn = IPMI_NETFN_STORAGE_REQUEST; /* Storage. */ in send_panic_events()
5373 msg.cmd = IPMI_ADD_SEL_ENTRY_CMD; in send_panic_events()
5374 msg.data = data; in send_panic_events()
5375 msg.data_len = 16; in send_panic_events()
5390 ipmi_panic_request_and_wait(intf, &addr, &msg); in send_panic_events()