Lines Matching refs:a
46 void esas2r_start_request(struct esas2r_adapter *a, struct esas2r_request *rq) in esas2r_start_request() argument
52 if (unlikely(test_bit(AF_DEGRADED_MODE, &a->flags) || in esas2r_start_request()
53 test_bit(AF_POWER_DOWN, &a->flags))) { in esas2r_start_request()
59 t = a->targetdb + rq->target_id; in esas2r_start_request()
61 if (unlikely(t >= a->targetdb_end in esas2r_start_request()
74 !test_bit(AF_DISC_PENDING, &a->flags))) in esas2r_start_request()
80 esas2r_complete_request(a, rq); in esas2r_start_request()
92 spin_lock_irqsave(&a->queue_lock, flags); in esas2r_start_request()
94 if (likely(list_empty(&a->defer_list) && in esas2r_start_request()
95 !test_bit(AF_CHPRST_PENDING, &a->flags) && in esas2r_start_request()
96 !test_bit(AF_FLASHING, &a->flags) && in esas2r_start_request()
97 !test_bit(AF_DISC_PENDING, &a->flags))) in esas2r_start_request()
98 esas2r_local_start_request(a, startrq); in esas2r_start_request()
100 list_add_tail(&startrq->req_list, &a->defer_list); in esas2r_start_request()
102 spin_unlock_irqrestore(&a->queue_lock, flags); in esas2r_start_request()
119 void esas2r_local_start_request(struct esas2r_adapter *a, in esas2r_local_start_request() argument
129 set_bit(AF_FLASHING, &a->flags); in esas2r_local_start_request()
131 list_add_tail(&rq->req_list, &a->active_list); in esas2r_local_start_request()
132 esas2r_start_vda_request(a, rq); in esas2r_local_start_request()
137 void esas2r_start_vda_request(struct esas2r_adapter *a, in esas2r_start_vda_request() argument
148 a->last_write++; in esas2r_start_vda_request()
149 if (a->last_write >= a->list_size) { in esas2r_start_vda_request()
150 a->last_write = 0; in esas2r_start_vda_request()
152 if (test_bit(AF_COMM_LIST_TOGGLE, &a->flags)) in esas2r_start_vda_request()
153 clear_bit(AF_COMM_LIST_TOGGLE, &a->flags); in esas2r_start_vda_request()
155 set_bit(AF_COMM_LIST_TOGGLE, &a->flags); in esas2r_start_vda_request()
159 (struct esas2r_inbound_list_source_entry *)a->inbound_list_md. in esas2r_start_vda_request()
161 + a->last_write; in esas2r_start_vda_request()
165 rq->vda_req_sz = (u16)(a->max_vdareq_size / sizeof(u32)); in esas2r_start_vda_request()
171 dw = a->last_write; in esas2r_start_vda_request()
173 if (test_bit(AF_COMM_LIST_TOGGLE, &a->flags)) in esas2r_start_vda_request()
179 esas2r_write_register_dword(a, MU_IN_LIST_WRITE, dw); in esas2r_start_vda_request()
187 bool esas2r_build_sg_list_sge(struct esas2r_adapter *a, in esas2r_build_sg_list_sge() argument
231 sgl = esas2r_alloc_sgl(a); in esas2r_build_sg_list_sge()
370 static bool esas2r_build_prd_iblk(struct esas2r_adapter *a, in esas2r_build_prd_iblk() argument
449 sgl = esas2r_alloc_sgl(a); in esas2r_build_prd_iblk()
524 bool esas2r_build_sg_list_prd(struct esas2r_adapter *a, in esas2r_build_sg_list_prd() argument
529 struct esas2r_target *t = a->targetdb + rq->target_id; in esas2r_build_sg_list_prd()
633 if (unlikely(!esas2r_build_prd_iblk(a, sgc))) in esas2r_build_sg_list_prd()
665 static void esas2r_handle_pending_reset(struct esas2r_adapter *a, u32 currtime) in esas2r_handle_pending_reset() argument
667 u32 delta = currtime - a->chip_init_time; in esas2r_handle_pending_reset()
676 esas2r_local_reset_adapter(a); in esas2r_handle_pending_reset()
681 doorbell = esas2r_read_register_dword(a, MU_DOORBELL_OUT); in esas2r_handle_pending_reset()
683 esas2r_force_interrupt(a); in esas2r_handle_pending_reset()
688 esas2r_write_register_dword(a, MU_DOORBELL_OUT, in esas2r_handle_pending_reset()
691 set_bit(AF_CHPRST_DETECTED, &a->flags); in esas2r_handle_pending_reset()
692 set_bit(AF_LEGACY_SGE_MODE, &a->flags); in esas2r_handle_pending_reset()
694 a->max_vdareq_size = 128; in esas2r_handle_pending_reset()
695 a->build_sgl = esas2r_build_sg_list_sge; in esas2r_handle_pending_reset()
697 set_bit(AF_CHPRST_DETECTED, &a->flags); in esas2r_handle_pending_reset()
698 clear_bit(AF_LEGACY_SGE_MODE, &a->flags); in esas2r_handle_pending_reset()
700 a->max_vdareq_size = 1024; in esas2r_handle_pending_reset()
701 a->build_sgl = esas2r_build_sg_list_prd; in esas2r_handle_pending_reset()
703 esas2r_local_reset_adapter(a); in esas2r_handle_pending_reset()
711 void esas2r_timer_tick(struct esas2r_adapter *a) in esas2r_timer_tick() argument
714 u32 deltatime = currtime - a->last_tick_time; in esas2r_timer_tick()
716 a->last_tick_time = currtime; in esas2r_timer_tick()
719 if (a->chip_uptime && in esas2r_timer_tick()
720 !test_bit(AF_CHPRST_PENDING, &a->flags) && in esas2r_timer_tick()
721 !test_bit(AF_DISC_PENDING, &a->flags)) { in esas2r_timer_tick()
722 if (deltatime >= a->chip_uptime) in esas2r_timer_tick()
723 a->chip_uptime = 0; in esas2r_timer_tick()
725 a->chip_uptime -= deltatime; in esas2r_timer_tick()
728 if (test_bit(AF_CHPRST_PENDING, &a->flags)) { in esas2r_timer_tick()
729 if (!test_bit(AF_CHPRST_NEEDED, &a->flags) && in esas2r_timer_tick()
730 !test_bit(AF_CHPRST_DETECTED, &a->flags)) in esas2r_timer_tick()
731 esas2r_handle_pending_reset(a, currtime); in esas2r_timer_tick()
733 if (test_bit(AF_DISC_PENDING, &a->flags)) in esas2r_timer_tick()
734 esas2r_disc_check_complete(a); in esas2r_timer_tick()
735 if (test_bit(AF_HEARTBEAT_ENB, &a->flags)) { in esas2r_timer_tick()
736 if (test_bit(AF_HEARTBEAT, &a->flags)) { in esas2r_timer_tick()
737 if ((currtime - a->heartbeat_time) >= in esas2r_timer_tick()
739 clear_bit(AF_HEARTBEAT, &a->flags); in esas2r_timer_tick()
744 esas2r_local_reset_adapter(a); in esas2r_timer_tick()
747 set_bit(AF_HEARTBEAT, &a->flags); in esas2r_timer_tick()
748 a->heartbeat_time = currtime; in esas2r_timer_tick()
749 esas2r_force_interrupt(a); in esas2r_timer_tick()
754 if (atomic_read(&a->disable_cnt) == 0) in esas2r_timer_tick()
755 esas2r_do_deferred_processes(a); in esas2r_timer_tick()
764 bool esas2r_send_task_mgmt(struct esas2r_adapter *a, in esas2r_send_task_mgmt() argument
779 spin_lock_irqsave(&a->queue_lock, flags); in esas2r_send_task_mgmt()
782 list_for_each_safe(element, next, &a->defer_list) { in esas2r_send_task_mgmt()
795 if (esas2r_ioreq_aborted(a, rq, RS_ABORTED)) in esas2r_send_task_mgmt()
811 if (test_bit(AF_FLASHING, &a->flags)) { in esas2r_send_task_mgmt()
815 list_for_each_safe(element, next, &a->active_list) { in esas2r_send_task_mgmt()
828 spin_unlock_irqrestore(&a->queue_lock, flags); in esas2r_send_task_mgmt()
830 if (!test_bit(AF_FLASHING, &a->flags)) in esas2r_send_task_mgmt()
831 esas2r_start_request(a, rqaux); in esas2r_send_task_mgmt()
833 esas2r_comp_list_drain(a, &comp_list); in esas2r_send_task_mgmt()
835 if (atomic_read(&a->disable_cnt) == 0) in esas2r_send_task_mgmt()
836 esas2r_do_deferred_processes(a); in esas2r_send_task_mgmt()
843 void esas2r_reset_bus(struct esas2r_adapter *a) in esas2r_reset_bus() argument
847 if (!test_bit(AF_DEGRADED_MODE, &a->flags) && in esas2r_reset_bus()
848 !test_bit(AF_CHPRST_PENDING, &a->flags) && in esas2r_reset_bus()
849 !test_bit(AF_DISC_PENDING, &a->flags)) { in esas2r_reset_bus()
850 set_bit(AF_BUSRST_NEEDED, &a->flags); in esas2r_reset_bus()
851 set_bit(AF_BUSRST_PENDING, &a->flags); in esas2r_reset_bus()
852 set_bit(AF_OS_RESET, &a->flags); in esas2r_reset_bus()
854 esas2r_schedule_tasklet(a); in esas2r_reset_bus()
858 bool esas2r_ioreq_aborted(struct esas2r_adapter *a, struct esas2r_request *rq, in esas2r_ioreq_aborted() argument