~ubuntu-branches/ubuntu/trusty/linux-armadaxp/trusty

« back to all changes in this revision

Viewing changes to net/lapb/lapb_in.c

  • Committer: Package Import Robot
  • Author(s): Michael Casadevall, Bryan Wu, Dann Frazier, Michael Casadeall
  • Date: 2012-03-10 15:00:54 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20120310150054-flugb39zon8vvgwe
Tags: 3.2.0-1600.1
[ Bryan Wu ]
* UBUNTU: import debian/debian.env and debian.armadaxp

[ Dann Frazier ]
* ARM: Armada XP: remove trailing '/' in dirnames in mvRules.mk

[ Michael Casadeall ]
* tools: add some tools for Marvell Armada XP processor
* kernel: timer tick hacking from Marvell
* kernel: Sheeva Errata: add delay on Sheeva when powering down
* net: add Marvell NFP netfilter
* net: socket and skb modifications made by Marvell
* miscdevice: add minor IDs for some Marvell Armada drivers
* fs: introduce memory pool for splice()
* video: EDID detection updates from Marvell Armada XP patchset
* video: backlight: add Marvell Dove LCD backlight driver
* video: display: add THS8200 display driver
* video: framebuffer: add Marvell Dove and Armada XP processor onchip LCD controller driver
* usbtest: add Interrupt transfer testing by Marvell Armada XP code
* usb: ehci: add support for Marvell EHCI controler
* tty/serial: 8250: add support for Marvell Armada XP processor and DeviceTree work
* rtc: add support for Marvell Armada XP onchip RTC controller
* net: pppoe: add Marvell ethernet NFP hook in PPPoE networking driver
* mtd: nand: add support for Marvell Armada XP Nand Flash Controller
* mtd: maps: add Marvell Armada XP specific map driver
* mmc: add support for Marvell Armada XP MMC/SD host controller
* i2c: add support for Marvell Armada XP onchip i2c bus controller
* hwmon: add Kconfig option for Armada XP onchip thermal sensor driver
* dmaengine: add Net DMA support for splice and update Marvell XOR DMA engine driver
* ata: add support for Marvell Armada XP SATA controller and update some quirks
* ARM: add Marvell Armada XP machine to mach-types
* ARM: oprofile: add support for Marvell PJ4B core
* ARM: mm: more ARMv6 switches for Marvell Armada XP
* ARM: remove static declaration to allow compilation
* ARM: alignment access fault trick
* ARM: mm: skip some fault fixing when run on NONE SMP ARMv6 mode during early abort event
* ARM: mm: add Marvell Sheeva CPU Architecture for PJ4B
* ARM: introduce optimized copy operation for Marvell Armada XP
* ARM: SAUCE: hardware breakpoint trick for Marvell Armada XP
* ARM: big endian and little endian tricks for Marvell Armada XP
* ARM: SAUCE: Add Marvell Armada XP build rules to arch/arm/kernel/Makefile
* ARM: vfp: add special handling for Marvell Armada XP
* ARM: add support for Marvell U-Boot
* ARM: add mv_controller_num for ARM PCI drivers
* ARM: add support for local PMUs, general SMP tweaks and cache flushing
* ARM: add Marvell device identifies in glue-proc.h
* ARM: add IPC driver support for Marvell platforms
* ARM: add DMA mapping for Marvell platforms
* ARM: add Sheeva errata and PJ4B code for booting
* ARM: update Kconfig and Makefile to include Marvell Armada XP platforms
* ARM: Armada XP: import LSP from Marvell for Armada XP 3.2 kernel enablement

Show diffs side-by-side

added added

removed removed

Lines of Context:
44
44
                                struct lapb_frame *frame)
45
45
{
46
46
        switch (frame->type) {
47
 
                case LAPB_SABM:
48
 
#if LAPB_DEBUG > 1
49
 
                        printk(KERN_DEBUG "lapb: (%p) S0 RX SABM(%d)\n",
50
 
                               lapb->dev, frame->pf);
51
 
#endif
52
 
                        if (lapb->mode & LAPB_EXTENDED) {
53
 
#if LAPB_DEBUG > 1
54
 
                                printk(KERN_DEBUG "lapb: (%p) S0 TX DM(%d)\n",
55
 
                                       lapb->dev, frame->pf);
56
 
#endif
57
 
                                lapb_send_control(lapb, LAPB_DM, frame->pf,
58
 
                                                  LAPB_RESPONSE);
59
 
                        } else {
60
 
#if LAPB_DEBUG > 1
61
 
                                printk(KERN_DEBUG "lapb: (%p) S0 TX UA(%d)\n",
62
 
                                       lapb->dev, frame->pf);
63
 
#endif
64
 
#if LAPB_DEBUG > 0
65
 
                                printk(KERN_DEBUG "lapb: (%p) S0 -> S3\n",
66
 
                                       lapb->dev);
67
 
#endif
68
 
                                lapb_send_control(lapb, LAPB_UA, frame->pf,
69
 
                                                  LAPB_RESPONSE);
70
 
                                lapb_stop_t1timer(lapb);
71
 
                                lapb_stop_t2timer(lapb);
72
 
                                lapb->state     = LAPB_STATE_3;
73
 
                                lapb->condition = 0x00;
74
 
                                lapb->n2count   = 0;
75
 
                                lapb->vs        = 0;
76
 
                                lapb->vr        = 0;
77
 
                                lapb->va        = 0;
78
 
                                lapb_connect_indication(lapb, LAPB_OK);
79
 
                        }
80
 
                        break;
81
 
 
82
 
                case LAPB_SABME:
83
 
#if LAPB_DEBUG > 1
84
 
                        printk(KERN_DEBUG "lapb: (%p) S0 RX SABME(%d)\n",
85
 
                               lapb->dev, frame->pf);
86
 
#endif
87
 
                        if (lapb->mode & LAPB_EXTENDED) {
88
 
#if LAPB_DEBUG > 1
89
 
                                printk(KERN_DEBUG "lapb: (%p) S0 TX UA(%d)\n",
90
 
                                       lapb->dev, frame->pf);
91
 
#endif
92
 
#if LAPB_DEBUG > 0
93
 
                                printk(KERN_DEBUG "lapb: (%p) S0 -> S3\n",
94
 
                                       lapb->dev);
95
 
#endif
96
 
                                lapb_send_control(lapb, LAPB_UA, frame->pf,
97
 
                                                  LAPB_RESPONSE);
98
 
                                lapb_stop_t1timer(lapb);
99
 
                                lapb_stop_t2timer(lapb);
100
 
                                lapb->state     = LAPB_STATE_3;
101
 
                                lapb->condition = 0x00;
102
 
                                lapb->n2count   = 0;
103
 
                                lapb->vs        = 0;
104
 
                                lapb->vr        = 0;
105
 
                                lapb->va        = 0;
106
 
                                lapb_connect_indication(lapb, LAPB_OK);
107
 
                        } else {
108
 
#if LAPB_DEBUG > 1
109
 
                                printk(KERN_DEBUG "lapb: (%p) S0 TX DM(%d)\n",
110
 
                                       lapb->dev, frame->pf);
111
 
#endif
112
 
                                lapb_send_control(lapb, LAPB_DM, frame->pf,
113
 
                                                  LAPB_RESPONSE);
114
 
                        }
115
 
                        break;
116
 
 
117
 
                case LAPB_DISC:
118
 
#if LAPB_DEBUG > 1
119
 
                        printk(KERN_DEBUG "lapb: (%p) S0 RX DISC(%d)\n",
120
 
                               lapb->dev, frame->pf);
121
 
                        printk(KERN_DEBUG "lapb: (%p) S0 TX UA(%d)\n",
122
 
                               lapb->dev, frame->pf);
123
 
#endif
124
 
                        lapb_send_control(lapb, LAPB_UA, frame->pf,
125
 
                                          LAPB_RESPONSE);
126
 
                        break;
127
 
 
128
 
                default:
129
 
                        break;
 
47
        case LAPB_SABM:
 
48
#if LAPB_DEBUG > 1
 
49
                printk(KERN_DEBUG "lapb: (%p) S0 RX SABM(%d)\n",
 
50
                       lapb->dev, frame->pf);
 
51
#endif
 
52
                if (lapb->mode & LAPB_EXTENDED) {
 
53
#if LAPB_DEBUG > 1
 
54
                        printk(KERN_DEBUG "lapb: (%p) S0 TX DM(%d)\n",
 
55
                               lapb->dev, frame->pf);
 
56
#endif
 
57
                        lapb_send_control(lapb, LAPB_DM, frame->pf,
 
58
                                          LAPB_RESPONSE);
 
59
                } else {
 
60
#if LAPB_DEBUG > 1
 
61
                        printk(KERN_DEBUG "lapb: (%p) S0 TX UA(%d)\n",
 
62
                               lapb->dev, frame->pf);
 
63
#endif
 
64
#if LAPB_DEBUG > 0
 
65
                        printk(KERN_DEBUG "lapb: (%p) S0 -> S3\n", lapb->dev);
 
66
#endif
 
67
                        lapb_send_control(lapb, LAPB_UA, frame->pf,
 
68
                                          LAPB_RESPONSE);
 
69
                        lapb_stop_t1timer(lapb);
 
70
                        lapb_stop_t2timer(lapb);
 
71
                        lapb->state     = LAPB_STATE_3;
 
72
                        lapb->condition = 0x00;
 
73
                        lapb->n2count   = 0;
 
74
                        lapb->vs        = 0;
 
75
                        lapb->vr        = 0;
 
76
                        lapb->va        = 0;
 
77
                        lapb_connect_indication(lapb, LAPB_OK);
 
78
                }
 
79
                break;
 
80
 
 
81
        case LAPB_SABME:
 
82
#if LAPB_DEBUG > 1
 
83
                printk(KERN_DEBUG "lapb: (%p) S0 RX SABME(%d)\n",
 
84
                       lapb->dev, frame->pf);
 
85
#endif
 
86
                if (lapb->mode & LAPB_EXTENDED) {
 
87
#if LAPB_DEBUG > 1
 
88
                        printk(KERN_DEBUG "lapb: (%p) S0 TX UA(%d)\n",
 
89
                               lapb->dev, frame->pf);
 
90
#endif
 
91
#if LAPB_DEBUG > 0
 
92
                        printk(KERN_DEBUG "lapb: (%p) S0 -> S3\n", lapb->dev);
 
93
#endif
 
94
                        lapb_send_control(lapb, LAPB_UA, frame->pf,
 
95
                                          LAPB_RESPONSE);
 
96
                        lapb_stop_t1timer(lapb);
 
97
                        lapb_stop_t2timer(lapb);
 
98
                        lapb->state     = LAPB_STATE_3;
 
99
                        lapb->condition = 0x00;
 
100
                        lapb->n2count   = 0;
 
101
                        lapb->vs        = 0;
 
102
                        lapb->vr        = 0;
 
103
                        lapb->va        = 0;
 
104
                        lapb_connect_indication(lapb, LAPB_OK);
 
105
                } else {
 
106
#if LAPB_DEBUG > 1
 
107
                        printk(KERN_DEBUG "lapb: (%p) S0 TX DM(%d)\n",
 
108
                               lapb->dev, frame->pf);
 
109
#endif
 
110
                        lapb_send_control(lapb, LAPB_DM, frame->pf,
 
111
                                          LAPB_RESPONSE);
 
112
                }
 
113
                break;
 
114
 
 
115
        case LAPB_DISC:
 
116
#if LAPB_DEBUG > 1
 
117
                printk(KERN_DEBUG "lapb: (%p) S0 RX DISC(%d)\n",
 
118
                       lapb->dev, frame->pf);
 
119
                printk(KERN_DEBUG "lapb: (%p) S0 TX UA(%d)\n",
 
120
                       lapb->dev, frame->pf);
 
121
#endif
 
122
                lapb_send_control(lapb, LAPB_UA, frame->pf, LAPB_RESPONSE);
 
123
                break;
 
124
 
 
125
        default:
 
126
                break;
130
127
        }
131
128
 
132
129
        kfree_skb(skb);
140
137
                                struct lapb_frame *frame)
141
138
{
142
139
        switch (frame->type) {
143
 
                case LAPB_SABM:
144
 
#if LAPB_DEBUG > 1
145
 
                        printk(KERN_DEBUG "lapb: (%p) S1 RX SABM(%d)\n",
146
 
                               lapb->dev, frame->pf);
147
 
#endif
148
 
                        if (lapb->mode & LAPB_EXTENDED) {
149
 
#if LAPB_DEBUG > 1
150
 
                                printk(KERN_DEBUG "lapb: (%p) S1 TX DM(%d)\n",
151
 
                                       lapb->dev, frame->pf);
152
 
#endif
153
 
                                lapb_send_control(lapb, LAPB_DM, frame->pf,
154
 
                                                  LAPB_RESPONSE);
155
 
                        } else {
156
 
#if LAPB_DEBUG > 1
157
 
                                printk(KERN_DEBUG "lapb: (%p) S1 TX UA(%d)\n",
158
 
                                       lapb->dev, frame->pf);
159
 
#endif
160
 
                                lapb_send_control(lapb, LAPB_UA, frame->pf,
161
 
                                                  LAPB_RESPONSE);
162
 
                        }
163
 
                        break;
164
 
 
165
 
                case LAPB_SABME:
166
 
#if LAPB_DEBUG > 1
167
 
                        printk(KERN_DEBUG "lapb: (%p) S1 RX SABME(%d)\n",
168
 
                               lapb->dev, frame->pf);
169
 
#endif
170
 
                        if (lapb->mode & LAPB_EXTENDED) {
171
 
#if LAPB_DEBUG > 1
172
 
                                printk(KERN_DEBUG "lapb: (%p) S1 TX UA(%d)\n",
173
 
                                       lapb->dev, frame->pf);
174
 
#endif
175
 
                                lapb_send_control(lapb, LAPB_UA, frame->pf,
176
 
                                                  LAPB_RESPONSE);
177
 
                        } else {
178
 
#if LAPB_DEBUG > 1
179
 
                                printk(KERN_DEBUG "lapb: (%p) S1 TX DM(%d)\n",
180
 
                                       lapb->dev, frame->pf);
181
 
#endif
182
 
                                lapb_send_control(lapb, LAPB_DM, frame->pf,
183
 
                                                  LAPB_RESPONSE);
184
 
                        }
185
 
                        break;
186
 
 
187
 
                case LAPB_DISC:
188
 
#if LAPB_DEBUG > 1
189
 
                        printk(KERN_DEBUG "lapb: (%p) S1 RX DISC(%d)\n",
190
 
                               lapb->dev, frame->pf);
191
 
                        printk(KERN_DEBUG "lapb: (%p) S1 TX DM(%d)\n",
192
 
                               lapb->dev, frame->pf);
193
 
#endif
194
 
                        lapb_send_control(lapb, LAPB_DM, frame->pf,
195
 
                                          LAPB_RESPONSE);
196
 
                        break;
197
 
 
198
 
                case LAPB_UA:
199
 
#if LAPB_DEBUG > 1
200
 
                        printk(KERN_DEBUG "lapb: (%p) S1 RX UA(%d)\n",
201
 
                               lapb->dev, frame->pf);
202
 
#endif
203
 
                        if (frame->pf) {
204
 
#if LAPB_DEBUG > 0
205
 
                                printk(KERN_DEBUG "lapb: (%p) S1 -> S3\n",
206
 
                                       lapb->dev);
207
 
#endif
208
 
                                lapb_stop_t1timer(lapb);
209
 
                                lapb_stop_t2timer(lapb);
210
 
                                lapb->state     = LAPB_STATE_3;
211
 
                                lapb->condition = 0x00;
212
 
                                lapb->n2count   = 0;
213
 
                                lapb->vs        = 0;
214
 
                                lapb->vr        = 0;
215
 
                                lapb->va        = 0;
216
 
                                lapb_connect_confirmation(lapb, LAPB_OK);
217
 
                        }
218
 
                        break;
219
 
 
220
 
                case LAPB_DM:
221
 
#if LAPB_DEBUG > 1
222
 
                        printk(KERN_DEBUG "lapb: (%p) S1 RX DM(%d)\n",
223
 
                               lapb->dev, frame->pf);
224
 
#endif
225
 
                        if (frame->pf) {
226
 
#if LAPB_DEBUG > 0
227
 
                                printk(KERN_DEBUG "lapb: (%p) S1 -> S0\n",
228
 
                                       lapb->dev);
229
 
#endif
230
 
                                lapb_clear_queues(lapb);
231
 
                                lapb->state = LAPB_STATE_0;
232
 
                                lapb_start_t1timer(lapb);
233
 
                                lapb_stop_t2timer(lapb);
234
 
                                lapb_disconnect_indication(lapb, LAPB_REFUSED);
235
 
                        }
236
 
                        break;
 
140
        case LAPB_SABM:
 
141
#if LAPB_DEBUG > 1
 
142
                printk(KERN_DEBUG "lapb: (%p) S1 RX SABM(%d)\n",
 
143
                       lapb->dev, frame->pf);
 
144
#endif
 
145
                if (lapb->mode & LAPB_EXTENDED) {
 
146
#if LAPB_DEBUG > 1
 
147
                        printk(KERN_DEBUG "lapb: (%p) S1 TX DM(%d)\n",
 
148
                               lapb->dev, frame->pf);
 
149
#endif
 
150
                        lapb_send_control(lapb, LAPB_DM, frame->pf,
 
151
                                          LAPB_RESPONSE);
 
152
                } else {
 
153
#if LAPB_DEBUG > 1
 
154
                        printk(KERN_DEBUG "lapb: (%p) S1 TX UA(%d)\n",
 
155
                               lapb->dev, frame->pf);
 
156
#endif
 
157
                        lapb_send_control(lapb, LAPB_UA, frame->pf,
 
158
                                          LAPB_RESPONSE);
 
159
                }
 
160
                break;
 
161
 
 
162
        case LAPB_SABME:
 
163
#if LAPB_DEBUG > 1
 
164
                printk(KERN_DEBUG "lapb: (%p) S1 RX SABME(%d)\n",
 
165
                       lapb->dev, frame->pf);
 
166
#endif
 
167
                if (lapb->mode & LAPB_EXTENDED) {
 
168
#if LAPB_DEBUG > 1
 
169
                        printk(KERN_DEBUG "lapb: (%p) S1 TX UA(%d)\n",
 
170
                               lapb->dev, frame->pf);
 
171
#endif
 
172
                        lapb_send_control(lapb, LAPB_UA, frame->pf,
 
173
                                          LAPB_RESPONSE);
 
174
                } else {
 
175
#if LAPB_DEBUG > 1
 
176
                        printk(KERN_DEBUG "lapb: (%p) S1 TX DM(%d)\n",
 
177
                               lapb->dev, frame->pf);
 
178
#endif
 
179
                        lapb_send_control(lapb, LAPB_DM, frame->pf,
 
180
                                          LAPB_RESPONSE);
 
181
                }
 
182
                break;
 
183
 
 
184
        case LAPB_DISC:
 
185
#if LAPB_DEBUG > 1
 
186
                printk(KERN_DEBUG "lapb: (%p) S1 RX DISC(%d)\n",
 
187
                       lapb->dev, frame->pf);
 
188
                printk(KERN_DEBUG "lapb: (%p) S1 TX DM(%d)\n",
 
189
                       lapb->dev, frame->pf);
 
190
#endif
 
191
                lapb_send_control(lapb, LAPB_DM, frame->pf, LAPB_RESPONSE);
 
192
                break;
 
193
 
 
194
        case LAPB_UA:
 
195
#if LAPB_DEBUG > 1
 
196
                printk(KERN_DEBUG "lapb: (%p) S1 RX UA(%d)\n",
 
197
                       lapb->dev, frame->pf);
 
198
#endif
 
199
                if (frame->pf) {
 
200
#if LAPB_DEBUG > 0
 
201
                        printk(KERN_DEBUG "lapb: (%p) S1 -> S3\n", lapb->dev);
 
202
#endif
 
203
                        lapb_stop_t1timer(lapb);
 
204
                        lapb_stop_t2timer(lapb);
 
205
                        lapb->state     = LAPB_STATE_3;
 
206
                        lapb->condition = 0x00;
 
207
                        lapb->n2count   = 0;
 
208
                        lapb->vs        = 0;
 
209
                        lapb->vr        = 0;
 
210
                        lapb->va        = 0;
 
211
                        lapb_connect_confirmation(lapb, LAPB_OK);
 
212
                }
 
213
                break;
 
214
 
 
215
        case LAPB_DM:
 
216
#if LAPB_DEBUG > 1
 
217
                printk(KERN_DEBUG "lapb: (%p) S1 RX DM(%d)\n",
 
218
                       lapb->dev, frame->pf);
 
219
#endif
 
220
                if (frame->pf) {
 
221
#if LAPB_DEBUG > 0
 
222
                        printk(KERN_DEBUG "lapb: (%p) S1 -> S0\n", lapb->dev);
 
223
#endif
 
224
                        lapb_clear_queues(lapb);
 
225
                        lapb->state = LAPB_STATE_0;
 
226
                        lapb_start_t1timer(lapb);
 
227
                        lapb_stop_t2timer(lapb);
 
228
                        lapb_disconnect_indication(lapb, LAPB_REFUSED);
 
229
                }
 
230
                break;
237
231
        }
238
232
 
239
233
        kfree_skb(skb);
247
241
                                struct lapb_frame *frame)
248
242
{
249
243
        switch (frame->type) {
250
 
                case LAPB_SABM:
251
 
                case LAPB_SABME:
252
 
#if LAPB_DEBUG > 1
253
 
                        printk(KERN_DEBUG "lapb: (%p) S2 RX {SABM,SABME}(%d)\n",
254
 
                               lapb->dev, frame->pf);
255
 
                        printk(KERN_DEBUG "lapb: (%p) S2 TX DM(%d)\n",
256
 
                               lapb->dev, frame->pf);
257
 
#endif
 
244
        case LAPB_SABM:
 
245
        case LAPB_SABME:
 
246
#if LAPB_DEBUG > 1
 
247
                printk(KERN_DEBUG "lapb: (%p) S2 RX {SABM,SABME}(%d)\n",
 
248
                       lapb->dev, frame->pf);
 
249
                printk(KERN_DEBUG "lapb: (%p) S2 TX DM(%d)\n",
 
250
                       lapb->dev, frame->pf);
 
251
#endif
 
252
                lapb_send_control(lapb, LAPB_DM, frame->pf, LAPB_RESPONSE);
 
253
                break;
 
254
 
 
255
        case LAPB_DISC:
 
256
#if LAPB_DEBUG > 1
 
257
                printk(KERN_DEBUG "lapb: (%p) S2 RX DISC(%d)\n",
 
258
                       lapb->dev, frame->pf);
 
259
                printk(KERN_DEBUG "lapb: (%p) S2 TX UA(%d)\n",
 
260
                       lapb->dev, frame->pf);
 
261
#endif
 
262
                lapb_send_control(lapb, LAPB_UA, frame->pf, LAPB_RESPONSE);
 
263
                break;
 
264
 
 
265
        case LAPB_UA:
 
266
#if LAPB_DEBUG > 1
 
267
                printk(KERN_DEBUG "lapb: (%p) S2 RX UA(%d)\n",
 
268
                       lapb->dev, frame->pf);
 
269
#endif
 
270
                if (frame->pf) {
 
271
#if LAPB_DEBUG > 0
 
272
                        printk(KERN_DEBUG "lapb: (%p) S2 -> S0\n", lapb->dev);
 
273
#endif
 
274
                        lapb->state = LAPB_STATE_0;
 
275
                        lapb_start_t1timer(lapb);
 
276
                        lapb_stop_t2timer(lapb);
 
277
                        lapb_disconnect_confirmation(lapb, LAPB_OK);
 
278
                }
 
279
                break;
 
280
 
 
281
        case LAPB_DM:
 
282
#if LAPB_DEBUG > 1
 
283
                printk(KERN_DEBUG "lapb: (%p) S2 RX DM(%d)\n",
 
284
                       lapb->dev, frame->pf);
 
285
#endif
 
286
                if (frame->pf) {
 
287
#if LAPB_DEBUG > 0
 
288
                        printk(KERN_DEBUG "lapb: (%p) S2 -> S0\n", lapb->dev);
 
289
#endif
 
290
                        lapb->state = LAPB_STATE_0;
 
291
                        lapb_start_t1timer(lapb);
 
292
                        lapb_stop_t2timer(lapb);
 
293
                        lapb_disconnect_confirmation(lapb, LAPB_NOTCONNECTED);
 
294
                }
 
295
                break;
 
296
 
 
297
        case LAPB_I:
 
298
        case LAPB_REJ:
 
299
        case LAPB_RNR:
 
300
        case LAPB_RR:
 
301
#if LAPB_DEBUG > 1
 
302
                printk(KERN_DEBUG "lapb: (%p) S2 RX {I,REJ,RNR,RR}(%d)\n",
 
303
                       lapb->dev, frame->pf);
 
304
                printk(KERN_DEBUG "lapb: (%p) S2 RX DM(%d)\n",
 
305
                       lapb->dev, frame->pf);
 
306
#endif
 
307
                if (frame->pf)
258
308
                        lapb_send_control(lapb, LAPB_DM, frame->pf,
259
309
                                          LAPB_RESPONSE);
260
 
                        break;
261
 
 
262
 
                case LAPB_DISC:
263
 
#if LAPB_DEBUG > 1
264
 
                        printk(KERN_DEBUG "lapb: (%p) S2 RX DISC(%d)\n",
265
 
                               lapb->dev, frame->pf);
266
 
                        printk(KERN_DEBUG "lapb: (%p) S2 TX UA(%d)\n",
267
 
                               lapb->dev, frame->pf);
268
 
#endif
269
 
                        lapb_send_control(lapb, LAPB_UA, frame->pf,
270
 
                                          LAPB_RESPONSE);
271
 
                        break;
272
 
 
273
 
                case LAPB_UA:
274
 
#if LAPB_DEBUG > 1
275
 
                        printk(KERN_DEBUG "lapb: (%p) S2 RX UA(%d)\n",
276
 
                               lapb->dev, frame->pf);
277
 
#endif
278
 
                        if (frame->pf) {
279
 
#if LAPB_DEBUG > 0
280
 
                                printk(KERN_DEBUG "lapb: (%p) S2 -> S0\n",
281
 
                                       lapb->dev);
282
 
#endif
283
 
                                lapb->state = LAPB_STATE_0;
284
 
                                lapb_start_t1timer(lapb);
285
 
                                lapb_stop_t2timer(lapb);
286
 
                                lapb_disconnect_confirmation(lapb, LAPB_OK);
287
 
                        }
288
 
                        break;
289
 
 
290
 
                case LAPB_DM:
291
 
#if LAPB_DEBUG > 1
292
 
                        printk(KERN_DEBUG "lapb: (%p) S2 RX DM(%d)\n",
293
 
                               lapb->dev, frame->pf);
294
 
#endif
295
 
                        if (frame->pf) {
296
 
#if LAPB_DEBUG > 0
297
 
                                printk(KERN_DEBUG "lapb: (%p) S2 -> S0\n",
298
 
                                       lapb->dev);
299
 
#endif
300
 
                                lapb->state = LAPB_STATE_0;
301
 
                                lapb_start_t1timer(lapb);
302
 
                                lapb_stop_t2timer(lapb);
303
 
                                lapb_disconnect_confirmation(lapb,
304
 
                                                             LAPB_NOTCONNECTED);
305
 
                        }
306
 
                        break;
307
 
 
308
 
                case LAPB_I:
309
 
                case LAPB_REJ:
310
 
                case LAPB_RNR:
311
 
                case LAPB_RR:
312
 
#if LAPB_DEBUG > 1
313
 
                        printk(KERN_DEBUG "lapb: (%p) S2 RX {I,REJ,RNR,RR}"
314
 
                               "(%d)\n", lapb->dev, frame->pf);
315
 
                        printk(KERN_DEBUG "lapb: (%p) S2 RX DM(%d)\n",
316
 
                               lapb->dev, frame->pf);
317
 
#endif
318
 
                        if (frame->pf)
319
 
                                lapb_send_control(lapb, LAPB_DM, frame->pf,
320
 
                                                  LAPB_RESPONSE);
321
 
                        break;
 
310
                break;
322
311
        }
323
312
 
324
313
        kfree_skb(skb);
336
325
                                                     LAPB_SMODULUS;
337
326
 
338
327
        switch (frame->type) {
339
 
                case LAPB_SABM:
340
 
#if LAPB_DEBUG > 1
341
 
                        printk(KERN_DEBUG "lapb: (%p) S3 RX SABM(%d)\n",
342
 
                               lapb->dev, frame->pf);
343
 
#endif
344
 
                        if (lapb->mode & LAPB_EXTENDED) {
345
 
#if LAPB_DEBUG > 1
346
 
                                printk(KERN_DEBUG "lapb: (%p) S3 TX DM(%d)\n",
347
 
                                       lapb->dev, frame->pf);
348
 
#endif
349
 
                                lapb_send_control(lapb, LAPB_DM, frame->pf,
350
 
                                                  LAPB_RESPONSE);
351
 
                        } else {
352
 
#if LAPB_DEBUG > 1
353
 
                                printk(KERN_DEBUG "lapb: (%p) S3 TX UA(%d)\n",
354
 
                                       lapb->dev, frame->pf);
355
 
#endif
356
 
                                lapb_send_control(lapb, LAPB_UA, frame->pf,
357
 
                                                  LAPB_RESPONSE);
358
 
                                lapb_stop_t1timer(lapb);
359
 
                                lapb_stop_t2timer(lapb);
360
 
                                lapb->condition = 0x00;
361
 
                                lapb->n2count   = 0;
362
 
                                lapb->vs        = 0;
363
 
                                lapb->vr        = 0;
364
 
                                lapb->va        = 0;
365
 
                                lapb_requeue_frames(lapb);
366
 
                        }
367
 
                        break;
368
 
 
369
 
                case LAPB_SABME:
370
 
#if LAPB_DEBUG > 1
371
 
                        printk(KERN_DEBUG "lapb: (%p) S3 RX SABME(%d)\n",
372
 
                               lapb->dev, frame->pf);
373
 
#endif
374
 
                        if (lapb->mode & LAPB_EXTENDED) {
375
 
#if LAPB_DEBUG > 1
376
 
                                printk(KERN_DEBUG "lapb: (%p) S3 TX UA(%d)\n",
377
 
                                       lapb->dev, frame->pf);
378
 
#endif
379
 
                                lapb_send_control(lapb, LAPB_UA, frame->pf,
380
 
                                                  LAPB_RESPONSE);
381
 
                                lapb_stop_t1timer(lapb);
382
 
                                lapb_stop_t2timer(lapb);
383
 
                                lapb->condition = 0x00;
384
 
                                lapb->n2count   = 0;
385
 
                                lapb->vs        = 0;
386
 
                                lapb->vr        = 0;
387
 
                                lapb->va        = 0;
388
 
                                lapb_requeue_frames(lapb);
389
 
                        } else {
390
 
#if LAPB_DEBUG > 1
391
 
                                printk(KERN_DEBUG "lapb: (%p) S3 TX DM(%d)\n",
392
 
                                       lapb->dev, frame->pf);
393
 
#endif
394
 
                                lapb_send_control(lapb, LAPB_DM, frame->pf,
395
 
                                                  LAPB_RESPONSE);
396
 
                        }
397
 
                        break;
398
 
 
399
 
                case LAPB_DISC:
400
 
#if LAPB_DEBUG > 1
401
 
                        printk(KERN_DEBUG "lapb: (%p) S3 RX DISC(%d)\n",
402
 
                               lapb->dev, frame->pf);
403
 
#endif
404
 
#if LAPB_DEBUG > 0
405
 
                        printk(KERN_DEBUG "lapb: (%p) S3 -> S0\n",
406
 
                               lapb->dev);
407
 
#endif
408
 
                        lapb_clear_queues(lapb);
409
 
                        lapb_send_control(lapb, LAPB_UA, frame->pf,
410
 
                                          LAPB_RESPONSE);
411
 
                        lapb_start_t1timer(lapb);
412
 
                        lapb_stop_t2timer(lapb);
413
 
                        lapb->state = LAPB_STATE_0;
414
 
                        lapb_disconnect_indication(lapb, LAPB_OK);
415
 
                        break;
416
 
 
417
 
                case LAPB_DM:
418
 
#if LAPB_DEBUG > 1
419
 
                        printk(KERN_DEBUG "lapb: (%p) S3 RX DM(%d)\n",
420
 
                               lapb->dev, frame->pf);
421
 
#endif
422
 
#if LAPB_DEBUG > 0
423
 
                        printk(KERN_DEBUG "lapb: (%p) S3 -> S0\n",
424
 
                               lapb->dev);
425
 
#endif
426
 
                        lapb_clear_queues(lapb);
427
 
                        lapb->state = LAPB_STATE_0;
428
 
                        lapb_start_t1timer(lapb);
429
 
                        lapb_stop_t2timer(lapb);
430
 
                        lapb_disconnect_indication(lapb, LAPB_NOTCONNECTED);
431
 
                        break;
432
 
 
433
 
                case LAPB_RNR:
434
 
#if LAPB_DEBUG > 1
435
 
                        printk(KERN_DEBUG "lapb: (%p) S3 RX RNR(%d) R%d\n",
436
 
                               lapb->dev, frame->pf, frame->nr);
437
 
#endif
438
 
                        lapb->condition |= LAPB_PEER_RX_BUSY_CONDITION;
439
 
                        lapb_check_need_response(lapb, frame->cr, frame->pf);
440
 
                        if (lapb_validate_nr(lapb, frame->nr)) {
441
 
                                lapb_check_iframes_acked(lapb, frame->nr);
442
 
                        } else {
443
 
                                lapb->frmr_data = *frame;
444
 
                                lapb->frmr_type = LAPB_FRMR_Z;
445
 
                                lapb_transmit_frmr(lapb);
446
 
#if LAPB_DEBUG > 0
447
 
                                printk(KERN_DEBUG "lapb: (%p) S3 -> S4\n",
448
 
                                       lapb->dev);
449
 
#endif
450
 
                                lapb_start_t1timer(lapb);
451
 
                                lapb_stop_t2timer(lapb);
452
 
                                lapb->state   = LAPB_STATE_4;
453
 
                                lapb->n2count = 0;
454
 
                        }
455
 
                        break;
456
 
 
457
 
                case LAPB_RR:
458
 
#if LAPB_DEBUG > 1
459
 
                        printk(KERN_DEBUG "lapb: (%p) S3 RX RR(%d) R%d\n",
460
 
                               lapb->dev, frame->pf, frame->nr);
461
 
#endif
462
 
                        lapb->condition &= ~LAPB_PEER_RX_BUSY_CONDITION;
463
 
                        lapb_check_need_response(lapb, frame->cr, frame->pf);
464
 
                        if (lapb_validate_nr(lapb, frame->nr)) {
465
 
                                lapb_check_iframes_acked(lapb, frame->nr);
466
 
                        } else {
467
 
                                lapb->frmr_data = *frame;
468
 
                                lapb->frmr_type = LAPB_FRMR_Z;
469
 
                                lapb_transmit_frmr(lapb);
470
 
#if LAPB_DEBUG > 0
471
 
                                printk(KERN_DEBUG "lapb: (%p) S3 -> S4\n",
472
 
                                       lapb->dev);
473
 
#endif
474
 
                                lapb_start_t1timer(lapb);
475
 
                                lapb_stop_t2timer(lapb);
476
 
                                lapb->state   = LAPB_STATE_4;
477
 
                                lapb->n2count = 0;
478
 
                        }
479
 
                        break;
480
 
 
481
 
                case LAPB_REJ:
482
 
#if LAPB_DEBUG > 1
483
 
                        printk(KERN_DEBUG "lapb: (%p) S3 RX REJ(%d) R%d\n",
484
 
                               lapb->dev, frame->pf, frame->nr);
485
 
#endif
486
 
                        lapb->condition &= ~LAPB_PEER_RX_BUSY_CONDITION;
487
 
                        lapb_check_need_response(lapb, frame->cr, frame->pf);
488
 
                        if (lapb_validate_nr(lapb, frame->nr)) {
489
 
                                lapb_frames_acked(lapb, frame->nr);
490
 
                                lapb_stop_t1timer(lapb);
491
 
                                lapb->n2count = 0;
492
 
                                lapb_requeue_frames(lapb);
493
 
                        } else {
494
 
                                lapb->frmr_data = *frame;
495
 
                                lapb->frmr_type = LAPB_FRMR_Z;
496
 
                                lapb_transmit_frmr(lapb);
497
 
#if LAPB_DEBUG > 0
498
 
                                printk(KERN_DEBUG "lapb: (%p) S3 -> S4\n",
499
 
                                       lapb->dev);
500
 
#endif
501
 
                                lapb_start_t1timer(lapb);
502
 
                                lapb_stop_t2timer(lapb);
503
 
                                lapb->state   = LAPB_STATE_4;
504
 
                                lapb->n2count = 0;
505
 
                        }
506
 
                        break;
507
 
 
508
 
                case LAPB_I:
509
 
#if LAPB_DEBUG > 1
510
 
                        printk(KERN_DEBUG "lapb: (%p) S3 RX I(%d) S%d R%d\n",
511
 
                               lapb->dev, frame->pf, frame->ns, frame->nr);
512
 
#endif
513
 
                        if (!lapb_validate_nr(lapb, frame->nr)) {
514
 
                                lapb->frmr_data = *frame;
515
 
                                lapb->frmr_type = LAPB_FRMR_Z;
516
 
                                lapb_transmit_frmr(lapb);
517
 
#if LAPB_DEBUG > 0
518
 
                                printk(KERN_DEBUG "lapb: (%p) S3 -> S4\n",
519
 
                                       lapb->dev);
520
 
#endif
521
 
                                lapb_start_t1timer(lapb);
522
 
                                lapb_stop_t2timer(lapb);
523
 
                                lapb->state   = LAPB_STATE_4;
524
 
                                lapb->n2count = 0;
 
328
        case LAPB_SABM:
 
329
#if LAPB_DEBUG > 1
 
330
                printk(KERN_DEBUG "lapb: (%p) S3 RX SABM(%d)\n",
 
331
                       lapb->dev, frame->pf);
 
332
#endif
 
333
                if (lapb->mode & LAPB_EXTENDED) {
 
334
#if LAPB_DEBUG > 1
 
335
                        printk(KERN_DEBUG "lapb: (%p) S3 TX DM(%d)\n",
 
336
                               lapb->dev, frame->pf);
 
337
#endif
 
338
                        lapb_send_control(lapb, LAPB_DM, frame->pf,
 
339
                                          LAPB_RESPONSE);
 
340
                } else {
 
341
#if LAPB_DEBUG > 1
 
342
                        printk(KERN_DEBUG "lapb: (%p) S3 TX UA(%d)\n",
 
343
                               lapb->dev, frame->pf);
 
344
#endif
 
345
                        lapb_send_control(lapb, LAPB_UA, frame->pf,
 
346
                                          LAPB_RESPONSE);
 
347
                        lapb_stop_t1timer(lapb);
 
348
                        lapb_stop_t2timer(lapb);
 
349
                        lapb->condition = 0x00;
 
350
                        lapb->n2count   = 0;
 
351
                        lapb->vs        = 0;
 
352
                        lapb->vr        = 0;
 
353
                        lapb->va        = 0;
 
354
                        lapb_requeue_frames(lapb);
 
355
                }
 
356
                break;
 
357
 
 
358
        case LAPB_SABME:
 
359
#if LAPB_DEBUG > 1
 
360
                printk(KERN_DEBUG "lapb: (%p) S3 RX SABME(%d)\n",
 
361
                       lapb->dev, frame->pf);
 
362
#endif
 
363
                if (lapb->mode & LAPB_EXTENDED) {
 
364
#if LAPB_DEBUG > 1
 
365
                        printk(KERN_DEBUG "lapb: (%p) S3 TX UA(%d)\n",
 
366
                               lapb->dev, frame->pf);
 
367
#endif
 
368
                        lapb_send_control(lapb, LAPB_UA, frame->pf,
 
369
                                          LAPB_RESPONSE);
 
370
                        lapb_stop_t1timer(lapb);
 
371
                        lapb_stop_t2timer(lapb);
 
372
                        lapb->condition = 0x00;
 
373
                        lapb->n2count   = 0;
 
374
                        lapb->vs        = 0;
 
375
                        lapb->vr        = 0;
 
376
                        lapb->va        = 0;
 
377
                        lapb_requeue_frames(lapb);
 
378
                } else {
 
379
#if LAPB_DEBUG > 1
 
380
                        printk(KERN_DEBUG "lapb: (%p) S3 TX DM(%d)\n",
 
381
                               lapb->dev, frame->pf);
 
382
#endif
 
383
                        lapb_send_control(lapb, LAPB_DM, frame->pf,
 
384
                                          LAPB_RESPONSE);
 
385
                }
 
386
                break;
 
387
 
 
388
        case LAPB_DISC:
 
389
#if LAPB_DEBUG > 1
 
390
                printk(KERN_DEBUG "lapb: (%p) S3 RX DISC(%d)\n",
 
391
                       lapb->dev, frame->pf);
 
392
#endif
 
393
#if LAPB_DEBUG > 0
 
394
                printk(KERN_DEBUG "lapb: (%p) S3 -> S0\n", lapb->dev);
 
395
#endif
 
396
                lapb_clear_queues(lapb);
 
397
                lapb_send_control(lapb, LAPB_UA, frame->pf, LAPB_RESPONSE);
 
398
                lapb_start_t1timer(lapb);
 
399
                lapb_stop_t2timer(lapb);
 
400
                lapb->state = LAPB_STATE_0;
 
401
                lapb_disconnect_indication(lapb, LAPB_OK);
 
402
                break;
 
403
 
 
404
        case LAPB_DM:
 
405
#if LAPB_DEBUG > 1
 
406
                printk(KERN_DEBUG "lapb: (%p) S3 RX DM(%d)\n",
 
407
                       lapb->dev, frame->pf);
 
408
#endif
 
409
#if LAPB_DEBUG > 0
 
410
                printk(KERN_DEBUG "lapb: (%p) S3 -> S0\n", lapb->dev);
 
411
#endif
 
412
                lapb_clear_queues(lapb);
 
413
                lapb->state = LAPB_STATE_0;
 
414
                lapb_start_t1timer(lapb);
 
415
                lapb_stop_t2timer(lapb);
 
416
                lapb_disconnect_indication(lapb, LAPB_NOTCONNECTED);
 
417
                break;
 
418
 
 
419
        case LAPB_RNR:
 
420
#if LAPB_DEBUG > 1
 
421
                printk(KERN_DEBUG "lapb: (%p) S3 RX RNR(%d) R%d\n",
 
422
                       lapb->dev, frame->pf, frame->nr);
 
423
#endif
 
424
                lapb->condition |= LAPB_PEER_RX_BUSY_CONDITION;
 
425
                lapb_check_need_response(lapb, frame->cr, frame->pf);
 
426
                if (lapb_validate_nr(lapb, frame->nr)) {
 
427
                        lapb_check_iframes_acked(lapb, frame->nr);
 
428
                } else {
 
429
                        lapb->frmr_data = *frame;
 
430
                        lapb->frmr_type = LAPB_FRMR_Z;
 
431
                        lapb_transmit_frmr(lapb);
 
432
#if LAPB_DEBUG > 0
 
433
                        printk(KERN_DEBUG "lapb: (%p) S3 -> S4\n", lapb->dev);
 
434
#endif
 
435
                        lapb_start_t1timer(lapb);
 
436
                        lapb_stop_t2timer(lapb);
 
437
                        lapb->state   = LAPB_STATE_4;
 
438
                        lapb->n2count = 0;
 
439
                }
 
440
                break;
 
441
 
 
442
        case LAPB_RR:
 
443
#if LAPB_DEBUG > 1
 
444
                printk(KERN_DEBUG "lapb: (%p) S3 RX RR(%d) R%d\n",
 
445
                       lapb->dev, frame->pf, frame->nr);
 
446
#endif
 
447
                lapb->condition &= ~LAPB_PEER_RX_BUSY_CONDITION;
 
448
                lapb_check_need_response(lapb, frame->cr, frame->pf);
 
449
                if (lapb_validate_nr(lapb, frame->nr)) {
 
450
                        lapb_check_iframes_acked(lapb, frame->nr);
 
451
                } else {
 
452
                        lapb->frmr_data = *frame;
 
453
                        lapb->frmr_type = LAPB_FRMR_Z;
 
454
                        lapb_transmit_frmr(lapb);
 
455
#if LAPB_DEBUG > 0
 
456
                        printk(KERN_DEBUG "lapb: (%p) S3 -> S4\n", lapb->dev);
 
457
#endif
 
458
                        lapb_start_t1timer(lapb);
 
459
                        lapb_stop_t2timer(lapb);
 
460
                        lapb->state   = LAPB_STATE_4;
 
461
                        lapb->n2count = 0;
 
462
                }
 
463
                break;
 
464
 
 
465
        case LAPB_REJ:
 
466
#if LAPB_DEBUG > 1
 
467
                printk(KERN_DEBUG "lapb: (%p) S3 RX REJ(%d) R%d\n",
 
468
                       lapb->dev, frame->pf, frame->nr);
 
469
#endif
 
470
                lapb->condition &= ~LAPB_PEER_RX_BUSY_CONDITION;
 
471
                lapb_check_need_response(lapb, frame->cr, frame->pf);
 
472
                if (lapb_validate_nr(lapb, frame->nr)) {
 
473
                        lapb_frames_acked(lapb, frame->nr);
 
474
                        lapb_stop_t1timer(lapb);
 
475
                        lapb->n2count = 0;
 
476
                        lapb_requeue_frames(lapb);
 
477
                } else {
 
478
                        lapb->frmr_data = *frame;
 
479
                        lapb->frmr_type = LAPB_FRMR_Z;
 
480
                        lapb_transmit_frmr(lapb);
 
481
#if LAPB_DEBUG > 0
 
482
                        printk(KERN_DEBUG "lapb: (%p) S3 -> S4\n", lapb->dev);
 
483
#endif
 
484
                        lapb_start_t1timer(lapb);
 
485
                        lapb_stop_t2timer(lapb);
 
486
                        lapb->state   = LAPB_STATE_4;
 
487
                        lapb->n2count = 0;
 
488
                }
 
489
                break;
 
490
 
 
491
        case LAPB_I:
 
492
#if LAPB_DEBUG > 1
 
493
                printk(KERN_DEBUG "lapb: (%p) S3 RX I(%d) S%d R%d\n",
 
494
                       lapb->dev, frame->pf, frame->ns, frame->nr);
 
495
#endif
 
496
                if (!lapb_validate_nr(lapb, frame->nr)) {
 
497
                        lapb->frmr_data = *frame;
 
498
                        lapb->frmr_type = LAPB_FRMR_Z;
 
499
                        lapb_transmit_frmr(lapb);
 
500
#if LAPB_DEBUG > 0
 
501
                        printk(KERN_DEBUG "lapb: (%p) S3 -> S4\n", lapb->dev);
 
502
#endif
 
503
                        lapb_start_t1timer(lapb);
 
504
                        lapb_stop_t2timer(lapb);
 
505
                        lapb->state   = LAPB_STATE_4;
 
506
                        lapb->n2count = 0;
 
507
                        break;
 
508
                }
 
509
                if (lapb->condition & LAPB_PEER_RX_BUSY_CONDITION)
 
510
                        lapb_frames_acked(lapb, frame->nr);
 
511
                else
 
512
                        lapb_check_iframes_acked(lapb, frame->nr);
 
513
 
 
514
                if (frame->ns == lapb->vr) {
 
515
                        int cn;
 
516
                        cn = lapb_data_indication(lapb, skb);
 
517
                        queued = 1;
 
518
                        /*
 
519
                         * If upper layer has dropped the frame, we
 
520
                         * basically ignore any further protocol
 
521
                         * processing. This will cause the peer
 
522
                         * to re-transmit the frame later like
 
523
                         * a frame lost on the wire.
 
524
                         */
 
525
                        if (cn == NET_RX_DROP) {
 
526
                                printk(KERN_DEBUG "LAPB: rx congestion\n");
525
527
                                break;
526
528
                        }
527
 
                        if (lapb->condition & LAPB_PEER_RX_BUSY_CONDITION)
528
 
                                lapb_frames_acked(lapb, frame->nr);
529
 
                        else
530
 
                                lapb_check_iframes_acked(lapb, frame->nr);
531
 
 
532
 
                        if (frame->ns == lapb->vr) {
533
 
                                int cn;
534
 
                                cn = lapb_data_indication(lapb, skb);
535
 
                                queued = 1;
536
 
                                /*
537
 
                                 * If upper layer has dropped the frame, we
538
 
                                 * basically ignore any further protocol
539
 
                                 * processing. This will cause the peer
540
 
                                 * to re-transmit the frame later like
541
 
                                 * a frame lost on the wire.
542
 
                                 */
543
 
                                if (cn == NET_RX_DROP) {
544
 
                                        printk(KERN_DEBUG
545
 
                                               "LAPB: rx congestion\n");
546
 
                                        break;
 
529
                        lapb->vr = (lapb->vr + 1) % modulus;
 
530
                        lapb->condition &= ~LAPB_REJECT_CONDITION;
 
531
                        if (frame->pf)
 
532
                                lapb_enquiry_response(lapb);
 
533
                        else {
 
534
                                if (!(lapb->condition &
 
535
                                      LAPB_ACK_PENDING_CONDITION)) {
 
536
                                        lapb->condition |= LAPB_ACK_PENDING_CONDITION;
 
537
                                        lapb_start_t2timer(lapb);
547
538
                                }
548
 
                                lapb->vr = (lapb->vr + 1) % modulus;
549
 
                                lapb->condition &= ~LAPB_REJECT_CONDITION;
 
539
                        }
 
540
                } else {
 
541
                        if (lapb->condition & LAPB_REJECT_CONDITION) {
550
542
                                if (frame->pf)
551
543
                                        lapb_enquiry_response(lapb);
552
 
                                else {
553
 
                                        if (!(lapb->condition &
554
 
                                              LAPB_ACK_PENDING_CONDITION)) {
555
 
                                                lapb->condition |= LAPB_ACK_PENDING_CONDITION;
556
 
                                                lapb_start_t2timer(lapb);
557
 
                                        }
558
 
                                }
559
544
                        } else {
560
 
                                if (lapb->condition & LAPB_REJECT_CONDITION) {
561
 
                                        if (frame->pf)
562
 
                                                lapb_enquiry_response(lapb);
563
 
                                } else {
564
545
#if LAPB_DEBUG > 1
565
 
                                        printk(KERN_DEBUG
566
 
                                               "lapb: (%p) S3 TX REJ(%d) R%d\n",
567
 
                                               lapb->dev, frame->pf, lapb->vr);
 
546
                                printk(KERN_DEBUG
 
547
                                       "lapb: (%p) S3 TX REJ(%d) R%d\n",
 
548
                                       lapb->dev, frame->pf, lapb->vr);
568
549
#endif
569
 
                                        lapb->condition |= LAPB_REJECT_CONDITION;
570
 
                                        lapb_send_control(lapb, LAPB_REJ,
571
 
                                                          frame->pf,
572
 
                                                          LAPB_RESPONSE);
573
 
                                        lapb->condition &= ~LAPB_ACK_PENDING_CONDITION;
574
 
                                }
 
550
                                lapb->condition |= LAPB_REJECT_CONDITION;
 
551
                                lapb_send_control(lapb, LAPB_REJ, frame->pf,
 
552
                                                  LAPB_RESPONSE);
 
553
                                lapb->condition &= ~LAPB_ACK_PENDING_CONDITION;
575
554
                        }
576
 
                        break;
577
 
 
578
 
                case LAPB_FRMR:
579
 
#if LAPB_DEBUG > 1
580
 
                        printk(KERN_DEBUG "lapb: (%p) S3 RX FRMR(%d) %02X "
581
 
                               "%02X %02X %02X %02X\n", lapb->dev, frame->pf,
582
 
                               skb->data[0], skb->data[1], skb->data[2],
583
 
                               skb->data[3], skb->data[4]);
584
 
#endif
585
 
                        lapb_establish_data_link(lapb);
586
 
#if LAPB_DEBUG > 0
587
 
                        printk(KERN_DEBUG "lapb: (%p) S3 -> S1\n",
588
 
                               lapb->dev);
589
 
#endif
590
 
                        lapb_requeue_frames(lapb);
591
 
                        lapb->state = LAPB_STATE_1;
592
 
                        break;
593
 
 
594
 
                case LAPB_ILLEGAL:
595
 
#if LAPB_DEBUG > 1
596
 
                        printk(KERN_DEBUG "lapb: (%p) S3 RX ILLEGAL(%d)\n",
597
 
                               lapb->dev, frame->pf);
598
 
#endif
599
 
                        lapb->frmr_data = *frame;
600
 
                        lapb->frmr_type = LAPB_FRMR_W;
601
 
                        lapb_transmit_frmr(lapb);
602
 
#if LAPB_DEBUG > 0
603
 
                        printk(KERN_DEBUG "lapb: (%p) S3 -> S4\n", lapb->dev);
604
 
#endif
605
 
                        lapb_start_t1timer(lapb);
606
 
                        lapb_stop_t2timer(lapb);
607
 
                        lapb->state   = LAPB_STATE_4;
608
 
                        lapb->n2count = 0;
609
 
                        break;
 
555
                }
 
556
                break;
 
557
 
 
558
        case LAPB_FRMR:
 
559
#if LAPB_DEBUG > 1
 
560
                printk(KERN_DEBUG "lapb: (%p) S3 RX FRMR(%d) %02X "
 
561
                       "%02X %02X %02X %02X\n", lapb->dev, frame->pf,
 
562
                       skb->data[0], skb->data[1], skb->data[2],
 
563
                       skb->data[3], skb->data[4]);
 
564
#endif
 
565
                lapb_establish_data_link(lapb);
 
566
#if LAPB_DEBUG > 0
 
567
                printk(KERN_DEBUG "lapb: (%p) S3 -> S1\n", lapb->dev);
 
568
#endif
 
569
                lapb_requeue_frames(lapb);
 
570
                lapb->state = LAPB_STATE_1;
 
571
                break;
 
572
 
 
573
        case LAPB_ILLEGAL:
 
574
#if LAPB_DEBUG > 1
 
575
                printk(KERN_DEBUG "lapb: (%p) S3 RX ILLEGAL(%d)\n",
 
576
                       lapb->dev, frame->pf);
 
577
#endif
 
578
                lapb->frmr_data = *frame;
 
579
                lapb->frmr_type = LAPB_FRMR_W;
 
580
                lapb_transmit_frmr(lapb);
 
581
#if LAPB_DEBUG > 0
 
582
                printk(KERN_DEBUG "lapb: (%p) S3 -> S4\n", lapb->dev);
 
583
#endif
 
584
                lapb_start_t1timer(lapb);
 
585
                lapb_stop_t2timer(lapb);
 
586
                lapb->state   = LAPB_STATE_4;
 
587
                lapb->n2count = 0;
 
588
                break;
610
589
        }
611
590
 
612
591
        if (!queued)
621
600
                                struct lapb_frame *frame)
622
601
{
623
602
        switch (frame->type) {
624
 
                case LAPB_SABM:
625
 
#if LAPB_DEBUG > 1
626
 
                        printk(KERN_DEBUG "lapb: (%p) S4 RX SABM(%d)\n",
627
 
                               lapb->dev, frame->pf);
628
 
#endif
629
 
                        if (lapb->mode & LAPB_EXTENDED) {
630
 
#if LAPB_DEBUG > 1
631
 
                                printk(KERN_DEBUG "lapb: (%p) S4 TX DM(%d)\n",
632
 
                                       lapb->dev, frame->pf);
633
 
#endif
634
 
                                lapb_send_control(lapb, LAPB_DM, frame->pf,
635
 
                                                  LAPB_RESPONSE);
636
 
                        } else {
637
 
#if LAPB_DEBUG > 1
638
 
                                printk(KERN_DEBUG "lapb: (%p) S4 TX UA(%d)\n",
639
 
                                       lapb->dev, frame->pf);
 
603
        case LAPB_SABM:
 
604
#if LAPB_DEBUG > 1
 
605
                printk(KERN_DEBUG "lapb: (%p) S4 RX SABM(%d)\n",
 
606
                       lapb->dev, frame->pf);
 
607
#endif
 
608
                if (lapb->mode & LAPB_EXTENDED) {
 
609
#if LAPB_DEBUG > 1
 
610
                        printk(KERN_DEBUG "lapb: (%p) S4 TX DM(%d)\n",
 
611
                               lapb->dev, frame->pf);
 
612
#endif
 
613
                        lapb_send_control(lapb, LAPB_DM, frame->pf,
 
614
                                          LAPB_RESPONSE);
 
615
                } else {
 
616
#if LAPB_DEBUG > 1
 
617
                        printk(KERN_DEBUG "lapb: (%p) S4 TX UA(%d)\n",
 
618
                               lapb->dev, frame->pf);
640
619
#endif
641
620
#if LAPB_DEBUG > 0
642
 
                                printk(KERN_DEBUG "lapb: (%p) S4 -> S3\n",
643
 
                                       lapb->dev);
 
621
                        printk(KERN_DEBUG "lapb: (%p) S4 -> S3\n", lapb->dev);
644
622
#endif
645
 
                                lapb_send_control(lapb, LAPB_UA, frame->pf,
646
 
                                                  LAPB_RESPONSE);
647
 
                                lapb_stop_t1timer(lapb);
648
 
                                lapb_stop_t2timer(lapb);
649
 
                                lapb->state     = LAPB_STATE_3;
650
 
                                lapb->condition = 0x00;
651
 
                                lapb->n2count   = 0;
652
 
                                lapb->vs        = 0;
653
 
                                lapb->vr        = 0;
654
 
                                lapb->va        = 0;
655
 
                                lapb_connect_indication(lapb, LAPB_OK);
656
 
                        }
657
 
                        break;
 
623
                        lapb_send_control(lapb, LAPB_UA, frame->pf,
 
624
                                          LAPB_RESPONSE);
 
625
                        lapb_stop_t1timer(lapb);
 
626
                        lapb_stop_t2timer(lapb);
 
627
                        lapb->state     = LAPB_STATE_3;
 
628
                        lapb->condition = 0x00;
 
629
                        lapb->n2count   = 0;
 
630
                        lapb->vs        = 0;
 
631
                        lapb->vr        = 0;
 
632
                        lapb->va        = 0;
 
633
                        lapb_connect_indication(lapb, LAPB_OK);
 
634
                }
 
635
                break;
658
636
 
659
 
                case LAPB_SABME:
660
 
#if LAPB_DEBUG > 1
661
 
                        printk(KERN_DEBUG "lapb: (%p) S4 RX SABME(%d)\n",
 
637
        case LAPB_SABME:
 
638
#if LAPB_DEBUG > 1
 
639
                printk(KERN_DEBUG "lapb: (%p) S4 RX SABME(%d)\n",
 
640
                       lapb->dev, frame->pf);
 
641
#endif
 
642
                if (lapb->mode & LAPB_EXTENDED) {
 
643
#if LAPB_DEBUG > 1
 
644
                        printk(KERN_DEBUG "lapb: (%p) S4 TX UA(%d)\n",
662
645
                               lapb->dev, frame->pf);
663
646
#endif
664
 
                        if (lapb->mode & LAPB_EXTENDED) {
665
 
#if LAPB_DEBUG > 1
666
 
                                printk(KERN_DEBUG "lapb: (%p) S4 TX UA(%d)\n",
667
 
                                       lapb->dev, frame->pf);
668
 
#endif
669
647
#if LAPB_DEBUG > 0
670
 
                                printk(KERN_DEBUG "lapb: (%p) S4 -> S3\n",
671
 
                                       lapb->dev);
 
648
                        printk(KERN_DEBUG "lapb: (%p) S4 -> S3\n", lapb->dev);
672
649
#endif
673
 
                                lapb_send_control(lapb, LAPB_UA, frame->pf,
674
 
                                                  LAPB_RESPONSE);
675
 
                                lapb_stop_t1timer(lapb);
676
 
                                lapb_stop_t2timer(lapb);
677
 
                                lapb->state     = LAPB_STATE_3;
678
 
                                lapb->condition = 0x00;
679
 
                                lapb->n2count   = 0;
680
 
                                lapb->vs        = 0;
681
 
                                lapb->vr        = 0;
682
 
                                lapb->va        = 0;
683
 
                                lapb_connect_indication(lapb, LAPB_OK);
684
 
                        } else {
 
650
                        lapb_send_control(lapb, LAPB_UA, frame->pf,
 
651
                                          LAPB_RESPONSE);
 
652
                        lapb_stop_t1timer(lapb);
 
653
                        lapb_stop_t2timer(lapb);
 
654
                        lapb->state     = LAPB_STATE_3;
 
655
                        lapb->condition = 0x00;
 
656
                        lapb->n2count   = 0;
 
657
                        lapb->vs        = 0;
 
658
                        lapb->vr        = 0;
 
659
                        lapb->va        = 0;
 
660
                        lapb_connect_indication(lapb, LAPB_OK);
 
661
                } else {
685
662
#if LAPB_DEBUG > 1
686
 
                                printk(KERN_DEBUG "lapb: (%p) S4 TX DM(%d)\n",
687
 
                                       lapb->dev, frame->pf);
 
663
                        printk(KERN_DEBUG "lapb: (%p) S4 TX DM(%d)\n",
 
664
                               lapb->dev, frame->pf);
688
665
#endif
689
 
                                lapb_send_control(lapb, LAPB_DM, frame->pf,
690
 
                                                  LAPB_RESPONSE);
691
 
                        }
692
 
                        break;
 
666
                        lapb_send_control(lapb, LAPB_DM, frame->pf,
 
667
                                          LAPB_RESPONSE);
 
668
                }
 
669
                break;
693
670
        }
694
671
 
695
672
        kfree_skb(skb);