From ae126e0e427f4a5b82ecc9c096c524d45088a430 Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Thu, 28 Mar 2024 19:51:03 -0400 Subject: kernel: pci: Add command register helpers Signed-off-by: Ian Moffett --- sys/dev/pci/pci.c | 15 +++++++++++++++ sys/include/dev/pci/pci.h | 2 ++ sys/include/dev/pci/pciregs.h | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 sys/include/dev/pci/pciregs.h (limited to 'sys') diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c index 57133bf..c4383e6 100644 --- a/sys/dev/pci/pci.c +++ b/sys/dev/pci/pci.c @@ -212,6 +212,21 @@ pci_writel(struct pci_device *dev, uint32_t offset, uint32_t val) __builtin_unreachable(); } +/* + * Set command register bits. + * + * @dev: Device whose command register to modify. + * @bits: Bits to set. + */ +void +pci_set_cmdreg(struct pci_device *dev, uint16_t bits) +{ + uint32_t tmp; + + tmp = pci_readl(dev, 0x4) | bits; + pci_writel(dev, 0x4, tmp); +} + struct pci_device * pci_get_device(struct pci_lookup lookup, uint16_t lookup_type) { diff --git a/sys/include/dev/pci/pci.h b/sys/include/dev/pci/pci.h index fbbbeab..66ecb91 100644 --- a/sys/include/dev/pci/pci.h +++ b/sys/include/dev/pci/pci.h @@ -33,6 +33,7 @@ #include #include #include +#include /* Lookup bits */ #define PCI_DEVICE_ID __BIT(0) @@ -66,6 +67,7 @@ struct pci_device { int pci_init(void); uint32_t pci_readl(struct pci_device *dev, uint32_t offset); void pci_writel(struct pci_device *dev, uint32_t offset, uint32_t val); +void pci_set_cmdreg(struct pci_device *dev, uint16_t bits); struct pci_device *pci_get_device(struct pci_lookup lookup, uint16_t lookup_type); #endif /* !_DEV_PCI_H_ */ diff --git a/sys/include/dev/pci/pciregs.h b/sys/include/dev/pci/pciregs.h new file mode 100644 index 0000000..732e88c --- /dev/null +++ b/sys/include/dev/pci/pciregs.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2023-2024 Ian Marco Moffett and the Osmora Team. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Hyra nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _PCIREGS_H_ +#define _PCIREGS_H_ + +#include + +/* PCI command register bits */ +#define PCI_IO_SPACE __BIT(0) /* Respond to I/O space accesses */ +#define PCI_MEM_SPACE __BIT(1) /* Respond to mem space accesses */ +#define PCI_BUS_MASTERING __BIT(2) /* Enable bus mastering */ + +#endif /* !_PCIREGS_H_ */ -- cgit v1.2.3