Am Fri, 19 Jan 2018 15:32:27 +0000 (UTC) Scott Long <sco...@freebsd.org> schrieb:
> Author: scottl > Date: Fri Jan 19 15:32:27 2018 > New Revision: 328165 > URL: https://svnweb.freebsd.org/changeset/base/328165 > > Log: > Revert ABI breakage to CAM that came in with MMC/SD support in r320844. > Make it possible to retrieve mmc parameters via the XPT_GET_ADVINFO > call instead. Convert camcontrol to the new scheme. > > Reviewed by: imp. kibab > Sponsored by: Netflix > Differential Revision: D13868 > > Modified: > head/sbin/camcontrol/camcontrol.c > head/sys/cam/cam_ccb.h > head/sys/cam/cam_xpt.c > head/sys/cam/mmc/mmc_xpt.c > > Modified: head/sbin/camcontrol/camcontrol.c > ============================================================================== > --- head/sbin/camcontrol/camcontrol.c Fri Jan 19 14:50:53 2018 > (r328164) > +++ head/sbin/camcontrol/camcontrol.c Fri Jan 19 15:32:27 2018 > (r328165) > @@ -715,14 +715,50 @@ print_dev_semb(struct device_match_result *dev_result, > static int > print_dev_mmcsd(struct device_match_result *dev_result, char *tmpstr) > { > + union ccb *ccb; > + struct ccb_dev_advinfo *advi; > + struct cam_device *dev; > + struct mmc_params mmc_ident_data; > > - if (strlen(dev_result->mmc_ident_data.model) > 0) { > - sprintf(tmpstr, "<%s>", dev_result->mmc_ident_data.model); > + dev = cam_open_btl(dev_result->path_id, dev_result->target_id, > + dev_result->target_lun, O_RDWR, NULL); > + if (dev == NULL) { > + warnx("%s", cam_errbuf); > + return (1); > + } > + > + ccb = cam_getccb(dev); > + if (ccb == NULL) { > + warnx("couldn't allocate CCB"); > + cam_close_device(dev); > + return (1); > + } > + > + advi = &ccb->cdai; > + advi->ccb_h.flags = CAM_DIR_IN; > + advi->ccb_h.func_code = XPT_DEV_ADVINFO; > + advi->flags = CDAI_FLAG_NONE; > + advi->buftype = CDAI_TYPE_MMC_PARAMS; > + advi->bufsiz = sizeof(struct mmc_params); > + advi->buf = (uint8_t *)&mmc_ident_data; > + > + if (cam_send_ccb(dev, ccb) < 0) { > + warn("error sending CAMIOCOMMAND ioctl"); > + cam_freeccb(ccb); > + cam_close_device(dev); > + return (1); > + } > + > + if (strlen(mmc_ident_data.model) > 0) { > + sprintf(tmpstr, "<%s>", mmc_ident_data.model); > } else { > sprintf(tmpstr, "<%s card>", > - dev_result->mmc_ident_data.card_features & > + mmc_ident_data.card_features & > CARD_FEATURE_SDIO ? "SDIO" : "unknown"); > } > + > + cam_freeccb(ccb); > + cam_close_device(dev); > return (0); > } > > > Modified: head/sys/cam/cam_ccb.h > ============================================================================== > --- head/sys/cam/cam_ccb.h Fri Jan 19 14:50:53 2018 (r328164) > +++ head/sys/cam/cam_ccb.h Fri Jan 19 15:32:27 2018 (r328165) > @@ -506,7 +506,6 @@ struct device_match_result { > struct scsi_inquiry_data inq_data; > struct ata_params ident_data; > dev_result_flags flags; > - struct mmc_params mmc_ident_data; > }; > > struct bus_match_result { > @@ -1278,6 +1277,7 @@ struct ccb_dev_advinfo { > #define CDAI_TYPE_EXT_INQ 5 > #define CDAI_TYPE_NVME_CNTRL 6 /* NVMe Identify Controller > data */ > #define CDAI_TYPE_NVME_NS 7 /* NVMe Identify Namespace data > */ > +#define CDAI_TYPE_MMC_PARAMS 8 /* MMC/SD ident */ > off_t bufsiz; /* IN: Size of external buffer */ > #define CAM_SCSI_DEVID_MAXLEN 65536 /* length in buffer is an > uint16_t */ off_t provsiz; /* OUT: Size required/used */ > > Modified: head/sys/cam/cam_xpt.c > ============================================================================== > --- head/sys/cam/cam_xpt.c Fri Jan 19 14:50:53 2018 (r328164) > +++ head/sys/cam/cam_xpt.c Fri Jan 19 15:32:27 2018 (r328165) > @@ -1909,9 +1909,6 @@ xptedtdevicefunc(struct cam_ed *device, void *arg) > bcopy(&device->ident_data, > &cdm->matches[j].result.device_result.ident_data, > sizeof(struct ata_params)); > - bcopy(&device->mmc_ident_data, > - &cdm->matches[j].result.device_result.mmc_ident_data, > - sizeof(struct mmc_params)); > > /* Let the user know whether this device is unconfigured */ > if (device->flags & CAM_DEV_UNCONFIGURED) > > Modified: head/sys/cam/mmc/mmc_xpt.c > ============================================================================== > --- head/sys/cam/mmc/mmc_xpt.c Fri Jan 19 14:50:53 2018 > (r328164) > +++ head/sys/cam/mmc/mmc_xpt.c Fri Jan 19 15:32:27 2018 > (r328165) > @@ -367,6 +367,13 @@ mmc_dev_advinfo(union ccb *start_ccb) > case CDAI_TYPE_PHYS_PATH: /* pass(4) wants this */ > cdai->provsiz = 0; > break; > + case CDAI_TYPE_MMC_PARAMS: > + cdai->provsiz = device->mmc_ident_data; > + if (device->mmc_ident_data == NULL) > + break; > + amt = MIN(cdai->provsiz, cdai->bufsiz); > + memcpy(cdai->buff, device->mmc_ident_data, amt); > + break; > default: > panic("Unknown buftype"); > return; > _______________________________________________ > svn-src-head@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/svn-src-head > To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org" It seems, this broke buildkernel for me (and probably others): [...] ===> bhnd/cores/bhnd_pci (all) --- mmc_xpt.o --- /usr/src/sys/cam/mmc/mmc_xpt.c:371:17: error: assigning to 'off_t' (aka 'long') from incompatible type 'struct mmc_params' cdai->provsiz = device->mmc_ident_data; ^ ~~~~~~~~~~~~~~~~~~~~~~ /usr/src/sys/cam/mmc/mmc_xpt.c:372:30: error: invalid operands to binary expression ('struct mmc_params' and 'void *') if (device->mmc_ident_data == NULL) ~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~ /usr/src/sys/cam/mmc/mmc_xpt.c:375:16: error: no member named 'buff' in 'struct ccb_dev_advinfo' memcpy(cdai->buff, device->mmc_ident_data, amt); ~~~~ ^ -- O. Hartmann Ich widerspreche der Nutzung oder Übermittlung meiner Daten für Werbezwecke oder für die Markt- oder Meinungsforschung (§ 28 Abs. 4 BDSG).
pgpRUk0diJUyp.pgp
Description: OpenPGP digital signature