/[dynamips]/trunk/dev_c7200_eth.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/dev_c7200_eth.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7 - (hide annotations)
Sat Oct 6 16:23:47 2007 UTC (16 years, 6 months ago) by dpavlin
Original Path: upstream/dynamips-0.2.7-RC1/dev_c7200_eth.c
File MIME type: text/plain
File size: 18010 byte(s)
dynamips-0.2.7-RC1

1 dpavlin 1 /*
2 dpavlin 7 * Cisco router simulation platform.
3 dpavlin 1 * Copyright (c) 2005,2006 Christophe Fillot (cf@utc.fr)
4     *
5     * Ethernet Port Adapters.
6     */
7    
8     #include <stdio.h>
9     #include <stdlib.h>
10     #include <string.h>
11     #include <stdarg.h>
12     #include <unistd.h>
13     #include <time.h>
14     #include <errno.h>
15     #include <assert.h>
16    
17     #include "utils.h"
18     #include "net.h"
19     #include "net_io.h"
20     #include "ptask.h"
21     #include "dev_am79c971.h"
22     #include "dev_dec21140.h"
23 dpavlin 7 #include "dev_i8254x.h"
24 dpavlin 1 #include "dev_c7200.h"
25    
26     /* ====================================================================== */
27 dpavlin 3 /* C7200-IO-FE EEPROM */
28 dpavlin 1 /* ====================================================================== */
29    
30     /* C7200-IO-FE: C7200 IOCard with one FastEthernet port EEPROM */
31     static const m_uint16_t eeprom_c7200_io_fe_data[16] = {
32     0x0183, 0x010E, 0xffff, 0xffff, 0x490B, 0x8C02, 0x0000, 0x0000,
33     0x5000, 0x0000, 0x9812, 0x2800, 0x00FF, 0xFFFF, 0xFFFF, 0xFFFF,
34     };
35    
36 dpavlin 3 static const struct cisco_eeprom eeprom_c7200_io_fe = {
37 dpavlin 1 "C7200-IO-FE", (m_uint16_t *)eeprom_c7200_io_fe_data,
38     sizeof(eeprom_c7200_io_fe_data)/2,
39     };
40    
41     /*
42     * dev_c7200_iocard_init()
43     *
44     * Add an IOcard into slot 0.
45     */
46     static int dev_c7200_iocard_init(c7200_t *router,char *name,u_int pa_bay)
47     {
48     struct dec21140_data *data;
49    
50     if (pa_bay != 0) {
51     fprintf(stderr,"C7200 '%s': cannot put IOCARD in PA bay %u!\n",
52     router->vm->name,pa_bay);
53     return(-1);
54     }
55    
56     /* Set the EEPROM */
57     c7200_pa_set_eeprom(router,pa_bay,&eeprom_c7200_io_fe);
58    
59     /* Create the DEC21140 chip */
60     data = dev_dec21140_init(router->vm,name,
61     router->pa_bay[pa_bay].pci_map,
62     router->npe_driver->dec21140_pci_dev,
63     C7200_NETIO_IRQ);
64     if (!data) return(-1);
65    
66     /* Store device info into the router structure */
67     return(c7200_pa_set_drvinfo(router,pa_bay,data));
68     }
69    
70     /* Remove an IOcard from slot 0 */
71     static int dev_c7200_iocard_shutdown(c7200_t *router,u_int pa_bay)
72     {
73     struct c7200_pa_bay *bay;
74    
75     if (!(bay = c7200_pa_get_info(router,pa_bay)))
76     return(-1);
77    
78     c7200_pa_unset_eeprom(router,pa_bay);
79     dev_dec21140_remove(bay->drv_info);
80     return(0);
81     }
82    
83     /* Bind a Network IO descriptor */
84     static int dev_c7200_iocard_set_nio(c7200_t *router,u_int pa_bay,u_int port_id,
85     netio_desc_t *nio)
86     {
87     struct dec21140_data *d;
88    
89     if ((port_id > 0) || !(d = c7200_pa_get_drvinfo(router,pa_bay)))
90     return(-1);
91    
92     return(dev_dec21140_set_nio(d,nio));
93     }
94    
95     /* Unbind a Network IO descriptor */
96     static int dev_c7200_iocard_unset_nio(c7200_t *router,u_int pa_bay,
97     u_int port_id)
98     {
99     struct dec21140_data *d;
100    
101     if ((port_id > 0) || !(d = c7200_pa_get_drvinfo(router,pa_bay)))
102     return(-1);
103    
104     dev_dec21140_unset_nio(d);
105     return(0);
106     }
107    
108     /*
109     * dev_c7200_pa_fe_tx_init()
110     *
111     * Add a PA-FE-TX port adapter into specified slot.
112     */
113     static int dev_c7200_pa_fe_tx_init(c7200_t *router,char *name,u_int pa_bay)
114     {
115     struct dec21140_data *data;
116    
117     /* Set the EEPROM */
118 dpavlin 3 c7200_pa_set_eeprom(router,pa_bay,cisco_eeprom_find_pa("PA-FE-TX"));
119 dpavlin 1
120     /* Create the DEC21140 chip */
121     data = dev_dec21140_init(router->vm,name,router->pa_bay[pa_bay].pci_map,0,
122     C7200_NETIO_IRQ);
123     if (!data) return(-1);
124    
125     /* Store device info into the router structure */
126     return(c7200_pa_set_drvinfo(router,pa_bay,data));
127     }
128    
129     /* Remove a PA-FE-TX from the specified slot */
130     static int dev_c7200_pa_fe_tx_shutdown(c7200_t *router,u_int pa_bay)
131     {
132     struct c7200_pa_bay *bay;
133    
134     if (!(bay = c7200_pa_get_info(router,pa_bay)))
135     return(-1);
136    
137     c7200_pa_unset_eeprom(router,pa_bay);
138     dev_dec21140_remove(bay->drv_info);
139     return(0);
140     }
141    
142     /* Bind a Network IO descriptor */
143     static int dev_c7200_pa_fe_tx_set_nio(c7200_t *router,u_int pa_bay,
144     u_int port_id,netio_desc_t *nio)
145     {
146     struct dec21140_data *d;
147    
148     if ((port_id > 0) || !(d = c7200_pa_get_drvinfo(router,pa_bay)))
149     return(-1);
150    
151     return(dev_dec21140_set_nio(d,nio));
152     }
153    
154     /* Unbind a Network IO descriptor */
155     static int dev_c7200_pa_fe_tx_unset_nio(c7200_t *router,u_int pa_bay,
156     u_int port_id)
157     {
158     struct dec21140_data *d;
159    
160     if ((port_id > 0) || !(d = c7200_pa_get_drvinfo(router,pa_bay)))
161     return(-1);
162    
163     dev_dec21140_unset_nio(d);
164     return(0);
165     }
166    
167     /* C7200-IO-FE driver */
168 dpavlin 7 struct c7200_pa_driver dev_c7200_iocard_fe_driver = {
169 dpavlin 1 "C7200-IO-FE", 1,
170     dev_c7200_iocard_init,
171     dev_c7200_iocard_shutdown,
172     dev_c7200_iocard_set_nio,
173     dev_c7200_iocard_unset_nio,
174 dpavlin 2 NULL,
175 dpavlin 1 };
176    
177     /* PA-FE-TX driver */
178     struct c7200_pa_driver dev_c7200_pa_fe_tx_driver = {
179     "PA-FE-TX", 1,
180     dev_c7200_pa_fe_tx_init,
181     dev_c7200_pa_fe_tx_shutdown,
182     dev_c7200_pa_fe_tx_set_nio,
183     dev_c7200_pa_fe_tx_unset_nio,
184 dpavlin 2 NULL,
185 dpavlin 1 };
186    
187     /* ====================================================================== */
188 dpavlin 7 /* PA based on Intel i8254x chips */
189     /* ====================================================================== */
190    
191     struct pa_i8254x_data {
192     u_int nr_port;
193     struct i8254x_data *port[2];
194     };
195    
196     /* Remove a PA-2FE-TX from the specified slot */
197     static int dev_c7200_pa_i8254x_shutdown(c7200_t *router,u_int pa_bay)
198     {
199     struct c7200_pa_bay *bay;
200     struct pa_i8254x_data *data;
201     int i;
202    
203     if (!(bay = c7200_pa_get_info(router,pa_bay)))
204     return(-1);
205    
206     data = bay->drv_info;
207    
208     /* Remove the PA EEPROM */
209     c7200_pa_unset_eeprom(router,pa_bay);
210    
211     /* Remove the AMD Am79c971 chips */
212     for(i=0;i<data->nr_port;i++)
213     dev_i8254x_remove(data->port[i]);
214    
215     free(data);
216     return(0);
217     }
218    
219     /* Bind a Network IO descriptor */
220     static int dev_c7200_pa_i8254x_set_nio(c7200_t *router,u_int pa_bay,
221     u_int port_id,netio_desc_t *nio)
222     {
223     struct pa_i8254x_data *d;
224    
225     d = c7200_pa_get_drvinfo(router,pa_bay);
226    
227     if (!d || (port_id >= d->nr_port))
228     return(-1);
229    
230     dev_i8254x_set_nio(d->port[port_id],nio);
231     return(0);
232     }
233    
234     /* Unbind a Network IO descriptor */
235     static int dev_c7200_pa_i8254x_unset_nio(c7200_t *router,u_int pa_bay,
236     u_int port_id)
237     {
238     struct pa_i8254x_data *d;
239    
240     d = c7200_pa_get_drvinfo(router,pa_bay);
241    
242     if (!d || (port_id >= d->nr_port))
243     return(-1);
244    
245     dev_i8254x_unset_nio(d->port[port_id]);
246     return(0);
247     }
248    
249     /* ====================================================================== */
250     /* PA-2FE-TX */
251     /* ====================================================================== */
252    
253     /*
254     * dev_c7200_pa_2fe_tx_init()
255     *
256     * Add a PA-2FE-TX port adapter into specified slot.
257     */
258     static int dev_c7200_pa_2fe_tx_init(c7200_t *router,char *name,u_int pa_bay)
259     {
260     struct pa_i8254x_data *data;
261     int i;
262    
263     /* Allocate the private data structure for the PA-2FE-TX */
264     if (!(data = malloc(sizeof(*data)))) {
265     fprintf(stderr,"%s (PA-2FE-TX): out of memory\n",name);
266     return(-1);
267     }
268    
269     /* 2 Ethernet ports */
270     memset(data,0,sizeof(*data));
271     data->nr_port = 2;
272    
273     /* Set the EEPROM */
274     c7200_pa_set_eeprom(router,pa_bay,cisco_eeprom_find_pa("PA-2FE-TX"));
275    
276     /* Create the Intel i8254x chips */
277     for(i=0;i<data->nr_port;i++) {
278     data->port[i] = dev_i8254x_init(router->vm,name,0,
279     router->pa_bay[pa_bay].pci_map,i,
280     C7200_NETIO_IRQ);
281     }
282    
283     /* Store device info into the router structure */
284     return(c7200_pa_set_drvinfo(router,pa_bay,data));
285     }
286    
287     /* PA-2FE-TX driver */
288     struct c7200_pa_driver dev_c7200_pa_2fe_tx_driver = {
289     "PA-2FE-TX", 0,
290     dev_c7200_pa_2fe_tx_init,
291     dev_c7200_pa_i8254x_shutdown,
292     dev_c7200_pa_i8254x_set_nio,
293     dev_c7200_pa_i8254x_unset_nio,
294     NULL,
295     };
296    
297     /* ====================================================================== */
298     /* PA-GE */
299     /* ====================================================================== */
300    
301     /*
302     * dev_c7200_pa_ge_init()
303     *
304     * Add a PA-GE port adapter into specified slot.
305     */
306     static int dev_c7200_pa_ge_init(c7200_t *router,char *name,u_int pa_bay)
307     {
308     struct pa_i8254x_data *data;
309    
310     /* Allocate the private data structure for the PA-2FE-TX */
311     if (!(data = malloc(sizeof(*data)))) {
312     fprintf(stderr,"%s (PA-GE): out of memory\n",name);
313     return(-1);
314     }
315    
316     /* 2 Ethernet ports */
317     memset(data,0,sizeof(*data));
318     data->nr_port = 1;
319    
320     /* Set the EEPROM */
321     c7200_pa_set_eeprom(router,pa_bay,cisco_eeprom_find_pa("PA-GE"));
322    
323     /* Create the Intel i8254x chip */
324     data->port[0] = dev_i8254x_init(router->vm,name,0,
325     router->pa_bay[pa_bay].pci_map,0,
326     C7200_NETIO_IRQ);
327    
328     /* Store device info into the router structure */
329     return(c7200_pa_set_drvinfo(router,pa_bay,data));
330     }
331    
332     /* PA-GE driver */
333     struct c7200_pa_driver dev_c7200_pa_ge_driver = {
334     "PA-GE", 0,
335     dev_c7200_pa_ge_init,
336     dev_c7200_pa_i8254x_shutdown,
337     dev_c7200_pa_i8254x_set_nio,
338     dev_c7200_pa_i8254x_unset_nio,
339     NULL,
340     };
341    
342     /* ====================================================================== */
343     /* C7200-IO-2FE */
344     /* ====================================================================== */
345    
346     /* C7200-IO-2FE/E: C7200 IOCard with two FastEthernet ports EEPROM */
347     static const m_uint16_t eeprom_c7200_io_2fe_data[] = {
348     0x04FF, 0x4002, 0x1541, 0x0201, 0xC046, 0x0320, 0x001B, 0xCA06,
349     0x8249, 0x138B, 0x0642, 0x4230, 0xC18B, 0x3030, 0x3030, 0x3030,
350     0x3030, 0x0000, 0x0004, 0x0002, 0x0385, 0x1C0D, 0x7F03, 0xCB8F,
351     0x4337, 0x3230, 0x302D, 0x492F, 0x4F2D, 0x3246, 0x452F, 0x4580,
352     0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
353     0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
354     0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
355     0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
356     };
357    
358     static const struct cisco_eeprom eeprom_c7200_io_2fe = {
359     "C7200-IO-2FE", (m_uint16_t *)eeprom_c7200_io_2fe_data,
360     sizeof(eeprom_c7200_io_2fe_data)/2,
361     };
362    
363     /*
364     * dev_c7200_pa_2fe_tx_init()
365     *
366     * Add a C7200-IO-2FE/E port adapter into specified slot.
367     */
368     static int dev_c7200_iocard_2fe_init(c7200_t *router,char *name,u_int pa_bay)
369     {
370     struct pa_i8254x_data *data;
371    
372     /* Allocate the private data structure for the iocard */
373     if (!(data = malloc(sizeof(*data)))) {
374     fprintf(stderr,"%s (C7200-IO-2FE): out of memory\n",name);
375     return(-1);
376     }
377    
378     /* 2 Ethernet ports */
379     memset(data,0,sizeof(*data));
380     data->nr_port = 2;
381    
382     /* Set the EEPROM */
383     c7200_pa_set_eeprom(router,pa_bay,&eeprom_c7200_io_2fe);
384    
385     /* Port Fa0/0 is on PCI Device 1 */
386     data->port[0] = dev_i8254x_init(router->vm,name,0,
387     router->pa_bay[pa_bay].pci_map,1,
388     C7200_NETIO_IRQ);
389    
390     /* Port Fa0/1 is on PCI Device 0 */
391     data->port[1] = dev_i8254x_init(router->vm,name,0,
392     router->pa_bay[pa_bay].pci_map,0,
393     C7200_NETIO_IRQ);
394    
395     /* Store device info into the router structure */
396     return(c7200_pa_set_drvinfo(router,pa_bay,data));
397     }
398    
399     /* C7200-IO-2FE driver */
400     struct c7200_pa_driver dev_c7200_iocard_2fe_driver = {
401     "C7200-IO-2FE", 0,
402     dev_c7200_iocard_2fe_init,
403     dev_c7200_pa_i8254x_shutdown,
404     dev_c7200_pa_i8254x_set_nio,
405     dev_c7200_pa_i8254x_unset_nio,
406     NULL,
407     };
408    
409     /* ====================================================================== */
410     /* C7200-IO-GE-E */
411     /* ====================================================================== */
412    
413     /*
414     * C7200-IO-GE+E: C7200 IOCard with 1 GigatEthernet ports
415     * and 1 Ethernet port EEPROM.
416     */
417     static const m_uint16_t eeprom_c7200_io_ge_e_data[] = {
418     0x04FF, 0x4002, 0x1641, 0x0201, 0xC046, 0x0320, 0x001B, 0xCA06,
419     0x8249, 0x138B, 0x0642, 0x4230, 0xC18B, 0x3030, 0x3030, 0x3030,
420     0x3030, 0x0000, 0x0004, 0x0002, 0x0385, 0x1C0D, 0x7F03, 0xCB8F,
421     0x4337, 0x3230, 0x302D, 0x492F, 0x4F2D, 0x3246, 0x452F, 0x4580,
422     0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
423     0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
424     0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
425     0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
426     };
427    
428     static const struct cisco_eeprom eeprom_c7200_io_ge_e = {
429     "C7200-IO-GE-E", (m_uint16_t *)eeprom_c7200_io_ge_e_data,
430     sizeof(eeprom_c7200_io_ge_e_data)/2,
431     };
432    
433     /*
434     * dev_c7200_pa_ge_e_tx_init()
435     *
436     * Add a C7200-I/O-GE+E port adapter into specified slot.
437     */
438     static int dev_c7200_iocard_ge_e_init(c7200_t *router,char *name,u_int pa_bay)
439     {
440     struct pa_i8254x_data *data;
441    
442     /* Allocate the private data structure for the iocard */
443     if (!(data = malloc(sizeof(*data)))) {
444     fprintf(stderr,"%s (C7200-IO-GE+E): out of memory\n",name);
445     return(-1);
446     }
447    
448     /* 2 Ethernet ports */
449     memset(data,0,sizeof(*data));
450     data->nr_port = 2;
451    
452     /* Set the EEPROM */
453     c7200_pa_set_eeprom(router,pa_bay,&eeprom_c7200_io_ge_e);
454    
455     /* Port Gi0/0 is on PCI Device 1 */
456     data->port[0] = dev_i8254x_init(router->vm,name,0,
457     router->pa_bay[pa_bay].pci_map,1,
458     C7200_NETIO_IRQ);
459    
460     /* Port e0/0 is on PCI Device 0 */
461     data->port[1] = dev_i8254x_init(router->vm,name,0,
462     router->pa_bay[pa_bay].pci_map,0,
463     C7200_NETIO_IRQ);
464    
465     /* Store device info into the router structure */
466     return(c7200_pa_set_drvinfo(router,pa_bay,data));
467     }
468    
469     /* C7200-IO-GE-E driver */
470     struct c7200_pa_driver dev_c7200_iocard_ge_e_driver = {
471     "C7200-IO-GE-E", 0,
472     dev_c7200_iocard_ge_e_init,
473     dev_c7200_pa_i8254x_shutdown,
474     dev_c7200_pa_i8254x_set_nio,
475     dev_c7200_pa_i8254x_unset_nio,
476     NULL,
477     };
478    
479     /* ====================================================================== */
480 dpavlin 1 /* PA-4E / PA-8E */
481     /* ====================================================================== */
482    
483     /* PA-4E/PA-8E data */
484     struct pa_4e8e_data {
485     u_int nr_port;
486     struct am79c971_data *port[8];
487     };
488    
489     /*
490     * dev_c7200_pa_4e_init()
491     *
492     * Add a PA-4E port adapter into specified slot.
493     */
494     static int dev_c7200_pa_4e_init(c7200_t *router,char *name,u_int pa_bay)
495     {
496     struct pa_4e8e_data *data;
497     int i;
498    
499     /* Allocate the private data structure for the PA-4E */
500     if (!(data = malloc(sizeof(*data)))) {
501     fprintf(stderr,"%s (PA-4E): out of memory\n",name);
502     return(-1);
503     }
504    
505     /* 4 Ethernet ports */
506     memset(data,0,sizeof(*data));
507     data->nr_port = 4;
508    
509     /* Set the EEPROM */
510 dpavlin 3 c7200_pa_set_eeprom(router,pa_bay,cisco_eeprom_find_pa("PA-4E"));
511 dpavlin 1
512     /* Create the AMD Am79c971 chips */
513     for(i=0;i<data->nr_port;i++) {
514     data->port[i] = dev_am79c971_init(router->vm,name,AM79C971_TYPE_10BASE_T,
515     router->pa_bay[pa_bay].pci_map,i,
516     C7200_NETIO_IRQ);
517     }
518    
519     /* Store device info into the router structure */
520     return(c7200_pa_set_drvinfo(router,pa_bay,data));
521     }
522    
523     /*
524     * dev_c7200_pa_8e_init()
525     *
526     * Add a PA-8E port adapter into specified slot.
527     */
528     static int dev_c7200_pa_8e_init(c7200_t *router,char *name,u_int pa_bay)
529     {
530     struct pa_4e8e_data *data;
531     int i;
532    
533     /* Allocate the private data structure for the PA-8E */
534     if (!(data = malloc(sizeof(*data)))) {
535     fprintf(stderr,"%s (PA-8E): out of memory\n",name);
536     return(-1);
537     }
538    
539     /* 4 Ethernet ports */
540     memset(data,0,sizeof(*data));
541     data->nr_port = 8;
542    
543     /* Set the EEPROM */
544 dpavlin 3 c7200_pa_set_eeprom(router,pa_bay,cisco_eeprom_find_pa("PA-8E"));
545 dpavlin 1
546     /* Create the AMD Am79c971 chips */
547     for(i=0;i<data->nr_port;i++) {
548     data->port[i] = dev_am79c971_init(router->vm,name,AM79C971_TYPE_10BASE_T,
549     router->pa_bay[pa_bay].pci_map,i,
550     C7200_NETIO_IRQ);
551     }
552    
553     /* Store device info into the router structure */
554     return(c7200_pa_set_drvinfo(router,pa_bay,data));
555     }
556    
557     /* Remove a PA-4E/PA-8E from the specified slot */
558     static int dev_c7200_pa_4e8e_shutdown(c7200_t *router,u_int pa_bay)
559     {
560     struct c7200_pa_bay *bay;
561     struct pa_4e8e_data *data;
562     int i;
563    
564     if (!(bay = c7200_pa_get_info(router,pa_bay)))
565     return(-1);
566    
567     data = bay->drv_info;
568    
569     /* Remove the PA EEPROM */
570     c7200_pa_unset_eeprom(router,pa_bay);
571    
572     /* Remove the AMD Am79c971 chips */
573     for(i=0;i<data->nr_port;i++)
574     dev_am79c971_remove(data->port[i]);
575    
576     free(data);
577     return(0);
578     }
579    
580     /* Bind a Network IO descriptor */
581     static int dev_c7200_pa_4e8e_set_nio(c7200_t *router,u_int pa_bay,
582     u_int port_id,netio_desc_t *nio)
583     {
584     struct pa_4e8e_data *d;
585    
586     d = c7200_pa_get_drvinfo(router,pa_bay);
587    
588     if (!d || (port_id >= d->nr_port))
589     return(-1);
590    
591     dev_am79c971_set_nio(d->port[port_id],nio);
592     return(0);
593     }
594    
595     /* Unbind a Network IO descriptor */
596     static int dev_c7200_pa_4e8e_unset_nio(c7200_t *router,u_int pa_bay,
597     u_int port_id)
598     {
599     struct pa_4e8e_data *d;
600    
601     d = c7200_pa_get_drvinfo(router,pa_bay);
602    
603     if (!d || (port_id >= d->nr_port))
604     return(-1);
605    
606     dev_am79c971_unset_nio(d->port[port_id]);
607     return(0);
608     }
609    
610     /* PA-4E driver */
611     struct c7200_pa_driver dev_c7200_pa_4e_driver = {
612     "PA-4E", 1,
613     dev_c7200_pa_4e_init,
614     dev_c7200_pa_4e8e_shutdown,
615     dev_c7200_pa_4e8e_set_nio,
616     dev_c7200_pa_4e8e_unset_nio,
617 dpavlin 2 NULL,
618 dpavlin 1 };
619    
620     /* PA-8E driver */
621     struct c7200_pa_driver dev_c7200_pa_8e_driver = {
622     "PA-8E", 1,
623     dev_c7200_pa_8e_init,
624     dev_c7200_pa_4e8e_shutdown,
625     dev_c7200_pa_4e8e_set_nio,
626     dev_c7200_pa_4e8e_unset_nio,
627 dpavlin 2 NULL,
628 dpavlin 1 };

  ViewVC Help
Powered by ViewVC 1.1.26