1 // Portions of this file taken from
2 // Petko Manolov - Petkan (petkan@dce.bg)
3 // from his driver pegasus.h
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 /* From CDC Spec Table 24 */
22 #define CS_INTERFACE 0x24
24 #define CDC_ETHER_MAX_MTU 1536
26 /* These definitions are used with the ether_dev_t flags element */
27 #define CDC_ETHER_PRESENT 0x00000001
28 #define CDC_ETHER_RUNNING 0x00000002
29 #define CDC_ETHER_TX_BUSY 0x00000004
30 #define CDC_ETHER_RX_BUSY 0x00000008
31 #define CDC_ETHER_UNPLUG 0x00000040
33 #define CDC_ETHER_TX_TIMEOUT (HZ*10)
35 #define TX_UNDERRUN 0x80
36 #define EXCESSIVE_COL 0x40
38 #define NO_CARRIER 0x10
39 #define LOSS_CARRIER 0x08
40 #define JABBER_TIMEOUT 0x04
42 #define CDC_ETHER_REQT_READ 0xc0
43 #define CDC_ETHER_REQT_WRITE 0x40
44 #define CDC_ETHER_REQ_GET_REGS 0xf0
45 #define CDC_ETHER_REQ_SET_REGS 0xf1
46 #define CDC_ETHER_REQ_SET_REG PIPERIDER_REQ_SET_REGS
48 typedef struct _ether_dev_t {
49 struct usb_device *usb;
50 struct net_device *net;
51 struct net_device_stats stats;
54 int configuration_num;
55 int bConfigurationValue;
57 int comm_bInterfaceNumber;
58 int comm_interface_altset_num;
59 int comm_bAlternateSetting;
62 int data_bInterfaceNumber;
63 int data_interface_altset_num_with_traffic;
64 int data_bAlternateSetting_with_traffic;
65 int data_interface_altset_num_without_traffic;
66 int data_bAlternateSetting_without_traffic;
72 __u32 bmEthernetStatistics;
73 __u16 wMaxSegmentSize;
74 __u16 wNumberMCFilters;
75 __u8 bNumberPowerFilters;
78 struct usb_ctrlrequest ctrl_dr;
79 struct urb rx_urb, tx_urb, intr_urb, ctrl_urb;
80 unsigned char rx_buff[CDC_ETHER_MAX_MTU] __attribute__((aligned(L1_CACHE_BYTES)));
81 unsigned char tx_buff[CDC_ETHER_MAX_MTU] __attribute__((aligned(L1_CACHE_BYTES)));
82 unsigned char intr_buff[16]
83 __attribute__((aligned(L1_CACHE_BYTES))) ;
86 /* These definitions used in the Ethernet Packet Filtering requests */
87 /* See CDC Spec Table 62 */
88 #define MODE_FLAG_PROMISCUOUS (1<<0)
89 #define MODE_FLAG_ALL_MULTICAST (1<<1)
90 #define MODE_FLAG_DIRECTED (1<<2)
91 #define MODE_FLAG_BROADCAST (1<<3)
92 #define MODE_FLAG_MULTICAST (1<<4)
94 /* CDC Spec class requests - CDC Spec Table 46 */
95 #define SET_ETHERNET_MULTICAST_FILTER 0x40
96 #define SET_ETHERNET_PACKET_FILTER 0x43
99 /* These definitions are used with the ether_dev_t properties field */
100 #define HAVE_NOTIFICATION_ELEMENT 0x0001
101 #define PERFECT_FILTERING 0x0002
102 #define NO_SET_MULTICAST 0x0004
104 /* These definitions are used in the requirements parser */
105 #define REQ_HDR_FUNC_DESCR 0x0001
106 #define REQ_UNION_FUNC_DESCR 0x0002
107 #define REQ_ETH_FUNC_DESCR 0x0004
108 #define REQUIREMENTS_TOTAL REQ_ETH_FUNC_DESCR | REQ_UNION_FUNC_DESCR | REQ_HDR_FUNC_DESCR
110 /* Some useful lengths */
111 #define HEADER_FUNC_DESC_LEN 0x5
112 #define UNION_FUNC_DESC_LEN 0x5
113 #define ETHERNET_FUNC_DESC_LEN 0xD /* 13 for all you decimal weenies */