From nobody Tue Aug 06 17:03:21 2024 X-Original-To: dev-commits-ports-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4WdflG1QF5z5SHfd; Tue, 06 Aug 2024 17:03:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4WdflF63wTz44bQ; Tue, 6 Aug 2024 17:03:21 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1722963801; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=EiGkFnsmYNLuEAW/iAczyTqjrR1nHJoiNCqPUKPQd4g=; b=dakYsX1YbaNkEoY2u+rA6xWfhqCiXSkbcGaU4aiauKvMNtyTspF3Ujm3vOk8NZfJ/jA4IX SFHXX+C4U1I8wIcCpGPchN9pM0lgXwQCk1a2Lb1jjC5+0mgCnDBDqAF+dR4W73kzvBWJT1 zOprXj189aSaZk1GgBbEU3sDWRgyZ2hoVaiyofIio9ULRIS//+uJ6HWocpI1015JNfafZQ ygbc3gCNN/vxCtvDd51pjU7X96VBu1FVu+GMtWVKcFUcDlsYr8PC1grgmxO1wpGVTldt/C wNSHPVg1KwSxkWkRxI/Fsx8EvuPIt7OgdfSqOAygirnwt8NcuJAqkBFyJwXl9g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1722963801; a=rsa-sha256; cv=none; b=P86dPF2NL94w2Q+Ljmh7QGfoIsuns7yBzHlRfJQcfHD5bnx0HcQXND5RhoX4QHgqWyIbdH rTMf5zrkmm4YIoZtZrHdEoXYgk3e0IVatOqkyL6/93r0/jGCEqlCi0EliiSNYR+uu9engI 1roRzM//dQrG1v6uyuSaZTYhMVP+re71KudwncJh0bvx1zIde3PqEbbf6KBrTmmIEN58s5 zBd9Cs4K6T0fA1El5dhQkf4XE+DVATkjbI5qb7L4AURiex6CyP5cWQ1FWeizVciyXvF8BW 8+rsL4XVRnXE45T1dtObAgvDpGuE2Y6ThV6QVrUa+1TwoWwHM04qquWVHLChyQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1722963801; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=EiGkFnsmYNLuEAW/iAczyTqjrR1nHJoiNCqPUKPQd4g=; b=nhBJLQxEX7S3eeh6I+HQ2nZL8IPX5Fkckkj7Ro081zYG0sx5BcPophKYnx4ZG3fAo7GBh+ BRdglbL1hup48dtOQB6SASO3kx1Y0ZNRKVnT+kgjfVMynjwj/KqNnyXcUA4uRFkOxVtkw7 SYm4dGyk9uu2u1lnuli+nwOj5lXENPeK2CGKrScLytr3P2lMwTStP4yL9y2KvY7bbWRgX+ 47P2hBswgiHUcOucoKzpY9LqSZ58btL3cKWtdI5dsx5hriiJ/lOpMiK/zrl+YkvfOxsKlU WLKggqhShgfYqmDwtAdy+TgmfGh2OIk3CDjo0ZuUeUn5dEv3Wt8XODexXwxlvA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4WdflF5cNMzFRR; Tue, 6 Aug 2024 17:03:21 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 476H3Lv6025256; Tue, 6 Aug 2024 17:03:21 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 476H3Lqm025253; Tue, 6 Aug 2024 17:03:21 GMT (envelope-from git) Date: Tue, 6 Aug 2024 17:03:21 GMT Message-Id: <202408061703.476H3Lqm025253@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Vladimir Druzenko Subject: git: c8a5e838dba4 - main - multimedia/libaacs: add MMC drive support, take maintainership List-Id: Commits to the main branch of the FreeBSD ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-ports-main@freebsd.org Sender: owner-dev-commits-ports-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: vvd X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: c8a5e838dba41d61d970347baa0dc7cd38423011 Auto-Submitted: auto-generated The branch main has been updated by vvd: URL: https://cgit.FreeBSD.org/ports/commit/?id=c8a5e838dba41d61d970347baa0dc7cd38423011 commit c8a5e838dba41d61d970347baa0dc7cd38423011 Author: Stefan Ehmann AuthorDate: 2024-08-06 16:58:38 +0000 Commit: Vladimir Druzenko CommitDate: 2024-08-06 16:58:38 +0000 multimedia/libaacs: add MMC drive support, take maintainership Currently, Blu-ray playback only works if the VUK of the disc is available in KEYDB.cfg. Otherwise it fails. With this patch, libaacs will compute the key if non-revoked device keys and host certificate are present in KEYDB.cfg. The patch provides an MMC device implementation based on libcam. The linux implementation uses the CDROM_SEND_PACKET ioctl which is not available on FreeBSD. AACS decryption is now working in bd_info from libbluray (vlc also works). PR: 280633 --- multimedia/libaacs/Makefile | 5 +- multimedia/libaacs/files/mmc_device_freebsd.c | 111 ++++++++++++++++++++++++++ multimedia/libaacs/files/patch-Makefile.am | 26 +++++- 3 files changed, 138 insertions(+), 4 deletions(-) diff --git a/multimedia/libaacs/Makefile b/multimedia/libaacs/Makefile index f5179a4a0e89..aad67dbbd6b9 100644 --- a/multimedia/libaacs/Makefile +++ b/multimedia/libaacs/Makefile @@ -4,7 +4,7 @@ CATEGORIES= multimedia MASTER_SITES= https://get.videolan.org/${PORTNAME}/${DISTVERSION}/ \ https://download.videolan.org/pub/videolan/${PORTNAME}/${DISTVERSION}/ -MAINTAINER= ports@FreeBSD.org +MAINTAINER= shoesoft@gmx.net COMMENT= Advanced Access Content System implementation WWW= https://www.videolan.org/developers/libaacs.html @@ -23,4 +23,7 @@ CONFIGURE_ARGS= --disable-optimizations INSTALL_TARGET= install-strip +post-extract: + @${CP} ${FILESDIR}/mmc_device_freebsd.c ${WRKSRC}/src/file + .include diff --git a/multimedia/libaacs/files/mmc_device_freebsd.c b/multimedia/libaacs/files/mmc_device_freebsd.c new file mode 100644 index 000000000000..99b916aeddee --- /dev/null +++ b/multimedia/libaacs/files/mmc_device_freebsd.c @@ -0,0 +1,111 @@ +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include "mmc_device.h" + +#include "util/logging.h" +#include "util/macro.h" +#include "util/strutl.h" + +#define CDB_LEN 12 + +struct mmcdev { + struct cam_device *cam_dev; +}; + +int device_send_cmd(MMCDEV *dev, const uint8_t *cmd, uint8_t *buf, size_t tx, size_t rx) +{ + char str[512]; + int result = 0; + union ccb *ccb; + + if (buf == NULL) { + return 0; + } + + ccb = cam_getccb(dev->cam_dev); + if (ccb == NULL) { + BD_DEBUG(DBG_MMC, "cam_getccb failed\n"); + return 0; + } + + memcpy(ccb->csio.cdb_io.cdb_bytes, cmd, CDB_LEN); + + cam_fill_csio(&ccb->csio, + /*retries*/ 0, + /*cbfcnp*/ NULL, + /*flags*/ CAM_DEV_QFRZDIS | (tx?CAM_DIR_OUT:CAM_DIR_IN), + /*tag_action*/ MSG_SIMPLE_Q_TAG, + /*data_ptr*/ buf, + /*dxfer_len*/ (tx?tx:rx), + /*sense_len*/ SSD_FULL_SIZE, + /*cdb_len*/ CDB_LEN, + /*timeout*/ 5000); + + BD_DEBUG(DBG_MMC, "Send BSD MMC cmd %s:\n", str_print_hex(str, cmd, 16)); + if (tx) { + BD_DEBUG(DBG_MMC, " Buffer: %s ->\n", str_print_hex(str, buf, tx>255?255:tx)); + } + + if (cam_send_ccb(dev->cam_dev, ccb) < 0) { + BD_DEBUG(DBG_MMC, "cam_send_ccb failed: %s\n", strerror(errno)); + cam_error_print(dev->cam_dev, ccb, CAM_ESF_ALL, CAM_EPF_ALL, stderr); + } else if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { + BD_DEBUG(DBG_MMC, "cam_send_ccb failed with status: %02X\n", ccb->ccb_h.status); + cam_error_print(dev->cam_dev, ccb, CAM_ESF_ALL, CAM_EPF_ALL, stderr); + } else { + result = 1; + } + + cam_freeccb(ccb); + + if (result > 0) { + if (!tx) { + BD_DEBUG(DBG_MMC, " Buffer: %s <-\n", str_print_hex(str, buf, rx>255?255:rx)); + } + BD_DEBUG(DBG_MMC, " Send succeeded!\n"); + } else { + BD_DEBUG(DBG_MMC, " Send failed!\n"); + } + + return result; +} + +MMCDEV *device_open(const char *path) +{ + struct cam_device *cam_dev; + cam_dev = cam_open_device(path, O_RDWR); + if (cam_dev == NULL) { + BD_DEBUG(DBG_MMC | DBG_CRIT, "cam_open_device failed: %s\n", cam_errbuf); + return NULL; + } + + MMCDEV *dev = calloc(1, sizeof(MMCDEV)); + if (!dev) { + cam_close_device(cam_dev); + return NULL; + } + + dev->cam_dev = cam_dev; + + return dev; +} + +void device_close(MMCDEV **pp) +{ + if (pp && *pp) { + if ((*pp)->cam_dev != NULL) { + cam_close_device((*pp)->cam_dev); + } + + X_FREE(*pp); + } +} diff --git a/multimedia/libaacs/files/patch-Makefile.am b/multimedia/libaacs/files/patch-Makefile.am index f58b40fd59c1..9396888e2ac3 100644 --- a/multimedia/libaacs/files/patch-Makefile.am +++ b/multimedia/libaacs/files/patch-Makefile.am @@ -1,11 +1,31 @@ ---- Makefile.am.orig 2020-11-08 18:35:24 UTC +--- Makefile.am.orig 2024-08-05 13:50:20 UTC +++ Makefile.am -@@ -7,7 +7,7 @@ SET_INCLUDES = -I$(top_srcdir)/src -I$(top_builddir)/s +@@ -6,8 +6,8 @@ AM_CFLAGS = -std=c99 $(LIBGCRYPT_CFLAGS) $(GPG_ERROR_C + SET_INCLUDES = -I$(top_srcdir)/src -I$(top_builddir)/src/libaacs AM_CFLAGS = -std=c99 $(LIBGCRYPT_CFLAGS) $(GPG_ERROR_CFLAGS) - AM_CPPFLAGS = $(SET_FEATURES) $(SET_INCLUDES) +-AM_CPPFLAGS = $(SET_FEATURES) $(SET_INCLUDES) -AM_YFLAGS = -d -p libaacs_yy ++AM_CPPFLAGS = $(SET_FEATURES) $(SET_INCLUDES) -D__BSD_VISIBLE=1 +AM_YFLAGS = -d -p libaacs_yy -Wno-yacc lib_LTLIBRARIES = libaacs.la libaacs_la_SOURCES=\ +@@ -63,7 +63,7 @@ libaacs_la_SOURCES+= \ + libaacs_la_SOURCES+= \ + src/file/dirs_xdg.c \ + src/file/file_posix.c \ +- src/file/mmc_device_linux.c \ ++ src/file/mmc_device_freebsd.c \ + src/file/path.c + endif + endif +@@ -74,7 +74,7 @@ libaacs_la_LDFLAGS= -no-undefined -version-info $(LT_V + src/libaacs/aacs-version.h + + libaacs_la_LDFLAGS= -no-undefined -version-info $(LT_VERSION_INFO) +-libaacs_la_LIBADD = $(LIBGCRYPT_LIBS) $(GPG_ERROR_LIBS) ++libaacs_la_LIBADD = $(LIBGCRYPT_LIBS) $(GPG_ERROR_LIBS) -lcam + pkgconfigdir = $(prefix)/libdata/pkgconfig + pkgconfig_DATA = src/libaacs.pc +