usbgem.h revision 6716431ba7de213d5c318e58dc24c8a36da9b068
/*
* usbgem.h: General USB to Ethernet MAC driver framework
* @(#)usbgem.h 1.4 12/02/09
* (C) Copyright 2003-2009 Masayuki Murayama KHF04453@nifty.ne.jp
*/
#ifndef __USBGEM_H__
#define __USBGEM_H__
#pragma ident "@(#)usbgem.h 1.4 12/02/09"
#ifdef USBGEM_CONFIG_GLDv3
#ifndef MAC_VERSION
#include <sys/mac_provider.h>
#endif
#include <sys/mac_ether.h>
#else
#endif /* GLDv3 */
/*
* Useful macros and typedefs
*/
#define USBGEM_NAME_LEN 32
/* general return code */
#define USBGEM_SUCCESS 0
#define USBGEM_FAILURE 1
/* return code of usbgem_tx_done */
#define INTR_RESTART_TX 0x80000000U
struct usbgem_stats {
};
struct mcast_addr {
struct ether_addr addr;
};
#define USBGEM_MAXMC 64
/*
* mac soft state
*/
struct usbgem_dev {
#ifdef USBGEM_CONFIG_GLDv3
#else
void *macinfo; /* opaque handle for upper layer */
#endif
char name[USBGEM_NAME_LEN];
/* pointer to usb private data */
/* usb handles */
/* usb endpoints */
/* usb policies */
/* MAC address information */
struct ether_addr cur_addr;
struct ether_addr dev_addr;
/* RX state and resource management */
int rx_busy_cnt;
/* RX buffer management */
int rx_buf_len;
/* TX state and resource management */
int tx_busy_cnt;
int bulkout_timeout; /* in second */
int tx_max_packets;
int tx_seq_num;
int tx_intr_pended;
/* NIC state from OS view */
int nic_state;
#define NIC_STATE_UNKNOWN 0
#define NIC_STATE_STOPPED 1
#define NIC_STATE_INITIALIZED 2
#define NIC_STATE_ONLINE 3
/* MAC state from hardware view */
int mac_state;
#define MAC_STATE_DISCONNECTED 0 /* it includes suspended state too */
/* robustness: timer and watchdog */
/* MII mamagement */
int speed:3;
#define USBGEM_SPD_10 0
#define USBGEM_SPD_100 1
#define USBGEM_SPD_1000 2
#define USBGEM_SPD_NUM 3
unsigned int flow_control:2;
#define FLOW_CONTROL_NONE 0
#define FLOW_CONTROL_SYMMETRIC 1
#define FLOW_CONTROL_TX_PAUSE 2
#define FLOW_CONTROL_RX_PAUSE 3
int mii_state;
#define MII_STATE_UNKNOWN 0
#define MII_STATE_RESETTING 1
#define MII_STATE_AUTONEGOTIATING 2
#define MII_STATE_AN_DONE 3
#define MII_STATE_MEDIA_SETUP 4
#define MII_STATE_LINKUP 5
#define MII_STATE_LINKDOWN 6
/* multcast list */
int mc_count;
int mc_count_req;
struct mcast_addr *mc_list;
int rxmode;
#define RXMODE_PROMISC 0x01
#define RXMODE_ALLMULTI_REQ 0x02
#define RXMODE_MULTI_OVF 0x04
#define RXMODE_ENABLE 0x08
#define RXMODE_BITS \
"\020" \
"\004ENABLE" \
"\003MULTI_OVF" \
"\002ALLMULTI_REQ" \
"\001PROMISC"
/* statistcs */
struct usbgem_stats stats;
/* pointer to local structure */
void *private;
int priv_size;
/* configuration */
struct usbgem_conf {
/* name */
char usbgc_name[USBGEM_NAME_LEN];
int usbgc_ppa;
/* specification on usb */
int usbgc_ifnum; /* interface number */
int usbgc_alt; /* alternate */
/* specification on tx engine */
int usbgc_tx_list_max;
/* specification on rx engine */
int usbgc_rx_header_len;
int usbgc_rx_list_max;
/* time out parameters */
/* flow control */
int usbgc_flow_control;
/* MII timeout parameters */
/* MII configuration */
int usbgc_mii_addr_min;
#define MII_ACTION_NONE 0
#define MII_ACTION_RESET 1
#define MII_ACTION_RSA 2
/* I/O methods */
/* mac operation */
const uint8_t *);
/* packet manipulation */
/* mii operations */
int *errp);
/* jumbo frame */
int usbgc_max_mtu;
int usbgc_default_mtu;
int usbgc_min_mtu;
} ugc;
int misc_flag;
#define USBGEM_VLAN 0x0001
/* buffer size */
/* performance tuning parameters */
/* kstat stuff */
/* ndd stuff */
#ifdef USBGEM_DEBUG_LEVEL
int tx_cnt;
#endif
};
/*
* Exported functions
*/
uint32_t v);
void *valp);
int usbgem_mii_probe_default(struct usbgem_dev *);
int usbgem_mii_init_default(struct usbgem_dev *);
void usbgem_mii_update_link(struct usbgem_dev *);
void usbgem_restart_tx(struct usbgem_dev *);
void usbgem_receive(struct usbgem_dev *);
struct usbgem_conf *, void *, int);
int usbgem_do_detach(dev_info_t *);
int usbgem_resume(dev_info_t *);
int usbgem_suspend(dev_info_t *);
int usbgem_quiesce(dev_info_t *);
#ifdef USBGEM_CONFIG_GLDv3
#if DEVO_REV < 4
#else
#endif
#else
#define usbgem_getinfo gld_getinfo
#define usbgem_open gld_open
#define usbgem_close gld_close
#define usbgem_wput gld_wput
#define usbgem_wsrv gld_wsrv
#define usbgem_rsrv gld_rsrv
#define usbgem_power NULL
#endif
int usbgem_mod_init(struct dev_ops *, char *);
void usbgem_mod_fini(struct dev_ops *);
#define USBGEM_GET_DEV(dip) \
#endif /* __USBGEM_H__ */