source: rtems-libbsd/libbsd.txt @ e859231

4.1155-freebsd-126-freebsd-12freebsd-9.3
Last change on this file since e859231 was e859231, checked in by Sebastian Huber <sebastian.huber@…>, on 10/24/13 at 14:38:58

Add TODO for priority values

  • Property mode set to 100644
File size: 25.4 KB
Line 
1RTEMS BSD USB and TCP/IP Developers Guide
2=========================================
3Joel Sherrill <joel.sherrill@oarcorp.com>
4:Author Initials: JRS
5:toc:
6:icons:
7:numbered:
8:website: http://www.rtems.org/
9
10RTEMS uses FreeBSD as the source of its TCP/IP and USB stacks.
11This is a developers guide which captures information on the
12process of merging code from FreeBSD, building this library,
13RTEMS specific support files, and general guidelines on what
14modifications to the FreeBSD source are permitted.
15
16Goals of this effort are:
17
18* Update TCP/IP and provide USB in RTEMS
19* Ease updating to future FreeBSD versions
20* Ease tracking changes in FreeBSD code
21* Minimize manual changes in FreeBSD code
22* Define stable kernel/device driver API which is implemented
23by both RTEMS and FreeBSD. This is the foundation of the port.
24
25We will work to push our changes upstream to the FreeBSD Project
26and minimize changes required at each update point.
27
28**************************************************************
29This is a work in progress and is very likely to be incomplete.
30Please help by adding to it.
31**************************************************************
32
33== Source Code Version Information
34
35* FreeBSD 8.2 SVN r255967
36* RTEMS 4.11
37  - BSP must have support for all new BSD sys sections
38  - It is preferable if the BSP uses linkcmds.base.
39  - BSP must be from an architecture with Programmable Interrupt Controller
40    interrupt model.
41
42The latest port uses the FreeBSD sources as a Git submodule which will
43generally be referred to as the FreeBSD source in this document.  Previously a
44FreeBSD 8.2 SVN checkout was used.  The SVN checkout command corresponding to
45the current Git submodule commit is this
46  svn co http://svn.freebsd.org/base/releng/8.2 -r255967 freebsd-8.2
47
48== Issues and To Do
49* Per-CPU data should be enabled once the new stack is ready for SMP.
50
51* Per-CPU NETISR(9) should be enabled onece the new stack is ready for SMP.
52
53* Multiple routing tables are not supported.  Every FIB value is set to zero
54  (= BSD_DEFAULT_FIB).
55
56* Process identifiers are not supported.  Every PID value is set to zero
57  (= BSD_DEFAULT_PID).
58
59* User credentials are not supported.  The following functions allow the
60  operation for everyone
61  - prison_equal_ip4(),
62  - chgsbsize(),
63  - cr_cansee(),
64  - cr_canseesocket() and
65  - cr_canseeinpcb().
66
67* Sebastian Huber and Joel Sherrill discussed the need for a a basic USB
68  functionality test that is known to work on qemu pc.
69
70* Adapt generic IRQ PIC interface code to Simple Vectored Interrupt Model
71  so that those architectures can use new TCP/IP and USB code.
72
73* freebsd-userspace/rtems/include/sys/syslog.h is a copy from the old
74  RTEMS TCP/IP stack. For some reason, the __printflike markers do not
75  compile in this environment. We may want to use the FreeBSD syslog.h
76  and get this addressed.
77
78* in_cksum implementations for architectures not supported by FreeBSD.
79  This will require figuring out where to put implementations that do
80  not originate from FreeBSD and are populated via the script.
81
82* linker section issues: I have undefined symbols for
83  `_bsd__start_set_sysinit_set` and `_bsd__stop_set_sysinit_set`.
84  Is this the only type of new section magic?  What about the old sysctl_set?
85  I added this to my linkcmds. 
86
87* MAC support functions are not thread-safe ("freebsd/lib/libc/posix1e/mac.c").
88
89* IFCONFIG(8): IEEE80211 support is disabled.  This module depends on a XML
90  parser and mmap().
91
92* get_cyclecount(): The implementation is a security problem.
93
94* What to do with the priority parameter present in the FreeBSD synchronization
95  primitives?
96
97[listing]
98----
99    /* sysinit section? */
100    . = ALIGN (16);
101    _bsd__start_set_sysinit_set = .;
102    *(set_sys_init_*);
103    _bsd__stop_set_sysinit_set = .;
104
105----
106
107* Why is the interrupt server used?  The BSD interrupt handlers can block on
108synchronization primitives like mutexes.  This is in contrast to RTEMS
109interrupt service routines.  The BSPs using the generic interrupt support must
110implement the `bsp_interrupt_vector_enable()` and
111`bsp_interrupt_vector_disable()` routines.  They normally enable/disable a
112particular interrupt source at the interrupt controller.  This can be used to
113implement the interrupt server.  The interrupt server is a task that wakes-up
114in case an associated interrupt happens.  The interrupt source is disabled in
115a generic interrupt handler that wakes-up the interrupt server task.   Once the
116postponed interrupt processing is performed in the interrupt server the
117interrupt source is enabled again.
118
119* Convert all BSP linkcmds to use a linkcmds.base so the sections are
120easier to insert.
121
122* rtems-bsd-init-with-irq.c:
123  rtems_bsd_initialize_with_interrupt_server() has reference to
124    rtems_interrupt_server_initialize() and this method is unimplemented
125    - XXX BSP implements pieces
126    - BSPs using this software stack must support it apparently.
127    - What about Simple Vectored architectures?
128
129* We carried over use of notepad 0 for per task information. This should
130be changed.
131
132* maxproc variable referenced by rtems-bsd-resource.c.  What should it
133be set to?
134
135* ngroups_max variable referenced by rtems-bsd-prot.c.  - What should
136it be set to?
137
138* NIC Device Drivers
139- Only common PCI NIC drivers have been included in the initial set. These
140do not include any system on chip or ISA drivers.
141- PCI configuration probe does not appear to happen to determine if a
142NIC is in I/O or memory space. We have worked around this by using a
143static hint to tell the fxp driver the correct mode. But this needs to
144be addressed.
145- The ISA drivers require more BSD infrastructure to be addressed. This was
146outside the scope of the initial porting effort.
147
148== FreeBSD Source
149
150You should be able to rely on FreebSD manual pages and documentation
151for details on the code itself.
152
153=== Automatically Generated FreeBSD Files
154
155The FreeBSD source tarball includes a file named Makefile.rtems which
156has stanzas to automatically generate some files using awk. For details
157on this, see http://www.freebsd.org/cgi/man.cgi?query=kobj&apropos=0&sektion=0&manpath=FreeBSD+9.0-RELEASE&arch=default&format=html
158
159XXX This needs more detail.
160
161=== Rules for Modifying FreeBSD Source
162
163* Only add lines.  Subtract code by added "ifndef __rtems__". This makes
164merging easier in the future.
165
166== libbsd Source
167
168=== What is in git
169
170The git source is a self-contained kit with FreeBSD and RTEMS components
171pre-merged. The Makefile in this kit is automatically generated.
172
173Any changes to sources in the freebsd or contrib directories will need to
174be merged upstream into our master FreeBSD svn checkout.
175
176The FreeBSD sources managed in the rtems-libbsd git repository (e.g. contrib
177and freebsd directories) contain the "managed" version of the
178FreeBSD source.  The FreeBSD SVN source is the "master" version. The
179freebsd-to-rtems.py script is used to transfer files between the two
180trees. In general terms, if you have modified FreeBSD (i.e. anything in the
181freebsd directory) in the rtems-libbsd tree, you will need to run the script
182in "revert" or "reverse" mode using the -R switch. This will copy the source
183back to your local copy of the FreeBSD source so you can run "svn diff" against
184the upstream FreeBSD source. If you want to transfer source files from the
185FreeBSD SVN checkout to the rtems-libbsd tree, then you must run the script in
186"forward" mode (the default).
187
188=== Building rtems-libbsd source
189
190You need to configure RTEMS for the desired BSP and install it. The
191following is the script used to build the powerpc/psim BSP for our
192internal testing purposes:
193
194[listing]
195----
196#! /bin/sh
197
198cd ${HOME}/newbsd
199rm -rf b-psim
200mkdir b-psim
201cd b-psim
202../git/rtems/configure --target=powerpc-rtems4.11 \
203  --enable-rtemsbsp=psim --disable-networking \
204  --enable-tests=samples \
205  --prefix=${HOME}/newbsd/bsp-install >c.log 2>&1 && \
206  make >b.log 2>&1 && \
207  make install >i.log 2>&1
208echo $?
209----
210
211Then edit the file config.inc to set RTEMS_MAKEFILE_PATH appropriately
212to indicate the ${prefix}/${target}/${BSP}.  Continuing on the above,
213the config.inc used to match the above is:
214
215[listing]
216----
217RTEMS_MAKEFILE_PATH = ${HOME}/newbsd/bsp-install/powerpc-rtems4.11/psim/
218INSTALL_BASE = ${HOME}/newbsd/install
219----
220
221The above installs the rtems-libbsd kit into a separate place from
222RTEMS and the BSP. The rtems-libbsd tests are built against an installed
223image of the rtems-libbsd. By keeping it in a separate installation point
224from RTEMS itself, this makes it easier to remove a libbsd installation
225and have a clean test point.
226
227[listing]
228----
229make
230make install
231make -C testsuite
232----
233
234At this point, we expect multiple linker errors. That is what we are
235currently working on.
236
237=== Organization
238
239The top level directory contains a few directories and files. The following
240are important to understand:
241
242* freebsd-to-rtems.py - script to convert to and free FreeBSD and RTEMS trees
243* Makefile - automatically generated
244* contrib/ - from FreeBSD by script.
245* freebsd/ - from FreeBSD by script.
246* rtemsbsd/ - RTEMS specific implementations of FreeBSD kernel support routines.
247* testsuite/ - RTEMS specific tests
248* libbsd.txt - Documentation in Asciidoc
249
250== Moving Code Between FreeBSD SVN and rtems-libbsd
251
252The script freebsd-to-rtems.py is used to copy code from FreeBSD to the
253rtems-libbsd tree and to reverse this process. This script attempts to
254automate this process as much as possible and performs some transformations
255on the FreeBSD code. Its command line arguments are shown below:
256
257[listing]
258----
259freebsd-to-rtems.py [args]
260  -?|-h|--help     print this and exit
261  -d|--dry-run     run program but no modifications
262  -D|--diff        provide diff of files between trees
263  -e|--early-exit  evaluate arguments, print results, and exit
264  -m|--makefile    just generate Makefile
265  -R|--reverse     default FreeBSD -> RTEMS, reverse that
266  -r|--rtems       RTEMS directory
267  -f|--freebsd     FreeBSD directory
268  -v|--verbose     enable verbose output mode
269----
270
271In its default mode of operation, freebsd-to-rtems.py is used to copy code
272from FreeBSD to the rtems-libbsd tree and perform transformations.  In forward
273mode, the script may be requested to just generate the Makefile.
274
275In "reverse mode", this script undoes those transformations and copies
276the source code back to the FreeBSD SVN tree. This allows us to do
277'svn diff', evaluate changes made by the RTEMS Project, and report changes
278back to FreeBSD upstream.
279
280In either mode, the script may be asked to perform a dry-run or be verbose.
281Also, in either mode, the script is also smart enough to avoid copying over
282files which have not changed. This means that the timestamps of files are
283not changed unless the contents change. The script will also report the
284number of files which changed. In verbose mode, the script will print
285the name of the files which are changed.
286
287The following is an example forward run with no changes.
288
289[listing]
290----
291$ ~/newbsd/git/libbsd-8.2/freebsd-to-rtems.py \
292    -r /home/joel/newbsd/git/libbsd-8.2 \
293    -f /home/joel/newbsd/libbsd/freebsd-8.2 -v
294Verbose:                yes
295Dry Run:                no
296Only Generate Makefile: no
297RTEMS Directory:        /home/joel/newbsd/git/libbsd-8.2
298FreeBSD Directory:      /home/joel/newbsd/libbsd/freebsd-8.2
299Direction:              forward
300Generating into /home/joel/newbsd/git/libbsd-8.2
3010 files were changed.
302----
303
304The script may also be used to generate a diff in either forward or reverse
305direction.
306
307== Initialization of rtems-libbsd
308
309The initialization of the rtems-libbsd is based on the FreeBSD SYSINIT(9)
310infrastructure.  The key to initializing a system is to ensure that the desired
311device drivers are explicitly pulled into the linked application.  This plus
312linking against the libbsd library will pull in the necessary FreeBSD
313infrastructure.
314
315The FreeBSD kernel is not a library like the RTEMS kernel.  It is a bunch of
316object files linked together.  If we have a library, then creating the
317executable is simple.  We begin with a start symbol and recursively resolve all
318references.  With a bunch of object files linked together we need a different
319mechanism.  Most object files don't know each other.  Lets say we have a driver
320module.  The rest of the system has no references to this driver module.  The
321driver module needs a way to tell the rest of the system: Hey, kernel I am
322here, please use my services!
323
324This registration of independent components is performed by SYSINIT(9) and
325specializations:
326
327http://www.freebsd.org/cgi/man.cgi?query=SYSINIT
328
329The SYSINIT(9) uses some global data structures that are placed in a certain
330section.  In the linker command file we need this:
331
332[listing]
333----
334.robsdsets : {
335    _bsd__start_set_modmetadata_set = .;
336    *(_bsd_set_modmetadata_set);
337    _bsd__stop_set_modmetadata_set = .;
338    _bsd__start_set_sysctl_set = .;
339    *(_bsd_set_sysctl_set);
340    _bsd__stop_set_sysctl_set = .;
341} > REGION_RODATA AT > REGION_RODATA_LOAD
342
343.rwbsdsets : {
344    _bsd__start_set_sysinit_set = .;
345    *(_bsd_set_sysinit_set);
346    _bsd__stop_set_sysinit_set = .;
347} > REGION_DATA AT > REGION_DATA_LOAD
348----
349
350Here you can see, that these global data structures are collected into
351continuous memory areas.  This memory area can be identified by start and stop
352symbols.  This constructs a table of uniform items.
353
354The low level FreeBSD code calls at some time during the initialization the
355mi_startup() function (machine independent startup).  This function will sort
356the SYSINIT(9) set and call handler functions which perform further
357initialization.  The last step is the scheduler invocation.
358
359The SYSINIT(9) routines are run in mi_startup() which is called by
360rtems_bsd_initialize().
361
362This is also explained in "The Design and Implementation of the FreeBSD
363Operating System" section 14.3 "Kernel Initialization".
364
365In RTEMS we have a library and not a bunch of object files.  Thus we need a way
366to pull-in the desired services out of the libbsd.  Here the
367"rtems-bsd-sysinit.h" comes into play.  The SYSINIT(9) macros have been
368modified and extended for RTEMS in "sys/kernel.h":
369
370[listing]
371----
372#ifndef __rtems__
373#define    C_SYSINIT(uniquifier, subsystem, order, func, ident) \
374    static struct sysinit uniquifier ## _sys_init = { \
375        subsystem, \
376        order, \
377        func, \
378        (ident) \
379    }; \
380    DATA_SET(sysinit_set,uniquifier ## _sys_init)
381#else /* __rtems__ */
382#define    SYSINIT_ENTRY_NAME(uniquifier) \
383    _bsd_ ## uniquifier ## _sys_init
384#define    SYSINIT_REFERENCE_NAME(uniquifier) \
385    _bsd_ ## uniquifier ## _sys_init_ref
386#define    C_SYSINIT(uniquifier, subsystem, order, func, ident) \
387    struct sysinit SYSINIT_ENTRY_NAME(uniquifier) = { \
388        subsystem, \
389        order, \
390        func, \
391        (ident) \
392    }; \
393    DATA_SET(sysinit_set,SYSINIT_ENTRY_NAME(uniquifier))
394#define    SYSINIT_REFERENCE(uniquifier) \
395    extern struct sysinit SYSINIT_ENTRY_NAME(uniquifier); \
396    static struct sysinit const * const \
397    SYSINIT_REFERENCE_NAME(uniquifier) __used \
398    = &SYSINIT_ENTRY_NAME(uniquifier)
399#define    SYSINIT_MODULE_REFERENCE(mod) \
400    SYSINIT_REFERENCE(mod ## module)
401#define    SYSINIT_DRIVER_REFERENCE(driver, bus) \
402    SYSINIT_MODULE_REFERENCE(driver ## _ ## bus)
403#endif /* __rtems__ */
404----
405
406Here you see that the SYSINIT(9) entries are no longer static.  The
407*_REFERENCE() macros will create references to the corresponding modules which
408are later resolved by the linker.  The application has to provide an object
409file with references to all required FreeBSD modules.
410
411The FreeBSD device model is quite elaborated (with follow-ups):
412
413http://www.freebsd.org/cgi/man.cgi?query=driver
414
415The devices form a tree with the Nexus device at a high-level.  This Nexus
416device is architecture specific in FreeBSD.  In RTEMS we have our own Nexus
417device, see "rtems-bsd-nexus.c".  It uses a table to add child devices:
418
419[listing]
420----
421const char *const _bsd_nexus_devices [] = {
422    #ifdef NEED_USB_OHCI
423        "ohci",
424    #endif
425    #ifdef NEED_USB_EHCI
426        "ehci",
427    #endif
428    #ifdef NEED_SDHC
429        "sdhci",
430    #endif
431    NULL
432};
433----
434
435This table must be provided by the application.
436
437=== SYSCTL_NODE Example
438
439During development, we had an undefined reference to
440_bsd_sysctl__net_children that we had trouble tracking down. Thanks to
441Chris Johns, we located it. He explained how to read SYSCTL_NODE
442definitions. This line from freebsd/netinet/in_proto.c is attempting
443to add the "inet" node to the parent node "_net".
444
445[listing]
446----
447SYSCTL_NODE(_net,      PF_INET,         inet,   CTLFLAG_RW, 0,
448        "Internet Family");
449----
450
451Our problem was that we could not find where _bsd_sysctl__net_children
452was defined. Chris suggested that when in doubt compile with -save-temps
453and look at the preprocessed .i files. But he did not need that. He
454explained that this the symbol name _bsd_sysctl__net_children was
455automatically generated by a SYSCTL_NODE as follows:
456
457* _bsd_ - added by RTEMS modifications to SYSCTL_NODE macro
458* sysctl_ - boilerplace added by SYSCTL_NODE macro
459* "" - empty string for parent node
460* net - name of SYSCTL_NODE
461* children - added by SYSCTL macros
462 
463This was all generated by a support macro declaring the node as this:
464
465[listing]
466----
467struct sysctl_oid_list SYSCTL_NODE_CHILDREN(parent, name);
468----
469
470Given this information, we located this SYSCTL_NODE declaration in
471kern/kern_mib.c
472
473[listing]
474----
475SYSCTL_NODE(, CTL_KERN,   kern,   CTLFLAG_RW, 0,
476        "High kernel, proc, limits &c");
477----
478
479== Core FreeBSD APIs and RTEMS Replacements ==
480
481=== SX(9) (Shared/exclusive locks) ===
482
483http://www.freebsd.org/cgi/man.cgi?query=sx
484
485Binary semaphores (this neglects the ability to allow shared access).
486
487=== MUTEX(9) (Mutual exclusion) ===
488
489http://www.freebsd.org/cgi/man.cgi?query=mutex
490
491Binary semaphores (not recursive mutexes are not supported this way).
492
493=== RWLOCK(9) (Reader/writer lock) ===
494
495http://www.freebsd.org/cgi/man.cgi?query=rwlock
496
497POSIX r/w lock.
498
499=== RMLOCK(9) (Reader/writer lock optimized for mostly read access patterns) ===
500
501Note:  This object was implemented as a wrapper for RWLOCK in the rm_lock header file.
502
503http://www.freebsd.org/cgi/man.cgi?query=rmlock
504
505POSIX r/w lock.
506
507=== CONDVAR(9) (Condition variables) ===
508
509http://www.freebsd.org/cgi/man.cgi?query=condvar
510
511POSIX condition variables with modifications (hack).
512
513=== CALLOUT(9) (Timer functions) ===
514
515http://www.freebsd.org/cgi/man.cgi?query=callout
516
517Timer server.
518
519=== TASKQUEUE(9) (Asynchronous task execution) ===
520
521http://www.freebsd.org/cgi/man.cgi?query=taskqueue
522
523TBD.
524
525=== KTHREAD(9), KPROC(9) (Tasks) ===
526
527http://www.freebsd.org/cgi/man.cgi?query=kthread
528
529http://www.freebsd.org/cgi/man.cgi?query=kproc
530
531Tasks.
532
533=== ZONE(9) (Zone allocator) ===
534
535http://www.freebsd.org/cgi/man.cgi?query=zone
536
537TBD.
538
539=== devfs (Device file system) ===
540
541Dummy, IMFS or new implementation (currently dummy).
542
543=== psignal (Signals) ===
544
545TBD.  Seems to be not needed.
546
547=== poll, select ===
548
549TBD.  Seems to be not needed.
550
551=== RMAN(9) (Resource management) ===
552
553http://www.freebsd.org/cgi/man.cgi?query=rman
554
555TBD.  Seems to be not needed.
556
557=== DEVCLASS(9), DEVICE(9), DRIVER(9), MAKE_DEV(9) (Device management) ===
558
559http://www.freebsd.org/cgi/man.cgi?query=devclass
560
561http://www.freebsd.org/cgi/man.cgi?query=device
562
563http://www.freebsd.org/cgi/man.cgi?query=driver
564
565http://www.freebsd.org/cgi/man.cgi?query=make_dev
566
567Use FreeBSD implementation as far as possible.  FreeBSD has a nice API for
568dynamic device handling.  It may be interesting for RTEMS to use this API
569internally in the future.
570
571=== BUS_SPACE(9), BUS_DMA(9) (Bus and DMA access) ===
572
573http://www.freebsd.org/cgi/man.cgi?query=bus_space
574
575http://www.freebsd.org/cgi/man.cgi?query=bus_dma
576
577Likely BSP dependent.  A default implementation for memory mapped linear access
578is easy to provide.  The current heap implementation supports all properties
579demanded by bus_dma (including the boundary constraint).
580
581== RTEMS Replacements by File Description ==
582
583Note:  Files with a status of USB are used by the USB test and have at least
584been partially tested.  If they contain both USB and Nic, then they are used
585by both and MAY contain methods that have not been tested yet.  Files that
586are only used by the Nic test are the most suspect.
587
588[listing]
589----
590rtems-libbsd File:      rtems-bsd-assert.c
591FreeBSD File:           rtems-bsd-config.h redefines BSD_ASSERT.
592Description:            This file contains the support method rtems_bsd_assert_func().
593Status:                 USB, Nic
594
595rtems-libbsd File:      rtems-bsd-autoconf.c
596FreeBSD File:           FreeBSD has BSP specific autoconf.c
597Description:            This file contains configuration methods that are used to setup the system.
598Status:                 USB
599
600rtems-libbsd File:      rtems-bsd-bus-dma.c
601FreeBSD File:           FreeBSD has BSP specific busdma_machdep.c
602Description:           
603Status:                 USB, Nic
604
605rtems-libbsd File:      rtems-bsd-bus-dma-mbuf.c       
606FreeBSD File:           FreeBSD has BSP specific busdma_machdep.c
607Description:           
608Status:                 Nic
609
610rtems-libbsd File:      rtems-bsd-callout.c             
611FreeBSD File:           kern/kern_timeout.c
612Description:           
613Status:                 USB, Nic
614
615rtems-libbsd File:      rtems-bsd-cam.c
616FreeBSD File:           cam/cam_sim.c
617Description:           
618Status:                 USB
619
620rtems-libbsd File:      rtems-bsd-condvar.c             
621FreeBSD File:           kern/kern_condvar.c
622Description:           
623Status:                 USB
624
625rtems-libbsd File:      rtems-bsd-copyinout.c
626FreeBSD File:           bsp specific copyinout.c )
627Description:            Note: The FreeBSD file is split with some methods being in rtems-bsd-support
628Status:                 Nic
629
630rtems-libbsd File:      rtems-bsd-delay.c
631FreeBSD File:           bsp specific file with multiple names
632Description:           
633Status:                 USB, Nic
634
635rtems-libbsd File:      rtems-bsd-descrip.c
636FreeBSD File:           kern/kern_descrip.c
637Description:           
638Status:                 Nic
639
640rtems-libbsd File:      rtems-bsd-generic.c             
641FreeBSD File:           kern/sys_generic.c
642Description:           
643Status:                 Nic
644
645rtems-libbsd File:      rtems-bsd-init.c
646FreeBSD File:           N/A
647Description:           
648Status:                 USB, Nic
649
650rtems-libbsd File:      rtems-bsd-init-with-irq.c
651FreeBSD File:           N/A
652Description:           
653Status:                 USB, Nic
654
655rtems-libbsd File:      rtems-bsd-jail.c
656FreeBSD File:           kern/kern_jail.c
657Description:           
658Status:                 USB, Nic
659
660rtems-libbsd File:      rtems-bsd-lock.c
661FreeBSD File:           kern/subr_lock.c
662Description:           
663Status:                 USB, Nic
664
665rtems-libbsd File:      rtems-bsd-log.c         
666FreeBSD File:           kern/subr_prf.c
667Description:           
668Status:                 Nic
669
670rtems-libbsd File:      rtems-bsd-malloc.c
671FreeBSD File:           kern/kern_malloc.c
672Description:           
673Status:                 USB, Nic
674
675rtems-libbsd File:      rtems-bsd-mutex.c
676FreeBSD File:           kern/kern_mutex.c
677Description:           
678Status:                 USB, Nic
679
680rtems-libbsd File:      rtems-bsd-newproc.c
681FreeBSD File:           N/A
682Description:           
683Status:                 Nic
684
685rtems-libbsd File:      rtems-bsd-nexus.c
686FreeBSD File:           bsp specific nexus.c
687Description:           
688Status:                 USB
689
690rtems-libbsd File:      rtems-bsd-panic.c               
691FreeBSD File:           boot/common/panic.c
692Description:           
693Status:                 USB, Nic
694
695rtems-libbsd File:      rtems-bsd-rwlock.c             
696FreeBSD File:           kern_rwlock.c
697Description:           
698Status:                 USB, Nic
699
700rtems-libbsd File:      rtems-bsd-shell.c               
701FreeBSD File:           N/A
702Description:           
703Status:                 USB
704
705rtems-libbsd File:      rtems-bsd-signal.c             
706FreeBSD File:           kern/kern_sig.c
707Description:           
708Status:                 Nic
709
710rtems-libbsd File:      rtems-bsd-smp.c                 
711FreeBSD File:           N/A
712Description:           
713Status:                 Nic
714
715rtems-libbsd File:      rtems-bsd-support.c             
716FreeBSD File:           bsp specific copyinout.c
717Description:            Note: the FreeBSD file is split with some methods being in rtems-bsd-copyinout.
718Status:                 USB, Nic
719
720rtems-libbsd File:      rtems-bsd-sx.c                 
721FreeBSD File:           kern/kern_sx.c
722Description:            Status: USB, Nic
723
724rtems-libbsd File:      rtems-bsd-synch.c               
725FreeBSD File:           kern/kern_synch.c
726Description:           
727Status:                 USB, Nic
728
729rtems-libbsd File:      rtems-bsd-syscalls.c           
730FreeBSD File:           User API for kern/uipc_syscalls.c
731Description:           
732Status:                 Nic
733
734rtems-libbsd File:      rtems-bsd-sysctlbyname.c       
735FreeBSD File:           User API for sysctlbyname(3)
736Description:           
737Status:
738
739rtems-libbsd File:      rtems-bsd-sysctl.c             
740FreeBSD File:           User API for sysctl(8)
741Description:           
742Status:
743
744rtems-libbsd File:      rtems-bsd-sysctlnametomib.c     
745FreeBSD File:           User API for sysctlnametomib
746Description:           
747Status:
748
749rtems-libbsd File:      rtems-bsd-taskqueue.c           
750FreeBSD File:           kern/subr_taskqueue.c
751Description:           
752Status:                 Nic
753
754rtems-libbsd File:      rtems-bsd-thread.c                     
755FreeBSD File:           kern/kern_kthread.c
756Description:           
757Status:                 USB, Nic
758
759rtems-libbsd File:      rtems-bsd-timeout.c             
760FreeBSD File:           kern/kern_timeout.c
761Description:           
762Status:                 Nic
763
764rtems-libbsd File:      rtems-bsd-timesupport.c         
765FreeBSD File:           kern/kern_clock.c
766Description:           
767Status:                 Nic
768
769rtems-libbsd File:      rtems-bsd-vm_glue.c             
770FreeBSD File:           vm/vm_glue.c
771Description:           
772Status:                 USB, Nic
773----
774
775== Notes by File ==
776
777altq_subr.c - Arbitrary choices were made in this file that RTEMS would
778not support tsc frequency change.  Additionally, the clock frequency
779for machclk_freq is always measured for RTEMS.
780
781conf.h - In order to add make_dev and destroy_dev, variables in the cdev
782structure that were not being used were conditionally compiled out. The
783capability of supporting children did not appear to be needed and was
784not implemented in the rtems version of these routines.
785 
786== NICs Status ==
787
788[listing]
789----
790Driver                  Symbol                          Status
791======                  ======                          ======
792RealTek                 _bsd_re_pcimodule_sys_init      Links
793EtherExpress            _bsd_fxp_pcimodule_sys_init     Links
794DEC tulip               _bsd_dc_pcimodule_sys_init      Links
795Broadcom BCM57xxx       _bsd_bce_pcimodule_sys_init     Links
796Broadcom BCM4401        _bsd_bfe_pcimodule_sys_init     Links
797Broadcom BCM570x        _bsd_bge_pcimodule_sys_init     Needs Symbols (A)
798E1000 IGB               _bsd_igb_pcimodule_sys_init     Links
799E1000 EM                _bsd_em_pcimodule_sys_init      Links
800----
801
802
803Symbols (A)
804         pci_get_vpd_ident
805 
806== Problems to report to FreeBSD ==
807
808The MMAP_NOT_AVAILABLE define is inverted on its usage.  When it is
809defined the mmap method is called. Additionally, it is not used
810thoroughly. It is not used in the unmap portion of the source.
811The file rec_open.c uses the define MMAP_NOT_AVAILABLE to wrap
812the call to mmap and file rec_close.c uses the munmap method.
813
814
815
Note: See TracBrowser for help on using the repository browser.