From owner-svn-src-stable@freebsd.org Sun Apr 12 15:30:01 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0E5D32C0C3F; Sun, 12 Apr 2020 15:30:01 +0000 (UTC) (envelope-from chuck@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 490bKN6b7lz4Fys; Sun, 12 Apr 2020 15:30:00 +0000 (UTC) (envelope-from chuck@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D93673AF0; Sun, 12 Apr 2020 15:30:00 +0000 (UTC) (envelope-from chuck@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03CFU0kp050177; Sun, 12 Apr 2020 15:30:00 GMT (envelope-from chuck@FreeBSD.org) Received: (from chuck@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03CFU0sZ050176; Sun, 12 Apr 2020 15:30:00 GMT (envelope-from chuck@FreeBSD.org) Message-Id: <202004121530.03CFU0sZ050176@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: chuck set sender to chuck@FreeBSD.org using -f From: Chuck Tuffli Date: Sun, 12 Apr 2020 15:30:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359825 - stable/12/usr.sbin/bhyve X-SVN-Group: stable-12 X-SVN-Commit-Author: chuck X-SVN-Commit-Paths: stable/12/usr.sbin/bhyve X-SVN-Commit-Revision: 359825 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Apr 2020 15:30:01 -0000 Author: chuck Date: Sun Apr 12 15:30:00 2020 New Revision: 359825 URL: https://svnweb.freebsd.org/changeset/base/359825 Log: MFC r359362 bhyve: refactor NVMe PRP memcpy Modified: stable/12/usr.sbin/bhyve/pci_nvme.c Directory Properties: stable/12/ (props changed) Modified: stable/12/usr.sbin/bhyve/pci_nvme.c ============================================================================== --- stable/12/usr.sbin/bhyve/pci_nvme.c Sun Apr 12 15:16:34 2020 (r359824) +++ stable/12/usr.sbin/bhyve/pci_nvme.c Sun Apr 12 15:30:00 2020 (r359825) @@ -140,6 +140,11 @@ enum nvme_cmd_cdw11 { NVME_CMD_CDW11_IV = 0xFFFF0000, }; +enum nvme_copy_dir { + NVME_COPY_TO_PRP, + NVME_COPY_FROM_PRP, +}; + #define NVME_CQ_INTEN 0x01 #define NVME_CQ_INTCOAL 0x02 @@ -545,10 +550,10 @@ pci_nvme_init_controller(struct vmctx *ctx, struct pci } static int -nvme_prp_memcpy(struct vmctx *ctx, uint64_t prp1, uint64_t prp2, uint8_t *src, - size_t len) +nvme_prp_memcpy(struct vmctx *ctx, uint64_t prp1, uint64_t prp2, uint8_t *b, + size_t len, enum nvme_copy_dir dir) { - uint8_t *dst; + uint8_t *p; size_t bytes; if (len > (8 * 1024)) { @@ -559,14 +564,17 @@ nvme_prp_memcpy(struct vmctx *ctx, uint64_t prp1, uint bytes = PAGE_SIZE - (prp1 & PAGE_MASK); bytes = MIN(bytes, len); - dst = vm_map_gpa(ctx, prp1, bytes); - if (dst == NULL) { + p = vm_map_gpa(ctx, prp1, bytes); + if (p == NULL) { return (-1); } - memcpy(dst, src, bytes); + if (dir == NVME_COPY_TO_PRP) + memcpy(p, b, bytes); + else + memcpy(b, p, bytes); - src += bytes; + b += bytes; len -= bytes; if (len == 0) { @@ -575,12 +583,15 @@ nvme_prp_memcpy(struct vmctx *ctx, uint64_t prp1, uint len = MIN(len, PAGE_SIZE); - dst = vm_map_gpa(ctx, prp2, len); - if (dst == NULL) { + p = vm_map_gpa(ctx, prp2, len); + if (p == NULL) { return (-1); } - memcpy(dst, src, len); + if (dir == NVME_COPY_TO_PRP) + memcpy(p, b, len); + else + memcpy(b, p, len); return (0); } @@ -726,16 +737,19 @@ nvme_opc_get_log_page(struct pci_nvme_softc* sc, struc switch (logpage) { case NVME_LOG_ERROR: nvme_prp_memcpy(sc->nsc_pi->pi_vmctx, command->prp1, - command->prp2, (uint8_t *)&sc->err_log, logsize); + command->prp2, (uint8_t *)&sc->err_log, logsize, + NVME_COPY_TO_PRP); break; case NVME_LOG_HEALTH_INFORMATION: /* TODO: present some smart info */ nvme_prp_memcpy(sc->nsc_pi->pi_vmctx, command->prp1, - command->prp2, (uint8_t *)&sc->health_log, logsize); + command->prp2, (uint8_t *)&sc->health_log, logsize, + NVME_COPY_TO_PRP); break; case NVME_LOG_FIRMWARE_SLOT: nvme_prp_memcpy(sc->nsc_pi->pi_vmctx, command->prp1, - command->prp2, (uint8_t *)&sc->fw_log, logsize); + command->prp2, (uint8_t *)&sc->fw_log, logsize, + NVME_COPY_TO_PRP); break; default: WPRINTF(("%s get log page %x command not supported", @@ -760,12 +774,14 @@ nvme_opc_identify(struct pci_nvme_softc* sc, struct nv switch (command->cdw10 & 0xFF) { case 0x00: /* return Identify Namespace data structure */ nvme_prp_memcpy(sc->nsc_pi->pi_vmctx, command->prp1, - command->prp2, (uint8_t *)&sc->nsdata, sizeof(sc->nsdata)); + command->prp2, (uint8_t *)&sc->nsdata, sizeof(sc->nsdata), + NVME_COPY_TO_PRP); break; case 0x01: /* return Identify Controller data structure */ nvme_prp_memcpy(sc->nsc_pi->pi_vmctx, command->prp1, command->prp2, (uint8_t *)&sc->ctrldata, - sizeof(sc->ctrldata)); + sizeof(sc->ctrldata), + NVME_COPY_TO_PRP); break; case 0x02: /* list of 1024 active NSIDs > CDW1.NSID */ dest = vm_map_gpa(sc->nsc_pi->pi_vmctx, command->prp1, From owner-svn-src-stable@freebsd.org Sun Apr 12 19:02:35 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 708212C5EAA; Sun, 12 Apr 2020 19:02:35 +0000 (UTC) (envelope-from chuck@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 490h2g1JqNz4VlF; Sun, 12 Apr 2020 19:02:35 +0000 (UTC) (envelope-from chuck@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 24C8D6631; Sun, 12 Apr 2020 19:02:35 +0000 (UTC) (envelope-from chuck@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03CJ2Z6f085766; Sun, 12 Apr 2020 19:02:35 GMT (envelope-from chuck@FreeBSD.org) Received: (from chuck@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03CJ2ZGG085765; Sun, 12 Apr 2020 19:02:35 GMT (envelope-from chuck@FreeBSD.org) Message-Id: <202004121902.03CJ2ZGG085765@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: chuck set sender to chuck@FreeBSD.org using -f From: Chuck Tuffli Date: Sun, 12 Apr 2020 19:02:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359830 - stable/12/usr.sbin/bhyve X-SVN-Group: stable-12 X-SVN-Commit-Author: chuck X-SVN-Commit-Paths: stable/12/usr.sbin/bhyve X-SVN-Commit-Revision: 359830 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Apr 2020 19:02:35 -0000 Author: chuck Date: Sun Apr 12 19:02:34 2020 New Revision: 359830 URL: https://svnweb.freebsd.org/changeset/base/359830 Log: MFC r359363 bhyve: refactor NVMe namespace initialization Modified: stable/12/usr.sbin/bhyve/pci_nvme.c Directory Properties: stable/12/ (props changed) Modified: stable/12/usr.sbin/bhyve/pci_nvme.c ============================================================================== --- stable/12/usr.sbin/bhyve/pci_nvme.c Sun Apr 12 18:04:20 2020 (r359829) +++ stable/12/usr.sbin/bhyve/pci_nvme.c Sun Apr 12 19:02:34 2020 (r359830) @@ -421,20 +421,21 @@ crc16(uint16_t crc, const void *buffer, unsigned int l static void pci_nvme_init_nsdata(struct pci_nvme_softc *sc, struct nvme_namespace_data *nd, uint32_t nsid, - uint64_t eui64) + struct pci_nvme_blockstore *nvstore) { - nd->nsze = sc->nvstore.size / sc->nvstore.sectsz; + /* Get capacity and block size information from backing store */ + nd->nsze = nvstore->size / nvstore->sectsz; nd->ncap = nd->nsze; nd->nuse = nd->nsze; - /* Get LBA and backstore information from backing store */ nd->nlbaf = 0; /* NLBAF is a 0's based value (i.e. 1 LBA Format) */ nd->flbas = 0; /* Create an EUI-64 if user did not provide one */ - if (eui64 == 0) { + if (nvstore->eui64 == 0) { char *data = NULL; + uint64_t eui64 = nvstore->eui64; asprintf(&data, "%s%u%u%u", vmname, sc->nsc_pi->pi_bus, sc->nsc_pi->pi_slot, sc->nsc_pi->pi_func); @@ -443,12 +444,12 @@ pci_nvme_init_nsdata(struct pci_nvme_softc *sc, eui64 = OUI_FREEBSD_NVME_LOW | crc16(0, data, strlen(data)); free(data); } - eui64 = (eui64 << 16) | (nsid & 0xffff); + nvstore->eui64 = (eui64 << 16) | (nsid & 0xffff); } - be64enc(nd->eui64, eui64); + be64enc(nd->eui64, nvstore->eui64); /* LBA data-sz = 2^lbads */ - nd->lbaf[0] = sc->nvstore.sectsz_bits << NVME_NS_DATA_LBAF_LBADS_SHIFT; + nd->lbaf[0] = nvstore->sectsz_bits << NVME_NS_DATA_LBAF_LBADS_SHIFT; } static void @@ -2031,7 +2032,7 @@ pci_nvme_init(struct vmctx *ctx, struct pci_devinst *p pci_nvme_reset(sc); pci_nvme_init_ctrldata(sc); - pci_nvme_init_nsdata(sc, &sc->nsdata, 1, sc->nvstore.eui64); + pci_nvme_init_nsdata(sc, &sc->nsdata, 1, &sc->nvstore); pci_nvme_init_logpages(sc); pci_lintr_request(pi); From owner-svn-src-stable@freebsd.org Sun Apr 12 19:14:28 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2F0CF2C63FC; Sun, 12 Apr 2020 19:14:28 +0000 (UTC) (envelope-from chuck@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 490hJN0T2mz4WgB; Sun, 12 Apr 2020 19:14:28 +0000 (UTC) (envelope-from chuck@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 0B46A683C; Sun, 12 Apr 2020 19:14:28 +0000 (UTC) (envelope-from chuck@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03CJEReA092493; Sun, 12 Apr 2020 19:14:27 GMT (envelope-from chuck@FreeBSD.org) Received: (from chuck@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03CJERFL092492; Sun, 12 Apr 2020 19:14:27 GMT (envelope-from chuck@FreeBSD.org) Message-Id: <202004121914.03CJERFL092492@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: chuck set sender to chuck@FreeBSD.org using -f From: Chuck Tuffli Date: Sun, 12 Apr 2020 19:14:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359831 - stable/12/usr.sbin/bhyve X-SVN-Group: stable-12 X-SVN-Commit-Author: chuck X-SVN-Commit-Paths: stable/12/usr.sbin/bhyve X-SVN-Commit-Revision: 359831 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Apr 2020 19:14:28 -0000 Author: chuck Date: Sun Apr 12 19:14:27 2020 New Revision: 359831 URL: https://svnweb.freebsd.org/changeset/base/359831 Log: MFC r359364 bhyve: implement NVMe deallocate command Modified: stable/12/usr.sbin/bhyve/pci_nvme.c Directory Properties: stable/12/ (props changed) Modified: stable/12/usr.sbin/bhyve/pci_nvme.c ============================================================================== --- stable/12/usr.sbin/bhyve/pci_nvme.c Sun Apr 12 19:02:34 2020 (r359830) +++ stable/12/usr.sbin/bhyve/pci_nvme.c Sun Apr 12 19:14:27 2020 (r359831) @@ -180,6 +180,7 @@ struct pci_nvme_blockstore { uint32_t sectsz; uint32_t sectsz_bits; uint64_t eui64; + uint32_t deallocate:1; }; struct pci_nvme_ioreq { @@ -209,6 +210,15 @@ struct pci_nvme_ioreq { struct iovec iovpadding[NVME_MAX_BLOCKIOVS-BLOCKIF_IOV_MAX]; }; +enum nvme_dsm_type { + /* Dataset Management bit in ONCS reflects backing storage capability */ + NVME_DATASET_MANAGEMENT_AUTO, + /* Unconditionally set Dataset Management bit in ONCS */ + NVME_DATASET_MANAGEMENT_ENABLE, + /* Unconditionally clear Dataset Management bit in ONCS */ + NVME_DATASET_MANAGEMENT_DISABLE, +}; + struct pci_nvme_softc { struct pci_devinst *nsc_pi; @@ -246,6 +256,8 @@ struct pci_nvme_softc { uint32_t intr_coales_aggr_time; /* 0x08: uS to delay intr */ uint32_t intr_coales_aggr_thresh; /* 0x08: compl-Q entries */ uint32_t async_ev_config; /* 0x0B: async event config */ + + enum nvme_dsm_type dataset_management; }; @@ -285,6 +297,9 @@ static void pci_nvme_io_partial(struct blockif_req *br ((NVME_STATUS_SCT_MASK << NVME_STATUS_SCT_SHIFT) |\ (NVME_STATUS_SC_MASK << NVME_STATUS_SC_SHIFT)) +#define NVME_ONCS_DSM (NVME_CTRLR_DATA_ONCS_DSM_MASK << \ + NVME_CTRLR_DATA_ONCS_DSM_SHIFT) + static __inline void cpywithpad(char *dst, size_t dst_size, const char *src, char pad) { @@ -363,6 +378,19 @@ pci_nvme_init_ctrldata(struct pci_nvme_softc *sc) (4 << NVME_CTRLR_DATA_CQES_MIN_SHIFT); cd->nn = 1; /* number of namespaces */ + cd->oncs = 0; + switch (sc->dataset_management) { + case NVME_DATASET_MANAGEMENT_AUTO: + if (sc->nvstore.deallocate) + cd->oncs |= NVME_ONCS_DSM; + break; + case NVME_DATASET_MANAGEMENT_ENABLE: + cd->oncs |= NVME_ONCS_DSM; + break; + default: + break; + } + cd->fna = 0x03; cd->power_state[0].mp = 10; @@ -429,6 +457,9 @@ pci_nvme_init_nsdata(struct pci_nvme_softc *sc, nd->ncap = nd->nsze; nd->nuse = nd->nsze; + if (nvstore->type == NVME_STOR_BLOCKIF) + nvstore->deallocate = blockif_candelete(nvstore->ctx); + nd->nlbaf = 0; /* NLBAF is a 0's based value (i.e. 1 LBA Format) */ nd->flbas = 0; @@ -1339,7 +1370,7 @@ pci_nvme_io_done(struct blockif_req *br, int err) uint16_t code, status; DPRINTF(("%s error %d %s", __func__, err, strerror(err))); - + /* TODO return correct error */ code = err ? NVME_SC_DATA_TRANSFER_ERROR : NVME_SC_SUCCESS; pci_nvme_status_genc(&status, code); @@ -1358,7 +1389,128 @@ pci_nvme_io_partial(struct blockif_req *br, int err) pthread_cond_signal(&req->cv); } +static void +pci_nvme_dealloc_sm(struct blockif_req *br, int err) +{ + struct pci_nvme_ioreq *req = br->br_param; + struct pci_nvme_softc *sc = req->sc; + bool done = true; + uint16_t status; + if (err) { + pci_nvme_status_genc(&status, NVME_SC_INTERNAL_DEVICE_ERROR); + } else if ((req->prev_gpaddr + 1) == (req->prev_size)) { + pci_nvme_status_genc(&status, NVME_SC_SUCCESS); + } else { + struct iovec *iov = req->io_req.br_iov; + + req->prev_gpaddr++; + iov += req->prev_gpaddr; + + /* The iov_* values already include the sector size */ + req->io_req.br_offset = (off_t)iov->iov_base; + req->io_req.br_resid = iov->iov_len; + if (blockif_delete(sc->nvstore.ctx, &req->io_req)) { + pci_nvme_status_genc(&status, + NVME_SC_INTERNAL_DEVICE_ERROR); + } else + done = false; + } + + if (done) { + pci_nvme_set_completion(sc, req->nvme_sq, req->sqid, + req->cid, 0, status, 0); + pci_nvme_release_ioreq(sc, req); + } +} + +static int +nvme_opc_dataset_mgmt(struct pci_nvme_softc *sc, + struct nvme_command *cmd, + struct pci_nvme_blockstore *nvstore, + struct pci_nvme_ioreq *req, + uint16_t *status) +{ + int err = -1; + + if ((sc->ctrldata.oncs & NVME_ONCS_DSM) == 0) { + pci_nvme_status_genc(status, NVME_SC_INVALID_OPCODE); + goto out; + } + + if (cmd->cdw11 & NVME_DSM_ATTR_DEALLOCATE) { + struct nvme_dsm_range *range; + uint32_t nr, r; + int sectsz = sc->nvstore.sectsz; + + /* + * DSM calls are advisory only, and compliant controllers + * may choose to take no actions (i.e. return Success). + */ + if (!nvstore->deallocate) { + pci_nvme_status_genc(status, NVME_SC_SUCCESS); + goto out; + } + + if (req == NULL) { + pci_nvme_status_genc(status, NVME_SC_INTERNAL_DEVICE_ERROR); + goto out; + } + + /* copy locally because a range entry could straddle PRPs */ + range = calloc(1, NVME_MAX_DSM_TRIM); + if (range == NULL) { + pci_nvme_status_genc(status, NVME_SC_INTERNAL_DEVICE_ERROR); + goto out; + } + nvme_prp_memcpy(sc->nsc_pi->pi_vmctx, cmd->prp1, cmd->prp2, + (uint8_t *)range, NVME_MAX_DSM_TRIM, NVME_COPY_FROM_PRP); + + req->opc = cmd->opc; + req->cid = cmd->cid; + req->nsid = cmd->nsid; + /* + * If the request is for more than a single range, store + * the ranges in the br_iov. Optimize for the common case + * of a single range. + * + * Note that NVMe Number of Ranges is a zero based value + */ + nr = cmd->cdw10 & 0xff; + + req->io_req.br_iovcnt = 0; + req->io_req.br_offset = range[0].starting_lba * sectsz; + req->io_req.br_resid = range[0].length * sectsz; + + if (nr == 0) { + req->io_req.br_callback = pci_nvme_io_done; + } else { + struct iovec *iov = req->io_req.br_iov; + + for (r = 0; r <= nr; r++) { + iov[r].iov_base = (void *)(range[r].starting_lba * sectsz); + iov[r].iov_len = range[r].length * sectsz; + } + req->io_req.br_callback = pci_nvme_dealloc_sm; + + /* + * Use prev_gpaddr to track the current entry and + * prev_size to track the number of entries + */ + req->prev_gpaddr = 0; + req->prev_size = r; + } + + err = blockif_delete(nvstore->ctx, &req->io_req); + if (err) + pci_nvme_status_genc(status, NVME_SC_INTERNAL_DEVICE_ERROR); + + free(range); + } +out: + return (err); +} + static void pci_nvme_handle_io_cmd(struct pci_nvme_softc* sc, uint16_t idx) { @@ -1410,16 +1562,27 @@ pci_nvme_handle_io_cmd(struct pci_nvme_softc* sc, uint continue; } - nblocks = (cmd->cdw12 & 0xFFFF) + 1; - - bytes = nblocks * sc->nvstore.sectsz; - if (sc->nvstore.type == NVME_STOR_BLOCKIF) { req = pci_nvme_get_ioreq(sc); req->nvme_sq = sq; req->sqid = idx; } + if (cmd->opc == NVME_OPC_DATASET_MANAGEMENT) { + if (nvme_opc_dataset_mgmt(sc, cmd, &sc->nvstore, req, + &status)) { + pci_nvme_set_completion(sc, sq, idx, cmd->cid, + 0, status, 1); + if (req) + pci_nvme_release_ioreq(sc, req); + } + continue; + } + + nblocks = (cmd->cdw12 & 0xFFFF) + 1; + + bytes = nblocks * sc->nvstore.sectsz; + /* * If data starts mid-page and flows into the next page, then * increase page count @@ -1868,6 +2031,7 @@ pci_nvme_parse_opts(struct pci_nvme_softc *sc, char *o sc->ioslots = NVME_IOSLOTS; sc->num_squeues = sc->max_queues; sc->num_cqueues = sc->max_queues; + sc->dataset_management = NVME_DATASET_MANAGEMENT_AUTO; sectsz = 0; uopt = strdup(opts); @@ -1912,6 +2076,13 @@ pci_nvme_parse_opts(struct pci_nvme_softc *sc, char *o } } else if (!strcmp("eui64", xopts)) { sc->nvstore.eui64 = htobe64(strtoull(config, NULL, 0)); + } else if (!strcmp("dsm", xopts)) { + if (!strcmp("auto", config)) + sc->dataset_management = NVME_DATASET_MANAGEMENT_AUTO; + else if (!strcmp("enable", config)) + sc->dataset_management = NVME_DATASET_MANAGEMENT_ENABLE; + else if (!strcmp("disable", config)) + sc->dataset_management = NVME_DATASET_MANAGEMENT_DISABLE; } else if (optidx == 0) { snprintf(bident, sizeof(bident), "%d:%d", sc->nsc_pi->pi_slot, sc->nsc_pi->pi_func); @@ -2031,8 +2202,12 @@ pci_nvme_init(struct vmctx *ctx, struct pci_devinst *p sem_init(&sc->iosemlock, 0, sc->ioslots); pci_nvme_reset(sc); - pci_nvme_init_ctrldata(sc); + /* + * Controller data depends on Namespace data so initialize Namespace + * data first. + */ pci_nvme_init_nsdata(sc, &sc->nsdata, 1, &sc->nvstore); + pci_nvme_init_ctrldata(sc); pci_nvme_init_logpages(sc); pci_lintr_request(pi); From owner-svn-src-stable@freebsd.org Sun Apr 12 19:18:26 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id DC2F62C64C8; Sun, 12 Apr 2020 19:18:26 +0000 (UTC) (envelope-from chuck@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 490hNy5WFBz4Wtn; Sun, 12 Apr 2020 19:18:26 +0000 (UTC) (envelope-from chuck@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B3BCE6844; Sun, 12 Apr 2020 19:18:26 +0000 (UTC) (envelope-from chuck@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03CJIQM9092903; Sun, 12 Apr 2020 19:18:26 GMT (envelope-from chuck@FreeBSD.org) Received: (from chuck@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03CJIQVq092902; Sun, 12 Apr 2020 19:18:26 GMT (envelope-from chuck@FreeBSD.org) Message-Id: <202004121918.03CJIQVq092902@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: chuck set sender to chuck@FreeBSD.org using -f From: Chuck Tuffli Date: Sun, 12 Apr 2020 19:18:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359832 - stable/12/usr.sbin/bhyve X-SVN-Group: stable-12 X-SVN-Commit-Author: chuck X-SVN-Commit-Paths: stable/12/usr.sbin/bhyve X-SVN-Commit-Revision: 359832 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Apr 2020 19:18:26 -0000 Author: chuck Date: Sun Apr 12 19:18:26 2020 New Revision: 359832 URL: https://svnweb.freebsd.org/changeset/base/359832 Log: MFC r359365 bhyve: use STAILQ in NVMe emulation Modified: stable/12/usr.sbin/bhyve/pci_nvme.c Directory Properties: stable/12/ (props changed) Modified: stable/12/usr.sbin/bhyve/pci_nvme.c ============================================================================== --- stable/12/usr.sbin/bhyve/pci_nvme.c Sun Apr 12 19:14:27 2020 (r359831) +++ stable/12/usr.sbin/bhyve/pci_nvme.c Sun Apr 12 19:18:26 2020 (r359832) @@ -185,7 +185,7 @@ struct pci_nvme_blockstore { struct pci_nvme_ioreq { struct pci_nvme_softc *sc; - struct pci_nvme_ioreq *next; + STAILQ_ENTRY(pci_nvme_ioreq) link; struct nvme_submission_queue *nvme_sq; uint16_t sqid; @@ -240,7 +240,7 @@ struct pci_nvme_softc { uint32_t num_squeues; struct pci_nvme_ioreq *ioreqs; - struct pci_nvme_ioreq *ioreqs_free; /* free list of ioreqs */ + STAILQ_HEAD(, pci_nvme_ioreq) ioreqs_free; /* free list of ioreqs */ uint32_t pending_ios; uint32_t ioslots; sem_t iosemlock; @@ -1318,8 +1318,7 @@ pci_nvme_release_ioreq(struct pci_nvme_softc *sc, stru pthread_mutex_lock(&sc->mtx); - req->next = sc->ioreqs_free; - sc->ioreqs_free = req; + STAILQ_INSERT_TAIL(&sc->ioreqs_free, req, link); sc->pending_ios--; /* when no more IO pending, can set to ready if device reset/enabled */ @@ -1340,12 +1339,10 @@ pci_nvme_get_ioreq(struct pci_nvme_softc *sc) sem_wait(&sc->iosemlock); pthread_mutex_lock(&sc->mtx); - req = sc->ioreqs_free; + req = STAILQ_FIRST(&sc->ioreqs_free); assert(req != NULL); + STAILQ_REMOVE_HEAD(&sc->ioreqs_free, link); - sc->ioreqs_free = req->next; - - req->next = NULL; req->sc = sc; sc->pending_ios++; @@ -2150,14 +2147,13 @@ pci_nvme_init(struct vmctx *ctx, struct pci_devinst *p else error = 0; + STAILQ_INIT(&sc->ioreqs_free); sc->ioreqs = calloc(sc->ioslots, sizeof(struct pci_nvme_ioreq)); for (int i = 0; i < sc->ioslots; i++) { - if (i < (sc->ioslots-1)) - sc->ioreqs[i].next = &sc->ioreqs[i+1]; + STAILQ_INSERT_TAIL(&sc->ioreqs_free, &sc->ioreqs[i], link); pthread_mutex_init(&sc->ioreqs[i].mtx, NULL); pthread_cond_init(&sc->ioreqs[i].cv, NULL); } - sc->ioreqs_free = sc->ioreqs; sc->intr_coales_aggr_thresh = 1; pci_set_cfgdata16(pi, PCIR_DEVICE, 0x0A0A); From owner-svn-src-stable@freebsd.org Sun Apr 12 19:21:44 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B3E872C674C; Sun, 12 Apr 2020 19:21:44 +0000 (UTC) (envelope-from chuck@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 490hSm4PH1z4XKZ; Sun, 12 Apr 2020 19:21:44 +0000 (UTC) (envelope-from chuck@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9221968C0; Sun, 12 Apr 2020 19:21:44 +0000 (UTC) (envelope-from chuck@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03CJLiot096382; Sun, 12 Apr 2020 19:21:44 GMT (envelope-from chuck@FreeBSD.org) Received: (from chuck@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03CJLiD5096381; Sun, 12 Apr 2020 19:21:44 GMT (envelope-from chuck@FreeBSD.org) Message-Id: <202004121921.03CJLiD5096381@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: chuck set sender to chuck@FreeBSD.org using -f From: Chuck Tuffli Date: Sun, 12 Apr 2020 19:21:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359833 - stable/12/usr.sbin/bhyve X-SVN-Group: stable-12 X-SVN-Commit-Author: chuck X-SVN-Commit-Paths: stable/12/usr.sbin/bhyve X-SVN-Commit-Revision: 359833 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Apr 2020 19:21:44 -0000 Author: chuck Date: Sun Apr 12 19:21:44 2020 New Revision: 359833 URL: https://svnweb.freebsd.org/changeset/base/359833 Log: MFC r359366 bhyve: fix NVMe emulation missed interrupts Modified: stable/12/usr.sbin/bhyve/pci_nvme.c Directory Properties: stable/12/ (props changed) Modified: stable/12/usr.sbin/bhyve/pci_nvme.c ============================================================================== --- stable/12/usr.sbin/bhyve/pci_nvme.c Sun Apr 12 19:18:26 2020 (r359832) +++ stable/12/usr.sbin/bhyve/pci_nvme.c Sun Apr 12 19:21:44 2020 (r359833) @@ -1082,12 +1082,12 @@ pci_nvme_handle_admin_cmd(struct pci_nvme_softc* sc, u struct nvme_command *cmd; struct nvme_submission_queue *sq; struct nvme_completion_queue *cq; - int do_intr = 0; uint16_t sqhead; DPRINTF(("%s index %u", __func__, (uint32_t)value)); sq = &sc->submit_queues[0]; + cq = &sc->compl_queues[0]; sqhead = atomic_load_acq_short(&sq->head); @@ -1106,44 +1106,44 @@ pci_nvme_handle_admin_cmd(struct pci_nvme_softc* sc, u switch (cmd->opc) { case NVME_OPC_DELETE_IO_SQ: DPRINTF(("%s command DELETE_IO_SQ", __func__)); - do_intr |= nvme_opc_delete_io_sq(sc, cmd, &compl); + nvme_opc_delete_io_sq(sc, cmd, &compl); break; case NVME_OPC_CREATE_IO_SQ: DPRINTF(("%s command CREATE_IO_SQ", __func__)); - do_intr |= nvme_opc_create_io_sq(sc, cmd, &compl); + nvme_opc_create_io_sq(sc, cmd, &compl); break; case NVME_OPC_DELETE_IO_CQ: DPRINTF(("%s command DELETE_IO_CQ", __func__)); - do_intr |= nvme_opc_delete_io_cq(sc, cmd, &compl); + nvme_opc_delete_io_cq(sc, cmd, &compl); break; case NVME_OPC_CREATE_IO_CQ: DPRINTF(("%s command CREATE_IO_CQ", __func__)); - do_intr |= nvme_opc_create_io_cq(sc, cmd, &compl); + nvme_opc_create_io_cq(sc, cmd, &compl); break; case NVME_OPC_GET_LOG_PAGE: DPRINTF(("%s command GET_LOG_PAGE", __func__)); - do_intr |= nvme_opc_get_log_page(sc, cmd, &compl); + nvme_opc_get_log_page(sc, cmd, &compl); break; case NVME_OPC_IDENTIFY: DPRINTF(("%s command IDENTIFY", __func__)); - do_intr |= nvme_opc_identify(sc, cmd, &compl); + nvme_opc_identify(sc, cmd, &compl); break; case NVME_OPC_ABORT: DPRINTF(("%s command ABORT", __func__)); - do_intr |= nvme_opc_abort(sc, cmd, &compl); + nvme_opc_abort(sc, cmd, &compl); break; case NVME_OPC_SET_FEATURES: DPRINTF(("%s command SET_FEATURES", __func__)); - do_intr |= nvme_opc_set_features(sc, cmd, &compl); + nvme_opc_set_features(sc, cmd, &compl); break; case NVME_OPC_GET_FEATURES: DPRINTF(("%s command GET_FEATURES", __func__)); - do_intr |= nvme_opc_get_features(sc, cmd, &compl); + nvme_opc_get_features(sc, cmd, &compl); break; case NVME_OPC_ASYNC_EVENT_REQUEST: DPRINTF(("%s command ASYNC_EVENT_REQ", __func__)); /* XXX dont care, unhandled for now - do_intr |= nvme_opc_async_event_req(sc, cmd, &compl); + nvme_opc_async_event_req(sc, cmd, &compl); */ compl.status = NVME_NO_STATUS; break; @@ -1151,15 +1151,12 @@ pci_nvme_handle_admin_cmd(struct pci_nvme_softc* sc, u WPRINTF(("0x%x command is not implemented", cmd->opc)); pci_nvme_status_genc(&compl.status, NVME_SC_INVALID_OPCODE); - do_intr |= 1; } if (NVME_COMPLETION_VALID(compl)) { struct nvme_completion *cp; int phase; - cq = &sc->compl_queues[0]; - cp = &(cq->qbase)[cq->tail]; cp->cdw0 = compl.cdw0; cp->sqid = 0; @@ -1179,7 +1176,7 @@ pci_nvme_handle_admin_cmd(struct pci_nvme_softc* sc, u atomic_store_short(&sq->head, sqhead); atomic_store_int(&sq->busy, 0); - if (do_intr) + if (cq->head != cq->tail) pci_generate_msix(sc->nsc_pi, 0); } @@ -1275,7 +1272,6 @@ pci_nvme_set_completion(struct pci_nvme_softc *sc, { struct nvme_completion_queue *cq = &sc->compl_queues[sq->cqid]; struct nvme_completion *compl; - int do_intr = 0; int phase; DPRINTF(("%s sqid %d cqid %u cid %u status: 0x%x 0x%x", @@ -1299,14 +1295,16 @@ pci_nvme_set_completion(struct pci_nvme_softc *sc, cq->tail = (cq->tail + 1) % cq->size; - if (cq->intr_en & NVME_CQ_INTEN) - do_intr = 1; - pthread_mutex_unlock(&cq->mtx); - if (ignore_busy || !atomic_load_acq_int(&sq->busy)) - if (do_intr) + if (cq->head != cq->tail) { + if (cq->intr_en & NVME_CQ_INTEN) { pci_generate_msix(sc->nsc_pi, cq->intr_vec); + } else { + DPRINTF(("%s: CQ%u interrupt disabled\n", + __func__, sq->cqid)); + } + } } static void From owner-svn-src-stable@freebsd.org Sun Apr 12 19:25:28 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B0B2F2C682B; Sun, 12 Apr 2020 19:25:28 +0000 (UTC) (envelope-from chuck@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 490hY44Cb9z4Xbn; Sun, 12 Apr 2020 19:25:28 +0000 (UTC) (envelope-from chuck@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8B3496A51; Sun, 12 Apr 2020 19:25:28 +0000 (UTC) (envelope-from chuck@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03CJPSgu099080; Sun, 12 Apr 2020 19:25:28 GMT (envelope-from chuck@FreeBSD.org) Received: (from chuck@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03CJPS5x099079; Sun, 12 Apr 2020 19:25:28 GMT (envelope-from chuck@FreeBSD.org) Message-Id: <202004121925.03CJPS5x099079@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: chuck set sender to chuck@FreeBSD.org using -f From: Chuck Tuffli Date: Sun, 12 Apr 2020 19:25:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359834 - stable/12/usr.sbin/bhyve X-SVN-Group: stable-12 X-SVN-Commit-Author: chuck X-SVN-Commit-Paths: stable/12/usr.sbin/bhyve X-SVN-Commit-Revision: 359834 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Apr 2020 19:25:28 -0000 Author: chuck Date: Sun Apr 12 19:25:28 2020 New Revision: 359834 URL: https://svnweb.freebsd.org/changeset/base/359834 Log: MFC r359367 bhyve: fix NVMe emulation update of SQHD Modified: stable/12/usr.sbin/bhyve/pci_nvme.c Directory Properties: stable/12/ (props changed) Modified: stable/12/usr.sbin/bhyve/pci_nvme.c ============================================================================== --- stable/12/usr.sbin/bhyve/pci_nvme.c Sun Apr 12 19:21:44 2020 (r359833) +++ stable/12/usr.sbin/bhyve/pci_nvme.c Sun Apr 12 19:25:28 2020 (r359834) @@ -1152,7 +1152,8 @@ pci_nvme_handle_admin_cmd(struct pci_nvme_softc* sc, u cmd->opc)); pci_nvme_status_genc(&compl.status, NVME_SC_INVALID_OPCODE); } - + sqhead = (sqhead + 1) % sq->size; + if (NVME_COMPLETION_VALID(compl)) { struct nvme_completion *cp; int phase; @@ -1169,7 +1170,6 @@ pci_nvme_handle_admin_cmd(struct pci_nvme_softc* sc, u cq->tail = (cq->tail + 1) % cq->size; } - sqhead = (sqhead + 1) % sq->size; } DPRINTF(("setting sqhead %u", sqhead)); @@ -1284,8 +1284,9 @@ pci_nvme_set_completion(struct pci_nvme_softc *sc, compl = &cq->qbase[cq->tail]; - compl->sqhd = atomic_load_acq_short(&sq->head); + compl->cdw0 = cdw0; compl->sqid = sqid; + compl->sqhd = atomic_load_acq_short(&sq->head); compl->cid = cid; // toggle phase From owner-svn-src-stable@freebsd.org Sun Apr 12 22:11:30 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 33EBC2AB6DC; Sun, 12 Apr 2020 22:11:30 +0000 (UTC) (envelope-from dab@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 490mDf0djnz3HFC; Sun, 12 Apr 2020 22:11:30 +0000 (UTC) (envelope-from dab@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 112428C4D; Sun, 12 Apr 2020 22:11:30 +0000 (UTC) (envelope-from dab@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03CMBT9I001237; Sun, 12 Apr 2020 22:11:29 GMT (envelope-from dab@FreeBSD.org) Received: (from dab@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03CMBTCl001235; Sun, 12 Apr 2020 22:11:29 GMT (envelope-from dab@FreeBSD.org) Message-Id: <202004122211.03CMBTCl001235@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dab set sender to dab@FreeBSD.org using -f From: David Bright Date: Sun, 12 Apr 2020 22:11:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359838 - in stable/12: etc/mtree sbin/nvmecontrol sbin/nvmecontrol/tests X-SVN-Group: stable-12 X-SVN-Commit-Author: dab X-SVN-Commit-Paths: in stable/12: etc/mtree sbin/nvmecontrol sbin/nvmecontrol/tests X-SVN-Commit-Revision: 359838 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Apr 2020 22:11:30 -0000 Author: dab Date: Sun Apr 12 22:11:29 2020 New Revision: 359838 URL: https://svnweb.freebsd.org/changeset/base/359838 Log: MFC r359717: Add a basic test for nvmecontrol I recently made some bug fixes in nvmecontrol. It occurred to me that since nvmecontrol lacks any kyua tests, I should convert the informal testing I did into a more formal automated test. The test in this change should be considered just a starting point; it is neither complete nor thorough. While converting the test to ATF/kyua, I discovered a small bug in nvmecontrol; the nvmecontrol devlist command would always exit with an unsuccessful status. So I included the fix for that, too, so that the test won't fail. Sponsored by: Dell EMC Isilon Added: stable/12/sbin/nvmecontrol/tests/ - copied from r359717, head/sbin/nvmecontrol/tests/ Modified: stable/12/etc/mtree/BSD.tests.dist stable/12/sbin/nvmecontrol/Makefile stable/12/sbin/nvmecontrol/devlist.c Directory Properties: stable/12/ (props changed) Modified: stable/12/etc/mtree/BSD.tests.dist ============================================================================== --- stable/12/etc/mtree/BSD.tests.dist Sun Apr 12 21:23:51 2020 (r359837) +++ stable/12/etc/mtree/BSD.tests.dist Sun Apr 12 22:11:29 2020 (r359838) @@ -432,6 +432,8 @@ .. mdconfig .. + nvmecontrol + .. pfctl files .. Modified: stable/12/sbin/nvmecontrol/Makefile ============================================================================== --- stable/12/sbin/nvmecontrol/Makefile Sun Apr 12 21:23:51 2020 (r359837) +++ stable/12/sbin/nvmecontrol/Makefile Sun Apr 12 22:11:29 2020 (r359838) @@ -1,5 +1,7 @@ # $FreeBSD$ +.include + PACKAGE=runtime PROG= nvmecontrol SRCS= comnd.c nvmecontrol.c @@ -11,6 +13,8 @@ MAN= nvmecontrol.8 LDFLAGS+= -rdynamic LIBADD+= util SUBDIR= modules +HAS_TESTS= +SUBDIR.${MK_TESTS}+= tests .PATH: ${SRCTOP}/sys/dev/nvme Modified: stable/12/sbin/nvmecontrol/devlist.c ============================================================================== --- stable/12/sbin/nvmecontrol/devlist.c Sun Apr 12 21:23:51 2020 (r359837) +++ stable/12/sbin/nvmecontrol/devlist.c Sun Apr 12 22:11:29 2020 (r359838) @@ -122,8 +122,10 @@ devlist(const struct cmd *f, int argc, char *argv[]) close(fd); } - if (found == 0) + if (found == 0) { printf("No NVMe controllers found.\n"); + exit(1); + } - exit(1); + exit(0); } From owner-svn-src-stable@freebsd.org Mon Apr 13 00:38:02 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id C6BC12AE275; Mon, 13 Apr 2020 00:38:02 +0000 (UTC) (envelope-from emaste@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 490qTk4cXbz3P0T; Mon, 13 Apr 2020 00:38:02 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 94894A967; Mon, 13 Apr 2020 00:38:02 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03D0c2Xk089617; Mon, 13 Apr 2020 00:38:02 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03D0c2md089616; Mon, 13 Apr 2020 00:38:02 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <202004130038.03D0c2md089616@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Mon, 13 Apr 2020 00:38:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359842 - stable/12/sys/kern X-SVN-Group: stable-12 X-SVN-Commit-Author: emaste X-SVN-Commit-Paths: stable/12/sys/kern X-SVN-Commit-Revision: 359842 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 00:38:02 -0000 Author: emaste Date: Mon Apr 13 00:38:02 2020 New Revision: 359842 URL: https://svnweb.freebsd.org/changeset/base/359842 Log: MFC r359451: capabilities.conf: add info about capmode permitted syscalls Sponsored by: The FreeBSD Foundation Modified: stable/12/sys/kern/capabilities.conf Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/kern/capabilities.conf ============================================================================== --- stable/12/sys/kern/capabilities.conf Mon Apr 13 00:15:30 2020 (r359841) +++ stable/12/sys/kern/capabilities.conf Mon Apr 13 00:38:02 2020 (r359842) @@ -28,6 +28,11 @@ ## ## List of system calls enabled in capability mode, one name per line. ## +## System calls listed here operate either fully or partially in the absence +## of global namespaces or ambient authority. In capability mode system calls +## that operate only on global namespaces or require ambient authority have no +## utility and thus are not permitted. +## ## Notes: ## - sys_exit(2), abort2(2) and close(2) are very important. ## - Sorted alphabetically, please keep it that way. From owner-svn-src-stable@freebsd.org Mon Apr 13 00:50:36 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0E35E2AE535; Mon, 13 Apr 2020 00:50:36 +0000 (UTC) (envelope-from jhibbits@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 490qmC6jZzz3PQN; Mon, 13 Apr 2020 00:50:35 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E133CAB49; Mon, 13 Apr 2020 00:50:35 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03D0oZ7E095864; Mon, 13 Apr 2020 00:50:35 GMT (envelope-from jhibbits@FreeBSD.org) Received: (from jhibbits@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03D0oZ00095863; Mon, 13 Apr 2020 00:50:35 GMT (envelope-from jhibbits@FreeBSD.org) Message-Id: <202004130050.03D0oZ00095863@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhibbits set sender to jhibbits@FreeBSD.org using -f From: Justin Hibbits Date: Mon, 13 Apr 2020 00:50:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359843 - in stable: 11/sys/dev/mii 12/sys/dev/mii X-SVN-Group: stable-11 X-SVN-Commit-Author: jhibbits X-SVN-Commit-Paths: in stable: 11/sys/dev/mii 12/sys/dev/mii X-SVN-Commit-Revision: 359843 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 00:50:36 -0000 Author: jhibbits Date: Mon Apr 13 00:50:35 2020 New Revision: 359843 URL: https://svnweb.freebsd.org/changeset/base/359843 Log: MFC r359756: Add support for BCM54618SE PHY Sponsored by: Juniper Networks, Inc Modified: stable/11/sys/dev/mii/brgphy.c stable/11/sys/dev/mii/miidevs Directory Properties: stable/11/ (props changed) Changes in other areas also in this revision: Modified: stable/12/sys/dev/mii/brgphy.c stable/12/sys/dev/mii/miidevs Directory Properties: stable/12/ (props changed) Modified: stable/11/sys/dev/mii/brgphy.c ============================================================================== --- stable/11/sys/dev/mii/brgphy.c Mon Apr 13 00:38:02 2020 (r359842) +++ stable/11/sys/dev/mii/brgphy.c Mon Apr 13 00:50:35 2020 (r359843) @@ -150,6 +150,7 @@ static const struct mii_phydesc brgphys[] = { #ifdef notyet /* better handled by ukphy(4) until WARs are implemented */ MII_PHY_DESC(BROADCOM2, BCM5785), #endif + MII_PHY_DESC(BROADCOM3, BCM54618SE), MII_PHY_DESC(BROADCOM3, BCM5717C), MII_PHY_DESC(BROADCOM3, BCM5719C), MII_PHY_DESC(BROADCOM3, BCM5720C), Modified: stable/11/sys/dev/mii/miidevs ============================================================================== --- stable/11/sys/dev/mii/miidevs Mon Apr 13 00:38:02 2020 (r359842) +++ stable/11/sys/dev/mii/miidevs Mon Apr 13 00:50:35 2020 (r359843) @@ -190,6 +190,7 @@ model BROADCOM2 BCM5784 0x003a BCM5784 10/100/1000bas model BROADCOM2 BCM5709C 0x003c BCM5709 10/100/1000baseT PHY model BROADCOM2 BCM5761 0x003d BCM5761 10/100/1000baseT PHY model BROADCOM2 BCM5709S 0x003f BCM5709S/5720S 1000/2500baseSX PHY +model BROADCOM3 BCM54618SE 0x000d BCM54618SE 10/100/1000BASE-T PHY model BROADCOM3 BCM57780 0x0019 BCM57780 1000BASE-T media interface model BROADCOM3 BCM5717C 0x0020 BCM5717C 1000BASE-T media interface model BROADCOM3 BCM5719C 0x0022 BCM5719C 1000BASE-T media interface From owner-svn-src-stable@freebsd.org Mon Apr 13 00:50:36 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B1D1A2AE53F; Mon, 13 Apr 2020 00:50:36 +0000 (UTC) (envelope-from jhibbits@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 490qmD492rz3PQQ; Mon, 13 Apr 2020 00:50:36 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 89FC4AB4B; Mon, 13 Apr 2020 00:50:36 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03D0oava095871; Mon, 13 Apr 2020 00:50:36 GMT (envelope-from jhibbits@FreeBSD.org) Received: (from jhibbits@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03D0oaib095870; Mon, 13 Apr 2020 00:50:36 GMT (envelope-from jhibbits@FreeBSD.org) Message-Id: <202004130050.03D0oaib095870@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhibbits set sender to jhibbits@FreeBSD.org using -f From: Justin Hibbits Date: Mon, 13 Apr 2020 00:50:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359843 - in stable: 11/sys/dev/mii 12/sys/dev/mii X-SVN-Group: stable-12 X-SVN-Commit-Author: jhibbits X-SVN-Commit-Paths: in stable: 11/sys/dev/mii 12/sys/dev/mii X-SVN-Commit-Revision: 359843 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 00:50:36 -0000 Author: jhibbits Date: Mon Apr 13 00:50:35 2020 New Revision: 359843 URL: https://svnweb.freebsd.org/changeset/base/359843 Log: MFC r359756: Add support for BCM54618SE PHY Sponsored by: Juniper Networks, Inc Modified: stable/12/sys/dev/mii/brgphy.c stable/12/sys/dev/mii/miidevs Directory Properties: stable/12/ (props changed) Changes in other areas also in this revision: Modified: stable/11/sys/dev/mii/brgphy.c stable/11/sys/dev/mii/miidevs Directory Properties: stable/11/ (props changed) Modified: stable/12/sys/dev/mii/brgphy.c ============================================================================== --- stable/12/sys/dev/mii/brgphy.c Mon Apr 13 00:38:02 2020 (r359842) +++ stable/12/sys/dev/mii/brgphy.c Mon Apr 13 00:50:35 2020 (r359843) @@ -152,6 +152,7 @@ static const struct mii_phydesc brgphys[] = { #ifdef notyet /* better handled by ukphy(4) until WARs are implemented */ MII_PHY_DESC(BROADCOM2, BCM5785), #endif + MII_PHY_DESC(BROADCOM3, BCM54618SE), MII_PHY_DESC(BROADCOM3, BCM5717C), MII_PHY_DESC(BROADCOM3, BCM5719C), MII_PHY_DESC(BROADCOM3, BCM5720C), Modified: stable/12/sys/dev/mii/miidevs ============================================================================== --- stable/12/sys/dev/mii/miidevs Mon Apr 13 00:38:02 2020 (r359842) +++ stable/12/sys/dev/mii/miidevs Mon Apr 13 00:50:35 2020 (r359843) @@ -190,6 +190,7 @@ model BROADCOM2 BCM5784 0x003a BCM5784 10/100/1000bas model BROADCOM2 BCM5709C 0x003c BCM5709 10/100/1000baseT PHY model BROADCOM2 BCM5761 0x003d BCM5761 10/100/1000baseT PHY model BROADCOM2 BCM5709S 0x003f BCM5709S/5720S 1000/2500baseSX PHY +model BROADCOM3 BCM54618SE 0x000d BCM54618SE 10/100/1000BASE-T PHY model BROADCOM3 BCM57780 0x0019 BCM57780 1000BASE-T media interface model BROADCOM3 BCM5717C 0x0020 BCM5717C 1000BASE-T media interface model BROADCOM3 BCM5719C 0x0022 BCM5719C 1000BASE-T media interface From owner-svn-src-stable@freebsd.org Mon Apr 13 08:27:19 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id F143A2B6D6C; Mon, 13 Apr 2020 08:27:19 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4911vC68P0z4GPW; Mon, 13 Apr 2020 08:27:19 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id CE43118526; Mon, 13 Apr 2020 08:27:19 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03D8RJ9Y076993; Mon, 13 Apr 2020 08:27:19 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03D8RJ7D076992; Mon, 13 Apr 2020 08:27:19 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004130827.03D8RJ7D076992@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 08:27:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359845 - stable/12/sys/dev/mlx5/mlx5_en X-SVN-Group: stable-12 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/12/sys/dev/mlx5/mlx5_en X-SVN-Commit-Revision: 359845 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 08:27:20 -0000 Author: hselasky Date: Mon Apr 13 08:27:19 2020 New Revision: 359845 URL: https://svnweb.freebsd.org/changeset/base/359845 Log: MFC r359654: Ensure a minimum inline size of 16 bytes in mlx5en(4). This includes 14 bytes of ethernet header and 2 bytes of VLAN header. This allows for making assumptions about the inline size limit in the fast transmit path later on. Use a signed integer variable to catch underflow. Sponsored by: Mellanox Technologies Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c ============================================================================== --- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Mon Apr 13 08:26:11 2020 (r359844) +++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Mon Apr 13 08:27:19 2020 (r359845) @@ -3479,15 +3479,19 @@ mlx5e_check_required_hca_cap(struct mlx5_core_dev *mde static u16 mlx5e_get_max_inline_cap(struct mlx5_core_dev *mdev) { - uint32_t bf_buf_size = (1U << MLX5_CAP_GEN(mdev, log_bf_reg_size)) / 2U; + const int min_size = ETHER_VLAN_ENCAP_LEN + ETHER_HDR_LEN; + const int max_size = MLX5E_MAX_TX_INLINE; + const int bf_buf_size = + ((1U << MLX5_CAP_GEN(mdev, log_bf_reg_size)) / 2U) - + (sizeof(struct mlx5e_tx_wqe) - 2); - bf_buf_size -= sizeof(struct mlx5e_tx_wqe) - 2; - - /* verify against driver hardware limit */ - if (bf_buf_size > MLX5E_MAX_TX_INLINE) - bf_buf_size = MLX5E_MAX_TX_INLINE; - - return (bf_buf_size); + /* verify against driver limits */ + if (bf_buf_size > max_size) + return (max_size); + else if (bf_buf_size < min_size) + return (min_size); + else + return (bf_buf_size); } static int From owner-svn-src-stable@freebsd.org Mon Apr 13 08:28:03 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0E6302B6DF0; Mon, 13 Apr 2020 08:28:03 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4911w26btSz4GWR; Mon, 13 Apr 2020 08:28:02 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DDAC518527; Mon, 13 Apr 2020 08:28:02 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03D8S2sO077084; Mon, 13 Apr 2020 08:28:02 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03D8S2eO077083; Mon, 13 Apr 2020 08:28:02 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004130828.03D8S2eO077083@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 08:28:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359846 - stable/11/sys/dev/mlx5/mlx5_en X-SVN-Group: stable-11 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/11/sys/dev/mlx5/mlx5_en X-SVN-Commit-Revision: 359846 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 08:28:03 -0000 Author: hselasky Date: Mon Apr 13 08:28:02 2020 New Revision: 359846 URL: https://svnweb.freebsd.org/changeset/base/359846 Log: MFC r359654: Ensure a minimum inline size of 16 bytes in mlx5en(4). This includes 14 bytes of ethernet header and 2 bytes of VLAN header. This allows for making assumptions about the inline size limit in the fast transmit path later on. Use a signed integer variable to catch underflow. Sponsored by: Mellanox Technologies Modified: stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c ============================================================================== --- stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Mon Apr 13 08:27:19 2020 (r359845) +++ stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Mon Apr 13 08:28:02 2020 (r359846) @@ -3351,15 +3351,19 @@ mlx5e_check_required_hca_cap(struct mlx5_core_dev *mde static u16 mlx5e_get_max_inline_cap(struct mlx5_core_dev *mdev) { - uint32_t bf_buf_size = (1U << MLX5_CAP_GEN(mdev, log_bf_reg_size)) / 2U; + const int min_size = ETHER_VLAN_ENCAP_LEN + ETHER_HDR_LEN; + const int max_size = MLX5E_MAX_TX_INLINE; + const int bf_buf_size = + ((1U << MLX5_CAP_GEN(mdev, log_bf_reg_size)) / 2U) - + (sizeof(struct mlx5e_tx_wqe) - 2); - bf_buf_size -= sizeof(struct mlx5e_tx_wqe) - 2; - - /* verify against driver hardware limit */ - if (bf_buf_size > MLX5E_MAX_TX_INLINE) - bf_buf_size = MLX5E_MAX_TX_INLINE; - - return (bf_buf_size); + /* verify against driver limits */ + if (bf_buf_size > max_size) + return (max_size); + else if (bf_buf_size < min_size) + return (min_size); + else + return (bf_buf_size); } static int From owner-svn-src-stable@freebsd.org Mon Apr 13 08:33:50 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 27D0A2B7006; Mon, 13 Apr 2020 08:33:50 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 49122k02r0z4GyN; Mon, 13 Apr 2020 08:33:50 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id F0CF1186FB; Mon, 13 Apr 2020 08:33:49 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03D8XntG083376; Mon, 13 Apr 2020 08:33:49 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03D8XnLU083375; Mon, 13 Apr 2020 08:33:49 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004130833.03D8XnLU083375@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 08:33:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r359847 - stable/10/sys/dev/mlx5/mlx5_en X-SVN-Group: stable-10 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/10/sys/dev/mlx5/mlx5_en X-SVN-Commit-Revision: 359847 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 08:33:50 -0000 Author: hselasky Date: Mon Apr 13 08:33:49 2020 New Revision: 359847 URL: https://svnweb.freebsd.org/changeset/base/359847 Log: MFC r359654: Ensure a minimum inline size of 16 bytes in mlx5en(4). This includes 14 bytes of ethernet header and 2 bytes of VLAN header. This allows for making assumptions about the inline size limit in the fast transmit path later on. Use a signed integer variable to catch underflow. Sponsored by: Mellanox Technologies Modified: stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Directory Properties: stable/10/ (props changed) Modified: stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_main.c ============================================================================== --- stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Mon Apr 13 08:28:02 2020 (r359846) +++ stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Mon Apr 13 08:33:49 2020 (r359847) @@ -2880,11 +2880,19 @@ mlx5e_check_required_hca_cap(struct mlx5_core_dev *mde static u16 mlx5e_get_max_inline_cap(struct mlx5_core_dev *mdev) { - int bf_buf_size = (1 << MLX5_CAP_GEN(mdev, log_bf_reg_size)) / 2; + const int min_size = ETHER_VLAN_ENCAP_LEN + ETHER_HDR_LEN; + const int max_size = MLX5E_MAX_TX_INLINE; + const int bf_buf_size = + ((1U << MLX5_CAP_GEN(mdev, log_bf_reg_size)) / 2U) - + (sizeof(struct mlx5e_tx_wqe) - 2); - return bf_buf_size - - sizeof(struct mlx5e_tx_wqe) + - 2 /*sizeof(mlx5e_tx_wqe.inline_hdr_start)*/; + /* verify against driver limits */ + if (bf_buf_size > max_size) + return (max_size); + else if (bf_buf_size < min_size) + return (min_size); + else + return (bf_buf_size); } static void From owner-svn-src-stable@freebsd.org Mon Apr 13 08:41:25 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 026E12B71D1; Mon, 13 Apr 2020 08:41:25 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4912CS6Czqz4HNc; Mon, 13 Apr 2020 08:41:24 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D089118762; Mon, 13 Apr 2020 08:41:24 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03D8fOu9085543; Mon, 13 Apr 2020 08:41:24 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03D8fOPp085542; Mon, 13 Apr 2020 08:41:24 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004130841.03D8fOPp085542@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 08:41:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359848 - stable/12/sys/dev/mlx5/mlx5_en X-SVN-Group: stable-12 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/12/sys/dev/mlx5/mlx5_en X-SVN-Commit-Revision: 359848 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 08:41:25 -0000 Author: hselasky Date: Mon Apr 13 08:41:24 2020 New Revision: 359848 URL: https://svnweb.freebsd.org/changeset/base/359848 Log: MFC r359655: Don't drop packets having too many TCP option headers in mlx5en(4). When using SACK it can happen there are multiple option headers. Don't drop these packets, but instead limit the amount of inlining to the maximum supported. Sponsored by: Mellanox Technologies Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c ============================================================================== --- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c Mon Apr 13 08:33:49 2020 (r359847) +++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c Mon Apr 13 08:41:24 2020 (r359848) @@ -398,18 +398,18 @@ mlx5e_sq_xmit(struct mlx5e_sq *sq, struct mbuf **mbp) if (likely(ihs == 0)) { /* nothing to inline */ - } else if (unlikely(ihs > sq->max_inline)) { - /* inline header size is too big */ - err = EINVAL; - goto tx_drop; } else if ((mb->m_flags & M_VLANTAG) != 0) { struct ether_vlan_header *eh = (struct ether_vlan_header *) wqe->eth.inline_hdr_start; /* Range checks */ - if (unlikely(ihs > (MLX5E_MAX_TX_INLINE - ETHER_VLAN_ENCAP_LEN))) - ihs = (MLX5E_MAX_TX_INLINE - ETHER_VLAN_ENCAP_LEN); - else if (unlikely(ihs < ETHER_HDR_LEN)) { + if (unlikely(ihs > (sq->max_inline - ETHER_VLAN_ENCAP_LEN))) { + if (mb->m_pkthdr.csum_flags & CSUM_TSO) { + err = EINVAL; + goto tx_drop; + } + ihs = (sq->max_inline - ETHER_VLAN_ENCAP_LEN); + } else if (unlikely(ihs < ETHER_HDR_LEN)) { err = EINVAL; goto tx_drop; } @@ -426,6 +426,14 @@ mlx5e_sq_xmit(struct mlx5e_sq *sq, struct mbuf **mbp) ihs += ETHER_VLAN_ENCAP_LEN; wqe->eth.inline_hdr_sz = cpu_to_be16(ihs); } else { + /* check if inline header size is too big */ + if (unlikely(ihs > sq->max_inline)) { + if (unlikely(mb->m_pkthdr.csum_flags & CSUM_TSO)) { + err = EINVAL; + goto tx_drop; + } + ihs = sq->max_inline; + } m_copydata(mb, 0, ihs, wqe->eth.inline_hdr_start); m_adj(mb, ihs); wqe->eth.inline_hdr_sz = cpu_to_be16(ihs); From owner-svn-src-stable@freebsd.org Mon Apr 13 08:45:05 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id CF4D62B746C; Mon, 13 Apr 2020 08:45:05 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4912Hj59X9z4HyP; Mon, 13 Apr 2020 08:45:05 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 945E9188F1; Mon, 13 Apr 2020 08:45:05 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03D8j52D089869; Mon, 13 Apr 2020 08:45:05 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03D8j5dU089868; Mon, 13 Apr 2020 08:45:05 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004130845.03D8j5dU089868@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 08:45:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359850 - stable/11/sys/dev/mlx5/mlx5_en X-SVN-Group: stable-11 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/11/sys/dev/mlx5/mlx5_en X-SVN-Commit-Revision: 359850 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 08:45:05 -0000 Author: hselasky Date: Mon Apr 13 08:45:05 2020 New Revision: 359850 URL: https://svnweb.freebsd.org/changeset/base/359850 Log: MFC r359655: Don't drop packets having too many TCP option headers in mlx5en(4). When using SACK it can happen there are multiple option headers. Don't drop these packets, but instead limit the amount of inlining to the maximum supported. Sponsored by: Mellanox Technologies Modified: stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c ============================================================================== --- stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c Mon Apr 13 08:42:13 2020 (r359849) +++ stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c Mon Apr 13 08:45:05 2020 (r359850) @@ -357,18 +357,18 @@ mlx5e_sq_xmit(struct mlx5e_sq *sq, struct mbuf **mbp) if (likely(ihs == 0)) { /* nothing to inline */ - } else if (unlikely(ihs > sq->max_inline)) { - /* inline header size is too big */ - err = EINVAL; - goto tx_drop; } else if ((mb->m_flags & M_VLANTAG) != 0) { struct ether_vlan_header *eh = (struct ether_vlan_header *) wqe->eth.inline_hdr_start; /* Range checks */ - if (unlikely(ihs > (MLX5E_MAX_TX_INLINE - ETHER_VLAN_ENCAP_LEN))) - ihs = (MLX5E_MAX_TX_INLINE - ETHER_VLAN_ENCAP_LEN); - else if (unlikely(ihs < ETHER_HDR_LEN)) { + if (unlikely(ihs > (sq->max_inline - ETHER_VLAN_ENCAP_LEN))) { + if (mb->m_pkthdr.csum_flags & CSUM_TSO) { + err = EINVAL; + goto tx_drop; + } + ihs = (sq->max_inline - ETHER_VLAN_ENCAP_LEN); + } else if (unlikely(ihs < ETHER_HDR_LEN)) { err = EINVAL; goto tx_drop; } @@ -385,6 +385,14 @@ mlx5e_sq_xmit(struct mlx5e_sq *sq, struct mbuf **mbp) ihs += ETHER_VLAN_ENCAP_LEN; wqe->eth.inline_hdr_sz = cpu_to_be16(ihs); } else { + /* check if inline header size is too big */ + if (unlikely(ihs > sq->max_inline)) { + if (unlikely(mb->m_pkthdr.csum_flags & CSUM_TSO)) { + err = EINVAL; + goto tx_drop; + } + ihs = sq->max_inline; + } m_copydata(mb, 0, ihs, wqe->eth.inline_hdr_start); m_adj(mb, ihs); wqe->eth.inline_hdr_sz = cpu_to_be16(ihs); From owner-svn-src-stable@freebsd.org Mon Apr 13 08:56:20 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id BD5802B76BF; Mon, 13 Apr 2020 08:56:20 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4912Xh3fCQz4Jhh; Mon, 13 Apr 2020 08:56:20 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 77E9318AE1; Mon, 13 Apr 2020 08:56:20 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03D8uKM8095858; Mon, 13 Apr 2020 08:56:20 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03D8uKKP095856; Mon, 13 Apr 2020 08:56:20 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004130856.03D8uKKP095856@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 08:56:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359851 - stable/12/sys/dev/mlx5/mlx5_en X-SVN-Group: stable-12 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/12/sys/dev/mlx5/mlx5_en X-SVN-Commit-Revision: 359851 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 08:56:20 -0000 Author: hselasky Date: Mon Apr 13 08:56:19 2020 New Revision: 359851 URL: https://svnweb.freebsd.org/changeset/base/359851 Log: MFC r359653: Count number of times transmit ring is out of buffers in mlx5en(4). Differential Revision: https://reviews.freebsd.org/D24273 Sponsored by: Mellanox Technologies Modified: stable/12/sys/dev/mlx5/mlx5_en/en.h stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/mlx5/mlx5_en/en.h ============================================================================== --- stable/12/sys/dev/mlx5/mlx5_en/en.h Mon Apr 13 08:45:05 2020 (r359850) +++ stable/12/sys/dev/mlx5/mlx5_en/en.h Mon Apr 13 08:56:19 2020 (r359851) @@ -624,6 +624,7 @@ struct mlx5e_rq_stats { m(+1, u64, csum_offload_none, "csum_offload_none", "Transmitted packets") \ m(+1, u64, defragged, "defragged", "Transmitted packets") \ m(+1, u64, dropped, "dropped", "Transmitted packets") \ + m(+1, u64, enobuf, "enobuf", "Transmitted packets") \ m(+1, u64, nop, "nop", "Transmitted packets") #define MLX5E_SQ_STATS_NUM (0 MLX5E_SQ_STATS(MLX5E_STATS_COUNT)) Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c ============================================================================== --- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c Mon Apr 13 08:45:05 2020 (r359850) +++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c Mon Apr 13 08:56:19 2020 (r359851) @@ -306,8 +306,10 @@ mlx5e_sq_xmit(struct mlx5e_sq *sq, struct mbuf **mbp) u8 opcode; /* Return ENOBUFS if the queue is full */ - if (unlikely(!mlx5e_sq_has_room_for(sq, 2 * MLX5_SEND_WQE_MAX_WQEBBS))) + if (unlikely(!mlx5e_sq_has_room_for(sq, 2 * MLX5_SEND_WQE_MAX_WQEBBS))) { + sq->stats.enobuf++; return (ENOBUFS); + } /* Align SQ edge with NOPs to avoid WQE wrap around */ pi = ((~sq->pc) & sq->wq.sz_m1); @@ -315,8 +317,10 @@ mlx5e_sq_xmit(struct mlx5e_sq *sq, struct mbuf **mbp) /* Send one multi NOP message instead of many */ mlx5e_send_nop(sq, (pi + 1) * MLX5_SEND_WQEBB_NUM_DS); pi = ((~sq->pc) & sq->wq.sz_m1); - if (pi < (MLX5_SEND_WQE_MAX_WQEBBS - 1)) + if (pi < (MLX5_SEND_WQE_MAX_WQEBBS - 1)) { + sq->stats.enobuf++; return (ENOMEM); + } } /* Setup local variables */ From owner-svn-src-stable@freebsd.org Mon Apr 13 08:58:36 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 24F322B782D; Mon, 13 Apr 2020 08:58:36 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4912bJ094yz4JyY; Mon, 13 Apr 2020 08:58:36 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id F02B818B06; Mon, 13 Apr 2020 08:58:35 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03D8wZnJ096055; Mon, 13 Apr 2020 08:58:35 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03D8wZc8096052; Mon, 13 Apr 2020 08:58:35 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004130858.03D8wZc8096052@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 08:58:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359853 - stable/11/sys/dev/mlx5/mlx5_en X-SVN-Group: stable-11 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/11/sys/dev/mlx5/mlx5_en X-SVN-Commit-Revision: 359853 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 08:58:36 -0000 Author: hselasky Date: Mon Apr 13 08:58:35 2020 New Revision: 359853 URL: https://svnweb.freebsd.org/changeset/base/359853 Log: MFC r359653: Count number of times transmit ring is out of buffers in mlx5en(4). Differential Revision: https://reviews.freebsd.org/D24273 Sponsored by: Mellanox Technologies Modified: stable/11/sys/dev/mlx5/mlx5_en/en.h stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/dev/mlx5/mlx5_en/en.h ============================================================================== --- stable/11/sys/dev/mlx5/mlx5_en/en.h Mon Apr 13 08:56:48 2020 (r359852) +++ stable/11/sys/dev/mlx5/mlx5_en/en.h Mon Apr 13 08:58:35 2020 (r359853) @@ -623,6 +623,7 @@ struct mlx5e_rq_stats { m(+1, u64, csum_offload_none, "csum_offload_none", "Transmitted packets") \ m(+1, u64, defragged, "defragged", "Transmitted packets") \ m(+1, u64, dropped, "dropped", "Transmitted packets") \ + m(+1, u64, enobuf, "enobuf", "Transmitted packets") \ m(+1, u64, nop, "nop", "Transmitted packets") #define MLX5E_SQ_STATS_NUM (0 MLX5E_SQ_STATS(MLX5E_STATS_COUNT)) Modified: stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c ============================================================================== --- stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c Mon Apr 13 08:56:48 2020 (r359852) +++ stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c Mon Apr 13 08:58:35 2020 (r359853) @@ -265,8 +265,10 @@ mlx5e_sq_xmit(struct mlx5e_sq *sq, struct mbuf **mbp) u8 opcode; /* Return ENOBUFS if the queue is full */ - if (unlikely(!mlx5e_sq_has_room_for(sq, 2 * MLX5_SEND_WQE_MAX_WQEBBS))) + if (unlikely(!mlx5e_sq_has_room_for(sq, 2 * MLX5_SEND_WQE_MAX_WQEBBS))) { + sq->stats.enobuf++; return (ENOBUFS); + } /* Align SQ edge with NOPs to avoid WQE wrap around */ pi = ((~sq->pc) & sq->wq.sz_m1); @@ -274,8 +276,10 @@ mlx5e_sq_xmit(struct mlx5e_sq *sq, struct mbuf **mbp) /* Send one multi NOP message instead of many */ mlx5e_send_nop(sq, (pi + 1) * MLX5_SEND_WQEBB_NUM_DS); pi = ((~sq->pc) & sq->wq.sz_m1); - if (pi < (MLX5_SEND_WQE_MAX_WQEBBS - 1)) + if (pi < (MLX5_SEND_WQE_MAX_WQEBBS - 1)) { + sq->stats.enobuf++; return (ENOMEM); + } } /* Setup local variables */ From owner-svn-src-stable@freebsd.org Mon Apr 13 09:02:18 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 079EC2B7C90; Mon, 13 Apr 2020 09:02:18 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4912gY6WHDz4KVF; Mon, 13 Apr 2020 09:02:17 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DAB8A18D08; Mon, 13 Apr 2020 09:02:17 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03D92HCn001980; Mon, 13 Apr 2020 09:02:17 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03D92H7h001978; Mon, 13 Apr 2020 09:02:17 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004130902.03D92H7h001978@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 09:02:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r359855 - stable/10/sys/dev/mlx5/mlx5_en X-SVN-Group: stable-10 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/10/sys/dev/mlx5/mlx5_en X-SVN-Commit-Revision: 359855 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 09:02:18 -0000 Author: hselasky Date: Mon Apr 13 09:02:17 2020 New Revision: 359855 URL: https://svnweb.freebsd.org/changeset/base/359855 Log: MFC r359653: Count number of times transmit ring is out of buffers in mlx5en(4). Differential Revision: https://reviews.freebsd.org/D24273 Sponsored by: Mellanox Technologies Modified: stable/10/sys/dev/mlx5/mlx5_en/en.h stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c Directory Properties: stable/10/ (props changed) Modified: stable/10/sys/dev/mlx5/mlx5_en/en.h ============================================================================== --- stable/10/sys/dev/mlx5/mlx5_en/en.h Mon Apr 13 09:01:46 2020 (r359854) +++ stable/10/sys/dev/mlx5/mlx5_en/en.h Mon Apr 13 09:02:17 2020 (r359855) @@ -355,6 +355,7 @@ struct mlx5e_rq_stats { m(+1, u64 csum_offload_none, "csum_offload_none", "Transmitted packets") \ m(+1, u64 defragged, "defragged", "Transmitted packets") \ m(+1, u64 dropped, "dropped", "Transmitted packets") \ + m(+1, u64 enobuf, "enobuf", "Transmitted packets") \ m(+1, u64 nop, "nop", "Transmitted packets") #define MLX5E_SQ_STATS_NUM (0 MLX5E_SQ_STATS(MLX5E_STATS_COUNT)) Modified: stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c ============================================================================== --- stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c Mon Apr 13 09:01:46 2020 (r359854) +++ stable/10/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c Mon Apr 13 09:02:17 2020 (r359855) @@ -255,6 +255,7 @@ mlx5e_sq_xmit(struct mlx5e_sq *sq, struct mbuf **mbp) * of the mbuf into the drbr (see mlx5e_xmit_locked) */ if (unlikely(!mlx5e_sq_has_room_for(sq, 2 * MLX5_SEND_WQE_MAX_WQEBBS))) { + sq->stats.enobuf++; return (ENOBUFS); } @@ -264,8 +265,10 @@ mlx5e_sq_xmit(struct mlx5e_sq *sq, struct mbuf **mbp) /* Send one multi NOP message instead of many */ mlx5e_send_nop(sq, (pi + 1) * MLX5_SEND_WQEBB_NUM_DS); pi = ((~sq->pc) & sq->wq.sz_m1); - if (pi < (MLX5_SEND_WQE_MAX_WQEBBS - 1)) + if (pi < (MLX5_SEND_WQE_MAX_WQEBBS - 1)) { + sq->stats.enobuf++; return (ENOMEM); + } } /* Setup local variables */ From owner-svn-src-stable@freebsd.org Mon Apr 13 09:04:33 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5106E2B7DB5; Mon, 13 Apr 2020 09:04:33 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4912k91PWjz4KfX; Mon, 13 Apr 2020 09:04:33 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2B46318D25; Mon, 13 Apr 2020 09:04:33 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03D94Xa3002147; Mon, 13 Apr 2020 09:04:33 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03D94WMi002146; Mon, 13 Apr 2020 09:04:32 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004130904.03D94WMi002146@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 09:04:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359856 - stable/12/sys/dev/mlx5/mlx5_en X-SVN-Group: stable-12 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/12/sys/dev/mlx5/mlx5_en X-SVN-Commit-Revision: 359856 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 09:04:33 -0000 Author: hselasky Date: Mon Apr 13 09:04:32 2020 New Revision: 359856 URL: https://svnweb.freebsd.org/changeset/base/359856 Log: MFC r359723: Remove obsolete bufring stats in mlx5en(4). Leftover from when DRBR was removed. Sponsored by: Mellanox Technologies Modified: stable/12/sys/dev/mlx5/mlx5_en/en.h stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/mlx5/mlx5_en/en.h ============================================================================== --- stable/12/sys/dev/mlx5/mlx5_en/en.h Mon Apr 13 09:02:17 2020 (r359855) +++ stable/12/sys/dev/mlx5/mlx5_en/en.h Mon Apr 13 09:04:32 2020 (r359856) @@ -822,7 +822,6 @@ struct mlx5e_sq { /* pointers to per packet info: write@xmit, read@completion */ struct mlx5e_sq_mbuf *mbuf; - struct buf_ring *br; /* read only */ struct mlx5_wq_cyc wq; Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c ============================================================================== --- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Mon Apr 13 09:02:17 2020 (r359855) +++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Mon Apr 13 09:04:32 2020 (r359856) @@ -845,7 +845,6 @@ mlx5e_update_stats_locked(struct mlx5e_priv *priv) struct mlx5_core_dev *mdev = priv->mdev; struct mlx5e_vport_stats *s = &priv->stats.vport; struct mlx5e_sq_stats *sq_stats; - struct buf_ring *sq_br; #if (__FreeBSD_version < 1100000) struct ifnet *ifp = priv->ifp; #endif @@ -895,13 +894,10 @@ mlx5e_update_stats_locked(struct mlx5e_priv *priv) for (j = 0; j < priv->num_tc; j++) { sq_stats = &pch->sq[j].stats; - sq_br = pch->sq[j].br; tso_packets += sq_stats->tso_packets; tso_bytes += sq_stats->tso_bytes; tx_queue_dropped += sq_stats->dropped; - if (sq_br != NULL) - tx_queue_dropped += sq_br->br_drops; tx_defragged += sq_stats->defragged; tx_offload_none += sq_stats->csum_offload_none; } From owner-svn-src-stable@freebsd.org Mon Apr 13 09:05:21 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id CF1472B7E3E; Mon, 13 Apr 2020 09:05:21 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4912l55BPsz4KnR; Mon, 13 Apr 2020 09:05:21 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id AA18518D27; Mon, 13 Apr 2020 09:05:21 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03D95LOn002380; Mon, 13 Apr 2020 09:05:21 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03D95LYS002360; Mon, 13 Apr 2020 09:05:21 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004130905.03D95LYS002360@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 09:05:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359857 - stable/11/sys/dev/mlx5/mlx5_en X-SVN-Group: stable-11 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/11/sys/dev/mlx5/mlx5_en X-SVN-Commit-Revision: 359857 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 09:05:21 -0000 Author: hselasky Date: Mon Apr 13 09:05:21 2020 New Revision: 359857 URL: https://svnweb.freebsd.org/changeset/base/359857 Log: MFC r359723: Remove obsolete bufring stats in mlx5en(4). Leftover from when DRBR was removed. Sponsored by: Mellanox Technologies Modified: stable/11/sys/dev/mlx5/mlx5_en/en.h stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/dev/mlx5/mlx5_en/en.h ============================================================================== --- stable/11/sys/dev/mlx5/mlx5_en/en.h Mon Apr 13 09:04:32 2020 (r359856) +++ stable/11/sys/dev/mlx5/mlx5_en/en.h Mon Apr 13 09:05:21 2020 (r359857) @@ -816,7 +816,6 @@ struct mlx5e_sq { /* pointers to per packet info: write@xmit, read@completion */ struct mlx5e_sq_mbuf *mbuf; - struct buf_ring *br; /* read only */ struct mlx5_wq_cyc wq; Modified: stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c ============================================================================== --- stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Mon Apr 13 09:04:32 2020 (r359856) +++ stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Mon Apr 13 09:05:21 2020 (r359857) @@ -837,7 +837,6 @@ mlx5e_update_stats_locked(struct mlx5e_priv *priv) struct mlx5_core_dev *mdev = priv->mdev; struct mlx5e_vport_stats *s = &priv->stats.vport; struct mlx5e_sq_stats *sq_stats; - struct buf_ring *sq_br; #if (__FreeBSD_version < 1100000) struct ifnet *ifp = priv->ifp; #endif @@ -887,13 +886,10 @@ mlx5e_update_stats_locked(struct mlx5e_priv *priv) for (j = 0; j < priv->num_tc; j++) { sq_stats = &pch->sq[j].stats; - sq_br = pch->sq[j].br; tso_packets += sq_stats->tso_packets; tso_bytes += sq_stats->tso_bytes; tx_queue_dropped += sq_stats->dropped; - if (sq_br != NULL) - tx_queue_dropped += sq_br->br_drops; tx_defragged += sq_stats->defragged; tx_offload_none += sq_stats->csum_offload_none; } From owner-svn-src-stable@freebsd.org Mon Apr 13 09:08:47 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id C6B292B8176; Mon, 13 Apr 2020 09:08:47 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4912q34tvxz4L7k; Mon, 13 Apr 2020 09:08:47 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A30E518D2A; Mon, 13 Apr 2020 09:08:47 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03D98lLx002635; Mon, 13 Apr 2020 09:08:47 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03D98lAI002634; Mon, 13 Apr 2020 09:08:47 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004130908.03D98lAI002634@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 09:08:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359858 - stable/12/sys/dev/mlx5/mlx5_en X-SVN-Group: stable-12 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/12/sys/dev/mlx5/mlx5_en X-SVN-Commit-Revision: 359858 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 09:08:47 -0000 Author: hselasky Date: Mon Apr 13 09:08:47 2020 New Revision: 359858 URL: https://svnweb.freebsd.org/changeset/base/359858 Log: MFC r359724: Account out of buffer as dropped packets in mlx5en(4). Sponsored by: Mellanox Technologies Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c ============================================================================== --- stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Mon Apr 13 09:05:21 2020 (r359857) +++ stable/12/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Mon Apr 13 09:08:47 2020 (r359858) @@ -898,6 +898,7 @@ mlx5e_update_stats_locked(struct mlx5e_priv *priv) tso_packets += sq_stats->tso_packets; tso_bytes += sq_stats->tso_bytes; tx_queue_dropped += sq_stats->dropped; + tx_queue_dropped += sq_stats->enobuf; tx_defragged += sq_stats->defragged; tx_offload_none += sq_stats->csum_offload_none; } From owner-svn-src-stable@freebsd.org Mon Apr 13 09:09:29 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 200912B81E3; Mon, 13 Apr 2020 09:09:29 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4912qr74Pyz4LFf; Mon, 13 Apr 2020 09:09:28 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id EDF8618D2B; Mon, 13 Apr 2020 09:09:28 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03D99Sdq002733; Mon, 13 Apr 2020 09:09:28 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03D99SaP002732; Mon, 13 Apr 2020 09:09:28 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004130909.03D99SaP002732@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 09:09:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359859 - stable/11/sys/dev/mlx5/mlx5_en X-SVN-Group: stable-11 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/11/sys/dev/mlx5/mlx5_en X-SVN-Commit-Revision: 359859 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 09:09:29 -0000 Author: hselasky Date: Mon Apr 13 09:09:28 2020 New Revision: 359859 URL: https://svnweb.freebsd.org/changeset/base/359859 Log: MFC r359724: Account out of buffer as dropped packets in mlx5en(4). Sponsored by: Mellanox Technologies Modified: stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c ============================================================================== --- stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Mon Apr 13 09:08:47 2020 (r359858) +++ stable/11/sys/dev/mlx5/mlx5_en/mlx5_en_main.c Mon Apr 13 09:09:28 2020 (r359859) @@ -890,6 +890,7 @@ mlx5e_update_stats_locked(struct mlx5e_priv *priv) tso_packets += sq_stats->tso_packets; tso_bytes += sq_stats->tso_bytes; tx_queue_dropped += sq_stats->dropped; + tx_queue_dropped += sq_stats->enobuf; tx_defragged += sq_stats->defragged; tx_offload_none += sq_stats->csum_offload_none; } From owner-svn-src-stable@freebsd.org Mon Apr 13 13:33:01 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id C7C492BE858; Mon, 13 Apr 2020 13:33:01 +0000 (UTC) (envelope-from mav@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4918gx4y3bz4byc; Mon, 13 Apr 2020 13:33:01 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A52721C158; Mon, 13 Apr 2020 13:33:01 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DDX19D080770; Mon, 13 Apr 2020 13:33:01 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DDX16M080769; Mon, 13 Apr 2020 13:33:01 GMT (envelope-from mav@FreeBSD.org) Message-Id: <202004131333.03DDX16M080769@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 13 Apr 2020 13:33:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359860 - stable/12/sys/cam/scsi X-SVN-Group: stable-12 X-SVN-Commit-Author: mav X-SVN-Commit-Paths: stable/12/sys/cam/scsi X-SVN-Commit-Revision: 359860 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 13:33:01 -0000 Author: mav Date: Mon Apr 13 13:33:01 2020 New Revision: 359860 URL: https://svnweb.freebsd.org/changeset/base/359860 Log: MFC r359662: Relax too strict SES element descriptors check in r355430. SES specifications allows the string to be NULL-terminated, while previous code was considering it as invalid due to incorrectly ordered conditions. Modified: stable/12/sys/cam/scsi/scsi_enc_ses.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/cam/scsi/scsi_enc_ses.c ============================================================================== --- stable/12/sys/cam/scsi/scsi_enc_ses.c Mon Apr 13 09:09:28 2020 (r359859) +++ stable/12/sys/cam/scsi/scsi_enc_ses.c Mon Apr 13 13:33:01 2020 (r359860) @@ -2004,11 +2004,11 @@ ses_sanitize_elm_desc(const char *desc, uint16_t *len) int i; for (i = 0; i < *len; i++) { - if (desc[i] < 0x20 || desc[i] > 0x7e) { + if (desc[i] == 0) { + break; + } else if (desc[i] < 0x20 || desc[i] > 0x7e) { *len = strlen(invalid); return (invalid); - } else if (desc[i] == 0) { - break; } } return (desc); From owner-svn-src-stable@freebsd.org Mon Apr 13 13:33:24 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id E60022BE8BC; Mon, 13 Apr 2020 13:33:24 +0000 (UTC) (envelope-from mav@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4918hN5kQ8z4c5Y; Mon, 13 Apr 2020 13:33:24 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id BF7B31C159; Mon, 13 Apr 2020 13:33:24 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DDXO9k080841; Mon, 13 Apr 2020 13:33:24 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DDXONb080840; Mon, 13 Apr 2020 13:33:24 GMT (envelope-from mav@FreeBSD.org) Message-Id: <202004131333.03DDXONb080840@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 13 Apr 2020 13:33:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359861 - stable/11/sys/cam/scsi X-SVN-Group: stable-11 X-SVN-Commit-Author: mav X-SVN-Commit-Paths: stable/11/sys/cam/scsi X-SVN-Commit-Revision: 359861 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 13:33:25 -0000 Author: mav Date: Mon Apr 13 13:33:24 2020 New Revision: 359861 URL: https://svnweb.freebsd.org/changeset/base/359861 Log: MFC r359662: Relax too strict SES element descriptors check in r355430. SES specifications allows the string to be NULL-terminated, while previous code was considering it as invalid due to incorrectly ordered conditions. Modified: stable/11/sys/cam/scsi/scsi_enc_ses.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/cam/scsi/scsi_enc_ses.c ============================================================================== --- stable/11/sys/cam/scsi/scsi_enc_ses.c Mon Apr 13 13:33:01 2020 (r359860) +++ stable/11/sys/cam/scsi/scsi_enc_ses.c Mon Apr 13 13:33:24 2020 (r359861) @@ -2002,11 +2002,11 @@ ses_sanitize_elm_desc(const char *desc, uint16_t *len) int i; for (i = 0; i < *len; i++) { - if (desc[i] < 0x20 || desc[i] > 0x7e) { + if (desc[i] == 0) { + break; + } else if (desc[i] < 0x20 || desc[i] > 0x7e) { *len = strlen(invalid); return (invalid); - } else if (desc[i] == 0) { - break; } } return (desc); From owner-svn-src-stable@freebsd.org Mon Apr 13 14:43:35 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id A155F2C019D; Mon, 13 Apr 2020 14:43:35 +0000 (UTC) (envelope-from lwhsu@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491BFM3p6mz3CCp; Mon, 13 Apr 2020 14:43:35 +0000 (UTC) (envelope-from lwhsu@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7DA1D1CF0C; Mon, 13 Apr 2020 14:43:35 +0000 (UTC) (envelope-from lwhsu@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DEhZJK023817; Mon, 13 Apr 2020 14:43:35 GMT (envelope-from lwhsu@FreeBSD.org) Received: (from lwhsu@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DEhZ7X023816; Mon, 13 Apr 2020 14:43:35 GMT (envelope-from lwhsu@FreeBSD.org) Message-Id: <202004131443.03DEhZ7X023816@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: lwhsu set sender to lwhsu@FreeBSD.org using -f From: Li-Wen Hsu Date: Mon, 13 Apr 2020 14:43:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359863 - stable/12/usr.bin/calendar/tests X-SVN-Group: stable-12 X-SVN-Commit-Author: lwhsu X-SVN-Commit-Paths: stable/12/usr.bin/calendar/tests X-SVN-Commit-Revision: 359863 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 14:43:35 -0000 Author: lwhsu Date: Mon Apr 13 14:43:35 2020 New Revision: 359863 URL: https://svnweb.freebsd.org/changeset/base/359863 Log: MFC r359862: Install expected output file of test missed in r359585 Sponsored by: The FreeBSD Foundation Modified: stable/12/usr.bin/calendar/tests/Makefile Directory Properties: stable/12/ (props changed) Modified: stable/12/usr.bin/calendar/tests/Makefile ============================================================================== --- stable/12/usr.bin/calendar/tests/Makefile Mon Apr 13 14:35:07 2020 (r359862) +++ stable/12/usr.bin/calendar/tests/Makefile Mon Apr 13 14:43:35 2020 (r359863) @@ -21,6 +21,7 @@ ${PACKAGE}FILES+= regress.s1.out ${PACKAGE}FILES+= regress.s2.out ${PACKAGE}FILES+= regress.s3.out ${PACKAGE}FILES+= regress.s4.out +${PACKAGE}FILES+= regress.s5.out ${PACKAGE}FILES+= regress.sh ${PACKAGE}FILES+= regress.w0-1.out ${PACKAGE}FILES+= regress.w0-2.out From owner-svn-src-stable@freebsd.org Mon Apr 13 14:44:45 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 21ABD2C0216; Mon, 13 Apr 2020 14:44:45 +0000 (UTC) (envelope-from lwhsu@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491BGj05xDz3CKq; Mon, 13 Apr 2020 14:44:45 +0000 (UTC) (envelope-from lwhsu@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id F2A011CF0D; Mon, 13 Apr 2020 14:44:44 +0000 (UTC) (envelope-from lwhsu@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DEiied023951; Mon, 13 Apr 2020 14:44:44 GMT (envelope-from lwhsu@FreeBSD.org) Received: (from lwhsu@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DEiiSo023950; Mon, 13 Apr 2020 14:44:44 GMT (envelope-from lwhsu@FreeBSD.org) Message-Id: <202004131444.03DEiiSo023950@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: lwhsu set sender to lwhsu@FreeBSD.org using -f From: Li-Wen Hsu Date: Mon, 13 Apr 2020 14:44:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359864 - stable/11/usr.bin/calendar/tests X-SVN-Group: stable-11 X-SVN-Commit-Author: lwhsu X-SVN-Commit-Paths: stable/11/usr.bin/calendar/tests X-SVN-Commit-Revision: 359864 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 14:44:45 -0000 Author: lwhsu Date: Mon Apr 13 14:44:44 2020 New Revision: 359864 URL: https://svnweb.freebsd.org/changeset/base/359864 Log: MFC r359862: Install expected output file of test missed in r359585 Sponsored by: The FreeBSD Foundation Modified: stable/11/usr.bin/calendar/tests/Makefile Directory Properties: stable/11/ (props changed) Modified: stable/11/usr.bin/calendar/tests/Makefile ============================================================================== --- stable/11/usr.bin/calendar/tests/Makefile Mon Apr 13 14:43:35 2020 (r359863) +++ stable/11/usr.bin/calendar/tests/Makefile Mon Apr 13 14:44:44 2020 (r359864) @@ -19,6 +19,7 @@ ${PACKAGE}FILES+= regress.s1.out ${PACKAGE}FILES+= regress.s2.out ${PACKAGE}FILES+= regress.s3.out ${PACKAGE}FILES+= regress.s4.out +${PACKAGE}FILES+= regress.s5.out ${PACKAGE}FILES+= regress.sh ${PACKAGE}FILES+= regress.w0-1.out ${PACKAGE}FILES+= regress.w0-2.out From owner-svn-src-stable@freebsd.org Mon Apr 13 16:14:22 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 721882C2319; Mon, 13 Apr 2020 16:14:22 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DG62SGxz3K80; Mon, 13 Apr 2020 16:14:22 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4F0851E1EC; Mon, 13 Apr 2020 16:14:22 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGEM1Z079968; Mon, 13 Apr 2020 16:14:22 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGELui079966; Mon, 13 Apr 2020 16:14:21 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131614.03DGELui079966@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:14:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359866 - in stable/12/sys/dev: rtwn/usb usb X-SVN-Group: stable-12 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: in stable/12/sys/dev: rtwn/usb usb X-SVN-Commit-Revision: 359866 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:14:22 -0000 Author: hselasky Date: Mon Apr 13 16:14:21 2020 New Revision: 359866 URL: https://svnweb.freebsd.org/changeset/base/359866 Log: MFC r359209: Add new USB ID. Submitted by: Konrad Jopek Differential Revision: https://reviews.freebsd.org/D24142 Sponsored by: Mellanox Technologies Modified: stable/12/sys/dev/rtwn/usb/rtwn_usb_attach.h stable/12/sys/dev/usb/usbdevs Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/rtwn/usb/rtwn_usb_attach.h ============================================================================== --- stable/12/sys/dev/rtwn/usb/rtwn_usb_attach.h Mon Apr 13 15:59:15 2020 (r359865) +++ stable/12/sys/dev/rtwn/usb/rtwn_usb_attach.h Mon Apr 13 16:14:21 2020 (r359866) @@ -159,7 +159,8 @@ static const STRUCT_USB_HOST_ID rtwn_devs[] = { RTWN_RTL8821AU_DEV(NETGEAR, A6100), RTWN_RTL8821AU_DEV(REALTEK, RTL8821AU_1), RTWN_RTL8821AU_DEV(REALTEK, RTL8821AU_2), - RTWN_RTL8821AU_DEV(TPLINK, T2UNANO) + RTWN_RTL8821AU_DEV(TPLINK, T2UNANO), + RTWN_RTL8821AU_DEV(TPLINK, T2UPLUS), #undef RTWN_RTL8821AU_DEV }; Modified: stable/12/sys/dev/usb/usbdevs ============================================================================== --- stable/12/sys/dev/usb/usbdevs Mon Apr 13 15:59:15 2020 (r359865) +++ stable/12/sys/dev/usb/usbdevs Mon Apr 13 16:14:21 2020 (r359866) @@ -4666,6 +4666,7 @@ product TPLINK T4UV2 0x010d Archer T4U ver 2 product TPLINK T4UHV1 0x0103 Archer T4UH ver 1 product TPLINK T4UHV2 0x010e Archer T4UH ver 2 product TPLINK T2UNANO 0x011e Archer T2U Nano +product TPLINK T2UPLUS 0x0120 Archer T2U Plus product TPLINK RTL8153 0x0601 RTL8153 USB 10/100/1000 LAN /* Trek Technology products */ From owner-svn-src-stable@freebsd.org Mon Apr 13 16:18:39 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 64D1E2C24E4; Mon, 13 Apr 2020 16:18:39 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DM320Xjz3KNs; Mon, 13 Apr 2020 16:18:39 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3B6891E1F1; Mon, 13 Apr 2020 16:18:39 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGIcem080308; Mon, 13 Apr 2020 16:18:38 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGIccC080307; Mon, 13 Apr 2020 16:18:38 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131618.03DGIccC080307@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:18:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359867 - stable/12/sys/dev/sound/usb X-SVN-Group: stable-12 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/12/sys/dev/sound/usb X-SVN-Commit-Revision: 359867 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:18:39 -0000 Author: hselasky Date: Mon Apr 13 16:18:38 2020 New Revision: 359867 URL: https://svnweb.freebsd.org/changeset/base/359867 Log: MFC r359320: Avoid scaling USB audio mixer values twice. Sponsored by: Mellanox Technologies Modified: stable/12/sys/dev/sound/usb/uaudio.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/12/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:14:21 2020 (r359866) +++ stable/12/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:18:38 2020 (r359867) @@ -554,10 +554,7 @@ static void uaudio_mixer_add_ctl(struct uaudio_softc * struct uaudio_mixer_node *); static void uaudio_mixer_fill_info(struct uaudio_softc *, struct usb_device *, void *); -static void uaudio_mixer_ctl_set(struct uaudio_softc *, - struct uaudio_mixer_node *, uint8_t, int32_t val); static int uaudio_mixer_signext(uint8_t, int); -static int uaudio_mixer_bsd2value(struct uaudio_mixer_node *, int32_t val); static void uaudio_mixer_init(struct uaudio_softc *); static const struct uaudio_terminal_node *uaudio_mixer_get_input( const struct uaudio_terminal_node *, uint8_t); @@ -5375,7 +5372,7 @@ uaudio_mixer_signext(uint8_t type, int val) } static int -uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, int32_t val) +uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, int val) { if (mc->type == MIX_ON_OFF) { val = (val != 0); @@ -5387,7 +5384,7 @@ uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, i } else { /* compute actual volume */ - val = (val * mc->mul) / 255; + val = (val * mc->mul) / 100; /* add lower offset */ val = val + mc->minval; @@ -5406,7 +5403,7 @@ uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, i static void uaudio_mixer_ctl_set(struct uaudio_softc *sc, struct uaudio_mixer_node *mc, - uint8_t chan, int32_t val) + uint8_t chan, int val) { val = uaudio_mixer_bsd2value(mc, val); @@ -5495,8 +5492,7 @@ uaudio_mixer_set(struct uaudio_softc *sc, unsigned typ if (mc->ctl == type) { for (chan = 0; chan < mc->nchan; chan++) { uaudio_mixer_ctl_set(sc, mc, chan, - (int)((chan == 0 ? left : right) * - 255) / 100); + chan == 0 ? left : right); } } } From owner-svn-src-stable@freebsd.org Mon Apr 13 16:19:12 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 9AA7B2C256E; Mon, 13 Apr 2020 16:19:12 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DMh3fV7z3KW3; Mon, 13 Apr 2020 16:19:12 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 78AA11E1F2; Mon, 13 Apr 2020 16:19:12 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGJCTN080407; Mon, 13 Apr 2020 16:19:12 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGJC4X080406; Mon, 13 Apr 2020 16:19:12 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131619.03DGJC4X080406@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:19:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359868 - stable/11/sys/dev/sound/usb X-SVN-Group: stable-11 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/11/sys/dev/sound/usb X-SVN-Commit-Revision: 359868 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:19:12 -0000 Author: hselasky Date: Mon Apr 13 16:19:12 2020 New Revision: 359868 URL: https://svnweb.freebsd.org/changeset/base/359868 Log: MFC r359320: Avoid scaling USB audio mixer values twice. Sponsored by: Mellanox Technologies Modified: stable/11/sys/dev/sound/usb/uaudio.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/11/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:18:38 2020 (r359867) +++ stable/11/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:19:12 2020 (r359868) @@ -552,10 +552,7 @@ static void uaudio_mixer_add_ctl(struct uaudio_softc * struct uaudio_mixer_node *); static void uaudio_mixer_fill_info(struct uaudio_softc *, struct usb_device *, void *); -static void uaudio_mixer_ctl_set(struct uaudio_softc *, - struct uaudio_mixer_node *, uint8_t, int32_t val); static int uaudio_mixer_signext(uint8_t, int); -static int uaudio_mixer_bsd2value(struct uaudio_mixer_node *, int32_t val); static void uaudio_mixer_init(struct uaudio_softc *); static const struct uaudio_terminal_node *uaudio_mixer_get_input( const struct uaudio_terminal_node *, uint8_t); @@ -5373,7 +5370,7 @@ uaudio_mixer_signext(uint8_t type, int val) } static int -uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, int32_t val) +uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, int val) { if (mc->type == MIX_ON_OFF) { val = (val != 0); @@ -5385,7 +5382,7 @@ uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, i } else { /* compute actual volume */ - val = (val * mc->mul) / 255; + val = (val * mc->mul) / 100; /* add lower offset */ val = val + mc->minval; @@ -5404,7 +5401,7 @@ uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, i static void uaudio_mixer_ctl_set(struct uaudio_softc *sc, struct uaudio_mixer_node *mc, - uint8_t chan, int32_t val) + uint8_t chan, int val) { val = uaudio_mixer_bsd2value(mc, val); @@ -5493,8 +5490,7 @@ uaudio_mixer_set(struct uaudio_softc *sc, unsigned typ if (mc->ctl == type) { for (chan = 0; chan < mc->nchan; chan++) { uaudio_mixer_ctl_set(sc, mc, chan, - (int)((chan == 0 ? left : right) * - 255) / 100); + chan == 0 ? left : right); } } } From owner-svn-src-stable@freebsd.org Mon Apr 13 16:19:46 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id A0FE92C25E3; Mon, 13 Apr 2020 16:19:46 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DNL1yPHz3KdH; Mon, 13 Apr 2020 16:19:46 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3E69B1E1F7; Mon, 13 Apr 2020 16:19:46 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGJkkO080501; Mon, 13 Apr 2020 16:19:46 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGJkZD080500; Mon, 13 Apr 2020 16:19:46 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131619.03DGJkZD080500@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:19:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r359869 - stable/10/sys/dev/sound/usb X-SVN-Group: stable-10 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/10/sys/dev/sound/usb X-SVN-Commit-Revision: 359869 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:19:46 -0000 Author: hselasky Date: Mon Apr 13 16:19:45 2020 New Revision: 359869 URL: https://svnweb.freebsd.org/changeset/base/359869 Log: MFC r359320: Avoid scaling USB audio mixer values twice. Sponsored by: Mellanox Technologies Modified: stable/10/sys/dev/sound/usb/uaudio.c Directory Properties: stable/10/ (props changed) Modified: stable/10/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/10/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:19:12 2020 (r359868) +++ stable/10/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:19:45 2020 (r359869) @@ -558,10 +558,7 @@ static void uaudio_mixer_add_ctl(struct uaudio_softc * struct uaudio_mixer_node *); static void uaudio_mixer_fill_info(struct uaudio_softc *, struct usb_device *, void *); -static void uaudio_mixer_ctl_set(struct uaudio_softc *, - struct uaudio_mixer_node *, uint8_t, int32_t val); static int uaudio_mixer_signext(uint8_t, int); -static int uaudio_mixer_bsd2value(struct uaudio_mixer_node *, int32_t val); static void uaudio_mixer_init(struct uaudio_softc *); static const struct uaudio_terminal_node *uaudio_mixer_get_input( const struct uaudio_terminal_node *, uint8_t); @@ -5379,7 +5376,7 @@ uaudio_mixer_signext(uint8_t type, int val) } static int -uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, int32_t val) +uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, int val) { if (mc->type == MIX_ON_OFF) { val = (val != 0); @@ -5391,7 +5388,7 @@ uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, i } else { /* compute actual volume */ - val = (val * mc->mul) / 255; + val = (val * mc->mul) / 100; /* add lower offset */ val = val + mc->minval; @@ -5410,7 +5407,7 @@ uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, i static void uaudio_mixer_ctl_set(struct uaudio_softc *sc, struct uaudio_mixer_node *mc, - uint8_t chan, int32_t val) + uint8_t chan, int val) { val = uaudio_mixer_bsd2value(mc, val); @@ -5499,8 +5496,7 @@ uaudio_mixer_set(struct uaudio_softc *sc, unsigned typ if (mc->ctl == type) { for (chan = 0; chan < mc->nchan; chan++) { uaudio_mixer_ctl_set(sc, mc, chan, - (int)((chan == 0 ? left : right) * - 255) / 100); + chan == 0 ? left : right); } } } From owner-svn-src-stable@freebsd.org Mon Apr 13 16:21:03 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id DFDA12C26CA; Mon, 13 Apr 2020 16:21:03 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DPq5fjpz3KpM; Mon, 13 Apr 2020 16:21:03 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id BD7D51E229; Mon, 13 Apr 2020 16:21:03 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGL3LX080675; Mon, 13 Apr 2020 16:21:03 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGL3d8080674; Mon, 13 Apr 2020 16:21:03 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131621.03DGL3d8080674@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:21:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359870 - stable/12/sys/dev/sound/usb X-SVN-Group: stable-12 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/12/sys/dev/sound/usb X-SVN-Commit-Revision: 359870 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:21:03 -0000 Author: hselasky Date: Mon Apr 13 16:21:03 2020 New Revision: 359870 URL: https://svnweb.freebsd.org/changeset/base/359870 Log: MFC r359321: Factor out USB audio mixer value range check. Sponsored by: Mellanox Technologies Modified: stable/12/sys/dev/sound/usb/uaudio.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/12/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:19:45 2020 (r359869) +++ stable/12/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:21:03 2020 (r359870) @@ -5376,25 +5376,19 @@ uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, i { if (mc->type == MIX_ON_OFF) { val = (val != 0); - } else if (mc->type == MIX_SELECTOR) { - if ((val < mc->minval) || - (val > mc->maxval)) { - val = mc->minval; - } - } else { + } else if (mc->type != MIX_SELECTOR) { /* compute actual volume */ val = (val * mc->mul) / 100; /* add lower offset */ val = val + mc->minval; - - /* make sure we don't write a value out of range */ - if (val > mc->maxval) - val = mc->maxval; - else if (val < mc->minval) - val = mc->minval; } + /* make sure we don't write a value out of range */ + if (val > mc->maxval) + val = mc->maxval; + else if (val < mc->minval) + val = mc->minval; DPRINTFN(6, "type=0x%03x val=%d min=%d max=%d val=%d\n", mc->type, val, mc->minval, mc->maxval, val); From owner-svn-src-stable@freebsd.org Mon Apr 13 16:21:39 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 6B3F52C285E; Mon, 13 Apr 2020 16:21:39 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DQW2HwWz3L57; Mon, 13 Apr 2020 16:21:39 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4A1311E261; Mon, 13 Apr 2020 16:21:39 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGLdKO080766; Mon, 13 Apr 2020 16:21:39 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGLdZf080765; Mon, 13 Apr 2020 16:21:39 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131621.03DGLdZf080765@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:21:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359871 - stable/11/sys/dev/sound/usb X-SVN-Group: stable-11 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/11/sys/dev/sound/usb X-SVN-Commit-Revision: 359871 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:21:39 -0000 Author: hselasky Date: Mon Apr 13 16:21:38 2020 New Revision: 359871 URL: https://svnweb.freebsd.org/changeset/base/359871 Log: MFC r359321: Factor out USB audio mixer value range check. Sponsored by: Mellanox Technologies Modified: stable/11/sys/dev/sound/usb/uaudio.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/11/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:21:03 2020 (r359870) +++ stable/11/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:21:38 2020 (r359871) @@ -5374,25 +5374,19 @@ uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, i { if (mc->type == MIX_ON_OFF) { val = (val != 0); - } else if (mc->type == MIX_SELECTOR) { - if ((val < mc->minval) || - (val > mc->maxval)) { - val = mc->minval; - } - } else { + } else if (mc->type != MIX_SELECTOR) { /* compute actual volume */ val = (val * mc->mul) / 100; /* add lower offset */ val = val + mc->minval; - - /* make sure we don't write a value out of range */ - if (val > mc->maxval) - val = mc->maxval; - else if (val < mc->minval) - val = mc->minval; } + /* make sure we don't write a value out of range */ + if (val > mc->maxval) + val = mc->maxval; + else if (val < mc->minval) + val = mc->minval; DPRINTFN(6, "type=0x%03x val=%d min=%d max=%d val=%d\n", mc->type, val, mc->minval, mc->maxval, val); From owner-svn-src-stable@freebsd.org Mon Apr 13 16:22:15 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id C039B2C28D1; Mon, 13 Apr 2020 16:22:15 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DRC4nllz3LFJ; Mon, 13 Apr 2020 16:22:15 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9DCE91E29D; Mon, 13 Apr 2020 16:22:15 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGMFxL083838; Mon, 13 Apr 2020 16:22:15 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGMFmw083837; Mon, 13 Apr 2020 16:22:15 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131622.03DGMFmw083837@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:22:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r359872 - stable/10/sys/dev/sound/usb X-SVN-Group: stable-10 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/10/sys/dev/sound/usb X-SVN-Commit-Revision: 359872 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:22:15 -0000 Author: hselasky Date: Mon Apr 13 16:22:15 2020 New Revision: 359872 URL: https://svnweb.freebsd.org/changeset/base/359872 Log: MFC r359321: Factor out USB audio mixer value range check. Sponsored by: Mellanox Technologies Modified: stable/10/sys/dev/sound/usb/uaudio.c Directory Properties: stable/10/ (props changed) Modified: stable/10/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/10/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:21:38 2020 (r359871) +++ stable/10/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:22:15 2020 (r359872) @@ -5380,25 +5380,19 @@ uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, i { if (mc->type == MIX_ON_OFF) { val = (val != 0); - } else if (mc->type == MIX_SELECTOR) { - if ((val < mc->minval) || - (val > mc->maxval)) { - val = mc->minval; - } - } else { + } else if (mc->type != MIX_SELECTOR) { /* compute actual volume */ val = (val * mc->mul) / 100; /* add lower offset */ val = val + mc->minval; - - /* make sure we don't write a value out of range */ - if (val > mc->maxval) - val = mc->maxval; - else if (val < mc->minval) - val = mc->minval; } + /* make sure we don't write a value out of range */ + if (val > mc->maxval) + val = mc->maxval; + else if (val < mc->minval) + val = mc->minval; DPRINTFN(6, "type=0x%03x val=%d min=%d max=%d val=%d\n", mc->type, val, mc->minval, mc->maxval, val); From owner-svn-src-stable@freebsd.org Mon Apr 13 16:23:10 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id C49512C295D; Mon, 13 Apr 2020 16:23:10 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DSG4ny2z3LNP; Mon, 13 Apr 2020 16:23:10 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9FD891E3EA; Mon, 13 Apr 2020 16:23:10 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGNAku086462; Mon, 13 Apr 2020 16:23:10 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGNAc2086461; Mon, 13 Apr 2020 16:23:10 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131623.03DGNAc2086461@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:23:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359873 - stable/12/sys/dev/sound/usb X-SVN-Group: stable-12 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/12/sys/dev/sound/usb X-SVN-Commit-Revision: 359873 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:23:10 -0000 Author: hselasky Date: Mon Apr 13 16:23:10 2020 New Revision: 359873 URL: https://svnweb.freebsd.org/changeset/base/359873 Log: MFC r359322: Make mute controls available for USB audio mixers. Submitted by: Horse Ma Sponsored by: Mellanox Technologies Modified: stable/12/sys/dev/sound/usb/uaudio.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/12/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:22:15 2020 (r359872) +++ stable/12/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:23:10 2020 (r359873) @@ -3575,7 +3575,7 @@ uaudio_mixer_add_feature(struct uaudio_softc *sc, switch (ctl) { case MUTE_CONTROL: MIX(sc).type = MIX_ON_OFF; - MIX(sc).ctl = SOUND_MIXER_NRDEVICES; + MIX(sc).ctl = SOUND_MIXER_MUTE; MIX(sc).name = "mute"; break; @@ -3690,7 +3690,7 @@ uaudio20_mixer_add_feature(struct uaudio_softc *sc, switch (ctl) { case (3 << 0): MIX(sc).type = MIX_ON_OFF; - MIX(sc).ctl = SOUND_MIXER_NRDEVICES; + MIX(sc).ctl = SOUND_MIXER_MUTE; MIX(sc).name = "mute"; what = MUTE_CONTROL; break; From owner-svn-src-stable@freebsd.org Mon Apr 13 16:23:46 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id C6EAA2C29E8; Mon, 13 Apr 2020 16:23:46 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DSy4w1kz3LVq; Mon, 13 Apr 2020 16:23:46 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A3C841E3EC; Mon, 13 Apr 2020 16:23:46 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGNkw1086551; Mon, 13 Apr 2020 16:23:46 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGNkD1086550; Mon, 13 Apr 2020 16:23:46 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131623.03DGNkD1086550@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:23:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359874 - stable/11/sys/dev/sound/usb X-SVN-Group: stable-11 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/11/sys/dev/sound/usb X-SVN-Commit-Revision: 359874 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:23:46 -0000 Author: hselasky Date: Mon Apr 13 16:23:46 2020 New Revision: 359874 URL: https://svnweb.freebsd.org/changeset/base/359874 Log: MFC r359322: Make mute controls available for USB audio mixers. Submitted by: Horse Ma Sponsored by: Mellanox Technologies Modified: stable/11/sys/dev/sound/usb/uaudio.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/11/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:23:10 2020 (r359873) +++ stable/11/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:23:46 2020 (r359874) @@ -3573,7 +3573,7 @@ uaudio_mixer_add_feature(struct uaudio_softc *sc, switch (ctl) { case MUTE_CONTROL: MIX(sc).type = MIX_ON_OFF; - MIX(sc).ctl = SOUND_MIXER_NRDEVICES; + MIX(sc).ctl = SOUND_MIXER_MUTE; MIX(sc).name = "mute"; break; @@ -3688,7 +3688,7 @@ uaudio20_mixer_add_feature(struct uaudio_softc *sc, switch (ctl) { case (3 << 0): MIX(sc).type = MIX_ON_OFF; - MIX(sc).ctl = SOUND_MIXER_NRDEVICES; + MIX(sc).ctl = SOUND_MIXER_MUTE; MIX(sc).name = "mute"; what = MUTE_CONTROL; break; From owner-svn-src-stable@freebsd.org Mon Apr 13 16:24:22 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 9DD3A2C2A56; Mon, 13 Apr 2020 16:24:22 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DTf3k9dz3Lcs; Mon, 13 Apr 2020 16:24:22 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7AD091E3ED; Mon, 13 Apr 2020 16:24:22 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGOMr7086640; Mon, 13 Apr 2020 16:24:22 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGOMQw086639; Mon, 13 Apr 2020 16:24:22 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131624.03DGOMQw086639@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:24:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r359875 - stable/10/sys/dev/sound/usb X-SVN-Group: stable-10 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/10/sys/dev/sound/usb X-SVN-Commit-Revision: 359875 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:24:22 -0000 Author: hselasky Date: Mon Apr 13 16:24:21 2020 New Revision: 359875 URL: https://svnweb.freebsd.org/changeset/base/359875 Log: MFC r359322: Make mute controls available for USB audio mixers. Submitted by: Horse Ma Sponsored by: Mellanox Technologies Modified: stable/10/sys/dev/sound/usb/uaudio.c Directory Properties: stable/10/ (props changed) Modified: stable/10/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/10/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:23:46 2020 (r359874) +++ stable/10/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:24:21 2020 (r359875) @@ -3579,7 +3579,7 @@ uaudio_mixer_add_feature(struct uaudio_softc *sc, switch (ctl) { case MUTE_CONTROL: MIX(sc).type = MIX_ON_OFF; - MIX(sc).ctl = SOUND_MIXER_NRDEVICES; + MIX(sc).ctl = SOUND_MIXER_MUTE; MIX(sc).name = "mute"; break; @@ -3694,7 +3694,7 @@ uaudio20_mixer_add_feature(struct uaudio_softc *sc, switch (ctl) { case (3 << 0): MIX(sc).type = MIX_ON_OFF; - MIX(sc).ctl = SOUND_MIXER_NRDEVICES; + MIX(sc).ctl = SOUND_MIXER_MUTE; MIX(sc).name = "mute"; what = MUTE_CONTROL; break; From owner-svn-src-stable@freebsd.org Mon Apr 13 16:25:12 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 840E42C2ADD; Mon, 13 Apr 2020 16:25:12 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DVc2wfGz3Lkw; Mon, 13 Apr 2020 16:25:12 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 454471E3EE; Mon, 13 Apr 2020 16:25:12 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGPCB9086773; Mon, 13 Apr 2020 16:25:12 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGPCxi086772; Mon, 13 Apr 2020 16:25:12 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131625.03DGPCxi086772@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:25:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359876 - stable/12/sys/dev/sound/usb X-SVN-Group: stable-12 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/12/sys/dev/sound/usb X-SVN-Commit-Revision: 359876 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:25:12 -0000 Author: hselasky Date: Mon Apr 13 16:25:11 2020 New Revision: 359876 URL: https://svnweb.freebsd.org/changeset/base/359876 Log: MFC r359323: Be more intelligent when classifying USB audio terminal types, so that we don't end up using SOUND_MIXER_VOLUME for all undefined types. Sponsored by: Mellanox Technologies Modified: stable/12/sys/dev/sound/usb/uaudio.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/12/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:24:21 2020 (r359875) +++ stable/12/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:25:11 2020 (r359876) @@ -4511,52 +4511,61 @@ static const struct uaudio_tt_to_feature uaudio_tt_to_ {UATF_MULTITRACK, SOUND_MIXER_VOLUME}, {0xffff, SOUND_MIXER_VOLUME}, - /* default */ - {0x0000, SOUND_MIXER_VOLUME}, + /* end */ + {} }; static uint16_t -uaudio_mixer_feature_name(const struct uaudio_terminal_node *iot, - struct uaudio_mixer_node *mix) +uaudio_mixer_feature_name_sub(uint16_t terminal_type) { const struct uaudio_tt_to_feature *uat = uaudio_tt_to_feature; - uint16_t terminal_type = uaudio_mixer_determine_class(iot, mix); + uint16_t retval; - if ((mix->class == UAC_RECORD) && (terminal_type == 0)) { - return (SOUND_MIXER_IMIX); - } - while (uat->terminal_type) { - if (uat->terminal_type == terminal_type) { - break; + while (1) { + if (uat->terminal_type == 0) { + switch (terminal_type >> 8) { + case UATI_UNDEFINED >> 8: + retval = SOUND_MIXER_RECLEV; + goto done; + case UATO_UNDEFINED >> 8: + retval = SOUND_MIXER_PCM; + goto done; + default: + retval = SOUND_MIXER_VOLUME; + goto done; + } + } else if (uat->terminal_type == terminal_type) { + retval = uat->feature; + goto done; } uat++; } - +done: DPRINTF("terminal_type=0x%04x -> %d\n", - terminal_type, uat->feature); + terminal_type, retval); + return (retval); +} - return (uat->feature); +static uint16_t +uaudio_mixer_feature_name(const struct uaudio_terminal_node *iot, + struct uaudio_mixer_node *mix) +{ + uint16_t terminal_type = uaudio_mixer_determine_class(iot, mix); + + if (mix->class == UAC_RECORD && terminal_type == 0) + return (SOUND_MIXER_IMIX); + return (uaudio_mixer_feature_name_sub(terminal_type)); } static uint16_t uaudio20_mixer_feature_name(const struct uaudio_terminal_node *iot, struct uaudio_mixer_node *mix) { - const struct uaudio_tt_to_feature *uat; uint16_t terminal_type = uaudio20_mixer_determine_class(iot, mix); - if ((mix->class == UAC_RECORD) && (terminal_type == 0)) + if (mix->class == UAC_RECORD && terminal_type == 0) return (SOUND_MIXER_IMIX); - - for (uat = uaudio_tt_to_feature; uat->terminal_type != 0; uat++) { - if (uat->terminal_type == terminal_type) - break; - } - - DPRINTF("terminal_type=0x%04x -> %d\n", - terminal_type, uat->feature); - - return (uat->feature); + return (uaudio_mixer_feature_name_sub(terminal_type)); } static const struct uaudio_terminal_node * From owner-svn-src-stable@freebsd.org Mon Apr 13 16:25:45 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 1403A2C2B4A; Mon, 13 Apr 2020 16:25:45 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DWD6jBSz3Lrn; Mon, 13 Apr 2020 16:25:44 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C77811E3EF; Mon, 13 Apr 2020 16:25:44 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGPifG086862; Mon, 13 Apr 2020 16:25:44 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGPiNI086861; Mon, 13 Apr 2020 16:25:44 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131625.03DGPiNI086861@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:25:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359877 - stable/11/sys/dev/sound/usb X-SVN-Group: stable-11 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/11/sys/dev/sound/usb X-SVN-Commit-Revision: 359877 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:25:45 -0000 Author: hselasky Date: Mon Apr 13 16:25:44 2020 New Revision: 359877 URL: https://svnweb.freebsd.org/changeset/base/359877 Log: MFC r359323: Be more intelligent when classifying USB audio terminal types, so that we don't end up using SOUND_MIXER_VOLUME for all undefined types. Sponsored by: Mellanox Technologies Modified: stable/11/sys/dev/sound/usb/uaudio.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/11/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:25:11 2020 (r359876) +++ stable/11/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:25:44 2020 (r359877) @@ -4509,52 +4509,61 @@ static const struct uaudio_tt_to_feature uaudio_tt_to_ {UATF_MULTITRACK, SOUND_MIXER_VOLUME}, {0xffff, SOUND_MIXER_VOLUME}, - /* default */ - {0x0000, SOUND_MIXER_VOLUME}, + /* end */ + {} }; static uint16_t -uaudio_mixer_feature_name(const struct uaudio_terminal_node *iot, - struct uaudio_mixer_node *mix) +uaudio_mixer_feature_name_sub(uint16_t terminal_type) { const struct uaudio_tt_to_feature *uat = uaudio_tt_to_feature; - uint16_t terminal_type = uaudio_mixer_determine_class(iot, mix); + uint16_t retval; - if ((mix->class == UAC_RECORD) && (terminal_type == 0)) { - return (SOUND_MIXER_IMIX); - } - while (uat->terminal_type) { - if (uat->terminal_type == terminal_type) { - break; + while (1) { + if (uat->terminal_type == 0) { + switch (terminal_type >> 8) { + case UATI_UNDEFINED >> 8: + retval = SOUND_MIXER_RECLEV; + goto done; + case UATO_UNDEFINED >> 8: + retval = SOUND_MIXER_PCM; + goto done; + default: + retval = SOUND_MIXER_VOLUME; + goto done; + } + } else if (uat->terminal_type == terminal_type) { + retval = uat->feature; + goto done; } uat++; } - +done: DPRINTF("terminal_type=0x%04x -> %d\n", - terminal_type, uat->feature); + terminal_type, retval); + return (retval); +} - return (uat->feature); +static uint16_t +uaudio_mixer_feature_name(const struct uaudio_terminal_node *iot, + struct uaudio_mixer_node *mix) +{ + uint16_t terminal_type = uaudio_mixer_determine_class(iot, mix); + + if (mix->class == UAC_RECORD && terminal_type == 0) + return (SOUND_MIXER_IMIX); + return (uaudio_mixer_feature_name_sub(terminal_type)); } static uint16_t uaudio20_mixer_feature_name(const struct uaudio_terminal_node *iot, struct uaudio_mixer_node *mix) { - const struct uaudio_tt_to_feature *uat; uint16_t terminal_type = uaudio20_mixer_determine_class(iot, mix); - if ((mix->class == UAC_RECORD) && (terminal_type == 0)) + if (mix->class == UAC_RECORD && terminal_type == 0) return (SOUND_MIXER_IMIX); - - for (uat = uaudio_tt_to_feature; uat->terminal_type != 0; uat++) { - if (uat->terminal_type == terminal_type) - break; - } - - DPRINTF("terminal_type=0x%04x -> %d\n", - terminal_type, uat->feature); - - return (uat->feature); + return (uaudio_mixer_feature_name_sub(terminal_type)); } static const struct uaudio_terminal_node * From owner-svn-src-stable@freebsd.org Mon Apr 13 16:26:16 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 51AF92C2BC1; Mon, 13 Apr 2020 16:26:16 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DWr1Xyvz3Lyf; Mon, 13 Apr 2020 16:26:16 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2DEFA1E3F0; Mon, 13 Apr 2020 16:26:16 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGQGL5086948; Mon, 13 Apr 2020 16:26:16 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGQGgE086947; Mon, 13 Apr 2020 16:26:16 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131626.03DGQGgE086947@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:26:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r359878 - stable/10/sys/dev/sound/usb X-SVN-Group: stable-10 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/10/sys/dev/sound/usb X-SVN-Commit-Revision: 359878 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:26:16 -0000 Author: hselasky Date: Mon Apr 13 16:26:15 2020 New Revision: 359878 URL: https://svnweb.freebsd.org/changeset/base/359878 Log: MFC r359323: Be more intelligent when classifying USB audio terminal types, so that we don't end up using SOUND_MIXER_VOLUME for all undefined types. Sponsored by: Mellanox Technologies Modified: stable/10/sys/dev/sound/usb/uaudio.c Directory Properties: stable/10/ (props changed) Modified: stable/10/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/10/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:25:44 2020 (r359877) +++ stable/10/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:26:15 2020 (r359878) @@ -4515,52 +4515,61 @@ static const struct uaudio_tt_to_feature uaudio_tt_to_ {UATF_MULTITRACK, SOUND_MIXER_VOLUME}, {0xffff, SOUND_MIXER_VOLUME}, - /* default */ - {0x0000, SOUND_MIXER_VOLUME}, + /* end */ + {} }; static uint16_t -uaudio_mixer_feature_name(const struct uaudio_terminal_node *iot, - struct uaudio_mixer_node *mix) +uaudio_mixer_feature_name_sub(uint16_t terminal_type) { const struct uaudio_tt_to_feature *uat = uaudio_tt_to_feature; - uint16_t terminal_type = uaudio_mixer_determine_class(iot, mix); + uint16_t retval; - if ((mix->class == UAC_RECORD) && (terminal_type == 0)) { - return (SOUND_MIXER_IMIX); - } - while (uat->terminal_type) { - if (uat->terminal_type == terminal_type) { - break; + while (1) { + if (uat->terminal_type == 0) { + switch (terminal_type >> 8) { + case UATI_UNDEFINED >> 8: + retval = SOUND_MIXER_RECLEV; + goto done; + case UATO_UNDEFINED >> 8: + retval = SOUND_MIXER_PCM; + goto done; + default: + retval = SOUND_MIXER_VOLUME; + goto done; + } + } else if (uat->terminal_type == terminal_type) { + retval = uat->feature; + goto done; } uat++; } - +done: DPRINTF("terminal_type=0x%04x -> %d\n", - terminal_type, uat->feature); + terminal_type, retval); + return (retval); +} - return (uat->feature); +static uint16_t +uaudio_mixer_feature_name(const struct uaudio_terminal_node *iot, + struct uaudio_mixer_node *mix) +{ + uint16_t terminal_type = uaudio_mixer_determine_class(iot, mix); + + if (mix->class == UAC_RECORD && terminal_type == 0) + return (SOUND_MIXER_IMIX); + return (uaudio_mixer_feature_name_sub(terminal_type)); } static uint16_t uaudio20_mixer_feature_name(const struct uaudio_terminal_node *iot, struct uaudio_mixer_node *mix) { - const struct uaudio_tt_to_feature *uat; uint16_t terminal_type = uaudio20_mixer_determine_class(iot, mix); - if ((mix->class == UAC_RECORD) && (terminal_type == 0)) + if (mix->class == UAC_RECORD && terminal_type == 0) return (SOUND_MIXER_IMIX); - - for (uat = uaudio_tt_to_feature; uat->terminal_type != 0; uat++) { - if (uat->terminal_type == terminal_type) - break; - } - - DPRINTF("terminal_type=0x%04x -> %d\n", - terminal_type, uat->feature); - - return (uat->feature); + return (uaudio_mixer_feature_name_sub(terminal_type)); } static const struct uaudio_terminal_node * From owner-svn-src-stable@freebsd.org Mon Apr 13 16:27:06 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5F1102C2C59; Mon, 13 Apr 2020 16:27:06 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DXp2J8Mz3M5m; Mon, 13 Apr 2020 16:27:06 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 49BCD1E3F1; Mon, 13 Apr 2020 16:27:06 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGR6mE087048; Mon, 13 Apr 2020 16:27:06 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGR6sV087047; Mon, 13 Apr 2020 16:27:06 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131627.03DGR6sV087047@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:27:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359879 - stable/12/sys/dev/sound/usb X-SVN-Group: stable-12 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/12/sys/dev/sound/usb X-SVN-Commit-Revision: 359879 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:27:06 -0000 Author: hselasky Date: Mon Apr 13 16:27:05 2020 New Revision: 359879 URL: https://svnweb.freebsd.org/changeset/base/359879 Log: MFC r359355: Improve USB audio mixer support for USB audio class 1 and 2. - make sure volume controls are correctly mapped to "pcm" and "rec" depending on how they deliver audio to the USB host. - make sure there are no duplicate record selections. - remove internal only mixer class type. - don't add software volume controls for recording only. - some minor mixer code cleanup. Tested by: Horse Ma Sponsored by: Mellanox Technologies Modified: stable/12/sys/dev/sound/usb/uaudio.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/12/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:26:15 2020 (r359878) +++ stable/12/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:27:05 2020 (r359879) @@ -194,7 +194,6 @@ struct uaudio_mixer_node { #define MAX_SELECTOR_INPUT_PIN 256 uint8_t slctrtype[MAX_SELECTOR_INPUT_PIN]; - uint8_t class; uint8_t val_default; uint8_t desc[64]; @@ -455,19 +454,6 @@ static const struct uaudio_format uaudio20_formats[] = {0, 0, 0, NULL} }; -#define UAC_OUTPUT 0 -#define UAC_INPUT 1 -#define UAC_EQUAL 2 -#define UAC_RECORD 3 -#define UAC_NCLASSES 4 - -#ifdef USB_DEBUG -static const char *uac_names[] = { - "outputs", "inputs", "equalization", "record" -}; - -#endif - /* prototypes */ static device_probe_t uaudio_probe; @@ -511,10 +497,7 @@ static void uaudio_mixer_add_extension(struct uaudio_s const struct uaudio_terminal_node *, int); static struct usb_audio_cluster uaudio_mixer_get_cluster(uint8_t, const struct uaudio_terminal_node *); -static uint16_t uaudio_mixer_determine_class(const struct uaudio_terminal_node *, - struct uaudio_mixer_node *); -static uint16_t uaudio_mixer_feature_name(const struct uaudio_terminal_node *, - struct uaudio_mixer_node *); +static uint16_t uaudio_mixer_determine_class(const struct uaudio_terminal_node *); static void uaudio_mixer_find_inputs_sub(struct uaudio_terminal_node *, const uint8_t *, uint8_t, struct uaudio_search_result *); static const void *uaudio_mixer_verify_desc(const void *, uint32_t); @@ -532,10 +515,7 @@ static void uaudio20_mixer_add_feature(struct uaudio_s const struct uaudio_terminal_node *, int); static struct usb_audio20_cluster uaudio20_mixer_get_cluster(uint8_t, const struct uaudio_terminal_node *); -static uint16_t uaudio20_mixer_determine_class(const struct uaudio_terminal_node *, - struct uaudio_mixer_node *); -static uint16_t uaudio20_mixer_feature_name(const struct uaudio_terminal_node *, - struct uaudio_mixer_node *); +static uint16_t uaudio20_mixer_determine_class(const struct uaudio_terminal_node *); static void uaudio20_mixer_find_inputs_sub(struct uaudio_terminal_node *, const uint8_t *, uint8_t, struct uaudio_search_result *); static const void *uaudio20_mixer_verify_desc(const void *, uint32_t); @@ -556,12 +536,6 @@ static void uaudio_mixer_fill_info(struct uaudio_softc struct usb_device *, void *); static int uaudio_mixer_signext(uint8_t, int); static void uaudio_mixer_init(struct uaudio_softc *); -static const struct uaudio_terminal_node *uaudio_mixer_get_input( - const struct uaudio_terminal_node *, uint8_t); -static const struct uaudio_terminal_node *uaudio_mixer_get_output( - const struct uaudio_terminal_node *, uint8_t); -static void uaudio_mixer_find_outputs_sub(struct uaudio_terminal_node *, - uint8_t, uint8_t, struct uaudio_search_result *); static uint8_t umidi_convert_to_usb(struct umidi_sub_chan *, uint8_t, uint8_t); static struct umidi_sub_chan *umidi_sub_by_fifo(struct usb_fifo *); static void umidi_start_read(struct usb_fifo *); @@ -1138,7 +1112,8 @@ uaudio_attach_sub(device_t dev, kobj_class_t mixer_cla DPRINTF("hardware has swapped left and right\n"); /* uaudio_pcm_setflags(dev, SD_F_PSWAPLR); */ } - if (!(sc->sc_mix_info & SOUND_MASK_PCM)) { + if (sc->sc_play_chan.num_alt > 0 && + (sc->sc_mix_info & SOUND_MASK_PCM) == 0) { DPRINTF("emulating master volume\n"); @@ -2962,7 +2937,6 @@ uaudio_mixer_controls_create_ftu(struct uaudio_softc * memset(&MIX(sc), 0, sizeof(MIX(sc))); MIX(sc).wIndex = MAKE_WORD(6, sc->sc_mixer_iface_no); MIX(sc).wValue[0] = MAKE_WORD(8, 0); - MIX(sc).class = UAC_OUTPUT; MIX(sc).type = MIX_UNSIGNED_16; MIX(sc).ctl = SOUND_MIXER_NRDEVICES; MIX(sc).name = "effect"; @@ -3009,7 +2983,6 @@ uaudio_mixer_controls_create_ftu(struct uaudio_softc * memset(&MIX(sc), 0, sizeof(MIX(sc))); MIX(sc).wIndex = MAKE_WORD(6, sc->sc_mixer_iface_no); MIX(sc).wValue[0] = MAKE_WORD(2, 0); - MIX(sc).class = UAC_OUTPUT; MIX(sc).type = MIX_SIGNED_8; MIX(sc).ctl = SOUND_MIXER_NRDEVICES; MIX(sc).name = "effect_vol"; @@ -3026,7 +2999,6 @@ uaudio_mixer_controls_create_ftu(struct uaudio_softc * memset(&MIX(sc), 0, sizeof(MIX(sc))); MIX(sc).wIndex = MAKE_WORD(6, sc->sc_mixer_iface_no); MIX(sc).wValue[0] = MAKE_WORD(3, 0); - MIX(sc).class = UAC_OUTPUT; MIX(sc).type = MIX_SIGNED_16; MIX(sc).ctl = SOUND_MIXER_NRDEVICES; MIX(sc).name = "effect_dur"; @@ -3043,7 +3015,6 @@ uaudio_mixer_controls_create_ftu(struct uaudio_softc * memset(&MIX(sc), 0, sizeof(MIX(sc))); MIX(sc).wIndex = MAKE_WORD(6, sc->sc_mixer_iface_no); MIX(sc).wValue[0] = MAKE_WORD(4, 0); - MIX(sc).class = UAC_OUTPUT; MIX(sc).type = MIX_SIGNED_8; MIX(sc).ctl = SOUND_MIXER_NRDEVICES; MIX(sc).name = "effect_fb"; @@ -3165,12 +3136,7 @@ uaudio_mixer_add_ctl(struct uaudio_softc *sc, struct u { int32_t res; - if (mc->class < UAC_NCLASSES) { - DPRINTF("adding %s.%d\n", - uac_names[mc->class], mc->ctl); - } else { - DPRINTF("adding %d\n", mc->ctl); - } + DPRINTF("adding %d\n", mc->ctl); if (mc->type == MIX_ON_OFF) { mc->minval = 0; @@ -3262,7 +3228,6 @@ uaudio_mixer_add_mixer(struct uaudio_softc *sc, memset(&MIX(sc), 0, sizeof(MIX(sc))); MIX(sc).wIndex = MAKE_WORD(d0->bUnitId, sc->sc_mixer_iface_no); - uaudio_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).type = MIX_SIGNED_16; if (uaudio_mixer_verify_desc(d0, ((ichs * ochs) + 7) / 8) == NULL) @@ -3341,7 +3306,6 @@ uaudio20_mixer_add_mixer(struct uaudio_softc *sc, memset(&MIX(sc), 0, sizeof(MIX(sc))); MIX(sc).wIndex = MAKE_WORD(d0->bUnitId, sc->sc_mixer_iface_no); - uaudio20_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).type = MIX_SIGNED_16; if (uaudio20_mixer_verify_desc(d0, ((ichs * ochs) + 7) / 8) == NULL) @@ -3381,6 +3345,58 @@ uaudio20_mixer_add_mixer(struct uaudio_softc *sc, } static void +uaudio_mixer_check_selectors(struct uaudio_softc *sc) +{ + uint8_t reserve_feature[] = { + SOUND_MIXER_LINE, + SOUND_MIXER_LINE1, + SOUND_MIXER_LINE2, + SOUND_MIXER_LINE3, + SOUND_MIXER_DIGITAL1, + SOUND_MIXER_DIGITAL2, + SOUND_MIXER_DIGITAL3, + }; + const uint16_t reserve_max = + sizeof(reserve_feature) / sizeof(reserve_feature[0]); + uint16_t i; + uint16_t j; + uint16_t k; + + /* remove existing selector types from the reserve */ + for (i = 0; i < MIX(sc).maxval; i++) { + if (MIX(sc).slctrtype[i] == SOUND_MIXER_NRDEVICES) + continue; + for (j = 0; j != reserve_max; j++) { + if (reserve_feature[j] == MIX(sc).slctrtype[i]) + reserve_feature[j] = SOUND_MIXER_NRDEVICES; + } + } + + /* make sure selector types are not overlapping */ + for (i = 0; i < MIX(sc).maxval; i++) { + if (MIX(sc).slctrtype[i] == SOUND_MIXER_NRDEVICES) + continue; + for (j = i + 1; j < MIX(sc).maxval; j++) { + if (MIX(sc).slctrtype[j] == SOUND_MIXER_NRDEVICES) + continue; + if (MIX(sc).slctrtype[i] != MIX(sc).slctrtype[j]) + continue; + for (k = 0; k != reserve_max; k++) { + if (reserve_feature[k] == SOUND_MIXER_NRDEVICES) + continue; + MIX(sc).slctrtype[j] = reserve_feature[k]; + reserve_feature[k] = SOUND_MIXER_NRDEVICES; + break; + } + if (k == reserve_max) { + DPRINTF("Selector type %d is not selectable!\n", j); + MIX(sc).slctrtype[j] = SOUND_MIXER_NRDEVICES; + } + } + } +} + +static void uaudio_mixer_add_selector(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id) { @@ -3397,7 +3413,6 @@ uaudio_mixer_add_selector(struct uaudio_softc *sc, MIX(sc).wIndex = MAKE_WORD(d->bUnitId, sc->sc_mixer_iface_no); MIX(sc).wValue[0] = MAKE_WORD(0, 0); - uaudio_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).nchan = 1; MIX(sc).type = MIX_SELECTOR; MIX(sc).ctl = SOUND_MIXER_NRDEVICES; @@ -3412,21 +3427,19 @@ uaudio_mixer_add_selector(struct uaudio_softc *sc, MIX(sc).desc[0] = 0; } - if (MIX(sc).maxval > MAX_SELECTOR_INPUT_PIN) { + if (MIX(sc).maxval > MAX_SELECTOR_INPUT_PIN) MIX(sc).maxval = MAX_SELECTOR_INPUT_PIN; - } - MIX(sc).mul = (MIX(sc).maxval - MIX(sc).minval); - for (i = 0; i < MAX_SELECTOR_INPUT_PIN; i++) { - MIX(sc).slctrtype[i] = SOUND_MIXER_NRDEVICES; - } + MIX(sc).mul = MIX(sc).maxval - MIX(sc).minval; + for (i = 0; i < MIX(sc).maxval; i++) { - MIX(sc).slctrtype[i] = uaudio_mixer_feature_name( - &iot[d->baSourceId[i]], &MIX(sc)); + MIX(sc).slctrtype[i] = + uaudio_mixer_determine_class(&iot[d->baSourceId[i]]); } + for (; i < MAX_SELECTOR_INPUT_PIN; i++) + MIX(sc).slctrtype[i] = SOUND_MIXER_NRDEVICES; - MIX(sc).class = 0; /* not used */ - + uaudio_mixer_check_selectors(sc); uaudio_mixer_add_ctl(sc, &MIX(sc)); } @@ -3447,7 +3460,6 @@ uaudio20_mixer_add_selector(struct uaudio_softc *sc, MIX(sc).wIndex = MAKE_WORD(d->bUnitId, sc->sc_mixer_iface_no); MIX(sc).wValue[0] = MAKE_WORD(0, 0); - uaudio20_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).nchan = 1; MIX(sc).type = MIX_SELECTOR; MIX(sc).ctl = SOUND_MIXER_NRDEVICES; @@ -3465,17 +3477,16 @@ uaudio20_mixer_add_selector(struct uaudio_softc *sc, if (MIX(sc).maxval > MAX_SELECTOR_INPUT_PIN) MIX(sc).maxval = MAX_SELECTOR_INPUT_PIN; - MIX(sc).mul = (MIX(sc).maxval - MIX(sc).minval); - for (i = 0; i < MAX_SELECTOR_INPUT_PIN; i++) - MIX(sc).slctrtype[i] = SOUND_MIXER_NRDEVICES; + MIX(sc).mul = MIX(sc).maxval - MIX(sc).minval; for (i = 0; i < MIX(sc).maxval; i++) { - MIX(sc).slctrtype[i] = uaudio20_mixer_feature_name( - &iot[d->baSourceId[i]], &MIX(sc)); + MIX(sc).slctrtype[i] = + uaudio20_mixer_determine_class(&iot[d->baSourceId[i]]); } + for (; i < MAX_SELECTOR_INPUT_PIN; i++) + MIX(sc).slctrtype[i] = SOUND_MIXER_NRDEVICES; - MIX(sc).class = 0; /* not used */ - + uaudio_mixer_check_selectors(sc); uaudio_mixer_add_ctl(sc, &MIX(sc)); } @@ -3536,9 +3547,9 @@ uaudio_mixer_add_feature(struct uaudio_softc *sc, cmask |= uaudio_mixer_feature_get_bmaControls(d, chan); } - if (nchan > MIX_MAX_CHAN) { + if (nchan > MIX_MAX_CHAN) nchan = MIX_MAX_CHAN; - } + MIX(sc).wIndex = MAKE_WORD(d->bUnitId, sc->sc_mixer_iface_no); i = d->bmaControls[d->bControlSize]; @@ -3570,7 +3581,7 @@ uaudio_mixer_add_feature(struct uaudio_softc *sc, continue; } - mixernumber = uaudio_mixer_feature_name(&iot[id], &MIX(sc)); + mixernumber = uaudio_mixer_determine_class(&iot[id]); switch (ctl) { case MUTE_CONTROL: @@ -3685,7 +3696,7 @@ uaudio20_mixer_add_feature(struct uaudio_softc *sc, for (ctl = 3; ctl != 0; ctl <<= 2) { - mixernumber = uaudio20_mixer_feature_name(&iot[id], &MIX(sc)); + mixernumber = uaudio20_mixer_determine_class(&iot[id]); switch (ctl) { case (3 << 0): @@ -3808,7 +3819,6 @@ uaudio_mixer_add_processing_updown(struct uaudio_softc MIX(sc).wIndex = MAKE_WORD(d0->bUnitId, sc->sc_mixer_iface_no); MIX(sc).nchan = 1; MIX(sc).wValue[0] = MAKE_WORD(UD_MODE_SELECT_CONTROL, 0); - uaudio_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).type = MIX_ON_OFF; /* XXX */ for (i = 0; i < ud->bNrModes; i++) { @@ -3842,7 +3852,6 @@ uaudio_mixer_add_processing(struct uaudio_softc *sc, MIX(sc).wIndex = MAKE_WORD(d0->bUnitId, sc->sc_mixer_iface_no); MIX(sc).nchan = 1; MIX(sc).wValue[0] = MAKE_WORD(XX_ENABLE_CONTROL, 0); - uaudio_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).type = MIX_ON_OFF; uaudio_mixer_add_ctl(sc, &MIX(sc)); } @@ -3887,7 +3896,6 @@ uaudio_mixer_add_extension(struct uaudio_softc *sc, MIX(sc).wIndex = MAKE_WORD(d0->bUnitId, sc->sc_mixer_iface_no); MIX(sc).nchan = 1; MIX(sc).wValue[0] = MAKE_WORD(UA_EXT_ENABLE, 0); - uaudio_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).type = MIX_ON_OFF; uaudio_mixer_add_ctl(sc, &MIX(sc)); @@ -4317,114 +4325,42 @@ done: return (r); } -static uint16_t -uaudio_mixer_determine_class(const struct uaudio_terminal_node *iot, - struct uaudio_mixer_node *mix) +static bool +uaudio_mixer_foreach_input(const struct uaudio_terminal_node *iot, uint8_t *pindex) { - uint16_t terminal_type = 0x0000; - const struct uaudio_terminal_node *input[2]; - const struct uaudio_terminal_node *output[2]; + uint8_t n; - input[0] = uaudio_mixer_get_input(iot, 0); - input[1] = uaudio_mixer_get_input(iot, 1); + n = *pindex; - output[0] = uaudio_mixer_get_output(iot, 0); - output[1] = uaudio_mixer_get_output(iot, 1); - - /* - * check if there is only - * one output terminal: - */ - if (output[0] && (!output[1])) { - terminal_type = - UGETW(output[0]->u.ot_v1->wTerminalType); + while (1) { + if (!n--) + n = iot->usr.id_max; + if (n == 0) + return (false); + if (iot->usr.bit_input[n / 8] & (1 << (n % 8))) + break; } - /* - * If the only output terminal is USB, - * the class is UAC_RECORD. - */ - if ((terminal_type & 0xff00) == (UAT_UNDEFINED & 0xff00)) { - - mix->class = UAC_RECORD; - if (input[0] && (!input[1])) { - terminal_type = - UGETW(input[0]->u.it_v1->wTerminalType); - } else { - terminal_type = 0; - } - goto done; - } - /* - * if the unit is connected to just - * one input terminal, the - * class is UAC_INPUT: - */ - if (input[0] && (!input[1])) { - mix->class = UAC_INPUT; - terminal_type = - UGETW(input[0]->u.it_v1->wTerminalType); - goto done; - } - /* - * Otherwise, the class is UAC_OUTPUT. - */ - mix->class = UAC_OUTPUT; -done: - return (terminal_type); + *pindex = n; + return (true); } -static uint16_t -uaudio20_mixer_determine_class(const struct uaudio_terminal_node *iot, - struct uaudio_mixer_node *mix) +static bool +uaudio_mixer_foreach_output(const struct uaudio_terminal_node *iot, uint8_t *pindex) { - uint16_t terminal_type = 0x0000; - const struct uaudio_terminal_node *input[2]; - const struct uaudio_terminal_node *output[2]; + uint8_t n; - input[0] = uaudio_mixer_get_input(iot, 0); - input[1] = uaudio_mixer_get_input(iot, 1); + n = *pindex; - output[0] = uaudio_mixer_get_output(iot, 0); - output[1] = uaudio_mixer_get_output(iot, 1); - - /* - * check if there is only - * one output terminal: - */ - if (output[0] && (!output[1])) - terminal_type = UGETW(output[0]->u.ot_v2->wTerminalType); - /* - * If the only output terminal is USB, - * the class is UAC_RECORD. - */ - if ((terminal_type & 0xff00) == (UAT_UNDEFINED & 0xff00)) { - - mix->class = UAC_RECORD; - if (input[0] && (!input[1])) { - terminal_type = - UGETW(input[0]->u.it_v2->wTerminalType); - } else { - terminal_type = 0; - } - goto done; + while (1) { + if (!n--) + n = iot->usr.id_max; + if (n == 0) + return (false); + if (iot->usr.bit_output[n / 8] & (1 << (n % 8))) + break; } - /* - * if the unit is connected to just - * one input terminal, the - * class is UAC_INPUT: - */ - if (input[0] && (!input[1])) { - mix->class = UAC_INPUT; - terminal_type = - UGETW(input[0]->u.it_v2->wTerminalType); - goto done; - } - /* - * Otherwise, the class is UAC_OUTPUT. - */ - mix->class = UAC_OUTPUT; -done: - return (terminal_type); + *pindex = n; + return (true); } struct uaudio_tt_to_feature { @@ -4434,8 +4370,6 @@ struct uaudio_tt_to_feature { static const struct uaudio_tt_to_feature uaudio_tt_to_feature[] = { - {UAT_STREAM, SOUND_MIXER_PCM}, - {UATI_MICROPHONE, SOUND_MIXER_MIC}, {UATI_DESKMICROPHONE, SOUND_MIXER_MIC}, {UATI_PERSONALMICROPHONE, SOUND_MIXER_MIC}, @@ -4443,11 +4377,6 @@ static const struct uaudio_tt_to_feature uaudio_tt_to_ {UATI_MICROPHONEARRAY, SOUND_MIXER_MIC}, {UATI_PROCMICROPHONEARR, SOUND_MIXER_MIC}, - {UATO_SPEAKER, SOUND_MIXER_SPEAKER}, - {UATO_DESKTOPSPEAKER, SOUND_MIXER_SPEAKER}, - {UATO_ROOMSPEAKER, SOUND_MIXER_SPEAKER}, - {UATO_COMMSPEAKER, SOUND_MIXER_SPEAKER}, - {UATE_ANALOGCONN, SOUND_MIXER_LINE}, {UATE_LINECONN, SOUND_MIXER_LINE}, {UATE_LEGACYCONN, SOUND_MIXER_LINE}, @@ -4465,63 +4394,21 @@ static const struct uaudio_tt_to_feature uaudio_tt_to_ {UATF_DVDAUDIO, SOUND_MIXER_VIDEO}, {UATF_TVTUNERAUDIO, SOUND_MIXER_VIDEO}, - /* telephony terminal types */ - {UATT_UNDEFINED, SOUND_MIXER_PHONEIN}, /* SOUND_MIXER_PHONEOUT */ - {UATT_PHONELINE, SOUND_MIXER_PHONEIN}, /* SOUND_MIXER_PHONEOUT */ - {UATT_TELEPHONE, SOUND_MIXER_PHONEIN}, /* SOUND_MIXER_PHONEOUT */ - {UATT_DOWNLINEPHONE, SOUND_MIXER_PHONEIN}, /* SOUND_MIXER_PHONEOUT */ - {UATF_RADIORECV, SOUND_MIXER_RADIO}, {UATF_RADIOXMIT, SOUND_MIXER_RADIO}, - {UAT_UNDEFINED, SOUND_MIXER_VOLUME}, - {UAT_VENDOR, SOUND_MIXER_VOLUME}, - {UATI_UNDEFINED, SOUND_MIXER_VOLUME}, - - /* output terminal types */ - {UATO_UNDEFINED, SOUND_MIXER_VOLUME}, - {UATO_DISPLAYAUDIO, SOUND_MIXER_VOLUME}, - {UATO_SUBWOOFER, SOUND_MIXER_VOLUME}, - {UATO_HEADPHONES, SOUND_MIXER_VOLUME}, - - /* bidir terminal types */ - {UATB_UNDEFINED, SOUND_MIXER_VOLUME}, - {UATB_HANDSET, SOUND_MIXER_VOLUME}, - {UATB_HEADSET, SOUND_MIXER_VOLUME}, - {UATB_SPEAKERPHONE, SOUND_MIXER_VOLUME}, - {UATB_SPEAKERPHONEESUP, SOUND_MIXER_VOLUME}, - {UATB_SPEAKERPHONEECANC, SOUND_MIXER_VOLUME}, - - /* external terminal types */ - {UATE_UNDEFINED, SOUND_MIXER_VOLUME}, - - /* embedded function terminal types */ - {UATF_UNDEFINED, SOUND_MIXER_VOLUME}, - {UATF_CALIBNOISE, SOUND_MIXER_VOLUME}, - {UATF_EQUNOISE, SOUND_MIXER_VOLUME}, - {UATF_DAT, SOUND_MIXER_VOLUME}, - {UATF_DCC, SOUND_MIXER_VOLUME}, - {UATF_MINIDISK, SOUND_MIXER_VOLUME}, - {UATF_ANALOGTAPE, SOUND_MIXER_VOLUME}, - {UATF_PHONOGRAPH, SOUND_MIXER_VOLUME}, - {UATF_VCRAUDIO, SOUND_MIXER_VOLUME}, - {UATF_SATELLITE, SOUND_MIXER_VOLUME}, - {UATF_CABLETUNER, SOUND_MIXER_VOLUME}, - {UATF_DSS, SOUND_MIXER_VOLUME}, - {UATF_MULTITRACK, SOUND_MIXER_VOLUME}, - {0xffff, SOUND_MIXER_VOLUME}, - - /* end */ - {} + {} /* END */ }; static uint16_t -uaudio_mixer_feature_name_sub(uint16_t terminal_type) +uaudio_mixer_get_feature_by_tt(uint16_t terminal_type, uint16_t default_type) { const struct uaudio_tt_to_feature *uat = uaudio_tt_to_feature; uint16_t retval; - while (1) { + if (terminal_type == 0) { + retval = default_type; + } else while (1) { if (uat->terminal_type == 0) { switch (terminal_type >> 8) { case UATI_UNDEFINED >> 8: @@ -4530,8 +4417,11 @@ uaudio_mixer_feature_name_sub(uint16_t terminal_type) case UATO_UNDEFINED >> 8: retval = SOUND_MIXER_PCM; goto done; + case UATT_UNDEFINED >> 8: + retval = SOUND_MIXER_PHONEIN; + goto done; default: - retval = SOUND_MIXER_VOLUME; + retval = default_type; goto done; } } else if (uat->terminal_type == terminal_type) { @@ -4541,65 +4431,138 @@ uaudio_mixer_feature_name_sub(uint16_t terminal_type) uat++; } done: - DPRINTF("terminal_type=0x%04x -> %d\n", - terminal_type, retval); + DPRINTF("terminal_type=0x%04x RET=%d DEF=%d\n", + terminal_type, retval, default_type); return (retval); } static uint16_t -uaudio_mixer_feature_name(const struct uaudio_terminal_node *iot, - struct uaudio_mixer_node *mix) +uaudio_mixer_determine_class(const struct uaudio_terminal_node *iot) { - uint16_t terminal_type = uaudio_mixer_determine_class(iot, mix); + const struct uaudio_terminal_node *ptr; + uint16_t terminal_type_input = 0; + uint16_t terminal_type_output = 0; + uint16_t temp; + uint8_t match = 0; + uint8_t i; - if (mix->class == UAC_RECORD && terminal_type == 0) + for (i = 0; uaudio_mixer_foreach_input(iot, &i); ) { + ptr = iot->root + i; + temp = UGETW(ptr->u.it_v1->wTerminalType); + + if (temp == 0) + continue; + else if (temp == UAT_STREAM) + match |= 1; + else if ((temp & 0xFF00) != (UAT_UNDEFINED & 0xff00)) + terminal_type_input = temp; + } + + for (i = 0; uaudio_mixer_foreach_output(iot, &i); ) { + ptr = iot->root + i; + temp = UGETW(ptr->u.ot_v1->wTerminalType); + + if (temp == 0) + continue; + else if (temp == UAT_STREAM) + match |= 2; + else if ((temp & 0xFF00) != (UAT_UNDEFINED & 0xff00)) + terminal_type_output = temp; + } + + DPRINTF("MATCH=%d IN=0x%04x OUT=0x%04x\n", + match, terminal_type_input, terminal_type_output); + + switch (match) { + case 0: /* not connected to USB */ + if (terminal_type_output != 0) { + return (uaudio_mixer_get_feature_by_tt( + terminal_type_output, SOUND_MIXER_MONITOR)); + } else { + return (uaudio_mixer_get_feature_by_tt( + terminal_type_input, SOUND_MIXER_MONITOR)); + } + case 3: /* connected to both USB input and USB output */ return (SOUND_MIXER_IMIX); - return (uaudio_mixer_feature_name_sub(terminal_type)); + case 2: /* connected to USB output */ + return (uaudio_mixer_get_feature_by_tt( + terminal_type_input, SOUND_MIXER_RECLEV)); + case 1: /* connected to USB input */ + return (uaudio_mixer_get_feature_by_tt( + terminal_type_output, SOUND_MIXER_PCM)); + default: + return (SOUND_MIXER_NRDEVICES); + } } static uint16_t -uaudio20_mixer_feature_name(const struct uaudio_terminal_node *iot, - struct uaudio_mixer_node *mix) +uaudio20_mixer_determine_class(const struct uaudio_terminal_node *iot) { - uint16_t terminal_type = uaudio20_mixer_determine_class(iot, mix); + const struct uaudio_terminal_node *ptr; + uint16_t terminal_type_input = 0; + uint16_t terminal_type_output = 0; + uint16_t temp; + uint8_t match = 0; + uint8_t i; - if (mix->class == UAC_RECORD && terminal_type == 0) - return (SOUND_MIXER_IMIX); - return (uaudio_mixer_feature_name_sub(terminal_type)); -} + for (i = 0; uaudio_mixer_foreach_input(iot, &i); ) { + ptr = iot->root + i; + temp = UGETW(ptr->u.it_v2->wTerminalType); -static const struct uaudio_terminal_node * -uaudio_mixer_get_input(const struct uaudio_terminal_node *iot, uint8_t i) -{ - struct uaudio_terminal_node *root = iot->root; - uint8_t n; + if (temp == 0) + continue; + else if (temp == UAT_STREAM) + match |= 1; + else if ((temp & 0xFF00) != (UAT_UNDEFINED & 0xff00)) + terminal_type_input = temp; + } - n = iot->usr.id_max; - do { - if (iot->usr.bit_input[n / 8] & (1 << (n % 8))) { - if (!i--) - return (root + n); - } - } while (n--); + for (i = 0; uaudio_mixer_foreach_output(iot, &i); ) { + ptr = iot->root + i; + temp = UGETW(ptr->u.ot_v2->wTerminalType); - return (NULL); -} + if (temp == 0) + continue; + else if (temp == UAT_STREAM) + match |= 2; + else if ((temp & 0xFF00) != (UAT_UNDEFINED & 0xff00)) + terminal_type_output = temp; + } -static const struct uaudio_terminal_node * -uaudio_mixer_get_output(const struct uaudio_terminal_node *iot, uint8_t i) -{ - struct uaudio_terminal_node *root = iot->root; - uint8_t n; + DPRINTF("MATCH=%d IN=0x%04x OUT=0x%04x\n", + match, terminal_type_input, terminal_type_output); - n = iot->usr.id_max; - do { - if (iot->usr.bit_output[n / 8] & (1 << (n % 8))) { - if (!i--) - return (root + n); + switch (match) { + case 0: /* not connected to USB */ + if (terminal_type_output != 0) { + return (uaudio_mixer_get_feature_by_tt( + terminal_type_output, SOUND_MIXER_MONITOR)); + } else { + return (uaudio_mixer_get_feature_by_tt( + terminal_type_input, SOUND_MIXER_MONITOR)); } - } while (n--); + case 3: /* connected to both USB input and USB output */ + return (SOUND_MIXER_IMIX); + case 2: /* connected to USB output */ + return (uaudio_mixer_get_feature_by_tt( + terminal_type_input, SOUND_MIXER_RECLEV)); + case 1: /* connected to USB input */ + return (uaudio_mixer_get_feature_by_tt( + terminal_type_output, SOUND_MIXER_PCM)); + default: + return (SOUND_MIXER_NRDEVICES); + } +} - return (NULL); +static void +uaudio_mixer_merge_outputs(struct uaudio_search_result *dst, + const struct uaudio_search_result *src) +{ + const uint8_t max = sizeof(src->bit_output) / sizeof(src->bit_output[0]); + uint8_t x; + + for (x = 0; x != max; x++) + dst->bit_output[x] |= src->bit_output[x]; } static void @@ -4610,9 +4573,7 @@ uaudio_mixer_find_inputs_sub(struct uaudio_terminal_no struct uaudio_terminal_node *iot; uint8_t n; uint8_t i; - uint8_t is_last; -top: for (n = 0; n < n_id; n++) { i = p_id[n]; @@ -4629,72 +4590,48 @@ top: if (iot->u.desc == NULL) continue; - is_last = ((n + 1) == n_id); - switch (iot->u.desc->bDescriptorSubtype) { case UDESCSUB_AC_INPUT: + uaudio_mixer_merge_outputs(&iot->usr, info); info->bit_input[i / 8] |= (1 << (i % 8)); break; case UDESCSUB_AC_FEATURE: - if (is_last) { - p_id = &iot->u.fu_v1->bSourceId; - n_id = 1; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio_mixer_find_inputs_sub( root, &iot->u.fu_v1->bSourceId, 1, info); break; case UDESCSUB_AC_OUTPUT: - if (is_last) { - p_id = &iot->u.ot_v1->bSourceId; - n_id = 1; - goto top; - } + info->bit_output[i / 8] |= (1 << (i % 8)); uaudio_mixer_find_inputs_sub( root, &iot->u.ot_v1->bSourceId, 1, info); + info->bit_output[i / 8] &= ~(1 << (i % 8)); break; case UDESCSUB_AC_MIXER: - if (is_last) { - p_id = iot->u.mu_v1->baSourceId; - n_id = iot->u.mu_v1->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio_mixer_find_inputs_sub( root, iot->u.mu_v1->baSourceId, iot->u.mu_v1->bNrInPins, info); break; case UDESCSUB_AC_SELECTOR: - if (is_last) { - p_id = iot->u.su_v1->baSourceId; - n_id = iot->u.su_v1->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio_mixer_find_inputs_sub( root, iot->u.su_v1->baSourceId, iot->u.su_v1->bNrInPins, info); break; case UDESCSUB_AC_PROCESSING: - if (is_last) { - p_id = iot->u.pu_v1->baSourceId; - n_id = iot->u.pu_v1->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio_mixer_find_inputs_sub( root, iot->u.pu_v1->baSourceId, iot->u.pu_v1->bNrInPins, info); break; case UDESCSUB_AC_EXTENSION: - if (is_last) { - p_id = iot->u.eu_v1->baSourceId; - n_id = iot->u.eu_v1->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio_mixer_find_inputs_sub( root, iot->u.eu_v1->baSourceId, iot->u.eu_v1->bNrInPins, info); @@ -4714,9 +4651,7 @@ uaudio20_mixer_find_inputs_sub(struct uaudio_terminal_ struct uaudio_terminal_node *iot; uint8_t n; uint8_t i; - uint8_t is_last; -top: for (n = 0; n < n_id; n++) { i = p_id[n]; @@ -4733,94 +4668,62 @@ top: if (iot->u.desc == NULL) continue; - is_last = ((n + 1) == n_id); - switch (iot->u.desc->bDescriptorSubtype) { case UDESCSUB_AC_INPUT: + uaudio_mixer_merge_outputs(&iot->usr, info); info->bit_input[i / 8] |= (1 << (i % 8)); break; case UDESCSUB_AC_OUTPUT: - if (is_last) { - p_id = &iot->u.ot_v2->bSourceId; - n_id = 1; - goto top; - } + info->bit_output[i / 8] |= (1 << (i % 8)); uaudio20_mixer_find_inputs_sub( root, &iot->u.ot_v2->bSourceId, 1, info); + info->bit_output[i / 8] &= ~(1 << (i % 8)); break; case UDESCSUB_AC_MIXER: - if (is_last) { - p_id = iot->u.mu_v2->baSourceId; - n_id = iot->u.mu_v2->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, iot->u.mu_v2->baSourceId, iot->u.mu_v2->bNrInPins, info); break; case UDESCSUB_AC_SELECTOR: - if (is_last) { - p_id = iot->u.su_v2->baSourceId; - n_id = iot->u.su_v2->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, iot->u.su_v2->baSourceId, iot->u.su_v2->bNrInPins, info); break; case UDESCSUB_AC_SAMPLE_RT: - if (is_last) { - p_id = &iot->u.ru_v2->bSourceId; - n_id = 1; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, &iot->u.ru_v2->bSourceId, 1, info); break; case UDESCSUB_AC_EFFECT: - if (is_last) { - p_id = &iot->u.ef_v2->bSourceId; - n_id = 1; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, &iot->u.ef_v2->bSourceId, 1, info); break; case UDESCSUB_AC_FEATURE: - if (is_last) { - p_id = &iot->u.fu_v2->bSourceId; - n_id = 1; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, &iot->u.fu_v2->bSourceId, 1, info); break; case UDESCSUB_AC_PROCESSING_V2: - if (is_last) { - p_id = iot->u.pu_v2->baSourceId; - n_id = iot->u.pu_v2->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, iot->u.pu_v2->baSourceId, iot->u.pu_v2->bNrInPins, info); break; case UDESCSUB_AC_EXTENSION_V2: - if (is_last) { - p_id = iot->u.eu_v2->baSourceId; - n_id = iot->u.eu_v2->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, iot->u.eu_v2->baSourceId, iot->u.eu_v2->bNrInPins, info); @@ -4929,31 +4832,6 @@ top: } static void -uaudio_mixer_find_outputs_sub(struct uaudio_terminal_node *root, uint8_t id, - uint8_t n_id, struct uaudio_search_result *info) -{ - struct uaudio_terminal_node *iot = (root + id); - uint8_t j; - - j = n_id; - do { - if ((j != id) && ((root + j)->u.desc) && - ((root + j)->u.desc->bDescriptorSubtype == UDESCSUB_AC_OUTPUT)) { - - /* - * "j" (output) <--- virtual wire <--- "id" (input) - * - * if "j" has "id" on the input, then "id" have "j" on - * the output, because they are connected: - */ - if ((root + j)->usr.bit_input[id / 8] & (1 << (id % 8))) { - iot->usr.bit_output[j / 8] |= (1 << (j % 8)); - } - } - } while (j--); -} - -static void uaudio_mixer_fill_info(struct uaudio_softc *sc, struct usb_device *udev, void *desc) { @@ -5045,16 +4923,6 @@ uaudio_mixer_fill_info(struct uaudio_softc *sc, } } while (i--); - /* - * determine outputs for - * all nodes in the tree: - */ - i = ID_max; - do { - uaudio_mixer_find_outputs_sub(iot, - i, ID_max, &((iot + i)->usr)); - } while (i--); - /* set "id_max" and "root" */ i = ID_max; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-stable@freebsd.org Mon Apr 13 16:27:40 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B78182C2CCE; Mon, 13 Apr 2020 16:27:40 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DYS4rWnz3MD9; Mon, 13 Apr 2020 16:27:40 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A15051E3F2; Mon, 13 Apr 2020 16:27:40 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGReJ8087140; Mon, 13 Apr 2020 16:27:40 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGRehw087139; Mon, 13 Apr 2020 16:27:40 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131627.03DGRehw087139@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:27:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359880 - stable/11/sys/dev/sound/usb X-SVN-Group: stable-11 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/11/sys/dev/sound/usb X-SVN-Commit-Revision: 359880 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:27:40 -0000 Author: hselasky Date: Mon Apr 13 16:27:40 2020 New Revision: 359880 URL: https://svnweb.freebsd.org/changeset/base/359880 Log: MFC r359355: Improve USB audio mixer support for USB audio class 1 and 2. - make sure volume controls are correctly mapped to "pcm" and "rec" depending on how they deliver audio to the USB host. - make sure there are no duplicate record selections. - remove internal only mixer class type. - don't add software volume controls for recording only. - some minor mixer code cleanup. Tested by: Horse Ma Sponsored by: Mellanox Technologies Modified: stable/11/sys/dev/sound/usb/uaudio.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/11/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:27:05 2020 (r359879) +++ stable/11/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:27:40 2020 (r359880) @@ -192,7 +192,6 @@ struct uaudio_mixer_node { #define MAX_SELECTOR_INPUT_PIN 256 uint8_t slctrtype[MAX_SELECTOR_INPUT_PIN]; - uint8_t class; uint8_t val_default; uint8_t desc[64]; @@ -453,19 +452,6 @@ static const struct uaudio_format uaudio20_formats[] = {0, 0, 0, NULL} }; -#define UAC_OUTPUT 0 -#define UAC_INPUT 1 -#define UAC_EQUAL 2 -#define UAC_RECORD 3 -#define UAC_NCLASSES 4 - -#ifdef USB_DEBUG -static const char *uac_names[] = { - "outputs", "inputs", "equalization", "record" -}; - -#endif - /* prototypes */ static device_probe_t uaudio_probe; @@ -509,10 +495,7 @@ static void uaudio_mixer_add_extension(struct uaudio_s const struct uaudio_terminal_node *, int); static struct usb_audio_cluster uaudio_mixer_get_cluster(uint8_t, const struct uaudio_terminal_node *); -static uint16_t uaudio_mixer_determine_class(const struct uaudio_terminal_node *, - struct uaudio_mixer_node *); -static uint16_t uaudio_mixer_feature_name(const struct uaudio_terminal_node *, - struct uaudio_mixer_node *); +static uint16_t uaudio_mixer_determine_class(const struct uaudio_terminal_node *); static void uaudio_mixer_find_inputs_sub(struct uaudio_terminal_node *, const uint8_t *, uint8_t, struct uaudio_search_result *); static const void *uaudio_mixer_verify_desc(const void *, uint32_t); @@ -530,10 +513,7 @@ static void uaudio20_mixer_add_feature(struct uaudio_s const struct uaudio_terminal_node *, int); static struct usb_audio20_cluster uaudio20_mixer_get_cluster(uint8_t, const struct uaudio_terminal_node *); -static uint16_t uaudio20_mixer_determine_class(const struct uaudio_terminal_node *, - struct uaudio_mixer_node *); -static uint16_t uaudio20_mixer_feature_name(const struct uaudio_terminal_node *, - struct uaudio_mixer_node *); +static uint16_t uaudio20_mixer_determine_class(const struct uaudio_terminal_node *); static void uaudio20_mixer_find_inputs_sub(struct uaudio_terminal_node *, const uint8_t *, uint8_t, struct uaudio_search_result *); static const void *uaudio20_mixer_verify_desc(const void *, uint32_t); @@ -554,12 +534,6 @@ static void uaudio_mixer_fill_info(struct uaudio_softc struct usb_device *, void *); static int uaudio_mixer_signext(uint8_t, int); static void uaudio_mixer_init(struct uaudio_softc *); -static const struct uaudio_terminal_node *uaudio_mixer_get_input( - const struct uaudio_terminal_node *, uint8_t); -static const struct uaudio_terminal_node *uaudio_mixer_get_output( - const struct uaudio_terminal_node *, uint8_t); -static void uaudio_mixer_find_outputs_sub(struct uaudio_terminal_node *, - uint8_t, uint8_t, struct uaudio_search_result *); static uint8_t umidi_convert_to_usb(struct umidi_sub_chan *, uint8_t, uint8_t); static struct umidi_sub_chan *umidi_sub_by_fifo(struct usb_fifo *); static void umidi_start_read(struct usb_fifo *); @@ -1136,7 +1110,8 @@ uaudio_attach_sub(device_t dev, kobj_class_t mixer_cla DPRINTF("hardware has swapped left and right\n"); /* uaudio_pcm_setflags(dev, SD_F_PSWAPLR); */ } - if (!(sc->sc_mix_info & SOUND_MASK_PCM)) { + if (sc->sc_play_chan.num_alt > 0 && + (sc->sc_mix_info & SOUND_MASK_PCM) == 0) { DPRINTF("emulating master volume\n"); @@ -2960,7 +2935,6 @@ uaudio_mixer_controls_create_ftu(struct uaudio_softc * memset(&MIX(sc), 0, sizeof(MIX(sc))); MIX(sc).wIndex = MAKE_WORD(6, sc->sc_mixer_iface_no); MIX(sc).wValue[0] = MAKE_WORD(8, 0); - MIX(sc).class = UAC_OUTPUT; MIX(sc).type = MIX_UNSIGNED_16; MIX(sc).ctl = SOUND_MIXER_NRDEVICES; MIX(sc).name = "effect"; @@ -3007,7 +2981,6 @@ uaudio_mixer_controls_create_ftu(struct uaudio_softc * memset(&MIX(sc), 0, sizeof(MIX(sc))); MIX(sc).wIndex = MAKE_WORD(6, sc->sc_mixer_iface_no); MIX(sc).wValue[0] = MAKE_WORD(2, 0); - MIX(sc).class = UAC_OUTPUT; MIX(sc).type = MIX_SIGNED_8; MIX(sc).ctl = SOUND_MIXER_NRDEVICES; MIX(sc).name = "effect_vol"; @@ -3024,7 +2997,6 @@ uaudio_mixer_controls_create_ftu(struct uaudio_softc * memset(&MIX(sc), 0, sizeof(MIX(sc))); MIX(sc).wIndex = MAKE_WORD(6, sc->sc_mixer_iface_no); MIX(sc).wValue[0] = MAKE_WORD(3, 0); - MIX(sc).class = UAC_OUTPUT; MIX(sc).type = MIX_SIGNED_16; MIX(sc).ctl = SOUND_MIXER_NRDEVICES; MIX(sc).name = "effect_dur"; @@ -3041,7 +3013,6 @@ uaudio_mixer_controls_create_ftu(struct uaudio_softc * memset(&MIX(sc), 0, sizeof(MIX(sc))); MIX(sc).wIndex = MAKE_WORD(6, sc->sc_mixer_iface_no); MIX(sc).wValue[0] = MAKE_WORD(4, 0); - MIX(sc).class = UAC_OUTPUT; MIX(sc).type = MIX_SIGNED_8; MIX(sc).ctl = SOUND_MIXER_NRDEVICES; MIX(sc).name = "effect_fb"; @@ -3163,12 +3134,7 @@ uaudio_mixer_add_ctl(struct uaudio_softc *sc, struct u { int32_t res; - if (mc->class < UAC_NCLASSES) { - DPRINTF("adding %s.%d\n", - uac_names[mc->class], mc->ctl); - } else { - DPRINTF("adding %d\n", mc->ctl); - } + DPRINTF("adding %d\n", mc->ctl); if (mc->type == MIX_ON_OFF) { mc->minval = 0; @@ -3260,7 +3226,6 @@ uaudio_mixer_add_mixer(struct uaudio_softc *sc, memset(&MIX(sc), 0, sizeof(MIX(sc))); MIX(sc).wIndex = MAKE_WORD(d0->bUnitId, sc->sc_mixer_iface_no); - uaudio_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).type = MIX_SIGNED_16; if (uaudio_mixer_verify_desc(d0, ((ichs * ochs) + 7) / 8) == NULL) @@ -3339,7 +3304,6 @@ uaudio20_mixer_add_mixer(struct uaudio_softc *sc, memset(&MIX(sc), 0, sizeof(MIX(sc))); MIX(sc).wIndex = MAKE_WORD(d0->bUnitId, sc->sc_mixer_iface_no); - uaudio20_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).type = MIX_SIGNED_16; if (uaudio20_mixer_verify_desc(d0, ((ichs * ochs) + 7) / 8) == NULL) @@ -3379,6 +3343,58 @@ uaudio20_mixer_add_mixer(struct uaudio_softc *sc, } static void +uaudio_mixer_check_selectors(struct uaudio_softc *sc) +{ + uint8_t reserve_feature[] = { + SOUND_MIXER_LINE, + SOUND_MIXER_LINE1, + SOUND_MIXER_LINE2, + SOUND_MIXER_LINE3, + SOUND_MIXER_DIGITAL1, + SOUND_MIXER_DIGITAL2, + SOUND_MIXER_DIGITAL3, + }; + const uint16_t reserve_max = + sizeof(reserve_feature) / sizeof(reserve_feature[0]); + uint16_t i; + uint16_t j; + uint16_t k; + + /* remove existing selector types from the reserve */ + for (i = 0; i < MIX(sc).maxval; i++) { + if (MIX(sc).slctrtype[i] == SOUND_MIXER_NRDEVICES) + continue; + for (j = 0; j != reserve_max; j++) { + if (reserve_feature[j] == MIX(sc).slctrtype[i]) + reserve_feature[j] = SOUND_MIXER_NRDEVICES; + } + } + + /* make sure selector types are not overlapping */ + for (i = 0; i < MIX(sc).maxval; i++) { + if (MIX(sc).slctrtype[i] == SOUND_MIXER_NRDEVICES) + continue; + for (j = i + 1; j < MIX(sc).maxval; j++) { + if (MIX(sc).slctrtype[j] == SOUND_MIXER_NRDEVICES) + continue; + if (MIX(sc).slctrtype[i] != MIX(sc).slctrtype[j]) + continue; + for (k = 0; k != reserve_max; k++) { + if (reserve_feature[k] == SOUND_MIXER_NRDEVICES) + continue; + MIX(sc).slctrtype[j] = reserve_feature[k]; + reserve_feature[k] = SOUND_MIXER_NRDEVICES; + break; + } + if (k == reserve_max) { + DPRINTF("Selector type %d is not selectable!\n", j); + MIX(sc).slctrtype[j] = SOUND_MIXER_NRDEVICES; + } + } + } +} + +static void uaudio_mixer_add_selector(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id) { @@ -3395,7 +3411,6 @@ uaudio_mixer_add_selector(struct uaudio_softc *sc, MIX(sc).wIndex = MAKE_WORD(d->bUnitId, sc->sc_mixer_iface_no); MIX(sc).wValue[0] = MAKE_WORD(0, 0); - uaudio_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).nchan = 1; MIX(sc).type = MIX_SELECTOR; MIX(sc).ctl = SOUND_MIXER_NRDEVICES; @@ -3410,21 +3425,19 @@ uaudio_mixer_add_selector(struct uaudio_softc *sc, MIX(sc).desc[0] = 0; } - if (MIX(sc).maxval > MAX_SELECTOR_INPUT_PIN) { + if (MIX(sc).maxval > MAX_SELECTOR_INPUT_PIN) MIX(sc).maxval = MAX_SELECTOR_INPUT_PIN; - } - MIX(sc).mul = (MIX(sc).maxval - MIX(sc).minval); - for (i = 0; i < MAX_SELECTOR_INPUT_PIN; i++) { - MIX(sc).slctrtype[i] = SOUND_MIXER_NRDEVICES; - } + MIX(sc).mul = MIX(sc).maxval - MIX(sc).minval; + for (i = 0; i < MIX(sc).maxval; i++) { - MIX(sc).slctrtype[i] = uaudio_mixer_feature_name( - &iot[d->baSourceId[i]], &MIX(sc)); + MIX(sc).slctrtype[i] = + uaudio_mixer_determine_class(&iot[d->baSourceId[i]]); } + for (; i < MAX_SELECTOR_INPUT_PIN; i++) + MIX(sc).slctrtype[i] = SOUND_MIXER_NRDEVICES; - MIX(sc).class = 0; /* not used */ - + uaudio_mixer_check_selectors(sc); uaudio_mixer_add_ctl(sc, &MIX(sc)); } @@ -3445,7 +3458,6 @@ uaudio20_mixer_add_selector(struct uaudio_softc *sc, MIX(sc).wIndex = MAKE_WORD(d->bUnitId, sc->sc_mixer_iface_no); MIX(sc).wValue[0] = MAKE_WORD(0, 0); - uaudio20_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).nchan = 1; MIX(sc).type = MIX_SELECTOR; MIX(sc).ctl = SOUND_MIXER_NRDEVICES; @@ -3463,17 +3475,16 @@ uaudio20_mixer_add_selector(struct uaudio_softc *sc, if (MIX(sc).maxval > MAX_SELECTOR_INPUT_PIN) MIX(sc).maxval = MAX_SELECTOR_INPUT_PIN; - MIX(sc).mul = (MIX(sc).maxval - MIX(sc).minval); - for (i = 0; i < MAX_SELECTOR_INPUT_PIN; i++) - MIX(sc).slctrtype[i] = SOUND_MIXER_NRDEVICES; + MIX(sc).mul = MIX(sc).maxval - MIX(sc).minval; for (i = 0; i < MIX(sc).maxval; i++) { - MIX(sc).slctrtype[i] = uaudio20_mixer_feature_name( - &iot[d->baSourceId[i]], &MIX(sc)); + MIX(sc).slctrtype[i] = + uaudio20_mixer_determine_class(&iot[d->baSourceId[i]]); } + for (; i < MAX_SELECTOR_INPUT_PIN; i++) + MIX(sc).slctrtype[i] = SOUND_MIXER_NRDEVICES; - MIX(sc).class = 0; /* not used */ - + uaudio_mixer_check_selectors(sc); uaudio_mixer_add_ctl(sc, &MIX(sc)); } @@ -3534,9 +3545,9 @@ uaudio_mixer_add_feature(struct uaudio_softc *sc, cmask |= uaudio_mixer_feature_get_bmaControls(d, chan); } - if (nchan > MIX_MAX_CHAN) { + if (nchan > MIX_MAX_CHAN) nchan = MIX_MAX_CHAN; - } + MIX(sc).wIndex = MAKE_WORD(d->bUnitId, sc->sc_mixer_iface_no); i = d->bmaControls[d->bControlSize]; @@ -3568,7 +3579,7 @@ uaudio_mixer_add_feature(struct uaudio_softc *sc, continue; } - mixernumber = uaudio_mixer_feature_name(&iot[id], &MIX(sc)); + mixernumber = uaudio_mixer_determine_class(&iot[id]); switch (ctl) { case MUTE_CONTROL: @@ -3683,7 +3694,7 @@ uaudio20_mixer_add_feature(struct uaudio_softc *sc, for (ctl = 3; ctl != 0; ctl <<= 2) { - mixernumber = uaudio20_mixer_feature_name(&iot[id], &MIX(sc)); + mixernumber = uaudio20_mixer_determine_class(&iot[id]); switch (ctl) { case (3 << 0): @@ -3806,7 +3817,6 @@ uaudio_mixer_add_processing_updown(struct uaudio_softc MIX(sc).wIndex = MAKE_WORD(d0->bUnitId, sc->sc_mixer_iface_no); MIX(sc).nchan = 1; MIX(sc).wValue[0] = MAKE_WORD(UD_MODE_SELECT_CONTROL, 0); - uaudio_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).type = MIX_ON_OFF; /* XXX */ for (i = 0; i < ud->bNrModes; i++) { @@ -3840,7 +3850,6 @@ uaudio_mixer_add_processing(struct uaudio_softc *sc, MIX(sc).wIndex = MAKE_WORD(d0->bUnitId, sc->sc_mixer_iface_no); MIX(sc).nchan = 1; MIX(sc).wValue[0] = MAKE_WORD(XX_ENABLE_CONTROL, 0); - uaudio_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).type = MIX_ON_OFF; uaudio_mixer_add_ctl(sc, &MIX(sc)); } @@ -3885,7 +3894,6 @@ uaudio_mixer_add_extension(struct uaudio_softc *sc, MIX(sc).wIndex = MAKE_WORD(d0->bUnitId, sc->sc_mixer_iface_no); MIX(sc).nchan = 1; MIX(sc).wValue[0] = MAKE_WORD(UA_EXT_ENABLE, 0); - uaudio_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).type = MIX_ON_OFF; uaudio_mixer_add_ctl(sc, &MIX(sc)); @@ -4315,114 +4323,42 @@ done: return (r); } -static uint16_t -uaudio_mixer_determine_class(const struct uaudio_terminal_node *iot, - struct uaudio_mixer_node *mix) +static bool +uaudio_mixer_foreach_input(const struct uaudio_terminal_node *iot, uint8_t *pindex) { - uint16_t terminal_type = 0x0000; - const struct uaudio_terminal_node *input[2]; - const struct uaudio_terminal_node *output[2]; + uint8_t n; - input[0] = uaudio_mixer_get_input(iot, 0); - input[1] = uaudio_mixer_get_input(iot, 1); + n = *pindex; - output[0] = uaudio_mixer_get_output(iot, 0); - output[1] = uaudio_mixer_get_output(iot, 1); - - /* - * check if there is only - * one output terminal: - */ - if (output[0] && (!output[1])) { - terminal_type = - UGETW(output[0]->u.ot_v1->wTerminalType); + while (1) { + if (!n--) + n = iot->usr.id_max; + if (n == 0) + return (false); + if (iot->usr.bit_input[n / 8] & (1 << (n % 8))) + break; } - /* - * If the only output terminal is USB, - * the class is UAC_RECORD. - */ - if ((terminal_type & 0xff00) == (UAT_UNDEFINED & 0xff00)) { - - mix->class = UAC_RECORD; - if (input[0] && (!input[1])) { - terminal_type = - UGETW(input[0]->u.it_v1->wTerminalType); - } else { - terminal_type = 0; - } - goto done; - } - /* - * if the unit is connected to just - * one input terminal, the - * class is UAC_INPUT: - */ - if (input[0] && (!input[1])) { - mix->class = UAC_INPUT; - terminal_type = - UGETW(input[0]->u.it_v1->wTerminalType); - goto done; - } - /* - * Otherwise, the class is UAC_OUTPUT. - */ - mix->class = UAC_OUTPUT; -done: - return (terminal_type); + *pindex = n; + return (true); } -static uint16_t -uaudio20_mixer_determine_class(const struct uaudio_terminal_node *iot, - struct uaudio_mixer_node *mix) +static bool +uaudio_mixer_foreach_output(const struct uaudio_terminal_node *iot, uint8_t *pindex) { - uint16_t terminal_type = 0x0000; - const struct uaudio_terminal_node *input[2]; - const struct uaudio_terminal_node *output[2]; + uint8_t n; - input[0] = uaudio_mixer_get_input(iot, 0); - input[1] = uaudio_mixer_get_input(iot, 1); + n = *pindex; - output[0] = uaudio_mixer_get_output(iot, 0); - output[1] = uaudio_mixer_get_output(iot, 1); - - /* - * check if there is only - * one output terminal: - */ - if (output[0] && (!output[1])) - terminal_type = UGETW(output[0]->u.ot_v2->wTerminalType); - /* - * If the only output terminal is USB, - * the class is UAC_RECORD. - */ - if ((terminal_type & 0xff00) == (UAT_UNDEFINED & 0xff00)) { - - mix->class = UAC_RECORD; - if (input[0] && (!input[1])) { - terminal_type = - UGETW(input[0]->u.it_v2->wTerminalType); - } else { - terminal_type = 0; - } - goto done; + while (1) { + if (!n--) + n = iot->usr.id_max; + if (n == 0) + return (false); + if (iot->usr.bit_output[n / 8] & (1 << (n % 8))) + break; } - /* - * if the unit is connected to just - * one input terminal, the - * class is UAC_INPUT: - */ - if (input[0] && (!input[1])) { - mix->class = UAC_INPUT; - terminal_type = - UGETW(input[0]->u.it_v2->wTerminalType); - goto done; - } - /* - * Otherwise, the class is UAC_OUTPUT. - */ - mix->class = UAC_OUTPUT; -done: - return (terminal_type); + *pindex = n; + return (true); } struct uaudio_tt_to_feature { @@ -4432,8 +4368,6 @@ struct uaudio_tt_to_feature { static const struct uaudio_tt_to_feature uaudio_tt_to_feature[] = { - {UAT_STREAM, SOUND_MIXER_PCM}, - {UATI_MICROPHONE, SOUND_MIXER_MIC}, {UATI_DESKMICROPHONE, SOUND_MIXER_MIC}, {UATI_PERSONALMICROPHONE, SOUND_MIXER_MIC}, @@ -4441,11 +4375,6 @@ static const struct uaudio_tt_to_feature uaudio_tt_to_ {UATI_MICROPHONEARRAY, SOUND_MIXER_MIC}, {UATI_PROCMICROPHONEARR, SOUND_MIXER_MIC}, - {UATO_SPEAKER, SOUND_MIXER_SPEAKER}, - {UATO_DESKTOPSPEAKER, SOUND_MIXER_SPEAKER}, - {UATO_ROOMSPEAKER, SOUND_MIXER_SPEAKER}, - {UATO_COMMSPEAKER, SOUND_MIXER_SPEAKER}, - {UATE_ANALOGCONN, SOUND_MIXER_LINE}, {UATE_LINECONN, SOUND_MIXER_LINE}, {UATE_LEGACYCONN, SOUND_MIXER_LINE}, @@ -4463,63 +4392,21 @@ static const struct uaudio_tt_to_feature uaudio_tt_to_ {UATF_DVDAUDIO, SOUND_MIXER_VIDEO}, {UATF_TVTUNERAUDIO, SOUND_MIXER_VIDEO}, - /* telephony terminal types */ - {UATT_UNDEFINED, SOUND_MIXER_PHONEIN}, /* SOUND_MIXER_PHONEOUT */ - {UATT_PHONELINE, SOUND_MIXER_PHONEIN}, /* SOUND_MIXER_PHONEOUT */ - {UATT_TELEPHONE, SOUND_MIXER_PHONEIN}, /* SOUND_MIXER_PHONEOUT */ - {UATT_DOWNLINEPHONE, SOUND_MIXER_PHONEIN}, /* SOUND_MIXER_PHONEOUT */ - {UATF_RADIORECV, SOUND_MIXER_RADIO}, {UATF_RADIOXMIT, SOUND_MIXER_RADIO}, - {UAT_UNDEFINED, SOUND_MIXER_VOLUME}, - {UAT_VENDOR, SOUND_MIXER_VOLUME}, - {UATI_UNDEFINED, SOUND_MIXER_VOLUME}, - - /* output terminal types */ - {UATO_UNDEFINED, SOUND_MIXER_VOLUME}, - {UATO_DISPLAYAUDIO, SOUND_MIXER_VOLUME}, - {UATO_SUBWOOFER, SOUND_MIXER_VOLUME}, - {UATO_HEADPHONES, SOUND_MIXER_VOLUME}, - - /* bidir terminal types */ - {UATB_UNDEFINED, SOUND_MIXER_VOLUME}, - {UATB_HANDSET, SOUND_MIXER_VOLUME}, - {UATB_HEADSET, SOUND_MIXER_VOLUME}, - {UATB_SPEAKERPHONE, SOUND_MIXER_VOLUME}, - {UATB_SPEAKERPHONEESUP, SOUND_MIXER_VOLUME}, - {UATB_SPEAKERPHONEECANC, SOUND_MIXER_VOLUME}, - - /* external terminal types */ - {UATE_UNDEFINED, SOUND_MIXER_VOLUME}, - - /* embedded function terminal types */ - {UATF_UNDEFINED, SOUND_MIXER_VOLUME}, - {UATF_CALIBNOISE, SOUND_MIXER_VOLUME}, - {UATF_EQUNOISE, SOUND_MIXER_VOLUME}, - {UATF_DAT, SOUND_MIXER_VOLUME}, - {UATF_DCC, SOUND_MIXER_VOLUME}, - {UATF_MINIDISK, SOUND_MIXER_VOLUME}, - {UATF_ANALOGTAPE, SOUND_MIXER_VOLUME}, - {UATF_PHONOGRAPH, SOUND_MIXER_VOLUME}, - {UATF_VCRAUDIO, SOUND_MIXER_VOLUME}, - {UATF_SATELLITE, SOUND_MIXER_VOLUME}, - {UATF_CABLETUNER, SOUND_MIXER_VOLUME}, - {UATF_DSS, SOUND_MIXER_VOLUME}, - {UATF_MULTITRACK, SOUND_MIXER_VOLUME}, - {0xffff, SOUND_MIXER_VOLUME}, - - /* end */ - {} + {} /* END */ }; static uint16_t -uaudio_mixer_feature_name_sub(uint16_t terminal_type) +uaudio_mixer_get_feature_by_tt(uint16_t terminal_type, uint16_t default_type) { const struct uaudio_tt_to_feature *uat = uaudio_tt_to_feature; uint16_t retval; - while (1) { + if (terminal_type == 0) { + retval = default_type; + } else while (1) { if (uat->terminal_type == 0) { switch (terminal_type >> 8) { case UATI_UNDEFINED >> 8: @@ -4528,8 +4415,11 @@ uaudio_mixer_feature_name_sub(uint16_t terminal_type) case UATO_UNDEFINED >> 8: retval = SOUND_MIXER_PCM; goto done; + case UATT_UNDEFINED >> 8: + retval = SOUND_MIXER_PHONEIN; + goto done; default: - retval = SOUND_MIXER_VOLUME; + retval = default_type; goto done; } } else if (uat->terminal_type == terminal_type) { @@ -4539,65 +4429,138 @@ uaudio_mixer_feature_name_sub(uint16_t terminal_type) uat++; } done: - DPRINTF("terminal_type=0x%04x -> %d\n", - terminal_type, retval); + DPRINTF("terminal_type=0x%04x RET=%d DEF=%d\n", + terminal_type, retval, default_type); return (retval); } static uint16_t -uaudio_mixer_feature_name(const struct uaudio_terminal_node *iot, - struct uaudio_mixer_node *mix) +uaudio_mixer_determine_class(const struct uaudio_terminal_node *iot) { - uint16_t terminal_type = uaudio_mixer_determine_class(iot, mix); + const struct uaudio_terminal_node *ptr; + uint16_t terminal_type_input = 0; + uint16_t terminal_type_output = 0; + uint16_t temp; + uint8_t match = 0; + uint8_t i; - if (mix->class == UAC_RECORD && terminal_type == 0) + for (i = 0; uaudio_mixer_foreach_input(iot, &i); ) { + ptr = iot->root + i; + temp = UGETW(ptr->u.it_v1->wTerminalType); + + if (temp == 0) + continue; + else if (temp == UAT_STREAM) + match |= 1; + else if ((temp & 0xFF00) != (UAT_UNDEFINED & 0xff00)) + terminal_type_input = temp; + } + + for (i = 0; uaudio_mixer_foreach_output(iot, &i); ) { + ptr = iot->root + i; + temp = UGETW(ptr->u.ot_v1->wTerminalType); + + if (temp == 0) + continue; + else if (temp == UAT_STREAM) + match |= 2; + else if ((temp & 0xFF00) != (UAT_UNDEFINED & 0xff00)) + terminal_type_output = temp; + } + + DPRINTF("MATCH=%d IN=0x%04x OUT=0x%04x\n", + match, terminal_type_input, terminal_type_output); + + switch (match) { + case 0: /* not connected to USB */ + if (terminal_type_output != 0) { + return (uaudio_mixer_get_feature_by_tt( + terminal_type_output, SOUND_MIXER_MONITOR)); + } else { + return (uaudio_mixer_get_feature_by_tt( + terminal_type_input, SOUND_MIXER_MONITOR)); + } + case 3: /* connected to both USB input and USB output */ return (SOUND_MIXER_IMIX); - return (uaudio_mixer_feature_name_sub(terminal_type)); + case 2: /* connected to USB output */ + return (uaudio_mixer_get_feature_by_tt( + terminal_type_input, SOUND_MIXER_RECLEV)); + case 1: /* connected to USB input */ + return (uaudio_mixer_get_feature_by_tt( + terminal_type_output, SOUND_MIXER_PCM)); + default: + return (SOUND_MIXER_NRDEVICES); + } } static uint16_t -uaudio20_mixer_feature_name(const struct uaudio_terminal_node *iot, - struct uaudio_mixer_node *mix) +uaudio20_mixer_determine_class(const struct uaudio_terminal_node *iot) { - uint16_t terminal_type = uaudio20_mixer_determine_class(iot, mix); + const struct uaudio_terminal_node *ptr; + uint16_t terminal_type_input = 0; + uint16_t terminal_type_output = 0; + uint16_t temp; + uint8_t match = 0; + uint8_t i; - if (mix->class == UAC_RECORD && terminal_type == 0) - return (SOUND_MIXER_IMIX); - return (uaudio_mixer_feature_name_sub(terminal_type)); -} + for (i = 0; uaudio_mixer_foreach_input(iot, &i); ) { + ptr = iot->root + i; + temp = UGETW(ptr->u.it_v2->wTerminalType); -static const struct uaudio_terminal_node * -uaudio_mixer_get_input(const struct uaudio_terminal_node *iot, uint8_t i) -{ - struct uaudio_terminal_node *root = iot->root; - uint8_t n; + if (temp == 0) + continue; + else if (temp == UAT_STREAM) + match |= 1; + else if ((temp & 0xFF00) != (UAT_UNDEFINED & 0xff00)) + terminal_type_input = temp; + } - n = iot->usr.id_max; - do { - if (iot->usr.bit_input[n / 8] & (1 << (n % 8))) { - if (!i--) - return (root + n); - } - } while (n--); + for (i = 0; uaudio_mixer_foreach_output(iot, &i); ) { + ptr = iot->root + i; + temp = UGETW(ptr->u.ot_v2->wTerminalType); - return (NULL); -} + if (temp == 0) + continue; + else if (temp == UAT_STREAM) + match |= 2; + else if ((temp & 0xFF00) != (UAT_UNDEFINED & 0xff00)) + terminal_type_output = temp; + } -static const struct uaudio_terminal_node * -uaudio_mixer_get_output(const struct uaudio_terminal_node *iot, uint8_t i) -{ - struct uaudio_terminal_node *root = iot->root; - uint8_t n; + DPRINTF("MATCH=%d IN=0x%04x OUT=0x%04x\n", + match, terminal_type_input, terminal_type_output); - n = iot->usr.id_max; - do { - if (iot->usr.bit_output[n / 8] & (1 << (n % 8))) { - if (!i--) - return (root + n); + switch (match) { + case 0: /* not connected to USB */ + if (terminal_type_output != 0) { + return (uaudio_mixer_get_feature_by_tt( + terminal_type_output, SOUND_MIXER_MONITOR)); + } else { + return (uaudio_mixer_get_feature_by_tt( + terminal_type_input, SOUND_MIXER_MONITOR)); } - } while (n--); + case 3: /* connected to both USB input and USB output */ + return (SOUND_MIXER_IMIX); + case 2: /* connected to USB output */ + return (uaudio_mixer_get_feature_by_tt( + terminal_type_input, SOUND_MIXER_RECLEV)); + case 1: /* connected to USB input */ + return (uaudio_mixer_get_feature_by_tt( + terminal_type_output, SOUND_MIXER_PCM)); + default: + return (SOUND_MIXER_NRDEVICES); + } +} - return (NULL); +static void +uaudio_mixer_merge_outputs(struct uaudio_search_result *dst, + const struct uaudio_search_result *src) +{ + const uint8_t max = sizeof(src->bit_output) / sizeof(src->bit_output[0]); + uint8_t x; + + for (x = 0; x != max; x++) + dst->bit_output[x] |= src->bit_output[x]; } static void @@ -4608,9 +4571,7 @@ uaudio_mixer_find_inputs_sub(struct uaudio_terminal_no struct uaudio_terminal_node *iot; uint8_t n; uint8_t i; - uint8_t is_last; -top: for (n = 0; n < n_id; n++) { i = p_id[n]; @@ -4627,72 +4588,48 @@ top: if (iot->u.desc == NULL) continue; - is_last = ((n + 1) == n_id); - switch (iot->u.desc->bDescriptorSubtype) { case UDESCSUB_AC_INPUT: + uaudio_mixer_merge_outputs(&iot->usr, info); info->bit_input[i / 8] |= (1 << (i % 8)); break; case UDESCSUB_AC_FEATURE: - if (is_last) { - p_id = &iot->u.fu_v1->bSourceId; - n_id = 1; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio_mixer_find_inputs_sub( root, &iot->u.fu_v1->bSourceId, 1, info); break; case UDESCSUB_AC_OUTPUT: - if (is_last) { - p_id = &iot->u.ot_v1->bSourceId; - n_id = 1; - goto top; - } + info->bit_output[i / 8] |= (1 << (i % 8)); uaudio_mixer_find_inputs_sub( root, &iot->u.ot_v1->bSourceId, 1, info); + info->bit_output[i / 8] &= ~(1 << (i % 8)); break; case UDESCSUB_AC_MIXER: - if (is_last) { - p_id = iot->u.mu_v1->baSourceId; - n_id = iot->u.mu_v1->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio_mixer_find_inputs_sub( root, iot->u.mu_v1->baSourceId, iot->u.mu_v1->bNrInPins, info); break; case UDESCSUB_AC_SELECTOR: - if (is_last) { - p_id = iot->u.su_v1->baSourceId; - n_id = iot->u.su_v1->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio_mixer_find_inputs_sub( root, iot->u.su_v1->baSourceId, iot->u.su_v1->bNrInPins, info); break; case UDESCSUB_AC_PROCESSING: - if (is_last) { - p_id = iot->u.pu_v1->baSourceId; - n_id = iot->u.pu_v1->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio_mixer_find_inputs_sub( root, iot->u.pu_v1->baSourceId, iot->u.pu_v1->bNrInPins, info); break; case UDESCSUB_AC_EXTENSION: - if (is_last) { - p_id = iot->u.eu_v1->baSourceId; - n_id = iot->u.eu_v1->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio_mixer_find_inputs_sub( root, iot->u.eu_v1->baSourceId, iot->u.eu_v1->bNrInPins, info); @@ -4712,9 +4649,7 @@ uaudio20_mixer_find_inputs_sub(struct uaudio_terminal_ struct uaudio_terminal_node *iot; uint8_t n; uint8_t i; - uint8_t is_last; -top: for (n = 0; n < n_id; n++) { i = p_id[n]; @@ -4731,94 +4666,62 @@ top: if (iot->u.desc == NULL) continue; - is_last = ((n + 1) == n_id); - switch (iot->u.desc->bDescriptorSubtype) { case UDESCSUB_AC_INPUT: + uaudio_mixer_merge_outputs(&iot->usr, info); info->bit_input[i / 8] |= (1 << (i % 8)); break; case UDESCSUB_AC_OUTPUT: - if (is_last) { - p_id = &iot->u.ot_v2->bSourceId; - n_id = 1; - goto top; - } + info->bit_output[i / 8] |= (1 << (i % 8)); uaudio20_mixer_find_inputs_sub( root, &iot->u.ot_v2->bSourceId, 1, info); + info->bit_output[i / 8] &= ~(1 << (i % 8)); break; case UDESCSUB_AC_MIXER: - if (is_last) { - p_id = iot->u.mu_v2->baSourceId; - n_id = iot->u.mu_v2->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, iot->u.mu_v2->baSourceId, iot->u.mu_v2->bNrInPins, info); break; case UDESCSUB_AC_SELECTOR: - if (is_last) { - p_id = iot->u.su_v2->baSourceId; - n_id = iot->u.su_v2->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, iot->u.su_v2->baSourceId, iot->u.su_v2->bNrInPins, info); break; case UDESCSUB_AC_SAMPLE_RT: - if (is_last) { - p_id = &iot->u.ru_v2->bSourceId; - n_id = 1; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, &iot->u.ru_v2->bSourceId, 1, info); break; case UDESCSUB_AC_EFFECT: - if (is_last) { - p_id = &iot->u.ef_v2->bSourceId; - n_id = 1; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, &iot->u.ef_v2->bSourceId, 1, info); break; case UDESCSUB_AC_FEATURE: - if (is_last) { - p_id = &iot->u.fu_v2->bSourceId; - n_id = 1; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, &iot->u.fu_v2->bSourceId, 1, info); break; case UDESCSUB_AC_PROCESSING_V2: - if (is_last) { - p_id = iot->u.pu_v2->baSourceId; - n_id = iot->u.pu_v2->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, iot->u.pu_v2->baSourceId, iot->u.pu_v2->bNrInPins, info); break; case UDESCSUB_AC_EXTENSION_V2: - if (is_last) { - p_id = iot->u.eu_v2->baSourceId; - n_id = iot->u.eu_v2->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, iot->u.eu_v2->baSourceId, iot->u.eu_v2->bNrInPins, info); @@ -4927,31 +4830,6 @@ top: } static void -uaudio_mixer_find_outputs_sub(struct uaudio_terminal_node *root, uint8_t id, - uint8_t n_id, struct uaudio_search_result *info) -{ - struct uaudio_terminal_node *iot = (root + id); - uint8_t j; - - j = n_id; - do { - if ((j != id) && ((root + j)->u.desc) && - ((root + j)->u.desc->bDescriptorSubtype == UDESCSUB_AC_OUTPUT)) { - - /* - * "j" (output) <--- virtual wire <--- "id" (input) - * - * if "j" has "id" on the input, then "id" have "j" on - * the output, because they are connected: - */ - if ((root + j)->usr.bit_input[id / 8] & (1 << (id % 8))) { - iot->usr.bit_output[j / 8] |= (1 << (j % 8)); - } - } - } while (j--); -} - -static void uaudio_mixer_fill_info(struct uaudio_softc *sc, struct usb_device *udev, void *desc) { @@ -5043,16 +4921,6 @@ uaudio_mixer_fill_info(struct uaudio_softc *sc, } } while (i--); - /* - * determine outputs for - * all nodes in the tree: - */ - i = ID_max; - do { - uaudio_mixer_find_outputs_sub(iot, - i, ID_max, &((iot + i)->usr)); - } while (i--); - /* set "id_max" and "root" */ i = ID_max; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-stable@freebsd.org Mon Apr 13 16:28:16 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3BB452C2D52; Mon, 13 Apr 2020 16:28:16 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DZ815rzz3MLN; Mon, 13 Apr 2020 16:28:16 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 20DBE1E3F3; Mon, 13 Apr 2020 16:28:16 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGSGMs087233; Mon, 13 Apr 2020 16:28:16 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGSG7j087232; Mon, 13 Apr 2020 16:28:16 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131628.03DGSG7j087232@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:28:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r359881 - stable/10/sys/dev/sound/usb X-SVN-Group: stable-10 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/10/sys/dev/sound/usb X-SVN-Commit-Revision: 359881 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:28:16 -0000 Author: hselasky Date: Mon Apr 13 16:28:15 2020 New Revision: 359881 URL: https://svnweb.freebsd.org/changeset/base/359881 Log: MFC r359355: Improve USB audio mixer support for USB audio class 1 and 2. - make sure volume controls are correctly mapped to "pcm" and "rec" depending on how they deliver audio to the USB host. - make sure there are no duplicate record selections. - remove internal only mixer class type. - don't add software volume controls for recording only. - some minor mixer code cleanup. Tested by: Horse Ma Sponsored by: Mellanox Technologies Modified: stable/10/sys/dev/sound/usb/uaudio.c Directory Properties: stable/10/ (props changed) Modified: stable/10/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/10/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:27:40 2020 (r359880) +++ stable/10/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:28:15 2020 (r359881) @@ -198,7 +198,6 @@ struct uaudio_mixer_node { #define MAX_SELECTOR_INPUT_PIN 256 uint8_t slctrtype[MAX_SELECTOR_INPUT_PIN]; - uint8_t class; uint8_t val_default; uint8_t desc[64]; @@ -459,19 +458,6 @@ static const struct uaudio_format uaudio20_formats[] = {0, 0, 0, NULL} }; -#define UAC_OUTPUT 0 -#define UAC_INPUT 1 -#define UAC_EQUAL 2 -#define UAC_RECORD 3 -#define UAC_NCLASSES 4 - -#ifdef USB_DEBUG -static const char *uac_names[] = { - "outputs", "inputs", "equalization", "record" -}; - -#endif - /* prototypes */ static device_probe_t uaudio_probe; @@ -515,10 +501,7 @@ static void uaudio_mixer_add_extension(struct uaudio_s const struct uaudio_terminal_node *, int); static struct usb_audio_cluster uaudio_mixer_get_cluster(uint8_t, const struct uaudio_terminal_node *); -static uint16_t uaudio_mixer_determine_class(const struct uaudio_terminal_node *, - struct uaudio_mixer_node *); -static uint16_t uaudio_mixer_feature_name(const struct uaudio_terminal_node *, - struct uaudio_mixer_node *); +static uint16_t uaudio_mixer_determine_class(const struct uaudio_terminal_node *); static void uaudio_mixer_find_inputs_sub(struct uaudio_terminal_node *, const uint8_t *, uint8_t, struct uaudio_search_result *); static const void *uaudio_mixer_verify_desc(const void *, uint32_t); @@ -536,10 +519,7 @@ static void uaudio20_mixer_add_feature(struct uaudio_s const struct uaudio_terminal_node *, int); static struct usb_audio20_cluster uaudio20_mixer_get_cluster(uint8_t, const struct uaudio_terminal_node *); -static uint16_t uaudio20_mixer_determine_class(const struct uaudio_terminal_node *, - struct uaudio_mixer_node *); -static uint16_t uaudio20_mixer_feature_name(const struct uaudio_terminal_node *, - struct uaudio_mixer_node *); +static uint16_t uaudio20_mixer_determine_class(const struct uaudio_terminal_node *); static void uaudio20_mixer_find_inputs_sub(struct uaudio_terminal_node *, const uint8_t *, uint8_t, struct uaudio_search_result *); static const void *uaudio20_mixer_verify_desc(const void *, uint32_t); @@ -560,12 +540,6 @@ static void uaudio_mixer_fill_info(struct uaudio_softc struct usb_device *, void *); static int uaudio_mixer_signext(uint8_t, int); static void uaudio_mixer_init(struct uaudio_softc *); -static const struct uaudio_terminal_node *uaudio_mixer_get_input( - const struct uaudio_terminal_node *, uint8_t); -static const struct uaudio_terminal_node *uaudio_mixer_get_output( - const struct uaudio_terminal_node *, uint8_t); -static void uaudio_mixer_find_outputs_sub(struct uaudio_terminal_node *, - uint8_t, uint8_t, struct uaudio_search_result *); static uint8_t umidi_convert_to_usb(struct umidi_sub_chan *, uint8_t, uint8_t); static struct umidi_sub_chan *umidi_sub_by_fifo(struct usb_fifo *); static void umidi_start_read(struct usb_fifo *); @@ -1142,7 +1116,8 @@ uaudio_attach_sub(device_t dev, kobj_class_t mixer_cla DPRINTF("hardware has swapped left and right\n"); /* uaudio_pcm_setflags(dev, SD_F_PSWAPLR); */ } - if (!(sc->sc_mix_info & SOUND_MASK_PCM)) { + if (sc->sc_play_chan.num_alt > 0 && + (sc->sc_mix_info & SOUND_MASK_PCM) == 0) { DPRINTF("emulating master volume\n"); @@ -2966,7 +2941,6 @@ uaudio_mixer_controls_create_ftu(struct uaudio_softc * memset(&MIX(sc), 0, sizeof(MIX(sc))); MIX(sc).wIndex = MAKE_WORD(6, sc->sc_mixer_iface_no); MIX(sc).wValue[0] = MAKE_WORD(8, 0); - MIX(sc).class = UAC_OUTPUT; MIX(sc).type = MIX_UNSIGNED_16; MIX(sc).ctl = SOUND_MIXER_NRDEVICES; MIX(sc).name = "effect"; @@ -3013,7 +2987,6 @@ uaudio_mixer_controls_create_ftu(struct uaudio_softc * memset(&MIX(sc), 0, sizeof(MIX(sc))); MIX(sc).wIndex = MAKE_WORD(6, sc->sc_mixer_iface_no); MIX(sc).wValue[0] = MAKE_WORD(2, 0); - MIX(sc).class = UAC_OUTPUT; MIX(sc).type = MIX_SIGNED_8; MIX(sc).ctl = SOUND_MIXER_NRDEVICES; MIX(sc).name = "effect_vol"; @@ -3030,7 +3003,6 @@ uaudio_mixer_controls_create_ftu(struct uaudio_softc * memset(&MIX(sc), 0, sizeof(MIX(sc))); MIX(sc).wIndex = MAKE_WORD(6, sc->sc_mixer_iface_no); MIX(sc).wValue[0] = MAKE_WORD(3, 0); - MIX(sc).class = UAC_OUTPUT; MIX(sc).type = MIX_SIGNED_16; MIX(sc).ctl = SOUND_MIXER_NRDEVICES; MIX(sc).name = "effect_dur"; @@ -3047,7 +3019,6 @@ uaudio_mixer_controls_create_ftu(struct uaudio_softc * memset(&MIX(sc), 0, sizeof(MIX(sc))); MIX(sc).wIndex = MAKE_WORD(6, sc->sc_mixer_iface_no); MIX(sc).wValue[0] = MAKE_WORD(4, 0); - MIX(sc).class = UAC_OUTPUT; MIX(sc).type = MIX_SIGNED_8; MIX(sc).ctl = SOUND_MIXER_NRDEVICES; MIX(sc).name = "effect_fb"; @@ -3169,12 +3140,7 @@ uaudio_mixer_add_ctl(struct uaudio_softc *sc, struct u { int32_t res; - if (mc->class < UAC_NCLASSES) { - DPRINTF("adding %s.%d\n", - uac_names[mc->class], mc->ctl); - } else { - DPRINTF("adding %d\n", mc->ctl); - } + DPRINTF("adding %d\n", mc->ctl); if (mc->type == MIX_ON_OFF) { mc->minval = 0; @@ -3266,7 +3232,6 @@ uaudio_mixer_add_mixer(struct uaudio_softc *sc, memset(&MIX(sc), 0, sizeof(MIX(sc))); MIX(sc).wIndex = MAKE_WORD(d0->bUnitId, sc->sc_mixer_iface_no); - uaudio_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).type = MIX_SIGNED_16; if (uaudio_mixer_verify_desc(d0, ((ichs * ochs) + 7) / 8) == NULL) @@ -3345,7 +3310,6 @@ uaudio20_mixer_add_mixer(struct uaudio_softc *sc, memset(&MIX(sc), 0, sizeof(MIX(sc))); MIX(sc).wIndex = MAKE_WORD(d0->bUnitId, sc->sc_mixer_iface_no); - uaudio20_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).type = MIX_SIGNED_16; if (uaudio20_mixer_verify_desc(d0, ((ichs * ochs) + 7) / 8) == NULL) @@ -3385,6 +3349,58 @@ uaudio20_mixer_add_mixer(struct uaudio_softc *sc, } static void +uaudio_mixer_check_selectors(struct uaudio_softc *sc) +{ + uint8_t reserve_feature[] = { + SOUND_MIXER_LINE, + SOUND_MIXER_LINE1, + SOUND_MIXER_LINE2, + SOUND_MIXER_LINE3, + SOUND_MIXER_DIGITAL1, + SOUND_MIXER_DIGITAL2, + SOUND_MIXER_DIGITAL3, + }; + const uint16_t reserve_max = + sizeof(reserve_feature) / sizeof(reserve_feature[0]); + uint16_t i; + uint16_t j; + uint16_t k; + + /* remove existing selector types from the reserve */ + for (i = 0; i < MIX(sc).maxval; i++) { + if (MIX(sc).slctrtype[i] == SOUND_MIXER_NRDEVICES) + continue; + for (j = 0; j != reserve_max; j++) { + if (reserve_feature[j] == MIX(sc).slctrtype[i]) + reserve_feature[j] = SOUND_MIXER_NRDEVICES; + } + } + + /* make sure selector types are not overlapping */ + for (i = 0; i < MIX(sc).maxval; i++) { + if (MIX(sc).slctrtype[i] == SOUND_MIXER_NRDEVICES) + continue; + for (j = i + 1; j < MIX(sc).maxval; j++) { + if (MIX(sc).slctrtype[j] == SOUND_MIXER_NRDEVICES) + continue; + if (MIX(sc).slctrtype[i] != MIX(sc).slctrtype[j]) + continue; + for (k = 0; k != reserve_max; k++) { + if (reserve_feature[k] == SOUND_MIXER_NRDEVICES) + continue; + MIX(sc).slctrtype[j] = reserve_feature[k]; + reserve_feature[k] = SOUND_MIXER_NRDEVICES; + break; + } + if (k == reserve_max) { + DPRINTF("Selector type %d is not selectable!\n", j); + MIX(sc).slctrtype[j] = SOUND_MIXER_NRDEVICES; + } + } + } +} + +static void uaudio_mixer_add_selector(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id) { @@ -3401,7 +3417,6 @@ uaudio_mixer_add_selector(struct uaudio_softc *sc, MIX(sc).wIndex = MAKE_WORD(d->bUnitId, sc->sc_mixer_iface_no); MIX(sc).wValue[0] = MAKE_WORD(0, 0); - uaudio_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).nchan = 1; MIX(sc).type = MIX_SELECTOR; MIX(sc).ctl = SOUND_MIXER_NRDEVICES; @@ -3416,21 +3431,19 @@ uaudio_mixer_add_selector(struct uaudio_softc *sc, MIX(sc).desc[0] = 0; } - if (MIX(sc).maxval > MAX_SELECTOR_INPUT_PIN) { + if (MIX(sc).maxval > MAX_SELECTOR_INPUT_PIN) MIX(sc).maxval = MAX_SELECTOR_INPUT_PIN; - } - MIX(sc).mul = (MIX(sc).maxval - MIX(sc).minval); - for (i = 0; i < MAX_SELECTOR_INPUT_PIN; i++) { - MIX(sc).slctrtype[i] = SOUND_MIXER_NRDEVICES; - } + MIX(sc).mul = MIX(sc).maxval - MIX(sc).minval; + for (i = 0; i < MIX(sc).maxval; i++) { - MIX(sc).slctrtype[i] = uaudio_mixer_feature_name( - &iot[d->baSourceId[i]], &MIX(sc)); + MIX(sc).slctrtype[i] = + uaudio_mixer_determine_class(&iot[d->baSourceId[i]]); } + for (; i < MAX_SELECTOR_INPUT_PIN; i++) + MIX(sc).slctrtype[i] = SOUND_MIXER_NRDEVICES; - MIX(sc).class = 0; /* not used */ - + uaudio_mixer_check_selectors(sc); uaudio_mixer_add_ctl(sc, &MIX(sc)); } @@ -3451,7 +3464,6 @@ uaudio20_mixer_add_selector(struct uaudio_softc *sc, MIX(sc).wIndex = MAKE_WORD(d->bUnitId, sc->sc_mixer_iface_no); MIX(sc).wValue[0] = MAKE_WORD(0, 0); - uaudio20_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).nchan = 1; MIX(sc).type = MIX_SELECTOR; MIX(sc).ctl = SOUND_MIXER_NRDEVICES; @@ -3469,17 +3481,16 @@ uaudio20_mixer_add_selector(struct uaudio_softc *sc, if (MIX(sc).maxval > MAX_SELECTOR_INPUT_PIN) MIX(sc).maxval = MAX_SELECTOR_INPUT_PIN; - MIX(sc).mul = (MIX(sc).maxval - MIX(sc).minval); - for (i = 0; i < MAX_SELECTOR_INPUT_PIN; i++) - MIX(sc).slctrtype[i] = SOUND_MIXER_NRDEVICES; + MIX(sc).mul = MIX(sc).maxval - MIX(sc).minval; for (i = 0; i < MIX(sc).maxval; i++) { - MIX(sc).slctrtype[i] = uaudio20_mixer_feature_name( - &iot[d->baSourceId[i]], &MIX(sc)); + MIX(sc).slctrtype[i] = + uaudio20_mixer_determine_class(&iot[d->baSourceId[i]]); } + for (; i < MAX_SELECTOR_INPUT_PIN; i++) + MIX(sc).slctrtype[i] = SOUND_MIXER_NRDEVICES; - MIX(sc).class = 0; /* not used */ - + uaudio_mixer_check_selectors(sc); uaudio_mixer_add_ctl(sc, &MIX(sc)); } @@ -3540,9 +3551,9 @@ uaudio_mixer_add_feature(struct uaudio_softc *sc, cmask |= uaudio_mixer_feature_get_bmaControls(d, chan); } - if (nchan > MIX_MAX_CHAN) { + if (nchan > MIX_MAX_CHAN) nchan = MIX_MAX_CHAN; - } + MIX(sc).wIndex = MAKE_WORD(d->bUnitId, sc->sc_mixer_iface_no); i = d->bmaControls[d->bControlSize]; @@ -3574,7 +3585,7 @@ uaudio_mixer_add_feature(struct uaudio_softc *sc, continue; } - mixernumber = uaudio_mixer_feature_name(&iot[id], &MIX(sc)); + mixernumber = uaudio_mixer_determine_class(&iot[id]); switch (ctl) { case MUTE_CONTROL: @@ -3689,7 +3700,7 @@ uaudio20_mixer_add_feature(struct uaudio_softc *sc, for (ctl = 3; ctl != 0; ctl <<= 2) { - mixernumber = uaudio20_mixer_feature_name(&iot[id], &MIX(sc)); + mixernumber = uaudio20_mixer_determine_class(&iot[id]); switch (ctl) { case (3 << 0): @@ -3812,7 +3823,6 @@ uaudio_mixer_add_processing_updown(struct uaudio_softc MIX(sc).wIndex = MAKE_WORD(d0->bUnitId, sc->sc_mixer_iface_no); MIX(sc).nchan = 1; MIX(sc).wValue[0] = MAKE_WORD(UD_MODE_SELECT_CONTROL, 0); - uaudio_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).type = MIX_ON_OFF; /* XXX */ for (i = 0; i < ud->bNrModes; i++) { @@ -3846,7 +3856,6 @@ uaudio_mixer_add_processing(struct uaudio_softc *sc, MIX(sc).wIndex = MAKE_WORD(d0->bUnitId, sc->sc_mixer_iface_no); MIX(sc).nchan = 1; MIX(sc).wValue[0] = MAKE_WORD(XX_ENABLE_CONTROL, 0); - uaudio_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).type = MIX_ON_OFF; uaudio_mixer_add_ctl(sc, &MIX(sc)); } @@ -3891,7 +3900,6 @@ uaudio_mixer_add_extension(struct uaudio_softc *sc, MIX(sc).wIndex = MAKE_WORD(d0->bUnitId, sc->sc_mixer_iface_no); MIX(sc).nchan = 1; MIX(sc).wValue[0] = MAKE_WORD(UA_EXT_ENABLE, 0); - uaudio_mixer_determine_class(&iot[id], &MIX(sc)); MIX(sc).type = MIX_ON_OFF; uaudio_mixer_add_ctl(sc, &MIX(sc)); @@ -4321,114 +4329,42 @@ done: return (r); } -static uint16_t -uaudio_mixer_determine_class(const struct uaudio_terminal_node *iot, - struct uaudio_mixer_node *mix) +static bool +uaudio_mixer_foreach_input(const struct uaudio_terminal_node *iot, uint8_t *pindex) { - uint16_t terminal_type = 0x0000; - const struct uaudio_terminal_node *input[2]; - const struct uaudio_terminal_node *output[2]; + uint8_t n; - input[0] = uaudio_mixer_get_input(iot, 0); - input[1] = uaudio_mixer_get_input(iot, 1); + n = *pindex; - output[0] = uaudio_mixer_get_output(iot, 0); - output[1] = uaudio_mixer_get_output(iot, 1); - - /* - * check if there is only - * one output terminal: - */ - if (output[0] && (!output[1])) { - terminal_type = - UGETW(output[0]->u.ot_v1->wTerminalType); + while (1) { + if (!n--) + n = iot->usr.id_max; + if (n == 0) + return (false); + if (iot->usr.bit_input[n / 8] & (1 << (n % 8))) + break; } - /* - * If the only output terminal is USB, - * the class is UAC_RECORD. - */ - if ((terminal_type & 0xff00) == (UAT_UNDEFINED & 0xff00)) { - - mix->class = UAC_RECORD; - if (input[0] && (!input[1])) { - terminal_type = - UGETW(input[0]->u.it_v1->wTerminalType); - } else { - terminal_type = 0; - } - goto done; - } - /* - * if the unit is connected to just - * one input terminal, the - * class is UAC_INPUT: - */ - if (input[0] && (!input[1])) { - mix->class = UAC_INPUT; - terminal_type = - UGETW(input[0]->u.it_v1->wTerminalType); - goto done; - } - /* - * Otherwise, the class is UAC_OUTPUT. - */ - mix->class = UAC_OUTPUT; -done: - return (terminal_type); + *pindex = n; + return (true); } -static uint16_t -uaudio20_mixer_determine_class(const struct uaudio_terminal_node *iot, - struct uaudio_mixer_node *mix) +static bool +uaudio_mixer_foreach_output(const struct uaudio_terminal_node *iot, uint8_t *pindex) { - uint16_t terminal_type = 0x0000; - const struct uaudio_terminal_node *input[2]; - const struct uaudio_terminal_node *output[2]; + uint8_t n; - input[0] = uaudio_mixer_get_input(iot, 0); - input[1] = uaudio_mixer_get_input(iot, 1); + n = *pindex; - output[0] = uaudio_mixer_get_output(iot, 0); - output[1] = uaudio_mixer_get_output(iot, 1); - - /* - * check if there is only - * one output terminal: - */ - if (output[0] && (!output[1])) - terminal_type = UGETW(output[0]->u.ot_v2->wTerminalType); - /* - * If the only output terminal is USB, - * the class is UAC_RECORD. - */ - if ((terminal_type & 0xff00) == (UAT_UNDEFINED & 0xff00)) { - - mix->class = UAC_RECORD; - if (input[0] && (!input[1])) { - terminal_type = - UGETW(input[0]->u.it_v2->wTerminalType); - } else { - terminal_type = 0; - } - goto done; + while (1) { + if (!n--) + n = iot->usr.id_max; + if (n == 0) + return (false); + if (iot->usr.bit_output[n / 8] & (1 << (n % 8))) + break; } - /* - * if the unit is connected to just - * one input terminal, the - * class is UAC_INPUT: - */ - if (input[0] && (!input[1])) { - mix->class = UAC_INPUT; - terminal_type = - UGETW(input[0]->u.it_v2->wTerminalType); - goto done; - } - /* - * Otherwise, the class is UAC_OUTPUT. - */ - mix->class = UAC_OUTPUT; -done: - return (terminal_type); + *pindex = n; + return (true); } struct uaudio_tt_to_feature { @@ -4438,8 +4374,6 @@ struct uaudio_tt_to_feature { static const struct uaudio_tt_to_feature uaudio_tt_to_feature[] = { - {UAT_STREAM, SOUND_MIXER_PCM}, - {UATI_MICROPHONE, SOUND_MIXER_MIC}, {UATI_DESKMICROPHONE, SOUND_MIXER_MIC}, {UATI_PERSONALMICROPHONE, SOUND_MIXER_MIC}, @@ -4447,11 +4381,6 @@ static const struct uaudio_tt_to_feature uaudio_tt_to_ {UATI_MICROPHONEARRAY, SOUND_MIXER_MIC}, {UATI_PROCMICROPHONEARR, SOUND_MIXER_MIC}, - {UATO_SPEAKER, SOUND_MIXER_SPEAKER}, - {UATO_DESKTOPSPEAKER, SOUND_MIXER_SPEAKER}, - {UATO_ROOMSPEAKER, SOUND_MIXER_SPEAKER}, - {UATO_COMMSPEAKER, SOUND_MIXER_SPEAKER}, - {UATE_ANALOGCONN, SOUND_MIXER_LINE}, {UATE_LINECONN, SOUND_MIXER_LINE}, {UATE_LEGACYCONN, SOUND_MIXER_LINE}, @@ -4469,63 +4398,21 @@ static const struct uaudio_tt_to_feature uaudio_tt_to_ {UATF_DVDAUDIO, SOUND_MIXER_VIDEO}, {UATF_TVTUNERAUDIO, SOUND_MIXER_VIDEO}, - /* telephony terminal types */ - {UATT_UNDEFINED, SOUND_MIXER_PHONEIN}, /* SOUND_MIXER_PHONEOUT */ - {UATT_PHONELINE, SOUND_MIXER_PHONEIN}, /* SOUND_MIXER_PHONEOUT */ - {UATT_TELEPHONE, SOUND_MIXER_PHONEIN}, /* SOUND_MIXER_PHONEOUT */ - {UATT_DOWNLINEPHONE, SOUND_MIXER_PHONEIN}, /* SOUND_MIXER_PHONEOUT */ - {UATF_RADIORECV, SOUND_MIXER_RADIO}, {UATF_RADIOXMIT, SOUND_MIXER_RADIO}, - {UAT_UNDEFINED, SOUND_MIXER_VOLUME}, - {UAT_VENDOR, SOUND_MIXER_VOLUME}, - {UATI_UNDEFINED, SOUND_MIXER_VOLUME}, - - /* output terminal types */ - {UATO_UNDEFINED, SOUND_MIXER_VOLUME}, - {UATO_DISPLAYAUDIO, SOUND_MIXER_VOLUME}, - {UATO_SUBWOOFER, SOUND_MIXER_VOLUME}, - {UATO_HEADPHONES, SOUND_MIXER_VOLUME}, - - /* bidir terminal types */ - {UATB_UNDEFINED, SOUND_MIXER_VOLUME}, - {UATB_HANDSET, SOUND_MIXER_VOLUME}, - {UATB_HEADSET, SOUND_MIXER_VOLUME}, - {UATB_SPEAKERPHONE, SOUND_MIXER_VOLUME}, - {UATB_SPEAKERPHONEESUP, SOUND_MIXER_VOLUME}, - {UATB_SPEAKERPHONEECANC, SOUND_MIXER_VOLUME}, - - /* external terminal types */ - {UATE_UNDEFINED, SOUND_MIXER_VOLUME}, - - /* embedded function terminal types */ - {UATF_UNDEFINED, SOUND_MIXER_VOLUME}, - {UATF_CALIBNOISE, SOUND_MIXER_VOLUME}, - {UATF_EQUNOISE, SOUND_MIXER_VOLUME}, - {UATF_DAT, SOUND_MIXER_VOLUME}, - {UATF_DCC, SOUND_MIXER_VOLUME}, - {UATF_MINIDISK, SOUND_MIXER_VOLUME}, - {UATF_ANALOGTAPE, SOUND_MIXER_VOLUME}, - {UATF_PHONOGRAPH, SOUND_MIXER_VOLUME}, - {UATF_VCRAUDIO, SOUND_MIXER_VOLUME}, - {UATF_SATELLITE, SOUND_MIXER_VOLUME}, - {UATF_CABLETUNER, SOUND_MIXER_VOLUME}, - {UATF_DSS, SOUND_MIXER_VOLUME}, - {UATF_MULTITRACK, SOUND_MIXER_VOLUME}, - {0xffff, SOUND_MIXER_VOLUME}, - - /* end */ - {} + {} /* END */ }; static uint16_t -uaudio_mixer_feature_name_sub(uint16_t terminal_type) +uaudio_mixer_get_feature_by_tt(uint16_t terminal_type, uint16_t default_type) { const struct uaudio_tt_to_feature *uat = uaudio_tt_to_feature; uint16_t retval; - while (1) { + if (terminal_type == 0) { + retval = default_type; + } else while (1) { if (uat->terminal_type == 0) { switch (terminal_type >> 8) { case UATI_UNDEFINED >> 8: @@ -4534,8 +4421,11 @@ uaudio_mixer_feature_name_sub(uint16_t terminal_type) case UATO_UNDEFINED >> 8: retval = SOUND_MIXER_PCM; goto done; + case UATT_UNDEFINED >> 8: + retval = SOUND_MIXER_PHONEIN; + goto done; default: - retval = SOUND_MIXER_VOLUME; + retval = default_type; goto done; } } else if (uat->terminal_type == terminal_type) { @@ -4545,65 +4435,138 @@ uaudio_mixer_feature_name_sub(uint16_t terminal_type) uat++; } done: - DPRINTF("terminal_type=0x%04x -> %d\n", - terminal_type, retval); + DPRINTF("terminal_type=0x%04x RET=%d DEF=%d\n", + terminal_type, retval, default_type); return (retval); } static uint16_t -uaudio_mixer_feature_name(const struct uaudio_terminal_node *iot, - struct uaudio_mixer_node *mix) +uaudio_mixer_determine_class(const struct uaudio_terminal_node *iot) { - uint16_t terminal_type = uaudio_mixer_determine_class(iot, mix); + const struct uaudio_terminal_node *ptr; + uint16_t terminal_type_input = 0; + uint16_t terminal_type_output = 0; + uint16_t temp; + uint8_t match = 0; + uint8_t i; - if (mix->class == UAC_RECORD && terminal_type == 0) + for (i = 0; uaudio_mixer_foreach_input(iot, &i); ) { + ptr = iot->root + i; + temp = UGETW(ptr->u.it_v1->wTerminalType); + + if (temp == 0) + continue; + else if (temp == UAT_STREAM) + match |= 1; + else if ((temp & 0xFF00) != (UAT_UNDEFINED & 0xff00)) + terminal_type_input = temp; + } + + for (i = 0; uaudio_mixer_foreach_output(iot, &i); ) { + ptr = iot->root + i; + temp = UGETW(ptr->u.ot_v1->wTerminalType); + + if (temp == 0) + continue; + else if (temp == UAT_STREAM) + match |= 2; + else if ((temp & 0xFF00) != (UAT_UNDEFINED & 0xff00)) + terminal_type_output = temp; + } + + DPRINTF("MATCH=%d IN=0x%04x OUT=0x%04x\n", + match, terminal_type_input, terminal_type_output); + + switch (match) { + case 0: /* not connected to USB */ + if (terminal_type_output != 0) { + return (uaudio_mixer_get_feature_by_tt( + terminal_type_output, SOUND_MIXER_MONITOR)); + } else { + return (uaudio_mixer_get_feature_by_tt( + terminal_type_input, SOUND_MIXER_MONITOR)); + } + case 3: /* connected to both USB input and USB output */ return (SOUND_MIXER_IMIX); - return (uaudio_mixer_feature_name_sub(terminal_type)); + case 2: /* connected to USB output */ + return (uaudio_mixer_get_feature_by_tt( + terminal_type_input, SOUND_MIXER_RECLEV)); + case 1: /* connected to USB input */ + return (uaudio_mixer_get_feature_by_tt( + terminal_type_output, SOUND_MIXER_PCM)); + default: + return (SOUND_MIXER_NRDEVICES); + } } static uint16_t -uaudio20_mixer_feature_name(const struct uaudio_terminal_node *iot, - struct uaudio_mixer_node *mix) +uaudio20_mixer_determine_class(const struct uaudio_terminal_node *iot) { - uint16_t terminal_type = uaudio20_mixer_determine_class(iot, mix); + const struct uaudio_terminal_node *ptr; + uint16_t terminal_type_input = 0; + uint16_t terminal_type_output = 0; + uint16_t temp; + uint8_t match = 0; + uint8_t i; - if (mix->class == UAC_RECORD && terminal_type == 0) - return (SOUND_MIXER_IMIX); - return (uaudio_mixer_feature_name_sub(terminal_type)); -} + for (i = 0; uaudio_mixer_foreach_input(iot, &i); ) { + ptr = iot->root + i; + temp = UGETW(ptr->u.it_v2->wTerminalType); -static const struct uaudio_terminal_node * -uaudio_mixer_get_input(const struct uaudio_terminal_node *iot, uint8_t i) -{ - struct uaudio_terminal_node *root = iot->root; - uint8_t n; + if (temp == 0) + continue; + else if (temp == UAT_STREAM) + match |= 1; + else if ((temp & 0xFF00) != (UAT_UNDEFINED & 0xff00)) + terminal_type_input = temp; + } - n = iot->usr.id_max; - do { - if (iot->usr.bit_input[n / 8] & (1 << (n % 8))) { - if (!i--) - return (root + n); - } - } while (n--); + for (i = 0; uaudio_mixer_foreach_output(iot, &i); ) { + ptr = iot->root + i; + temp = UGETW(ptr->u.ot_v2->wTerminalType); - return (NULL); -} + if (temp == 0) + continue; + else if (temp == UAT_STREAM) + match |= 2; + else if ((temp & 0xFF00) != (UAT_UNDEFINED & 0xff00)) + terminal_type_output = temp; + } -static const struct uaudio_terminal_node * -uaudio_mixer_get_output(const struct uaudio_terminal_node *iot, uint8_t i) -{ - struct uaudio_terminal_node *root = iot->root; - uint8_t n; + DPRINTF("MATCH=%d IN=0x%04x OUT=0x%04x\n", + match, terminal_type_input, terminal_type_output); - n = iot->usr.id_max; - do { - if (iot->usr.bit_output[n / 8] & (1 << (n % 8))) { - if (!i--) - return (root + n); + switch (match) { + case 0: /* not connected to USB */ + if (terminal_type_output != 0) { + return (uaudio_mixer_get_feature_by_tt( + terminal_type_output, SOUND_MIXER_MONITOR)); + } else { + return (uaudio_mixer_get_feature_by_tt( + terminal_type_input, SOUND_MIXER_MONITOR)); } - } while (n--); + case 3: /* connected to both USB input and USB output */ + return (SOUND_MIXER_IMIX); + case 2: /* connected to USB output */ + return (uaudio_mixer_get_feature_by_tt( + terminal_type_input, SOUND_MIXER_RECLEV)); + case 1: /* connected to USB input */ + return (uaudio_mixer_get_feature_by_tt( + terminal_type_output, SOUND_MIXER_PCM)); + default: + return (SOUND_MIXER_NRDEVICES); + } +} - return (NULL); +static void +uaudio_mixer_merge_outputs(struct uaudio_search_result *dst, + const struct uaudio_search_result *src) +{ + const uint8_t max = sizeof(src->bit_output) / sizeof(src->bit_output[0]); + uint8_t x; + + for (x = 0; x != max; x++) + dst->bit_output[x] |= src->bit_output[x]; } static void @@ -4614,9 +4577,7 @@ uaudio_mixer_find_inputs_sub(struct uaudio_terminal_no struct uaudio_terminal_node *iot; uint8_t n; uint8_t i; - uint8_t is_last; -top: for (n = 0; n < n_id; n++) { i = p_id[n]; @@ -4633,72 +4594,48 @@ top: if (iot->u.desc == NULL) continue; - is_last = ((n + 1) == n_id); - switch (iot->u.desc->bDescriptorSubtype) { case UDESCSUB_AC_INPUT: + uaudio_mixer_merge_outputs(&iot->usr, info); info->bit_input[i / 8] |= (1 << (i % 8)); break; case UDESCSUB_AC_FEATURE: - if (is_last) { - p_id = &iot->u.fu_v1->bSourceId; - n_id = 1; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio_mixer_find_inputs_sub( root, &iot->u.fu_v1->bSourceId, 1, info); break; case UDESCSUB_AC_OUTPUT: - if (is_last) { - p_id = &iot->u.ot_v1->bSourceId; - n_id = 1; - goto top; - } + info->bit_output[i / 8] |= (1 << (i % 8)); uaudio_mixer_find_inputs_sub( root, &iot->u.ot_v1->bSourceId, 1, info); + info->bit_output[i / 8] &= ~(1 << (i % 8)); break; case UDESCSUB_AC_MIXER: - if (is_last) { - p_id = iot->u.mu_v1->baSourceId; - n_id = iot->u.mu_v1->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio_mixer_find_inputs_sub( root, iot->u.mu_v1->baSourceId, iot->u.mu_v1->bNrInPins, info); break; case UDESCSUB_AC_SELECTOR: - if (is_last) { - p_id = iot->u.su_v1->baSourceId; - n_id = iot->u.su_v1->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio_mixer_find_inputs_sub( root, iot->u.su_v1->baSourceId, iot->u.su_v1->bNrInPins, info); break; case UDESCSUB_AC_PROCESSING: - if (is_last) { - p_id = iot->u.pu_v1->baSourceId; - n_id = iot->u.pu_v1->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio_mixer_find_inputs_sub( root, iot->u.pu_v1->baSourceId, iot->u.pu_v1->bNrInPins, info); break; case UDESCSUB_AC_EXTENSION: - if (is_last) { - p_id = iot->u.eu_v1->baSourceId; - n_id = iot->u.eu_v1->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio_mixer_find_inputs_sub( root, iot->u.eu_v1->baSourceId, iot->u.eu_v1->bNrInPins, info); @@ -4718,9 +4655,7 @@ uaudio20_mixer_find_inputs_sub(struct uaudio_terminal_ struct uaudio_terminal_node *iot; uint8_t n; uint8_t i; - uint8_t is_last; -top: for (n = 0; n < n_id; n++) { i = p_id[n]; @@ -4737,94 +4672,62 @@ top: if (iot->u.desc == NULL) continue; - is_last = ((n + 1) == n_id); - switch (iot->u.desc->bDescriptorSubtype) { case UDESCSUB_AC_INPUT: + uaudio_mixer_merge_outputs(&iot->usr, info); info->bit_input[i / 8] |= (1 << (i % 8)); break; case UDESCSUB_AC_OUTPUT: - if (is_last) { - p_id = &iot->u.ot_v2->bSourceId; - n_id = 1; - goto top; - } + info->bit_output[i / 8] |= (1 << (i % 8)); uaudio20_mixer_find_inputs_sub( root, &iot->u.ot_v2->bSourceId, 1, info); + info->bit_output[i / 8] &= ~(1 << (i % 8)); break; case UDESCSUB_AC_MIXER: - if (is_last) { - p_id = iot->u.mu_v2->baSourceId; - n_id = iot->u.mu_v2->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, iot->u.mu_v2->baSourceId, iot->u.mu_v2->bNrInPins, info); break; case UDESCSUB_AC_SELECTOR: - if (is_last) { - p_id = iot->u.su_v2->baSourceId; - n_id = iot->u.su_v2->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, iot->u.su_v2->baSourceId, iot->u.su_v2->bNrInPins, info); break; case UDESCSUB_AC_SAMPLE_RT: - if (is_last) { - p_id = &iot->u.ru_v2->bSourceId; - n_id = 1; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, &iot->u.ru_v2->bSourceId, 1, info); break; case UDESCSUB_AC_EFFECT: - if (is_last) { - p_id = &iot->u.ef_v2->bSourceId; - n_id = 1; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, &iot->u.ef_v2->bSourceId, 1, info); break; case UDESCSUB_AC_FEATURE: - if (is_last) { - p_id = &iot->u.fu_v2->bSourceId; - n_id = 1; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, &iot->u.fu_v2->bSourceId, 1, info); break; case UDESCSUB_AC_PROCESSING_V2: - if (is_last) { - p_id = iot->u.pu_v2->baSourceId; - n_id = iot->u.pu_v2->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, iot->u.pu_v2->baSourceId, iot->u.pu_v2->bNrInPins, info); break; case UDESCSUB_AC_EXTENSION_V2: - if (is_last) { - p_id = iot->u.eu_v2->baSourceId; - n_id = iot->u.eu_v2->bNrInPins; - goto top; - } + uaudio_mixer_merge_outputs(&iot->usr, info); uaudio20_mixer_find_inputs_sub( root, iot->u.eu_v2->baSourceId, iot->u.eu_v2->bNrInPins, info); @@ -4933,31 +4836,6 @@ top: } static void -uaudio_mixer_find_outputs_sub(struct uaudio_terminal_node *root, uint8_t id, - uint8_t n_id, struct uaudio_search_result *info) -{ - struct uaudio_terminal_node *iot = (root + id); - uint8_t j; - - j = n_id; - do { - if ((j != id) && ((root + j)->u.desc) && - ((root + j)->u.desc->bDescriptorSubtype == UDESCSUB_AC_OUTPUT)) { - - /* - * "j" (output) <--- virtual wire <--- "id" (input) - * - * if "j" has "id" on the input, then "id" have "j" on - * the output, because they are connected: - */ - if ((root + j)->usr.bit_input[id / 8] & (1 << (id % 8))) { - iot->usr.bit_output[j / 8] |= (1 << (j % 8)); - } - } - } while (j--); -} - -static void uaudio_mixer_fill_info(struct uaudio_softc *sc, struct usb_device *udev, void *desc) { @@ -5049,16 +4927,6 @@ uaudio_mixer_fill_info(struct uaudio_softc *sc, } } while (i--); - /* - * determine outputs for - * all nodes in the tree: - */ - i = ID_max; - do { - uaudio_mixer_find_outputs_sub(iot, - i, ID_max, &((iot + i)->usr)); - } while (i--); - /* set "id_max" and "root" */ i = ID_max; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-stable@freebsd.org Mon Apr 13 16:29:04 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 4810B2C2E19; Mon, 13 Apr 2020 16:29:04 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491Db41DJbz3MTB; Mon, 13 Apr 2020 16:29:04 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 255FD1E3F9; Mon, 13 Apr 2020 16:29:04 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGT4AL087341; Mon, 13 Apr 2020 16:29:04 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGT4B4087340; Mon, 13 Apr 2020 16:29:04 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131629.03DGT4B4087340@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:29:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359882 - stable/12/sys/dev/sound/pcm X-SVN-Group: stable-12 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/12/sys/dev/sound/pcm X-SVN-Commit-Revision: 359882 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:29:04 -0000 Author: hselasky Date: Mon Apr 13 16:29:03 2020 New Revision: 359882 URL: https://svnweb.freebsd.org/changeset/base/359882 Log: MFC r359356: Change default microphone level from 0 to 25. Discussed with: Horse Ma Sponsored by: Mellanox Technologies Modified: stable/12/sys/dev/sound/pcm/mixer.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/sound/pcm/mixer.c ============================================================================== --- stable/12/sys/dev/sound/pcm/mixer.c Mon Apr 13 16:28:15 2020 (r359881) +++ stable/12/sys/dev/sound/pcm/mixer.c Mon Apr 13 16:29:03 2020 (r359882) @@ -83,7 +83,7 @@ static u_int16_t snd_mixerdefaults[SOUND_MIXER_NRDEVIC [SOUND_MIXER_PCM] = 75, [SOUND_MIXER_SPEAKER] = 75, [SOUND_MIXER_LINE] = 75, - [SOUND_MIXER_MIC] = 0, + [SOUND_MIXER_MIC] = 25, [SOUND_MIXER_CD] = 75, [SOUND_MIXER_IGAIN] = 0, [SOUND_MIXER_LINE1] = 75, From owner-svn-src-stable@freebsd.org Mon Apr 13 16:29:35 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 9DC342C2E8B; Mon, 13 Apr 2020 16:29:35 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491Dbg3gpvz3MbT; Mon, 13 Apr 2020 16:29:35 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7988B1E3FA; Mon, 13 Apr 2020 16:29:35 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGTZTX087433; Mon, 13 Apr 2020 16:29:35 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGTZrI087432; Mon, 13 Apr 2020 16:29:35 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131629.03DGTZrI087432@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:29:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359883 - stable/11/sys/dev/sound/pcm X-SVN-Group: stable-11 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/11/sys/dev/sound/pcm X-SVN-Commit-Revision: 359883 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:29:35 -0000 Author: hselasky Date: Mon Apr 13 16:29:35 2020 New Revision: 359883 URL: https://svnweb.freebsd.org/changeset/base/359883 Log: MFC r359356: Change default microphone level from 0 to 25. Discussed with: Horse Ma Sponsored by: Mellanox Technologies Modified: stable/11/sys/dev/sound/pcm/mixer.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/dev/sound/pcm/mixer.c ============================================================================== --- stable/11/sys/dev/sound/pcm/mixer.c Mon Apr 13 16:29:03 2020 (r359882) +++ stable/11/sys/dev/sound/pcm/mixer.c Mon Apr 13 16:29:35 2020 (r359883) @@ -81,7 +81,7 @@ static u_int16_t snd_mixerdefaults[SOUND_MIXER_NRDEVIC [SOUND_MIXER_PCM] = 75, [SOUND_MIXER_SPEAKER] = 75, [SOUND_MIXER_LINE] = 75, - [SOUND_MIXER_MIC] = 0, + [SOUND_MIXER_MIC] = 25, [SOUND_MIXER_CD] = 75, [SOUND_MIXER_IGAIN] = 0, [SOUND_MIXER_LINE1] = 75, From owner-svn-src-stable@freebsd.org Mon Apr 13 16:30:10 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B3C532C2F07; Mon, 13 Apr 2020 16:30:10 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DcL3tG3z3Mjb; Mon, 13 Apr 2020 16:30:10 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 801E81E402; Mon, 13 Apr 2020 16:30:10 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGUAVL087568; Mon, 13 Apr 2020 16:30:10 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGUAhB087567; Mon, 13 Apr 2020 16:30:10 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131630.03DGUAhB087567@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:30:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r359884 - stable/10/sys/dev/sound/pcm X-SVN-Group: stable-10 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/10/sys/dev/sound/pcm X-SVN-Commit-Revision: 359884 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:30:10 -0000 Author: hselasky Date: Mon Apr 13 16:30:10 2020 New Revision: 359884 URL: https://svnweb.freebsd.org/changeset/base/359884 Log: MFC r359356: Change default microphone level from 0 to 25. Discussed with: Horse Ma Sponsored by: Mellanox Technologies Modified: stable/10/sys/dev/sound/pcm/mixer.c Directory Properties: stable/10/ (props changed) Modified: stable/10/sys/dev/sound/pcm/mixer.c ============================================================================== --- stable/10/sys/dev/sound/pcm/mixer.c Mon Apr 13 16:29:35 2020 (r359883) +++ stable/10/sys/dev/sound/pcm/mixer.c Mon Apr 13 16:30:10 2020 (r359884) @@ -82,7 +82,7 @@ static u_int16_t snd_mixerdefaults[SOUND_MIXER_NRDEVIC [SOUND_MIXER_PCM] = 75, [SOUND_MIXER_SPEAKER] = 75, [SOUND_MIXER_LINE] = 75, - [SOUND_MIXER_MIC] = 0, + [SOUND_MIXER_MIC] = 25, [SOUND_MIXER_CD] = 75, [SOUND_MIXER_IGAIN] = 0, [SOUND_MIXER_LINE1] = 75, From owner-svn-src-stable@freebsd.org Mon Apr 13 16:31:13 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D14712C30EC; Mon, 13 Apr 2020 16:31:13 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DdY5CLpz3MvS; Mon, 13 Apr 2020 16:31:13 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id AE1191E449; Mon, 13 Apr 2020 16:31:13 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGVD6l092311; Mon, 13 Apr 2020 16:31:13 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGVD46092309; Mon, 13 Apr 2020 16:31:13 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131631.03DGVD46092309@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:31:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359885 - stable/12/sys/dev/sound/pcm X-SVN-Group: stable-12 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/12/sys/dev/sound/pcm X-SVN-Commit-Revision: 359885 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:31:13 -0000 Author: hselasky Date: Mon Apr 13 16:31:13 2020 New Revision: 359885 URL: https://svnweb.freebsd.org/changeset/base/359885 Log: MFC r359440: Implement new mixer API to return the device pointer based on the mixer pointer. Sponsored by: Mellanox Technologies Modified: stable/12/sys/dev/sound/pcm/mixer.c stable/12/sys/dev/sound/pcm/mixer.h Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/sound/pcm/mixer.c ============================================================================== --- stable/12/sys/dev/sound/pcm/mixer.c Mon Apr 13 16:30:10 2020 (r359884) +++ stable/12/sys/dev/sound/pcm/mixer.c Mon Apr 13 16:31:13 2020 (r359885) @@ -1032,6 +1032,14 @@ mix_get_type(struct snd_mixer *m) return (m->type); } +device_t +mix_get_dev(struct snd_mixer *m) +{ + KASSERT(m != NULL, ("NULL snd_mixer")); + + return (m->dev); +} + /* ----------------------------------------------------------------------- */ static int Modified: stable/12/sys/dev/sound/pcm/mixer.h ============================================================================== --- stable/12/sys/dev/sound/pcm/mixer.h Mon Apr 13 16:30:10 2020 (r359884) +++ stable/12/sys/dev/sound/pcm/mixer.h Mon Apr 13 16:31:13 2020 (r359885) @@ -56,6 +56,7 @@ int mix_get(struct snd_mixer *m, u_int dev); int mix_setrecsrc(struct snd_mixer *m, u_int32_t src); u_int32_t mix_getrecsrc(struct snd_mixer *m); int mix_get_type(struct snd_mixer *m); +device_t mix_get_dev(struct snd_mixer *m); void mix_setdevs(struct snd_mixer *m, u_int32_t v); void mix_setrecdevs(struct snd_mixer *m, u_int32_t v); From owner-svn-src-stable@freebsd.org Mon Apr 13 16:31:47 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3FF172C3166; Mon, 13 Apr 2020 16:31:47 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DfC12GMz3NBh; Mon, 13 Apr 2020 16:31:47 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1A9AD1E5A3; Mon, 13 Apr 2020 16:31:47 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGVkG0092395; Mon, 13 Apr 2020 16:31:46 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGVkNM092394; Mon, 13 Apr 2020 16:31:46 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131631.03DGVkNM092394@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:31:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359886 - stable/11/sys/dev/sound/pcm X-SVN-Group: stable-11 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/11/sys/dev/sound/pcm X-SVN-Commit-Revision: 359886 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:31:47 -0000 Author: hselasky Date: Mon Apr 13 16:31:46 2020 New Revision: 359886 URL: https://svnweb.freebsd.org/changeset/base/359886 Log: MFC r359440: Implement new mixer API to return the device pointer based on the mixer pointer. Sponsored by: Mellanox Technologies Modified: stable/11/sys/dev/sound/pcm/mixer.c stable/11/sys/dev/sound/pcm/mixer.h Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/dev/sound/pcm/mixer.c ============================================================================== --- stable/11/sys/dev/sound/pcm/mixer.c Mon Apr 13 16:31:13 2020 (r359885) +++ stable/11/sys/dev/sound/pcm/mixer.c Mon Apr 13 16:31:46 2020 (r359886) @@ -1030,6 +1030,14 @@ mix_get_type(struct snd_mixer *m) return (m->type); } +device_t +mix_get_dev(struct snd_mixer *m) +{ + KASSERT(m != NULL, ("NULL snd_mixer")); + + return (m->dev); +} + /* ----------------------------------------------------------------------- */ static int Modified: stable/11/sys/dev/sound/pcm/mixer.h ============================================================================== --- stable/11/sys/dev/sound/pcm/mixer.h Mon Apr 13 16:31:13 2020 (r359885) +++ stable/11/sys/dev/sound/pcm/mixer.h Mon Apr 13 16:31:46 2020 (r359886) @@ -54,6 +54,7 @@ int mix_get(struct snd_mixer *m, u_int dev); int mix_setrecsrc(struct snd_mixer *m, u_int32_t src); u_int32_t mix_getrecsrc(struct snd_mixer *m); int mix_get_type(struct snd_mixer *m); +device_t mix_get_dev(struct snd_mixer *m); void mix_setdevs(struct snd_mixer *m, u_int32_t v); void mix_setrecdevs(struct snd_mixer *m, u_int32_t v); From owner-svn-src-stable@freebsd.org Mon Apr 13 16:32:19 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 2A5AA2C31D6; Mon, 13 Apr 2020 16:32:19 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491Dfq0JTqz3NLm; Mon, 13 Apr 2020 16:32:19 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 05B5A1E5EB; Mon, 13 Apr 2020 16:32:19 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGWIjI093216; Mon, 13 Apr 2020 16:32:18 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGWIj5093214; Mon, 13 Apr 2020 16:32:18 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131632.03DGWIj5093214@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:32:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r359887 - stable/10/sys/dev/sound/pcm X-SVN-Group: stable-10 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/10/sys/dev/sound/pcm X-SVN-Commit-Revision: 359887 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:32:19 -0000 Author: hselasky Date: Mon Apr 13 16:32:18 2020 New Revision: 359887 URL: https://svnweb.freebsd.org/changeset/base/359887 Log: MFC r359440: Implement new mixer API to return the device pointer based on the mixer pointer. Sponsored by: Mellanox Technologies Modified: stable/10/sys/dev/sound/pcm/mixer.c stable/10/sys/dev/sound/pcm/mixer.h Directory Properties: stable/10/ (props changed) Modified: stable/10/sys/dev/sound/pcm/mixer.c ============================================================================== --- stable/10/sys/dev/sound/pcm/mixer.c Mon Apr 13 16:31:46 2020 (r359886) +++ stable/10/sys/dev/sound/pcm/mixer.c Mon Apr 13 16:32:18 2020 (r359887) @@ -1031,6 +1031,14 @@ mix_get_type(struct snd_mixer *m) return (m->type); } +device_t +mix_get_dev(struct snd_mixer *m) +{ + KASSERT(m != NULL, ("NULL snd_mixer")); + + return (m->dev); +} + /* ----------------------------------------------------------------------- */ static int Modified: stable/10/sys/dev/sound/pcm/mixer.h ============================================================================== --- stable/10/sys/dev/sound/pcm/mixer.h Mon Apr 13 16:31:46 2020 (r359886) +++ stable/10/sys/dev/sound/pcm/mixer.h Mon Apr 13 16:32:18 2020 (r359887) @@ -54,6 +54,7 @@ int mix_get(struct snd_mixer *m, u_int dev); int mix_setrecsrc(struct snd_mixer *m, u_int32_t src); u_int32_t mix_getrecsrc(struct snd_mixer *m); int mix_get_type(struct snd_mixer *m); +device_t mix_get_dev(struct snd_mixer *m); void mix_setdevs(struct snd_mixer *m, u_int32_t v); void mix_setrecdevs(struct snd_mixer *m, u_int32_t v); From owner-svn-src-stable@freebsd.org Mon Apr 13 16:33:11 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 35EB42C3326; Mon, 13 Apr 2020 16:33:11 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491Dgq127lz3NdG; Mon, 13 Apr 2020 16:33:11 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1DF751E604; Mon, 13 Apr 2020 16:33:11 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGXBcO093338; Mon, 13 Apr 2020 16:33:11 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGXA8O093333; Mon, 13 Apr 2020 16:33:10 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131633.03DGXA8O093333@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:33:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359888 - stable/12/sys/dev/sound/usb X-SVN-Group: stable-12 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/12/sys/dev/sound/usb X-SVN-Commit-Revision: 359888 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:33:11 -0000 Author: hselasky Date: Mon Apr 13 16:33:10 2020 New Revision: 359888 URL: https://svnweb.freebsd.org/changeset/base/359888 Log: MFC r359446: Add support for multiple playback and recording devices per physical USB audio device. This requires some structural refactoring inside the driver, mostly about converting existing audio channel structures into arrays. The main audio mixer is provided by the first PCM instance. The non-first audio instances may only have a software mixer for PCM playback. Tested by: Horse Ma Sponsored by: Mellanox Technologies Modified: stable/12/sys/dev/sound/usb/uaudio.c stable/12/sys/dev/sound/usb/uaudio.h stable/12/sys/dev/sound/usb/uaudio_pcm.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/12/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:32:18 2020 (r359887) +++ stable/12/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:33:10 2020 (r359888) @@ -260,6 +260,8 @@ struct uaudio_chan { #define CHAN_OP_START 1 #define CHAN_OP_STOP 2 #define CHAN_OP_DRAIN 3 + + uint8_t iface_index; }; #define UMIDI_EMB_JACK_MAX 16 /* units */ @@ -345,37 +347,45 @@ struct uaudio_hid { #define UAUDIO_SPDIF_OUT_96K 0x04 /* Out sample rate = 96K */ #define UAUDIO_SPDIF_IN_MIX 0x10 /* Input mix enable */ +#define UAUDIO_MAX_CHILD 2 + +struct uaudio_softc_child { + device_t pcm_device; + struct mtx *mixer_lock; + struct snd_mixer *mixer_dev; + + uint32_t mix_info; + uint32_t recsrc_info; + + uint8_t pcm_registered:1; + uint8_t mixer_init:1; +}; + struct uaudio_softc { struct sbuf sc_sndstat; struct sndcard_func sc_sndcard_func; - struct uaudio_chan sc_rec_chan; - struct uaudio_chan sc_play_chan; + struct uaudio_chan sc_rec_chan[UAUDIO_MAX_CHILD]; + struct uaudio_chan sc_play_chan[UAUDIO_MAX_CHILD]; struct umidi_chan sc_midi_chan; struct uaudio_hid sc_hid; struct uaudio_search_result sc_mixer_clocks; struct uaudio_mixer_node sc_mixer_node; struct uaudio_configure_msg sc_config_msg[2]; + struct uaudio_softc_child sc_child[UAUDIO_MAX_CHILD]; - struct mtx *sc_mixer_lock; - struct snd_mixer *sc_mixer_dev; struct usb_device *sc_udev; struct usb_xfer *sc_mixer_xfer[1]; struct uaudio_mixer_node *sc_mixer_root; struct uaudio_mixer_node *sc_mixer_curr; int (*sc_set_spdif_fn) (struct uaudio_softc *, int); - uint32_t sc_mix_info; - uint32_t sc_recsrc_info; - uint16_t sc_audio_rev; uint16_t sc_mixer_count; - uint8_t sc_sndstat_valid; uint8_t sc_mixer_iface_index; uint8_t sc_mixer_iface_no; uint8_t sc_mixer_chan; - uint8_t sc_pcm_registered:1; - uint8_t sc_mixer_init:1; + uint8_t sc_sndstat_valid:1; uint8_t sc_uq_audio_swap_lr:1; uint8_t sc_uq_au_inp_async:1; uint8_t sc_uq_au_no_xu:1; @@ -475,7 +485,7 @@ static usb_proc_callback_t uaudio_configure_msg; static int uaudio_mixer_sysctl_handler(SYSCTL_HANDLER_ARGS); static void uaudio_mixer_ctl_free(struct uaudio_softc *); -static void uaudio_mixer_register_sysctl(struct uaudio_softc *, device_t); +static void uaudio_mixer_register_sysctl(struct uaudio_softc *, device_t, unsigned); static void uaudio_mixer_reload_all(struct uaudio_softc *); static void uaudio_mixer_controls_create_ftu(struct uaudio_softc *); @@ -535,7 +545,7 @@ static void uaudio_mixer_add_ctl(struct uaudio_softc * static void uaudio_mixer_fill_info(struct uaudio_softc *, struct usb_device *, void *); static int uaudio_mixer_signext(uint8_t, int); -static void uaudio_mixer_init(struct uaudio_softc *); +static void uaudio_mixer_init(struct uaudio_softc *, unsigned); static uint8_t umidi_convert_to_usb(struct umidi_sub_chan *, uint8_t, uint8_t); static struct umidi_sub_chan *umidi_sub_by_fifo(struct usb_fifo *); static void umidi_start_read(struct usb_fifo *); @@ -825,6 +835,33 @@ static const STRUCT_USB_HOST_ID __used uaudio_devs[] = USB_IFACE_SUBCLASS(UISUBCLASS_MIDISTREAM),}, }; +static unsigned +uaudio_get_child_index_by_dev(struct uaudio_softc *sc, device_t dev) +{ + unsigned i; + + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + if (dev == sc->sc_child[i].pcm_device) + return (i); + } + panic("uaudio_get_child_index_dev: Invalid device: %p\n", dev); + return (0); +} + +static unsigned +uaudio_get_child_index_by_chan(struct uaudio_softc *sc, struct uaudio_chan *ch) +{ + unsigned i; + + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + if ((sc->sc_play_chan + i) == ch || + (sc->sc_rec_chan + i) == ch) + return (i); + } + panic("uaudio_get_child_index_by_chan: Invalid chan: %p\n", ch); + return (0); +} + static int uaudio_probe(device_t dev) { @@ -913,10 +950,8 @@ uaudio_attach(device_t dev) struct uaudio_softc *sc = device_get_softc(dev); struct usb_interface_descriptor *id; usb_error_t err; - device_t child; + unsigned i; - sc->sc_play_chan.priv_sc = sc; - sc->sc_rec_chan.priv_sc = sc; sc->sc_udev = uaa->device; sc->sc_mixer_iface_index = uaa->info.bIfaceIndex; sc->sc_mixer_iface_no = uaa->info.bIfaceNum; @@ -974,57 +1009,63 @@ uaudio_attach(device_t dev) DPRINTF("%d mixer controls\n", sc->sc_mixer_count); - if (sc->sc_play_chan.num_alt > 0) { + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { uint8_t x; + if (sc->sc_play_chan[i].num_alt <= 0) + break; + /* * Need to set a default alternate interface, else * some USB audio devices might go into an infinte * re-enumeration loop: */ err = usbd_set_alt_interface_index(sc->sc_udev, - sc->sc_play_chan.usb_alt[0].iface_index, - sc->sc_play_chan.usb_alt[0].iface_alt_index); + sc->sc_play_chan[i].usb_alt[0].iface_index, + sc->sc_play_chan[i].usb_alt[0].iface_alt_index); if (err) { DPRINTF("setting of alternate index failed: %s!\n", usbd_errstr(err)); } - for (x = 0; x != sc->sc_play_chan.num_alt; x++) { - device_printf(dev, "Play: %d Hz, %d ch, %s format, " - "2x8ms buffer.\n", - sc->sc_play_chan.usb_alt[x].sample_rate, - sc->sc_play_chan.usb_alt[x].channels, - sc->sc_play_chan.usb_alt[x].p_fmt->description); + for (x = 0; x != sc->sc_play_chan[i].num_alt; x++) { + device_printf(dev, "Play[%u]: %d Hz, %d ch, %s format, " + "2x8ms buffer.\n", i, + sc->sc_play_chan[i].usb_alt[x].sample_rate, + sc->sc_play_chan[i].usb_alt[x].channels, + sc->sc_play_chan[i].usb_alt[x].p_fmt->description); } - } else { - device_printf(dev, "No playback.\n"); } + if (i == 0) + device_printf(dev, "No playback.\n"); - if (sc->sc_rec_chan.num_alt > 0) { + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { uint8_t x; + if (sc->sc_rec_chan[i].num_alt <= 0) + break; + /* * Need to set a default alternate interface, else * some USB audio devices might go into an infinte * re-enumeration loop: */ err = usbd_set_alt_interface_index(sc->sc_udev, - sc->sc_rec_chan.usb_alt[0].iface_index, - sc->sc_rec_chan.usb_alt[0].iface_alt_index); + sc->sc_rec_chan[i].usb_alt[0].iface_index, + sc->sc_rec_chan[i].usb_alt[0].iface_alt_index); if (err) { DPRINTF("setting of alternate index failed: %s!\n", usbd_errstr(err)); } - for (x = 0; x != sc->sc_rec_chan.num_alt; x++) { - device_printf(dev, "Record: %d Hz, %d ch, %s format, " - "2x8ms buffer.\n", - sc->sc_rec_chan.usb_alt[x].sample_rate, - sc->sc_rec_chan.usb_alt[x].channels, - sc->sc_rec_chan.usb_alt[x].p_fmt->description); + for (x = 0; x != sc->sc_rec_chan[i].num_alt; x++) { + device_printf(dev, "Record[%u]: %d Hz, %d ch, %s format, " + "2x8ms buffer.\n", i, + sc->sc_rec_chan[i].usb_alt[x].sample_rate, + sc->sc_rec_chan[i].usb_alt[x].channels, + sc->sc_rec_chan[i].usb_alt[x].p_fmt->description); } - } else { - device_printf(dev, "No recording.\n"); } + if (i == 0) + device_printf(dev, "No recording.\n"); if (sc->sc_midi_chan.valid == 0) { if (usbd_lookup_id_by_uaa(uaudio_vendor_midi, @@ -1056,16 +1097,20 @@ uaudio_attach(device_t dev) * Only attach a PCM device if we have a playback, recording * or mixer device present: */ - if (sc->sc_play_chan.num_alt > 0 || - sc->sc_rec_chan.num_alt > 0 || - sc->sc_mix_info) { - child = device_add_child(dev, "pcm", -1); + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + if (sc->sc_play_chan[i].num_alt <= 0 && + sc->sc_rec_chan[i].num_alt <= 0 && + sc->sc_child[i].mix_info == 0) + continue; + sc->sc_child[i].pcm_device = + device_add_child(dev, "pcm", -1); - if (child == NULL) { + if (sc->sc_child[i].pcm_device == NULL) { DPRINTF("out of memory\n"); goto detach; } - device_set_ivars(child, &sc->sc_sndcard_func); + device_set_ivars(sc->sc_child[i].pcm_device, + &sc->sc_sndcard_func); } if (bus_generic_attach(dev)) { @@ -1104,16 +1149,17 @@ int uaudio_attach_sub(device_t dev, kobj_class_t mixer_class, kobj_class_t chan_class) { struct uaudio_softc *sc = device_get_softc(device_get_parent(dev)); + unsigned i = uaudio_get_child_index_by_dev(sc, dev); char status[SND_STATUSLEN]; - uaudio_mixer_init(sc); + uaudio_mixer_init(sc, i); if (sc->sc_uq_audio_swap_lr) { DPRINTF("hardware has swapped left and right\n"); /* uaudio_pcm_setflags(dev, SD_F_PSWAPLR); */ } - if (sc->sc_play_chan.num_alt > 0 && - (sc->sc_mix_info & SOUND_MASK_PCM) == 0) { + if (sc->sc_play_chan[i].num_alt > 0 && + (sc->sc_child[i].mix_info & SOUND_MASK_PCM) == 0) { DPRINTF("emulating master volume\n"); @@ -1129,34 +1175,39 @@ uaudio_attach_sub(device_t dev, kobj_class_t mixer_cla } if (mixer_init(dev, mixer_class, sc)) goto detach; - sc->sc_mixer_init = 1; + sc->sc_child[i].mixer_init = 1; mixer_hwvol_init(dev); snprintf(status, sizeof(status), "at ? %s", PCM_KLDSTRING(snd_uaudio)); if (pcm_register(dev, sc, - (sc->sc_play_chan.num_alt > 0) ? 1 : 0, - (sc->sc_rec_chan.num_alt > 0) ? 1 : 0)) { + (sc->sc_play_chan[i].num_alt > 0) ? 1 : 0, + (sc->sc_rec_chan[i].num_alt > 0) ? 1 : 0)) { goto detach; } uaudio_pcm_setflags(dev, SD_F_MPSAFE); - sc->sc_pcm_registered = 1; + sc->sc_child[i].pcm_registered = 1; - if (sc->sc_play_chan.num_alt > 0) { - pcm_addchan(dev, PCMDIR_PLAY, chan_class, sc); + if (sc->sc_play_chan[i].num_alt > 0) { + sc->sc_play_chan[i].priv_sc = sc; + pcm_addchan(dev, PCMDIR_PLAY, chan_class, + &sc->sc_play_chan[i]); } - if (sc->sc_rec_chan.num_alt > 0) { - pcm_addchan(dev, PCMDIR_REC, chan_class, sc); + + if (sc->sc_rec_chan[i].num_alt > 0) { + sc->sc_rec_chan[i].priv_sc = sc; + pcm_addchan(dev, PCMDIR_REC, chan_class, + &sc->sc_rec_chan[i]); } pcm_setstatus(dev, status); - uaudio_mixer_register_sysctl(sc, dev); + uaudio_mixer_register_sysctl(sc, dev, i); SYSCTL_ADD_INT(device_get_sysctl_ctx(dev), SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, - "feedback_rate", CTLFLAG_RD, &sc->sc_play_chan.feedback_rate, + "feedback_rate", CTLFLAG_RD, &sc->sc_play_chan[i].feedback_rate, 0, "Feedback sample rate in Hz"); return (0); /* success */ @@ -1170,18 +1221,15 @@ int uaudio_detach_sub(device_t dev) { struct uaudio_softc *sc = device_get_softc(device_get_parent(dev)); + unsigned i = uaudio_get_child_index_by_dev(sc, dev); int error = 0; - /* disable S/PDIF output, if any */ - (void) sc->sc_set_spdif_fn(sc, 0); - repeat: - if (sc->sc_pcm_registered) { + if (sc->sc_child[i].pcm_registered) { error = pcm_unregister(dev); } else { - if (sc->sc_mixer_init) { + if (sc->sc_child[i].mixer_init) error = mixer_uninit(dev); - } } if (error) { @@ -1196,6 +1244,7 @@ static int uaudio_detach(device_t dev) { struct uaudio_softc *sc = device_get_softc(dev); + unsigned i; /* * Stop USB transfers early so that any audio applications @@ -1203,14 +1252,18 @@ uaudio_detach(device_t dev) * any. */ usb_proc_explore_lock(sc->sc_udev); - sc->sc_play_chan.operation = CHAN_OP_DRAIN; - sc->sc_rec_chan.operation = CHAN_OP_DRAIN; + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + sc->sc_play_chan[i].operation = CHAN_OP_DRAIN; + sc->sc_rec_chan[i].operation = CHAN_OP_DRAIN; + } usb_proc_explore_mwait(sc->sc_udev, &sc->sc_config_msg[0], &sc->sc_config_msg[1]); usb_proc_explore_unlock(sc->sc_udev); - usbd_transfer_unsetup(sc->sc_play_chan.xfer, UAUDIO_NCHANBUFS + 1); - usbd_transfer_unsetup(sc->sc_rec_chan.xfer, UAUDIO_NCHANBUFS + 1); + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + usbd_transfer_unsetup(sc->sc_play_chan[i].xfer, UAUDIO_NCHANBUFS + 1); + usbd_transfer_unsetup(sc->sc_rec_chan[i].xfer, UAUDIO_NCHANBUFS + 1); + } uaudio_hid_detach(sc); @@ -1226,6 +1279,9 @@ uaudio_detach(device_t dev) uaudio_mixer_ctl_free(sc); + /* disable S/PDIF output, if any */ + (void) sc->sc_set_spdif_fn(sc, 0); + return (0); } @@ -1416,10 +1472,13 @@ static void uaudio_configure_msg(struct usb_proc_msg *pm) { struct uaudio_softc *sc = ((struct uaudio_configure_msg *)pm)->sc; + unsigned i; usb_proc_explore_unlock(sc->sc_udev); - uaudio_configure_msg_sub(sc, &sc->sc_play_chan, PCMDIR_PLAY); - uaudio_configure_msg_sub(sc, &sc->sc_rec_chan, PCMDIR_REC); + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + uaudio_configure_msg_sub(sc, &sc->sc_play_chan[i], PCMDIR_PLAY); + uaudio_configure_msg_sub(sc, &sc->sc_rec_chan[i], PCMDIR_REC); + } usb_proc_explore_lock(sc->sc_udev); } @@ -1585,6 +1644,22 @@ uaudio20_check_rate(struct usb_device *udev, uint8_t i return (USB_ERR_INVAL); } +static struct uaudio_chan * +uaudio_get_chan(struct uaudio_softc *sc, struct uaudio_chan *chan, + uint8_t iface_index) +{ + unsigned i; + + for (i = 0; i != UAUDIO_MAX_CHILD; i++, chan++) { + if (chan->num_alt == 0) { + chan->iface_index = iface_index; + return (chan); + } else if (chan->iface_index == iface_index) + return (chan); + } + return (NULL); +} + static void uaudio_chan_fill_info_sub(struct uaudio_softc *sc, struct usb_device *udev, uint32_t rate, uint8_t channels, uint8_t bit_resolution) @@ -1892,8 +1967,12 @@ uaudio_chan_fill_info_sub(struct uaudio_softc *sc, str } } - chan = (ep_dir == UE_DIR_IN) ? - &sc->sc_rec_chan : &sc->sc_play_chan; + chan = uaudio_get_chan(sc, (ep_dir == UE_DIR_OUT) ? &sc->sc_play_chan[0] : + &sc->sc_rec_chan[0], curidx); + if (chan == NULL) { + DPRINTF("More than %d sub devices. (skipped)\n", UAUDIO_MAX_CHILD); + goto next_ep; + } if (usbd_get_iface(udev, curidx) == NULL) { DPRINTF("Interface is not valid\n"); @@ -1912,8 +1991,8 @@ uaudio_chan_fill_info_sub(struct uaudio_softc *sc, str uaudio_chan_dump_ep_desc(ed1); #endif DPRINTF("Sample rate = %dHz, channels = %d, " - "bits = %d, format = %s\n", rate, channels, - bit_resolution, p_fmt->description); + "bits = %d, format = %s, ep 0x%02x, chan %p\n", rate, channels, + bit_resolution, p_fmt->description, ed1->bEndpointAddress, chan); chan_alt->sample_rate = rate; chan_alt->p_asf1d = asf1d; @@ -2097,12 +2176,15 @@ uaudio_chan_play_sync_callback(struct usb_xfer *xfer, uint64_t sample_rate; uint8_t buf[4]; uint64_t temp; + unsigned i; int len; int actlen; int nframes; usbd_xfer_status(xfer, &actlen, NULL, NULL, &nframes); + i = uaudio_get_child_index_by_chan(ch->priv_sc, ch); + switch (USB_GET_STATE(xfer)) { case USB_ST_TRANSFERRED: @@ -2153,7 +2235,7 @@ uaudio_chan_play_sync_callback(struct usb_xfer *xfer, * Use feedback value as fallback when there is no * recording channel: */ - if (ch->priv_sc->sc_rec_chan.num_alt == 0) { + if (ch->priv_sc->sc_rec_chan[i].num_alt == 0) { int32_t jitter_max = howmany(sample_rate, 16000); /* @@ -2179,7 +2261,7 @@ uaudio_chan_play_sync_callback(struct usb_xfer *xfer, * source of jitter information to save some * isochronous bandwidth: */ - if (ch->priv_sc->sc_rec_chan.num_alt != 0 && + if (ch->priv_sc->sc_rec_chan[i].num_alt != 0 && uaudio_debug == 0) break; usbd_xfer_set_frames(xfer, 1); @@ -2210,6 +2292,7 @@ uaudio_chan_play_callback(struct usb_xfer *xfer, usb_e uint32_t blockcount; uint32_t n; uint32_t offset; + unsigned i; int sample_size; int actlen; int sumlen; @@ -2219,10 +2302,12 @@ uaudio_chan_play_callback(struct usb_xfer *xfer, usb_e return; } - /* check if there is a record channel */ - if (ch->priv_sc->sc_rec_chan.num_alt > 0) - ch_rec = &ch->priv_sc->sc_rec_chan; - else + i = uaudio_get_child_index_by_chan(ch->priv_sc, ch); + + /* check if there is a valid record channel */ + ch_rec = ch->priv_sc->sc_rec_chan + i; + + if (ch_rec->num_alt == 0) ch_rec = NULL; usbd_xfer_status(xfer, &actlen, &sumlen, NULL, NULL); @@ -2486,11 +2571,9 @@ tr_setup: } void * -uaudio_chan_init(struct uaudio_softc *sc, struct snd_dbuf *b, +uaudio_chan_init(struct uaudio_chan *ch, struct snd_dbuf *b, struct pcm_channel *c, int dir) { - struct uaudio_chan *ch = ((dir == PCMDIR_PLAY) ? - &sc->sc_play_chan : &sc->sc_rec_chan); uint32_t buf_size; uint8_t x; @@ -2681,36 +2764,36 @@ uaudio_chan_start_sub(struct uaudio_chan *ch) } static int -uaudio_chan_need_both(struct uaudio_softc *sc) +uaudio_chan_need_both(struct uaudio_chan *pchan, struct uaudio_chan *rchan) { - return (sc->sc_play_chan.num_alt > 0 && - sc->sc_play_chan.running != 0 && - uaudio_chan_is_async(&sc->sc_play_chan, - sc->sc_play_chan.set_alt) != 0 && - sc->sc_rec_chan.num_alt > 0 && - sc->sc_rec_chan.running == 0); + return (pchan->num_alt > 0 && + pchan->running != 0 && + uaudio_chan_is_async(pchan, pchan->set_alt) != 0 && + rchan->num_alt > 0 && + rchan->running == 0); } static int -uaudio_chan_need_none(struct uaudio_softc *sc) +uaudio_chan_need_none(struct uaudio_chan *pchan, struct uaudio_chan *rchan) { - return (sc->sc_play_chan.num_alt > 0 && - sc->sc_play_chan.running == 0 && - sc->sc_rec_chan.num_alt > 0 && - sc->sc_rec_chan.running == 0); + return (pchan->num_alt > 0 && + pchan->running == 0 && + rchan->num_alt > 0 && + rchan->running == 0); } void uaudio_chan_start(struct uaudio_chan *ch) { struct uaudio_softc *sc = ch->priv_sc; + unsigned i = uaudio_get_child_index_by_chan(sc, ch); /* make operation atomic */ usb_proc_explore_lock(sc->sc_udev); /* check if not running */ if (ch->running == 0) { - uint32_t temp; + uint32_t temp; /* get current buffer size */ temp = 2 * uaudio_get_buffer_size(ch, ch->set_alt); @@ -2723,13 +2806,15 @@ uaudio_chan_start(struct uaudio_chan *ch) ch->end = ch->buf + temp; ch->cur = ch->buf; - if (uaudio_chan_need_both(sc)) { + if (uaudio_chan_need_both( + &sc->sc_play_chan[i], + &sc->sc_rec_chan[i])) { /* * Start both endpoints because of need for * jitter information: */ - uaudio_chan_start_sub(&sc->sc_rec_chan); - uaudio_chan_start_sub(&sc->sc_play_chan); + uaudio_chan_start_sub(&sc->sc_rec_chan[i]); + uaudio_chan_start_sub(&sc->sc_play_chan[i]); } else { uaudio_chan_start_sub(ch); } @@ -2767,6 +2852,7 @@ void uaudio_chan_stop(struct uaudio_chan *ch) { struct uaudio_softc *sc = ch->priv_sc; + unsigned i = uaudio_get_child_index_by_chan(sc, ch); /* make operation atomic */ usb_proc_explore_lock(sc->sc_udev); @@ -2776,18 +2862,22 @@ uaudio_chan_stop(struct uaudio_chan *ch) /* clear running flag */ ch->running = 0; - if (uaudio_chan_need_both(sc)) { + if (uaudio_chan_need_both( + &sc->sc_play_chan[i], + &sc->sc_rec_chan[i])) { /* * Leave the endpoints running because we need * information about jitter! */ - } else if (uaudio_chan_need_none(sc)) { + } else if (uaudio_chan_need_none( + &sc->sc_play_chan[i], + &sc->sc_rec_chan[i])) { /* * Stop both endpoints in case the one was used for * jitter information: */ - uaudio_chan_stop_sub(&sc->sc_rec_chan); - uaudio_chan_stop_sub(&sc->sc_play_chan); + uaudio_chan_stop_sub(&sc->sc_rec_chan[i]); + uaudio_chan_stop_sub(&sc->sc_play_chan[i]); } else { uaudio_chan_stop_sub(ch); } @@ -2814,12 +2904,12 @@ uaudio_mixer_sysctl_handler(SYSCTL_HANDLER_ARGS) sc = (struct uaudio_softc *)oidp->oid_arg1; hint = oidp->oid_arg2; - if (sc->sc_mixer_lock == NULL) + if (sc->sc_child[0].mixer_lock == NULL) return (ENXIO); /* lookup mixer node */ - mtx_lock(sc->sc_mixer_lock); + mtx_lock(sc->sc_child[0].mixer_lock); for (pmc = sc->sc_mixer_root; pmc != NULL; pmc = pmc->next) { for (chan = 0; chan != (int)pmc->nchan; chan++) { if (pmc->wValue[chan] != -1 && @@ -2830,7 +2920,7 @@ uaudio_mixer_sysctl_handler(SYSCTL_HANDLER_ARGS) } } found: - mtx_unlock(sc->sc_mixer_lock); + mtx_unlock(sc->sc_child[0].mixer_lock); error = sysctl_handle_int(oidp, &temp, 0, req); if (error != 0 || req->newptr == NULL) @@ -2838,7 +2928,7 @@ found: /* update mixer value */ - mtx_lock(sc->sc_mixer_lock); + mtx_lock(sc->sc_child[0].mixer_lock); if (pmc != NULL && temp >= pmc->minval && temp <= pmc->maxval) { @@ -2849,7 +2939,7 @@ found: /* start the transfer, if not already started */ usbd_transfer_start(sc->sc_mixer_xfer[0]); } - mtx_unlock(sc->sc_mixer_lock); + mtx_unlock(sc->sc_child[0].mixer_lock); return (0); } @@ -2866,7 +2956,8 @@ uaudio_mixer_ctl_free(struct uaudio_softc *sc) } static void -uaudio_mixer_register_sysctl(struct uaudio_softc *sc, device_t dev) +uaudio_mixer_register_sysctl(struct uaudio_softc *sc, device_t dev, + unsigned index) { struct uaudio_mixer_node *pmc; struct sysctl_oid *mixer_tree; @@ -2875,6 +2966,9 @@ uaudio_mixer_register_sysctl(struct uaudio_softc *sc, int chan; int n; + if (index != 0) + return; + mixer_tree = SYSCTL_ADD_NODE(device_get_sysctl_ctx(dev), SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, "mixer", CTLFLAG_RD, NULL, ""); @@ -3078,10 +3172,10 @@ uaudio_mixer_reload_all(struct uaudio_softc *sc) struct uaudio_mixer_node *pmc; int chan; - if (sc->sc_mixer_lock == NULL) + if (sc->sc_child[0].mixer_lock == NULL) return; - mtx_lock(sc->sc_mixer_lock); + mtx_lock(sc->sc_child[0].mixer_lock); for (pmc = sc->sc_mixer_root; pmc != NULL; pmc = pmc->next) { /* use reset defaults for non-oss controlled settings */ if (pmc->ctl == SOUND_MIXER_NRDEVICES) @@ -3093,7 +3187,7 @@ uaudio_mixer_reload_all(struct uaudio_softc *sc) /* start HID volume keys, if any */ usbd_transfer_start(sc->sc_hid.xfer[0]); - mtx_unlock(sc->sc_mixer_lock); + mtx_unlock(sc->sc_child[0].mixer_lock); } static void @@ -5287,11 +5381,13 @@ uaudio_mixer_ctl_set(struct uaudio_softc *sc, struct u } static void -uaudio_mixer_init(struct uaudio_softc *sc) +uaudio_mixer_init(struct uaudio_softc *sc, unsigned index) { struct uaudio_mixer_node *mc; int32_t i; + if (index != 0) + return; for (mc = sc->sc_mixer_root; mc; mc = mc->next) { if (mc->ctl != SOUND_MIXER_NRDEVICES) { @@ -5299,7 +5395,7 @@ uaudio_mixer_init(struct uaudio_softc *sc) * Set device mask bits. See * /usr/include/machine/soundcard.h */ - sc->sc_mix_info |= 1U << mc->ctl; + sc->sc_child[index].mix_info |= 1U << mc->ctl; } if ((mc->ctl == SOUND_MIXER_NRDEVICES) && (mc->type == MIX_SELECTOR)) { @@ -5307,7 +5403,7 @@ uaudio_mixer_init(struct uaudio_softc *sc) for (i = mc->minval; (i > 0) && (i <= mc->maxval); i++) { if (mc->slctrtype[i - 1] == SOUND_MIXER_NRDEVICES) continue; - sc->sc_recsrc_info |= 1U << mc->slctrtype[i - 1]; + sc->sc_child[index].recsrc_info |= 1U << mc->slctrtype[i - 1]; } } } @@ -5316,50 +5412,57 @@ uaudio_mixer_init(struct uaudio_softc *sc) int uaudio_mixer_init_sub(struct uaudio_softc *sc, struct snd_mixer *m) { - DPRINTF("\n"); + unsigned i = uaudio_get_child_index_by_dev(sc, mix_get_dev(m)); - sc->sc_mixer_lock = mixer_get_lock(m); - sc->sc_mixer_dev = m; + DPRINTF("child=%u\n", i); - if (usbd_transfer_setup(sc->sc_udev, &sc->sc_mixer_iface_index, + sc->sc_child[i].mixer_lock = mixer_get_lock(m); + sc->sc_child[i].mixer_dev = m; + + if (i == 0 && + usbd_transfer_setup(sc->sc_udev, &sc->sc_mixer_iface_index, sc->sc_mixer_xfer, uaudio_mixer_config, 1, sc, - sc->sc_mixer_lock)) { - DPRINTFN(0, "could not allocate USB " - "transfer for audio mixer!\n"); + sc->sc_child[i].mixer_lock)) { + DPRINTFN(0, "could not allocate USB transfer for mixer!\n"); return (ENOMEM); } - if (sc->sc_play_chan.num_alt > 0 && - (sc->sc_mix_info & SOUND_MASK_VOLUME) == 0) { + if (sc->sc_play_chan[i].num_alt > 0 && + (sc->sc_child[i].mix_info & SOUND_MASK_VOLUME) == 0) { mix_setparentchild(m, SOUND_MIXER_VOLUME, SOUND_MASK_PCM); mix_setrealdev(m, SOUND_MIXER_VOLUME, SOUND_MIXER_NONE); } - mix_setdevs(m, sc->sc_mix_info); - mix_setrecdevs(m, sc->sc_recsrc_info); + mix_setdevs(m, sc->sc_child[i].mix_info); + mix_setrecdevs(m, sc->sc_child[i].recsrc_info); return (0); } int -uaudio_mixer_uninit_sub(struct uaudio_softc *sc) +uaudio_mixer_uninit_sub(struct uaudio_softc *sc, struct snd_mixer *m) { - DPRINTF("\n"); + unsigned index = uaudio_get_child_index_by_dev(sc, mix_get_dev(m)); - usbd_transfer_unsetup(sc->sc_mixer_xfer, 1); + DPRINTF("child=%u\n", index); - sc->sc_mixer_lock = NULL; + if (index == 0) + usbd_transfer_unsetup(sc->sc_mixer_xfer, 1); + sc->sc_child[index].mixer_lock = NULL; + return (0); } void -uaudio_mixer_set(struct uaudio_softc *sc, unsigned type, - unsigned left, unsigned right) +uaudio_mixer_set(struct uaudio_softc *sc, struct snd_mixer *m, + unsigned type, unsigned left, unsigned right) { + unsigned index = uaudio_get_child_index_by_dev(sc, mix_get_dev(m)); struct uaudio_mixer_node *mc; int chan; + if (index != 0) + return; for (mc = sc->sc_mixer_root; mc != NULL; mc = mc->next) { - if (mc->ctl == type) { for (chan = 0; chan < mc->nchan; chan++) { uaudio_mixer_ctl_set(sc, mc, chan, @@ -5370,13 +5473,16 @@ uaudio_mixer_set(struct uaudio_softc *sc, unsigned typ } uint32_t -uaudio_mixer_setrecsrc(struct uaudio_softc *sc, uint32_t src) +uaudio_mixer_setrecsrc(struct uaudio_softc *sc, struct snd_mixer *m, uint32_t src) { + unsigned index = uaudio_get_child_index_by_dev(sc, mix_get_dev(m)); struct uaudio_mixer_node *mc; uint32_t mask; uint32_t temp; int32_t i; + if (index != 0) + return (0); for (mc = sc->sc_mixer_root; mc; mc = mc->next) { if ((mc->ctl == SOUND_MIXER_NRDEVICES) && @@ -6004,7 +6110,7 @@ uaudio_hid_rx_callback(struct usb_xfer *xfer, usb_erro id = 0; } - m = sc->sc_mixer_dev; + m = sc->sc_child[0].mixer_dev; if ((sc->sc_hid.flags & UAUDIO_HID_HAS_MUTE) && (sc->sc_hid.mute_id == id) && @@ -6069,7 +6175,7 @@ uaudio_hid_probe(struct uaudio_softc *sc, if (!(sc->sc_hid.flags & UAUDIO_HID_VALID)) return (-1); - if (sc->sc_mixer_lock == NULL) + if (sc->sc_child[0].mixer_lock == NULL) return (-1); /* Get HID descriptor */ @@ -6130,7 +6236,7 @@ uaudio_hid_probe(struct uaudio_softc *sc, /* allocate USB transfers */ error = usbd_transfer_setup(uaa->device, &sc->sc_hid.iface_index, sc->sc_hid.xfer, uaudio_hid_config, UAUDIO_HID_N_TRANSFER, - sc, sc->sc_mixer_lock); + sc, sc->sc_child[0].mixer_lock); if (error) { DPRINTF("error=%s\n", usbd_errstr(error)); return (-1); Modified: stable/12/sys/dev/sound/usb/uaudio.h ============================================================================== --- stable/12/sys/dev/sound/usb/uaudio.h Mon Apr 13 16:32:18 2020 (r359887) +++ stable/12/sys/dev/sound/usb/uaudio.h Mon Apr 13 16:33:10 2020 (r359888) @@ -41,7 +41,7 @@ struct pcm_channel; extern int uaudio_attach_sub(device_t dev, kobj_class_t mixer_class, kobj_class_t chan_class); extern int uaudio_detach_sub(device_t dev); -extern void *uaudio_chan_init(struct uaudio_softc *sc, struct snd_dbuf *b, +extern void *uaudio_chan_init(struct uaudio_chan *ch, struct snd_dbuf *b, struct pcm_channel *c, int dir); extern int uaudio_chan_free(struct uaudio_chan *ch); extern int uaudio_chan_set_param_blocksize(struct uaudio_chan *ch, @@ -58,12 +58,12 @@ extern int uaudio_chan_set_param_format(struct uaudio_ uint32_t format); extern void uaudio_chan_start(struct uaudio_chan *ch); extern void uaudio_chan_stop(struct uaudio_chan *ch); -extern int uaudio_mixer_init_sub(struct uaudio_softc *sc, - struct snd_mixer *m); -extern int uaudio_mixer_uninit_sub(struct uaudio_softc *sc); -extern void uaudio_mixer_set(struct uaudio_softc *sc, unsigned type, - unsigned left, unsigned right); -extern uint32_t uaudio_mixer_setrecsrc(struct uaudio_softc *sc, uint32_t src); +extern int uaudio_mixer_init_sub(struct uaudio_softc *, struct snd_mixer *); +extern int uaudio_mixer_uninit_sub(struct uaudio_softc *, struct snd_mixer *); +extern void uaudio_mixer_set(struct uaudio_softc *, struct snd_mixer *, + unsigned type, unsigned left, unsigned right); +extern uint32_t uaudio_mixer_setrecsrc(struct uaudio_softc *, struct snd_mixer *, + uint32_t src); int uaudio_get_vendor(device_t dev); int uaudio_get_product(device_t dev); Modified: stable/12/sys/dev/sound/usb/uaudio_pcm.c ============================================================================== --- stable/12/sys/dev/sound/usb/uaudio_pcm.c Mon Apr 13 16:32:18 2020 (r359887) +++ stable/12/sys/dev/sound/usb/uaudio_pcm.c Mon Apr 13 16:33:10 2020 (r359888) @@ -146,7 +146,7 @@ ua_mixer_set(struct snd_mixer *m, unsigned type, unsig do_unlock = 1; mtx_lock(mtx); } - uaudio_mixer_set(mix_getdevinfo(m), type, left, right); + uaudio_mixer_set(mix_getdevinfo(m), m, type, left, right); if (do_unlock) { mtx_unlock(mtx); } @@ -166,7 +166,7 @@ ua_mixer_setrecsrc(struct snd_mixer *m, uint32_t src) do_unlock = 1; mtx_lock(mtx); } - retval = uaudio_mixer_setrecsrc(mix_getdevinfo(m), src); + retval = uaudio_mixer_setrecsrc(mix_getdevinfo(m), m, src); if (do_unlock) { mtx_unlock(mtx); } @@ -176,7 +176,7 @@ ua_mixer_setrecsrc(struct snd_mixer *m, uint32_t src) static int ua_mixer_uninit(struct snd_mixer *m) { - return (uaudio_mixer_uninit_sub(mix_getdevinfo(m))); + return (uaudio_mixer_uninit_sub(mix_getdevinfo(m), m)); } static kobj_method_t ua_mixer_methods[] = { From owner-svn-src-stable@freebsd.org Mon Apr 13 16:33:46 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 3F2772C341D; Mon, 13 Apr 2020 16:33:46 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DhV1LnPz3Nmq; Mon, 13 Apr 2020 16:33:46 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 295E81E606; Mon, 13 Apr 2020 16:33:46 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGXk9r093424; Mon, 13 Apr 2020 16:33:46 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGXj5j093421; Mon, 13 Apr 2020 16:33:45 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131633.03DGXj5j093421@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:33:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359889 - stable/11/sys/dev/sound/usb X-SVN-Group: stable-11 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/11/sys/dev/sound/usb X-SVN-Commit-Revision: 359889 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:33:46 -0000 Author: hselasky Date: Mon Apr 13 16:33:45 2020 New Revision: 359889 URL: https://svnweb.freebsd.org/changeset/base/359889 Log: MFC r359446: Add support for multiple playback and recording devices per physical USB audio device. This requires some structural refactoring inside the driver, mostly about converting existing audio channel structures into arrays. The main audio mixer is provided by the first PCM instance. The non-first audio instances may only have a software mixer for PCM playback. Tested by: Horse Ma Sponsored by: Mellanox Technologies Modified: stable/11/sys/dev/sound/usb/uaudio.c stable/11/sys/dev/sound/usb/uaudio.h stable/11/sys/dev/sound/usb/uaudio_pcm.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/11/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:33:10 2020 (r359888) +++ stable/11/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:33:45 2020 (r359889) @@ -258,6 +258,8 @@ struct uaudio_chan { #define CHAN_OP_START 1 #define CHAN_OP_STOP 2 #define CHAN_OP_DRAIN 3 + + uint8_t iface_index; }; #define UMIDI_EMB_JACK_MAX 16 /* units */ @@ -343,37 +345,45 @@ struct uaudio_hid { #define UAUDIO_SPDIF_OUT_96K 0x04 /* Out sample rate = 96K */ #define UAUDIO_SPDIF_IN_MIX 0x10 /* Input mix enable */ +#define UAUDIO_MAX_CHILD 2 + +struct uaudio_softc_child { + device_t pcm_device; + struct mtx *mixer_lock; + struct snd_mixer *mixer_dev; + + uint32_t mix_info; + uint32_t recsrc_info; + + uint8_t pcm_registered:1; + uint8_t mixer_init:1; +}; + struct uaudio_softc { struct sbuf sc_sndstat; struct sndcard_func sc_sndcard_func; - struct uaudio_chan sc_rec_chan; - struct uaudio_chan sc_play_chan; + struct uaudio_chan sc_rec_chan[UAUDIO_MAX_CHILD]; + struct uaudio_chan sc_play_chan[UAUDIO_MAX_CHILD]; struct umidi_chan sc_midi_chan; struct uaudio_hid sc_hid; struct uaudio_search_result sc_mixer_clocks; struct uaudio_mixer_node sc_mixer_node; struct uaudio_configure_msg sc_config_msg[2]; + struct uaudio_softc_child sc_child[UAUDIO_MAX_CHILD]; - struct mtx *sc_mixer_lock; - struct snd_mixer *sc_mixer_dev; struct usb_device *sc_udev; struct usb_xfer *sc_mixer_xfer[1]; struct uaudio_mixer_node *sc_mixer_root; struct uaudio_mixer_node *sc_mixer_curr; int (*sc_set_spdif_fn) (struct uaudio_softc *, int); - uint32_t sc_mix_info; - uint32_t sc_recsrc_info; - uint16_t sc_audio_rev; uint16_t sc_mixer_count; - uint8_t sc_sndstat_valid; uint8_t sc_mixer_iface_index; uint8_t sc_mixer_iface_no; uint8_t sc_mixer_chan; - uint8_t sc_pcm_registered:1; - uint8_t sc_mixer_init:1; + uint8_t sc_sndstat_valid:1; uint8_t sc_uq_audio_swap_lr:1; uint8_t sc_uq_au_inp_async:1; uint8_t sc_uq_au_no_xu:1; @@ -473,7 +483,7 @@ static usb_proc_callback_t uaudio_configure_msg; static int uaudio_mixer_sysctl_handler(SYSCTL_HANDLER_ARGS); static void uaudio_mixer_ctl_free(struct uaudio_softc *); -static void uaudio_mixer_register_sysctl(struct uaudio_softc *, device_t); +static void uaudio_mixer_register_sysctl(struct uaudio_softc *, device_t, unsigned); static void uaudio_mixer_reload_all(struct uaudio_softc *); static void uaudio_mixer_controls_create_ftu(struct uaudio_softc *); @@ -533,7 +543,7 @@ static void uaudio_mixer_add_ctl(struct uaudio_softc * static void uaudio_mixer_fill_info(struct uaudio_softc *, struct usb_device *, void *); static int uaudio_mixer_signext(uint8_t, int); -static void uaudio_mixer_init(struct uaudio_softc *); +static void uaudio_mixer_init(struct uaudio_softc *, unsigned); static uint8_t umidi_convert_to_usb(struct umidi_sub_chan *, uint8_t, uint8_t); static struct umidi_sub_chan *umidi_sub_by_fifo(struct usb_fifo *); static void umidi_start_read(struct usb_fifo *); @@ -823,6 +833,33 @@ static const STRUCT_USB_HOST_ID __used uaudio_devs[] = USB_IFACE_SUBCLASS(UISUBCLASS_MIDISTREAM),}, }; +static unsigned +uaudio_get_child_index_by_dev(struct uaudio_softc *sc, device_t dev) +{ + unsigned i; + + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + if (dev == sc->sc_child[i].pcm_device) + return (i); + } + panic("uaudio_get_child_index_dev: Invalid device: %p\n", dev); + return (0); +} + +static unsigned +uaudio_get_child_index_by_chan(struct uaudio_softc *sc, struct uaudio_chan *ch) +{ + unsigned i; + + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + if ((sc->sc_play_chan + i) == ch || + (sc->sc_rec_chan + i) == ch) + return (i); + } + panic("uaudio_get_child_index_by_chan: Invalid chan: %p\n", ch); + return (0); +} + static int uaudio_probe(device_t dev) { @@ -911,10 +948,8 @@ uaudio_attach(device_t dev) struct uaudio_softc *sc = device_get_softc(dev); struct usb_interface_descriptor *id; usb_error_t err; - device_t child; + unsigned i; - sc->sc_play_chan.priv_sc = sc; - sc->sc_rec_chan.priv_sc = sc; sc->sc_udev = uaa->device; sc->sc_mixer_iface_index = uaa->info.bIfaceIndex; sc->sc_mixer_iface_no = uaa->info.bIfaceNum; @@ -972,57 +1007,63 @@ uaudio_attach(device_t dev) DPRINTF("%d mixer controls\n", sc->sc_mixer_count); - if (sc->sc_play_chan.num_alt > 0) { + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { uint8_t x; + if (sc->sc_play_chan[i].num_alt <= 0) + break; + /* * Need to set a default alternate interface, else * some USB audio devices might go into an infinte * re-enumeration loop: */ err = usbd_set_alt_interface_index(sc->sc_udev, - sc->sc_play_chan.usb_alt[0].iface_index, - sc->sc_play_chan.usb_alt[0].iface_alt_index); + sc->sc_play_chan[i].usb_alt[0].iface_index, + sc->sc_play_chan[i].usb_alt[0].iface_alt_index); if (err) { DPRINTF("setting of alternate index failed: %s!\n", usbd_errstr(err)); } - for (x = 0; x != sc->sc_play_chan.num_alt; x++) { - device_printf(dev, "Play: %d Hz, %d ch, %s format, " - "2x8ms buffer.\n", - sc->sc_play_chan.usb_alt[x].sample_rate, - sc->sc_play_chan.usb_alt[x].channels, - sc->sc_play_chan.usb_alt[x].p_fmt->description); + for (x = 0; x != sc->sc_play_chan[i].num_alt; x++) { + device_printf(dev, "Play[%u]: %d Hz, %d ch, %s format, " + "2x8ms buffer.\n", i, + sc->sc_play_chan[i].usb_alt[x].sample_rate, + sc->sc_play_chan[i].usb_alt[x].channels, + sc->sc_play_chan[i].usb_alt[x].p_fmt->description); } - } else { - device_printf(dev, "No playback.\n"); } + if (i == 0) + device_printf(dev, "No playback.\n"); - if (sc->sc_rec_chan.num_alt > 0) { + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { uint8_t x; + if (sc->sc_rec_chan[i].num_alt <= 0) + break; + /* * Need to set a default alternate interface, else * some USB audio devices might go into an infinte * re-enumeration loop: */ err = usbd_set_alt_interface_index(sc->sc_udev, - sc->sc_rec_chan.usb_alt[0].iface_index, - sc->sc_rec_chan.usb_alt[0].iface_alt_index); + sc->sc_rec_chan[i].usb_alt[0].iface_index, + sc->sc_rec_chan[i].usb_alt[0].iface_alt_index); if (err) { DPRINTF("setting of alternate index failed: %s!\n", usbd_errstr(err)); } - for (x = 0; x != sc->sc_rec_chan.num_alt; x++) { - device_printf(dev, "Record: %d Hz, %d ch, %s format, " - "2x8ms buffer.\n", - sc->sc_rec_chan.usb_alt[x].sample_rate, - sc->sc_rec_chan.usb_alt[x].channels, - sc->sc_rec_chan.usb_alt[x].p_fmt->description); + for (x = 0; x != sc->sc_rec_chan[i].num_alt; x++) { + device_printf(dev, "Record[%u]: %d Hz, %d ch, %s format, " + "2x8ms buffer.\n", i, + sc->sc_rec_chan[i].usb_alt[x].sample_rate, + sc->sc_rec_chan[i].usb_alt[x].channels, + sc->sc_rec_chan[i].usb_alt[x].p_fmt->description); } - } else { - device_printf(dev, "No recording.\n"); } + if (i == 0) + device_printf(dev, "No recording.\n"); if (sc->sc_midi_chan.valid == 0) { if (usbd_lookup_id_by_uaa(uaudio_vendor_midi, @@ -1054,16 +1095,20 @@ uaudio_attach(device_t dev) * Only attach a PCM device if we have a playback, recording * or mixer device present: */ - if (sc->sc_play_chan.num_alt > 0 || - sc->sc_rec_chan.num_alt > 0 || - sc->sc_mix_info) { - child = device_add_child(dev, "pcm", -1); + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + if (sc->sc_play_chan[i].num_alt <= 0 && + sc->sc_rec_chan[i].num_alt <= 0 && + sc->sc_child[i].mix_info == 0) + continue; + sc->sc_child[i].pcm_device = + device_add_child(dev, "pcm", -1); - if (child == NULL) { + if (sc->sc_child[i].pcm_device == NULL) { DPRINTF("out of memory\n"); goto detach; } - device_set_ivars(child, &sc->sc_sndcard_func); + device_set_ivars(sc->sc_child[i].pcm_device, + &sc->sc_sndcard_func); } if (bus_generic_attach(dev)) { @@ -1102,16 +1147,17 @@ int uaudio_attach_sub(device_t dev, kobj_class_t mixer_class, kobj_class_t chan_class) { struct uaudio_softc *sc = device_get_softc(device_get_parent(dev)); + unsigned i = uaudio_get_child_index_by_dev(sc, dev); char status[SND_STATUSLEN]; - uaudio_mixer_init(sc); + uaudio_mixer_init(sc, i); if (sc->sc_uq_audio_swap_lr) { DPRINTF("hardware has swapped left and right\n"); /* uaudio_pcm_setflags(dev, SD_F_PSWAPLR); */ } - if (sc->sc_play_chan.num_alt > 0 && - (sc->sc_mix_info & SOUND_MASK_PCM) == 0) { + if (sc->sc_play_chan[i].num_alt > 0 && + (sc->sc_child[i].mix_info & SOUND_MASK_PCM) == 0) { DPRINTF("emulating master volume\n"); @@ -1127,34 +1173,39 @@ uaudio_attach_sub(device_t dev, kobj_class_t mixer_cla } if (mixer_init(dev, mixer_class, sc)) goto detach; - sc->sc_mixer_init = 1; + sc->sc_child[i].mixer_init = 1; mixer_hwvol_init(dev); snprintf(status, sizeof(status), "at ? %s", PCM_KLDSTRING(snd_uaudio)); if (pcm_register(dev, sc, - (sc->sc_play_chan.num_alt > 0) ? 1 : 0, - (sc->sc_rec_chan.num_alt > 0) ? 1 : 0)) { + (sc->sc_play_chan[i].num_alt > 0) ? 1 : 0, + (sc->sc_rec_chan[i].num_alt > 0) ? 1 : 0)) { goto detach; } uaudio_pcm_setflags(dev, SD_F_MPSAFE); - sc->sc_pcm_registered = 1; + sc->sc_child[i].pcm_registered = 1; - if (sc->sc_play_chan.num_alt > 0) { - pcm_addchan(dev, PCMDIR_PLAY, chan_class, sc); + if (sc->sc_play_chan[i].num_alt > 0) { + sc->sc_play_chan[i].priv_sc = sc; + pcm_addchan(dev, PCMDIR_PLAY, chan_class, + &sc->sc_play_chan[i]); } - if (sc->sc_rec_chan.num_alt > 0) { - pcm_addchan(dev, PCMDIR_REC, chan_class, sc); + + if (sc->sc_rec_chan[i].num_alt > 0) { + sc->sc_rec_chan[i].priv_sc = sc; + pcm_addchan(dev, PCMDIR_REC, chan_class, + &sc->sc_rec_chan[i]); } pcm_setstatus(dev, status); - uaudio_mixer_register_sysctl(sc, dev); + uaudio_mixer_register_sysctl(sc, dev, i); SYSCTL_ADD_INT(device_get_sysctl_ctx(dev), SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, - "feedback_rate", CTLFLAG_RD, &sc->sc_play_chan.feedback_rate, + "feedback_rate", CTLFLAG_RD, &sc->sc_play_chan[i].feedback_rate, 0, "Feedback sample rate in Hz"); return (0); /* success */ @@ -1168,18 +1219,15 @@ int uaudio_detach_sub(device_t dev) { struct uaudio_softc *sc = device_get_softc(device_get_parent(dev)); + unsigned i = uaudio_get_child_index_by_dev(sc, dev); int error = 0; - /* disable S/PDIF output, if any */ - (void) sc->sc_set_spdif_fn(sc, 0); - repeat: - if (sc->sc_pcm_registered) { + if (sc->sc_child[i].pcm_registered) { error = pcm_unregister(dev); } else { - if (sc->sc_mixer_init) { + if (sc->sc_child[i].mixer_init) error = mixer_uninit(dev); - } } if (error) { @@ -1194,6 +1242,7 @@ static int uaudio_detach(device_t dev) { struct uaudio_softc *sc = device_get_softc(dev); + unsigned i; /* * Stop USB transfers early so that any audio applications @@ -1201,14 +1250,18 @@ uaudio_detach(device_t dev) * any. */ usb_proc_explore_lock(sc->sc_udev); - sc->sc_play_chan.operation = CHAN_OP_DRAIN; - sc->sc_rec_chan.operation = CHAN_OP_DRAIN; + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + sc->sc_play_chan[i].operation = CHAN_OP_DRAIN; + sc->sc_rec_chan[i].operation = CHAN_OP_DRAIN; + } usb_proc_explore_mwait(sc->sc_udev, &sc->sc_config_msg[0], &sc->sc_config_msg[1]); usb_proc_explore_unlock(sc->sc_udev); - usbd_transfer_unsetup(sc->sc_play_chan.xfer, UAUDIO_NCHANBUFS + 1); - usbd_transfer_unsetup(sc->sc_rec_chan.xfer, UAUDIO_NCHANBUFS + 1); + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + usbd_transfer_unsetup(sc->sc_play_chan[i].xfer, UAUDIO_NCHANBUFS + 1); + usbd_transfer_unsetup(sc->sc_rec_chan[i].xfer, UAUDIO_NCHANBUFS + 1); + } uaudio_hid_detach(sc); @@ -1224,6 +1277,9 @@ uaudio_detach(device_t dev) uaudio_mixer_ctl_free(sc); + /* disable S/PDIF output, if any */ + (void) sc->sc_set_spdif_fn(sc, 0); + return (0); } @@ -1414,10 +1470,13 @@ static void uaudio_configure_msg(struct usb_proc_msg *pm) { struct uaudio_softc *sc = ((struct uaudio_configure_msg *)pm)->sc; + unsigned i; usb_proc_explore_unlock(sc->sc_udev); - uaudio_configure_msg_sub(sc, &sc->sc_play_chan, PCMDIR_PLAY); - uaudio_configure_msg_sub(sc, &sc->sc_rec_chan, PCMDIR_REC); + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + uaudio_configure_msg_sub(sc, &sc->sc_play_chan[i], PCMDIR_PLAY); + uaudio_configure_msg_sub(sc, &sc->sc_rec_chan[i], PCMDIR_REC); + } usb_proc_explore_lock(sc->sc_udev); } @@ -1583,6 +1642,22 @@ uaudio20_check_rate(struct usb_device *udev, uint8_t i return (USB_ERR_INVAL); } +static struct uaudio_chan * +uaudio_get_chan(struct uaudio_softc *sc, struct uaudio_chan *chan, + uint8_t iface_index) +{ + unsigned i; + + for (i = 0; i != UAUDIO_MAX_CHILD; i++, chan++) { + if (chan->num_alt == 0) { + chan->iface_index = iface_index; + return (chan); + } else if (chan->iface_index == iface_index) + return (chan); + } + return (NULL); +} + static void uaudio_chan_fill_info_sub(struct uaudio_softc *sc, struct usb_device *udev, uint32_t rate, uint8_t channels, uint8_t bit_resolution) @@ -1890,8 +1965,12 @@ uaudio_chan_fill_info_sub(struct uaudio_softc *sc, str } } - chan = (ep_dir == UE_DIR_IN) ? - &sc->sc_rec_chan : &sc->sc_play_chan; + chan = uaudio_get_chan(sc, (ep_dir == UE_DIR_OUT) ? &sc->sc_play_chan[0] : + &sc->sc_rec_chan[0], curidx); + if (chan == NULL) { + DPRINTF("More than %d sub devices. (skipped)\n", UAUDIO_MAX_CHILD); + goto next_ep; + } if (usbd_get_iface(udev, curidx) == NULL) { DPRINTF("Interface is not valid\n"); @@ -1910,8 +1989,8 @@ uaudio_chan_fill_info_sub(struct uaudio_softc *sc, str uaudio_chan_dump_ep_desc(ed1); #endif DPRINTF("Sample rate = %dHz, channels = %d, " - "bits = %d, format = %s\n", rate, channels, - bit_resolution, p_fmt->description); + "bits = %d, format = %s, ep 0x%02x, chan %p\n", rate, channels, + bit_resolution, p_fmt->description, ed1->bEndpointAddress, chan); chan_alt->sample_rate = rate; chan_alt->p_asf1d = asf1d; @@ -2095,12 +2174,15 @@ uaudio_chan_play_sync_callback(struct usb_xfer *xfer, uint64_t sample_rate; uint8_t buf[4]; uint64_t temp; + unsigned i; int len; int actlen; int nframes; usbd_xfer_status(xfer, &actlen, NULL, NULL, &nframes); + i = uaudio_get_child_index_by_chan(ch->priv_sc, ch); + switch (USB_GET_STATE(xfer)) { case USB_ST_TRANSFERRED: @@ -2151,7 +2233,7 @@ uaudio_chan_play_sync_callback(struct usb_xfer *xfer, * Use feedback value as fallback when there is no * recording channel: */ - if (ch->priv_sc->sc_rec_chan.num_alt == 0) { + if (ch->priv_sc->sc_rec_chan[i].num_alt == 0) { int32_t jitter_max = howmany(sample_rate, 16000); /* @@ -2177,7 +2259,7 @@ uaudio_chan_play_sync_callback(struct usb_xfer *xfer, * source of jitter information to save some * isochronous bandwidth: */ - if (ch->priv_sc->sc_rec_chan.num_alt != 0 && + if (ch->priv_sc->sc_rec_chan[i].num_alt != 0 && uaudio_debug == 0) break; usbd_xfer_set_frames(xfer, 1); @@ -2208,6 +2290,7 @@ uaudio_chan_play_callback(struct usb_xfer *xfer, usb_e uint32_t blockcount; uint32_t n; uint32_t offset; + unsigned i; int sample_size; int actlen; int sumlen; @@ -2217,10 +2300,12 @@ uaudio_chan_play_callback(struct usb_xfer *xfer, usb_e return; } - /* check if there is a record channel */ - if (ch->priv_sc->sc_rec_chan.num_alt > 0) - ch_rec = &ch->priv_sc->sc_rec_chan; - else + i = uaudio_get_child_index_by_chan(ch->priv_sc, ch); + + /* check if there is a valid record channel */ + ch_rec = ch->priv_sc->sc_rec_chan + i; + + if (ch_rec->num_alt == 0) ch_rec = NULL; usbd_xfer_status(xfer, &actlen, &sumlen, NULL, NULL); @@ -2484,11 +2569,9 @@ tr_setup: } void * -uaudio_chan_init(struct uaudio_softc *sc, struct snd_dbuf *b, +uaudio_chan_init(struct uaudio_chan *ch, struct snd_dbuf *b, struct pcm_channel *c, int dir) { - struct uaudio_chan *ch = ((dir == PCMDIR_PLAY) ? - &sc->sc_play_chan : &sc->sc_rec_chan); uint32_t buf_size; uint8_t x; @@ -2679,36 +2762,36 @@ uaudio_chan_start_sub(struct uaudio_chan *ch) } static int -uaudio_chan_need_both(struct uaudio_softc *sc) +uaudio_chan_need_both(struct uaudio_chan *pchan, struct uaudio_chan *rchan) { - return (sc->sc_play_chan.num_alt > 0 && - sc->sc_play_chan.running != 0 && - uaudio_chan_is_async(&sc->sc_play_chan, - sc->sc_play_chan.set_alt) != 0 && - sc->sc_rec_chan.num_alt > 0 && - sc->sc_rec_chan.running == 0); + return (pchan->num_alt > 0 && + pchan->running != 0 && + uaudio_chan_is_async(pchan, pchan->set_alt) != 0 && + rchan->num_alt > 0 && + rchan->running == 0); } static int -uaudio_chan_need_none(struct uaudio_softc *sc) +uaudio_chan_need_none(struct uaudio_chan *pchan, struct uaudio_chan *rchan) { - return (sc->sc_play_chan.num_alt > 0 && - sc->sc_play_chan.running == 0 && - sc->sc_rec_chan.num_alt > 0 && - sc->sc_rec_chan.running == 0); + return (pchan->num_alt > 0 && + pchan->running == 0 && + rchan->num_alt > 0 && + rchan->running == 0); } void uaudio_chan_start(struct uaudio_chan *ch) { struct uaudio_softc *sc = ch->priv_sc; + unsigned i = uaudio_get_child_index_by_chan(sc, ch); /* make operation atomic */ usb_proc_explore_lock(sc->sc_udev); /* check if not running */ if (ch->running == 0) { - uint32_t temp; + uint32_t temp; /* get current buffer size */ temp = 2 * uaudio_get_buffer_size(ch, ch->set_alt); @@ -2721,13 +2804,15 @@ uaudio_chan_start(struct uaudio_chan *ch) ch->end = ch->buf + temp; ch->cur = ch->buf; - if (uaudio_chan_need_both(sc)) { + if (uaudio_chan_need_both( + &sc->sc_play_chan[i], + &sc->sc_rec_chan[i])) { /* * Start both endpoints because of need for * jitter information: */ - uaudio_chan_start_sub(&sc->sc_rec_chan); - uaudio_chan_start_sub(&sc->sc_play_chan); + uaudio_chan_start_sub(&sc->sc_rec_chan[i]); + uaudio_chan_start_sub(&sc->sc_play_chan[i]); } else { uaudio_chan_start_sub(ch); } @@ -2765,6 +2850,7 @@ void uaudio_chan_stop(struct uaudio_chan *ch) { struct uaudio_softc *sc = ch->priv_sc; + unsigned i = uaudio_get_child_index_by_chan(sc, ch); /* make operation atomic */ usb_proc_explore_lock(sc->sc_udev); @@ -2774,18 +2860,22 @@ uaudio_chan_stop(struct uaudio_chan *ch) /* clear running flag */ ch->running = 0; - if (uaudio_chan_need_both(sc)) { + if (uaudio_chan_need_both( + &sc->sc_play_chan[i], + &sc->sc_rec_chan[i])) { /* * Leave the endpoints running because we need * information about jitter! */ - } else if (uaudio_chan_need_none(sc)) { + } else if (uaudio_chan_need_none( + &sc->sc_play_chan[i], + &sc->sc_rec_chan[i])) { /* * Stop both endpoints in case the one was used for * jitter information: */ - uaudio_chan_stop_sub(&sc->sc_rec_chan); - uaudio_chan_stop_sub(&sc->sc_play_chan); + uaudio_chan_stop_sub(&sc->sc_rec_chan[i]); + uaudio_chan_stop_sub(&sc->sc_play_chan[i]); } else { uaudio_chan_stop_sub(ch); } @@ -2812,12 +2902,12 @@ uaudio_mixer_sysctl_handler(SYSCTL_HANDLER_ARGS) sc = (struct uaudio_softc *)oidp->oid_arg1; hint = oidp->oid_arg2; - if (sc->sc_mixer_lock == NULL) + if (sc->sc_child[0].mixer_lock == NULL) return (ENXIO); /* lookup mixer node */ - mtx_lock(sc->sc_mixer_lock); + mtx_lock(sc->sc_child[0].mixer_lock); for (pmc = sc->sc_mixer_root; pmc != NULL; pmc = pmc->next) { for (chan = 0; chan != (int)pmc->nchan; chan++) { if (pmc->wValue[chan] != -1 && @@ -2828,7 +2918,7 @@ uaudio_mixer_sysctl_handler(SYSCTL_HANDLER_ARGS) } } found: - mtx_unlock(sc->sc_mixer_lock); + mtx_unlock(sc->sc_child[0].mixer_lock); error = sysctl_handle_int(oidp, &temp, 0, req); if (error != 0 || req->newptr == NULL) @@ -2836,7 +2926,7 @@ found: /* update mixer value */ - mtx_lock(sc->sc_mixer_lock); + mtx_lock(sc->sc_child[0].mixer_lock); if (pmc != NULL && temp >= pmc->minval && temp <= pmc->maxval) { @@ -2847,7 +2937,7 @@ found: /* start the transfer, if not already started */ usbd_transfer_start(sc->sc_mixer_xfer[0]); } - mtx_unlock(sc->sc_mixer_lock); + mtx_unlock(sc->sc_child[0].mixer_lock); return (0); } @@ -2864,7 +2954,8 @@ uaudio_mixer_ctl_free(struct uaudio_softc *sc) } static void -uaudio_mixer_register_sysctl(struct uaudio_softc *sc, device_t dev) +uaudio_mixer_register_sysctl(struct uaudio_softc *sc, device_t dev, + unsigned index) { struct uaudio_mixer_node *pmc; struct sysctl_oid *mixer_tree; @@ -2873,6 +2964,9 @@ uaudio_mixer_register_sysctl(struct uaudio_softc *sc, int chan; int n; + if (index != 0) + return; + mixer_tree = SYSCTL_ADD_NODE(device_get_sysctl_ctx(dev), SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, "mixer", CTLFLAG_RD, NULL, ""); @@ -3076,10 +3170,10 @@ uaudio_mixer_reload_all(struct uaudio_softc *sc) struct uaudio_mixer_node *pmc; int chan; - if (sc->sc_mixer_lock == NULL) + if (sc->sc_child[0].mixer_lock == NULL) return; - mtx_lock(sc->sc_mixer_lock); + mtx_lock(sc->sc_child[0].mixer_lock); for (pmc = sc->sc_mixer_root; pmc != NULL; pmc = pmc->next) { /* use reset defaults for non-oss controlled settings */ if (pmc->ctl == SOUND_MIXER_NRDEVICES) @@ -3091,7 +3185,7 @@ uaudio_mixer_reload_all(struct uaudio_softc *sc) /* start HID volume keys, if any */ usbd_transfer_start(sc->sc_hid.xfer[0]); - mtx_unlock(sc->sc_mixer_lock); + mtx_unlock(sc->sc_child[0].mixer_lock); } static void @@ -5285,11 +5379,13 @@ uaudio_mixer_ctl_set(struct uaudio_softc *sc, struct u } static void -uaudio_mixer_init(struct uaudio_softc *sc) +uaudio_mixer_init(struct uaudio_softc *sc, unsigned index) { struct uaudio_mixer_node *mc; int32_t i; + if (index != 0) + return; for (mc = sc->sc_mixer_root; mc; mc = mc->next) { if (mc->ctl != SOUND_MIXER_NRDEVICES) { @@ -5297,7 +5393,7 @@ uaudio_mixer_init(struct uaudio_softc *sc) * Set device mask bits. See * /usr/include/machine/soundcard.h */ - sc->sc_mix_info |= 1U << mc->ctl; + sc->sc_child[index].mix_info |= 1U << mc->ctl; } if ((mc->ctl == SOUND_MIXER_NRDEVICES) && (mc->type == MIX_SELECTOR)) { @@ -5305,7 +5401,7 @@ uaudio_mixer_init(struct uaudio_softc *sc) for (i = mc->minval; (i > 0) && (i <= mc->maxval); i++) { if (mc->slctrtype[i - 1] == SOUND_MIXER_NRDEVICES) continue; - sc->sc_recsrc_info |= 1U << mc->slctrtype[i - 1]; + sc->sc_child[index].recsrc_info |= 1U << mc->slctrtype[i - 1]; } } } @@ -5314,50 +5410,57 @@ uaudio_mixer_init(struct uaudio_softc *sc) int uaudio_mixer_init_sub(struct uaudio_softc *sc, struct snd_mixer *m) { - DPRINTF("\n"); + unsigned i = uaudio_get_child_index_by_dev(sc, mix_get_dev(m)); - sc->sc_mixer_lock = mixer_get_lock(m); - sc->sc_mixer_dev = m; + DPRINTF("child=%u\n", i); - if (usbd_transfer_setup(sc->sc_udev, &sc->sc_mixer_iface_index, + sc->sc_child[i].mixer_lock = mixer_get_lock(m); + sc->sc_child[i].mixer_dev = m; + + if (i == 0 && + usbd_transfer_setup(sc->sc_udev, &sc->sc_mixer_iface_index, sc->sc_mixer_xfer, uaudio_mixer_config, 1, sc, - sc->sc_mixer_lock)) { - DPRINTFN(0, "could not allocate USB " - "transfer for audio mixer!\n"); + sc->sc_child[i].mixer_lock)) { + DPRINTFN(0, "could not allocate USB transfer for mixer!\n"); return (ENOMEM); } - if (sc->sc_play_chan.num_alt > 0 && - (sc->sc_mix_info & SOUND_MASK_VOLUME) == 0) { + if (sc->sc_play_chan[i].num_alt > 0 && + (sc->sc_child[i].mix_info & SOUND_MASK_VOLUME) == 0) { mix_setparentchild(m, SOUND_MIXER_VOLUME, SOUND_MASK_PCM); mix_setrealdev(m, SOUND_MIXER_VOLUME, SOUND_MIXER_NONE); } - mix_setdevs(m, sc->sc_mix_info); - mix_setrecdevs(m, sc->sc_recsrc_info); + mix_setdevs(m, sc->sc_child[i].mix_info); + mix_setrecdevs(m, sc->sc_child[i].recsrc_info); return (0); } int -uaudio_mixer_uninit_sub(struct uaudio_softc *sc) +uaudio_mixer_uninit_sub(struct uaudio_softc *sc, struct snd_mixer *m) { - DPRINTF("\n"); + unsigned index = uaudio_get_child_index_by_dev(sc, mix_get_dev(m)); - usbd_transfer_unsetup(sc->sc_mixer_xfer, 1); + DPRINTF("child=%u\n", index); - sc->sc_mixer_lock = NULL; + if (index == 0) + usbd_transfer_unsetup(sc->sc_mixer_xfer, 1); + sc->sc_child[index].mixer_lock = NULL; + return (0); } void -uaudio_mixer_set(struct uaudio_softc *sc, unsigned type, - unsigned left, unsigned right) +uaudio_mixer_set(struct uaudio_softc *sc, struct snd_mixer *m, + unsigned type, unsigned left, unsigned right) { + unsigned index = uaudio_get_child_index_by_dev(sc, mix_get_dev(m)); struct uaudio_mixer_node *mc; int chan; + if (index != 0) + return; for (mc = sc->sc_mixer_root; mc != NULL; mc = mc->next) { - if (mc->ctl == type) { for (chan = 0; chan < mc->nchan; chan++) { uaudio_mixer_ctl_set(sc, mc, chan, @@ -5368,13 +5471,16 @@ uaudio_mixer_set(struct uaudio_softc *sc, unsigned typ } uint32_t -uaudio_mixer_setrecsrc(struct uaudio_softc *sc, uint32_t src) +uaudio_mixer_setrecsrc(struct uaudio_softc *sc, struct snd_mixer *m, uint32_t src) { + unsigned index = uaudio_get_child_index_by_dev(sc, mix_get_dev(m)); struct uaudio_mixer_node *mc; uint32_t mask; uint32_t temp; int32_t i; + if (index != 0) + return (0); for (mc = sc->sc_mixer_root; mc; mc = mc->next) { if ((mc->ctl == SOUND_MIXER_NRDEVICES) && @@ -6002,7 +6108,7 @@ uaudio_hid_rx_callback(struct usb_xfer *xfer, usb_erro id = 0; } - m = sc->sc_mixer_dev; + m = sc->sc_child[0].mixer_dev; if ((sc->sc_hid.flags & UAUDIO_HID_HAS_MUTE) && (sc->sc_hid.mute_id == id) && @@ -6067,7 +6173,7 @@ uaudio_hid_probe(struct uaudio_softc *sc, if (!(sc->sc_hid.flags & UAUDIO_HID_VALID)) return (-1); - if (sc->sc_mixer_lock == NULL) + if (sc->sc_child[0].mixer_lock == NULL) return (-1); /* Get HID descriptor */ @@ -6128,7 +6234,7 @@ uaudio_hid_probe(struct uaudio_softc *sc, /* allocate USB transfers */ error = usbd_transfer_setup(uaa->device, &sc->sc_hid.iface_index, sc->sc_hid.xfer, uaudio_hid_config, UAUDIO_HID_N_TRANSFER, - sc, sc->sc_mixer_lock); + sc, sc->sc_child[0].mixer_lock); if (error) { DPRINTF("error=%s\n", usbd_errstr(error)); return (-1); Modified: stable/11/sys/dev/sound/usb/uaudio.h ============================================================================== --- stable/11/sys/dev/sound/usb/uaudio.h Mon Apr 13 16:33:10 2020 (r359888) +++ stable/11/sys/dev/sound/usb/uaudio.h Mon Apr 13 16:33:45 2020 (r359889) @@ -39,7 +39,7 @@ struct pcm_channel; extern int uaudio_attach_sub(device_t dev, kobj_class_t mixer_class, kobj_class_t chan_class); extern int uaudio_detach_sub(device_t dev); -extern void *uaudio_chan_init(struct uaudio_softc *sc, struct snd_dbuf *b, +extern void *uaudio_chan_init(struct uaudio_chan *ch, struct snd_dbuf *b, struct pcm_channel *c, int dir); extern int uaudio_chan_free(struct uaudio_chan *ch); extern int uaudio_chan_set_param_blocksize(struct uaudio_chan *ch, @@ -56,12 +56,12 @@ extern int uaudio_chan_set_param_format(struct uaudio_ uint32_t format); extern void uaudio_chan_start(struct uaudio_chan *ch); extern void uaudio_chan_stop(struct uaudio_chan *ch); -extern int uaudio_mixer_init_sub(struct uaudio_softc *sc, - struct snd_mixer *m); -extern int uaudio_mixer_uninit_sub(struct uaudio_softc *sc); -extern void uaudio_mixer_set(struct uaudio_softc *sc, unsigned type, - unsigned left, unsigned right); -extern uint32_t uaudio_mixer_setrecsrc(struct uaudio_softc *sc, uint32_t src); +extern int uaudio_mixer_init_sub(struct uaudio_softc *, struct snd_mixer *); +extern int uaudio_mixer_uninit_sub(struct uaudio_softc *, struct snd_mixer *); +extern void uaudio_mixer_set(struct uaudio_softc *, struct snd_mixer *, + unsigned type, unsigned left, unsigned right); +extern uint32_t uaudio_mixer_setrecsrc(struct uaudio_softc *, struct snd_mixer *, + uint32_t src); int uaudio_get_vendor(device_t dev); int uaudio_get_product(device_t dev); Modified: stable/11/sys/dev/sound/usb/uaudio_pcm.c ============================================================================== --- stable/11/sys/dev/sound/usb/uaudio_pcm.c Mon Apr 13 16:33:10 2020 (r359888) +++ stable/11/sys/dev/sound/usb/uaudio_pcm.c Mon Apr 13 16:33:45 2020 (r359889) @@ -144,7 +144,7 @@ ua_mixer_set(struct snd_mixer *m, unsigned type, unsig do_unlock = 1; mtx_lock(mtx); } - uaudio_mixer_set(mix_getdevinfo(m), type, left, right); + uaudio_mixer_set(mix_getdevinfo(m), m, type, left, right); if (do_unlock) { mtx_unlock(mtx); } @@ -164,7 +164,7 @@ ua_mixer_setrecsrc(struct snd_mixer *m, uint32_t src) do_unlock = 1; mtx_lock(mtx); } - retval = uaudio_mixer_setrecsrc(mix_getdevinfo(m), src); + retval = uaudio_mixer_setrecsrc(mix_getdevinfo(m), m, src); if (do_unlock) { mtx_unlock(mtx); } @@ -174,7 +174,7 @@ ua_mixer_setrecsrc(struct snd_mixer *m, uint32_t src) static int ua_mixer_uninit(struct snd_mixer *m) { - return (uaudio_mixer_uninit_sub(mix_getdevinfo(m))); + return (uaudio_mixer_uninit_sub(mix_getdevinfo(m), m)); } static kobj_method_t ua_mixer_methods[] = { From owner-svn-src-stable@freebsd.org Mon Apr 13 16:34:22 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7C9152C34CB; Mon, 13 Apr 2020 16:34:22 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491DjB31YTz3NvC; Mon, 13 Apr 2020 16:34:22 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4874D1E607; Mon, 13 Apr 2020 16:34:22 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DGYM5L093519; Mon, 13 Apr 2020 16:34:22 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DGYLiv093516; Mon, 13 Apr 2020 16:34:21 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004131634.03DGYLiv093516@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 13 Apr 2020 16:34:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r359890 - stable/10/sys/dev/sound/usb X-SVN-Group: stable-10 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/10/sys/dev/sound/usb X-SVN-Commit-Revision: 359890 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 16:34:22 -0000 Author: hselasky Date: Mon Apr 13 16:34:21 2020 New Revision: 359890 URL: https://svnweb.freebsd.org/changeset/base/359890 Log: MFC r359446: Add support for multiple playback and recording devices per physical USB audio device. This requires some structural refactoring inside the driver, mostly about converting existing audio channel structures into arrays. The main audio mixer is provided by the first PCM instance. The non-first audio instances may only have a software mixer for PCM playback. Tested by: Horse Ma Sponsored by: Mellanox Technologies Modified: stable/10/sys/dev/sound/usb/uaudio.c stable/10/sys/dev/sound/usb/uaudio.h stable/10/sys/dev/sound/usb/uaudio_pcm.c Directory Properties: stable/10/ (props changed) Modified: stable/10/sys/dev/sound/usb/uaudio.c ============================================================================== --- stable/10/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:33:45 2020 (r359889) +++ stable/10/sys/dev/sound/usb/uaudio.c Mon Apr 13 16:34:21 2020 (r359890) @@ -264,6 +264,8 @@ struct uaudio_chan { #define CHAN_OP_START 1 #define CHAN_OP_STOP 2 #define CHAN_OP_DRAIN 3 + + uint8_t iface_index; }; #define UMIDI_EMB_JACK_MAX 16 /* units */ @@ -349,37 +351,45 @@ struct uaudio_hid { #define UAUDIO_SPDIF_OUT_96K 0x04 /* Out sample rate = 96K */ #define UAUDIO_SPDIF_IN_MIX 0x10 /* Input mix enable */ +#define UAUDIO_MAX_CHILD 2 + +struct uaudio_softc_child { + device_t pcm_device; + struct mtx *mixer_lock; + struct snd_mixer *mixer_dev; + + uint32_t mix_info; + uint32_t recsrc_info; + + uint8_t pcm_registered:1; + uint8_t mixer_init:1; +}; + struct uaudio_softc { struct sbuf sc_sndstat; struct sndcard_func sc_sndcard_func; - struct uaudio_chan sc_rec_chan; - struct uaudio_chan sc_play_chan; + struct uaudio_chan sc_rec_chan[UAUDIO_MAX_CHILD]; + struct uaudio_chan sc_play_chan[UAUDIO_MAX_CHILD]; struct umidi_chan sc_midi_chan; struct uaudio_hid sc_hid; struct uaudio_search_result sc_mixer_clocks; struct uaudio_mixer_node sc_mixer_node; struct uaudio_configure_msg sc_config_msg[2]; + struct uaudio_softc_child sc_child[UAUDIO_MAX_CHILD]; - struct mtx *sc_mixer_lock; - struct snd_mixer *sc_mixer_dev; struct usb_device *sc_udev; struct usb_xfer *sc_mixer_xfer[1]; struct uaudio_mixer_node *sc_mixer_root; struct uaudio_mixer_node *sc_mixer_curr; int (*sc_set_spdif_fn) (struct uaudio_softc *, int); - uint32_t sc_mix_info; - uint32_t sc_recsrc_info; - uint16_t sc_audio_rev; uint16_t sc_mixer_count; - uint8_t sc_sndstat_valid; uint8_t sc_mixer_iface_index; uint8_t sc_mixer_iface_no; uint8_t sc_mixer_chan; - uint8_t sc_pcm_registered:1; - uint8_t sc_mixer_init:1; + uint8_t sc_sndstat_valid:1; uint8_t sc_uq_audio_swap_lr:1; uint8_t sc_uq_au_inp_async:1; uint8_t sc_uq_au_no_xu:1; @@ -479,7 +489,7 @@ static usb_proc_callback_t uaudio_configure_msg; static int uaudio_mixer_sysctl_handler(SYSCTL_HANDLER_ARGS); static void uaudio_mixer_ctl_free(struct uaudio_softc *); -static void uaudio_mixer_register_sysctl(struct uaudio_softc *, device_t); +static void uaudio_mixer_register_sysctl(struct uaudio_softc *, device_t, unsigned); static void uaudio_mixer_reload_all(struct uaudio_softc *); static void uaudio_mixer_controls_create_ftu(struct uaudio_softc *); @@ -539,7 +549,7 @@ static void uaudio_mixer_add_ctl(struct uaudio_softc * static void uaudio_mixer_fill_info(struct uaudio_softc *, struct usb_device *, void *); static int uaudio_mixer_signext(uint8_t, int); -static void uaudio_mixer_init(struct uaudio_softc *); +static void uaudio_mixer_init(struct uaudio_softc *, unsigned); static uint8_t umidi_convert_to_usb(struct umidi_sub_chan *, uint8_t, uint8_t); static struct umidi_sub_chan *umidi_sub_by_fifo(struct usb_fifo *); static void umidi_start_read(struct usb_fifo *); @@ -829,6 +839,33 @@ static const STRUCT_USB_HOST_ID __used uaudio_devs[] = USB_IFACE_SUBCLASS(UISUBCLASS_MIDISTREAM),}, }; +static unsigned +uaudio_get_child_index_by_dev(struct uaudio_softc *sc, device_t dev) +{ + unsigned i; + + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + if (dev == sc->sc_child[i].pcm_device) + return (i); + } + panic("uaudio_get_child_index_dev: Invalid device: %p\n", dev); + return (0); +} + +static unsigned +uaudio_get_child_index_by_chan(struct uaudio_softc *sc, struct uaudio_chan *ch) +{ + unsigned i; + + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + if ((sc->sc_play_chan + i) == ch || + (sc->sc_rec_chan + i) == ch) + return (i); + } + panic("uaudio_get_child_index_by_chan: Invalid chan: %p\n", ch); + return (0); +} + static int uaudio_probe(device_t dev) { @@ -917,10 +954,8 @@ uaudio_attach(device_t dev) struct uaudio_softc *sc = device_get_softc(dev); struct usb_interface_descriptor *id; usb_error_t err; - device_t child; + unsigned i; - sc->sc_play_chan.priv_sc = sc; - sc->sc_rec_chan.priv_sc = sc; sc->sc_udev = uaa->device; sc->sc_mixer_iface_index = uaa->info.bIfaceIndex; sc->sc_mixer_iface_no = uaa->info.bIfaceNum; @@ -978,57 +1013,63 @@ uaudio_attach(device_t dev) DPRINTF("%d mixer controls\n", sc->sc_mixer_count); - if (sc->sc_play_chan.num_alt > 0) { + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { uint8_t x; + if (sc->sc_play_chan[i].num_alt <= 0) + break; + /* * Need to set a default alternate interface, else * some USB audio devices might go into an infinte * re-enumeration loop: */ err = usbd_set_alt_interface_index(sc->sc_udev, - sc->sc_play_chan.usb_alt[0].iface_index, - sc->sc_play_chan.usb_alt[0].iface_alt_index); + sc->sc_play_chan[i].usb_alt[0].iface_index, + sc->sc_play_chan[i].usb_alt[0].iface_alt_index); if (err) { DPRINTF("setting of alternate index failed: %s!\n", usbd_errstr(err)); } - for (x = 0; x != sc->sc_play_chan.num_alt; x++) { - device_printf(dev, "Play: %d Hz, %d ch, %s format, " - "2x8ms buffer.\n", - sc->sc_play_chan.usb_alt[x].sample_rate, - sc->sc_play_chan.usb_alt[x].channels, - sc->sc_play_chan.usb_alt[x].p_fmt->description); + for (x = 0; x != sc->sc_play_chan[i].num_alt; x++) { + device_printf(dev, "Play[%u]: %d Hz, %d ch, %s format, " + "2x8ms buffer.\n", i, + sc->sc_play_chan[i].usb_alt[x].sample_rate, + sc->sc_play_chan[i].usb_alt[x].channels, + sc->sc_play_chan[i].usb_alt[x].p_fmt->description); } - } else { - device_printf(dev, "No playback.\n"); } + if (i == 0) + device_printf(dev, "No playback.\n"); - if (sc->sc_rec_chan.num_alt > 0) { + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { uint8_t x; + if (sc->sc_rec_chan[i].num_alt <= 0) + break; + /* * Need to set a default alternate interface, else * some USB audio devices might go into an infinte * re-enumeration loop: */ err = usbd_set_alt_interface_index(sc->sc_udev, - sc->sc_rec_chan.usb_alt[0].iface_index, - sc->sc_rec_chan.usb_alt[0].iface_alt_index); + sc->sc_rec_chan[i].usb_alt[0].iface_index, + sc->sc_rec_chan[i].usb_alt[0].iface_alt_index); if (err) { DPRINTF("setting of alternate index failed: %s!\n", usbd_errstr(err)); } - for (x = 0; x != sc->sc_rec_chan.num_alt; x++) { - device_printf(dev, "Record: %d Hz, %d ch, %s format, " - "2x8ms buffer.\n", - sc->sc_rec_chan.usb_alt[x].sample_rate, - sc->sc_rec_chan.usb_alt[x].channels, - sc->sc_rec_chan.usb_alt[x].p_fmt->description); + for (x = 0; x != sc->sc_rec_chan[i].num_alt; x++) { + device_printf(dev, "Record[%u]: %d Hz, %d ch, %s format, " + "2x8ms buffer.\n", i, + sc->sc_rec_chan[i].usb_alt[x].sample_rate, + sc->sc_rec_chan[i].usb_alt[x].channels, + sc->sc_rec_chan[i].usb_alt[x].p_fmt->description); } - } else { - device_printf(dev, "No recording.\n"); } + if (i == 0) + device_printf(dev, "No recording.\n"); if (sc->sc_midi_chan.valid == 0) { if (usbd_lookup_id_by_uaa(uaudio_vendor_midi, @@ -1060,16 +1101,20 @@ uaudio_attach(device_t dev) * Only attach a PCM device if we have a playback, recording * or mixer device present: */ - if (sc->sc_play_chan.num_alt > 0 || - sc->sc_rec_chan.num_alt > 0 || - sc->sc_mix_info) { - child = device_add_child(dev, "pcm", -1); + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + if (sc->sc_play_chan[i].num_alt <= 0 && + sc->sc_rec_chan[i].num_alt <= 0 && + sc->sc_child[i].mix_info == 0) + continue; + sc->sc_child[i].pcm_device = + device_add_child(dev, "pcm", -1); - if (child == NULL) { + if (sc->sc_child[i].pcm_device == NULL) { DPRINTF("out of memory\n"); goto detach; } - device_set_ivars(child, &sc->sc_sndcard_func); + device_set_ivars(sc->sc_child[i].pcm_device, + &sc->sc_sndcard_func); } if (bus_generic_attach(dev)) { @@ -1108,16 +1153,17 @@ int uaudio_attach_sub(device_t dev, kobj_class_t mixer_class, kobj_class_t chan_class) { struct uaudio_softc *sc = device_get_softc(device_get_parent(dev)); + unsigned i = uaudio_get_child_index_by_dev(sc, dev); char status[SND_STATUSLEN]; - uaudio_mixer_init(sc); + uaudio_mixer_init(sc, i); if (sc->sc_uq_audio_swap_lr) { DPRINTF("hardware has swapped left and right\n"); /* uaudio_pcm_setflags(dev, SD_F_PSWAPLR); */ } - if (sc->sc_play_chan.num_alt > 0 && - (sc->sc_mix_info & SOUND_MASK_PCM) == 0) { + if (sc->sc_play_chan[i].num_alt > 0 && + (sc->sc_child[i].mix_info & SOUND_MASK_PCM) == 0) { DPRINTF("emulating master volume\n"); @@ -1133,34 +1179,39 @@ uaudio_attach_sub(device_t dev, kobj_class_t mixer_cla } if (mixer_init(dev, mixer_class, sc)) goto detach; - sc->sc_mixer_init = 1; + sc->sc_child[i].mixer_init = 1; mixer_hwvol_init(dev); snprintf(status, sizeof(status), "at ? %s", PCM_KLDSTRING(snd_uaudio)); if (pcm_register(dev, sc, - (sc->sc_play_chan.num_alt > 0) ? 1 : 0, - (sc->sc_rec_chan.num_alt > 0) ? 1 : 0)) { + (sc->sc_play_chan[i].num_alt > 0) ? 1 : 0, + (sc->sc_rec_chan[i].num_alt > 0) ? 1 : 0)) { goto detach; } uaudio_pcm_setflags(dev, SD_F_MPSAFE); - sc->sc_pcm_registered = 1; + sc->sc_child[i].pcm_registered = 1; - if (sc->sc_play_chan.num_alt > 0) { - pcm_addchan(dev, PCMDIR_PLAY, chan_class, sc); + if (sc->sc_play_chan[i].num_alt > 0) { + sc->sc_play_chan[i].priv_sc = sc; + pcm_addchan(dev, PCMDIR_PLAY, chan_class, + &sc->sc_play_chan[i]); } - if (sc->sc_rec_chan.num_alt > 0) { - pcm_addchan(dev, PCMDIR_REC, chan_class, sc); + + if (sc->sc_rec_chan[i].num_alt > 0) { + sc->sc_rec_chan[i].priv_sc = sc; + pcm_addchan(dev, PCMDIR_REC, chan_class, + &sc->sc_rec_chan[i]); } pcm_setstatus(dev, status); - uaudio_mixer_register_sysctl(sc, dev); + uaudio_mixer_register_sysctl(sc, dev, i); SYSCTL_ADD_INT(device_get_sysctl_ctx(dev), SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, - "feedback_rate", CTLFLAG_RD, &sc->sc_play_chan.feedback_rate, + "feedback_rate", CTLFLAG_RD, &sc->sc_play_chan[i].feedback_rate, 0, "Feedback sample rate in Hz"); return (0); /* success */ @@ -1174,18 +1225,15 @@ int uaudio_detach_sub(device_t dev) { struct uaudio_softc *sc = device_get_softc(device_get_parent(dev)); + unsigned i = uaudio_get_child_index_by_dev(sc, dev); int error = 0; - /* disable S/PDIF output, if any */ - (void) sc->sc_set_spdif_fn(sc, 0); - repeat: - if (sc->sc_pcm_registered) { + if (sc->sc_child[i].pcm_registered) { error = pcm_unregister(dev); } else { - if (sc->sc_mixer_init) { + if (sc->sc_child[i].mixer_init) error = mixer_uninit(dev); - } } if (error) { @@ -1200,6 +1248,7 @@ static int uaudio_detach(device_t dev) { struct uaudio_softc *sc = device_get_softc(dev); + unsigned i; /* * Stop USB transfers early so that any audio applications @@ -1207,14 +1256,18 @@ uaudio_detach(device_t dev) * any. */ usb_proc_explore_lock(sc->sc_udev); - sc->sc_play_chan.operation = CHAN_OP_DRAIN; - sc->sc_rec_chan.operation = CHAN_OP_DRAIN; + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + sc->sc_play_chan[i].operation = CHAN_OP_DRAIN; + sc->sc_rec_chan[i].operation = CHAN_OP_DRAIN; + } usb_proc_explore_mwait(sc->sc_udev, &sc->sc_config_msg[0], &sc->sc_config_msg[1]); usb_proc_explore_unlock(sc->sc_udev); - usbd_transfer_unsetup(sc->sc_play_chan.xfer, UAUDIO_NCHANBUFS + 1); - usbd_transfer_unsetup(sc->sc_rec_chan.xfer, UAUDIO_NCHANBUFS + 1); + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + usbd_transfer_unsetup(sc->sc_play_chan[i].xfer, UAUDIO_NCHANBUFS + 1); + usbd_transfer_unsetup(sc->sc_rec_chan[i].xfer, UAUDIO_NCHANBUFS + 1); + } uaudio_hid_detach(sc); @@ -1230,6 +1283,9 @@ uaudio_detach(device_t dev) uaudio_mixer_ctl_free(sc); + /* disable S/PDIF output, if any */ + (void) sc->sc_set_spdif_fn(sc, 0); + return (0); } @@ -1420,10 +1476,13 @@ static void uaudio_configure_msg(struct usb_proc_msg *pm) { struct uaudio_softc *sc = ((struct uaudio_configure_msg *)pm)->sc; + unsigned i; usb_proc_explore_unlock(sc->sc_udev); - uaudio_configure_msg_sub(sc, &sc->sc_play_chan, PCMDIR_PLAY); - uaudio_configure_msg_sub(sc, &sc->sc_rec_chan, PCMDIR_REC); + for (i = 0; i != UAUDIO_MAX_CHILD; i++) { + uaudio_configure_msg_sub(sc, &sc->sc_play_chan[i], PCMDIR_PLAY); + uaudio_configure_msg_sub(sc, &sc->sc_rec_chan[i], PCMDIR_REC); + } usb_proc_explore_lock(sc->sc_udev); } @@ -1589,6 +1648,22 @@ uaudio20_check_rate(struct usb_device *udev, uint8_t i return (USB_ERR_INVAL); } +static struct uaudio_chan * +uaudio_get_chan(struct uaudio_softc *sc, struct uaudio_chan *chan, + uint8_t iface_index) +{ + unsigned i; + + for (i = 0; i != UAUDIO_MAX_CHILD; i++, chan++) { + if (chan->num_alt == 0) { + chan->iface_index = iface_index; + return (chan); + } else if (chan->iface_index == iface_index) + return (chan); + } + return (NULL); +} + static void uaudio_chan_fill_info_sub(struct uaudio_softc *sc, struct usb_device *udev, uint32_t rate, uint8_t channels, uint8_t bit_resolution) @@ -1896,8 +1971,12 @@ uaudio_chan_fill_info_sub(struct uaudio_softc *sc, str } } - chan = (ep_dir == UE_DIR_IN) ? - &sc->sc_rec_chan : &sc->sc_play_chan; + chan = uaudio_get_chan(sc, (ep_dir == UE_DIR_OUT) ? &sc->sc_play_chan[0] : + &sc->sc_rec_chan[0], curidx); + if (chan == NULL) { + DPRINTF("More than %d sub devices. (skipped)\n", UAUDIO_MAX_CHILD); + goto next_ep; + } if (usbd_get_iface(udev, curidx) == NULL) { DPRINTF("Interface is not valid\n"); @@ -1916,8 +1995,8 @@ uaudio_chan_fill_info_sub(struct uaudio_softc *sc, str uaudio_chan_dump_ep_desc(ed1); #endif DPRINTF("Sample rate = %dHz, channels = %d, " - "bits = %d, format = %s\n", rate, channels, - bit_resolution, p_fmt->description); + "bits = %d, format = %s, ep 0x%02x, chan %p\n", rate, channels, + bit_resolution, p_fmt->description, ed1->bEndpointAddress, chan); chan_alt->sample_rate = rate; chan_alt->p_asf1d = asf1d; @@ -2101,12 +2180,15 @@ uaudio_chan_play_sync_callback(struct usb_xfer *xfer, uint64_t sample_rate; uint8_t buf[4]; uint64_t temp; + unsigned i; int len; int actlen; int nframes; usbd_xfer_status(xfer, &actlen, NULL, NULL, &nframes); + i = uaudio_get_child_index_by_chan(ch->priv_sc, ch); + switch (USB_GET_STATE(xfer)) { case USB_ST_TRANSFERRED: @@ -2157,7 +2239,7 @@ uaudio_chan_play_sync_callback(struct usb_xfer *xfer, * Use feedback value as fallback when there is no * recording channel: */ - if (ch->priv_sc->sc_rec_chan.num_alt == 0) { + if (ch->priv_sc->sc_rec_chan[i].num_alt == 0) { int32_t jitter_max = howmany(sample_rate, 16000); /* @@ -2183,7 +2265,7 @@ uaudio_chan_play_sync_callback(struct usb_xfer *xfer, * source of jitter information to save some * isochronous bandwidth: */ - if (ch->priv_sc->sc_rec_chan.num_alt != 0 && + if (ch->priv_sc->sc_rec_chan[i].num_alt != 0 && uaudio_debug == 0) break; usbd_xfer_set_frames(xfer, 1); @@ -2214,6 +2296,7 @@ uaudio_chan_play_callback(struct usb_xfer *xfer, usb_e uint32_t blockcount; uint32_t n; uint32_t offset; + unsigned i; int sample_size; int actlen; int sumlen; @@ -2223,10 +2306,12 @@ uaudio_chan_play_callback(struct usb_xfer *xfer, usb_e return; } - /* check if there is a record channel */ - if (ch->priv_sc->sc_rec_chan.num_alt > 0) - ch_rec = &ch->priv_sc->sc_rec_chan; - else + i = uaudio_get_child_index_by_chan(ch->priv_sc, ch); + + /* check if there is a valid record channel */ + ch_rec = ch->priv_sc->sc_rec_chan + i; + + if (ch_rec->num_alt == 0) ch_rec = NULL; usbd_xfer_status(xfer, &actlen, &sumlen, NULL, NULL); @@ -2490,11 +2575,9 @@ tr_setup: } void * -uaudio_chan_init(struct uaudio_softc *sc, struct snd_dbuf *b, +uaudio_chan_init(struct uaudio_chan *ch, struct snd_dbuf *b, struct pcm_channel *c, int dir) { - struct uaudio_chan *ch = ((dir == PCMDIR_PLAY) ? - &sc->sc_play_chan : &sc->sc_rec_chan); uint32_t buf_size; uint8_t x; @@ -2685,36 +2768,36 @@ uaudio_chan_start_sub(struct uaudio_chan *ch) } static int -uaudio_chan_need_both(struct uaudio_softc *sc) +uaudio_chan_need_both(struct uaudio_chan *pchan, struct uaudio_chan *rchan) { - return (sc->sc_play_chan.num_alt > 0 && - sc->sc_play_chan.running != 0 && - uaudio_chan_is_async(&sc->sc_play_chan, - sc->sc_play_chan.set_alt) != 0 && - sc->sc_rec_chan.num_alt > 0 && - sc->sc_rec_chan.running == 0); + return (pchan->num_alt > 0 && + pchan->running != 0 && + uaudio_chan_is_async(pchan, pchan->set_alt) != 0 && + rchan->num_alt > 0 && + rchan->running == 0); } static int -uaudio_chan_need_none(struct uaudio_softc *sc) +uaudio_chan_need_none(struct uaudio_chan *pchan, struct uaudio_chan *rchan) { - return (sc->sc_play_chan.num_alt > 0 && - sc->sc_play_chan.running == 0 && - sc->sc_rec_chan.num_alt > 0 && - sc->sc_rec_chan.running == 0); + return (pchan->num_alt > 0 && + pchan->running == 0 && + rchan->num_alt > 0 && + rchan->running == 0); } void uaudio_chan_start(struct uaudio_chan *ch) { struct uaudio_softc *sc = ch->priv_sc; + unsigned i = uaudio_get_child_index_by_chan(sc, ch); /* make operation atomic */ usb_proc_explore_lock(sc->sc_udev); /* check if not running */ if (ch->running == 0) { - uint32_t temp; + uint32_t temp; /* get current buffer size */ temp = 2 * uaudio_get_buffer_size(ch, ch->set_alt); @@ -2727,13 +2810,15 @@ uaudio_chan_start(struct uaudio_chan *ch) ch->end = ch->buf + temp; ch->cur = ch->buf; - if (uaudio_chan_need_both(sc)) { + if (uaudio_chan_need_both( + &sc->sc_play_chan[i], + &sc->sc_rec_chan[i])) { /* * Start both endpoints because of need for * jitter information: */ - uaudio_chan_start_sub(&sc->sc_rec_chan); - uaudio_chan_start_sub(&sc->sc_play_chan); + uaudio_chan_start_sub(&sc->sc_rec_chan[i]); + uaudio_chan_start_sub(&sc->sc_play_chan[i]); } else { uaudio_chan_start_sub(ch); } @@ -2771,6 +2856,7 @@ void uaudio_chan_stop(struct uaudio_chan *ch) { struct uaudio_softc *sc = ch->priv_sc; + unsigned i = uaudio_get_child_index_by_chan(sc, ch); /* make operation atomic */ usb_proc_explore_lock(sc->sc_udev); @@ -2780,18 +2866,22 @@ uaudio_chan_stop(struct uaudio_chan *ch) /* clear running flag */ ch->running = 0; - if (uaudio_chan_need_both(sc)) { + if (uaudio_chan_need_both( + &sc->sc_play_chan[i], + &sc->sc_rec_chan[i])) { /* * Leave the endpoints running because we need * information about jitter! */ - } else if (uaudio_chan_need_none(sc)) { + } else if (uaudio_chan_need_none( + &sc->sc_play_chan[i], + &sc->sc_rec_chan[i])) { /* * Stop both endpoints in case the one was used for * jitter information: */ - uaudio_chan_stop_sub(&sc->sc_rec_chan); - uaudio_chan_stop_sub(&sc->sc_play_chan); + uaudio_chan_stop_sub(&sc->sc_rec_chan[i]); + uaudio_chan_stop_sub(&sc->sc_play_chan[i]); } else { uaudio_chan_stop_sub(ch); } @@ -2818,12 +2908,12 @@ uaudio_mixer_sysctl_handler(SYSCTL_HANDLER_ARGS) sc = (struct uaudio_softc *)oidp->oid_arg1; hint = oidp->oid_arg2; - if (sc->sc_mixer_lock == NULL) + if (sc->sc_child[0].mixer_lock == NULL) return (ENXIO); /* lookup mixer node */ - mtx_lock(sc->sc_mixer_lock); + mtx_lock(sc->sc_child[0].mixer_lock); for (pmc = sc->sc_mixer_root; pmc != NULL; pmc = pmc->next) { for (chan = 0; chan != (int)pmc->nchan; chan++) { if (pmc->wValue[chan] != -1 && @@ -2834,7 +2924,7 @@ uaudio_mixer_sysctl_handler(SYSCTL_HANDLER_ARGS) } } found: - mtx_unlock(sc->sc_mixer_lock); + mtx_unlock(sc->sc_child[0].mixer_lock); error = sysctl_handle_int(oidp, &temp, 0, req); if (error != 0 || req->newptr == NULL) @@ -2842,7 +2932,7 @@ found: /* update mixer value */ - mtx_lock(sc->sc_mixer_lock); + mtx_lock(sc->sc_child[0].mixer_lock); if (pmc != NULL && temp >= pmc->minval && temp <= pmc->maxval) { @@ -2853,7 +2943,7 @@ found: /* start the transfer, if not already started */ usbd_transfer_start(sc->sc_mixer_xfer[0]); } - mtx_unlock(sc->sc_mixer_lock); + mtx_unlock(sc->sc_child[0].mixer_lock); return (0); } @@ -2870,7 +2960,8 @@ uaudio_mixer_ctl_free(struct uaudio_softc *sc) } static void -uaudio_mixer_register_sysctl(struct uaudio_softc *sc, device_t dev) +uaudio_mixer_register_sysctl(struct uaudio_softc *sc, device_t dev, + unsigned index) { struct uaudio_mixer_node *pmc; struct sysctl_oid *mixer_tree; @@ -2879,6 +2970,9 @@ uaudio_mixer_register_sysctl(struct uaudio_softc *sc, int chan; int n; + if (index != 0) + return; + mixer_tree = SYSCTL_ADD_NODE(device_get_sysctl_ctx(dev), SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, "mixer", CTLFLAG_RD, NULL, ""); @@ -3082,10 +3176,10 @@ uaudio_mixer_reload_all(struct uaudio_softc *sc) struct uaudio_mixer_node *pmc; int chan; - if (sc->sc_mixer_lock == NULL) + if (sc->sc_child[0].mixer_lock == NULL) return; - mtx_lock(sc->sc_mixer_lock); + mtx_lock(sc->sc_child[0].mixer_lock); for (pmc = sc->sc_mixer_root; pmc != NULL; pmc = pmc->next) { /* use reset defaults for non-oss controlled settings */ if (pmc->ctl == SOUND_MIXER_NRDEVICES) @@ -3097,7 +3191,7 @@ uaudio_mixer_reload_all(struct uaudio_softc *sc) /* start HID volume keys, if any */ usbd_transfer_start(sc->sc_hid.xfer[0]); - mtx_unlock(sc->sc_mixer_lock); + mtx_unlock(sc->sc_child[0].mixer_lock); } static void @@ -5291,11 +5385,13 @@ uaudio_mixer_ctl_set(struct uaudio_softc *sc, struct u } static void -uaudio_mixer_init(struct uaudio_softc *sc) +uaudio_mixer_init(struct uaudio_softc *sc, unsigned index) { struct uaudio_mixer_node *mc; int32_t i; + if (index != 0) + return; for (mc = sc->sc_mixer_root; mc; mc = mc->next) { if (mc->ctl != SOUND_MIXER_NRDEVICES) { @@ -5303,7 +5399,7 @@ uaudio_mixer_init(struct uaudio_softc *sc) * Set device mask bits. See * /usr/include/machine/soundcard.h */ - sc->sc_mix_info |= 1U << mc->ctl; + sc->sc_child[index].mix_info |= 1U << mc->ctl; } if ((mc->ctl == SOUND_MIXER_NRDEVICES) && (mc->type == MIX_SELECTOR)) { @@ -5311,7 +5407,7 @@ uaudio_mixer_init(struct uaudio_softc *sc) for (i = mc->minval; (i > 0) && (i <= mc->maxval); i++) { if (mc->slctrtype[i - 1] == SOUND_MIXER_NRDEVICES) continue; - sc->sc_recsrc_info |= 1U << mc->slctrtype[i - 1]; + sc->sc_child[index].recsrc_info |= 1U << mc->slctrtype[i - 1]; } } } @@ -5320,50 +5416,57 @@ uaudio_mixer_init(struct uaudio_softc *sc) int uaudio_mixer_init_sub(struct uaudio_softc *sc, struct snd_mixer *m) { - DPRINTF("\n"); + unsigned i = uaudio_get_child_index_by_dev(sc, mix_get_dev(m)); - sc->sc_mixer_lock = mixer_get_lock(m); - sc->sc_mixer_dev = m; + DPRINTF("child=%u\n", i); - if (usbd_transfer_setup(sc->sc_udev, &sc->sc_mixer_iface_index, + sc->sc_child[i].mixer_lock = mixer_get_lock(m); + sc->sc_child[i].mixer_dev = m; + + if (i == 0 && + usbd_transfer_setup(sc->sc_udev, &sc->sc_mixer_iface_index, sc->sc_mixer_xfer, uaudio_mixer_config, 1, sc, - sc->sc_mixer_lock)) { - DPRINTFN(0, "could not allocate USB " - "transfer for audio mixer!\n"); + sc->sc_child[i].mixer_lock)) { + DPRINTFN(0, "could not allocate USB transfer for mixer!\n"); return (ENOMEM); } - if (sc->sc_play_chan.num_alt > 0 && - (sc->sc_mix_info & SOUND_MASK_VOLUME) == 0) { + if (sc->sc_play_chan[i].num_alt > 0 && + (sc->sc_child[i].mix_info & SOUND_MASK_VOLUME) == 0) { mix_setparentchild(m, SOUND_MIXER_VOLUME, SOUND_MASK_PCM); mix_setrealdev(m, SOUND_MIXER_VOLUME, SOUND_MIXER_NONE); } - mix_setdevs(m, sc->sc_mix_info); - mix_setrecdevs(m, sc->sc_recsrc_info); + mix_setdevs(m, sc->sc_child[i].mix_info); + mix_setrecdevs(m, sc->sc_child[i].recsrc_info); return (0); } int -uaudio_mixer_uninit_sub(struct uaudio_softc *sc) +uaudio_mixer_uninit_sub(struct uaudio_softc *sc, struct snd_mixer *m) { - DPRINTF("\n"); + unsigned index = uaudio_get_child_index_by_dev(sc, mix_get_dev(m)); - usbd_transfer_unsetup(sc->sc_mixer_xfer, 1); + DPRINTF("child=%u\n", index); - sc->sc_mixer_lock = NULL; + if (index == 0) + usbd_transfer_unsetup(sc->sc_mixer_xfer, 1); + sc->sc_child[index].mixer_lock = NULL; + return (0); } void -uaudio_mixer_set(struct uaudio_softc *sc, unsigned type, - unsigned left, unsigned right) +uaudio_mixer_set(struct uaudio_softc *sc, struct snd_mixer *m, + unsigned type, unsigned left, unsigned right) { + unsigned index = uaudio_get_child_index_by_dev(sc, mix_get_dev(m)); struct uaudio_mixer_node *mc; int chan; + if (index != 0) + return; for (mc = sc->sc_mixer_root; mc != NULL; mc = mc->next) { - if (mc->ctl == type) { for (chan = 0; chan < mc->nchan; chan++) { uaudio_mixer_ctl_set(sc, mc, chan, @@ -5374,13 +5477,16 @@ uaudio_mixer_set(struct uaudio_softc *sc, unsigned typ } uint32_t -uaudio_mixer_setrecsrc(struct uaudio_softc *sc, uint32_t src) +uaudio_mixer_setrecsrc(struct uaudio_softc *sc, struct snd_mixer *m, uint32_t src) { + unsigned index = uaudio_get_child_index_by_dev(sc, mix_get_dev(m)); struct uaudio_mixer_node *mc; uint32_t mask; uint32_t temp; int32_t i; + if (index != 0) + return (0); for (mc = sc->sc_mixer_root; mc; mc = mc->next) { if ((mc->ctl == SOUND_MIXER_NRDEVICES) && @@ -6008,7 +6114,7 @@ uaudio_hid_rx_callback(struct usb_xfer *xfer, usb_erro id = 0; } - m = sc->sc_mixer_dev; + m = sc->sc_child[0].mixer_dev; if ((sc->sc_hid.flags & UAUDIO_HID_HAS_MUTE) && (sc->sc_hid.mute_id == id) && @@ -6073,7 +6179,7 @@ uaudio_hid_probe(struct uaudio_softc *sc, if (!(sc->sc_hid.flags & UAUDIO_HID_VALID)) return (-1); - if (sc->sc_mixer_lock == NULL) + if (sc->sc_child[0].mixer_lock == NULL) return (-1); /* Get HID descriptor */ @@ -6134,7 +6240,7 @@ uaudio_hid_probe(struct uaudio_softc *sc, /* allocate USB transfers */ error = usbd_transfer_setup(uaa->device, &sc->sc_hid.iface_index, sc->sc_hid.xfer, uaudio_hid_config, UAUDIO_HID_N_TRANSFER, - sc, sc->sc_mixer_lock); + sc, sc->sc_child[0].mixer_lock); if (error) { DPRINTF("error=%s\n", usbd_errstr(error)); return (-1); Modified: stable/10/sys/dev/sound/usb/uaudio.h ============================================================================== --- stable/10/sys/dev/sound/usb/uaudio.h Mon Apr 13 16:33:45 2020 (r359889) +++ stable/10/sys/dev/sound/usb/uaudio.h Mon Apr 13 16:34:21 2020 (r359890) @@ -39,7 +39,7 @@ struct pcm_channel; extern int uaudio_attach_sub(device_t dev, kobj_class_t mixer_class, kobj_class_t chan_class); extern int uaudio_detach_sub(device_t dev); -extern void *uaudio_chan_init(struct uaudio_softc *sc, struct snd_dbuf *b, +extern void *uaudio_chan_init(struct uaudio_chan *ch, struct snd_dbuf *b, struct pcm_channel *c, int dir); extern int uaudio_chan_free(struct uaudio_chan *ch); extern int uaudio_chan_set_param_blocksize(struct uaudio_chan *ch, @@ -56,12 +56,12 @@ extern int uaudio_chan_set_param_format(struct uaudio_ uint32_t format); extern void uaudio_chan_start(struct uaudio_chan *ch); extern void uaudio_chan_stop(struct uaudio_chan *ch); -extern int uaudio_mixer_init_sub(struct uaudio_softc *sc, - struct snd_mixer *m); -extern int uaudio_mixer_uninit_sub(struct uaudio_softc *sc); -extern void uaudio_mixer_set(struct uaudio_softc *sc, unsigned type, - unsigned left, unsigned right); -extern uint32_t uaudio_mixer_setrecsrc(struct uaudio_softc *sc, uint32_t src); +extern int uaudio_mixer_init_sub(struct uaudio_softc *, struct snd_mixer *); +extern int uaudio_mixer_uninit_sub(struct uaudio_softc *, struct snd_mixer *); +extern void uaudio_mixer_set(struct uaudio_softc *, struct snd_mixer *, + unsigned type, unsigned left, unsigned right); +extern uint32_t uaudio_mixer_setrecsrc(struct uaudio_softc *, struct snd_mixer *, + uint32_t src); int uaudio_get_vendor(device_t dev); int uaudio_get_product(device_t dev); Modified: stable/10/sys/dev/sound/usb/uaudio_pcm.c ============================================================================== --- stable/10/sys/dev/sound/usb/uaudio_pcm.c Mon Apr 13 16:33:45 2020 (r359889) +++ stable/10/sys/dev/sound/usb/uaudio_pcm.c Mon Apr 13 16:34:21 2020 (r359890) @@ -144,7 +144,7 @@ ua_mixer_set(struct snd_mixer *m, unsigned type, unsig do_unlock = 1; mtx_lock(mtx); } - uaudio_mixer_set(mix_getdevinfo(m), type, left, right); + uaudio_mixer_set(mix_getdevinfo(m), m, type, left, right); if (do_unlock) { mtx_unlock(mtx); } @@ -164,7 +164,7 @@ ua_mixer_setrecsrc(struct snd_mixer *m, uint32_t src) do_unlock = 1; mtx_lock(mtx); } - retval = uaudio_mixer_setrecsrc(mix_getdevinfo(m), src); + retval = uaudio_mixer_setrecsrc(mix_getdevinfo(m), m, src); if (do_unlock) { mtx_unlock(mtx); } @@ -174,7 +174,7 @@ ua_mixer_setrecsrc(struct snd_mixer *m, uint32_t src) static int ua_mixer_uninit(struct snd_mixer *m) { - return (uaudio_mixer_uninit_sub(mix_getdevinfo(m))); + return (uaudio_mixer_uninit_sub(mix_getdevinfo(m), m)); } static kobj_method_t ua_mixer_methods[] = { From owner-svn-src-stable@freebsd.org Mon Apr 13 21:23:39 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id E7CAE2A9920; Mon, 13 Apr 2020 21:23:39 +0000 (UTC) (envelope-from lwhsu@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491M6z4xH2z4Dpx; Mon, 13 Apr 2020 21:23:39 +0000 (UTC) (envelope-from lwhsu@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A4AE021FA1; Mon, 13 Apr 2020 21:23:39 +0000 (UTC) (envelope-from lwhsu@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DLNddv079583; Mon, 13 Apr 2020 21:23:39 GMT (envelope-from lwhsu@FreeBSD.org) Received: (from lwhsu@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DLNdoC079582; Mon, 13 Apr 2020 21:23:39 GMT (envelope-from lwhsu@FreeBSD.org) Message-Id: <202004132123.03DLNdoC079582@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: lwhsu set sender to lwhsu@FreeBSD.org using -f From: Li-Wen Hsu Date: Mon, 13 Apr 2020 21:23:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359904 - stable/12/sbin/nvmecontrol/tests X-SVN-Group: stable-12 X-SVN-Commit-Author: lwhsu X-SVN-Commit-Paths: stable/12/sbin/nvmecontrol/tests X-SVN-Commit-Revision: 359904 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 21:23:40 -0000 Author: lwhsu Date: Mon Apr 13 21:23:39 2020 New Revision: 359904 URL: https://svnweb.freebsd.org/changeset/base/359904 Log: MFC r359903: Ensure `kyua list` working when there is no /dev/nvme* Sponsored by: The FreeBSD Foundation Modified: stable/12/sbin/nvmecontrol/tests/basic.sh Directory Properties: stable/12/ (props changed) Modified: stable/12/sbin/nvmecontrol/tests/basic.sh ============================================================================== --- stable/12/sbin/nvmecontrol/tests/basic.sh Mon Apr 13 21:08:54 2020 (r359903) +++ stable/12/sbin/nvmecontrol/tests/basic.sh Mon Apr 13 21:23:39 2020 (r359904) @@ -33,7 +33,7 @@ DANGEROUS=false # Set to true to run "dangerous" tests # Select a nvme device to use for testing. If none exist, use nvme0. -TEST_DEV=$(cd /dev/;ls nvme[0-9]* | grep 'nvme[0-9][0-9]*$' | head -1) 2>/dev/null +TEST_DEV=$(cd /dev/; ls -1 nvme[0-9]* 2> /dev/null | grep -E 'nvme[0-9][0-9]*$' | head -n 1) TEST_DEV=${TEST_DEV:-nvme0} TEST_DEV_PATH=/dev/${TEST_DEV} INV_OPT="-z" From owner-svn-src-stable@freebsd.org Mon Apr 13 22:18:50 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 913422AADE8; Mon, 13 Apr 2020 22:18:50 +0000 (UTC) (envelope-from wulf@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491NLf2X9Lz4HZy; Mon, 13 Apr 2020 22:18:50 +0000 (UTC) (envelope-from wulf@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5212C2296E; Mon, 13 Apr 2020 22:18:50 +0000 (UTC) (envelope-from wulf@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DMIoqj010627; Mon, 13 Apr 2020 22:18:50 GMT (envelope-from wulf@FreeBSD.org) Received: (from wulf@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DMIoOe010626; Mon, 13 Apr 2020 22:18:50 GMT (envelope-from wulf@FreeBSD.org) Message-Id: <202004132218.03DMIoOe010626@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: wulf set sender to wulf@FreeBSD.org using -f From: Vladimir Kondratyev Date: Mon, 13 Apr 2020 22:18:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359906 - stable/12/sys/dev/evdev X-SVN-Group: stable-12 X-SVN-Commit-Author: wulf X-SVN-Commit-Paths: stable/12/sys/dev/evdev X-SVN-Commit-Revision: 359906 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 22:18:50 -0000 Author: wulf Date: Mon Apr 13 22:18:49 2020 New Revision: 359906 URL: https://svnweb.freebsd.org/changeset/base/359906 Log: MFC r359428: evdev: Add COMPAT_FREEBSD32 support for amd64 arch Incompatibility between i386 and amd64 evdev ABIs was caused by presence of 'struct timeval' in evdev protocol. Replace it with 'struct timeval32' for 32 bit binaries. Big-endian platforms may require additional work due to bitstr_t (array of unsigned longs) usage in ioctl interface. MFC r359429: evdev: return error rather than zero-length data on blocked read() if blocked process has been woken up by evdev device destruction. Modified: stable/12/sys/dev/evdev/cdev.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/evdev/cdev.c ============================================================================== --- stable/12/sys/dev/evdev/cdev.c Mon Apr 13 22:06:28 2020 (r359905) +++ stable/12/sys/dev/evdev/cdev.c Mon Apr 13 22:18:49 2020 (r359906) @@ -47,6 +47,18 @@ #include #include +#ifdef COMPAT_FREEBSD32 +#include +#include +#include +struct input_event32 { + struct timeval32 time; + uint16_t type; + uint16_t code; + int32_t value; +}; +#endif + #ifdef EVDEV_DEBUG #define debugf(client, fmt, args...) printf("evdev cdev: "fmt"\n", ##args) #else @@ -161,7 +173,14 @@ static int evdev_read(struct cdev *dev, struct uio *uio, int ioflag) { struct evdev_client *client; - struct input_event event; + union { + struct input_event t; +#ifdef COMPAT_FREEBSD32 + struct input_event32 t32; +#endif + } event; + struct input_event *head; + size_t evsize; int ret = 0; int remaining; @@ -175,11 +194,18 @@ evdev_read(struct cdev *dev, struct uio *uio, int iofl if (client->ec_revoked) return (ENODEV); +#ifdef COMPAT_FREEBSD32 + if (SV_CURPROC_FLAG(SV_ILP32)) + evsize = sizeof(struct input_event32); + else +#endif + evsize = sizeof(struct input_event); + /* Zero-sized reads are allowed for error checking */ - if (uio->uio_resid != 0 && uio->uio_resid < sizeof(struct input_event)) + if (uio->uio_resid != 0 && uio->uio_resid < evsize) return (EINVAL); - remaining = uio->uio_resid / sizeof(struct input_event); + remaining = uio->uio_resid / evsize; EVDEV_CLIENT_LOCKQ(client); @@ -191,19 +217,31 @@ evdev_read(struct cdev *dev, struct uio *uio, int iofl client->ec_blocked = true; ret = mtx_sleep(client, &client->ec_buffer_mtx, PCATCH, "evread", 0); + if (ret == 0 && client->ec_revoked) + ret = ENODEV; } } } while (ret == 0 && !EVDEV_CLIENT_EMPTYQ(client) && remaining > 0) { - memcpy(&event, &client->ec_buffer[client->ec_buffer_head], - sizeof(struct input_event)); + head = client->ec_buffer + client->ec_buffer_head; +#ifdef COMPAT_FREEBSD32 + if (SV_CURPROC_FLAG(SV_ILP32)) { + bzero(&event.t32, sizeof(struct input_event32)); + TV_CP(*head, event.t32, time); + CP(*head, event.t32, type); + CP(*head, event.t32, code); + CP(*head, event.t32, value); + } else +#endif + bcopy(head, &event.t, evsize); + client->ec_buffer_head = (client->ec_buffer_head + 1) % client->ec_buffer_size; remaining--; EVDEV_CLIENT_UNLOCKQ(client); - ret = uiomove(&event, sizeof(struct input_event), uio); + ret = uiomove(&event, evsize, uio); EVDEV_CLIENT_LOCKQ(client); } @@ -217,7 +255,13 @@ evdev_write(struct cdev *dev, struct uio *uio, int iof { struct evdev_dev *evdev = dev->si_drv1; struct evdev_client *client; - struct input_event event; + union { + struct input_event t; +#ifdef COMPAT_FREEBSD32 + struct input_event32 t32; +#endif + } event; + size_t evsize; int ret = 0; ret = devfs_get_cdevpriv((void **)&client); @@ -230,16 +274,30 @@ evdev_write(struct cdev *dev, struct uio *uio, int iof if (client->ec_revoked || evdev == NULL) return (ENODEV); - if (uio->uio_resid % sizeof(struct input_event) != 0) { +#ifdef COMPAT_FREEBSD32 + if (SV_CURPROC_FLAG(SV_ILP32)) + evsize = sizeof(struct input_event32); + else +#endif + evsize = sizeof(struct input_event); + + if (uio->uio_resid % evsize != 0) { debugf(client, "write size not multiple of input_event size"); return (EINVAL); } while (uio->uio_resid > 0 && ret == 0) { - ret = uiomove(&event, sizeof(struct input_event), uio); - if (ret == 0) - ret = evdev_inject_event(evdev, event.type, event.code, - event.value); + ret = uiomove(&event, evsize, uio); + if (ret == 0) { +#ifdef COMPAT_FREEBSD32 + if (SV_CURPROC_FLAG(SV_ILP32)) + ret = evdev_inject_event(evdev, event.t32.type, + event.t32.code, event.t32.value); + else +#endif + ret = evdev_inject_event(evdev, event.t.type, + event.t.code, event.t.value); + } } return (ret); From owner-svn-src-stable@freebsd.org Mon Apr 13 22:21:02 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8405D2AAEAC; Mon, 13 Apr 2020 22:21:02 +0000 (UTC) (envelope-from wulf@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491NPB2kt8z4Hq8; Mon, 13 Apr 2020 22:21:02 +0000 (UTC) (envelope-from wulf@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 592D022998; Mon, 13 Apr 2020 22:21:02 +0000 (UTC) (envelope-from wulf@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03DML2T2010950; Mon, 13 Apr 2020 22:21:02 GMT (envelope-from wulf@FreeBSD.org) Received: (from wulf@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03DML262010949; Mon, 13 Apr 2020 22:21:02 GMT (envelope-from wulf@FreeBSD.org) Message-Id: <202004132221.03DML262010949@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: wulf set sender to wulf@FreeBSD.org using -f From: Vladimir Kondratyev Date: Mon, 13 Apr 2020 22:21:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359907 - stable/11/sys/dev/evdev X-SVN-Group: stable-11 X-SVN-Commit-Author: wulf X-SVN-Commit-Paths: stable/11/sys/dev/evdev X-SVN-Commit-Revision: 359907 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Apr 2020 22:21:02 -0000 Author: wulf Date: Mon Apr 13 22:21:01 2020 New Revision: 359907 URL: https://svnweb.freebsd.org/changeset/base/359907 Log: MFC r359428: evdev: Add COMPAT_FREEBSD32 support for amd64 arch Incompatibility between i386 and amd64 evdev ABIs was caused by presence of 'struct timeval' in evdev protocol. Replace it with 'struct timeval32' for 32 bit binaries. Big-endian platforms may require additional work due to bitstr_t (array of unsigned longs) usage in ioctl interface. MFC r359429: evdev: return error rather than zero-length data on blocked read() if blocked process has been woken up by evdev device destruction. Modified: stable/11/sys/dev/evdev/cdev.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/dev/evdev/cdev.c ============================================================================== --- stable/11/sys/dev/evdev/cdev.c Mon Apr 13 22:18:49 2020 (r359906) +++ stable/11/sys/dev/evdev/cdev.c Mon Apr 13 22:21:01 2020 (r359907) @@ -47,6 +47,18 @@ #include #include +#ifdef COMPAT_FREEBSD32 +#include +#include +#include +struct input_event32 { + struct timeval32 time; + uint16_t type; + uint16_t code; + int32_t value; +}; +#endif + #ifdef EVDEV_DEBUG #define debugf(client, fmt, args...) printf("evdev cdev: "fmt"\n", ##args) #else @@ -161,7 +173,14 @@ static int evdev_read(struct cdev *dev, struct uio *uio, int ioflag) { struct evdev_client *client; - struct input_event event; + union { + struct input_event t; +#ifdef COMPAT_FREEBSD32 + struct input_event32 t32; +#endif + } event; + struct input_event *head; + size_t evsize; int ret = 0; int remaining; @@ -175,11 +194,18 @@ evdev_read(struct cdev *dev, struct uio *uio, int iofl if (client->ec_revoked) return (ENODEV); +#ifdef COMPAT_FREEBSD32 + if (SV_CURPROC_FLAG(SV_ILP32)) + evsize = sizeof(struct input_event32); + else +#endif + evsize = sizeof(struct input_event); + /* Zero-sized reads are allowed for error checking */ - if (uio->uio_resid != 0 && uio->uio_resid < sizeof(struct input_event)) + if (uio->uio_resid != 0 && uio->uio_resid < evsize) return (EINVAL); - remaining = uio->uio_resid / sizeof(struct input_event); + remaining = uio->uio_resid / evsize; EVDEV_CLIENT_LOCKQ(client); @@ -191,19 +217,31 @@ evdev_read(struct cdev *dev, struct uio *uio, int iofl client->ec_blocked = true; ret = mtx_sleep(client, &client->ec_buffer_mtx, PCATCH, "evread", 0); + if (ret == 0 && client->ec_revoked) + ret = ENODEV; } } } while (ret == 0 && !EVDEV_CLIENT_EMPTYQ(client) && remaining > 0) { - memcpy(&event, &client->ec_buffer[client->ec_buffer_head], - sizeof(struct input_event)); + head = client->ec_buffer + client->ec_buffer_head; +#ifdef COMPAT_FREEBSD32 + if (SV_CURPROC_FLAG(SV_ILP32)) { + bzero(&event.t32, sizeof(struct input_event32)); + TV_CP(*head, event.t32, time); + CP(*head, event.t32, type); + CP(*head, event.t32, code); + CP(*head, event.t32, value); + } else +#endif + bcopy(head, &event.t, evsize); + client->ec_buffer_head = (client->ec_buffer_head + 1) % client->ec_buffer_size; remaining--; EVDEV_CLIENT_UNLOCKQ(client); - ret = uiomove(&event, sizeof(struct input_event), uio); + ret = uiomove(&event, evsize, uio); EVDEV_CLIENT_LOCKQ(client); } @@ -217,7 +255,13 @@ evdev_write(struct cdev *dev, struct uio *uio, int iof { struct evdev_dev *evdev = dev->si_drv1; struct evdev_client *client; - struct input_event event; + union { + struct input_event t; +#ifdef COMPAT_FREEBSD32 + struct input_event32 t32; +#endif + } event; + size_t evsize; int ret = 0; ret = devfs_get_cdevpriv((void **)&client); @@ -230,16 +274,30 @@ evdev_write(struct cdev *dev, struct uio *uio, int iof if (client->ec_revoked || evdev == NULL) return (ENODEV); - if (uio->uio_resid % sizeof(struct input_event) != 0) { +#ifdef COMPAT_FREEBSD32 + if (SV_CURPROC_FLAG(SV_ILP32)) + evsize = sizeof(struct input_event32); + else +#endif + evsize = sizeof(struct input_event); + + if (uio->uio_resid % evsize != 0) { debugf(client, "write size not multiple of input_event size"); return (EINVAL); } while (uio->uio_resid > 0 && ret == 0) { - ret = uiomove(&event, sizeof(struct input_event), uio); - if (ret == 0) - ret = evdev_inject_event(evdev, event.type, event.code, - event.value); + ret = uiomove(&event, evsize, uio); + if (ret == 0) { +#ifdef COMPAT_FREEBSD32 + if (SV_CURPROC_FLAG(SV_ILP32)) + ret = evdev_inject_event(evdev, event.t32.type, + event.t32.code, event.t32.value); + else +#endif + ret = evdev_inject_event(evdev, event.t.type, + event.t.code, event.t.value); + } } return (ret); From owner-svn-src-stable@freebsd.org Tue Apr 14 00:57:52 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 0C3522AE333; Tue, 14 Apr 2020 00:57:52 +0000 (UTC) (envelope-from sjg@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491Rt76dMcz4RXX; Tue, 14 Apr 2020 00:57:51 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DEB8D24861; Tue, 14 Apr 2020 00:57:51 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03E0vpuQ009324; Tue, 14 Apr 2020 00:57:51 GMT (envelope-from sjg@FreeBSD.org) Received: (from sjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03E0vpc6009321; Tue, 14 Apr 2020 00:57:51 GMT (envelope-from sjg@FreeBSD.org) Message-Id: <202004140057.03E0vpc6009321@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sjg set sender to sjg@FreeBSD.org using -f From: "Simon J. Gerraty" Date: Tue, 14 Apr 2020 00:57:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359911 - in stable/12: lib/libsecureboot stand/libsa X-SVN-Group: stable-12 X-SVN-Commit-Author: sjg X-SVN-Commit-Paths: in stable/12: lib/libsecureboot stand/libsa X-SVN-Commit-Revision: 359911 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Apr 2020 00:57:52 -0000 Author: sjg Date: Tue Apr 14 00:57:50 2020 New Revision: 359911 URL: https://svnweb.freebsd.org/changeset/base/359911 Log: Improve interaction of vectx and tftp On slow platforms, it helps to spread the hashing load over time so that tftp does not timeout. Also, some .4th files are too big to fit in cache of pkgfs, so increase cache size and ensure fully populated. MFC of r359700 Reviewed by: stevek Differential Revision: https://reviews.freebsd.org/D24287 Modified: stable/12/lib/libsecureboot/vectx.c stable/12/stand/libsa/pkgfs.c stable/12/stand/libsa/tftp.c Modified: stable/12/lib/libsecureboot/vectx.c ============================================================================== --- stable/12/lib/libsecureboot/vectx.c Tue Apr 14 00:01:26 2020 (r359910) +++ stable/12/lib/libsecureboot/vectx.c Tue Apr 14 00:57:50 2020 (r359911) @@ -211,6 +211,7 @@ ssize_t vectx_read(struct vectx *ctx, void *buf, size_t nbytes) { unsigned char *bp = buf; + int d; int n; int delta; int x; @@ -221,23 +222,30 @@ vectx_read(struct vectx *ctx, void *buf, size_t nbytes off = 0; do { - n = read(ctx->vec_fd, &bp[off], nbytes - off); - if (n < 0) + /* + * Do this in reasonable chunks so + * we don't timeout if doing tftp + */ + x = nbytes - off; + x = MIN(PAGE_SIZE, x); + d = n = read(ctx->vec_fd, &bp[off], x); + if (n < 0) { return (n); - if (n > 0) { + } + if (d > 0) { /* we may have seeked backwards! */ delta = ctx->vec_hashed - ctx->vec_off; if (delta > 0) { - x = MIN(delta, n); + x = MIN(delta, d); off += x; - n -= x; + d -= x; ctx->vec_off += x; } - if (n > 0) { - ctx->vec_md->update(&ctx->vec_ctx.vtable, &bp[off], n); - off += n; - ctx->vec_off += n; - ctx->vec_hashed += n; + if (d > 0) { + ctx->vec_md->update(&ctx->vec_ctx.vtable, &bp[off], d); + off += d; + ctx->vec_off += d; + ctx->vec_hashed += d; } } } while (n > 0 && off < nbytes); Modified: stable/12/stand/libsa/pkgfs.c ============================================================================== --- stable/12/stand/libsa/pkgfs.c Tue Apr 14 00:01:26 2020 (r359910) +++ stable/12/stand/libsa/pkgfs.c Tue Apr 14 00:57:50 2020 (r359911) @@ -60,7 +60,7 @@ struct fs_ops pkgfs_fsops = { }; #define PKG_BUFSIZE 512 -#define PKG_MAXCACHESZ 16384 +#define PKG_MAXCACHESZ (16384 * 3) #define PKG_FILEEXT ".tgz" @@ -132,6 +132,7 @@ struct package static struct package *package = NULL; static int new_package(int, struct package **); +static int cache_data(struct tarfile *tf, int); void pkgfs_cleanup(void) @@ -282,6 +283,9 @@ pkg_read(struct open_file *f, void *buf, size_t size, return (EBADF); } + if (tf->tf_cachesz == 0) + cache_data(tf, 1); + fp = tf->tf_fp; p = buf; sz = 0; @@ -311,16 +315,6 @@ pkg_read(struct open_file *f, void *buf, size_t size, fp += sz; p += sz; size -= sz; - - if (tf->tf_cachesz != 0) - continue; - - tf->tf_cachesz = (sz <= PKG_MAXCACHESZ) ? sz : PKG_MAXCACHESZ; - tf->tf_cache = malloc(tf->tf_cachesz); - if (tf->tf_cache != NULL) - memcpy(tf->tf_cache, buf, tf->tf_cachesz); - else - tf->tf_cachesz = 0; } tf->tf_fp = fp; @@ -484,8 +478,20 @@ get_zipped(struct package *pkg, void *buf, size_t bufs return (0); } +/** + * @brief + * cache data of a tarfile + * + * @param[in] tf + * tarfile pointer + * + * @param[in] force + * If file size > PKG_MAXCACHESZ, cache that much + * + * @return 0, -1 (errno set to error value) + */ static int -cache_data(struct tarfile *tf) +cache_data(struct tarfile *tf, int force) { struct package *pkg; size_t sz; @@ -503,21 +509,28 @@ cache_data(struct tarfile *tf) return (-1); } + if (tf->tf_cachesz > 0) { + DBG(("%s: data already cached\n", __func__)); + errno = EINVAL; + return (-1); + } + if (tf->tf_ofs != pkg->pkg_ofs) { - DBG(("%s: caching after partial read of file %s?\n", + DBG(("%s: caching after force read of file %s?\n", __func__, tf->tf_hdr.ut_name)); errno = EINVAL; return (-1); } /* We don't cache everything... */ - if (tf->tf_size > PKG_MAXCACHESZ) { - errno = ENOMEM; + if (tf->tf_size > PKG_MAXCACHESZ && !force) { + errno = ENOBUFS; return (-1); } + sz = tf->tf_size < PKG_MAXCACHESZ ? tf->tf_size : PKG_MAXCACHESZ; /* All files are padded to a multiple of 512 bytes. */ - sz = (tf->tf_size + 0x1ff) & ~0x1ff; + sz = (sz + 0x1ff) & ~0x1ff; tf->tf_cache = malloc(sz); if (tf->tf_cache == NULL) { @@ -741,7 +754,7 @@ scan_tarfile(struct package *pkg, struct tarfile *last if (ofs != pkg->pkg_ofs) { if (last != NULL && pkg->pkg_ofs == last->tf_ofs) { - if (cache_data(last) == -1) + if (cache_data(last, 0) == -1) return (NULL); } else { sz = ofs - pkg->pkg_ofs; Modified: stable/12/stand/libsa/tftp.c ============================================================================== --- stable/12/stand/libsa/tftp.c Tue Apr 14 00:01:26 2020 (r359910) +++ stable/12/stand/libsa/tftp.c Tue Apr 14 00:57:50 2020 (r359911) @@ -100,11 +100,13 @@ static int is_open = 0; * Jumbo frames in the future. */ #define TFTP_MAX_BLKSIZE 9008 +#define TFTP_TRIES 2 struct tftp_handle { struct iodesc *iodesc; int currblock; /* contents of lastdata */ - int islastblock; /* flag */ + int islastblock:1; /* flag */ + int tries:4; /* number of read attempts */ int validsize; int off; char *path; /* saved for re-requests */ @@ -530,7 +532,12 @@ tftp_read(struct open_file *f, void *addr, size_t size #ifdef TFTP_DEBUG printf("tftp: read error\n"); #endif - return (rc); + if (tftpfile->tries > TFTP_TRIES) { + return (rc); + } else { + tftpfile->tries++; + tftp_makereq(tftpfile); + } } if (tftpfile->islastblock) break; From owner-svn-src-stable@freebsd.org Tue Apr 14 01:05:12 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 605832AE64B; Tue, 14 Apr 2020 01:05:12 +0000 (UTC) (envelope-from sjg@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491S2c1rnxz4S2g; Tue, 14 Apr 2020 01:05:12 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3AAC024A5D; Tue, 14 Apr 2020 01:05:12 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03E15Cql015539; Tue, 14 Apr 2020 01:05:12 GMT (envelope-from sjg@FreeBSD.org) Received: (from sjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03E15Cp3015538; Tue, 14 Apr 2020 01:05:12 GMT (envelope-from sjg@FreeBSD.org) Message-Id: <202004140105.03E15Cp3015538@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sjg set sender to sjg@FreeBSD.org using -f From: "Simon J. Gerraty" Date: Tue, 14 Apr 2020 01:05:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359912 - stable/12/share/mk X-SVN-Group: stable-12 X-SVN-Commit-Author: sjg X-SVN-Commit-Paths: stable/12/share/mk X-SVN-Commit-Revision: 359912 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Apr 2020 01:05:12 -0000 Author: sjg Date: Tue Apr 14 01:05:11 2020 New Revision: 359912 URL: https://svnweb.freebsd.org/changeset/base/359912 Log: Include ${.CURDIR}/local.init.mk if it exists This is handy for making local hacks to an app (eg to build it as tool for non-BSD host) without making a mess of the code base. MFC of r359488 Reviewed by: bdrewery Differential Revision: https://reviews.freebsd.org//D24101 Modified: stable/12/share/mk/local.init.mk Modified: stable/12/share/mk/local.init.mk ============================================================================== --- stable/12/share/mk/local.init.mk Tue Apr 14 00:57:50 2020 (r359911) +++ stable/12/share/mk/local.init.mk Tue Apr 14 01:05:11 2020 (r359912) @@ -1,5 +1,8 @@ # $FreeBSD$ +.if !target(__${_this}__) +__${_this}__: + .if ${.MAKE.MODE:Mmeta*} != "" .if !empty(SUBDIR) && !defined(LIB) && !defined(PROG) && ${.MAKE.MAKEFILES:M*bsd.prog.mk} == "" .if ${.MAKE.MODE:Mleaf*} != "" @@ -33,3 +36,5 @@ CFLAGS+= ${HOST_CFLAGS} .endif .-include "src.init.mk" +.-include "${.CURDIR}/local.init.mk" +.endif From owner-svn-src-stable@freebsd.org Tue Apr 14 01:07:59 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 28CB62AE776; Tue, 14 Apr 2020 01:07:59 +0000 (UTC) (envelope-from sjg@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491S5q0G1Vz4SBs; Tue, 14 Apr 2020 01:07:59 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 0400A24A65; Tue, 14 Apr 2020 01:07:59 +0000 (UTC) (envelope-from sjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03E17wZB015717; Tue, 14 Apr 2020 01:07:58 GMT (envelope-from sjg@FreeBSD.org) Received: (from sjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03E17wNo015715; Tue, 14 Apr 2020 01:07:58 GMT (envelope-from sjg@FreeBSD.org) Message-Id: <202004140107.03E17wNo015715@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sjg set sender to sjg@FreeBSD.org using -f From: "Simon J. Gerraty" Date: Tue, 14 Apr 2020 01:07:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359913 - in stable/12: lib/libveriexec share/mk X-SVN-Group: stable-12 X-SVN-Commit-Author: sjg X-SVN-Commit-Paths: in stable/12: lib/libveriexec share/mk X-SVN-Commit-Revision: 359913 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Apr 2020 01:07:59 -0000 Author: sjg Date: Tue Apr 14 01:07:58 2020 New Revision: 359913 URL: https://svnweb.freebsd.org/changeset/base/359913 Log: Do not claim libbearssl et al are INTERNALLIB If INTERNALLIB is defined we need PIE and bsd.incs.mk is not included. MFC of r359502 PR: 245189 Reviewed by: emaste Differential Revision: https://reviews.freebsd.org//D24233 Modified: stable/12/lib/libveriexec/Makefile stable/12/share/mk/src.libnames.mk Modified: stable/12/lib/libveriexec/Makefile ============================================================================== --- stable/12/lib/libveriexec/Makefile Tue Apr 14 01:05:11 2020 (r359912) +++ stable/12/lib/libveriexec/Makefile Tue Apr 14 01:07:58 2020 (r359913) @@ -1,6 +1,6 @@ # $FreeBSD$ -.include +.include LIB= veriexec MAN= veriexec.3 Modified: stable/12/share/mk/src.libnames.mk ============================================================================== --- stable/12/share/mk/src.libnames.mk Tue Apr 14 01:05:11 2020 (r359912) +++ stable/12/share/mk/src.libnames.mk Tue Apr 14 01:07:58 2020 (r359913) @@ -214,18 +214,18 @@ _LIBRARIES+= \ .endif .if ${MK_BEARSSL} == "yes" -_INTERNALLIBS+= \ +_LIBRARIES+= \ bearssl \ secureboot \ -LIBBEARSSL?= ${LIBBEARSSLDIR}/libbearssl${PIE_SUFFIX}.a -LIBSECUREBOOT?= ${LIBSECUREBOOTDIR}/libsecureboot${PIE_SUFFIX}.a +LIBBEARSSL?= ${LIBBEARSSLDIR}/libbearssl.a +LIBSECUREBOOT?= ${LIBSECUREBOOTDIR}/libsecureboot.a .endif .if ${MK_VERIEXEC} == "yes" -_INTERNALLIBS+= veriexec +_LIBRARIES+= veriexec -LIBVERIEXEC?= ${LIBVERIEXECDIR}/libveriexec${PIE_SUFFIX}.a +LIBVERIEXEC?= ${LIBVERIEXECDIR}/libveriexec.a .endif # Each library's LIBADD needs to be duplicated here for static linkage of From owner-svn-src-stable@freebsd.org Tue Apr 14 08:34:42 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 365CB2B976D; Tue, 14 Apr 2020 08:34:42 +0000 (UTC) (envelope-from jkim@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491f1G0y2nz3Mwl; Tue, 14 Apr 2020 08:34:42 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1B173221A; Tue, 14 Apr 2020 08:34:42 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03E8YgkW091664; Tue, 14 Apr 2020 08:34:42 GMT (envelope-from jkim@FreeBSD.org) Received: (from jkim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03E8YZqN091628; Tue, 14 Apr 2020 08:34:35 GMT (envelope-from jkim@FreeBSD.org) Message-Id: <202004140834.03E8YZqN091628@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jkim set sender to jkim@FreeBSD.org using -f From: Jung-uk Kim Date: Tue, 14 Apr 2020 08:34:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359915 - in stable/12/sys: amd64/vmm/amd contrib/dev/acpica contrib/dev/acpica/common contrib/dev/acpica/compiler contrib/dev/acpica/components/debugger contrib/dev/acpica/components/d... X-SVN-Group: stable-12 X-SVN-Commit-Author: jkim X-SVN-Commit-Paths: in stable/12/sys: amd64/vmm/amd contrib/dev/acpica contrib/dev/acpica/common contrib/dev/acpica/compiler contrib/dev/acpica/components/debugger contrib/dev/acpica/components/disassembler contrib/dev/a... X-SVN-Commit-Revision: 359915 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Apr 2020 08:34:42 -0000 Author: jkim Date: Tue Apr 14 08:34:34 2020 New Revision: 359915 URL: https://svnweb.freebsd.org/changeset/base/359915 Log: MFC: r356618, r357959, r359346 Merge ACPICA 20200326. Modified: stable/12/sys/amd64/vmm/amd/amdvi_priv.h stable/12/sys/amd64/vmm/amd/ivrs_drv.c stable/12/sys/contrib/dev/acpica/changes.txt stable/12/sys/contrib/dev/acpica/common/acfileio.c stable/12/sys/contrib/dev/acpica/common/acgetline.c stable/12/sys/contrib/dev/acpica/common/adfile.c stable/12/sys/contrib/dev/acpica/common/adisasm.c stable/12/sys/contrib/dev/acpica/common/adwalk.c stable/12/sys/contrib/dev/acpica/common/ahids.c stable/12/sys/contrib/dev/acpica/common/ahpredef.c stable/12/sys/contrib/dev/acpica/common/ahtable.c stable/12/sys/contrib/dev/acpica/common/ahuuids.c stable/12/sys/contrib/dev/acpica/common/cmfsize.c stable/12/sys/contrib/dev/acpica/common/dmextern.c stable/12/sys/contrib/dev/acpica/common/dmrestag.c stable/12/sys/contrib/dev/acpica/common/dmswitch.c stable/12/sys/contrib/dev/acpica/common/dmtable.c stable/12/sys/contrib/dev/acpica/common/dmtables.c stable/12/sys/contrib/dev/acpica/common/dmtbdump.c stable/12/sys/contrib/dev/acpica/common/dmtbdump1.c stable/12/sys/contrib/dev/acpica/common/dmtbdump2.c stable/12/sys/contrib/dev/acpica/common/dmtbdump3.c stable/12/sys/contrib/dev/acpica/common/dmtbinfo.c stable/12/sys/contrib/dev/acpica/common/dmtbinfo1.c stable/12/sys/contrib/dev/acpica/common/dmtbinfo2.c stable/12/sys/contrib/dev/acpica/common/dmtbinfo3.c stable/12/sys/contrib/dev/acpica/common/getopt.c stable/12/sys/contrib/dev/acpica/compiler/aslallocate.c stable/12/sys/contrib/dev/acpica/compiler/aslanalyze.c stable/12/sys/contrib/dev/acpica/compiler/aslascii.c stable/12/sys/contrib/dev/acpica/compiler/aslbtypes.c stable/12/sys/contrib/dev/acpica/compiler/aslcache.c stable/12/sys/contrib/dev/acpica/compiler/aslcodegen.c stable/12/sys/contrib/dev/acpica/compiler/aslcompile.c stable/12/sys/contrib/dev/acpica/compiler/aslcompiler.h stable/12/sys/contrib/dev/acpica/compiler/aslcompiler.l stable/12/sys/contrib/dev/acpica/compiler/aslcstyle.y stable/12/sys/contrib/dev/acpica/compiler/asldebug.c stable/12/sys/contrib/dev/acpica/compiler/asldefine.h stable/12/sys/contrib/dev/acpica/compiler/aslerror.c stable/12/sys/contrib/dev/acpica/compiler/aslexternal.c stable/12/sys/contrib/dev/acpica/compiler/aslfileio.c stable/12/sys/contrib/dev/acpica/compiler/aslfiles.c stable/12/sys/contrib/dev/acpica/compiler/aslfold.c stable/12/sys/contrib/dev/acpica/compiler/aslglobal.h stable/12/sys/contrib/dev/acpica/compiler/aslhelp.c stable/12/sys/contrib/dev/acpica/compiler/aslhelpers.y stable/12/sys/contrib/dev/acpica/compiler/aslhex.c stable/12/sys/contrib/dev/acpica/compiler/aslkeywords.y stable/12/sys/contrib/dev/acpica/compiler/asllength.c stable/12/sys/contrib/dev/acpica/compiler/asllisting.c stable/12/sys/contrib/dev/acpica/compiler/asllistsup.c stable/12/sys/contrib/dev/acpica/compiler/aslload.c stable/12/sys/contrib/dev/acpica/compiler/asllookup.c stable/12/sys/contrib/dev/acpica/compiler/aslmain.c stable/12/sys/contrib/dev/acpica/compiler/aslmap.c stable/12/sys/contrib/dev/acpica/compiler/aslmapenter.c stable/12/sys/contrib/dev/acpica/compiler/aslmapoutput.c stable/12/sys/contrib/dev/acpica/compiler/aslmaputils.c stable/12/sys/contrib/dev/acpica/compiler/aslmessages.c stable/12/sys/contrib/dev/acpica/compiler/aslmessages.h stable/12/sys/contrib/dev/acpica/compiler/aslmethod.c stable/12/sys/contrib/dev/acpica/compiler/aslnamesp.c stable/12/sys/contrib/dev/acpica/compiler/asloffset.c stable/12/sys/contrib/dev/acpica/compiler/aslopcodes.c stable/12/sys/contrib/dev/acpica/compiler/asloperands.c stable/12/sys/contrib/dev/acpica/compiler/aslopt.c stable/12/sys/contrib/dev/acpica/compiler/asloptions.c stable/12/sys/contrib/dev/acpica/compiler/aslparseop.c stable/12/sys/contrib/dev/acpica/compiler/aslparser.y stable/12/sys/contrib/dev/acpica/compiler/aslpld.c stable/12/sys/contrib/dev/acpica/compiler/aslpredef.c stable/12/sys/contrib/dev/acpica/compiler/aslprepkg.c stable/12/sys/contrib/dev/acpica/compiler/aslprimaries.y stable/12/sys/contrib/dev/acpica/compiler/aslprintf.c stable/12/sys/contrib/dev/acpica/compiler/aslprune.c stable/12/sys/contrib/dev/acpica/compiler/aslresource.c stable/12/sys/contrib/dev/acpica/compiler/aslresources.y stable/12/sys/contrib/dev/acpica/compiler/aslrestype1.c stable/12/sys/contrib/dev/acpica/compiler/aslrestype1i.c stable/12/sys/contrib/dev/acpica/compiler/aslrestype2.c stable/12/sys/contrib/dev/acpica/compiler/aslrestype2d.c stable/12/sys/contrib/dev/acpica/compiler/aslrestype2e.c stable/12/sys/contrib/dev/acpica/compiler/aslrestype2q.c stable/12/sys/contrib/dev/acpica/compiler/aslrestype2s.c stable/12/sys/contrib/dev/acpica/compiler/aslrestype2w.c stable/12/sys/contrib/dev/acpica/compiler/aslrules.y stable/12/sys/contrib/dev/acpica/compiler/aslstartup.c stable/12/sys/contrib/dev/acpica/compiler/aslstubs.c stable/12/sys/contrib/dev/acpica/compiler/aslsupport.l stable/12/sys/contrib/dev/acpica/compiler/aslsupport.y stable/12/sys/contrib/dev/acpica/compiler/asltokens.y stable/12/sys/contrib/dev/acpica/compiler/asltransform.c stable/12/sys/contrib/dev/acpica/compiler/asltree.c stable/12/sys/contrib/dev/acpica/compiler/asltypes.h stable/12/sys/contrib/dev/acpica/compiler/asltypes.y stable/12/sys/contrib/dev/acpica/compiler/aslutils.c stable/12/sys/contrib/dev/acpica/compiler/asluuid.c stable/12/sys/contrib/dev/acpica/compiler/aslwalks.c stable/12/sys/contrib/dev/acpica/compiler/aslxref.c stable/12/sys/contrib/dev/acpica/compiler/aslxrefout.c stable/12/sys/contrib/dev/acpica/compiler/cvcompiler.c stable/12/sys/contrib/dev/acpica/compiler/cvdisasm.c stable/12/sys/contrib/dev/acpica/compiler/cvparser.c stable/12/sys/contrib/dev/acpica/compiler/dtcompile.c stable/12/sys/contrib/dev/acpica/compiler/dtcompiler.h stable/12/sys/contrib/dev/acpica/compiler/dtcompilerparser.l stable/12/sys/contrib/dev/acpica/compiler/dtcompilerparser.y stable/12/sys/contrib/dev/acpica/compiler/dtexpress.c stable/12/sys/contrib/dev/acpica/compiler/dtfield.c stable/12/sys/contrib/dev/acpica/compiler/dtio.c stable/12/sys/contrib/dev/acpica/compiler/dtparser.l stable/12/sys/contrib/dev/acpica/compiler/dtparser.y stable/12/sys/contrib/dev/acpica/compiler/dtsubtable.c stable/12/sys/contrib/dev/acpica/compiler/dttable.c stable/12/sys/contrib/dev/acpica/compiler/dttable1.c stable/12/sys/contrib/dev/acpica/compiler/dttable2.c stable/12/sys/contrib/dev/acpica/compiler/dttemplate.c stable/12/sys/contrib/dev/acpica/compiler/dttemplate.h stable/12/sys/contrib/dev/acpica/compiler/dtutils.c stable/12/sys/contrib/dev/acpica/compiler/preprocess.h stable/12/sys/contrib/dev/acpica/compiler/prexpress.c stable/12/sys/contrib/dev/acpica/compiler/prmacros.c stable/12/sys/contrib/dev/acpica/compiler/prparser.l stable/12/sys/contrib/dev/acpica/compiler/prparser.y stable/12/sys/contrib/dev/acpica/compiler/prscan.c stable/12/sys/contrib/dev/acpica/compiler/prutils.c stable/12/sys/contrib/dev/acpica/components/debugger/dbcmds.c stable/12/sys/contrib/dev/acpica/components/debugger/dbconvert.c stable/12/sys/contrib/dev/acpica/components/debugger/dbdisply.c stable/12/sys/contrib/dev/acpica/components/debugger/dbexec.c stable/12/sys/contrib/dev/acpica/components/debugger/dbfileio.c stable/12/sys/contrib/dev/acpica/components/debugger/dbhistry.c stable/12/sys/contrib/dev/acpica/components/debugger/dbinput.c stable/12/sys/contrib/dev/acpica/components/debugger/dbmethod.c stable/12/sys/contrib/dev/acpica/components/debugger/dbnames.c stable/12/sys/contrib/dev/acpica/components/debugger/dbobject.c stable/12/sys/contrib/dev/acpica/components/debugger/dbstats.c stable/12/sys/contrib/dev/acpica/components/debugger/dbtest.c stable/12/sys/contrib/dev/acpica/components/debugger/dbutils.c stable/12/sys/contrib/dev/acpica/components/debugger/dbxface.c stable/12/sys/contrib/dev/acpica/components/disassembler/dmbuffer.c stable/12/sys/contrib/dev/acpica/components/disassembler/dmcstyle.c stable/12/sys/contrib/dev/acpica/components/disassembler/dmdeferred.c stable/12/sys/contrib/dev/acpica/components/disassembler/dmnames.c stable/12/sys/contrib/dev/acpica/components/disassembler/dmopcode.c stable/12/sys/contrib/dev/acpica/components/disassembler/dmresrc.c stable/12/sys/contrib/dev/acpica/components/disassembler/dmresrcl.c stable/12/sys/contrib/dev/acpica/components/disassembler/dmresrcl2.c stable/12/sys/contrib/dev/acpica/components/disassembler/dmresrcs.c stable/12/sys/contrib/dev/acpica/components/disassembler/dmutils.c stable/12/sys/contrib/dev/acpica/components/disassembler/dmwalk.c stable/12/sys/contrib/dev/acpica/components/dispatcher/dsargs.c stable/12/sys/contrib/dev/acpica/components/dispatcher/dscontrol.c stable/12/sys/contrib/dev/acpica/components/dispatcher/dsdebug.c stable/12/sys/contrib/dev/acpica/components/dispatcher/dsfield.c stable/12/sys/contrib/dev/acpica/components/dispatcher/dsinit.c stable/12/sys/contrib/dev/acpica/components/dispatcher/dsmethod.c stable/12/sys/contrib/dev/acpica/components/dispatcher/dsmthdat.c stable/12/sys/contrib/dev/acpica/components/dispatcher/dsobject.c stable/12/sys/contrib/dev/acpica/components/dispatcher/dsopcode.c stable/12/sys/contrib/dev/acpica/components/dispatcher/dspkginit.c stable/12/sys/contrib/dev/acpica/components/dispatcher/dsutils.c stable/12/sys/contrib/dev/acpica/components/dispatcher/dswexec.c stable/12/sys/contrib/dev/acpica/components/dispatcher/dswload.c stable/12/sys/contrib/dev/acpica/components/dispatcher/dswload2.c stable/12/sys/contrib/dev/acpica/components/dispatcher/dswscope.c stable/12/sys/contrib/dev/acpica/components/dispatcher/dswstate.c stable/12/sys/contrib/dev/acpica/components/events/evevent.c stable/12/sys/contrib/dev/acpica/components/events/evglock.c stable/12/sys/contrib/dev/acpica/components/events/evgpe.c stable/12/sys/contrib/dev/acpica/components/events/evgpeblk.c stable/12/sys/contrib/dev/acpica/components/events/evgpeinit.c stable/12/sys/contrib/dev/acpica/components/events/evgpeutil.c stable/12/sys/contrib/dev/acpica/components/events/evhandler.c stable/12/sys/contrib/dev/acpica/components/events/evmisc.c stable/12/sys/contrib/dev/acpica/components/events/evregion.c stable/12/sys/contrib/dev/acpica/components/events/evrgnini.c stable/12/sys/contrib/dev/acpica/components/events/evsci.c stable/12/sys/contrib/dev/acpica/components/events/evxface.c stable/12/sys/contrib/dev/acpica/components/events/evxfevnt.c stable/12/sys/contrib/dev/acpica/components/events/evxfgpe.c stable/12/sys/contrib/dev/acpica/components/events/evxfregn.c stable/12/sys/contrib/dev/acpica/components/executer/exconcat.c stable/12/sys/contrib/dev/acpica/components/executer/exconfig.c stable/12/sys/contrib/dev/acpica/components/executer/exconvrt.c stable/12/sys/contrib/dev/acpica/components/executer/excreate.c stable/12/sys/contrib/dev/acpica/components/executer/exdebug.c stable/12/sys/contrib/dev/acpica/components/executer/exdump.c stable/12/sys/contrib/dev/acpica/components/executer/exfield.c stable/12/sys/contrib/dev/acpica/components/executer/exfldio.c stable/12/sys/contrib/dev/acpica/components/executer/exmisc.c stable/12/sys/contrib/dev/acpica/components/executer/exmutex.c stable/12/sys/contrib/dev/acpica/components/executer/exnames.c stable/12/sys/contrib/dev/acpica/components/executer/exoparg1.c stable/12/sys/contrib/dev/acpica/components/executer/exoparg2.c stable/12/sys/contrib/dev/acpica/components/executer/exoparg3.c stable/12/sys/contrib/dev/acpica/components/executer/exoparg6.c stable/12/sys/contrib/dev/acpica/components/executer/exprep.c stable/12/sys/contrib/dev/acpica/components/executer/exregion.c stable/12/sys/contrib/dev/acpica/components/executer/exresnte.c stable/12/sys/contrib/dev/acpica/components/executer/exresolv.c stable/12/sys/contrib/dev/acpica/components/executer/exresop.c stable/12/sys/contrib/dev/acpica/components/executer/exserial.c stable/12/sys/contrib/dev/acpica/components/executer/exstore.c stable/12/sys/contrib/dev/acpica/components/executer/exstoren.c stable/12/sys/contrib/dev/acpica/components/executer/exstorob.c stable/12/sys/contrib/dev/acpica/components/executer/exsystem.c stable/12/sys/contrib/dev/acpica/components/executer/extrace.c stable/12/sys/contrib/dev/acpica/components/executer/exutils.c stable/12/sys/contrib/dev/acpica/components/hardware/hwacpi.c stable/12/sys/contrib/dev/acpica/components/hardware/hwesleep.c stable/12/sys/contrib/dev/acpica/components/hardware/hwgpe.c stable/12/sys/contrib/dev/acpica/components/hardware/hwpci.c stable/12/sys/contrib/dev/acpica/components/hardware/hwregs.c stable/12/sys/contrib/dev/acpica/components/hardware/hwsleep.c stable/12/sys/contrib/dev/acpica/components/hardware/hwtimer.c stable/12/sys/contrib/dev/acpica/components/hardware/hwvalid.c stable/12/sys/contrib/dev/acpica/components/hardware/hwxface.c stable/12/sys/contrib/dev/acpica/components/hardware/hwxfsleep.c stable/12/sys/contrib/dev/acpica/components/namespace/nsaccess.c stable/12/sys/contrib/dev/acpica/components/namespace/nsalloc.c stable/12/sys/contrib/dev/acpica/components/namespace/nsarguments.c stable/12/sys/contrib/dev/acpica/components/namespace/nsconvert.c stable/12/sys/contrib/dev/acpica/components/namespace/nsdump.c stable/12/sys/contrib/dev/acpica/components/namespace/nsdumpdv.c stable/12/sys/contrib/dev/acpica/components/namespace/nseval.c stable/12/sys/contrib/dev/acpica/components/namespace/nsinit.c stable/12/sys/contrib/dev/acpica/components/namespace/nsload.c stable/12/sys/contrib/dev/acpica/components/namespace/nsnames.c stable/12/sys/contrib/dev/acpica/components/namespace/nsobject.c stable/12/sys/contrib/dev/acpica/components/namespace/nsparse.c stable/12/sys/contrib/dev/acpica/components/namespace/nspredef.c stable/12/sys/contrib/dev/acpica/components/namespace/nsprepkg.c stable/12/sys/contrib/dev/acpica/components/namespace/nsrepair.c stable/12/sys/contrib/dev/acpica/components/namespace/nsrepair2.c stable/12/sys/contrib/dev/acpica/components/namespace/nssearch.c stable/12/sys/contrib/dev/acpica/components/namespace/nsutils.c stable/12/sys/contrib/dev/acpica/components/namespace/nswalk.c stable/12/sys/contrib/dev/acpica/components/namespace/nsxfeval.c stable/12/sys/contrib/dev/acpica/components/namespace/nsxfname.c stable/12/sys/contrib/dev/acpica/components/namespace/nsxfobj.c stable/12/sys/contrib/dev/acpica/components/parser/psargs.c stable/12/sys/contrib/dev/acpica/components/parser/psloop.c stable/12/sys/contrib/dev/acpica/components/parser/psobject.c stable/12/sys/contrib/dev/acpica/components/parser/psopcode.c stable/12/sys/contrib/dev/acpica/components/parser/psopinfo.c stable/12/sys/contrib/dev/acpica/components/parser/psparse.c stable/12/sys/contrib/dev/acpica/components/parser/psscope.c stable/12/sys/contrib/dev/acpica/components/parser/pstree.c stable/12/sys/contrib/dev/acpica/components/parser/psutils.c stable/12/sys/contrib/dev/acpica/components/parser/pswalk.c stable/12/sys/contrib/dev/acpica/components/parser/psxface.c stable/12/sys/contrib/dev/acpica/components/resources/rsaddr.c stable/12/sys/contrib/dev/acpica/components/resources/rscalc.c stable/12/sys/contrib/dev/acpica/components/resources/rscreate.c stable/12/sys/contrib/dev/acpica/components/resources/rsdump.c stable/12/sys/contrib/dev/acpica/components/resources/rsdumpinfo.c stable/12/sys/contrib/dev/acpica/components/resources/rsinfo.c stable/12/sys/contrib/dev/acpica/components/resources/rsio.c stable/12/sys/contrib/dev/acpica/components/resources/rsirq.c stable/12/sys/contrib/dev/acpica/components/resources/rslist.c stable/12/sys/contrib/dev/acpica/components/resources/rsmemory.c stable/12/sys/contrib/dev/acpica/components/resources/rsmisc.c stable/12/sys/contrib/dev/acpica/components/resources/rsserial.c stable/12/sys/contrib/dev/acpica/components/resources/rsutils.c stable/12/sys/contrib/dev/acpica/components/resources/rsxface.c stable/12/sys/contrib/dev/acpica/components/tables/tbdata.c stable/12/sys/contrib/dev/acpica/components/tables/tbfadt.c stable/12/sys/contrib/dev/acpica/components/tables/tbfind.c stable/12/sys/contrib/dev/acpica/components/tables/tbinstal.c stable/12/sys/contrib/dev/acpica/components/tables/tbprint.c stable/12/sys/contrib/dev/acpica/components/tables/tbutils.c stable/12/sys/contrib/dev/acpica/components/tables/tbxface.c stable/12/sys/contrib/dev/acpica/components/tables/tbxfload.c stable/12/sys/contrib/dev/acpica/components/tables/tbxfroot.c stable/12/sys/contrib/dev/acpica/components/utilities/utaddress.c stable/12/sys/contrib/dev/acpica/components/utilities/utalloc.c stable/12/sys/contrib/dev/acpica/components/utilities/utascii.c stable/12/sys/contrib/dev/acpica/components/utilities/utbuffer.c stable/12/sys/contrib/dev/acpica/components/utilities/utcache.c stable/12/sys/contrib/dev/acpica/components/utilities/utcopy.c stable/12/sys/contrib/dev/acpica/components/utilities/utdebug.c stable/12/sys/contrib/dev/acpica/components/utilities/utdecode.c stable/12/sys/contrib/dev/acpica/components/utilities/utdelete.c stable/12/sys/contrib/dev/acpica/components/utilities/uterror.c stable/12/sys/contrib/dev/acpica/components/utilities/uteval.c stable/12/sys/contrib/dev/acpica/components/utilities/utexcep.c stable/12/sys/contrib/dev/acpica/components/utilities/utglobal.c stable/12/sys/contrib/dev/acpica/components/utilities/uthex.c stable/12/sys/contrib/dev/acpica/components/utilities/utids.c stable/12/sys/contrib/dev/acpica/components/utilities/utinit.c stable/12/sys/contrib/dev/acpica/components/utilities/utlock.c stable/12/sys/contrib/dev/acpica/components/utilities/utmath.c stable/12/sys/contrib/dev/acpica/components/utilities/utmisc.c stable/12/sys/contrib/dev/acpica/components/utilities/utmutex.c stable/12/sys/contrib/dev/acpica/components/utilities/utnonansi.c stable/12/sys/contrib/dev/acpica/components/utilities/utobject.c stable/12/sys/contrib/dev/acpica/components/utilities/utosi.c stable/12/sys/contrib/dev/acpica/components/utilities/utownerid.c stable/12/sys/contrib/dev/acpica/components/utilities/utpredef.c stable/12/sys/contrib/dev/acpica/components/utilities/utresdecode.c stable/12/sys/contrib/dev/acpica/components/utilities/utresrc.c stable/12/sys/contrib/dev/acpica/components/utilities/utstate.c stable/12/sys/contrib/dev/acpica/components/utilities/utstring.c stable/12/sys/contrib/dev/acpica/components/utilities/utstrsuppt.c stable/12/sys/contrib/dev/acpica/components/utilities/utstrtoul64.c stable/12/sys/contrib/dev/acpica/components/utilities/uttrack.c stable/12/sys/contrib/dev/acpica/components/utilities/utuuid.c stable/12/sys/contrib/dev/acpica/components/utilities/utxface.c stable/12/sys/contrib/dev/acpica/components/utilities/utxferror.c stable/12/sys/contrib/dev/acpica/components/utilities/utxfinit.c stable/12/sys/contrib/dev/acpica/components/utilities/utxfmutex.c stable/12/sys/contrib/dev/acpica/include/acapps.h stable/12/sys/contrib/dev/acpica/include/acbuffer.h stable/12/sys/contrib/dev/acpica/include/acclib.h stable/12/sys/contrib/dev/acpica/include/accommon.h stable/12/sys/contrib/dev/acpica/include/acconfig.h stable/12/sys/contrib/dev/acpica/include/acconvert.h stable/12/sys/contrib/dev/acpica/include/acdebug.h stable/12/sys/contrib/dev/acpica/include/acdisasm.h stable/12/sys/contrib/dev/acpica/include/acdispat.h stable/12/sys/contrib/dev/acpica/include/acevents.h stable/12/sys/contrib/dev/acpica/include/acexcep.h stable/12/sys/contrib/dev/acpica/include/acglobal.h stable/12/sys/contrib/dev/acpica/include/achware.h stable/12/sys/contrib/dev/acpica/include/acinterp.h stable/12/sys/contrib/dev/acpica/include/aclocal.h stable/12/sys/contrib/dev/acpica/include/acmacros.h stable/12/sys/contrib/dev/acpica/include/acnames.h stable/12/sys/contrib/dev/acpica/include/acnamesp.h stable/12/sys/contrib/dev/acpica/include/acobject.h stable/12/sys/contrib/dev/acpica/include/acopcode.h stable/12/sys/contrib/dev/acpica/include/acoutput.h stable/12/sys/contrib/dev/acpica/include/acparser.h stable/12/sys/contrib/dev/acpica/include/acpi.h stable/12/sys/contrib/dev/acpica/include/acpiosxf.h stable/12/sys/contrib/dev/acpica/include/acpixf.h stable/12/sys/contrib/dev/acpica/include/acpredef.h stable/12/sys/contrib/dev/acpica/include/acresrc.h stable/12/sys/contrib/dev/acpica/include/acrestyp.h stable/12/sys/contrib/dev/acpica/include/acstruct.h stable/12/sys/contrib/dev/acpica/include/actables.h stable/12/sys/contrib/dev/acpica/include/actbinfo.h stable/12/sys/contrib/dev/acpica/include/actbl.h stable/12/sys/contrib/dev/acpica/include/actbl1.h stable/12/sys/contrib/dev/acpica/include/actbl2.h stable/12/sys/contrib/dev/acpica/include/actbl3.h stable/12/sys/contrib/dev/acpica/include/actypes.h stable/12/sys/contrib/dev/acpica/include/acutils.h stable/12/sys/contrib/dev/acpica/include/acuuid.h stable/12/sys/contrib/dev/acpica/include/amlcode.h stable/12/sys/contrib/dev/acpica/include/amlresrc.h stable/12/sys/contrib/dev/acpica/include/platform/acenv.h stable/12/sys/contrib/dev/acpica/include/platform/acenvex.h stable/12/sys/contrib/dev/acpica/include/platform/acfreebsd.h stable/12/sys/contrib/dev/acpica/include/platform/acgcc.h stable/12/sys/contrib/dev/acpica/include/platform/acgccex.h stable/12/sys/contrib/dev/acpica/os_specific/service_layers/osunixxf.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/amd64/vmm/amd/amdvi_priv.h ============================================================================== --- stable/12/sys/amd64/vmm/amd/amdvi_priv.h Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/amd64/vmm/amd/amdvi_priv.h Tue Apr 14 08:34:34 2020 (r359915) @@ -357,33 +357,15 @@ struct amdvi_domain { }; /* - * I/O Virtualization Hardware Definition Block (IVHD) type 0x10 (legacy) - * uses ACPI_IVRS_HARDWARE define in contrib/dev/acpica/include/actbl2.h - * New IVHD types 0x11 and 0x40 as defined in AMD IOMMU spec[48882] are missing in - * ACPI code. These new types add extra field EFR(Extended Feature Register). - * XXX : Use definition from ACPI when it is available. - */ -typedef struct acpi_ivrs_hardware_efr_sup -{ - ACPI_IVRS_HEADER Header; - UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ - UINT64 BaseAddress; /* IOMMU control registers */ - UINT16 PciSegmentGroup; - UINT16 Info; /* MSI number and unit ID */ - UINT32 Attr; /* IOMMU Feature */ - UINT64 ExtFR; /* IOMMU Extended Feature */ - UINT64 Reserved; /* v1 feature or v2 attribute */ -} __attribute__ ((__packed__)) ACPI_IVRS_HARDWARE_EFRSUP; -CTASSERT(sizeof(ACPI_IVRS_HARDWARE_EFRSUP) == 40); - -/* * Different type of IVHD. * XXX: Use AcpiIvrsType once new IVHD types are available. */ enum IvrsType { - IVRS_TYPE_HARDWARE_LEGACY = 0x10, /* Legacy without EFRi support. */ - IVRS_TYPE_HARDWARE_EFR = 0x11, /* With EFR support. */ + IVRS_TYPE_HARDWARE_LEGACY = ACPI_IVRS_TYPE_HARDWARE1, + /* Legacy without EFRi support. */ + IVRS_TYPE_HARDWARE_EFR = ACPI_IVRS_TYPE_HARDWARE2, + /* With EFR support. */ IVRS_TYPE_HARDWARE_MIXED = 0x40, /* Mixed with EFR support. */ }; Modified: stable/12/sys/amd64/vmm/amd/ivrs_drv.c ============================================================================== --- stable/12/sys/amd64/vmm/amd/ivrs_drv.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/amd64/vmm/amd/ivrs_drv.c Tue Apr 14 08:34:34 2020 (r359915) @@ -54,7 +54,7 @@ int ivhd_count; /* Number of IVHD header. */ * Cached IVHD header list. * Single entry for each IVHD, filtered the legacy one. */ -ACPI_IVRS_HARDWARE *ivhd_hdrs[10]; +ACPI_IVRS_HARDWARE1 *ivhd_hdrs[10]; extern int amdvi_ptp_level; /* Page table levels. */ @@ -161,7 +161,7 @@ ivrs_hdr_find_iter(ACPI_IVRS_HEADER * ivrs_hdr, void * return (1); } -static ACPI_IVRS_HARDWARE * +static ACPI_IVRS_HARDWARE1 * ivhd_find_by_index(int idx) { struct find_ivrs_hdr_args fi; @@ -171,7 +171,7 @@ ivhd_find_by_index(int idx) ivrs_hdr_iterate_tbl(ivrs_hdr_find_iter, &fi); - return ((ACPI_IVRS_HARDWARE *)fi.ptr); + return ((ACPI_IVRS_HARDWARE1 *)fi.ptr); } static void @@ -195,7 +195,7 @@ ivhd_dev_add_entry(struct amdvi_softc *softc, uint32_t * Record device attributes as suggested by BIOS. */ static int -ivhd_dev_parse(ACPI_IVRS_HARDWARE* ivhd, struct amdvi_softc *softc) +ivhd_dev_parse(ACPI_IVRS_HARDWARE1 *ivhd, struct amdvi_softc *softc) { ACPI_IVRS_DE_HEADER *de; uint8_t *p, *end; @@ -209,12 +209,12 @@ ivhd_dev_parse(ACPI_IVRS_HARDWARE* ivhd, struct amdvi_ switch (ivhd->Header.Type) { case IVRS_TYPE_HARDWARE_LEGACY: - p = (uint8_t *)ivhd + sizeof(ACPI_IVRS_HARDWARE); + p = (uint8_t *)ivhd + sizeof(ACPI_IVRS_HARDWARE1); break; case IVRS_TYPE_HARDWARE_EFR: case IVRS_TYPE_HARDWARE_MIXED: - p = (uint8_t *)ivhd + sizeof(ACPI_IVRS_HARDWARE_EFRSUP); + p = (uint8_t *)ivhd + sizeof(ACPI_IVRS_HARDWARE2); break; default: @@ -327,7 +327,7 @@ static void ivhd_identify(driver_t *driver, device_t parent) { ACPI_TABLE_IVRS *ivrs; - ACPI_IVRS_HARDWARE *ivhd; + ACPI_IVRS_HARDWARE1 *ivhd; ACPI_STATUS status; int i, count = 0; uint32_t ivrs_ivinfo; @@ -408,7 +408,7 @@ ivhd_identify(driver_t *driver, device_t parent) static int ivhd_probe(device_t dev) { - ACPI_IVRS_HARDWARE *ivhd; + ACPI_IVRS_HARDWARE1 *ivhd; int unit; if (acpi_get_handle(dev) != NULL) @@ -582,7 +582,7 @@ ivhd_print_ext_feature(device_t dev, uint64_t ext_feat } static int -ivhd_print_cap(struct amdvi_softc *softc, ACPI_IVRS_HARDWARE * ivhd) +ivhd_print_cap(struct amdvi_softc *softc, ACPI_IVRS_HARDWARE1 * ivhd) { device_t dev; int max_ptp_level; @@ -612,8 +612,8 @@ ivhd_print_cap(struct amdvi_softc *softc, ACPI_IVRS_HA static int ivhd_attach(device_t dev) { - ACPI_IVRS_HARDWARE *ivhd; - ACPI_IVRS_HARDWARE_EFRSUP *ivhd_efr; + ACPI_IVRS_HARDWARE1 *ivhd; + ACPI_IVRS_HARDWARE2 *ivhd_efr; struct amdvi_softc *softc; int status, unit; @@ -637,7 +637,7 @@ ivhd_attach(device_t dev) * On lgeacy IVHD type(0x10), it is documented as feature * but in newer type it is attribute. */ - softc->ivhd_feature = ivhd->Reserved; + softc->ivhd_feature = ivhd->FeatureReporting; /* * PCI capability has more capabilities that are not part of IVRS. */ @@ -648,12 +648,11 @@ ivhd_attach(device_t dev) softc->event_msix = ivhd->Info & 0x1F; #endif switch (ivhd->Header.Type) { - case IVRS_TYPE_HARDWARE_EFR: - case IVRS_TYPE_HARDWARE_MIXED: - ivhd_efr = (ACPI_IVRS_HARDWARE_EFRSUP *)ivhd; - softc->ext_feature = ivhd_efr->ExtFR; - break; - + case IVRS_TYPE_HARDWARE_EFR: + case IVRS_TYPE_HARDWARE_MIXED: + ivhd_efr = (ACPI_IVRS_HARDWARE2 *)ivhd; + softc->ext_feature = ivhd_efr->EfrRegisterImage; + break; } softc->ctrl = (struct amdvi_ctrl *) PHYS_TO_DMAP(ivhd->BaseAddress); Modified: stable/12/sys/contrib/dev/acpica/changes.txt ============================================================================== --- stable/12/sys/contrib/dev/acpica/changes.txt Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/changes.txt Tue Apr 14 08:34:34 2020 (r359915) @@ -1,22 +1,254 @@ ---------------------------------------- +26 March 2020. Summary of changes for version 20200326: + + +1) ACPICA kernel-resident subsystem: + +Performed a code clean-up to prevent build errors on early versions of +GCC-10. + +Added the NHLT table signature. iASL data table compiler/disassembler +support for this table is coming soon. + + +2) iASL Compiler/Disassembler and ACPICA tools: + +AcpiExec: Fixed several problems with the namespace initialization file +(-fi option). Includes fixes to prevent AE_ALREADY_EXISTS +errors, several seg faults, and enhancements to line parsing within the +init file. In addition, each object found in the init file and it's new +value is displayed, as well as any such entries that do not have a +corresponding name in the namespace. For reference, the syntax for the +various supported data types are presented below: + PCHG 0x777788889999BBBB // Integer + \DEV1.STR1 "XYZ" // String + BUF1 (88 99 AA) // Buffer + PKG1 [0x1111 0x2222] // Package + \BF1 0x7980 // BufferField + RCRV 0x0123456789ABCDEF // Field Unit + +iASL: Added a custom iASL macro __EXPECT__(iASL-Error-Code). This macro +can be used anywhere in a given ASL file to configure iASL to expect an +iASL compiler error code on the line where this macro was placed. If the +error code does not exist, an error is generated. This is intended to be +used for ACPICA's ASL test suite, but can be used by ASL developers as +well. + +iASL: table compiler: Implemented IVRS IVHD type 11h parsing. The AMD +IVRS table parsing supported only IVHD type 10h structures. Parsing an +IVHD type 11h caused the iasl to report unknown subtable type. Add +necessary structure definition for IVHD type 11h and apply correct +parsing method based on subtable type. Micha? ?ygowski. + +iASL: table compiler: Fixed IVRS table IVHD type 10h reserved field name +According to AMD IOMMU Specification Revision 3.05 the reserved field +should be IOMMU Feature Reporting. Change the name of the field to the +correct one. Micha? ?ygowski. + +acpiexec: removed redeclaration of AcpiGbl_DbOpt_NoRegionSupport. Patch +based on suggestions by David Seifert and Benjamin Berg. + +iASL: table compiler: removed an unused variable (DtCompilerParserResult) +causing linking errors. Patch based on suggestions by David Seifert and +Benjamin Berg. + +iASL: table compiler: make LexBuffer static to avoid linking errors in +newer compilers. Patch based on suggestions by David Seifert and Benjamin +Berg. + +iASL: fixed type matching between External and Named objects. External +object types can only be expressed with ACPI object type values that are +defined in the ACPI spec. However, iASL uses ACPI object type values that +are local to ACPICA in addition to the values defined in the ACPI spec. +This change implements type matching to map some object type values +specific to ACPICA to ones that are defined in the ACPI spec. + +iASL: Dropped the type mismatch compiler error that can arise from +External declarations to a warning. This warning can occur when there is +a type difference between the external declaration and the actual object +declaration (when compiling multiple files/modules simultaneously). + +iASL: removed an incorrect error message regarding externals. This change +removes an incorrect error that is emitted when a duplicate external +declaration does not contain a type that opens a scope. This is incorrect +because the duplicate external with conflicting types are already caught +by iASL and it doesn't make any sense to enforce what this conflicting +type should be. + +AcpiXtract: fix AX_IS_TABLE_BLOCK_HEADER macro. This macro needs to be +surrounded by parens. Otherwise, a logical statement that applies a +logical not operator to this macro could result in a computation that +applies the operator to the left side of the logical and but not the +right. Reported-by: John Levon + +Fixed a problem with the local version of sprint(): On 32-bit, the +provided sprintf() is non-functional: with a size of ACPI_UINT32_MAX, +String + Size will wrap, meaning End < Start, and +AcpiUtBoundStringOutput() will never output anything as a result. The +symptom seen of this was acpixtract failing to output anything -- with a +custom build that included utprint.c. Signed-off-by: John Levon + + +iASL: Changed the "PlatformCommChannel" ASL keyword to "PCC", as per the +ACPI specification. + + +---------------------------------------- +14 February 2020. Summary of changes for version 20200214: + + +1) ACPICA kernel-resident subsystem: + +Enable sleep button on ACPI legacy wake: Hibernation (S4) is triggered +in a guest when it receives a sleep trigger from the hypervisor. When the +guest resumes from this power state, it does not see the SleepEnabled +bit. In other words, the sleepHibernation (S4) is triggered in a guest +when it receives a sleep trigger from the hypervisor. When the guest +resumes from this power state, it does not see the SleepEnabled bit. In +other words, the sleep button is not enabled on waking from an S4 state. +This causes subsequent invocation of sleep state to fail since the +guest.button is not enabled on waking from an S4 state. This causes +subsequent invocation of sleep state to fail in the guest. Fix this +problem by enabling the sleep button in ACPI legacy wake. From Anchal +Agarwal . + +Implemented a new external interface, AcpiAnyGpeStatusSet (). To be used +for checking the status bits of all enabled GPEs in one go. It is needed +to distinguish spurious SCIs from genuine ones when deciding whether or +not to wake up the system from suspend-to-idle. + +Generic Makefiles: replace HOST name with ACPI_HOST: Some machines may be +using HOST in their environment to represent the host name for their +machines. Avoid this problem by renaming this variable from HOST to +ACPI_HOST. + +MSVC 2017 project files: Enable multiprocessor generation to improve +build performance. + +Added a macro to get the byte width of a Generic Address structure. New +ACPI_ACCESS_BYTE_WIDTH is in addition to the existing +ACPI_ACCESS_BIT_WIDTH. From Mika Westerberg. + + +2) iASL Compiler/Disassembler and ACPICA tools: + +iASL: Implemented full support for the (optional, rarely used) ReturnType +and ParameterTypesList for the Method, Function, and External operators. +For Method declarations, the number of individual ParameterTypes must +match the declaration of the number of arguments (NumArgs). This also +Fixes a problem with the External operator where extra/extraneous bytes +were emitted in the AML code if the optional ReturnType/ParameterTypes +were specified for a MethodObj declaration. +New error message: +1) Method NumArgs count does not match length of ParameterTypes list + +iASL: Implemented detection of type mismatches between External +declarations and named object declarations. Also, detect type mismatches +between multiple External declarations of the same Name. +New error messages: +1) Type mismatch between external declaration and actual object +declaration detected +2) Type mismatch between multiple external declarations detected + +iASL: Implemented new error messages for External operators that specify +a ReturnType and/or ParameterTypesList for any object type other than +control methods (MethodObj). +New error messages: +1) Return type is only allowed for Externals declared as MethodObj +2) Parameter type is only allowed for Externals declared as MethodObj + +iASL: Implemented two new remark/warning messages for ASL code that +creates named objects from within a control method. This is very +inefficient since the named object must be created and deleted each time +the method is executed. +New messages: +1) Creation of named objects within a method is highly inefficient, use +globals or method local variables instead (remark) +2) Static OperationRegion should be declared outside control method +(warning) + +iASL: Improved illegal forward reference detection by adding support to +detect forward-reference method invocations. + +iASL: Detect and issue an error message for NameStrings that contain too +many individual NameSegs (>255). This is an AML limitation that is +defined in the ACPI specification. +New message: +1) NameString contains too many NameSegs (>255) + +acpidump: windows: use GetSystemFirmwareTable API for all tables except +SSDT. By using this API, acpidump is able to get all tables in the XSDT + +iASL: Removed unused parser file and updated msvc2017 project files. +Removed the obsolete AslCompiler.y from the repository. + +iASL: msvc2017: Fixed macros in the file dependency list to prevent +unnecessary rebuilds. Replace %(Directory) with %(RelativeDir). + +Disassembler: Prevent spilling error messages to the output file. All +errors are directed to the console instead. These error messages +prevented re-compilation of the resulting disassembled ASL output file +(.DSL). + + +---------------------------------------- +10 January 2020. Summary of changes for version 20200110: + + +1) ACPICA kernel-resident subsystem: + +Updated all copyrights to 2020. This affects all ACPICA source code +modules. + + +2) iASL Compiler/Disassembler and ACPICA tools: + +ASL test suite (ASLTS): Updated all copyrights to 2020. + +Tools and utilities: Updated all signon copyrights to 2020. + +iASL: fix forward reference analysis for field declarations. Fixes +forward reference analysis for field declarations by searching the +parent scope for the named object when the object is not present in +the current scope. + +iASL: Improved the error output for ALREADY_EXISTS errors. Now, the +full pathname of the name that already exists is printed. + +iASL: Enhance duplicate Case() detection for buffers. Add check for +buffers with no initializer list (these buffers will be filled with +zeros at runtime.) + + +---------------------------------------- 13 December 2019. Summary of changes for version 20191213: 1) ACPICA kernel-resident subsystem: -Return a Buffer object for all fields created via the CreateField operator. Previously, an Integer would be returned if the size of the field was less than or equal to the current size of an Integer. Although this goes against the ACPI specification, it provides compatibility with other ACPI implementations. Also updated the ASLTS test suite to reflect this new behavior. +Return a Buffer object for all fields created via the CreateField +operator. Previously, an Integer would be returned if the size of +the field was less than or equal to the current size of an Integer. +Although this goes against the ACPI specification, it provides +compatibility with other ACPI implementations. Also updated the +ASLTS test suite to reflect this new behavior. 2) iASL Compiler/Disassembler and ACPICA tools: -iASL: Implemented detection of (and throw an error for) duplicate values for Case statements within a single Switch statement. Duplicate Integers, Strings, and Buffers are supported. +iASL: Implemented detection of (and throw an error for) duplicate +values for Case statements within a single Switch statement. Duplicate +Integers, Strings, and Buffers are supported. -iASL: Fix error logging issue during multiple file compilation -- Switch to the correct input file during error node creation. +iASL: Fix error logging issue during multiple file compilation -- +Switch to the correct input file during error node creation. -iASL: For duplicate named object creation, now emit an error instead of a warning - since this will cause a runtime error. +iASL: For duplicate named object creation, now emit an error instead +of a warning - since this will cause a runtime error. AcpiSrc: Add unix line-ending support for non-Windows builds. -iASL: Add an error condition for an attempt to create a NameString with > 255 NameSegs (the max allowable via the AML definition). +iASL: Add an error condition for an attempt to create a NameString +with > 255 NameSegs (the max allowable via the AML definition). ---------------------------------------- @@ -8806,8 +9038,8 @@ much larger code and data size. Fix build error under Bison-2.4. -Dissasembler: Enhanced FADT support. Added decoding of the Boot -Architecture +Disassembler: Enhanced FADT support. Added decoding of the Boot +Architecture flags. Now decode all flags, regardless of the FADT version. Flag output includes the FADT version which first defined each flag. Modified: stable/12/sys/contrib/dev/acpica/common/acfileio.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/acfileio.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/acfileio.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/common/acgetline.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/acgetline.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/acgetline.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/common/adfile.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/adfile.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/adfile.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/common/adisasm.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/adisasm.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/adisasm.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License @@ -156,6 +156,7 @@ #include #include #include +#include #define _COMPONENT ACPI_TOOLS @@ -379,8 +380,6 @@ AdAmlDisassemble ( Status = AE_ERROR; goto Cleanup; } - - AcpiOsRedirectOutput (File); } *OutFilename = DisasmFilename; @@ -467,6 +466,11 @@ AdDisassembleOneTable ( if (!AcpiGbl_ForceAmlDisassembly && !AcpiUtIsAmlTable (Table)) { + if (File) + { + AcpiOsRedirectOutput (File); + } + AdDisassemblerHeader (Filename, ACPI_IS_DATA_TABLE); /* This is a "Data Table" (non-AML table) */ @@ -489,6 +493,10 @@ AdDisassembleOneTable ( return (AE_OK); } + /* Initialize the converter output file */ + + ASL_CV_INIT_FILETREE(Table, File); + /* * This is an AML table (DSDT or SSDT). * Always parse the tables, only option is what to display @@ -499,6 +507,13 @@ AdDisassembleOneTable ( AcpiOsPrintf ("Could not parse ACPI tables, %s\n", AcpiFormatException (Status)); return (Status); + } + + /* Redirect output for code generation and debugging output */ + + if (File) + { + AcpiOsRedirectOutput (File); } /* Debug output, namespace and parse tree */ Modified: stable/12/sys/contrib/dev/acpica/common/adwalk.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/adwalk.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/adwalk.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/common/ahids.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/ahids.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/ahids.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/common/ahpredef.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/ahpredef.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/ahpredef.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/common/ahtable.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/ahtable.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/ahtable.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License @@ -258,7 +258,7 @@ const AH_TABLE AcpiGbl_SupportedTables[] = {ACPI_SIG_WDDT, "Watchdog Description Table"}, {ACPI_SIG_WDRT, "Watchdog Resource Table"}, {ACPI_SIG_WPBT, "Windows Platform Binary Table"}, - {ACPI_SIG_WSMT, "Windows SMM Security Migrations Table"}, + {ACPI_SIG_WSMT, "Windows SMM Security Mitigations Table"}, {ACPI_SIG_XENV, "Xen Environment table"}, {ACPI_SIG_XSDT, "Extended System Description Table"}, {NULL, NULL} Modified: stable/12/sys/contrib/dev/acpica/common/ahuuids.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/ahuuids.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/ahuuids.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/common/cmfsize.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/cmfsize.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/cmfsize.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/common/dmextern.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/dmextern.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/dmextern.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/common/dmrestag.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/dmrestag.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/dmrestag.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/common/dmswitch.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/dmswitch.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/dmswitch.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/common/dmtable.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/dmtable.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/dmtable.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License @@ -1676,7 +1676,8 @@ AcpiDmDumpTable ( Temp8 = *Target; switch (Temp8) { - case ACPI_IVRS_TYPE_HARDWARE: + case ACPI_IVRS_TYPE_HARDWARE1: + case ACPI_IVRS_TYPE_HARDWARE2: Name = AcpiDmIvrsSubnames[0]; break; Modified: stable/12/sys/contrib/dev/acpica/common/dmtables.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/dmtables.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/dmtables.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License @@ -506,7 +506,6 @@ AdParseTable ( AmlLength = Table->Length - sizeof (ACPI_TABLE_HEADER); AmlStart = ((UINT8 *) Table + sizeof (ACPI_TABLE_HEADER)); - ASL_CV_INIT_FILETREE(Table, AmlStart, AmlLength); AcpiUtSetIntegerWidth (Table->Revision); Modified: stable/12/sys/contrib/dev/acpica/common/dmtbdump.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/dmtbdump.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/dmtbdump.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/common/dmtbdump1.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/dmtbdump1.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/dmtbdump1.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/common/dmtbdump2.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/dmtbdump2.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/dmtbdump2.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License @@ -475,11 +475,16 @@ AcpiDmDumpIvrs ( switch (Subtable->Type) { - case ACPI_IVRS_TYPE_HARDWARE: + case ACPI_IVRS_TYPE_HARDWARE1: InfoTable = AcpiDmTableInfoIvrs0; break; + case ACPI_IVRS_TYPE_HARDWARE2: + + InfoTable = AcpiDmTableInfoIvrs01; + break; + case ACPI_IVRS_TYPE_MEMORY1: case ACPI_IVRS_TYPE_MEMORY2: case ACPI_IVRS_TYPE_MEMORY3: @@ -514,11 +519,21 @@ AcpiDmDumpIvrs ( /* The hardware subtable can contain multiple device entries */ - if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE) + if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE1 || + Subtable->Type == ACPI_IVRS_TYPE_HARDWARE2) { - EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE); - DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable, - sizeof (ACPI_IVRS_HARDWARE)); + if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE1) + { + EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE1); + DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable, + sizeof (ACPI_IVRS_HARDWARE1)); + } + else if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE2) + { + EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE2); + DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable, + sizeof (ACPI_IVRS_HARDWARE2)); + } while (EntryOffset < (Offset + Subtable->Length)) { Modified: stable/12/sys/contrib/dev/acpica/common/dmtbdump3.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/dmtbdump3.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/dmtbdump3.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/common/dmtbinfo.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/dmtbinfo.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/dmtbinfo.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/common/dmtbinfo1.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/dmtbinfo1.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/dmtbinfo1.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/common/dmtbinfo2.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/dmtbinfo2.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/dmtbinfo2.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License @@ -403,7 +403,21 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs0[] = {ACPI_DMT_UINT64, ACPI_IVRS0_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (PciSegmentGroup), "PCI Segment Group", 0}, {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (Info), "Virtualization Info", 0}, - {ACPI_DMT_UINT32, ACPI_IVRS0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_IVRS0_OFFSET (FeatureReporting), "Feature Reporting", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs01[] = +{ + {ACPI_DMT_UINT16, ACPI_IVRS01_OFFSET (CapabilityOffset), "Capability Offset", 0}, + {ACPI_DMT_UINT64, ACPI_IVRS01_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT16, ACPI_IVRS01_OFFSET (PciSegmentGroup), "PCI Segment Group", 0}, + {ACPI_DMT_UINT16, ACPI_IVRS01_OFFSET (Info), "Virtualization Info", 0}, + {ACPI_DMT_UINT32, ACPI_IVRS01_OFFSET (Attributes), "Attributes", 0}, + {ACPI_DMT_UINT64, ACPI_IVRS01_OFFSET (EfrRegisterImage), "EFR Image", 0}, + {ACPI_DMT_UINT64, ACPI_IVRS01_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; Modified: stable/12/sys/contrib/dev/acpica/common/dmtbinfo3.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/dmtbinfo3.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/dmtbinfo3.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License @@ -691,7 +691,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt0[] = /******************************************************************************* * - * WSMT - Windows SMM Security Migrations Table + * WSMT - Windows SMM Security Mitigations Table * ******************************************************************************/ Modified: stable/12/sys/contrib/dev/acpica/common/getopt.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/common/getopt.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/common/getopt.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/compiler/aslallocate.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/compiler/aslallocate.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/compiler/aslallocate.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/compiler/aslanalyze.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/compiler/aslanalyze.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/compiler/aslanalyze.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License @@ -151,6 +151,7 @@ #include #include "aslcompiler.y.h" +#include #include @@ -421,6 +422,7 @@ AnCheckMethodReturnValue ( { ACPI_PARSE_OBJECT *OwningOp; ACPI_NAMESPACE_NODE *Node; + char *ExternalPath; Node = ArgOp->Asl.Node; @@ -435,18 +437,19 @@ AnCheckMethodReturnValue ( /* Examine the parent op of this method */ OwningOp = Node->Op; + ExternalPath = AcpiNsGetNormalizedPathname (Node, TRUE); + if (OwningOp->Asl.CompileFlags & OP_METHOD_NO_RETVAL) { /* Method NEVER returns a value */ - AslError (ASL_ERROR, ASL_MSG_NO_RETVAL, Op, Op->Asl.ExternalName); + AslError (ASL_ERROR, ASL_MSG_NO_RETVAL, Op, ExternalPath); } else if (OwningOp->Asl.CompileFlags & OP_METHOD_SOME_NO_RETVAL) { /* Method SOMETIMES returns a value, SOMETIMES not */ - AslError (ASL_WARNING, ASL_MSG_SOME_NO_RETVAL, - Op, Op->Asl.ExternalName); + AslError (ASL_WARNING, ASL_MSG_SOME_NO_RETVAL, Op, ExternalPath); } else if (!(ThisNodeBtype & RequiredBtypes)) { @@ -469,6 +472,11 @@ AnCheckMethodReturnValue ( AslError (ASL_ERROR, ASL_MSG_INVALID_TYPE, ArgOp, AslGbl_MsgBuffer); } + } + + if (ExternalPath) + { + ACPI_FREE (ExternalPath); } } Modified: stable/12/sys/contrib/dev/acpica/compiler/aslascii.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/compiler/aslascii.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/compiler/aslascii.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/compiler/aslbtypes.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/compiler/aslbtypes.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/compiler/aslbtypes.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/compiler/aslcache.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/compiler/aslcache.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/compiler/aslcache.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/compiler/aslcodegen.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/compiler/aslcodegen.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/compiler/aslcodegen.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License Modified: stable/12/sys/contrib/dev/acpica/compiler/aslcompile.c ============================================================================== --- stable/12/sys/contrib/dev/acpica/compiler/aslcompile.c Tue Apr 14 07:38:34 2020 (r359914) +++ stable/12/sys/contrib/dev/acpica/compiler/aslcompile.c Tue Apr 14 08:34:34 2020 (r359915) @@ -8,7 +8,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2019, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2020, Intel Corp. * All rights reserved. * * 2. License @@ -283,6 +283,7 @@ CmDoCompile ( LsDumpParseTree (); + UtEndEvent (Event); UtEndEvent (FullCompile); return (AE_OK); @@ -647,7 +648,7 @@ void AslCompilerFileHeader ( UINT32 FileId) { - struct tm *NewTime; + char *NewTime; time_t Aclock; char *Prefix = ""; @@ -691,13 +692,17 @@ AslCompilerFileHeader ( /* Compilation header with timestamp */ *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-stable@freebsd.org Tue Apr 14 18:25:00 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8DC822C6920; Tue, 14 Apr 2020 18:25:00 +0000 (UTC) (envelope-from rscheff@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 491v6N2gJPz4YZf; Tue, 14 Apr 2020 18:25:00 +0000 (UTC) (envelope-from rscheff@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 56CA69B5C; Tue, 14 Apr 2020 18:25:00 +0000 (UTC) (envelope-from rscheff@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03EIP0Hj091081; Tue, 14 Apr 2020 18:25:00 GMT (envelope-from rscheff@FreeBSD.org) Received: (from rscheff@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03EIP0Vi091080; Tue, 14 Apr 2020 18:25:00 GMT (envelope-from rscheff@FreeBSD.org) Message-Id: <202004141825.03EIP0Vi091080@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rscheff set sender to rscheff@FreeBSD.org using -f From: Richard Scheffenegger Date: Tue, 14 Apr 2020 18:25:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359933 - stable/12/share/misc X-SVN-Group: stable-12 X-SVN-Commit-Author: rscheff X-SVN-Commit-Paths: stable/12/share/misc X-SVN-Commit-Revision: 359933 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Apr 2020 18:25:00 -0000 Author: rscheff Date: Tue Apr 14 18:24:59 2020 New Revision: 359933 URL: https://svnweb.freebsd.org/changeset/base/359933 Log: add my (rscheff) mentor relationship Reviewed by: rgrimes (mentor), tuexen (mentor) Approved by: rgrimes (mentor), tuexen (mentor) Sponsored by: NetApp, Inc. Differential Revision: https://reviews.freebsd.org/D24318 Modified: stable/12/share/misc/committers-src.dot Directory Properties: stable/12/ (props changed) Modified: stable/12/share/misc/committers-src.dot ============================================================================== --- stable/12/share/misc/committers-src.dot Tue Apr 14 18:11:54 2020 (r359932) +++ stable/12/share/misc/committers-src.dot Tue Apr 14 18:24:59 2020 (r359933) @@ -304,6 +304,7 @@ royger [label="Roger Pau Monne\nroyger@FreeBSD.org\n20 rpaulo [label="Rui Paulo\nrpaulo@FreeBSD.org\n2007/09/25"] rpokala [label="Ravi Pokala\nrpokala@FreeBSD.org\n2015/11/19"] rrs [label="Randall R Stewart\nrrs@FreeBSD.org\n2007/02/08"] +rscheff [label="Richard Scheffenegger\nrscheff@FreeBSD.org\n2020/04/06"] rse [label="Ralf S. Engelschall\nrse@FreeBSD.org\n1997/07/31"] rstone [label="Ryan Stone\nrstone@FreeBSD.org\n2010/04/19"] ru [label="Ruslan Ermilov\nru@FreeBSD.org\n1999/05/27"] @@ -766,6 +767,7 @@ pjd -> smh pjd -> trociny rgrimes -> markm +rgrimes -> rscheff rmacklem -> jwd @@ -855,6 +857,8 @@ thompsa -> eri trasz -> jh trasz -> mjg + +tuexen -> rscheff ume -> jinmei ume -> suz From owner-svn-src-stable@freebsd.org Wed Apr 15 00:18:22 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 427FA2CDB12; Wed, 15 Apr 2020 00:18:22 +0000 (UTC) (envelope-from mckusick@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4922y61NlBz40wK; Wed, 15 Apr 2020 00:18:22 +0000 (UTC) (envelope-from mckusick@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 260E9E1B2; Wed, 15 Apr 2020 00:18:22 +0000 (UTC) (envelope-from mckusick@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03F0ILK4039997; Wed, 15 Apr 2020 00:18:21 GMT (envelope-from mckusick@FreeBSD.org) Received: (from mckusick@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03F0IK6n039989; Wed, 15 Apr 2020 00:18:20 GMT (envelope-from mckusick@FreeBSD.org) Message-Id: <202004150018.03F0IK6n039989@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mckusick set sender to mckusick@FreeBSD.org using -f From: Kirk McKusick Date: Wed, 15 Apr 2020 00:18:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359946 - in stable/12: include/protocols sbin/dump sbin/restore X-SVN-Group: stable-12 X-SVN-Commit-Author: mckusick X-SVN-Commit-Paths: in stable/12: include/protocols sbin/dump sbin/restore X-SVN-Commit-Revision: 359946 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Apr 2020 00:18:22 -0000 Author: mckusick Date: Wed Apr 15 00:18:19 2020 New Revision: 359946 URL: https://svnweb.freebsd.org/changeset/base/359946 Log: MFC of 359627 Update dump and restore to compile with -fno-common. Modified: stable/12/include/protocols/dumprestore.h stable/12/sbin/dump/dump.h stable/12/sbin/dump/dumprmt.c stable/12/sbin/dump/itime.c stable/12/sbin/dump/main.c stable/12/sbin/dump/pathnames.h stable/12/sbin/dump/tape.c stable/12/sbin/restore/restore.h stable/12/sbin/restore/tape.c Directory Properties: stable/12/ (props changed) Modified: stable/12/include/protocols/dumprestore.h ============================================================================== --- stable/12/include/protocols/dumprestore.h Wed Apr 15 00:14:50 2020 (r359945) +++ stable/12/include/protocols/dumprestore.h Wed Apr 15 00:18:19 2020 (r359946) @@ -76,7 +76,7 @@ */ typedef uint32_t dump_ino_t; -union u_spcl { +extern union u_spcl { char dummy[TP_BSIZE]; struct s_spcl { int32_t c_type; /* record type (see below) */ Modified: stable/12/sbin/dump/dump.h ============================================================================== --- stable/12/sbin/dump/dump.h Wed Apr 15 00:14:50 2020 (r359945) +++ stable/12/sbin/dump/dump.h Wed Apr 15 00:18:19 2020 (r359946) @@ -36,10 +36,10 @@ /* * Dump maps used to describe what is to be dumped. */ -int mapsize; /* size of the state maps */ -char *usedinomap; /* map of allocated inodes */ -char *dumpdirmap; /* map of directories to be dumped */ -char *dumpinomap; /* map of files to be dumped */ +extern int mapsize; /* size of the state maps */ +extern char *usedinomap; /* map of allocated inodes */ +extern char *dumpdirmap; /* map of directories to be dumped */ +extern char *dumpinomap; /* map of files to be dumped */ /* * Map manipulation macros. */ @@ -56,40 +56,40 @@ char *dumpinomap; /* map of files to be dumped */ /* * All calculations done in 0.1" units! */ -char *disk; /* name of the disk file */ -char *tape; /* name of the tape file */ -char *popenout; /* popen(3) per-"tape" command */ -char *dumpdates; /* name of the file containing dump date information*/ -char *temp; /* name of the file for doing rewrite of dumpdates */ -int lastlevel; /* dump level of previous dump */ -int level; /* dump level of this dump */ -int uflag; /* update flag */ -int diskfd; /* disk file descriptor */ -int tapefd; /* tape file descriptor */ -int pipeout; /* true => output to standard output */ -ino_t curino; /* current inumber; used globally */ -int newtape; /* new tape flag */ -int density; /* density in 0.1" units */ -long tapesize; /* estimated tape size, blocks */ -long tsize; /* tape size in 0.1" units */ -long asize; /* number of 0.1" units written on current tape */ -int etapes; /* estimated number of tapes */ -int nonodump; /* if set, do not honor UF_NODUMP user flags */ -int unlimited; /* if set, write to end of medium */ -int cachesize; /* size of block cache in bytes */ -int rsync_friendly; /* be friendly with rsync */ +extern char *disk; /* name of the disk file */ +extern char *tape; /* name of the tape file */ +extern char *popenout; /* popen(3) per-"tape" command */ +extern char *dumpdates; /* name of the file containing dump date info */ +extern int lastlevel; /* dump level of previous dump */ +extern int level; /* dump level of this dump */ +extern int uflag; /* update flag */ +extern int diskfd; /* disk file descriptor */ +extern int pipeout; /* true => output to standard output */ +extern ino_t curino; /* current inumber; used globally */ +extern int newtape; /* new tape flag */ +extern int density; /* density in 0.1" units */ +extern long tapesize; /* estimated tape size, blocks */ +extern long tsize; /* tape size in 0.1" units */ +extern int etapes; /* estimated number of tapes */ +extern int nonodump; /* if set, do not honor UF_NODUMP user flags */ +extern int unlimited; /* if set, write to end of medium */ +extern int cachesize; /* size of block cache in bytes */ +extern int rsync_friendly; /* be friendly with rsync */ +extern int notify; /* notify operator flag */ +extern int blockswritten; /* number of blocks written on current tape */ +extern int tapeno; /* current tape number */ +extern int ntrec; /* blocking factor on tape */ +extern long blocksperfile; /* number of blocks per output file */ +extern int cartridge; /* assume non-cartridge tape */ +extern char *host; /* remote host (if any) */ +extern time_t tstart_writing; /* when started writing the first tape block */ +extern time_t tend_writing; /* after writing the last tape block */ +extern int passno; /* current dump pass number */ +extern struct fs *sblock; /* the file system super block */ +extern long dev_bsize; /* block size of underlying disk device */ +extern int dev_bshift; /* log2(dev_bsize) */ +extern int tp_bshift; /* log2(TP_BSIZE) */ -int notify; /* notify operator flag */ -int blockswritten; /* number of blocks written on current tape */ -int tapeno; /* current tape number */ -time_t tstart_writing; /* when started writing the first tape block */ -time_t tend_writing; /* after writing the last tape block */ -int passno; /* current dump pass number */ -struct fs *sblock; /* the file system super block */ -long dev_bsize; /* block size of underlying disk device */ -int dev_bshift; /* log2(dev_bsize) */ -int tp_bshift; /* log2(TP_BSIZE) */ - /* operator interface functions */ void broadcast(const char *message); void infosch(int); @@ -163,8 +163,8 @@ struct dumpdates { int dd_level; time_t dd_ddate; }; -int nddates; /* number of records (might be zero) */ -struct dumpdates **ddatev; /* the arrayfied version */ +extern int nddates; /* number of records (might be zero) */ +extern struct dumpdates **ddatev; /* the arrayfied version */ void initdumptimes(void); void getdumptime(void); void putdumptime(void); Modified: stable/12/sbin/dump/dumprmt.c ============================================================================== --- stable/12/sbin/dump/dumprmt.c Wed Apr 15 00:14:50 2020 (r359945) +++ stable/12/sbin/dump/dumprmt.c Wed Apr 15 00:18:19 2020 (r359946) @@ -80,7 +80,6 @@ static void rmtgets(char *, int); static int rmtreply(const char *); static int errfd = -1; -extern int ntrec; /* blocking factor on tape */ int rmthost(const char *host) Modified: stable/12/sbin/dump/itime.c ============================================================================== --- stable/12/sbin/dump/itime.c Wed Apr 15 00:14:50 2020 (r359945) +++ stable/12/sbin/dump/itime.c Wed Apr 15 00:18:19 2020 (r359946) @@ -60,8 +60,10 @@ struct dumptime { SLIST_ENTRY(dumptime) dt_list; }; SLIST_HEAD(dthead, dumptime) dthead = SLIST_HEAD_INITIALIZER(dthead); -struct dumpdates **ddatev = NULL; -int nddates = 0; +int nddates = 0; /* number of records (might be zero) */ +struct dumpdates **ddatev; /* the arrayfied version */ +char *dumpdates; /* name of the file containing dump date info */ +int lastlevel; /* dump level of previous dump */ static void dumprecout(FILE *, const struct dumpdates *); static int getrecord(FILE *, struct dumpdates *); Modified: stable/12/sbin/dump/main.c ============================================================================== --- stable/12/sbin/dump/main.c Wed Apr 15 00:14:50 2020 (r359945) +++ stable/12/sbin/dump/main.c Wed Apr 15 00:18:19 2020 (r359946) @@ -73,17 +73,40 @@ static const char rcsid[] = #include "dump.h" #include "pathnames.h" +int mapsize; /* size of the state maps */ +char *usedinomap; /* map of allocated inodes */ +char *dumpdirmap; /* map of directories to be dumped */ +char *dumpinomap; /* map of files to be dumped */ +char *disk; /* name of the disk file */ +char *tape; /* name of the tape file */ +char *popenout; /* popen(3) per-"tape" command */ +int level; /* dump level of this dump */ +int uflag; /* update flag */ +int diskfd; /* disk file descriptor */ +int pipeout; /* true => output to standard output */ +int density = 0; /* density in bytes/0.1" " <- this is for hilit19 */ +long tapesize; /* estimated tape size, blocks */ +long tsize; /* tape size in 0.1" units */ +int etapes; /* estimated number of tapes */ +int nonodump; /* if set, do not honor UF_NODUMP user flags */ +int unlimited; /* if set, write to end of medium */ +int cachesize = 0; /* block cache size (in bytes), defaults to 0 */ +int rsync_friendly; /* be friendly with rsync */ int notify = 0; /* notify operator flag */ -int snapdump = 0; /* dumping live filesystem, so use snapshot */ -int blockswritten = 0; /* number of blocks written on current tape */ +int blockswritten = 0; /* number of blocks written on current tape */ int tapeno = 0; /* current tape number */ -int density = 0; /* density in bytes/0.1" " <- this is for hilit19 */ int ntrec = NTREC; /* # tape blocks in each tape record */ +long blocksperfile; /* number of blocks per output file */ int cartridge = 0; /* Assume non-cartridge tape */ -int cachesize = 0; /* block cache size (in bytes), defaults to 0 */ -long dev_bsize = 1; /* recalculated below */ -long blocksperfile; /* output blocks per file */ char *host = NULL; /* remote host (if any) */ +time_t tstart_writing; /* when started writing the first tape block */ +time_t tend_writing; /* after writing the last tape block */ +int passno; /* current dump pass number */ +struct fs *sblock; /* the file system super block */ +long dev_bsize = 1; /* recalculated below */ +int dev_bshift; /* log2(dev_bsize) */ +int tp_bshift; /* log2(TP_BSIZE) */ +int snapdump = 0; /* dumping live filesystem, so use snapshot */ static char *getmntpt(char *, int *); static long numarg(const char *, long, long); @@ -111,7 +134,6 @@ main(int argc, char *argv[]) dumpdates = _PATH_DUMPDATES; popenout = NULL; tape = NULL; - temp = _PATH_DTMP; if (TP_BSIZE / DEV_BSIZE == 0 || TP_BSIZE % DEV_BSIZE != 0) quit("TP_BSIZE must be a multiple of DEV_BSIZE\n"); level = 0; Modified: stable/12/sbin/dump/pathnames.h ============================================================================== --- stable/12/sbin/dump/pathnames.h Wed Apr 15 00:14:50 2020 (r359945) +++ stable/12/sbin/dump/pathnames.h Wed Apr 15 00:18:19 2020 (r359946) @@ -35,7 +35,6 @@ #include #define _PATH_DEFTAPE "/dev/sa0" -#define _PATH_DTMP "/etc/dtmp" #define _PATH_DUMPDATES "/etc/dumpdates" #define _PATH_LOCK "/tmp/dumplockXXXXXX" #define _PATH_RMT "/etc/rmt" /* path on remote host */ Modified: stable/12/sbin/dump/tape.c ============================================================================== --- stable/12/sbin/dump/tape.c Wed Apr 15 00:14:50 2020 (r359945) +++ stable/12/sbin/dump/tape.c Wed Apr 15 00:18:19 2020 (r359946) @@ -61,17 +61,19 @@ static const char rcsid[] = #include "dump.h" -int writesize; /* size of malloc()ed buffer for tape */ -int64_t lastspclrec = -1; /* tape block number of last written header */ -int trecno = 0; /* next record to write in current block */ -extern long blocksperfile; /* number of blocks per output file */ -long blocksthisvol; /* number of blocks on current output file */ -extern int ntrec; /* blocking factor on tape */ -extern int cartridge; -extern char *host; -char *nexttape; -FILE *popenfp = NULL; +ino_t curino; /* current inumber; used globally */ +int newtape; /* new tape flag */ +union u_spcl u_spcl; /* mapping of variables in a control block */ +static int tapefd; /* tape file descriptor */ +static long asize; /* number of 0.1" units written on cur tape */ +static int writesize; /* size of malloc()ed buffer for tape */ +static int64_t lastspclrec = -1; /* tape block number of last written header */ +static int trecno = 0; /* next record to write in current block */ +static long blocksthisvol; /* number of blocks on current output file */ +static char *nexttape; +static FILE *popenfp = NULL; + static int atomic(ssize_t (*)(), int, char *, int); static void doslave(int, int); static void enslave(void); @@ -91,10 +93,10 @@ struct req { ufs2_daddr_t dblk; int count; }; -int reqsiz; +static int reqsiz; #define SLAVES 3 /* 1 slave writing, 1 reading, 1 for slack */ -struct slave { +static struct slave { int64_t tapea; /* header number at start of this chunk */ int64_t firstrec; /* record number of this block */ int count; /* count to next header (used for TS_TAPE */ @@ -106,12 +108,12 @@ struct slave { char (*tblock)[TP_BSIZE]; /* buffer for data blocks */ struct req *req; /* buffer for requests */ } slaves[SLAVES+1]; -struct slave *slp; +static struct slave *slp; -char (*nextblock)[TP_BSIZE]; +static char (*nextblock)[TP_BSIZE]; -int master; /* pid of master, for sending error signals */ -int tenths; /* length of tape used per block written */ +static int master; /* pid of master, for sending error signals */ +static int tenths; /* length of tape used per block written */ static volatile sig_atomic_t caught; /* have we caught the signal to proceed? */ static volatile sig_atomic_t ready; /* reached the lock point without having */ /* received the SIGUSR2 signal from the prev slave? */ Modified: stable/12/sbin/restore/restore.h ============================================================================== --- stable/12/sbin/restore/restore.h Wed Apr 15 00:14:50 2020 (r359945) +++ stable/12/sbin/restore/restore.h Wed Apr 15 00:18:19 2020 (r359946) @@ -103,7 +103,7 @@ struct entry { /* * The entry describes the next file available on the tape */ -struct context { +extern struct context { short action; /* action being taken on this file */ mode_t mode; /* mode of file */ ino_t ino; /* inumber of file */ Modified: stable/12/sbin/restore/tape.c ============================================================================== --- stable/12/sbin/restore/tape.c Wed Apr 15 00:14:50 2020 (r359945) +++ stable/12/sbin/restore/tape.c Wed Apr 15 00:18:19 2020 (r359946) @@ -94,6 +94,8 @@ static char *map; static char lnkbuf[MAXPATHLEN + 1]; static int pathlen; +struct context curfile; /* describes next file available on the tape */ +union u_spcl u_spcl; /* mapping of variables in a control block */ int Bcvt; /* Swap Bytes */ int oldinofmt; /* FreeBSD 1 inode format needs cvt */ From owner-svn-src-stable@freebsd.org Wed Apr 15 00:36:01 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 1F5AC2CE075; Wed, 15 Apr 2020 00:36:01 +0000 (UTC) (envelope-from kib@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4923LS70TCz425d; Wed, 15 Apr 2020 00:36:00 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E720DE591; Wed, 15 Apr 2020 00:36:00 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03F0a0Ep052281; Wed, 15 Apr 2020 00:36:00 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03F0a0n8052280; Wed, 15 Apr 2020 00:36:00 GMT (envelope-from kib@FreeBSD.org) Message-Id: <202004150036.03F0a0n8052280@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Wed, 15 Apr 2020 00:36:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359947 - stable/12/sys/x86/x86 X-SVN-Group: stable-12 X-SVN-Commit-Author: kib X-SVN-Commit-Paths: stable/12/sys/x86/x86 X-SVN-Commit-Revision: 359947 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Apr 2020 00:36:01 -0000 Author: kib Date: Wed Apr 15 00:36:00 2020 New Revision: 359947 URL: https://svnweb.freebsd.org/changeset/base/359947 Log: MFC r359520: x86 tsc: fall back to CPUID if calibration results looks unbelievable. Modified: stable/12/sys/x86/x86/tsc.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/x86/x86/tsc.c ============================================================================== --- stable/12/sys/x86/x86/tsc.c Wed Apr 15 00:18:19 2020 (r359946) +++ stable/12/sys/x86/x86/tsc.c Wed Apr 15 00:36:00 2020 (r359947) @@ -142,7 +142,7 @@ tsc_freq_vmware(void) * tsc_freq_intel(), when available. */ static bool -tsc_freq_cpuid(void) +tsc_freq_cpuid(uint64_t *res) { u_int regs[4]; @@ -150,7 +150,7 @@ tsc_freq_cpuid(void) return (false); do_cpuid(0x15, regs); if (regs[0] != 0 && regs[1] != 0 && regs[2] != 0) { - tsc_freq = (uint64_t)regs[2] * regs[1] / regs[0]; + *res = (uint64_t)regs[2] * regs[1] / regs[0]; return (true); } @@ -158,7 +158,7 @@ tsc_freq_cpuid(void) return (false); do_cpuid(0x16, regs); if (regs[0] != 0) { - tsc_freq = (uint64_t)regs[0] * 1000000; + *res = (uint64_t)regs[0] * 1000000; return (true); } @@ -228,7 +228,8 @@ static void probe_tsc_freq(void) { u_int regs[4]; - uint64_t tsc1, tsc2; + uint64_t tmp_freq, tsc1, tsc2; + int no_cpuid_override; uint16_t bootflags; if (cpu_high >= 6) { @@ -303,15 +304,15 @@ probe_tsc_freq(void) */ if (acpi_get_fadt_bootflags(&bootflags) && (bootflags & ACPI_FADT_LEGACY_DEVICES) == 0 && - tsc_freq_cpuid()) { + tsc_freq_cpuid(&tmp_freq)) { printf("Skipping TSC calibration since no legacy " "devices reported by FADT and CPUID works\n"); tsc_skip_calibration = 1; } } if (tsc_skip_calibration) { - if (tsc_freq_cpuid()) - ; + if (tsc_freq_cpuid(&tmp_freq)) + tsc_freq = tmp_freq; else if (cpu_vendor_id == CPU_VENDOR_INTEL) tsc_freq_intel(); } else { @@ -321,6 +322,32 @@ probe_tsc_freq(void) DELAY(1000000); tsc2 = rdtsc(); tsc_freq = tsc2 - tsc1; + + /* + * If the difference between calibrated frequency and + * the frequency reported by CPUID 0x15/0x16 leafs + * differ significantly, this probably means that + * calibration is bogus. It happens on machines + * without 8254 timer and with BIOS not properly + * reporting it in FADT boot flags. + */ + if (tsc_freq_cpuid(&tmp_freq) && qabs(tsc_freq - tmp_freq) > + uqmin(tsc_freq, tmp_freq)) { + no_cpuid_override = 0; + TUNABLE_INT_FETCH("machdep.disable_tsc_cpuid_override", + &no_cpuid_override); + if (!no_cpuid_override) { + if (bootverbose) { + printf( + "TSC clock: calibration freq %ju Hz, CPUID freq %ju Hz%s\n", + (uintmax_t)tsc_freq, + (uintmax_t)tmp_freq, + no_cpuid_override ? "" : + ", doing CPUID override"); + } + tsc_freq = tmp_freq; + } + } } if (bootverbose) printf("TSC clock: %ju Hz\n", (intmax_t)tsc_freq); From owner-svn-src-stable@freebsd.org Wed Apr 15 04:52:11 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 66CEB2AACAC; Wed, 15 Apr 2020 04:52:11 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 49292327Xnz4G3j; Wed, 15 Apr 2020 04:52:11 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 440DC197FF; Wed, 15 Apr 2020 04:52:11 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03F4qB6O013989; Wed, 15 Apr 2020 04:52:11 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03F4qBxh013988; Wed, 15 Apr 2020 04:52:11 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004150452.03F4qBxh013988@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Wed, 15 Apr 2020 04:52:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359955 - stable/12/sys/compat/linuxkpi/common/include/linux X-SVN-Group: stable-12 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/12/sys/compat/linuxkpi/common/include/linux X-SVN-Commit-Revision: 359955 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Apr 2020 04:52:11 -0000 Author: hselasky Date: Wed Apr 15 04:52:10 2020 New Revision: 359955 URL: https://svnweb.freebsd.org/changeset/base/359955 Log: MFC r359726: Some fixes for SRCU in the LinuxKPI. - Make sure to use READ_ONCE() when deferring variables. - Remove superfluous zero initializer. Sponsored by: Mellanox Technologies Modified: stable/12/sys/compat/linuxkpi/common/include/linux/srcu.h Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/compat/linuxkpi/common/include/linux/srcu.h ============================================================================== --- stable/12/sys/compat/linuxkpi/common/include/linux/srcu.h Wed Apr 15 04:03:46 2020 (r359954) +++ stable/12/sys/compat/linuxkpi/common/include/linux/srcu.h Wed Apr 15 04:52:10 2020 (r359955) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2015-2017 Mellanox Technologies, Ltd. + * Copyright (c) 2015-2020 Mellanox Technologies, Ltd. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -29,13 +29,16 @@ #ifndef _LINUX_SRCU_H_ #define _LINUX_SRCU_H_ +#include + struct srcu_struct { }; -#define srcu_dereference(ptr,srcu) ((__typeof(*(ptr)) *)(ptr)) +#define srcu_dereference(p, srcu) \ + ((__typeof(*(p)) *)READ_ONCE(p)) #define DEFINE_STATIC_SRCU(name) \ - static struct srcu_struct name = {} + static struct srcu_struct name /* prototypes */ From owner-svn-src-stable@freebsd.org Wed Apr 15 04:52:59 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 96D1E2AAD22; Wed, 15 Apr 2020 04:52:59 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 49292z3Q2Hz4GBq; Wed, 15 Apr 2020 04:52:59 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7049D1982D; Wed, 15 Apr 2020 04:52:59 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03F4qx1q015069; Wed, 15 Apr 2020 04:52:59 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03F4qx5E015068; Wed, 15 Apr 2020 04:52:59 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004150452.03F4qx5E015068@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Wed, 15 Apr 2020 04:52:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359956 - stable/11/sys/compat/linuxkpi/common/include/linux X-SVN-Group: stable-11 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: stable/11/sys/compat/linuxkpi/common/include/linux X-SVN-Commit-Revision: 359956 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Apr 2020 04:52:59 -0000 Author: hselasky Date: Wed Apr 15 04:52:59 2020 New Revision: 359956 URL: https://svnweb.freebsd.org/changeset/base/359956 Log: MFC r359726: Some fixes for SRCU in the LinuxKPI. - Make sure to use READ_ONCE() when deferring variables. - Remove superfluous zero initializer. Sponsored by: Mellanox Technologies Modified: stable/11/sys/compat/linuxkpi/common/include/linux/srcu.h Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/compat/linuxkpi/common/include/linux/srcu.h ============================================================================== --- stable/11/sys/compat/linuxkpi/common/include/linux/srcu.h Wed Apr 15 04:52:10 2020 (r359955) +++ stable/11/sys/compat/linuxkpi/common/include/linux/srcu.h Wed Apr 15 04:52:59 2020 (r359956) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2015-2017 Mellanox Technologies, Ltd. + * Copyright (c) 2015-2020 Mellanox Technologies, Ltd. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -29,13 +29,16 @@ #ifndef _LINUX_SRCU_H_ #define _LINUX_SRCU_H_ +#include + struct srcu_struct { }; -#define srcu_dereference(ptr,srcu) ((__typeof(*(ptr)) *)(ptr)) +#define srcu_dereference(p, srcu) \ + ((__typeof(*(p)) *)READ_ONCE(p)) #define DEFINE_STATIC_SRCU(name) \ - static struct srcu_struct name = {} + static struct srcu_struct name /* prototypes */ From owner-svn-src-stable@freebsd.org Wed Apr 15 04:56:28 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id BF7392AADCC; Wed, 15 Apr 2020 04:56:28 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4929704XzGz4GK7; Wed, 15 Apr 2020 04:56:28 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9220E1982E; Wed, 15 Apr 2020 04:56:28 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03F4uSCX015410; Wed, 15 Apr 2020 04:56:28 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03F4uST2015407; Wed, 15 Apr 2020 04:56:28 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004150456.03F4uST2015407@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Wed, 15 Apr 2020 04:56:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359957 - in stable/12/sys: compat/linuxkpi/common/include/linux compat/linuxkpi/common/src sys X-SVN-Group: stable-12 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: in stable/12/sys: compat/linuxkpi/common/include/linux compat/linuxkpi/common/src sys X-SVN-Commit-Revision: 359957 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Apr 2020 04:56:28 -0000 Author: hselasky Date: Wed Apr 15 04:56:27 2020 New Revision: 359957 URL: https://svnweb.freebsd.org/changeset/base/359957 Log: MFC r359727: Clone the RCU interface into a sleepable and a non-sleepable part in the LinuxKPI. This allows synchronize RCU to be used inside a SRCU read section. No functional change intended. Bump the __FreeBSD_version to force recompilation of external kernel modules. PR: 242272 Sponsored by: Mellanox Technologies Modified: stable/12/sys/compat/linuxkpi/common/include/linux/rcupdate.h stable/12/sys/compat/linuxkpi/common/src/linux_rcu.c stable/12/sys/sys/param.h Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/compat/linuxkpi/common/include/linux/rcupdate.h ============================================================================== --- stable/12/sys/compat/linuxkpi/common/include/linux/rcupdate.h Wed Apr 15 04:52:59 2020 (r359956) +++ stable/12/sys/compat/linuxkpi/common/include/linux/rcupdate.h Wed Apr 15 04:56:27 2020 (r359957) @@ -35,6 +35,11 @@ #define LINUX_KFREE_RCU_OFFSET_MAX 4096 /* exclusive */ +/* BSD specific defines */ +#define RCU_TYPE_REGULAR 0 +#define RCU_TYPE_SLEEPABLE 1 +#define RCU_TYPE_MAX 2 + #define RCU_INITIALIZER(v) \ ((__typeof(*(v)) *)(v)) @@ -43,27 +48,27 @@ } while (0) #define call_rcu(ptr, func) do { \ - linux_call_rcu(ptr, func); \ + linux_call_rcu(RCU_TYPE_REGULAR, ptr, func); \ } while (0) #define rcu_barrier(void) do { \ - linux_rcu_barrier(); \ + linux_rcu_barrier(RCU_TYPE_REGULAR); \ } while (0) #define rcu_read_lock(void) do { \ - linux_rcu_read_lock(); \ + linux_rcu_read_lock(RCU_TYPE_REGULAR); \ } while (0) #define rcu_read_unlock(void) do { \ - linux_rcu_read_unlock(); \ + linux_rcu_read_unlock(RCU_TYPE_REGULAR);\ } while (0) #define synchronize_rcu(void) do { \ - linux_synchronize_rcu(); \ + linux_synchronize_rcu(RCU_TYPE_REGULAR); \ } while (0) #define synchronize_rcu_expedited(void) do { \ - linux_synchronize_rcu(); \ + linux_synchronize_rcu(RCU_TYPE_REGULAR); \ } while (0) #define kfree_rcu(ptr, rcu_head) do { \ @@ -94,11 +99,11 @@ /* prototypes */ -extern void linux_call_rcu(struct rcu_head *ptr, rcu_callback_t func); -extern void linux_rcu_barrier(void); -extern void linux_rcu_read_lock(void); -extern void linux_rcu_read_unlock(void); -extern void linux_synchronize_rcu(void); +extern void linux_call_rcu(unsigned type, struct rcu_head *ptr, rcu_callback_t func); +extern void linux_rcu_barrier(unsigned type); +extern void linux_rcu_read_lock(unsigned type); +extern void linux_rcu_read_unlock(unsigned type); +extern void linux_synchronize_rcu(unsigned type); /* Empty implementation for !DEBUG */ #define init_rcu_head(...) Modified: stable/12/sys/compat/linuxkpi/common/src/linux_rcu.c ============================================================================== --- stable/12/sys/compat/linuxkpi/common/src/linux_rcu.c Wed Apr 15 04:52:59 2020 (r359956) +++ stable/12/sys/compat/linuxkpi/common/src/linux_rcu.c Wed Apr 15 04:56:27 2020 (r359957) @@ -1,6 +1,6 @@ /*- * Copyright (c) 2016 Matthew Macy (mmacy@mattmacy.io) - * Copyright (c) 2017 Hans Petter Selasky (hselasky@freebsd.org) + * Copyright (c) 2017-2020 Hans Petter Selasky (hselasky@freebsd.org) * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -90,9 +90,9 @@ CTASSERT(sizeof(struct rcu_head) == sizeof(struct call */ CTASSERT(offsetof(struct linux_epoch_record, epoch_record) == 0); -static ck_epoch_t linux_epoch; -static struct linux_epoch_head linux_epoch_head; -DPCPU_DEFINE_STATIC(struct linux_epoch_record, linux_epoch_record); +static ck_epoch_t linux_epoch[RCU_TYPE_MAX]; +static struct linux_epoch_head linux_epoch_head[RCU_TYPE_MAX]; +DPCPU_DEFINE_STATIC(struct linux_epoch_record, linux_epoch_record[RCU_TYPE_MAX]); static void linux_rcu_cleaner_func(void *, int); @@ -101,23 +101,27 @@ linux_rcu_runtime_init(void *arg __unused) { struct linux_epoch_head *head; int i; + int j; - ck_epoch_init(&linux_epoch); + for (j = 0; j != RCU_TYPE_MAX; j++) { + ck_epoch_init(&linux_epoch[j]); - head = &linux_epoch_head; + head = &linux_epoch_head[j]; - mtx_init(&head->lock, "LRCU-HEAD", NULL, MTX_DEF); - TASK_INIT(&head->task, 0, linux_rcu_cleaner_func, NULL); - STAILQ_INIT(&head->cb_head); + mtx_init(&head->lock, "LRCU-HEAD", NULL, MTX_DEF); + TASK_INIT(&head->task, 0, linux_rcu_cleaner_func, head); + STAILQ_INIT(&head->cb_head); - CPU_FOREACH(i) { - struct linux_epoch_record *record; + CPU_FOREACH(i) { + struct linux_epoch_record *record; - record = &DPCPU_ID_GET(i, linux_epoch_record); + record = &DPCPU_ID_GET(i, linux_epoch_record[j]); - record->cpuid = i; - ck_epoch_register(&linux_epoch, &record->epoch_record, NULL); - TAILQ_INIT(&record->ts_head); + record->cpuid = i; + ck_epoch_register(&linux_epoch[j], + &record->epoch_record, NULL); + TAILQ_INIT(&record->ts_head); + } } } SYSINIT(linux_rcu_runtime, SI_SUB_CPU, SI_ORDER_ANY, linux_rcu_runtime_init, NULL); @@ -126,24 +130,27 @@ static void linux_rcu_runtime_uninit(void *arg __unused) { struct linux_epoch_head *head; + int j; - head = &linux_epoch_head; + for (j = 0; j != RCU_TYPE_MAX; j++) { + head = &linux_epoch_head[j]; - /* destroy head lock */ - mtx_destroy(&head->lock); + mtx_destroy(&head->lock); + } } SYSUNINIT(linux_rcu_runtime, SI_SUB_LOCK, SI_ORDER_SECOND, linux_rcu_runtime_uninit, NULL); static void -linux_rcu_cleaner_func(void *context __unused, int pending __unused) +linux_rcu_cleaner_func(void *context, int pending __unused) { struct linux_epoch_head *head; struct callback_head *rcu; STAILQ_HEAD(, callback_head) tmp_head; + uintptr_t offset; linux_set_current(curthread); - head = &linux_epoch_head; + head = context; /* move current callbacks into own queue */ mtx_lock(&head->lock); @@ -152,11 +159,10 @@ linux_rcu_cleaner_func(void *context __unused, int pen mtx_unlock(&head->lock); /* synchronize */ - linux_synchronize_rcu(); + linux_synchronize_rcu(head - linux_epoch_head); /* dispatch all callbacks, if any */ while ((rcu = STAILQ_FIRST(&tmp_head)) != NULL) { - uintptr_t offset; STAILQ_REMOVE_HEAD(&tmp_head, entry); @@ -170,11 +176,13 @@ linux_rcu_cleaner_func(void *context __unused, int pen } void -linux_rcu_read_lock(void) +linux_rcu_read_lock(unsigned type) { struct linux_epoch_record *record; struct task_struct *ts; + MPASS(type < RCU_TYPE_MAX); + if (RCU_SKIP()) return; @@ -184,7 +192,7 @@ linux_rcu_read_lock(void) */ sched_pin(); - record = &DPCPU_GET(linux_epoch_record); + record = &DPCPU_GET(linux_epoch_record[type]); ts = current; /* @@ -200,15 +208,17 @@ linux_rcu_read_lock(void) } void -linux_rcu_read_unlock(void) +linux_rcu_read_unlock(unsigned type) { struct linux_epoch_record *record; struct task_struct *ts; + MPASS(type < RCU_TYPE_MAX); + if (RCU_SKIP()) return; - record = &DPCPU_GET(linux_epoch_record); + record = &DPCPU_GET(linux_epoch_record[type]); ts = current; /* @@ -282,7 +292,7 @@ linux_synchronize_rcu_cb(ck_epoch_t *epoch __unused, c } void -linux_synchronize_rcu(void) +linux_synchronize_rcu(unsigned type) { struct thread *td; int was_bound; @@ -290,6 +300,8 @@ linux_synchronize_rcu(void) int old_pinned; u_char old_prio; + MPASS(type < RCU_TYPE_MAX); + if (RCU_SKIP()) return; @@ -313,7 +325,7 @@ linux_synchronize_rcu(void) td->td_pinned = 0; sched_bind(td, old_cpu); - ck_epoch_synchronize_wait(&linux_epoch, + ck_epoch_synchronize_wait(&linux_epoch[type], &linux_synchronize_rcu_cb, NULL); /* restore CPU binding, if any */ @@ -336,24 +348,31 @@ linux_synchronize_rcu(void) } void -linux_rcu_barrier(void) +linux_rcu_barrier(unsigned type) { struct linux_epoch_head *head; - linux_synchronize_rcu(); + MPASS(type < RCU_TYPE_MAX); - head = &linux_epoch_head; + linux_synchronize_rcu(type); + head = &linux_epoch_head[type]; + /* wait for callbacks to complete */ taskqueue_drain(taskqueue_fast, &head->task); } void -linux_call_rcu(struct rcu_head *context, rcu_callback_t func) +linux_call_rcu(unsigned type, struct rcu_head *context, rcu_callback_t func) { - struct callback_head *rcu = (struct callback_head *)context; - struct linux_epoch_head *head = &linux_epoch_head; + struct callback_head *rcu; + struct linux_epoch_head *head; + MPASS(type < RCU_TYPE_MAX); + + rcu = (struct callback_head *)context; + head = &linux_epoch_head[type]; + mtx_lock(&head->lock); rcu->func = func; STAILQ_INSERT_TAIL(&head->cb_head, rcu, entry); @@ -375,24 +394,24 @@ cleanup_srcu_struct(struct srcu_struct *srcu) int srcu_read_lock(struct srcu_struct *srcu) { - linux_rcu_read_lock(); + linux_rcu_read_lock(RCU_TYPE_SLEEPABLE); return (0); } void srcu_read_unlock(struct srcu_struct *srcu, int key __unused) { - linux_rcu_read_unlock(); + linux_rcu_read_unlock(RCU_TYPE_SLEEPABLE); } void synchronize_srcu(struct srcu_struct *srcu) { - linux_synchronize_rcu(); + linux_synchronize_rcu(RCU_TYPE_SLEEPABLE); } void srcu_barrier(struct srcu_struct *srcu) { - linux_rcu_barrier(); + linux_rcu_barrier(RCU_TYPE_SLEEPABLE); } Modified: stable/12/sys/sys/param.h ============================================================================== --- stable/12/sys/sys/param.h Wed Apr 15 04:52:59 2020 (r359956) +++ stable/12/sys/sys/param.h Wed Apr 15 04:56:27 2020 (r359957) @@ -60,7 +60,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 1201512 /* Master, propagated to newvers */ +#define __FreeBSD_version 1201513 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, From owner-svn-src-stable@freebsd.org Wed Apr 15 05:02:50 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8A2962AB00B; Wed, 15 Apr 2020 05:02:50 +0000 (UTC) (envelope-from hselasky@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4929GL3687z4Gh7; Wed, 15 Apr 2020 05:02:50 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 65D4D19A0A; Wed, 15 Apr 2020 05:02:50 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03F52oSQ021692; Wed, 15 Apr 2020 05:02:50 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03F52nAF021690; Wed, 15 Apr 2020 05:02:49 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <202004150502.03F52nAF021690@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Wed, 15 Apr 2020 05:02:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359958 - in stable/11/sys: compat/linuxkpi/common/include/linux compat/linuxkpi/common/src sys X-SVN-Group: stable-11 X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: in stable/11/sys: compat/linuxkpi/common/include/linux compat/linuxkpi/common/src sys X-SVN-Commit-Revision: 359958 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Apr 2020 05:02:50 -0000 Author: hselasky Date: Wed Apr 15 05:02:49 2020 New Revision: 359958 URL: https://svnweb.freebsd.org/changeset/base/359958 Log: MFC r359727: Clone the RCU interface into a sleepable and a non-sleepable part in the LinuxKPI. This allows synchronize RCU to be used inside a SRCU read section. No functional change intended. Bump the __FreeBSD_version to force recompilation of external kernel modules. PR: 242272 Sponsored by: Mellanox Technologies Modified: stable/11/sys/compat/linuxkpi/common/include/linux/rcupdate.h stable/11/sys/compat/linuxkpi/common/src/linux_rcu.c stable/11/sys/sys/param.h Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/compat/linuxkpi/common/include/linux/rcupdate.h ============================================================================== --- stable/11/sys/compat/linuxkpi/common/include/linux/rcupdate.h Wed Apr 15 04:56:27 2020 (r359957) +++ stable/11/sys/compat/linuxkpi/common/include/linux/rcupdate.h Wed Apr 15 05:02:49 2020 (r359958) @@ -35,6 +35,11 @@ #define LINUX_KFREE_RCU_OFFSET_MAX 4096 /* exclusive */ +/* BSD specific defines */ +#define RCU_TYPE_REGULAR 0 +#define RCU_TYPE_SLEEPABLE 1 +#define RCU_TYPE_MAX 2 + #define RCU_INITIALIZER(v) \ ((__typeof(*(v)) *)(v)) @@ -43,27 +48,27 @@ } while (0) #define call_rcu(ptr, func) do { \ - linux_call_rcu(ptr, func); \ + linux_call_rcu(RCU_TYPE_REGULAR, ptr, func); \ } while (0) #define rcu_barrier(void) do { \ - linux_rcu_barrier(); \ + linux_rcu_barrier(RCU_TYPE_REGULAR); \ } while (0) #define rcu_read_lock(void) do { \ - linux_rcu_read_lock(); \ + linux_rcu_read_lock(RCU_TYPE_REGULAR); \ } while (0) #define rcu_read_unlock(void) do { \ - linux_rcu_read_unlock(); \ + linux_rcu_read_unlock(RCU_TYPE_REGULAR);\ } while (0) #define synchronize_rcu(void) do { \ - linux_synchronize_rcu(); \ + linux_synchronize_rcu(RCU_TYPE_REGULAR); \ } while (0) #define synchronize_rcu_expedited(void) do { \ - linux_synchronize_rcu(); \ + linux_synchronize_rcu(RCU_TYPE_REGULAR); \ } while (0) #define kfree_rcu(ptr, rcu_head) do { \ @@ -94,11 +99,11 @@ /* prototypes */ -extern void linux_call_rcu(struct rcu_head *ptr, rcu_callback_t func); -extern void linux_rcu_barrier(void); -extern void linux_rcu_read_lock(void); -extern void linux_rcu_read_unlock(void); -extern void linux_synchronize_rcu(void); +extern void linux_call_rcu(unsigned type, struct rcu_head *ptr, rcu_callback_t func); +extern void linux_rcu_barrier(unsigned type); +extern void linux_rcu_read_lock(unsigned type); +extern void linux_rcu_read_unlock(unsigned type); +extern void linux_synchronize_rcu(unsigned type); /* Empty implementation for !DEBUG */ #define init_rcu_head(...) Modified: stable/11/sys/compat/linuxkpi/common/src/linux_rcu.c ============================================================================== --- stable/11/sys/compat/linuxkpi/common/src/linux_rcu.c Wed Apr 15 04:56:27 2020 (r359957) +++ stable/11/sys/compat/linuxkpi/common/src/linux_rcu.c Wed Apr 15 05:02:49 2020 (r359958) @@ -1,5 +1,6 @@ /*- * Copyright (c) 2016 Matthew Macy (mmacy@mattmacy.io) + * Copyright (c) 2017-2020 Hans Petter Selasky (hselasky@freebsd.org) * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -89,9 +90,9 @@ CTASSERT(sizeof(struct rcu_head) == sizeof(struct call */ CTASSERT(offsetof(struct linux_epoch_record, epoch_record) == 0); -static ck_epoch_t linux_epoch; -static struct linux_epoch_head linux_epoch_head; -static DPCPU_DEFINE(struct linux_epoch_record, linux_epoch_record); +static ck_epoch_t linux_epoch[RCU_TYPE_MAX]; +static struct linux_epoch_head linux_epoch_head[RCU_TYPE_MAX]; +static DPCPU_DEFINE(struct linux_epoch_record, linux_epoch_record[RCU_TYPE_MAX]); static void linux_rcu_cleaner_func(void *, int); @@ -100,23 +101,27 @@ linux_rcu_runtime_init(void *arg __unused) { struct linux_epoch_head *head; int i; + int j; - ck_epoch_init(&linux_epoch); + for (j = 0; j != RCU_TYPE_MAX; j++) { + ck_epoch_init(&linux_epoch[j]); - head = &linux_epoch_head; + head = &linux_epoch_head[j]; - mtx_init(&head->lock, "LRCU-HEAD", NULL, MTX_DEF); - TASK_INIT(&head->task, 0, linux_rcu_cleaner_func, NULL); - STAILQ_INIT(&head->cb_head); + mtx_init(&head->lock, "LRCU-HEAD", NULL, MTX_DEF); + TASK_INIT(&head->task, 0, linux_rcu_cleaner_func, head); + STAILQ_INIT(&head->cb_head); - CPU_FOREACH(i) { - struct linux_epoch_record *record; + CPU_FOREACH(i) { + struct linux_epoch_record *record; - record = &DPCPU_ID_GET(i, linux_epoch_record); + record = &DPCPU_ID_GET(i, linux_epoch_record[j]); - record->cpuid = i; - ck_epoch_register(&linux_epoch, &record->epoch_record, NULL); - TAILQ_INIT(&record->ts_head); + record->cpuid = i; + ck_epoch_register(&linux_epoch[j], + &record->epoch_record, NULL); + TAILQ_INIT(&record->ts_head); + } } } SYSINIT(linux_rcu_runtime, SI_SUB_CPU, SI_ORDER_ANY, linux_rcu_runtime_init, NULL); @@ -125,24 +130,27 @@ static void linux_rcu_runtime_uninit(void *arg __unused) { struct linux_epoch_head *head; + int j; - head = &linux_epoch_head; + for (j = 0; j != RCU_TYPE_MAX; j++) { + head = &linux_epoch_head[j]; - /* destroy head lock */ - mtx_destroy(&head->lock); + mtx_destroy(&head->lock); + } } SYSUNINIT(linux_rcu_runtime, SI_SUB_LOCK, SI_ORDER_SECOND, linux_rcu_runtime_uninit, NULL); static void -linux_rcu_cleaner_func(void *context __unused, int pending __unused) +linux_rcu_cleaner_func(void *context, int pending __unused) { struct linux_epoch_head *head; struct callback_head *rcu; STAILQ_HEAD(, callback_head) tmp_head; + uintptr_t offset; linux_set_current(curthread); - head = &linux_epoch_head; + head = context; /* move current callbacks into own queue */ mtx_lock(&head->lock); @@ -151,11 +159,10 @@ linux_rcu_cleaner_func(void *context __unused, int pen mtx_unlock(&head->lock); /* synchronize */ - linux_synchronize_rcu(); + linux_synchronize_rcu(head - linux_epoch_head); /* dispatch all callbacks, if any */ while ((rcu = STAILQ_FIRST(&tmp_head)) != NULL) { - uintptr_t offset; STAILQ_REMOVE_HEAD(&tmp_head, entry); @@ -169,11 +176,13 @@ linux_rcu_cleaner_func(void *context __unused, int pen } void -linux_rcu_read_lock(void) +linux_rcu_read_lock(unsigned type) { struct linux_epoch_record *record; struct task_struct *ts; + MPASS(type < RCU_TYPE_MAX); + if (RCU_SKIP()) return; @@ -183,7 +192,7 @@ linux_rcu_read_lock(void) */ sched_pin(); - record = &DPCPU_GET(linux_epoch_record); + record = &DPCPU_GET(linux_epoch_record[type]); ts = current; /* @@ -199,15 +208,17 @@ linux_rcu_read_lock(void) } void -linux_rcu_read_unlock(void) +linux_rcu_read_unlock(unsigned type) { struct linux_epoch_record *record; struct task_struct *ts; + MPASS(type < RCU_TYPE_MAX); + if (RCU_SKIP()) return; - record = &DPCPU_GET(linux_epoch_record); + record = &DPCPU_GET(linux_epoch_record[type]); ts = current; /* @@ -281,7 +292,7 @@ linux_synchronize_rcu_cb(ck_epoch_t *epoch __unused, c } void -linux_synchronize_rcu(void) +linux_synchronize_rcu(unsigned type) { struct thread *td; int was_bound; @@ -289,6 +300,8 @@ linux_synchronize_rcu(void) int old_pinned; u_char old_prio; + MPASS(type < RCU_TYPE_MAX); + if (RCU_SKIP()) return; @@ -312,7 +325,7 @@ linux_synchronize_rcu(void) td->td_pinned = 0; sched_bind(td, old_cpu); - ck_epoch_synchronize_wait(&linux_epoch, + ck_epoch_synchronize_wait(&linux_epoch[type], &linux_synchronize_rcu_cb, NULL); /* restore CPU binding, if any */ @@ -335,24 +348,31 @@ linux_synchronize_rcu(void) } void -linux_rcu_barrier(void) +linux_rcu_barrier(unsigned type) { struct linux_epoch_head *head; - linux_synchronize_rcu(); + MPASS(type < RCU_TYPE_MAX); - head = &linux_epoch_head; + linux_synchronize_rcu(type); + head = &linux_epoch_head[type]; + /* wait for callbacks to complete */ taskqueue_drain(taskqueue_fast, &head->task); } void -linux_call_rcu(struct rcu_head *context, rcu_callback_t func) +linux_call_rcu(unsigned type, struct rcu_head *context, rcu_callback_t func) { - struct callback_head *rcu = (struct callback_head *)context; - struct linux_epoch_head *head = &linux_epoch_head; + struct callback_head *rcu; + struct linux_epoch_head *head; + MPASS(type < RCU_TYPE_MAX); + + rcu = (struct callback_head *)context; + head = &linux_epoch_head[type]; + mtx_lock(&head->lock); rcu->func = func; STAILQ_INSERT_TAIL(&head->cb_head, rcu, entry); @@ -374,24 +394,24 @@ cleanup_srcu_struct(struct srcu_struct *srcu) int srcu_read_lock(struct srcu_struct *srcu) { - linux_rcu_read_lock(); + linux_rcu_read_lock(RCU_TYPE_SLEEPABLE); return (0); } void srcu_read_unlock(struct srcu_struct *srcu, int key __unused) { - linux_rcu_read_unlock(); + linux_rcu_read_unlock(RCU_TYPE_SLEEPABLE); } void synchronize_srcu(struct srcu_struct *srcu) { - linux_synchronize_rcu(); + linux_synchronize_rcu(RCU_TYPE_SLEEPABLE); } void srcu_barrier(struct srcu_struct *srcu) { - linux_rcu_barrier(); + linux_rcu_barrier(RCU_TYPE_SLEEPABLE); } Modified: stable/11/sys/sys/param.h ============================================================================== --- stable/11/sys/sys/param.h Wed Apr 15 04:56:27 2020 (r359957) +++ stable/11/sys/sys/param.h Wed Apr 15 05:02:49 2020 (r359958) @@ -58,7 +58,7 @@ * in the range 5 to 9. */ #undef __FreeBSD_version -#define __FreeBSD_version 1103508 /* Master, propagated to newvers */ +#define __FreeBSD_version 1103509 /* Master, propagated to newvers */ /* * __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD, From owner-svn-src-stable@freebsd.org Wed Apr 15 08:11:19 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8FE932AEECC; Wed, 15 Apr 2020 08:11:19 +0000 (UTC) (envelope-from 0mp@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 492FRq3CSmz4Rx7; Wed, 15 Apr 2020 08:11:19 +0000 (UTC) (envelope-from 0mp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6975E1BD71; Wed, 15 Apr 2020 08:11:19 +0000 (UTC) (envelope-from 0mp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03F8BJlv034171; Wed, 15 Apr 2020 08:11:19 GMT (envelope-from 0mp@FreeBSD.org) Received: (from 0mp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03F8BJLt034170; Wed, 15 Apr 2020 08:11:19 GMT (envelope-from 0mp@FreeBSD.org) Message-Id: <202004150811.03F8BJLt034170@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: 0mp set sender to 0mp@FreeBSD.org using -f From: Mateusz Piotrowski <0mp@FreeBSD.org> Date: Wed, 15 Apr 2020 08:11:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359960 - stable/12/lib/geom/eli X-SVN-Group: stable-12 X-SVN-Commit-Author: 0mp X-SVN-Commit-Paths: stable/12/lib/geom/eli X-SVN-Commit-Revision: 359960 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Apr 2020 08:11:19 -0000 Author: 0mp (doc,ports committer) Date: Wed Apr 15 08:11:19 2020 New Revision: 359960 URL: https://svnweb.freebsd.org/changeset/base/359960 Log: MFC 359125: Document geli(8) loader variables conventions The geli(8) manual page has an example for preloading keyfiles during boot. There is no detail though on how the lookup of these variables actually works. Let's document that the name of a device does not have to be a part of the variable. PR: 243261 Submitted by: johannes@jo-t.de Approved by: bcr (mentor) Differential Revision: https://reviews.freebsd.org/D24114 Modified: stable/12/lib/geom/eli/geli.8 Directory Properties: stable/12/ (props changed) Modified: stable/12/lib/geom/eli/geli.8 ============================================================================== --- stable/12/lib/geom/eli/geli.8 Wed Apr 15 05:55:14 2020 (r359959) +++ stable/12/lib/geom/eli/geli.8 Wed Apr 15 08:11:19 2020 (r359960) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd May 23, 2019 +.Dd March 19, 2020 .Dt GELI 8 .Os .Sh NAME @@ -988,6 +988,35 @@ geli_da1s3a_keyfile_load="YES" geli_da1s3a_keyfile_type="da1s3a:geli_keyfile" geli_da1s3a_keyfile_name="/boot/keys/da1s3a.key" .Ed +.Pp +By convention, these loader variables are called +.Sm off +.Va geli_ No < Ar device No > Va _load . +.Sm on +However, the actual name prefix before +.Va _load , _type , +or +.Va _name +does not matter. +At boot time, the +.Nm +module searches through all +.Sm off +.No < Va prefix No > Va _type No -like +.Sm on +variables that have a value of +.Sm off +.Dq < Ar device No > :geli_keyfile . +.Sm on +The paths to keyfiles are then extracted from +.Sm off +.No < Ar prefix No > Va _name +.Sm on +variables. +In the example above, +.Ar prefix +is +.Dq Li geli_da1s3a_keyfile . .Pp Not only configure encryption, but also data integrity verification using .Nm HMAC/SHA256 . From owner-svn-src-stable@freebsd.org Wed Apr 15 13:58:43 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5C0642B7AF8; Wed, 15 Apr 2020 13:58:43 +0000 (UTC) (envelope-from mav@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 492P8g1mp6z3NcJ; Wed, 15 Apr 2020 13:58:43 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3371F1FF7B; Wed, 15 Apr 2020 13:58:43 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03FDwhbI051666; Wed, 15 Apr 2020 13:58:43 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03FDwh65051665; Wed, 15 Apr 2020 13:58:43 GMT (envelope-from mav@FreeBSD.org) Message-Id: <202004151358.03FDwh65051665@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Wed, 15 Apr 2020 13:58:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359970 - stable/12/sys/dev/ahci X-SVN-Group: stable-12 X-SVN-Commit-Author: mav X-SVN-Commit-Paths: stable/12/sys/dev/ahci X-SVN-Commit-Revision: 359970 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Apr 2020 13:58:43 -0000 Author: mav Date: Wed Apr 15 13:58:42 2020 New Revision: 359970 URL: https://svnweb.freebsd.org/changeset/base/359970 Log: MFC r359499: Add ID for JMicron JMB582/JMB585 AHCI controller. JMB582 has 2 6Gbps SATA ports and PCIe 3.0 x1. JMB585 has 5 6Gbps SATA ports and PCIe 3.0 x2. Both chips support AHCI v1.31, Port Multiplier with FBS and 8 MSI vectors. Modified: stable/12/sys/dev/ahci/ahci_pci.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/ahci/ahci_pci.c ============================================================================== --- stable/12/sys/dev/ahci/ahci_pci.c Wed Apr 15 13:35:28 2020 (r359969) +++ stable/12/sys/dev/ahci/ahci_pci.c Wed Apr 15 13:58:42 2020 (r359970) @@ -247,6 +247,7 @@ static const struct { {0x2365197b, 0x00, "JMicron JMB365", AHCI_Q_NOFORCE}, {0x2366197b, 0x00, "JMicron JMB366", AHCI_Q_NOFORCE}, {0x2368197b, 0x00, "JMicron JMB368", AHCI_Q_NOFORCE}, + {0x0585197b, 0x00, "JMicron JMB58x", 0}, {0x611111ab, 0x00, "Marvell 88SE6111", AHCI_Q_NOFORCE | AHCI_Q_NOPMP | AHCI_Q_1CH | AHCI_Q_EDGEIS}, {0x612111ab, 0x00, "Marvell 88SE6121", AHCI_Q_NOFORCE | AHCI_Q_NOPMP | @@ -399,6 +400,7 @@ ahci_probe(device_t dev) !(ahci_ids[i].quirks & AHCI_Q_NOFORCE)))) { /* Do not attach JMicrons with single PCI function. */ if (pci_get_vendor(dev) == 0x197b && + (ahci_ids[i].quirks & AHCI_Q_NOFORCE) && (pci_read_config(dev, 0xdf, 1) & 0x40) == 0) return (ENXIO); snprintf(buf, sizeof(buf), "%s AHCI SATA controller", From owner-svn-src-stable@freebsd.org Wed Apr 15 13:59:09 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id D17272B7B6F; Wed, 15 Apr 2020 13:59:09 +0000 (UTC) (envelope-from mav@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 492P995DCsz3NkH; Wed, 15 Apr 2020 13:59:09 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id AE77A1FF7C; Wed, 15 Apr 2020 13:59:09 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03FDx9Tw051744; Wed, 15 Apr 2020 13:59:09 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03FDx9kf051743; Wed, 15 Apr 2020 13:59:09 GMT (envelope-from mav@FreeBSD.org) Message-Id: <202004151359.03FDx9kf051743@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Wed, 15 Apr 2020 13:59:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r359971 - stable/11/sys/dev/ahci X-SVN-Group: stable-11 X-SVN-Commit-Author: mav X-SVN-Commit-Paths: stable/11/sys/dev/ahci X-SVN-Commit-Revision: 359971 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Apr 2020 13:59:09 -0000 Author: mav Date: Wed Apr 15 13:59:09 2020 New Revision: 359971 URL: https://svnweb.freebsd.org/changeset/base/359971 Log: MFC r359499: Add ID for JMicron JMB582/JMB585 AHCI controller. JMB582 has 2 6Gbps SATA ports and PCIe 3.0 x1. JMB585 has 5 6Gbps SATA ports and PCIe 3.0 x2. Both chips support AHCI v1.31, Port Multiplier with FBS and 8 MSI vectors. Modified: stable/11/sys/dev/ahci/ahci_pci.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/dev/ahci/ahci_pci.c ============================================================================== --- stable/11/sys/dev/ahci/ahci_pci.c Wed Apr 15 13:58:42 2020 (r359970) +++ stable/11/sys/dev/ahci/ahci_pci.c Wed Apr 15 13:59:09 2020 (r359971) @@ -247,6 +247,7 @@ static const struct { {0x2365197b, 0x00, "JMicron JMB365", AHCI_Q_NOFORCE}, {0x2366197b, 0x00, "JMicron JMB366", AHCI_Q_NOFORCE}, {0x2368197b, 0x00, "JMicron JMB368", AHCI_Q_NOFORCE}, + {0x0585197b, 0x00, "JMicron JMB58x", 0}, {0x611111ab, 0x00, "Marvell 88SE6111", AHCI_Q_NOFORCE | AHCI_Q_NOPMP | AHCI_Q_1CH | AHCI_Q_EDGEIS}, {0x612111ab, 0x00, "Marvell 88SE6121", AHCI_Q_NOFORCE | AHCI_Q_NOPMP | @@ -401,6 +402,7 @@ ahci_probe(device_t dev) !(ahci_ids[i].quirks & AHCI_Q_NOFORCE)))) { /* Do not attach JMicrons with single PCI function. */ if (pci_get_vendor(dev) == 0x197b && + (ahci_ids[i].quirks & AHCI_Q_NOFORCE) && (pci_read_config(dev, 0xdf, 1) & 0x40) == 0) return (ENXIO); snprintf(buf, sizeof(buf), "%s AHCI SATA controller", From owner-svn-src-stable@freebsd.org Wed Apr 15 13:59:52 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 86A402B7C2D; Wed, 15 Apr 2020 13:59:52 +0000 (UTC) (envelope-from mav@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 492PB02yzNz3NrR; Wed, 15 Apr 2020 13:59:52 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 612FB1FF7E; Wed, 15 Apr 2020 13:59:52 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03FDxqR3051857; Wed, 15 Apr 2020 13:59:52 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03FDxqLc051856; Wed, 15 Apr 2020 13:59:52 GMT (envelope-from mav@FreeBSD.org) Message-Id: <202004151359.03FDxqLc051856@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Wed, 15 Apr 2020 13:59:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359972 - stable/12/sys/dev/ahci X-SVN-Group: stable-12 X-SVN-Commit-Author: mav X-SVN-Commit-Paths: stable/12/sys/dev/ahci X-SVN-Commit-Revision: 359972 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Apr 2020 13:59:52 -0000 Author: mav Date: Wed Apr 15 13:59:51 2020 New Revision: 359972 URL: https://svnweb.freebsd.org/changeset/base/359972 Log: MFC r359499: Add ID for JMicron JMB582/JMB585 AHCI controller. JMB582 has 2 6Gbps SATA ports and PCIe 3.0 x1. JMB585 has 5 6Gbps SATA ports and PCIe 3.0 x2. Both chips support AHCI v1.31, Port Multiplier with FBS and 8 MSI vectors. Modified: stable/12/sys/dev/ahci/ahci.c stable/12/sys/dev/ahci/ahci.h Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/ahci/ahci.c ============================================================================== --- stable/12/sys/dev/ahci/ahci.c Wed Apr 15 13:59:09 2020 (r359971) +++ stable/12/sys/dev/ahci/ahci.c Wed Apr 15 13:59:51 2020 (r359972) @@ -141,7 +141,27 @@ int ahci_ctlr_reset(device_t dev) { struct ahci_controller *ctlr = device_get_softc(dev); + uint32_t v; int timeout; + + /* BIOS/OS Handoff */ + if ((ATA_INL(ctlr->r_mem, AHCI_VS) >= 0x00010200) && + (ATA_INL(ctlr->r_mem, AHCI_CAP2) & AHCI_CAP2_BOH) && + ((v = ATA_INL(ctlr->r_mem, AHCI_BOHC)) & AHCI_BOHC_OOS) == 0) { + + /* Request OS ownership. */ + ATA_OUTL(ctlr->r_mem, AHCI_BOHC, v | AHCI_BOHC_OOS); + + /* Wait up to 2s for BIOS ownership release. */ + for (timeout = 0; timeout < 80; timeout++) { + DELAY(25000); + v = ATA_INL(ctlr->r_mem, AHCI_BOHC); + if ((v & AHCI_BOHC_BOS) == 0) + break; + if ((v & AHCI_BOHC_BB) == 0) + break; + } + } /* Enable AHCI mode */ ATA_OUTL(ctlr->r_mem, AHCI_GHC, AHCI_GHC_AE); Modified: stable/12/sys/dev/ahci/ahci.h ============================================================================== --- stable/12/sys/dev/ahci/ahci.h Wed Apr 15 13:59:09 2020 (r359971) +++ stable/12/sys/dev/ahci/ahci.h Wed Apr 15 13:59:51 2020 (r359972) @@ -214,6 +214,13 @@ #define AHCI_CAP2_SADM 0x00000010 #define AHCI_CAP2_DESO 0x00000020 +#define AHCI_BOHC 0x28 +#define AHCI_BOHC_BOS 0x00000001 +#define AHCI_BOHC_OOS 0x00000002 +#define AHCI_BOHC_SOOE 0x00000004 +#define AHCI_BOHC_OOC 0x00000008 +#define AHCI_BOHC_BB 0x00000010 + #define AHCI_VSCAP 0xa4 #define AHCI_OFFSET 0x100 #define AHCI_STEP 0x80 From owner-svn-src-stable@freebsd.org Wed Apr 15 19:47:20 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 183A22BFDED; Wed, 15 Apr 2020 19:47:20 +0000 (UTC) (envelope-from zeising@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 492Xtv7028z4JKh; Wed, 15 Apr 2020 19:47:19 +0000 (UTC) (envelope-from zeising@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E7FB824363; Wed, 15 Apr 2020 19:47:19 +0000 (UTC) (envelope-from zeising@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03FJlJuS070536; Wed, 15 Apr 2020 19:47:19 GMT (envelope-from zeising@FreeBSD.org) Received: (from zeising@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03FJlJai070535; Wed, 15 Apr 2020 19:47:19 GMT (envelope-from zeising@FreeBSD.org) Message-Id: <202004151947.03FJlJai070535@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: zeising set sender to zeising@FreeBSD.org using -f From: Niclas Zeising Date: Wed, 15 Apr 2020 19:47:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r359985 - stable/12/sys/dev/atkbdc X-SVN-Group: stable-12 X-SVN-Commit-Author: zeising X-SVN-Commit-Paths: stable/12/sys/dev/atkbdc X-SVN-Commit-Revision: 359985 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Apr 2020 19:47:20 -0000 Author: zeising (doc,ports committer) Date: Wed Apr 15 19:47:19 2020 New Revision: 359985 URL: https://svnweb.freebsd.org/changeset/base/359985 Log: MFC r348873: Enable touch and trackpads by default Enable synaptics and elantech touchpads, as well as IBM/Lenovo TrackPoints by default, instead of having users find and toggle a loader tunable. This makes things like two finger scroll and other modern features work out of the box with X. By enabling these settings by default, we get a better desktop experience in X, since xserver and evdev can make use of the more advanced synaptics and elantech features. Approved by: imp Modified: stable/12/sys/dev/atkbdc/psm.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/atkbdc/psm.c ============================================================================== --- stable/12/sys/dev/atkbdc/psm.c Wed Apr 15 19:33:42 2020 (r359984) +++ stable/12/sys/dev/atkbdc/psm.c Wed Apr 15 19:47:19 2020 (r359985) @@ -513,9 +513,9 @@ static devclass_t psm_devclass; /* Tunables */ static int tap_enabled = -1; static int verbose = PSM_DEBUG; -static int synaptics_support = 0; -static int trackpoint_support = 0; -static int elantech_support = 0; +static int synaptics_support = 1; +static int trackpoint_support = 1; +static int elantech_support = 1; /* for backward compatibility */ #define OLD_MOUSE_GETHWINFO _IOR('M', 1, old_mousehw_t) From owner-svn-src-stable@freebsd.org Thu Apr 16 00:50:58 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 81B7A2C7693; Thu, 16 Apr 2020 00:50:58 +0000 (UTC) (envelope-from freebsd@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (br1.CN84in.dnsmgr.net [69.59.192.140]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 492gdG1bzBz4fP3; Thu, 16 Apr 2020 00:50:57 +0000 (UTC) (envelope-from freebsd@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (localhost [127.0.0.1]) by gndrsh.dnsmgr.net (8.13.3/8.13.3) with ESMTP id 03G0ot2i043316; Wed, 15 Apr 2020 17:50:55 -0700 (PDT) (envelope-from freebsd@gndrsh.dnsmgr.net) Received: (from freebsd@localhost) by gndrsh.dnsmgr.net (8.13.3/8.13.3/Submit) id 03G0otj3043315; Wed, 15 Apr 2020 17:50:55 -0700 (PDT) (envelope-from freebsd) From: "Rodney W. Grimes" Message-Id: <202004160050.03G0otj3043315@gndrsh.dnsmgr.net> Subject: Re: svn commit: r359985 - stable/12/sys/dev/atkbdc In-Reply-To: <202004151947.03FJlJai070535@repo.freebsd.org> To: Niclas Zeising Date: Wed, 15 Apr 2020 17:50:55 -0700 (PDT) CC: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Reply-To: rgrimes@freebsd.org X-Mailer: ELM [version 2.4ME+ PL121h (25)] MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 492gdG1bzBz4fP3 X-Spamd-Bar: ----- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-6.00 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-0.998,0]; REPLY(-4.00)[]; NEURAL_HAM_LONG(-1.00)[-0.999,0] X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Apr 2020 00:50:58 -0000 [ Charset UTF-8 unsupported, converting... ] > Author: zeising (doc,ports committer) > Date: Wed Apr 15 19:47:19 2020 > New Revision: 359985 > URL: https://svnweb.freebsd.org/changeset/base/359985 > > Log: > MFC r348873: Enable touch and trackpads by default > > Enable synaptics and elantech touchpads, as well as IBM/Lenovo TrackPoints > by default, instead of having users find and toggle a loader tunable. > This makes things like two finger scroll and other modern features work out > of the box with X. By enabling these settings by default, we get a better > desktop experience in X, since xserver and evdev can make use of the more > advanced synaptics and elantech features. > > Approved by: imp RELNOTES: Y? > Modified: > stable/12/sys/dev/atkbdc/psm.c > Directory Properties: > stable/12/ (props changed) > > Modified: stable/12/sys/dev/atkbdc/psm.c > ============================================================================== > --- stable/12/sys/dev/atkbdc/psm.c Wed Apr 15 19:33:42 2020 (r359984) > +++ stable/12/sys/dev/atkbdc/psm.c Wed Apr 15 19:47:19 2020 (r359985) > @@ -513,9 +513,9 @@ static devclass_t psm_devclass; > /* Tunables */ > static int tap_enabled = -1; > static int verbose = PSM_DEBUG; > -static int synaptics_support = 0; > -static int trackpoint_support = 0; > -static int elantech_support = 0; > +static int synaptics_support = 1; > +static int trackpoint_support = 1; > +static int elantech_support = 1; > > /* for backward compatibility */ > #define OLD_MOUSE_GETHWINFO _IOR('M', 1, old_mousehw_t) > -- Rod Grimes rgrimes@freebsd.org From owner-svn-src-stable@freebsd.org Thu Apr 16 01:04:45 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8179A2C7B94 for ; Thu, 16 Apr 2020 01:04:45 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-qv1-xf34.google.com (mail-qv1-xf34.google.com [IPv6:2607:f8b0:4864:20::f34]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1O1" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 492gx83Rn0z3C4T for ; Thu, 16 Apr 2020 01:04:44 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: by mail-qv1-xf34.google.com with SMTP id da9so1254609qvb.3 for ; Wed, 15 Apr 2020 18:04:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=aPewC7hqtkZm92wZlGwqtLjPl3tSpt42XA2mq9HWjBI=; b=UJs8QD4rZvkkjqLfgS/oxzwLHOVO9IgHsQS0tDC4qQ/B79bWqz3S14xM+kJSOhobAA gDOVZ2LP/aBUfqZlCFIvgJMwBbYLWv3qZfV9z0Gbc1ntKa46LZkuS793m096qkiq+1GR R21oFwSIMqI6MQmzNmFGhNSo+kN3TL2oIsVeKIO72EVulXEfRk3HRgBNpyLaKrF/ZTDl 117aPMsh9jg6SFYy2swOtTFxMUuCZqaXmm8LOMP0hHDnyde/x2tg9iN5yLSm7uejt3Bc 5q6Y7jXsHMO5p7lb4p4SwG8BcTKJ1EIYYmnmaMR8noBpYPMEwUrnRDlGukqhTH9F9Xsf Sz3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=aPewC7hqtkZm92wZlGwqtLjPl3tSpt42XA2mq9HWjBI=; b=hBHllJ+T61tWt2JFF9N9UZpWA2kNlReKygYe+ceA2MyHP1+B6PIv8fecjEr6LuPJvi EnV77BvMAKXhqPr1xetsuHqebdjUie9TXwKAaER2ywizhl7cxMNW1V0DWyC0BVpC/MR/ bf7oz42AIqTPEKfteeQCC3OJrVT3GPwCjK5YggQoRABdyCma5eMdishqfKV00DDNzS96 qRuszaUkToSfiDsAfdYMORyac6013mRkyro5jaCibIS9dos41keY4ZELn18A5GkA9zAr ko7/n5k17vnlm9zJVNXkH1dx6oouMS5+e74rsZETSYQ7Jj3gFZdoMH+RAnSt8f9xIE7s uACA== X-Gm-Message-State: AGi0PuYwsZbEReBz0f0JCbpRlK/LJRxo2OMBV1/cldR9l3lIDEChXUKY toBauKP/wstGzvILYr9eRJFFenlc4V/0zrUCwc/Hiw== X-Google-Smtp-Source: APiQypLKaogm0mQSXwtYRC0GOhb0T9fWDn/r3847ihboYtnnNW6f8CG66dUkDxThWNOXcy0/tjUS0zZKAHr7J/8MB/A= X-Received: by 2002:a0c:f8cf:: with SMTP id h15mr7470877qvo.22.1586999083253; Wed, 15 Apr 2020 18:04:43 -0700 (PDT) MIME-Version: 1.0 References: <202004151947.03FJlJai070535@repo.freebsd.org> <202004160050.03G0otj3043315@gndrsh.dnsmgr.net> In-Reply-To: <202004160050.03G0otj3043315@gndrsh.dnsmgr.net> From: Warner Losh Date: Wed, 15 Apr 2020 19:04:30 -0600 Message-ID: Subject: Re: svn commit: r359985 - stable/12/sys/dev/atkbdc To: "Rodney W. Grimes" Cc: Niclas Zeising , src-committers , svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org X-Rspamd-Queue-Id: 492gx83Rn0z3C4T X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org; dkim=pass header.d=bsdimp-com.20150623.gappssmtp.com header.s=20150623 header.b=UJs8QD4r; dmarc=none; spf=none (mx1.freebsd.org: domain of wlosh@bsdimp.com has no SPF policy when checking 2607:f8b0:4864:20::f34) smtp.mailfrom=wlosh@bsdimp.com X-Spamd-Result: default: False [-2.53 / 15.00]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-0.999,0]; R_DKIM_ALLOW(-0.20)[bsdimp-com.20150623.gappssmtp.com:s=20150623]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; NEURAL_HAM_LONG(-1.00)[-0.999,0]; MIME_GOOD(-0.10)[multipart/alternative,text/plain]; PREVIOUSLY_DELIVERED(0.00)[svn-src-stable@freebsd.org]; DMARC_NA(0.00)[bsdimp.com]; URI_COUNT_ODD(1.00)[3]; RCPT_COUNT_FIVE(0.00)[6]; TO_MATCH_ENVRCPT_SOME(0.00)[]; DKIM_TRACE(0.00)[bsdimp-com.20150623.gappssmtp.com:+]; RCVD_IN_DNSWL_NONE(0.00)[4.3.f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.4.6.8.4.0.b.8.f.7.0.6.2.list.dnswl.org : 127.0.5.0]; R_SPF_NA(0.00)[]; FORGED_SENDER(0.30)[imp@bsdimp.com,wlosh@bsdimp.com]; MIME_TRACE(0.00)[0:+,1:+,2:~]; IP_SCORE(-1.54)[ip: (-6.87), ipnet: 2607:f8b0::/32(-0.33), asn: 15169(-0.43), country: US(-0.05)]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US]; FROM_NEQ_ENVFROM(0.00)[imp@bsdimp.com,wlosh@bsdimp.com]; RCVD_TLS_ALL(0.00)[]; RCVD_COUNT_TWO(0.00)[2] Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Apr 2020 01:04:45 -0000 On Wed, Apr 15, 2020, 6:51 PM Rodney W. Grimes wrote: > [ Charset UTF-8 unsupported, converting... ] > > Author: zeising (doc,ports committer) > > Date: Wed Apr 15 19:47:19 2020 > > New Revision: 359985 > > URL: https://svnweb.freebsd.org/changeset/base/359985 > > > > Log: > > MFC r348873: Enable touch and trackpads by default > > > > Enable synaptics and elantech touchpads, as well as IBM/Lenovo > TrackPoints > > by default, instead of having users find and toggle a loader tunable. > > This makes things like two finger scroll and other modern features > work out > > of the box with X. By enabling these settings by default, we get a > better > > desktop experience in X, since xserver and evdev can make use of the > more > > advanced synaptics and elantech features. > > > > Approved by: imp > > RELNOTES: Y? > Yea. This is a release notes item. Warner > > > Modified: > > stable/12/sys/dev/atkbdc/psm.c > > Directory Properties: > > stable/12/ (props changed) > > > > Modified: stable/12/sys/dev/atkbdc/psm.c > > > ============================================================================== > > --- stable/12/sys/dev/atkbdc/psm.c Wed Apr 15 19:33:42 2020 > (r359984) > > +++ stable/12/sys/dev/atkbdc/psm.c Wed Apr 15 19:47:19 2020 > (r359985) > > @@ -513,9 +513,9 @@ static devclass_t psm_devclass; > > /* Tunables */ > > static int tap_enabled = -1; > > static int verbose = PSM_DEBUG; > > -static int synaptics_support = 0; > > -static int trackpoint_support = 0; > > -static int elantech_support = 0; > > +static int synaptics_support = 1; > > +static int trackpoint_support = 1; > > +static int elantech_support = 1; > > > > /* for backward compatibility */ > > #define OLD_MOUSE_GETHWINFO _IOR('M', 1, old_mousehw_t) > > > > -- > Rod Grimes > rgrimes@freebsd.org > From owner-svn-src-stable@freebsd.org Thu Apr 16 11:47:54 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 124732BA659; Thu, 16 Apr 2020 11:47:54 +0000 (UTC) (envelope-from eugen@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 492yCF6jBCz4NdX; Thu, 16 Apr 2020 11:47:53 +0000 (UTC) (envelope-from eugen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DCDF383F7; Thu, 16 Apr 2020 11:47:53 +0000 (UTC) (envelope-from eugen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03GBlr7D074747; Thu, 16 Apr 2020 11:47:53 GMT (envelope-from eugen@FreeBSD.org) Received: (from eugen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03GBlrNP074746; Thu, 16 Apr 2020 11:47:53 GMT (envelope-from eugen@FreeBSD.org) Message-Id: <202004161147.03GBlrNP074746@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: eugen set sender to eugen@FreeBSD.org using -f From: Eugene Grosbein Date: Thu, 16 Apr 2020 11:47:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r360005 - stable/12/usr.bin/wc X-SVN-Group: stable-12 X-SVN-Commit-Author: eugen X-SVN-Commit-Paths: stable/12/usr.bin/wc X-SVN-Commit-Revision: 360005 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Apr 2020 11:47:54 -0000 Author: eugen Date: Thu Apr 16 11:47:53 2020 New Revision: 360005 URL: https://svnweb.freebsd.org/changeset/base/360005 Log: MFC r359801: wc(1): document SIGINFO handling in the manual page. Modified: stable/12/usr.bin/wc/wc.1 Directory Properties: stable/12/ (props changed) Modified: stable/12/usr.bin/wc/wc.1 ============================================================================== --- stable/12/usr.bin/wc/wc.1 Thu Apr 16 05:27:13 2020 (r360004) +++ stable/12/usr.bin/wc/wc.1 Thu Apr 16 11:47:53 2020 (r360005) @@ -31,7 +31,7 @@ .\" @(#)wc.1 8.2 (Berkeley) 4/19/94 .\" $FreeBSD$ .\" -.Dd August 2, 2018 +.Dd April 11, 2020 .Dt WC 1 .Os .Sh NAME @@ -126,6 +126,18 @@ file name is displayed. The prompt will accept input until receiving EOF, or .Bq ^D in most environments. +.Pp +If +.Nm +receives a +.Dv SIGINFO +(see the +.Cm status +argument for +.Xr stty 1 ) +signal, the interim data will be written +to the standard error output in the same format +as the standard completion message. .Sh ENVIRONMENT The .Ev LANG , LC_ALL From owner-svn-src-stable@freebsd.org Thu Apr 16 11:49:14 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 6D7B72BA6E0; Thu, 16 Apr 2020 11:49:14 +0000 (UTC) (envelope-from eugen@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 492yDp2Hg7z4Nls; Thu, 16 Apr 2020 11:49:14 +0000 (UTC) (envelope-from eugen@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 49A4083F8; Thu, 16 Apr 2020 11:49:14 +0000 (UTC) (envelope-from eugen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03GBnEK6074862; Thu, 16 Apr 2020 11:49:14 GMT (envelope-from eugen@FreeBSD.org) Received: (from eugen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03GBnEDk074861; Thu, 16 Apr 2020 11:49:14 GMT (envelope-from eugen@FreeBSD.org) Message-Id: <202004161149.03GBnEDk074861@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: eugen set sender to eugen@FreeBSD.org using -f From: Eugene Grosbein Date: Thu, 16 Apr 2020 11:49:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r360006 - stable/11/usr.bin/wc X-SVN-Group: stable-11 X-SVN-Commit-Author: eugen X-SVN-Commit-Paths: stable/11/usr.bin/wc X-SVN-Commit-Revision: 360006 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 16 Apr 2020 11:49:14 -0000 Author: eugen Date: Thu Apr 16 11:49:13 2020 New Revision: 360006 URL: https://svnweb.freebsd.org/changeset/base/360006 Log: MFC r359801: wc(1): document SIGINFO handling in the manual page. Modified: stable/11/usr.bin/wc/wc.1 Directory Properties: stable/11/ (props changed) Modified: stable/11/usr.bin/wc/wc.1 ============================================================================== --- stable/11/usr.bin/wc/wc.1 Thu Apr 16 11:47:53 2020 (r360005) +++ stable/11/usr.bin/wc/wc.1 Thu Apr 16 11:49:13 2020 (r360006) @@ -31,7 +31,7 @@ .\" @(#)wc.1 8.2 (Berkeley) 4/19/94 .\" $FreeBSD$ .\" -.Dd December 1, 2015 +.Dd April 11, 2020 .Dt WC 1 .Os .Sh NAME @@ -123,6 +123,18 @@ file name is displayed. The prompt will accept input until receiving EOF, or .Bq ^D in most environments. +.Pp +If +.Nm +receives a +.Dv SIGINFO +(see the +.Cm status +argument for +.Xr stty 1 ) +signal, the interim data will be written +to the standard error output in the same format +as the standard completion message. .Sh ENVIRONMENT The .Ev LANG , LC_ALL From owner-svn-src-stable@freebsd.org Fri Apr 17 01:06:52 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8660F2CCC4D; Fri, 17 Apr 2020 01:06:52 +0000 (UTC) (envelope-from kib@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 493Hx830N8z4LZK; Fri, 17 Apr 2020 01:06:52 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6161F1A1B3; Fri, 17 Apr 2020 01:06:52 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03H16qHg077750; Fri, 17 Apr 2020 01:06:52 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03H16qBY077749; Fri, 17 Apr 2020 01:06:52 GMT (envelope-from kib@FreeBSD.org) Message-Id: <202004170106.03H16qBY077749@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Fri, 17 Apr 2020 01:06:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r360029 - stable/12/sys/ufs/ffs X-SVN-Group: stable-12 X-SVN-Commit-Author: kib X-SVN-Commit-Paths: stable/12/sys/ufs/ffs X-SVN-Commit-Revision: 360029 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Apr 2020 01:06:52 -0000 Author: kib Date: Fri Apr 17 01:06:51 2020 New Revision: 360029 URL: https://svnweb.freebsd.org/changeset/base/360029 Log: MFC r359766: ufs: apply suspension for non-forced rw unmounts. Modified: stable/12/sys/ufs/ffs/ffs_vfsops.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/ufs/ffs/ffs_vfsops.c ============================================================================== --- stable/12/sys/ufs/ffs/ffs_vfsops.c Thu Apr 16 23:31:39 2020 (r360028) +++ stable/12/sys/ufs/ffs/ffs_vfsops.c Fri Apr 17 01:06:51 2020 (r360029) @@ -1225,11 +1225,9 @@ ffs_unmount(mp, mntflags) flags = 0; td = curthread; fs = ump->um_fs; - susp = 0; - if (mntflags & MNT_FORCE) { + if (mntflags & MNT_FORCE) flags |= FORCECLOSE; - susp = fs->fs_ronly == 0; - } + susp = fs->fs_ronly == 0; #ifdef UFS_EXTATTR if ((error = ufs_extattr_stop(mp, td))) { if (error != EOPNOTSUPP) From owner-svn-src-stable@freebsd.org Fri Apr 17 01:52:28 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 354EE2CE01E; Fri, 17 Apr 2020 01:52:28 +0000 (UTC) (envelope-from kib@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 493Jxm0gXlz4NnZ; Fri, 17 Apr 2020 01:52:28 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1252D1AB21; Fri, 17 Apr 2020 01:52:28 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03H1qR7Y008577; Fri, 17 Apr 2020 01:52:27 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03H1qRdC008576; Fri, 17 Apr 2020 01:52:27 GMT (envelope-from kib@FreeBSD.org) Message-Id: <202004170152.03H1qRdC008576@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Fri, 17 Apr 2020 01:52:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r360030 - stable/11/sys/ufs/ffs X-SVN-Group: stable-11 X-SVN-Commit-Author: kib X-SVN-Commit-Paths: stable/11/sys/ufs/ffs X-SVN-Commit-Revision: 360030 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Apr 2020 01:52:28 -0000 Author: kib Date: Fri Apr 17 01:52:27 2020 New Revision: 360030 URL: https://svnweb.freebsd.org/changeset/base/360030 Log: MFC r359766: ufs: apply suspension for non-forced rw unmounts. Modified: stable/11/sys/ufs/ffs/ffs_vfsops.c Directory Properties: stable/11/ (props changed) Modified: stable/11/sys/ufs/ffs/ffs_vfsops.c ============================================================================== --- stable/11/sys/ufs/ffs/ffs_vfsops.c Fri Apr 17 01:06:51 2020 (r360029) +++ stable/11/sys/ufs/ffs/ffs_vfsops.c Fri Apr 17 01:52:27 2020 (r360030) @@ -1252,11 +1252,9 @@ ffs_unmount(mp, mntflags) flags = 0; td = curthread; fs = ump->um_fs; - susp = 0; - if (mntflags & MNT_FORCE) { + if (mntflags & MNT_FORCE) flags |= FORCECLOSE; - susp = fs->fs_ronly == 0; - } + susp = fs->fs_ronly == 0; #ifdef UFS_EXTATTR if ((error = ufs_extattr_stop(mp, td))) { if (error != EOPNOTSUPP) From owner-svn-src-stable@freebsd.org Fri Apr 17 07:40:56 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id AEA432AE29B; Fri, 17 Apr 2020 07:40:56 +0000 (UTC) (envelope-from 0mp@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 493Sgr4FxBz4kQc; Fri, 17 Apr 2020 07:40:56 +0000 (UTC) (envelope-from 0mp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8D7A11ED9D; Fri, 17 Apr 2020 07:40:56 +0000 (UTC) (envelope-from 0mp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03H7eurs024776; Fri, 17 Apr 2020 07:40:56 GMT (envelope-from 0mp@FreeBSD.org) Received: (from 0mp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03H7eurN024775; Fri, 17 Apr 2020 07:40:56 GMT (envelope-from 0mp@FreeBSD.org) Message-Id: <202004170740.03H7eurN024775@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: 0mp set sender to 0mp@FreeBSD.org using -f From: Mateusz Piotrowski <0mp@FreeBSD.org> Date: Fri, 17 Apr 2020 07:40:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r360038 - stable/12/sbin/umount X-SVN-Group: stable-12 X-SVN-Commit-Author: 0mp X-SVN-Commit-Paths: stable/12/sbin/umount X-SVN-Commit-Revision: 360038 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Apr 2020 07:40:56 -0000 Author: 0mp (doc,ports committer) Date: Fri Apr 17 07:40:56 2020 New Revision: 360038 URL: https://svnweb.freebsd.org/changeset/base/360038 Log: MFC 359916: Improve manual page formatting - Use appropriate macros for command arguments. - Increase option list indentation for better readability. Modified: stable/12/sbin/umount/umount.8 Directory Properties: stable/12/ (props changed) Modified: stable/12/sbin/umount/umount.8 ============================================================================== --- stable/12/sbin/umount/umount.8 Fri Apr 17 06:05:08 2020 (r360037) +++ stable/12/sbin/umount/umount.8 Fri Apr 17 07:40:56 2020 (r360038) @@ -28,7 +28,7 @@ .\" @(#)umount.8 8.2 (Berkeley) 5/8/95 .\" $FreeBSD$ .\" -.Dd July 25, 2017 +.Dd April 14, 2020 .Dt UMOUNT 8 .Os .Sh NAME @@ -52,7 +52,9 @@ utility calls the system call to remove a file system from the file system tree. The file system can be specified by its .Ar special -device or remote node (rhost:path), the path to the mount point +device or remote node +.Pq Ar rhost Ns Cm \& : Ns Ar path , +the path to the mount point .Ar node or by the file system ID .Ar fsid @@ -61,7 +63,7 @@ as reported by when run by root. .Pp The options are as follows: -.Bl -tag -width indent +.Bl -tag -width "-F fstab" .It Fl a All the file systems described in .Xr fstab 5 From owner-svn-src-stable@freebsd.org Fri Apr 17 07:41:27 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id B37212AE329; Fri, 17 Apr 2020 07:41:27 +0000 (UTC) (envelope-from 0mp@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 493ShR4Gktz4kZ1; Fri, 17 Apr 2020 07:41:27 +0000 (UTC) (envelope-from 0mp@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8DEEE1EDCB; Fri, 17 Apr 2020 07:41:27 +0000 (UTC) (envelope-from 0mp@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03H7fRg4026452; Fri, 17 Apr 2020 07:41:27 GMT (envelope-from 0mp@FreeBSD.org) Received: (from 0mp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03H7fRAv026451; Fri, 17 Apr 2020 07:41:27 GMT (envelope-from 0mp@FreeBSD.org) Message-Id: <202004170741.03H7fRAv026451@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: 0mp set sender to 0mp@FreeBSD.org using -f From: Mateusz Piotrowski <0mp@FreeBSD.org> Date: Fri, 17 Apr 2020 07:41:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r360039 - stable/11/sbin/umount X-SVN-Group: stable-11 X-SVN-Commit-Author: 0mp X-SVN-Commit-Paths: stable/11/sbin/umount X-SVN-Commit-Revision: 360039 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Apr 2020 07:41:27 -0000 Author: 0mp (doc,ports committer) Date: Fri Apr 17 07:41:27 2020 New Revision: 360039 URL: https://svnweb.freebsd.org/changeset/base/360039 Log: MFC 359916: Improve manual page formatting - Use appropriate macros for command arguments. - Increase option list indentation for better readability. Modified: stable/11/sbin/umount/umount.8 Directory Properties: stable/11/ (props changed) Modified: stable/11/sbin/umount/umount.8 ============================================================================== --- stable/11/sbin/umount/umount.8 Fri Apr 17 07:40:56 2020 (r360038) +++ stable/11/sbin/umount/umount.8 Fri Apr 17 07:41:27 2020 (r360039) @@ -28,7 +28,7 @@ .\" @(#)umount.8 8.2 (Berkeley) 5/8/95 .\" $FreeBSD$ .\" -.Dd July 25, 2017 +.Dd April 14, 2020 .Dt UMOUNT 8 .Os .Sh NAME @@ -52,7 +52,9 @@ utility calls the system call to remove a file system from the file system tree. The file system can be specified by its .Ar special -device or remote node (rhost:path), the path to the mount point +device or remote node +.Pq Ar rhost Ns Cm \& : Ns Ar path , +the path to the mount point .Ar node or by the file system ID .Ar fsid @@ -61,7 +63,7 @@ as reported by when run by root. .Pp The options are as follows: -.Bl -tag -width indent +.Bl -tag -width "-F fstab" .It Fl a All the file systems described in .Xr fstab 5 From owner-svn-src-stable@freebsd.org Fri Apr 17 13:50:27 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 6615C2BA0EC; Fri, 17 Apr 2020 13:50:27 +0000 (UTC) (envelope-from markj@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 493ctC22k9z3wYH; Fri, 17 Apr 2020 13:50:27 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 41461233C5; Fri, 17 Apr 2020 13:50:27 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03HDoRW3052678; Fri, 17 Apr 2020 13:50:27 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03HDoRgF052677; Fri, 17 Apr 2020 13:50:27 GMT (envelope-from markj@FreeBSD.org) Message-Id: <202004171350.03HDoRgF052677@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Fri, 17 Apr 2020 13:50:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r360041 - stable/12/sys/kern X-SVN-Group: stable-12 X-SVN-Commit-Author: markj X-SVN-Commit-Paths: stable/12/sys/kern X-SVN-Commit-Revision: 360041 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Apr 2020 13:50:27 -0000 Author: markj Date: Fri Apr 17 13:50:26 2020 New Revision: 360041 URL: https://svnweb.freebsd.org/changeset/base/360041 Log: MFC r359778: Properly handle disconnected sockets in uipc_ready(). Modified: stable/12/sys/kern/uipc_usrreq.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/kern/uipc_usrreq.c ============================================================================== --- stable/12/sys/kern/uipc_usrreq.c Fri Apr 17 10:12:11 2020 (r360040) +++ stable/12/sys/kern/uipc_usrreq.c Fri Apr 17 13:50:26 2020 (r360041) @@ -773,6 +773,18 @@ uipc_detach(struct socket *so) vplock = NULL; local_unp_rights = 0; + SOCK_LOCK(so); + if (!SOLISTENING(so)) { + /* + * Once the socket is removed from the global lists, + * uipc_ready() will not be able to locate its socket buffer, so + * clear the buffer now. At this point internalized rights have + * already been disposed of. + */ + sbrelease(&so->so_rcv, so); + } + SOCK_UNLOCK(so); + UNP_LINK_WLOCK(); LIST_REMOVE(unp, unp_link); unp->unp_gencnt = ++unp_gencnt; @@ -1241,19 +1253,54 @@ release: return (error); } +static bool +uipc_ready_scan(struct socket *so, struct mbuf *m, int count, int *errorp) +{ + struct mbuf *mb, *n; + struct sockbuf *sb; + + SOCK_LOCK(so); + if (SOLISTENING(so)) { + SOCK_UNLOCK(so); + return (false); + } + mb = NULL; + sb = &so->so_rcv; + SOCKBUF_LOCK(sb); + if (sb->sb_fnrdy != NULL) { + for (mb = sb->sb_mb, n = mb->m_nextpkt; mb != NULL;) { + if (mb == m) { + *errorp = sbready(sb, m, count); + break; + } + mb = mb->m_next; + if (mb == NULL) { + mb = n; + n = mb->m_nextpkt; + } + } + } + SOCKBUF_UNLOCK(sb); + SOCK_UNLOCK(so); + return (mb != NULL); +} + static int uipc_ready(struct socket *so, struct mbuf *m, int count) { struct unpcb *unp, *unp2; struct socket *so2; - int error; + int error, i; unp = sotounpcb(so); + KASSERT(so->so_type == SOCK_STREAM, + ("%s: unexpected socket type for %p", __func__, so)); + UNP_PCB_LOCK(unp); if ((unp2 = unp->unp_conn) == NULL) { UNP_PCB_UNLOCK(unp); - goto error; + goto search; } if (unp != unp2) { if (UNP_PCB_TRYLOCK(unp2) == 0) { @@ -1261,25 +1308,39 @@ uipc_ready(struct socket *so, struct mbuf *m, int coun UNP_PCB_UNLOCK(unp); UNP_PCB_LOCK(unp2); if (unp_pcb_rele(unp2)) - goto error; + goto search; } else UNP_PCB_UNLOCK(unp); } so2 = unp2->unp_socket; - SOCKBUF_LOCK(&so2->so_rcv); if ((error = sbready(&so2->so_rcv, m, count)) == 0) sorwakeup_locked(so2); else SOCKBUF_UNLOCK(&so2->so_rcv); - UNP_PCB_UNLOCK(unp2); + return (error); +search: + /* + * The receiving socket has been disconnected, but may still be valid. + * In this case, the now-ready mbufs are still present in its socket + * buffer, so perform an exhaustive search before giving up and freeing + * the mbufs. + */ + UNP_LINK_RLOCK(); + LIST_FOREACH(unp, &unp_shead, unp_link) { + if (uipc_ready_scan(unp->unp_socket, m, count, &error)) + break; + } + UNP_LINK_RUNLOCK(); + + if (unp == NULL) { + for (i = 0; i < count; i++) + m = m_free(m); + error = ECONNRESET; + } return (error); - error: - for (int i = 0; i < count; i++) - m = m_free(m); - return (ECONNRESET); } static int From owner-svn-src-stable@freebsd.org Sat Apr 18 03:14:17 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8229E2B71F4; Sat, 18 Apr 2020 03:14:17 +0000 (UTC) (envelope-from kib@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) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 493yjj2xDbz4KR5; Sat, 18 Apr 2020 03:14:17 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5F88C57BE; Sat, 18 Apr 2020 03:14:17 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 03I3EHKd065138; Sat, 18 Apr 2020 03:14:17 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 03I3EGLS065134; Sat, 18 Apr 2020 03:14:16 GMT (envelope-from kib@FreeBSD.org) Message-Id: <202004180314.03I3EGLS065134@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Sat, 18 Apr 2020 03:14:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r360067 - stable/12/libexec/rtld-elf X-SVN-Group: stable-12 X-SVN-Commit-Author: kib X-SVN-Commit-Paths: stable/12/libexec/rtld-elf X-SVN-Commit-Revision: 360067 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Apr 2020 03:14:17 -0000 Author: kib Date: Sat Apr 18 03:14:16 2020 New Revision: 360067 URL: https://svnweb.freebsd.org/changeset/base/360067 Log: MFC r359634: Make p_vaddr % p_align == p_offset % p_align for (some) TLS segments. Modified: stable/12/libexec/rtld-elf/map_object.c stable/12/libexec/rtld-elf/rtld.c stable/12/libexec/rtld-elf/rtld.h stable/12/libexec/rtld-elf/xmalloc.c Directory Properties: stable/12/ (props changed) Modified: stable/12/libexec/rtld-elf/map_object.c ============================================================================== --- stable/12/libexec/rtld-elf/map_object.c Sat Apr 18 03:09:25 2020 (r360066) +++ stable/12/libexec/rtld-elf/map_object.c Sat Apr 18 03:14:16 2020 (r360067) @@ -308,6 +308,7 @@ map_object(int fd, const char *path, const struct stat obj->tlsindex = ++tls_max_index; obj->tlssize = phtls->p_memsz; obj->tlsalign = phtls->p_align; + obj->tlspoffset = phtls->p_offset; obj->tlsinitsize = phtls->p_filesz; obj->tlsinit = mapbase + phtls->p_vaddr; } Modified: stable/12/libexec/rtld-elf/rtld.c ============================================================================== --- stable/12/libexec/rtld-elf/rtld.c Sat Apr 18 03:09:25 2020 (r360066) +++ stable/12/libexec/rtld-elf/rtld.c Sat Apr 18 03:14:16 2020 (r360067) @@ -1454,6 +1454,7 @@ digest_phdr(const Elf_Phdr *phdr, int phnum, caddr_t e obj->tlsalign = ph->p_align; obj->tlsinitsize = ph->p_filesz; obj->tlsinit = (void*)(ph->p_vaddr + obj->relocbase); + obj->tlspoffset = ph->p_offset; break; case PT_GNU_STACK: @@ -4821,7 +4822,7 @@ allocate_tls(Obj_Entry *objs, void *oldtcb, size_t tcb Elf_Addr addr; Elf_Addr i; size_t extra_size, maxalign, post_size, pre_size, tls_block_size; - size_t tls_init_align; + size_t tls_init_align, tls_init_offset; if (oldtcb != NULL && tcbsize == TLS_TCB_SIZE) return (oldtcb); @@ -4838,7 +4839,7 @@ allocate_tls(Obj_Entry *objs, void *oldtcb, size_t tcb tls_block_size += pre_size + tls_static_space - TLS_TCB_SIZE - post_size; /* Allocate whole TLS block */ - tls_block = malloc_aligned(tls_block_size, maxalign); + tls_block = malloc_aligned(tls_block_size, maxalign, 0); tcb = (Elf_Addr **)(tls_block + pre_size + extra_size); if (oldtcb != NULL) { @@ -4862,15 +4863,21 @@ allocate_tls(Obj_Entry *objs, void *oldtcb, size_t tcb for (obj = globallist_curr(objs); obj != NULL; obj = globallist_next(obj)) { - if (obj->tlsoffset > 0) { - addr = (Elf_Addr)tcb + obj->tlsoffset; - if (obj->tlsinitsize > 0) - memcpy((void*) addr, obj->tlsinit, obj->tlsinitsize); - if (obj->tlssize > obj->tlsinitsize) - memset((void*)(addr + obj->tlsinitsize), 0, - obj->tlssize - obj->tlsinitsize); - dtv[obj->tlsindex + 1] = addr; + if (obj->tlsoffset == 0) + continue; + tls_init_offset = obj->tlspoffset & (obj->tlsalign - 1); + addr = (Elf_Addr)tcb + obj->tlsoffset; + if (tls_init_offset > 0) + memset((void *)addr, 0, tls_init_offset); + if (obj->tlsinitsize > 0) { + memcpy((void *)(addr + tls_init_offset), obj->tlsinit, + obj->tlsinitsize); } + if (obj->tlssize > obj->tlsinitsize) { + memset((void *)(addr + tls_init_offset + obj->tlsinitsize), + 0, obj->tlssize - obj->tlsinitsize - tls_init_offset); + } + dtv[obj->tlsindex + 1] = addr; } } @@ -4928,7 +4935,7 @@ allocate_tls(Obj_Entry *objs, void *oldtls, size_t tcb size = round(tls_static_space, ralign) + round(tcbsize, ralign); assert(tcbsize >= 2*sizeof(Elf_Addr)); - tls = malloc_aligned(size, ralign); + tls = malloc_aligned(size, ralign, 0 /* XXX */); dtv = xcalloc(tls_max_index + 2, sizeof(Elf_Addr)); segbase = (Elf_Addr)(tls + round(tls_static_space, ralign)); @@ -5021,25 +5028,24 @@ free_tls(void *tls, size_t tcbsize __unused, size_t t void * allocate_module_tls(int index) { - Obj_Entry* obj; - char* p; + Obj_Entry *obj; + char *p; - TAILQ_FOREACH(obj, &obj_list, next) { - if (obj->marker) - continue; - if (obj->tlsindex == index) - break; - } - if (!obj) { - _rtld_error("Can't find module with TLS index %d", index); - rtld_die(); - } + TAILQ_FOREACH(obj, &obj_list, next) { + if (obj->marker) + continue; + if (obj->tlsindex == index) + break; + } + if (obj == NULL) { + _rtld_error("Can't find module with TLS index %d", index); + rtld_die(); + } - p = malloc_aligned(obj->tlssize, obj->tlsalign); - memcpy(p, obj->tlsinit, obj->tlsinitsize); - memset(p + obj->tlsinitsize, 0, obj->tlssize - obj->tlsinitsize); - - return p; + p = malloc_aligned(obj->tlssize, obj->tlsalign, obj->tlspoffset); + memcpy(p, obj->tlsinit, obj->tlsinitsize); + memset(p + obj->tlsinitsize, 0, obj->tlssize - obj->tlsinitsize); + return (p); } bool Modified: stable/12/libexec/rtld-elf/rtld.h ============================================================================== --- stable/12/libexec/rtld-elf/rtld.h Sat Apr 18 03:09:25 2020 (r360066) +++ stable/12/libexec/rtld-elf/rtld.h Sat Apr 18 03:14:16 2020 (r360067) @@ -168,6 +168,7 @@ typedef struct Struct_Obj_Entry { size_t tlssize; /* Size of TLS block for this module */ size_t tlsoffset; /* Offset of static TLS block for this module */ size_t tlsalign; /* Alignment of static TLS block */ + size_t tlspoffset; /* p_offset of the static TLS block */ caddr_t relro_page; size_t relro_size; @@ -362,7 +363,7 @@ Obj_Entry *map_object(int, const char *, const struct void *xcalloc(size_t, size_t); void *xmalloc(size_t); char *xstrdup(const char *); -void *malloc_aligned(size_t size, size_t align); +void *malloc_aligned(size_t size, size_t align, size_t offset); void free_aligned(void *ptr); extern Elf_Addr _GLOBAL_OFFSET_TABLE_[]; extern Elf_Sym sym_zero; /* For resolving undefined weak refs. */ Modified: stable/12/libexec/rtld-elf/xmalloc.c ============================================================================== --- stable/12/libexec/rtld-elf/xmalloc.c Sat Apr 18 03:09:25 2020 (r360066) +++ stable/12/libexec/rtld-elf/xmalloc.c Sat Apr 18 03:14:16 2020 (r360067) @@ -27,6 +27,7 @@ * $FreeBSD$ */ +#include #include #include #include @@ -75,16 +76,21 @@ xstrdup(const char *str) } void * -malloc_aligned(size_t size, size_t align) +malloc_aligned(size_t size, size_t align, size_t offset) { - void *mem, *res; + char *mem, *res; + uintptr_t x; + offset &= align - 1; if (align < sizeof(void *)) align = sizeof(void *); - mem = xmalloc(size + sizeof(void *) + align - 1); - res = (void *)round((uintptr_t)mem + sizeof(void *), align); - *(void **)((uintptr_t)res - sizeof(void *)) = mem; + mem = xmalloc(size + 3 * align + offset); + x = roundup((uintptr_t)mem + sizeof(void *), align); + x += offset; + res = (void *)x; + x -= sizeof(void *); + memcpy((void *)x, &mem, sizeof(mem)); return (res); } @@ -98,6 +104,6 @@ free_aligned(void *ptr) return; x = (uintptr_t)ptr; x -= sizeof(void *); - mem = *(void **)x; + memcpy(&mem, (void *)x, sizeof(mem)); free(mem); } From owner-svn-src-stable@freebsd.org Sat Apr 18 07:47:41 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8C0C62C0479; Sat, 18 Apr 2020 07:47:41 +0000 (UTC) (envelope-from zeising@freebsd.org) Received: from mail.daemonic.se (mail.daemonic.se [176.58.89.161]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4944n92rxCz3DJw; Sat, 18 Apr 2020 07:47:41 +0000 (UTC) (envelope-from zeising@freebsd.org) Received: from cid.daemonic.se (localhost [IPv6:::1]) by mail.daemonic.se (Postfix) with ESMTP id 4944n808SSz3lbm; Sat, 18 Apr 2020 07:47:40 +0000 (UTC) X-Virus-Scanned: amavisd-new at daemonic.se Received: from mail.daemonic.se ([127.0.0.1]) (using TLS with cipher ECDHE-RSA-AES128-GCM-SHA256) by cid.daemonic.se (mailscanner.daemonic.se [127.0.0.1]) (amavisd-new, port 10587) with ESMTPS id uGy6yxD9d5g1; Sat, 18 Apr 2020 07:45:21 +0000 (UTC) Received: from garnet.daemonic.se (unknown [IPv6:2001:470:dca9:201:21b9:f28e:5614:8414]) by mail.daemonic.se (Postfix) with ESMTPSA id 4944kT1Z7tz3mC0; Sat, 18 Apr 2020 07:45:21 +0000 (UTC) Subject: Re: svn commit: r359985 - stable/12/sys/dev/atkbdc To: Warner Losh , "Rodney W. Grimes" Cc: src-committers , svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org References: <202004151947.03FJlJai070535@repo.freebsd.org> <202004160050.03G0otj3043315@gndrsh.dnsmgr.net> From: Niclas Zeising Message-ID: <438e8a55-fbb9-5998-f335-cd99e1ae3e5a@freebsd.org> Date: Sat, 18 Apr 2020 09:45:20 +0200 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 4944n92rxCz3DJw X-Spamd-Bar: - Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-1.91 / 15.00]; local_wl_from(0.00)[freebsd.org]; NEURAL_HAM_MEDIUM(-0.95)[-0.948,0]; NEURAL_HAM_LONG(-0.96)[-0.964,0]; ASN(0.00)[asn:36236, ipnet:176.58.89.0/24, country:US] X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Apr 2020 07:47:41 -0000 On 2020-04-16 03:04, Warner Losh wrote: >=20 >=20 > On Wed, Apr 15, 2020, 6:51 PM Rodney W. Grimes=20 > > wrote: >=20 > [ Charset UTF-8 unsupported, converting... ] > > Author: zeising (doc,ports committer) > > Date: Wed Apr 15 19:47:19 2020 > > New Revision: 359985 > > URL: https://svnweb.freebsd.org/changeset/base/359985 > > > > Log: > >=C2=A0 =C2=A0MFC r348873: Enable touch and trackpads by default > > > >=C2=A0 =C2=A0Enable synaptics and elantech touchpads, as well as = IBM/Lenovo > TrackPoints > >=C2=A0 =C2=A0by default, instead of having users find and toggle = a loader > tunable. > >=C2=A0 =C2=A0This makes things like two finger scroll and other m= odern > features work out > >=C2=A0 =C2=A0of the box with X.=C2=A0 By enabling these settings = by default, we > get a better > >=C2=A0 =C2=A0desktop experience in X, since xserver and evdev can= make use > of the more > >=C2=A0 =C2=A0advanced synaptics and elantech features. > > > >=C2=A0 =C2=A0Approved by:=C2=A0 =C2=A0 =C2=A0 =C2=A0 imp >=20 > RELNOTES: Y? >=20 >=20 > Yea. This is a release notes item. >=20 Yes, this should have been marked with relnotes, my bad. How can I fix=20 this? Did we create the RELNOTES file, and if so, should I commit to=20 that one directly in 12, or first in head and then MFC? Regards --=20 Niclas Zeising From owner-svn-src-stable@freebsd.org Sat Apr 18 08:15:57 2020 Return-Path: Delivered-To: svn-src-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id DACFE2C1371; Sat, 18 Apr 2020 08:15:57 +0000 (UTC) (envelope-from freebsd@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (br1.CN84in.dnsmgr.net [69.59.192.140]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4945Pm2r9rz3H75; Sat, 18 Apr 2020 08:15:55 +0000 (UTC) (envelope-from freebsd@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (localhost [127.0.0.1]) by gndrsh.dnsmgr.net (8.13.3/8.13.3) with ESMTP id 03I8FqJ2054185; Sat, 18 Apr 2020 01:15:52 -0700 (PDT) (envelope-from freebsd@gndrsh.dnsmgr.net) Received: (from freebsd@localhost) by gndrsh.dnsmgr.net (8.13.3/8.13.3/Submit) id 03I8FqEt054184; Sat, 18 Apr 2020 01:15:52 -0700 (PDT) (envelope-from freebsd) From: "Rodney W. Grimes" Message-Id: <202004180815.03I8FqEt054184@gndrsh.dnsmgr.net> Subject: Re: svn commit: r359985 - stable/12/sys/dev/atkbdc In-Reply-To: <438e8a55-fbb9-5998-f335-cd99e1ae3e5a@freebsd.org> To: Niclas Zeising Date: Sat, 18 Apr 2020 01:15:52 -0700 (PDT) CC: Warner Losh , "Rodney W. Grimes" , src-committers , svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org, re@freebsd.org Reply-To: rgrimes@freebsd.org X-Mailer: ELM [version 2.4ME+ PL121h (25)] MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Rspamd-Queue-Id: 4945Pm2r9rz3H75 X-Spamd-Bar: ++ Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=none (mx1.freebsd.org: domain of freebsd@gndrsh.dnsmgr.net has no SPF policy when checking 69.59.192.140) smtp.mailfrom=freebsd@gndrsh.dnsmgr.net X-Spamd-Result: default: False [2.52 / 15.00]; ARC_NA(0.00)[]; HAS_REPLYTO(0.00)[rgrimes@freebsd.org]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; MIME_GOOD(-0.10)[text/plain]; RCVD_TLS_LAST(0.00)[]; DMARC_NA(0.00)[dnsmgr.net]; AUTH_NA(1.00)[]; REPLYTO_DOM_NEQ_FROM_DOM(0.00)[]; NEURAL_SPAM_MEDIUM(0.66)[0.662,0]; TO_MATCH_ENVRCPT_SOME(0.00)[]; NEURAL_SPAM_LONG(0.92)[0.921,0]; RCPT_COUNT_SEVEN(0.00)[8]; R_SPF_NA(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; ASN(0.00)[asn:13868, ipnet:69.59.192.0/19, country:US]; MID_RHS_MATCH_FROM(0.00)[]; IP_SCORE(0.03)[ip: (0.13), ipnet: 69.59.192.0/19(0.06), asn: 13868(0.03), country: US(-0.05)]; RCVD_COUNT_TWO(0.00)[2] X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Apr 2020 08:15:57 -0000 > On 2020-04-16 03:04, Warner Losh wrote: > > > > > > On Wed, Apr 15, 2020, 6:51 PM Rodney W. Grimes > > > wrote: > > > > [ Charset UTF-8 unsupported, converting... ] > > > Author: zeising (doc,ports committer) > > > Date: Wed Apr 15 19:47:19 2020 > > > New Revision: 359985 > > > URL: https://svnweb.freebsd.org/changeset/base/359985 > > > > > > Log: > > >? ?MFC r348873: Enable touch and trackpads by default > > > > > >? ?Enable synaptics and elantech touchpads, as well as IBM/Lenovo > > TrackPoints > > >? ?by default, instead of having users find and toggle a loader > > tunable. > > >? ?This makes things like two finger scroll and other modern > > features work out > > >? ?of the box with X.? By enabling these settings by default, we > > get a better > > >? ?desktop experience in X, since xserver and evdev can make use > > of the more > > >? ?advanced synaptics and elantech features. > > > > > >? ?Approved by:? ? ? ? imp > > > > RELNOTES: Y? > > > > > > Yea. This is a release notes item. > > > > Yes, this should have been marked with relnotes, my bad. How can I fix > this? Did we create the RELNOTES file, and if so, should I commit to > that one directly in 12, or first in head and then MFC? I do not know what the RE@ decision was on how to handle the RELNOTES file in stabe/X branches. CC:'ed to re@ so they can answer > Niclas Zeising -- Rod Grimes rgrimes@freebsd.org