/* * Check for complete SENSE ID data.
*/ staticint snsid_check(struct ccw_device *cdev, void *data)
{ struct cmd_scsw *scsw = &cdev->private->dma_area->irb.scsw.cmd; int len = sizeof(struct senseid) - scsw->count;
/* Check for incomplete SENSE ID data. */ if (len < SENSE_ID_MIN_LEN) goto out_restart; if (cdev->private->dma_area->senseid.cu_type == 0xffff) goto out_restart; /* Check for incompatible SENSE ID data. */ if (cdev->private->dma_area->senseid.reserved != 0xff) return -EOPNOTSUPP; /* Check for extended-identification information. */ if (len > SENSE_ID_BASIC_LEN)
cdev->private->flags.esid = 1; return 0;
out_restart:
snsid_init(cdev); return -EAGAIN;
}
/* * Process SENSE ID request result.
*/ staticvoid snsid_callback(struct ccw_device *cdev, void *data, int rc)
{ struct ccw_dev_id *id = &cdev->private->dev_id; struct senseid *senseid = &cdev->private->dma_area->senseid; int vm = 0;
/** * ccw_device_sense_id_start - perform SENSE ID * @cdev: ccw device * * Execute a SENSE ID channel program on @cdev to update its sense id * information. When finished, call ccw_device_sense_id_done with a * return code specifying the result.
*/ void ccw_device_sense_id_start(struct ccw_device *cdev)
{ struct subchannel *sch = to_subchannel(cdev->dev.parent); struct ccw_request *req = &cdev->private->req; struct ccw1 *cp = cdev->private->dma_area->iccws;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.