summaryrefslogtreecommitdiff
path: root/sys/include
diff options
context:
space:
mode:
Diffstat (limited to 'sys/include')
-rw-r--r--sys/include/arch/amd64/bus.h57
-rw-r--r--sys/include/dev/pci/resource.h51
2 files changed, 108 insertions, 0 deletions
diff --git a/sys/include/arch/amd64/bus.h b/sys/include/arch/amd64/bus.h
index c99d13f..00cb3ba 100644
--- a/sys/include/arch/amd64/bus.h
+++ b/sys/include/arch/amd64/bus.h
@@ -31,6 +31,10 @@
#define _MACHINE_BUS_H_
#include <sys/types.h>
+#include <sys/spinlock.h>
+#include <sys/param.h>
+
+struct bus_resource;
/*
* Hyra assumes that the bootloader uses PDE[256] for some
@@ -40,8 +44,61 @@
*/
#define MMIO_OFFSET (VM_HIGHER_HALF + 0x8000000000)
+/* Resource signature size max */
+#define RSIG_MAX 16
+
+/*
+ * Basic bus resource semantics
+ *
+ * BUS_PIO: If set, this resource uses port I/O
+ * BUS_MMIO: If set, this resource uses memory-mapped I/O
+ * BUS_WRITABLE: If unset, this resource is read-only
+ * BUS_DMA: If set, this resource is DMA-capable
+ */
+#define BUS_PIO BIT(0)
+#define BUS_MMIO BIT(1)
+#define BUS_WRITABLE BIT(2)
+#define BUS_DMA BIT(3)
+
+/*
+ * Common bus types.
+ *
+ * bus_addr_t: Physical MMIO address
+ * bus_sem_t: Resource semantics
+ */
typedef uint64_t bus_addr_t;
+typedef uint64_t bus_sem_t;
+
+struct bus_op {
+ /* Enable/disable DMA */
+ int(*enable_dma)(struct bus_resource *brp, void *arg);
+ int(*disable_dma)(struct bus_resource *brp, void *arg);
+
+ /* Set/unset flags */
+ int(*set_sem)(struct bus_resource *brp, bus_sem_t sem);
+ int(*clr_sem)(struct bus_resource *brp, bus_sem_t sem);
+
+ /* DMA buffer related operations */
+ int(*dma_alloc)(struct bus_resource *brp, void *res);
+ int(*dma_free)(struct bus_resource *brp, void *p);
+
+ /* DMA transfer related operations */
+ ssize_t(*dma_in)(struct bus_resource *brp, void *p);
+ ssize_t(*dma_out)(struct bus_resource *brp, void *p);
+};
+
+struct bus_resource {
+ char signature[RSIG_MAX]; /* e.g., "PCI\0", "ISA\0", "LPC\0", etc */
+ off_t align; /* Alignment required (0: none) */
+ bus_addr_t dma_max; /* Maximum address possible for DMA */
+ bus_addr_t dma_min; /* Minimum address possible for DMA */
+ bus_addr_t base; /* Resource base [physical] address */
+ bus_sem_t sem; /* Resource semantics */
+ struct bus_op io; /* I/O operations */
+ struct spinlock lock; /* Protects this structure */
+};
int bus_map(bus_addr_t addr, size_t size, int flags, void **vap);
+struct bus_resource *bus_establish(const char *name);
#endif /* !_MACHINE_BUS_H_ */
diff --git a/sys/include/dev/pci/resource.h b/sys/include/dev/pci/resource.h
new file mode 100644
index 0000000..b469e8f
--- /dev/null
+++ b/sys/include/dev/pci/resource.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2023-2025 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 _PCI_RESOURCE_H_
+#define _PCI_RESOURCE_H_
+
+#include <machine/bus.h>
+
+/* Enable/disable DMA (bus mastering in this case) */
+int pcir_enable_dma(struct bus_resource *brp, void *devp);
+int pcir_disable_dma(struct bus_resource *brp, void *devp);
+
+/* Set/unset bus resource semantics */
+int pcir_set_sem(struct bus_resource *brp, bus_sem_t sem);
+int pcir_clr_sem(struct bus_resource *brp, bus_sem_t sem);
+
+/* DMA buffer helpers (XXX: unused for now) */
+int pcir_dma_alloc(struct bus_resource *brp, void *res);
+int pcir_dma_free(struct bus_resource *brp, void *p);
+
+/* DMA transaction helpers (XXX: unused for now) */
+ssize_t pcir_dma_in(struct bus_resource *brp, void *p);
+ssize_t pcir_dma_out(struct bus_resource *brp, void *p);
+
+#endif /* !_PCI_RESOURCE_H_ */