Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F137071090
D4314.id10586.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D4314.id10586.diff
View Options
Index: sys/boot/kshim/bsd_kernel.h
===================================================================
--- sys/boot/kshim/bsd_kernel.h
+++ sys/boot/kshim/bsd_kernel.h
@@ -48,8 +48,15 @@
#define USB_BUS_EXPLORE_PROC(bus) (usb_process + 0)
#define USB_BUS_CONTROL_XFER_PROC(bus) (usb_process + 1)
#define SYSCTL_DECL(...)
+struct sysctl_req {
+ void *newptr;
+};
+#define SYSCTL_HANDLER_ARGS void *oidp, void *arg1, \
+ uint32_t arg2, struct sysctl_req *req
#define SYSCTL_NODE(name,...) struct { } name __used
#define SYSCTL_INT(...)
+#define SYSCTL_UINT(...)
+#define SYSCTL_PROC(...)
#define TUNABLE_INT(...)
#define MALLOC_DECLARE(...)
#define MALLOC_DEFINE(...)
@@ -65,6 +72,7 @@
#define MOD_UNLOAD 2
#define DEVMETHOD(what,func) { #what, (void *)&func }
#define DEVMETHOD_END {0,0}
+#define EARLY_DRIVER_MODULE(a, b, c, d, e, f, g) DRIVER_MODULE(a, b, c, d, e, f)
#define DRIVER_MODULE(name, busname, driver, devclass, evh, arg) \
static struct module_data bsd_##name##_##busname##_driver_mod = { \
evh, arg, #busname, #name, #busname "/" #name, \
@@ -202,11 +210,30 @@
typedef unsigned long bus_addr_t;
typedef unsigned long bus_size_t;
+typedef struct bus_dma_segment {
+ bus_addr_t ds_addr; /* DMA address */
+ bus_size_t ds_len; /* length of transfer */
+} bus_dma_segment_t;
+
+struct bus_dma_tag {
+ uint32_t alignment;
+ uint32_t maxsize;
+};
+
typedef void *bus_dmamap_t;
-typedef void *bus_dma_tag_t;
+typedef struct bus_dma_tag *bus_dma_tag_t;
+
+typedef enum {
+ BUS_DMA_LOCK = 0x01,
+ BUS_DMA_UNLOCK = 0x02,
+} bus_dma_lock_op_t;
typedef void *bus_space_tag_t;
typedef uint8_t *bus_space_handle_t;
+typedef int bus_dma_filter_t(void *, bus_addr_t);
+typedef void bus_dma_lock_t(void *, bus_dma_lock_op_t);
+
+typedef uint32_t bool;
/* SYSINIT API */
@@ -579,4 +606,37 @@
#define strlcpy(d,s,n) snprintf((d),(n),"%s",(s))
#endif
+/* BUS dma */
+#define BUS_SPACE_MAXADDR_24BIT 0xFFFFFF
+#define BUS_SPACE_MAXADDR_32BIT 0xFFFFFFFF
+#define BUS_SPACE_MAXADDR 0xFFFFFFFF
+#define BUS_SPACE_MAXSIZE_24BIT 0xFFFFFF
+#define BUS_SPACE_MAXSIZE_32BIT 0xFFFFFFFF
+#define BUS_SPACE_MAXSIZE 0xFFFFFFFF
+
+#define BUS_DMA_WAITOK 0x00 /* safe to sleep (pseudo-flag) */
+#define BUS_DMA_NOWAIT 0x01 /* not safe to sleep */
+#define BUS_DMA_ALLOCNOW 0x02 /* perform resource allocation now */
+#define BUS_DMA_COHERENT 0x04 /* hint: map memory in a coherent way */
+#define BUS_DMA_ZERO 0x08 /* allocate zero'ed memory */
+#define BUS_DMA_BUS1 0x10 /* placeholders for bus functions... */
+#define BUS_DMA_BUS2 0x20
+#define BUS_DMA_BUS3 0x40
+#define BUS_DMA_BUS4 0x80
+
+typedef void bus_dmamap_callback_t(void *, bus_dma_segment_t *, int, int);
+
+int
+bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment,
+ bus_size_t boundary, bus_addr_t lowaddr,
+ bus_addr_t highaddr, bus_dma_filter_t *filter,
+ void *filterarg, bus_size_t maxsize, int nsegments,
+ bus_size_t maxsegsz, int flags, bus_dma_lock_t *lockfunc,
+ void *lockfuncarg, bus_dma_tag_t *dmat);
+
+int bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
+ bus_dmamap_t *mapp);
+void bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map);
+int bus_dma_tag_destroy(bus_dma_tag_t dmat);
+
#endif /* _BSD_KERNEL_H_ */
Index: sys/boot/kshim/bsd_kernel.c
===================================================================
--- sys/boot/kshim/bsd_kernel.c
+++ sys/boot/kshim/bsd_kernel.c
@@ -47,6 +47,74 @@
}
SYSINIT(mtx_system_init, SI_SUB_LOCK, SI_ORDER_MIDDLE, mtx_system_init, NULL);
+int
+bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment,
+ bus_size_t boundary, bus_addr_t lowaddr,
+ bus_addr_t highaddr, bus_dma_filter_t *filter,
+ void *filterarg, bus_size_t maxsize, int nsegments,
+ bus_size_t maxsegsz, int flags, bus_dma_lock_t *lockfunc,
+ void *lockfuncarg, bus_dma_tag_t *dmat)
+{
+ struct bus_dma_tag *ret;
+
+ ret = malloc(sizeof(struct bus_dma_tag), XXX, XXX);
+ if (*dmat == NULL)
+ return (ENOMEM);
+ ret->alignment = alignment;
+ ret->maxsize = maxsize;
+
+ *dmat = ret;
+
+ return (0);
+}
+
+int
+bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
+ bus_dmamap_t *mapp)
+{
+ void *addr;
+
+ addr = malloc(dmat->maxsize + dmat->alignment, XXX, XXX);
+ if (addr == 0)
+ return (ENOMEM);
+
+ *mapp = addr;
+ addr = (void*)(((uint32_t)addr + dmat->alignment - 1) & dmat->alignment);
+
+ *vaddr = addr;
+ return (0);
+}
+
+int
+bus_dmamap_load(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf,
+ bus_size_t buflen, bus_dmamap_callback_t *callback,
+ void *callback_arg, int flags)
+{
+ bus_dma_segment_t segs[1];
+
+ segs[0].ds_addr = (uint32_t)buf;
+ segs[0].ds_len = dmat->maxsize;
+
+ (*callback)(callback_arg, segs, 1, 0);
+
+ return (0);
+}
+
+void
+bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map)
+{
+
+ free(map, XXX);
+}
+
+int
+bus_dma_tag_destroy(bus_dma_tag_t dmat)
+{
+
+ free(dmat, XXX);
+ return (0);
+}
+
struct resource *
bus_alloc_resource_any(device_t dev, int type, int *rid, unsigned int flags)
{
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Nov 22, 2:17 AM (18 h, 26 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25874801
Default Alt Text
D4314.id10586.diff (4 KB)
Attached To
Mode
D4314: Provide simple bus_dma stubs for USB/loader/kshim library
Attached
Detach File
Event Timeline
Log In to Comment