OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [rtems-20020807/] [c/] [src/] [lib/] [libbsp/] [m68k/] [mvme167/] [network/] [uti596.h] - Rev 1765

Compare with Previous | Blame | View Log

 
/* uti596.h: Contains the defines and structures used by the uti596 driver */
 
/*
 * EII: March 11: Created v. 0.0
 *
 *  uti596.h,v 1.3 2000/07/26 21:15:27 joel Exp
 */
 
#ifndef UTI596_H
#define UTI596_H
#include <rtems/error.h>
#include <rtems/rtems_bsdnet.h>
 
#include <sys/param.h>
#include <sys/mbuf.h>
#include <sys/socket.h>
#include <sys/sockio.h>
 
#include <net/if.h>
 
#include <netinet/in.h>
#include <netinet/if_ether.h>
 
/* Ethernet statistics */
 
struct enet_statistics{
  int	rx_packets;							/* total packets received */
  int	tx_packets;							/* total packets transmitted */
  int	rx_errors;							/* bad packets received	*/
  int	tx_errors;							/* packet transmit problems	*/
  int	rx_dropped;							/* no space in buffers */
  int	tx_dropped;
  int   tx_retries_exceeded;  /* excessive retries */
  int	multicast;							/* multicast packets received	*/
  int	collisions;
 
  /* detailed rx_errors: */
  int	rx_length_errors;
  int	rx_over_errors;					/* receiver ring buff overflow	*/
  int	rx_crc_errors;					/* recved pkt with crc error	*/
  int	rx_frame_errors;				/* recv'd frame alignment error */
  int	rx_fifo_errors;					/* recv'r fifo overrun		*/
  int	rx_missed_errors;				/* receiver missed packet	*/
 
  /* detailed tx_errors */
  int	tx_aborted_errors;
  int	tx_carrier_errors;
  int	tx_fifo_errors;
  int	tx_heartbeat_errors;
  int	tx_window_errors;
 
  /* NIC reset errors */
  int   nic_reset_count;      /* The number of times uti596reset() has been called. */
};
 
#define CMD_EOL						0x8000		/* The last command of the list, stop. */
#define CMD_SUSP					0x4000		/* Suspend after doing cmd. 					 */
#define CMD_INTR					0x2000		/* Interrupt after doing cmd. 				 */
 
#define CMD_FLEX					0x0008		/* Enable flexible memory model   */
 
#define SCB_STAT_CX    		0x8000  	/* Cmd completes with 'I' bit set */
#define SCB_STAT_FR    		0x4000  	/* Frame Received                 */
#define SCB_STAT_CNA   		0x2000  	/* Cmd unit Not Active            */
#define SCB_STAT_RNR   		0x1000  	/* Receiver Not Ready             */
 
#define SCB_CUS_SUSPENDED 0x0100
#define SCB_CUS_ACTIVE    0x0200
 
#define STAT_C						0x8000		/* Set to 1 after execution              */
#define STAT_B						0x4000		/* 1 : Cmd being executed, 0 : Cmd done. */
#define STAT_OK						0x2000		/* 1: Command executed ok 0 : Error      */
#define STAT_A    				0x1000  	/* command has been aborted              */
 
#define STAT_S11       		0x0800
#define STAT_S10        	0x0400
#define STAT_S9         	0x0200
#define STAT_S8         	0x0100
#define STAT_S7         	0x0080
#define STAT_S6         	0x0040
#define STAT_S5         	0x0020
#define STAT_MAX_COLLS  	0x000F
 
#define RBD_STAT_P      	0x4000  	/* prefetch */
#define RBD_STAT_F      	0x4000  	/* used */
 
#define	CUC_START					0x0100
#define	CUC_RESUME				0x0200
#define	CUC_SUSPEND    		0x0300
#define	CUC_ABORT					0x0400
#define	RX_START					0x0010
#define	RX_RESUME					0x0020
#define	RX_SUSPEND				0x0030
#define	RX_ABORT					0x0040
 
#define RU_SUSPENDED    	0x0010
#define RU_NO_RESOURCES 	0x0020
#define RU_READY        	0x0040
 
#define I596_NULL ( ( void * ) 0xffffffff)
#define UTI_596_END_OF_FRAME 0x8000
 
 
struct i596_tbd;  /* necessary forward declaration */
 
enum commands {
  CmdNOp           = 0, 
  CmdSASetup       = 1, 
  CmdConfigure     = 2, 
  CmdMulticastList = 3,
  CmdTx            = 4, 
  CmdTDR           = 5, 
  CmdDump          = 6, 
  CmdDiagnose      = 7
};
 
/*
 * 82596 Dump Command Result
 */
typedef volatile struct i596_dump_result {
  unsigned char bf;
  unsigned char config_bytes[11];
  unsigned char reserved1[2];
  unsigned char ia_bytes[6];
  unsigned short last_tx_status;
  unsigned short tx_crc_byte01;
  unsigned short tx_crc_byte23;
  unsigned short rx_crc_byte01;
  unsigned short rx_crc_byte23;  
  unsigned short rx_temp_mem01;
  unsigned short rx_temp_mem23;
  unsigned short rx_temp_mem45;
  unsigned short last_rx_status;
  unsigned short hash_reg01;
  unsigned short hash_reg23;
  unsigned short hash_reg45;
  unsigned short hash_reg67;
  unsigned short slot_time_counter;
  unsigned short wait_time_counter;
  unsigned short rx_frame_length;
  unsigned long reserved2;
  unsigned long cb_in3;
  unsigned long cb_in2;
  unsigned long cb_in1;
  unsigned long la_cb_addr;
  unsigned long rdb_pointer;
  unsigned long int_memory;
  unsigned long rfd_size;
  unsigned long tbd_pointer;
  unsigned long base_addr;
  unsigned long ru_temp_reg;
  unsigned long tcb_count;
  unsigned long next_rb_size;
  unsigned long next_rb_addr;
  unsigned long curr_rb_size;
  unsigned long la_rbd_addr;
  unsigned long next_rbd_addr;
  unsigned long curr_rbd_addr;
  unsigned long curr_rb_count;
  unsigned long next_fd_addr;
  unsigned long curr_fd_add;
  unsigned long temp_cu_reg;
  unsigned long next_tb_count;
  unsigned long buffer_addr;
  unsigned long la_tbd_addr;
  unsigned long next_tbd_addr;
  unsigned long cb_command;
  unsigned long next_cb_addr;
  unsigned long curr_cb_addr;
  unsigned long scb_cmd_word;
  unsigned long scb_pointer;
  unsigned long cb_stat_word;
  unsigned long mm_lfsr;
  unsigned char micro_machine_bit_array[28];
  unsigned char cu_port[16];
  unsigned long mm_alu;
  unsigned long reserved3;
  unsigned long mm_temp_a_rr;
  unsigned long mm_temp_a;
  unsigned long tx_dma_b_cnt;
  unsigned long mm_input_port_addr_reg;
  unsigned long tx_dma_addr;
  unsigned long mm_port_reg1;
  unsigned long rx_dma_b_cnt;
  unsigned long mm_port_reg2;
  unsigned long rx_dma_addr;
  unsigned long reserved4;
  unsigned long bus_t_timers;
  unsigned long diu_cntrl_reg;
  unsigned long reserved5;
  unsigned long sysbus;
  unsigned long biu_cntrl_reg;
  unsigned long mm_disp_reg;
  unsigned long mm_status_reg;
  unsigned short dump_status;
} i596_dump_result;
 
typedef volatile struct i596_selftest {
  unsigned long rom_signature;
  unsigned long results;
} i596_selftest;
 
/* 
 * Action commands
 *   (big endian, linear mode)
 */ 
typedef volatile struct i596_cmd {
  unsigned short status;
  unsigned short command;
  volatile struct i596_cmd *next;
} i596_cmd;
 
typedef volatile struct i596_nop {
  i596_cmd cmd;
} i596_nop;
 
typedef volatile struct i596_set_add {
  i596_cmd cmd;
  char data[8];
} i596_set_add;
 
typedef volatile struct i596_configure {
  i596_cmd cmd;
  char data[16];
} i596_configure;
 
typedef volatile struct i596_tx {
  i596_cmd cmd;
  volatile struct i596_tbd *pTbd;
  unsigned short count;
  unsigned short pad;
  char data[6];
  unsigned short length;
} i596_tx;
 
typedef volatile struct i596_tdr {
  i596_cmd cmd;
  unsigned long data;
} i596_tdr;
 
typedef volatile struct i596_dump {
  i596_cmd cmd;
  char *pData;
} i596_dump;
 
/*
 * Transmit buffer descriptor
 */
typedef volatile struct i596_tbd {
	  unsigned short size;
	  unsigned short pad;
	  volatile struct i596_tbd *next;
	  char *data; 
} i596_tbd;
 
/*
 * Receive buffer descriptor
 *   (flexible memory structure)
 */
typedef volatile struct i596_rbd {
	  unsigned short count;
	  unsigned short offset;
	  volatile struct i596_rbd *next;
	  char *data; 
	  unsigned short size;
	  unsigned short pad;
} i596_rbd;
 
/*
 * Receive Frame Descriptor
 */
typedef volatile struct i596_rfd {
	  unsigned short stat;
	  unsigned short cmd;
	  volatile struct i596_rfd *next;
	  i596_rbd *pRbd; 
	  unsigned short count;
	  unsigned short size;
	  char data [1532];    
} i596_rfd;
 
/*
 * System Control Block
 */
typedef volatile struct i596_scb {
	  unsigned short status;
	  unsigned short command;
	  unsigned long cmd_pointer;
	  unsigned long rfd_pointer;
	  unsigned long crc_err;
	  unsigned long align_err;
	  unsigned long resource_err;
	  unsigned long over_err;
	  unsigned long rcvdt_err;
	  unsigned long short_err;
	  unsigned short t_off;
	  unsigned short t_on;
	  i596_cmd *pCmd;
	  i596_rfd *pRfd;
} i596_scb;
 
/* 
 * Intermediate System Configuration Pointer
 */
typedef volatile struct i596_iscp {
    unsigned8 null1;            			/* Always zero */
    unsigned8 busy;										/* Busy byte */
    unsigned short scb_offset;  			/* Not used in linear mode */
    unsigned long scb_pointer;      	/* Swapped pointer to scb */
    i596_scb *scb;										/* Real pointer to scb */
} i596_iscp;
 
/*
 * System Configuration Pointer
 */
typedef volatile struct i596_scp {
    unsigned long sysbus;							/* Only low 8 bits are used */
    unsigned long pad;								/* Must be zero */
    unsigned long iscp_pointer;       /* Swapped pointer to iscp */
    i596_iscp *iscp;									/* Real pointer to iscp */
} i596_scp;
 
/*
 * Device Dependent Data Structure
 */
typedef volatile struct uti596_softc {
  struct arpcom arpcom;
  i596_scp *pScp;											/* Block aligned on 16 byte boundary */
  i596_scp *base_scp;                 /* Unaligned block. Need for free() */
  i596_iscp iscp;
  i596_scb scb;
  i596_set_add set_add;
  i596_configure set_conf;
  i596_tdr tdr;
  i596_nop nop;               
  i596_tx  *pTxCmd;
  i596_tbd *pTbd;
 
  i596_rfd *pBeginRFA;
  i596_rfd *pEndRFA;
  i596_rfd *pLastUnkRFD;
  i596_rbd *pLastUnkRBD;
  i596_rfd *pEndSavedQueue;
  i596_cmd *pCmdHead;
  i596_cmd *pCmdTail;  				/* unneeded, as chaining not used, but implemented */
 
  rtems_id rxDaemonTid;
  rtems_id txDaemonTid;
  rtems_id resetDaemonTid;
 
  struct enet_statistics stats;
  int started;
  unsigned long rxInterrupts;
  unsigned long txInterrupts;
  volatile int cmdOk;
  unsigned short * pCurrent_command_status;
  int resetDone;
  unsigned long txRawWait;
  i596_rfd *pInboundFrameQueue;
  short int rxBdCount;
  short int txBdCount;
  short int countRFD;
  short int savedCount;
  i596_rfd *pSavedRfdQueue;
  rtems_name semaphore_name;
  rtems_id semaphore_id;
  char zeroes[64];
  unsigned long rawsndcnt;
  int nic_reset;  /* flag for requesting that ISR issue a reset quest */
} uti596_softc_;
 
#endif /* UTI596_H */
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.