1
2
3
4
5
6
7
8
9#include <linux/module.h>
10#include <linux/version.h>
11#include <linux/init.h>
12#include <linux/wait.h>
13
14#ifndef __init
15#define __init
16#endif
17#ifndef __initfunc
18#define __initfunc(a) a
19#endif
20#ifndef __initdata
21#define __initdata
22#endif
23
24#include "./ip2/ip2types.h"
25#include "./ip2/fip_firm.h"
26
27int
28ip2_loadmain(int *, int *, unsigned char *, int );
29
30
31
32
33
34static int io[IP2_MAX_BOARDS]= { 0, 0, 0, 0 };
35static int irq[IP2_MAX_BOARDS] = { -1, -1, -1, -1 };
36
37static int poll_only = 0;
38
39MODULE_AUTHOR("Doug McNash");
40MODULE_DESCRIPTION("Computone IntelliPort Plus Driver");
41module_param_array(irq, int, NULL, 0);
42MODULE_PARM_DESC(irq,"Interrupts for IntelliPort Cards");
43module_param_array(io, int, NULL, 0);
44MODULE_PARM_DESC(io,"I/O ports for IntelliPort Cards");
45module_param(poll_only, bool, 0);
46MODULE_PARM_DESC(poll_only,"Do not use card interrupts");
47
48
49static int __init ip2_init(void)
50{
51 if( poll_only ) {
52
53 irq[0] = irq[1] = irq[2] = irq[3] = 0;
54 }
55
56 return ip2_loadmain(io,irq,(unsigned char *)fip_firm,sizeof(fip_firm));
57}
58module_init(ip2_init);
59
60MODULE_LICENSE("GPL");
61
62#ifndef MODULE
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84static int __init ip2_setup(char *str)
85{
86 int ints[10];
87 int i, j;
88
89 str = get_options (str, ARRAY_SIZE(ints), ints);
90
91 for( i = 0, j = 1; i < 4; i++ ) {
92 if( j > ints[0] ) {
93 break;
94 }
95 if( ints[j] >= 0 ) {
96 io[i] = ints[j];
97 }
98 j++;
99 if( j > ints[0] ) {
100 break;
101 }
102 if( ints[j] >= 0 ) {
103 irq[i] = ints[j];
104 }
105 j++;
106 }
107 return 1;
108}
109__setup("ip2=", ip2_setup);
110#endif
111