Lines Matching refs:msg
47 struct ipmi_smi_msg *msg);
562 struct ipmi_recv_msg *msg);
681 struct ipmi_recv_msg *msg, *msg2;
683 list_for_each_entry_safe(msg, msg2, q, link) {
684 list_del(&msg->link);
685 ipmi_free_recv_msg(msg);
691 struct ipmi_smi_msg *msg, *msg2;
693 list_for_each_entry_safe(msg, msg2, q, link) {
694 list_del(&msg->link);
695 ipmi_free_smi_msg(msg);
938 static int deliver_response(struct ipmi_smi *intf, struct ipmi_recv_msg *msg)
942 if (!msg->user) {
945 intf->null_user_handler(intf, msg);
950 ipmi_free_recv_msg(msg);
957 ipmi_free_recv_msg(msg);
958 atomic_dec(&msg->user->nr_msgs);
965 list_add_tail(&msg->link, &intf->user_msgs);
974 struct ipmi_recv_msg *msg)
976 if (deliver_response(intf, msg))
983 struct ipmi_recv_msg *msg, int err)
985 msg->recv_type = IPMI_RESPONSE_RECV_TYPE;
986 msg->msg_data[0] = err;
987 msg->msg.netfn |= 1; /* Convert to a response. */
988 msg->msg.data_len = 1;
989 msg->msg.data = msg->msg_data;
990 deliver_local_response(intf, msg);
1126 struct ipmi_recv_msg *msg = intf->seq_table[seq].recv_msg;
1128 if ((msg->addr.channel == channel) && (msg->msg.cmd == cmd)
1129 && (msg->msg.netfn == netfn)
1130 && (ipmi_addr_equal(addr, &msg->addr))) {
1131 *recv_msg = msg;
1180 struct ipmi_recv_msg *msg = NULL;
1196 msg = ent->recv_msg;
1201 if (msg)
1202 deliver_err_response(intf, msg, err);
1331 struct ipmi_recv_msg *msg, *msg2;
1383 list_for_each_entry_safe(msg, msg2, &intf->user_msgs, link) {
1384 if (msg->user != user)
1386 list_del(&msg->link);
1387 ipmi_free_recv_msg(msg);
1586 struct ipmi_recv_msg *msg, *msg2;
1610 list_for_each_entry_safe(msg, msg2, &intf->waiting_events, link)
1611 list_move_tail(&msg->link, &msgs);
1618 list_for_each_entry_safe(msg, msg2, &msgs, link) {
1619 msg->user = user;
1621 deliver_local_response(intf, msg);
1768 struct kernel_ipmi_msg *msg,
1785 smi_msg->data[i+4] = (msg->netfn << 2) | (ipmb_addr->lun & 0x3);
1789 smi_msg->data[i+8] = msg->cmd;
1792 if (msg->data_len > 0)
1793 memcpy(&smi_msg->data[i + 9], msg->data, msg->data_len);
1794 smi_msg->data_size = msg->data_len + 9;
1810 struct kernel_ipmi_msg *msg,
1822 smi_msg->data[5] = (msg->netfn << 2) | (lan_addr->lun & 0x3);
1826 smi_msg->data[9] = msg->cmd;
1829 if (msg->data_len > 0)
1830 memcpy(&smi_msg->data[10], msg->data, msg->data_len);
1831 smi_msg->data_size = msg->data_len + 10;
1880 static bool is_maintenance_mode_cmd(struct kernel_ipmi_msg *msg)
1882 return (((msg->netfn == IPMI_NETFN_APP_REQUEST)
1883 && ((msg->cmd == IPMI_COLD_RESET_CMD)
1884 || (msg->cmd == IPMI_WARM_RESET_CMD)))
1885 || (msg->netfn == IPMI_NETFN_FIRMWARE_REQUEST));
1891 struct kernel_ipmi_msg *msg,
1899 if (msg->netfn & 1)
1911 if ((msg->netfn == IPMI_NETFN_APP_REQUEST)
1912 && ((msg->cmd == IPMI_SEND_MSG_CMD)
1913 || (msg->cmd == IPMI_GET_MSG_CMD)
1914 || (msg->cmd == IPMI_READ_EVENT_MSG_BUFFER_CMD))) {
1923 if (is_maintenance_mode_cmd(msg)) {
1938 if (msg->data_len + 2 > IPMI_MAX_MSG_LENGTH) {
1943 smi_msg->data[0] = (msg->netfn << 2) | (smi_addr->lun & 0x3);
1944 smi_msg->data[1] = msg->cmd;
1947 if (msg->data_len > 0)
1948 memcpy(&smi_msg->data[2], msg->data, msg->data_len);
1949 smi_msg->data_size = msg->data_len + 2;
1958 struct kernel_ipmi_msg *msg,
2000 if ((msg->data_len + 10 + broadcast) > IPMI_MAX_MSG_LENGTH) {
2013 if (recv_msg->msg.netfn & 0x1) {
2019 format_ipmb_msg(smi_msg, msg, ipmb_addr, msgid,
2034 if (is_maintenance_mode_cmd(msg))
2067 format_ipmb_msg(smi_msg, msg, ipmb_addr,
2078 recv_msg->msg.data = recv_msg->msg_data;
2079 recv_msg->msg.data_len = smi_msg->data_size;
2099 struct kernel_ipmi_msg *msg,
2105 bool is_cmd = !(recv_msg->msg.netfn & 0x1);
2111 if (!is_cmd && msg->data_len < 1) {
2116 if ((msg->data_len + 4) > IPMI_MAX_MSG_LENGTH) {
2131 smi_msg->data[0] = msg->netfn << 2 | daddr->rs_lun;
2134 smi_msg->data[0] = msg->netfn << 2 | daddr->rq_lun;
2138 smi_msg->data[3] = msg->cmd;
2140 memcpy(smi_msg->data + 4, msg->data, msg->data_len);
2141 smi_msg->data_size = msg->data_len + 4;
2151 struct kernel_ipmi_msg *msg,
2180 if ((msg->data_len + 12) > IPMI_MAX_MSG_LENGTH) {
2193 if (recv_msg->msg.netfn & 0x1) {
2199 format_lan_msg(smi_msg, msg, lan_addr, msgid,
2238 format_lan_msg(smi_msg, msg, lan_addr,
2248 recv_msg->msg.data = recv_msg->msg_data;
2249 recv_msg->msg.data_len = smi_msg->data_size;
2276 struct kernel_ipmi_msg *msg,
2338 recv_msg->msg = *msg;
2341 rv = i_ipmi_req_sysintf(intf, addr, msgid, msg, smi_msg,
2344 rv = i_ipmi_req_ipmb(intf, addr, msgid, msg, smi_msg, recv_msg,
2348 rv = i_ipmi_req_ipmb_direct(intf, addr, msgid, msg, smi_msg,
2351 rv = i_ipmi_req_lan(intf, addr, msgid, msg, smi_msg, recv_msg,
2394 struct kernel_ipmi_msg *msg,
2416 msg,
2433 struct kernel_ipmi_msg *msg,
2455 msg,
2470 struct ipmi_recv_msg *msg)
2474 if ((msg->addr.addr_type != IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
2475 || (msg->msg.netfn != IPMI_NETFN_APP_RESPONSE)
2476 || (msg->msg.cmd != IPMI_GET_DEVICE_ID_CMD)) {
2478 "invalid device_id msg: addr_type=%d netfn=%x cmd=%x\n",
2479 msg->addr.addr_type, msg->msg.netfn, msg->msg.cmd);
2483 if (msg->msg.data[0]) {
2485 msg->msg.data[0]);
2490 rv = ipmi_demangle_device_id(msg->msg.netfn, msg->msg.cmd,
2491 msg->msg.data, msg->msg.data_len, &intf->bmc->fetch_id);
2495 intf->bmc->cc = msg->msg.data[0];
2513 struct kernel_ipmi_msg msg;
2519 msg.netfn = IPMI_NETFN_APP_REQUEST;
2520 msg.cmd = IPMI_GET_DEVICE_ID_CMD;
2521 msg.data = NULL;
2522 msg.data_len = 0;
2528 &msg,
3250 struct kernel_ipmi_msg msg;
3257 msg.netfn = IPMI_NETFN_APP_REQUEST;
3258 msg.cmd = IPMI_GET_DEVICE_GUID_CMD;
3259 msg.data = NULL;
3260 msg.data_len = 0;
3265 &msg,
3275 static void guid_handler(struct ipmi_smi *intf, struct ipmi_recv_msg *msg)
3279 if ((msg->addr.addr_type != IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
3280 || (msg->msg.netfn != IPMI_NETFN_APP_RESPONSE)
3281 || (msg->msg.cmd != IPMI_GET_DEVICE_GUID_CMD))
3285 if (msg->msg.data[0] != 0) {
3291 if (msg->msg.data_len < UUID_SIZE + 1) {
3295 msg->msg.data_len, UUID_SIZE + 1);
3299 import_guid(&bmc->fetch_guid, msg->msg.data + 1);
3333 struct kernel_ipmi_msg msg;
3341 msg.netfn = IPMI_NETFN_APP_REQUEST;
3342 msg.cmd = IPMI_GET_CHANNEL_INFO_CMD;
3343 msg.data = data;
3344 msg.data_len = 1;
3350 &msg,
3361 channel_handler(struct ipmi_smi *intf, struct ipmi_recv_msg *msg)
3368 if ((msg->addr.addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
3369 && (msg->msg.netfn == IPMI_NETFN_APP_RESPONSE)
3370 && (msg->msg.cmd == IPMI_GET_CHANNEL_INFO_CMD)) {
3372 if (msg->msg.data[0] != 0) {
3374 if (msg->msg.data[0] == IPMI_INVALID_COMMAND_ERR) {
3393 if (msg->msg.data_len < 4) {
3399 chans[ch].medium = msg->msg.data[2] & 0x7f;
3400 chans[ch].protocol = msg->msg.data[3] & 0x1f;
3682 struct ipmi_smi_msg *msg,
3686 msg->rsp[0] = msg->data[0] | 4;
3687 msg->rsp[1] = msg->data[1];
3688 msg->rsp[2] = err;
3689 msg->rsp_size = 3;
3692 rv = handle_one_recv_msg(intf, msg);
3694 ipmi_free_smi_msg(msg);
3701 struct ipmi_smi_msg *msg;
3725 msg = list_entry(entry, struct ipmi_smi_msg, link);
3726 deliver_smi_err_response(intf, msg, IPMI_ERR_UNSPECIFIED);
3793 struct ipmi_smi_msg *msg)
3802 if (msg->rsp_size < 11) {
3808 if (msg->rsp[2] != 0) {
3814 ipmb_addr.slave_addr = msg->rsp[6];
3815 ipmb_addr.channel = msg->rsp[3] & 0x0f;
3816 ipmb_addr.lun = msg->rsp[7] & 3;
3823 msg->rsp[7] >> 2,
3824 msg->rsp[3] & 0x0f,
3825 msg->rsp[8],
3826 (msg->rsp[4] >> 2) & (~1),
3837 memcpy(recv_msg->msg_data, &msg->rsp[9], msg->rsp_size - 9);
3843 recv_msg->msg.netfn = msg->rsp[4] >> 2;
3844 recv_msg->msg.data = recv_msg->msg_data;
3845 recv_msg->msg.data_len = msg->rsp_size - 10;
3856 struct ipmi_smi_msg *msg)
3867 if (msg->rsp_size < 10) {
3873 if (msg->rsp[2] != 0) {
3878 netfn = msg->rsp[4] >> 2;
3879 cmd = msg->rsp[8];
3880 chan = msg->rsp[3] & 0xf;
3895 msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2);
3896 msg->data[1] = IPMI_SEND_MSG_CMD;
3897 msg->data[2] = msg->rsp[3];
3898 msg->data[3] = msg->rsp[6];
3899 msg->data[4] = ((netfn + 1) << 2) | (msg->rsp[7] & 0x3);
3900 msg->data[5] = ipmb_checksum(&msg->data[3], 2);
3901 msg->data[6] = intf->addrinfo[msg->rsp[3] & 0xf].address;
3903 msg->data[7] = (msg->rsp[7] & 0xfc) | (msg->rsp[4] & 0x3);
3904 msg->data[8] = msg->rsp[8]; /* cmd */
3905 msg->data[9] = IPMI_INVALID_CMD_COMPLETION_CODE;
3906 msg->data[10] = ipmb_checksum(&msg->data[6], 4);
3907 msg->data_size = 11;
3910 msg->data_size, msg->data);
3912 smi_send(intf, intf->handlers, msg, 0);
3932 ipmb_addr->slave_addr = msg->rsp[6];
3933 ipmb_addr->lun = msg->rsp[7] & 3;
3934 ipmb_addr->channel = msg->rsp[3] & 0xf;
3942 recv_msg->msgid = msg->rsp[7] >> 2;
3943 recv_msg->msg.netfn = msg->rsp[4] >> 2;
3944 recv_msg->msg.cmd = msg->rsp[8];
3945 recv_msg->msg.data = recv_msg->msg_data;
3951 recv_msg->msg.data_len = msg->rsp_size - 10;
3952 memcpy(recv_msg->msg_data, &msg->rsp[9],
3953 msg->rsp_size - 10);
3965 struct ipmi_smi_msg *msg)
3972 unsigned char netfn = msg->rsp[0] >> 2;
3973 unsigned char cmd = msg->rsp[3];
3989 msg->data[0] = (netfn + 1) << 2;
3990 msg->data[0] |= msg->rsp[2] & 0x3; /* rqLUN */
3991 msg->data[1] = msg->rsp[1]; /* Addr */
3992 msg->data[2] = msg->rsp[2] & ~0x3; /* rqSeq */
3993 msg->data[2] |= msg->rsp[0] & 0x3; /* rsLUN */
3994 msg->data[3] = cmd;
3995 msg->data[4] = IPMI_INVALID_CMD_COMPLETION_CODE;
3996 msg->data_size = 5;
3998 smi_send(intf, intf->handlers, msg, 0);
4019 daddr->slave_addr = msg->rsp[1];
4020 daddr->rs_lun = msg->rsp[0] & 3;
4021 daddr->rq_lun = msg->rsp[2] & 3;
4029 recv_msg->msgid = (msg->rsp[2] >> 2);
4030 recv_msg->msg.netfn = msg->rsp[0] >> 2;
4031 recv_msg->msg.cmd = msg->rsp[3];
4032 recv_msg->msg.data = recv_msg->msg_data;
4034 recv_msg->msg.data_len = msg->rsp_size - 4;
4035 memcpy(recv_msg->msg_data, msg->rsp + 4,
4036 msg->rsp_size - 4);
4048 struct ipmi_smi_msg *msg)
4053 recv_msg = msg->user_data;
4061 recv_msg->msgid = msg->msgid;
4065 daddr->slave_addr = msg->rsp[1];
4066 daddr->rq_lun = msg->rsp[0] & 3;
4067 daddr->rs_lun = msg->rsp[2] & 3;
4068 recv_msg->msg.netfn = msg->rsp[0] >> 2;
4069 recv_msg->msg.cmd = msg->rsp[3];
4070 memcpy(recv_msg->msg_data, &msg->rsp[4], msg->rsp_size - 4);
4071 recv_msg->msg.data = recv_msg->msg_data;
4072 recv_msg->msg.data_len = msg->rsp_size - 4;
4079 struct ipmi_smi_msg *msg)
4089 if (msg->rsp_size < 13) {
4095 if (msg->rsp[2] != 0) {
4101 lan_addr.session_handle = msg->rsp[4];
4102 lan_addr.remote_SWID = msg->rsp[8];
4103 lan_addr.local_SWID = msg->rsp[5];
4104 lan_addr.channel = msg->rsp[3] & 0x0f;
4105 lan_addr.privilege = msg->rsp[3] >> 4;
4106 lan_addr.lun = msg->rsp[9] & 3;
4113 msg->rsp[9] >> 2,
4114 msg->rsp[3] & 0x0f,
4115 msg->rsp[10],
4116 (msg->rsp[6] >> 2) & (~1),
4127 memcpy(recv_msg->msg_data, &msg->rsp[11], msg->rsp_size - 11);
4133 recv_msg->msg.netfn = msg->rsp[6] >> 2;
4134 recv_msg->msg.data = recv_msg->msg_data;
4135 recv_msg->msg.data_len = msg->rsp_size - 12;
4146 struct ipmi_smi_msg *msg)
4157 if (msg->rsp_size < 12) {
4163 if (msg->rsp[2] != 0) {
4168 netfn = msg->rsp[6] >> 2;
4169 cmd = msg->rsp[10];
4170 chan = msg->rsp[3] & 0xf;
4185 msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2);
4186 msg->data[1] = IPMI_SEND_MSG_CMD;
4187 msg->data[2] = chan;
4188 msg->data[3] = msg->rsp[4]; /* handle */
4189 msg->data[4] = msg->rsp[8]; /* rsSWID */
4190 msg->data[5] = ((netfn + 1) << 2) | (msg->rsp[9] & 0x3);
4191 msg->data[6] = ipmb_checksum(&msg->data[3], 3);
4192 msg->data[7] = msg->rsp[5]; /* rqSWID */
4194 msg->data[8] = (msg->rsp[9] & 0xfc) | (msg->rsp[6] & 0x3);
4195 msg->data[9] = cmd;
4196 msg->data[10] = IPMI_INVALID_CMD_COMPLETION_CODE;
4197 msg->data[11] = ipmb_checksum(&msg->data[7], 4);
4198 msg->data_size = 12;
4201 msg->data_size, msg->data);
4203 smi_send(intf, intf->handlers, msg, 0);
4222 lan_addr->session_handle = msg->rsp[4];
4223 lan_addr->remote_SWID = msg->rsp[8];
4224 lan_addr->local_SWID = msg->rsp[5];
4225 lan_addr->lun = msg->rsp[9] & 3;
4226 lan_addr->channel = msg->rsp[3] & 0xf;
4227 lan_addr->privilege = msg->rsp[3] >> 4;
4235 recv_msg->msgid = msg->rsp[9] >> 2;
4236 recv_msg->msg.netfn = msg->rsp[6] >> 2;
4237 recv_msg->msg.cmd = msg->rsp[10];
4238 recv_msg->msg.data = recv_msg->msg_data;
4244 recv_msg->msg.data_len = msg->rsp_size - 12;
4245 memcpy(recv_msg->msg_data, &msg->rsp[11],
4246 msg->rsp_size - 12);
4264 struct ipmi_smi_msg *msg)
4279 if (msg->rsp_size < 4) {
4285 if (msg->rsp[2] != 0) {
4294 netfn = msg->rsp[0] >> 2;
4295 cmd = msg->rsp[1];
4296 chan = msg->rsp[3] & 0xf;
4338 smi_addr->lun = msg->rsp[0] & 3;
4343 recv_msg->msg.netfn = msg->rsp[0] >> 2;
4344 recv_msg->msg.cmd = msg->rsp[1];
4345 recv_msg->msg.data = recv_msg->msg_data;
4351 recv_msg->msg.data_len = msg->rsp_size - 4;
4352 memcpy(recv_msg->msg_data, &msg->rsp[4],
4353 msg->rsp_size - 4);
4365 struct ipmi_smi_msg *msg)
4373 smi_addr->lun = msg->rsp[0] & 3;
4375 recv_msg->msg.netfn = msg->rsp[0] >> 2;
4376 recv_msg->msg.cmd = msg->rsp[1];
4377 memcpy(recv_msg->msg_data, &msg->rsp[3], msg->rsp_size - 3);
4378 recv_msg->msg.data = recv_msg->msg_data;
4379 recv_msg->msg.data_len = msg->rsp_size - 3;
4383 struct ipmi_smi_msg *msg)
4390 if (msg->rsp_size < 19) {
4396 if (msg->rsp[2] != 0) {
4437 copy_event_into_recv_msg(recv_msg, msg);
4466 copy_event_into_recv_msg(recv_msg, msg);
4486 struct ipmi_smi_msg *msg)
4491 recv_msg = msg->user_data;
4499 recv_msg->msgid = msg->msgid;
4504 smi_addr->lun = msg->rsp[0] & 3;
4505 recv_msg->msg.netfn = msg->rsp[0] >> 2;
4506 recv_msg->msg.cmd = msg->rsp[1];
4507 memcpy(recv_msg->msg_data, &msg->rsp[2], msg->rsp_size - 2);
4508 recv_msg->msg.data = recv_msg->msg_data;
4509 recv_msg->msg.data_len = msg->rsp_size - 2;
4521 struct ipmi_smi_msg *msg)
4526 bool is_cmd = !((msg->rsp[0] >> 2) & 1);
4528 dev_dbg(intf->si_dev, "Recv: %*ph\n", msg->rsp_size, msg->rsp);
4530 if (msg->rsp_size < 2) {
4534 (msg->data[0] >> 2) | 1, msg->data[1], msg->rsp_size);
4538 msg->rsp[0] = msg->data[0] | (1 << 2);
4539 msg->rsp[1] = msg->data[1];
4540 msg->rsp[2] = IPMI_ERR_UNSPECIFIED;
4541 msg->rsp_size = 3;
4542 } else if (msg->type == IPMI_SMI_MSG_TYPE_IPMB_DIRECT) {
4544 if (is_cmd && (msg->rsp_size < 4)) {
4548 if (!is_cmd && (msg->rsp_size < 5)) {
4551 msg->rsp[0] = msg->data[0] & 0xfc; /* NetFN */
4552 msg->rsp[0] |= (1 << 2); /* Make it a response */
4553 msg->rsp[0] |= msg->data[2] & 3; /* rqLUN */
4554 msg->rsp[1] = msg->data[1]; /* Addr */
4555 msg->rsp[2] = msg->data[2] & 0xfc; /* rqSeq */
4556 msg->rsp[2] |= msg->data[0] & 0x3; /* rsLUN */
4557 msg->rsp[3] = msg->data[3]; /* Cmd */
4558 msg->rsp[4] = IPMI_ERR_UNSPECIFIED;
4559 msg->rsp_size = 5;
4561 } else if ((msg->data_size >= 2)
4562 && (msg->data[0] == (IPMI_NETFN_APP_REQUEST << 2))
4563 && (msg->data[1] == IPMI_SEND_MSG_CMD)
4564 && (msg->user_data == NULL)) {
4582 if ((msg->rsp_size >= 3) && (msg->rsp[2] != 0)
4583 && (msg->rsp[2] != IPMI_NODE_BUSY_ERR)
4584 && (msg->rsp[2] != IPMI_LOST_ARBITRATION_ERR)
4585 && (msg->rsp[2] != IPMI_BUS_ERR)
4586 && (msg->rsp[2] != IPMI_NAK_ON_WRITE_ERR)) {
4587 int ch = msg->rsp[3] & 0xf;
4598 intf_err_seq(intf, msg->msgid, msg->rsp[2]);
4601 intf_start_seq_timer(intf, msg->msgid);
4604 } else if (((msg->rsp[0] >> 2) != ((msg->data[0] >> 2) | 1))
4605 || (msg->rsp[1] != msg->data[1])) {
4612 (msg->data[0] >> 2) | 1, msg->data[1],
4613 msg->rsp[0] >> 2, msg->rsp[1]);
4618 if (msg->type == IPMI_SMI_MSG_TYPE_IPMB_DIRECT) {
4619 if ((msg->data[0] >> 2) & 1) {
4622 cc = msg->rsp[4];
4626 requeue = handle_ipmb_direct_rcv_cmd(intf, msg);
4628 requeue = handle_ipmb_direct_rcv_rsp(intf, msg);
4629 } else if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2))
4630 && (msg->rsp[1] == IPMI_SEND_MSG_CMD)
4631 && (msg->user_data != NULL)) {
4641 chan = msg->data[2] & 0x0f;
4645 cc = msg->rsp[2];
4648 recv_msg = msg->user_data;
4655 recv_msg->msg.data = recv_msg->msg_data;
4657 recv_msg->msg.data_len = 1;
4659 } else if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2))
4660 && (msg->rsp[1] == IPMI_GET_MSG_CMD)) {
4667 chan = msg->rsp[3] & 0xf;
4689 if (msg->rsp[4] & 0x04) {
4694 requeue = handle_ipmb_get_msg_rsp(intf, msg);
4700 requeue = handle_ipmb_get_msg_cmd(intf, msg);
4706 if (msg->rsp[6] & 0x04) {
4711 requeue = handle_lan_get_msg_rsp(intf, msg);
4717 requeue = handle_lan_get_msg_cmd(intf, msg);
4727 requeue = handle_oem_get_msg_cmd(intf, msg);
4737 } else if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2))
4738 && (msg->rsp[1] == IPMI_READ_EVENT_MSG_BUFFER_CMD)) {
4743 requeue = handle_read_event_rsp(intf, msg);
4746 requeue = handle_bmc_rsp(intf, msg);
4803 struct ipmi_recv_msg *msg, *msg2;
4866 list_for_each_entry_safe(msg, msg2, &intf->user_msgs, link) {
4867 struct ipmi_user *user = msg->user;
4869 list_del(&msg->link);
4872 ipmi_free_recv_msg(msg);
4875 user->handler->ipmi_recv_hndl(msg, user->handler_data);
4885 struct ipmi_smi_msg *msg)
4896 list_add_tail(&msg->link, &intf->waiting_rcv_msgs);
4907 if (msg == intf->curr_msg)
4941 memcpy(smi_msg->data, recv_msg->msg.data, recv_msg->msg.data_len);
4942 smi_msg->data_size = recv_msg->msg.data_len;
4957 struct ipmi_recv_msg *msg;
4975 msg = ent->recv_msg;
4976 list_add_tail(&msg->link, timeouts);
5036 struct ipmi_recv_msg *msg, *msg2;
5068 list_for_each_entry_safe(msg, msg2, &timeouts, link)
5069 deliver_err_response(intf, msg, IPMI_TIMEOUT_COMPLETION_CODE);
5163 static void free_smi_msg(struct ipmi_smi_msg *msg)
5168 kfree(msg);
5185 static void free_recv_msg(struct ipmi_recv_msg *msg)
5190 kfree(msg);
5206 void ipmi_free_recv_msg(struct ipmi_recv_msg *msg)
5208 if (msg->user && !oops_in_progress)
5209 kref_put(&msg->user->refcount, free_ipmi_user);
5210 msg->done(msg);
5216 static void dummy_smi_done_handler(struct ipmi_smi_msg *msg)
5221 static void dummy_recv_done_handler(struct ipmi_recv_msg *msg)
5231 struct kernel_ipmi_msg *msg)
5244 msg,
5263 struct kernel_ipmi_msg *msg)
5266 _ipmi_panic_request_and_wait(user->intf, addr, msg);
5271 struct ipmi_recv_msg *msg)
5273 if ((msg->addr.addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
5274 && (msg->msg.netfn == IPMI_NETFN_SENSOR_EVENT_RESPONSE)
5275 && (msg->msg.cmd == IPMI_GET_EVENT_RECEIVER_CMD)
5276 && (msg->msg.data[0] == IPMI_CC_NO_ERROR)) {
5278 intf->event_receiver = msg->msg.data[1];
5279 intf->event_receiver_lun = msg->msg.data[2] & 0x3;
5283 static void device_id_fetcher(struct ipmi_smi *intf, struct ipmi_recv_msg *msg)
5285 if ((msg->addr.addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
5286 && (msg->msg.netfn == IPMI_NETFN_APP_RESPONSE)
5287 && (msg->msg.cmd == IPMI_GET_DEVICE_ID_CMD)
5288 && (msg->msg.data[0] == IPMI_CC_NO_ERROR)) {
5293 intf->local_sel_device = (msg->msg.data[6] >> 2) & 1;
5294 intf->local_event_generator = (msg->msg.data[6] >> 5) & 1;
5300 struct kernel_ipmi_msg msg;
5317 msg.netfn = 0x04; /* Sensor or Event. */
5318 msg.cmd = 2; /* Platform event command. */
5319 msg.data = data;
5320 msg.data_len = 8;
5338 _ipmi_panic_request_and_wait(intf, &addr, &msg);
5369 msg.netfn = IPMI_NETFN_APP_REQUEST;
5370 msg.cmd = IPMI_GET_DEVICE_ID_CMD;
5371 msg.data = NULL;
5372 msg.data_len = 0;
5374 _ipmi_panic_request_and_wait(intf, &addr, &msg);
5378 msg.netfn = IPMI_NETFN_SENSOR_EVENT_REQUEST;
5379 msg.cmd = IPMI_GET_EVENT_RECEIVER_CMD;
5380 msg.data = NULL;
5381 msg.data_len = 0;
5383 _ipmi_panic_request_and_wait(intf, &addr, &msg);
5417 msg.netfn = IPMI_NETFN_STORAGE_REQUEST; /* Storage. */
5418 msg.cmd = IPMI_ADD_SEL_ENTRY_CMD;
5419 msg.data = data;
5420 msg.data_len = 16;
5435 _ipmi_panic_request_and_wait(intf, &addr, &msg);