summaryrefslogtreecommitdiffstats
path: root/private/ntos/ndis/pcimac/cm.h
blob: 4478d0b1e052d86954882ab5b16ccfe10330e62d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/*
 * CM.H - definitions for connection manager
 */

#ifndef _CM_
#define _CM_

#include	<ndistapi.h>
#include	<cm_pub.h>

/* error codes */
#define     CM_E_SUCC       0           /* success, ok */
#define     CM_E_NOSLOT     1           /* no slot available error */
#define     CM_E_BUSY       2           /* cm context is busy */
#define     CM_E_NOSUCH     3           /* no such object */
#define     CM_E_BADCHAN    4           /* bad channel argument */
#define     CM_E_IDD        5           /* idd command errored */
#define     CM_E_NOMEM      6           /* ran out of memory */
#define     CM_E_NOTIMPL    7           /* functionalit not implemented yet */
#define     CM_E_BADPARAM   8           /* bad parameter */
#define     CM_E_BADSTATE   9           /* bad state */
#define     CM_E_BADUUS     10          /* bad user-to-user signalling packet */
#define		CM_E_BADPORT	11			/* bad nai given */

//
// q931 switch styles
//
#define	CM_SWITCHSTYLE_NONE		0		// no style
#define	CM_SWITCHSTYLE_AUTO		1		// auto detect
#define	CM_SWITCHSTYLE_NI1		2		// national isdn 1
#define	CM_SWITCHSTYLE_ATT		3		// at&t 5ess
#define	CM_SWITCHSTYLE_NTI		4		// northern telecom dms100
#define	CM_SWITCHSTYLE_NET3		5		// net3 (europe)
#define	CM_SWITCHSTYLE_1TR6		6		// 1tr6 (german)
#define	CM_SWITCHSTYLE_VN3		7		// vn3 (france)
#define	CM_SWITCHSTYLE_INS64	8		// ins64 (japan)

//
// local cm def's
//
/* map a channel to signaling idd port */
#define CM_PORT(_chan)      ((_chan)->lterm + IDD_PORT_CM0_TX)

/* user to user signaling structure (!must be byte alligned!) */
#pragma pack(2)
typedef struct
{
    CHAR        dst_addr[6];            /* destination address */
    CHAR        src_addr[6];            /* source address */
    USHORT      pkt_type;               /* packet type field */
#define     CM_PKT_TYPE     0x5601      /* - private packet type */
    UCHAR       prot_desc;              /* protocol descriptor field */
#define     CM_PROT_DESC    0x78        /* - private protoocl descriptor */
    UCHAR       opcode;                 /* opcode fields */
#define     CM_ASSOC_RQ     0x01        /* - request for chan/conn assoc */
#define     CM_ASSOC_ACK    0x02        /* - assoc ack'ed */
#define     CM_ASSOC_NACK   0x03        /* - assoc not ack'ed */
    UCHAR       cause;                  /* cause value, to assist in diag */
#define     CM_NO_PROF      0x01        /* - no matching profile */
#define     CM_NO_CONN      0x02        /* - no connection slot avail */
#define     CM_NO_CHAN      0x03        /* - no channel slot avail */
#define     CM_DUP_CONN     0x04        /* - dup conn name */
    UCHAR       conn;                   /* connection index */
    UCHAR       channum;                /* # of channels in connections */
    UCHAR       chan;                   /* channel index */
    CHAR        lname[24];              /* local profile name */
	ULONG		option_0;				// uus option fields
#define		UUS_0_COMPRESSION	0x00004000
#define		COMP_TX_ENA			0x01
#define		COMP_RX_ENA			0x02
	ULONG		option_1;
    CHAR        rname[24];              /* remote profile name */
	ULONG		option_2;
	ULONG		option_3;
    UCHAR       chksum;                 /* zero checksum field */
} CM_UUS;
#pragma pack()

/* C compiler fails go generate odd sized structures!, must defined by self */
#define CM_UUS_SIZE     (sizeof(CM_UUS) - 1)

/* special channel ustates */
#define     CM_US_UNDEF		(USHORT)(-1)	/* undefined, not known yet */
#define     CM_US_WAIT_CID	(USHORT)(-2)	/* waiting for a cid */
#define     CM_US_GAVE_UP	(USHORT)(-4)	/* gave up on this channel */
#define     CM_US_WAIT_CONN	50	/* connected, waiting on other */
#define     CM_US_UUS_SEND	51	/* sending uus now */
#define     CM_US_UUS_OKED	52	/* uus oked by side, wait on other */
#define     CM_US_CONN		53	/* connected */


/* CM class operation prototypes */
INT         cm_init(VOID);
INT         cm_term(VOID);
INT         cm_register_idd(VOID* idd);
INT         cm_deregister_idd(VOID* idd);

/* CM object operation prototypes */
INT         cm_create(VOID** cm_1, NDIS_HANDLE AdapterHandle);
INT         cm_destroy(VOID* cm_1);
INT         cm_set_profile(VOID* cm_1, CM_PROF* prof);
INT         cm_get_profile(VOID* cm_1, CM_PROF* prof);
INT         cm_listen(VOID* cm_1);
INT         cm_connect(VOID* cm_1);
INT         cm_disconnect(VOID* cm_1);
INT         cm_get_status(VOID* cm_1, CM_STATUS* stat);
INT         cm_report_frame(VOID* cm_1, BOOL is_rx, CHAR* buf, ULONG len);

/* prototypes for internal functions */
VOID        cm__q931_handler(IDD* idd, USHORT chan, ULONG Reserved, IDD_MSG* msg);
VOID        cm__q931_bchan_handler(VOID* idd, USHORT chan, ULONG RxFrameType, IDD_XMSG* msg);
VOID        cm__q931_cmpl_handler(VOID* idd, USHORT chan, IDD_MSG* msg);
INT         cm__elem_rq(VOID* idd, USHORT port, CHAR* elem, USHORT elem_num);
INT         cm__initiate_conn(CM* cm);
INT         cm__disc_rq(CM_CHAN* chan);
INT         cm__est_rq(CM_CHAN* chan);
INT         cm__est_rsp(CM_CHAN* chan);
INT         cm__est_ignore(PVOID idd, USHORT cid, USHORT lterm);
INT         cm__deactivate_conn(CM* cm, BOOL by_idle_timer);
INT         cm__activate_conn(CM* cm, ULONG CompressionFlag);
INT         cm__bchan_ctrl(CM_CHAN* chan, BOOL turn_on);
INT			cm__bchan_ctrl_comp(CM_CHAN *chan, ULONG CompressionFlag);
CM_CHAN*    cm__map_chan(VOID* idd, USHORT lterm, USHORT cid);
CM_CHAN*    cm__map_bchan_chan(VOID* idd, USHORT port);
INT         cm__ans_est_ind(CM_CHAN* chan, IDD_MSG* msg, VOID* idd, USHORT lterm);
INT         cm__org_cid_ind(CM_CHAN* chan, IDD_MSG* msg);
INT         cm__org_state_ind(CM_CHAN* chan, IDD_MSG* msg);
INT         cm__ans_state_ind(CM_CHAN* chan, IDD_MSG* msg);
INT         cm__org_elem_ind(CM_CHAN* chan, IDD_MSG* msg);
INT         cm__org_data_ind(CM_CHAN* chan, IDD_MSG* msg);
INT         cm__ans_data_ind(CM_CHAN* chan, IDD_MSG* msg);
UCHAR       cm__calc_chksum(VOID* buf_1, INT len);
CM*         cm__get_conn(ULONG conn_index);
INT         cm__get_next_chan(CM_CHAN* chan);
INT         cm__tx_uus_pkt(CM_CHAN *chan, UCHAR opcode, UCHAR cause);
INT         cm__get_bchan(IDD_MSG* msg, USHORT* bchan);
INT         cm__get_type(IDD_MSG* msg, USHORT* type);
INT         cm__get_addr(IDD_MSG* msg, CHAR addr[32]);
ULONG       cm__type2speed(USHORT type);
UCHAR       *cm__q931_elem(VOID* ptr_1, INT len, UCHAR elem);
INT         cm__timer_tick(CM* cm);
CM_CHAN     *cm__chan_alloc(VOID);
VOID        cm__chan_free(CM_CHAN* chan);
BOOL        cm__chan_foreach(BOOL (*func)(), VOID* a1, VOID* a2);
BOOL        cm__inc_chan_num(CM_CHAN* chan, CM_CHAN* ref_chan, ULONG *chan_num);
BOOL        cm__add_chan(CM_CHAN* chan, CM_CHAN* ref_chan, CM* cm);
CM*         cm__find_listen_conn(CHAR* lname, CHAR* rname, CHAR* addr, VOID*);
VOID		ChannelInit(VOID);
VOID		ChannelTerm(VOID);
VOID		cm__ppp_conn(VOID *idd, USHORT port);
INT			WanLineup(VOID* cm_1, NDIS_HANDLE Endpoint);
INT			WanLinedown(VOID* cm_1);
ULONG		EnumCmInSystem(VOID);
ULONG		EnumCmPerAdapter(ADAPTER*);
INT			IoEnumCm(VOID* cmd_1);
VOID*		CmGetMtl(VOID* cm_1);
UCHAR*		GetDstAddr(VOID *cm_1);
UCHAR*		GetSrcAddr(VOID *cm_1);
VOID		CmPollFunction(VOID *a1, ADAPTER *Adapter, VOID *a3, VOID *a4);
VOID		CmSetSwitchStyle(CHAR *SwitchStyle);

#endif		/* _CM_ */