source: rtems-libbsd/libbsd.txt @ bc78466

4.1155-freebsd-126-freebsd-12freebsd-9.3
Last change on this file since bc78466 was 08c8588, checked in by Sebastian Huber <sebastian.huber@…>, on 01/20/14 at 11:50:23

PRINTF(9): Do not use printk() for log()

The BSD library functions must use printk(). The %D format specifier is
not supported, thus we cannot use the printf() family for output.

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