Lines Matching refs:ib

119     IPMIBT *ib = iic->get_backend_data(ii);  in ipmi_bt_handle_event()  local
121 if (ib->inlen < 4) { in ipmi_bt_handle_event()
125 if (ib->inmsg[0] != (ib->inlen - 1)) { in ipmi_bt_handle_event()
127 IPMI_BT_SET_BBUSY(ib->control_reg, 1); in ipmi_bt_handle_event()
128 ib->inlen = 0; in ipmi_bt_handle_event()
131 if ((ib->inmsg[1] == (IPMI_NETFN_APP << 2)) && in ipmi_bt_handle_event()
132 (ib->inmsg[3] == IPMI_CMD_GET_BT_INTF_CAP)) { in ipmi_bt_handle_event()
134 ib->outmsg[0] = 9; in ipmi_bt_handle_event()
135 ib->outmsg[1] = ib->inmsg[1] | 0x04; in ipmi_bt_handle_event()
136 ib->outmsg[2] = ib->inmsg[2]; in ipmi_bt_handle_event()
137 ib->outmsg[3] = ib->inmsg[3]; in ipmi_bt_handle_event()
138 ib->outmsg[4] = 0; in ipmi_bt_handle_event()
139 ib->outmsg[5] = 1; /* Only support 1 outstanding request. */ in ipmi_bt_handle_event()
140 if (sizeof(ib->inmsg) > 0xff) { /* Input buffer size */ in ipmi_bt_handle_event()
141 ib->outmsg[6] = 0xff; in ipmi_bt_handle_event()
143 ib->outmsg[6] = (unsigned char) sizeof(ib->inmsg); in ipmi_bt_handle_event()
145 if (sizeof(ib->outmsg) > 0xff) { /* Output buffer size */ in ipmi_bt_handle_event()
146 ib->outmsg[7] = 0xff; in ipmi_bt_handle_event()
148 ib->outmsg[7] = (unsigned char) sizeof(ib->outmsg); in ipmi_bt_handle_event()
150 ib->outmsg[8] = 10; /* Max request to response time */ in ipmi_bt_handle_event()
151 ib->outmsg[9] = 0; /* Don't recommend retries */ in ipmi_bt_handle_event()
152 ib->outlen = 10; in ipmi_bt_handle_event()
153 IPMI_BT_SET_BBUSY(ib->control_reg, 0); in ipmi_bt_handle_event()
154 IPMI_BT_SET_B2H_ATN(ib->control_reg, 1); in ipmi_bt_handle_event()
155 if (ib->use_irq && ib->irqs_enabled && in ipmi_bt_handle_event()
156 !IPMI_BT_GET_B2H_IRQ(ib->mask_reg) && in ipmi_bt_handle_event()
157 IPMI_BT_GET_B2H_IRQ_EN(ib->mask_reg)) { in ipmi_bt_handle_event()
158 IPMI_BT_SET_B2H_IRQ(ib->mask_reg, 1); in ipmi_bt_handle_event()
159 qemu_irq_raise(ib->irq); in ipmi_bt_handle_event()
163 ib->waiting_seq = ib->inmsg[2]; in ipmi_bt_handle_event()
164 ib->inmsg[2] = ib->inmsg[1]; in ipmi_bt_handle_event()
166 IPMIBmcClass *bk = IPMI_BMC_GET_CLASS(ib->bmc); in ipmi_bt_handle_event()
167 bk->handle_command(ib->bmc, ib->inmsg + 2, ib->inlen - 2, in ipmi_bt_handle_event()
168 sizeof(ib->inmsg), ib->waiting_rsp); in ipmi_bt_handle_event()
178 IPMIBT *ib = iic->get_backend_data(ii); in ipmi_bt_handle_rsp() local
180 if (ib->waiting_rsp == msg_id) { in ipmi_bt_handle_rsp()
181 ib->waiting_rsp++; in ipmi_bt_handle_rsp()
182 if (rsp_len > (sizeof(ib->outmsg) - 2)) { in ipmi_bt_handle_rsp()
183 ib->outmsg[0] = 4; in ipmi_bt_handle_rsp()
184 ib->outmsg[1] = rsp[0]; in ipmi_bt_handle_rsp()
185 ib->outmsg[2] = ib->waiting_seq; in ipmi_bt_handle_rsp()
186 ib->outmsg[3] = rsp[1]; in ipmi_bt_handle_rsp()
187 ib->outmsg[4] = IPMI_CC_CANNOT_RETURN_REQ_NUM_BYTES; in ipmi_bt_handle_rsp()
188 ib->outlen = 5; in ipmi_bt_handle_rsp()
190 ib->outmsg[0] = rsp_len + 1; in ipmi_bt_handle_rsp()
191 ib->outmsg[1] = rsp[0]; in ipmi_bt_handle_rsp()
192 ib->outmsg[2] = ib->waiting_seq; in ipmi_bt_handle_rsp()
193 memcpy(ib->outmsg + 3, rsp + 1, rsp_len - 1); in ipmi_bt_handle_rsp()
194 ib->outlen = rsp_len + 2; in ipmi_bt_handle_rsp()
196 IPMI_BT_SET_BBUSY(ib->control_reg, 0); in ipmi_bt_handle_rsp()
197 IPMI_BT_SET_B2H_ATN(ib->control_reg, 1); in ipmi_bt_handle_rsp()
198 if (ib->use_irq && ib->irqs_enabled && in ipmi_bt_handle_rsp()
199 !IPMI_BT_GET_B2H_IRQ(ib->mask_reg) && in ipmi_bt_handle_rsp()
200 IPMI_BT_GET_B2H_IRQ_EN(ib->mask_reg)) { in ipmi_bt_handle_rsp()
201 IPMI_BT_SET_B2H_IRQ(ib->mask_reg, 1); in ipmi_bt_handle_rsp()
202 qemu_irq_raise(ib->irq); in ipmi_bt_handle_rsp()
212 IPMIBT *ib = iic->get_backend_data(ii); in ipmi_bt_ioport_read() local
217 ret = ib->control_reg; in ipmi_bt_ioport_read()
220 if (ib->outpos < ib->outlen) { in ipmi_bt_ioport_read()
221 ret = ib->outmsg[ib->outpos]; in ipmi_bt_ioport_read()
222 ib->outpos++; in ipmi_bt_ioport_read()
223 if (ib->outpos == ib->outlen) { in ipmi_bt_ioport_read()
224 ib->outpos = 0; in ipmi_bt_ioport_read()
225 ib->outlen = 0; in ipmi_bt_ioport_read()
232 ret = ib->mask_reg; in ipmi_bt_ioport_read()
238 static void ipmi_bt_signal(IPMIBT *ib, IPMIInterface *ii) in ipmi_bt_signal() argument
242 ib->do_wake = 1; in ipmi_bt_signal()
243 while (ib->do_wake) { in ipmi_bt_signal()
244 ib->do_wake = 0; in ipmi_bt_signal()
254 IPMIBT *ib = iic->get_backend_data(ii); in ipmi_bt_ioport_write() local
259 ib->inlen = 0; in ipmi_bt_ioport_write()
262 ib->outpos = 0; in ipmi_bt_ioport_write()
265 IPMI_BT_SET_B2H_ATN(ib->control_reg, 0); in ipmi_bt_ioport_write()
268 IPMI_BT_SET_SMS_ATN(ib->control_reg, 0); in ipmi_bt_ioport_write()
272 IPMI_BT_SET_HBUSY(ib->control_reg, in ipmi_bt_ioport_write()
273 !IPMI_BT_GET_HBUSY(ib->control_reg)); in ipmi_bt_ioport_write()
276 IPMI_BT_SET_BBUSY(ib->control_reg, 1); in ipmi_bt_ioport_write()
277 ipmi_bt_signal(ib, ii); in ipmi_bt_ioport_write()
282 if (ib->inlen < sizeof(ib->inmsg)) { in ipmi_bt_ioport_write()
283 ib->inmsg[ib->inlen] = val; in ipmi_bt_ioport_write()
285 ib->inlen++; in ipmi_bt_ioport_write()
290 IPMI_BT_GET_B2H_IRQ_EN(ib->mask_reg)) { in ipmi_bt_ioport_write()
292 if (IPMI_BT_GET_B2H_ATN(ib->control_reg) || in ipmi_bt_ioport_write()
293 IPMI_BT_GET_SMS_ATN(ib->control_reg)) { in ipmi_bt_ioport_write()
294 IPMI_BT_SET_B2H_IRQ(ib->mask_reg, 1); in ipmi_bt_ioport_write()
295 qemu_irq_raise(ib->irq); in ipmi_bt_ioport_write()
297 IPMI_BT_SET_B2H_IRQ_EN(ib->mask_reg, 1); in ipmi_bt_ioport_write()
299 if (IPMI_BT_GET_B2H_IRQ(ib->mask_reg)) { in ipmi_bt_ioport_write()
300 IPMI_BT_SET_B2H_IRQ(ib->mask_reg, 0); in ipmi_bt_ioport_write()
301 qemu_irq_lower(ib->irq); in ipmi_bt_ioport_write()
303 IPMI_BT_SET_B2H_IRQ_EN(ib->mask_reg, 0); in ipmi_bt_ioport_write()
306 if (IPMI_BT_GET_B2H_IRQ(val) && IPMI_BT_GET_B2H_IRQ(ib->mask_reg)) { in ipmi_bt_ioport_write()
307 IPMI_BT_SET_B2H_IRQ(ib->mask_reg, 0); in ipmi_bt_ioport_write()
308 qemu_irq_lower(ib->irq); in ipmi_bt_ioport_write()
327 IPMIBT *ib = iic->get_backend_data(ii); in ipmi_bt_set_atn() local
329 if (!!val == IPMI_BT_GET_SMS_ATN(ib->control_reg)) { in ipmi_bt_set_atn()
333 IPMI_BT_SET_SMS_ATN(ib->control_reg, val); in ipmi_bt_set_atn()
335 if (irq && ib->use_irq && ib->irqs_enabled && in ipmi_bt_set_atn()
336 !IPMI_BT_GET_B2H_ATN(ib->control_reg) && in ipmi_bt_set_atn()
337 IPMI_BT_GET_B2H_IRQ_EN(ib->mask_reg)) { in ipmi_bt_set_atn()
338 IPMI_BT_SET_B2H_IRQ(ib->mask_reg, 1); in ipmi_bt_set_atn()
339 qemu_irq_raise(ib->irq); in ipmi_bt_set_atn()
342 if (!IPMI_BT_GET_B2H_ATN(ib->control_reg) && in ipmi_bt_set_atn()
343 IPMI_BT_GET_B2H_IRQ(ib->mask_reg)) { in ipmi_bt_set_atn()
344 IPMI_BT_SET_B2H_IRQ(ib->mask_reg, 0); in ipmi_bt_set_atn()
345 qemu_irq_lower(ib->irq); in ipmi_bt_set_atn()
353 IPMIBT *ib = iic->get_backend_data(ii); in ipmi_bt_handle_reset() local
357 if (IPMI_BT_GET_B2H_IRQ(ib->mask_reg)) { in ipmi_bt_handle_reset()
358 IPMI_BT_SET_B2H_IRQ(ib->mask_reg, 0); in ipmi_bt_handle_reset()
359 qemu_irq_lower(ib->irq); in ipmi_bt_handle_reset()
361 IPMI_BT_SET_B2H_IRQ_EN(ib->mask_reg, 0); in ipmi_bt_handle_reset()
368 IPMIBT *ib = iic->get_backend_data(ii); in ipmi_bt_set_irq_enable() local
370 ib->irqs_enabled = val; in ipmi_bt_set_irq_enable()
376 IPMIBT *ib = iic->get_backend_data(ii); in ipmi_bt_init() local
378 ib->io_length = 3; in ipmi_bt_init()
380 memory_region_init_io(&ib->io, NULL, &ipmi_bt_io_ops, ii, "ipmi-bt", 3); in ipmi_bt_init()
456 IPMIBT *ib = opaque; in ipmi_bt_vmstate_post_load() local
459 if (ib->outpos >= MAX_IPMI_MSG_SIZE || ib->outlen >= MAX_IPMI_MSG_SIZE || in ipmi_bt_vmstate_post_load()
460 ib->outpos >= ib->outlen) { in ipmi_bt_vmstate_post_load()
463 ib->outpos, ib->outlen); in ipmi_bt_vmstate_post_load()
464 ib->outpos = 0; in ipmi_bt_vmstate_post_load()
465 ib->outlen = 0; in ipmi_bt_vmstate_post_load()
468 if (ib->inlen >= MAX_IPMI_MSG_SIZE) { in ipmi_bt_vmstate_post_load()
471 ib->inlen); in ipmi_bt_vmstate_post_load()
472 ib->inlen = 0; in ipmi_bt_vmstate_post_load()