[PATCH] iseries_veth: Replace lock-protected atomic with an ordinary variable
[linux-2.6] / drivers / net / iseries_veth.c
1 /* File veth.c created by Kyle A. Lucke on Mon Aug  7 2000. */
2 /*
3  * IBM eServer iSeries Virtual Ethernet Device Driver
4  * Copyright (C) 2001 Kyle A. Lucke (klucke@us.ibm.com), IBM Corp.
5  * Substantially cleaned up by:
6  * Copyright (C) 2003 David Gibson <dwg@au1.ibm.com>, IBM Corporation.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License as
10  * published by the Free Software Foundation; either version 2 of the
11  * License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
21  * USA
22  *
23  *
24  * This module implements the virtual ethernet device for iSeries LPAR
25  * Linux.  It uses hypervisor message passing to implement an
26  * ethernet-like network device communicating between partitions on
27  * the iSeries.
28  *
29  * The iSeries LPAR hypervisor currently allows for up to 16 different
30  * virtual ethernets.  These are all dynamically configurable on
31  * OS/400 partitions, but dynamic configuration is not supported under
32  * Linux yet.  An ethXX network device will be created for each
33  * virtual ethernet this partition is connected to.
34  *
35  * - This driver is responsible for routing packets to and from other
36  *   partitions.  The MAC addresses used by the virtual ethernets
37  *   contains meaning and must not be modified.
38  *
39  * - Having 2 virtual ethernets to the same remote partition DOES NOT
40  *   double the available bandwidth.  The 2 devices will share the
41  *   available hypervisor bandwidth.
42  *
43  * - If you send a packet to your own mac address, it will just be
44  *   dropped, you won't get it on the receive side.
45  *
46  * - Multicast is implemented by sending the frame frame to every
47  *   other partition.  It is the responsibility of the receiving
48  *   partition to filter the addresses desired.
49  *
50  * Tunable parameters:
51  *
52  * VETH_NUMBUFFERS: This compile time option defaults to 120.  It
53  * controls how much memory Linux will allocate per remote partition
54  * it is communicating with.  It can be thought of as the maximum
55  * number of packets outstanding to a remote partition at a time.
56  */
57
58 #include <linux/config.h>
59 #include <linux/module.h>
60 #include <linux/version.h>
61 #include <linux/types.h>
62 #include <linux/errno.h>
63 #include <linux/ioport.h>
64 #include <linux/kernel.h>
65 #include <linux/netdevice.h>
66 #include <linux/etherdevice.h>
67 #include <linux/skbuff.h>
68 #include <linux/init.h>
69 #include <linux/delay.h>
70 #include <linux/mm.h>
71 #include <linux/ethtool.h>
72 #include <asm/iSeries/mf.h>
73 #include <asm/iSeries/iSeries_pci.h>
74 #include <asm/uaccess.h>
75
76 #include <asm/iSeries/HvLpConfig.h>
77 #include <asm/iSeries/HvTypes.h>
78 #include <asm/iSeries/HvLpEvent.h>
79 #include <asm/iommu.h>
80 #include <asm/vio.h>
81
82 #undef DEBUG
83
84 #include "iseries_veth.h"
85
86 MODULE_AUTHOR("Kyle Lucke <klucke@us.ibm.com>");
87 MODULE_DESCRIPTION("iSeries Virtual ethernet driver");
88 MODULE_LICENSE("GPL");
89
90 #define VETH_NUMBUFFERS         (120)
91 #define VETH_ACKTIMEOUT         (1000000) /* microseconds */
92 #define VETH_MAX_MCAST          (12)
93
94 #define VETH_MAX_MTU            (9000)
95
96 #if VETH_NUMBUFFERS < 10
97 #define ACK_THRESHOLD           (1)
98 #elif VETH_NUMBUFFERS < 20
99 #define ACK_THRESHOLD           (4)
100 #elif VETH_NUMBUFFERS < 40
101 #define ACK_THRESHOLD           (10)
102 #else
103 #define ACK_THRESHOLD           (20)
104 #endif
105
106 #define VETH_STATE_SHUTDOWN     (0x0001)
107 #define VETH_STATE_OPEN         (0x0002)
108 #define VETH_STATE_RESET        (0x0004)
109 #define VETH_STATE_SENTMON      (0x0008)
110 #define VETH_STATE_SENTCAPS     (0x0010)
111 #define VETH_STATE_GOTCAPACK    (0x0020)
112 #define VETH_STATE_GOTCAPS      (0x0040)
113 #define VETH_STATE_SENTCAPACK   (0x0080)
114 #define VETH_STATE_READY        (0x0100)
115
116 struct veth_msg {
117         struct veth_msg *next;
118         struct VethFramesData data;
119         int token;
120         int in_use;
121         struct sk_buff *skb;
122         struct device *dev;
123 };
124
125 struct veth_lpar_connection {
126         HvLpIndex remote_lp;
127         struct work_struct statemachine_wq;
128         struct veth_msg *msgs;
129         int num_events;
130         struct VethCapData local_caps;
131
132         struct timer_list ack_timer;
133
134         spinlock_t lock;
135         unsigned long state;
136         HvLpInstanceId src_inst;
137         HvLpInstanceId dst_inst;
138         struct VethLpEvent cap_event, cap_ack_event;
139         u16 pending_acks[VETH_MAX_ACKS_PER_MSG];
140         u32 num_pending_acks;
141
142         int num_ack_events;
143         struct VethCapData remote_caps;
144         u32 ack_timeout;
145
146         struct veth_msg *msg_stack_head;
147 };
148
149 struct veth_port {
150         struct device *dev;
151         struct net_device_stats stats;
152         u64 mac_addr;
153         HvLpIndexMap lpar_map;
154
155         spinlock_t pending_gate;
156         struct sk_buff *pending_skb;
157         HvLpIndexMap pending_lpmask;
158
159         rwlock_t mcast_gate;
160         int promiscuous;
161         int num_mcast;
162         u64 mcast_addr[VETH_MAX_MCAST];
163 };
164
165 static HvLpIndex this_lp;
166 static struct veth_lpar_connection *veth_cnx[HVMAXARCHITECTEDLPS]; /* = 0 */
167 static struct net_device *veth_dev[HVMAXARCHITECTEDVIRTUALLANS]; /* = 0 */
168
169 static int veth_start_xmit(struct sk_buff *skb, struct net_device *dev);
170 static void veth_recycle_msg(struct veth_lpar_connection *, struct veth_msg *);
171 static void veth_flush_pending(struct veth_lpar_connection *cnx);
172 static void veth_receive(struct veth_lpar_connection *, struct VethLpEvent *);
173 static void veth_timed_ack(unsigned long connectionPtr);
174
175 /*
176  * Utility functions
177  */
178
179 #define veth_info(fmt, args...) \
180         printk(KERN_INFO "iseries_veth: " fmt, ## args)
181
182 #define veth_error(fmt, args...) \
183         printk(KERN_ERR "iseries_veth: Error: " fmt, ## args)
184
185 #ifdef DEBUG
186 #define veth_debug(fmt, args...) \
187         printk(KERN_DEBUG "iseries_veth: " fmt, ## args)
188 #else
189 #define veth_debug(fmt, args...) do {} while (0)
190 #endif
191
192 /* You must hold the connection's lock when you call this function. */
193 static inline void veth_stack_push(struct veth_lpar_connection *cnx,
194                                    struct veth_msg *msg)
195 {
196         msg->next = cnx->msg_stack_head;
197         cnx->msg_stack_head = msg;
198 }
199
200 /* You must hold the connection's lock when you call this function. */
201 static inline struct veth_msg *veth_stack_pop(struct veth_lpar_connection *cnx)
202 {
203         struct veth_msg *msg;
204
205         msg = cnx->msg_stack_head;
206         if (msg)
207                 cnx->msg_stack_head = cnx->msg_stack_head->next;
208
209         return msg;
210 }
211
212 static inline HvLpEvent_Rc
213 veth_signalevent(struct veth_lpar_connection *cnx, u16 subtype,
214                  HvLpEvent_AckInd ackind, HvLpEvent_AckType acktype,
215                  u64 token,
216                  u64 data1, u64 data2, u64 data3, u64 data4, u64 data5)
217 {
218         return HvCallEvent_signalLpEventFast(cnx->remote_lp,
219                                              HvLpEvent_Type_VirtualLan,
220                                              subtype, ackind, acktype,
221                                              cnx->src_inst,
222                                              cnx->dst_inst,
223                                              token, data1, data2, data3,
224                                              data4, data5);
225 }
226
227 static inline HvLpEvent_Rc veth_signaldata(struct veth_lpar_connection *cnx,
228                                            u16 subtype, u64 token, void *data)
229 {
230         u64 *p = (u64 *) data;
231
232         return veth_signalevent(cnx, subtype, HvLpEvent_AckInd_NoAck,
233                                 HvLpEvent_AckType_ImmediateAck,
234                                 token, p[0], p[1], p[2], p[3], p[4]);
235 }
236
237 struct veth_allocation {
238         struct completion c;
239         int num;
240 };
241
242 static void veth_complete_allocation(void *parm, int number)
243 {
244         struct veth_allocation *vc = (struct veth_allocation *)parm;
245
246         vc->num = number;
247         complete(&vc->c);
248 }
249
250 static int veth_allocate_events(HvLpIndex rlp, int number)
251 {
252         struct veth_allocation vc = { COMPLETION_INITIALIZER(vc.c), 0 };
253
254         mf_allocate_lp_events(rlp, HvLpEvent_Type_VirtualLan,
255                             sizeof(struct VethLpEvent), number,
256                             &veth_complete_allocation, &vc);
257         wait_for_completion(&vc.c);
258
259         return vc.num;
260 }
261
262 /*
263  * LPAR connection code
264  */
265
266 static inline void veth_kick_statemachine(struct veth_lpar_connection *cnx)
267 {
268         schedule_work(&cnx->statemachine_wq);
269 }
270
271 static void veth_take_cap(struct veth_lpar_connection *cnx,
272                           struct VethLpEvent *event)
273 {
274         unsigned long flags;
275
276         spin_lock_irqsave(&cnx->lock, flags);
277         /* Receiving caps may mean the other end has just come up, so
278          * we need to reload the instance ID of the far end */
279         cnx->dst_inst =
280                 HvCallEvent_getTargetLpInstanceId(cnx->remote_lp,
281                                                   HvLpEvent_Type_VirtualLan);
282
283         if (cnx->state & VETH_STATE_GOTCAPS) {
284                 veth_error("Received a second capabilities from LPAR %d.\n",
285                            cnx->remote_lp);
286                 event->base_event.xRc = HvLpEvent_Rc_BufferNotAvailable;
287                 HvCallEvent_ackLpEvent((struct HvLpEvent *) event);
288         } else {
289                 memcpy(&cnx->cap_event, event, sizeof(cnx->cap_event));
290                 cnx->state |= VETH_STATE_GOTCAPS;
291                 veth_kick_statemachine(cnx);
292         }
293         spin_unlock_irqrestore(&cnx->lock, flags);
294 }
295
296 static void veth_take_cap_ack(struct veth_lpar_connection *cnx,
297                               struct VethLpEvent *event)
298 {
299         unsigned long flags;
300
301         spin_lock_irqsave(&cnx->lock, flags);
302         if (cnx->state & VETH_STATE_GOTCAPACK) {
303                 veth_error("Received a second capabilities ack from LPAR %d.\n",
304                            cnx->remote_lp);
305         } else {
306                 memcpy(&cnx->cap_ack_event, event,
307                        sizeof(&cnx->cap_ack_event));
308                 cnx->state |= VETH_STATE_GOTCAPACK;
309                 veth_kick_statemachine(cnx);
310         }
311         spin_unlock_irqrestore(&cnx->lock, flags);
312 }
313
314 static void veth_take_monitor_ack(struct veth_lpar_connection *cnx,
315                                   struct VethLpEvent *event)
316 {
317         unsigned long flags;
318
319         spin_lock_irqsave(&cnx->lock, flags);
320         veth_debug("cnx %d: lost connection.\n", cnx->remote_lp);
321
322         /* Avoid kicking the statemachine once we're shutdown.
323          * It's unnecessary and it could break veth_stop_connection(). */
324
325         if (! (cnx->state & VETH_STATE_SHUTDOWN)) {
326                 cnx->state |= VETH_STATE_RESET;
327                 veth_kick_statemachine(cnx);
328         }
329         spin_unlock_irqrestore(&cnx->lock, flags);
330 }
331
332 static void veth_handle_ack(struct VethLpEvent *event)
333 {
334         HvLpIndex rlp = event->base_event.xTargetLp;
335         struct veth_lpar_connection *cnx = veth_cnx[rlp];
336
337         BUG_ON(! cnx);
338
339         switch (event->base_event.xSubtype) {
340         case VethEventTypeCap:
341                 veth_take_cap_ack(cnx, event);
342                 break;
343         case VethEventTypeMonitor:
344                 veth_take_monitor_ack(cnx, event);
345                 break;
346         default:
347                 veth_error("Unknown ack type %d from LPAR %d.\n",
348                                 event->base_event.xSubtype, rlp);
349         };
350 }
351
352 static void veth_handle_int(struct VethLpEvent *event)
353 {
354         HvLpIndex rlp = event->base_event.xSourceLp;
355         struct veth_lpar_connection *cnx = veth_cnx[rlp];
356         unsigned long flags;
357         int i;
358
359         BUG_ON(! cnx);
360
361         switch (event->base_event.xSubtype) {
362         case VethEventTypeCap:
363                 veth_take_cap(cnx, event);
364                 break;
365         case VethEventTypeMonitor:
366                 /* do nothing... this'll hang out here til we're dead,
367                  * and the hypervisor will return it for us. */
368                 break;
369         case VethEventTypeFramesAck:
370                 spin_lock_irqsave(&cnx->lock, flags);
371                 for (i = 0; i < VETH_MAX_ACKS_PER_MSG; ++i) {
372                         u16 msgnum = event->u.frames_ack_data.token[i];
373
374                         if (msgnum < VETH_NUMBUFFERS)
375                                 veth_recycle_msg(cnx, cnx->msgs + msgnum);
376                 }
377                 spin_unlock_irqrestore(&cnx->lock, flags);
378                 veth_flush_pending(cnx);
379                 break;
380         case VethEventTypeFrames:
381                 veth_receive(cnx, event);
382                 break;
383         default:
384                 veth_error("Unknown interrupt type %d from LPAR %d.\n",
385                                 event->base_event.xSubtype, rlp);
386         };
387 }
388
389 static void veth_handle_event(struct HvLpEvent *event, struct pt_regs *regs)
390 {
391         struct VethLpEvent *veth_event = (struct VethLpEvent *)event;
392
393         if (event->xFlags.xFunction == HvLpEvent_Function_Ack)
394                 veth_handle_ack(veth_event);
395         else if (event->xFlags.xFunction == HvLpEvent_Function_Int)
396                 veth_handle_int(veth_event);
397 }
398
399 static int veth_process_caps(struct veth_lpar_connection *cnx)
400 {
401         struct VethCapData *remote_caps = &cnx->remote_caps;
402         int num_acks_needed;
403
404         /* Convert timer to jiffies */
405         cnx->ack_timeout = remote_caps->ack_timeout * HZ / 1000000;
406
407         if ( (remote_caps->num_buffers == 0)
408              || (remote_caps->ack_threshold > VETH_MAX_ACKS_PER_MSG)
409              || (remote_caps->ack_threshold == 0)
410              || (cnx->ack_timeout == 0) ) {
411                 veth_error("Received incompatible capabilities from LPAR %d.\n",
412                                 cnx->remote_lp);
413                 return HvLpEvent_Rc_InvalidSubtypeData;
414         }
415
416         num_acks_needed = (remote_caps->num_buffers
417                            / remote_caps->ack_threshold) + 1;
418
419         /* FIXME: locking on num_ack_events? */
420         if (cnx->num_ack_events < num_acks_needed) {
421                 int num;
422
423                 num = veth_allocate_events(cnx->remote_lp,
424                                            num_acks_needed-cnx->num_ack_events);
425                 if (num > 0)
426                         cnx->num_ack_events += num;
427
428                 if (cnx->num_ack_events < num_acks_needed) {
429                         veth_error("Couldn't allocate enough ack events "
430                                         "for LPAR %d.\n", cnx->remote_lp);
431
432                         return HvLpEvent_Rc_BufferNotAvailable;
433                 }
434         }
435
436
437         return HvLpEvent_Rc_Good;
438 }
439
440 /* FIXME: The gotos here are a bit dubious */
441 static void veth_statemachine(void *p)
442 {
443         struct veth_lpar_connection *cnx = (struct veth_lpar_connection *)p;
444         int rlp = cnx->remote_lp;
445         int rc;
446
447         spin_lock_irq(&cnx->lock);
448
449  restart:
450         if (cnx->state & VETH_STATE_RESET) {
451                 int i;
452
453                 if (cnx->state & VETH_STATE_OPEN)
454                         HvCallEvent_closeLpEventPath(cnx->remote_lp,
455                                                      HvLpEvent_Type_VirtualLan);
456
457                 /*
458                  * Reset ack data. This prevents the ack_timer actually
459                  * doing anything, even if it runs one more time when
460                  * we drop the lock below.
461                  */
462                 memset(&cnx->pending_acks, 0xff, sizeof (cnx->pending_acks));
463                 cnx->num_pending_acks = 0;
464
465                 cnx->state &= ~(VETH_STATE_RESET | VETH_STATE_SENTMON
466                                 | VETH_STATE_OPEN | VETH_STATE_SENTCAPS
467                                 | VETH_STATE_GOTCAPACK | VETH_STATE_GOTCAPS
468                                 | VETH_STATE_SENTCAPACK | VETH_STATE_READY);
469
470                 /* Clean up any leftover messages */
471                 if (cnx->msgs)
472                         for (i = 0; i < VETH_NUMBUFFERS; ++i)
473                                 veth_recycle_msg(cnx, cnx->msgs + i);
474
475                 /* Drop the lock so we can do stuff that might sleep or
476                  * take other locks. */
477                 spin_unlock_irq(&cnx->lock);
478
479                 del_timer_sync(&cnx->ack_timer);
480                 veth_flush_pending(cnx);
481
482                 spin_lock_irq(&cnx->lock);
483
484                 if (cnx->state & VETH_STATE_RESET)
485                         goto restart;
486
487                 /* Hack, wait for the other end to reset itself. */
488                 if (! (cnx->state & VETH_STATE_SHUTDOWN)) {
489                         schedule_delayed_work(&cnx->statemachine_wq, 5 * HZ);
490                         goto out;
491                 }
492         }
493
494         if (cnx->state & VETH_STATE_SHUTDOWN)
495                 /* It's all over, do nothing */
496                 goto out;
497
498         if ( !(cnx->state & VETH_STATE_OPEN) ) {
499                 if (! cnx->msgs || (cnx->num_events < (2 + VETH_NUMBUFFERS)) )
500                         goto cant_cope;
501
502                 HvCallEvent_openLpEventPath(rlp, HvLpEvent_Type_VirtualLan);
503                 cnx->src_inst =
504                         HvCallEvent_getSourceLpInstanceId(rlp,
505                                                           HvLpEvent_Type_VirtualLan);
506                 cnx->dst_inst =
507                         HvCallEvent_getTargetLpInstanceId(rlp,
508                                                           HvLpEvent_Type_VirtualLan);
509                 cnx->state |= VETH_STATE_OPEN;
510         }
511
512         if ( (cnx->state & VETH_STATE_OPEN)
513              && !(cnx->state & VETH_STATE_SENTMON) ) {
514                 rc = veth_signalevent(cnx, VethEventTypeMonitor,
515                                       HvLpEvent_AckInd_DoAck,
516                                       HvLpEvent_AckType_DeferredAck,
517                                       0, 0, 0, 0, 0, 0);
518
519                 if (rc == HvLpEvent_Rc_Good) {
520                         cnx->state |= VETH_STATE_SENTMON;
521                 } else {
522                         if ( (rc != HvLpEvent_Rc_PartitionDead)
523                              && (rc != HvLpEvent_Rc_PathClosed) )
524                                 veth_error("Error sending monitor to LPAR %d, "
525                                                 "rc = %d\n", rlp, rc);
526
527                         /* Oh well, hope we get a cap from the other
528                          * end and do better when that kicks us */
529                         goto out;
530                 }
531         }
532
533         if ( (cnx->state & VETH_STATE_OPEN)
534              && !(cnx->state & VETH_STATE_SENTCAPS)) {
535                 u64 *rawcap = (u64 *)&cnx->local_caps;
536
537                 rc = veth_signalevent(cnx, VethEventTypeCap,
538                                       HvLpEvent_AckInd_DoAck,
539                                       HvLpEvent_AckType_ImmediateAck,
540                                       0, rawcap[0], rawcap[1], rawcap[2],
541                                       rawcap[3], rawcap[4]);
542
543                 if (rc == HvLpEvent_Rc_Good) {
544                         cnx->state |= VETH_STATE_SENTCAPS;
545                 } else {
546                         if ( (rc != HvLpEvent_Rc_PartitionDead)
547                              && (rc != HvLpEvent_Rc_PathClosed) )
548                                 veth_error("Error sending caps to LPAR %d, "
549                                                 "rc = %d\n", rlp, rc);
550
551                         /* Oh well, hope we get a cap from the other
552                          * end and do better when that kicks us */
553                         goto out;
554                 }
555         }
556
557         if ((cnx->state & VETH_STATE_GOTCAPS)
558             && !(cnx->state & VETH_STATE_SENTCAPACK)) {
559                 struct VethCapData *remote_caps = &cnx->remote_caps;
560
561                 memcpy(remote_caps, &cnx->cap_event.u.caps_data,
562                        sizeof(*remote_caps));
563
564                 spin_unlock_irq(&cnx->lock);
565                 rc = veth_process_caps(cnx);
566                 spin_lock_irq(&cnx->lock);
567
568                 /* We dropped the lock, so recheck for anything which
569                  * might mess us up */
570                 if (cnx->state & (VETH_STATE_RESET|VETH_STATE_SHUTDOWN))
571                         goto restart;
572
573                 cnx->cap_event.base_event.xRc = rc;
574                 HvCallEvent_ackLpEvent((struct HvLpEvent *)&cnx->cap_event);
575                 if (rc == HvLpEvent_Rc_Good)
576                         cnx->state |= VETH_STATE_SENTCAPACK;
577                 else
578                         goto cant_cope;
579         }
580
581         if ((cnx->state & VETH_STATE_GOTCAPACK)
582             && (cnx->state & VETH_STATE_GOTCAPS)
583             && !(cnx->state & VETH_STATE_READY)) {
584                 if (cnx->cap_ack_event.base_event.xRc == HvLpEvent_Rc_Good) {
585                         /* Start the ACK timer */
586                         cnx->ack_timer.expires = jiffies + cnx->ack_timeout;
587                         add_timer(&cnx->ack_timer);
588                         cnx->state |= VETH_STATE_READY;
589                 } else {
590                         veth_error("Caps rejected by LPAR %d, rc = %d\n",
591                                         rlp, cnx->cap_ack_event.base_event.xRc);
592                         goto cant_cope;
593                 }
594         }
595
596  out:
597         spin_unlock_irq(&cnx->lock);
598         return;
599
600  cant_cope:
601         /* FIXME: we get here if something happens we really can't
602          * cope with.  The link will never work once we get here, and
603          * all we can do is not lock the rest of the system up */
604         veth_error("Unrecoverable error on connection to LPAR %d, shutting down"
605                         " (state = 0x%04lx)\n", rlp, cnx->state);
606         cnx->state |= VETH_STATE_SHUTDOWN;
607         spin_unlock_irq(&cnx->lock);
608 }
609
610 static int veth_init_connection(u8 rlp)
611 {
612         struct veth_lpar_connection *cnx;
613         struct veth_msg *msgs;
614         int i;
615
616         if ( (rlp == this_lp)
617              || ! HvLpConfig_doLpsCommunicateOnVirtualLan(this_lp, rlp) )
618                 return 0;
619
620         cnx = kmalloc(sizeof(*cnx), GFP_KERNEL);
621         if (! cnx)
622                 return -ENOMEM;
623         memset(cnx, 0, sizeof(*cnx));
624
625         cnx->remote_lp = rlp;
626         spin_lock_init(&cnx->lock);
627         INIT_WORK(&cnx->statemachine_wq, veth_statemachine, cnx);
628         init_timer(&cnx->ack_timer);
629         cnx->ack_timer.function = veth_timed_ack;
630         cnx->ack_timer.data = (unsigned long) cnx;
631         memset(&cnx->pending_acks, 0xff, sizeof (cnx->pending_acks));
632
633         veth_cnx[rlp] = cnx;
634
635         msgs = kmalloc(VETH_NUMBUFFERS * sizeof(struct veth_msg), GFP_KERNEL);
636         if (! msgs) {
637                 veth_error("Can't allocate buffers for LPAR %d.\n", rlp);
638                 return -ENOMEM;
639         }
640
641         cnx->msgs = msgs;
642         memset(msgs, 0, VETH_NUMBUFFERS * sizeof(struct veth_msg));
643
644         for (i = 0; i < VETH_NUMBUFFERS; i++) {
645                 msgs[i].token = i;
646                 veth_stack_push(cnx, msgs + i);
647         }
648
649         cnx->num_events = veth_allocate_events(rlp, 2 + VETH_NUMBUFFERS);
650
651         if (cnx->num_events < (2 + VETH_NUMBUFFERS)) {
652                 veth_error("Can't allocate enough events for LPAR %d.\n", rlp);
653                 return -ENOMEM;
654         }
655
656         cnx->local_caps.num_buffers = VETH_NUMBUFFERS;
657         cnx->local_caps.ack_threshold = ACK_THRESHOLD;
658         cnx->local_caps.ack_timeout = VETH_ACKTIMEOUT;
659
660         return 0;
661 }
662
663 static void veth_stop_connection(u8 rlp)
664 {
665         struct veth_lpar_connection *cnx = veth_cnx[rlp];
666
667         if (! cnx)
668                 return;
669
670         spin_lock_irq(&cnx->lock);
671         cnx->state |= VETH_STATE_RESET | VETH_STATE_SHUTDOWN;
672         veth_kick_statemachine(cnx);
673         spin_unlock_irq(&cnx->lock);
674
675         /* There's a slim chance the reset code has just queued the
676          * statemachine to run in five seconds. If so we need to cancel
677          * that and requeue the work to run now. */
678         if (cancel_delayed_work(&cnx->statemachine_wq)) {
679                 spin_lock_irq(&cnx->lock);
680                 veth_kick_statemachine(cnx);
681                 spin_unlock_irq(&cnx->lock);
682         }
683
684         /* Wait for the state machine to run. */
685         flush_scheduled_work();
686
687         if (cnx->num_events > 0)
688                 mf_deallocate_lp_events(cnx->remote_lp,
689                                       HvLpEvent_Type_VirtualLan,
690                                       cnx->num_events,
691                                       NULL, NULL);
692         if (cnx->num_ack_events > 0)
693                 mf_deallocate_lp_events(cnx->remote_lp,
694                                       HvLpEvent_Type_VirtualLan,
695                                       cnx->num_ack_events,
696                                       NULL, NULL);
697 }
698
699 static void veth_destroy_connection(u8 rlp)
700 {
701         struct veth_lpar_connection *cnx = veth_cnx[rlp];
702
703         if (! cnx)
704                 return;
705
706         kfree(cnx->msgs);
707         kfree(cnx);
708         veth_cnx[rlp] = NULL;
709 }
710
711 /*
712  * net_device code
713  */
714
715 static int veth_open(struct net_device *dev)
716 {
717         struct veth_port *port = (struct veth_port *) dev->priv;
718
719         memset(&port->stats, 0, sizeof (port->stats));
720         netif_start_queue(dev);
721         return 0;
722 }
723
724 static int veth_close(struct net_device *dev)
725 {
726         netif_stop_queue(dev);
727         return 0;
728 }
729
730 static struct net_device_stats *veth_get_stats(struct net_device *dev)
731 {
732         struct veth_port *port = (struct veth_port *) dev->priv;
733
734         return &port->stats;
735 }
736
737 static int veth_change_mtu(struct net_device *dev, int new_mtu)
738 {
739         if ((new_mtu < 68) || (new_mtu > VETH_MAX_MTU))
740                 return -EINVAL;
741         dev->mtu = new_mtu;
742         return 0;
743 }
744
745 static void veth_set_multicast_list(struct net_device *dev)
746 {
747         struct veth_port *port = (struct veth_port *) dev->priv;
748         unsigned long flags;
749
750         write_lock_irqsave(&port->mcast_gate, flags);
751
752         if ((dev->flags & IFF_PROMISC) || (dev->flags & IFF_ALLMULTI) ||
753                         (dev->mc_count > VETH_MAX_MCAST)) {
754                 port->promiscuous = 1;
755         } else {
756                 struct dev_mc_list *dmi = dev->mc_list;
757                 int i;
758
759                 port->promiscuous = 0;
760
761                 /* Update table */
762                 port->num_mcast = 0;
763
764                 for (i = 0; i < dev->mc_count; i++) {
765                         u8 *addr = dmi->dmi_addr;
766                         u64 xaddr = 0;
767
768                         if (addr[0] & 0x01) {/* multicast address? */
769                                 memcpy(&xaddr, addr, ETH_ALEN);
770                                 port->mcast_addr[port->num_mcast] = xaddr;
771                                 port->num_mcast++;
772                         }
773                         dmi = dmi->next;
774                 }
775         }
776
777         write_unlock_irqrestore(&port->mcast_gate, flags);
778 }
779
780 static void veth_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
781 {
782         strncpy(info->driver, "veth", sizeof(info->driver) - 1);
783         info->driver[sizeof(info->driver) - 1] = '\0';
784         strncpy(info->version, "1.0", sizeof(info->version) - 1);
785 }
786
787 static int veth_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
788 {
789         ecmd->supported = (SUPPORTED_1000baseT_Full
790                           | SUPPORTED_Autoneg | SUPPORTED_FIBRE);
791         ecmd->advertising = (SUPPORTED_1000baseT_Full
792                             | SUPPORTED_Autoneg | SUPPORTED_FIBRE);
793         ecmd->port = PORT_FIBRE;
794         ecmd->transceiver = XCVR_INTERNAL;
795         ecmd->phy_address = 0;
796         ecmd->speed = SPEED_1000;
797         ecmd->duplex = DUPLEX_FULL;
798         ecmd->autoneg = AUTONEG_ENABLE;
799         ecmd->maxtxpkt = 120;
800         ecmd->maxrxpkt = 120;
801         return 0;
802 }
803
804 static u32 veth_get_link(struct net_device *dev)
805 {
806         return 1;
807 }
808
809 static struct ethtool_ops ops = {
810         .get_drvinfo = veth_get_drvinfo,
811         .get_settings = veth_get_settings,
812         .get_link = veth_get_link,
813 };
814
815 static void veth_tx_timeout(struct net_device *dev)
816 {
817         struct veth_port *port = (struct veth_port *)dev->priv;
818         struct net_device_stats *stats = &port->stats;
819         unsigned long flags;
820         int i;
821
822         stats->tx_errors++;
823
824         spin_lock_irqsave(&port->pending_gate, flags);
825
826         if (!port->pending_lpmask) {
827                 spin_unlock_irqrestore(&port->pending_gate, flags);
828                 return;
829         }
830
831         printk(KERN_WARNING "%s: Tx timeout!  Resetting lp connections: %08x\n",
832                dev->name, port->pending_lpmask);
833
834         for (i = 0; i < HVMAXARCHITECTEDLPS; i++) {
835                 struct veth_lpar_connection *cnx = veth_cnx[i];
836
837                 if (! (port->pending_lpmask & (1<<i)))
838                         continue;
839
840                 /* If we're pending on it, we must be connected to it,
841                  * so we should certainly have a structure for it. */
842                 BUG_ON(! cnx);
843
844                 /* Theoretically we could be kicking a connection
845                  * which doesn't deserve it, but in practice if we've
846                  * had a Tx timeout, the pending_lpmask will have
847                  * exactly one bit set - the connection causing the
848                  * problem. */
849                 spin_lock(&cnx->lock);
850                 cnx->state |= VETH_STATE_RESET;
851                 veth_kick_statemachine(cnx);
852                 spin_unlock(&cnx->lock);
853         }
854
855         spin_unlock_irqrestore(&port->pending_gate, flags);
856 }
857
858 static struct net_device * __init veth_probe_one(int vlan, struct device *vdev)
859 {
860         struct net_device *dev;
861         struct veth_port *port;
862         int i, rc;
863
864         dev = alloc_etherdev(sizeof (struct veth_port));
865         if (! dev) {
866                 veth_error("Unable to allocate net_device structure!\n");
867                 return NULL;
868         }
869
870         port = (struct veth_port *) dev->priv;
871
872         spin_lock_init(&port->pending_gate);
873         rwlock_init(&port->mcast_gate);
874
875         for (i = 0; i < HVMAXARCHITECTEDLPS; i++) {
876                 HvLpVirtualLanIndexMap map;
877
878                 if (i == this_lp)
879                         continue;
880                 map = HvLpConfig_getVirtualLanIndexMapForLp(i);
881                 if (map & (0x8000 >> vlan))
882                         port->lpar_map |= (1 << i);
883         }
884         port->dev = vdev;
885
886         dev->dev_addr[0] = 0x02;
887         dev->dev_addr[1] = 0x01;
888         dev->dev_addr[2] = 0xff;
889         dev->dev_addr[3] = vlan;
890         dev->dev_addr[4] = 0xff;
891         dev->dev_addr[5] = this_lp;
892
893         dev->mtu = VETH_MAX_MTU;
894
895         memcpy(&port->mac_addr, dev->dev_addr, 6);
896
897         dev->open = veth_open;
898         dev->hard_start_xmit = veth_start_xmit;
899         dev->stop = veth_close;
900         dev->get_stats = veth_get_stats;
901         dev->change_mtu = veth_change_mtu;
902         dev->set_mac_address = NULL;
903         dev->set_multicast_list = veth_set_multicast_list;
904         SET_ETHTOOL_OPS(dev, &ops);
905
906         dev->watchdog_timeo = 2 * (VETH_ACKTIMEOUT * HZ / 1000000);
907         dev->tx_timeout = veth_tx_timeout;
908
909         SET_NETDEV_DEV(dev, vdev);
910
911         rc = register_netdev(dev);
912         if (rc != 0) {
913                 veth_error("Failed registering net device for vlan%d.\n", vlan);
914                 free_netdev(dev);
915                 return NULL;
916         }
917
918         veth_info("%s attached to iSeries vlan %d (LPAR map = 0x%.4X)\n",
919                         dev->name, vlan, port->lpar_map);
920
921         return dev;
922 }
923
924 /*
925  * Tx path
926  */
927
928 static int veth_transmit_to_one(struct sk_buff *skb, HvLpIndex rlp,
929                                 struct net_device *dev)
930 {
931         struct veth_lpar_connection *cnx = veth_cnx[rlp];
932         struct veth_port *port = (struct veth_port *) dev->priv;
933         HvLpEvent_Rc rc;
934         u32 dma_address, dma_length;
935         struct veth_msg *msg = NULL;
936         int err = 0;
937         unsigned long flags;
938
939         if (! cnx) {
940                 port->stats.tx_errors++;
941                 dev_kfree_skb(skb);
942                 return 0;
943         }
944
945         spin_lock_irqsave(&cnx->lock, flags);
946
947         if (! (cnx->state & VETH_STATE_READY))
948                 goto drop;
949
950         if ((skb->len - 14) > VETH_MAX_MTU)
951                 goto drop;
952
953         msg = veth_stack_pop(cnx);
954
955         if (! msg) {
956                 err = 1;
957                 goto drop;
958         }
959
960         msg->in_use = 1;
961
962         dma_length = skb->len;
963         dma_address = dma_map_single(port->dev, skb->data,
964                                      dma_length, DMA_TO_DEVICE);
965
966         if (dma_mapping_error(dma_address))
967                 goto recycle_and_drop;
968
969         /* Is it really necessary to check the length and address
970          * fields of the first entry here? */
971         msg->skb = skb;
972         msg->dev = port->dev;
973         msg->data.addr[0] = dma_address;
974         msg->data.len[0] = dma_length;
975         msg->data.eofmask = 1 << VETH_EOF_SHIFT;
976         rc = veth_signaldata(cnx, VethEventTypeFrames, msg->token, &msg->data);
977
978         if (rc != HvLpEvent_Rc_Good)
979                 goto recycle_and_drop;
980
981         spin_unlock_irqrestore(&cnx->lock, flags);
982         return 0;
983
984  recycle_and_drop:
985         /* we free the skb below, so tell veth_recycle_msg() not to. */
986         msg->skb = NULL;
987         veth_recycle_msg(cnx, msg);
988  drop:
989         port->stats.tx_errors++;
990         dev_kfree_skb(skb);
991         spin_unlock_irqrestore(&cnx->lock, flags);
992         return err;
993 }
994
995 static HvLpIndexMap veth_transmit_to_many(struct sk_buff *skb,
996                                           HvLpIndexMap lpmask,
997                                           struct net_device *dev)
998 {
999         struct veth_port *port = (struct veth_port *) dev->priv;
1000         int i;
1001         int rc;
1002
1003         for (i = 0; i < HVMAXARCHITECTEDLPS; i++) {
1004                 if ((lpmask & (1 << i)) == 0)
1005                         continue;
1006
1007                 rc = veth_transmit_to_one(skb_get(skb), i, dev);
1008                 if (! rc)
1009                         lpmask &= ~(1<<i);
1010         }
1011
1012         if (! lpmask) {
1013                 port->stats.tx_packets++;
1014                 port->stats.tx_bytes += skb->len;
1015         }
1016
1017         return lpmask;
1018 }
1019
1020 static int veth_start_xmit(struct sk_buff *skb, struct net_device *dev)
1021 {
1022         unsigned char *frame = skb->data;
1023         struct veth_port *port = (struct veth_port *) dev->priv;
1024         unsigned long flags;
1025         HvLpIndexMap lpmask;
1026
1027         if (! (frame[0] & 0x01)) {
1028                 /* unicast packet */
1029                 HvLpIndex rlp = frame[5];
1030
1031                 if ( ! ((1 << rlp) & port->lpar_map) ) {
1032                         dev_kfree_skb(skb);
1033                         return 0;
1034                 }
1035
1036                 lpmask = 1 << rlp;
1037         } else {
1038                 lpmask = port->lpar_map;
1039         }
1040
1041         spin_lock_irqsave(&port->pending_gate, flags);
1042
1043         lpmask = veth_transmit_to_many(skb, lpmask, dev);
1044
1045         dev->trans_start = jiffies;
1046
1047         if (! lpmask) {
1048                 dev_kfree_skb(skb);
1049         } else {
1050                 if (port->pending_skb) {
1051                         veth_error("%s: TX while skb was pending!\n",
1052                                    dev->name);
1053                         dev_kfree_skb(skb);
1054                         spin_unlock_irqrestore(&port->pending_gate, flags);
1055                         return 1;
1056                 }
1057
1058                 port->pending_skb = skb;
1059                 port->pending_lpmask = lpmask;
1060                 netif_stop_queue(dev);
1061         }
1062
1063         spin_unlock_irqrestore(&port->pending_gate, flags);
1064
1065         return 0;
1066 }
1067
1068 /* You must hold the connection's lock when you call this function. */
1069 static void veth_recycle_msg(struct veth_lpar_connection *cnx,
1070                              struct veth_msg *msg)
1071 {
1072         u32 dma_address, dma_length;
1073
1074         if (msg->in_use) {
1075                 msg->in_use = 0;
1076                 dma_address = msg->data.addr[0];
1077                 dma_length = msg->data.len[0];
1078
1079                 dma_unmap_single(msg->dev, dma_address, dma_length,
1080                                  DMA_TO_DEVICE);
1081
1082                 if (msg->skb) {
1083                         dev_kfree_skb_any(msg->skb);
1084                         msg->skb = NULL;
1085                 }
1086
1087                 memset(&msg->data, 0, sizeof(msg->data));
1088                 veth_stack_push(cnx, msg);
1089         } else if (cnx->state & VETH_STATE_OPEN) {
1090                 veth_error("Non-pending frame (# %d) acked by LPAR %d.\n",
1091                                 cnx->remote_lp, msg->token);
1092         }
1093 }
1094
1095 static void veth_flush_pending(struct veth_lpar_connection *cnx)
1096 {
1097         int i;
1098         for (i = 0; i < HVMAXARCHITECTEDVIRTUALLANS; i++) {
1099                 struct net_device *dev = veth_dev[i];
1100                 struct veth_port *port;
1101                 unsigned long flags;
1102
1103                 if (! dev)
1104                         continue;
1105
1106                 port = (struct veth_port *)dev->priv;
1107
1108                 if (! (port->lpar_map & (1<<cnx->remote_lp)))
1109                         continue;
1110
1111                 spin_lock_irqsave(&port->pending_gate, flags);
1112                 if (port->pending_skb) {
1113                         port->pending_lpmask =
1114                                 veth_transmit_to_many(port->pending_skb,
1115                                                       port->pending_lpmask,
1116                                                       dev);
1117                         if (! port->pending_lpmask) {
1118                                 dev_kfree_skb_any(port->pending_skb);
1119                                 port->pending_skb = NULL;
1120                                 netif_wake_queue(dev);
1121                         }
1122                 }
1123                 spin_unlock_irqrestore(&port->pending_gate, flags);
1124         }
1125 }
1126
1127 /*
1128  * Rx path
1129  */
1130
1131 static inline int veth_frame_wanted(struct veth_port *port, u64 mac_addr)
1132 {
1133         int wanted = 0;
1134         int i;
1135         unsigned long flags;
1136
1137         if ( (mac_addr == port->mac_addr) || (mac_addr == 0xffffffffffff0000) )
1138                 return 1;
1139
1140         read_lock_irqsave(&port->mcast_gate, flags);
1141
1142         if (port->promiscuous) {
1143                 wanted = 1;
1144                 goto out;
1145         }
1146
1147         for (i = 0; i < port->num_mcast; ++i) {
1148                 if (port->mcast_addr[i] == mac_addr) {
1149                         wanted = 1;
1150                         break;
1151                 }
1152         }
1153
1154  out:
1155         read_unlock_irqrestore(&port->mcast_gate, flags);
1156
1157         return wanted;
1158 }
1159
1160 struct dma_chunk {
1161         u64 addr;
1162         u64 size;
1163 };
1164
1165 #define VETH_MAX_PAGES_PER_FRAME ( (VETH_MAX_MTU+PAGE_SIZE-2)/PAGE_SIZE + 1 )
1166
1167 static inline void veth_build_dma_list(struct dma_chunk *list,
1168                                        unsigned char *p, unsigned long length)
1169 {
1170         unsigned long done;
1171         int i = 1;
1172
1173         /* FIXME: skbs are continguous in real addresses.  Do we
1174          * really need to break it into PAGE_SIZE chunks, or can we do
1175          * it just at the granularity of iSeries real->absolute
1176          * mapping?  Indeed, given the way the allocator works, can we
1177          * count on them being absolutely contiguous? */
1178         list[0].addr = ISERIES_HV_ADDR(p);
1179         list[0].size = min(length,
1180                            PAGE_SIZE - ((unsigned long)p & ~PAGE_MASK));
1181
1182         done = list[0].size;
1183         while (done < length) {
1184                 list[i].addr = ISERIES_HV_ADDR(p + done);
1185                 list[i].size = min(length-done, PAGE_SIZE);
1186                 done += list[i].size;
1187                 i++;
1188         }
1189 }
1190
1191 static void veth_flush_acks(struct veth_lpar_connection *cnx)
1192 {
1193         HvLpEvent_Rc rc;
1194
1195         rc = veth_signaldata(cnx, VethEventTypeFramesAck,
1196                              0, &cnx->pending_acks);
1197
1198         if (rc != HvLpEvent_Rc_Good)
1199                 veth_error("Failed acking frames from LPAR %d, rc = %d\n",
1200                                 cnx->remote_lp, (int)rc);
1201
1202         cnx->num_pending_acks = 0;
1203         memset(&cnx->pending_acks, 0xff, sizeof(cnx->pending_acks));
1204 }
1205
1206 static void veth_receive(struct veth_lpar_connection *cnx,
1207                          struct VethLpEvent *event)
1208 {
1209         struct VethFramesData *senddata = &event->u.frames_data;
1210         int startchunk = 0;
1211         int nchunks;
1212         unsigned long flags;
1213         HvLpDma_Rc rc;
1214
1215         do {
1216                 u16 length = 0;
1217                 struct sk_buff *skb;
1218                 struct dma_chunk local_list[VETH_MAX_PAGES_PER_FRAME];
1219                 struct dma_chunk remote_list[VETH_MAX_FRAMES_PER_MSG];
1220                 u64 dest;
1221                 HvLpVirtualLanIndex vlan;
1222                 struct net_device *dev;
1223                 struct veth_port *port;
1224
1225                 /* FIXME: do we need this? */
1226                 memset(local_list, 0, sizeof(local_list));
1227                 memset(remote_list, 0, sizeof(VETH_MAX_FRAMES_PER_MSG));
1228
1229                 /* a 0 address marks the end of the valid entries */
1230                 if (senddata->addr[startchunk] == 0)
1231                         break;
1232
1233                 /* make sure that we have at least 1 EOF entry in the
1234                  * remaining entries */
1235                 if (! (senddata->eofmask >> (startchunk + VETH_EOF_SHIFT))) {
1236                         veth_error("Missing EOF fragment in event "
1237                                         "eofmask = 0x%x startchunk = %d\n",
1238                                         (unsigned)senddata->eofmask,
1239                                         startchunk);
1240                         break;
1241                 }
1242
1243                 /* build list of chunks in this frame */
1244                 nchunks = 0;
1245                 do {
1246                         remote_list[nchunks].addr =
1247                                 (u64) senddata->addr[startchunk+nchunks] << 32;
1248                         remote_list[nchunks].size =
1249                                 senddata->len[startchunk+nchunks];
1250                         length += remote_list[nchunks].size;
1251                 } while (! (senddata->eofmask &
1252                             (1 << (VETH_EOF_SHIFT + startchunk + nchunks++))));
1253
1254                 /* length == total length of all chunks */
1255                 /* nchunks == # of chunks in this frame */
1256
1257                 if ((length - ETH_HLEN) > VETH_MAX_MTU) {
1258                         veth_error("Received oversize frame from LPAR %d "
1259                                         "(length = %d)\n",
1260                                         cnx->remote_lp, length);
1261                         continue;
1262                 }
1263
1264                 skb = alloc_skb(length, GFP_ATOMIC);
1265                 if (!skb)
1266                         continue;
1267
1268                 veth_build_dma_list(local_list, skb->data, length);
1269
1270                 rc = HvCallEvent_dmaBufList(HvLpEvent_Type_VirtualLan,
1271                                             event->base_event.xSourceLp,
1272                                             HvLpDma_Direction_RemoteToLocal,
1273                                             cnx->src_inst,
1274                                             cnx->dst_inst,
1275                                             HvLpDma_AddressType_RealAddress,
1276                                             HvLpDma_AddressType_TceIndex,
1277                                             ISERIES_HV_ADDR(&local_list),
1278                                             ISERIES_HV_ADDR(&remote_list),
1279                                             length);
1280                 if (rc != HvLpDma_Rc_Good) {
1281                         dev_kfree_skb_irq(skb);
1282                         continue;
1283                 }
1284
1285                 vlan = skb->data[9];
1286                 dev = veth_dev[vlan];
1287                 if (! dev) {
1288                         /*
1289                          * Some earlier versions of the driver sent
1290                          * broadcasts down all connections, even to lpars
1291                          * that weren't on the relevant vlan. So ignore
1292                          * packets belonging to a vlan we're not on.
1293                          * We can also be here if we receive packets while
1294                          * the driver is going down, because then dev is NULL.
1295                          */
1296                         dev_kfree_skb_irq(skb);
1297                         continue;
1298                 }
1299
1300                 port = (struct veth_port *)dev->priv;
1301                 dest = *((u64 *) skb->data) & 0xFFFFFFFFFFFF0000;
1302
1303                 if ((vlan > HVMAXARCHITECTEDVIRTUALLANS) || !port) {
1304                         dev_kfree_skb_irq(skb);
1305                         continue;
1306                 }
1307                 if (! veth_frame_wanted(port, dest)) {
1308                         dev_kfree_skb_irq(skb);
1309                         continue;
1310                 }
1311
1312                 skb_put(skb, length);
1313                 skb->dev = dev;
1314                 skb->protocol = eth_type_trans(skb, dev);
1315                 skb->ip_summed = CHECKSUM_NONE;
1316                 netif_rx(skb);  /* send it up */
1317                 port->stats.rx_packets++;
1318                 port->stats.rx_bytes += length;
1319         } while (startchunk += nchunks, startchunk < VETH_MAX_FRAMES_PER_MSG);
1320
1321         /* Ack it */
1322         spin_lock_irqsave(&cnx->lock, flags);
1323         BUG_ON(cnx->num_pending_acks > VETH_MAX_ACKS_PER_MSG);
1324
1325         cnx->pending_acks[cnx->num_pending_acks++] =
1326                 event->base_event.xCorrelationToken;
1327
1328         if ( (cnx->num_pending_acks >= cnx->remote_caps.ack_threshold)
1329              || (cnx->num_pending_acks >= VETH_MAX_ACKS_PER_MSG) )
1330                 veth_flush_acks(cnx);
1331
1332         spin_unlock_irqrestore(&cnx->lock, flags);
1333 }
1334
1335 static void veth_timed_ack(unsigned long ptr)
1336 {
1337         struct veth_lpar_connection *cnx = (struct veth_lpar_connection *) ptr;
1338         unsigned long flags;
1339
1340         /* Ack all the events */
1341         spin_lock_irqsave(&cnx->lock, flags);
1342         if (cnx->num_pending_acks > 0)
1343                 veth_flush_acks(cnx);
1344
1345         /* Reschedule the timer */
1346         cnx->ack_timer.expires = jiffies + cnx->ack_timeout;
1347         add_timer(&cnx->ack_timer);
1348         spin_unlock_irqrestore(&cnx->lock, flags);
1349 }
1350
1351 static int veth_remove(struct vio_dev *vdev)
1352 {
1353         int i = vdev->unit_address;
1354         struct net_device *dev;
1355
1356         dev = veth_dev[i];
1357         if (dev != NULL) {
1358                 veth_dev[i] = NULL;
1359                 unregister_netdev(dev);
1360                 free_netdev(dev);
1361         }
1362         return 0;
1363 }
1364
1365 static int veth_probe(struct vio_dev *vdev, const struct vio_device_id *id)
1366 {
1367         int i = vdev->unit_address;
1368         struct net_device *dev;
1369
1370         dev = veth_probe_one(i, &vdev->dev);
1371         if (dev == NULL) {
1372                 veth_remove(vdev);
1373                 return 1;
1374         }
1375         veth_dev[i] = dev;
1376
1377         /* Start the state machine on each connection, to commence
1378          * link negotiation */
1379         for (i = 0; i < HVMAXARCHITECTEDLPS; i++)
1380                 if (veth_cnx[i])
1381                         veth_kick_statemachine(veth_cnx[i]);
1382
1383         return 0;
1384 }
1385
1386 /**
1387  * veth_device_table: Used by vio.c to match devices that we
1388  * support.
1389  */
1390 static struct vio_device_id veth_device_table[] __devinitdata = {
1391         { "vlan", "" },
1392         { "", "" }
1393 };
1394 MODULE_DEVICE_TABLE(vio, veth_device_table);
1395
1396 static struct vio_driver veth_driver = {
1397         .name = "iseries_veth",
1398         .id_table = veth_device_table,
1399         .probe = veth_probe,
1400         .remove = veth_remove
1401 };
1402
1403 /*
1404  * Module initialization/cleanup
1405  */
1406
1407 void __exit veth_module_cleanup(void)
1408 {
1409         int i;
1410
1411         /* Stop the queues first to stop any new packets being sent. */
1412         for (i = 0; i < HVMAXARCHITECTEDVIRTUALLANS; i++)
1413                 if (veth_dev[i])
1414                         netif_stop_queue(veth_dev[i]);
1415
1416         /* Stop the connections before we unregister the driver. This
1417          * ensures there's no skbs lying around holding the device open. */
1418         for (i = 0; i < HVMAXARCHITECTEDLPS; ++i)
1419                 veth_stop_connection(i);
1420
1421         HvLpEvent_unregisterHandler(HvLpEvent_Type_VirtualLan);
1422
1423         /* Hypervisor callbacks may have scheduled more work while we
1424          * were stoping connections. Now that we've disconnected from
1425          * the hypervisor make sure everything's finished. */
1426         flush_scheduled_work();
1427
1428         vio_unregister_driver(&veth_driver);
1429
1430         for (i = 0; i < HVMAXARCHITECTEDLPS; ++i)
1431                 veth_destroy_connection(i);
1432
1433 }
1434 module_exit(veth_module_cleanup);
1435
1436 int __init veth_module_init(void)
1437 {
1438         int i;
1439         int rc;
1440
1441         this_lp = HvLpConfig_getLpIndex_outline();
1442
1443         for (i = 0; i < HVMAXARCHITECTEDLPS; ++i) {
1444                 rc = veth_init_connection(i);
1445                 if (rc != 0) {
1446                         veth_module_cleanup();
1447                         return rc;
1448                 }
1449         }
1450
1451         HvLpEvent_registerHandler(HvLpEvent_Type_VirtualLan,
1452                                   &veth_handle_event);
1453
1454         return vio_register_driver(&veth_driver);
1455 }
1456 module_init(veth_module_init);