/*
* sfe_util.h: header to support the gem layer used by Masa Murayama
*
* Copyright (c) 2002-2008 Masayuki Murayama. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
*
* 3. Neither the name of the author nor the names of its contributors may be
* used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*/
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SFE_UTIL_H_
#define _SFE_UTIL_H_
#include <sys/mac_provider.h>
#include <sys/mac_ether.h>
/*
* Useful macros and typedefs
*/
/* general return code */
#define GEM_SUCCESS 0
/* return code of gem_tx_done */
/*
* I/O instructions
*/
struct gem_stats {
};
/* TX buffer management */
struct txbuf {
/* pointer to original mblk */
/* dma mapping for current packet */
/* bounce buffer management */
/* timeout management */
/* Hardware descriptor info */
int txb_ndescs;
};
/* RX buffer management */
struct rxbuf {
/* Hardware independent section */
/* dma mapping management */
/* bounce buffer management */
};
struct mcast_addr {
};
/*
* mac soft state
*/
struct gem_dev {
void *base_addr;
/* MAC address information */
/* Descriptor rings, io area */
/* caddr_t rx_buf; */
/* RX slot ring management */
/* Rx buffer management */
int rx_buf_allocated;
int rx_buf_freecnt;
int rx_buf_len;
/* TX descriptor ring management */
/* TX buffur ring management */
int tx_max_packets;
/* TX buffer resource management */
/* TX state management */
int tx_busy;
int tx_reclaim_busy;
/* NIC state */
#define NIC_STATE_STOPPED 0
/* robustness: timer and watchdog */
/* MII management */
#define GEM_SPD_10 0
#define FLOW_CONTROL_NONE 0
#define MII_STATE_UNKNOWN 0
/* multcast list management */
#define RXMODE_BITS \
"\020" \
"\004ENABLE" \
"\003MULTI_OVF" \
"\002ALLMULTI_REQ" \
"\001PROMISC"
/* statistcs */
/* pointer to local structure */
void *private;
int priv_size;
/* polling mode */
/* descriptor area */
int tx_desc_size;
int rx_desc_size;
/* configuration */
struct gem_conf {
/* name */
/* specification on tx and rx dma engine */
long gc_tx_buf_align;
int gc_tx_max_frags;
int gc_tx_buf_size;
int gc_tx_buf_limit;
int gc_tx_ring_size;
int gc_tx_ring_limit;
int gc_tx_copy_thresh;
long gc_rx_buf_align;
int gc_rx_max_frags;
int gc_rx_ring_size;
int gc_rx_copy_thresh;
int gc_rx_buf_max;
int gc_rx_header_len;
int gc_io_area_size;
/* memory mapping attributes */
/* dma attributes */
/* tx time out parameters */
/* auto negotiation capability */
int gc_flow_control;
/* MII mode */
int gc_mii_mode;
#define GEM_MODE_100BASETX 0
/* MII link state watch parameters */
/* MII configuration */
int gc_mii_addr_min;
#define MII_ACTION_NONE 0
/* I/O methods */
/* mac operation */
/* descriptor operation */
/* mii operations */
int gc_nports;
/* hw checksum */
} gc;
/* performance tuning parameters */
/* kstat stuff */
/* multiple port device support */
int port;
/* ndd stuff */
#ifdef GEM_DEBUG_LEVEL
int tx_cnt;
#endif
};
/*
* Exported functions
*/
int gem_mii_probe_default(struct gem_dev *);
int gem_mii_config_default(struct gem_dev *);
int gem_receive(struct gem_dev *);
int gem_receive_copy(struct gem_dev *);
struct gem_conf *, void *, ddi_acc_handle_t *, void *, int);
int gem_do_detach(dev_info_t *);
void gem_rx_desc_dma_sync(struct gem_dev *, int, int, int);
void gem_tx_desc_dma_sync(struct gem_dev *, int, int, int);
int gem_resume(dev_info_t *);
int gem_suspend(dev_info_t *);
void gem_mod_init(struct dev_ops *, char *);
void gem_mod_fini(struct dev_ops *);
#endif /* _SFE_UTIL_H_ */