From owner-svn-src-user@freebsd.org Sun Jan 3 06:25:23 2016 Return-Path: Delivered-To: svn-src-user@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D2F6DA60581 for ; Sun, 3 Jan 2016 06:25:23 +0000 (UTC) (envelope-from ngie@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 mx1.freebsd.org (Postfix) with ESMTPS id 946E11DC5; Sun, 3 Jan 2016 06:25:23 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u036PMh2076401; Sun, 3 Jan 2016 06:25:22 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u036PMjL076396; Sun, 3 Jan 2016 06:25:22 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201601030625.u036PMjL076396@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Garrett Cooper Date: Sun, 3 Jan 2016 06:25:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r293075 - user/ngie/stable-10-libnv/sys/dev/pci X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 03 Jan 2016 06:25:23 -0000 Author: ngie Date: Sun Jan 3 06:25:22 2016 New Revision: 293075 URL: https://svnweb.freebsd.org/changeset/base/293075 Log: MFC r279443: r279443 (by rstone): Add some pcib methods to get ARI-related information Modified: user/ngie/stable-10-libnv/sys/dev/pci/pci_pci.c user/ngie/stable-10-libnv/sys/dev/pci/pcib_if.m user/ngie/stable-10-libnv/sys/dev/pci/pcib_private.h user/ngie/stable-10-libnv/sys/dev/pci/pcib_support.c user/ngie/stable-10-libnv/sys/dev/pci/pcireg.h Directory Properties: user/ngie/stable-10-libnv/ (props changed) Modified: user/ngie/stable-10-libnv/sys/dev/pci/pci_pci.c ============================================================================== --- user/ngie/stable-10-libnv/sys/dev/pci/pci_pci.c Sun Jan 3 06:12:53 2016 (r293074) +++ user/ngie/stable-10-libnv/sys/dev/pci/pci_pci.c Sun Jan 3 06:25:22 2016 (r293075) @@ -64,6 +64,9 @@ static void pcib_write_config(device_t static int pcib_ari_maxslots(device_t dev); static int pcib_ari_maxfuncs(device_t dev); static int pcib_try_enable_ari(device_t pcib, device_t dev); +static int pcib_ari_enabled(device_t pcib); +static void pcib_ari_decode_rid(device_t pcib, uint16_t rid, + int *bus, int *slot, int *func); static device_method_t pcib_methods[] = { /* Device interface */ @@ -104,6 +107,8 @@ static device_method_t pcib_methods[] = DEVMETHOD(pcib_power_for_sleep, pcib_power_for_sleep), DEVMETHOD(pcib_get_rid, pcib_ari_get_rid), DEVMETHOD(pcib_try_enable_ari, pcib_try_enable_ari), + DEVMETHOD(pcib_ari_enabled, pcib_ari_enabled), + DEVMETHOD(pcib_decode_rid, pcib_ari_decode_rid), DEVMETHOD_END }; @@ -1867,6 +1872,24 @@ pcib_ari_maxfuncs(device_t dev) return (PCI_FUNCMAX); } +static void +pcib_ari_decode_rid(device_t pcib, uint16_t rid, int *bus, int *slot, + int *func) +{ + struct pcib_softc *sc; + + sc = device_get_softc(pcib); + + *bus = PCI_RID2BUS(rid); + if (sc->flags & PCIB_ENABLE_ARI) { + *slot = PCIE_ARI_RID2SLOT(rid); + *func = PCIE_ARI_RID2FUNC(rid); + } else { + *slot = PCI_RID2SLOT(rid); + *func = PCI_RID2FUNC(rid); + } +} + /* * Since we are a child of a PCI bus, its parent must support the pcib interface. */ @@ -1998,6 +2021,16 @@ pcib_power_for_sleep(device_t pcib, devi return (PCIB_POWER_FOR_SLEEP(bus, dev, pstate)); } +static int +pcib_ari_enabled(device_t pcib) +{ + struct pcib_softc *sc; + + sc = device_get_softc(pcib); + + return ((sc->flags & PCIB_ENABLE_ARI) != 0); +} + static uint16_t pcib_ari_get_rid(device_t pcib, device_t dev) { Modified: user/ngie/stable-10-libnv/sys/dev/pci/pcib_if.m ============================================================================== --- user/ngie/stable-10-libnv/sys/dev/pci/pcib_if.m Sun Jan 3 06:12:53 2016 (r293074) +++ user/ngie/stable-10-libnv/sys/dev/pci/pcib_if.m Sun Jan 3 06:25:22 2016 (r293075) @@ -39,6 +39,13 @@ CODE { { return (PCI_INVALID_IRQ); } + + static int + pcib_null_ari_enabled(device_t pcib) + { + + return (0); + } }; # @@ -182,3 +189,21 @@ METHOD int try_enable_ari { device_t dev; }; +# +# Return non-zero if PCI ARI is enabled, or zero otherwise +# +METHOD int ari_enabled { + device_t pcib; +} DEFAULT pcib_null_ari_enabled; + +# +# Decode a PCI Routing Identifier (RID) into PCI bus/slot/function +# +METHOD void decode_rid { + device_t pcib; + uint16_t rid; + int *bus; + int *slot; + int *func; +} DEFAULT pcib_decode_rid; + Modified: user/ngie/stable-10-libnv/sys/dev/pci/pcib_private.h ============================================================================== --- user/ngie/stable-10-libnv/sys/dev/pci/pcib_private.h Sun Jan 3 06:12:53 2016 (r293074) +++ user/ngie/stable-10-libnv/sys/dev/pci/pcib_private.h Sun Jan 3 06:25:22 2016 (r293075) @@ -170,5 +170,7 @@ int pcib_alloc_msix(device_t pcib, devi int pcib_release_msix(device_t pcib, device_t dev, int irq); int pcib_map_msi(device_t pcib, device_t dev, int irq, uint64_t *addr, uint32_t *data); uint16_t pcib_get_rid(device_t pcib, device_t dev); +void pcib_decode_rid(device_t pcib, uint16_t rid, int *bus, + int *slot, int *func); #endif Modified: user/ngie/stable-10-libnv/sys/dev/pci/pcib_support.c ============================================================================== --- user/ngie/stable-10-libnv/sys/dev/pci/pcib_support.c Sun Jan 3 06:12:53 2016 (r293074) +++ user/ngie/stable-10-libnv/sys/dev/pci/pcib_support.c Sun Jan 3 06:25:22 2016 (r293075) @@ -66,3 +66,13 @@ pcib_get_rid(device_t pcib, device_t dev return (PCI_RID(bus, slot, func)); } +void +pcib_decode_rid(device_t pcib, uint16_t rid, int *bus, int *slot, + int *func) +{ + + *bus = PCI_RID2BUS(rid); + *slot = PCI_RID2SLOT(rid); + *func = PCI_RID2FUNC(rid); +} + Modified: user/ngie/stable-10-libnv/sys/dev/pci/pcireg.h ============================================================================== --- user/ngie/stable-10-libnv/sys/dev/pci/pcireg.h Sun Jan 3 06:12:53 2016 (r293074) +++ user/ngie/stable-10-libnv/sys/dev/pci/pcireg.h Sun Jan 3 06:25:22 2016 (r293075) @@ -68,6 +68,10 @@ #define PCI_RID2SLOT(rid) (((rid) >> PCI_RID_SLOT_SHIFT) & PCI_SLOTMAX) #define PCI_RID2FUNC(rid) (((rid) >> PCI_RID_FUNC_SHIFT) & PCI_FUNCMAX) +#define PCIE_ARI_RID2SLOT(rid) (0) +#define PCIE_ARI_RID2FUNC(rid) \ + (((rid) >> PCI_RID_FUNC_SHIFT) & PCIE_ARI_FUNCMAX) + #define PCIE_ARI_SLOT(func) (((func) >> PCI_RID_SLOT_SHIFT) & PCI_SLOTMAX) #define PCIE_ARI_FUNC(func) (((func) >> PCI_RID_FUNC_SHIFT) & PCI_FUNCMAX)