The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/drivers/dpeth/dp.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2 **  File:       eth.h   Version 1.00,   Jan. 14, 1997
    3 **
    4 **  Author:     Giovanni Falzoni <gfalzoni@inwind.it>
    5 **
    6 **  Interface description for ethernet device driver
    7 **
    8 **  $Log: dp.h,v $
    9 **  Revision 1.4  2005/09/04 18:52:16  beng
   10 **  Giovanni's fixes to dpeth:
   11 **  Date: Sat, 03 Sep 2005 11:05:22 +0200
   12 **  Subject: Minix 3.0.8
   13 **
   14 **  Revision 1.3  2005/08/03 11:53:34  jnherder
   15 **  Miscellaneous cleanups.
   16 **
   17 **  Revision 1.2  2005/08/02 15:30:35  jnherder
   18 **  Various updates to support dynamically starting drivers.
   19 **  Output during initialization should be suppressed. Unless an error occurs.
   20 **  Note that main() can now be main(int argc, char **argv) and arguments can
   21 **  be passed when bringing up the driver.
   22 **
   23 **  Revision 1.1  2005/06/29 10:16:46  beng
   24 **  Import of dpeth 3c501/3c509b/.. ethernet driver by
   25 **  Giovanni Falzoni <fgalzoni@inwind.it>.
   26 **
   27 **  Revision 2.0  2005/06/26 16:16:46  lsodgf0
   28 **  Initial revision for Minix 3.0.6
   29 **
   30 **  $Id: dp.h,v 1.4 2005/09/04 18:52:16 beng Exp $
   31 */
   32 
   33 #undef  ENABLE_3C501
   34 #undef  ENABLE_3C503
   35 #undef  ENABLE_3C509
   36 #undef  ENABLE_NE2000
   37 #undef  ENABLE_WDETH
   38 #undef  ENABLE_DP8390
   39 
   40 #define ENABLE_3C501    1       /* enable 3Com Etherlink I board         */
   41 #define ENABLE_3C503    1       /* enable 3Com Etherlink II board        */
   42 #define ENABLE_3C509    1       /* enable 3Com Etherlink III board       */
   43 #define ENABLE_NE2000   1       /* enable Novell N2000 board             */
   44 #define ENABLE_WDETH    1       /* enable Western Digital WD80x3         */
   45 
   46 #define ENABLE_DP8390   (ENABLE_3C503|ENABLE_WDETH|ENABLE_NE2000)
   47 #define HAVE_BUFFERS    (ENABLE_3C501|ENABLE_3C509)
   48 
   49 #undef  NULL
   50 #define NULL ((void *)0)
   51 #define NOT(x) (~(x))
   52 
   53 #if debug == 1
   54 #       define DEBUG(statm) statm
   55 #else
   56 #       define DEBUG(statm)
   57 #endif
   58 
   59 typedef struct _m_hdr_t {       /* Buffer handling header */
   60   struct _m_hdr_t *next;
   61   int size;
   62 } m_hdr_t;
   63 
   64 typedef struct _buff_t {        /* Receive/Transmit buffer header */
   65   struct _buff_t *next;
   66   int size;
   67   int client;
   68   char buffer[2];
   69 } buff_t;
   70 
   71 struct dpeth;
   72 struct iovec_dat;
   73 typedef void (*dp_eth_t) (struct dpeth *);
   74 typedef void (*dp_send_recv_t) (struct dpeth *, int, int);
   75 
   76 #if ENABLE_DP8390 == 1
   77 typedef void (*dp_user2nicf_t) (struct dpeth *, int, int);
   78 typedef void (*dp_nic2userf_t) (struct dpeth *, int, int);
   79 typedef void (*dp_getblock_t) (struct dpeth *, u16_t, int, void *);
   80 #endif
   81 
   82 #define DE_PORT_NR      2       /* Number of devices supported   */
   83 #define SENDQ_NR        2       /* Size of the send queue        */
   84 #define IOVEC_NR        16      /* Number of IOVEC entries at a time */
   85 
   86 typedef struct iovec_dat {
   87   iovec_t iod_iovec[IOVEC_NR];
   88   int iod_iovec_s;
   89   int iod_proc_nr;
   90   vir_bytes iod_iovec_addr;
   91 } iovec_dat_t;
   92 
   93 typedef struct dpeth {
   94   /* The de_base_port field is the starting point of the probe. The
   95    * conf routine also fills de_linmem and de_irq. If the probe routine
   96    * knows the irq and/or memory address because they are hardwired in
   97    * the board, the probe should modify these fields. Futhermore, the
   98    * probe routine should also fill in de_initf and de_stopf fields
   99    * with the appropriate function pointers and set de_prog_IO iff
  100    * programmed I/O is to be used.
  101    * 
  102    * The initf function fills the following fields. Only cards that do
  103    * programmed I/O fill in the de_data_port field. In addition, the
  104    * init routine has to fill in the sendq data structures. */
  105 
  106   /* Board hardware interface */
  107   port_t de_base_port;
  108   port_t de_data_port;          /* For boards using Prog. I/O for xmit/recv */
  109 
  110   int de_irq;
  111   int de_int_pending;
  112   int de_hook;                  /* interrupt hook at kernel */
  113 
  114   char de_name[8];
  115 
  116 #define DEI_DEFAULT     0x8000
  117 
  118   phys_bytes de_linmem;         /* For boards using shared memory */
  119   unsigned short de_memsegm;
  120   vir_bytes de_memoffs;
  121   int de_ramsize;               /* Size of on board memory       */
  122   int de_offset_page;           /* Offset of shared memory page  */
  123 
  124   /* Board specific functions */
  125   dp_eth_t de_initf;
  126   dp_eth_t de_stopf;
  127   dp_eth_t de_resetf;
  128   dp_eth_t de_flagsf;
  129   dp_eth_t de_getstatsf;
  130   dp_eth_t de_dumpstatsf;
  131   dp_eth_t de_interruptf;
  132   dp_send_recv_t de_recvf;
  133   dp_send_recv_t de_sendf;
  134 
  135   ether_addr_t de_address;      /* Ethernet Address */
  136   eth_stat_t de_stat;           /* Ethernet Statistics */
  137   unsigned long bytes_Tx;       /* Total bytes sent/received */
  138   unsigned long bytes_Rx;
  139 
  140 #define SA_ADDR_LEN     sizeof(ether_addr_t)
  141 
  142   int de_flags;                 /* Send/Receive mode (Configuration) */
  143 
  144 #define DEF_EMPTY       0x0000
  145 #define DEF_READING     0x0001
  146 #define DEF_RECV_BUSY   0x0002
  147 #define DEF_ACK_RECV    0x0004
  148 #define DEF_SENDING     0x0010
  149 #define DEF_XMIT_BUSY   0x0020
  150 #define DEF_ACK_SEND    0x0040
  151 #define DEF_PROMISC     0x0100
  152 #define DEF_MULTI       0x0200
  153 #define DEF_BROAD       0x0400
  154 #define DEF_ENABLED     0x2000
  155 #define DEF_STOPPED     0x4000
  156 
  157   int de_mode;                  /* Status of the Interface */
  158 
  159 #define DEM_DISABLED    0x0000
  160 #define DEM_SINK        0x0001
  161 #define DEM_ENABLED     0x0002
  162 
  163   /* Temporary storage for RECV/SEND requests */
  164   iovec_dat_t de_read_iovec;
  165   iovec_dat_t de_write_iovec;
  166   vir_bytes de_read_s;
  167   vir_bytes de_send_s;
  168   int de_client;
  169 /*
  170   message de_sendmsg;
  171   iovec_dat_t de_tmp_iovec;
  172 */
  173 #if ENABLE_DP8390 == 1
  174   /* For use by NS DP8390 driver */
  175   port_t de_dp8390_port;
  176   int de_prog_IO;
  177   int de_16bit;
  178   int de_startpage;
  179   int de_stoppage;
  180 
  181   /* Do it yourself send queue */
  182   struct sendq {
  183         int sq_filled;          /* This buffer contains a packet */
  184         int sq_size;            /* with this size */
  185         int sq_sendpage;        /* starting page of the buffer */
  186   } de_sendq[SENDQ_NR];
  187   int de_sendq_nr;
  188   int de_sendq_head;            /* Enqueue at the head */
  189   int de_sendq_tail;            /* Dequeue at the tail */
  190 
  191   dp_user2nicf_t de_user2nicf;
  192   dp_nic2userf_t de_nic2userf;
  193   dp_getblock_t de_getblockf;
  194 #endif
  195 
  196 #if ENABLE_3C509 == 1
  197   /* For use by 3Com Etherlink III (3c509) driver */
  198   port_t de_id_port;
  199   port_t de_if_port;
  200 #endif
  201 
  202 #if ENABLE_3C501 == 1 ||  ENABLE_3C509 == 1
  203   /* For use by 3Com Etherlink (3c501 and 3c509) driver */
  204   buff_t *de_recvq_head;
  205   buff_t *de_recvq_tail;
  206   buff_t *de_xmitq_head;
  207   buff_t *de_xmitq_tail;
  208   u16_t de_recv_mode;
  209   clock_t de_xmit_start;
  210 #endif
  211 
  212 } dpeth_t;
  213 
  214 /*
  215  *      Function definitions
  216  */
  217 
  218 /* dp.c */
  219 void dp_next_iovec(iovec_dat_t * iovp);
  220 
  221 /* devio.c */
  222 #if defined USE_IOPL
  223 #include <ibm/portio.h>
  224 #else
  225 unsigned int inb(unsigned short int);
  226 unsigned int inw(unsigned short int);
  227 void insb(unsigned short int, int, void *, int);
  228 void insw(unsigned short int, int, void *, int);
  229 void outb(unsigned short int, unsigned long);
  230 void outw(unsigned short int, unsigned long);
  231 void outsb(unsigned short int, int, void *, int);
  232 void outsw(unsigned short int, int, void *, int);
  233 #endif
  234 
  235 /* netbuff.c */
  236 void *alloc_buff(dpeth_t *, int);
  237 void free_buff(dpeth_t *, void *);
  238 void init_buff(dpeth_t *, buff_t **);
  239 void mem2user(dpeth_t *, buff_t *);
  240 void user2mem(dpeth_t *, buff_t *);
  241 
  242 /* 3c501.c */
  243 #if ENABLE_3C501 == 1
  244 int el1_probe(dpeth_t *);
  245 #else
  246 #define el1_probe(x) (0)
  247 #endif
  248 
  249 /* 3c503.c */
  250 #if ENABLE_3C503 == 1
  251 int el2_probe(dpeth_t *);
  252 #else
  253 #define el2_probe(x) (0)
  254 #endif
  255 
  256 /* 3c509.c */
  257 #if ENABLE_3C509 == 1
  258 int el3_probe(dpeth_t *);
  259 #else
  260 #define el3_probe(x) (0)
  261 #endif
  262 
  263 /* ne.c */
  264 #if ENABLE_NE2000 == 1
  265 int ne_probe(dpeth_t * dep);
  266 #else
  267 #define ne_probe(x) (0)
  268 #endif
  269 
  270 /* wd.c */
  271 #if ENABLE_WDETH == 1
  272 int wdeth_probe(dpeth_t * dep);
  273 #else
  274 #define wdeth_probe(x) (0)
  275 #endif
  276 
  277 #define lock()   (++dep->de_int_pending,sys_irqdisable(&dep->de_hook))
  278 #define unlock() do{int i=(--dep->de_int_pending)?0:sys_irqenable(&dep->de_hook);}while(0)
  279 #define milli_delay(t) tickdelay(1)
  280 
  281 /** dp.h **/

Cache object: daf5a0849eeef644a2a82a3522e736e1


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.