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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [rtems-20020807/] [c/] [src/] [lib/] [libbsp/] [i386/] [i386ex/] [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
 *      Jan 12/98 Added STAT bits, s11-=s5 and max_colls.
 *
 *  uti596.h,v 1.2 1999/01/20 18:55:50 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. */
};
 
 
 
enum commands {
  CmdNOp           = 0, 
  CmdSASetup       = 1, 
  CmdConfigure     = 2, 
  CmdMulticastList = 3,
  CmdTx            = 4, 
  CmdTDR           = 5, 
  CmdDump          = 6, 
  CmdDiagnose      = 7
};
 
 
#define UTI596_MUTEX   1
 
 
#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 IO_ADDR         0x360
#define PORT_ADDR       IO_ADDR
#define CHAN_ATTN       PORT_ADDR + 4
#define NIC_ADDR        PORT_ADDR + 8
 
struct i596_cmd {
    volatile unsigned short status;
    volatile unsigned short command;
    struct i596_cmd *next;
};
 
#define I596_NULL ( ( void * ) 0xffffffff)
#define UTI_596_END_OF_FRAME		0x8000
#define SIZE_MASK	0x3fff
 
/*
 * Transmit buffer Descriptor
 */
 
struct i596_tbd {
    unsigned short size;
    unsigned short pad;
    struct i596_tbd *next;
    char *data; 
};
 
/*
 * Receive buffer Descriptor
 */
 
struct i596_rbd {
    unsigned short count;
    unsigned short offset;
    struct i596_rbd *next;
    char           *data; 
    unsigned short size;
    unsigned short pad;
};
 
/*
 * Transmit Command Structure
 */
struct tx_cmd {
    struct i596_cmd cmd;
    struct i596_tbd *pTbd;
    unsigned short size;
    unsigned short pad;
} ;
 
 
/*
 * Receive Frame Descriptor
 */
struct i596_rfd {
    volatile unsigned short stat;
    volatile unsigned short cmd;
    struct i596_rfd *next;
    struct i596_rbd *pRbd; 
    unsigned short count;
    unsigned short size;
    char data [1532 ];    
} ;
 
 
struct i596_dump {
  struct i596_cmd cmd;
  char * pData;
};
 
struct i596_set_add {
  struct i596_cmd cmd;
  char   data[8];
};
 
struct i596_configure {
  struct i596_cmd cmd;
  char   data[16];
};
 
struct i596_nop {
  struct i596_cmd cmd;
};
 
struct i596_tdr {
  struct i596_cmd cmd;
  unsigned int data;
};
 
#define RX_RING_SIZE 8
 
/*
 * System Control Block
 */
struct i596_scb {
    volatile unsigned short status;
    volatile unsigned short command;
    struct i596_cmd *pCmd;
    struct i596_rfd *pRfd;
    volatile unsigned long crc_err;
    volatile unsigned long align_err;
    volatile unsigned long resource_err;
    volatile unsigned long over_err;
    volatile unsigned long rcvdt_err;
    volatile unsigned long short_err;
    volatile unsigned short t_on;
    volatile unsigned short t_off;
};
 
 
/* 
 * Intermediate System Control Block
 */
struct i596_iscp {
    volatile unsigned long stat;
    struct i596_scb *scb;
} ;
/*
 * System Control Parameters
 */
struct i596_scp {
    unsigned long sysbus;
    unsigned long pad;
    struct i596_iscp *iscp;
} ;
 
struct uti596_softc {
  struct arpcom                 arpcom;
  rtems_irq_connect_data	irqInfo;
  struct i596_scp              *pScp;
  struct i596_iscp              iscp;
  struct i596_scb               scb;
  struct i596_set_add           set_add;
  struct i596_configure         set_conf;
  struct i596_tdr               tdr;
  struct i596_nop               nop;               
  unsigned long                 stat;
  struct tx_cmd                *pTxCmd;
  struct i596_tbd              *pTbd;
 
  int                   ioAddr;
 
  struct i596_rfd     *pBeginRFA;
  struct i596_rfd     *pEndRFA;
  struct i596_rfd     *pLastUnkRFD;
  struct i596_rbd     *pLastUnkRBD;
  struct i596_rfd     *pEndSavedQueue;
  struct i596_cmd     *pCmdHead;
  struct 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;
  int                  resetDone;
  unsigned long	       txRawWait;
  struct i596_rfd     *pInboundFrameQueue;
  short int            rxBdCount;
  short int            txBdCount;
  short int            countRFD;
  short int            savedCount;
  struct i596_rfd     *pSavedRfdQueue;
  rtems_name           semaphore_name;
  rtems_id             semaphore_id;
  char                 zeroes[64];
  unsigned long        rawsndcnt;
  int                  nic_reset; /* flag is for requesting that ISR issue a reset quest */
} ;
#endif
 

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.