Newer
Older
UbixOS / sys / include / isa / ne2k.h
/*-
 * Copyright (c) 2002-2018 The UbixOS Project.
 * All rights reserved.
 *
 * This was developed by Christopher W. Olsen for the UbixOS Project.
 *
 * 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, the following disclaimer and the list of authors.
 * 2) Redistributions in binary form must reproduce the above copyright notice, this list of
 *    conditions, the following disclaimer and the list of authors in the documentation and/or
 *    other materials provided with the distribution.
 * 3) Neither the name of the UbixOS Project 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 AUTHOR 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.
 */

#ifndef _ISA_NE2K_H
#define _ISA_NE2K_H

#include <sys/types.h>
#include <sys/device.old.h>

#define ether_addr  ether_addr_t
typedef struct dp_rcvhdr
{
        uInt8 dr_status;                 /* Copy of rsr                       */
        uInt8 dr_next;                   /* Pointer to next packet            */
        uInt8 dr_rbcl;                   /* Receive Byte Count Low            */
        uInt8 dr_rbch;                   /* Receive Byte Count High           */
} dp_rcvhdr_t;

typedef union etheraddr {
    unsigned char bytes[6];             /* byteorder safe initialization */
    unsigned short shorts[3];           /* force 2-byte alignment */
} ether_addr;


#define RSR_FO         0x08
#define RSR_PRX                0x01
#define DEF_ENABLED    0x200

#define OK      0


#define startPage 0x4C
#define stopPage  0x80


#define NE_CMD       0x00
#define NE_PSTART    0x01
#define NE_PSTOP     0x02
#define NE_BNRY      0x03
#define NE_TPSR      0x04
#define NE_ISR       0x07
#define NE_CURRENT   0x07
#define NE_RBCR0     0x0A
#define NE_RBCR1     0x0B
#define NE_RCR       0x0C
#define NE_TCR       0x0D
#define NE_DCR       0x0E
#define NE_IMR       0x0F


#define NE_DCR_WTS   0x01
#define NE_DCR_LS    0x08
#define NE_DCR_AR    0x10
#define NE_DCR_FT1   0x40
#define NE_DCR_FT0   0x20



#define E8390_STOP   0x01
#define E8390_NODMA  0x20
#define E8390_PAGE0  0x00
#define E8390_PAGE1  0x40
#define E8390_CMD    0x00
#define E8390_START  0x02
#define E8390_RREAD  0x08
#define E8390_RWRITE 0x10
#define E8390_RXOFF  0x20
#define E8390_TXOFF  0x00
#define E8390_RXCONFIG 0x04
#define E8390_TXCONFIG 0x00

#define EN0_COUNTER0 0x0d
#define EN0_DCFG     0x0e
#define EN0_RCNTLO   0x0a
#define EN0_RCNTHI   0x0b
#define EN0_ISR      0x07
#define EN0_IMR      0x0f
#define EN0_RSARLO   0x08
#define EN0_RSARHI   0x09
#define EN0_TPSR     0x04
#define EN0_RXCR     0x0c
#define EN0_TXCR     0x0D
#define EN0_STARTPG  0x01
#define EN0_STOPPG   0x02
#define EN0_BOUNDARY 0x03

#define EN1_PHYS     0x01
#define EN1_CURPAG   0x07
#define EN1_MULT     0x08

#define NE1SM_START_PG 0x20
#define NE1SM_STOP_PG 0x40
#define NESM_START_PG 0x40
#define NESM_STOP_PG  0x80

#define ENISR_ALL    0x3f

#define ENDCFG_WTS   0x01

#define NE_DATAPORT  0x10

#define TX_2X_PAGES 12
#define TX_1X_PAGES 6
#define TX_PAGES (dev->priv->pingPong ? TX_2X_PAGES : TX_1X_PAGES)


#define DP_CURR         0x7     /* Current Page Register             */
#define DP_MAR0         0x8     /* Multicast Address Register 0      */
#define DP_MAR1         0x9     /* Multicast Address Register 1      */
#define DP_MAR2         0xA     /* Multicast Address Register 2      */
#define DP_MAR3         0xB     /* Multicast Address Register 3      */
#define DP_MAR4         0xC     /* Multicast Address Register 4      */
#define DP_MAR5         0xD     /* Multicast Address Register 5      */
#define DP_MAR6         0xE     /* Multicast Address Register 6      */
#define DP_MAR7         0xF     /* Multicast Address Register 7      */

#define DP_CNTR0        0xD     /* Tally Counter 0                   */
#define DP_CNTR1        0xE     /* Tally Counter 1                   */
#define DP_CNTR2        0xF     /* Tally Counter 2                   */


#define DP_PAGESIZE     256

extern char *nicPacket;
extern uInt32 packetLength;


int ne2k_init();
int ne2kProbe(int,struct device *);
int ne2kDevInit(struct device *);
void NS8390_init(struct device *dev,int startp);

void ne2kISR();
void ne2kHandler();

int NICtoPC(struct device *dev,void *packet,int length,int nic_addr);
int PCtoNIC(struct device *dev,void *packet,int length);

struct nicBuffer *ne2kAllocBuffer(int);
struct nicBuffer *ne2kGetBuffer();
void ne2kFreeBuffer(struct nicBuffer *);

#endif

/***
 $Log: ne2k.h,v $
 Revision 1.1.1.1  2006/06/01 12:46:14  reddawg
 ubix2

 Revision 1.2  2005/10/12 00:13:36  reddawg
 Removed

 Revision 1.1.1.1  2005/09/26 17:23:39  reddawg
 no message

 Revision 1.6  2004/07/14 12:03:49  reddawg
 ne2k: ne2kInit to ne2k_init
 Changed Startup Routines

 Revision 1.5  2004/05/21 14:57:16  reddawg
 Cleaned up


 END
 ***/