Changeset 0cd4d86 in network-demos


Ignore:
Timestamp:
May 13, 2009, 6:56:10 PM (10 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.11, master, network-demos-4-10-branch
Children:
8a4fcf2
Parents:
94e30bd
Message:

2009-05-13 Joel Sherrill <joel.sherrill@…>

  • networkconfig-qemu.h: Now works on qemu with fxp driver in RTEMS, the newer version in libbsdport, and on the real NIC in the Winsystems PC in RTEMS Lab.
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • ChangeLog

    r94e30bd r0cd4d86  
     12009-05-13      Joel Sherrill <joel.sherrill@oarcorp.com>
     2
     3        * networkconfig-qemu.h: Now works on qemu with fxp driver in RTEMS, the
     4        newer version in libbsdport, and on the real NIC in the Winsystems PC
     5        in RTEMS Lab.
     6
    172009-05-05      Sebastian Huber <sebastian.huber@embedded-brains.de>
    28
  • networkconfig-qemu.h

    r94e30bd r0cd4d86  
    77 ************************************************************
    88 *
     9 *  The dynamic probing is based upon the EPICS network
     10 *  configuration file written by:
     11 *      W. Eric Norum
     12 *      eric.norum@usask.ca
     13 *      (306) 966-5394
     14 *
    915 *  networkconfig.h,v 1.8 2001/08/31 18:11:43 joel Exp
    1016 */
     
    1319#define _RTEMS_NETWORKCONFIG_H_
    1420
    15 /*
    16  *  The following will normally be set by the BSP if it supports
    17  *  a single network device driver.  In the event, it supports
    18  *  multiple network device drivers, then the user's default
    19  *  network device driver will have to be selected by a BSP
    20  *  specific mechanism.
    21  */
    22 
    23 #undef RTEMS_BSP_NETWORK_DRIVER_NAME
    24 #undef RTEMS_BSP_NETWORK_DRIVER_ATTACH
    25 #if 0
    26 #define RTEMS_BSP_NETWORK_DRIVER_NAME    "ne1"
    27 #define RTEMS_BSP_NETWORK_DRIVER_ATTACH  rtems_ne_driver_attach
    28 #else
    29 int
    30 rtems_fxp_attach(struct rtems_bsdnet_ifconfig *config, int attaching);
    31 #define RTEMS_BSP_NETWORK_DRIVER_NAME    "fxp1"
    32 #define RTEMS_BSP_NETWORK_DRIVER_ATTACH  rtems_fxp_attach
    33 #endif
    34 
    35 
    36 #ifdef RTEMS_USE_BOOTP
    37 #undef RTEMS_USE_BOOTP
    38 #endif
    39 
    40 /*
    41  * If you use DHCP on the QEMU instance, there is less configuration
    42  */
    43 // #define RTEMS_USE_BOOTP
    44 
    45 #include <bsp.h>
    46 
    47 /*
    48  * Define RTEMS_SET_ETHERNET_ADDRESS if you want to specify the
    49  * Ethernet address here.  If RTEMS_SET_ETHERNET_ADDRESS is not
    50  * defined the driver will choose an address.
    51  */
    52 //#define RTEMS_SET_ETHERNET_ADDRESS
    53 #ifdef RTEMS_SET_ETHERNET_ADDRESS
    54 #undef RTEMS_SET_ETHERNET_ADDRESS
    55 #endif
    56 
    57 #if (defined (RTEMS_SET_ETHERNET_ADDRESS))
    58 /* static char ethernet_address[6] = { 0x08, 0x00, 0x3e, 0x12, 0x28, 0xb1 }; */
    59 static char ethernet_address[6] = { 0x00, 0x80, 0x7F, 0x22, 0x61, 0x77 };
    60 #endif
    61 
    62 #ifdef RTEMS_USE_LOOPBACK
    63 /*
    64  * Loopback interface
    65  */
    66 extern void rtems_bsdnet_loopattach();
    67 static struct rtems_bsdnet_ifconfig loopback_config = {
    68         "lo0",                          /* name */
    69         rtems_bsdnet_loopattach,        /* attach function */
    70         NULL,                           /* link to next interface */
    71         "127.0.0.1",                    /* IP address */
    72         "255.0.0.0",                    /* IP net mask */
    73 };
    74 #endif
    75 
    76 /*
    77  * Default network interface
    78  */
    79 static struct rtems_bsdnet_ifconfig netdriver_config = {
    80         RTEMS_BSP_NETWORK_DRIVER_NAME,          /* name */
    81         RTEMS_BSP_NETWORK_DRIVER_ATTACH,        /* attach function */
    82 
    83 #ifdef RTEMS_USE_LOOPBACK
    84         &loopback_config,               /* link to next interface */
    85 #else
    86         NULL,                           /* No more interfaces */
    87 #endif
    88 
    89 #if (defined (RTEMS_USE_BOOTP))
    90         NULL,                           /* BOOTP supplies IP address */
    91         NULL,                           /* BOOTP supplies IP net mask */
    92 #else
    93         "10.0.2.5",                     /* IP address */
    94         "255.255.255.0",                /* IP net mask */
    95 #endif /* !RTEMS_USE_BOOTP */
    96 
    97 #if (defined (RTEMS_SET_ETHERNET_ADDRESS))
    98         ethernet_address,               /* Ethernet hardware address */
    99 #else
    100         NULL,                           /* Driver supplies hardware address */
    101 #endif
    102         0,                              /* Use default driver parameters */
    103         0, /* mtu */
    104         0, /* rbuf_count */
    105         0, /* xbuf_count */
    106         0, /* port */
    107         9 /* irq */
    108 };
    109 
    110 /*
    111  * Network configuration
    112  */
    113 struct rtems_bsdnet_config rtems_bsdnet_config = {
    114         &netdriver_config,
    115 
    116 #if (defined (RTEMS_USE_BOOTP))
    117         rtems_bsdnet_do_bootp,
    118 #else
    119         NULL,
    120 #endif
    121         0,                      /* Default network task priority */
    122         256 * 1024,             /* 256K - not default mbuf capacity */
    123         256 * 1024,             /* 256K - not default mbuf cluster capacity */
    124 #if (!defined (RTEMS_USE_BOOTP))
    125         "rtems",        /* Host name */
    126         "",             /* Domain name */
    127         "10.0.2.1",     /* Gateway */
    128         "10.0.0.1",     /* Log host */
    129         {"10.0.2.3" },  /* Name server(s) */
    130         {"" },          /* NTP server(s) */
    131 #else
    132       #error "Fill me in"
    133 #endif /* !RTEMS_USE_BOOTP */
    134         1,                   /* sb_efficiency */
    135         0,                   /* udp_tx_buf_size */
    136         0,                   /* udp_rx_buf_size */
    137         0,                   /* tcp_tx_buf_size */
    138         0                    /* tcp_rx_buf_size */
    139 
    140 };
    141 
     21/* #define USE_LIBBSDPORT */
     22
     23#if defined(USE_LIBBSDPORT)
     24  #include <bsp/libbsdport_api.h>
     25  #define CONFIGURE_MAXIMUM_TIMERS 10
     26#endif
    14227/*
    14328 * For TFTP test application
     
    16045#define RTEMS_NFS_LS_PATH     "/mnt/nfstest"
    16146
     47
     48
     49/*
     50 * This file can be copied to an application source dirctory
     51 * and modified to override the values shown below.
     52 *
     53 * The following CPP symbols may be passed from the Makefile:
     54 *
     55 *   symbol                   default       description
     56 *
     57 *   NETWORK_TASK_PRIORITY    150           can be read by app from public
     58 *                                          var 'gesysNetworkTaskPriority'
     59 *   FIXED_IP_ADDR            <undefined>   hardcoded IP address (e.g.,
     60 *                                          "192.168.0.10"); disables BOOTP;
     61 *                                          must also define FIXED_NETMASK
     62 *   FIXED_NETMASK            <undefined>   IP netmask string
     63 *                                          (e.g. "255.255.255.0")
     64 *   LO_IF_ONLY               <undefined>   If defined, do NOT configure
     65 *                                          any ethernet driver but only the
     66 *                                          loopback interface.
     67 *   MULTI_NETDRIVER          <undefined>   ugly hack; if defined try to probe
     68 *                                          a variety of PCI and ISA drivers
     69 *                                          (i386 ONLY) use is discouraged!
     70 *   NIC_NAME                 <undefined>   Ethernet driver name (e.g. "pcn1");
     71 *                                          must also define NIC_ATTACH
     72 *   NIC_ATTACH               <undefined>   Ethernet driver attach function
     73 *                                          (e.g., rtems_fxp_attach).
     74 *                                          If these are undefined then
     75 *                                            a) MULTI_NETDRIVER is used
     76 *                                               (if defined)
     77 *                                            b) RTEMS_BSP_NETWORK_DRIVER_NAME/
     78 *                                               RTEMS_BSP_NETWORK_DRIVER_ATTACH
     79 *                                               are tried
     80 *   MEMORY_CUSTOM            <undefined>   Allocate the defined amount of
     81 *                                          memory for mbufs and mbuf clusters,
     82 *                                          respectively. Define to a comma ','
     83 *                                          separated pair of two numerical
     84 *                                          values, e.g: 100*1024,200*1024
     85 *   MEMORY_SCARCE            <undefined>   Allocate few memory for mbufs
     86 *                                          (hint for how much memory the
     87 *                                          board has)
     88 *   MEMORY_HUGE              <undefined>   Allocate a lot of memory for mbufs
     89 *                                          (hint for how much memory the
     90 *                                          board has)
     91 *                                          If none of MEMORY_CUSTOM/
     92 *                                          MEMORY_SCARCE/MEMORY_HUGE are
     93 *                                          defined then a medium amount of
     94 *                                          memory is allocated for mbufs.
     95 */
     96
     97#include <rtems/bspIo.h>
     98#include <bsp.h>
     99#include <rtems/rtems_bsdnet.h>
     100
     101#if 0
     102#ifdef HAVE_CONFIG_H
     103#include <config.h>
     104#else
     105#include "verscheck.h"
     106#endif
     107#endif
     108
     109#define MULTI_NETDRIVER
     110
     111/* Assume we are on qemu unless forced to lab hardware */
     112#if !defined(ON_RTEMS_LAB_WINSYSTEMS)
     113#undef ON_QEMU
     114#define ON_QEMU
     115#endif
     116
     117#if defined(ON_QEMU)
     118#define FIXED_IP_ADDR "10.0.2.5"
     119#endif
     120
     121#if defined(ON_RTEMS_LAB_WINSYSTEMS)
     122#define FIXED_IP_ADDR "192.168.1.249"
     123#endif
     124
     125#define FIXED_NETMASK "255.255.255.0"
     126
     127#ifndef NETWORK_TASK_PRIORITY
     128#define NETWORK_TASK_PRIORITY   150  /* within EPICS' range */
     129#endif
     130
     131/* make publicily available for startup scripts... */
     132const int gesysNetworkTaskPriority = NETWORK_TASK_PRIORITY;
     133
     134#ifdef  FIXED_IP_ADDR
     135#define RTEMS_DO_BOOTP 0
     136#else
     137#define RTEMS_DO_BOOTP rtems_bsdnet_do_bootp
     138#define FIXED_IP_ADDR  0
     139#undef  FIXED_NETMASK
     140#define FIXED_NETMASK  0
     141#endif
     142
     143#ifdef LO_IF_ONLY
     144#undef NIC_NAME
     145#elif !defined(NIC_NAME)
     146
     147#ifdef MULTI_NETDRIVER
     148
     149#if 0
     150  #if RTEMS_VERSION_ATLEAST(4,6,99)
     151  #define pcib_init pci_initialize
     152  #endif
     153#endif
     154
     155extern int rtems_3c509_driver_attach (struct rtems_bsdnet_ifconfig *, int);
     156extern int rtems_fxp_attach (struct rtems_bsdnet_ifconfig *, int);
     157extern int rtems_elnk_driver_attach (struct rtems_bsdnet_ifconfig *, int);
     158extern int rtems_dec21140_driver_attach (struct rtems_bsdnet_ifconfig *, int);
     159
     160/* these don't probe and will be used even if there's no device :-( */
     161extern int rtems_ne_driver_attach (struct rtems_bsdnet_ifconfig *, int);
     162extern int rtems_wd_driver_attach (struct rtems_bsdnet_ifconfig *, int);
     163
     164static struct rtems_bsdnet_ifconfig isa_netdriver_config[] = {
     165  {
     166        "ep0", rtems_3c509_driver_attach, isa_netdriver_config + 1,
     167  },
     168  {
     169        "ne1", rtems_ne_driver_attach, 0, irno: 9 /* qemu cannot configure irq-no :-(; has it hardwired to 9 */
     170  },
     171};
     172
     173static struct rtems_bsdnet_ifconfig pci_netdriver_config[]={
     174  {
     175  "dc1", rtems_dec21140_driver_attach, pci_netdriver_config+1,
     176  },
     177  #if !defined(USE_LIBBSDPORT)
     178    {
     179    "fxp1", rtems_fxp_attach, pci_netdriver_config+2,
     180    },
     181  #else
     182    {
     183      "", libbsdport_netdriver_attach, pci_netdriver_config+2,
     184    },
     185  #endif
     186  {
     187  "elnk1", rtems_elnk_driver_attach, isa_netdriver_config,
     188  },
     189};
     190
     191static int pci_check(struct rtems_bsdnet_ifconfig *ocfg, int attaching)
     192{
     193struct rtems_bsdnet_ifconfig *cfg;
     194int if_index_pre;
     195extern int if_index;
     196  if ( attaching ) {
     197        cfg = pci_initialize() ?
     198                      isa_netdriver_config : pci_netdriver_config;
     199  }
     200  while ( cfg ) {
     201        printk("Probing '%s'", cfg->name);
     202        /* unfortunately, the return value is unreliable - some drivers report
     203         * success even if they fail.
     204         * Check if they chained an interface (ifnet) structure instead
     205         */
     206        if_index_pre = if_index;
     207        cfg->attach(cfg, attaching);
     208        if ( if_index > if_index_pre ) {
     209                /* assume success */
     210                printk(" .. seemed to work\n");
     211                ocfg->name   = cfg->name;
     212                ocfg->attach = cfg->attach;
     213                return 0;
     214        }
     215        printk(" .. failed\n");
     216        cfg = cfg->next;
     217  }
     218  return -1;
     219}
     220
     221#define NIC_NAME   "dummy"
     222#define NIC_ATTACH pci_check
     223
     224#else
     225
     226#if defined(RTEMS_BSP_NETWORK_DRIVER_NAME)  /* Use NIC provided by BSP */
     227# define NIC_NAME   RTEMS_BSP_NETWORK_DRIVER_NAME
     228# define NIC_ATTACH RTEMS_BSP_NETWORK_DRIVER_ATTACH
     229#endif
     230
     231#endif /* ifdef MULTI_NETDRIVER */
     232
     233#endif /* ifdef LO_IF_ONLY */
     234
     235#ifdef NIC_NAME
     236
     237extern int NIC_ATTACH();
     238
     239
     240static struct rtems_bsdnet_ifconfig netdriver_config[1] = {{
     241  NIC_NAME,  /* name */
     242  (int (*)(struct rtems_bsdnet_ifconfig*,int))NIC_ATTACH,  /* attach function */
     243  0,            /* link to next interface */
     244  FIXED_IP_ADDR,
     245  FIXED_NETMASK
     246}};
     247#else
     248#ifndef LO_IF_ONLY
     249#warning "NO KNOWN NETWORK DRIVER FOR THIS BSP -- YOU MAY HAVE TO EDIT rtems_netconfig.c"
     250#endif
     251#endif
     252
     253extern void rtems_bsdnet_loopattach();
     254static struct rtems_bsdnet_ifconfig loopback_config = {
     255    "lo0",                          /* name */
     256    (int (*)(struct rtems_bsdnet_ifconfig *, int))rtems_bsdnet_loopattach, /* attach function */
     257#ifdef NIC_NAME
     258    netdriver_config,               /* link to next interface */
     259#else
     260    0,                              /* link to next interface */
     261#endif
     262    "127.0.0.1",                    /* IP address */
     263    "255.0.0.0",                    /* IP net mask */
     264};
     265
     266struct rtems_bsdnet_config rtems_bsdnet_config = {
     267    &loopback_config,         /* Network interface */
     268#ifdef NIC_NAME
     269    RTEMS_DO_BOOTP,           /* Use BOOTP to get network configuration */
     270#else
     271    0,                        /* Use BOOTP to get network configuration */
     272#endif
     273    NETWORK_TASK_PRIORITY,    /* Network task priority */
     274#if   defined(MEMORY_CUSTOM)
     275    MEMORY_CUSTOM,
     276#elif defined(MEMORY_SCARCE)
     277    100*1024,                 /* MBUF space */
     278    200*1024,                 /* MBUF cluster space */
     279#elif defined(MEMORY_HUGE)
     280    2*1024*1024,              /* MBUF space */
     281    5*1024*1024,              /* MBUF cluster space */
     282#else
     283    180*1024,                 /* MBUF space */
     284    350*1024,                 /* MBUF cluster space */
     285#endif
     286#if (!defined (RTEMS_USE_BOOTP)) && defined(ON_RTEMS_LAB_WINSYSTEMS)
     287    "rtems",                /* Host name */
     288    "nodomain.com",         /* Domain name */
     289    "192.168.1.14",         /* Gateway */
     290    "192.168.1.1",          /* Log host */
     291    {"192.168.1.1"  },      /* Name server(s) */
     292    {"192.168.1.1"  },      /* NTP server(s) */
     293#else
     294    NULL,                   /* Host name */
     295    NULL,                   /* Domain name */
     296    NULL,                   /* Gateway */
     297    NULL,                   /* Log host */
     298    { NULL },               /* Name server(s) */
     299    { NULL },               /* NTP server(s) */
     300#endif /* !RTEMS_USE_BOOTP */
     301    0,                      /* efficiency */
     302    0,                      /* udp TX buffer */
     303    0,                      /* udp RX buffer */
     304    0,                      /* tcp TX buffer */
     305    0,                      /* tcp RX buffer */
     306};
    162307#endif /* _RTEMS_NETWORKCONFIG_H_ */
Note: See TracChangeset for help on using the changeset viewer.