Lines Matching refs:req
62 #define IPMI_INIT_DRIVER_REQUEST(req, addr, cmd, reqlen, replylen) \ argument
63 bzero((req), sizeof(struct ipmi_request)); \
64 ipmi_init_request((req), NULL, 0, (addr), (cmd), (reqlen), (replylen))
66 #define IPMI_ALLOC_DRIVER_REQUEST(req, addr, cmd, reqlen, replylen) \ argument
67 (req) = __builtin_alloca(sizeof(struct ipmi_request) + \
69 IPMI_INIT_DRIVER_REQUEST((req), (addr), (cmd), (reqlen), \
184 struct ipmi_request *req; in ipmi_purge_completed_requests() local
187 req = TAILQ_FIRST(&dev->ipmi_completed_requests); in ipmi_purge_completed_requests()
188 TAILQ_REMOVE(&dev->ipmi_completed_requests, req, ir_link); in ipmi_purge_completed_requests()
190 ipmi_free_request(req); in ipmi_purge_completed_requests()
197 struct ipmi_request *req, *nreq; in ipmi_dtor() local
207 TAILQ_FOREACH_SAFE(req, &sc->ipmi_pending_requests, ir_link, in ipmi_dtor()
209 if (req->ir_owner == dev) { in ipmi_dtor()
210 TAILQ_REMOVE(&sc->ipmi_pending_requests, req, in ipmi_dtor()
213 ipmi_free_request(req); in ipmi_dtor()
256 struct ipmi_request *req; in ipmi_ipmb_send_message() local
260 IPMI_ALLOC_DRIVER_REQUEST(req, IPMI_ADDR(IPMI_APP_REQUEST, 0), in ipmi_ipmb_send_message()
262 req->ir_request[0] = channel; in ipmi_ipmb_send_message()
263 req->ir_request[1] = slave_addr; in ipmi_ipmb_send_message()
264 req->ir_request[2] = IPMI_ADDR(netfn, 0); in ipmi_ipmb_send_message()
265 req->ir_request[3] = ipmi_ipmb_checksum(&req->ir_request[1], 2); in ipmi_ipmb_send_message()
266 req->ir_request[4] = sc->ipmi_address; in ipmi_ipmb_send_message()
267 req->ir_request[5] = IPMI_ADDR(seq, sc->ipmi_lun); in ipmi_ipmb_send_message()
268 req->ir_request[6] = command; in ipmi_ipmb_send_message()
270 bcopy(data, &req->ir_request[7], data_len); in ipmi_ipmb_send_message()
271 temp[data_len + 7] = ipmi_ipmb_checksum(&req->ir_request[4], in ipmi_ipmb_send_message()
274 ipmi_submit_driver_request(sc, req); in ipmi_ipmb_send_message()
275 error = req->ir_error; in ipmi_ipmb_send_message()
283 struct ipmi_request *req; in ipmi_handle_attn() local
287 IPMI_ALLOC_DRIVER_REQUEST(req, IPMI_ADDR(IPMI_APP_REQUEST, 0), in ipmi_handle_attn()
290 ipmi_submit_driver_request(sc, req); in ipmi_handle_attn()
292 if (req->ir_error == 0 && req->ir_compcode == 0) { in ipmi_handle_attn()
293 if (req->ir_reply[0] & IPMI_MSG_BUFFER_FULL) { in ipmi_handle_attn()
296 if (req->ir_reply[0] & IPMI_WDT_PRE_TIMEOUT) { in ipmi_handle_attn()
300 if (req->ir_reply[0] & IPMI_MSG_AVAILABLE) { in ipmi_handle_attn()
301 IPMI_ALLOC_DRIVER_REQUEST(req, in ipmi_handle_attn()
309 error = req->ir_error; in ipmi_handle_attn()
327 struct ipmi_req *req = (struct ipmi_req *)data; in ipmi_ioctl() local
334 struct ipmi_req req; in ipmi_ioctl() member
350 req = &thunk32.req; in ipmi_ioctl()
351 req->addr = PTRIN(req32->addr); in ipmi_ioctl()
352 req->addr_len = req32->addr_len; in ipmi_ioctl()
353 req->msgid = req32->msgid; in ipmi_ioctl()
354 req->msg.netfn = req32->msg.netfn; in ipmi_ioctl()
355 req->msg.cmd = req32->msg.cmd; in ipmi_ioctl()
356 req->msg.data_len = req32->msg.data_len; in ipmi_ioctl()
357 req->msg.data = PTRIN(req32->msg.data); in ipmi_ioctl()
378 error = copyin(req->addr, &addr, sizeof(addr)); in ipmi_ioctl()
393 kreq = ipmi_alloc_request(dev, req->msgid, in ipmi_ioctl()
394 IPMI_ADDR(req->msg.netfn, 0), req->msg.cmd, in ipmi_ioctl()
395 req->msg.data_len, IPMI_MAX_RX); in ipmi_ioctl()
396 error = copyin(req->msg.data, kreq->ir_request, in ipmi_ioctl()
397 req->msg.data_len); in ipmi_ioctl()
520 ipmi_init_request(struct ipmi_request *req, struct ipmi_device *dev, long msgid, in ipmi_init_request() argument
524 req->ir_owner = dev; in ipmi_init_request()
525 req->ir_msgid = msgid; in ipmi_init_request()
526 req->ir_addr = addr; in ipmi_init_request()
527 req->ir_command = command; in ipmi_init_request()
529 req->ir_request = (char *)&req[1]; in ipmi_init_request()
530 req->ir_requestlen = requestlen; in ipmi_init_request()
533 req->ir_reply = (char *)&req[1] + requestlen; in ipmi_init_request()
534 req->ir_replybuflen = replylen; in ipmi_init_request()
543 struct ipmi_request *req; in ipmi_alloc_request() local
545 req = malloc(sizeof(struct ipmi_request) + requestlen + replylen, in ipmi_alloc_request()
547 ipmi_init_request(req, dev, msgid, addr, command, requestlen, replylen); in ipmi_alloc_request()
548 return (req); in ipmi_alloc_request()
553 ipmi_free_request(struct ipmi_request *req) in ipmi_free_request() argument
556 free(req, M_IPMI); in ipmi_free_request()
561 ipmi_complete_request(struct ipmi_softc *sc, struct ipmi_request *req) in ipmi_complete_request() argument
571 if (req->ir_owner == NULL) in ipmi_complete_request()
572 wakeup(req); in ipmi_complete_request()
574 dev = req->ir_owner; in ipmi_complete_request()
575 TAILQ_INSERT_TAIL(&dev->ipmi_completed_requests, req, ir_link); in ipmi_complete_request()
584 ipmi_submit_driver_request(struct ipmi_softc *sc, struct ipmi_request *req, in ipmi_submit_driver_request() argument
588 return (sc->ipmi_driver_request(sc, req, timo)); in ipmi_submit_driver_request()
600 struct ipmi_request *req; in ipmi_dequeue_request() local
609 req = TAILQ_FIRST(&sc->ipmi_pending_requests); in ipmi_dequeue_request()
610 TAILQ_REMOVE(&sc->ipmi_pending_requests, req, ir_link); in ipmi_dequeue_request()
611 return (req); in ipmi_dequeue_request()
616 ipmi_polled_enqueue_request(struct ipmi_softc *sc, struct ipmi_request *req) in ipmi_polled_enqueue_request() argument
621 TAILQ_INSERT_TAIL(&sc->ipmi_pending_requests, req, ir_link); in ipmi_polled_enqueue_request()
633 struct ipmi_request *req; in ipmi_reset_watchdog() local
636 IPMI_ALLOC_DRIVER_REQUEST(req, IPMI_ADDR(IPMI_APP_REQUEST, 0), in ipmi_reset_watchdog()
638 error = ipmi_submit_driver_request(sc, req, 0); in ipmi_reset_watchdog()
647 struct ipmi_request *req; in ipmi_set_watchdog() local
653 IPMI_ALLOC_DRIVER_REQUEST(req, IPMI_ADDR(IPMI_APP_REQUEST, 0), in ipmi_set_watchdog()
656 req->ir_request[0] = IPMI_SET_WD_TIMER_DONT_STOP in ipmi_set_watchdog()
658 req->ir_request[1] = (wd_timer_actions & 0xff); in ipmi_set_watchdog()
659 req->ir_request[2] = (wd_pretimeout_countdown & 0xff); in ipmi_set_watchdog()
660 req->ir_request[3] = 0; /* Timer use */ in ipmi_set_watchdog()
661 req->ir_request[4] = (sec * 10) & 0xff; in ipmi_set_watchdog()
662 req->ir_request[5] = (sec * 10) >> 8; in ipmi_set_watchdog()
664 req->ir_request[0] = IPMI_SET_WD_TIMER_SMS_OS; in ipmi_set_watchdog()
665 req->ir_request[1] = 0; in ipmi_set_watchdog()
666 req->ir_request[2] = 0; in ipmi_set_watchdog()
667 req->ir_request[3] = 0; /* Timer use */ in ipmi_set_watchdog()
668 req->ir_request[4] = 0; in ipmi_set_watchdog()
669 req->ir_request[5] = 0; in ipmi_set_watchdog()
671 error = ipmi_submit_driver_request(sc, req, 0); in ipmi_set_watchdog()
779 struct ipmi_request *req; in ipmi_power_cycle() local
793 IPMI_ALLOC_DRIVER_REQUEST(req, IPMI_ADDR(IPMI_CHASSIS_REQUEST, 0), in ipmi_power_cycle()
795 req->ir_request[0] = IPMI_CC_POWER_CYCLE; in ipmi_power_cycle()
797 ipmi_submit_driver_request(sc, req, MAX_TIMEOUT); in ipmi_power_cycle()
799 if (req->ir_error != 0 || req->ir_compcode != 0) { in ipmi_power_cycle()
801 req->ir_error, req->ir_compcode); in ipmi_power_cycle()
818 struct ipmi_request *req; in ipmi_startup() local
840 IPMI_ALLOC_DRIVER_REQUEST(req, IPMI_ADDR(IPMI_APP_REQUEST, 0), in ipmi_startup()
843 error = ipmi_submit_driver_request(sc, req, MAX_TIMEOUT); in ipmi_startup()
850 } else if (req->ir_compcode != 0) { in ipmi_startup()
853 req->ir_compcode); in ipmi_startup()
855 } else if (req->ir_replylen < 5) { in ipmi_startup()
857 req->ir_replylen); in ipmi_startup()
863 req->ir_reply[1] & 0x0f, in ipmi_startup()
864 req->ir_reply[2] & 0x7f, req->ir_reply[3] >> 4, req->ir_reply[3] & 0x0f, in ipmi_startup()
865 req->ir_reply[4] & 0x0f, req->ir_reply[4] >> 4, req->ir_reply[5]); in ipmi_startup()
867 sc->ipmi_dev_support = req->ir_reply[5]; in ipmi_startup()
869 IPMI_INIT_DRIVER_REQUEST(req, IPMI_ADDR(IPMI_APP_REQUEST, 0), in ipmi_startup()
872 ipmi_submit_driver_request(sc, req, 0); in ipmi_startup()
875 if (req->ir_compcode == 0xc0) { in ipmi_startup()
878 if (req->ir_compcode == 0xc1) { in ipmi_startup()
883 IPMI_INIT_DRIVER_REQUEST(req, IPMI_ADDR(IPMI_APP_REQUEST, 0), in ipmi_startup()
885 req->ir_request[0] = i; in ipmi_startup()
887 ipmi_submit_driver_request(sc, req, 0); in ipmi_startup()
889 if (req->ir_compcode != 0) in ipmi_startup()
899 IPMI_INIT_DRIVER_REQUEST(req, IPMI_ADDR(IPMI_APP_REQUEST, 0), in ipmi_startup()
902 ipmi_submit_driver_request(sc, req, 0); in ipmi_startup()
904 if (req->ir_compcode == 0x00) { in ipmi_startup()