# lnc.h

Go to the documentation of this file.

    00001 /*****************************************************************************************
    00002  Copyright (c) 2002-2004 The UbixOS Project
    00003  All rights reserved.
    00004
    00005  Redistribution and use in source and binary forms, with or without modification, are
    00006  permitted provided that the following conditions are met:
    00007
    00008  Redistributions of source code must retain the above copyright notice, this list of
    00009  conditions, the following disclaimer and the list of authors.  Redistributions in binary
    00010  form must reproduce the above copyright notice, this list of conditions, the following
    00011  disclaimer and the list of authors in the documentation and/or other materials provided
    00012  with the distribution. Neither the name of the UbixOS Project nor the names of its
    00013  contributors may be used to endorse or promote products derived from this software
    00014  without specific prior written permission.
    00015
    00016  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
    00017  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    00018  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
    00019  THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    00020  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
    00021  OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    00022  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
    00023  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
    00024  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    00025
    00026  $Id: lnc_8h-source.html 88 2016-01-12 00:11:29Z reddawg $
    00027
    00028 *****************************************************************************************/
    00029
    00030 #ifndef _LNC_H
    00031 #define _LNC_H
    00032
    00033 #include <ubixos/types.h>
    00034
    00035 #define NDESC(len2) (1 << len2)
    00036 #define NORMAL 0
    00037 #define MEM_SLEW 8
    00038 #define TRANSBUFSIZE 1518
    00039 #define RECVBUFSIZE 1518
    00040 #define NRDRE 3
    00041 #define NTDRE 3
    00042 #define    ETHER_ADDR_LEN          6
    00043 #define NE2100_IOSIZE  24
    00044 #define PCNET_RDP    0x10        /* Register Data Port */
    00045 #define PCNET_RAP    0x12        /* Register Address Port */
    00046 #define PCNET_RESET  0x14
    00047 #define PCNET_BDP    0x16
    00048 #define PCNET_VSW    0x18
    00049 #define NE2100          2
    00050
    00051 /* mem_mode values */
    00052 #define DMA_FIXED       1
    00053 #define DMA_MBUF        2
    00054 #define SHMEM           4
    00055
    00056
    00057 /********** Chip Types **********/
    00058 #define UNKNOWN         0        /* Unknown  */
    00059 #define LANCE           1        /* Am7990   */
    00060 #define C_LANCE         2        /* Am79C90  */
    00061 #define PCnet_ISA       3        /* Am79C960 */
    00062 #define PCnet_ISAplus   4        /* Am79C961 */
    00063 #define PCnet_ISA_II    5        /* Am79C961A */
    00064 #define PCnet_32        6        /* Am79C965 */
    00065 #define PCnet_PCI       7        /* Am79C970 */
    00066 #define PCnet_PCI_II    8        /* Am79C970A */
    00067 #define PCnet_FAST      9        /* Am79C971 */
    00068 #define PCnet_FASTplus  10       /* Am79C972 */
    00069 #define PCnet_Home      11       /* Am79C978 */
    00070
    00071 /******** AM7990 Specifics **************/
    00072 #define CSR0    0x0000
    00073 #define CSR1    1
    00074 #define CSR2    2
    00075 #define CSR3    3
    00076 #define CSR88   88
    00077 #define CSR89   89
    00078
    00079 #define ERR     0x8000
    00080 #define BABL    0x4000
    00081 #define CERR    0x2000
    00082 #define MISS    0x1000
    00083 #define MERR    0x0800
    00084 #define RINT    0x0400
    00085 #define TINT    0x0200
    00086 #define IDON    0x0100
    00087 #define INTR    0x0080
    00088 #define INEA    0x0040
    00089 #define RXON    0x0020
    00090 #define TXON    0x0010
    00091 #define TDMD    0x0008
    00092 #define STOP    0x0004
    00093 #define STRT    0x0002
    00094 #define INIT    0x0001
    00095
    00096
    00097 /* CSR88-89: Chip ID masks */
    00098 #define AMD_MASK  0x003
    00099 #define PART_MASK 0xffff
    00100 #define Am79C960  0x0003
    00101 #define Am79C961  0x2260
    00102 #define Am79C961A 0x2261
    00103 #define Am79C965  0x2430
    00104 #define Am79C970  0x0242
    00105 #define Am79C970A 0x2621
    00106 #define Am79C971  0x2623
    00107 #define Am79C972  0x2624
    00108 #define Am79C973  0x2625
    00109 #define Am79C978  0x2626
    00110
    00111 /********** Structs **********/
    00112
    00113
    00114
    00115
    00116 struct initBlock {
    00117   uInt16 mode;           /* Mode register                        */
    00118   uInt8  padr[6];        /* Ethernet address                     */
    00119   uInt8  ladrf[8];       /* Logical address filter (multicast)   */
    00120   uInt16 rdra;           /* Low order pointer to receive ring    */
    00121   uInt16 rlen;           /* High order pointer and no. rings     */
    00122   uInt16 tdra;           /* Low order pointer to transmit ring   */
    00123   uInt16 tlen;           /* High order pointer and no rings      */
    00124   };
    00125
    00126 struct mds {
    00127   uInt16 md0;
    00128   uInt16 md1;
    00129   short  md2;
    00130   uInt16 md3;
    00131   };
    00132
    00133 struct hostRingEntry {
    00134   struct mds *md;
    00135   union {
    00136     //struct mbuf *mbuf;
    00137     char *data;
    00138     }buff;
    00139   };
    00140
    00141 struct arpcom {
    00142   //struct  ifnet ac_if;            /* network-visible interface */
    00143   uInt8  ac_enaddr[6];           /* ethernet hardware address */
    00144   int    ac_multicnt;            /* length of ac_multiaddrs list */
    00145   void   *ac_netgraph;           /* ng_ether(4) netgraph node info */
    00146   };
    00147
    00148 struct nicInfo {
    00149   int ident;         /* Type of card */
    00150   int ic;            /* Type of ic, Am7990, Am79C960 etc. */
    00151   int memMode;
    00152   int iobase;
    00153   int mode;          /* Mode setting at initialization */
    00154   };
    00155
    00156 struct lncInfo {
    00157   struct arpcom        arpcom;
    00158   struct nicInfo       nic;
    00159   struct hostRingEntry *recvRing;
    00160   struct hostRingEntry *transRings;
    00161   struct initBlock     *initBloack;
    00162   int                  rap;
    00163   int                  rdp;
    00164   int                  bdp;
    00165   int                  nrdre;
    00166   int                  ntdre;
    00167   };
    00168
    00169 extern struct lncInfo *lnc;
    00170
    00171 void writeCsr(struct lncInfo *lnc, uInt16 port, uInt16 val);
    00172 uInt16 readCsr(struct lncInfo *lnc, uInt16 port);
    00173 void writeBcr(struct lncInfo *lnc, uInt16 port, uInt16 val);
    00174 uInt16 readBcr(struct lncInfo *lnc, uInt16 port);
    00175
    00176 void initLNC();
    00177 int probe(struct lncInfo *lnc);
    00178 int lanceProbe(struct lncInfo *lnc);
    00179 int lncAttach(struct lncInfo *lnc,int unit);
    00180
    00181
    00182 void lncInt();
    00183 void _lncInt();
    00184
    00185 #endif
    00186
    00187 /***
    00188  $Log: lnc_8h-source.html,v $
    00188  Revision 1.7  2006/12/15 17:47:06  reddawg
    00188  Updates
    00188
    00189  Revision 1.1.1.1  2006/06/01 12:46:14  reddawg
    00190  ubix2
    00191
    00192  Revision 1.2  2005/10/12 00:13:37  reddawg
    00193  Removed
    00194
    00195  Revision 1.1.1.1  2005/09/26 17:23:50  reddawg
    00196  no message
    00197
    00198  Revision 1.2  2004/05/21 15:05:07  reddawg
    00199  Cleaned up
    00200
    00201
    00202  END
    00203  ***/