Lines Matching refs:skreq
460 struct skd_request_context *skreq, int error);
462 struct skd_request_context *skreq);
464 struct skd_request_context *skreq);
483 struct skd_request_context *skreq, const char *event);
527 struct skd_request_context *skreq) in skd_prep_zerosize_flush_cdb() argument
529 skreq->flush_cmd = 1; in skd_prep_zerosize_flush_cdb()
545 struct skd_request_context *skreq, in skd_prep_discard_cdb() argument
564 req = skreq->req; in skd_prep_discard_cdb()
575 struct skd_request_context *skreq; in skd_request_fn() local
651 skreq = skdev->skreq_free_list; in skd_request_fn()
652 if (skreq == NULL) { in skd_request_fn()
657 SKD_ASSERT(skreq->state == SKD_REQ_STATE_IDLE); in skd_request_fn()
658 SKD_ASSERT((skreq->id & SKD_ID_INCR) == 0); in skd_request_fn()
669 skreq->flush_cmd = 0; in skd_request_fn()
670 skreq->n_sg = 0; in skd_request_fn()
671 skreq->sg_byte_count = 0; in skd_request_fn()
672 skreq->discard_page = 0; in skd_request_fn()
682 skreq->req = req; in skd_request_fn()
683 skreq->fitmsg_id = 0; in skd_request_fn()
710 skreq->fitmsg_id = skmsg->id; in skd_request_fn()
726 be_dmaa = cpu_to_be64((u64)skreq->sksg_dma_address); in skd_request_fn()
727 cmdctxt = skreq->id + SKD_ID_INCR; in skd_request_fn()
734 skreq->sg_data_dir = SKD_DATA_DIR_CARD_TO_HOST; in skd_request_fn()
736 skreq->sg_data_dir = SKD_DATA_DIR_HOST_TO_CARD; in skd_request_fn()
742 skd_end_request(skdev, skreq, -ENOMEM); in skd_request_fn()
745 skreq->discard_page = 1; in skd_request_fn()
747 skd_prep_discard_cdb(scsi_req, skreq, page, lba, count); in skd_request_fn()
750 skd_prep_zerosize_flush_cdb(scsi_req, skreq); in skd_request_fn()
751 SKD_ASSERT(skreq->flush_cmd == 1); in skd_request_fn()
763 error = skd_preop_sg_list(skdev, skreq); in skd_request_fn()
777 skd_end_request(skdev, skreq, error); in skd_request_fn()
783 cpu_to_be32(skreq->sg_byte_count); in skd_request_fn()
786 skdev->skreq_free_list = skreq->next; in skd_request_fn()
787 skreq->state = SKD_REQ_STATE_BUSY; in skd_request_fn()
788 skreq->id += SKD_ID_INCR; in skd_request_fn()
797 skreq->timeout_stamp = skdev->timeout_stamp; in skd_request_fn()
798 timo_slot = skreq->timeout_stamp & SKD_TIMEOUT_SLOT_MASK; in skd_request_fn()
803 skreq->id, skdev->in_flight); in skd_request_fn()
852 struct skd_request_context *skreq, int error) in skd_end_request() argument
854 struct request *req = skreq->req; in skd_end_request()
858 (skreq->discard_page == 1)) { in skd_end_request()
865 struct request *req = skreq->req; in skd_end_request()
871 skd_name(skdev), cmd, lba, count, skreq->id); in skd_end_request()
874 skdev->name, __func__, __LINE__, skreq->id, error); in skd_end_request()
876 __blk_end_request_all(skreq->req, error); in skd_end_request()
880 struct skd_request_context *skreq) in skd_preop_sg_list() argument
882 struct request *req = skreq->req; in skd_preop_sg_list()
883 int writing = skreq->sg_data_dir == SKD_DATA_DIR_HOST_TO_CARD; in skd_preop_sg_list()
885 struct scatterlist *sg = &skreq->sg[0]; in skd_preop_sg_list()
889 skreq->sg_byte_count = 0; in skd_preop_sg_list()
908 skreq->n_sg = n_sg; in skd_preop_sg_list()
911 struct fit_sg_descriptor *sgd = &skreq->sksg_list[i]; in skd_preop_sg_list()
917 skreq->sg_byte_count += cnt; in skd_preop_sg_list()
922 skreq->sksg_list[n_sg - 1].next_desc_ptr = 0LL; in skd_preop_sg_list()
923 skreq->sksg_list[n_sg - 1].control = FIT_SGD_CONTROL_LAST; in skd_preop_sg_list()
928 skreq->id, skreq->sksg_list, skreq->sksg_dma_address); in skd_preop_sg_list()
930 struct fit_sg_descriptor *sgd = &skreq->sksg_list[i]; in skd_preop_sg_list()
943 struct skd_request_context *skreq) in skd_postop_sg_list() argument
945 int writing = skreq->sg_data_dir == SKD_DATA_DIR_HOST_TO_CARD; in skd_postop_sg_list()
952 skreq->sksg_list[skreq->n_sg - 1].next_desc_ptr = in skd_postop_sg_list()
953 skreq->sksg_dma_address + in skd_postop_sg_list()
954 ((skreq->n_sg) * sizeof(struct fit_sg_descriptor)); in skd_postop_sg_list()
955 pci_unmap_sg(skdev->pdev, &skreq->sg[0], skreq->n_sg, pci_dir); in skd_postop_sg_list()
1552 struct skd_request_context *skreq, in skd_skreq_prep_buffering() argument
1561 skreq->sg_byte_count = resid; in skd_skreq_prep_buffering()
1563 skreq->n_sg = 0; in skd_skreq_prep_buffering()
1567 u32 ix = skreq->n_sg; in skd_skreq_prep_buffering()
1568 struct scatterlist *sg = &skreq->sg[ix]; in skd_skreq_prep_buffering()
1569 struct fit_sg_descriptor *sksg = &skreq->sksg_list[ix]; in skd_skreq_prep_buffering()
1589 sksg->next_desc_ptr = skreq->sksg_dma_address + in skd_skreq_prep_buffering()
1592 skreq->n_sg++; in skd_skreq_prep_buffering()
1596 if (skreq->n_sg > 0) { in skd_skreq_prep_buffering()
1597 u32 ix = skreq->n_sg - 1; in skd_skreq_prep_buffering()
1598 struct fit_sg_descriptor *sksg = &skreq->sksg_list[ix]; in skd_skreq_prep_buffering()
1609 skreq->id, skreq->sksg_list, skreq->sksg_dma_address); in skd_skreq_prep_buffering()
1610 for (i = 0; i < skreq->n_sg; i++) { in skd_skreq_prep_buffering()
1611 struct fit_sg_descriptor *sgd = &skreq->sksg_list[i]; in skd_skreq_prep_buffering()
1628 struct skd_request_context *skreq = &skspcl->req; in skd_sg_io_prep_buffering() local
1632 rc = skd_skreq_prep_buffering(skdev, skreq, dxfer_len); in skd_sg_io_prep_buffering()
2384 struct skd_request_context *skreq) in skd_resolve_req_exception() argument
2386 u8 cmp_status = skreq->completion.status; in skd_resolve_req_exception()
2388 switch (skd_check_status(skdev, cmp_status, &skreq->err_info)) { in skd_resolve_req_exception()
2391 skd_end_request(skdev, skreq, 0); in skd_resolve_req_exception()
2395 skd_log_skreq(skdev, skreq, "retry(busy)"); in skd_resolve_req_exception()
2396 blk_requeue_request(skdev->queue, skreq->req); in skd_resolve_req_exception()
2404 if ((unsigned long) ++skreq->req->special < SKD_MAX_RETRIES) { in skd_resolve_req_exception()
2405 skd_log_skreq(skdev, skreq, "retry"); in skd_resolve_req_exception()
2406 blk_requeue_request(skdev->queue, skreq->req); in skd_resolve_req_exception()
2413 skd_end_request(skdev, skreq, -EIO); in skd_resolve_req_exception()
2420 struct skd_request_context *skreq) in skd_release_skreq() argument
2444 msg_slot = skreq->fitmsg_id & SKD_ID_SLOT_MASK; in skd_release_skreq()
2448 if (skmsg->id == skreq->fitmsg_id) { in skd_release_skreq()
2467 timo_slot = skreq->timeout_stamp & SKD_TIMEOUT_SLOT_MASK; in skd_release_skreq()
2474 skreq->req = NULL; in skd_release_skreq()
2479 skreq->state = SKD_REQ_STATE_IDLE; in skd_release_skreq()
2480 skreq->id += SKD_ID_INCR; in skd_release_skreq()
2481 skreq->next = skdev->skreq_free_list; in skd_release_skreq()
2482 skdev->skreq_free_list = skreq; in skd_release_skreq()
2694 struct skd_request_context *skreq; in skd_isr_completion_posted() local
2752 skreq = &skdev->skreq_table[req_slot]; in skd_isr_completion_posted()
2757 if (skreq->id != req_id) { in skd_isr_completion_posted()
2760 req_id, skreq->id); in skd_isr_completion_posted()
2766 skreq->id, new_id); in skd_isr_completion_posted()
2772 SKD_ASSERT(skreq->state == SKD_REQ_STATE_BUSY); in skd_isr_completion_posted()
2774 if (skreq->state == SKD_REQ_STATE_ABORTED) { in skd_isr_completion_posted()
2777 skreq, skreq->id); in skd_isr_completion_posted()
2780 skd_release_skreq(skdev, skreq); in skd_isr_completion_posted()
2784 skreq->completion = *skcmp; in skd_isr_completion_posted()
2786 skreq->err_info = *skerr; in skd_isr_completion_posted()
2792 if (skreq->n_sg > 0) in skd_isr_completion_posted()
2793 skd_postop_sg_list(skdev, skreq); in skd_isr_completion_posted()
2795 if (!skreq->req) { in skd_isr_completion_posted()
2799 skreq, skreq->id, req_id); in skd_isr_completion_posted()
2806 skd_end_request(skdev, skreq, 0); in skd_isr_completion_posted()
2808 skd_resolve_req_exception(skdev, skreq); in skd_isr_completion_posted()
2815 skd_release_skreq(skdev, skreq); in skd_isr_completion_posted()
3231 struct skd_request_context *skreq = &skdev->skreq_table[i]; in skd_recover_requests() local
3233 if (skreq->state == SKD_REQ_STATE_BUSY) { in skd_recover_requests()
3234 skd_log_skreq(skdev, skreq, "recover"); in skd_recover_requests()
3236 SKD_ASSERT((skreq->id & SKD_ID_INCR) != 0); in skd_recover_requests()
3237 SKD_ASSERT(skreq->req != NULL); in skd_recover_requests()
3240 if (skreq->n_sg > 0) in skd_recover_requests()
3241 skd_postop_sg_list(skdev, skreq); in skd_recover_requests()
3244 (unsigned long) ++skreq->req->special < in skd_recover_requests()
3246 blk_requeue_request(skdev->queue, skreq->req); in skd_recover_requests()
3248 skd_end_request(skdev, skreq, -EIO); in skd_recover_requests()
3250 skreq->req = NULL; in skd_recover_requests()
3252 skreq->state = SKD_REQ_STATE_IDLE; in skd_recover_requests()
3253 skreq->id += SKD_ID_INCR; in skd_recover_requests()
3256 skreq[-1].next = skreq; in skd_recover_requests()
3257 skreq->next = NULL; in skd_recover_requests()
4240 struct skd_request_context *skreq; in skd_cons_skreq() local
4242 skreq = &skdev->skreq_table[i]; in skd_cons_skreq()
4244 skreq->id = i + SKD_ID_RW_REQUEST; in skd_cons_skreq()
4245 skreq->state = SKD_REQ_STATE_IDLE; in skd_cons_skreq()
4247 skreq->sg = kzalloc(sizeof(struct scatterlist) * in skd_cons_skreq()
4249 if (skreq->sg == NULL) { in skd_cons_skreq()
4253 sg_init_table(skreq->sg, skdev->sgs_per_request); in skd_cons_skreq()
4255 skreq->sksg_list = skd_cons_sg_list(skdev, in skd_cons_skreq()
4257 &skreq->sksg_dma_address); in skd_cons_skreq()
4259 if (skreq->sksg_list == NULL) { in skd_cons_skreq()
4264 skreq->next = &skreq[1]; in skd_cons_skreq()
4590 struct skd_request_context *skreq; in skd_free_skreq() local
4592 skreq = &skdev->skreq_table[i]; in skd_free_skreq()
4594 skd_free_sg_list(skdev, skreq->sksg_list, in skd_free_skreq()
4596 skreq->sksg_dma_address); in skd_free_skreq()
4598 skreq->sksg_list = NULL; in skd_free_skreq()
4599 skreq->sksg_dma_address = 0; in skd_free_skreq()
4601 kfree(skreq->sg); in skd_free_skreq()
5312 struct skd_request_context *skreq, const char *event) in skd_log_skreq() argument
5315 skdev->name, __func__, __LINE__, skdev->name, skreq, event); in skd_log_skreq()
5318 skd_skreq_state_to_str(skreq->state), skreq->state, in skd_log_skreq()
5319 skreq->id, skreq->fitmsg_id); in skd_log_skreq()
5322 skreq->timeout_stamp, skreq->sg_data_dir, skreq->n_sg); in skd_log_skreq()
5324 if (skreq->req != NULL) { in skd_log_skreq()
5325 struct request *req = skreq->req; in skd_log_skreq()