summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/prism54/islpci_mgt.h
blob: f91a88fc1e35b0023faf78daf85780fafb17f495 (plain)
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
/*
 *  Copyright (C) 2002 Intersil Americas Inc.
 *  Copyright (C) 2003 Luis R. Rodriguez <mcgrof@ruslug.rutgers.edu>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */

#ifndef _ISLPCI_MGT_H
#define _ISLPCI_MGT_H

#include <linux/wireless.h>
#include <linux/skbuff.h>

/*
 *  Function definitions
 */

#define K_DEBUG(f, m, args...) do { if(f & m) printk(KERN_DEBUG args); } while(0)
#define DEBUG(f, args...) K_DEBUG(f, pc_debug, args)

extern int pc_debug;
#define init_wds 0	/* help compiler optimize away dead code */


/* General driver definitions */
#define PCIDEVICE_LATENCY_TIMER_MIN		0x40
#define PCIDEVICE_LATENCY_TIMER_VAL		0x50

/* Debugging verbose definitions */
#define SHOW_NOTHING                            0x00	/* overrules everything */
#define SHOW_ANYTHING                           0xFF
#define SHOW_ERROR_MESSAGES                     0x01
#define SHOW_TRAPS                              0x02
#define SHOW_FUNCTION_CALLS                     0x04
#define SHOW_TRACING                            0x08
#define SHOW_QUEUE_INDEXES                      0x10
#define SHOW_PIMFOR_FRAMES                      0x20
#define SHOW_BUFFER_CONTENTS                    0x40
#define VERBOSE                                 0x01

/* Default card definitions */
#define CARD_DEFAULT_CHANNEL                    6
#define CARD_DEFAULT_MODE                       INL_MODE_CLIENT
#define CARD_DEFAULT_IW_MODE			IW_MODE_INFRA
#define CARD_DEFAULT_BSSTYPE                    DOT11_BSSTYPE_INFRA
#define CARD_DEFAULT_CLIENT_SSID		""
#define CARD_DEFAULT_AP_SSID			"default"
#define CARD_DEFAULT_KEY1                       "default_key_1"
#define CARD_DEFAULT_KEY2                       "default_key_2"
#define CARD_DEFAULT_KEY3                       "default_key_3"
#define CARD_DEFAULT_KEY4                       "default_key_4"
#define CARD_DEFAULT_WEP                        0
#define CARD_DEFAULT_FILTER                     0
#define CARD_DEFAULT_WDS                        0
#define	CARD_DEFAULT_AUTHEN                     DOT11_AUTH_OS
#define	CARD_DEFAULT_DOT1X			0
#define CARD_DEFAULT_MLME_MODE			DOT11_MLME_AUTO
#define CARD_DEFAULT_CONFORMANCE                OID_INL_CONFORMANCE_NONE
#define CARD_DEFAULT_PROFILE			DOT11_PROFILE_MIXED_G_WIFI
#define CARD_DEFAULT_MAXFRAMEBURST		DOT11_MAXFRAMEBURST_MIXED_SAFE

/* PIMFOR package definitions */
#define PIMFOR_ETHERTYPE                        0x8828
#define PIMFOR_HEADER_SIZE                      12
#define PIMFOR_VERSION                          1
#define PIMFOR_OP_GET                           0
#define PIMFOR_OP_SET                           1
#define PIMFOR_OP_RESPONSE                      2
#define PIMFOR_OP_ERROR                         3
#define PIMFOR_OP_TRAP                          4
#define PIMFOR_OP_RESERVED                      5	/* till 255 */
#define PIMFOR_DEV_ID_MHLI_MIB                  0
#define PIMFOR_FLAG_APPLIC_ORIGIN               0x01
#define PIMFOR_FLAG_LITTLE_ENDIAN               0x02

static inline void
add_le32p(__le32 * le_number, u32 add)
{
	*le_number = cpu_to_le32(le32_to_cpup(le_number) + add);
}

void display_buffer(char *, int);

/*
 *  Type definition section
 *
 *  the structure defines only the header allowing copyless
 *  frame handling
 */
typedef struct {
	u8 version;
	u8 operation;
	u32 oid;
	u8 device_id;
	u8 flags;
	u32 length;
} __attribute__ ((packed))
pimfor_header_t;

/* A received and interrupt-processed management frame, either for
 * schedule_work(prism54_process_trap) or for priv->mgmt_received,
 * processed by islpci_mgt_transaction(). */
struct islpci_mgmtframe {
	struct net_device *ndev;      /* pointer to network device */
	pimfor_header_t *header;      /* payload header, points into buf */
	void *data;		      /* payload ex header, points into buf */
        struct work_struct ws;	      /* argument for schedule_work() */
	char buf[0];		      /* fragment buffer */
};

int
islpci_mgt_receive(struct net_device *ndev);

int
islpci_mgmt_rx_fill(struct net_device *ndev);

void
islpci_mgt_cleanup_transmit(struct net_device *ndev);

int
islpci_mgt_transaction(struct net_device *ndev,
                       int operation, unsigned long oid,
		       void *senddata, int sendlen,
		       struct islpci_mgmtframe **recvframe);

static inline void
islpci_mgt_release(struct islpci_mgmtframe *frame)
{
        kfree(frame);
}

#endif				/* _ISLPCI_MGT_H */