From nobody Fri Jul 17 04:09:30 2026 X-Original-To: dev-commits-src-all@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 4h1byg17Kfz6l9FN for ; Fri, 17 Jul 2026 04:09:31 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4h1byf5VgMz3W0P for ; Fri, 17 Jul 2026 04:09:30 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1784261370; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=WSQb8kU4+Ggvyt86zzqP8ZLEJ+7RUFu3+FauzNiWqFE=; b=sEwkSqgHvUPQnyjaf9wcKGzJJ3UGwmMoQBq3h6J5ZBBxcaRgfzzkgpmD+d9ueFUjSAQ/wz 2zvd2Vaye2SS8EToi4GfAPTDw0QggNCmgpGnc6iXMVcqQ+0JoezWmQHyiL3slTLAS8qR0E eGwnYgzc/cDidaEHbToc9vJtosWY+bfk16YSOjU6Phh0APDgXS1FFLu2ybukmhXhkuSkG+ Sb+eVbfIujwrXsUXClQMe32A3K7bzpwnhrYOBvqb57gVccWteKXTjfidmf4b3f21OuNEuy /NmSy8MpGyl3XIIEk46OUHVGiJtQVmoweP7zzM/ZIZJY1GxXb8l/W0GhE9TWpQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1784261370; a=rsa-sha256; cv=none; b=q5Z77I01IcIiRz/UQ34Alg2fD5d+t+0TZI6lvjSRPlkWfb9aKmeEmUF6N7Dm5WI1pJ55zA kMkFWqNw10d7WpVK64eCC+CUpWkSFXSKO1etCAeaHPrd9WLX6NvTW/cv3eUqU4LoxBOZik +9o+/NQA7Dl18ZwxFU6xfKPwxE4KFt01XlvBGbqM3GyhOBOMjrHDESP/qJYzlR/d+ZO+6y zNfDoWNzcVRIUx+mF6svYpNXZzlqki8jOJBXtoU8BhMgFtgB+Dya8yZlL11/tokfC84CML uQoSabh0mGVxxBby4tgzGu4Qih1t5a1TpCoJHmTssUiJGZvEq3u9wF64f20Tgw== 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=1784261370; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=WSQb8kU4+Ggvyt86zzqP8ZLEJ+7RUFu3+FauzNiWqFE=; b=ZAl5eDXbDcN6bFKgv7rH4qEkx/yE+v+tTaRz2Q5Fvv4eFpg8/3k1yB8DLqUuMZC/0rSRFx Bi1jOGIePTZSv0DvZSuwVEQ3Dy+2mWjcs4f1gXIGvWJnMldbO4mKzQg8lM/Jv50mKCCh28 VhKxrc0SVlR8HhlP3toWusNhbcOmliZY3G+qupV2/mN0eGjfLf9mihi93jZyhbrQjMoW3Y 1Ot+vKVynWZ1A/QA6GDwXeHHqhmMJBjRQ8OwJI+wGXfvEgx0cOZX90tRZPk5lzP8Wn4l7+ 5vwm6rgUM+yKLPvmr+RrfZ7ljPIiJTkmbqHPs12tJx/EDxcLKakEll1z6ZFMWg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4h1byf4Ny9zXgR for ; Fri, 17 Jul 2026 04:09:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 25df7 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 17 Jul 2026 04:09:30 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Abdelkader Boudih From: Adrian Chadd Subject: git: 2b9ed8da552c - main - fwdv: match unit directories instead of IDENTIFY List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 2b9ed8da552c5825bf261214665a48f81999db0d Auto-Submitted: auto-generated Date: Fri, 17 Jul 2026 04:09:30 +0000 Message-Id: <6a59aafa.25df7.2ce67f9d@gitrepo.freebsd.org> The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=2b9ed8da552c5825bf261214665a48f81999db0d commit 2b9ed8da552c5825bf261214665a48f81999db0d Author: Abdelkader Boudih AuthorDate: 2026-07-17 04:08:19 +0000 Commit: Adrian Chadd CommitDate: 2026-07-17 04:08:20 +0000 fwdv: match unit directories instead of IDENTIFY Migrated fwdv to use per-unit-directory child device Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58204 --- share/man/man4/fwdv.4 | 14 +++--- sys/dev/firewire/fwdv.c | 113 +++++++++++------------------------------------- 2 files changed, 35 insertions(+), 92 deletions(-) diff --git a/share/man/man4/fwdv.4 b/share/man/man4/fwdv.4 index c21a95019c70..2d90349db698 100644 --- a/share/man/man4/fwdv.4 +++ b/share/man/man4/fwdv.4 @@ -3,7 +3,7 @@ .\" .\" SPDX-License-Identifier: BSD-2-Clause .\" -.Dd June 19, 2026 +.Dd July 12, 2026 .Dt FWDV 4 .Os .Sh NAME @@ -18,12 +18,16 @@ The driver provides DV frame capture from AV/C tape devices attached via IEEE 1394 (FireWire), including DV camcorders, VCRs, and DV converters. .Pp -The driver attaches to the +The driver attaches to unit directories in the device CSR configuration ROM +with +.Va unit_spec_id +0x00a02d (1394 Trade Association) and +.Va unit_sw_version +0x010001 (AV/C). +When a matching device is present on the .Xr firewire 4 -bus and creates +bus, the driver creates .Pa /dev/fwdvX -at load time. -When an AV/C device is connected, the driver automatically discovers it and begins receiving IEC 61883 isochronous packets on first open, assembling complete DV frames. Applications read raw DV frames from the character device diff --git a/sys/dev/firewire/fwdv.c b/sys/dev/firewire/fwdv.c index b1bb6bb997cc..6fdfb9680c5d 100644 --- a/sys/dev/firewire/fwdv.c +++ b/sys/dev/firewire/fwdv.c @@ -54,12 +54,9 @@ SYSCTL_INT(_hw_firewire_fwdv, OID_AUTO, iso_channel, CTLFLAG_RWTUN, printf("fwdv: " fmt, ## __VA_ARGS__); \ } while (0) -static void fwdv_identify(driver_t *, device_t); static int fwdv_probe(device_t); static int fwdv_attach(device_t); static int fwdv_detach(device_t); -static void fwdv_post_busreset(void *); -static void fwdv_post_explore(void *); static void fwdv_probe_task(void *, int); static int fwdv_avc_command(struct fwdv_softc *, const uint8_t *, int, @@ -865,70 +862,6 @@ fwdv_parse_identity(struct fwdv_softc *sc) } -static void -fwdv_post_explore(void *arg) -{ - struct fwdv_softc *sc = (struct fwdv_softc *)arg; - struct fw_device *fwdev; - int was_streaming; - - FWDV_LOCK(sc); - - if (sc->state == FWDV_STATE_DETACHING) { - FWDV_UNLOCK(sc); - return; - } - - if (sc->fwdev != NULL) { - STAILQ_FOREACH(fwdev, &sc->fd.fc->devices, link) { - if (fwdev == sc->fwdev && - fwdev->status == FWDEVATTACHED) - break; - } - if (fwdev == NULL) { - was_streaming = (sc->state == FWDV_STATE_STREAMING); - device_printf(sc->fd.dev, "AV/C device disconnected%s\n", - was_streaming ? " (was streaming)" : ""); - sc->fwdev = NULL; - sc->state = FWDV_STATE_IDLE; - wakeup(sc); - selwakeup(&sc->rsel); - FWDV_UNLOCK(sc); - if (was_streaming) - fwdv_iso_stop(sc); - FWDV_LOCK(sc); - } - } - - if (sc->fwdev == NULL) { - STAILQ_FOREACH(fwdev, &sc->fd.fc->devices, link) { - if (fwdev->status != FWDEVATTACHED) - continue; - - if (!crom_has_specver(fwdev->csrrom, - CSRVAL_1394TA, CSR_PROTAVC)) - continue; - - sc->fwdev = fwdev; - sc->eui_hi = fwdev->eui.hi; - sc->eui_lo = fwdev->eui.lo; - - FWDV_UNLOCK(sc); - - if (taskqueue_enqueue(taskqueue_thread, - &sc->probe_task) != 0) { - device_printf(sc->fd.dev, - "probe task enqueue failed\n"); - FWDV_LOCK(sc); - sc->fwdev = NULL; - FWDV_UNLOCK(sc); - } - return; - } - } - - FWDV_UNLOCK(sc); -} static void fwdv_probe_task(void *arg, int pending __unused) @@ -963,26 +896,24 @@ fwdv_probe_task(void *arg, int pending __unused) fwdv_iso_start(sc); } -static void -fwdv_post_busreset(void *arg __unused) -{ -} - -static void -fwdv_identify(driver_t *driver, device_t parent) -{ - - if (device_find_child(parent, "fwdv", DEVICE_UNIT_ANY) == NULL) - BUS_ADD_CHILD(parent, 0, "fwdv", DEVICE_UNIT_ANY); -} static int fwdv_probe(device_t dev) { + struct fw_unit *unit; + + unit = fw_get_unit(dev); + if (unit == NULL) + return (ENXIO); + + if (unit->spec_id != CSRVAL_1394TA) + return (ENXIO); + if (unit->sw_version != CSR_PROTAVC) + return (ENXIO); device_set_desc(dev, "AV/C DV Capture over FireWire"); - return (0); + return (BUS_PROBE_DEFAULT); } static int @@ -990,15 +921,26 @@ fwdv_attach(device_t dev) { struct fwdv_softc *sc; struct firewire_comm *fc; + struct fw_unit *unit; + struct fw_device *fwdev; int err; + unit = fw_get_unit(dev); + if (unit == NULL) + return (ENXIO); + fwdev = unit->fwdev; + if (fwdev == NULL) + return (ENXIO); + sc = device_get_softc(dev); sc->fd.dev = dev; - sc->fd.fc = device_get_ivars(dev); + sc->fd.fc = fw_get_comm(dev); fc = sc->fd.fc; mtx_init(&sc->mtx, "fwdv", NULL, MTX_DEF); - sc->fwdev = NULL; + sc->fwdev = fwdev; + sc->eui_hi = fwdev->eui.hi; + sc->eui_lo = fwdev->eui.lo; sc->state = FWDV_STATE_IDLE; sc->dma_ch = -1; sc->open_count = 0; @@ -1044,10 +986,8 @@ fwdv_attach(device_t dev) return (err); } - sc->fd.post_busreset = fwdv_post_busreset; - sc->fd.post_explore = fwdv_post_explore; - - fwdv_post_explore(sc); + if (taskqueue_enqueue(taskqueue_thread, &sc->probe_task) != 0) + device_printf(dev, "probe task enqueue failed\n"); return (0); } @@ -1083,7 +1023,6 @@ fwdv_detach(device_t dev) } static device_method_t fwdv_methods[] = { - DEVMETHOD(device_identify, fwdv_identify), DEVMETHOD(device_probe, fwdv_probe), DEVMETHOD(device_attach, fwdv_attach), DEVMETHOD(device_detach, fwdv_detach),