Lines Matching refs:scifdev
97 int local_size, struct scif_dev *scifdev) in scif_setup_qp_connect() argument
115 err = scif_map_single(&qp->local_buf, local_q, scifdev, local_size); in scif_setup_qp_connect()
132 scifdev, sizeof(struct scif_qp)); in scif_setup_qp_connect()
138 scif_unmap_single(qp->local_buf, scifdev, local_size); in scif_setup_qp_connect()
148 struct scif_dev *scifdev) in scif_setup_qp_accept() argument
159 remote_qp = scif_ioremap(phys, sizeof(struct scif_qp), scifdev); in scif_setup_qp_accept()
169 remote_q = scif_ioremap(qp->remote_buf, remote_size, scifdev); in scif_setup_qp_accept()
189 err = scif_map_single(&qp->local_buf, local_q, scifdev, local_size); in scif_setup_qp_accept()
201 err = scif_map_single(qp_offset, qp, scifdev, in scif_setup_qp_accept()
208 scif_unmap_single(qp->local_buf, scifdev, local_size); in scif_setup_qp_accept()
213 scif_iounmap(remote_q, remote_size, scifdev); in scif_setup_qp_accept()
216 scif_iounmap(qp->remote_qp, sizeof(struct scif_qp), scifdev); in scif_setup_qp_accept()
221 int scif_setup_qp_connect_response(struct scif_dev *scifdev, in scif_setup_qp_connect_response() argument
229 qp->remote_qp = scif_ioremap(payload, sizeof(struct scif_qp), scifdev); in scif_setup_qp_connect_response()
237 dev_err(&scifdev->sdev->dev, in scif_setup_qp_connect_response()
239 scif_dev[scif_info.nodeid].node, scifdev->node); in scif_setup_qp_connect_response()
246 r_buf = scif_ioremap(tmp_phys, remote_size, scifdev); in scif_setup_qp_connect_response()
276 scif_send_msg_intr(struct scif_dev *scifdev) in scif_send_msg_intr() argument
278 struct scif_hw_dev *sdev = scifdev->sdev; in scif_send_msg_intr()
280 if (scifdev_is_p2p(scifdev)) in scif_send_msg_intr()
281 sdev->hw_ops->send_p2p_intr(sdev, scifdev->rdb, &scifdev->mmio); in scif_send_msg_intr()
283 sdev->hw_ops->send_intr(sdev, scifdev->rdb); in scif_send_msg_intr()
286 int scif_qp_response(phys_addr_t phys, struct scif_dev *scifdev) in scif_qp_response() argument
291 err = scif_setup_qp_connect_response(scifdev, scifdev->qpairs, phys); in scif_qp_response()
298 msg.dst.node = scifdev->node; in scif_qp_response()
299 err = scif_nodeqp_send(scifdev, &msg); in scif_qp_response()
304 void scif_send_exit(struct scif_dev *scifdev) in scif_send_exit() argument
309 scifdev->exit = OP_IN_PROGRESS; in scif_send_exit()
312 msg.dst.node = scifdev->node; in scif_send_exit()
313 ret = scif_nodeqp_send(scifdev, &msg); in scif_send_exit()
317 wait_event_timeout(scif_info.exitwq, scifdev->exit == OP_COMPLETED, in scif_send_exit()
320 scifdev->exit = OP_IDLE; in scif_send_exit()
323 int scif_setup_qp(struct scif_dev *scifdev) in scif_setup_qp() argument
337 scifdev->qpairs = qp; in scif_setup_qp()
338 err = scif_setup_qp_connect(qp, &scifdev->qp_dma_addr, in scif_setup_qp()
339 local_size, scifdev); in scif_setup_qp()
349 kfree(scifdev->qpairs); in scif_setup_qp()
350 scifdev->qpairs = NULL; in scif_setup_qp()
380 scif_init_p2p_info(struct scif_dev *scifdev, struct scif_dev *peerdev) in scif_init_p2p_info() argument
385 struct scif_hw_dev *sdev = scifdev->sdev; in scif_init_p2p_info()
430 static void scif_deinit_p2p_info(struct scif_dev *scifdev, in scif_deinit_p2p_info() argument
433 struct scif_hw_dev *sdev = scifdev->sdev; in scif_deinit_p2p_info()
451 static void scif_node_connect(struct scif_dev *scifdev, int dst) in scif_node_connect() argument
453 struct scif_dev *dev_j = scifdev; in scif_node_connect()
508 dev_err(&scifdev->sdev->dev, in scif_node_connect()
540 struct scif_dev *scifdev = &scif_dev[i]; in scif_p2p_setup() local
544 scif_node_connect(scifdev, j); in scif_p2p_setup()
592 scif_display_message(struct scif_dev *scifdev, struct scifmsg *msg, in scif_display_message() argument
598 dev_err(&scifdev->sdev->dev, in scif_display_message()
602 dev_info(&scifdev->sdev->dev, in scif_display_message()
609 int _scif_nodeqp_send(struct scif_dev *scifdev, struct scifmsg *msg) in _scif_nodeqp_send() argument
611 struct scif_qp *qp = scifdev->qpairs; in _scif_nodeqp_send()
614 scif_display_message(scifdev, msg, "Sent"); in _scif_nodeqp_send()
634 if (scifdev_self(scifdev)) in _scif_nodeqp_send()
640 queue_work(scifdev->intr_wq, &scifdev->intr_bh); in _scif_nodeqp_send()
642 scif_send_msg_intr(scifdev); in _scif_nodeqp_send()
646 dev_dbg(&scifdev->sdev->dev, in _scif_nodeqp_send()
657 int scif_nodeqp_send(struct scif_dev *scifdev, struct scifmsg *msg) in scif_nodeqp_send() argument
664 if (OP_IDLE != scifdev->exit) in scif_nodeqp_send()
666 spdev = scif_get_peer_dev(scifdev); in scif_nodeqp_send()
672 err = _scif_nodeqp_send(scifdev, msg); in scif_nodeqp_send()
702 scif_init(struct scif_dev *scifdev, struct scifmsg *msg) in scif_init() argument
708 flush_delayed_work(&scifdev->qp_dwork); in scif_init()
710 scif_peer_register_device(scifdev); in scif_init()
729 scif_exit(struct scif_dev *scifdev, struct scifmsg *unused) in scif_exit() argument
731 scifdev->exit_ack_pending = true; in scif_exit()
733 scif_disconnect_node(scifdev->node, false); in scif_exit()
735 scif_stop(scifdev); in scif_exit()
736 schedule_delayed_work(&scifdev->qp_dwork, in scif_exit()
747 scif_exit_ack(struct scif_dev *scifdev, struct scifmsg *unused) in scif_exit_ack() argument
749 scifdev->exit = OP_COMPLETED; in scif_exit_ack()
768 scif_node_add(struct scif_dev *scifdev, struct scifmsg *msg) in scif_node_add() argument
775 dev_dbg(&scifdev->sdev->dev, in scif_node_add()
777 scifdev->node, msg->dst.node, msg->src.node); in scif_node_add()
778 dev_dbg(&scifdev->sdev->dev, in scif_node_add()
787 dev_err(&scifdev->sdev->dev, in scif_node_add()
793 dev_err(&scifdev->sdev->dev, in scif_node_add()
809 dev_err(&scifdev->sdev->dev, in scif_node_add()
838 dev_err(&scifdev->sdev->dev, in scif_node_add()
886 scif_node_add_ack(struct scif_dev *scifdev, struct scifmsg *msg) in scif_node_add_ack() argument
892 dev_dbg(&scifdev->sdev->dev, in scif_node_add_ack()
894 scifdev->node, msg->src.node, msg->dst.node); in scif_node_add_ack()
895 dev_dbg(&scifdev->sdev->dev, in scif_node_add_ack()
938 scif_node_add_nack(struct scif_dev *scifdev, struct scifmsg *msg) in scif_node_add_nack() argument
943 dev_dbg(&scifdev->sdev->dev, in scif_node_add_nack()
944 "SCIF_NODE_ADD_NACK received from %d\n", scifdev->node); in scif_node_add_nack()
956 scif_node_remove(struct scif_dev *scifdev, struct scifmsg *msg) in scif_node_remove() argument
972 scif_node_remove_ack(struct scif_dev *scifdev, struct scifmsg *msg) in scif_node_remove_ack() argument
987 scif_get_node_info_resp(struct scif_dev *scifdev, struct scifmsg *msg) in scif_get_node_info_resp() argument
995 scif_nodeqp_send(scifdev, msg); in scif_get_node_info_resp()
1009 scif_msg_unknown(struct scif_dev *scifdev, struct scifmsg *msg) in scif_msg_unknown() argument
1012 dev_err(&scifdev->sdev->dev, in scif_msg_unknown()
1014 msg->uop, scifdev->node); in scif_msg_unknown()
1073 scif_nodeqp_msg_handler(struct scif_dev *scifdev, in scif_nodeqp_msg_handler() argument
1076 scif_display_message(scifdev, msg, "Rcvd"); in scif_nodeqp_msg_handler()
1080 dev_err(&scifdev->sdev->dev, in scif_nodeqp_msg_handler()
1082 msg->uop, scifdev->node); in scif_nodeqp_msg_handler()
1086 scif_intr_func[msg->uop](scifdev, msg); in scif_nodeqp_msg_handler()
1098 void scif_nodeqp_intrhandler(struct scif_dev *scifdev, struct scif_qp *qp) in scif_nodeqp_intrhandler() argument
1107 scif_nodeqp_msg_handler(scifdev, qp, &msg); in scif_nodeqp_intrhandler()
1130 struct scif_dev *scifdev = scif_info.loopb_dev; in scif_loopb_wq_handler() local
1131 struct scif_qp *qp = scifdev->qpairs; in scif_loopb_wq_handler()
1146 scif_nodeqp_msg_handler(scifdev, qp, &msg->msg); in scif_loopb_wq_handler()
1185 scif_loopb_msg_handler(struct scif_dev *scifdev, struct scif_qp *qp) in scif_loopb_msg_handler() argument
1216 int scif_setup_loopback_qp(struct scif_dev *scifdev) in scif_setup_loopback_qp() argument
1222 err = scif_setup_intr_wq(scifdev); in scif_setup_loopback_qp()
1227 "SCIF LOOPB %d", scifdev->node); in scif_setup_loopback_qp()
1236 scifdev->qpairs = kzalloc(sizeof(*scifdev->qpairs), GFP_KERNEL); in scif_setup_loopback_qp()
1237 if (!scifdev->qpairs) { in scif_setup_loopback_qp()
1242 qp = scifdev->qpairs; in scif_setup_loopback_qp()
1266 scif_info.nodeid = scifdev->node; in scif_setup_loopback_qp()
1268 scif_peer_register_device(scifdev); in scif_setup_loopback_qp()
1270 scif_info.loopb_dev = scifdev; in scif_setup_loopback_qp()
1273 kfree(scifdev->qpairs); in scif_setup_loopback_qp()
1277 scif_destroy_intr_wq(scifdev); in scif_setup_loopback_qp()
1288 int scif_destroy_loopback_qp(struct scif_dev *scifdev) in scif_destroy_loopback_qp() argument
1290 scif_peer_unregister_device(scifdev); in scif_destroy_loopback_qp()
1292 scif_destroy_intr_wq(scifdev); in scif_destroy_loopback_qp()
1293 kfree(scifdev->qpairs->outbound_q.rb_base); in scif_destroy_loopback_qp()
1294 kfree(scifdev->qpairs); in scif_destroy_loopback_qp()
1295 scifdev->sdev = NULL; in scif_destroy_loopback_qp()
1300 void scif_destroy_p2p(struct scif_dev *scifdev) in scif_destroy_p2p() argument
1309 list_for_each_safe(pos, tmp, &scifdev->p2p) { in scif_destroy_p2p()
1311 dma_unmap_sg(&scifdev->sdev->dev, p2p->ppi_sg[SCIF_PPI_MMIO], in scif_destroy_p2p()
1314 dma_unmap_sg(&scifdev->sdev->dev, p2p->ppi_sg[SCIF_PPI_APER], in scif_destroy_p2p()
1328 if (p2p->ppi_peer_id == scifdev->node) { in scif_destroy_p2p()