blob: 47f95f8cc02b90ecaef86f31df4b4c03cb6dd924 [file] [log] [blame]
// Portions of this file taken from
// Petko Manolov - Petkan (petkan@dce.bg)
// from his driver pegasus.h
/*
* 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, or
* (at your option) any later version.
*
* 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
*/
/* From CDC Spec Table 24 */
#define CS_INTERFACE 0x24
#define CDC_ETHER_MAX_MTU 1536
/* These definitions are used with the ether_dev_t flags element */
#define CDC_ETHER_PRESENT 0x00000001
#define CDC_ETHER_RUNNING 0x00000002
#define CDC_ETHER_TX_BUSY 0x00000004
#define CDC_ETHER_RX_BUSY 0x00000008
#define CDC_ETHER_UNPLUG 0x00000040
#define CDC_ETHER_TX_TIMEOUT (HZ*10)
#define TX_UNDERRUN 0x80
#define EXCESSIVE_COL 0x40
#define LATE_COL 0x20
#define NO_CARRIER 0x10
#define LOSS_CARRIER 0x08
#define JABBER_TIMEOUT 0x04
#define CDC_ETHER_REQT_READ 0xc0
#define CDC_ETHER_REQT_WRITE 0x40
#define CDC_ETHER_REQ_GET_REGS 0xf0
#define CDC_ETHER_REQ_SET_REGS 0xf1
#define CDC_ETHER_REQ_SET_REG PIPERIDER_REQ_SET_REGS
typedef struct _ether_dev_t {
struct usb_device *usb;
struct net_device *net;
struct net_device_stats stats;
unsigned flags;
unsigned properties;
int configuration_num;
int bConfigurationValue;
int comm_interface;
int comm_bInterfaceNumber;
int comm_interface_altset_num;
int comm_bAlternateSetting;
int comm_ep_in;
int data_interface;
int data_bInterfaceNumber;
int data_interface_altset_num_with_traffic;
int data_bAlternateSetting_with_traffic;
int data_interface_altset_num_without_traffic;
int data_bAlternateSetting_without_traffic;
int data_ep_in;
int data_ep_out;
int data_ep_out_size;
__u16 bcdCDC;
__u8 iMACAddress;
__u32 bmEthernetStatistics;
__u16 wMaxSegmentSize;
__u16 wNumberMCFilters;
__u8 bNumberPowerFilters;
__u16 mode_flags;
int intr_interval;
struct usb_ctrlrequest ctrl_dr;
struct urb rx_urb, tx_urb, intr_urb, ctrl_urb;
unsigned char rx_buff[CDC_ETHER_MAX_MTU] __attribute__((aligned(L1_CACHE_BYTES)));
unsigned char tx_buff[CDC_ETHER_MAX_MTU] __attribute__((aligned(L1_CACHE_BYTES)));
unsigned char intr_buff[16]
__attribute__((aligned(L1_CACHE_BYTES))) ;
} ether_dev_t;
/* These definitions used in the Ethernet Packet Filtering requests */
/* See CDC Spec Table 62 */
#define MODE_FLAG_PROMISCUOUS (1<<0)
#define MODE_FLAG_ALL_MULTICAST (1<<1)
#define MODE_FLAG_DIRECTED (1<<2)
#define MODE_FLAG_BROADCAST (1<<3)
#define MODE_FLAG_MULTICAST (1<<4)
/* CDC Spec class requests - CDC Spec Table 46 */
#define SET_ETHERNET_MULTICAST_FILTER 0x40
#define SET_ETHERNET_PACKET_FILTER 0x43
/* These definitions are used with the ether_dev_t properties field */
#define HAVE_NOTIFICATION_ELEMENT 0x0001
#define PERFECT_FILTERING 0x0002
#define NO_SET_MULTICAST 0x0004
/* These definitions are used in the requirements parser */
#define REQ_HDR_FUNC_DESCR 0x0001
#define REQ_UNION_FUNC_DESCR 0x0002
#define REQ_ETH_FUNC_DESCR 0x0004
#define REQUIREMENTS_TOTAL REQ_ETH_FUNC_DESCR | REQ_UNION_FUNC_DESCR | REQ_HDR_FUNC_DESCR
/* Some useful lengths */
#define HEADER_FUNC_DESC_LEN 0x5
#define UNION_FUNC_DESC_LEN 0x5
#define ETHERNET_FUNC_DESC_LEN 0xD /* 13 for all you decimal weenies */