s390/cio: move ccw_device_call_handler
device_ops.c should only contain functions that are called by ccw device drivers. Move the cio internal function ccw_device_call_handler to device_fsm.c where it's used. Remove some useless comments while at it. Acked-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com> Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
439eb131f7
commit
8421d212e8
|
@ -128,8 +128,6 @@ void ccw_device_disband_done(struct ccw_device *, int);
|
||||||
void ccw_device_stlck_start(struct ccw_device *, void *, void *, void *);
|
void ccw_device_stlck_start(struct ccw_device *, void *, void *, void *);
|
||||||
void ccw_device_stlck_done(struct ccw_device *, void *, int);
|
void ccw_device_stlck_done(struct ccw_device *, void *, int);
|
||||||
|
|
||||||
int ccw_device_call_handler(struct ccw_device *);
|
|
||||||
|
|
||||||
int ccw_device_stlck(struct ccw_device *);
|
int ccw_device_stlck(struct ccw_device *);
|
||||||
|
|
||||||
/* Helper function for machine check handling. */
|
/* Helper function for machine check handling. */
|
||||||
|
|
|
@ -730,6 +730,44 @@ static void ccw_device_boxed_verify(struct ccw_device *cdev,
|
||||||
css_schedule_eval(sch->schid);
|
css_schedule_eval(sch->schid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Pass interrupt to device driver.
|
||||||
|
*/
|
||||||
|
static int ccw_device_call_handler(struct ccw_device *cdev)
|
||||||
|
{
|
||||||
|
unsigned int stctl;
|
||||||
|
int ending_status;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* we allow for the device action handler if .
|
||||||
|
* - we received ending status
|
||||||
|
* - the action handler requested to see all interrupts
|
||||||
|
* - we received an intermediate status
|
||||||
|
* - fast notification was requested (primary status)
|
||||||
|
* - unsolicited interrupts
|
||||||
|
*/
|
||||||
|
stctl = scsw_stctl(&cdev->private->irb.scsw);
|
||||||
|
ending_status = (stctl & SCSW_STCTL_SEC_STATUS) ||
|
||||||
|
(stctl == (SCSW_STCTL_ALERT_STATUS | SCSW_STCTL_STATUS_PEND)) ||
|
||||||
|
(stctl == SCSW_STCTL_STATUS_PEND);
|
||||||
|
if (!ending_status &&
|
||||||
|
!cdev->private->options.repall &&
|
||||||
|
!(stctl & SCSW_STCTL_INTER_STATUS) &&
|
||||||
|
!(cdev->private->options.fast &&
|
||||||
|
(stctl & SCSW_STCTL_PRIM_STATUS)))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (ending_status)
|
||||||
|
ccw_device_set_timeout(cdev, 0);
|
||||||
|
|
||||||
|
if (cdev->handler)
|
||||||
|
cdev->handler(cdev, cdev->private->intparm,
|
||||||
|
&cdev->private->irb);
|
||||||
|
|
||||||
|
memset(&cdev->private->irb, 0, sizeof(struct irb));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Got an interrupt for a normal io (state online).
|
* Got an interrupt for a normal io (state online).
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -412,52 +412,6 @@ int ccw_device_resume(struct ccw_device *cdev)
|
||||||
return cio_resume(sch);
|
return cio_resume(sch);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Pass interrupt to device driver.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
ccw_device_call_handler(struct ccw_device *cdev)
|
|
||||||
{
|
|
||||||
unsigned int stctl;
|
|
||||||
int ending_status;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* we allow for the device action handler if .
|
|
||||||
* - we received ending status
|
|
||||||
* - the action handler requested to see all interrupts
|
|
||||||
* - we received an intermediate status
|
|
||||||
* - fast notification was requested (primary status)
|
|
||||||
* - unsolicited interrupts
|
|
||||||
*/
|
|
||||||
stctl = scsw_stctl(&cdev->private->irb.scsw);
|
|
||||||
ending_status = (stctl & SCSW_STCTL_SEC_STATUS) ||
|
|
||||||
(stctl == (SCSW_STCTL_ALERT_STATUS | SCSW_STCTL_STATUS_PEND)) ||
|
|
||||||
(stctl == SCSW_STCTL_STATUS_PEND);
|
|
||||||
if (!ending_status &&
|
|
||||||
!cdev->private->options.repall &&
|
|
||||||
!(stctl & SCSW_STCTL_INTER_STATUS) &&
|
|
||||||
!(cdev->private->options.fast &&
|
|
||||||
(stctl & SCSW_STCTL_PRIM_STATUS)))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* Clear pending timers for device driver initiated I/O. */
|
|
||||||
if (ending_status)
|
|
||||||
ccw_device_set_timeout(cdev, 0);
|
|
||||||
/*
|
|
||||||
* Now we are ready to call the device driver interrupt handler.
|
|
||||||
*/
|
|
||||||
if (cdev->handler)
|
|
||||||
cdev->handler(cdev, cdev->private->intparm,
|
|
||||||
&cdev->private->irb);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Clear the old and now useless interrupt response block.
|
|
||||||
*/
|
|
||||||
memset(&cdev->private->irb, 0, sizeof(struct irb));
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ccw_device_get_ciw() - Search for CIW command in extended sense data.
|
* ccw_device_get_ciw() - Search for CIW command in extended sense data.
|
||||||
* @cdev: ccw device to inspect
|
* @cdev: ccw device to inspect
|
||||||
|
|
Loading…
Reference in New Issue