/[dynamips]/upstream/dynamips-0.2.7-RC2/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

Contents of /upstream/dynamips-0.2.7-RC2/dev_c7200_eth.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8 - (show annotations)
Sat Oct 6 16:24:54 2007 UTC (16 years, 5 months ago) by dpavlin
File MIME type: text/plain
File size: 18395 byte(s)
dynamips-0.2.7-RC2

1 /*
2 * Cisco router simulation platform.
3 * 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 #include "dev_i8254x.h"
24 #include "dev_c7200.h"
25
26 /* ====================================================================== */
27 /* C7200-IO-FE EEPROM */
28 /* ====================================================================== */
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 static const struct cisco_eeprom eeprom_c7200_io_fe = {
37 "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_net_irq_for_slot_port(pa_bay,0));
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 c7200_pa_set_eeprom(router,pa_bay,cisco_eeprom_find_pa("PA-FE-TX"));
119
120 /* Create the DEC21140 chip */
121 data = dev_dec21140_init(router->vm,name,router->pa_bay[pa_bay].pci_map,0,
122 c7200_net_irq_for_slot_port(pa_bay,0));
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 struct c7200_pa_driver dev_c7200_iocard_fe_driver = {
169 "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 NULL,
175 };
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 NULL,
185 };
186
187 /* ====================================================================== */
188 /* 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_net_irq_for_slot_port(pa_bay,i));
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_net_irq_for_slot_port(pa_bay,0));
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_net_irq_for_slot_port(pa_bay,1));
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_net_irq_for_slot_port(pa_bay,0));
394
395 if (!data->port[0] || !data->port[1]) {
396 dev_i8254x_remove(data->port[0]);
397 dev_i8254x_remove(data->port[1]);
398 free(data);
399 return(-1);
400 }
401
402 /* Store device info into the router structure */
403 return(c7200_pa_set_drvinfo(router,pa_bay,data));
404 }
405
406 /* C7200-IO-2FE driver */
407 struct c7200_pa_driver dev_c7200_iocard_2fe_driver = {
408 "C7200-IO-2FE", 0,
409 dev_c7200_iocard_2fe_init,
410 dev_c7200_pa_i8254x_shutdown,
411 dev_c7200_pa_i8254x_set_nio,
412 dev_c7200_pa_i8254x_unset_nio,
413 NULL,
414 };
415
416 /* ====================================================================== */
417 /* C7200-IO-GE-E */
418 /* ====================================================================== */
419
420 /*
421 * C7200-IO-GE+E: C7200 IOCard with 1 GigatEthernet ports
422 * and 1 Ethernet port EEPROM.
423 */
424 static const m_uint16_t eeprom_c7200_io_ge_e_data[] = {
425 0x04FF, 0x4002, 0x1641, 0x0201, 0xC046, 0x0320, 0x001B, 0xCA06,
426 0x8249, 0x138B, 0x0642, 0x4230, 0xC18B, 0x3030, 0x3030, 0x3030,
427 0x3030, 0x0000, 0x0004, 0x0002, 0x0385, 0x1C0D, 0x7F03, 0xCB8F,
428 0x4337, 0x3230, 0x302D, 0x492F, 0x4F2D, 0x3246, 0x452F, 0x4580,
429 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
430 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
431 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
432 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
433 };
434
435 static const struct cisco_eeprom eeprom_c7200_io_ge_e = {
436 "C7200-IO-GE-E", (m_uint16_t *)eeprom_c7200_io_ge_e_data,
437 sizeof(eeprom_c7200_io_ge_e_data)/2,
438 };
439
440 /*
441 * dev_c7200_pa_ge_e_tx_init()
442 *
443 * Add a C7200-I/O-GE+E port adapter into specified slot.
444 */
445 static int dev_c7200_iocard_ge_e_init(c7200_t *router,char *name,u_int pa_bay)
446 {
447 struct pa_i8254x_data *data;
448
449 /* Allocate the private data structure for the iocard */
450 if (!(data = malloc(sizeof(*data)))) {
451 fprintf(stderr,"%s (C7200-IO-GE+E): out of memory\n",name);
452 return(-1);
453 }
454
455 /* 2 Ethernet ports */
456 memset(data,0,sizeof(*data));
457 data->nr_port = 2;
458
459 /* Set the EEPROM */
460 c7200_pa_set_eeprom(router,pa_bay,&eeprom_c7200_io_ge_e);
461
462 /* Port Gi0/0 is on PCI Device 1 */
463 data->port[0] = dev_i8254x_init(router->vm,name,0,
464 router->pa_bay[pa_bay].pci_map,1,
465 c7200_net_irq_for_slot_port(pa_bay,1));
466
467 /* Port e0/0 is on PCI Device 0 */
468 data->port[1] = dev_i8254x_init(router->vm,name,0,
469 router->pa_bay[pa_bay].pci_map,0,
470 c7200_net_irq_for_slot_port(pa_bay,0));
471
472 /* Store device info into the router structure */
473 return(c7200_pa_set_drvinfo(router,pa_bay,data));
474 }
475
476 /* C7200-IO-GE-E driver */
477 struct c7200_pa_driver dev_c7200_iocard_ge_e_driver = {
478 "C7200-IO-GE-E", 0,
479 dev_c7200_iocard_ge_e_init,
480 dev_c7200_pa_i8254x_shutdown,
481 dev_c7200_pa_i8254x_set_nio,
482 dev_c7200_pa_i8254x_unset_nio,
483 NULL,
484 };
485
486 /* ====================================================================== */
487 /* PA-4E / PA-8E */
488 /* ====================================================================== */
489
490 /* PA-4E/PA-8E data */
491 struct pa_4e8e_data {
492 u_int nr_port;
493 struct am79c971_data *port[8];
494 };
495
496 /*
497 * dev_c7200_pa_4e_init()
498 *
499 * Add a PA-4E port adapter into specified slot.
500 */
501 static int dev_c7200_pa_4e_init(c7200_t *router,char *name,u_int pa_bay)
502 {
503 struct pa_4e8e_data *data;
504 int i;
505
506 /* Allocate the private data structure for the PA-4E */
507 if (!(data = malloc(sizeof(*data)))) {
508 fprintf(stderr,"%s (PA-4E): out of memory\n",name);
509 return(-1);
510 }
511
512 /* 4 Ethernet ports */
513 memset(data,0,sizeof(*data));
514 data->nr_port = 4;
515
516 /* Set the EEPROM */
517 c7200_pa_set_eeprom(router,pa_bay,cisco_eeprom_find_pa("PA-4E"));
518
519 /* Create the AMD Am79c971 chips */
520 for(i=0;i<data->nr_port;i++) {
521 data->port[i] = dev_am79c971_init(router->vm,name,AM79C971_TYPE_10BASE_T,
522 router->pa_bay[pa_bay].pci_map,i,
523 c7200_net_irq_for_slot_port(pa_bay,i));
524 }
525
526 /* Store device info into the router structure */
527 return(c7200_pa_set_drvinfo(router,pa_bay,data));
528 }
529
530 /*
531 * dev_c7200_pa_8e_init()
532 *
533 * Add a PA-8E port adapter into specified slot.
534 */
535 static int dev_c7200_pa_8e_init(c7200_t *router,char *name,u_int pa_bay)
536 {
537 struct pa_4e8e_data *data;
538 int i;
539
540 /* Allocate the private data structure for the PA-8E */
541 if (!(data = malloc(sizeof(*data)))) {
542 fprintf(stderr,"%s (PA-8E): out of memory\n",name);
543 return(-1);
544 }
545
546 /* 4 Ethernet ports */
547 memset(data,0,sizeof(*data));
548 data->nr_port = 8;
549
550 /* Set the EEPROM */
551 c7200_pa_set_eeprom(router,pa_bay,cisco_eeprom_find_pa("PA-8E"));
552
553 /* Create the AMD Am79c971 chips */
554 for(i=0;i<data->nr_port;i++) {
555 data->port[i] = dev_am79c971_init(router->vm,name,AM79C971_TYPE_10BASE_T,
556 router->pa_bay[pa_bay].pci_map,i,
557 c7200_net_irq_for_slot_port(pa_bay,i));
558 }
559
560 /* Store device info into the router structure */
561 return(c7200_pa_set_drvinfo(router,pa_bay,data));
562 }
563
564 /* Remove a PA-4E/PA-8E from the specified slot */
565 static int dev_c7200_pa_4e8e_shutdown(c7200_t *router,u_int pa_bay)
566 {
567 struct c7200_pa_bay *bay;
568 struct pa_4e8e_data *data;
569 int i;
570
571 if (!(bay = c7200_pa_get_info(router,pa_bay)))
572 return(-1);
573
574 data = bay->drv_info;
575
576 /* Remove the PA EEPROM */
577 c7200_pa_unset_eeprom(router,pa_bay);
578
579 /* Remove the AMD Am79c971 chips */
580 for(i=0;i<data->nr_port;i++)
581 dev_am79c971_remove(data->port[i]);
582
583 free(data);
584 return(0);
585 }
586
587 /* Bind a Network IO descriptor */
588 static int dev_c7200_pa_4e8e_set_nio(c7200_t *router,u_int pa_bay,
589 u_int port_id,netio_desc_t *nio)
590 {
591 struct pa_4e8e_data *d;
592
593 d = c7200_pa_get_drvinfo(router,pa_bay);
594
595 if (!d || (port_id >= d->nr_port))
596 return(-1);
597
598 dev_am79c971_set_nio(d->port[port_id],nio);
599 return(0);
600 }
601
602 /* Unbind a Network IO descriptor */
603 static int dev_c7200_pa_4e8e_unset_nio(c7200_t *router,u_int pa_bay,
604 u_int port_id)
605 {
606 struct pa_4e8e_data *d;
607
608 d = c7200_pa_get_drvinfo(router,pa_bay);
609
610 if (!d || (port_id >= d->nr_port))
611 return(-1);
612
613 dev_am79c971_unset_nio(d->port[port_id]);
614 return(0);
615 }
616
617 /* PA-4E driver */
618 struct c7200_pa_driver dev_c7200_pa_4e_driver = {
619 "PA-4E", 1,
620 dev_c7200_pa_4e_init,
621 dev_c7200_pa_4e8e_shutdown,
622 dev_c7200_pa_4e8e_set_nio,
623 dev_c7200_pa_4e8e_unset_nio,
624 NULL,
625 };
626
627 /* PA-8E driver */
628 struct c7200_pa_driver dev_c7200_pa_8e_driver = {
629 "PA-8E", 1,
630 dev_c7200_pa_8e_init,
631 dev_c7200_pa_4e8e_shutdown,
632 dev_c7200_pa_4e8e_set_nio,
633 dev_c7200_pa_4e8e_unset_nio,
634 NULL,
635 };

  ViewVC Help
Powered by ViewVC 1.1.26