1/*
2 * CDC network driver ioctl/indication encoding
3 * Broadcom 802.11abg Networking Device Driver
4 *
5 * Definitions subject to change without notice.
6 *
7 * Copyright (C) 1999-2012, Broadcom Corporation
8 *
9 *      Unless you and Broadcom execute a separate written software license
10 * agreement governing use of this software, this software is licensed to you
11 * under the terms of the GNU General Public License version 2 (the "GPL"),
12 * available at http://www.broadcom.com/licenses/GPLv2.php, with the
13 * following added to such license:
14 *
15 *      As a special exception, the copyright holders of this software give you
16 * permission to link this software with independent modules, and to copy and
17 * distribute the resulting executable under terms of your choice, provided that
18 * you also meet, for each linked independent module, the terms and conditions of
19 * the license of that module.  An independent module is a module which is not
20 * derived from this software.  The special exception does not apply to any
21 * modifications of the software.
22 *
23 *      Notwithstanding the above, under no circumstances may you combine this
24 * software in any way with any other Broadcom software provided under a license
25 * other than the GPL, without Broadcom's express prior written consent.
26 *
27 * $Id: bcmcdc.h 318308 2012-03-02 02:23:42Z $
28 */
29#ifndef _bcmcdc_h_
30#define	_bcmcdc_h_
31#include <proto/ethernet.h>
32
33typedef struct cdc_ioctl {
34	uint32 cmd;
35	uint32 len;
36	uint32 flags;
37	uint32 status;
38} cdc_ioctl_t;
39
40
41#define CDC_MAX_MSG_SIZE   ETHER_MAX_LEN
42
43
44#define CDCL_IOC_OUTLEN_MASK   0x0000FFFF
45
46#define CDCL_IOC_OUTLEN_SHIFT  0
47#define CDCL_IOC_INLEN_MASK    0xFFFF0000
48#define CDCL_IOC_INLEN_SHIFT   16
49
50
51#define CDCF_IOC_ERROR		0x01
52#define CDCF_IOC_SET		0x02
53#define CDCF_IOC_OVL_IDX_MASK	0x3c
54#define CDCF_IOC_OVL_RSV	0x40
55#define CDCF_IOC_OVL		0x80
56#define CDCF_IOC_ACTION_MASK	0xfe
57#define CDCF_IOC_ACTION_SHIFT	1
58#define CDCF_IOC_IF_MASK	0xF000
59#define CDCF_IOC_IF_SHIFT	12
60#define CDCF_IOC_ID_MASK	0xFFFF0000
61#define CDCF_IOC_ID_SHIFT	16
62
63#define CDC_IOC_IF_IDX(flags)	(((flags) & CDCF_IOC_IF_MASK) >> CDCF_IOC_IF_SHIFT)
64#define CDC_IOC_ID(flags)	(((flags) & CDCF_IOC_ID_MASK) >> CDCF_IOC_ID_SHIFT)
65
66#define CDC_GET_IF_IDX(hdr) \
67	((int)((((hdr)->flags) & CDCF_IOC_IF_MASK) >> CDCF_IOC_IF_SHIFT))
68#define CDC_SET_IF_IDX(hdr, idx) \
69	((hdr)->flags = (((hdr)->flags & ~CDCF_IOC_IF_MASK) | ((idx) << CDCF_IOC_IF_SHIFT)))
70
71
72
73struct bdc_header {
74	uint8	flags;
75	uint8	priority;
76	uint8	flags2;
77	uint8	dataOffset;
78};
79
80#define	BDC_HEADER_LEN		4
81
82
83#define BDC_FLAG_80211_PKT	0x01
84#define BDC_FLAG_SUM_GOOD	0x04
85#define BDC_FLAG_SUM_NEEDED	0x08
86#define BDC_FLAG_EVENT_MSG	0x08
87#define BDC_FLAG_VER_MASK	0xf0
88#define BDC_FLAG_VER_SHIFT	4
89
90
91#define BDC_PRIORITY_MASK	0x07
92#define BDC_PRIORITY_FC_MASK	0xf0
93#define BDC_PRIORITY_FC_SHIFT	4
94
95
96#define BDC_FLAG2_IF_MASK	0x0f
97#define BDC_FLAG2_IF_SHIFT	0
98#define BDC_FLAG2_FC_FLAG	0x10
99
100
101
102#define BDC_PROTO_VER_1		1
103#define BDC_PROTO_VER		2
104
105
106#define BDC_GET_IF_IDX(hdr) \
107	((int)((((hdr)->flags2) & BDC_FLAG2_IF_MASK) >> BDC_FLAG2_IF_SHIFT))
108#define BDC_SET_IF_IDX(hdr, idx) \
109	((hdr)->flags2 = (((hdr)->flags2 & ~BDC_FLAG2_IF_MASK) | ((idx) << BDC_FLAG2_IF_SHIFT)))
110
111#define BDC_FLAG2_PAD_MASK		0xf0
112#define BDC_FLAG_PAD_MASK		0x03
113#define BDC_FLAG2_PAD_SHIFT		2
114#define BDC_FLAG_PAD_SHIFT		0
115#define BDC_FLAG2_PAD_IDX		0x3c
116#define BDC_FLAG_PAD_IDX		0x03
117#define BDC_GET_PAD_LEN(hdr) \
118	((int)(((((hdr)->flags2) & BDC_FLAG2_PAD_MASK) >> BDC_FLAG2_PAD_SHIFT) | \
119	((((hdr)->flags) & BDC_FLAG_PAD_MASK) >> BDC_FLAG_PAD_SHIFT)))
120#define BDC_SET_PAD_LEN(hdr, idx) \
121	((hdr)->flags2 = (((hdr)->flags2 & ~BDC_FLAG2_PAD_MASK) | \
122	(((idx) & BDC_FLAG2_PAD_IDX) << BDC_FLAG2_PAD_SHIFT))); \
123	((hdr)->flags = (((hdr)->flags & ~BDC_FLAG_PAD_MASK) | \
124	(((idx) & BDC_FLAG_PAD_IDX) << BDC_FLAG_PAD_SHIFT)))
125
126#endif
127