summaryrefslogtreecommitdiffstats
path: root/networkconfig-qemu.h
blob: e566e79619d8a14f4d13fb74c61459021a821186 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
/*
 * Network configuration -- QEMU NOT using DHCP
 * 
 ************************************************************
 * EDIT THIS FILE TO REFLECT YOUR NETWORK CONFIGURATION     *
 * BEFORE RUNNING ANY RTEMS PROGRAMS WHICH USE THE NETWORK! * 
 ************************************************************
 *
 *  The dynamic probing is based upon the EPICS network
 *  configuration file written by:
 *      W. Eric Norum
 *      eric.norum@usask.ca
 *      (306) 966-5394
 *
 *  networkconfig.h,v 1.8 2001/08/31 18:11:43 joel Exp
 */

#ifndef _RTEMS_NETWORKCONFIG_H_
#define _RTEMS_NETWORKCONFIG_H_

#define USE_LIBBSDPORT

#if defined(USE_LIBBSDPORT)
  #include <bsp/libbsdport_api.h>
  #define CONFIGURE_MAXIMUM_TIMERS 10
#endif
/*
 * For TFTP test application
 */
#if (defined (RTEMS_USE_BOOTP))
#define RTEMS_TFTP_TEST_HOST_NAME "BOOTP_HOST"
#define RTEMS_TFTP_TEST_FILE_NAME "BOOTP_FILE"
#else
#define RTEMS_TFTP_TEST_HOST_NAME "XXX.YYY.ZZZ.XYZ"
#define RTEMS_TFTP_TEST_FILE_NAME "tftptest"
#endif

/*
 * For NFS test application
 * 
 * NFS mount and a directory to ls once mounted
 */
#define RTEMS_NFS_SERVER      "192.168.1.210"
#define RTEMS_NFS_SERVER_PATH "/home"
#define RTEMS_NFS_LS_PATH     "/mnt/nfstest"



/*
 * This file can be copied to an application source dirctory
 * and modified to override the values shown below.
 *
 * The following CPP symbols may be passed from the Makefile:
 *
 *   symbol                   default       description
 *
 *   NETWORK_TASK_PRIORITY    150           can be read by app from public
 *                                          var 'gesysNetworkTaskPriority'
 *   FIXED_IP_ADDR            <undefined>   hardcoded IP address (e.g.,
 *                                          "192.168.0.10"); disables BOOTP;
 *                                          must also define FIXED_NETMASK
 *   FIXED_NETMASK            <undefined>   IP netmask string
 *                                          (e.g. "255.255.255.0")
 *   LO_IF_ONLY               <undefined>   If defined, do NOT configure
 *                                          any ethernet driver but only the
 *                                          loopback interface.
 *   MULTI_NETDRIVER          <undefined>   ugly hack; if defined try to probe
 *                                          a variety of PCI and ISA drivers
 *                                          (i386 ONLY) use is discouraged!
 *   NIC_NAME                 <undefined>   Ethernet driver name (e.g. "pcn1");
 *                                          must also define NIC_ATTACH
 *   NIC_ATTACH               <undefined>   Ethernet driver attach function
 *                                          (e.g., rtems_fxp_attach).
 *                                          If these are undefined then
 *                                            a) MULTI_NETDRIVER is used
 *                                               (if defined)
 *                                            b) RTEMS_BSP_NETWORK_DRIVER_NAME/
 *                                               RTEMS_BSP_NETWORK_DRIVER_ATTACH
 *                                               are tried
 *   MEMORY_CUSTOM            <undefined>   Allocate the defined amount of
 *                                          memory for mbufs and mbuf clusters,
 *                                          respectively. Define to a comma ','
 *                                          separated pair of two numerical
 *                                          values, e.g: 100*1024,200*1024
 *   MEMORY_SCARCE            <undefined>   Allocate few memory for mbufs
 *                                          (hint for how much memory the
 *                                          board has)
 *   MEMORY_HUGE              <undefined>   Allocate a lot of memory for mbufs
 *                                          (hint for how much memory the
 *                                          board has)
 *                                          If none of MEMORY_CUSTOM/
 *                                          MEMORY_SCARCE/MEMORY_HUGE are
 *                                          defined then a medium amount of
 *                                          memory is allocated for mbufs.
 */

#include <rtems/bspIo.h>
#include <bsp.h>
#include <rtems/rtems_bsdnet.h>

#if 0
#ifdef HAVE_CONFIG_H
#include <config.h>
#else
#include "verscheck.h"
#endif
#endif

#define MULTI_NETDRIVER
#define FIXED_IP_ADDR "10.0.2.5"
#define FIXED_NETMASK "255.255.255.0"

#ifndef NETWORK_TASK_PRIORITY
#define NETWORK_TASK_PRIORITY   150  /* within EPICS' range */
#endif

/* make publicily available for startup scripts... */
const int gesysNetworkTaskPriority = NETWORK_TASK_PRIORITY;

#ifdef  FIXED_IP_ADDR
#define RTEMS_DO_BOOTP 0
#else
#define RTEMS_DO_BOOTP rtems_bsdnet_do_bootp
#define FIXED_IP_ADDR  0
#undef  FIXED_NETMASK
#define FIXED_NETMASK  0
#endif

#ifdef LO_IF_ONLY
#undef NIC_NAME
#elif !defined(NIC_NAME)

#ifdef MULTI_NETDRIVER

#if 0
  #if RTEMS_VERSION_ATLEAST(4,6,99)
  #define pcib_init pci_initialize
  #endif
#endif

extern int rtems_3c509_driver_attach (struct rtems_bsdnet_ifconfig *, int);
extern int rtems_fxp_attach (struct rtems_bsdnet_ifconfig *, int);
extern int rtems_elnk_driver_attach (struct rtems_bsdnet_ifconfig *, int);
extern int rtems_dec21140_driver_attach (struct rtems_bsdnet_ifconfig *, int);

/* these don't probe and will be used even if there's no device :-( */
extern int rtems_ne_driver_attach (struct rtems_bsdnet_ifconfig *, int);
extern int rtems_wd_driver_attach (struct rtems_bsdnet_ifconfig *, int);

static struct rtems_bsdnet_ifconfig isa_netdriver_config[] = {
  {
  	"ep0", rtems_3c509_driver_attach, isa_netdriver_config + 1,
  },
  {
  	"ne1", rtems_ne_driver_attach, 0, irno: 9 /* qemu cannot configure irq-no :-(; has it hardwired to 9 */
  },
};

static struct rtems_bsdnet_ifconfig pci_netdriver_config[]={
  {
  "fxp1", rtems_fxp_attach, pci_netdriver_config+1,
  },
  {
  "dc1", rtems_dec21140_driver_attach, pci_netdriver_config+2,
  },
  #if defined(USE_LIBBSDPORT)
    {
      "", libbsdport_netdriver_attach, pci_netdriver_config+3,
    },
  #endif
  {
  "elnk1", rtems_elnk_driver_attach, isa_netdriver_config,
  },
};

static int pci_check(struct rtems_bsdnet_ifconfig *ocfg, int attaching)
{
struct rtems_bsdnet_ifconfig *cfg;
int if_index_pre;
extern int if_index;
  if ( attaching ) {
  	cfg = pci_initialize() ?
                      isa_netdriver_config : pci_netdriver_config;
  }
  while ( cfg ) {
  	printk("Probing '%s'", cfg->name); fflush(stdout);
  	/* unfortunately, the return value is unreliable - some drivers report
  	 * success even if they fail.
  	 * Check if they chained an interface (ifnet) structure instead
  	 */
  	if_index_pre = if_index;
  	cfg->attach(cfg, attaching);
  	if ( if_index > if_index_pre ) {
  		/* assume success */
  		printk(" .. seemed to work\n");
  		ocfg->name   = cfg->name;
  		ocfg->attach = cfg->attach;
  		return 0;
  	}
  	printk(" .. failed\n");
  	cfg = cfg->next;
  }
  return -1;
}

#define NIC_NAME   "dummy"
#define NIC_ATTACH pci_check

#else

#if defined(RTEMS_BSP_NETWORK_DRIVER_NAME)  /* Use NIC provided by BSP */
# define NIC_NAME   RTEMS_BSP_NETWORK_DRIVER_NAME
# define NIC_ATTACH RTEMS_BSP_NETWORK_DRIVER_ATTACH
#endif

#endif /* ifdef MULTI_NETDRIVER */

#endif /* ifdef LO_IF_ONLY */

#ifdef NIC_NAME

extern int NIC_ATTACH();


static struct rtems_bsdnet_ifconfig netdriver_config[1] = {{
  NIC_NAME,  /* name */
  (int (*)(struct rtems_bsdnet_ifconfig*,int))NIC_ATTACH,  /* attach function */
  0,  		/* link to next interface */
  FIXED_IP_ADDR,
  FIXED_NETMASK
}};
#else
#ifndef LO_IF_ONLY
#warning "NO KNOWN NETWORK DRIVER FOR THIS BSP -- YOU MAY HAVE TO EDIT rtems_netconfig.c"
#endif
#endif

extern void rtems_bsdnet_loopattach();
static struct rtems_bsdnet_ifconfig loopback_config = {
    "lo0",                          /* name */
    (int (*)(struct rtems_bsdnet_ifconfig *, int))rtems_bsdnet_loopattach, /* attach function */
#ifdef NIC_NAME
    netdriver_config,               /* link to next interface */
#else
    0,                              /* link to next interface */
#endif
    "127.0.0.1",                    /* IP address */
    "255.0.0.0",                    /* IP net mask */
};

struct rtems_bsdnet_config rtems_bsdnet_config = {
    &loopback_config,         /* Network interface */
#ifdef NIC_NAME
    RTEMS_DO_BOOTP,           /* Use BOOTP to get network configuration */
#else
    0,                        /* Use BOOTP to get network configuration */
#endif
    NETWORK_TASK_PRIORITY,    /* Network task priority */
#if   defined(MEMORY_CUSTOM)
    MEMORY_CUSTOM,
#elif defined(MEMORY_SCARCE)
    100*1024,                 /* MBUF space */
    200*1024,                 /* MBUF cluster space */
#elif defined(MEMORY_HUGE)
    2*1024*1024,              /* MBUF space */
    5*1024*1024,              /* MBUF cluster space */
#else
    180*1024,                 /* MBUF space */
    350*1024,                 /* MBUF cluster space */
#endif
};
#endif /* _RTEMS_NETWORKCONFIG_H_ */