diff options
Diffstat (limited to 'drivers/net/wan/lmc/lmc_proto.c')
-rw-r--r-- | drivers/net/wan/lmc/lmc_proto.c | 146 |
1 files changed, 25 insertions, 121 deletions
diff --git a/drivers/net/wan/lmc/lmc_proto.c b/drivers/net/wan/lmc/lmc_proto.c index 85315758198d..be9877ff551e 100644 --- a/drivers/net/wan/lmc/lmc_proto.c +++ b/drivers/net/wan/lmc/lmc_proto.c | |||
@@ -36,9 +36,6 @@ | |||
36 | #include <linux/workqueue.h> | 36 | #include <linux/workqueue.h> |
37 | #include <linux/proc_fs.h> | 37 | #include <linux/proc_fs.h> |
38 | #include <linux/bitops.h> | 38 | #include <linux/bitops.h> |
39 | |||
40 | #include <net/syncppp.h> | ||
41 | |||
42 | #include <asm/processor.h> /* Processor type for cache alignment. */ | 39 | #include <asm/processor.h> /* Processor type for cache alignment. */ |
43 | #include <asm/io.h> | 40 | #include <asm/io.h> |
44 | #include <asm/dma.h> | 41 | #include <asm/dma.h> |
@@ -50,48 +47,6 @@ | |||
50 | #include "lmc_ioctl.h" | 47 | #include "lmc_ioctl.h" |
51 | #include "lmc_proto.h" | 48 | #include "lmc_proto.h" |
52 | 49 | ||
53 | /* | ||
54 | * The compile-time variable SPPPSTUP causes the module to be | ||
55 | * compiled without referencing any of the sync ppp routines. | ||
56 | */ | ||
57 | #ifdef SPPPSTUB | ||
58 | #define SPPP_detach(d) (void)0 | ||
59 | #define SPPP_open(d) 0 | ||
60 | #define SPPP_reopen(d) (void)0 | ||
61 | #define SPPP_close(d) (void)0 | ||
62 | #define SPPP_attach(d) (void)0 | ||
63 | #define SPPP_do_ioctl(d,i,c) -EOPNOTSUPP | ||
64 | #else | ||
65 | #define SPPP_attach(x) sppp_attach((x)->pd) | ||
66 | #define SPPP_detach(x) sppp_detach((x)->pd->dev) | ||
67 | #define SPPP_open(x) sppp_open((x)->pd->dev) | ||
68 | #define SPPP_reopen(x) sppp_reopen((x)->pd->dev) | ||
69 | #define SPPP_close(x) sppp_close((x)->pd->dev) | ||
70 | #define SPPP_do_ioctl(x, y, z) sppp_do_ioctl((x)->pd->dev, (y), (z)) | ||
71 | #endif | ||
72 | |||
73 | // init | ||
74 | void lmc_proto_init(lmc_softc_t *sc) /*FOLD00*/ | ||
75 | { | ||
76 | lmc_trace(sc->lmc_device, "lmc_proto_init in"); | ||
77 | switch(sc->if_type){ | ||
78 | case LMC_PPP: | ||
79 | sc->pd = kmalloc(sizeof(struct ppp_device), GFP_KERNEL); | ||
80 | if (!sc->pd) { | ||
81 | printk("lmc_proto_init(): kmalloc failure!\n"); | ||
82 | return; | ||
83 | } | ||
84 | sc->pd->dev = sc->lmc_device; | ||
85 | sc->if_ptr = sc->pd; | ||
86 | break; | ||
87 | case LMC_RAW: | ||
88 | break; | ||
89 | default: | ||
90 | break; | ||
91 | } | ||
92 | lmc_trace(sc->lmc_device, "lmc_proto_init out"); | ||
93 | } | ||
94 | |||
95 | // attach | 50 | // attach |
96 | void lmc_proto_attach(lmc_softc_t *sc) /*FOLD00*/ | 51 | void lmc_proto_attach(lmc_softc_t *sc) /*FOLD00*/ |
97 | { | 52 | { |
@@ -100,7 +55,6 @@ void lmc_proto_attach(lmc_softc_t *sc) /*FOLD00*/ | |||
100 | case LMC_PPP: | 55 | case LMC_PPP: |
101 | { | 56 | { |
102 | struct net_device *dev = sc->lmc_device; | 57 | struct net_device *dev = sc->lmc_device; |
103 | SPPP_attach(sc); | ||
104 | dev->do_ioctl = lmc_ioctl; | 58 | dev->do_ioctl = lmc_ioctl; |
105 | } | 59 | } |
106 | break; | 60 | break; |
@@ -108,7 +62,7 @@ void lmc_proto_attach(lmc_softc_t *sc) /*FOLD00*/ | |||
108 | { | 62 | { |
109 | struct net_device *dev = sc->lmc_device; | 63 | struct net_device *dev = sc->lmc_device; |
110 | /* | 64 | /* |
111 | * They set a few basics because they don't use sync_ppp | 65 | * They set a few basics because they don't use HDLC |
112 | */ | 66 | */ |
113 | dev->flags |= IFF_POINTOPOINT; | 67 | dev->flags |= IFF_POINTOPOINT; |
114 | 68 | ||
@@ -124,88 +78,39 @@ void lmc_proto_attach(lmc_softc_t *sc) /*FOLD00*/ | |||
124 | lmc_trace(sc->lmc_device, "lmc_proto_attach out"); | 78 | lmc_trace(sc->lmc_device, "lmc_proto_attach out"); |
125 | } | 79 | } |
126 | 80 | ||
127 | // detach | 81 | int lmc_proto_ioctl(lmc_softc_t *sc, struct ifreq *ifr, int cmd) |
128 | void lmc_proto_detach(lmc_softc_t *sc) /*FOLD00*/ | ||
129 | { | 82 | { |
130 | switch(sc->if_type){ | 83 | lmc_trace(sc->lmc_device, "lmc_proto_ioctl"); |
131 | case LMC_PPP: | 84 | if (sc->if_type == LMC_PPP) |
132 | SPPP_detach(sc); | 85 | return hdlc_ioctl(sc->lmc_device, ifr, cmd); |
133 | break; | 86 | return -EOPNOTSUPP; |
134 | case LMC_RAW: /* Tell someone we're detaching? */ | ||
135 | break; | ||
136 | default: | ||
137 | break; | ||
138 | } | ||
139 | |||
140 | } | 87 | } |
141 | 88 | ||
142 | // reopen | 89 | int lmc_proto_open(lmc_softc_t *sc) |
143 | void lmc_proto_reopen(lmc_softc_t *sc) /*FOLD00*/ | ||
144 | { | 90 | { |
145 | lmc_trace(sc->lmc_device, "lmc_proto_reopen in"); | 91 | int ret = 0; |
146 | switch(sc->if_type){ | ||
147 | case LMC_PPP: | ||
148 | SPPP_reopen(sc); | ||
149 | break; | ||
150 | case LMC_RAW: /* Reset the interface after being down, prerape to receive packets again */ | ||
151 | break; | ||
152 | default: | ||
153 | break; | ||
154 | } | ||
155 | lmc_trace(sc->lmc_device, "lmc_proto_reopen out"); | ||
156 | } | ||
157 | 92 | ||
93 | lmc_trace(sc->lmc_device, "lmc_proto_open in"); | ||
158 | 94 | ||
159 | // ioctl | 95 | if (sc->if_type == LMC_PPP) { |
160 | int lmc_proto_ioctl(lmc_softc_t *sc, struct ifreq *ifr, int cmd) /*FOLD00*/ | 96 | ret = hdlc_open(sc->lmc_device); |
161 | { | 97 | if (ret < 0) |
162 | lmc_trace(sc->lmc_device, "lmc_proto_ioctl out"); | 98 | printk(KERN_WARNING "%s: HDLC open failed: %d\n", |
163 | switch(sc->if_type){ | 99 | sc->name, ret); |
164 | case LMC_PPP: | 100 | } |
165 | return SPPP_do_ioctl (sc, ifr, cmd); | 101 | |
166 | break; | 102 | lmc_trace(sc->lmc_device, "lmc_proto_open out"); |
167 | default: | 103 | return ret; |
168 | return -EOPNOTSUPP; | ||
169 | break; | ||
170 | } | ||
171 | lmc_trace(sc->lmc_device, "lmc_proto_ioctl out"); | ||
172 | } | 104 | } |
173 | 105 | ||
174 | // open | 106 | void lmc_proto_close(lmc_softc_t *sc) |
175 | void lmc_proto_open(lmc_softc_t *sc) /*FOLD00*/ | ||
176 | { | 107 | { |
177 | int ret; | 108 | lmc_trace(sc->lmc_device, "lmc_proto_close in"); |
178 | 109 | ||
179 | lmc_trace(sc->lmc_device, "lmc_proto_open in"); | 110 | if (sc->if_type == LMC_PPP) |
180 | switch(sc->if_type){ | 111 | hdlc_close(sc->lmc_device); |
181 | case LMC_PPP: | ||
182 | ret = SPPP_open(sc); | ||
183 | if(ret < 0) | ||
184 | printk("%s: syncPPP open failed: %d\n", sc->name, ret); | ||
185 | break; | ||
186 | case LMC_RAW: /* We're about to start getting packets! */ | ||
187 | break; | ||
188 | default: | ||
189 | break; | ||
190 | } | ||
191 | lmc_trace(sc->lmc_device, "lmc_proto_open out"); | ||
192 | } | ||
193 | |||
194 | // close | ||
195 | 112 | ||
196 | void lmc_proto_close(lmc_softc_t *sc) /*FOLD00*/ | 113 | lmc_trace(sc->lmc_device, "lmc_proto_close out"); |
197 | { | ||
198 | lmc_trace(sc->lmc_device, "lmc_proto_close in"); | ||
199 | switch(sc->if_type){ | ||
200 | case LMC_PPP: | ||
201 | SPPP_close(sc); | ||
202 | break; | ||
203 | case LMC_RAW: /* Interface going down */ | ||
204 | break; | ||
205 | default: | ||
206 | break; | ||
207 | } | ||
208 | lmc_trace(sc->lmc_device, "lmc_proto_close out"); | ||
209 | } | 114 | } |
210 | 115 | ||
211 | __be16 lmc_proto_type(lmc_softc_t *sc, struct sk_buff *skb) /*FOLD00*/ | 116 | __be16 lmc_proto_type(lmc_softc_t *sc, struct sk_buff *skb) /*FOLD00*/ |
@@ -213,8 +118,8 @@ __be16 lmc_proto_type(lmc_softc_t *sc, struct sk_buff *skb) /*FOLD00*/ | |||
213 | lmc_trace(sc->lmc_device, "lmc_proto_type in"); | 118 | lmc_trace(sc->lmc_device, "lmc_proto_type in"); |
214 | switch(sc->if_type){ | 119 | switch(sc->if_type){ |
215 | case LMC_PPP: | 120 | case LMC_PPP: |
216 | return htons(ETH_P_WAN_PPP); | 121 | return hdlc_type_trans(skb, sc->lmc_device); |
217 | break; | 122 | break; |
218 | case LMC_NET: | 123 | case LMC_NET: |
219 | return htons(ETH_P_802_2); | 124 | return htons(ETH_P_802_2); |
220 | break; | 125 | break; |
@@ -245,4 +150,3 @@ void lmc_proto_netif(lmc_softc_t *sc, struct sk_buff *skb) /*FOLD00*/ | |||
245 | } | 150 | } |
246 | lmc_trace(sc->lmc_device, "lmc_proto_netif out"); | 151 | lmc_trace(sc->lmc_device, "lmc_proto_netif out"); |
247 | } | 152 | } |
248 | |||