1 /* $NetBSD: nbcompat.c,v 1.12 2011/07/17 20:54:50 joerg Exp $ */
2
3 /* nbcompat.c
4 * Implementations of some FreeBSD functions on NetBSD to make things
5 * a bit smoother.
6 */
7
8 #include <sys/cdefs.h>
9 __KERNEL_RCSID(0, "$NetBSD: nbcompat.c,v 1.12 2011/07/17 20:54:50 joerg Exp $");
10
11 #include <sys/param.h>
12 #include <sys/systm.h>
13 #include <sys/kernel.h>
14 #include <sys/kthread.h>
15 #include <sys/proc.h>
16 #include <sys/wait.h>
17 #include <sys/unistd.h>
18 #include <sys/types.h>
19 #include <sys/errno.h>
20 #include <sys/lock.h>
21 #include <sys/bus.h>
22
23 #include "nbcompat.h"
24
25 /* note: this is also defined in ntoskrnl_var.h, but I didn't want to include
26 * the whole file here
27 */
28 #define NDIS_KSTACK_PAGES 8
29
30 struct ndis_resource{
31 bus_space_handle_t res_handle;
32 bus_space_tag_t res_tag;
33 bus_addr_t res_base;
34 bus_size_t res_size;
35 };
36
37 int
bus_release_resource(device_t dev,int type,int rid,struct ndis_resource * r)38 bus_release_resource(device_t dev, int type, int rid,
39 struct ndis_resource *r)
40 {
41 switch(type) {
42 case SYS_RES_IOPORT:
43 bus_space_unmap(r->res_tag, r->res_handle, r->res_size);
44 break;
45 case SYS_RES_MEMORY:
46 bus_space_unmap(r->res_tag, r->res_handle, r->res_size);
47 break;
48 default:
49 printf("error: bus_release_resource()");
50 }
51
52 return 0;
53 }
54
55 int
device_is_attached(device_t dev)56 device_is_attached(device_t dev)
57 {
58 /* Sure, it's attached? */
59 return TRUE;
60 }
61
62 /* I took this from sys/kern/kern_kthread.c (in the NetBSD source tree).
63 * The only difference is the kernel stack size
64 */
65
66 /*
67 * Fork a kernel thread. Any process can request this to be done.
68 * The VM space and limits, etc. will be shared with proc0.
69 */
70 int
ndis_kthread_create(void (* func)(void *),void * arg,struct proc ** newpp,void * stack,size_t stacksize,const char * name)71 ndis_kthread_create(void (*func)(void *), void *arg,
72 struct proc **newpp, void *stack, size_t stacksize, const char *name)
73 {
74 struct lwp *l;
75 int error;
76
77 error = kthread_create(PRI_NONE, 0, NULL, func, arg, &l, "%s", name);
78 if (__predict_false(error != 0))
79 return (error);
80
81 /* All done! */
82 if (newpp != NULL)
83 *newpp = l->l_proc;
84 return (0);
85 }
86