Lines Matching refs:cds

780 static inline int cds_check_len(CcwDataStream *cds, int len)  in cds_check_len()  argument
782 if (cds->at_byte + len > cds->count) { in cds_check_len()
783 cds->flags |= CDS_F_STREAM_BROKEN; in cds_check_len()
785 return cds->flags & CDS_F_STREAM_BROKEN ? -EINVAL : len; in cds_check_len()
793 static int ccw_dstream_rw_noflags(CcwDataStream *cds, void *buff, int len, in ccw_dstream_rw_noflags() argument
798 ret = cds_check_len(cds, len); in ccw_dstream_rw_noflags()
802 if (!cds_ccw_addrs_ok(cds->cda, len, cds->flags & CDS_F_FMT)) { in ccw_dstream_rw_noflags()
808 if (!cds->do_skip) { in ccw_dstream_rw_noflags()
809 ret = address_space_rw(&address_space_memory, cds->cda, in ccw_dstream_rw_noflags()
815 cds->flags |= CDS_F_STREAM_BROKEN; in ccw_dstream_rw_noflags()
819 cds->at_byte += len; in ccw_dstream_rw_noflags()
820 cds->cda += len; in ccw_dstream_rw_noflags()
838 static inline int ida_read_next_idaw(CcwDataStream *cds) in ida_read_next_idaw() argument
843 bool idaw_fmt2 = cds->flags & CDS_F_C64; in ida_read_next_idaw()
844 bool ccw_fmt1 = cds->flags & CDS_F_FMT; in ida_read_next_idaw()
847 idaw_addr = cds->cda_orig + sizeof(idaw.fmt2) * cds->at_idaw; in ida_read_next_idaw()
854 cds->cda = be64_to_cpu(idaw.fmt2); in ida_read_next_idaw()
856 idaw_addr = cds->cda_orig + sizeof(idaw.fmt1) * cds->at_idaw; in ida_read_next_idaw()
863 cds->cda = be64_to_cpu(idaw.fmt1); in ida_read_next_idaw()
864 if (cds->cda & 0x80000000) { in ida_read_next_idaw()
868 ++(cds->at_idaw); in ida_read_next_idaw()
876 static int ccw_dstream_rw_ida(CcwDataStream *cds, void *buff, int len, in ccw_dstream_rw_ida() argument
879 uint64_t bsz = ccw_ida_block_size(cds->flags); in ccw_dstream_rw_ida()
883 ret = cds_check_len(cds, len); in ccw_dstream_rw_ida()
887 if (!cds->at_idaw) { in ccw_dstream_rw_ida()
889 ret = ida_read_next_idaw(cds); in ccw_dstream_rw_ida()
893 cont_left = ida_continuous_left(cds->cda, bsz); in ccw_dstream_rw_ida()
895 cont_left = ida_continuous_left(cds->cda, bsz); in ccw_dstream_rw_ida()
897 ret = ida_read_next_idaw(cds); in ccw_dstream_rw_ida()
901 if (cds->cda & (bsz - 1)) { in ccw_dstream_rw_ida()
910 if (!cds->do_skip) { in ccw_dstream_rw_ida()
911 ret = address_space_rw(&address_space_memory, cds->cda, in ccw_dstream_rw_ida()
923 cds->at_byte += iter_len; in ccw_dstream_rw_ida()
924 cds->cda += iter_len; in ccw_dstream_rw_ida()
929 ret = ida_read_next_idaw(cds); in ccw_dstream_rw_ida()
937 cds->flags |= CDS_F_STREAM_BROKEN; in ccw_dstream_rw_ida()
941 void ccw_dstream_init(CcwDataStream *cds, CCW1 const *ccw, ORB const *orb) in ccw_dstream_init() argument
948 cds->flags = (orb->ctrl0 & ORB_CTRL0_MASK_I2K ? CDS_F_I2K : 0) | in ccw_dstream_init()
953 cds->count = ccw->count; in ccw_dstream_init()
954 cds->cda_orig = ccw->cda; in ccw_dstream_init()
956 cds->do_skip = (ccw->flags & CCW_FLAG_SKIP) && in ccw_dstream_init()
960 ccw_dstream_rewind(cds); in ccw_dstream_init()
961 if (!(cds->flags & CDS_F_IDA)) { in ccw_dstream_init()
962 cds->op_handler = ccw_dstream_rw_noflags; in ccw_dstream_init()
964 cds->op_handler = ccw_dstream_rw_ida; in ccw_dstream_init()
1019 ccw_dstream_init(&sch->cds, &ccw, &(sch->orb)); in css_interpret_ccw()
1033 ret = ccw_dstream_write_buf(&sch->cds, sch->sense_data, len); in css_interpret_ccw()
1034 sch->curr_status.scsw.count = ccw_dstream_residual_count(&sch->cds); in css_interpret_ccw()
1062 ret = ccw_dstream_write_buf(&sch->cds, sense_id, len); in css_interpret_ccw()
1064 sch->curr_status.scsw.count = ccw_dstream_residual_count(&sch->cds); in css_interpret_ccw()