s390x/css: use SubchDev.orb

Instead of passing around a pointer to ORB let us simplify some
function signatures by using the previously introduced ORB saved at the
subchannel (SubchDev).

Signed-off-by: Halil Pasic <pasic@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Message-Id: <20170711145441.33925-7-pasic@linux.vnet.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
This commit is contained in:
Halil Pasic 2017-07-11 16:54:41 +02:00 committed by Christian Borntraeger
parent e996583eb3
commit b5f5a3afb6
2 changed files with 18 additions and 18 deletions

View File

@ -909,7 +909,7 @@ static int css_interpret_ccw(SubchDev *sch, hwaddr ccw_addr,
return ret; return ret;
} }
static void sch_handle_start_func_virtual(SubchDev *sch, ORB *orb) static void sch_handle_start_func_virtual(SubchDev *sch)
{ {
PMCW *p = &sch->curr_status.pmcw; PMCW *p = &sch->curr_status.pmcw;
@ -923,10 +923,10 @@ static void sch_handle_start_func_virtual(SubchDev *sch, ORB *orb)
if (!(s->ctrl & SCSW_ACTL_SUSP)) { if (!(s->ctrl & SCSW_ACTL_SUSP)) {
/* Start Function triggered via ssch, i.e. we have an ORB */ /* Start Function triggered via ssch, i.e. we have an ORB */
ORB *orb = &sch->orb;
s->cstat = 0; s->cstat = 0;
s->dstat = 0; s->dstat = 0;
/* Look at the orb and try to execute the channel program. */ /* Look at the orb and try to execute the channel program. */
assert(orb != NULL); /* resume does not pass an orb */
p->intparm = orb->intparm; p->intparm = orb->intparm;
if (!(orb->lpm & path)) { if (!(orb->lpm & path)) {
/* Generate a deferred cc 3 condition. */ /* Generate a deferred cc 3 condition. */
@ -940,8 +940,7 @@ static void sch_handle_start_func_virtual(SubchDev *sch, ORB *orb)
sch->ccw_no_data_cnt = 0; sch->ccw_no_data_cnt = 0;
suspend_allowed = !!(orb->ctrl0 & ORB_CTRL0_MASK_SPND); suspend_allowed = !!(orb->ctrl0 & ORB_CTRL0_MASK_SPND);
} else { } else {
/* Start Function resumed via rsch, i.e. we don't have an /* Start Function resumed via rsch */
* ORB */
s->ctrl &= ~(SCSW_ACTL_SUSP | SCSW_ACTL_RESUME_PEND); s->ctrl &= ~(SCSW_ACTL_SUSP | SCSW_ACTL_RESUME_PEND);
/* The channel program had been suspended before. */ /* The channel program had been suspended before. */
suspend_allowed = true; suspend_allowed = true;
@ -1011,13 +1010,14 @@ static void sch_handle_start_func_virtual(SubchDev *sch, ORB *orb)
} }
static int sch_handle_start_func_passthrough(SubchDev *sch, ORB *orb) static int sch_handle_start_func_passthrough(SubchDev *sch)
{ {
PMCW *p = &sch->curr_status.pmcw; PMCW *p = &sch->curr_status.pmcw;
SCSW *s = &sch->curr_status.scsw; SCSW *s = &sch->curr_status.scsw;
int ret; int ret;
ORB *orb = &sch->orb;
if (!(s->ctrl & SCSW_ACTL_SUSP)) { if (!(s->ctrl & SCSW_ACTL_SUSP)) {
assert(orb != NULL); assert(orb != NULL);
p->intparm = orb->intparm; p->intparm = orb->intparm;
@ -1062,7 +1062,7 @@ static int sch_handle_start_func_passthrough(SubchDev *sch, ORB *orb)
* read/writes) asynchronous later on if we start supporting more than * read/writes) asynchronous later on if we start supporting more than
* our current very simple devices. * our current very simple devices.
*/ */
int do_subchannel_work_virtual(SubchDev *sch, ORB *orb) int do_subchannel_work_virtual(SubchDev *sch)
{ {
SCSW *s = &sch->curr_status.scsw; SCSW *s = &sch->curr_status.scsw;
@ -1073,7 +1073,7 @@ int do_subchannel_work_virtual(SubchDev *sch, ORB *orb)
sch_handle_halt_func(sch); sch_handle_halt_func(sch);
} else if (s->ctrl & SCSW_FCTL_START_FUNC) { } else if (s->ctrl & SCSW_FCTL_START_FUNC) {
/* Triggered by both ssch and rsch. */ /* Triggered by both ssch and rsch. */
sch_handle_start_func_virtual(sch, orb); sch_handle_start_func_virtual(sch);
} else { } else {
/* Cannot happen. */ /* Cannot happen. */
return 0; return 0;
@ -1082,7 +1082,7 @@ int do_subchannel_work_virtual(SubchDev *sch, ORB *orb)
return 0; return 0;
} }
int do_subchannel_work_passthrough(SubchDev *sch, ORB *orb) int do_subchannel_work_passthrough(SubchDev *sch)
{ {
int ret; int ret;
SCSW *s = &sch->curr_status.scsw; SCSW *s = &sch->curr_status.scsw;
@ -1096,7 +1096,7 @@ int do_subchannel_work_passthrough(SubchDev *sch, ORB *orb)
sch_handle_halt_func(sch); sch_handle_halt_func(sch);
ret = 0; ret = 0;
} else if (s->ctrl & SCSW_FCTL_START_FUNC) { } else if (s->ctrl & SCSW_FCTL_START_FUNC) {
ret = sch_handle_start_func_passthrough(sch, orb); ret = sch_handle_start_func_passthrough(sch);
} else { } else {
/* Cannot happen. */ /* Cannot happen. */
return -ENODEV; return -ENODEV;
@ -1105,10 +1105,10 @@ int do_subchannel_work_passthrough(SubchDev *sch, ORB *orb)
return ret; return ret;
} }
static int do_subchannel_work(SubchDev *sch, ORB *orb) static int do_subchannel_work(SubchDev *sch)
{ {
if (sch->do_subchannel_work) { if (sch->do_subchannel_work) {
return sch->do_subchannel_work(sch, orb); return sch->do_subchannel_work(sch);
} else { } else {
return -EINVAL; return -EINVAL;
} }
@ -1315,7 +1315,7 @@ int css_do_csch(SubchDev *sch)
s->ctrl &= ~(SCSW_CTRL_MASK_FCTL | SCSW_CTRL_MASK_ACTL); s->ctrl &= ~(SCSW_CTRL_MASK_FCTL | SCSW_CTRL_MASK_ACTL);
s->ctrl |= SCSW_FCTL_CLEAR_FUNC | SCSW_ACTL_CLEAR_PEND; s->ctrl |= SCSW_FCTL_CLEAR_FUNC | SCSW_ACTL_CLEAR_PEND;
do_subchannel_work(sch, NULL); do_subchannel_work(sch);
ret = 0; ret = 0;
out: out:
@ -1356,7 +1356,7 @@ int css_do_hsch(SubchDev *sch)
} }
s->ctrl |= SCSW_ACTL_HALT_PEND; s->ctrl |= SCSW_ACTL_HALT_PEND;
do_subchannel_work(sch, NULL); do_subchannel_work(sch);
ret = 0; ret = 0;
out: out:
@ -1431,7 +1431,7 @@ int css_do_ssch(SubchDev *sch, ORB *orb)
s->ctrl |= (SCSW_FCTL_START_FUNC | SCSW_ACTL_START_PEND); s->ctrl |= (SCSW_FCTL_START_FUNC | SCSW_ACTL_START_PEND);
s->flags &= ~SCSW_FLAGS_MASK_PNO; s->flags &= ~SCSW_FLAGS_MASK_PNO;
ret = do_subchannel_work(sch, orb); ret = do_subchannel_work(sch);
out: out:
return ret; return ret;
@ -1710,7 +1710,7 @@ int css_do_rsch(SubchDev *sch)
} }
s->ctrl |= SCSW_ACTL_RESUME_PEND; s->ctrl |= SCSW_ACTL_RESUME_PEND;
do_subchannel_work(sch, NULL); do_subchannel_work(sch);
ret = 0; ret = 0;
out: out:

View File

@ -94,7 +94,7 @@ struct SubchDev {
/* transport-provided data: */ /* transport-provided data: */
int (*ccw_cb) (SubchDev *, CCW1); int (*ccw_cb) (SubchDev *, CCW1);
void (*disable_cb)(SubchDev *); void (*disable_cb)(SubchDev *);
int (*do_subchannel_work) (SubchDev *, ORB *); int (*do_subchannel_work) (SubchDev *);
SenseId id; SenseId id;
void *driver_data; void *driver_data;
}; };
@ -157,8 +157,8 @@ void css_generate_chp_crws(uint8_t cssid, uint8_t chpid);
void css_generate_css_crws(uint8_t cssid); void css_generate_css_crws(uint8_t cssid);
void css_clear_sei_pending(void); void css_clear_sei_pending(void);
int s390_ccw_cmd_request(ORB *orb, SCSW *scsw, void *data); int s390_ccw_cmd_request(ORB *orb, SCSW *scsw, void *data);
int do_subchannel_work_virtual(SubchDev *sub, ORB *orb); int do_subchannel_work_virtual(SubchDev *sub);
int do_subchannel_work_passthrough(SubchDev *sub, ORB *orb); int do_subchannel_work_passthrough(SubchDev *sub);
typedef enum { typedef enum {
CSS_IO_ADAPTER_VIRTIO = 0, CSS_IO_ADAPTER_VIRTIO = 0,