1 /* File veth.h created by Kyle A. Lucke on Mon Aug 7 2000. */
4 /* End Change Activity */
10 #include <asm/iSeries/HvTypes.h>
13 #include <asm/iSeries/HvLpEvent.h>
15 #include <linux/netdevice.h>
17 #define VethEventNumTypes (4)
18 #define VethEventTypeCap (0)
19 #define VethEventTypeFrames (1)
20 #define VethEventTypeMonitor (2)
21 #define VethEventTypeFramesAck (3)
23 #define VethMaxFramesMsgsAcked (20)
24 #define VethMaxFramesMsgs (0xFFFF)
25 #define VethMaxFramesPerMsg (6)
26 #define VethAckTimeoutUsec (1000000)
28 #define VETHSTACKTYPE(T) struct VethStack##T
29 #define VETHSTACK(T) \
35 #define VETHSTACKCTOR(s) do { (s)->head = NULL; spin_lock_init(&(s)->lock); } while(0)
36 #define VETHSTACKPUSH(s, p) \
38 unsigned long flags; \
39 spin_lock_irqsave(&(s)->lock,flags); \
40 (p)->next = (s)->head; \
42 spin_unlock_irqrestore(&(s)->lock, flags); \
45 #define VETHSTACKPOP(s,p) \
47 unsigned long flags; \
48 spin_lock_irqsave(&(s)->lock,flags); \
50 if ((s)->head != NULL) \
52 (s)->head = (s)->head->next; \
54 spin_unlock_irqrestore(&(s)->lock, flags); \
57 #define VETHQUEUE(T) \
64 #define VETHQUEUECTOR(q) do { (q)->head = NULL; (q)->tail = NULL; spin_lock_init(&(q)->lock); } while(0)
65 #define VETHQUEUEENQ(q, p) \
67 unsigned long flags; \
68 spin_lock_irqsave(&(q)->lock,flags); \
70 if ((q)->head != NULL) \
72 (q)->head->next = (p); \
77 (q)->tail = (q)->head = (p); \
79 spin_unlock_irqrestore(&(q)->lock, flags); \
82 #define VETHQUEUEDEQ(q,p) \
84 unsigned long flags; \
85 spin_lock_irqsave(&(q)->lock,flags); \
89 (q)->tail = (p)->next; \
92 if ((q)->tail == NULL) \
94 spin_unlock_irqrestore(&(q)->lock, flags); \
104 struct VethFramesAckData
106 u16 mToken[VethMaxFramesMsgsAcked];
137 struct VethFastPathData
148 struct HvLpEvent mBaseEvent;
150 struct VethFramesData mSendData;
151 struct VethCapData mCapabilitiesData;
152 struct VethFramesAckData mFramesAckData;
153 struct VethFastPathData mFastPathData;
160 struct VethMsg *next;
162 struct VethFramesData mSendData;
163 struct VethFastPathData mFpData;
166 unsigned long mInUse;
167 struct sk_buff *mSkb;
171 struct VethControlBlock
173 struct net_device *mDev;
174 struct VethControlBlock *mNext;
175 HvLpVirtualLanIndex mVlanId;
178 struct VethLpConnection
182 HvLpInstanceId mSourceInst;
183 HvLpInstanceId mTargetInst;
185 struct VethMsg *mMsgs;
187 int mNumberLpAcksAlloced;
190 struct VethFramesAckData mAckData;
191 struct VethFastPathData mFpData;
195 spinlock_t mStatusGate;
199 u64 mCapMonAlloced : 1;
200 u64 mBaseMsgsAlloced : 1;
204 u64 mGotCapAcked : 1;
205 u64 mSentMonitor : 1;
206 u64 mPopulatedRings : 1;
210 struct VethCapData mMyCap;
211 struct VethCapData mRemoteCap;
212 unsigned long mCapAckBhPending;
213 struct tq_struct mCapAckBhTq;
214 struct VethLpEvent mCapAckEvent;
215 unsigned long mCapBhPending;
216 struct tq_struct mCapBhTq;
217 struct VethLpEvent mCapEvent;
218 unsigned long mMonitorAckBhPending;
219 struct tq_struct mMonitorAckBhTq;
220 struct VethLpEvent mMonitorAckEvent;
221 unsigned long mAllocBhPending;
222 struct tq_struct mAllocBhTq;
223 int mNumberAllocated;
224 struct timer_list mAckTimer;
226 VETHSTACK(VethMsg) mMsgStack;
228 #define HVMAXARCHITECTEDVIRTUALLANS 16
231 struct net_device *mDev;
232 struct net_device_stats mStats;
246 struct VethLpConnection mConnection[HVMAXARCHITECTEDLPS];
247 spinlock_t mPortListGate;
249 struct VethPort *mPorts[HVMAXARCHITECTEDVIRTUALLANS];
252 int proc_veth_dump_connection(char *page, char **start, off_t off, int count, int *eof, void *data);
253 int proc_veth_dump_port(char *page, char **start, off_t off, int count, int *eof, void *data);