4 * Copyright (C) 2007 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
5 * Copyright (C) 2008 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
6 * Copyright (C) 2009 Tomas 'ZeXx86' Jedrzejek (zexx86@zexos.org)
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
30 #include <partition.h>
36 /* pcnet32 - ethernet card */
37 #include "../drivers/net/pcnet32/pcnet32_dev.h"
38 /* rtl8029 - ethernet card */
39 #include "../drivers/net/rtl8029/rtl8029_dev.h"
40 /* rtl8139 - ethernet card */
41 #include "../drivers/net/rtl8139/rtl8139_dev.h"
42 /* rtl8169 - ethernet card */
43 #include "../drivers/net/rtl8169/rtl8169_dev.h"
44 /* es1370 - sound card */
45 #include "../drivers/char/sound/es1370_dev.h"
46 /* ac97 - sound card */
47 #include "../drivers/char/sound/ac97_dev.h"
48 /* ps2 - mouse driver */
49 #include "../drivers/char/mouse/ps2_dev.h"
56 for (dev
= dev_list
.next
; dev
!= &dev_list
; dev
= dev
->next
)
57 kprintf ("%s: %s\n", dev
->devname
, dev
->desc
);
60 dev_t
*dev_find (char *devname
)
63 for (dev
= dev_list
.next
; dev
!= &dev_list
; dev
= dev
->next
) {
64 if (!strcmp (dev
->devname
, devname
))
71 dev_t
*dev_findbypartition (partition_t
*p
)
74 for (dev
= dev_list
.next
; dev
!= &dev_list
; dev
= dev
->next
) {
75 if (!strncmp (dev
->devname
, p
->name
, strlen (dev
->devname
)))
82 dev_t
*dev_register (char *devname
, char *desc
, unsigned attrib
, dev_handler_t
*handler
)
84 /* first check length of device name */
85 /*if (strlen (desc) >= DEFAULT_MAX_DESCLENGTH ||
86 strlen (devname) >= DEFAULT_MAX_DEVNLENGTH)
89 /* when noeth is active, we can't register ethernet devices */
90 if (attrib
== DEV_ATTR_NET
)
91 if (kernel_attr
& KERNEL_NOETH
)
94 /* dev name havent to exists */
95 if (dev_find (devname
))
98 unsigned l
= strlen (devname
);
104 kprintf (" %s -> init %s\n", devname
, desc
);
107 memset (&flags
, 0, sizeof (dev_flags_t
));
109 /* chance of getting device name on DEV_ACT_INIT */
110 flags
.iomem
= (void *) devname
;
113 vfs_t
*vfs
= (vfs_t
*) 0;
115 if (handler (DEV_ACT_INIT
, (char *) &flags
, sizeof (dev_flags_t
))) {
116 vfs
= vfs_list_add (devname
, VFS_FILEATTR_FILE
| VFS_FILEATTR_SYSTEM
| VFS_FILEATTR_DEVICE
, "/dev/");
123 /* alloc and init context */
124 dev_t
*dev
= (dev_t
*) kmalloc (sizeof (dev_t
));
129 memcpy (dev
->devname
, "/dev/", 5);
130 memcpy (dev
->devname
+5, devname
, l
);
131 dev
->devname
[l
+5] = '\0';
133 strcpy (dev
->desc
, desc
);
135 dev
->attrib
= attrib
;
136 dev
->handler
= handler
;
138 /* when it's block or character device, let's mmap IO memory to VFS device file */
139 if (flags
.iomem
&& flags
.iolen
) {
140 vfs_content_t content
;
141 content
.ptr
= flags
.iomem
;
142 content
.len
= flags
.iolen
;
144 vfs_mmap (dev
->devname
, l
+5, &content
);
148 dev
->next
= &dev_list
;
149 dev
->prev
= dev_list
.prev
;
150 dev
->prev
->next
= dev
;
151 dev
->next
->prev
= dev
;
156 //extern unsigned ext2_init (partition_t *p);
161 #ifdef CONFIG_DRV_RS232
162 dev_register ("com", "Serial port", DEV_ATTR_CHAR
, (dev_handler_t
*) &rs232_acthandler
);
166 #ifdef CONFIG_DRV_VGA
167 dev_register ("vga", "Graphics adapter", DEV_ATTR_CHAR
, (dev_handler_t
*) &video_acthandler
);
170 #ifdef CONFIG_DRV_FLOPPY
171 dev
= dev_register ("fd", "Floppy drive", DEV_ATTR_BLOCK
, (dev_handler_t
*) &floppy_acthandler
);
172 partition_add (dev
, fs_supported ("fat12"), 63); // small HACK
175 #ifdef CONFIG_DRV_ATA
176 dev_register ("ata", "ATA computer bus", DEV_ATTR_SPECIAL
, (dev_handler_t
*) &ata_acthandler
);
179 #ifdef CONFIG_DRV_SPEAKER
180 dev_register ("pcspk", "PC-Speaker", DEV_ATTR_CHAR
, (dev_handler_t
*) &pcspk_acthandler
);
183 #ifdef CONFIG_DRV_PCI
184 dev_register ("pci", "PCI computer bus", DEV_ATTR_SPECIAL
, (dev_handler_t
*) &bus_pci_acthandler
);
187 #ifdef CONFIG_DRV_ES1370
188 dev_register ("es1370", "ES1370", DEV_ATTR_CHAR
| DEV_ATTR_SOUND
, (dev_handler_t
*) &es1370_acthandler
);
191 #ifdef CONFIG_DRV_AC97
192 dev_register ("ac97", "AC'97", DEV_ATTR_CHAR
| DEV_ATTR_SOUND
, (dev_handler_t
*) &ac97_acthandler
);
195 #ifdef CONFIG_DRV_PCNET32
196 dev_register ("pcnet32", "Ethernet card", DEV_ATTR_NET
, (dev_handler_t
*) &pcnet32_acthandler
);
199 #ifdef CONFIG_DRV_RTL8029
200 dev_register ("rtl8029", "Ethernet card", DEV_ATTR_NET
, (dev_handler_t
*) &rtl8029_acthandler
);
203 #ifdef CONFIG_DRV_RTL8139
204 dev_register ("rtl8139", "Ethernet card", DEV_ATTR_NET
, (dev_handler_t
*) &rtl8139_acthandler
);
207 #ifdef CONFIG_DRV_RTL8169
208 dev_register ("rtl8169", "Ethernet card", DEV_ATTR_NET
, (dev_handler_t
*) &rtl8169_acthandler
);
211 #ifdef CONFIG_DRV_COMMOUSE
212 dev_register ("mousecom", "Serial mouse", DEV_ATTR_CHAR
, (dev_handler_t
*) &commouse_acthandler
);
215 #ifdef CONFIG_DRV_PS2MOUSE
216 dev_register ("mouseps2", "PS/2 mouse", DEV_ATTR_CHAR
, (dev_handler_t
*) &ps2mouse_acthandler
);
221 unsigned int init_dev ()
223 dev_list
.next
= &dev_list
;
224 dev_list
.prev
= &dev_list
;
226 // set default dev values
227 dev_list
.devname
[0] = '\0';
228 dev_list
.desc
[0] = '\0';