svn commit: r328165 - in head: sbin/camcontrol sys/cam sys/cam/mmc

O. Hartmann ohartmann at walstatt.org
Fri Jan 19 18:02:35 UTC 2018


Am Fri, 19 Jan 2018 15:32:27 +0000 (UTC)
Scott Long <scottl at 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 at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-head
> To unsubscribe, send any mail to "svn-src-head-unsubscribe at 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).
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 313 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freebsd.org/pipermail/svn-src-head/attachments/20180119/83c0da53/attachment.sig>


More information about the svn-src-head mailing list