css.c (b7cbebf2b9d7aa8854cfd6a45484e160244e9f48) css.c (19f703477314a5db09ffc3c0f6be9c45645f8302)
1/*
2 * Channel subsystem base support.
3 *
4 * Copyright 2012 IBM Corp.
5 * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
6 *
7 * This work is licensed under the terms of the GNU GPL, version 2 or (at
8 * your option) any later version. See the COPYING file in the top-level

--- 860 unchanged lines hidden (view full) ---

869 bool idaw_fmt2 = cds->flags & CDS_F_C64;
870 bool ccw_fmt1 = cds->flags & CDS_F_FMT;
871
872 if (idaw_fmt2) {
873 idaw_addr = cds->cda_orig + sizeof(idaw.fmt2) * cds->at_idaw;
874 if (idaw_addr & 0x07 || !cds_ccw_addrs_ok(idaw_addr, 0, ccw_fmt1)) {
875 return -EINVAL; /* channel program check */
876 }
1/*
2 * Channel subsystem base support.
3 *
4 * Copyright 2012 IBM Corp.
5 * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
6 *
7 * This work is licensed under the terms of the GNU GPL, version 2 or (at
8 * your option) any later version. See the COPYING file in the top-level

--- 860 unchanged lines hidden (view full) ---

869 bool idaw_fmt2 = cds->flags & CDS_F_C64;
870 bool ccw_fmt1 = cds->flags & CDS_F_FMT;
871
872 if (idaw_fmt2) {
873 idaw_addr = cds->cda_orig + sizeof(idaw.fmt2) * cds->at_idaw;
874 if (idaw_addr & 0x07 || !cds_ccw_addrs_ok(idaw_addr, 0, ccw_fmt1)) {
875 return -EINVAL; /* channel program check */
876 }
877 ret = address_space_rw(&address_space_memory, idaw_addr,
878 MEMTXATTRS_UNSPECIFIED, &idaw.fmt2,
879 sizeof(idaw.fmt2), false);
877 ret = address_space_read(&address_space_memory, idaw_addr,
878 MEMTXATTRS_UNSPECIFIED, &idaw.fmt2,
879 sizeof(idaw.fmt2));
880 cds->cda = be64_to_cpu(idaw.fmt2);
881 } else {
882 idaw_addr = cds->cda_orig + sizeof(idaw.fmt1) * cds->at_idaw;
883 if (idaw_addr & 0x03 || !cds_ccw_addrs_ok(idaw_addr, 0, ccw_fmt1)) {
884 return -EINVAL; /* channel program check */
885 }
880 cds->cda = be64_to_cpu(idaw.fmt2);
881 } else {
882 idaw_addr = cds->cda_orig + sizeof(idaw.fmt1) * cds->at_idaw;
883 if (idaw_addr & 0x03 || !cds_ccw_addrs_ok(idaw_addr, 0, ccw_fmt1)) {
884 return -EINVAL; /* channel program check */
885 }
886 ret = address_space_rw(&address_space_memory, idaw_addr,
887 MEMTXATTRS_UNSPECIFIED, &idaw.fmt1,
888 sizeof(idaw.fmt1), false);
886 ret = address_space_read(&address_space_memory, idaw_addr,
887 MEMTXATTRS_UNSPECIFIED, &idaw.fmt1,
888 sizeof(idaw.fmt1));
889 cds->cda = be64_to_cpu(idaw.fmt1);
890 if (cds->cda & 0x80000000) {
891 return -EINVAL; /* channel program check */
892 }
893 }
894 ++(cds->at_idaw);
895 if (ret != MEMTX_OK) {
896 /* assume inaccessible address */

--- 1695 unchanged lines hidden ---
889 cds->cda = be64_to_cpu(idaw.fmt1);
890 if (cds->cda & 0x80000000) {
891 return -EINVAL; /* channel program check */
892 }
893 }
894 ++(cds->at_idaw);
895 if (ret != MEMTX_OK) {
896 /* assume inaccessible address */

--- 1695 unchanged lines hidden ---