Linux-2.6.12-rc2
[cascardo/linux.git] / drivers / net / sk98lin / h / skqueue.h
1 /******************************************************************************
2  *
3  * Name:        skqueue.h
4  * Project:     Gigabit Ethernet Adapters, Event Scheduler Module
5  * Version:     $Revision: 1.16 $
6  * Date:        $Date: 2003/09/16 12:50:32 $
7  * Purpose:     Defines for the Event queue
8  *
9  ******************************************************************************/
10
11 /******************************************************************************
12  *
13  *      (C)Copyright 1998-2002 SysKonnect GmbH.
14  *      (C)Copyright 2002-2003 Marvell.
15  *
16  *      This program is free software; you can redistribute it and/or modify
17  *      it under the terms of the GNU General Public License as published by
18  *      the Free Software Foundation; either version 2 of the License, or
19  *      (at your option) any later version.
20  *
21  *      The information in this file is provided "AS IS" without warranty.
22  *
23  ******************************************************************************/
24
25 /*
26  * SKQUEUE.H    contains all defines and types for the event queue
27  */
28
29 #ifndef _SKQUEUE_H_
30 #define _SKQUEUE_H_
31
32
33 /*
34  * define the event classes to be served
35  */
36 #define SKGE_DRV        1       /* Driver Event Class */
37 #define SKGE_RLMT       2       /* RLMT Event Class */
38 #define SKGE_I2C        3       /* I2C Event Class */
39 #define SKGE_PNMI       4       /* PNMI Event Class */
40 #define SKGE_CSUM       5       /* Checksum Event Class */
41 #define SKGE_HWAC       6       /* Hardware Access Event Class */
42
43 #define SKGE_SWT        9       /* Software Timer Event Class */
44 #define SKGE_LACP       10      /* LACP Aggregation Event Class */
45 #define SKGE_RSF        11      /* RSF Aggregation Event Class */
46 #define SKGE_MARKER     12      /* MARKER Aggregation Event Class */
47 #define SKGE_FD         13      /* FD Distributor Event Class */
48
49 /*
50  * define event queue as circular buffer
51  */
52 #define SK_MAX_EVENT    64
53
54 /*
55  * Parameter union for the Para stuff
56  */
57 typedef union u_EvPara {
58         void    *pParaPtr;      /* Parameter Pointer */
59         SK_U64  Para64;         /* Parameter 64bit version */
60         SK_U32  Para32[2];      /* Parameter Array of 32bit parameters */
61 } SK_EVPARA;
62
63 /*
64  * Event Queue
65  *      skqueue.c
66  * events are class/value pairs
67  *      class   is addressee, e.g. RLMT, PNMI etc.
68  *      value   is command, e.g. line state change, ring op change etc.
69  */
70 typedef struct s_EventElem {
71         SK_U32          Class;                  /* Event class */
72         SK_U32          Event;                  /* Event value */
73         SK_EVPARA       Para;                   /* Event parameter */
74 } SK_EVENTELEM;
75
76 typedef struct s_Queue {
77         SK_EVENTELEM    EvQueue[SK_MAX_EVENT];
78         SK_EVENTELEM    *EvPut;
79         SK_EVENTELEM    *EvGet;
80 } SK_QUEUE;
81
82 extern  void SkEventInit(SK_AC *pAC, SK_IOC Ioc, int Level);
83 extern  void SkEventQueue(SK_AC *pAC, SK_U32 Class, SK_U32 Event,
84         SK_EVPARA Para);
85 extern  int SkEventDispatcher(SK_AC *pAC, SK_IOC Ioc);
86
87
88 /* Define Error Numbers and messages */
89 #define SKERR_Q_E001    (SK_ERRBASE_QUEUE+0)
90 #define SKERR_Q_E001MSG "Event queue overflow"
91 #define SKERR_Q_E002    (SKERR_Q_E001+1)
92 #define SKERR_Q_E002MSG "Undefined event class"
93 #endif  /* _SKQUEUE_H_ */
94