diff --git a/BUGS b/BUGS deleted file mode 100644 index 14c1f72ea..000000000 --- a/BUGS +++ /dev/null @@ -1,7 +0,0 @@ -See the Bug Tracking System for GNU GRUB on Savannah. The URL is: - -http://savannah.gnu.org/bugs/?group_id=68 (without SSL) - -or - -https://savannah.gnu.org/bugs/?group_id=68 (with SSL) diff --git a/MAINTENANCE b/MAINTENANCE deleted file mode 100644 index 3ce7b3fcf..000000000 --- a/MAINTENANCE +++ /dev/null @@ -1,60 +0,0 @@ --*- text -*- - -This is a list of random notes for GRUB maintainers. If you are not a -maintainer, you need to ask maintainers to do these instead of doing -these yourself. - -How to update the online manual: (FIXME: this is obsoelete) -1. Copy docs/*.texi (excluding "multiboot.texi") to fencepost.gnu.org. -2. Make a symbolic link from ~mohit/gnudoc/gnudoc_template to the - directory under which *.texi were copied, if the link isn't present. -3. Run ``~mohit/gnudoc/gendocs.sh grub "GNU GRUB Manual"''. -4. Copy the contents of the directory ``manual'' to - gnudist.gnu.org:~ftp/gnu/Manuals/grub-VERSION (VERSION is, for - example, 1.0). -5. Run ``ln -sf grub-VERSION grub'' in gnudist.gnu.org:~ftp/gnu/Manuals. -6. Run ``cd grub; ln -s grub.html index.html''. -7. Verify the new online manual with a WWW browser. -8. Update manual.html by hand. - -How to release a version: -1. Check out the source tree from the CVS from scratch. -2. Check if ``make distcheck'' succeeds. -3. Run ``util/grub-image''. -4. Check the resulted images, for example, using bochs. -5. Copy grub-VERSION.tar.gz, grub-VERSION-i386-pc.tar.gz and - grub-VERSION-i386-pc.ext2fs to fencepost.gnu.org:~ftp/gnu/grub. -6. Move older files in that directory above to the directory ``old'', - if you think they are eyesores. -7. Post an announcement to bug-grub@gnu.org. It would be a good idea to - send a carbon copy to bug-hurd@gnu.org and - debian-hurd@lists.debian.org. If the announcement is for a stable - version, you can inform info-gnu@gnu.org as well. -8. Optionally, post an announcement to Freshmeat.net. - -Legal issues: -1. If a patch is not significant (in size), you don't have to care about - the copyright. -2. If a patch is significant, you shouldn't apply the patch to the CVS. - Before doing that, you must ask the contributor to assign or disclaim - the copyright. Send ``/gd/gnuorg/request-assign.changes'' or - ``/gd/gnuorg/request-assign.future'' to the contributor, and wait - until the FSF finishes the legal work. -3. You can check if a contributor has already assigned his/her copyright - to the FSF by looking at ``/gd/gnuorg/copyright.list''. - -What you should have in your mind: -1. Don't add features unnecessarily! You may think it is a Good Thing to - have more features, but you must be prepared for more burdens. - DO THAT ONLY IF YOU BELIEVE THAT THE FEATURE IS ESSENTIAL. -2. Don't break backward-compatibility! Don't apply any patch which could - break existing features. Otherwise you would receive a lot of - complaints. DO THAT ONLY IF YOU BELIEVE THAT THE INCOMPATIBILITY IS - INEVITABLE. -3. Write good code. Be not satisfied with ad hoc workarounds or quick - hacks. NEVER WRITE BAD CODE. - -Resources: -* http://www.gnu.org/prep/maintain_toc.html -* http://www.gnu.org/prep/standards_toc.html -* http://www.gnu.org/server/fsf-html-style-sheet.html diff --git a/Makefile.in b/Makefile.in deleted file mode 100644 index 66523662a..000000000 --- a/Makefile.in +++ /dev/null @@ -1,605 +0,0 @@ -# Makefile.in generated by automake 1.9.4 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = . -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/config.h.in \ - $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ - THANKS TODO compile config.guess config.sub depcomp install-sh \ - missing mkinstalldirs -subdir = . -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno configure.status.lineno -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = -SOURCES = -DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - { test ! -d $(distdir) \ - || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr $(distdir); }; } -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -distuninstallcheck_listfiles = find . -type f -print -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ -BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ -CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ -DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FSYS_CFLAGS = @FSYS_CFLAGS@ -GRUB_CFLAGS = @GRUB_CFLAGS@ -GRUB_LIBS = @GRUB_LIBS@ -HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ -HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ -MAKEINFO = @MAKEINFO@ -NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ -NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ -NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ -NET_CFLAGS = @NET_CFLAGS@ -NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ -OBJCOPY = @OBJCOPY@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PERL = @PERL@ -RANLIB = @RANLIB@ -SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ -SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ -SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ -SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STAGE1_CFLAGS = @STAGE1_CFLAGS@ -STAGE2_CFLAGS = @STAGE2_CFLAGS@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ - -# Do not change this order if you don't know what you are doing. -AUTOMAKE_OPTIONS = 1.7 gnu -SUBDIRS = netboot stage2 stage1 lib grub util docs -EXTRA_DIST = BUGS MAINTENANCE -all: config.h - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -.SUFFIXES: -am--refresh: - @: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ - cd $(srcdir) && $(AUTOMAKE) --gnu \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) - -config.h: stamp-h1 - @if test ! -f $@; then \ - rm -f stamp-h1; \ - $(MAKE) stamp-h1; \ - else :; fi - -stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status - @rm -f stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status config.h -$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_srcdir) && $(AUTOHEADER) - rm -f stamp-h1 - touch $@ - -distclean-hdr: - -rm -f config.h stamp-h1 -uninstall-info-am: - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @set fnord $$MAKEFLAGS; amf=$$2; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: - @set fnord $$MAKEFLAGS; amf=$$2; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - $(am__remove_distdir) - mkdir $(distdir) - $(mkdir_p) $(distdir)/util - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ - || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ - distdir) \ - || exit 1; \ - fi; \ - done - -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r $(distdir) -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 - $(am__remove_distdir) - -dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__remove_distdir) - -dist-shar: distdir - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__remove_distdir) - -dist dist-all: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst - chmod a-w $(distdir) - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && cd $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck - $(am__remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' -distuninstallcheck: - @cd $(distuninstallcheck_dir) \ - && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am -check: check-recursive -all-am: Makefile config.h -installdirs: installdirs-recursive -installdirs-am: -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-generic mostlyclean-am - -distclean: distclean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-hdr distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -info: info-recursive - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-recursive - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-generic - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-info-am - -uninstall-info: uninstall-info-recursive - -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ - check-am clean clean-generic clean-recursive ctags \ - ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \ - dist-tarZ dist-zip distcheck distclean distclean-generic \ - distclean-hdr distclean-recursive distclean-tags \ - distcleancheck distdir distuninstallcheck dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ - installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-recursive pdf \ - pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ - uninstall-info-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/TODO b/TODO deleted file mode 100644 index adbc8d093..000000000 --- a/TODO +++ /dev/null @@ -1,102 +0,0 @@ --*- Mode: Outline -*- - -Before working on anything in this file, it's very important that you -make contact with the core GRUB developers. Things herein might be -slightly out of date or otherwise not easy to understand at first -glance. So write to first. - -Priorities: - Reported bugs generally have top priority. - Non-reported and non-encountered bugs (things we know don't work, - but don't really impede things) have lower priority. - Things in this file are ranked with one to three !; the more, the - higher priority. - - -Things that should be done before 1.0: - -* Finish the Multiboot Speicification 0.7. !!! - -* Add more --disable-FOO options to configure, so that you can create a - minimum GRUB image. This is useful for boot floppies because of the size - restriction. ! - -* Implement a new version of track_int13, using Virtual 8086 Mode. !!! - -* Add missing features of graphics support. !! - -Things that should _not_ be done before 1.0: - -* Add configuration inclusion support by adding a command "include". ! - -* Add automatic configuration support. - -* Add bunzip2 support. - -* Define the module system. - -* Add BSD syntax support, using results of ioprobe to map drives. ! - (0x1f0-0x1f7 = primary IDE, 0x170-0x176 = secondary, - 0x1e8-0x1ef = tertiary, 0x168-0x16f = quaternary). - -* Add a real scripting language, possibly retaining backward - compatibility so that old config files can be used. - -* Add internationalization support, emulating gettext as much as is - feasible. - -* Support other architectures than i386-pc. - -* Add real memory management. - - -Things that may be done anytime: - -* Port the script ``grub-install'' to OpenBSD. At least you will have to - modify the function `convert' so that it can translate a native device - name into the corresponding GRUB drive representation. ! - -* Add a command to run a GRUB script file. !! - -* Add commands to manipulate the menu from the command-line interface. ! - -* Make symbolic links work for BSD FFS. - -* Add indirect block support to the BSD FFS filesystem code, so files - larger than 16MB can be read. - -* Fix-up FreeBSD, NetBSD (and OpenBSD ?) command-line boot - parameters. - -* Support embedding a Stage 1.5 in the "bootloader" area of a FFS - partition. (We already have the code, but need an approval by an - expert before turning on the support. Any volunteers?) - -* Support embedding a Stage 1.5 in the EXT2_BOOT_LOADER_INO of an ext2fs - partition, so that it won't be accidentally erased or modified by - the kernel. - -* Add ISA PnP support. - -* Add more filesystems support (NTFS, etc.) - -* Add more remote console support (parallel and net). - -* Add (real) RAID support. - -? Add a partition naming syntax that means ``the first partition of - this type''. We need this for clean Hurd install floppies. - Nope. Improving the `find' command would solve this problem. - -* Add CDROM-chainloading support. It would be enough to support only - BIOSes which have bootable-CDROM support (so you may use the "Bootable - CDROM" BIOS calls). It is not trivial to support BIOSes without the - capability to boot CDROM. - -? Divide pxegrub into two parts, so the initial image doesn't exceed - the 32KB limit. I'm not sure if this is really necessary, because the - PXE standard just says that it is _recommended_ to improve the - modularity of a boot image. Obviously, this reason doesn't apply to - GRUB, as pxegrub is merely a secondary boot loader. So whether this - task should be done depends on if existing PXE ROMs support >32KB - images or not, after all. diff --git a/acinclude.m4 b/acinclude.m4 deleted file mode 100644 index d508ad883..000000000 --- a/acinclude.m4 +++ /dev/null @@ -1,366 +0,0 @@ -dnl grub_ASM_USCORE checks if C symbols get an underscore after -dnl compiling to assembler. -dnl Written by Pavel Roskin. Based on grub_ASM_EXT_C written by -dnl Erich Boleyn and modified by OKUJI Yoshinori -AC_DEFUN([grub_ASM_USCORE], -[AC_REQUIRE([AC_PROG_CC]) -AC_MSG_CHECKING([if C symbols get an underscore after compilation]) -AC_CACHE_VAL(grub_cv_asm_uscore, -[cat > conftest.c <<\EOF -int -func (int *list) -{ - *list = 0; - return *list; -} -EOF - -if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -S conftest.c]) && test -s conftest.s; then - true -else - AC_MSG_ERROR([${CC-cc} failed to produce assembly code]) -fi - -if grep _func conftest.s >/dev/null 2>&1; then - grub_cv_asm_uscore=yes -else - grub_cv_asm_uscore=no -fi - -rm -f conftest*]) - -if test "x$grub_cv_asm_uscore" = xyes; then - AC_DEFINE_UNQUOTED([HAVE_ASM_USCORE], $grub_cv_asm_uscore, - [Define if C symbols get an underscore after compilation]) -fi - -AC_MSG_RESULT([$grub_cv_asm_uscore]) -]) - - -dnl Some versions of `objcopy -O binary' vary their output depending -dnl on the link address. -AC_DEFUN([grub_PROG_OBJCOPY_ABSOLUTE], -[AC_MSG_CHECKING([whether ${OBJCOPY} works for absolute addresses]) -AC_CACHE_VAL(grub_cv_prog_objcopy_absolute, -[cat > conftest.c <<\EOF -void -cmain (void) -{ - *((int *) 0x1000) = 2; -} -EOF - -if AC_TRY_EVAL(ac_compile) && test -s conftest.o; then : -else - AC_MSG_ERROR([${CC-cc} cannot compile C source code]) -fi -grub_cv_prog_objcopy_absolute=yes -for link_addr in 2000 8000 7C00; do - if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} ${LDFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec]); then : - else - AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr]) - fi - if AC_TRY_COMMAND([${OBJCOPY-objcopy} -O binary conftest.exec conftest]); then : - else - AC_MSG_ERROR([${OBJCOPY-objcopy} cannot create binary files]) - fi - if test ! -f conftest.old || AC_TRY_COMMAND([cmp -s conftest.old conftest]); then - mv -f conftest conftest.old - else - grub_cv_prog_objcopy_absolute=no - break - fi -done -rm -f conftest*]) -AC_MSG_RESULT([$grub_cv_prog_objcopy_absolute])]) - -dnl Mass confusion! -dnl Older versions of GAS interpret `.code16' to mean ``generate 32-bit -dnl instructions, but implicitly insert addr32 and data32 bytes so -dnl that the code works in real mode''. -dnl -dnl Newer versions of GAS interpret `.code16' to mean ``generate 16-bit -dnl instructions,'' which seems right. This requires the programmer -dnl to explicitly insert addr32 and data32 instructions when they want -dnl them. -dnl -dnl We only support the newer versions, because the old versions cause -dnl major pain, by requiring manual assembly to get 16-bit instructions into -dnl stage1/stage1.S. -AC_DEFUN([grub_ASM_ADDR32], -[AC_REQUIRE([AC_PROG_CC]) -AC_REQUIRE([grub_ASM_PREFIX_REQUIREMENT]) -AC_MSG_CHECKING([for .code16 addr32 assembler support]) -AC_CACHE_VAL(grub_cv_asm_addr32, -[cat > conftest.s.in <<\EOF - .code16 -l1: @ADDR32@ movb %al, l1 -EOF - -if test "x$grub_cv_asm_prefix_requirement" = xyes; then - sed -e s/@ADDR32@/addr32/ < conftest.s.in > conftest.s -else - sed -e s/@ADDR32@/addr32\;/ < conftest.s.in > conftest.s -fi - -if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then - grub_cv_asm_addr32=yes -else - grub_cv_asm_addr32=no -fi - -rm -f conftest*]) - -AC_MSG_RESULT([$grub_cv_asm_addr32])]) - -dnl -dnl Later versions of GAS requires that addr32 and data32 prefixes -dnl appear in the same lines as the instructions they modify, while -dnl earlier versions requires that they appear in separate lines. -AC_DEFUN([grub_ASM_PREFIX_REQUIREMENT], -[AC_REQUIRE([AC_PROG_CC]) -AC_MSG_CHECKING(dnl -[whether addr32 must be in the same line as the instruction]) -AC_CACHE_VAL(grub_cv_asm_prefix_requirement, -[cat > conftest.s <<\EOF - .code16 -l1: addr32 movb %al, l1 -EOF - -if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then - grub_cv_asm_prefix_requirement=yes -else - grub_cv_asm_prefix_requirement=no -fi - -rm -f conftest*]) - -if test "x$grub_cv_asm_prefix_requirement" = xyes; then - grub_tmp_addr32="addr32" - grub_tmp_data32="data32" -else - grub_tmp_addr32="addr32;" - grub_tmp_data32="data32;" -fi - -AC_DEFINE_UNQUOTED([ADDR32], $grub_tmp_addr32, - [Define it to \"addr32\" or \"addr32;\" to make GAS happy]) -AC_DEFINE_UNQUOTED([DATA32], $grub_tmp_data32, - [Define it to \"data32\" or \"data32;\" to make GAS happy]) - -AC_MSG_RESULT([$grub_cv_asm_prefix_requirement])]) - -dnl -dnl Older versions of GAS require that absolute indirect calls/jumps are -dnl not prefixed with `*', while later versions warn if not prefixed. -AC_DEFUN([grub_ASM_ABSOLUTE_WITHOUT_ASTERISK], -[AC_REQUIRE([AC_PROG_CC]) -AC_MSG_CHECKING(dnl -[whether an absolute indirect call/jump must not be prefixed with an asterisk]) -AC_CACHE_VAL(grub_cv_asm_absolute_without_asterisk, -[cat > conftest.s <<\EOF - lcall *(offset) -offset: - .long 0 - .word 0 -EOF - -if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then - grub_cv_asm_absolute_without_asterisk=no -else - grub_cv_asm_absolute_without_asterisk=yes -fi - -rm -f conftest*]) - -if test "x$grub_cv_asm_absolute_without_asterisk" = xyes; then - AC_DEFINE(ABSOLUTE_WITHOUT_ASTERISK, 1, [Define if an absolute indirect call/jump must NOT be prefixed with `*']) -fi - -AC_MSG_RESULT([$grub_cv_asm_absolute_without_asterisk])]) - -dnl -dnl grub_CHECK_START_SYMBOL checks if start is automatically defined by -dnl the compiler. -dnl Written by OKUJI Yoshinori -AC_DEFUN([grub_CHECK_START_SYMBOL], -[AC_REQUIRE([AC_PROG_CC]) -AC_MSG_CHECKING([if start is defined by the compiler]) -AC_CACHE_VAL(grub_cv_check_start_symbol, -[AC_TRY_LINK([], [asm ("incl start")], - grub_cv_check_start_symbol=yes, - grub_cv_check_start_symbol=no)]) - -if test "x$grub_cv_check_start_symbol" = xyes; then - AC_DEFINE(HAVE_START_SYMBOL, 1, [Define if start is defined]) -fi - -AC_MSG_RESULT([$grub_cv_check_start_symbol]) -]) - -dnl -dnl grub_CHECK_USCORE_START_SYMBOL checks if _start is automatically -dnl defined by the compiler. -dnl Written by OKUJI Yoshinori -AC_DEFUN([grub_CHECK_USCORE_START_SYMBOL], -[AC_REQUIRE([AC_PROG_CC]) -AC_MSG_CHECKING([if _start is defined by the compiler]) -AC_CACHE_VAL(grub_cv_check_uscore_start_symbol, -[AC_TRY_LINK([], [asm ("incl _start")], - grub_cv_check_uscore_start_symbol=yes, - grub_cv_check_uscore_start_symbol=no)]) - -if test "x$grub_cv_check_uscore_start_symbol" = xyes; then - AC_DEFINE(HAVE_USCORE_START_SYMBOL, 1, [Define if _start is defined]) -fi - -AC_MSG_RESULT([$grub_cv_check_uscore_start_symbol]) -]) - -dnl -dnl grub_CHECK_USCORE_USCORE_BSS_START_SYMBOL checks if __bss_start is -dnl automatically defined by the compiler. -dnl Written by Michael Hohmoth. -AC_DEFUN([grub_CHECK_USCORE_USCORE_BSS_START_SYMBOL], -[AC_REQUIRE([AC_PROG_CC]) -AC_MSG_CHECKING([if __bss_start is defined by the compiler]) -AC_CACHE_VAL(grub_cv_check_uscore_uscore_bss_start_symbol, -[AC_TRY_LINK([], [asm ("incl __bss_start")], - grub_cv_check_uscore_uscore_bss_start_symbol=yes, - grub_cv_check_uscore_uscore_bss_start_symbol=no)]) - -if test "x$grub_cv_check_uscore_uscore_bss_start_symbol" = xyes; then - AC_DEFINE(HAVE_USCORE_USCORE_BSS_START_SYMBOL, 1, [Define if __bss_start is defined]) -fi - -AC_MSG_RESULT([$grub_cv_check_uscore_uscore_bss_start_symbol]) -]) - -dnl -dnl grub_CHECK_EDATA_SYMBOL checks if edata is automatically defined by the -dnl compiler. -dnl Written by Michael Hohmuth. -AC_DEFUN([grub_CHECK_EDATA_SYMBOL], -[AC_REQUIRE([AC_PROG_CC]) -AC_MSG_CHECKING([if edata is defined by the compiler]) -AC_CACHE_VAL(grub_cv_check_edata_symbol, -[AC_TRY_LINK([], [asm ("incl edata")], - grub_cv_check_edata_symbol=yes, - grub_cv_check_edata_symbol=no)]) - -if test "x$grub_cv_check_edata_symbol" = xyes; then - AC_DEFINE(HAVE_EDATA_SYMBOL, 1, [Define if edata is defined]) -fi - -AC_MSG_RESULT([$grub_cv_check_edata_symbol]) -]) - -dnl -dnl grub_CHECK_USCORE_EDATA_SYMBOL checks if _edata is automatically -dnl defined by the compiler. -dnl Written by Michael Hohmuth. -AC_DEFUN([grub_CHECK_USCORE_EDATA_SYMBOL], -[AC_REQUIRE([AC_PROG_CC]) -AC_MSG_CHECKING([if _edata is defined by the compiler]) -AC_CACHE_VAL(grub_cv_check_uscore_edata_symbol, -[AC_TRY_LINK([], [asm ("incl _edata")], - grub_cv_check_uscore_edata_symbol=yes, - grub_cv_check_uscore_edata_symbol=no)]) - -if test "x$grub_cv_check_uscore_edata_symbol" = xyes; then - AC_DEFINE(HAVE_USCORE_EDATA_SYMBOL, 1, [Define if _edata is defined]) -fi - -AC_MSG_RESULT([$grub_cv_check_uscore_edata_symbol]) -]) - -dnl -dnl grub_CHECK_END_SYMBOL checks if end is automatically defined by the -dnl compiler. -dnl Written by OKUJI Yoshinori -AC_DEFUN([grub_CHECK_END_SYMBOL], -[AC_REQUIRE([AC_PROG_CC]) -AC_MSG_CHECKING([if end is defined by the compiler]) -AC_CACHE_VAL(grub_cv_check_end_symbol, -[AC_TRY_LINK([], [asm ("incl end")], - grub_cv_check_end_symbol=yes, - grub_cv_check_end_symbol=no)]) - -if test "x$grub_cv_check_end_symbol" = xyes; then - AC_DEFINE(HAVE_END_SYMBOL, 1, [Define if end is defined]) -fi - -AC_MSG_RESULT([$grub_cv_check_end_symbol]) -]) - -dnl -dnl grub_CHECK_USCORE_END_SYMBOL checks if _end is automatically defined -dnl by the compiler. -dnl Written by OKUJI Yoshinori -AC_DEFUN([grub_CHECK_USCORE_END_SYMBOL], -[AC_REQUIRE([AC_PROG_CC]) -AC_MSG_CHECKING([if _end is defined by the compiler]) -AC_CACHE_VAL(grub_cv_check_uscore_end_symbol, -[AC_TRY_LINK([], [asm ("incl _end")], - grub_cv_check_uscore_end_symbol=yes, - grub_cv_check_uscore_end_symbol=no)]) - -if test "x$grub_cv_check_uscore_end_symbol" = xyes; then - AC_DEFINE(HAVE_USCORE_END_SYMBOL, 1, [Define if end is defined]) -fi - -AC_MSG_RESULT([$grub_cv_check_uscore_end_symbol]) -]) - -dnl grub_DEFINE_FILE(MACRO_NAME, FILE_NAME, DESCRIPTION) -dnl grub_DEFINE_FILE defines a macro as the contents of a file safely. -dnl Replace some escape sequences, because autoconf doesn't handle them -dnl gracefully. -dnl Written by OKUJI Yoshinori. -AC_DEFUN([grub_DEFINE_FILE], -[AC_REQUIRE([AC_PROG_CC]) -# Because early versions of GNU sed 3.x are too buggy, use a C program -# instead of shell commands. *sigh* -cat >conftest.c <<\EOF -#include - -int -main (void) -{ - int c; - - while ((c = getchar ()) != EOF) - { - switch (c) - { - case '\n': - fputs ("\\n", stdout); - break; - case '\r': - fputs ("\\r", stdout); - break; - case '\\': - fputs ("\\\\", stdout); - break; - case '"': - fputs ("\\\"", stdout); - break; - default: - putchar (c); - } - } - - return 0; -} -EOF - -if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} conftest.c -o conftest]) && test -s conftest; then - grub_tmp_value=`./conftest < "[$2]"` -else - AC_MSG_ERROR([${CC-cc} failed to produce an executable file]) -fi - -AC_DEFINE_UNQUOTED([$1], "$grub_tmp_value", [$3]) -rm -f conftest* -]) diff --git a/aclocal.m4 b/aclocal.m4 deleted file mode 100644 index aa691f618..000000000 --- a/aclocal.m4 +++ /dev/null @@ -1,1061 +0,0 @@ -# generated automatically by aclocal 1.9.4 -*- Autoconf -*- - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 -# Free Software Foundation, Inc. -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -# -*- Autoconf -*- -# Copyright (C) 2002, 2003 Free Software Foundation, Inc. -# Generated from amversion.in; do not edit by hand. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION so it can be traced. -# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], - [AM_AUTOMAKE_VERSION([1.9.4])]) - -# AM_AUX_DIR_EXPAND - -# Copyright (C) 2001, 2003 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to -# `$srcdir', `$srcdir/..', or `$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is `.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997, 2000, 2001, 2003, 2004 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# serial 6 - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ(2.52)dnl - ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE]) -AC_SUBST([$1_FALSE]) -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# serial 7 -*- Autoconf -*- - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 -# Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - - -# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "GCJ", or "OBJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -ifelse([$1], CC, [depcc="$CC" am_compiler_list=], - [$1], CXX, [depcc="$CXX" am_compiler_list=], - [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - case $depmode in - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - none) break ;; - esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. - if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE(dependency-tracking, -[ --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH]) -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 -# Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -#serial 2 - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done -done -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each `.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Do all the work for Automake. -*- Autoconf -*- - -# This macro actually does too much some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 -# Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# serial 11 - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.58])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) - AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) -AM_MISSING_PROG(AUTOCONF, autoconf) -AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) -AM_MISSING_PROG(AUTOHEADER, autoheader) -AM_MISSING_PROG(MAKEINFO, makeinfo) -AM_PROG_INSTALL_SH -AM_PROG_INSTALL_STRIP -AC_REQUIRE([AM_PROG_MKDIR_P])dnl -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl -]) -]) - - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $1 | $1:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. - -# Copyright (C) 2001, 2003 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -install_sh=${install_sh-"$am_aux_dir/install-sh"} -AC_SUBST(install_sh)]) - -# -*- Autoconf -*- -# Copyright (C) 2003 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# serial 1 - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null -AC_SUBST([am__leading_dot])]) - -# Add --enable-maintainer-mode option to configure. -# From Jim Meyering - -# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004 -# Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# serial 3 - -AC_DEFUN([AM_MAINTAINER_MODE], -[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) - dnl maintainer-mode is disabled by default - AC_ARG_ENABLE(maintainer-mode, -[ --enable-maintainer-mode enable make rules and dependencies not useful - (and sometimes confusing) to the casual installer], - USE_MAINTAINER_MODE=$enableval, - USE_MAINTAINER_MODE=no) - AC_MSG_RESULT([$USE_MAINTAINER_MODE]) - AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) - MAINT=$MAINTAINER_MODE_TRUE - AC_SUBST(MAINT)dnl -] -) - -AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# serial 2 - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo done -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# -*- Autoconf -*- - - -# Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# serial 3 - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN([`missing' script is too old or missing]) -fi -]) - -# AM_PROG_MKDIR_P -# --------------- -# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. - -# Copyright (C) 2003, 2004 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories -# created by `make install' are always world readable, even if the -# installer happens to have an overly restrictive umask (e.g. 077). -# This was a mistake. There are at least two reasons why we must not -# use `-m 0755': -# - it causes special bits like SGID to be ignored, -# - it may be too restrictive (some setups expect 775 directories). -# -# Do not use -m 0755 and let people choose whatever they expect by -# setting umask. -# -# We cannot accept any implementation of `mkdir' that recognizes `-p'. -# Some implementations (such as Solaris 8's) are not thread-safe: if a -# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' -# concurrently, both version can detect that a/ is missing, but only -# one can create it and the other will error out. Consequently we -# restrict ourselves to GNU make (using the --version option ensures -# this.) -AC_DEFUN([AM_PROG_MKDIR_P], -[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - # We used to keeping the `.' as first argument, in order to - # allow $(mkdir_p) to be used without argument. As in - # $(mkdir_p) $(somedir) - # where $(somedir) is conditionally defined. However this is wrong - # for two reasons: - # 1. if the package is installed by a user who cannot write `.' - # make install will fail, - # 2. the above comment should most certainly read - # $(mkdir_p) $(DESTDIR)$(somedir) - # so it does not work when $(somedir) is undefined and - # $(DESTDIR) is not. - # To support the latter case, we have to write - # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), - # so the `.' trick is pointless. - mkdir_p='mkdir -p --' -else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - for d in ./-p ./--version; - do - test -d $d && rmdir $d - done - # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. - if test -f "$ac_aux_dir/mkinstalldirs"; then - mkdir_p='$(mkinstalldirs)' - else - mkdir_p='$(install_sh) -d' - fi -fi -AC_SUBST([mkdir_p])]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# serial 2 - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# ------------------------------ -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) - -# _AM_SET_OPTIONS(OPTIONS) -# ---------------------------------- -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# -# Check to make sure that the build environment is sane. -# - -# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# serial 3 - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# Just in case -sleep 1 -echo timestamp > conftest.file -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` - if test "$[*]" = "X"; then - # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` - fi - rm -f conftest.file - if test "$[*]" != "X $srcdir/configure conftest.file" \ - && test "$[*]" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken -alias in your environment]) - fi - - test "$[2]" = conftest.file - ) -then - # Ok. - : -else - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT(yes)]) - -# AM_PROG_INSTALL_STRIP - -# Copyright (C) 2001, 2003 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# One issue with vendor `install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in `make install-strip', and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -dnl Don't test for $cross_compiling = yes, because it might be `maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# serial 1 - - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of `v7', `ustar', or `pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. -AM_MISSING_PROG([AMTAR], [tar]) -m4_if([$1], [v7], - [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of `-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi -done -rm -rf conftest.dir - -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - -m4_include([acinclude.m4]) diff --git a/compile b/compile deleted file mode 100644 index 3d2170320..000000000 --- a/compile +++ /dev/null @@ -1,142 +0,0 @@ -#! /bin/sh -# Wrapper for compilers which do not understand `-c -o'. - -scriptversion=2004-10-12.08 - -# Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc. -# Written by Tom Tromey . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -case $1 in - '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: compile [--help] [--version] PROGRAM [ARGS] - -Wrapper for compilers which do not understand `-c -o'. -Remove `-o dest.o' from ARGS, run PROGRAM with the remaining -arguments, and rename the output as expected. - -If you are trying to build a whole package this is not the -right script to run: please start by reading the file `INSTALL'. - -Report bugs to . -EOF - exit 0 - ;; - -v | --v*) - echo "compile $scriptversion" - exit 0 - ;; -esac - -ofile= -cfile= -eat= - -for arg -do - if test -n "$eat"; then - eat= - else - case $1 in - -o) - # configure might choose to run compile as `compile cc -o foo foo.c'. - # So we strip `-o arg' only if arg is an object. - eat=1 - case $2 in - *.o | *.obj) - ofile=$2 - ;; - *) - set x "$@" -o "$2" - shift - ;; - esac - ;; - *.c) - cfile=$1 - set x "$@" "$1" - shift - ;; - *) - set x "$@" "$1" - shift - ;; - esac - fi - shift -done - -if test -z "$ofile" || test -z "$cfile"; then - # If no `-o' option was seen then we might have been invoked from a - # pattern rule where we don't need one. That is ok -- this is a - # normal compilation that the losing compiler can handle. If no - # `.c' file was seen then we are probably linking. That is also - # ok. - exec "$@" -fi - -# Name of file we expect compiler to create. -cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` - -# Create the lock directory. -# Note: use `[/.-]' here to ensure that we don't use the same name -# that we are using for the .o file. Also, base the name on the expected -# object file name, since that is what matters with a parallel build. -lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d -while true; do - if mkdir "$lockdir" >/dev/null 2>&1; then - break - fi - sleep 1 -done -# FIXME: race condition here if user kills between mkdir and trap. -trap "rmdir '$lockdir'; exit 1" 1 2 15 - -# Run the compile. -"$@" -ret=$? - -if test -f "$cofile"; then - mv "$cofile" "$ofile" -elif test -f "${cofile}bj"; then - mv "${cofile}bj" "$ofile" -fi - -rmdir "$lockdir" -exit $ret - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/config.guess b/config.guess deleted file mode 100644 index 822947132..000000000 --- a/config.guess +++ /dev/null @@ -1,1453 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. - -timestamp='2004-11-12' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; - --version | -v ) - echo "$version" ; exit 0 ;; - --help | --h* | -h ) - echo "$usage"; exit 0 ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit 0 ;; - amd64:OpenBSD:*:*) - echo x86_64-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - amiga:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - cats:OpenBSD:*:*) - echo arm-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - hp300:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - luna88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mac68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - macppc:OpenBSD:*:*) - echo powerpc-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme68k:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvme88k:OpenBSD:*:*) - echo m88k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - mvmeppc:OpenBSD:*:*) - echo powerpc-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sgi:OpenBSD:*:*) - echo mips64-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - sun3:OpenBSD:*:*) - echo m68k-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - *:OpenBSD:*:*) - echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} - exit 0 ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit 0 ;; - macppc:MirBSD:*:*) - echo powerppc-unknown-mirbsd${UNAME_RELEASE} - exit 0 ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit 0 ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit 0 ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit 0 ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit 0 ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit 0;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit 0 ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit 0 ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit 0 ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit 0 ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit 0 ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit 0;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit 0;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit 0 ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit 0 ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit 0 ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7 && exit 0 ;; - esac ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - i86pc:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit 0 ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit 0 ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit 0 ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit 0 ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit 0 ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit 0 ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit 0 ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit 0 ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit 0 ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit 0 ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit 0 ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit 0 ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit 0 ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c \ - && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && exit 0 - echo mips-mips-riscos${UNAME_RELEASE} - exit 0 ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit 0 ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit 0 ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit 0 ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit 0 ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit 0 ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit 0 ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit 0 ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit 0 ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit 0 ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit 0 ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit 0 ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit 0 ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit 0 ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit 0 ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit 0 ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 - echo rs6000-ibm-aix3.2.5 - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit 0 ;; - *:AIX:*:[45]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit 0 ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit 0 ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit 0 ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit 0 ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit 0 ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit 0 ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit 0 ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit 0 ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - # avoid double evaluation of $set_cc_for_build - test -n "$CC_FOR_BUILD" || eval $set_cc_for_build - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit 0 ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit 0 ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 - echo unknown-hitachi-hiuxwe2 - exit 0 ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit 0 ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit 0 ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit 0 ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit 0 ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit 0 ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit 0 ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit 0 ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit 0 ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit 0 ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit 0 ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit 0 ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit 0 ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit 0 ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit 0 ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit 0 ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit 0 ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit 0 ;; - *:FreeBSD:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit 0 ;; - i*:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit 0 ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit 0 ;; - x86:Interix*:[34]*) - echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' - exit 0 ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit 0 ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit 0 ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit 0 ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit 0 ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit 0 ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit 0 ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit 0 ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit 0 ;; - arm*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - cris:Linux:*:*) - echo cris-axis-linux-gnu - exit 0 ;; - crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu - exit 0 ;; - frv:Linux:*:*) - echo frv-unknown-linux-gnu - exit 0 ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - mips:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips - #undef mipsel - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` - test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 - ;; - mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips64 - #undef mips64el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` - test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 - ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit 0 ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit 0 ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit 0 ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit 0 ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit 0 ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit 0 ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit 0 ;; - x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu - exit 0 ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit 0 ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit 0 ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit 0 ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #ifdef __INTEL_COMPILER - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` - test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 - test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 - ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit 0 ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit 0 ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit 0 ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit 0 ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit 0 ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit 0 ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit 0 ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit 0 ;; - i*86:*:5:[78]*) - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit 0 ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit 0 ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp - exit 0 ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit 0 ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit 0 ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit 0 ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit 0 ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit 0 ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit 0 ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4.3${OS_REL} && exit 0 - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && echo i486-ncr-sysv4 && exit 0 ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit 0 ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit 0 ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit 0 ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit 0 ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit 0 ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit 0 ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit 0 ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit 0 ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit 0 ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit 0 ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit 0 ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit 0 ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit 0 ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit 0 ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit 0 ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit 0 ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit 0 ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit 0 ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit 0 ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - *86) UNAME_PROCESSOR=i686 ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit 0 ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit 0 ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit 0 ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit 0 ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit 0 ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit 0 ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit 0 ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit 0 ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit 0 ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit 0 ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit 0 ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit 0 ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit 0 ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit 0 ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit 0 ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms && exit 0 ;; - I*) echo ia64-dec-vms && exit 0 ;; - V*) echo vax-dec-vms && exit 0 ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit 0 ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit 0 ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit 0 ;; - c34*) - echo c34-convex-bsd - exit 0 ;; - c38*) - echo c38-convex-bsd - exit 0 ;; - c4*) - echo c4-convex-bsd - exit 0 ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/config.h.in b/config.h.in deleted file mode 100644 index 68d7c8ce1..000000000 --- a/config.h.in +++ /dev/null @@ -1,106 +0,0 @@ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Define if an absolute indirect call/jump must NOT be prefixed with `*' */ -#undef ABSOLUTE_WITHOUT_ASTERISK - -/* Define it to \"addr32\" or \"addr32;\" to make GAS happy */ -#undef ADDR32 - -/* Define if you don't want to pass the mem= option to Linux */ -#undef AUTO_LINUX_MEM_OPT - -/* Define it to \"data32\" or \"data32;\" to make GAS happy */ -#undef DATA32 - -/* Define if C symbols get an underscore after compilation */ -#undef HAVE_ASM_USCORE - -/* Define to 1 if you have the header file. */ -#undef HAVE_CURSES_H - -/* Define if edata is defined */ -#undef HAVE_EDATA_SYMBOL - -/* Define if end is defined */ -#undef HAVE_END_SYMBOL - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define if you have a curses library */ -#undef HAVE_LIBCURSES - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_NCURSES_CURSES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_NCURSES_H - -/* Define if opendisk() in -lutil can be used */ -#undef HAVE_OPENDISK - -/* Define if start is defined */ -#undef HAVE_START_SYMBOL - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define if _edata is defined */ -#undef HAVE_USCORE_EDATA_SYMBOL - -/* Define if end is defined */ -#undef HAVE_USCORE_END_SYMBOL - -/* Define if _start is defined */ -#undef HAVE_USCORE_START_SYMBOL - -/* Define if __bss_start is defined */ -#undef HAVE_USCORE_USCORE_BSS_START_SYMBOL - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Define if there is user specified preset menu string */ -#undef PRESET_MENU_STRING - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Version number of package */ -#undef VERSION diff --git a/config.sub b/config.sub deleted file mode 100644 index 987b17d81..000000000 --- a/config.sub +++ /dev/null @@ -1,1566 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. - -timestamp='2004-11-30' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# This file is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS - -Canonicalize a configuration name. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit 0 ;; - --version | -v ) - echo "$version" ; exit 0 ;; - --help | --h* | -h ) - echo "$usage"; exit 0 ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo $1 - exit 0;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ - kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray) - os= - basic_machine=$1 - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` - ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64vr | mips64vrel \ - | mips64orion | mips64orionel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | msp430 \ - | ns16k | ns32k \ - | openrisc | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ - | pyramid \ - | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ - | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | v850 | v850e \ - | we32k \ - | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k) - basic_machine=$basic_machine-unknown - ;; - m6811 | m68hc11 | m6812 | m68hc12) - # Motorola 68HC11/12. - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* \ - | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | msp430-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ - | pyramid-* \ - | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tron-* \ - | v850-* | v850e-* | vax-* \ - | we32k-* \ - | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa-* \ - | ymp-* \ - | z8k-*) - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16c) - basic_machine=cr16c-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? - i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - mingw32) - basic_machine=i386-pc - os=-mingw32 - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - or32 | or32-*) - basic_machine=or32-unknown - os=-coff - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc) basic_machine=powerpc-unknown - ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle | ppc-le | powerpc-little) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - sh64) - basic_machine=sh64-unknown - ;; - sparc | sparcv8 | sparcv9 | sparcv9b) - basic_machine=sparc-sun - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -svr4*) - os=-sysv4 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # First accept the basic system types. - # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo $os | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2 ) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -aros*) - os=-aros - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 - ;; - m68*-cisco) - os=-aout - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - *-be) - os=-beos - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next ) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` - ;; -esac - -echo $basic_machine$os -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/configure b/configure deleted file mode 100644 index e6a39dcfe..000000000 --- a/configure +++ /dev/null @@ -1,7697 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59 for GRUB 0.97. -# -# Report bugs to . -# -# Copyright (C) 2003 Free Software Foundation, Inc. -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi -DUALCASE=1; export DUALCASE # for MKS sh - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - - -# PATH needs CR, and LINENO needs CR and PATH. -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done - - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | - sed ' - N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, - t loop - s,-$,, - s,^['$as_cr_digits']*\n,, - ' >$as_me.lineno && - chmod +x $as_me.lineno || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno - # Exit status is that of the last command. - exit -} - - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -esac - -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else - as_ln_s='ln -s' - fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.file - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_executable_p="test -f" - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - - -# Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -exec 6>&1 - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_config_libobj_dir=. -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} - -# Maximum number of lines to put in a shell here document. -# This variable seems obsolete. It should probably be removed, and -# only ac_max_sed_lines should be used. -: ${ac_max_here_lines=38} - -# Identity of this package. -PACKAGE_NAME='GRUB' -PACKAGE_TARNAME='grub' -PACKAGE_VERSION='0.97' -PACKAGE_STRING='GRUB 0.97' -PACKAGE_BUGREPORT='bug-grub@gnu.org' - -ac_unique_file="stage2/stage2.c" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#if HAVE_SYS_TYPES_H -# include -#endif -#if HAVE_SYS_STAT_H -# include -#endif -#if STDC_HEADERS -# include -# include -#else -# if HAVE_STDLIB_H -# include -# endif -#endif -#if HAVE_STRING_H -# if !STDC_HEADERS && HAVE_MEMORY_H -# include -# endif -# include -#endif -#if HAVE_STRINGS_H -# include -#endif -#if HAVE_INTTYPES_H -# include -#else -# if HAVE_STDINT_H -# include -# endif -#endif -#if HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar build build_cpu build_vendor build_os host host_cpu host_vendor host_os MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT PERL CC ac_ct_CC CFLAGS LDFLAGS CPPFLAGS EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CCAS RANLIB ac_ct_RANLIB STAGE1_CFLAGS STAGE2_CFLAGS GRUB_CFLAGS OBJCOPY ac_ct_OBJCOPY GRUB_LIBS CPP EGREP NETBOOT_SUPPORT_TRUE NETBOOT_SUPPORT_FALSE DISKLESS_SUPPORT_TRUE DISKLESS_SUPPORT_FALSE HERCULES_SUPPORT_TRUE HERCULES_SUPPORT_FALSE SERIAL_SUPPORT_TRUE SERIAL_SUPPORT_FALSE SERIAL_SPEED_SIMULATION_TRUE SERIAL_SPEED_SIMULATION_FALSE BUILD_EXAMPLE_KERNEL_TRUE BUILD_EXAMPLE_KERNEL_FALSE FSYS_CFLAGS NET_CFLAGS NET_EXTRAFLAGS NETBOOT_DRIVERS CCASFLAGS LIBOBJS LTLIBOBJS' -ac_subst_files='' - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -ac_prev= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" - ac_prev= - continue - fi - - ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_option in - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - eval "enable_$ac_feature=no" ;; - - -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; - esac - eval "enable_$ac_feature='$ac_optarg'" ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package| sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; - esac - eval "with_$ac_package='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/-/_/g'` - eval "with_$ac_package=no" ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } - ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` - eval "$ac_envvar='$ac_optarg'" - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } -fi - -# Be sure to have absolute paths. -for ac_var in exec_prefix prefix -do - eval ac_val=$`echo $ac_var` - case $ac_val in - [\\/$]* | ?:[\\/]* | NONE | '' ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; - esac -done - -# Be sure to have absolute paths. -for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ - localstatedir libdir includedir oldincludedir infodir mandir -do - eval ac_val=$`echo $ac_var` - case $ac_val in - [\\/$]* | ?:[\\/]* ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; - esac -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_confdir=`(dirname "$0") 2>/dev/null || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$0" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 - { (exit 1); exit 1; }; } - else - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } - fi -fi -(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || - { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 - { (exit 1); exit 1; }; } -srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` -ac_env_build_alias_set=${build_alias+set} -ac_env_build_alias_value=$build_alias -ac_cv_env_build_alias_set=${build_alias+set} -ac_cv_env_build_alias_value=$build_alias -ac_env_host_alias_set=${host_alias+set} -ac_env_host_alias_value=$host_alias -ac_cv_env_host_alias_set=${host_alias+set} -ac_cv_env_host_alias_value=$host_alias -ac_env_target_alias_set=${target_alias+set} -ac_env_target_alias_value=$target_alias -ac_cv_env_target_alias_set=${target_alias+set} -ac_cv_env_target_alias_value=$target_alias -ac_env_CC_set=${CC+set} -ac_env_CC_value=$CC -ac_cv_env_CC_set=${CC+set} -ac_cv_env_CC_value=$CC -ac_env_CFLAGS_set=${CFLAGS+set} -ac_env_CFLAGS_value=$CFLAGS -ac_cv_env_CFLAGS_set=${CFLAGS+set} -ac_cv_env_CFLAGS_value=$CFLAGS -ac_env_LDFLAGS_set=${LDFLAGS+set} -ac_env_LDFLAGS_value=$LDFLAGS -ac_cv_env_LDFLAGS_set=${LDFLAGS+set} -ac_cv_env_LDFLAGS_value=$LDFLAGS -ac_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_env_CPPFLAGS_value=$CPPFLAGS -ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_cv_env_CPPFLAGS_value=$CPPFLAGS -ac_env_CPP_set=${CPP+set} -ac_env_CPP_value=$CPP -ac_cv_env_CPP_set=${CPP+set} -ac_cv_env_CPP_value=$CPP - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures GRUB 0.97 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -_ACEOF - - cat <<_ACEOF -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data [PREFIX/share] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --infodir=DIR info documentation [PREFIX/info] - --mandir=DIR man documentation [PREFIX/man] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of GRUB 0.97:";; - esac - cat <<\_ACEOF - -Optional Features: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-maintainer-mode enable make rules and dependencies not useful - (and sometimes confusing) to the casual installer - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors - --disable-ext2fs disable ext2fs support in Stage 2 - --disable-fat disable FAT support in Stage 2 - --disable-ffs disable FFS support in Stage 2 - --disable-ufs2 disable UFS2 support in Stage 2 - --disable-minix disable Minix fs support in Stage 2 - --disable-reiserfs disable ReiserFS support in Stage 2 - --disable-vstafs disable VSTa FS support in Stage 2 - --disable-jfs disable IBM JFS support in Stage 2 - --disable-xfs disable SGI XFS support in Stage 2 - --disable-iso9660 disable ISO9660 support in Stage 2 - --disable-gunzip disable decompression in Stage 2 - --disable-md5-password disable MD5 password support in Stage 2 - --disable-packet-retransmission - turn off packet retransmission - --enable-pci-direct access PCI directly instead of using BIOS - --enable-3c509 enable 3Com509 driver - --enable-3c529 enable 3Com529 driver - --enable-3c595 enable 3Com595 driver - --enable-3c90x enable 3Com90x driver - --enable-cs89x0 enable CS89x0 driver - --enable-davicom enable Davicom driver - --enable-depca enable DEPCA and EtherWORKS driver - --enable-eepro enable Etherexpress Pro/10 driver - --enable-eepro100 enable Etherexpress Pro/100 driver - --enable-epic100 enable SMC 83c170 EPIC/100 driver - --enable-3c507 enable 3Com507 driver - --enable-exos205 enable EXOS205 driver - --enable-ni5210 enable Racal-Interlan NI5210 driver - --enable-lance enable Lance PCI PCNet/32 driver - --enable-ne2100 enable Novell NE2100 driver - --enable-ni6510 enable Racal-Interlan NI6510 driver - --enable-natsemi enable NatSemi DP8381x driver - --enable-ni5010 enable Racal-Interlan NI5010 driver - --enable-3c503 enable 3Com503 driver - --enable-ne enable NE1000/2000 ISA driver - --enable-ns8390 enable NE2000 PCI driver - --enable-wd enable WD8003/8013, SMC8216/8416 driver - --enable-otulip enable old Tulip driver - --enable-rtl8139 enable Realtek 8139 driver - --enable-sis900 enable SIS 900 and SIS 7016 driver - --enable-sk-g16 enable Schneider and Koch G16 driver - --enable-smc9000 enable SMC9000 driver - --enable-tiara enable Tiara driver - --enable-tulip enable Tulip driver - --enable-via-rhine enable Rhine-I/II driver - --enable-w89c840 enable Winbond W89c840, Compex RL100-ATX driver - --enable-3c503-shmem use 3c503 shared memory mode - --enable-3c503-aui use AUI by default on 3c503 cards - --enable-compex-rl2000-fix - specify this if you have a Compex RL2000 PCI - --enable-smc9000-scan=LIST - probe for SMC9000 I/O addresses using LIST - --enable-ne-scan=LIST probe for NE base address using LIST - --enable-wd-default-mem=MEM - set the default memory location for WD/SMC - --enable-cs-scan=LIST probe for CS89x0 base address using LIST - --enable-diskless enable diskless support - --disable-hercules disable hercules terminal support - --disable-serial disable serial terminal support - --enable-serial-speed-simulation - simulate the slowness of a serial device - --enable-preset-menu=FILE - preset a menu file FILE in Stage 2 - --enable-example-kernel - build the example Multiboot kernel - --disable-auto-linux-mem-opt - don't pass Linux mem= option automatically - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-binutils=DIR search the directory DIR to find binutils - --without-curses do not use curses - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have - headers in a nonstandard directory - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - ac_popdir=`pwd` - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d $ac_dir || continue - ac_builddir=. - -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi - -case $srcdir in - .) # No --srcdir option. We are building in place. - ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac - -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac - - cd $ac_dir - # Check for guested configure; otherwise get Cygnus style configure. - if test -f $ac_srcdir/configure.gnu; then - echo - $SHELL $ac_srcdir/configure.gnu --help=recursive - elif test -f $ac_srcdir/configure; then - echo - $SHELL $ac_srcdir/configure --help=recursive - elif test -f $ac_srcdir/configure.ac || - test -f $ac_srcdir/configure.in; then - echo - $ac_configure --help - else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi - cd $ac_popdir - done -fi - -test -n "$ac_init_help" && exit 0 -if $ac_init_version; then - cat <<\_ACEOF -GRUB configure 0.97 -generated by GNU Autoconf 2.59 - -Copyright (C) 2003 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit 0 -fi -exec 5>config.log -cat >&5 <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by GRUB $as_me 0.97, which was -generated by GNU Autoconf 2.59. Invocation command line was - - $ $0 $@ - -_ACEOF -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -hostinfo = `(hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_sep= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; - 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" - # Get rid of the leading space. - ac_sep=" " - ;; - esac - done -done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Be sure not to use single quotes in there, as some shells, -# such as our DU 5.0 friend, will then `close' the trap. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -{ - (set) 2>&1 | - case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in - *ac_space=\ *) - sed -n \ - "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" - ;; - *) - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" - ;; - esac; -} - echo - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" - done | sort - echo - - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------- ## -## Output files. ## -## ------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" - done | sort - echo - fi - - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - sed "/^$/d" confdefs.h | sort - echo - fi - test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core && - rm -rf conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status - ' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo >confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . $cache_file;; - *) . ./$cache_file;; - esac - fi -else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in `(set) 2>&1 | - sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val="\$ac_cv_env_${ac_var}_value" - eval ac_new_val="\$ac_env_${ac_var}_value" - case $ac_old_set,$ac_new_set in - set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ac_config_headers="$ac_config_headers config.h" - -am__api_version="1.9" -ac_aux_dir= -for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/install-sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f $ac_dir/install.sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f $ac_dir/shtool; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 -echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} - { (exit 1); exit 1; }; } -fi -ac_config_guess="$SHELL $ac_aux_dir/config.guess" -ac_config_sub="$SHELL $ac_aux_dir/config.sub" -ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - done - done - ;; -esac -done - - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the path is relative. - INSTALL=$ac_install_sh - fi -fi -echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6 - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -echo "$as_me:$LINENO: checking whether build environment is sane" >&5 -echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 -# Just in case -sleep 1 -echo timestamp > conftest.file -# Do `set' in a subshell so we don't clobber the current shell's -# arguments. Must try -L first in case configure is actually a -# symlink; some systems play weird games with the mod time of symlinks -# (eg FreeBSD returns the mod time of the symlink's containing -# directory). -if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` - if test "$*" = "X"; then - # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` - fi - rm -f conftest.file - if test "$*" != "X $srcdir/configure conftest.file" \ - && test "$*" != "X conftest.file $srcdir/configure"; then - - # If neither matched, then we have a broken ls. This can happen - # if, for instance, CONFIG_SHELL is bash and it inherits a - # broken ls alias from the environment. This has actually - # happened. Such a system could not be considered "sane". - { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&5 -echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&2;} - { (exit 1); exit 1; }; } - fi - - test "$2" = conftest.file - ) -then - # Ok. - : -else - { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! -Check your system clock" >&5 -echo "$as_me: error: newly created file is older than distributed files! -Check your system clock" >&2;} - { (exit 1); exit 1; }; } -fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 -test "$program_prefix" != NONE && - program_transform_name="s,^,$program_prefix,;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s,\$,$program_suffix,;$program_transform_name" -# Double any \ or $. echo might interpret backslashes. -# By default was `s,x,x', remove it if useless. -cat <<\_ACEOF >conftest.sed -s/[\\$]/&&/g;s/;s,x,x,$// -_ACEOF -program_transform_name=`echo $program_transform_name | sed -f conftest.sed` -rm conftest.sed - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" -# Use eval to expand $SHELL -if eval "$MISSING --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 -echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} -fi - -if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - # We used to keeping the `.' as first argument, in order to - # allow $(mkdir_p) to be used without argument. As in - # $(mkdir_p) $(somedir) - # where $(somedir) is conditionally defined. However this is wrong - # for two reasons: - # 1. if the package is installed by a user who cannot write `.' - # make install will fail, - # 2. the above comment should most certainly read - # $(mkdir_p) $(DESTDIR)$(somedir) - # so it does not work when $(somedir) is undefined and - # $(DESTDIR) is not. - # To support the latter case, we have to write - # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), - # so the `.' trick is pointless. - mkdir_p='mkdir -p --' -else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - for d in ./-p ./--version; - do - test -d $d && rmdir $d - done - # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. - if test -f "$ac_aux_dir/mkinstalldirs"; then - mkdir_p='$(mkinstalldirs)' - else - mkdir_p='$(install_sh) -d' - fi -fi - -for ac_prog in gawk mawk nawk awk -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$AWK"; then - ac_cv_prog_AWK="$AWK" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -AWK=$ac_cv_prog_AWK -if test -n "$AWK"; then - echo "$as_me:$LINENO: result: $AWK" >&5 -echo "${ECHO_T}$AWK" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$AWK" && break -done - -echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.make <<\_ACEOF -all: - @echo 'ac_maketemp="$(MAKE)"' -_ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` -if test -n "$ac_maketemp"; then - eval ac_cv_prog_make_${ac_make}_set=yes -else - eval ac_cv_prog_make_${ac_make}_set=no -fi -rm -f conftest.make -fi -if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - SET_MAKE= -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - SET_MAKE="MAKE=${MAKE-make}" -fi - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 -echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} - { (exit 1); exit 1; }; } -fi - -# test whether we have cygpath -if test -z "$CYGPATH_W"; then - if (cygpath --version) >/dev/null 2>/dev/null; then - CYGPATH_W='cygpath -w' - else - CYGPATH_W=echo - fi -fi - - -# Define the identity of the package. - PACKAGE='grub' - VERSION='0.97' - - -cat >>confdefs.h <<_ACEOF -#define PACKAGE "$PACKAGE" -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define VERSION "$VERSION" -_ACEOF - -# Some tools Automake needs. - -ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} - - -AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} - - -AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} - - -AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} - - -MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} - -install_sh=${install_sh-"$am_aux_dir/install-sh"} - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - STRIP=$ac_ct_STRIP -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" - -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -# Always define AMTAR for backward compatibility. - -AMTAR=${AMTAR-"${am_missing_run}tar"} - -am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' - - - - - - -# Make sure we can run config.sub. -$ac_config_sub sun4 >/dev/null 2>&1 || - { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 -echo "$as_me: error: cannot run $ac_config_sub" >&2;} - { (exit 1); exit 1; }; } - -echo "$as_me:$LINENO: checking build system type" >&5 -echo $ECHO_N "checking build system type... $ECHO_C" >&6 -if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_build_alias=$build_alias -test -z "$ac_cv_build_alias" && - ac_cv_build_alias=`$ac_config_guess` -test -z "$ac_cv_build_alias" && - { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 -echo "$as_me: error: cannot guess build type; you must specify one" >&2;} - { (exit 1); exit 1; }; } -ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || - { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} - { (exit 1); exit 1; }; } - -fi -echo "$as_me:$LINENO: result: $ac_cv_build" >&5 -echo "${ECHO_T}$ac_cv_build" >&6 -build=$ac_cv_build -build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - - -echo "$as_me:$LINENO: checking host system type" >&5 -echo $ECHO_N "checking host system type... $ECHO_C" >&6 -if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_host_alias=$host_alias -test -z "$ac_cv_host_alias" && - ac_cv_host_alias=$ac_cv_build_alias -ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || - { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} - { (exit 1); exit 1; }; } - -fi -echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6 -host=$ac_cv_host -host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - - - -case "$host_cpu" in -i[3456]86) host_cpu=i386 ;; -x86_64) host_cpu=x86_64 ;; -*) { { echo "$as_me:$LINENO: error: unsupported CPU type" >&5 -echo "$as_me: error: unsupported CPU type" >&2;} - { (exit 1); exit 1; }; } ;; -esac - - - - -# -# Options -# - -echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 -echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 - # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. -if test "${enable_maintainer_mode+set}" = set; then - enableval="$enable_maintainer_mode" - USE_MAINTAINER_MODE=$enableval -else - USE_MAINTAINER_MODE=no -fi; - echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 -echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 - - -if test $USE_MAINTAINER_MODE = yes; then - MAINTAINER_MODE_TRUE= - MAINTAINER_MODE_FALSE='#' -else - MAINTAINER_MODE_TRUE='#' - MAINTAINER_MODE_FALSE= -fi - - MAINT=$MAINTAINER_MODE_TRUE - - -if test "x$enable_maintainer_mode" = xyes; then - # Extract the first word of "perl", so it can be a program name with args. -set dummy perl; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_PERL+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $PERL in - [\\/]* | ?:[\\/]*) - ac_cv_path_PERL="$PERL" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - ;; -esac -fi -PERL=$ac_cv_path_PERL - -if test -n "$PERL"; then - echo "$as_me:$LINENO: result: $PERL" >&5 -echo "${ECHO_T}$PERL" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - if test -z "$PERL"; then - { { echo "$as_me:$LINENO: error: perl not found" >&5 -echo "$as_me: error: perl not found" >&2;} - { (exit 1); exit 1; }; } - fi -fi - -# This should be checked before AC_PROG_CC -if test "x$CFLAGS" = x; then - default_CFLAGS=yes -fi - -if test "x$host_cpu" = xx86_64; then - CFLAGS="-m32 $CFLAGS" -fi - -# -# Programs -# - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - CC=$ac_ct_CC -else - CC="$ac_cv_prog_CC" -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - CC=$ac_ct_CC -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - CC=$ac_ct_CC -else - CC="$ac_cv_prog_CC" -fi - -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$ac_ct_CC" && break -done - - CC=$ac_ct_CC -fi - -fi - - -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - -# Provide some information about the compiler. -echo "$as_me:$LINENO:" \ - "checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 - (eval $ac_link_default) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Find the output, starting from the most likely. This scheme is -# not robust to junk in `.', hence go to wildcards (a.*) only as a last -# resort. - -# Be careful to initialize this variable, since it used to be cached. -# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. -ac_cv_exeext= -# b.out is created by i960 compilers. -for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) - ;; - conftest.$ac_ext ) - # This is the source file. - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - # FIXME: I believe we export ac_cv_exeext for Libtool, - # but it would be cool to find out if it's true. Does anybody - # maintain Libtool? --akim. - export ac_cv_exeext - break;; - * ) - break;; - esac -done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: C compiler cannot create executables -See \`config.log' for more details." >&5 -echo "$as_me: error: C compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } -fi - -ac_exeext=$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6 - -# Check the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { echo "$as_me:$LINENO: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - fi - fi -fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - -rm -f a.out a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -# Check the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 -echo "$as_me:$LINENO: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6 - -echo "$as_me:$LINENO: checking for suffix of executables" >&5 -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - export ac_cv_exeext - break;; - * ) break;; - esac -done -else - { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6 - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -echo "$as_me:$LINENO: checking for suffix of object files" >&5 -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6 -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 -GCC=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -CFLAGS="-g" -echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_prog_cc_g=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 -echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_prog_cc_stdc=no -ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std1 is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std1. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -# Don't try gcc -ansi; that turns off useful extensions and -# breaks some systems' header files. -# AIX -qlanglvl=ansi -# Ultrix and OSF/1 -std1 -# HP-UX 10.20 and later -Ae -# HP-UX older versions -Aa -D_HPUX_SOURCE -# SVR4 -Xc -D__EXTENSIONS__ -for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cc_stdc=$ac_arg -break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext -done -rm -f conftest.$ac_ext conftest.$ac_objext -CC=$ac_save_CC - -fi - -case "x$ac_cv_prog_cc_stdc" in - x|xno) - echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6 ;; - *) - echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 - CC="$CC $ac_cv_prog_cc_stdc" ;; -esac - -# Some people use a C++ compiler to compile C. Since we use `exit', -# in C++ we need to declare it. In case someone uses the same compiler -# for both compiling C and C++ we need to have the C++ compiler decide -# the declaration of exit, since it's the most demanding environment. -cat >conftest.$ac_ext <<_ACEOF -#ifndef __cplusplus - choke me -#endif -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - for ac_declaration in \ - '' \ - 'extern "C" void std::exit (int) throw (); using std::exit;' \ - 'extern "C" void std::exit (int); using std::exit;' \ - 'extern "C" void exit (int) throw ();' \ - 'extern "C" void exit (int);' \ - 'void exit (int);' -do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -#include -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -continue -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -rm -f conftest* -if test -n "$ac_declaration"; then - echo '#ifdef __cplusplus' >>confdefs.h - echo $ac_declaration >>confdefs.h - echo '#endif' >>confdefs.h -fi - -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -DEPDIR="${am__leading_dot}deps" - - ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo done -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 -echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi -fi - - -echo "$as_me:$LINENO: result: $_am_result" >&5 -echo "${ECHO_T}$_am_result" >&6 -rm -f confinc confmf - -# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then - enableval="$enable_dependency_tracking" - -fi; -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi - - -if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - - - -depcc="$CC" am_compiler_list= - -echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - case $depmode in - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - none) break ;; - esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. - if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - - -if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - -# We need this for older versions of Autoconf. - -depcc="$CC" am_compiler_list= - -echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - case $depmode in - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - none) break ;; - esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. - if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - - -if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - - - -CCAS="$CC" - - - -# Check whether --with-binutils or --without-binutils was given. -if test "${with_binutils+set}" = set; then - withval="$with_binutils" - -fi; - -if test "x$with_binutils" != x; then - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $RANLIB in - [\\/]* | ?:[\\/]*) - ac_cv_path_RANLIB="$RANLIB" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_dummy=""$with_binutils:$PATH"" -for as_dir in $as_dummy -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_RANLIB="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - test -z "$ac_cv_path_RANLIB" && ac_cv_path_RANLIB=":" - ;; -esac -fi -RANLIB=$ac_cv_path_RANLIB - -if test -n "$RANLIB"; then - echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -else - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -echo "${ECHO_T}$ac_ct_RANLIB" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - RANLIB=$ac_ct_RANLIB -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -fi - -# optimization flags -if test "x$ac_cv_c_compiler_gnu" = xyes; then - if test "x$default_CFLAGS" = xyes; then - # Autoconf may set CFLAGS to -O2 and/or -g. So eliminate them. - CFLAGS="`echo $CFLAGS | sed -e 's/-g//g' -e 's/-O[0-9]//g'` -g" - # If the user specify the directory for binutils, add the option `-B'. - if test "x$with_binutils" != x; then - CFLAGS="-B$with_binutils/ $CFLAGS" - fi - STAGE1_CFLAGS="-O2" - GRUB_CFLAGS="-O2" - -echo "$as_me:$LINENO: checking whether optimization for size works" >&5 -echo $ECHO_N "checking whether optimization for size works... $ECHO_C" >&6 -if test "${size_flag+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - saved_CFLAGS=$CFLAGS - CFLAGS="-Os -g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - size_flag=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -size_flag=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$saved_CFLAGS - -fi -echo "$as_me:$LINENO: result: $size_flag" >&5 -echo "${ECHO_T}$size_flag" >&6 - if test "x$size_flag" = xyes; then - STAGE2_CFLAGS="-Os" - else - STAGE2_CFLAGS="-O2 -fno-strength-reduce -fno-unroll-loops" - fi - # OpenBSD has a GCC extension for protecting applications from - # stack smashing attacks, but GRUB doesn't want this feature. - echo "$as_me:$LINENO: checking whether gcc has -fno-stack-protector" >&5 -echo $ECHO_N "checking whether gcc has -fno-stack-protector... $ECHO_C" >&6 -if test "${no_stack_protector_flag+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - saved_CFLAGS=$CFLAGS - CFLAGS="-fno-stack-protector" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - no_stack_protector_flag=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -no_stack_protector_flag=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$saved_CFLAGS - -fi -echo "$as_me:$LINENO: result: $no_stack_protector_flag" >&5 -echo "${ECHO_T}$no_stack_protector_flag" >&6 - if test "x$no_stack_protector_flag" = xyes; then - STAGE2_CFLAGS="$STAGE2_CFLAGS -fno-stack-protector" - fi - fi -fi - - - - - -# Enforce coding standards. -CPPFLAGS="$CPPFLAGS -Wall -Wmissing-prototypes -Wunused -Wshadow" -CPPFLAGS="$CPPFLAGS -Wpointer-arith" - -echo "$as_me:$LINENO: checking whether -Wundef works" >&5 -echo $ECHO_N "checking whether -Wundef works... $ECHO_C" >&6 -if test "${undef_flag+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - saved_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="-Wundef" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - undef_flag=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -undef_flag=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - CPPFLAGS="$saved_CPPFLAGS" - -fi -echo "$as_me:$LINENO: result: $undef_flag" >&5 -echo "${ECHO_T}$undef_flag" >&6 - -# The options `-falign-*' are supported by gcc 3.0 or later. -# Probably it is sufficient to only check for -falign-loops. -echo "$as_me:$LINENO: checking whether -falign-loops works" >&5 -echo $ECHO_N "checking whether -falign-loops works... $ECHO_C" >&6 -if test "${falign_loop_flag+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - saved_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="-falign-loops=1" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - falign_loop_flag=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -falign_loop_flag=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - CPPFLAGS="$saved_CPPFLAGS" - -fi -echo "$as_me:$LINENO: result: $falign_loop_flag" >&5 -echo "${ECHO_T}$falign_loop_flag" >&6 - -# Force no alignment to save space. -if test "x$falign_loop_flag" = xyes; then - CPPFLAGS="$CPPFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1" -else - CPPFLAGS="$CPPFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1" -fi - -if test "x$undef_flag" = xyes; then - CPPFLAGS="$CPPFLAGS -Wundef" -fi - -# Check if build ID can be disabled in the linker -echo "$as_me:$LINENO: checking whether linker accepts \`--build-id=none'" >&5 -echo $ECHO_N "checking whether linker accepts \`--build-id=none'... $ECHO_C" >&6 -save_LDFLAGS="$LDFLAGS" -LDFLAGS="$LDFLAGS -Wl,--build-id=none" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - build_id_flag=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -build_id_flag=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -echo "$as_me:$LINENO: result: $build_id_flag" >&5 -echo "${ECHO_T}$build_id_flag" >&6 -LDFLAGS="$save_LDFLAGS" -if test "x$build_id_flag" = xyes; then - LDFLAGS="$LDFLAGS -Wl,--build-id=none" -fi - -if test "x$with_binutils" != x; then - # Extract the first word of "objcopy", so it can be a program name with args. -set dummy objcopy; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_OBJCOPY+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - case $OBJCOPY in - [\\/]* | ?:[\\/]*) - ac_cv_path_OBJCOPY="$OBJCOPY" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_dummy=""$with_binutils:$PATH"" -for as_dir in $as_dummy -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - ;; -esac -fi -OBJCOPY=$ac_cv_path_OBJCOPY - -if test -n "$OBJCOPY"; then - echo "$as_me:$LINENO: result: $OBJCOPY" >&5 -echo "${ECHO_T}$OBJCOPY" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -else - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args. -set dummy ${ac_tool_prefix}objcopy; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_OBJCOPY+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$OBJCOPY"; then - ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_OBJCOPY="${ac_tool_prefix}objcopy" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -OBJCOPY=$ac_cv_prog_OBJCOPY -if test -n "$OBJCOPY"; then - echo "$as_me:$LINENO: result: $OBJCOPY" >&5 -echo "${ECHO_T}$OBJCOPY" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_OBJCOPY"; then - ac_ct_OBJCOPY=$OBJCOPY - # Extract the first word of "objcopy", so it can be a program name with args. -set dummy objcopy; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_OBJCOPY+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_OBJCOPY"; then - ac_cv_prog_ac_ct_OBJCOPY="$ac_ct_OBJCOPY" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_OBJCOPY="objcopy" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_OBJCOPY=$ac_cv_prog_ac_ct_OBJCOPY -if test -n "$ac_ct_OBJCOPY"; then - echo "$as_me:$LINENO: result: $ac_ct_OBJCOPY" >&5 -echo "${ECHO_T}$ac_ct_OBJCOPY" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - OBJCOPY=$ac_ct_OBJCOPY -else - OBJCOPY="$ac_cv_prog_OBJCOPY" -fi - -fi - -# Defined in acinclude.m4. - -echo "$as_me:$LINENO: checking if C symbols get an underscore after compilation" >&5 -echo $ECHO_N "checking if C symbols get an underscore after compilation... $ECHO_C" >&6 -if test "${grub_cv_asm_uscore+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat > conftest.c <<\EOF -int -func (int *list) -{ - *list = 0; - return *list; -} -EOF - -if { ac_try='${CC-cc} ${CFLAGS} -S conftest.c' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && test -s conftest.s; then - true -else - { { echo "$as_me:$LINENO: error: ${CC-cc} failed to produce assembly code" >&5 -echo "$as_me: error: ${CC-cc} failed to produce assembly code" >&2;} - { (exit 1); exit 1; }; } -fi - -if grep _func conftest.s >/dev/null 2>&1; then - grub_cv_asm_uscore=yes -else - grub_cv_asm_uscore=no -fi - -rm -f conftest* -fi - - -if test "x$grub_cv_asm_uscore" = xyes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_ASM_USCORE $grub_cv_asm_uscore -_ACEOF - -fi - -echo "$as_me:$LINENO: result: $grub_cv_asm_uscore" >&5 -echo "${ECHO_T}$grub_cv_asm_uscore" >&6 - -echo "$as_me:$LINENO: checking whether ${OBJCOPY} works for absolute addresses" >&5 -echo $ECHO_N "checking whether ${OBJCOPY} works for absolute addresses... $ECHO_C" >&6 -if test "${grub_cv_prog_objcopy_absolute+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat > conftest.c <<\EOF -void -cmain (void) -{ - *((int *) 0x1000) = 2; -} -EOF - -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest.o; then : -else - { { echo "$as_me:$LINENO: error: ${CC-cc} cannot compile C source code" >&5 -echo "$as_me: error: ${CC-cc} cannot compile C source code" >&2;} - { (exit 1); exit 1; }; } -fi -grub_cv_prog_objcopy_absolute=yes -for link_addr in 2000 8000 7C00; do - if { ac_try='${CC-cc} ${CFLAGS} ${LDFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then : - else - { { echo "$as_me:$LINENO: error: ${CC-cc} cannot link at address $link_addr" >&5 -echo "$as_me: error: ${CC-cc} cannot link at address $link_addr" >&2;} - { (exit 1); exit 1; }; } - fi - if { ac_try='${OBJCOPY-objcopy} -O binary conftest.exec conftest' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then : - else - { { echo "$as_me:$LINENO: error: ${OBJCOPY-objcopy} cannot create binary files" >&5 -echo "$as_me: error: ${OBJCOPY-objcopy} cannot create binary files" >&2;} - { (exit 1); exit 1; }; } - fi - if test ! -f conftest.old || { ac_try='cmp -s conftest.old conftest' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - mv -f conftest conftest.old - else - grub_cv_prog_objcopy_absolute=no - break - fi -done -rm -f conftest* -fi - -echo "$as_me:$LINENO: result: $grub_cv_prog_objcopy_absolute" >&5 -echo "${ECHO_T}$grub_cv_prog_objcopy_absolute" >&6 -if test "x$grub_cv_prog_objcopy_absolute" != xyes; then - { { echo "$as_me:$LINENO: error: GRUB requires a working absolute objcopy; upgrade your binutils" >&5 -echo "$as_me: error: GRUB requires a working absolute objcopy; upgrade your binutils" >&2;} - { (exit 1); exit 1; }; } -fi - - -echo "$as_me:$LINENO: checking whether addr32 must be in the same line as the instruction" >&5 -echo $ECHO_N "checking whether addr32 must be in the same line as the instruction... $ECHO_C" >&6 -if test "${grub_cv_asm_prefix_requirement+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat > conftest.s <<\EOF - .code16 -l1: addr32 movb %al, l1 -EOF - -if { ac_try='${CC-cc} ${CFLAGS} -c conftest.s' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && test -s conftest.o; then - grub_cv_asm_prefix_requirement=yes -else - grub_cv_asm_prefix_requirement=no -fi - -rm -f conftest* -fi - - -if test "x$grub_cv_asm_prefix_requirement" = xyes; then - grub_tmp_addr32="addr32" - grub_tmp_data32="data32" -else - grub_tmp_addr32="addr32;" - grub_tmp_data32="data32;" -fi - - -cat >>confdefs.h <<_ACEOF -#define ADDR32 $grub_tmp_addr32 -_ACEOF - - -cat >>confdefs.h <<_ACEOF -#define DATA32 $grub_tmp_data32 -_ACEOF - - -echo "$as_me:$LINENO: result: $grub_cv_asm_prefix_requirement" >&5 -echo "${ECHO_T}$grub_cv_asm_prefix_requirement" >&6 - - - -echo "$as_me:$LINENO: checking for .code16 addr32 assembler support" >&5 -echo $ECHO_N "checking for .code16 addr32 assembler support... $ECHO_C" >&6 -if test "${grub_cv_asm_addr32+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat > conftest.s.in <<\EOF - .code16 -l1: @ADDR32@ movb %al, l1 -EOF - -if test "x$grub_cv_asm_prefix_requirement" = xyes; then - sed -e s/@ADDR32@/addr32/ < conftest.s.in > conftest.s -else - sed -e s/@ADDR32@/addr32\;/ < conftest.s.in > conftest.s -fi - -if { ac_try='${CC-cc} ${CFLAGS} -c conftest.s' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && test -s conftest.o; then - grub_cv_asm_addr32=yes -else - grub_cv_asm_addr32=no -fi - -rm -f conftest* -fi - - -echo "$as_me:$LINENO: result: $grub_cv_asm_addr32" >&5 -echo "${ECHO_T}$grub_cv_asm_addr32" >&6 -if test "x$grub_cv_asm_addr32" != xyes; then - { { echo "$as_me:$LINENO: error: GRUB requires GAS .code16 addr32 support; upgrade your binutils" >&5 -echo "$as_me: error: GRUB requires GAS .code16 addr32 support; upgrade your binutils" >&2;} - { (exit 1); exit 1; }; } -fi - - -echo "$as_me:$LINENO: checking whether an absolute indirect call/jump must not be prefixed with an asterisk" >&5 -echo $ECHO_N "checking whether an absolute indirect call/jump must not be prefixed with an asterisk... $ECHO_C" >&6 -if test "${grub_cv_asm_absolute_without_asterisk+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat > conftest.s <<\EOF - lcall *(offset) -offset: - .long 0 - .word 0 -EOF - -if { ac_try='${CC-cc} ${CFLAGS} -c conftest.s' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && test -s conftest.o; then - grub_cv_asm_absolute_without_asterisk=no -else - grub_cv_asm_absolute_without_asterisk=yes -fi - -rm -f conftest* -fi - - -if test "x$grub_cv_asm_absolute_without_asterisk" = xyes; then - -cat >>confdefs.h <<\_ACEOF -#define ABSOLUTE_WITHOUT_ASTERISK 1 -_ACEOF - -fi - -echo "$as_me:$LINENO: result: $grub_cv_asm_absolute_without_asterisk" >&5 -echo "${ECHO_T}$grub_cv_asm_absolute_without_asterisk" >&6 - - -echo "$as_me:$LINENO: checking if start is defined by the compiler" >&5 -echo $ECHO_N "checking if start is defined by the compiler... $ECHO_C" >&6 -if test "${grub_cv_check_start_symbol+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -asm ("incl start") - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - grub_cv_check_start_symbol=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -grub_cv_check_start_symbol=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - - -if test "x$grub_cv_check_start_symbol" = xyes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_START_SYMBOL 1 -_ACEOF - -fi - -echo "$as_me:$LINENO: result: $grub_cv_check_start_symbol" >&5 -echo "${ECHO_T}$grub_cv_check_start_symbol" >&6 - - -echo "$as_me:$LINENO: checking if _start is defined by the compiler" >&5 -echo $ECHO_N "checking if _start is defined by the compiler... $ECHO_C" >&6 -if test "${grub_cv_check_uscore_start_symbol+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -asm ("incl _start") - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - grub_cv_check_uscore_start_symbol=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -grub_cv_check_uscore_start_symbol=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - - -if test "x$grub_cv_check_uscore_start_symbol" = xyes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_USCORE_START_SYMBOL 1 -_ACEOF - -fi - -echo "$as_me:$LINENO: result: $grub_cv_check_uscore_start_symbol" >&5 -echo "${ECHO_T}$grub_cv_check_uscore_start_symbol" >&6 - -if test "x$grub_cv_check_start_symbol" != "xyes" \ - -a "x$grub_cv_check_uscore_start_symbol" != "xyes"; then - { { echo "$as_me:$LINENO: error: Neither start nor _start is defined" >&5 -echo "$as_me: error: Neither start nor _start is defined" >&2;} - { (exit 1); exit 1; }; } -fi - - -echo "$as_me:$LINENO: checking if __bss_start is defined by the compiler" >&5 -echo $ECHO_N "checking if __bss_start is defined by the compiler... $ECHO_C" >&6 -if test "${grub_cv_check_uscore_uscore_bss_start_symbol+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -asm ("incl __bss_start") - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - grub_cv_check_uscore_uscore_bss_start_symbol=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -grub_cv_check_uscore_uscore_bss_start_symbol=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - - -if test "x$grub_cv_check_uscore_uscore_bss_start_symbol" = xyes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_USCORE_USCORE_BSS_START_SYMBOL 1 -_ACEOF - -fi - -echo "$as_me:$LINENO: result: $grub_cv_check_uscore_uscore_bss_start_symbol" >&5 -echo "${ECHO_T}$grub_cv_check_uscore_uscore_bss_start_symbol" >&6 - - -echo "$as_me:$LINENO: checking if _edata is defined by the compiler" >&5 -echo $ECHO_N "checking if _edata is defined by the compiler... $ECHO_C" >&6 -if test "${grub_cv_check_uscore_edata_symbol+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -asm ("incl _edata") - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - grub_cv_check_uscore_edata_symbol=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -grub_cv_check_uscore_edata_symbol=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - - -if test "x$grub_cv_check_uscore_edata_symbol" = xyes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_USCORE_EDATA_SYMBOL 1 -_ACEOF - -fi - -echo "$as_me:$LINENO: result: $grub_cv_check_uscore_edata_symbol" >&5 -echo "${ECHO_T}$grub_cv_check_uscore_edata_symbol" >&6 - - -echo "$as_me:$LINENO: checking if edata is defined by the compiler" >&5 -echo $ECHO_N "checking if edata is defined by the compiler... $ECHO_C" >&6 -if test "${grub_cv_check_edata_symbol+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -asm ("incl edata") - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - grub_cv_check_edata_symbol=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -grub_cv_check_edata_symbol=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - - -if test "x$grub_cv_check_edata_symbol" = xyes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_EDATA_SYMBOL 1 -_ACEOF - -fi - -echo "$as_me:$LINENO: result: $grub_cv_check_edata_symbol" >&5 -echo "${ECHO_T}$grub_cv_check_edata_symbol" >&6 - -if test "x$grub_cv_check_uscore_uscore_bss_start_symbol" != "xyes" \ - -a "x$grub_cv_check_uscore_edata_symbol" != "xyes" \ - -a "x$grub_cv_check_edata_symbol" != "xyes"; then - { { echo "$as_me:$LINENO: error: None of __bss_start, _edata, edata defined" >&5 -echo "$as_me: error: None of __bss_start, _edata, edata defined" >&2;} - { (exit 1); exit 1; }; } -fi - - -echo "$as_me:$LINENO: checking if end is defined by the compiler" >&5 -echo $ECHO_N "checking if end is defined by the compiler... $ECHO_C" >&6 -if test "${grub_cv_check_end_symbol+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -asm ("incl end") - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - grub_cv_check_end_symbol=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -grub_cv_check_end_symbol=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - - -if test "x$grub_cv_check_end_symbol" = xyes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_END_SYMBOL 1 -_ACEOF - -fi - -echo "$as_me:$LINENO: result: $grub_cv_check_end_symbol" >&5 -echo "${ECHO_T}$grub_cv_check_end_symbol" >&6 - - -echo "$as_me:$LINENO: checking if _end is defined by the compiler" >&5 -echo $ECHO_N "checking if _end is defined by the compiler... $ECHO_C" >&6 -if test "${grub_cv_check_uscore_end_symbol+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -asm ("incl _end") - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - grub_cv_check_uscore_end_symbol=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -grub_cv_check_uscore_end_symbol=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - - -if test "x$grub_cv_check_uscore_end_symbol" = xyes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_USCORE_END_SYMBOL 1 -_ACEOF - -fi - -echo "$as_me:$LINENO: result: $grub_cv_check_uscore_end_symbol" >&5 -echo "${ECHO_T}$grub_cv_check_uscore_end_symbol" >&6 - -if test "x$grub_cv_check_end_symbol" != "xyes" \ - -a "x$grub_cv_check_uscore_end_symbol" != "xyes"; then - { { echo "$as_me:$LINENO: error: Neither end nor _end is defined" >&5 -echo "$as_me: error: Neither end nor _end is defined" >&2;} - { (exit 1); exit 1; }; } -fi - -# Check for curses libraries. - -# Check whether --with-curses or --without-curses was given. -if test "${with_curses+set}" = set; then - withval="$with_curses" - -fi; - -# Get the filename or the whole disk and open it. -# Known to work on NetBSD. -echo "$as_me:$LINENO: checking for opendisk in -lutil" >&5 -echo $ECHO_N "checking for opendisk in -lutil... $ECHO_C" >&6 -if test "${ac_cv_lib_util_opendisk+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lutil $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char opendisk (); -int -main () -{ -opendisk (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_util_opendisk=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_util_opendisk=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_util_opendisk" >&5 -echo "${ECHO_T}$ac_cv_lib_util_opendisk" >&6 -if test $ac_cv_lib_util_opendisk = yes; then - GRUB_LIBS="$GRUB_LIBS -lutil" - -cat >>confdefs.h <<\_ACEOF -#define HAVE_OPENDISK 1 -_ACEOF - -fi - - -# Unless the user specify --without-curses, check for curses. -if test "x$with_curses" != "xno"; then - echo "$as_me:$LINENO: checking for wgetch in -lncurses" >&5 -echo $ECHO_N "checking for wgetch in -lncurses... $ECHO_C" >&6 -if test "${ac_cv_lib_ncurses_wgetch+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lncurses $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char wgetch (); -int -main () -{ -wgetch (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_ncurses_wgetch=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_ncurses_wgetch=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_ncurses_wgetch" >&5 -echo "${ECHO_T}$ac_cv_lib_ncurses_wgetch" >&6 -if test $ac_cv_lib_ncurses_wgetch = yes; then - GRUB_LIBS="$GRUB_LIBS -lncurses" - -cat >>confdefs.h <<\_ACEOF -#define HAVE_LIBCURSES 1 -_ACEOF - -else - echo "$as_me:$LINENO: checking for wgetch in -lcurses" >&5 -echo $ECHO_N "checking for wgetch in -lcurses... $ECHO_C" >&6 -if test "${ac_cv_lib_curses_wgetch+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lcurses $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char wgetch (); -int -main () -{ -wgetch (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_curses_wgetch=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_curses_wgetch=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_curses_wgetch" >&5 -echo "${ECHO_T}$ac_cv_lib_curses_wgetch" >&6 -if test $ac_cv_lib_curses_wgetch = yes; then - GRUB_LIBS="$GRUB_LIBS -lcurses" - -cat >>confdefs.h <<\_ACEOF -#define HAVE_LIBCURSES 1 -_ACEOF - -fi - -fi - -fi - - - -# Check for headers. -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether non-existent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$CPP" >&6 -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether non-existent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -echo "$as_me:$LINENO: checking for egrep" >&5 -echo $ECHO_N "checking for egrep... $ECHO_C" >&6 -if test "${ac_cv_prog_egrep+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if echo a | (grep -E '(a|b)') >/dev/null 2>&1 - then ac_cv_prog_egrep='grep -E' - else ac_cv_prog_egrep='egrep' - fi -fi -echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 -echo "${ECHO_T}$ac_cv_prog_egrep" >&6 - EGREP=$ac_cv_prog_egrep - - -echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_header_stdc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_stdc=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then - : -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - exit(2); - exit (0); -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_header_stdc=no -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6 -if test $ac_cv_header_stdc = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. - - - - - - - - - -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - - - - - -for ac_header in string.h strings.h ncurses/curses.h ncurses.h curses.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------- ## -## Report this to bug-grub@gnu.org ## -## ------------------------------- ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -# Check for user options. - -# filesystems support. -# Check whether --enable-ext2fs or --disable-ext2fs was given. -if test "${enable_ext2fs+set}" = set; then - enableval="$enable_ext2fs" - -fi; - -if test x"$enable_ext2fs" != xno; then - FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_EXT2FS=1" -fi - -# Check whether --enable-fat or --disable-fat was given. -if test "${enable_fat+set}" = set; then - enableval="$enable_fat" - -fi; - -if test x"$enable_fat" != xno; then - FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_FAT=1" -fi - -# Check whether --enable-ffs or --disable-ffs was given. -if test "${enable_ffs+set}" = set; then - enableval="$enable_ffs" - -fi; - -if test x"$enable_ffs" != xno; then - FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_FFS=1" -fi - -# Check whether --enable-ufs2 or --disable-ufs2 was given. -if test "${enable_ufs2+set}" = set; then - enableval="$enable_ufs2" - -fi; - -if test x"$enable_ufs2" != xno; then - FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_UFS2=1" -fi - -# Check whether --enable-minix or --disable-minix was given. -if test "${enable_minix+set}" = set; then - enableval="$enable_minix" - -fi; - -if test x"$enable_minix" != xno; then - FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_MINIX=1" -fi - -# Check whether --enable-reiserfs or --disable-reiserfs was given. -if test "${enable_reiserfs+set}" = set; then - enableval="$enable_reiserfs" - -fi; - -if test x"$enable_reiserfs" != xno; then - FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_REISERFS=1" -fi - -# Check whether --enable-vstafs or --disable-vstafs was given. -if test "${enable_vstafs+set}" = set; then - enableval="$enable_vstafs" - -fi; - -if test x"$enable_vstafs" != xno; then - FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_VSTAFS=1" -fi - -# Check whether --enable-jfs or --disable-jfs was given. -if test "${enable_jfs+set}" = set; then - enableval="$enable_jfs" - -fi; - -if test x"$enable_jfs" != xno; then - FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_JFS=1" -fi - -# Check whether --enable-xfs or --disable-xfs was given. -if test "${enable_xfs+set}" = set; then - enableval="$enable_xfs" - -fi; - -if test x"$enable_xfs" != xno; then - FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_XFS=1" -fi - -# Check whether --enable-iso9660 or --disable-iso9660 was given. -if test "${enable_iso9660+set}" = set; then - enableval="$enable_iso9660" - -fi; - -if test x"$enable_iso9660" != xno; then - FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_ISO9660=1" -fi - - -# Check whether --enable-gunzip or --disable-gunzip was given. -if test "${enable_gunzip+set}" = set; then - enableval="$enable_gunzip" - -fi; - -if test x"$enable_gunzip" = xno; then - FSYS_CFLAGS="$FSYS_CFLAGS -DNO_DECOMPRESSION=1" -fi - -# Check whether --enable-md5-password or --disable-md5-password was given. -if test "${enable_md5_password+set}" = set; then - enableval="$enable_md5_password" - -fi; -if test "x$enable_md5_password" != xno; then - FSYS_CFLAGS="$FSYS_CFLAGS -DUSE_MD5_PASSWORDS=1" -fi - -# Check whether --enable-packet-retransmission or --disable-packet-retransmission was given. -if test "${enable_packet_retransmission+set}" = set; then - enableval="$enable_packet_retransmission" - -fi; -if test "x$enable_packet_retransmission" != xno; then - NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCONGESTED=1" -fi - -# Check whether --enable-pci-direct or --disable-pci-direct was given. -if test "${enable_pci_direct+set}" = set; then - enableval="$enable_pci_direct" - -fi; -if test "x$enable_pci_direct" = xyes; then - NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCONFIG_PCI_DIRECT=1" -fi - -# Check whether --enable-3c509 or --disable-3c509 was given. -if test "${enable_3c509+set}" = set; then - enableval="$enable_3c509" - -fi; -if test "x$enable_3c509" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C509" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c509.o" -fi - -# Check whether --enable-3c529 or --disable-3c529 was given. -if test "${enable_3c529+set}" = set; then - enableval="$enable_3c529" - -fi; -if test "x$enable_3c529" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C529=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c529.o" -fi - -# Check whether --enable-3c595 or --disable-3c595 was given. -if test "${enable_3c595+set}" = set; then - enableval="$enable_3c595" - -fi; -if test "x$enable_3c595" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C595=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c595.o" -fi - -# Check whether --enable-3c90x or --disable-3c90x was given. -if test "${enable_3c90x+set}" = set; then - enableval="$enable_3c90x" - -fi; -if test "x$enable_3c90x" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C90X=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c90x.o" -fi - -# Check whether --enable-cs89x0 or --disable-cs89x0 was given. -if test "${enable_cs89x0+set}" = set; then - enableval="$enable_cs89x0" - -fi; -if test "x$enable_cs89x0" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_CS89X0=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS cs89x0.o" -fi - -# Check whether --enable-davicom or --disable-davicom was given. -if test "${enable_davicom+set}" = set; then - enableval="$enable_davicom" - -fi; -if test "x$enable_davicom" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_DAVICOM=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS davicom.o" -fi - -# Check whether --enable-depca or --disable-depca was given. -if test "${enable_depca+set}" = set; then - enableval="$enable_depca" - -fi; -if test "x$enable_depca" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_DEPCA=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS depca.o" -fi - -# Check whether --enable-eepro or --disable-eepro was given. -if test "${enable_eepro+set}" = set; then - enableval="$enable_eepro" - -fi; -if test "x$enable_eepro" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EEPRO=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS eepro.o" -fi - -# Check whether --enable-eepro100 or --disable-eepro100 was given. -if test "${enable_eepro100+set}" = set; then - enableval="$enable_eepro100" - -fi; -if test "x$enable_eepro100" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EEPRO100=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS eepro100.o" -fi - -# Check whether --enable-epic100 or --disable-epic100 was given. -if test "${enable_epic100+set}" = set; then - enableval="$enable_epic100" - -fi; -if test "x$enable_epic100" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EPIC100=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS epic100.o" -fi - -# Check whether --enable-3c507 or --disable-3c507 was given. -if test "${enable_3c507+set}" = set; then - enableval="$enable_3c507" - -fi; -if test "x$enable_3c507" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C507=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c507.o" -fi - -# Check whether --enable-exos205 or --disable-exos205 was given. -if test "${enable_exos205+set}" = set; then - enableval="$enable_exos205" - -fi; -if test "x$enable_exos205" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EXOS205=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS exos205.o" -fi - -# Check whether --enable-ni5210 or --disable-ni5210 was given. -if test "${enable_ni5210+set}" = set; then - enableval="$enable_ni5210" - -fi; -if test "x$enable_ni5210" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NI5210=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS ni5210.o" -fi - -# Check whether --enable-lance or --disable-lance was given. -if test "${enable_lance+set}" = set; then - enableval="$enable_lance" - -fi; -if test "x$enable_lance" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_LANCE=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS lance.o" -fi - -# Check whether --enable-ne2100 or --disable-ne2100 was given. -if test "${enable_ne2100+set}" = set; then - enableval="$enable_ne2100" - -fi; -if test "x$enable_ne2100" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NE2100=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS ne2100.o" -fi - -# Check whether --enable-ni6510 or --disable-ni6510 was given. -if test "${enable_ni6510+set}" = set; then - enableval="$enable_ni6510" - -fi; -if test "x$enable_ni6510" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NI6510=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS ni6510.o" -fi - -# Check whether --enable-natsemi or --disable-natsemi was given. -if test "${enable_natsemi+set}" = set; then - enableval="$enable_natsemi" - -fi; -if test "x$enable_natsemi" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NATSEMI=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS natsemi.o" -fi - -# Check whether --enable-ni5010 or --disable-ni5010 was given. -if test "${enable_ni5010+set}" = set; then - enableval="$enable_ni5010" - -fi; -if test "x$enable_ni5010" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NI5010=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS ni5010.o" -fi - -# Check whether --enable-3c503 or --disable-3c503 was given. -if test "${enable_3c503+set}" = set; then - enableval="$enable_3c503" - -fi; -if test "x$enable_3c503" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C503=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c503.o" -fi - -# Check whether --enable-ne or --disable-ne was given. -if test "${enable_ne+set}" = set; then - enableval="$enable_ne" - -fi; -if test "x$enable_ne" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NE=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS ne.o" -fi - -# Check whether --enable-ns8390 or --disable-ns8390 was given. -if test "${enable_ns8390+set}" = set; then - enableval="$enable_ns8390" - -fi; -if test "x$enable_ns8390" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NS8390=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS ns8390.o" -fi - -# Check whether --enable-wd or --disable-wd was given. -if test "${enable_wd+set}" = set; then - enableval="$enable_wd" - -fi; -if test "x$enable_wd" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_WD=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS wd.o" -fi - -# Check whether --enable-otulip or --disable-otulip was given. -if test "${enable_otulip+set}" = set; then - enableval="$enable_otulip" - -fi; -if test "x$enable_otulip" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_OTULIP=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS otulip.o" -fi - -# Check whether --enable-rtl8139 or --disable-rtl8139 was given. -if test "${enable_rtl8139+set}" = set; then - enableval="$enable_rtl8139" - -fi; -if test "x$enable_rtl8139" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_RTL8139=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS rtl8139.o" -fi - -# Check whether --enable-sis900 or --disable-sis900 was given. -if test "${enable_sis900+set}" = set; then - enableval="$enable_sis900" - -fi; -if test "x$enable_sis900" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_SIS900=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS sis900.o" -fi - -# Check whether --enable-sk-g16 or --disable-sk-g16 was given. -if test "${enable_sk_g16+set}" = set; then - enableval="$enable_sk_g16" - -fi; -if test "x$enable_sk_g16" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_SK_G16=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS sk_g16.o" -fi - -# Check whether --enable-smc9000 or --disable-smc9000 was given. -if test "${enable_smc9000+set}" = set; then - enableval="$enable_smc9000" - -fi; -if test "x$enable_smc9000" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_SMC9000=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS smc9000.o" -fi - -# Check whether --enable-tiara or --disable-tiara was given. -if test "${enable_tiara+set}" = set; then - enableval="$enable_tiara" - -fi; -if test "x$enable_tiara" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_TIARA=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS tiara.o" -fi - -# Check whether --enable-tulip or --disable-tulip was given. -if test "${enable_tulip+set}" = set; then - enableval="$enable_tulip" - -fi; -if test "x$enable_tulip" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_TULIP=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS tulip.o" -fi - -# Check whether --enable-via-rhine or --disable-via-rhine was given. -if test "${enable_via_rhine+set}" = set; then - enableval="$enable_via_rhine" - -fi; -if test "x$enable_via_rhine" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_VIA_RHINE=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS via_rhine.o" -fi - -# Check whether --enable-w89c840 or --disable-w89c840 was given. -if test "${enable_w89c840+set}" = set; then - enableval="$enable_w89c840" - -fi; -if test "x$enable_w89c840" = xyes; then - NET_CFLAGS="$NET_CFLAGS -DINCLUDE_W89C840=1" - NETBOOT_DRIVERS="$NETBOOT_DRIVERS w89c840.o" -fi - - - -if test "x$NET_CFLAGS" != x; then - NETBOOT_SUPPORT_TRUE= - NETBOOT_SUPPORT_FALSE='#' -else - NETBOOT_SUPPORT_TRUE='#' - NETBOOT_SUPPORT_FALSE= -fi - -if test "x$NET_CFLAGS" != x; then - FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_TFTP=1" -fi - -# Check whether --enable-3c503-shmem or --disable-3c503-shmem was given. -if test "${enable_3c503_shmem+set}" = set; then - enableval="$enable_3c503_shmem" - -fi; -if test "x$enable_3c503_shmem" = xyes; then - NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DT503_SHMEM=1" -fi - -# Check whether --enable-3c503-aui or --disable-3c503-aui was given. -if test "${enable_3c503_aui+set}" = set; then - enableval="$enable_3c503_aui" - -fi; -if test "x$enable_3c503_aui" = xyes; then - NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DT503_AUI=1" -fi - -# Check whether --enable-compex-rl2000-fix or --disable-compex-rl2000-fix was given. -if test "${enable_compex_rl2000_fix+set}" = set; then - enableval="$enable_compex_rl2000_fix" - -fi; -if test "x$enable_compex_rl2000_fix" = xyes; then - NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCOMPEX_RL2000_FIX=1" -fi - -# Check whether --enable-smc9000-scan or --disable-smc9000-scan was given. -if test "${enable_smc9000_scan+set}" = set; then - enableval="$enable_smc9000_scan" - NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DSMC9000_SCAN=$enable_smc9000_scan" -fi; - -# Check whether --enable-ne-scan or --disable-ne-scan was given. -if test "${enable_ne_scan+set}" = set; then - enableval="$enable_ne_scan" - NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DNE_SCAN=$enable_ne_scan" -else - NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DNE_SCAN=0x280,0x300,0x320,0x340" -fi; - -# Check whether --enable-wd-default-mem or --disable-wd-default-mem was given. -if test "${enable_wd_default_mem+set}" = set; then - enableval="$enable_wd_default_mem" - NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DWD_DEFAULT_MEM=$enable_wd_default_mem" -else - NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DWD_DEFAULT_MEM=0xCC000" -fi; - -# Check whether --enable-cs-scan or --disable-cs-scan was given. -if test "${enable_cs_scan+set}" = set; then - enableval="$enable_cs_scan" - NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCS_SCAN=$enable_cs_scan" -fi; - -# Check whether --enable-diskless or --disable-diskless was given. -if test "${enable_diskless+set}" = set; then - enableval="$enable_diskless" - -fi; - - -if test "x$enable_diskless" = xyes; then - DISKLESS_SUPPORT_TRUE= - DISKLESS_SUPPORT_FALSE='#' -else - DISKLESS_SUPPORT_TRUE='#' - DISKLESS_SUPPORT_FALSE= -fi - - -# Check whether --enable-hercules or --disable-hercules was given. -if test "${enable_hercules+set}" = set; then - enableval="$enable_hercules" - -fi; - - -if test "x$enable_hercules" != xno; then - HERCULES_SUPPORT_TRUE= - HERCULES_SUPPORT_FALSE='#' -else - HERCULES_SUPPORT_TRUE='#' - HERCULES_SUPPORT_FALSE= -fi - - -# Check whether --enable-serial or --disable-serial was given. -if test "${enable_serial+set}" = set; then - enableval="$enable_serial" - -fi; - - -if test "x$enable_serial" != xno; then - SERIAL_SUPPORT_TRUE= - SERIAL_SUPPORT_FALSE='#' -else - SERIAL_SUPPORT_TRUE='#' - SERIAL_SUPPORT_FALSE= -fi - - -# Check whether --enable-serial-speed-simulation or --disable-serial-speed-simulation was given. -if test "${enable_serial_speed_simulation+set}" = set; then - enableval="$enable_serial_speed_simulation" - -fi; - - -if test "x$enable_serial_speed_simulation" = xyes; then - SERIAL_SPEED_SIMULATION_TRUE= - SERIAL_SPEED_SIMULATION_FALSE='#' -else - SERIAL_SPEED_SIMULATION_TRUE='#' - SERIAL_SPEED_SIMULATION_FALSE= -fi - - -# Sanity check. -if test "x$enable_diskless" = xyes; then - if test "x$NET_CFLAGS" = x; then - { { echo "$as_me:$LINENO: error: You must enable at least one network driver" >&5 -echo "$as_me: error: You must enable at least one network driver" >&2;} - { (exit 1); exit 1; }; } - fi -fi - -# Check whether --enable-preset-menu or --disable-preset-menu was given. -if test "${enable_preset_menu+set}" = set; then - enableval="$enable_preset_menu" - -fi; -if test "x$enable_preset_menu" = x; then - : -else - if test -r $enable_preset_menu; then - -# Because early versions of GNU sed 3.x are too buggy, use a C program -# instead of shell commands. *sigh* -cat >conftest.c <<\EOF -#include - -int -main (void) -{ - int c; - - while ((c = getchar ()) != EOF) - { - switch (c) - { - case '\n': - fputs ("\\n", stdout); - break; - case '\r': - fputs ("\\r", stdout); - break; - case '\\': - fputs ("\\\\", stdout); - break; - case '"': - fputs ("\\\"", stdout); - break; - default: - putchar (c); - } - } - - return 0; -} -EOF - -if { ac_try='${CC-cc} ${CFLAGS} conftest.c -o conftest' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && test -s conftest; then - grub_tmp_value=`./conftest < "$enable_preset_menu"` -else - { { echo "$as_me:$LINENO: error: ${CC-cc} failed to produce an executable file" >&5 -echo "$as_me: error: ${CC-cc} failed to produce an executable file" >&2;} - { (exit 1); exit 1; }; } -fi - - -cat >>confdefs.h <<_ACEOF -#define PRESET_MENU_STRING "$grub_tmp_value" -_ACEOF - -rm -f conftest* - - else - { { echo "$as_me:$LINENO: error: Cannot read the preset menu file $enable_preset_menu" >&5 -echo "$as_me: error: Cannot read the preset menu file $enable_preset_menu" >&2;} - { (exit 1); exit 1; }; } - fi -fi - -# Check whether --enable-example-kernel or --disable-example-kernel was given. -if test "${enable_example_kernel+set}" = set; then - enableval="$enable_example_kernel" - -fi; - - -if test "x$enable_example_kernel" = xyes; then - BUILD_EXAMPLE_KERNEL_TRUE= - BUILD_EXAMPLE_KERNEL_FALSE='#' -else - BUILD_EXAMPLE_KERNEL_TRUE='#' - BUILD_EXAMPLE_KERNEL_FALSE= -fi - - -# Check whether --enable-auto-linux-mem-opt or --disable-auto-linux-mem-opt was given. -if test "${enable_auto_linux_mem_opt+set}" = set; then - enableval="$enable_auto_linux_mem_opt" - -fi; -if test "x$enable_auto_linux_mem_opt" = xno; then - : -else - -cat >>confdefs.h <<\_ACEOF -#define AUTO_LINUX_MEM_OPT 1 -_ACEOF - -fi - - - - - - -CCASFLAGS='$(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)' - - - - ac_config_files="$ac_config_files Makefile stage1/Makefile stage2/Makefile docs/Makefile lib/Makefile util/Makefile grub/Makefile netboot/Makefile util/grub-image util/grub-install util/grub-md5-crypt util/grub-terminfo util/grub-set-default" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -{ - (set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" - ;; - esac; -} | - sed ' - t clear - : clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - : end' >>confcache -if diff $cache_file confcache >/dev/null 2>&1; then :; else - if test -w $cache_file; then - test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" - cat confcache >$cache_file - else - echo "not updating unwritable cache $cache_file" - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/; -s/:*\${srcdir}:*/:/; -s/:*@srcdir@:*/:/; -s/^\([^=]*=[ ]*\):*/\1/; -s/:*$//; -s/^[^=]*=[ ]*$//; -}' -fi - -DEFS=-DHAVE_CONFIG_H - -ac_libobjs= -ac_ltlibobjs= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_i=`echo "$ac_i" | - sed 's/\$U\././;s/\.o$//;s/\.obj$//'` - # 2. Add them. - ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - -if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${NETBOOT_SUPPORT_TRUE}" && test -z "${NETBOOT_SUPPORT_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"NETBOOT_SUPPORT\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"NETBOOT_SUPPORT\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${DISKLESS_SUPPORT_TRUE}" && test -z "${DISKLESS_SUPPORT_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"DISKLESS_SUPPORT\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"DISKLESS_SUPPORT\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${HERCULES_SUPPORT_TRUE}" && test -z "${HERCULES_SUPPORT_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"HERCULES_SUPPORT\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"HERCULES_SUPPORT\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${SERIAL_SUPPORT_TRUE}" && test -z "${SERIAL_SUPPORT_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"SERIAL_SUPPORT\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"SERIAL_SUPPORT\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${SERIAL_SPEED_SIMULATION_TRUE}" && test -z "${SERIAL_SPEED_SIMULATION_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"SERIAL_SPEED_SIMULATION\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"SERIAL_SPEED_SIMULATION\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${BUILD_EXAMPLE_KERNEL_TRUE}" && test -z "${BUILD_EXAMPLE_KERNEL_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"BUILD_EXAMPLE_KERNEL\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"BUILD_EXAMPLE_KERNEL\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi - -: ${CONFIG_STATUS=./config.status} -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi -DUALCASE=1; export DUALCASE # for MKS sh - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - - -# PATH needs CR, and LINENO needs CR and PATH. -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done - - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 -echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | - sed ' - N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, - t loop - s,-$,, - s,^['$as_cr_digits']*\n,, - ' >$as_me.lineno && - chmod +x $as_me.lineno || - { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 -echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno - # Exit status is that of the last command. - exit -} - - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -esac - -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else - as_ln_s='ln -s' - fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.file - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_executable_p="test -f" - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - -exec 6>&1 - -# Open the log real soon, to keep \$[0] and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. Logging --version etc. is OK. -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX -} >&5 -cat >&5 <<_CSEOF - -This file was extended by GRUB $as_me 0.97, which was -generated by GNU Autoconf 2.59. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -_CSEOF -echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 -echo >&5 -_ACEOF - -# Files that config.status was made for. -if test -n "$ac_config_files"; then - echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_headers"; then - echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_links"; then - echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_commands"; then - echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS -fi - -cat >>$CONFIG_STATUS <<\_ACEOF - -ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. - -Usage: $0 [OPTIONS] [FILE]... - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to ." -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF -ac_cs_version="\\ -GRUB config.status 0.97 -configured by $0, generated by GNU Autoconf 2.59, - with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" - -Copyright (C) 2003 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." -srcdir=$srcdir -INSTALL="$INSTALL" -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "x$1" : 'x\([^=]*\)='` - ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` - ac_shift=: - ;; - -*) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - *) # This is not an option, so the user has probably given explicit - # arguments. - ac_option=$1 - ac_need_defaults=false;; - esac - - case $ac_option in - # Handling of the options. -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --vers* | -V ) - echo "$ac_cs_version"; exit 0 ;; - --he | --h) - # Conflict between --help and --header - { { echo "$as_me:$LINENO: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; };; - --help | --hel | -h ) - echo "$ac_cs_usage"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" - ac_need_defaults=false;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; } ;; - - *) ac_config_targets="$ac_config_targets $1" ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF -if \$ac_cs_recheck; then - echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion -fi - -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF -# -# INIT-COMMANDS section. -# - -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - -_ACEOF - - - -cat >>$CONFIG_STATUS <<\_ACEOF -for ac_config_target in $ac_config_targets -do - case "$ac_config_target" in - # Handling of arguments. - "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "stage1/Makefile" ) CONFIG_FILES="$CONFIG_FILES stage1/Makefile" ;; - "stage2/Makefile" ) CONFIG_FILES="$CONFIG_FILES stage2/Makefile" ;; - "docs/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; - "lib/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; - "util/Makefile" ) CONFIG_FILES="$CONFIG_FILES util/Makefile" ;; - "grub/Makefile" ) CONFIG_FILES="$CONFIG_FILES grub/Makefile" ;; - "netboot/Makefile" ) CONFIG_FILES="$CONFIG_FILES netboot/Makefile" ;; - "util/grub-image" ) CONFIG_FILES="$CONFIG_FILES util/grub-image" ;; - "util/grub-install" ) CONFIG_FILES="$CONFIG_FILES util/grub-install" ;; - "util/grub-md5-crypt" ) CONFIG_FILES="$CONFIG_FILES util/grub-md5-crypt" ;; - "util/grub-terminfo" ) CONFIG_FILES="$CONFIG_FILES util/grub-terminfo" ;; - "util/grub-set-default" ) CONFIG_FILES="$CONFIG_FILES util/grub-set-default" ;; - "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; - esac -done - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason to put it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Create a temporary directory, and hook for its removal unless debugging. -$debug || -{ - trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 -} - -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./confstat$$-$RANDOM - (umask 077 && mkdir $tmp) -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -_ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF - -# -# CONFIG_FILES section. -# - -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "\$CONFIG_FILES"; then - # Protect against being on the right side of a sed subst in config.status. - sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; - s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF -s,@SHELL@,$SHELL,;t t -s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t -s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t -s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t -s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t -s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t -s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t -s,@exec_prefix@,$exec_prefix,;t t -s,@prefix@,$prefix,;t t -s,@program_transform_name@,$program_transform_name,;t t -s,@bindir@,$bindir,;t t -s,@sbindir@,$sbindir,;t t -s,@libexecdir@,$libexecdir,;t t -s,@datadir@,$datadir,;t t -s,@sysconfdir@,$sysconfdir,;t t -s,@sharedstatedir@,$sharedstatedir,;t t -s,@localstatedir@,$localstatedir,;t t -s,@libdir@,$libdir,;t t -s,@includedir@,$includedir,;t t -s,@oldincludedir@,$oldincludedir,;t t -s,@infodir@,$infodir,;t t -s,@mandir@,$mandir,;t t -s,@build_alias@,$build_alias,;t t -s,@host_alias@,$host_alias,;t t -s,@target_alias@,$target_alias,;t t -s,@DEFS@,$DEFS,;t t -s,@ECHO_C@,$ECHO_C,;t t -s,@ECHO_N@,$ECHO_N,;t t -s,@ECHO_T@,$ECHO_T,;t t -s,@LIBS@,$LIBS,;t t -s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t -s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t -s,@INSTALL_DATA@,$INSTALL_DATA,;t t -s,@CYGPATH_W@,$CYGPATH_W,;t t -s,@PACKAGE@,$PACKAGE,;t t -s,@VERSION@,$VERSION,;t t -s,@ACLOCAL@,$ACLOCAL,;t t -s,@AUTOCONF@,$AUTOCONF,;t t -s,@AUTOMAKE@,$AUTOMAKE,;t t -s,@AUTOHEADER@,$AUTOHEADER,;t t -s,@MAKEINFO@,$MAKEINFO,;t t -s,@install_sh@,$install_sh,;t t -s,@STRIP@,$STRIP,;t t -s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t -s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t -s,@mkdir_p@,$mkdir_p,;t t -s,@AWK@,$AWK,;t t -s,@SET_MAKE@,$SET_MAKE,;t t -s,@am__leading_dot@,$am__leading_dot,;t t -s,@AMTAR@,$AMTAR,;t t -s,@am__tar@,$am__tar,;t t -s,@am__untar@,$am__untar,;t t -s,@build@,$build,;t t -s,@build_cpu@,$build_cpu,;t t -s,@build_vendor@,$build_vendor,;t t -s,@build_os@,$build_os,;t t -s,@host@,$host,;t t -s,@host_cpu@,$host_cpu,;t t -s,@host_vendor@,$host_vendor,;t t -s,@host_os@,$host_os,;t t -s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t -s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t -s,@MAINT@,$MAINT,;t t -s,@PERL@,$PERL,;t t -s,@CC@,$CC,;t t -s,@ac_ct_CC@,$ac_ct_CC,;t t -s,@CFLAGS@,$CFLAGS,;t t -s,@LDFLAGS@,$LDFLAGS,;t t -s,@CPPFLAGS@,$CPPFLAGS,;t t -s,@EXEEXT@,$EXEEXT,;t t -s,@OBJEXT@,$OBJEXT,;t t -s,@DEPDIR@,$DEPDIR,;t t -s,@am__include@,$am__include,;t t -s,@am__quote@,$am__quote,;t t -s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t -s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t -s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t -s,@CCDEPMODE@,$CCDEPMODE,;t t -s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t -s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t -s,@CCAS@,$CCAS,;t t -s,@RANLIB@,$RANLIB,;t t -s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t -s,@STAGE1_CFLAGS@,$STAGE1_CFLAGS,;t t -s,@STAGE2_CFLAGS@,$STAGE2_CFLAGS,;t t -s,@GRUB_CFLAGS@,$GRUB_CFLAGS,;t t -s,@OBJCOPY@,$OBJCOPY,;t t -s,@ac_ct_OBJCOPY@,$ac_ct_OBJCOPY,;t t -s,@GRUB_LIBS@,$GRUB_LIBS,;t t -s,@CPP@,$CPP,;t t -s,@EGREP@,$EGREP,;t t -s,@NETBOOT_SUPPORT_TRUE@,$NETBOOT_SUPPORT_TRUE,;t t -s,@NETBOOT_SUPPORT_FALSE@,$NETBOOT_SUPPORT_FALSE,;t t -s,@DISKLESS_SUPPORT_TRUE@,$DISKLESS_SUPPORT_TRUE,;t t -s,@DISKLESS_SUPPORT_FALSE@,$DISKLESS_SUPPORT_FALSE,;t t -s,@HERCULES_SUPPORT_TRUE@,$HERCULES_SUPPORT_TRUE,;t t -s,@HERCULES_SUPPORT_FALSE@,$HERCULES_SUPPORT_FALSE,;t t -s,@SERIAL_SUPPORT_TRUE@,$SERIAL_SUPPORT_TRUE,;t t -s,@SERIAL_SUPPORT_FALSE@,$SERIAL_SUPPORT_FALSE,;t t -s,@SERIAL_SPEED_SIMULATION_TRUE@,$SERIAL_SPEED_SIMULATION_TRUE,;t t -s,@SERIAL_SPEED_SIMULATION_FALSE@,$SERIAL_SPEED_SIMULATION_FALSE,;t t -s,@BUILD_EXAMPLE_KERNEL_TRUE@,$BUILD_EXAMPLE_KERNEL_TRUE,;t t -s,@BUILD_EXAMPLE_KERNEL_FALSE@,$BUILD_EXAMPLE_KERNEL_FALSE,;t t -s,@FSYS_CFLAGS@,$FSYS_CFLAGS,;t t -s,@NET_CFLAGS@,$NET_CFLAGS,;t t -s,@NET_EXTRAFLAGS@,$NET_EXTRAFLAGS,;t t -s,@NETBOOT_DRIVERS@,$NETBOOT_DRIVERS,;t t -s,@CCASFLAGS@,$CCASFLAGS,;t t -s,@LIBOBJS@,$LIBOBJS,;t t -s,@LTLIBOBJS@,$LTLIBOBJS,;t t -CEOF - -_ACEOF - - cat >>$CONFIG_STATUS <<\_ACEOF - # Split the substitutions into bite-sized pieces for seds with - # small command number limits, like on Digital OSF/1 and HP-UX. - ac_max_sed_lines=48 - ac_sed_frag=1 # Number of current file. - ac_beg=1 # First line for current file. - ac_end=$ac_max_sed_lines # Line after last line for current file. - ac_more_lines=: - ac_sed_cmds= - while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - else - sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - fi - if test ! -s $tmp/subs.frag; then - ac_more_lines=false - else - # The purpose of the label and of the branching condition is to - # speed up the sed processing (if there are no `@' at all, there - # is no need to browse any of the substitutions). - # These are the two extra sed commands mentioned above. - (echo ':t - /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" - else - ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" - fi - ac_sed_frag=`expr $ac_sed_frag + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_lines` - fi - done - if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat - fi -fi # test -n "$CONFIG_FILES" - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; - esac - - # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`(dirname "$ac_file") 2>/dev/null || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - ac_builddir=. - -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi - -case $srcdir in - .) # No --srcdir option. We are building in place. - ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac - -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac - - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_builddir$INSTALL ;; - esac - - if test x"$ac_file" != x-; then - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - rm -f "$ac_file" - fi - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - if test x"$ac_file" = x-; then - configure_input= - else - configure_input="$ac_file. " - fi - configure_input=$configure_input"Generated from `echo $ac_file_in | - sed 's,.*/,,'` by configure." - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s,@configure_input@,$configure_input,;t t -s,@srcdir@,$ac_srcdir,;t t -s,@abs_srcdir@,$ac_abs_srcdir,;t t -s,@top_srcdir@,$ac_top_srcdir,;t t -s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t -s,@builddir@,$ac_builddir,;t t -s,@abs_builddir@,$ac_abs_builddir,;t t -s,@top_builddir@,$ac_top_builddir,;t t -s,@abs_top_builddir@,$ac_abs_top_builddir,;t t -s,@INSTALL@,$ac_INSTALL,;t t -" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out - rm -f $tmp/stdin - if test x"$ac_file" != x-; then - mv $tmp/out $ac_file - else - cat $tmp/out - rm -f $tmp/out - fi - -done -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF - -# -# CONFIG_HEADER section. -# - -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where -# NAME is the cpp macro being defined and VALUE is the value it is being given. -# -# ac_d sets the value in "#define NAME VALUE" lines. -ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' -ac_dB='[ ].*$,\1#\2' -ac_dC=' ' -ac_dD=',;t' -# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_uB='$,\1#\2define\3' -ac_uC=' ' -ac_uD=',;t' - -for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; - esac - - test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - # Do quote $f, to prevent DOS paths from being IFS'd. - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } - # Remove the trailing spaces. - sed 's/[ ]*$//' $ac_file_inputs >$tmp/in - -_ACEOF - -# Transform confdefs.h into two sed scripts, `conftest.defines' and -# `conftest.undefs', that substitutes the proper values into -# config.h.in to produce config.h. The first handles `#define' -# templates, and the second `#undef' templates. -# And first: Protect against being on the right side of a sed subst in -# config.status. Protect against being in an unquoted here document -# in config.status. -rm -f conftest.defines conftest.undefs -# Using a here document instead of a string reduces the quoting nightmare. -# Putting comments in sed scripts is not portable. -# -# `end' is used to avoid that the second main sed command (meant for -# 0-ary CPP macros) applies to n-ary macro definitions. -# See the Autoconf documentation for `clear'. -cat >confdef2sed.sed <<\_ACEOF -s/[\\&,]/\\&/g -s,[\\$`],\\&,g -t clear -: clear -s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp -t end -s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp -: end -_ACEOF -# If some macros were called several times there might be several times -# the same #defines, which is useless. Nevertheless, we may not want to -# sort them, since we want the *last* AC-DEFINE to be honored. -uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines -sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs -rm -f confdef2sed.sed - -# This sed command replaces #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -cat >>conftest.undefs <<\_ACEOF -s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, -_ACEOF - -# Break up conftest.defines because some shells have a limit on the size -# of here documents, and old seds have small limits too (100 cmds). -echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS -echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS -echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS -echo ' :' >>$CONFIG_STATUS -rm -f conftest.tail -while grep . conftest.defines >/dev/null -do - # Write a limited-size here document to $tmp/defines.sed. - echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS - # Speed up: don't consider the non `#define' lines. - echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS - # Work around the forget-to-reset-the-flag bug. - echo 't clr' >>$CONFIG_STATUS - echo ': clr' >>$CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF - sed -f $tmp/defines.sed $tmp/in >$tmp/out - rm -f $tmp/in - mv $tmp/out $tmp/in -' >>$CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail - rm -f conftest.defines - mv conftest.tail conftest.defines -done -rm -f conftest.defines -echo ' fi # grep' >>$CONFIG_STATUS -echo >>$CONFIG_STATUS - -# Break up conftest.undefs because some shells have a limit on the size -# of here documents, and old seds have small limits too (100 cmds). -echo ' # Handle all the #undef templates' >>$CONFIG_STATUS -rm -f conftest.tail -while grep . conftest.undefs >/dev/null -do - # Write a limited-size here document to $tmp/undefs.sed. - echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS - # Speed up: don't consider the non `#undef' - echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS - # Work around the forget-to-reset-the-flag bug. - echo 't clr' >>$CONFIG_STATUS - echo ': clr' >>$CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS - echo 'CEOF - sed -f $tmp/undefs.sed $tmp/in >$tmp/out - rm -f $tmp/in - mv $tmp/out $tmp/in -' >>$CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail - rm -f conftest.undefs - mv conftest.tail conftest.undefs -done -rm -f conftest.undefs - -cat >>$CONFIG_STATUS <<\_ACEOF - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - if test x"$ac_file" = x-; then - echo "/* Generated by configure. */" >$tmp/config.h - else - echo "/* $ac_file. Generated by configure. */" >$tmp/config.h - fi - cat $tmp/in >>$tmp/config.h - rm -f $tmp/in - if test x"$ac_file" != x-; then - if diff $ac_file $tmp/config.h >/dev/null 2>&1; then - { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 -echo "$as_me: $ac_file is unchanged" >&6;} - else - ac_dir=`(dirname "$ac_file") 2>/dev/null || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - rm -f $ac_file - mv $tmp/config.h $ac_file - fi - else - cat $tmp/config.h - rm -f $tmp/config.h - fi -# Compute $ac_file's index in $config_headers. -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $ac_file | $ac_file:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || -$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X$ac_file : 'X\(//\)[^/]' \| \ - X$ac_file : 'X\(//\)$' \| \ - X$ac_file : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X$ac_file | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'`/stamp-h$_am_stamp_count -done -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF - -# -# CONFIG_COMMANDS section. -# -for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue - ac_dest=`echo "$ac_file" | sed 's,:.*,,'` - ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_dir=`(dirname "$ac_dest") 2>/dev/null || -$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_dest" : 'X\(//\)[^/]' \| \ - X"$ac_dest" : 'X\(//\)$' \| \ - X"$ac_dest" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_dest" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - ac_builddir=. - -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi - -case $srcdir in - .) # No --srcdir option. We are building in place. - ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac - -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac - - - { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 -echo "$as_me: executing $ac_dest commands" >&6;} - case $ac_dest in - depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then - dirpart=`(dirname "$mf") 2>/dev/null || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`(dirname "$file") 2>/dev/null || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p $dirpart/$fdir - else - as_dir=$dirpart/$fdir - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 -echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} - { (exit 1); exit 1; }; }; } - - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done -done - ;; - esac -done -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF - -{ (exit 0); exit 0; } -_ACEOF -chmod +x $CONFIG_STATUS -ac_clean_files=$ac_clean_files_save - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } -fi - diff --git a/depcomp b/depcomp deleted file mode 100644 index 11e2d3bfe..000000000 --- a/depcomp +++ /dev/null @@ -1,522 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2004-05-31.23 - -# Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Alexandre Oliva . - -case $1 in - '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: depcomp [--help] [--version] PROGRAM [ARGS] - -Run PROGRAMS ARGS to compile a file, generating dependencies -as side-effects. - -Environment variables: - depmode Dependency tracking mode. - source Source file read by `PROGRAMS ARGS'. - object Object file output by `PROGRAMS ARGS'. - DEPDIR directory where to store dependencies. - depfile Dependency file to output. - tmpdepfile Temporary file to use when outputing dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to . -EOF - exit 0 - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit 0 - ;; -esac - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi - -# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. -depfile=${depfile-`echo "$object" | - sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. - "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -## The second -e expression handles DOS-style file names with drive letters. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the `deleted header file' problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. - tr ' ' ' -' < "$tmpdepfile" | -## Some versions of gcc put a space before the `:'. On the theory -## that the space means something, we add a space to the output as -## well. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files - echo "$object : \\" > "$depfile" - - # Clip off the initial element (the dependent). Don't try to be - # clever and replace this with sed code, as IRIX sed won't handle - # lines with more than a fixed number of characters (4096 in - # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like `#:fec' to the end of the - # dependency line. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ - tr ' -' ' ' >> $depfile - echo >> $depfile - - # The second pass generates a dummy entry for each header file. - tr ' ' ' -' < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> $depfile - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -aix) - # The C for AIX Compiler uses -M and outputs the dependencies - # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts `$object:' at the - # start of each line; $object doesn't have directory information. - # Version 6 uses the directory in both cases. - stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` - tmpdepfile="$stripped.u" - if test "$libtool" = yes; then - "$@" -Wc,-M - else - "$@" -M - fi - stat=$? - - if test -f "$tmpdepfile"; then : - else - stripped=`echo "$stripped" | sed 's,^.*/,,'` - tmpdepfile="$stripped.u" - fi - - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - - if test -f "$tmpdepfile"; then - outname="$stripped.o" - # Each line is of the form `foo.o: dependent.h'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" - sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" - else - # The sourcefile does not contain any dependencies, so just - # store a dummy comment line, to avoid errors with the Makefile - # "include basename.Plo" scheme. - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -icc) - # Intel's C compiler understands `-MD -MF file'. However on - # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c - # ICC 7.0 will fill foo.d with something like - # foo.o: sub/foo.c - # foo.o: sub/foo.h - # which is wrong. We want: - # sub/foo.o: sub/foo.c - # sub/foo.o: sub/foo.h - # sub/foo.c: - # sub/foo.h: - # ICC 7.1 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using \ : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each line is of the form `foo.o: dependent.h', - # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | - sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in `foo.d' instead, so we check for that too. - # Subdirectories are respected. - dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` - test "x$dir" = "x$object" && dir= - base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` - - if test "$libtool" = yes; then - # Dependencies are output in .lo.d with libtool 1.4. - # With libtool 1.5 they are output both in $dir.libs/$base.o.d - # and in $dir.libs/$base.o.d and $dir$base.o.d. We process the - # latter, because the former will be cleaned when $dir.libs is - # erased. - tmpdepfile1="$dir.libs/$base.lo.d" - tmpdepfile2="$dir$base.o.d" - tmpdepfile3="$dir.libs/$base.d" - "$@" -Wc,-MD - else - tmpdepfile1="$dir$base.o.d" - tmpdepfile2="$dir$base.d" - tmpdepfile3="$dir$base.d" - "$@" -MD - fi - - stat=$? - if test $stat -eq 0; then : - else - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - if test -f "$tmpdepfile1"; then - tmpdepfile="$tmpdepfile1" - elif test -f "$tmpdepfile2"; then - tmpdepfile="$tmpdepfile2" - else - tmpdepfile="$tmpdepfile3" - fi - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" - # That's a tab and a space in the []. - sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" - else - echo "#dummy" > "$depfile" - fi - rm -f "$tmpdepfile" - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for `:' - # in the target name. This is to cope with DOS-style filenames: - # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. - "$@" $dashmflag | - sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - tr ' ' ' -' < "$tmpdepfile" | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - "$@" || exit $? - # Remove any Libtool call - if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do - shift - done - shift - fi - # X makedepend - shift - cleared=no - for arg in "$@"; do - case $cleared in - no) - set ""; shift - cleared=yes ;; - esac - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift ;; - # Strip any option that makedepend may not understand. Remove - # the object too, otherwise makedepend will parse it as a source file. - -*|$object) - ;; - *) - set fnord "$@" "$arg"; shift ;; - esac - done - obj_suffix="`echo $object | sed 's/^.*\././'`" - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - sed '1,2d' "$tmpdepfile" | tr ' ' ' -' | \ -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do - shift - done - shift - fi - - # Remove `-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - "$@" -E | - sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | - sed '$ s: \\$::' > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o, - # because we must use -o when running libtool. - "$@" || exit $? - IFS=" " - for arg - do - case "$arg" in - "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; - *) - set fnord "$@" "$arg" - shift - shift - ;; - esac - done - "$@" -E | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" - echo " " >> "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/docs/Makefile.in b/docs/Makefile.in deleted file mode 100644 index 44864a296..000000000 --- a/docs/Makefile.in +++ /dev/null @@ -1,770 +0,0 @@ -# Makefile.in generated by automake 1.9.4 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -SOURCES = $(kernel_SOURCES) - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -EXTRA_PROGRAMS = kernel$(EXEEXT) -@BUILD_EXAMPLE_KERNEL_TRUE@noinst_PROGRAMS = kernel$(EXEEXT) -subdir = docs -DIST_COMMON = $(grub_TEXINFOS) $(multiboot_TEXINFOS) \ - $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/stamp-vti $(srcdir)/version.texi mdate-sh \ - texinfo.tex -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -PROGRAMS = $(noinst_PROGRAMS) -am__kernel_SOURCES_DIST = boot.S kernel.c multiboot.h -am__objects_1 = boot.$(OBJEXT) kernel-kernel.$(OBJEXT) -@BUILD_EXAMPLE_KERNEL_TRUE@am_kernel_OBJECTS = $(am__objects_1) -kernel_OBJECTS = $(am_kernel_OBJECTS) -kernel_LDADD = $(LDADD) -SCRIPTS = $(noinst_SCRIPTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(kernel_SOURCES) -DIST_SOURCES = $(am__kernel_SOURCES_DIST) -INFO_DEPS = $(srcdir)/grub.info $(srcdir)/multiboot.info -am__TEXINFO_TEX_DIR = $(srcdir) -DVIS = grub.dvi multiboot.dvi -PDFS = grub.pdf multiboot.pdf -PSS = grub.ps multiboot.ps -HTMLS = grub.html multiboot.html -TEXINFOS = grub.texi multiboot.texi -TEXI2DVI = texi2dvi -TEXI2PDF = $(TEXI2DVI) --pdf --batch -MAKEINFOHTML = $(MAKEINFO) --html -AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) -DVIPS = dvips -am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \ - "$(DESTDIR)$(man8dir)" -man1dir = $(mandir)/man1 -man8dir = $(mandir)/man8 -NROFF = nroff -MANS = $(man_MANS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ -BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ -CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ -DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FSYS_CFLAGS = @FSYS_CFLAGS@ -GRUB_CFLAGS = @GRUB_CFLAGS@ -GRUB_LIBS = @GRUB_LIBS@ -HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ -HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ -MAKEINFO = @MAKEINFO@ -NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ -NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ -NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ -NET_CFLAGS = @NET_CFLAGS@ -NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ -OBJCOPY = @OBJCOPY@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PERL = @PERL@ -RANLIB = @RANLIB@ -SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ -SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ -SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ -SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STAGE1_CFLAGS = @STAGE1_CFLAGS@ -STAGE2_CFLAGS = @STAGE2_CFLAGS@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -info_TEXINFOS = grub.texi multiboot.texi -grub_TEXINFOS = internals.texi fdl.texi -EXAMPLES = boot.S kernel.c multiboot.h -multiboot_TEXINFOS = boot.S.texi kernel.c.texi multiboot.h.texi -man_MANS = grub.8 mbchk.1 grub-install.8 grub-md5-crypt.8 grub-terminfo.8 -HELP2MAN = help2man -SRC2TEXI = src2texi -noinst_SCRIPTS = $(HELP2MAN) $(SRC2TEXI) -@BUILD_EXAMPLE_KERNEL_TRUE@kernel_SOURCES = $(EXAMPLES) -@BUILD_EXAMPLE_KERNEL_TRUE@kernel_CFLAGS = -fno-builtin -nostdinc -O -g -Wall \ -@BUILD_EXAMPLE_KERNEL_TRUE@ -imacros $(top_builddir)/config.h - -@BUILD_EXAMPLE_KERNEL_TRUE@kernel_LDFLAGS = -nostdlib -Wl,-N -Wl,-Ttext -Wl,100000 -EXTRA_DIST = menu.lst $(man_MANS) $(noinst_SCRIPTS) \ - $(EXAMPLES) $(multiboot_TEXINFOS) - -CLEANFILES = $(noinst_PROGRAMS) -all: all-am - -.SUFFIXES: -.SUFFIXES: .S .c .dvi .html .info .o .obj .pdf .ps .texi -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu docs/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -clean-noinstPROGRAMS: - -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) -kernel$(EXEEXT): $(kernel_OBJECTS) $(kernel_DEPENDENCIES) - @rm -f kernel$(EXEEXT) - $(LINK) $(kernel_LDFLAGS) $(kernel_OBJECTS) $(kernel_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kernel-kernel.Po@am__quote@ - -.S.o: - $(CCASCOMPILE) -c $< - -.S.obj: - $(CCASCOMPILE) -c `$(CYGPATH_W) '$<'` - -.c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -kernel-kernel.o: kernel.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kernel_CFLAGS) $(CFLAGS) -MT kernel-kernel.o -MD -MP -MF "$(DEPDIR)/kernel-kernel.Tpo" -c -o kernel-kernel.o `test -f 'kernel.c' || echo '$(srcdir)/'`kernel.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/kernel-kernel.Tpo" "$(DEPDIR)/kernel-kernel.Po"; else rm -f "$(DEPDIR)/kernel-kernel.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='kernel.c' object='kernel-kernel.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kernel_CFLAGS) $(CFLAGS) -c -o kernel-kernel.o `test -f 'kernel.c' || echo '$(srcdir)/'`kernel.c - -kernel-kernel.obj: kernel.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kernel_CFLAGS) $(CFLAGS) -MT kernel-kernel.obj -MD -MP -MF "$(DEPDIR)/kernel-kernel.Tpo" -c -o kernel-kernel.obj `if test -f 'kernel.c'; then $(CYGPATH_W) 'kernel.c'; else $(CYGPATH_W) '$(srcdir)/kernel.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/kernel-kernel.Tpo" "$(DEPDIR)/kernel-kernel.Po"; else rm -f "$(DEPDIR)/kernel-kernel.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='kernel.c' object='kernel-kernel.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kernel_CFLAGS) $(CFLAGS) -c -o kernel-kernel.obj `if test -f 'kernel.c'; then $(CYGPATH_W) 'kernel.c'; else $(CYGPATH_W) '$(srcdir)/kernel.c'; fi` - -.texi.info: - restore=: && backupdir="$(am__leading_dot)am$$$$" && \ - am__cwd=`pwd` && cd $(srcdir) && \ - rm -rf $$backupdir && mkdir $$backupdir && \ - for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ - if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ - done; \ - cd "$$am__cwd"; \ - if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ - -o $@ $<; \ - then \ - rc=0; \ - cd $(srcdir); \ - else \ - rc=$$?; \ - cd $(srcdir) && \ - $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ - fi; \ - rm -rf $$backupdir; exit $$rc - -.texi.dvi: - TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ - MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ - $(TEXI2DVI) $< - -.texi.pdf: - TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ - MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ - $(TEXI2PDF) $< - -.texi.html: - rm -rf $(@:.html=.htp) - if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ - -o $(@:.html=.htp) $<; \ - then \ - rm -rf $@; \ - if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ - mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ - else \ - if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ - rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ - exit 1; \ - fi -$(srcdir)/grub.info: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS) -grub.dvi: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS) -grub.pdf: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS) -grub.html: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS) -$(srcdir)/version.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/stamp-vti -$(srcdir)/stamp-vti: grub.texi $(top_srcdir)/configure - @(dir=.; test -f ./grub.texi || dir=$(srcdir); \ - set `$(SHELL) $(srcdir)/mdate-sh $$dir/grub.texi`; \ - echo "@set UPDATED $$1 $$2 $$3"; \ - echo "@set UPDATED-MONTH $$2 $$3"; \ - echo "@set EDITION $(VERSION)"; \ - echo "@set VERSION $(VERSION)") > vti.tmp - @cmp -s vti.tmp $(srcdir)/version.texi \ - || (echo "Updating $(srcdir)/version.texi"; \ - cp vti.tmp $(srcdir)/version.texi) - -@rm -f vti.tmp - @cp $(srcdir)/version.texi $@ - -mostlyclean-vti: - -rm -f vti.tmp - -maintainer-clean-vti: -@MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi -$(srcdir)/multiboot.info: multiboot.texi $(multiboot_TEXINFOS) -multiboot.dvi: multiboot.texi $(multiboot_TEXINFOS) -multiboot.pdf: multiboot.texi $(multiboot_TEXINFOS) -multiboot.html: multiboot.texi $(multiboot_TEXINFOS) -.dvi.ps: - $(DVIPS) -o $@ $< - -uninstall-info-am: - $(PRE_UNINSTALL) - @if (install-info --version && \ - install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ - list='$(INFO_DEPS)'; \ - for file in $$list; do \ - relfile=`echo "$$file" | sed 's|^.*/||'`; \ - echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ - install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ - done; \ - else :; fi - @$(NORMAL_UNINSTALL) - @list='$(INFO_DEPS)'; \ - for file in $$list; do \ - relfile=`echo "$$file" | sed 's|^.*/||'`; \ - relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ - (if cd "$(DESTDIR)$(infodir)"; then \ - echo " rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9])"; \ - rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ - else :; fi); \ - done - -dist-info: $(INFO_DEPS) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - list='$(INFO_DEPS)'; \ - for base in $$list; do \ - case $$base in \ - $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ - esac; \ - if test -f $$base; then d=.; else d=$(srcdir); fi; \ - for file in $$d/$$base*; do \ - relfile=`expr "$$file" : "$$d/\(.*\)"`; \ - test -f $(distdir)/$$relfile || \ - cp -p $$file $(distdir)/$$relfile; \ - done; \ - done - -mostlyclean-aminfo: - -rm -rf grub.aux grub.cp grub.cps grub.fn grub.ky grub.log grub.pg grub.tmp \ - grub.toc grub.tp grub.vr grub.dvi grub.pdf grub.ps grub.html \ - multiboot.aux multiboot.cp multiboot.cps multiboot.fn \ - multiboot.ky multiboot.log multiboot.pg multiboot.tmp \ - multiboot.toc multiboot.tp multiboot.vr multiboot.dvi \ - multiboot.pdf multiboot.ps multiboot.html - -maintainer-clean-aminfo: - @list='$(INFO_DEPS)'; for i in $$list; do \ - i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ - echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ - rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ - done -install-man1: $(man1_MANS) $(man_MANS) - @$(NORMAL_INSTALL) - test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)" - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ - else file=$$i; fi; \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ - done -uninstall-man1: - @$(NORMAL_UNINSTALL) - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ - rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ - done -install-man8: $(man8_MANS) $(man_MANS) - @$(NORMAL_INSTALL) - test -z "$(man8dir)" || $(mkdir_p) "$(DESTDIR)$(man8dir)" - @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.8*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ - else file=$$i; fi; \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 8*) ;; \ - *) ext='8' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \ - done -uninstall-man8: - @$(NORMAL_UNINSTALL) - @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.8*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 8*) ;; \ - *) ext='8' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \ - rm -f "$(DESTDIR)$(man8dir)/$$inst"; \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$(top_distdir)" distdir="$(distdir)" \ - dist-info -check-am: all-am -check: check-am -all-am: Makefile $(INFO_DEPS) $(PROGRAMS) $(SCRIPTS) $(MANS) -installdirs: - for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man8dir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: $(DVIS) - -html: html-am - -html-am: $(HTMLS) - -info: info-am - -info-am: $(INFO_DEPS) - -install-data-am: install-info-am install-man - -install-exec-am: - -install-info: install-info-am - -install-info-am: $(INFO_DEPS) - @$(NORMAL_INSTALL) - test -z "$(infodir)" || $(mkdir_p) "$(DESTDIR)$(infodir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - list='$(INFO_DEPS)'; \ - for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - esac; \ - if test -f $$file; then d=.; else d=$(srcdir); fi; \ - file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ - for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ - $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ - if test -f $$ifile; then \ - relfile=`echo "$$ifile" | sed 's|^.*/||'`; \ - echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \ - $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \ - else : ; fi; \ - done; \ - done - @$(POST_INSTALL) - @if (install-info --version && \ - install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ - list='$(INFO_DEPS)'; \ - for file in $$list; do \ - relfile=`echo "$$file" | sed 's|^.*/||'`; \ - echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ - install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ - done; \ - else : ; fi -install-man: install-man1 install-man8 - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-aminfo \ - maintainer-clean-generic maintainer-clean-vti - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \ - mostlyclean-generic mostlyclean-vti - -pdf: pdf-am - -pdf-am: $(PDFS) - -ps: ps-am - -ps-am: $(PSS) - -uninstall-am: uninstall-info-am uninstall-man - -uninstall-man: uninstall-man1 uninstall-man8 - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-noinstPROGRAMS ctags dist-info distclean \ - distclean-compile distclean-generic distclean-tags distdir dvi \ - dvi-am html html-am info info-am install install-am \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-man1 \ - install-man8 install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-aminfo \ - maintainer-clean-generic maintainer-clean-vti mostlyclean \ - mostlyclean-aminfo mostlyclean-compile mostlyclean-generic \ - mostlyclean-vti pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-info-am uninstall-man uninstall-man1 \ - uninstall-man8 - - -@BUILD_EXAMPLE_KERNEL_TRUE@boot.o: multiboot.h - -# Cancel the rule %.texi -> %. This rule may confuse make to determine -# the dependecies. -.texi: - -%.c.texi: %.c $(srcdir)/$(SRC2TEXI) - $(SHELL) $(srcdir)/$(SRC2TEXI) $(srcdir) $< $@ - -%.h.texi: %.h $(srcdir)/$(SRC2TEXI) - $(SHELL) $(srcdir)/$(SRC2TEXI) $(srcdir) $< $@ - -%.S.texi: %.S $(srcdir)/$(SRC2TEXI) - $(SHELL) $(srcdir)/$(SRC2TEXI) $(srcdir) $< $@ - -@MAINTAINER_MODE_TRUE@$(srcdir)/grub.8: ../grub/grub $(srcdir)/$(HELP2MAN) -@MAINTAINER_MODE_TRUE@ $(PERL) $(srcdir)/$(HELP2MAN) --name="the grub shell" \ -@MAINTAINER_MODE_TRUE@ --section=8 --output=$@ $< - -@MAINTAINER_MODE_TRUE@$(srcdir)/grub-install.8: ../util/grub-install $(srcdir)/$(HELP2MAN) -@MAINTAINER_MODE_TRUE@ chmod 755 $< -@MAINTAINER_MODE_TRUE@ $(PERL) $(srcdir)/$(HELP2MAN) --name="install GRUB on your drive" \ -@MAINTAINER_MODE_TRUE@ --section=8 --output=$@ $< - -@MAINTAINER_MODE_TRUE@$(srcdir)/mbchk.1: ../util/mbchk $(srcdir)/$(HELP2MAN) -@MAINTAINER_MODE_TRUE@ $(PERL) $(srcdir)/$(HELP2MAN) \ -@MAINTAINER_MODE_TRUE@ --name="check the format of a Multiboot kernel" \ -@MAINTAINER_MODE_TRUE@ --section=1 --output=$@ $< - -@MAINTAINER_MODE_TRUE@$(srcdir)/grub-md5-crypt.8: ../util/grub-md5-crypt $(srcdir)/$(HELP2MAN) -@MAINTAINER_MODE_TRUE@ chmod 755 $< -@MAINTAINER_MODE_TRUE@ $(PERL) $(srcdir)/$(HELP2MAN) \ -@MAINTAINER_MODE_TRUE@ --name="Encrypt a password in MD5 format" \ -@MAINTAINER_MODE_TRUE@ --section=8 --output=$@ $< - -@MAINTAINER_MODE_TRUE@$(srcdir)/grub-terminfo.8: ../util/grub-terminfo $(srcdir)/$(HELP2MAN) -@MAINTAINER_MODE_TRUE@ chmod 755 $< -@MAINTAINER_MODE_TRUE@ $(PERL) $(srcdir)/$(HELP2MAN) \ -@MAINTAINER_MODE_TRUE@ --name="Generate a terminfo command from a terminfo name" \ -@MAINTAINER_MODE_TRUE@ --section=8 --output=$@ $< -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/docs/boot.S.texi b/docs/boot.S.texi deleted file mode 100644 index 39dcec990..000000000 --- a/docs/boot.S.texi +++ /dev/null @@ -1,79 +0,0 @@ -/* @r{boot.S - bootstrap the kernel} */ -/* @r{Copyright (C) 1999, 2001 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.} */ - -#define ASM 1 -#include - - .text - - .globl start, _start -start: -_start: - jmp multiboot_entry - - /* @r{Align 32 bits boundary.} */ - .align 4 - - /* @r{Multiboot header.} */ -multiboot_header: - /* @r{magic} */ - .long MULTIBOOT_HEADER_MAGIC - /* @r{flags} */ - .long MULTIBOOT_HEADER_FLAGS - /* @r{checksum} */ - .long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) -#ifndef __ELF__ - /* @r{header_addr} */ - .long multiboot_header - /* @r{load_addr} */ - .long _start - /* @r{load_end_addr} */ - .long _edata - /* @r{bss_end_addr} */ - .long _end - /* @r{entry_addr} */ - .long multiboot_entry -#endif /* @r{! __ELF__} */ - -multiboot_entry: - /* @r{Initialize the stack pointer.} */ - movl $(stack + STACK_SIZE), %esp - - /* @r{Reset EFLAGS.} */ - pushl $0 - popf - - /* @r{Push the pointer to the Multiboot information structure.} */ - pushl %ebx - /* @r{Push the magic value.} */ - pushl %eax - - /* @r{Now enter the C main function...} */ - call EXT_C(cmain) - - /* @r{Halt.} */ - pushl $halt_message - call EXT_C(printf) - -loop: hlt - jmp loop - -halt_message: - .asciz "Halted." - - /* @r{Our stack area.} */ - .comm stack, STACK_SIZE diff --git a/docs/grub-install.8 b/docs/grub-install.8 deleted file mode 100644 index 2fb697ed2..000000000 --- a/docs/grub-install.8 +++ /dev/null @@ -1,52 +0,0 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. -.TH GRUB-INSTALL "8" "June 2006" "grub-install (GNU GRUB 0.97)" FSF -.SH NAME -grub-install \- install GRUB on your drive -.SH SYNOPSIS -.B grub-install -[\fIOPTION\fR] \fIinstall_device\fR -.SH DESCRIPTION -Install GRUB on your drive. -.TP -\fB\-h\fR, \fB\-\-help\fR -print this message and exit -.TP -\fB\-v\fR, \fB\-\-version\fR -print the version information and exit -.TP -\fB\-\-root\-directory\fR=\fIDIR\fR -install GRUB images under the directory DIR -instead of the root directory -.TP -\fB\-\-grub\-shell\fR=\fIFILE\fR -use FILE as the grub shell -.TP -\fB\-\-no\-floppy\fR -do not probe any floppy drive -.TP -\fB\-\-force\-lba\fR -force GRUB to use LBA mode even for a buggy -BIOS -.TP -\fB\-\-recheck\fR -probe a device map even if it already exists -.PP -INSTALL_DEVICE can be a GRUB device name or a system device filename. -.PP -grub-install copies GRUB images into the DIR/boot directory specfied by -\fB\-\-root\-directory\fR, and uses the grub shell to install grub into the boot -sector. -.SH "REPORTING BUGS" -Report bugs to . -.SH "SEE ALSO" -The full documentation for -.B grub-install -is maintained as a Texinfo manual. If the -.B info -and -.B grub-install -programs are properly installed at your site, the command -.IP -.B info grub-install -.PP -should give you access to the complete manual. diff --git a/docs/grub-md5-crypt.8 b/docs/grub-md5-crypt.8 deleted file mode 100644 index f6ee50d86..000000000 --- a/docs/grub-md5-crypt.8 +++ /dev/null @@ -1,32 +0,0 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. -.TH GRUB-MD5-CRYPT "8" "June 2006" "grub-md5-crypt (GNU GRUB )" FSF -.SH NAME -grub-md5-crypt \- Encrypt a password in MD5 format -.SH SYNOPSIS -.B grub-md5-crypt -[\fIOPTION\fR] -.SH DESCRIPTION -Encrypt a password in MD5 format. -.TP -\fB\-h\fR, \fB\-\-help\fR -print this message and exit -.TP -\fB\-v\fR, \fB\-\-version\fR -print the version information and exit -.TP -\fB\-\-grub\-shell\fR=\fIFILE\fR -use FILE as the grub shell -.SH "REPORTING BUGS" -Report bugs to . -.SH "SEE ALSO" -The full documentation for -.B grub-md5-crypt -is maintained as a Texinfo manual. If the -.B info -and -.B grub-md5-crypt -programs are properly installed at your site, the command -.IP -.B info grub-md5-crypt -.PP -should give you access to the complete manual. diff --git a/docs/grub-terminfo.8 b/docs/grub-terminfo.8 deleted file mode 100644 index 18711060c..000000000 --- a/docs/grub-terminfo.8 +++ /dev/null @@ -1,29 +0,0 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. -.TH GRUB-TERMINFO "8" "June 2006" "grub-terminfo (GNU GRUB 0.97)" FSF -.SH NAME -grub-terminfo \- Generate a terminfo command from a terminfo name -.SH SYNOPSIS -.B grub-terminfo -\fITERMNAME\fR -.SH DESCRIPTION -Generate a terminfo command from a terminfo name. -.TP -\fB\-h\fR, \fB\-\-help\fR -print this message and exit -.TP -\fB\-v\fR, \fB\-\-version\fR -print the version information and exit -.SH "REPORTING BUGS" -Report bugs to . -.SH "SEE ALSO" -The full documentation for -.B grub-terminfo -is maintained as a Texinfo manual. If the -.B info -and -.B grub-terminfo -programs are properly installed at your site, the command -.IP -.B info grub-terminfo -.PP -should give you access to the complete manual. diff --git a/docs/grub.8 b/docs/grub.8 deleted file mode 100644 index 526328e9f..000000000 --- a/docs/grub.8 +++ /dev/null @@ -1,71 +0,0 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. -.TH GRUB "8" "June 2006" "grub (GNU GRUB 0.97)" FSF -.SH NAME -grub \- the grub shell -.SH SYNOPSIS -.B grub -[\fIOPTION\fR]... -.SH DESCRIPTION -Enter the GRand Unified Bootloader command shell. -.TP -\fB\-\-batch\fR -turn on batch mode for non-interactive use -.TP -\fB\-\-boot\-drive\fR=\fIDRIVE\fR -specify stage2 boot_drive [default=0x0] -.TP -\fB\-\-config\-file\fR=\fIFILE\fR -specify stage2 config_file [default=/boot/grub/menu.lst] -.TP -\fB\-\-device\-map\fR=\fIFILE\fR -use the device map file FILE -.TP -\fB\-\-help\fR -display this message and exit -.TP -\fB\-\-hold\fR -wait until a debugger will attach -.TP -\fB\-\-install\-partition\fR=\fIPAR\fR -specify stage2 install_partition [default=0x20000] -.TP -\fB\-\-no\-config\-file\fR -do not use the config file -.TP -\fB\-\-no\-curses\fR -do not use curses -.TP -\fB\-\-no\-floppy\fR -do not probe any floppy drive -.TP -\fB\-\-no\-pager\fR -do not use internal pager -.TP -\fB\-\-preset\-menu\fR -use the preset menu -.TP -\fB\-\-probe\-second\-floppy\fR -probe the second floppy drive -.TP -\fB\-\-read\-only\fR -do not write anything to devices -.TP -\fB\-\-verbose\fR -print verbose messages -.TP -\fB\-\-version\fR -print version information and exit -.SH "REPORTING BUGS" -Report bugs to . -.SH "SEE ALSO" -The full documentation for -.B grub -is maintained as a Texinfo manual. If the -.B info -and -.B grub -programs are properly installed at your site, the command -.IP -.B info grub -.PP -should give you access to the complete manual. diff --git a/docs/grub.texi b/docs/grub.texi deleted file mode 100644 index a533c4ac0..000000000 --- a/docs/grub.texi +++ /dev/null @@ -1,3979 +0,0 @@ -\input texinfo -@c -*-texinfo-*- -@c %**start of header -@setfilename grub.info -@include version.texi -@settitle GNU GRUB Manual @value{VERSION} -@c Unify all our little indices for now. -@syncodeindex fn cp -@syncodeindex vr cp -@syncodeindex ky cp -@syncodeindex pg cp -@syncodeindex tp cp -@c %**end of header - -@footnotestyle separate -@paragraphindent 3 -@finalout - -@copying -This manual is for GNU GRUB (version @value{VERSION}, -@value{UPDATED}). - -Copyright @copyright{} 1999,2000,2001,2002,2004,2006 Free Software Foundation, Inc. - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.2 or -any later version published by the Free Software Foundation; with no -Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,'' -and with the Back-Cover Texts as in (a) below. A copy of the -license is included in the section entitled ``GNU Free Documentation -License.'' - -(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify -this GNU Manual, like GNU software. Copies published by the Free -Software Foundation raise funds for GNU development.'' -@end quotation -@end copying - -@dircategory Kernel -@direntry -* GRUB: (grub). The GRand Unified Bootloader -* grub-install: (grub)Invoking grub-install. Install GRUB on your drive -* grub-md5-crypt: (grub)Invoking grub-md5-crypt. Encrypt a password - in MD5 format -* grub-terminfo: (grub)Invoking grub-terminfo. Generate a terminfo - command from a - terminfo name -* grub-set-default: (grub)Invoking grub-set-default. Set a default boot - entry -* mbchk: (grub)Invoking mbchk. Check for the format of a Multiboot kernel -@end direntry - -@setchapternewpage odd - -@titlepage -@sp 10 -@title the GNU GRUB manual -@subtitle The GRand Unified Bootloader, version @value{VERSION}, @value{UPDATED}. -@author Gordon Matzigkeit -@author Yoshinori K. Okuji -@c The following two commands start the copyright page. -@page -@vskip 0pt plus 1filll -@insertcopying -@end titlepage - -@c Output the table of contents at the beginning. -@contents - -@finalout -@headings double - -@ifnottex -@node Top -@top GNU GRUB manual - -This is the documentation of GNU GRUB, the GRand Unified Bootloader, -a flexible and powerful boot loader program for @sc{pc}s. - -This edition documents version @value{VERSION}. - -@insertcopying -@end ifnottex - -@menu -* Introduction:: Capturing the spirit of GRUB -* Naming convention:: Names of your drives in GRUB -* Installation:: Installing GRUB on your drive -* Booting:: How to boot different operating systems -* Configuration:: Writing your own configuration file -* Network:: Downloading OS images from a network -* Serial terminal:: Using GRUB via a serial line -* Preset Menu:: Embedding a configuration file into GRUB -* Security:: Improving the security -* Images:: GRUB image files -* Filesystem:: Filesystem syntax and semantics -* Interface:: The menu and the command-line -* Commands:: The list of available built-in commands -* Troubleshooting:: Error messages produced by GRUB -* Invoking the grub shell:: How to use the grub shell -* Invoking grub-install:: How to use the GRUB installer -* Invoking grub-md5-crypt:: How to generate a cryptic password -* Invoking grub-terminfo:: How to generate a terminfo command -* Invoking grub-set-default:: How to set a default boot entry -* Invoking mbchk:: How to use the Multiboot checker -* Obtaining and Building GRUB:: How to obtain and build GRUB -* Reporting bugs:: Where you should send a bug report -* Future:: Some future plans on GRUB -* Internals:: Hacking GRUB -* Copying This Manual:: Copying This Manual -* Index:: -@end menu - - -@node Introduction -@chapter Introduction to GRUB - -@menu -* Overview:: What exactly GRUB is and how to use it -* History:: From maggot to house fly -* Features:: GRUB features -* Role of a boot loader:: The role of a boot loader -@end menu - - -@node Overview -@section Overview - -Briefly, a @dfn{boot loader} is the first software program that runs when -a computer starts. It is responsible for loading and transferring -control to an operating system @dfn{kernel} software (such as Linux or -GNU Mach). The kernel, in turn, initializes the rest of the operating -system (e.g. a GNU system). - -GNU GRUB is a very powerful boot loader, which can load a wide variety -of free operating systems, as well as proprietary operating systems with -chain-loading@footnote{@dfn{chain-load} is the mechanism for loading -unsupported operating systems by loading another boot loader. It is -typically used for loading DOS or Windows.}. GRUB is designed to -address the complexity of booting a personal computer; both the -program and this manual are tightly bound to that computer platform, -although porting to other platforms may be addressed in the future. - -One of the important features in GRUB is flexibility; GRUB understands -filesystems and kernel executable formats, so you can load an arbitrary -operating system the way you like, without recording the physical -position of your kernel on the disk. Thus you can load the kernel -just by specifying its file name and the drive and partition where the -kernel resides. - -When booting with GRUB, you can use either a command-line interface -(@pxref{Command-line interface}), or a menu interface (@pxref{Menu -interface}). Using the command-line interface, you type the drive -specification and file name of the kernel manually. In the menu -interface, you just select an OS using the arrow keys. The menu is -based on a configuration file which you prepare beforehand -(@pxref{Configuration}). While in the menu, you can switch to the -command-line mode, and vice-versa. You can even edit menu entries -before using them. - -In the following chapters, you will learn how to specify a drive, a -partition, and a file name (@pxref{Naming convention}) to GRUB, how to -install GRUB on your drive (@pxref{Installation}), and how to boot your -OSes (@pxref{Booting}), step by step. - -Besides the GRUB boot loader itself, there is a @dfn{grub shell} -@command{grub} (@pxref{Invoking the grub shell}) which can be run when -you are in your operating system. It emulates the boot loader and can -be used for installing the boot loader. - - -@node History -@section History of GRUB - -GRUB originated in 1995 when Erich Boleyn was trying to boot the GNU -Hurd with the University of Utah's Mach 4 microkernel (now known as GNU -Mach). Erich and Brian Ford designed the Multiboot Specification -(@pxref{Top, Multiboot Specification, Motivation, multiboot, The Multiboot -Specification}), because they were determined not to add to the large -number of mutually-incompatible PC boot methods. - -Erich then began modifying the FreeBSD boot loader so that it would -understand Multiboot. He soon realized that it would be a lot easier -to write his own boot loader from scratch than to keep working on the -FreeBSD boot loader, and so GRUB was born. - -Erich added many features to GRUB, but other priorities prevented him -from keeping up with the demands of its quickly-expanding user base. In -1999, Gordon Matzigkeit and Yoshinori K. Okuji adopted GRUB as an -official GNU package, and opened its development by making the latest -sources available via anonymous CVS. @xref{Obtaining and Building -GRUB}, for more information. - - -@node Features -@section GRUB features - -The primary requirement for GRUB is that it be compliant with the -@dfn{Multiboot Specification}, which is described in @ref{Top, Multiboot -Specification, Motivation, multiboot, The Multiboot Specification}. - -The other goals, listed in approximate order of importance, are: - -@itemize @bullet{} -@item -Basic functions must be straightforward for end-users. - -@item -Rich functionality to support kernel experts and designers. - -@item -Backward compatibility for booting FreeBSD, NetBSD, OpenBSD, and -Linux. Proprietary kernels (such as DOS, Windows NT, and OS/2) are -supported via a chain-loading function. -@end itemize - -Except for specific compatibility modes (chain-loading and the Linux -@dfn{piggyback} format), all kernels will be started in much the same -state as in the Multiboot Specification. Only kernels loaded at 1 megabyte -or above are presently supported. Any attempt to load below that -boundary will simply result in immediate failure and an error message -reporting the problem. - -In addition to the requirements above, GRUB has the following features -(note that the Multiboot Specification doesn't require all the features -that GRUB supports): - -@table @asis -@item Recognize multiple executable formats -Support many of the @dfn{a.out} variants plus @dfn{ELF}. Symbol -tables are also loaded. - -@item Support non-Multiboot kernels -Support many of the various free 32-bit kernels that lack Multiboot -compliance (primarily FreeBSD, NetBSD, OpenBSD, and -Linux). Chain-loading of other boot loaders is also supported. - -@item Load multiple modules -Fully support the Multiboot feature of loading multiple modules. - -@item Load a configuration file -Support a human-readable text configuration file with preset boot -commands. You can also load another configuration file dynamically and -embed a preset configuration file in a GRUB image file. The list of -commands (@pxref{Commands}) are a superset of those supported on the -command-line. An example configuration file is provided in -@ref{Configuration}. - -@item Provide a menu interface -A menu interface listing preset boot commands, with a programmable -timeout, is available. There is no fixed limit on the number of boot -entries, and the current implementation has space for several hundred. - -@item Have a flexible command-line interface -A fairly flexible command-line interface, accessible from the menu, -is available to edit any preset commands, or write a new boot command -set from scratch. If no configuration file is present, GRUB drops to -the command-line. - -The list of commands (@pxref{Commands}) are a subset of those supported -for configuration files. Editing commands closely resembles the Bash -command-line (@pxref{Command Line Editing, Bash, Command Line Editing, -features, Bash Features}), with @key{TAB}-completion of commands, -devices, partitions, and files in a directory depending on context. - -@item Support multiple filesystem types -Support multiple filesystem types transparently, plus a useful explicit -blocklist notation. The currently supported filesystem types are -@dfn{BSD FFS}, @dfn{DOS FAT16 and FAT32}, @dfn{Minix fs}, @dfn{Linux -ext2fs}, @dfn{ReiserFS}, @dfn{JFS}, @dfn{XFS}, and @dfn{VSTa -fs}. @xref{Filesystem}, for more information. - -@item Support automatic decompression -Can decompress files which were compressed by @command{gzip}. This -function is both automatic and transparent to the user (i.e. all -functions operate upon the uncompressed contents of the specified -files). This greatly reduces a file size and loading time, a -particularly great benefit for floppies.@footnote{There are a few -pathological cases where loading a very badly organized ELF kernel might -take longer, but in practice this never happen.} - -It is conceivable that some kernel modules should be loaded in a -compressed state, so a different module-loading command can be specified -to avoid uncompressing the modules. - -@item Access data on any installed device -Support reading data from any or all floppies or hard disk(s) recognized -by the BIOS, independent of the setting of the root device. - -@item Be independent of drive geometry translations -Unlike many other boot loaders, GRUB makes the particular drive -translation irrelevant. A drive installed and running with one -translation may be converted to another translation without any adverse -effects or changes in GRUB's configuration. - -@item Detect all installed @sc{ram} -GRUB can generally find all the installed @sc{ram} on a PC-compatible -machine. It uses an advanced BIOS query technique for finding all -memory regions. As described on the Multiboot Specification (@pxref{Top, -Multiboot Specification, Motivation, multiboot, The Multiboot -Specification}), not all kernels make use of this information, but GRUB -provides it for those who do. - -@item Support Logical Block Address mode -In traditional disk calls (called @dfn{CHS mode}), there is a geometry -translation problem, that is, the BIOS cannot access over 1024 -cylinders, so the accessible space is limited to at least 508 MB and to -at most 8GB. GRUB can't universally solve this problem, as there is no -standard interface used in all machines. However, several newer machines -have the new interface, Logical Block Address (@dfn{LBA}) mode. GRUB -automatically detects if LBA mode is available and uses it if -available. In LBA mode, GRUB can access the entire disk. - -@item Support network booting -GRUB is basically a disk-based boot loader but also has network -support. You can load OS images from a network by using the @dfn{TFTP} -protocol. - -@item Support remote terminals -To support computers with no console, GRUB provides remote terminal -support, so that you can control GRUB from a remote host. Only serial -terminal support is implemented at the moment. -@end table - - -@node Role of a boot loader -@section The role of a boot loader - -The following is a quotation from Gordon Matzigkeit, a GRUB fanatic: - -@quotation -Some people like to acknowledge both the operating system and kernel when -they talk about their computers, so they might say they use -``GNU/Linux'' or ``GNU/Hurd''. Other people seem to think that the -kernel is the most important part of the system, so they like to call -their GNU operating systems ``Linux systems.'' - -I, personally, believe that this is a grave injustice, because the -@emph{boot loader} is the most important software of all. I used to -refer to the above systems as either ``LILO''@footnote{The LInux LOader, -a boot loader that everybody uses, but nobody likes.} or ``GRUB'' -systems. - -Unfortunately, nobody ever understood what I was talking about; now I -just use the word ``GNU'' as a pseudonym for GRUB. - -So, if you ever hear people talking about their alleged ``GNU'' systems, -remember that they are actually paying homage to the best boot loader -around@dots{} GRUB! -@end quotation - -We, the GRUB maintainers, do not (usually) encourage Gordon's level of -fanaticism, but it helps to remember that boot loaders deserve -recognition. We hope that you enjoy using GNU GRUB as much as we did -writing it. - - -@node Naming convention -@chapter Naming convention - -The device syntax used in GRUB is a wee bit different from what you may -have seen before in your operating system(s), and you need to know it so -that you can specify a drive/partition. - -Look at the following examples and explanations: - -@example -(fd0) -@end example - -First of all, GRUB requires that the device name be enclosed with -@samp{(} and @samp{)}. The @samp{fd} part means that it is a floppy -disk. The number @samp{0} is the drive number, which is counted from -@emph{zero}. This expression means that GRUB will use the whole floppy -disk. - -@example -(hd0,1) -@end example - -Here, @samp{hd} means it is a hard disk drive. The first integer -@samp{0} indicates the drive number, that is, the first hard disk, while -the second integer, @samp{1}, indicates the partition number (or the -@sc{pc} slice number in the BSD terminology). Once again, please note -that the partition numbers are counted from @emph{zero}, not from -one. This expression means the second partition of the first hard disk -drive. In this case, GRUB uses one partition of the disk, instead of the -whole disk. - -@example -(hd0,4) -@end example - -This specifies the first @dfn{extended partition} of the first hard disk -drive. Note that the partition numbers for extended partitions are -counted from @samp{4}, regardless of the actual number of primary -partitions on your hard disk. - -@example -(hd1,a) -@end example - -This means the BSD @samp{a} partition of the second hard disk. If you -need to specify which @sc{pc} slice number should be used, use something -like this: @samp{(hd1,0,a)}. If the @sc{pc} slice number is omitted, -GRUB searches for the first @sc{pc} slice which has a BSD @samp{a} -partition. - -Of course, to actually access the disks or partitions with GRUB, you -need to use the device specification in a command, like @samp{root -(fd0)} or @samp{unhide (hd0,2)}. To help you find out which number -specifies a partition you want, the GRUB command-line -(@pxref{Command-line interface}) options have argument -completion. This means that, for example, you only need to type - -@example -root ( -@end example - -followed by a @key{TAB}, and GRUB will display the list of drives, -partitions, or file names. So it should be quite easy to determine the -name of your target partition, even with minimal knowledge of the -syntax. - -Note that GRUB does @emph{not} distinguish IDE from SCSI - it simply -counts the drive numbers from zero, regardless of their type. Normally, -any IDE drive number is less than any SCSI drive number, although that -is not true if you change the boot sequence by swapping IDE and SCSI -drives in your BIOS. - -Now the question is, how to specify a file? Again, consider an -example: - -@example -(hd0,0)/vmlinuz -@end example - -This specifies the file named @samp{vmlinuz}, found on the first -partition of the first hard disk drive. Note that the argument -completion works with file names, too. - -That was easy, admit it. Now read the next chapter, to find out how to -actually install GRUB on your drive. - - -@node Installation -@chapter Installation - -In order to install GRUB as your boot loader, you need to first -install the GRUB system and utilities under your UNIX-like operating -system (@pxref{Obtaining and Building GRUB}). You can do this either -from the source tarball, or as a package for your OS. - -After you have done that, you need to install the boot loader on a -drive (floppy or hard disk). There are two ways of doing that - either -using the utility @command{grub-install} (@pxref{Invoking -grub-install}) on a UNIX-like OS, or by running GRUB itself from a -floppy. These are quite similar, however the utility might probe a -wrong BIOS drive, so you should be careful. - -Also, if you install GRUB on a UNIX-like OS, please make sure that you -have an emergency boot disk ready, so that you can rescue your computer -if, by any chance, your hard drive becomes unusable (unbootable). - -GRUB comes with boot images, which are normally put in the directory -@file{/usr/lib/grub/i386-pc}. If you do not use grub-install, then -you need to copy the files @file{stage1}, @file{stage2}, and -@file{*stage1_5} to the directory @file{/boot/grub}, and run the -@command{grub-set-default} (@pxref{Invoking grub-set-default}) if you -intend to use @samp{default saved} (@pxref{default}) in your -configuration file. Hereafter, the directory where GRUB images are -initially placed (normally @file{/usr/lib/grub/i386-pc}) will be -called the @dfn{image directory}, and the directory where the boot -loader needs to find them (usually @file{/boot/grub}) will be called -the @dfn{boot directory}. - -@menu -* Creating a GRUB boot floppy:: -* Installing GRUB natively:: -* Installing GRUB using grub-install:: -* Making a GRUB bootable CD-ROM:: -@end menu - - -@node Creating a GRUB boot floppy -@section Creating a GRUB boot floppy - -To create a GRUB boot floppy, you need to take the files @file{stage1} -and @file{stage2} from the image directory, and write them to the first -and the second block of the floppy disk, respectively. - -@strong{Caution:} This procedure will destroy any data currently stored -on the floppy. - -On a UNIX-like operating system, that is done with the following -commands: - -@example -@group -# @kbd{cd /usr/lib/grub/i386-pc} -# @kbd{dd if=stage1 of=/dev/fd0 bs=512 count=1} -1+0 records in -1+0 records out -# @kbd{dd if=stage2 of=/dev/fd0 bs=512 seek=1} -153+1 records in -153+1 records out -# -@end group -@end example - -The device file name may be different. Consult the manual for your OS. - - -@node Installing GRUB natively -@section Installing GRUB natively - -@strong{Caution:} Installing GRUB's stage1 in this manner will erase the -normal boot sector used by an OS. - -GRUB can currently boot GNU Mach, Linux, FreeBSD, NetBSD, and OpenBSD -directly, so using it on a boot sector (the first sector of a -partition) should be okay. But generally, it would be a good idea to -back up the first sector of the partition on which you are installing -GRUB's stage1. This isn't as important if you are installing GRUB on -the first sector of a hard disk, since it's easy to reinitialize it -(e.g. by running @samp{FDISK /MBR} from DOS). - -If you decide to install GRUB in the native environment, which is -definitely desirable, you'll need to create a GRUB boot disk, and -reboot your computer with it. Otherwise, see @ref{Installing GRUB using -grub-install}. - -Once started, GRUB will show the command-line interface -(@pxref{Command-line interface}). First, set the GRUB's @dfn{root -device}@footnote{Note that GRUB's root device doesn't necessarily mean -your OS's root partition; if you need to specify a root partition for -your OS, add the argument into the command @command{kernel}.} to the -partition containing the boot directory, like this: - -@example -grub> @kbd{root (hd0,0)} -@end example - -If you are not sure which partition actually holds this directory, use the -command @command{find} (@pxref{find}), like this: - -@example -grub> @kbd{find /boot/grub/stage1} -@end example - -This will search for the file name @file{/boot/grub/stage1} and show the -devices which contain the file. - -Once you've set the root device correctly, run the command -@command{setup} (@pxref{setup}): - -@example -grub> @kbd{setup (hd0)} -@end example - -This command will install the GRUB boot loader on the Master Boot -Record (MBR) of the first drive. If you want to put GRUB into the boot -sector of a partition instead of putting it in the MBR, specify the -partition into which you want to install GRUB: - -@example -grub> @kbd{setup (hd0,0)} -@end example - -If you install GRUB into a partition or a drive other than the first -one, you must chain-load GRUB from another boot loader. Refer to the -manual for the boot loader to know how to chain-load GRUB. - -After using the setup command, you will boot into GRUB without the -GRUB floppy. See the chapter @ref{Booting} to find out how to boot -your operating systems from GRUB. - - -@node Installing GRUB using grub-install -@section Installing GRUB using grub-install - -@strong{Caution:} This procedure is definitely less safe, because -there are several ways in which your computer can become -unbootable. For example, most operating systems don't tell GRUB how to -map BIOS drives to OS devices correctly---GRUB merely @dfn{guesses} -the mapping. This will succeed in most cases, but not -always. Therefore, GRUB provides you with a map file called the -@dfn{device map}, which you must fix if it is wrong. @xref{Device -map}, for more details. - -If you still do want to install GRUB under a UNIX-like OS (such -as @sc{gnu}), invoke the program @command{grub-install} (@pxref{Invoking -grub-install}) as the superuser (@dfn{root}). - -The usage is basically very simple. You only need to specify one -argument to the program, namely, where to install the boot loader. The -argument can be either a device file (like @samp{/dev/hda}) or a -partition specified in GRUB's notation. For example, under Linux the -following will install GRUB into the MBR of the first IDE disk: - -@example -# @kbd{grub-install /dev/hda} -@end example - -Likewise, under GNU/Hurd, this has the same effect: - -@example -# @kbd{grub-install /dev/hd0} -@end example - -If it is the first BIOS drive, this is the same as well: - -@example -# @kbd{grub-install '(hd0)'} -@end example - -Or you can omit the parentheses: - -@example -# @kbd{grub-install hd0} -@end example - -But all the above examples assume that GRUB should use images under -the root directory. If you want GRUB to use images under a directory -other than the root directory, you need to specify the option -@option{--root-directory}. The typical usage is that you create a GRUB -boot floppy with a filesystem. Here is an example: - -@example -@group -# @kbd{mke2fs /dev/fd0} -# @kbd{mount -t ext2 /dev/fd0 /mnt} -# @kbd{grub-install --root-directory=/mnt fd0} -# @kbd{umount /mnt} -@end group -@end example - -Another example is when you have a separate boot partition -which is mounted at @file{/boot}. Since GRUB is a boot loader, it -doesn't know anything about mount points at all. Thus, you need to run -@command{grub-install} like this: - -@example -# @kbd{grub-install --root-directory=/boot /dev/hda} -@end example - -By the way, as noted above, it is quite difficult to guess BIOS drives -correctly under a UNIX-like OS. Thus, @command{grub-install} will prompt -you to check if it could really guess the correct mappings, after the -installation. The format is defined in @ref{Device map}. Please be -quite careful. If the output is wrong, it is unlikely that your -computer will be able to boot with no problem. - -Note that @command{grub-install} is actually just a shell script and the -real task is done by the grub shell @command{grub} (@pxref{Invoking the -grub shell}). Therefore, you may run @command{grub} directly to install -GRUB, without using @command{grub-install}. Don't do that, however, -unless you are very familiar with the internals of GRUB. Installing a -boot loader on a running OS may be extremely dangerous. - - -@node Making a GRUB bootable CD-ROM -@section Making a GRUB bootable CD-ROM - -GRUB supports the @dfn{no emulation mode} in the El Torito -specification@footnote{El Torito is a specification for bootable CD -using BIOS functions.}. This means that you can use the whole CD-ROM -from GRUB and you don't have to make a floppy or hard disk image file, -which can cause compatibility problems. - -For booting from a CD-ROM, GRUB uses a special Stage 2 called -@file{stage2_eltorito}. The only GRUB files you need to have in your -bootable CD-ROM are this @file{stage2_eltorito} and optionally a config file -@file{menu.lst}. You don't need to use @file{stage1} or @file{stage2}, -because El Torito is quite different from the standard boot process. - -Here is an example of procedures to make a bootable CD-ROM -image. First, make a top directory for the bootable image, say, -@samp{iso}: - -@example -$ @kbd{mkdir iso} -@end example - -Make a directory for GRUB: - -@example -$ @kbd{mkdir -p iso/boot/grub} -@end example - -Copy the file @file{stage2_eltorito}: - -@example -$ @kbd{cp /usr/lib/grub/i386-pc/stage2_eltorito iso/boot/grub} -@end example - -If desired, make the config file @file{menu.lst} under @file{iso/boot/grub} -(@pxref{Configuration}), and copy any files and directories for the disc to the -directory @file{iso/}. - -Finally, make a ISO9660 image file like this: - -@example -$ @kbd{mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot \ - -boot-load-size 4 -boot-info-table -o grub.iso iso} -@end example - -This produces a file named @file{grub.iso}, which then can be burned -into a CD (or a DVD). @kbd{mkisofs} has already set up the disc to boot -from the @kbd{boot/grub/stage2_eltorito} file, so there is no need to -setup GRUB on the disc. (Note that the @kbd{-boot-load-size 4} bit is -required for compatibility with the BIOS on many older machines.) - -You can use the device @samp{(cd)} to access a CD-ROM in your -config file. This is not required; GRUB automatically sets the root device -to @samp{(cd)} when booted from a CD-ROM. It is only necessary to refer to -@samp{(cd)} if you want to access other drives as well. - - -@node Booting -@chapter Booting - -GRUB can load Multiboot-compliant kernels in a consistent way, -but for some free operating systems you need to use some OS-specific -magic. - -@menu -* General boot methods:: How to boot OSes with GRUB generally -* OS-specific notes:: Notes on some operating systems -* Making your system robust:: How to make your system robust -@end menu - - -@node General boot methods -@section How to boot operating systems - -GRUB has two distinct boot methods. One of the two is to load an -operating system directly, and the other is to chain-load another boot -loader which then will load an operating system actually. Generally -speaking, the former is more desirable, because you don't need to -install or maintain other boot loaders and GRUB is flexible enough to -load an operating system from an arbitrary disk/partition. However, -the latter is sometimes required, since GRUB doesn't support all the -existing operating systems natively. - -@menu -* Loading an operating system directly:: -* Chain-loading:: -@end menu - - -@node Loading an operating system directly -@subsection How to boot an OS directly with GRUB - -Multiboot (@pxref{Top, Multiboot Specification, Motivation, multiboot, -The Multiboot Specification}) is the native format supported by GRUB. -For the sake of convenience, there is also support for Linux, FreeBSD, -NetBSD and OpenBSD. If you want to boot other operating systems, you -will have to chain-load them (@pxref{Chain-loading}). - -Generally, GRUB can boot any Multiboot-compliant OS in the following -steps: - -@enumerate -@item -Set GRUB's root device to the drive where the OS images are stored with -the command @command{root} (@pxref{root}). - -@item -Load the kernel image with the command @command{kernel} (@pxref{kernel}). - -@item -If you need modules, load them with the command @command{module} -(@pxref{module}) or @command{modulenounzip} (@pxref{modulenounzip}). - -@item -Run the command @command{boot} (@pxref{boot}). -@end enumerate - -Linux, FreeBSD, NetBSD and OpenBSD can be booted in a similar -manner. You load a kernel image with the command @command{kernel} and -then run the command @command{boot}. If the kernel requires some -parameters, just append the parameters to @command{kernel}, after the -file name of the kernel. Also, please refer to @ref{OS-specific notes}, -for information on your OS-specific issues. - - -@node Chain-loading -@subsection Load another boot loader to boot unsupported operating systems - -If you want to boot an unsupported operating system (e.g. Windows 95), -chain-load a boot loader for the operating system. Normally, the boot -loader is embedded in the @dfn{boot sector} of the partition on which -the operating system is installed. - -@enumerate -@item -Set GRUB's root device to the partition by the command -@command{rootnoverify} (@pxref{rootnoverify}): - -@example -grub> @kbd{rootnoverify (hd0,0)} -@end example - -@item -Set the @dfn{active} flag in the partition using the command -@command{makeactive}@footnote{This is not necessary for most of the -modern operating systems.} (@pxref{makeactive}): - -@example -grub> @kbd{makeactive} -@end example - -@item -Load the boot loader with the command @command{chainloader} -(@pxref{chainloader}): - -@example -grub> @kbd{chainloader +1} -@end example - -@samp{+1} indicates that GRUB should read one sector from the start of -the partition. The complete description about this syntax can be found -in @ref{blocklist syntax}. - -@item -Run the command @command{boot} (@pxref{boot}). -@end enumerate - -However, DOS and Windows have some deficiencies, so you might have to -use more complicated instructions. @xref{DOS/Windows}, for more -information. - - -@node OS-specific notes -@section Some caveats on OS-specific issues - -Here, we describe some caveats on several operating systems. - -@menu -* GNU/Hurd:: -* GNU/Linux:: -* FreeBSD:: -* NetBSD:: -* OpenBSD:: -* DOS/Windows:: -* SCO UnixWare:: -* QNX:: -@end menu - - -@node GNU/Hurd -@subsection GNU/Hurd - -Since GNU/Hurd is Multiboot-compliant, it is easy to boot it; there is -nothing special about it. But do not forget that you have to specify a -root partition to the kernel. - -@enumerate -@item -Set GRUB's root device to the same drive as GNU/Hurd's. Probably the -command @code{find /boot/gnumach} or similar can help you -(@pxref{find}). - -@item -Load the kernel and the module, like this: - -@example -@group -grub> @kbd{kernel /boot/gnumach root=hd0s1} -grub> @kbd{module /boot/serverboot} -@end group -@end example - -@item -Run the command @command{boot} (@pxref{boot}). -@end enumerate - - -@node GNU/Linux -@subsection GNU/Linux - -It is relatively easy to boot GNU/Linux from GRUB, because it somewhat -resembles to boot a Multiboot-compliant OS. - -@enumerate -@item -Set GRUB's root device to the same drive as GNU/Linux's. Probably the -command @code{find /vmlinuz} or similar can help you (@pxref{find}). - -@item -Load the kernel: - -@example -grub> @kbd{kernel /vmlinuz root=/dev/hda1} -@end example - -If you need to specify some kernel parameters, just append them to the -command. For example, to set @option{vga} to @samp{ext}, do this: - -@example -grub> @kbd{kernel /vmlinuz root=/dev/hda1 vga=ext} -@end example - -See the documentation in the Linux source tree for complete -information on the available options. - -@item -If you use an initrd, execute the command @command{initrd} -(@pxref{initrd}) after @command{kernel}: - -@example -grub> @kbd{initrd /initrd} -@end example - -@item -Finally, run the command @command{boot} (@pxref{boot}). -@end enumerate - -@strong{Caution:} If you use an initrd and specify the @samp{mem=} -option to the kernel to let it use less than actual memory size, you -will also have to specify the same memory size to GRUB. To let GRUB know -the size, run the command @command{uppermem} @emph{before} loading the -kernel. @xref{uppermem}, for more information. - - -@node FreeBSD -@subsection FreeBSD - -GRUB can load the kernel directly, either in ELF or a.out format. But -this is not recommended, since FreeBSD's bootstrap interface sometimes -changes heavily, so GRUB can't guarantee to pass kernel parameters -correctly. - -Thus, we'd recommend loading the very flexible loader -@file{/boot/loader} instead. See this example: - -@example -@group -grub> @kbd{root (hd0,a)} -grub> @kbd{kernel /boot/loader} -grub> @kbd{boot} -@end group -@end example - - -@node NetBSD -@subsection NetBSD - -GRUB can load NetBSD a.out and ELF directly, follow these steps: - -@enumerate -@item -Set GRUB's root device with @command{root} (@pxref{root}). - -@item -Load the kernel with @command{kernel} (@pxref{kernel}). You should -append the ugly option @option{--type=netbsd}, if you want to load an -ELF kernel, like this: - -@example -grub> @kbd{kernel --type=netbsd /netbsd-elf} -@end example - -@item -Run @command{boot} (@pxref{boot}). -@end enumerate - -For now, however, GRUB doesn't allow you to pass kernel parameters, so -it may be better to chain-load it instead. For more information, please -see @ref{Chain-loading}. - - -@node OpenBSD -@subsection OpenBSD - -The booting instruction is exactly the same as for NetBSD -(@pxref{NetBSD}). - - -@node DOS/Windows -@subsection DOS/Windows - -GRUB cannot boot DOS or Windows directly, so you must chain-load them -(@pxref{Chain-loading}). However, their boot loaders have some critical -deficiencies, so it may not work to just chain-load them. To overcome -the problems, GRUB provides you with two helper functions. - -If you have installed DOS (or Windows) on a non-first hard disk, you -have to use the disk swapping technique, because that OS cannot boot -from any disks but the first one. The workaround used in GRUB is the -command @command{map} (@pxref{map}), like this: - -@example -@group -grub> @kbd{map (hd0) (hd1)} -grub> @kbd{map (hd1) (hd0)} -@end group -@end example - -This performs a @dfn{virtual} swap between your first and second hard -drive. - -@strong{Caution:} This is effective only if DOS (or Windows) uses BIOS -to access the swapped disks. If that OS uses a special driver for the -disks, this probably won't work. - -Another problem arises if you installed more than one set of DOS/Windows -onto one disk, because they could be confused if there are more than one -primary partitions for DOS/Windows. Certainly you should avoid doing -this, but there is a solution if you do want to do so. Use the partition -hiding/unhiding technique. - -If GRUB @dfn{hide}s a DOS (or Windows) partition (@pxref{hide}), DOS (or -Windows) will ignore the partition. If GRUB @dfn{unhide}s a DOS (or -Windows) partition (@pxref{unhide}), DOS (or Windows) will detect the -partition. Thus, if you have installed DOS (or Windows) on the first -and the second partition of the first hard disk, and you want to boot -the copy on the first partition, do the following: - -@example -@group -grub> @kbd{unhide (hd0,0)} -grub> @kbd{hide (hd0,1)} -grub> @kbd{rootnoverify (hd0,0)} -grub> @kbd{chainloader +1} -grub> @kbd{makeactive} -grub> @kbd{boot} -@end group -@end example - - -@node SCO UnixWare -@subsection SCO UnixWare - -It is known that the signature in the boot loader for SCO UnixWare is -wrong, so you will have to specify the option @option{--force} to -@command{chainloader} (@pxref{chainloader}), like this: - -@example -@group -grub> @kbd{rootnoverify (hd1,0)} -grub> @kbd{chainloader --force +1} -grub> @kbd{makeactive} -grub> @kbd{boot} -@end group -@end example - - -@node QNX -@subsection QNX - -QNX seems to use a bigger boot loader, so you need to boot it up, like -this: - -@example -@group -grub> @kbd{rootnoverify (hd1,1)} -grub> @kbd{chainloader +4} -grub> @kbd{boot} -@end group -@end example - - -@node Making your system robust -@section How to make your system robust - -When you test a new kernel or a new OS, it is important to make sure -that your computer can boot even if the new system is unbootable. This -is crucial especially if you maintain servers or remote systems. To -accomplish this goal, you need to set up two things: - -@enumerate -@item -You must maintain a system which is always bootable. For instance, if -you test a new kernel, you need to keep a working kernel in a -different place. And, it would sometimes be very nice to even have a -complete copy of a working system in a different partition or disk. - -@item -You must direct GRUB to boot a working system when the new system -fails. This is possible with the @dfn{fallback} system in GRUB. -@end enumerate - -The former requirement is very specific to each OS, so this -documentation does not cover that topic. It is better to consult some -backup tools. - -So let's see the GRUB part. There are two possibilities: one of them -is quite simple but not very robust, and the other is a bit complex to -set up but probably the best solution to make sure that your system -can start as long as GRUB itself is bootable. - -@menu -* Booting once-only:: -* Booting fallback systems:: -@end menu - - -@node Booting once-only -@subsection Booting once-only - -You can teach GRUB to boot an entry only at next boot time. Suppose -that your have an old kernel @file{old_kernel} and a new kernel -@file{new_kernel}. You know that @file{old_kernel} can boot -your system correctly, and you want to test @file{new_kernel}. - -To ensure that your system will go back to the old kernel even if the -new kernel fails (e.g. it panics), you can specify that GRUB should -try the new kernel only once and boot the old kernel after that. - -First, modify your configuration file. Here is an example: - -@example -@group -default saved # This is important!!! -timeout 10 - -title the old kernel -root (hd0,0) -kernel /old_kernel -savedefault - -title the new kernel -root (hd0,0) -kernel /new_kernel -savedefault 0 # This is important!!! -@end group -@end example - -Note that this configuration file uses @samp{default saved} -(@pxref{default}) at the head and @samp{savedefault 0} -(@pxref{savedefault}) in the entry for the new kernel. This means -that GRUB boots a saved entry by default, and booting the entry for the -new kernel saves @samp{0} as the saved entry. - -With this configuration file, after all, GRUB always tries to boot the -old kernel after it booted the new one, because @samp{0} is the entry -of @code{the old kernel}. - -The next step is to tell GRUB to boot the new kernel at next boot -time. For this, execute @command{grub-set-default} (@pxref{Invoking -grub-set-default}): - -@example -# @kbd{grub-set-default 1} -@end example - -This command sets the saved entry to @samp{1}, that is, to the new -kernel. - -This method is useful, but still not very robust, because GRUB stops -booting, if there is any error in the boot entry, such that the new -kernel has an invalid executable format. Thus, it it even better to -use the @dfn{fallback} mechanism of GRUB. Look at next subsection for -this feature. - - -@node Booting fallback systems -@subsection Booting fallback systems - -GRUB supports a fallback mechanism of booting one or more other -entries if a default boot entry fails. You can specify multiple -fallback entries if you wish. - -Suppose that you have three systems, @samp{A}, @samp{B} and -@samp{C}. @samp{A} is a system which you want to boot by -default. @samp{B} is a backup system which is supposed to boot -safely. @samp{C} is another backup system which is used in case where -@samp{B} is broken. - -Then you may want GRUB to boot the first system which is bootable -among @samp{A}, @samp{B} and @samp{C}. A configuration file can be -written in this way: - -@example -@group -default saved # This is important!!! -timeout 10 -fallback 1 2 # This is important!!! - -title A -root (hd0,0) -kernel /kernel -savedefault fallback # This is important!!! - -title B -root (hd1,0) -kernel /kernel -savedefault fallback # This is important!!! - -title C -root (hd2,0) -kernel /kernel -savedefault -@end group -@end example - -Note that @samp{default saved} (@pxref{default}), @samp{fallback 1 2} -and @samp{savedefault fallback} are used. GRUB will boot a saved entry -by default and save a fallback entry as next boot entry with this -configuration. - -When GRUB tries to boot @samp{A}, GRUB saves @samp{1} as next boot -entry, because the command @command{fallback} specifies that @samp{1} -is the first fallback entry. The entry @samp{1} is @samp{B}, so GRUB -will try to boot @samp{B} at next boot time. - -Likewise, when GRUB tries to boot @samp{B}, GRUB saves @samp{2} as -next boot entry, because @command{fallback} specifies @samp{2} as next -fallback entry. This makes sure that GRUB will boot @samp{C} after -booting @samp{B}. - -It is noteworthy that GRUB uses fallback entries both when GRUB -itself fails in booting an entry and when @samp{A} or @samp{B} fails -in starting up your system. So this solution ensures that your system -is started even if GRUB cannot find your kernel or if your kernel -panics. - -However, you need to run @command{grub-set-default} (@pxref{Invoking -grub-set-default}) when @samp{A} starts correctly or you fix @samp{A} -after it crashes, since GRUB always sets next boot entry to a fallback -entry. You should run this command in a startup script such as -@file{rc.local} to boot @samp{A} by default: - -@example -# @kbd{grub-set-default 0} -@end example - -where @samp{0} is the number of the boot entry for the system -@samp{A}. - -If you want to see what is current default entry, you can look at the -file @file{/boot/grub/default} (or @file{/grub/default} in -some systems). Because this file is plain-text, you can just -@command{cat} this file. But it is strongly recommended @strong{not to -modify this file directly}, because GRUB may fail in saving a default -entry in this file, if you change this file in an unintended -manner. Therefore, you should use @command{grub-set-default} when you -need to change the default entry. - - -@node Configuration -@chapter Configuration - -You've probably noticed that you need to type several commands to boot your -OS. There's a solution to that - GRUB provides a menu interface -(@pxref{Menu interface}) from which you can select an item (using arrow -keys) that will do everything to boot an OS. - -To enable the menu, you need a configuration file, -@file{menu.lst} under the boot directory. We'll analyze an example -file. - -The file first contains some general settings, the menu interface -related options. You can put these commands (@pxref{Menu-specific -commands}) before any of the items (starting with @command{title} -(@pxref{title})). - -@example -@group -# -# Sample boot menu configuration file -# -@end group -@end example - -As you may have guessed, these lines are comments. Lines starting with a -hash character (@samp{#}), and blank lines, are ignored by GRUB. - -@example -@group -# By default, boot the first entry. -default 0 -@end group -@end example - -The first entry (here, counting starts with number zero, not one!) will -be the default choice. - -@example -@group -# Boot automatically after 30 secs. -timeout 30 -@end group -@end example - -As the comment says, GRUB will boot automatically in 30 seconds, unless -interrupted with a key press. - -@example -@group -# Fallback to the second entry. -fallback 1 -@end group -@end example - -If, for any reason, the default entry doesn't work, fall back to the -second one (this is rarely used, for obvious reasons). - -Note that the complete descriptions of these commands, which are menu -interface specific, can be found in @ref{Menu-specific -commands}. Other descriptions can be found in @ref{Commands}. - -Now, on to the actual OS definitions. You will see that each entry -begins with a special command, @command{title} (@pxref{title}), and the -action is described after it. Note that there is no command -@command{boot} (@pxref{boot}) at the end of each item. That is because -GRUB automatically executes @command{boot} if it loads other commands -successfully. - -The argument for the command @command{title} is used to display a short -title/description of the entry in the menu. Since @command{title} -displays the argument as is, you can write basically anything there. - -@example -@group -# For booting GNU/Hurd -title GNU/Hurd -root (hd0,0) -kernel /boot/gnumach.gz root=hd0s1 -module /boot/serverboot.gz -@end group -@end example - -This boots GNU/Hurd from the first hard disk. - -@example -@group -# For booting GNU/Linux -title GNU/Linux -kernel (hd1,0)/vmlinuz root=/dev/hdb1 -@end group -@end example - -This boots GNU/Linux, but from the second hard disk. - -@example -@group -# For booting Mach (getting kernel from floppy) -title Utah Mach4 multiboot -root (hd0,2) -pause Insert the diskette now^G!! -kernel (fd0)/boot/kernel root=hd0s3 -module (fd0)/boot/bootstrap -@end group -@end example - -This boots Mach with a kernel on a floppy, but the root filesystem at -hd0s3. It also contains a @command{pause} line (@pxref{pause}), which -will cause GRUB to display a prompt and delay, before actually executing -the rest of the commands and booting. - -@example -@group -# For booting FreeBSD -title FreeBSD -root (hd0,2,a) -kernel /boot/loader -@end group -@end example - -This item will boot FreeBSD kernel loaded from the @samp{a} partition of -the third @sc{pc} slice of the first hard disk. - -@example -@group -# For booting OS/2 -title OS/2 -root (hd0,1) -makeactive -# chainload OS/2 bootloader from the first sector -chainloader +1 -# This is similar to "chainload", but loads a specific file -#chainloader /boot/chain.os2 -@end group -@end example - -This will boot OS/2, using a chain-loader (@pxref{Chain-loading}). - -@example -@group -# For booting Windows NT or Windows95 -title Windows NT / Windows 95 boot menu -root (hd0,0) -makeactive -chainloader +1 -# For loading DOS if Windows NT is installed -# chainload /bootsect.dos -@end group -@end example - -The same as the above, but for Windows. - -@example -@group -# For installing GRUB into the hard disk -title Install GRUB into the hard disk -root (hd0,0) -setup (hd0) -@end group -@end example - -This will just (re)install GRUB onto the hard disk. - -@example -# Change the colors. -title Change the colors -color light-green/brown blink-red/blue -@end example - -In the last entry, the command @command{color} is used (@pxref{color}), -to change the menu colors (try it!). This command is somewhat special, -because it can be used both in the command-line and in the menu. GRUB -has several such commands, see @ref{General commands}. - -We hope that you now understand how to use the basic features of -GRUB. To learn more about GRUB, see the following chapters. - - -@node Network -@chapter Downloading OS images from a network - -Although GRUB is a disk-based boot loader, it does provide network -support. To use the network support, you need to enable at least one -network driver in the GRUB build process. For more information please -see @file{netboot/README.netboot} in the source distribution. - -@menu -* General usage of network support:: -* Diskless:: -@end menu - - -@node General usage of network support -@section How to set up your network - -GRUB requires a file server and optionally a server that will assign an -IP address to the machine on which GRUB is running. For the former, only -TFTP is supported at the moment. The latter is either BOOTP, DHCP or a -RARP server@footnote{RARP is not advised, since it cannot serve much -information}. It is not necessary to run both the servers on one -computer. How to configure these servers is beyond the scope of this -document, so please refer to the manuals specific to those -protocols/servers. - -If you decided to use a server to assign an IP address, set up the -server and run @command{bootp} (@pxref{bootp}), @command{dhcp} -(@pxref{dhcp}) or @command{rarp} (@pxref{rarp}) for BOOTP, DHCP or RARP, -respectively. Each command will show an assigned IP address, a netmask, -an IP address for your TFTP server and a gateway. If any of the -addresses is wrong or it causes an error, probably the configuration of -your servers isn't set up properly. - -Otherwise, run @command{ifconfig}, like this: - -@example -grub> @kbd{ifconfig --address=192.168.110.23 --server=192.168.110.14} -@end example - -You can also use @command{ifconfig} in conjunction with @command{bootp}, -@command{dhcp} or @command{rarp} (e.g. to reassign the server address -manually). @xref{ifconfig}, for more details. - -Finally, download your OS images from your network. The network can be -accessed using the network drive @samp{(nd)}. Everything else is very -similar to the normal instructions (@pxref{Booting}). - -Here is an example: - -@example -@group -grub> @kbd{bootp} -Probing... [NE*000] -NE2000 base ... -Address: 192.168.110.23 Netmask: 255.255.255.0 -Server: 192.168.110.14 Gateway: 192.168.110.1 - -grub> @kbd{root (nd)} -grub> @kbd{kernel /tftproot/gnumach.gz root=sd0s1} -grub> @kbd{module /tftproot/serverboot.gz} -grub> @kbd{boot} -@end group -@end example - - -@node Diskless -@section Booting from a network - -It is sometimes very useful to boot from a network, especially when you -use a machine which has no local disk. In this case, you need to obtain -a kind of Net Boot @sc{rom}, such as a PXE @sc{rom} or a free software -package like Etherboot. Such a Boot @sc{rom} first boots the machine, -sets up the network card installed into the machine, and downloads a -second stage boot image from the network. Then, the second image will -try to boot an operating system actually from the network. - -GRUB provides two second stage images, @file{nbgrub} and -@file{pxegrub} (@pxref{Images}). These images are the same as the -normal Stage 2, except that they set up a network automatically, and try -to load a configuration file from the network, if specified. The usage -is very simple: If the machine has a PXE @sc{rom}, use -@file{pxegrub}. If the machine has an NBI loader such as Etherboot, use -@file{nbgrub}. There is no difference between them except their -formats. Since the way to load a second stage image you want to use -should be described in the manual on your Net Boot @sc{rom}, please -refer to the manual, for more information. - -However, there is one thing specific to GRUB. Namely, how to specify a -configuration file in a BOOTP/DHCP server. For now, GRUB uses the tag -@samp{150}, to get the name of a configuration file. The following is an -example with a BOOTP configuration: - -@example -@group -.allhost:hd=/tmp:bf=null:\ - :ds=145.71.35.1 145.71.32.1:\ - :sm=255.255.254.0:\ - :gw=145.71.35.1:\ - :sa=145.71.35.5: - -foo:ht=1:ha=63655d0334a7:ip=145.71.35.127:\ - :bf=/nbgrub:\ - :tc=.allhost:\ - :T150="(nd)/tftpboot/menu.lst.foo": -@end group -@end example - -Note that you should specify the drive name @code{(nd)} in the name of -the configuration file. This is because you might change the root drive -before downloading the configuration from the TFTP server when the -preset menu feature is used (@pxref{Preset Menu}). - -See the manual of your BOOTP/DHCP server for more information. The -exact syntax should differ a little from the example. - - -@node Serial terminal -@chapter Using GRUB via a serial line - -This chapter describes how to use the serial terminal support in GRUB. - -If you have many computers or computers with no display/keyboard, it -could be very useful to control the computers through serial -communications. To connect one computer with another via a serial line, -you need to prepare a null-modem (cross) serial cable, and you may need -to have multiport serial boards, if your computer doesn't have extra -serial ports. In addition, a terminal emulator is also required, such as -minicom. Refer to a manual of your operating system, for more -information. - -As for GRUB, the instruction to set up a serial terminal is quite -simple. First of all, make sure that you haven't specified the option -@option{--disable-serial} to the configure script when you built your -GRUB images. If you get them in binary form, probably they have serial -terminal support already. - -Then, initialize your serial terminal after GRUB starts up. Here is an -example: - -@example -@group -grub> @kbd{serial --unit=0 --speed=9600} -grub> @kbd{terminal serial} -@end group -@end example - -The command @command{serial} initializes the serial unit 0 with the -speed 9600bps. The serial unit 0 is usually called @samp{COM1}, so, if -you want to use COM2, you must specify @samp{--unit=1} instead. This -command accepts many other options, so please refer to @ref{serial}, -for more details. - -The command @command{terminal} (@pxref{terminal}) chooses which type of -terminal you want to use. In the case above, the terminal will be a -serial terminal, but you can also pass @code{console} to the command, -as @samp{terminal serial console}. In this case, a terminal in which -you press any key will be selected as a GRUB terminal. - -However, note that GRUB assumes that your terminal emulator is -compatible with VT100 by default. This is true for most terminal -emulators nowadays, but you should pass the option @option{--dumb} to -the command if your terminal emulator is not VT100-compatible or -implements few VT100 escape sequences. If you specify this option then -GRUB provides you with an alternative menu interface, because the normal -menu requires several fancy features of your terminal. - - -@node Preset Menu -@chapter Embedding a configuration file into GRUB - -GRUB supports a @dfn{preset menu} which is to be always loaded before -starting. The preset menu feature is useful, for example, when your -computer has no console but a serial cable. In this case, it is -critical to set up the serial terminal as soon as possible, since you -cannot see any message until the serial terminal begins to work. So it -is good to run the commands @command{serial} (@pxref{serial}) and -@command{terminal} (@pxref{terminal}) before anything else at the -start-up time. - -How the preset menu works is slightly complicated: - -@enumerate -@item -GRUB checks if the preset menu feature is used, and loads the preset -menu, if available. This includes running commands and reading boot -entries, like an ordinary configuration file. - -@item -GRUB checks if the configuration file is available. Note that this check -is performed @strong{regardless of the existence of the preset -menu}. The configuration file is loaded even if the preset menu was -loaded. - -@item -If the preset menu includes any boot entries, they are cleared when -the configuration file is loaded. It doesn't matter whether the -configuration file has any entries or no entry. The boot entries in the -preset menu are used only when GRUB fails in loading the configuration -file. -@end enumerate - -To enable the preset menu feature, you must rebuild GRUB specifying a -file to the configure script with the option -@option{--enable-preset-menu}. The file has the same semantics as -normal configuration files (@pxref{Configuration}). - -Another point you should take care is that the diskless support -(@pxref{Diskless}) diverts the preset menu. Diskless images embed a -preset menu to execute the command @command{bootp} (@pxref{bootp}) -automatically, unless you specify your own preset menu to the configure -script. This means that you must put commands to initialize a network in -the preset menu yourself, because diskless images don't set it up -implicitly, when you use the preset menu explicitly. - -Therefore, a typical preset menu used with diskless support would be -like this: - -@example -@group -# Set up the serial terminal, first of all. -serial --unit=0 --speed=19200 -terminal --timeout=0 serial - -# Initialize the network. -dhcp -@end group -@end example - - -@node Security -@chapter Protecting your computer from cracking - -You may be interested in how to prevent ordinary users from doing -whatever they like, if you share your computer with other people. So -this chapter describes how to improve the security of GRUB. - -One thing which could be a security hole is that the user can do too -many things with GRUB, because GRUB allows one to modify its configuration -and run arbitrary commands at run-time. For example, the user can even -read @file{/etc/passwd} in the command-line interface by the command -@command{cat} (@pxref{cat}). So it is necessary to disable all the -interactive operations. - -Thus, GRUB provides a @dfn{password} feature, so that only administrators -can start the interactive operations (i.e. editing menu entries and -entering the command-line interface). To use this feature, you need to -run the command @command{password} in your configuration file -(@pxref{password}), like this: - -@example -password --md5 PASSWORD -@end example - -If this is specified, GRUB disallows any interactive control, until you -press the key @key{p} and enter a correct password. The option -@option{--md5} tells GRUB that @samp{PASSWORD} is in MD5 format. If it -is omitted, GRUB assumes the @samp{PASSWORD} is in clear text. - -You can encrypt your password with the command @command{md5crypt} -(@pxref{md5crypt}). For example, run the grub shell (@pxref{Invoking the -grub shell}), and enter your password: - -@example -@group -grub> md5crypt -Password: ********** -Encrypted: $1$U$JK7xFegdxWH6VuppCUSIb. -@end group -@end example - -Then, cut and paste the encrypted password to your configuration file. - -Also, you can specify an optional argument to @command{password}. See -this example: - -@example -password PASSWORD /boot/grub/menu-admin.lst -@end example - -In this case, GRUB will load @file{/boot/grub/menu-admin.lst} as a -configuration file when you enter the valid password. - -Another thing which may be dangerous is that any user can choose any -menu entry. Usually, this wouldn't be problematic, but you might want to -permit only administrators to run some of your menu entries, such as an -entry for booting an insecure OS like DOS. - -GRUB provides the command @command{lock} (@pxref{lock}). This command -always fails until you enter the valid password, so you can use it, like -this: - -@example -@group -title Boot DOS -lock -rootnoverify (hd0,1) -makeactive -chainload +1 -@end group -@end example - -You should insert @command{lock} right after @command{title}, because -any user can execute commands in an entry until GRUB encounters -@command{lock}. - -You can also use the command @command{password} instead of -@command{lock}. In this case the boot process will ask for the password -and stop if it was entered incorrectly. Since the @command{password} -takes its own @var{PASSWORD} argument this is useful if you want -different passwords for different entries. - - -@node Images -@chapter GRUB image files - -GRUB consists of several images: two essential stages, optional stages -called @dfn{Stage 1.5}, one image for bootable CD-ROM, and two network -boot images. Here is a short overview of them. @xref{Internals}, for -more details. - -@table @file -@item stage1 -This is an essential image used for booting up GRUB. Usually, this is -embedded in an MBR or the boot sector of a partition. Because a PC boot -sector is 512 bytes, the size of this image is exactly 512 bytes. - -All @file{stage1} must do is to load Stage 2 or Stage 1.5 from a local -disk. Because of the size restriction, @file{stage1} encodes the -location of Stage 2 (or Stage 1.5) in a blocklist format, so it never -understand any filesystem structure. - -@item stage2 -This is the core image of GRUB. It does everything but booting up -itself. Usually, this is put in a filesystem, but that is not required. - -@item e2fs_stage1_5 -@itemx fat_stage1_5 -@itemx ffs_stage1_5 -@itemx jfs_stage1_5 -@itemx minix_stage1_5 -@itemx reiserfs_stage1_5 -@itemx vstafs_stage1_5 -@itemx xfs_stage1_5 - -These are called @dfn{Stage 1.5}, because they serve as a bridge -between @file{stage1} and @file{stage2}, that is to say, Stage 1.5 is -loaded by Stage 1 and Stage 1.5 loads Stage 2. The difference between -@file{stage1} and @file{*_stage1_5} is that the former doesn't -understand any filesystem while the latter understands one filesystem -(e.g. @file{e2fs_stage1_5} understands ext2fs). So you can move the -Stage 2 image to another location safely, even after GRUB has been -installed. - -While Stage 2 cannot generally be embedded in a fixed area as the size -is so large, Stage 1.5 can be installed into the area right after an MBR, -or the boot loader area of a ReiserFS or a FFS. - -@item stage2_eltorito -This is a boot image for CD-ROMs using the @dfn{no emulation mode} in -El Torito specification. This is identical to Stage 2, except that -this boots up without Stage 1 and sets up a special drive @samp{(cd)}. - -@item nbgrub -This is a network boot image for the Network Image Proposal used by some -network boot loaders, such as Etherboot. This is mostly the same as -Stage 2, but it also sets up a network and loads a configuration file -from the network. - -@item pxegrub -This is another network boot image for the Preboot Execution Environment -used by several Netboot ROMs. This is identical to @file{nbgrub}, except -for the format. -@end table - - -@node Filesystem -@chapter Filesystem syntax and semantics - -GRUB uses a special syntax for specifying disk drives which can be -accessed by BIOS. Because of BIOS limitations, GRUB cannot distinguish -between IDE, ESDI, SCSI, or others. You must know yourself which BIOS -device is equivalent to which OS device. Normally, that will be clear if -you see the files in a device or use the command @command{find} -(@pxref{find}). - -@menu -* Device syntax:: How to specify devices -* File name syntax:: How to specify files -* blocklist syntax:: How to specify blocklists -@end menu - - -@node Device syntax -@section How to specify devices - -The device syntax is like this: - -@example -@code{(@var{device}[,@var{part-num}][,@var{bsd-subpart-letter}])} -@end example - -@samp{[]} means the parameter is optional. @var{device} should be -either @samp{fd} or @samp{hd} followed by a digit, like @samp{fd0}. -But you can also set @var{device} to a hexadecimal or a decimal number -which is a BIOS drive number, so the following are equivalent: - -@example -(hd0) -(0x80) -(128) -@end example - -@var{part-num} represents the partition number of @var{device}, starting -from zero for primary partitions and from four for extended partitions, -and @var{bsd-subpart-letter} represents the BSD disklabel subpartition, -such as @samp{a} or @samp{e}. - -A shortcut for specifying BSD subpartitions is -@code{(@var{device},@var{bsd-subpart-letter})}, in this case, GRUB -searches for the first PC partition containing a BSD disklabel, then -finds the subpartition @var{bsd-subpart-letter}. Here is an example: - -@example -(hd0,a) -@end example - -The syntax @samp{(hd0)} represents using the entire disk (or the -MBR when installing GRUB), while the syntax @samp{(hd0,0)} -represents using the first partition of the disk (or the boot sector -of the partition when installing GRUB). - -If you enabled the network support, the special drive, @samp{(nd)}, is -also available. Before using the network drive, you must initialize the -network. @xref{Network}, for more information. - -If you boot GRUB from a CD-ROM, @samp{(cd)} is available. @xref{Making -a GRUB bootable CD-ROM}, for details. - - -@node File name syntax -@section How to specify files - -There are two ways to specify files, by @dfn{absolute file name} and by -@dfn{blocklist}. - -An absolute file name resembles a Unix absolute file name, using -@samp{/} for the directory separator (not @samp{\} as in DOS). One -example is @samp{(hd0,0)/boot/grub/menu.lst}. This means the file -@file{/boot/grub/menu.lst} in the first partition of the first hard -disk. If you omit the device name in an absolute file name, GRUB uses -GRUB's @dfn{root device} implicitly. So if you set the root device to, -say, @samp{(hd1,0)} by the command @command{root} (@pxref{root}), then -@code{/boot/kernel} is the same as @code{(hd1,0)/boot/kernel}. - - -@node blocklist syntax -@section How to specify blocklists - -A blocklist is used for specifying a file that doesn't appear in the -filesystem, like a chainloader. The syntax is -@code{[@var{offset}]+@var{length}[,[@var{offset}]+@var{length}]@dots{}}. -Here is an example: - -@example -@code{0+100,200+1,300+300} -@end example - -This represents that GRUB should read blocks 0 through 99, block 200, -and blocks 300 through 599. If you omit an offset, then GRUB assumes -the offset is zero. - -Like the file name syntax (@pxref{File name syntax}), if a blocklist -does not contain a device name, then GRUB uses GRUB's @dfn{root -device}. So @code{(hd0,1)+1} is the same as @code{+1} when the root -device is @samp{(hd0,1)}. - - -@node Interface -@chapter GRUB's user interface - -GRUB has both a simple menu interface for choosing preset entries from a -configuration file, and a highly flexible command-line for performing -any desired combination of boot commands. - -GRUB looks for its configuration file as soon as it is loaded. If one -is found, then the full menu interface is activated using whatever -entries were found in the file. If you choose the @dfn{command-line} menu -option, or if the configuration file was not found, then GRUB drops to -the command-line interface. - -@menu -* Command-line interface:: The flexible command-line interface -* Menu interface:: The simple menu interface -* Menu entry editor:: Editing a menu entry -* Hidden menu interface:: The hidden menu interface -@end menu - - -@node Command-line interface -@section The flexible command-line interface - -The command-line interface provides a prompt and after it an editable -text area much like a command-line in Unix or DOS. Each command is -immediately executed after it is entered@footnote{However, this -behavior will be changed in the future version, in a user-invisible -way.}. The commands (@pxref{Command-line and menu entry commands}) are a -subset of those available in the configuration file, used with exactly -the same syntax. - -Cursor movement and editing of the text on the line can be done via a -subset of the functions available in the Bash shell: - -@table @key -@item C-f -@itemx PC right key -Move forward one character. - -@item C-b -@itemx PC left key -Move back one character. - -@item C-a -@itemx HOME -Move to the start of the line. - -@item C-e -@itemx END -Move the the end of the line. - -@item C-d -@itemx DEL -Delete the character underneath the cursor. - -@item C-h -@itemx BS -Delete the character to the left of the cursor. - -@item C-k -Kill the text from the current cursor position to the end of the line. - -@item C-u -Kill backward from the cursor to the beginning of the line. - -@item C-y -Yank the killed text back into the buffer at the cursor. - -@item C-p -@itemx PC up key -Move up through the history list. - -@item C-n -@itemx PC down key -Move down through the history list. -@end table - -When typing commands interactively, if the cursor is within or before -the first word in the command-line, pressing the @key{TAB} key (or -@key{C-i}) will display a listing of the available commands, and if the -cursor is after the first word, the @kbd{@key{TAB}} will provide a -completion listing of disks, partitions, and file names depending on the -context. Note that to obtain a list of drives, one must open a -parenthesis, as @command{root (}. - -Note that you cannot use the completion functionality in the TFTP -filesystem. This is because TFTP doesn't support file name listing for -the security. - - -@node Menu interface -@section The simple menu interface - -The menu interface is quite easy to use. Its commands are both -reasonably intuitive and described on screen. - -Basically, the menu interface provides a list of @dfn{boot entries} to -the user to choose from. Use the arrow keys to select the entry of -choice, then press @key{RET} to run it. An optional timeout is -available to boot the default entry (the first one if not set), which is -aborted by pressing any key. - -Commands are available to enter a bare command-line by pressing @key{c} -(which operates exactly like the non-config-file version of GRUB, but -allows one to return to the menu if desired by pressing @key{ESC}) or to -edit any of the @dfn{boot entries} by pressing @key{e}. - -If you protect the menu interface with a password (@pxref{Security}), -all you can do is choose an entry by pressing @key{RET}, or press -@key{p} to enter the password. - - -@node Menu entry editor -@section Editing a menu entry - -The menu entry editor looks much like the main menu interface, but the -lines in the menu are individual commands in the selected entry instead -of entry names. - -If an @key{ESC} is pressed in the editor, it aborts all the changes made -to the configuration entry and returns to the main menu interface. - -When a particular line is selected, the editor places the user in a -special version of the GRUB command-line to edit that line. When the -user hits @key{RET}, GRUB replaces the line in question in the boot -entry with the changes (unless it was aborted via @key{ESC}, -in which case the changes are thrown away). - -If you want to add a new line to the menu entry, press @key{o} if adding -a line after the current line or press @key{O} if before the current -line. - -To delete a line, hit the key @key{d}. Although GRUB unfortunately -does not support @dfn{undo}, you can do almost the same thing by just -returning to the main menu. - - -@node Hidden menu interface -@section The hidden menu interface - -When your terminal is dumb or you request GRUB to hide the menu -interface explicitly with the command @command{hiddenmenu} -(@pxref{hiddenmenu}), GRUB doesn't show the menu interface (@pxref{Menu -interface}) and automatically boots the default entry, unless -interrupted by pressing @key{ESC}. - -When you interrupt the timeout and your terminal is dumb, GRUB falls -back to the command-line interface (@pxref{Command-line interface}). - - -@node Commands -@chapter The list of available commands - -In this chapter, we list all commands that are available in GRUB. - -Commands belong to different groups. A few can only be used in -the global section of the configuration file (or ``menu''); most -of them can be entered on the command-line and can be used either -anywhere in the menu or specifically in the menu entries. - -@menu -* Menu-specific commands:: -* General commands:: -* Command-line and menu entry commands:: -@end menu - - -@node Menu-specific commands -@section The list of commands for the menu only - -The semantics used in parsing the configuration file are the following: - -@itemize @bullet -@item -The menu-specific commands have to be used before any others. - -@item -The files @emph{must} be in plain-text format. - -@item -@samp{#} at the beginning of a line in a configuration file means it is -only a comment. - -@item -Options are separated by spaces. - -@item -All numbers can be either decimal or hexadecimal. A hexadecimal number -must be preceded by @samp{0x}, and is case-insensitive. - -@item -Extra options or text at the end of the line are ignored unless otherwise -specified. - -@item -Unrecognized commands are added to the current entry, except before entries -start, where they are ignored. -@end itemize - -These commands can only be used in the menu: - -@menu -* default:: Set the default entry -* fallback:: Set the fallback entry -* hiddenmenu:: Hide the menu interface -* timeout:: Set the timeout -* title:: Start a menu entry -@end menu - - -@node default -@subsection default - -@deffn Command default num -Set the default entry to the entry number @var{num}. Numbering starts -from 0, and the entry number 0 is the default if the command is not -used. - -You can specify @samp{saved} instead of a number. In this case, the -default entry is the entry saved with the command -@command{savedefault}. @xref{savedefault}, for more information. -@end deffn - - -@node fallback -@subsection fallback - -@deffn Command fallback num... -Go into unattended boot mode: if the default boot entry has any errors, -instead of waiting for the user to do something, immediately start -over using the @var{num} entry (same numbering as the @code{default} -command (@pxref{default})). This obviously won't help if the machine was -rebooted by a kernel that GRUB loaded. You can specify multiple -fallback entry numbers. -@end deffn - - -@node hiddenmenu -@subsection hiddenmenu - -@deffn Command hiddenmenu -Don't display the menu. If the command is used, no menu will be -displayed on the control terminal, and the default entry will be -booted after the timeout expired. The user can still request the -menu to be displayed by pressing @key{ESC} before the timeout -expires. See also @ref{Hidden menu interface}. -@end deffn - - -@node timeout -@subsection timeout - -@deffn Command timeout sec -Set a timeout, in @var{sec} seconds, before automatically booting the -default entry (normally the first entry defined). -@end deffn - - -@node title -@subsection title - -@deffn Command title name @dots{} -Start a new boot entry, and set its name to the contents of the rest of -the line, starting with the first non-space character. -@end deffn - - -@node General commands -@section The list of general commands - -Commands usable anywhere in the menu and in the command-line. - -@menu -* bootp:: Initialize a network device via BOOTP -* color:: Color the menu interface -* device:: Specify a file as a drive -* dhcp:: Initialize a network device via DHCP -* hide:: Hide a partition -* ifconfig:: Configure a network device manually -* pager:: Change the state of the internal pager -* partnew:: Make a primary partition -* parttype:: Change the type of a partition -* password:: Set a password for the menu interface -* rarp:: Initialize a network device via RARP -* serial:: Set up a serial device -* setkey:: Configure the key map -* terminal:: Choose a terminal -* terminfo:: Define escape sequences for a terminal -* tftpserver:: Specify a TFTP server -* unhide:: Unhide a partition -@end menu - - -@node bootp -@subsection bootp - -@deffn Command bootp [@option{--with-configfile}] -Initialize a network device via the @dfn{BOOTP} protocol. This command -is only available if GRUB is compiled with netboot support. See also -@ref{Network}. - -If you specify @option{--with-configfile} to this command, GRUB will -fetch and load a configuration file specified by your BOOTP server -with the vendor tag @samp{150}. -@end deffn - - -@node color -@subsection color - -@deffn Command color normal [highlight] -Change the menu colors. The color @var{normal} is used for most -lines in the menu (@pxref{Menu interface}), and the color -@var{highlight} is used to highlight the line where the cursor -points. If you omit @var{highlight}, then the inverted color of -@var{normal} is used for the highlighted line. The format of a color is -@code{@var{foreground}/@var{background}}. @var{foreground} and -@var{background} are symbolic color names. A symbolic color name must be -one of these: - -@itemize @bullet -@item -black - -@item -blue - -@item -green - -@item -cyan - -@item -red - -@item -magenta - -@item -brown - -@item -light-gray - -@strong{These below can be specified only for the foreground.} - -@item -dark-gray - -@item -light-blue - -@item -light-green - -@item -light-cyan - -@item -light-red - -@item -light-magenta - -@item -yellow - -@item -white -@end itemize - -But only the first eight names can be used for @var{background}. You can -prefix @code{blink-} to @var{foreground} if you want a blinking -foreground color. - -This command can be used in the configuration file and on the command -line, so you may write something like this in your configuration file: - -@example -@group -# Set default colors. -color light-gray/blue black/light-gray - -# Change the colors. -title OS-BS like -color magenta/blue black/magenta -@end group -@end example -@end deffn - - -@node device -@subsection device - -@deffn Command device drive file -In the grub shell, specify the file @var{file} as the actual drive for a -@sc{bios} drive @var{drive}. You can use this command to create a disk -image, and/or to fix the drives guessed by GRUB when GRUB fails to -determine them correctly, like this: - -@example -@group -grub> @kbd{device (fd0) /floppy-image} -grub> @kbd{device (hd0) /dev/sd0} -@end group -@end example - -This command can be used only in the grub shell (@pxref{Invoking the -grub shell}). -@end deffn - - -@node dhcp -@subsection dhcp - -@deffn Command dhcp [--with-configfile] -Initialize a network device via the @dfn{DHCP} protocol. Currently, -this command is just an alias for @command{bootp}, since the two -protocols are very similar. This command is only available if GRUB is -compiled with netboot support. See also @ref{Network}. - -If you specify @option{--with-configfile} to this command, GRUB will -fetch and load a configuration file specified by your DHCP server -with the vendor tag @samp{150}. -@end deffn - - -@node hide -@subsection hide - -@deffn Command hide partition -Hide the partition @var{partition} by setting the @dfn{hidden} bit in -its partition type code. This is useful only when booting DOS or Windows -and multiple primary FAT partitions exist in one disk. See also -@ref{DOS/Windows}. -@end deffn - - -@node ifconfig -@subsection ifconfig - -@deffn Command ifconfig [@option{--server=server}] [@option{--gateway=gateway}] [@option{--mask=mask}] [@option{--address=address}] -Configure the IP address, the netmask, the gateway, and the server -address of a network device manually. The values must be in dotted -decimal format, like @samp{192.168.11.178}. The order of the options is -not important. This command shows current network configuration, if no -option is specified. See also @ref{Network}. -@end deffn - - -@node pager -@subsection pager - -@deffn Command pager [flag] -Toggle or set the state of the internal pager. If @var{flag} is -@samp{on}, the internal pager is enabled. If @var{flag} is @samp{off}, -it is disabled. If no argument is given, the state is toggled. -@end deffn - - -@node partnew -@subsection partnew - -@deffn Command partnew part type from len -Create a new primary partition. @var{part} is a partition specification -in GRUB syntax (@pxref{Naming convention}); @var{type} is the partition -type and must be a number in the range @code{0-0xff}; @var{from} is -the starting address and @var{len} is the length, both in sector units. -@end deffn - - -@node parttype -@subsection parttype - -@deffn Command parttype part type -Change the type of an existing partition. @var{part} is a partition -specification in GRUB syntax (@pxref{Naming convention}); @var{type} -is the new partition type and must be a number in the range 0-0xff. -@end deffn - - -@node password -@subsection password - -@deffn Command password [@option{--md5}] passwd [new-config-file] -If used in the first section of a menu file, disable all interactive -editing control (menu entry editor and command-line) and entries -protected by the command @command{lock}. If the password @var{passwd} is -entered, it loads the @var{new-config-file} as a new config file and -restarts the GRUB Stage 2, if @var{new-config-file} is -specified. Otherwise, GRUB will just unlock the privileged instructions. -You can also use this command in the script section, in which case it -will ask for the password, before continuing. The option -@option{--md5} tells GRUB that @var{passwd} is encrypted with -@command{md5crypt} (@pxref{md5crypt}). -@end deffn - - -@node rarp -@subsection rarp - -@deffn Command rarp -Initialize a network device via the @dfn{RARP} protocol. This command -is only available if GRUB is compiled with netboot support. See also -@ref{Network}. -@end deffn - - -@node serial -@subsection serial - -@deffn Command serial [@option{--unit=unit}] [@option{--port=port}] [@option{--speed=speed}] [@option{--word=word}] [@option{--parity=parity}] [@option{--stop=stop}] [@option{--device=dev}] -Initialize a serial device. @var{unit} is a number in the range 0-3 -specifying which serial port to use; default is 0, which corresponds to -the port often called COM1. @var{port} is the I/O port where the UART -is to be found; if specified it takes precedence over @var{unit}. -@var{speed} is the transmission speed; default is 9600. @var{word} and -@var{stop} are the number of data bits and stop bits. Data bits must -be in the range 5-8 and stop bits must be 1 or 2. Default is 8 data -bits and one stop bit. @var{parity} is one of @samp{no}, @samp{odd}, -@samp{even} and defaults to @samp{no}. The option @option{--device} -can only be used in the grub shell and is used to specify the -tty device to be used in the host operating system (@pxref{Invoking the -grub shell}). - -The serial port is not used as a communication channel unless the -@command{terminal} command is used (@pxref{terminal}). - -This command is only available if GRUB is compiled with serial -support. See also @ref{Serial terminal}. -@end deffn - - -@node setkey -@subsection setkey - -@deffn Command setkey [to_key from_key] -Change the keyboard map. The key @var{from_key} is mapped to the key -@var{to_key}. If no argument is specified, reset key mappings. Note that -this command @emph{does not} exchange the keys. If you want to exchange -the keys, run this command again with the arguments exchanged, like this: - -@example -grub> @kbd{setkey capslock control} -grub> @kbd{setkey control capslock} -@end example - -A key must be an alphabet letter, a digit, or one of these symbols: -@samp{escape}, @samp{exclam}, @samp{at}, @samp{numbersign}, -@samp{dollar}, @samp{percent}, @samp{caret}, @samp{ampersand}, -@samp{asterisk}, @samp{parenleft}, @samp{parenright}, @samp{minus}, -@samp{underscore}, @samp{equal}, @samp{plus}, @samp{backspace}, -@samp{tab}, @samp{bracketleft}, @samp{braceleft}, @samp{bracketright}, -@samp{braceright}, @samp{enter}, @samp{control}, @samp{semicolon}, -@samp{colon}, @samp{quote}, @samp{doublequote}, @samp{backquote}, -@samp{tilde}, @samp{shift}, @samp{backslash}, @samp{bar}, @samp{comma}, -@samp{less}, @samp{period}, @samp{greater}, @samp{slash}, -@samp{question}, @samp{alt}, @samp{space}, @samp{capslock}, @samp{FX} -(@samp{X} is a digit), and @samp{delete}. This table describes to which -character each of the symbols corresponds: - -@table @samp -@item exclam -@samp{!} - -@item at -@samp{@@} - -@item numbersign -@samp{#} - -@item dollar -@samp{$} - -@item percent -@samp{%} - -@item caret -@samp{^} - -@item ampersand -@samp{&} - -@item asterisk -@samp{*} - -@item parenleft -@samp{(} - -@item parenright -@samp{)} - -@item minus -@samp{-} - -@item underscore -@samp{_} - -@item equal -@samp{=} - -@item plus -@samp{+} - -@item bracketleft -@samp{[} - -@item braceleft -@samp{@{} - -@item bracketright -@samp{]} - -@item braceright -@samp{@}} - -@item semicolon -@samp{;} - -@item colon -@samp{:} - -@item quote -@samp{'} - -@item doublequote -@samp{"} - -@item backquote -@samp{`} - -@item tilde -@samp{~} - -@item backslash -@samp{\} - -@item bar -@samp{|} - -@item comma -@samp{,} - -@item less -@samp{<} - -@item period -@samp{.} - -@item greater -@samp{>} - -@item slash -@samp{/} - -@item question -@samp{?} - -@item space -@samp{ } -@end table -@end deffn - - -@node terminal -@subsection terminal - -@deffn Command terminal [@option{--dumb}] [@option{--no-echo}] [@option{--no-edit}] [@option{--timeout=secs}] [@option{--lines=lines}] [@option{--silent}] [@option{console}] [@option{serial}] [@option{hercules}] -Select a terminal for user interaction. The terminal is assumed to be -VT100-compatible unless @option{--dumb} is specified. If both -@option{console} and @option{serial} are specified, then GRUB will use -the one where a key is entered first or the first when the timeout -expires. If neither are specified, the current setting is -reported. This command is only available if GRUB is compiled with serial -support. See also @ref{Serial terminal}. - -This may not make sense for most users, but GRUB supports Hercules -console as well. Hercules console is usable like the ordinary console, -and the usage is quite similar to that for serial terminals: specify -@option{hercules} as the argument. - -The option @option{--lines} defines the number of lines in your -terminal, and it is used for the internal pager function. If you don't -specify this option, the number is assumed as 24. - -The option @option{--silent} suppresses the message to prompt you to -hit any key. This might be useful if your system has no terminal -device. - -The option @option{--no-echo} has GRUB not to echo back input -characters. This implies the option @option{--no-edit}. - -The option @option{--no-edit} disables the BASH-like editing feature. -@end deffn - - -@node terminfo -@subsection terminfo - -@deffn Command terminfo @option{--name=name} @option{--cursor-address=seq} [@option{--clear-screen=seq}] [@option{--enter-standout-mode=seq}] [@option{--exit-standout-mode=seq}] -Define the capabilities of your terminal. Use this command to define -escape sequences, if it is not vt100-compatible. You may use @samp{\e} -for @key{ESC} and @samp{^X} for a control character. - -You can use the utility @command{grub-terminfo} to generate -appropriate arguments to this command. @xref{Invoking grub-terminfo}. - -If no option is specified, the current settings are printed. -@end deffn - - -@node tftpserver -@subsection tftpserver - -@deffn Command tftpserver ipaddr -@strong{Caution:} This command exists only for backward -compatibility. Use @command{ifconfig} (@pxref{ifconfig}) instead. - -Override a TFTP server address returned by a BOOTP/DHCP/RARP server. The -argument @var{ipaddr} must be in dotted decimal format, like -@samp{192.168.0.15}. This command is only available if GRUB is compiled -with netboot support. See also @ref{Network}. -@end deffn - - -@node unhide -@subsection unhide - -@deffn Command unhide partition -Unhide the partition @var{partition} by clearing the @dfn{hidden} bit in -its partition type code. This is useful only when booting DOS or Windows -and multiple primary partitions exist on one disk. See also -@ref{DOS/Windows}. -@end deffn - - -@node Command-line and menu entry commands -@section The list of command-line and menu entry commands - -These commands are usable in the command-line and in menu entries. If -you forget a command, you can run the command @command{help} -(@pxref{help}). - -@menu -* blocklist:: Get the blocklist notation of a file -* boot:: Start up your operating system -* cat:: Show the contents of a file -* chainloader:: Chain-load another boot loader -* cmp:: Compare two files -* configfile:: Load a configuration file -* debug:: Toggle the debug flag -* displayapm:: Display APM information -* displaymem:: Display memory configuration -* embed:: Embed Stage 1.5 -* find:: Find a file -* fstest:: Test a filesystem -* geometry:: Manipulate the geometry of a drive -* halt:: Shut down your computer -* help:: Show help messages -* impsprobe:: Probe SMP -* initrd:: Load an initrd -* install:: Install GRUB -* ioprobe:: Probe I/O ports used for a drive -* kernel:: Load a kernel -* lock:: Lock a menu entry -* makeactive:: Make a partition active -* map:: Map a drive to another -* md5crypt:: Encrypt a password in MD5 format -* module:: Load a module -* modulenounzip:: Load a module without decompression -* pause:: Wait for a key press -* quit:: Exit from the grub shell -* reboot:: Reboot your computer -* read:: Read data from memory -* root:: Set GRUB's root device -* rootnoverify:: Set GRUB's root device without mounting -* savedefault:: Save current entry as the default entry -* setup:: Set up GRUB's installation automatically -* testload:: Load a file for testing a filesystem -* testvbe:: Test VESA BIOS Extension -* uppermem:: Set the upper memory size -* vbeprobe:: Probe VESA BIOS Extension -@end menu - - -@node blocklist -@subsection blocklist - -@deffn Command blocklist file -Print the blocklist notation of the file @var{file}. @xref{blocklist -syntax}. -@end deffn - - -@node boot -@subsection boot - -@deffn Command boot -Boot the OS or chain-loader which has been loaded. Only necessary if -running the fully interactive command-line (it is implicit at the end of -a menu entry). -@end deffn - - -@node cat -@subsection cat - -@deffn Command cat file -Display the contents of the file @var{file}. This command may be useful -to remind you of your OS's root partition: - -@example -grub> @kbd{cat /etc/fstab} -@end example -@end deffn - - -@node chainloader -@subsection chainloader - -@deffn Command chainloader [@option{--force}] file -Load @var{file} as a chain-loader. Like any other file loaded by the -filesystem code, it can use the blocklist notation to grab the first -sector of the current partition with @samp{+1}. If you specify the -option @option{--force}, then load @var{file} forcibly, whether it has a -correct signature or not. This is required when you want to load a -defective boot loader, such as SCO UnixWare 7.1 (@pxref{SCO UnixWare}). -@end deffn - - -@node cmp -@subsection cmp - -@deffn Command cmp file1 file2 -Compare the file @var{file1} with the file @var{file2}. If they differ -in size, print the sizes like this: - -@example -Differ in size: 0x1234 [foo], 0x4321 [bar] -@end example - -If the sizes are equal but the bytes at an offset differ, then print the -bytes like this: - -@example -Differ at the offset 777: 0xbe [foo], 0xef [bar] -@end example - -If they are completely identical, nothing will be printed. -@end deffn - - -@node configfile -@subsection configfile - -@deffn Command configfile file -Load @var{file} as a configuration file. -@end deffn - - -@node debug -@subsection debug - -@deffn Command debug -Toggle debug mode (by default it is off). When debug mode is on, some -extra messages are printed to show disk activity. This global debug flag -is mainly useful for GRUB developers when testing new code. -@end deffn - - -@node displayapm -@subsection displayapm - -@deffn Command displayapm -Display APM BIOS information. -@end deffn - - -@node displaymem -@subsection displaymem - -@deffn Command displaymem -Display what GRUB thinks the system address space map of the machine is, -including all regions of physical @sc{ram} installed. GRUB's -@dfn{upper/lower memory} display uses the standard BIOS interface for -the available memory in the first megabyte, or @dfn{lower memory}, and a -synthesized number from various BIOS interfaces of the memory starting -at 1MB and going up to the first chipset hole for @dfn{upper memory} -(the standard PC @dfn{upper memory} interface is limited to reporting a -maximum of 64MB). -@end deffn - - -@node embed -@subsection embed - -@deffn Command embed stage1_5 device -Embed the Stage 1.5 @var{stage1_5} in the sectors after the MBR if -@var{device} is a drive, or in the @dfn{boot loader} area if @var{device} -is a FFS partition or a ReiserFS partition.@footnote{The latter feature -has not been implemented yet.} Print the number of sectors which -@var{stage1_5} occupies, if successful. - -Usually, you don't need to run this command directly. @xref{setup}. -@end deffn - - -@node find -@subsection find - -@deffn Command find filename -Search for the file name @var{filename} in all mountable partitions -and print the list of the devices which contain the file. The file -name @var{filename} should be an absolute file name like -@code{/boot/grub/stage1}. -@end deffn - - -@node fstest -@subsection fstest - -@deffn Command fstest -Toggle filesystem test mode. -Filesystem test mode, when turned on, prints out data corresponding to -all the device reads and what values are being sent to the low-level -routines. The format is @samp{<@var{partition-offset-sector}, -@var{byte-offset}, @var{byte-length}>} for high-level reads inside a -partition, and @samp{[@var{disk-offset-sector}]} for low-level sector -requests from the disk. -Filesystem test mode is turned off by any use of the @command{install} -(@pxref{install}) or @command{testload} (@pxref{testload}) commands. -@end deffn - - -@node geometry -@subsection geometry - -@deffn Command geometry drive [cylinder head sector [total_sector]] -Print the information for the drive @var{drive}. In the grub shell, you -can set the geometry of the drive arbitrarily. The number of -cylinders, the number of heads, the number of sectors and the number of -total sectors are set to CYLINDER, HEAD, SECTOR and TOTAL_SECTOR, -respectively. If you omit TOTAL_SECTOR, then it will be calculated -based on the C/H/S values automatically. -@end deffn - - -@node halt -@subsection halt - -@deffn Command halt @option{--no-apm} -The command halts the computer. If the @option{--no-apm} option -is specified, no APM BIOS call is performed. Otherwise, the computer -is shut down using APM. -@end deffn - - -@node help -@subsection help - -@deffn Command help @option{--all} [pattern @dots{}] -Display helpful information about built-in commands. If you do not -specify @var{pattern}, this command shows short descriptions of most of -available commands. If you specify the option @option{--all} to this -command, short descriptions of rarely used commands (such as -@ref{testload}) are displayed as well. - -If you specify any @var{patterns}, it displays longer information -about each of the commands which match those @var{patterns}. -@end deffn - - -@node impsprobe -@subsection impsprobe - -@deffn Command impsprobe -Probe the Intel Multiprocessor Specification 1.1 or 1.4 configuration -table and boot the various CPUs which are found into a tight loop. This -command can be used only in the Stage 2, but not in the grub shell. -@end deffn - - -@node initrd -@subsection initrd - -@deffn Command initrd file @dots{} -Load an initial ramdisk for a Linux format boot image and set the -appropriate parameters in the Linux setup area in memory. See also -@ref{GNU/Linux}. -@end deffn - - -@node install -@subsection install - -@deffn Command install [@option{--force-lba}] [@option{--stage2=os_stage2_file}] stage1_file [@option{d}] dest_dev stage2_file [addr] [@option{p}] [config_file] [real_config_file] -This command is fairly complex, and you should not use this command -unless you are familiar with GRUB. Use @command{setup} (@pxref{setup}) -instead. - -In short, it will perform a full install presuming the Stage 2 or Stage -1.5@footnote{They're loaded the same way, so we will refer to the Stage -1.5 as a Stage 2 from now on.} is in its final install location. - -In slightly more detail, it will load @var{stage1_file}, validate that -it is a GRUB Stage 1 of the right version number, install in it a -blocklist for loading @var{stage2_file} as a Stage 2. If the option -@option{d} is present, the Stage 1 will always look for the actual -disk @var{stage2_file} was installed on, rather than using the booting -drive. The Stage 2 will be loaded at address @var{addr}, which must be -@samp{0x8000} for a true Stage 2, and @samp{0x2000} for a Stage 1.5. If -@var{addr} is not present, GRUB will determine the address -automatically. It then writes the completed Stage 1 to the first block -of the device @var{dest_dev}. If the options @option{p} or -@var{config_file} are present, then it reads the first block of stage2, -modifies it with the values of the partition @var{stage2_file} was found -on (for @option{p}) or places the string @var{config_file} into the area -telling the stage2 where to look for a configuration file at boot -time. Likewise, if @var{real_config_file} is present and -@var{stage2_file} is a Stage 1.5, then the Stage 2 @var{config_file} is -patched with the configuration file name @var{real_config_file}. This -command preserves the DOS BPB (and for hard disks, the partition table) -of the sector the Stage 1 is to be installed into. - -@strong{Caution:} Several buggy BIOSes don't pass a booting drive -properly when booting from a hard disk drive. Therefore, you will -unfortunately have to specify the option @option{d}, whether your -Stage2 resides at the booting drive or not, if you have such a -BIOS. We know these are defective in this way: - -@table @asis -@item -Fujitsu LifeBook 400 BIOS version 31J0103A - -@item -HP Vectra XU 6/200 BIOS version GG.06.11 -@end table - -@strong{Caution2:} A number of BIOSes don't return a correct LBA support -bitmap even if they do have the support. So GRUB provides a solution to -ignore the wrong bitmap, that is, the option @option{--force-lba}. Don't -use this option if you know that your BIOS doesn't have LBA support. - -@strong{Caution3:} You must specify the option @option{--stage2} in the -grub shell, if you cannot unmount the filesystem where your stage2 file -resides. The argument should be the file name in your operating system. -@end deffn - - -@node ioprobe -@subsection ioprobe - -@deffn Command ioprobe drive -Probe I/O ports used for the drive @var{drive}. This command will list -the I/O ports on the screen. For technical information, -@xref{Internals}. -@end deffn - - -@node kernel -@subsection kernel - -@deffn Command kernel [@option{--type=type}] [@option{--no-mem-option}] file @dots{} -Attempt to load the primary boot image (Multiboot a.out or @sc{elf}, -Linux zImage or bzImage, FreeBSD a.out, NetBSD a.out, etc.) from -@var{file}. The rest of the line is passed verbatim as the @dfn{kernel -command-line}. Any modules must be reloaded after using this command. - -This command also accepts the option @option{--type} so that you can -specify the kernel type of @var{file} explicitly. The argument -@var{type} must be one of these: @samp{netbsd}, @samp{freebsd}, -@samp{openbsd}, @samp{linux}, @samp{biglinux}, and -@samp{multiboot}. However, you need to specify it only if you want to -load a NetBSD @sc{elf} kernel, because GRUB can automatically determine -a kernel type in the other cases, quite safely. - -The option @option{--no-mem-option} is effective only for Linux. If the -option is specified, GRUB doesn't pass the option @option{mem=} to the -kernel. This option is implied for Linux kernels 2.4.18 and newer. -@end deffn - - -@node lock -@subsection lock - -@deffn Command lock -Prevent normal users from executing arbitrary menu entries. You must use -the command @command{password} if you really want this command to be -useful (@pxref{password}). - -This command is used in a menu, as shown in this example: - -@example -@group -title This entry is too dangerous to be executed by normal users -lock -root (hd0,a) -kernel /no-security-os -@end group -@end example - -See also @ref{Security}. -@end deffn - - -@node makeactive -@subsection makeactive - -@deffn Command makeactive -Set the active partition on the root disk to GRUB's root device. -This command is limited to @emph{primary} PC partitions on a hard disk. -@end deffn - - -@node map -@subsection map - -@deffn Command map to_drive from_drive -Map the drive @var{from_drive} to the drive @var{to_drive}. This is -necessary when you chain-load some operating systems, such as DOS, if -such an OS resides at a non-first drive. Here is an example: - -@example -@group -grub> @kbd{map (hd0) (hd1)} -grub> @kbd{map (hd1) (hd0)} -@end group -@end example - -The example exchanges the order between the first hard disk and the -second hard disk. See also @ref{DOS/Windows}. -@end deffn - - -@node md5crypt -@subsection md5crypt - -@deffn Command md5crypt -Prompt to enter a password, and encrypt it in MD5 format. The encrypted -password can be used with the command @command{password} -(@pxref{password}). See also @ref{Security}. -@end deffn - - -@node module -@subsection module - -@deffn Command module file @dots{} -Load a boot module @var{file} for a Multiboot format boot image (no -interpretation of the file contents are made, so the user of this -command must know what the kernel in question expects). The rest of the -line is passed as the @dfn{module command-line}, like the -@command{kernel} command. You must load a Multiboot kernel image before -loading any module. See also @ref{modulenounzip}. -@end deffn - - -@node modulenounzip -@subsection modulenounzip - -@deffn Command modulenounzip file @dots{} -The same as @command{module} (@pxref{module}), except that automatic -decompression is disabled. -@end deffn - - -@node pause -@subsection pause - -@deffn Command pause message @dots{} -Print the @var{message}, then wait until a key is pressed. Note that -placing @key{^G} (ASCII code 7) in the message will cause the speaker to -emit the standard beep sound, which is useful when prompting the user to -change floppies. -@end deffn - - -@node quit -@subsection quit - -@deffn Command quit -Exit from the grub shell @command{grub} (@pxref{Invoking the grub -shell}). This command can be used only in the grub shell. -@end deffn - - -@node reboot -@subsection reboot - -@deffn Command reboot -Reboot the computer. -@end deffn - - -@node read -@subsection read - -@deffn Command read addr -Read a 32-bit value from memory at address @var{addr} and display it in -hex format. -@end deffn - - -@node root -@subsection root - -@deffn Command root device [hdbias] -Set the current @dfn{root device} to the device @var{device}, then -attempt to mount it to get the partition size (for passing the partition -descriptor in @code{ES:ESI}, used by some chain-loaded boot loaders), the -BSD drive type (for booting BSD kernels using their native boot format), -and correctly determine the PC partition where a BSD sub-partition is -located. The optional @var{hdbias} parameter is a number to tell a BSD -kernel how many BIOS drive numbers are on controllers before the current -one. For example, if there is an IDE disk and a SCSI disk, and your -FreeBSD root partition is on the SCSI disk, then use a @samp{1} for -@var{hdbias}. - -See also @ref{rootnoverify}. -@end deffn - - -@node rootnoverify -@subsection rootnoverify - -@deffn Command rootnoverify device [hdbias] -Similar to @command{root} (@pxref{root}), but don't attempt to mount the -partition. This is useful for when an OS is outside of the area of the -disk that GRUB can read, but setting the correct root device is still -desired. Note that the items mentioned in @command{root} above which -derived from attempting the mount will @emph{not} work correctly. -@end deffn - - -@node savedefault -@subsection savedefault - -@deffn Command savedefault num -Save the current menu entry or @var{num} if specified as a default -entry. Here is an example: - -@example -@group -default saved -timeout 10 - -title GNU/Linux -root (hd0,0) -kernel /boot/vmlinuz root=/dev/sda1 vga=ext -initrd /boot/initrd -savedefault - -title FreeBSD -root (hd0,a) -kernel /boot/loader -savedefault -@end group -@end example - -With this configuration, GRUB will choose the entry booted previously as -the default entry. - -You can specify @samp{fallback} instead of a number. Then, next -fallback entry is saved. Next fallback entry is chosen from fallback -entries. Normally, this will be the first entry in fallback ones. - -See also @ref{default} and @ref{Invoking grub-set-default}. -@end deffn - - -@node setup -@subsection setup - -@deffn Command setup [@option{--force-lba}] [@option{--stage2=os_stage2_file}] [@option{--prefix=dir}] install_device [image_device] -Set up the installation of GRUB automatically. This command uses the -more flexible command @command{install} (@pxref{install}) in the backend -and installs GRUB into the device @var{install_device}. If -@var{image_device} is specified, then find the GRUB images -(@pxref{Images}) in the device @var{image_device}, otherwise use the -current @dfn{root device}, which can be set by the command -@command{root}. If @var{install_device} is a hard disk, then embed a -Stage 1.5 in the disk if possible. - -The option @option{--prefix} specifies the directory under which GRUB -images are put. If it is not specified, GRUB automatically searches them -in @file{/boot/grub} and @file{/grub}. - -The options @option{--force-lba} and @option{--stage2} are just passed -to @command{install} if specified. @xref{install}, for more -information. -@end deffn - - -@node testload -@subsection testload - -@deffn Command testload file -Read the entire contents of @var{file} in several different ways and -compare them, to test the filesystem code. The output is somewhat -cryptic, but if no errors are reported and the final @samp{i=@var{X}, -filepos=@var{Y}} reading has @var{X} and @var{Y} equal, then it is -definitely consistent, and very likely works correctly subject to a -consistent offset error. If this test succeeds, then a good next step is -to try loading a kernel. -@end deffn - - -@node testvbe -@subsection testvbe - -@deffn Command testvbe mode -Test the VESA BIOS Extension mode @var{mode}. This command will switch -your video card to the graphics mode, and show an endless animation. Hit -any key to return. See also @ref{vbeprobe}. -@end deffn - - -@node uppermem -@subsection uppermem - -@deffn Command uppermem kbytes -Force GRUB to assume that only @var{kbytes} kilobytes of upper memory -are installed. Any system address range maps are discarded. - -@strong{Caution:} This should be used with great caution, and should -only be necessary on some old machines. GRUB's BIOS probe can pick up -all @sc{ram} on all new machines the author has ever heard of. It can -also be used for debugging purposes to lie to an OS. -@end deffn - - -@node vbeprobe -@subsection vbeprobe - -@deffn Command vbeprobe [mode] -Probe VESA BIOS Extension information. If the mode @var{mode} is -specified, show only the information about @var{mode}. Otherwise, this -command lists up available VBE modes on the screen. See also -@ref{testvbe}. -@end deffn - - -@node Troubleshooting -@chapter Error messages reported by GRUB - -This chapter describes error messages reported by GRUB when you -encounter trouble. @xref{Invoking the grub shell}, if your problem is -specific to the grub shell. - -@menu -* Stage1 errors:: Errors reported by the Stage 1 -* Stage1.5 errors:: Errors reported by the Stage 1.5 -* Stage2 errors:: Errors reported by the Stage 2 -@end menu - - -@node Stage1 errors -@section Errors reported by the Stage 1 - -The general way that the Stage 1 handles errors is to print an error -string and then halt. Pressing @kbd{@key{CTRL}-@key{ALT}-@key{DEL}} will -reboot. - -The following is a comprehensive list of error messages for the Stage 1: - -@table @asis -@item Hard Disk Error -The stage2 or stage1.5 is being read from a hard disk, and the attempt -to determine the size and geometry of the hard disk failed. - -@item Floppy Error -The stage2 or stage1.5 is being read from a floppy disk, and the attempt -to determine the size and geometry of the floppy disk failed. It's listed -as a separate error since the probe sequence is different than for hard -disks. - -@item Read Error -A disk read error happened while trying to read the stage2 or stage1.5. - -@item Geom Error -The location of the stage2 or stage1.5 is not in the portion of the disk -supported directly by the BIOS read calls. This could occur because the -BIOS translated geometry has been changed by the user or the disk is -moved to another machine or controller after installation, or GRUB was -not installed using itself (if it was, the Stage 2 version of this error -would have been seen during that process and it would not have completed -the install). -@end table - - -@node Stage1.5 errors -@section Errors reported by the Stage 1.5 - -The general way that the Stage 1.5 handles errors is to print an error -number in the form @code{Error @var{num}} and then halt. Pressing -@kbd{@key{CTRL}-@key{ALT}-@key{DEL}} will reboot. - -The error numbers correspond to the errors reported by Stage -2. @xref{Stage2 errors}. - - -@node Stage2 errors -@section Errors reported by the Stage 2 - -The general way that the Stage 2 handles errors is to abort the -operation in question, print an error string, then (if possible) either -continue based on the fact that an error occurred or wait for the user to -deal with the error. - -The following is a comprehensive list of error messages for the Stage 2 -(error numbers for the Stage 1.5 are listed before the colon in each -description): - -@table @asis -@item 1 : Filename must be either an absolute filename or blocklist -This error is returned if a file name is requested which doesn't fit the -syntax/rules listed in the @ref{Filesystem}. - -@item 2 : Bad file or directory type -This error is returned if a file requested is not a regular file, but -something like a symbolic link, directory, or FIFO. - -@item 3 : Bad or corrupt data while decompressing file -This error is returned if the run-length decompression code gets an -internal error. This is usually from a corrupt file. - -@item 4 : Bad or incompatible header in compressed file -This error is returned if the file header for a supposedly compressed -file is bad. - -@item 5 : Partition table invalid or corrupt -This error is returned if the sanity checks on the integrity of the -partition table fail. This is a bad sign. - -@item 6 : Mismatched or corrupt version of stage1/stage2 -This error is returned if the install command points to incompatible -or corrupt versions of the stage1 or stage2. It can't detect corruption -in general, but this is a sanity check on the version numbers, which -should be correct. - -@item 7 : Loading below 1MB is not supported -This error is returned if the lowest address in a kernel is below the -1MB boundary. The Linux zImage format is a special case and can be -handled since it has a fixed loading address and maximum size. - -@item 8 : Kernel must be loaded before booting -This error is returned if GRUB is told to execute the boot sequence -without having a kernel to start. - -@item 9 : Unknown boot failure -This error is returned if the boot attempt did not succeed for reasons -which are unknown. - -@item 10 : Unsupported Multiboot features requested -This error is returned when the Multiboot features word in the Multiboot -header requires a feature that is not recognized. The point of this is -that the kernel requires special handling which GRUB is probably -unable to provide. - -@item 11 : Unrecognized device string -This error is returned if a device string was expected, and the string -encountered didn't fit the syntax/rules listed in the @ref{Filesystem}. - -@item 12 : Invalid device requested -This error is returned if a device string is recognizable but does not -fall under the other device errors. - -@item 13 : Invalid or unsupported executable format -This error is returned if the kernel image being loaded is not -recognized as Multiboot or one of the supported native formats (Linux -zImage or bzImage, FreeBSD, or NetBSD). - -@item 14 : Filesystem compatibility error, cannot read whole file -Some of the filesystem reading code in GRUB has limits on the length of -the files it can read. This error is returned when the user runs into -such a limit. - -@item 15 : File not found -This error is returned if the specified file name cannot be found, but -everything else (like the disk/partition info) is OK. - -@item 16 : Inconsistent filesystem structure -This error is returned by the filesystem code to denote an internal -error caused by the sanity checks of the filesystem structure on disk -not matching what it expects. This is usually caused by a corrupt -filesystem or bugs in the code handling it in GRUB. - -@item 17 : Cannot mount selected partition -This error is returned if the partition requested exists, but the -filesystem type cannot be recognized by GRUB. - -@item 18 : Selected cylinder exceeds maximum supported by BIOS -This error is returned when a read is attempted at a linear block -address beyond the end of the BIOS translated area. This generally -happens if your disk is larger than the BIOS can handle (512MB for -(E)IDE disks on older machines or larger than 8GB in general). - -@item 19 : Linux kernel must be loaded before initrd -This error is returned if the initrd command is used before loading a -Linux kernel. - -@item 20 : Multiboot kernel must be loaded before modules -This error is returned if the module load command is used before loading -a Multiboot kernel. It only makes sense in this case anyway, as GRUB has -no idea how to communicate the presence of such modules to a -non-Multiboot-aware kernel. - -@item 21 : Selected disk does not exist -This error is returned if the device part of a device- or full file name -refers to a disk or BIOS device that is not present or not recognized by -the BIOS in the system. - -@item 22 : No such partition -This error is returned if a partition is requested in the device part of -a device- or full file name which isn't on the selected disk. - -@item 23 : Error while parsing number -This error is returned if GRUB was expecting to read a number and -encountered bad data. - -@item 24 : Attempt to access block outside partition -This error is returned if a linear block address is outside of the disk -partition. This generally happens because of a corrupt filesystem on the -disk or a bug in the code handling it in GRUB (it's a great debugging -tool). - -@item 25 : Disk read error -This error is returned if there is a disk read error when trying to -probe or read data from a particular disk. - -@item 26 : Too many symbolic links -This error is returned if the link count is beyond the maximum -(currently 5), possibly the symbolic links are looped. - -@item 27 : Unrecognized command -This error is returned if an unrecognized command is entered on the -command-line or in a boot sequence section of a configuration file and -that entry is selected. - -@item 28 : Selected item cannot fit into memory -This error is returned if a kernel, module, or raw file load command is -either trying to load its data such that it won't fit into memory or it -is simply too big. - -@item 29 : Disk write error -This error is returned if there is a disk write error when trying to -write to a particular disk. This would generally only occur during an -install of set active partition command. - -@item 30 : Invalid argument -This error is returned if an argument specified to a command is invalid. - -@item 31 : File is not sector aligned -This error may occur only when you access a ReiserFS partition by -block-lists (e.g. the command @command{install}). In this case, you -should mount the partition with the @samp{-o notail} option. - -@item 32 : Must be authenticated -This error is returned if you try to run a locked entry. You should -enter a correct password before running such an entry. - -@item 33 : Serial device not configured -This error is returned if you try to change your terminal to a serial -one before initializing any serial device. - -@item 34 : No spare sectors on the disk -This error is returned if a disk doesn't have enough spare space. This -happens when you try to embed Stage 1.5 into the unused sectors after -the MBR, but the first partition starts right after the MBR or they are -used by EZ-BIOS. -@end table - - -@node Invoking the grub shell -@chapter Invoking the grub shell - -This chapter documents the grub shell @command{grub}. Note that the grub -shell is an emulator; it doesn't run under the native environment, so it -sometimes does something wrong. Therefore, you shouldn't trust it too -much. If there is anything wrong with it, don't hesitate to try the -native GRUB environment, especially when it guesses a wrong map between -BIOS drives and OS devices. - -@menu -* Basic usage:: How to use the grub shell -* Installation under UNIX:: How to install GRUB via @command{grub} -* Device map:: The map between BIOS drives and OS devices -@end menu - - -@node Basic usage -@section Introduction into the grub shell - -You can use the command @command{grub} for installing GRUB under your -operating systems and for a testbed when you add a new feature into GRUB -or when fixing a bug. @command{grub} is almost the same as the Stage 2, -and, in fact, it shares the source code with the Stage 2 and you can use -the same commands (@pxref{Commands}) in @command{grub}. It is emulated by -replacing BIOS calls with UNIX system calls and libc functions. - -The command @command{grub} accepts the following options: - -@table @option -@item --help -Print a summary of the command-line options and exit. - -@item --version -Print the version number of GRUB and exit. - -@item --verbose -Print some verbose messages for debugging purpose. - -@item --device-map=@var{file} -Use the device map file @var{file}. The format is described in -@ref{Device map}. - -@item --no-floppy -Do not probe any floppy drive. This option has no effect if the option -@option{--device-map} is specified (@pxref{Device map}). - -@item --probe-second-floppy -Probe the second floppy drive. If this option is not specified, the grub -shell does not probe it, as that sometimes takes a long time. If you -specify the device map file (@pxref{Device map}), the grub shell just -ignores this option. - -@item --config-file=@var{file} -Read the configuration file @var{file} instead of -@file{/boot/grub/menu.lst}. The format is the same as the normal GRUB -syntax. See @ref{Filesystem}, for more information. - -@item --boot-drive=@var{drive} -Set the stage2 @var{boot_drive} to @var{drive}. This argument should be -an integer (decimal, octal or hexadecimal). - -@item --install-partition=@var{par} -Set the stage2 @var{install_partition} to @var{par}. This argument -should be an integer (decimal, octal or hexadecimal). - -@item --no-config-file -Do not use the configuration file even if it can be read. - -@item --no-curses -Do not use the screen handling interface by the curses even if it is -available. - -@item --batch -This option has the same meaning as @samp{--no-config-file --no-curses}. - -@item --read-only -Disable writing to any disk. - -@item --hold -Wait until a debugger will attach. This option is useful when you want -to debug the startup code. -@end table - - -@node Installation under UNIX -@section How to install GRUB via @command{grub} - -The installation procedure is the same as under the @dfn{native} Stage -2. @xref{Installation}, for more information. The command -@command{grub}-specific information is described here. - -What you should be careful about is @dfn{buffer cache}. @command{grub} -makes use of raw devices instead of filesystems that your operating -systems serve, so there exists a potential problem that some cache -inconsistency may corrupt your filesystems. What we recommend is: - -@itemize @bullet -@item -If you can unmount drives to which GRUB may write any amount of data, -unmount them before running @command{grub}. - -@item -If a drive cannot be unmounted but can be mounted with the read-only -flag, mount it in read-only mode. That should be secure. - -@item -If a drive must be mounted with the read-write flag, make sure that no -activity is being done on it while the command @command{grub} is -running. - -@item -Reboot your operating system as soon as possible. This is probably not -required if you follow the rules above, but reboot is the most secure -way. -@end itemize - -In addition, enter the command @command{quit} when you finish the -installation. That is @emph{very important} because @command{quit} makes -the buffer cache consistent. Do not push @key{C-c}. - -If you want to install GRUB non-interactively, specify @samp{--batch} -option in the command-line. This is a simple example: - -@example -@group -#!/bin/sh - -# Use /usr/sbin/grub if you are on an older system. -/sbin/grub --batch </dev/null 2>/dev/null -root (hd0,0) -setup (hd0) -quit -EOT -@end group -@end example - - -@node Device map -@section The map between BIOS drives and OS devices - -When you specify the option @option{--device-map} (@pxref{Basic usage}), -the grub shell creates the @dfn{device map file} automatically unless it -already exists. The file name @file{/boot/grub/device.map} is preferred. - -If the device map file exists, the grub shell reads it to map BIOS -drives to OS devices. This file consists of lines like this: - -@example -@var{device} @var{file} -@end example - -@var{device} is a drive specified in the GRUB syntax (@pxref{Device -syntax}), and @var{file} is an OS file, which is normally a device -file. - -The reason why the grub shell gives you the device map file is that it -cannot guess the map between BIOS drives and OS devices correctly in -some environments. For example, if you exchange the boot sequence -between IDE and SCSI in your BIOS, it gets the order wrong. - -Thus, edit the file if the grub shell makes a mistake. You can put any -comments in the file if needed, as the grub shell assumes that a line is -just a comment if the first character is @samp{#}. - - -@node Invoking grub-install -@chapter Invoking grub-install - -The program @command{grub-install} installs GRUB on your drive using the -grub shell (@pxref{Invoking the grub shell}). You must specify the -device name on which you want to install GRUB, like this: - -@example -grub-install @var{install_device} -@end example - -The device name @var{install_device} is an OS device name or a GRUB -device name. - -@command{grub-install} accepts the following options: - -@table @option -@item --help -Print a summary of the command-line options and exit. - -@item --version -Print the version number of GRUB and exit. - -@item --force-lba -Force GRUB to use LBA mode even for a buggy BIOS. Use this option only -if your BIOS doesn't work properly in LBA mode even though it supports -LBA mode. - -@item --root-directory=@var{dir} -Install GRUB images under the directory @var{dir} instead of the root -directory. This option is useful when you want to install GRUB into a -separate partition or a removable disk. Here is an example in which -you have a separate @dfn{boot} partition which is mounted on -@file{/boot}: - -@example -@kbd{grub-install --root-directory=/boot hd0} -@end example - -@item --grub-shell=@var{file} -Use @var{file} as the grub shell. You can append arbitrary options to -@var{file} after the file name, like this: - -@example -@kbd{grub-install --grub-shell="grub --read-only" /dev/fd0} -@end example - -@item --recheck -Recheck the device map, even if @file{/boot/grub/device.map} already -exists. You should use this option whenever you add/remove a disk -into/from your computer. -@end table - - -@node Invoking grub-md5-crypt -@chapter Invoking grub-md5-crypt - -The program @command{grub-md5-crypt} encrypts a password in MD5 format. -This is just a front-end of the grub shell (@pxref{Invoking the grub -shell}). Passwords encrypted by this program can be used with the -command @command{password} (@pxref{password}). - -@command{grub-md5-crypt} accepts the following options: - -@table @option -@item --help -Print a summary of the command-line options and exit. - -@item --version -Print the version information and exit. - -@item --grub-shell=@var{file} -Use @var{file} as the grub shell. -@end table - - -@node Invoking grub-terminfo -@chapter Invoking grub-terminfo - -The program @command{grub-terminfo} generates a terminfo command from -a terminfo name (@pxref{terminfo}). The result can be used in the -configuration file, to define escape sequences. Because GRUB assumes -that your terminal is vt100-compatible by default, this would be -useful only if your terminal is uncommon (such as vt52). - -@command{grub-terminfo} accepts the following options: - -@table @option -@item --help -Print a summary of the command-line options and exit. - -@item --version -Print the version information and exit. -@end table - -You must specify one argument to this command. For example: - -@example -@kbd{grub-terminfo vt52} -@end example - - -@node Invoking grub-set-default -@chapter Invoking grub-set-default - -The program @command{grub-set-default} sets the default boot entry for -GRUB. This automatically creates a file named @file{default} under -your GRUB directory (i.e. @file{/boot/grub}), if it is not -present. This file is used to determine the default boot entry when -GRUB boots up your system when you use @samp{default saved} in your -configuration file (@pxref{default}), and to save next default boot -entry when you use @samp{savedefault} in a boot entry -(@pxref{savedefault}). - -@command{grub-set-default} accepts the following options: - -@table @option -@item --help -Print a summary of the command-line options and exit. - -@item --version -Print the version information and exit. - -@item --root-directory=@var{dir} -Use the directory @var{dir} instead of the root directory -(i.e. @file{/}) to define the location of the default file. This -is useful when you mount a disk which is used for another system. -@end table - -You must specify a single argument to @command{grub-set-default}. This -argument is normally the number of a default boot entry. For example, -if you have this configuration file: - -@example -@group -default saved -timeout 10 - -title GNU/Hurd -root (hd0,0) -... - -title GNU/Linux -root (hd0,1) -... -@end group -@end example - -and if you want to set the next default boot entry to GNU/Linux, you -may execute this command: - -@example -@kbd{grub-set-default 1} -@end example - -Because the entry for GNU/Linux is @samp{1}. Note that entries are -counted from zero. So, if you want to specify GNU/Hurd here, then you -should specify @samp{0}. - -This feature is very useful if you want to test a new kernel or to -make your system quite robust. @xref{Making your system robust}, for -more hints about how to set up a robust system. - - -@node Invoking mbchk -@chapter Invoking mbchk - -The program @command{mbchk} checks for the format of a Multiboot -kernel. We recommend using this program before booting your own kernel -by GRUB. - -@command{mbchk} accepts the following options: - -@table @option -@item --help -Print a summary of the command-line options and exit. - -@item --version -Print the version number of GRUB and exit. - -@item --quiet -Suppress all normal output. -@end table - - -@node Obtaining and Building GRUB -@appendix How to obtain and build GRUB - -@quotation -@strong{Caution:} GRUB requires binutils-2.9.1.0.23 or later because the -GNU assembler has been changed so that it can produce real 16bits -machine code between 2.9.1 and 2.9.1.0.x. See -@uref{http://sources.redhat.com/binutils/}, to obtain information on -how to get the latest version. -@end quotation - -GRUB is available from the GNU alpha archive site -@uref{ftp://alpha.gnu.org/gnu/grub} or any of its mirrors. The file -will be named grub-version.tar.gz. The current version is -@value{VERSION}, so the file you should grab is: - -@uref{ftp://alpha.gnu.org/gnu/grub/grub-@value{VERSION}.tar.gz} - -To unbundle GRUB use the instruction: - -@example -@kbd{zcat grub-@value{VERSION}.tar.gz | tar xvf -} -@end example - -which will create a directory called @file{grub-@value{VERSION}} with -all the sources. You can look at the file @file{INSTALL} for detailed -instructions on how to build and install GRUB, but you should be able to -just do: - -@example -@group -@kbd{cd grub-@value{VERSION}} -@kbd{./configure} -@kbd{make install} -@end group -@end example - -This will install the grub shell @file{grub} (@pxref{Invoking the grub -shell}), the Multiboot checker @file{mbchk} (@pxref{Invoking mbchk}), -and the GRUB images. This will also install the GRUB manual. - -Also, the latest version is available from the CVS. See -@uref{http://savannah.gnu.org/cvs/?group=grub} for more information. - - -@node Reporting bugs -@appendix Reporting bugs - -These are the guideline for how to report bugs. Take a look at this -list below before you submit bugs: - -@enumerate -@item -Before getting unsettled, read this manual through and through. Also, -see the @uref{http://www.gnu.org/software/grub/grub-faq.html, GNU GRUB FAQ}. - -@item -Always mention the information on your GRUB. The version number and the -configuration are quite important. If you build it yourself, write the -options specified to the configure script and your operating system, -including the versions of gcc and binutils. - -@item -If you have trouble with the installation, inform us of how you -installed GRUB. Don't omit error messages, if any. Just @samp{GRUB hangs -up when it boots} is not enough. - -The information on your hardware is also essential. These are especially -important: the geometries and the partition tables of your hard disk -drives and your BIOS. - -@item -If GRUB cannot boot your operating system, write down -@emph{everything} you see on the screen. Don't paraphrase them, like -@samp{The foo OS crashes with GRUB, even though it can boot with the -bar boot loader just fine}. Mention the commands you executed, the -messages printed by them, and information on your operating system -including the version number. - -@item -Explain what you wanted to do. It is very useful to know your purpose -and your wish, and how GRUB didn't satisfy you. - -@item -If you can investigate the problem yourself, please do. That will give -you and us much more information on the problem. Attaching a patch is -even better. - -When you attach a patch, make the patch in unified diff format, and -write ChangeLog entries. But, even when you make a patch, don't forget -to explain the problem, so that we can understand what your patch is -for. - -@item -Write down anything that you think might be related. Please understand -that we often need to reproduce the same problem you encountered in our -environment. So your information should be sufficient for us to do the -same thing---Don't forget that we cannot see your computer directly. If -you are not sure whether to state a fact or leave it out, state it! -Reporting too many things is much better than omitting something -important. -@end enumerate - -If you follow the guideline above, submit a report to the -@uref{http://savannah.gnu.org/bugs/?group=grub, Bug Tracking System}. -Alternatively, you can submit a report via electronic mail to -@email{bug-grub@@gnu.org}, but we strongly recommend that you use the -Bug Tracking System, because e-mail can be passed over easily. - -Once we get your report, we will try to fix the bugs. - - -@node Future -@appendix Where GRUB will go - -We started the next generation of GRUB, GRUB 2. This will include -internationalization, dynamic module loading, real memory management, -multiple architecture support, a scripting language, and many other -nice feature. If you are interested in the development of GRUB 2, take -a look at @uref{http://www.gnu.org/software/grub/grub.html, the -homepage}. - - -@c Separate the programming guide. -@include internals.texi - - -@node Copying This Manual -@appendix Copying This Manual - -@menu -* GNU Free Documentation License:: License for copying this manual. -@end menu - -@include fdl.texi - - -@node Index -@unnumbered Index - -@c Currently, we use only the Concept Index. -@printindex cp - - -@bye - -Some notes: - - This is the second attempt to rewrite the manual. The status is -mostly complete, but I need to check the spelling by ispell, and add -more indices. Perhaps I also have to let some English native speakers -proofread this manual through. My English is syntactically almost -perfect, but sometimes (often?) awful in the nuance. Hehe, I can't be an -English poet for now. diff --git a/docs/internals.texi b/docs/internals.texi deleted file mode 100644 index ece8e6cc6..000000000 --- a/docs/internals.texi +++ /dev/null @@ -1,427 +0,0 @@ -@node Internals -@appendix Hacking GRUB - -This chapter documents the user-invisible aspect of GRUB. - -As a general rule of software development, it is impossible to keep the -descriptions of the internals up-to-date, and it is quite hard to -document everything. So refer to the source code, whenever you are not -satisfied with this documentation. Please assume that this gives just -hints to you. - -@menu -* Memory map:: The memory map of various components -* Embedded data:: Embedded variables in GRUB -* Filesystem interface:: The generic interface for filesystems -* Command interface:: The generic interface for built-ins -* Bootstrap tricks:: The bootstrap mechanism used in GRUB -* I/O ports detection:: How to probe I/O ports used by INT 13H -* Memory detection:: How to detect all installed RAM -* Low-level disk I/O:: INT 13H disk I/O interrupts -* MBR:: The structure of Master Boot Record -* Partition table:: The format of partition tables -* Submitting patches:: Where and how you should send patches -@end menu - - -@node Memory map -@section The memory map of various components - -GRUB consists of two distinct components, called @dfn{stages}, which are -loaded at different times in the boot process. Because they run -mutual-exclusively, sometimes a memory area overlaps with another -memory area. And, even in one stage, a single memory area can be used -for various purposes, because their usages are mutually exclusive. - -Here is the memory map of the various components: - -@table @asis -@item 0 to 4K-1 -BIOS and real mode interrupts - -@item 0x07BE to 0x07FF -Partition table passed to another boot loader - -@item down from 8K-1 -Real mode stack - -@item 0x2000 to ? -The optional Stage 1.5 is loaded here - -@item 0x2000 to 0x7FFF -Command-line buffer for Multiboot kernels and modules - -@item 0x7C00 to 0x7DFF -Stage 1 is loaded here by BIOS or another boot loader - -@item 0x7F00 to 0x7F42 -LBA drive parameters - -@item 0x8000 to ? -Stage2 is loaded here - -@item The end of Stage 2 to 416K-1 -Heap, in particular used for the menu - -@item down from 416K-1 -Protected mode stack - -@item 416K to 448K-1 -Filesystem buffer - -@item 448K to 479.5K-1 -Raw device buffer - -@item 479.5K to 480K-1 -512-byte scratch area - -@item 480K to 512K-1 -Buffers for various functions, such as password, command-line, cut and -paste, and completion. - -@item The last 1K of lower memory -Disk swapping code and data -@end table - -See the file @file{stage2/shared.h}, for more information. - - -@node Embedded data -@section Embedded variables in GRUB - -Stage 1 and Stage 2 have embedded variables whose locations are -well-defined, so that the installation can patch the binary file -directly without recompilation of the stages. - -In Stage 1, these are defined: - -@table @code -@item 0x3E -The version number (not GRUB's, but the installation mechanism's). - -@item 0x40 -The boot drive. If it is 0xFF, use a drive passed by BIOS. - -@item 0x41 -The flag for if forcing LBA. - -@item 0x42 -The starting address of Stage 2. - -@item 0x44 -The first sector of Stage 2. - -@item 0x48 -The starting segment of Stage 2. - -@item 0x1FE -The signature (@code{0xAA55}). -@end table - -See the file @file{stage1/stage1.S}, for more information. - -In the first sector of Stage 1.5 and Stage 2, the blocklists are -recorded between @code{firstlist} and @code{lastlist}. The address of -@code{lastlist} is determined when assembling the file -@file{stage2/start.S}. - -The trick here is that it is actually read backward, and the first -8-byte blocklist is not read here, but after the pointer is decremented -8 bytes, then after reading it, it decrements again, reads, and so on, -until it is finished. The terminating condition is when the number of -sectors to be read in the next blocklist is zero. - -The format of a blocklist can be seen from the example in the code just -before the @code{firstlist} label. Note that it is always from the -beginning of the disk, but @emph{not} relative to the partition -boundaries. - -In the second sector of Stage 1.5 and Stage 2, these are defined: - -@table @asis -@item @code{0x6} -The version number (likewise, the installation mechanism's). - -@item @code{0x8} -The installed partition. - -@item @code{0xC} -The saved entry number. - -@item @code{0x10} -The identifier. - -@item @code{0x11} -The flag for if forcing LBA. - -@item @code{0x12} -The version string (GRUB's). - -@item @code{0x12} + @dfn{the length of the version string} -The name of a configuration file. -@end table - -See the file @file{stage2/asm.S}, for more information. - - -@node Filesystem interface -@section The generic interface for filesystems - -For any particular partition, it is presumed that only one of the -@dfn{normal} filesystems such as FAT, FFS, or ext2fs can be used, so -there is a switch table managed by the functions in -@file{disk_io.c}. The notation is that you can only @dfn{mount} one at a -time. - -The blocklist filesystem has a special place in the system. In addition -to the @dfn{normal} filesystem (or even without one mounted), you can -access disk blocks directly (in the indicated partition) via the block -list notation. Using the blocklist filesystem doesn't effect any other -filesystem mounts. - -The variables which can be read by the filesystem backend are: - -@vtable @code -@item current_drive -The current BIOS drive number (numbered from 0, if a floppy, and -numbered from 0x80, if a hard disk). - -@item current_partition -The current partition number. - -@item current_slice -The current partition type. - -@item saved_drive -The @dfn{drive} part of the root device. - -@item saved_partition -The @dfn{partition} part of the root device. - -@item part_start -The current partition starting address, in sectors. - -@item part_length -The current partition length, in sectors. - -@item print_possibilities -True when the @code{dir} function should print the possible completions -of a file, and false when it should try to actually open a file of that -name. - -@item FSYS_BUF -Filesystem buffer which is 32K in size, to use in any way which the -filesystem backend desires. -@end vtable - -The variables which need to be written by a filesystem backend are: - -@vtable @code -@item filepos -The current position in the file, in sectors. - -@strong{Caution:} the value of @var{filepos} can be changed out from -under the filesystem code in the current implementation. Don't depend on -it being the same for later calls into the backend code! - -@item filemax -The length of the file. - -@item disk_read_func -The value of @var{disk_read_hook} @emph{only} during reading of data -for the file, not any other fs data, inodes, FAT tables, whatever, then -set to @code{NULL} at all other times (it will be @code{NULL} by -default). If this isn't done correctly, then the @command{testload} and -@command{install} commands won't work correctly. -@end vtable - -The functions expected to be used by the filesystem backend are: - -@ftable @code -@item devread -Only read sectors from within a partition. Sector 0 is the first sector -in the partition. - -@item grub_read -If the backend uses the blocklist code, then @code{grub_read} can be -used, after setting @var{block_file} to 1. - -@item print_a_completion -If @var{print_possibilities} is true, call @code{print_a_completion} for -each possible file name. Otherwise, the file name completion won't work. -@end ftable - -The functions expected to be defined by the filesystem backend are -described at least moderately in the file @file{filesys.h}. Their usage -is fairly evident from their use in the functions in @file{disk_io.c}, -look for the use of the @var{fsys_table} array. - -@strong{Caution:} The semantics are such that then @samp{mount}ing the -filesystem, presume the filesystem buffer @code{FSYS_BUF} is corrupted, -and (re-)load all important contents. When opening and reading a file, -presume that the data from the @samp{mount} is available, and doesn't -get corrupted by the open/read (i.e. multiple opens and/or reads will be -done with only one mount if in the same filesystem). - - -@node Command interface -@section The generic interface for built-ins - -GRUB built-in commands are defined in a uniform interface, whether -they are menu-specific or can be used anywhere. The definition of a -built-in command consists of two parts: the code itself and the table of -the information. - -The code must be a function which takes two arguments, a command-line -string and flags, and returns an @samp{int} value. The @dfn{flags} -argument specifies how the function is called, using a bit mask. The -return value must be zero if successful, otherwise non-zero. So it is -normally enough to return @var{errnum}. - -The table of the information is represented by the structure -@code{struct builtin}, which contains the name of the command, a pointer -to the function, flags, a short description of the command and a long -description of the command. Since the descriptions are used only for -help messages interactively, you don't have to define them, if the -command may not be called interactively (such as @command{title}). - -The table is finally registered in the table @var{builtin_table}, so -that @code{run_script} and @code{enter_cmdline} can find the -command. See the files @file{cmdline.c} and @file{builtins.c}, for more -details. - - -@node Bootstrap tricks -@section The bootstrap mechanism used in GRUB - -The disk space can be used in a boot loader is very restricted because -a MBR (@pxref{MBR}) is only 512 bytes but it also contains a partition -table (@pxref{Partition table}) and a BPB. So the question is how to -make a boot loader code enough small to be fit in a MBR. - -However, GRUB is a very large program, so we break GRUB into 2 (or 3) -distinct components, @dfn{Stage 1} and @dfn{Stage 2} (and optionally -@dfn{Stage 1.5}). @xref{Memory map}, for more information. - -We embed Stage 1 in a MBR or in the boot sector of a partition, and -place Stage 2 in a filesystem. The optional Stage 1.5 can be installed -in a filesystem, in the @dfn{boot loader} area in a FFS or a ReiserFS, -and in the sectors right after a MBR, because Stage 1.5 is enough small -and the sectors right after a MBR is normally an unused region. The size -of this region is the number of sectors per head minus 1. - -Thus, all Stage1 must do is just load Stage2 or Stage1.5. But even if -Stage 1 needs not to support the user interface or the filesystem -interface, it is impossible to make Stage 1 less than 400 bytes, because -GRUB should support both the CHS mode and the LBA mode (@pxref{Low-level -disk I/O}). - -The solution used by GRUB is that Stage 1 loads only the first sector of -Stage 2 (or Stage 1.5) and Stage 2 itself loads the rest. The flow of -Stage 1 is: - -@enumerate -@item -Initialize the system briefly. - -@item -Detect the geometry and the accessing mode of the @dfn{loading drive}. - -@item -Load the first sector of Stage 2. - -@item -Jump to the starting address of the Stage 2. -@end enumerate - -The flow of Stage 2 (and Stage 1.5) is: - -@enumerate -@item -Load the rest of itself to the real starting address, that is, the -starting address plus 512 bytes. The blocklists are stored in the last -part of the first sector. - -@item -Long jump to the real starting address. -@end enumerate - -Note that Stage 2 (or Stage 1.5) does not probe the geometry -or the accessing mode of the @dfn{loading drive}, since Stage 1 has -already probed them. - - -@node I/O ports detection -@section How to probe I/O ports used by INT 13H - -FIXME: I will write this chapter after implementing the new technique. - - - -@node Memory detection -@section How to detect all installed RAM - -FIXME: I doubt if Erich didn't write this chapter only himself wholly, -so I will rewrite this chapter. - - -@node Low-level disk I/O -@section INT 13H disk I/O interrupts - -FIXME: I'm not sure where some part of the original chapter is derived, -so I will rewrite this chapter. - - -@node MBR -@section The structure of Master Boot Record - -FIXME: Likewise. - - -@node Partition table -@section The format of partition tables - -FIXME: Probably the original chapter is derived from "How It Works", so -I will rewrite this chapter. - - -@node Submitting patches -@section Where and how you should send patches - -When you write patches for GRUB, please send them to the mailing list -@email{bug-grub@@gnu.org}. Here is the list of items of which you -should take care: - -@itemize @bullet -@item -Please make your patch as small as possible. Generally, it is not a good -thing to make one big patch which changes many things. Instead, -segregate features and produce many patches. - -@item -Use as late code as possible, for the original code. The CVS repository -always has the current version (@pxref{Obtaining and Building GRUB}). - -@item -Write ChangeLog entries. @xref{Change Logs, , Change Logs, standards, -GNU Coding Standards}, if you don't know how to write ChangeLog. - -@item -Make patches in unified diff format. @samp{diff -urN} is appropriate in -most cases. - -@item -Don't make patches reversely. Reverse patches are difficult to read and -use. - -@item -Be careful enough of the license term and the copyright. Because GRUB -is under GNU General Public License, you may not steal code from -software whose license is incompatible against GPL. And, if you copy -code written by others, you must not ignore their copyrights. Feel free -to ask GRUB maintainers, whenever you are not sure what you should do. - -@item -If your patch is too large to send in e-mail, put it at somewhere we can -see. Usually, you shouldn't send e-mail over 20K. -@end itemize diff --git a/docs/mbchk.1 b/docs/mbchk.1 deleted file mode 100644 index 296ff560d..000000000 --- a/docs/mbchk.1 +++ /dev/null @@ -1,27 +0,0 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. -.TH MBCHK "1" "June 2006" "mbchk (GNU GRUB 0.97)" FSF -.SH NAME -mbchk \- check the format of a Multiboot kernel -.SH SYNOPSIS -.B mbchk -[\fIOPTION\fR]... [\fIFILE\fR]... -.SH DESCRIPTION -Check if the format of FILE complies with the Multiboot Specification. -.PP -\fB\-q\fR, \fB\-\-quiet\fR suppress all normal output -\fB\-h\fR, \fB\-\-help\fR display this help and exit -\fB\-v\fR, \fB\-\-version\fR output version information and exit. -.SH "REPORTING BUGS" -Report bugs to . -.SH "SEE ALSO" -The full documentation for -.B mbchk -is maintained as a Texinfo manual. If the -.B info -and -.B mbchk -programs are properly installed at your site, the command -.IP -.B info mbchk -.PP -should give you access to the complete manual. diff --git a/docs/mdate-sh b/docs/mdate-sh deleted file mode 100644 index 881782eb5..000000000 --- a/docs/mdate-sh +++ /dev/null @@ -1,170 +0,0 @@ -#!/bin/sh -# Get modification time of a file or directory and pretty-print it. - -scriptversion=2004-12-08.12 - -# Copyright (C) 1995, 1996, 1997, 2003, 2004 Free Software Foundation, Inc. -# written by Ulrich Drepper , June 1995 -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -case $1 in - '') - echo "$0: No file. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: mdate-sh [--help] [--version] FILE - -Pretty-print the modification time of FILE. - -Report bugs to . -EOF - exit 0 - ;; - -v | --v*) - echo "mdate-sh $scriptversion" - exit 0 - ;; -esac - -# Prevent date giving response in another language. -LANG=C -export LANG -LC_ALL=C -export LC_ALL -LC_TIME=C -export LC_TIME - -save_arg1="$1" - -# Find out how to get the extended ls output of a file or directory. -if ls -L /dev/null 1>/dev/null 2>&1; then - ls_command='ls -L -l -d' -else - ls_command='ls -l -d' -fi - -# A `ls -l' line looks as follows on OS/2. -# drwxrwx--- 0 Aug 11 2001 foo -# This differs from Unix, which adds ownership information. -# drwxrwx--- 2 root root 4096 Aug 11 2001 foo -# -# To find the date, we split the line on spaces and iterate on words -# until we find a month. This cannot work with files whose owner is a -# user named `Jan', or `Feb', etc. However, it's unlikely that `/' -# will be owned by a user whose name is a month. So we first look at -# the extended ls output of the root directory to decide how many -# words should be skipped to get the date. - -# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. -set x`ls -l -d /` - -# Find which argument is the month. -month= -command= -until test $month -do - shift - # Add another shift to the command. - command="$command shift;" - case $1 in - Jan) month=January; nummonth=1;; - Feb) month=February; nummonth=2;; - Mar) month=March; nummonth=3;; - Apr) month=April; nummonth=4;; - May) month=May; nummonth=5;; - Jun) month=June; nummonth=6;; - Jul) month=July; nummonth=7;; - Aug) month=August; nummonth=8;; - Sep) month=September; nummonth=9;; - Oct) month=October; nummonth=10;; - Nov) month=November; nummonth=11;; - Dec) month=December; nummonth=12;; - esac -done - -# Get the extended ls output of the file or directory. -set x`eval "$ls_command \"\$save_arg1\""` - -# Remove all preceding arguments -eval $command - -# Get the month. Next argument is day, followed by the year or time. -case $1 in - Jan) month=January; nummonth=1;; - Feb) month=February; nummonth=2;; - Mar) month=March; nummonth=3;; - Apr) month=April; nummonth=4;; - May) month=May; nummonth=5;; - Jun) month=June; nummonth=6;; - Jul) month=July; nummonth=7;; - Aug) month=August; nummonth=8;; - Sep) month=September; nummonth=9;; - Oct) month=October; nummonth=10;; - Nov) month=November; nummonth=11;; - Dec) month=December; nummonth=12;; -esac - -day=$2 - -# Here we have to deal with the problem that the ls output gives either -# the time of day or the year. -case $3 in - *:*) set `date`; eval year=\$$# - case $2 in - Jan) nummonthtod=1;; - Feb) nummonthtod=2;; - Mar) nummonthtod=3;; - Apr) nummonthtod=4;; - May) nummonthtod=5;; - Jun) nummonthtod=6;; - Jul) nummonthtod=7;; - Aug) nummonthtod=8;; - Sep) nummonthtod=9;; - Oct) nummonthtod=10;; - Nov) nummonthtod=11;; - Dec) nummonthtod=12;; - esac - # For the first six month of the year the time notation can also - # be used for files modified in the last year. - if (expr $nummonth \> $nummonthtod) > /dev/null; - then - year=`expr $year - 1` - fi;; - *) year=$3;; -esac - -# The result. -echo $day $month $year - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/docs/menu.lst b/docs/menu.lst deleted file mode 100644 index ae58aee7c..000000000 --- a/docs/menu.lst +++ /dev/null @@ -1,82 +0,0 @@ -# -# Sample boot menu configuration file -# - -# Boot automatically after 30 secs. -timeout 30 - -# By default, boot the first entry. -default 0 - -# Fallback to the second entry. -fallback 1 - -# For booting GNU/Hurd -title GNU/Hurd -root (hd0,0) -kernel /boot/gnumach.gz root=hd0s1 -module /boot/serverboot.gz - -# For booting GNU/Linux -title GNU/Linux -root (hd1,0) -kernel /vmlinuz root=/dev/hdb1 -#initrd /initrd.img - -# For booting GNU/kFreeBSD -title GNU/kFreeBSD -root (hd0,2,a) -kernel /boot/loader.gz - -# For booting GNU/kNetBSD -title GNU/kNetBSD -root (hd0,2,a) -kernel --type=netbsd /boot/knetbsd.gz - -# For booting Mach (getting kernel from floppy) -title Utah Mach4 multiboot -root (hd0,2) -pause Insert the diskette now!! -kernel (fd0)/boot/kernel root=hd0s3 -module (fd0)/boot/bootstrap - -# For booting FreeBSD -title FreeBSD -root (hd0,2,a) -kernel /boot/loader - -# For booting NetBSD -title NetBSD -root (hd0,2,a) -kernel --type=netbsd /netbsd - -# For booting OpenBSD -title OpenBSD -root (hd0,2,a) -kernel --type=netbsd /bsd - -# For booting OS/2 -title OS/2 -root (hd0,1) -makeactive -# chainload OS/2 bootloader from the first sector -chainloader +1 -# This is similar to "chainload", but loads a specific file -#chainloader /boot/chain.os2 - -# For booting Windows NT or Windows95 -title Windows NT / Windows 95 boot menu -rootnoverify (hd0,0) -makeactive -chainloader +1 -# For loading DOS if Windows NT is installed -# chainload /bootsect.dos - -# For installing GRUB into the hard disk -title Install GRUB into the hard disk -root (hd0,0) -setup (hd0) - -# Change the colors. -title Change the colors -color light-green/brown blink-red/blue diff --git a/docs/stamp-vti b/docs/stamp-vti deleted file mode 100644 index b97de24c8..000000000 --- a/docs/stamp-vti +++ /dev/null @@ -1,4 +0,0 @@ -@set UPDATED 8 May 2005 -@set UPDATED-MONTH May 2005 -@set EDITION 0.97 -@set VERSION 0.97 diff --git a/docs/texinfo.tex b/docs/texinfo.tex deleted file mode 100644 index c93912a05..000000000 --- a/docs/texinfo.tex +++ /dev/null @@ -1,7086 +0,0 @@ -% texinfo.tex -- TeX macros to handle Texinfo files. -% -% Load plain if necessary, i.e., if running under initex. -\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi -% -\def\texinfoversion{2004-11-25.16} -% -% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, -% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software -% Foundation, Inc. -% -% This texinfo.tex file is free software; you can redistribute it and/or -% modify it under the terms of the GNU General Public License as -% published by the Free Software Foundation; either version 2, or (at -% your option) any later version. -% -% This texinfo.tex file is distributed in the hope that it will be -% useful, but WITHOUT ANY WARRANTY; without even the implied warranty -% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -% General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this texinfo.tex file; see the file COPYING. If not, write -% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -% Boston, MA 02111-1307, USA. -% -% As a special exception, when this file is read by TeX when processing -% a Texinfo source document, you may use the result without -% restriction. (This has been our intent since Texinfo was invented.) -% -% Please try the latest version of texinfo.tex before submitting bug -% reports; you can get the latest version from: -% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or -% ftp://tug.org/tex/texinfo.tex -% (and all CTAN mirrors, see http://www.ctan.org). -% The texinfo.tex in any given distribution could well be out -% of date, so if that's what you're using, please check. -% -% Send bug reports to bug-texinfo@gnu.org. Please include including a -% complete document in each bug report with which we can reproduce the -% problem. Patches are, of course, greatly appreciated. -% -% To process a Texinfo manual with TeX, it's most reliable to use the -% texi2dvi shell script that comes with the distribution. For a simple -% manual foo.texi, however, you can get away with this: -% tex foo.texi -% texindex foo.?? -% tex foo.texi -% tex foo.texi -% dvips foo.dvi -o # or whatever; this makes foo.ps. -% The extra TeX runs get the cross-reference information correct. -% Sometimes one run after texindex suffices, and sometimes you need more -% than two; texi2dvi does it as many times as necessary. -% -% It is possible to adapt texinfo.tex for other languages, to some -% extent. You can get the existing language-specific files from the -% full Texinfo distribution. -% -% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. - - -\message{Loading texinfo [version \texinfoversion]:} - -% If in a .fmt file, print the version number -% and turn on active characters that we couldn't do earlier because -% they might have appeared in the input file name. -\everyjob{\message{[Texinfo version \texinfoversion]}% - \catcode`+=\active \catcode`\_=\active} - -\message{Basics,} -\chardef\other=12 - -% We never want plain's \outer definition of \+ in Texinfo. -% For @tex, we can use \tabalign. -\let\+ = \relax - -% Save some plain tex macros whose names we will redefine. -\let\ptexb=\b -\let\ptexbullet=\bullet -\let\ptexc=\c -\let\ptexcomma=\, -\let\ptexdot=\. -\let\ptexdots=\dots -\let\ptexend=\end -\let\ptexequiv=\equiv -\let\ptexexclam=\! -\let\ptexfootnote=\footnote -\let\ptexgtr=> -\let\ptexhat=^ -\let\ptexi=\i -\let\ptexindent=\indent -\let\ptexinsert=\insert -\let\ptexlbrace=\{ -\let\ptexless=< -\let\ptexnewwrite\newwrite -\let\ptexnoindent=\noindent -\let\ptexplus=+ -\let\ptexrbrace=\} -\let\ptexslash=\/ -\let\ptexstar=\* -\let\ptext=\t - -% If this character appears in an error message or help string, it -% starts a new line in the output. -\newlinechar = `^^J - -% Use TeX 3.0's \inputlineno to get the line number, for better error -% messages, but if we're using an old version of TeX, don't do anything. -% -\ifx\inputlineno\thisisundefined - \let\linenumber = \empty % Pre-3.0. -\else - \def\linenumber{l.\the\inputlineno:\space} -\fi - -% Set up fixed words for English if not already set. -\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi -\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi -\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi -\ifx\putwordin\undefined \gdef\putwordin{in}\fi -\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi -\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi -\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi -\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi -\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi -\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi -\ifx\putwordof\undefined \gdef\putwordof{of}\fi -\ifx\putwordon\undefined \gdef\putwordon{on}\fi -\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi -\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi -\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi -\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi -\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi -\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi -\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi -% -\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi -\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi -\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi -\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi -\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi -\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi -\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi -\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi -\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi -\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi -\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi -\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi -% -\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi -\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi -\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi -\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi -\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi - -% In some macros, we cannot use the `\? notation---the left quote is -% in some cases the escape char. -\chardef\colonChar = `\: -\chardef\commaChar = `\, -\chardef\dotChar = `\. -\chardef\exclamChar= `\! -\chardef\questChar = `\? -\chardef\semiChar = `\; -\chardef\underChar = `\_ - -\chardef\spaceChar = `\ % -\chardef\spacecat = 10 -\def\spaceisspace{\catcode\spaceChar=\spacecat} - -% Ignore a token. -% -\def\gobble#1{} - -% The following is used inside several \edef's. -\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} - -% Hyphenation fixes. -\hyphenation{ - Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script - ap-pen-dix bit-map bit-maps - data-base data-bases eshell fall-ing half-way long-est man-u-script - man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm - par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces - spell-ing spell-ings - stand-alone strong-est time-stamp time-stamps which-ever white-space - wide-spread wrap-around -} - -% Margin to add to right of even pages, to left of odd pages. -\newdimen\bindingoffset -\newdimen\normaloffset -\newdimen\pagewidth \newdimen\pageheight - -% For a final copy, take out the rectangles -% that mark overfull boxes (in case you have decided -% that the text looks ok even though it passes the margin). -% -\def\finalout{\overfullrule=0pt} - -% @| inserts a changebar to the left of the current line. It should -% surround any changed text. This approach does *not* work if the -% change spans more than two lines of output. To handle that, we would -% have adopt a much more difficult approach (putting marks into the main -% vertical list for the beginning and end of each change). -% -\def\|{% - % \vadjust can only be used in horizontal mode. - \leavevmode - % - % Append this vertical mode material after the current line in the output. - \vadjust{% - % We want to insert a rule with the height and depth of the current - % leading; that is exactly what \strutbox is supposed to record. - \vskip-\baselineskip - % - % \vadjust-items are inserted at the left edge of the type. So - % the \llap here moves out into the left-hand margin. - \llap{% - % - % For a thicker or thinner bar, change the `1pt'. - \vrule height\baselineskip width1pt - % - % This is the space between the bar and the text. - \hskip 12pt - }% - }% -} - -% Sometimes it is convenient to have everything in the transcript file -% and nothing on the terminal. We don't just call \tracingall here, -% since that produces some useless output on the terminal. We also make -% some effort to order the tracing commands to reduce output in the log -% file; cf. trace.sty in LaTeX. -% -\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% -\def\loggingall{% - \tracingstats2 - \tracingpages1 - \tracinglostchars2 % 2 gives us more in etex - \tracingparagraphs1 - \tracingoutput1 - \tracingmacros2 - \tracingrestores1 - \showboxbreadth\maxdimen \showboxdepth\maxdimen - \ifx\eTeXversion\undefined\else % etex gives us more logging - \tracingscantokens1 - \tracingifs1 - \tracinggroups1 - \tracingnesting2 - \tracingassigns1 - \fi - \tracingcommands3 % 3 gives us more in etex - \errorcontextlines16 -}% - -% add check for \lastpenalty to plain's definitions. If the last thing -% we did was a \nobreak, we don't want to insert more space. -% -\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount - \removelastskip\penalty-50\smallskip\fi\fi} -\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount - \removelastskip\penalty-100\medskip\fi\fi} -\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount - \removelastskip\penalty-200\bigskip\fi\fi} - -% For @cropmarks command. -% Do @cropmarks to get crop marks. -% -\newif\ifcropmarks -\let\cropmarks = \cropmarkstrue -% -% Dimensions to add cropmarks at corners. -% Added by P. A. MacKay, 12 Nov. 1986 -% -\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines -\newdimen\cornerlong \cornerlong=1pc -\newdimen\cornerthick \cornerthick=.3pt -\newdimen\topandbottommargin \topandbottommargin=.75in - -% Main output routine. -\chardef\PAGE = 255 -\output = {\onepageout{\pagecontents\PAGE}} - -\newbox\headlinebox -\newbox\footlinebox - -% \onepageout takes a vbox as an argument. Note that \pagecontents -% does insertions, but you have to call it yourself. -\def\onepageout#1{% - \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi - % - \ifodd\pageno \advance\hoffset by \bindingoffset - \else \advance\hoffset by -\bindingoffset\fi - % - % Do this outside of the \shipout so @code etc. will be expanded in - % the headline as they should be, not taken literally (outputting ''code). - \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% - \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% - % - {% - % Have to do this stuff outside the \shipout because we want it to - % take effect in \write's, yet the group defined by the \vbox ends - % before the \shipout runs. - % - \escapechar = `\\ % use backslash in output files. - \indexdummies % don't expand commands in the output. - \normalturnoffactive % \ in index entries must not stay \, e.g., if - % the page break happens to be in the middle of an example. - \shipout\vbox{% - % Do this early so pdf references go to the beginning of the page. - \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi - % - \ifcropmarks \vbox to \outervsize\bgroup - \hsize = \outerhsize - \vskip-\topandbottommargin - \vtop to0pt{% - \line{\ewtop\hfil\ewtop}% - \nointerlineskip - \line{% - \vbox{\moveleft\cornerthick\nstop}% - \hfill - \vbox{\moveright\cornerthick\nstop}% - }% - \vss}% - \vskip\topandbottommargin - \line\bgroup - \hfil % center the page within the outer (page) hsize. - \ifodd\pageno\hskip\bindingoffset\fi - \vbox\bgroup - \fi - % - \unvbox\headlinebox - \pagebody{#1}% - \ifdim\ht\footlinebox > 0pt - % Only leave this space if the footline is nonempty. - % (We lessened \vsize for it in \oddfootingxxx.) - % The \baselineskip=24pt in plain's \makefootline has no effect. - \vskip 2\baselineskip - \unvbox\footlinebox - \fi - % - \ifcropmarks - \egroup % end of \vbox\bgroup - \hfil\egroup % end of (centering) \line\bgroup - \vskip\topandbottommargin plus1fill minus1fill - \boxmaxdepth = \cornerthick - \vbox to0pt{\vss - \line{% - \vbox{\moveleft\cornerthick\nsbot}% - \hfill - \vbox{\moveright\cornerthick\nsbot}% - }% - \nointerlineskip - \line{\ewbot\hfil\ewbot}% - }% - \egroup % \vbox from first cropmarks clause - \fi - }% end of \shipout\vbox - }% end of group with \normalturnoffactive - \advancepageno - \ifnum\outputpenalty>-20000 \else\dosupereject\fi -} - -\newinsert\margin \dimen\margin=\maxdimen - -\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} -{\catcode`\@ =11 -\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi -% marginal hacks, juha@viisa.uucp (Juha Takala) -\ifvoid\margin\else % marginal info is present - \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi -\dimen@=\dp#1 \unvbox#1 -\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi -\ifr@ggedbottom \kern-\dimen@ \vfil \fi} -} - -% Here are the rules for the cropmarks. Note that they are -% offset so that the space between them is truly \outerhsize or \outervsize -% (P. A. MacKay, 12 November, 1986) -% -\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} -\def\nstop{\vbox - {\hrule height\cornerthick depth\cornerlong width\cornerthick}} -\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} -\def\nsbot{\vbox - {\hrule height\cornerlong depth\cornerthick width\cornerthick}} - -% Parse an argument, then pass it to #1. The argument is the rest of -% the input line (except we remove a trailing comment). #1 should be a -% macro which expects an ordinary undelimited TeX argument. -% -\def\parsearg{\parseargusing{}} -\def\parseargusing#1#2{% - \def\next{#2}% - \begingroup - \obeylines - \spaceisspace - #1% - \parseargline\empty% Insert the \empty token, see \finishparsearg below. -} - -{\obeylines % - \gdef\parseargline#1^^M{% - \endgroup % End of the group started in \parsearg. - \argremovecomment #1\comment\ArgTerm% - }% -} - -% First remove any @comment, then any @c comment. -\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} -\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} - -% Each occurence of `\^^M' or `\^^M' is replaced by a single space. -% -% \argremovec might leave us with trailing space, e.g., -% @end itemize @c foo -% This space token undergoes the same procedure and is eventually removed -% by \finishparsearg. -% -\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} -\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} -\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% - \def\temp{#3}% - \ifx\temp\empty - % We cannot use \next here, as it holds the macro to run; - % thus we reuse \temp. - \let\temp\finishparsearg - \else - \let\temp\argcheckspaces - \fi - % Put the space token in: - \temp#1 #3\ArgTerm -} - -% If a _delimited_ argument is enclosed in braces, they get stripped; so -% to get _exactly_ the rest of the line, we had to prevent such situation. -% We prepended an \empty token at the very beginning and we expand it now, -% just before passing the control to \next. -% (Similarily, we have to think about #3 of \argcheckspacesY above: it is -% either the null string, or it ends with \^^M---thus there is no danger -% that a pair of braces would be stripped. -% -% But first, we have to remove the trailing space token. -% -\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}} - -% \parseargdef\foo{...} -% is roughly equivalent to -% \def\foo{\parsearg\Xfoo} -% \def\Xfoo#1{...} -% -% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my -% favourite TeX trick. --kasal, 16nov03 - -\def\parseargdef#1{% - \expandafter \doparseargdef \csname\string#1\endcsname #1% -} -\def\doparseargdef#1#2{% - \def#2{\parsearg#1}% - \def#1##1% -} - -% Several utility definitions with active space: -{ - \obeyspaces - \gdef\obeyedspace{ } - - % Make each space character in the input produce a normal interword - % space in the output. Don't allow a line break at this space, as this - % is used only in environments like @example, where each line of input - % should produce a line of output anyway. - % - \gdef\sepspaces{\obeyspaces\let =\tie} - - % If an index command is used in an @example environment, any spaces - % therein should become regular spaces in the raw index file, not the - % expansion of \tie (\leavevmode \penalty \@M \ ). - \gdef\unsepspaces{\let =\space} -} - - -\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} - -% Define the framework for environments in texinfo.tex. It's used like this: -% -% \envdef\foo{...} -% \def\Efoo{...} -% -% It's the responsibility of \envdef to insert \begingroup before the -% actual body; @end closes the group after calling \Efoo. \envdef also -% defines \thisenv, so the current environment is known; @end checks -% whether the environment name matches. The \checkenv macro can also be -% used to check whether the current environment is the one expected. -% -% Non-false conditionals (@iftex, @ifset) don't fit into this, so they -% are not treated as enviroments; they don't open a group. (The -% implementation of @end takes care not to call \endgroup in this -% special case.) - - -% At runtime, environments start with this: -\def\startenvironment#1{\begingroup\def\thisenv{#1}} -% initialize -\let\thisenv\empty - -% ... but they get defined via ``\envdef\foo{...}'': -\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} -\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} - -% Check whether we're in the right environment: -\def\checkenv#1{% - \def\temp{#1}% - \ifx\thisenv\temp - \else - \badenverr - \fi -} - -% Evironment mismatch, #1 expected: -\def\badenverr{% - \errhelp = \EMsimple - \errmessage{This command can appear only \inenvironment\temp, - not \inenvironment\thisenv}% -} -\def\inenvironment#1{% - \ifx#1\empty - out of any environment% - \else - in environment \expandafter\string#1% - \fi -} - -% @end foo executes the definition of \Efoo. -% But first, it executes a specialized version of \checkenv -% -\parseargdef\end{% - \if 1\csname iscond.#1\endcsname - \else - % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 - \expandafter\checkenv\csname#1\endcsname - \csname E#1\endcsname - \endgroup - \fi -} - -\newhelp\EMsimple{Press RETURN to continue.} - - -%% Simple single-character @ commands - -% @@ prints an @ -% Kludge this until the fonts are right (grr). -\def\@{{\tt\char64}} - -% This is turned off because it was never documented -% and you can use @w{...} around a quote to suppress ligatures. -%% Define @` and @' to be the same as ` and ' -%% but suppressing ligatures. -%\def\`{{`}} -%\def\'{{'}} - -% Used to generate quoted braces. -\def\mylbrace {{\tt\char123}} -\def\myrbrace {{\tt\char125}} -\let\{=\mylbrace -\let\}=\myrbrace -\begingroup - % Definitions to produce \{ and \} commands for indices, - % and @{ and @} for the aux file. - \catcode`\{ = \other \catcode`\} = \other - \catcode`\[ = 1 \catcode`\] = 2 - \catcode`\! = 0 \catcode`\\ = \other - !gdef!lbracecmd[\{]% - !gdef!rbracecmd[\}]% - !gdef!lbraceatcmd[@{]% - !gdef!rbraceatcmd[@}]% -!endgroup - -% @comma{} to avoid , parsing problems. -\let\comma = , - -% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent -% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. -\let\, = \c -\let\dotaccent = \. -\def\ringaccent#1{{\accent23 #1}} -\let\tieaccent = \t -\let\ubaraccent = \b -\let\udotaccent = \d - -% Other special characters: @questiondown @exclamdown @ordf @ordm -% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. -\def\questiondown{?`} -\def\exclamdown{!`} -\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} -\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} - -% Dotless i and dotless j, used for accents. -\def\imacro{i} -\def\jmacro{j} -\def\dotless#1{% - \def\temp{#1}% - \ifx\temp\imacro \ptexi - \else\ifx\temp\jmacro \j - \else \errmessage{@dotless can be used only with i or j}% - \fi\fi -} - -% The \TeX{} logo, as in plain, but resetting the spacing so that a -% period following counts as ending a sentence. (Idea found in latex.) -% -\edef\TeX{\TeX \spacefactor=1000 } - -% @LaTeX{} logo. Not quite the same results as the definition in -% latex.ltx, since we use a different font for the raised A; it's most -% convenient for us to use an explicitly smaller font, rather than using -% the \scriptstyle font (since we don't reset \scriptstyle and -% \scriptscriptstyle). -% -\def\LaTeX{% - L\kern-.36em - {\setbox0=\hbox{T}% - \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% - \kern-.15em - \TeX -} - -% Be sure we're in horizontal mode when doing a tie, since we make space -% equivalent to this in @example-like environments. Otherwise, a space -% at the beginning of a line will start with \penalty -- and -% since \penalty is valid in vertical mode, we'd end up putting the -% penalty on the vertical list instead of in the new paragraph. -{\catcode`@ = 11 - % Avoid using \@M directly, because that causes trouble - % if the definition is written into an index file. - \global\let\tiepenalty = \@M - \gdef\tie{\leavevmode\penalty\tiepenalty\ } -} - -% @: forces normal size whitespace following. -\def\:{\spacefactor=1000 } - -% @* forces a line break. -\def\*{\hfil\break\hbox{}\ignorespaces} - -% @/ allows a line break. -\let\/=\allowbreak - -% @. is an end-of-sentence period. -\def\.{.\spacefactor=3000 } - -% @! is an end-of-sentence bang. -\def\!{!\spacefactor=3000 } - -% @? is an end-of-sentence query. -\def\?{?\spacefactor=3000 } - -% @w prevents a word break. Without the \leavevmode, @w at the -% beginning of a paragraph, when TeX is still in vertical mode, would -% produce a whole line of output instead of starting the paragraph. -\def\w#1{\leavevmode\hbox{#1}} - -% @group ... @end group forces ... to be all on one page, by enclosing -% it in a TeX vbox. We use \vtop instead of \vbox to construct the box -% to keep its height that of a normal line. According to the rules for -% \topskip (p.114 of the TeXbook), the glue inserted is -% max (\topskip - \ht (first item), 0). If that height is large, -% therefore, no glue is inserted, and the space between the headline and -% the text is small, which looks bad. -% -% Another complication is that the group might be very large. This can -% cause the glue on the previous page to be unduly stretched, because it -% does not have much material. In this case, it's better to add an -% explicit \vfill so that the extra space is at the bottom. The -% threshold for doing this is if the group is more than \vfilllimit -% percent of a page (\vfilllimit can be changed inside of @tex). -% -\newbox\groupbox -\def\vfilllimit{0.7} -% -\envdef\group{% - \ifnum\catcode`\^^M=\active \else - \errhelp = \groupinvalidhelp - \errmessage{@group invalid in context where filling is enabled}% - \fi - \startsavinginserts - % - \setbox\groupbox = \vtop\bgroup - % Do @comment since we are called inside an environment such as - % @example, where each end-of-line in the input causes an - % end-of-line in the output. We don't want the end-of-line after - % the `@group' to put extra space in the output. Since @group - % should appear on a line by itself (according to the Texinfo - % manual), we don't worry about eating any user text. - \comment -} -% -% The \vtop produces a box with normal height and large depth; thus, TeX puts -% \baselineskip glue before it, and (when the next line of text is done) -% \lineskip glue after it. Thus, space below is not quite equal to space -% above. But it's pretty close. -\def\Egroup{% - % To get correct interline space between the last line of the group - % and the first line afterwards, we have to propagate \prevdepth. - \endgraf % Not \par, as it may have been set to \lisppar. - \global\dimen1 = \prevdepth - \egroup % End the \vtop. - % \dimen0 is the vertical size of the group's box. - \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox - % \dimen2 is how much space is left on the page (more or less). - \dimen2 = \pageheight \advance\dimen2 by -\pagetotal - % if the group doesn't fit on the current page, and it's a big big - % group, force a page break. - \ifdim \dimen0 > \dimen2 - \ifdim \pagetotal < \vfilllimit\pageheight - \page - \fi - \fi - \box\groupbox - \prevdepth = \dimen1 - \checkinserts -} -% -% TeX puts in an \escapechar (i.e., `@') at the beginning of the help -% message, so this ends up printing `@group can only ...'. -% -\newhelp\groupinvalidhelp{% -group can only be used in environments such as @example,^^J% -where each line of input produces a line of output.} - -% @need space-in-mils -% forces a page break if there is not space-in-mils remaining. - -\newdimen\mil \mil=0.001in - -% Old definition--didn't work. -%\parseargdef\need{\par % -%% This method tries to make TeX break the page naturally -%% if the depth of the box does not fit. -%{\baselineskip=0pt% -%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak -%\prevdepth=-1000pt -%}} - -\parseargdef\need{% - % Ensure vertical mode, so we don't make a big box in the middle of a - % paragraph. - \par - % - % If the @need value is less than one line space, it's useless. - \dimen0 = #1\mil - \dimen2 = \ht\strutbox - \advance\dimen2 by \dp\strutbox - \ifdim\dimen0 > \dimen2 - % - % Do a \strut just to make the height of this box be normal, so the - % normal leading is inserted relative to the preceding line. - % And a page break here is fine. - \vtop to #1\mil{\strut\vfil}% - % - % TeX does not even consider page breaks if a penalty added to the - % main vertical list is 10000 or more. But in order to see if the - % empty box we just added fits on the page, we must make it consider - % page breaks. On the other hand, we don't want to actually break the - % page after the empty box. So we use a penalty of 9999. - % - % There is an extremely small chance that TeX will actually break the - % page at this \penalty, if there are no other feasible breakpoints in - % sight. (If the user is using lots of big @group commands, which - % almost-but-not-quite fill up a page, TeX will have a hard time doing - % good page breaking, for example.) However, I could not construct an - % example where a page broke at this \penalty; if it happens in a real - % document, then we can reconsider our strategy. - \penalty9999 - % - % Back up by the size of the box, whether we did a page break or not. - \kern -#1\mil - % - % Do not allow a page break right after this kern. - \nobreak - \fi -} - -% @br forces paragraph break (and is undocumented). - -\let\br = \par - -% @page forces the start of a new page. -% -\def\page{\par\vfill\supereject} - -% @exdent text.... -% outputs text on separate line in roman font, starting at standard page margin - -% This records the amount of indent in the innermost environment. -% That's how much \exdent should take out. -\newskip\exdentamount - -% This defn is used inside fill environments such as @defun. -\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} - -% This defn is used inside nofill environments such as @example. -\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount - \leftline{\hskip\leftskip{\rm#1}}}} - -% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current -% paragraph. For more general purposes, use the \margin insertion -% class. WHICH is `l' or `r'. -% -\newskip\inmarginspacing \inmarginspacing=1cm -\def\strutdepth{\dp\strutbox} -% -\def\doinmargin#1#2{\strut\vadjust{% - \nobreak - \kern-\strutdepth - \vtop to \strutdepth{% - \baselineskip=\strutdepth - \vss - % if you have multiple lines of stuff to put here, you'll need to - % make the vbox yourself of the appropriate size. - \ifx#1l% - \llap{\ignorespaces #2\hskip\inmarginspacing}% - \else - \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% - \fi - \null - }% -}} -\def\inleftmargin{\doinmargin l} -\def\inrightmargin{\doinmargin r} -% -% @inmargin{TEXT [, RIGHT-TEXT]} -% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; -% else use TEXT for both). -% -\def\inmargin#1{\parseinmargin #1,,\finish} -\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \def\lefttext{#1}% have both texts - \def\righttext{#2}% - \else - \def\lefttext{#1}% have only one text - \def\righttext{#1}% - \fi - % - \ifodd\pageno - \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin - \else - \def\temp{\inleftmargin\lefttext}% - \fi - \temp -} - -% @include file insert text of that file as input. -% -\def\include{\parseargusing\filenamecatcodes\includezzz} -\def\includezzz#1{% - \pushthisfilestack - \def\thisfile{#1}% - {% - \makevalueexpandable - \def\temp{\input #1 }% - \expandafter - }\temp - \popthisfilestack -} -\def\filenamecatcodes{% - \catcode`\\=\other - \catcode`~=\other - \catcode`^=\other - \catcode`_=\other - \catcode`|=\other - \catcode`<=\other - \catcode`>=\other - \catcode`+=\other - \catcode`-=\other -} - -\def\pushthisfilestack{% - \expandafter\pushthisfilestackX\popthisfilestack\StackTerm -} -\def\pushthisfilestackX{% - \expandafter\pushthisfilestackY\thisfile\StackTerm -} -\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% - \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% -} - -\def\popthisfilestack{\errthisfilestackempty} -\def\errthisfilestackempty{\errmessage{Internal error: - the stack of filenames is empty.}} - -\def\thisfile{} - -% @center line -% outputs that line, centered. -% -\parseargdef\center{% - \ifhmode - \let\next\centerH - \else - \let\next\centerV - \fi - \next{\hfil \ignorespaces#1\unskip \hfil}% -} -\def\centerH#1{% - {% - \hfil\break - \advance\hsize by -\leftskip - \advance\hsize by -\rightskip - \line{#1}% - \break - }% -} -\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} - -% @sp n outputs n lines of vertical space - -\parseargdef\sp{\vskip #1\baselineskip} - -% @comment ...line which is ignored... -% @c is the same as @comment -% @ignore ... @end ignore is another way to write a comment - -\def\comment{\begingroup \catcode`\^^M=\other% -\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% -\commentxxx} -{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} - -\let\c=\comment - -% @paragraphindent NCHARS -% We'll use ems for NCHARS, close enough. -% NCHARS can also be the word `asis' or `none'. -% We cannot feasibly implement @paragraphindent asis, though. -% -\def\asisword{asis} % no translation, these are keywords -\def\noneword{none} -% -\parseargdef\paragraphindent{% - \def\temp{#1}% - \ifx\temp\asisword - \else - \ifx\temp\noneword - \defaultparindent = 0pt - \else - \defaultparindent = #1em - \fi - \fi - \parindent = \defaultparindent -} - -% @exampleindent NCHARS -% We'll use ems for NCHARS like @paragraphindent. -% It seems @exampleindent asis isn't necessary, but -% I preserve it to make it similar to @paragraphindent. -\parseargdef\exampleindent{% - \def\temp{#1}% - \ifx\temp\asisword - \else - \ifx\temp\noneword - \lispnarrowing = 0pt - \else - \lispnarrowing = #1em - \fi - \fi -} - -% @firstparagraphindent WORD -% If WORD is `none', then suppress indentation of the first paragraph -% after a section heading. If WORD is `insert', then do indent at such -% paragraphs. -% -% The paragraph indentation is suppressed or not by calling -% \suppressfirstparagraphindent, which the sectioning commands do. -% We switch the definition of this back and forth according to WORD. -% By default, we suppress indentation. -% -\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} -\def\insertword{insert} -% -\parseargdef\firstparagraphindent{% - \def\temp{#1}% - \ifx\temp\noneword - \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent - \else\ifx\temp\insertword - \let\suppressfirstparagraphindent = \relax - \else - \errhelp = \EMsimple - \errmessage{Unknown @firstparagraphindent option `\temp'}% - \fi\fi -} - -% Here is how we actually suppress indentation. Redefine \everypar to -% \kern backwards by \parindent, and then reset itself to empty. -% -% We also make \indent itself not actually do anything until the next -% paragraph. -% -\gdef\dosuppressfirstparagraphindent{% - \gdef\indent{% - \restorefirstparagraphindent - \indent - }% - \gdef\noindent{% - \restorefirstparagraphindent - \noindent - }% - \global\everypar = {% - \kern -\parindent - \restorefirstparagraphindent - }% -} - -\gdef\restorefirstparagraphindent{% - \global \let \indent = \ptexindent - \global \let \noindent = \ptexnoindent - \global \everypar = {}% -} - - -% @asis just yields its argument. Used with @table, for example. -% -\def\asis#1{#1} - -% @math outputs its argument in math mode. -% -% One complication: _ usually means subscripts, but it could also mean -% an actual _ character, as in @math{@var{some_variable} + 1}. So make -% _ active, and distinguish by seeing if the current family is \slfam, -% which is what @var uses. -{ - \catcode\underChar = \active - \gdef\mathunderscore{% - \catcode\underChar=\active - \def_{\ifnum\fam=\slfam \_\else\sb\fi}% - } -} -% Another complication: we want \\ (and @\) to output a \ character. -% FYI, plain.tex uses \\ as a temporary control sequence (why?), but -% this is not advertised and we don't care. Texinfo does not -% otherwise define @\. -% -% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. -\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} -% -\def\math{% - \tex - \mathunderscore - \let\\ = \mathbackslash - \mathactive - $\finishmath -} -\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. - -% Some active characters (such as <) are spaced differently in math. -% We have to reset their definitions in case the @math was an argument -% to a command which sets the catcodes (such as @item or @section). -% -{ - \catcode`^ = \active - \catcode`< = \active - \catcode`> = \active - \catcode`+ = \active - \gdef\mathactive{% - \let^ = \ptexhat - \let< = \ptexless - \let> = \ptexgtr - \let+ = \ptexplus - } -} - -% @bullet and @minus need the same treatment as @math, just above. -\def\bullet{$\ptexbullet$} -\def\minus{$-$} - -% @dots{} outputs an ellipsis using the current font. -% We do .5em per period so that it has the same spacing in a typewriter -% font as three actual period characters. -% -\def\dots{% - \leavevmode - \hbox to 1.5em{% - \hskip 0pt plus 0.25fil - .\hfil.\hfil.% - \hskip 0pt plus 0.5fil - }% -} - -% @enddots{} is an end-of-sentence ellipsis. -% -\def\enddots{% - \dots - \spacefactor=3000 -} - -% @comma{} is so commas can be inserted into text without messing up -% Texinfo's parsing. -% -\let\comma = , - -% @refill is a no-op. -\let\refill=\relax - -% If working on a large document in chapters, it is convenient to -% be able to disable indexing, cross-referencing, and contents, for test runs. -% This is done with @novalidate (before @setfilename). -% -\newif\iflinks \linkstrue % by default we want the aux files. -\let\novalidate = \linksfalse - -% @setfilename is done at the beginning of every texinfo file. -% So open here the files we need to have open while reading the input. -% This makes it possible to make a .fmt file for texinfo. -\def\setfilename{% - \fixbackslash % Turn off hack to swallow `\input texinfo'. - \iflinks - \tryauxfile - % Open the new aux file. TeX will close it automatically at exit. - \immediate\openout\auxfile=\jobname.aux - \fi % \openindices needs to do some work in any case. - \openindices - \let\setfilename=\comment % Ignore extra @setfilename cmds. - % - % If texinfo.cnf is present on the system, read it. - % Useful for site-wide @afourpaper, etc. - \openin 1 texinfo.cnf - \ifeof 1 \else \input texinfo.cnf \fi - \closein 1 - % - \comment % Ignore the actual filename. -} - -% Called from \setfilename. -% -\def\openindices{% - \newindex{cp}% - \newcodeindex{fn}% - \newcodeindex{vr}% - \newcodeindex{tp}% - \newcodeindex{ky}% - \newcodeindex{pg}% -} - -% @bye. -\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} - - -\message{pdf,} -% adobe `portable' document format -\newcount\tempnum -\newcount\lnkcount -\newtoks\filename -\newcount\filenamelength -\newcount\pgn -\newtoks\toksA -\newtoks\toksB -\newtoks\toksC -\newtoks\toksD -\newbox\boxA -\newcount\countA -\newif\ifpdf -\newif\ifpdfmakepagedest - -% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 -% can be set). So we test for \relax and 0 as well as \undefined, -% borrowed from ifpdf.sty. -\ifx\pdfoutput\undefined -\else - \ifx\pdfoutput\relax - \else - \ifcase\pdfoutput - \else - \pdftrue - \fi - \fi -\fi -% -\ifpdf - \input pdfcolor - \pdfcatalog{/PageMode /UseOutlines}% - \def\dopdfimage#1#2#3{% - \def\imagewidth{#2}% - \def\imageheight{#3}% - % without \immediate, pdftex seg faults when the same image is - % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) - \ifnum\pdftexversion < 14 - \immediate\pdfimage - \else - \immediate\pdfximage - \fi - \ifx\empty\imagewidth\else width \imagewidth \fi - \ifx\empty\imageheight\else height \imageheight \fi - \ifnum\pdftexversion<13 - #1.pdf% - \else - {#1.pdf}% - \fi - \ifnum\pdftexversion < 14 \else - \pdfrefximage \pdflastximage - \fi} - \def\pdfmkdest#1{{% - % We have to set dummies so commands such as @code in a section title - % aren't expanded. - \atdummies - \normalturnoffactive - \pdfdest name{#1} xyz% - }} - \def\pdfmkpgn#1{#1} - \let\linkcolor = \Blue % was Cyan, but that seems light? - \def\endlink{\Black\pdfendlink} - % Adding outlines to PDF; macros for calculating structure of outlines - % come from Petr Olsak - \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% - \else \csname#1\endcsname \fi} - \def\advancenumber#1{\tempnum=\expnumber{#1}\relax - \advance\tempnum by 1 - \expandafter\xdef\csname#1\endcsname{\the\tempnum}} - % - % #1 is the section text. #2 is the pdf expression for the number - % of subentries (or empty, for subsubsections). #3 is the node - % text, which might be empty if this toc entry had no - % corresponding node. #4 is the page number. - % - \def\dopdfoutline#1#2#3#4{% - % Generate a link to the node text if that exists; else, use the - % page number. We could generate a destination for the section - % text in the case where a section has no node, but it doesn't - % seem worthwhile, since most documents are normally structured. - \def\pdfoutlinedest{#3}% - \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}\fi - % - \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{#1}% - } - % - \def\pdfmakeoutlines{% - \begingroup - % Thanh's hack / proper braces in bookmarks - \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace - \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace - % - % Read toc silently, to get counts of subentries for \pdfoutline. - \def\numchapentry##1##2##3##4{% - \def\thischapnum{##2}% - \def\thissecnum{0}% - \def\thissubsecnum{0}% - }% - \def\numsecentry##1##2##3##4{% - \advancenumber{chap\thischapnum}% - \def\thissecnum{##2}% - \def\thissubsecnum{0}% - }% - \def\numsubsecentry##1##2##3##4{% - \advancenumber{sec\thissecnum}% - \def\thissubsecnum{##2}% - }% - \def\numsubsubsecentry##1##2##3##4{% - \advancenumber{subsec\thissubsecnum}% - }% - \def\thischapnum{0}% - \def\thissecnum{0}% - \def\thissubsecnum{0}% - % - % use \def rather than \let here because we redefine \chapentry et - % al. a second time, below. - \def\appentry{\numchapentry}% - \def\appsecentry{\numsecentry}% - \def\appsubsecentry{\numsubsecentry}% - \def\appsubsubsecentry{\numsubsubsecentry}% - \def\unnchapentry{\numchapentry}% - \def\unnsecentry{\numsecentry}% - \def\unnsubsecentry{\numsubsecentry}% - \def\unnsubsubsecentry{\numsubsubsecentry}% - \input \jobname.toc - % - % Read toc second time, this time actually producing the outlines. - % The `-' means take the \expnumber as the absolute number of - % subentries, which we calculated on our first read of the .toc above. - % - % We use the node names as the destinations. - \def\numchapentry##1##2##3##4{% - \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% - \def\numsecentry##1##2##3##4{% - \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% - \def\numsubsecentry##1##2##3##4{% - \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% - \def\numsubsubsecentry##1##2##3##4{% count is always zero - \dopdfoutline{##1}{}{##3}{##4}}% - % - % PDF outlines are displayed using system fonts, instead of - % document fonts. Therefore we cannot use special characters, - % since the encoding is unknown. For example, the eogonek from - % Latin 2 (0xea) gets translated to a | character. Info from - % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. - % - % xx to do this right, we have to translate 8-bit characters to - % their "best" equivalent, based on the @documentencoding. Right - % now, I guess we'll just let the pdf reader have its way. - \indexnofonts - \turnoffactive - \input \jobname.toc - \endgroup - } - % - \def\makelinks #1,{% - \def\params{#1}\def\E{END}% - \ifx\params\E - \let\nextmakelinks=\relax - \else - \let\nextmakelinks=\makelinks - \ifnum\lnkcount>0,\fi - \picknum{#1}% - \startlink attr{/Border [0 0 0]} - goto name{\pdfmkpgn{\the\pgn}}% - \linkcolor #1% - \advance\lnkcount by 1% - \endlink - \fi - \nextmakelinks - } - \def\picknum#1{\expandafter\pn#1} - \def\pn#1{% - \def\p{#1}% - \ifx\p\lbrace - \let\nextpn=\ppn - \else - \let\nextpn=\ppnn - \def\first{#1} - \fi - \nextpn - } - \def\ppn#1{\pgn=#1\gobble} - \def\ppnn{\pgn=\first} - \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,} - \def\skipspaces#1{\def\PP{#1}\def\D{|}% - \ifx\PP\D\let\nextsp\relax - \else\let\nextsp\skipspaces - \ifx\p\space\else\addtokens{\filename}{\PP}% - \advance\filenamelength by 1 - \fi - \fi - \nextsp} - \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} - \ifnum\pdftexversion < 14 - \let \startlink \pdfannotlink - \else - \let \startlink \pdfstartlink - \fi - \def\pdfurl#1{% - \begingroup - \normalturnoffactive\def\@{@}% - \makevalueexpandable - \leavevmode\Red - \startlink attr{/Border [0 0 0]}% - user{/Subtype /Link /A << /S /URI /URI (#1) >>}% - \endgroup} - \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} - \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} - \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} - \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} - \def\maketoks{% - \expandafter\poptoks\the\toksA|ENDTOKS|\relax - \ifx\first0\adn0 - \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 - \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 - \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 - \else - \ifnum0=\countA\else\makelink\fi - \ifx\first.\let\next=\done\else - \let\next=\maketoks - \addtokens{\toksB}{\the\toksD} - \ifx\first,\addtokens{\toksB}{\space}\fi - \fi - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \next} - \def\makelink{\addtokens{\toksB}% - {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} - \def\pdflink#1{% - \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} - \linkcolor #1\endlink} - \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} -\else - \let\pdfmkdest = \gobble - \let\pdfurl = \gobble - \let\endlink = \relax - \let\linkcolor = \relax - \let\pdfmakeoutlines = \relax -\fi % \ifx\pdfoutput - - -\message{fonts,} - -% Change the current font style to #1, remembering it in \curfontstyle. -% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in -% italics, not bold italics. -% -\def\setfontstyle#1{% - \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. - \csname ten#1\endcsname % change the current font -} - -% Select #1 fonts with the current style. -% -\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} - -\def\rm{\fam=0 \setfontstyle{rm}} -\def\it{\fam=\itfam \setfontstyle{it}} -\def\sl{\fam=\slfam \setfontstyle{sl}} -\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} -\def\tt{\fam=\ttfam \setfontstyle{tt}} - -% Texinfo sort of supports the sans serif font style, which plain TeX does not. -% So we set up a \sf. -\newfam\sffam -\def\sf{\fam=\sffam \setfontstyle{sf}} -\let\li = \sf % Sometimes we call it \li, not \sf. - -% We don't need math for this font style. -\def\ttsl{\setfontstyle{ttsl}} - -% Default leading. -\newdimen\textleading \textleading = 13.2pt - -% Set the baselineskip to #1, and the lineskip and strut size -% correspondingly. There is no deep meaning behind these magic numbers -% used as factors; they just match (closely enough) what Knuth defined. -% -\def\lineskipfactor{.08333} -\def\strutheightpercent{.70833} -\def\strutdepthpercent {.29167} -% -\def\setleading#1{% - \normalbaselineskip = #1\relax - \normallineskip = \lineskipfactor\normalbaselineskip - \normalbaselines - \setbox\strutbox =\hbox{% - \vrule width0pt height\strutheightpercent\baselineskip - depth \strutdepthpercent \baselineskip - }% -} - -% Set the font macro #1 to the font named #2, adding on the -% specified font prefix (normally `cm'). -% #3 is the font's design size, #4 is a scale factor -\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} - -% Use cm as the default font prefix. -% To specify the font prefix, you must define \fontprefix -% before you read in texinfo.tex. -\ifx\fontprefix\undefined -\def\fontprefix{cm} -\fi -% Support font families that don't use the same naming scheme as CM. -\def\rmshape{r} -\def\rmbshape{bx} %where the normal face is bold -\def\bfshape{b} -\def\bxshape{bx} -\def\ttshape{tt} -\def\ttbshape{tt} -\def\ttslshape{sltt} -\def\itshape{ti} -\def\itbshape{bxti} -\def\slshape{sl} -\def\slbshape{bxsl} -\def\sfshape{ss} -\def\sfbshape{ss} -\def\scshape{csc} -\def\scbshape{csc} - -% Text fonts (11.2pt, magstep1). -\def\textnominalsize{11pt} -\edef\mainmagstep{\magstephalf} -\setfont\textrm\rmshape{10}{\mainmagstep} -\setfont\texttt\ttshape{10}{\mainmagstep} -\setfont\textbf\bfshape{10}{\mainmagstep} -\setfont\textit\itshape{10}{\mainmagstep} -\setfont\textsl\slshape{10}{\mainmagstep} -\setfont\textsf\sfshape{10}{\mainmagstep} -\setfont\textsc\scshape{10}{\mainmagstep} -\setfont\textttsl\ttslshape{10}{\mainmagstep} -\font\texti=cmmi10 scaled \mainmagstep -\font\textsy=cmsy10 scaled \mainmagstep - -% A few fonts for @defun names and args. -\setfont\defbf\bfshape{10}{\magstep1} -\setfont\deftt\ttshape{10}{\magstep1} -\setfont\defttsl\ttslshape{10}{\magstep1} -\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} - -% Fonts for indices, footnotes, small examples (9pt). -\def\smallnominalsize{9pt} -\setfont\smallrm\rmshape{9}{1000} -\setfont\smalltt\ttshape{9}{1000} -\setfont\smallbf\bfshape{10}{900} -\setfont\smallit\itshape{9}{1000} -\setfont\smallsl\slshape{9}{1000} -\setfont\smallsf\sfshape{9}{1000} -\setfont\smallsc\scshape{10}{900} -\setfont\smallttsl\ttslshape{10}{900} -\font\smalli=cmmi9 -\font\smallsy=cmsy9 - -% Fonts for small examples (8pt). -\def\smallernominalsize{8pt} -\setfont\smallerrm\rmshape{8}{1000} -\setfont\smallertt\ttshape{8}{1000} -\setfont\smallerbf\bfshape{10}{800} -\setfont\smallerit\itshape{8}{1000} -\setfont\smallersl\slshape{8}{1000} -\setfont\smallersf\sfshape{8}{1000} -\setfont\smallersc\scshape{10}{800} -\setfont\smallerttsl\ttslshape{10}{800} -\font\smalleri=cmmi8 -\font\smallersy=cmsy8 - -% Fonts for title page (20.4pt): -\def\titlenominalsize{20pt} -\setfont\titlerm\rmbshape{12}{\magstep3} -\setfont\titleit\itbshape{10}{\magstep4} -\setfont\titlesl\slbshape{10}{\magstep4} -\setfont\titlett\ttbshape{12}{\magstep3} -\setfont\titlettsl\ttslshape{10}{\magstep4} -\setfont\titlesf\sfbshape{17}{\magstep1} -\let\titlebf=\titlerm -\setfont\titlesc\scbshape{10}{\magstep4} -\font\titlei=cmmi12 scaled \magstep3 -\font\titlesy=cmsy10 scaled \magstep4 -\def\authorrm{\secrm} -\def\authortt{\sectt} - -% Chapter (and unnumbered) fonts (17.28pt). -\def\chapnominalsize{17pt} -\setfont\chaprm\rmbshape{12}{\magstep2} -\setfont\chapit\itbshape{10}{\magstep3} -\setfont\chapsl\slbshape{10}{\magstep3} -\setfont\chaptt\ttbshape{12}{\magstep2} -\setfont\chapttsl\ttslshape{10}{\magstep3} -\setfont\chapsf\sfbshape{17}{1000} -\let\chapbf=\chaprm -\setfont\chapsc\scbshape{10}{\magstep3} -\font\chapi=cmmi12 scaled \magstep2 -\font\chapsy=cmsy10 scaled \magstep3 - -% Section fonts (14.4pt). -\def\secnominalsize{14pt} -\setfont\secrm\rmbshape{12}{\magstep1} -\setfont\secit\itbshape{10}{\magstep2} -\setfont\secsl\slbshape{10}{\magstep2} -\setfont\sectt\ttbshape{12}{\magstep1} -\setfont\secttsl\ttslshape{10}{\magstep2} -\setfont\secsf\sfbshape{12}{\magstep1} -\let\secbf\secrm -\setfont\secsc\scbshape{10}{\magstep2} -\font\seci=cmmi12 scaled \magstep1 -\font\secsy=cmsy10 scaled \magstep2 - -% Subsection fonts (13.15pt). -\def\ssecnominalsize{13pt} -\setfont\ssecrm\rmbshape{12}{\magstephalf} -\setfont\ssecit\itbshape{10}{1315} -\setfont\ssecsl\slbshape{10}{1315} -\setfont\ssectt\ttbshape{12}{\magstephalf} -\setfont\ssecttsl\ttslshape{10}{1315} -\setfont\ssecsf\sfbshape{12}{\magstephalf} -\let\ssecbf\ssecrm -\setfont\ssecsc\scbshape{10}{1315} -\font\sseci=cmmi12 scaled \magstephalf -\font\ssecsy=cmsy10 scaled 1315 - -% Reduced fonts for @acro in text (10pt). -\def\reducednominalsize{10pt} -\setfont\reducedrm\rmshape{10}{1000} -\setfont\reducedtt\ttshape{10}{1000} -\setfont\reducedbf\bfshape{10}{1000} -\setfont\reducedit\itshape{10}{1000} -\setfont\reducedsl\slshape{10}{1000} -\setfont\reducedsf\sfshape{10}{1000} -\setfont\reducedsc\scshape{10}{1000} -\setfont\reducedttsl\ttslshape{10}{1000} -\font\reducedi=cmmi10 -\font\reducedsy=cmsy10 - -% In order for the font changes to affect most math symbols and letters, -% we have to define the \textfont of the standard families. Since -% texinfo doesn't allow for producing subscripts and superscripts except -% in the main text, we don't bother to reset \scriptfont and -% \scriptscriptfont (which would also require loading a lot more fonts). -% -\def\resetmathfonts{% - \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy - \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf - \textfont\ttfam=\tentt \textfont\sffam=\tensf -} - -% The font-changing commands redefine the meanings of \tenSTYLE, instead -% of just \STYLE. We do this because \STYLE needs to also set the -% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire -% \tenSTYLE to set the current font. -% -% Each font-changing command also sets the names \lsize (one size lower) -% and \lllsize (three sizes lower). These relative commands are used in -% the LaTeX logo and acronyms. -% -% This all needs generalizing, badly. -% -\def\textfonts{% - \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl - \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc - \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy - \let\tenttsl=\textttsl - \def\curfontsize{text}% - \def\lsize{reduced}\def\lllsize{smaller}% - \resetmathfonts \setleading{\textleading}} -\def\titlefonts{% - \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl - \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc - \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy - \let\tenttsl=\titlettsl - \def\curfontsize{title}% - \def\lsize{chap}\def\lllsize{subsec}% - \resetmathfonts \setleading{25pt}} -\def\titlefont#1{{\titlefonts\rm #1}} -\def\chapfonts{% - \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl - \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc - \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy - \let\tenttsl=\chapttsl - \def\curfontsize{chap}% - \def\lsize{sec}\def\lllsize{text}% - \resetmathfonts \setleading{19pt}} -\def\secfonts{% - \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl - \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc - \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy - \let\tenttsl=\secttsl - \def\curfontsize{sec}% - \def\lsize{subsec}\def\lllsize{reduced}% - \resetmathfonts \setleading{16pt}} -\def\subsecfonts{% - \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl - \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc - \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy - \let\tenttsl=\ssecttsl - \def\curfontsize{ssec}% - \def\lsize{text}\def\lllsize{small}% - \resetmathfonts \setleading{15pt}} -\let\subsubsecfonts = \subsecfonts -\def\reducedfonts{% - \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl - \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc - \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy - \let\tenttsl=\reducedttsl - \def\curfontsize{reduced}% - \def\lsize{small}\def\lllsize{smaller}% - \resetmathfonts \setleading{10.5pt}} -\def\smallfonts{% - \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl - \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc - \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy - \let\tenttsl=\smallttsl - \def\curfontsize{small}% - \def\lsize{smaller}\def\lllsize{smaller}% - \resetmathfonts \setleading{10.5pt}} -\def\smallerfonts{% - \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl - \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc - \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy - \let\tenttsl=\smallerttsl - \def\curfontsize{smaller}% - \def\lsize{smaller}\def\lllsize{smaller}% - \resetmathfonts \setleading{9.5pt}} - -% Set the fonts to use with the @small... environments. -\let\smallexamplefonts = \smallfonts - -% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample -% can fit this many characters: -% 8.5x11=86 smallbook=72 a4=90 a5=69 -% If we use \scriptfonts (8pt), then we can fit this many characters: -% 8.5x11=90+ smallbook=80 a4=90+ a5=77 -% For me, subjectively, the few extra characters that fit aren't worth -% the additional smallness of 8pt. So I'm making the default 9pt. -% -% By the way, for comparison, here's what fits with @example (10pt): -% 8.5x11=71 smallbook=60 a4=75 a5=58 -% -% I wish the USA used A4 paper. -% --karl, 24jan03. - - -% Set up the default fonts, so we can use them for creating boxes. -% -\textfonts \rm - -% Define these so they can be easily changed for other fonts. -\def\angleleft{$\langle$} -\def\angleright{$\rangle$} - -% Count depth in font-changes, for error checks -\newcount\fontdepth \fontdepth=0 - -% Fonts for short table of contents. -\setfont\shortcontrm\rmshape{12}{1000} -\setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12 -\setfont\shortcontsl\slshape{12}{1000} -\setfont\shortconttt\ttshape{12}{1000} - -%% Add scribe-like font environments, plus @l for inline lisp (usually sans -%% serif) and @ii for TeX italic - -% \smartitalic{ARG} outputs arg in italics, followed by an italic correction -% unless the following character is such as not to need one. -\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else - \ptexslash\fi\fi\fi} -\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} -\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} - -% like \smartslanted except unconditionally uses \ttsl. -% @var is set to this for defun arguments. -\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} - -% like \smartslanted except unconditionally use \sl. We never want -% ttsl for book titles, do we? -\def\cite#1{{\sl #1}\futurelet\next\smartitalicx} - -\let\i=\smartitalic -\let\slanted=\smartslanted -\let\var=\smartslanted -\let\dfn=\smartslanted -\let\emph=\smartitalic - -% @b, explicit bold. -\def\b#1{{\bf #1}} -\let\strong=\b - -% @sansserif, explicit sans. -\def\sansserif#1{{\sf #1}} - -% We can't just use \exhyphenpenalty, because that only has effect at -% the end of a paragraph. Restore normal hyphenation at the end of the -% group within which \nohyphenation is presumably called. -% -\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} -\def\restorehyphenation{\hyphenchar\font = `- } - -% Set sfcode to normal for the chars that usually have another value. -% Can't use plain's \frenchspacing because it uses the `\x notation, and -% sometimes \x has an active definition that messes things up. -% -\catcode`@=11 - \def\frenchspacing{% - \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m - \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m - } -\catcode`@=\other - -\def\t#1{% - {\tt \rawbackslash \frenchspacing #1}% - \null -} -\def\samp#1{`\tclose{#1}'\null} -\setfont\keyrm\rmshape{8}{1000} -\font\keysy=cmsy9 -\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% - \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% - \vbox{\hrule\kern-0.4pt - \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% - \kern-0.4pt\hrule}% - \kern-.06em\raise0.4pt\hbox{\angleright}}}} -% The old definition, with no lozenge: -%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} -\def\ctrl #1{{\tt \rawbackslash \hat}#1} - -% @file, @option are the same as @samp. -\let\file=\samp -\let\option=\samp - -% @code is a modification of @t, -% which makes spaces the same size as normal in the surrounding text. -\def\tclose#1{% - {% - % Change normal interword space to be same as for the current font. - \spaceskip = \fontdimen2\font - % - % Switch to typewriter. - \tt - % - % But `\ ' produces the large typewriter interword space. - \def\ {{\spaceskip = 0pt{} }}% - % - % Turn off hyphenation. - \nohyphenation - % - \rawbackslash - \frenchspacing - #1% - }% - \null -} - -% We *must* turn on hyphenation at `-' and `_' in @code. -% Otherwise, it is too hard to avoid overfull hboxes -% in the Emacs manual, the Library manual, etc. - -% Unfortunately, TeX uses one parameter (\hyphenchar) to control -% both hyphenation at - and hyphenation within words. -% We must therefore turn them both off (\tclose does that) -% and arrange explicitly to hyphenate at a dash. -% -- rms. -{ - \catcode`\-=\active - \catcode`\_=\active - % - \global\def\code{\begingroup - \catcode`\-=\active \let-\codedash - \catcode`\_=\active \let_\codeunder - \codex - } -} - -\def\realdash{-} -\def\codedash{-\discretionary{}{}{}} -\def\codeunder{% - % this is all so @math{@code{var_name}+1} can work. In math mode, _ - % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) - % will therefore expand the active definition of _, which is us - % (inside @code that is), therefore an endless loop. - \ifusingtt{\ifmmode - \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. - \else\normalunderscore \fi - \discretionary{}{}{}}% - {\_}% -} -\def\codex #1{\tclose{#1}\endgroup} - -% @kbd is like @code, except that if the argument is just one @key command, -% then @kbd has no effect. - -% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), -% `example' (@kbd uses ttsl only inside of @example and friends), -% or `code' (@kbd uses normal tty font always). -\parseargdef\kbdinputstyle{% - \def\arg{#1}% - \ifx\arg\worddistinct - \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% - \else\ifx\arg\wordexample - \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% - \else\ifx\arg\wordcode - \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% - \else - \errhelp = \EMsimple - \errmessage{Unknown @kbdinputstyle option `\arg'}% - \fi\fi\fi -} -\def\worddistinct{distinct} -\def\wordexample{example} -\def\wordcode{code} - -% Default is `distinct.' -\kbdinputstyle distinct - -\def\xkey{\key} -\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% -\ifx\one\xkey\ifx\threex\three \key{#2}% -\else{\tclose{\kbdfont\look}}\fi -\else{\tclose{\kbdfont\look}}\fi} - -% For @indicateurl, @env, @command quotes seem unnecessary, so use \code. -\let\indicateurl=\code -\let\env=\code -\let\command=\code - -% @uref (abbreviation for `urlref') takes an optional (comma-separated) -% second argument specifying the text to display and an optional third -% arg as text to display instead of (rather than in addition to) the url -% itself. First (mandatory) arg is the url. Perhaps eventually put in -% a hypertex \special here. -% -\def\uref#1{\douref #1,,,\finish} -\def\douref#1,#2,#3,#4\finish{\begingroup - \unsepspaces - \pdfurl{#1}% - \setbox0 = \hbox{\ignorespaces #3}% - \ifdim\wd0 > 0pt - \unhbox0 % third arg given, show only that - \else - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \ifpdf - \unhbox0 % PDF: 2nd arg given, show only it - \else - \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url - \fi - \else - \code{#1}% only url given, so show it - \fi - \fi - \endlink -\endgroup} - -% @url synonym for @uref, since that's how everyone uses it. -% -\let\url=\uref - -% rms does not like angle brackets --karl, 17may97. -% So now @email is just like @uref, unless we are pdf. -% -%\def\email#1{\angleleft{\tt #1}\angleright} -\ifpdf - \def\email#1{\doemail#1,,\finish} - \def\doemail#1,#2,#3\finish{\begingroup - \unsepspaces - \pdfurl{mailto:#1}% - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi - \endlink - \endgroup} -\else - \let\email=\uref -\fi - -% Check if we are currently using a typewriter font. Since all the -% Computer Modern typewriter fonts have zero interword stretch (and -% shrink), and it is reasonable to expect all typewriter fonts to have -% this property, we can check that font parameter. -% -\def\ifmonospace{\ifdim\fontdimen3\font=0pt } - -% Typeset a dimension, e.g., `in' or `pt'. The only reason for the -% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. -% -\def\dmn#1{\thinspace #1} - -\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} - -% @l was never documented to mean ``switch to the Lisp font'', -% and it is not used as such in any manual I can find. We need it for -% Polish suppressed-l. --karl, 22sep96. -%\def\l#1{{\li #1}\null} - -% Explicit font changes: @r, @sc, undocumented @ii. -\def\r#1{{\rm #1}} % roman font -\def\sc#1{{\smallcaps#1}} % smallcaps font -\def\ii#1{{\it #1}} % italic font - -% @acronym for "FBI", "NATO", and the like. -% We print this one point size smaller, since it's intended for -% all-uppercase. -% -\def\acronym#1{\doacronym #1,,\finish} -\def\doacronym#1,#2,#3\finish{% - {\selectfonts\lsize #1}% - \def\temp{#2}% - \ifx\temp\empty \else - \space ({\unsepspaces \ignorespaces \temp \unskip})% - \fi -} - -% @abbr for "Comput. J." and the like. -% No font change, but don't do end-of-sentence spacing. -% -\def\abbr#1{\doabbr #1,,\finish} -\def\doabbr#1,#2,#3\finish{% - {\frenchspacing #1}% - \def\temp{#2}% - \ifx\temp\empty \else - \space ({\unsepspaces \ignorespaces \temp \unskip})% - \fi -} - -% @pounds{} is a sterling sign, which Knuth put in the CM italic font. -% -\def\pounds{{\it\$}} - -% @euro{} comes from a separate font, depending on the current style. -% We use the free feym* fonts from the eurosym package by Henrik -% Theiling, which support regular, slanted, bold and bold slanted (and -% "outlined" (blackboard board, sort of) versions, which we don't need). -% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. -% -% Although only regular is the truly official Euro symbol, we ignore -% that. The Euro is designed to be slightly taller than the regular -% font height. -% -% feymr - regular -% feymo - slanted -% feybr - bold -% feybo - bold slanted -% -% There is no good (free) typewriter version, to my knowledge. -% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. -% Hmm. -% -% Also doesn't work in math. Do we need to do math with euro symbols? -% Hope not. -% -% -\def\euro{{\eurofont e}} -\def\eurofont{% - % We set the font at each command, rather than predefining it in - % \textfonts and the other font-switching commands, so that - % installations which never need the symbold don't have to have the - % font installed. - % - % There is only one designed size (nominal 10pt), so we always scale - % that to the current nominal size. - % - % By the way, simply using "at 1em" works for cmr10 and the like, but - % does not work for cmbx10 and other extended/shrunken fonts. - % - \def\eurosize{\csname\curfontsize nominalsize\endcsname}% - % - \ifx\curfontstyle\bfstylename - % bold: - \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize - \else - % regular: - \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize - \fi - \thiseurofont -} - -% @registeredsymbol - R in a circle. The font for the R should really -% be smaller yet, but lllsize is the best we can do for now. -% Adapted from the plain.tex definition of \copyright. -% -\def\registeredsymbol{% - $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% - \hfil\crcr\Orb}}% - }$% -} - -% Laurent Siebenmann reports \Orb undefined with: -% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 -% so we'll define it if necessary. -% -\ifx\Orb\undefined -\def\Orb{\mathhexbox20D} -\fi - - -\message{page headings,} - -\newskip\titlepagetopglue \titlepagetopglue = 1.5in -\newskip\titlepagebottomglue \titlepagebottomglue = 2pc - -% First the title page. Must do @settitle before @titlepage. -\newif\ifseenauthor -\newif\iffinishedtitlepage - -% Do an implicit @contents or @shortcontents after @end titlepage if the -% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. -% -\newif\ifsetcontentsaftertitlepage - \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue -\newif\ifsetshortcontentsaftertitlepage - \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue - -\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% - \endgroup\page\hbox{}\page} - -\envdef\titlepage{% - % Open one extra group, as we want to close it in the middle of \Etitlepage. - \begingroup - \parindent=0pt \textfonts - % Leave some space at the very top of the page. - \vglue\titlepagetopglue - % No rule at page bottom unless we print one at the top with @title. - \finishedtitlepagetrue - % - % Most title ``pages'' are actually two pages long, with space - % at the top of the second. We don't want the ragged left on the second. - \let\oldpage = \page - \def\page{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - \let\page = \oldpage - \page - \null - }% -} - -\def\Etitlepage{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - % It is important to do the page break before ending the group, - % because the headline and footline are only empty inside the group. - % If we use the new definition of \page, we always get a blank page - % after the title page, which we certainly don't want. - \oldpage - \endgroup - % - % Need this before the \...aftertitlepage checks so that if they are - % in effect the toc pages will come out with page numbers. - \HEADINGSon - % - % If they want short, they certainly want long too. - \ifsetshortcontentsaftertitlepage - \shortcontents - \contents - \global\let\shortcontents = \relax - \global\let\contents = \relax - \fi - % - \ifsetcontentsaftertitlepage - \contents - \global\let\contents = \relax - \global\let\shortcontents = \relax - \fi -} - -\def\finishtitlepage{% - \vskip4pt \hrule height 2pt width \hsize - \vskip\titlepagebottomglue - \finishedtitlepagetrue -} - -%%% Macros to be used within @titlepage: - -\let\subtitlerm=\tenrm -\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} - -\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines - \let\tt=\authortt} - -\parseargdef\title{% - \checkenv\titlepage - \leftline{\titlefonts\rm #1} - % print a rule at the page bottom also. - \finishedtitlepagefalse - \vskip4pt \hrule height 4pt width \hsize \vskip4pt -} - -\parseargdef\subtitle{% - \checkenv\titlepage - {\subtitlefont \rightline{#1}}% -} - -% @author should come last, but may come many times. -% It can also be used inside @quotation. -% -\parseargdef\author{% - \def\temp{\quotation}% - \ifx\thisenv\temp - \def\quotationauthor{#1}% printed in \Equotation. - \else - \checkenv\titlepage - \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi - {\authorfont \leftline{#1}}% - \fi -} - - -%%% Set up page headings and footings. - -\let\thispage=\folio - -\newtoks\evenheadline % headline on even pages -\newtoks\oddheadline % headline on odd pages -\newtoks\evenfootline % footline on even pages -\newtoks\oddfootline % footline on odd pages - -% Now make TeX use those variables -\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline - \else \the\evenheadline \fi}} -\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline - \else \the\evenfootline \fi}\HEADINGShook} -\let\HEADINGShook=\relax - -% Commands to set those variables. -% For example, this is what @headings on does -% @evenheading @thistitle|@thispage|@thischapter -% @oddheading @thischapter|@thispage|@thistitle -% @evenfooting @thisfile|| -% @oddfooting ||@thisfile - - -\def\evenheading{\parsearg\evenheadingxxx} -\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} -\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% -\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\def\oddheading{\parsearg\oddheadingxxx} -\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} -\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% -\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% - -\def\evenfooting{\parsearg\evenfootingxxx} -\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} -\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% -\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\def\oddfooting{\parsearg\oddfootingxxx} -\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} -\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% - \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% - % - % Leave some space for the footline. Hopefully ok to assume - % @evenfooting will not be used by itself. - \global\advance\pageheight by -\baselineskip - \global\advance\vsize by -\baselineskip -} - -\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} - - -% @headings double turns headings on for double-sided printing. -% @headings single turns headings on for single-sided printing. -% @headings off turns them off. -% @headings on same as @headings double, retained for compatibility. -% @headings after turns on double-sided headings after this page. -% @headings doubleafter turns on double-sided headings after this page. -% @headings singleafter turns on single-sided headings after this page. -% By default, they are off at the start of a document, -% and turned `on' after @end titlepage. - -\def\headings #1 {\csname HEADINGS#1\endcsname} - -\def\HEADINGSoff{% -\global\evenheadline={\hfil} \global\evenfootline={\hfil} -\global\oddheadline={\hfil} \global\oddfootline={\hfil}} -\HEADINGSoff -% When we turn headings on, set the page number to 1. -% For double-sided printing, put current file name in lower left corner, -% chapter name on inside top of right hand pages, document -% title on inside top of left hand pages, and page numbers on outside top -% edge of all pages. -\def\HEADINGSdouble{% -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} -\let\contentsalignmacro = \chappager - -% For single-sided printing, chapter title goes across top left of page, -% page number on top right. -\def\HEADINGSsingle{% -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} -\def\HEADINGSon{\HEADINGSdouble} - -\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} -\let\HEADINGSdoubleafter=\HEADINGSafter -\def\HEADINGSdoublex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} - -\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} -\def\HEADINGSsinglex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} - -% Subroutines used in generating headings -% This produces Day Month Year style of output. -% Only define if not already defined, in case a txi-??.tex file has set -% up a different format (e.g., txi-cs.tex does this). -\ifx\today\undefined -\def\today{% - \number\day\space - \ifcase\month - \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr - \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug - \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec - \fi - \space\number\year} -\fi - -% @settitle line... specifies the title of the document, for headings. -% It generates no output of its own. -\def\thistitle{\putwordNoTitle} -\def\settitle{\parsearg{\gdef\thistitle}} - - -\message{tables,} -% Tables -- @table, @ftable, @vtable, @item(x). - -% default indentation of table text -\newdimen\tableindent \tableindent=.8in -% default indentation of @itemize and @enumerate text -\newdimen\itemindent \itemindent=.3in -% margin between end of table item and start of table text. -\newdimen\itemmargin \itemmargin=.1in - -% used internally for \itemindent minus \itemmargin -\newdimen\itemmax - -% Note @table, @ftable, and @vtable define @item, @itemx, etc., with -% these defs. -% They also define \itemindex -% to index the item name in whatever manner is desired (perhaps none). - -\newif\ifitemxneedsnegativevskip - -\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} - -\def\internalBitem{\smallbreak \parsearg\itemzzz} -\def\internalBitemx{\itemxpar \parsearg\itemzzz} - -\def\itemzzz #1{\begingroup % - \advance\hsize by -\rightskip - \advance\hsize by -\tableindent - \setbox0=\hbox{\itemindicate{#1}}% - \itemindex{#1}% - \nobreak % This prevents a break before @itemx. - % - % If the item text does not fit in the space we have, put it on a line - % by itself, and do not allow a page break either before or after that - % line. We do not start a paragraph here because then if the next - % command is, e.g., @kindex, the whatsit would get put into the - % horizontal list on a line by itself, resulting in extra blank space. - \ifdim \wd0>\itemmax - % - % Make this a paragraph so we get the \parskip glue and wrapping, - % but leave it ragged-right. - \begingroup - \advance\leftskip by-\tableindent - \advance\hsize by\tableindent - \advance\rightskip by0pt plus1fil - \leavevmode\unhbox0\par - \endgroup - % - % We're going to be starting a paragraph, but we don't want the - % \parskip glue -- logically it's part of the @item we just started. - \nobreak \vskip-\parskip - % - % Stop a page break at the \parskip glue coming up. However, if - % what follows is an environment such as @example, there will be no - % \parskip glue; then the negative vskip we just inserted would - % cause the example and the item to crash together. So we use this - % bizarre value of 10001 as a signal to \aboveenvbreak to insert - % \parskip glue after all. Section titles are handled this way also. - % - \penalty 10001 - \endgroup - \itemxneedsnegativevskipfalse - \else - % The item text fits into the space. Start a paragraph, so that the - % following text (if any) will end up on the same line. - \noindent - % Do this with kerns and \unhbox so that if there is a footnote in - % the item text, it can migrate to the main vertical list and - % eventually be printed. - \nobreak\kern-\tableindent - \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 - \unhbox0 - \nobreak\kern\dimen0 - \endgroup - \itemxneedsnegativevskiptrue - \fi -} - -\def\item{\errmessage{@item while not in a list environment}} -\def\itemx{\errmessage{@itemx while not in a list environment}} - -% @table, @ftable, @vtable. -\envdef\table{% - \let\itemindex\gobble - \tablecheck{table}% -} -\envdef\ftable{% - \def\itemindex ##1{\doind {fn}{\code{##1}}}% - \tablecheck{ftable}% -} -\envdef\vtable{% - \def\itemindex ##1{\doind {vr}{\code{##1}}}% - \tablecheck{vtable}% -} -\def\tablecheck#1{% - \ifnum \the\catcode`\^^M=\active - \endgroup - \errmessage{This command won't work in this context; perhaps the problem is - that we are \inenvironment\thisenv}% - \def\next{\doignore{#1}}% - \else - \let\next\tablex - \fi - \next -} -\def\tablex#1{% - \def\itemindicate{#1}% - \parsearg\tabley -} -\def\tabley#1{% - {% - \makevalueexpandable - \edef\temp{\noexpand\tablez #1\space\space\space}% - \expandafter - }\temp \endtablez -} -\def\tablez #1 #2 #3 #4\endtablez{% - \aboveenvbreak - \ifnum 0#1>0 \advance \leftskip by #1\mil \fi - \ifnum 0#2>0 \tableindent=#2\mil \fi - \ifnum 0#3>0 \advance \rightskip by #3\mil \fi - \itemmax=\tableindent - \advance \itemmax by -\itemmargin - \advance \leftskip by \tableindent - \exdentamount=\tableindent - \parindent = 0pt - \parskip = \smallskipamount - \ifdim \parskip=0pt \parskip=2pt \fi - \let\item = \internalBitem - \let\itemx = \internalBitemx -} -\def\Etable{\endgraf\afterenvbreak} -\let\Eftable\Etable -\let\Evtable\Etable -\let\Eitemize\Etable -\let\Eenumerate\Etable - -% This is the counter used by @enumerate, which is really @itemize - -\newcount \itemno - -\envdef\itemize{\parsearg\doitemize} - -\def\doitemize#1{% - \aboveenvbreak - \itemmax=\itemindent - \advance\itemmax by -\itemmargin - \advance\leftskip by \itemindent - \exdentamount=\itemindent - \parindent=0pt - \parskip=\smallskipamount - \ifdim\parskip=0pt \parskip=2pt \fi - \def\itemcontents{#1}% - % @itemize with no arg is equivalent to @itemize @bullet. - \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi - \let\item=\itemizeitem -} - -% Definition of @item while inside @itemize and @enumerate. -% -\def\itemizeitem{% - \advance\itemno by 1 % for enumerations - {\let\par=\endgraf \smallbreak}% reasonable place to break - {% - % If the document has an @itemize directly after a section title, a - % \nobreak will be last on the list, and \sectionheading will have - % done a \vskip-\parskip. In that case, we don't want to zero - % parskip, or the item text will crash with the heading. On the - % other hand, when there is normal text preceding the item (as there - % usually is), we do want to zero parskip, or there would be too much - % space. In that case, we won't have a \nobreak before. At least - % that's the theory. - \ifnum\lastpenalty<10000 \parskip=0in \fi - \noindent - \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% - \vadjust{\penalty 1200}}% not good to break after first line of item. - \flushcr -} - -% \splitoff TOKENS\endmark defines \first to be the first token in -% TOKENS, and \rest to be the remainder. -% -\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% - -% Allow an optional argument of an uppercase letter, lowercase letter, -% or number, to specify the first label in the enumerated list. No -% argument is the same as `1'. -% -\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} -\def\enumeratey #1 #2\endenumeratey{% - % If we were given no argument, pretend we were given `1'. - \def\thearg{#1}% - \ifx\thearg\empty \def\thearg{1}\fi - % - % Detect if the argument is a single token. If so, it might be a - % letter. Otherwise, the only valid thing it can be is a number. - % (We will always have one token, because of the test we just made. - % This is a good thing, since \splitoff doesn't work given nothing at - % all -- the first parameter is undelimited.) - \expandafter\splitoff\thearg\endmark - \ifx\rest\empty - % Only one token in the argument. It could still be anything. - % A ``lowercase letter'' is one whose \lccode is nonzero. - % An ``uppercase letter'' is one whose \lccode is both nonzero, and - % not equal to itself. - % Otherwise, we assume it's a number. - % - % We need the \relax at the end of the \ifnum lines to stop TeX from - % continuing to look for a . - % - \ifnum\lccode\expandafter`\thearg=0\relax - \numericenumerate % a number (we hope) - \else - % It's a letter. - \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax - \lowercaseenumerate % lowercase letter - \else - \uppercaseenumerate % uppercase letter - \fi - \fi - \else - % Multiple tokens in the argument. We hope it's a number. - \numericenumerate - \fi -} - -% An @enumerate whose labels are integers. The starting integer is -% given in \thearg. -% -\def\numericenumerate{% - \itemno = \thearg - \startenumeration{\the\itemno}% -} - -% The starting (lowercase) letter is in \thearg. -\def\lowercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more lowercase letters in @enumerate; get a bigger - alphabet}% - \fi - \char\lccode\itemno - }% -} - -% The starting (uppercase) letter is in \thearg. -\def\uppercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more uppercase letters in @enumerate; get a bigger - alphabet} - \fi - \char\uccode\itemno - }% -} - -% Call \doitemize, adding a period to the first argument and supplying the -% common last two arguments. Also subtract one from the initial value in -% \itemno, since @item increments \itemno. -% -\def\startenumeration#1{% - \advance\itemno by -1 - \doitemize{#1.}\flushcr -} - -% @alphaenumerate and @capsenumerate are abbreviations for giving an arg -% to @enumerate. -% -\def\alphaenumerate{\enumerate{a}} -\def\capsenumerate{\enumerate{A}} -\def\Ealphaenumerate{\Eenumerate} -\def\Ecapsenumerate{\Eenumerate} - - -% @multitable macros -% Amy Hendrickson, 8/18/94, 3/6/96 -% -% @multitable ... @end multitable will make as many columns as desired. -% Contents of each column will wrap at width given in preamble. Width -% can be specified either with sample text given in a template line, -% or in percent of \hsize, the current width of text on page. - -% Table can continue over pages but will only break between lines. - -% To make preamble: -% -% Either define widths of columns in terms of percent of \hsize: -% @multitable @columnfractions .25 .3 .45 -% @item ... -% -% Numbers following @columnfractions are the percent of the total -% current hsize to be used for each column. You may use as many -% columns as desired. - - -% Or use a template: -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item ... -% using the widest term desired in each column. - -% Each new table line starts with @item, each subsequent new column -% starts with @tab. Empty columns may be produced by supplying @tab's -% with nothing between them for as many times as empty columns are needed, -% ie, @tab@tab@tab will produce two empty columns. - -% @item, @tab do not need to be on their own lines, but it will not hurt -% if they are. - -% Sample multitable: - -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item first col stuff @tab second col stuff @tab third col -% @item -% first col stuff -% @tab -% second col stuff -% @tab -% third col -% @item first col stuff @tab second col stuff -% @tab Many paragraphs of text may be used in any column. -% -% They will wrap at the width determined by the template. -% @item@tab@tab This will be in third column. -% @end multitable - -% Default dimensions may be reset by user. -% @multitableparskip is vertical space between paragraphs in table. -% @multitableparindent is paragraph indent in table. -% @multitablecolmargin is horizontal space to be left between columns. -% @multitablelinespace is space to leave between table items, baseline -% to baseline. -% 0pt means it depends on current normal line spacing. -% -\newskip\multitableparskip -\newskip\multitableparindent -\newdimen\multitablecolspace -\newskip\multitablelinespace -\multitableparskip=0pt -\multitableparindent=6pt -\multitablecolspace=12pt -\multitablelinespace=0pt - -% Macros used to set up halign preamble: -% -\let\endsetuptable\relax -\def\xendsetuptable{\endsetuptable} -\let\columnfractions\relax -\def\xcolumnfractions{\columnfractions} -\newif\ifsetpercent - -% #1 is the @columnfraction, usually a decimal number like .5, but might -% be just 1. We just use it, whatever it is. -% -\def\pickupwholefraction#1 {% - \global\advance\colcount by 1 - \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% - \setuptable -} - -\newcount\colcount -\def\setuptable#1{% - \def\firstarg{#1}% - \ifx\firstarg\xendsetuptable - \let\go = \relax - \else - \ifx\firstarg\xcolumnfractions - \global\setpercenttrue - \else - \ifsetpercent - \let\go\pickupwholefraction - \else - \global\advance\colcount by 1 - \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a - % separator; typically that is always in the input, anyway. - \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% - \fi - \fi - \ifx\go\pickupwholefraction - % Put the argument back for the \pickupwholefraction call, so - % we'll always have a period there to be parsed. - \def\go{\pickupwholefraction#1}% - \else - \let\go = \setuptable - \fi% - \fi - \go -} - -% multitable-only commands. -% -% @headitem starts a heading row, which we typeset in bold. -% Assignments have to be global since we are inside the implicit group -% of an alignment entry. Note that \everycr resets \everytab. -\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% -% -% A \tab used to include \hskip1sp. But then the space in a template -% line is not enough. That is bad. So let's go back to just `&' until -% we encounter the problem it was intended to solve again. -% --karl, nathan@acm.org, 20apr99. -\def\tab{\checkenv\multitable &\the\everytab}% - -% @multitable ... @end multitable definitions: -% -\newtoks\everytab % insert after every tab. -% -\envdef\multitable{% - \vskip\parskip - \startsavinginserts - % - % @item within a multitable starts a normal row. - % We use \def instead of \let so that if one of the multitable entries - % contains an @itemize, we don't choke on the \item (seen as \crcr aka - % \endtemplate) expanding \doitemize. - \def\item{\crcr}% - % - \tolerance=9500 - \hbadness=9500 - \setmultitablespacing - \parskip=\multitableparskip - \parindent=\multitableparindent - \overfullrule=0pt - \global\colcount=0 - % - \everycr = {% - \noalign{% - \global\everytab={}% - \global\colcount=0 % Reset the column counter. - % Check for saved footnotes, etc. - \checkinserts - % Keeps underfull box messages off when table breaks over pages. - %\filbreak - % Maybe so, but it also creates really weird page breaks when the - % table breaks over pages. Wouldn't \vfil be better? Wait until the - % problem manifests itself, so it can be fixed for real --karl. - }% - }% - % - \parsearg\domultitable -} -\def\domultitable#1{% - % To parse everything between @multitable and @item: - \setuptable#1 \endsetuptable - % - % This preamble sets up a generic column definition, which will - % be used as many times as user calls for columns. - % \vtop will set a single line and will also let text wrap and - % continue for many paragraphs if desired. - \halign\bgroup &% - \global\advance\colcount by 1 - \multistrut - \vtop{% - % Use the current \colcount to find the correct column width: - \hsize=\expandafter\csname col\the\colcount\endcsname - % - % In order to keep entries from bumping into each other - % we will add a \leftskip of \multitablecolspace to all columns after - % the first one. - % - % If a template has been used, we will add \multitablecolspace - % to the width of each template entry. - % - % If the user has set preamble in terms of percent of \hsize we will - % use that dimension as the width of the column, and the \leftskip - % will keep entries from bumping into each other. Table will start at - % left margin and final column will justify at right margin. - % - % Make sure we don't inherit \rightskip from the outer environment. - \rightskip=0pt - \ifnum\colcount=1 - % The first column will be indented with the surrounding text. - \advance\hsize by\leftskip - \else - \ifsetpercent \else - % If user has not set preamble in terms of percent of \hsize - % we will advance \hsize by \multitablecolspace. - \advance\hsize by \multitablecolspace - \fi - % In either case we will make \leftskip=\multitablecolspace: - \leftskip=\multitablecolspace - \fi - % Ignoring space at the beginning and end avoids an occasional spurious - % blank line, when TeX decides to break the line at the space before the - % box from the multistrut, so the strut ends up on a line by itself. - % For example: - % @multitable @columnfractions .11 .89 - % @item @code{#} - % @tab Legal holiday which is valid in major parts of the whole country. - % Is automatically provided with highlighting sequences respectively - % marking characters. - \noindent\ignorespaces##\unskip\multistrut - }\cr -} -\def\Emultitable{% - \crcr - \egroup % end the \halign - \global\setpercentfalse -} - -\def\setmultitablespacing{% - \def\multistrut{\strut}% just use the standard line spacing - % - % Compute \multitablelinespace (if not defined by user) for use in - % \multitableparskip calculation. We used define \multistrut based on - % this, but (ironically) that caused the spacing to be off. - % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. -\ifdim\multitablelinespace=0pt -\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip -\global\advance\multitablelinespace by-\ht0 -\fi -%% Test to see if parskip is larger than space between lines of -%% table. If not, do nothing. -%% If so, set to same dimension as multitablelinespace. -\ifdim\multitableparskip>\multitablelinespace -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller - %% than skip between lines in the table. -\fi% -\ifdim\multitableparskip=0pt -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller - %% than skip between lines in the table. -\fi} - - -\message{conditionals,} - -% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, -% @ifnotxml always succeed. They currently do nothing; we don't -% attempt to check whether the conditionals are properly nested. But we -% have to remember that they are conditionals, so that @end doesn't -% attempt to close an environment group. -% -\def\makecond#1{% - \expandafter\let\csname #1\endcsname = \relax - \expandafter\let\csname iscond.#1\endcsname = 1 -} -\makecond{iftex} -\makecond{ifnotdocbook} -\makecond{ifnothtml} -\makecond{ifnotinfo} -\makecond{ifnotplaintext} -\makecond{ifnotxml} - -% Ignore @ignore, @ifhtml, @ifinfo, and the like. -% -\def\direntry{\doignore{direntry}} -\def\documentdescription{\doignore{documentdescription}} -\def\docbook{\doignore{docbook}} -\def\html{\doignore{html}} -\def\ifdocbook{\doignore{ifdocbook}} -\def\ifhtml{\doignore{ifhtml}} -\def\ifinfo{\doignore{ifinfo}} -\def\ifnottex{\doignore{ifnottex}} -\def\ifplaintext{\doignore{ifplaintext}} -\def\ifxml{\doignore{ifxml}} -\def\ignore{\doignore{ignore}} -\def\menu{\doignore{menu}} -\def\xml{\doignore{xml}} - -% Ignore text until a line `@end #1', keeping track of nested conditionals. -% -% A count to remember the depth of nesting. -\newcount\doignorecount - -\def\doignore#1{\begingroup - % Scan in ``verbatim'' mode: - \catcode`\@ = \other - \catcode`\{ = \other - \catcode`\} = \other - % - % Make sure that spaces turn into tokens that match what \doignoretext wants. - \spaceisspace - % - % Count number of #1's that we've seen. - \doignorecount = 0 - % - % Swallow text until we reach the matching `@end #1'. - \dodoignore{#1}% -} - -{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. - \obeylines % - % - \gdef\dodoignore#1{% - % #1 contains the command name as a string, e.g., `ifinfo'. - % - % Define a command to find the next `@end #1', which must be on a line - % by itself. - \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}% - % And this command to find another #1 command, at the beginning of a - % line. (Otherwise, we would consider a line `@c @ifset', for - % example, to count as an @ifset for nesting.) - \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% - % - % And now expand that command. - \obeylines % - \doignoretext ^^M% - }% -} - -\def\doignoreyyy#1{% - \def\temp{#1}% - \ifx\temp\empty % Nothing found. - \let\next\doignoretextzzz - \else % Found a nested condition, ... - \advance\doignorecount by 1 - \let\next\doignoretextyyy % ..., look for another. - % If we're here, #1 ends with ^^M\ifinfo (for example). - \fi - \next #1% the token \_STOP_ is present just after this macro. -} - -% We have to swallow the remaining "\_STOP_". -% -\def\doignoretextzzz#1{% - \ifnum\doignorecount = 0 % We have just found the outermost @end. - \let\next\enddoignore - \else % Still inside a nested condition. - \advance\doignorecount by -1 - \let\next\doignoretext % Look for the next @end. - \fi - \next -} - -% Finish off ignored text. -\def\enddoignore{\endgroup\ignorespaces} - - -% @set VAR sets the variable VAR to an empty value. -% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. -% -% Since we want to separate VAR from REST-OF-LINE (which might be -% empty), we can't just use \parsearg; we have to insert a space of our -% own to delimit the rest of the line, and then take it out again if we -% didn't need it. -% We rely on the fact that \parsearg sets \catcode`\ =10. -% -\parseargdef\set{\setyyy#1 \endsetyyy} -\def\setyyy#1 #2\endsetyyy{% - {% - \makevalueexpandable - \def\temp{#2}% - \edef\next{\gdef\makecsname{SET#1}}% - \ifx\temp\empty - \next{}% - \else - \setzzz#2\endsetzzz - \fi - }% -} -% Remove the trailing space \setxxx inserted. -\def\setzzz#1 \endsetzzz{\next{#1}} - -% @clear VAR clears (i.e., unsets) the variable VAR. -% -\parseargdef\clear{% - {% - \makevalueexpandable - \global\expandafter\let\csname SET#1\endcsname=\relax - }% -} - -% @value{foo} gets the text saved in variable foo. -\def\value{\begingroup\makevalueexpandable\valuexxx} -\def\valuexxx#1{\expandablevalue{#1}\endgroup} -{ - \catcode`\- = \active \catcode`\_ = \active - % - \gdef\makevalueexpandable{% - \let\value = \expandablevalue - % We don't want these characters active, ... - \catcode`\-=\other \catcode`\_=\other - % ..., but we might end up with active ones in the argument if - % we're called from @code, as @code{@value{foo-bar_}}, though. - % So \let them to their normal equivalents. - \let-\realdash \let_\normalunderscore - } -} - -% We have this subroutine so that we can handle at least some @value's -% properly in indexes (we call \makevalueexpandable in \indexdummies). -% The command has to be fully expandable (if the variable is set), since -% the result winds up in the index file. This means that if the -% variable's value contains other Texinfo commands, it's almost certain -% it will fail (although perhaps we could fix that with sufficient work -% to do a one-level expansion on the result, instead of complete). -% -\def\expandablevalue#1{% - \expandafter\ifx\csname SET#1\endcsname\relax - {[No value for ``#1'']}% - \message{Variable `#1', used in @value, is not set.}% - \else - \csname SET#1\endcsname - \fi -} - -% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined -% with @set. -% -% To get special treatment of `@end ifset,' call \makeond and the redefine. -% -\makecond{ifset} -\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} -\def\doifset#1#2{% - {% - \makevalueexpandable - \let\next=\empty - \expandafter\ifx\csname SET#2\endcsname\relax - #1% If not set, redefine \next. - \fi - \expandafter - }\next -} -\def\ifsetfail{\doignore{ifset}} - -% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been -% defined with @set, or has been undefined with @clear. -% -% The `\else' inside the `\doifset' parameter is a trick to reuse the -% above code: if the variable is not set, do nothing, if it is set, -% then redefine \next to \ifclearfail. -% -\makecond{ifclear} -\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} -\def\ifclearfail{\doignore{ifclear}} - -% @dircategory CATEGORY -- specify a category of the dir file -% which this file should belong to. Ignore this in TeX. -\let\dircategory=\comment - -% @defininfoenclose. -\let\definfoenclose=\comment - - -\message{indexing,} -% Index generation facilities - -% Define \newwrite to be identical to plain tex's \newwrite -% except not \outer, so it can be used within macros and \if's. -\edef\newwrite{\makecsname{ptexnewwrite}} - -% \newindex {foo} defines an index named foo. -% It automatically defines \fooindex such that -% \fooindex ...rest of line... puts an entry in the index foo. -% It also defines \fooindfile to be the number of the output channel for -% the file that accumulates this index. The file's extension is foo. -% The name of an index should be no more than 2 characters long -% for the sake of vms. -% -\def\newindex#1{% - \iflinks - \expandafter\newwrite \csname#1indfile\endcsname - \openout \csname#1indfile\endcsname \jobname.#1 % Open the file - \fi - \expandafter\xdef\csname#1index\endcsname{% % Define @#1index - \noexpand\doindex{#1}} -} - -% @defindex foo == \newindex{foo} -% -\def\defindex{\parsearg\newindex} - -% Define @defcodeindex, like @defindex except put all entries in @code. -% -\def\defcodeindex{\parsearg\newcodeindex} -% -\def\newcodeindex#1{% - \iflinks - \expandafter\newwrite \csname#1indfile\endcsname - \openout \csname#1indfile\endcsname \jobname.#1 - \fi - \expandafter\xdef\csname#1index\endcsname{% - \noexpand\docodeindex{#1}}% -} - - -% @synindex foo bar makes index foo feed into index bar. -% Do this instead of @defindex foo if you don't want it as a separate index. -% -% @syncodeindex foo bar similar, but put all entries made for index foo -% inside @code. -% -\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} -\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} - -% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), -% #3 the target index (bar). -\def\dosynindex#1#2#3{% - % Only do \closeout if we haven't already done it, else we'll end up - % closing the target index. - \expandafter \ifx\csname donesynindex#2\endcsname \undefined - % The \closeout helps reduce unnecessary open files; the limit on the - % Acorn RISC OS is a mere 16 files. - \expandafter\closeout\csname#2indfile\endcsname - \expandafter\let\csname\donesynindex#2\endcsname = 1 - \fi - % redefine \fooindfile: - \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname - \expandafter\let\csname#2indfile\endcsname=\temp - % redefine \fooindex: - \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% -} - -% Define \doindex, the driver for all \fooindex macros. -% Argument #1 is generated by the calling \fooindex macro, -% and it is "foo", the name of the index. - -% \doindex just uses \parsearg; it calls \doind for the actual work. -% This is because \doind is more useful to call from other macros. - -% There is also \dosubind {index}{topic}{subtopic} -% which makes an entry in a two-level index such as the operation index. - -\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} -\def\singleindexer #1{\doind{\indexname}{#1}} - -% like the previous two, but they put @code around the argument. -\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} -\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} - -% Take care of Texinfo commands that can appear in an index entry. -% Since there are some commands we want to expand, and others we don't, -% we have to laboriously prevent expansion for those that we don't. -% -\def\indexdummies{% - \def\@{@}% change to @@ when we switch to @ as escape char in index files. - \def\ {\realbackslash\space }% - % Need these in case \tex is in effect and \{ is a \delimiter again. - % But can't use \lbracecmd and \rbracecmd because texindex assumes - % braces and backslashes are used only as delimiters. - \let\{ = \mylbrace - \let\} = \myrbrace - % - % \definedummyword defines \#1 as \realbackslash #1\space, thus - % effectively preventing its expansion. This is used only for control - % words, not control letters, because the \space would be incorrect - % for control characters, but is needed to separate the control word - % from whatever follows. - % - % For control letters, we have \definedummyletter, which omits the - % space. - % - % These can be used both for control words that take an argument and - % those that do not. If it is followed by {arg} in the input, then - % that will dutifully get written to the index (or wherever). - % - \def\definedummyword##1{% - \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}% - }% - \def\definedummyletter##1{% - \expandafter\def\csname ##1\endcsname{\realbackslash ##1}% - }% - \let\definedummyaccent\definedummyletter - % - % Do the redefinitions. - \commondummies -} - -% For the aux file, @ is the escape character. So we want to redefine -% everything using @ instead of \realbackslash. When everything uses -% @, this will be simpler. -% -\def\atdummies{% - \def\@{@@}% - \def\ {@ }% - \let\{ = \lbraceatcmd - \let\} = \rbraceatcmd - % - % (See comments in \indexdummies.) - \def\definedummyword##1{% - \expandafter\def\csname ##1\endcsname{@##1\space}% - }% - \def\definedummyletter##1{% - \expandafter\def\csname ##1\endcsname{@##1}% - }% - \let\definedummyaccent\definedummyletter - % - % Do the redefinitions. - \commondummies -} - -% Called from \indexdummies and \atdummies. \definedummyword and -% \definedummyletter must be defined first. -% -\def\commondummies{% - % - \normalturnoffactive - % - \commondummiesnofonts - % - \definedummyletter{_}% - % - % Non-English letters. - \definedummyword{AA}% - \definedummyword{AE}% - \definedummyword{L}% - \definedummyword{OE}% - \definedummyword{O}% - \definedummyword{aa}% - \definedummyword{ae}% - \definedummyword{l}% - \definedummyword{oe}% - \definedummyword{o}% - \definedummyword{ss}% - \definedummyword{exclamdown}% - \definedummyword{questiondown}% - \definedummyword{ordf}% - \definedummyword{ordm}% - % - % Although these internal commands shouldn't show up, sometimes they do. - \definedummyword{bf}% - \definedummyword{gtr}% - \definedummyword{hat}% - \definedummyword{less}% - \definedummyword{sf}% - \definedummyword{sl}% - \definedummyword{tclose}% - \definedummyword{tt}% - % - \definedummyword{LaTeX}% - \definedummyword{TeX}% - % - % Assorted special characters. - \definedummyword{bullet}% - \definedummyword{comma}% - \definedummyword{copyright}% - \definedummyword{registeredsymbol}% - \definedummyword{dots}% - \definedummyword{enddots}% - \definedummyword{equiv}% - \definedummyword{error}% - \definedummyword{euro}% - \definedummyword{expansion}% - \definedummyword{minus}% - \definedummyword{pounds}% - \definedummyword{point}% - \definedummyword{print}% - \definedummyword{result}% - % - % Handle some cases of @value -- where it does not contain any - % (non-fully-expandable) commands. - \makevalueexpandable - % - % Normal spaces, not active ones. - \unsepspaces - % - % No macro expansion. - \turnoffmacros -} - -% \commondummiesnofonts: common to \commondummies and \indexnofonts. -% -% Better have this without active chars. -{ - \catcode`\~=\other - \gdef\commondummiesnofonts{% - % Control letters and accents. - \definedummyletter{!}% - \definedummyaccent{"}% - \definedummyaccent{'}% - \definedummyletter{*}% - \definedummyaccent{,}% - \definedummyletter{.}% - \definedummyletter{/}% - \definedummyletter{:}% - \definedummyaccent{=}% - \definedummyletter{?}% - \definedummyaccent{^}% - \definedummyaccent{`}% - \definedummyaccent{~}% - \definedummyword{u}% - \definedummyword{v}% - \definedummyword{H}% - \definedummyword{dotaccent}% - \definedummyword{ringaccent}% - \definedummyword{tieaccent}% - \definedummyword{ubaraccent}% - \definedummyword{udotaccent}% - \definedummyword{dotless}% - % - % Texinfo font commands. - \definedummyword{b}% - \definedummyword{i}% - \definedummyword{r}% - \definedummyword{sc}% - \definedummyword{t}% - % - % Commands that take arguments. - \definedummyword{acronym}% - \definedummyword{cite}% - \definedummyword{code}% - \definedummyword{command}% - \definedummyword{dfn}% - \definedummyword{emph}% - \definedummyword{env}% - \definedummyword{file}% - \definedummyword{kbd}% - \definedummyword{key}% - \definedummyword{math}% - \definedummyword{option}% - \definedummyword{samp}% - \definedummyword{strong}% - \definedummyword{tie}% - \definedummyword{uref}% - \definedummyword{url}% - \definedummyword{var}% - \definedummyword{verb}% - \definedummyword{w}% - } -} - -% \indexnofonts is used when outputting the strings to sort the index -% by, and when constructing control sequence names. It eliminates all -% control sequences and just writes whatever the best ASCII sort string -% would be for a given command (usually its argument). -% -\def\indexnofonts{% - % Accent commands should become @asis. - \def\definedummyaccent##1{% - \expandafter\let\csname ##1\endcsname\asis - }% - % We can just ignore other control letters. - \def\definedummyletter##1{% - \expandafter\def\csname ##1\endcsname{}% - }% - % Hopefully, all control words can become @asis. - \let\definedummyword\definedummyaccent - % - \commondummiesnofonts - % - % Don't no-op \tt, since it isn't a user-level command - % and is used in the definitions of the active chars like <, >, |, etc. - % Likewise with the other plain tex font commands. - %\let\tt=\asis - % - \def\ { }% - \def\@{@}% - % how to handle braces? - \def\_{\normalunderscore}% - % - % Non-English letters. - \def\AA{AA}% - \def\AE{AE}% - \def\L{L}% - \def\OE{OE}% - \def\O{O}% - \def\aa{aa}% - \def\ae{ae}% - \def\l{l}% - \def\oe{oe}% - \def\o{o}% - \def\ss{ss}% - \def\exclamdown{!}% - \def\questiondown{?}% - \def\ordf{a}% - \def\ordm{o}% - % - \def\LaTeX{LaTeX}% - \def\TeX{TeX}% - % - % Assorted special characters. - % (The following {} will end up in the sort string, but that's ok.) - \def\bullet{bullet}% - \def\comma{,}% - \def\copyright{copyright}% - \def\registeredsymbol{R}% - \def\dots{...}% - \def\enddots{...}% - \def\equiv{==}% - \def\error{error}% - \def\euro{euro}% - \def\expansion{==>}% - \def\minus{-}% - \def\pounds{pounds}% - \def\point{.}% - \def\print{-|}% - \def\result{=>}% - % - % Don't write macro names. - \emptyusermacros -} - -\let\indexbackslash=0 %overridden during \printindex. -\let\SETmarginindex=\relax % put index entries in margin (undocumented)? - -% Most index entries go through here, but \dosubind is the general case. -% #1 is the index name, #2 is the entry text. -\def\doind#1#2{\dosubind{#1}{#2}{}} - -% Workhorse for all \fooindexes. -% #1 is name of index, #2 is stuff to put there, #3 is subentry -- -% empty if called from \doind, as we usually are (the main exception -% is with most defuns, which call us directly). -% -\def\dosubind#1#2#3{% - \iflinks - {% - % Store the main index entry text (including the third arg). - \toks0 = {#2}% - % If third arg is present, precede it with a space. - \def\thirdarg{#3}% - \ifx\thirdarg\empty \else - \toks0 = \expandafter{\the\toks0 \space #3}% - \fi - % - \edef\writeto{\csname#1indfile\endcsname}% - % - \ifvmode - \dosubindsanitize - \else - \dosubindwrite - \fi - }% - \fi -} - -% Write the entry in \toks0 to the index file: -% -\def\dosubindwrite{% - % Put the index entry in the margin if desired. - \ifx\SETmarginindex\relax\else - \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% - \fi - % - % Remember, we are within a group. - \indexdummies % Must do this here, since \bf, etc expand at this stage - \escapechar=`\\ - \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now - % so it will be output as is; and it will print as backslash. - % - % Process the index entry with all font commands turned off, to - % get the string to sort by. - {\indexnofonts - \edef\temp{\the\toks0}% need full expansion - \xdef\indexsorttmp{\temp}% - }% - % - % Set up the complete index entry, with both the sort key and - % the original text, including any font commands. We write - % three arguments to \entry to the .?? file (four in the - % subentry case), texindex reduces to two when writing the .??s - % sorted result. - \edef\temp{% - \write\writeto{% - \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% - }% - \temp -} - -% Take care of unwanted page breaks: -% -% If a skip is the last thing on the list now, preserve it -% by backing up by \lastskip, doing the \write, then inserting -% the skip again. Otherwise, the whatsit generated by the -% \write will make \lastskip zero. The result is that sequences -% like this: -% @end defun -% @tindex whatever -% @defun ... -% will have extra space inserted, because the \medbreak in the -% start of the @defun won't see the skip inserted by the @end of -% the previous defun. -% -% But don't do any of this if we're not in vertical mode. We -% don't want to do a \vskip and prematurely end a paragraph. -% -% Avoid page breaks due to these extra skips, too. -% -% But wait, there is a catch there: -% We'll have to check whether \lastskip is zero skip. \ifdim is not -% sufficient for this purpose, as it ignores stretch and shrink parts -% of the skip. The only way seems to be to check the textual -% representation of the skip. -% -% The following is almost like \def\zeroskipmacro{0.0pt} except that -% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). -% -\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} -% -% ..., ready, GO: -% -\def\dosubindsanitize{% - % \lastskip and \lastpenalty cannot both be nonzero simultaneously. - \skip0 = \lastskip - \edef\lastskipmacro{\the\lastskip}% - \count255 = \lastpenalty - % - % If \lastskip is nonzero, that means the last item was a - % skip. And since a skip is discardable, that means this - % -\skip0 glue we're inserting is preceded by a - % non-discardable item, therefore it is not a potential - % breakpoint, therefore no \nobreak needed. - \ifx\lastskipmacro\zeroskipmacro - \else - \vskip-\skip0 - \fi - % - \dosubindwrite - % - \ifx\lastskipmacro\zeroskipmacro - % If \lastskip was zero, perhaps the last item was a penalty, and - % perhaps it was >=10000, e.g., a \nobreak. In that case, we want - % to re-insert the same penalty (values >10000 are used for various - % signals); since we just inserted a non-discardable item, any - % following glue (such as a \parskip) would be a breakpoint. For example: - % - % @deffn deffn-whatever - % @vindex index-whatever - % Description. - % would allow a break between the index-whatever whatsit - % and the "Description." paragraph. - \ifnum\count255>9999 \penalty\count255 \fi - \else - % On the other hand, if we had a nonzero \lastskip, - % this make-up glue would be preceded by a non-discardable item - % (the whatsit from the \write), so we must insert a \nobreak. - \nobreak\vskip\skip0 - \fi -} - -% The index entry written in the file actually looks like -% \entry {sortstring}{page}{topic} -% or -% \entry {sortstring}{page}{topic}{subtopic} -% The texindex program reads in these files and writes files -% containing these kinds of lines: -% \initial {c} -% before the first topic whose initial is c -% \entry {topic}{pagelist} -% for a topic that is used without subtopics -% \primary {topic} -% for the beginning of a topic that is used with subtopics -% \secondary {subtopic}{pagelist} -% for each subtopic. - -% Define the user-accessible indexing commands -% @findex, @vindex, @kindex, @cindex. - -\def\findex {\fnindex} -\def\kindex {\kyindex} -\def\cindex {\cpindex} -\def\vindex {\vrindex} -\def\tindex {\tpindex} -\def\pindex {\pgindex} - -\def\cindexsub {\begingroup\obeylines\cindexsub} -{\obeylines % -\gdef\cindexsub "#1" #2^^M{\endgroup % -\dosubind{cp}{#2}{#1}}} - -% Define the macros used in formatting output of the sorted index material. - -% @printindex causes a particular index (the ??s file) to get printed. -% It does not print any chapter heading (usually an @unnumbered). -% -\parseargdef\printindex{\begingroup - \dobreak \chapheadingskip{10000}% - % - \smallfonts \rm - \tolerance = 9500 - \everypar = {}% don't want the \kern\-parindent from indentation suppression. - % - % See if the index file exists and is nonempty. - % Change catcode of @ here so that if the index file contains - % \initial {@} - % as its first line, TeX doesn't complain about mismatched braces - % (because it thinks @} is a control sequence). - \catcode`\@ = 11 - \openin 1 \jobname.#1s - \ifeof 1 - % \enddoublecolumns gets confused if there is no text in the index, - % and it loses the chapter title and the aux file entries for the - % index. The easiest way to prevent this problem is to make sure - % there is some text. - \putwordIndexNonexistent - \else - % - % If the index file exists but is empty, then \openin leaves \ifeof - % false. We have to make TeX try to read something from the file, so - % it can discover if there is anything in it. - \read 1 to \temp - \ifeof 1 - \putwordIndexIsEmpty - \else - % Index files are almost Texinfo source, but we use \ as the escape - % character. It would be better to use @, but that's too big a change - % to make right now. - \def\indexbackslash{\backslashcurfont}% - \catcode`\\ = 0 - \escapechar = `\\ - \begindoublecolumns - \input \jobname.#1s - \enddoublecolumns - \fi - \fi - \closein 1 -\endgroup} - -% These macros are used by the sorted index file itself. -% Change them to control the appearance of the index. - -\def\initial#1{{% - % Some minor font changes for the special characters. - \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt - % - % Remove any glue we may have, we'll be inserting our own. - \removelastskip - % - % We like breaks before the index initials, so insert a bonus. - \nobreak - \vskip 0pt plus 3\baselineskip - \penalty 0 - \vskip 0pt plus -3\baselineskip - % - % Typeset the initial. Making this add up to a whole number of - % baselineskips increases the chance of the dots lining up from column - % to column. It still won't often be perfect, because of the stretch - % we need before each entry, but it's better. - % - % No shrink because it confuses \balancecolumns. - \vskip 1.67\baselineskip plus .5\baselineskip - \leftline{\secbf #1}% - % Do our best not to break after the initial. - \nobreak - \vskip .33\baselineskip plus .1\baselineskip -}} - -% \entry typesets a paragraph consisting of the text (#1), dot leaders, and -% then page number (#2) flushed to the right margin. It is used for index -% and table of contents entries. The paragraph is indented by \leftskip. -% -% A straightforward implementation would start like this: -% \def\entry#1#2{... -% But this frozes the catcodes in the argument, and can cause problems to -% @code, which sets - active. This problem was fixed by a kludge--- -% ``-'' was active throughout whole index, but this isn't really right. -% -% The right solution is to prevent \entry from swallowing the whole text. -% --kasal, 21nov03 -\def\entry{% - \begingroup - % - % Start a new paragraph if necessary, so our assignments below can't - % affect previous text. - \par - % - % Do not fill out the last line with white space. - \parfillskip = 0in - % - % No extra space above this paragraph. - \parskip = 0in - % - % Do not prefer a separate line ending with a hyphen to fewer lines. - \finalhyphendemerits = 0 - % - % \hangindent is only relevant when the entry text and page number - % don't both fit on one line. In that case, bob suggests starting the - % dots pretty far over on the line. Unfortunately, a large - % indentation looks wrong when the entry text itself is broken across - % lines. So we use a small indentation and put up with long leaders. - % - % \hangafter is reset to 1 (which is the value we want) at the start - % of each paragraph, so we need not do anything with that. - \hangindent = 2em - % - % When the entry text needs to be broken, just fill out the first line - % with blank space. - \rightskip = 0pt plus1fil - % - % A bit of stretch before each entry for the benefit of balancing - % columns. - \vskip 0pt plus1pt - % - % Swallow the left brace of the text (first parameter): - \afterassignment\doentry - \let\temp = -} -\def\doentry{% - \bgroup % Instead of the swallowed brace. - \noindent - \aftergroup\finishentry - % And now comes the text of the entry. -} -\def\finishentry#1{% - % #1 is the page number. - % - % The following is kludged to not output a line of dots in the index if - % there are no page numbers. The next person who breaks this will be - % cursed by a Unix daemon. - \def\tempa{{\rm }}% - \def\tempb{#1}% - \edef\tempc{\tempa}% - \edef\tempd{\tempb}% - \ifx\tempc\tempd - \ % - \else - % - % If we must, put the page number on a line of its own, and fill out - % this line with blank space. (The \hfil is overwhelmed with the - % fill leaders glue in \indexdotfill if the page number does fit.) - \hfil\penalty50 - \null\nobreak\indexdotfill % Have leaders before the page number. - % - % The `\ ' here is removed by the implicit \unskip that TeX does as - % part of (the primitive) \par. Without it, a spurious underfull - % \hbox ensues. - \ifpdf - \pdfgettoks#1.% - \ \the\toksA - \else - \ #1% - \fi - \fi - \par - \endgroup -} - -% Like \dotfill except takes at least 1 em. -\def\indexdotfill{\cleaders - \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} - -\def\primary #1{\line{#1\hfil}} - -\newskip\secondaryindent \secondaryindent=0.5cm -\def\secondary#1#2{{% - \parfillskip=0in - \parskip=0in - \hangindent=1in - \hangafter=1 - \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill - \ifpdf - \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. - \else - #2 - \fi - \par -}} - -% Define two-column mode, which we use to typeset indexes. -% Adapted from the TeXbook, page 416, which is to say, -% the manmac.tex format used to print the TeXbook itself. -\catcode`\@=11 - -\newbox\partialpage -\newdimen\doublecolumnhsize - -\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns - % Grab any single-column material above us. - \output = {% - % - % Here is a possibility not foreseen in manmac: if we accumulate a - % whole lot of material, we might end up calling this \output - % routine twice in a row (see the doublecol-lose test, which is - % essentially a couple of indexes with @setchapternewpage off). In - % that case we just ship out what is in \partialpage with the normal - % output routine. Generally, \partialpage will be empty when this - % runs and this will be a no-op. See the indexspread.tex test case. - \ifvoid\partialpage \else - \onepageout{\pagecontents\partialpage}% - \fi - % - \global\setbox\partialpage = \vbox{% - % Unvbox the main output page. - \unvbox\PAGE - \kern-\topskip \kern\baselineskip - }% - }% - \eject % run that output routine to set \partialpage - % - % Use the double-column output routine for subsequent pages. - \output = {\doublecolumnout}% - % - % Change the page size parameters. We could do this once outside this - % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 - % format, but then we repeat the same computation. Repeating a couple - % of assignments once per index is clearly meaningless for the - % execution time, so we may as well do it in one place. - % - % First we halve the line length, less a little for the gutter between - % the columns. We compute the gutter based on the line length, so it - % changes automatically with the paper format. The magic constant - % below is chosen so that the gutter has the same value (well, +-<1pt) - % as it did when we hard-coded it. - % - % We put the result in a separate register, \doublecolumhsize, so we - % can restore it in \pagesofar, after \hsize itself has (potentially) - % been clobbered. - % - \doublecolumnhsize = \hsize - \advance\doublecolumnhsize by -.04154\hsize - \divide\doublecolumnhsize by 2 - \hsize = \doublecolumnhsize - % - % Double the \vsize as well. (We don't need a separate register here, - % since nobody clobbers \vsize.) - \vsize = 2\vsize -} - -% The double-column output routine for all double-column pages except -% the last. -% -\def\doublecolumnout{% - \splittopskip=\topskip \splitmaxdepth=\maxdepth - % Get the available space for the double columns -- the normal - % (undoubled) page height minus any material left over from the - % previous page. - \dimen@ = \vsize - \divide\dimen@ by 2 - \advance\dimen@ by -\ht\partialpage - % - % box0 will be the left-hand column, box2 the right. - \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ - \onepageout\pagesofar - \unvbox255 - \penalty\outputpenalty -} -% -% Re-output the contents of the output page -- any previous material, -% followed by the two boxes we just split, in box0 and box2. -\def\pagesofar{% - \unvbox\partialpage - % - \hsize = \doublecolumnhsize - \wd0=\hsize \wd2=\hsize - \hbox to\pagewidth{\box0\hfil\box2}% -} -% -% All done with double columns. -\def\enddoublecolumns{% - \output = {% - % Split the last of the double-column material. Leave it on the - % current page, no automatic page break. - \balancecolumns - % - % If we end up splitting too much material for the current page, - % though, there will be another page break right after this \output - % invocation ends. Having called \balancecolumns once, we do not - % want to call it again. Therefore, reset \output to its normal - % definition right away. (We hope \balancecolumns will never be - % called on to balance too much material, but if it is, this makes - % the output somewhat more palatable.) - \global\output = {\onepageout{\pagecontents\PAGE}}% - }% - \eject - \endgroup % started in \begindoublecolumns - % - % \pagegoal was set to the doubled \vsize above, since we restarted - % the current page. We're now back to normal single-column - % typesetting, so reset \pagegoal to the normal \vsize (after the - % \endgroup where \vsize got restored). - \pagegoal = \vsize -} -% -% Called at the end of the double column material. -\def\balancecolumns{% - \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. - \dimen@ = \ht0 - \advance\dimen@ by \topskip - \advance\dimen@ by-\baselineskip - \divide\dimen@ by 2 % target to split to - %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% - \splittopskip = \topskip - % Loop until we get a decent breakpoint. - {% - \vbadness = 10000 - \loop - \global\setbox3 = \copy0 - \global\setbox1 = \vsplit3 to \dimen@ - \ifdim\ht3>\dimen@ - \global\advance\dimen@ by 1pt - \repeat - }% - %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% - \setbox0=\vbox to\dimen@{\unvbox1}% - \setbox2=\vbox to\dimen@{\unvbox3}% - % - \pagesofar -} -\catcode`\@ = \other - - -\message{sectioning,} -% Chapters, sections, etc. - -% \unnumberedno is an oxymoron, of course. But we count the unnumbered -% sections so that we can refer to them unambiguously in the pdf -% outlines by their "section number". We avoid collisions with chapter -% numbers by starting them at 10000. (If a document ever has 10000 -% chapters, we're in trouble anyway, I'm sure.) -\newcount\unnumberedno \unnumberedno = 10000 -\newcount\chapno -\newcount\secno \secno=0 -\newcount\subsecno \subsecno=0 -\newcount\subsubsecno \subsubsecno=0 - -% This counter is funny since it counts through charcodes of letters A, B, ... -\newcount\appendixno \appendixno = `\@ -% -% \def\appendixletter{\char\the\appendixno} -% We do the following ugly conditional instead of the above simple -% construct for the sake of pdftex, which needs the actual -% letter in the expansion, not just typeset. -% -\def\appendixletter{% - \ifnum\appendixno=`A A% - \else\ifnum\appendixno=`B B% - \else\ifnum\appendixno=`C C% - \else\ifnum\appendixno=`D D% - \else\ifnum\appendixno=`E E% - \else\ifnum\appendixno=`F F% - \else\ifnum\appendixno=`G G% - \else\ifnum\appendixno=`H H% - \else\ifnum\appendixno=`I I% - \else\ifnum\appendixno=`J J% - \else\ifnum\appendixno=`K K% - \else\ifnum\appendixno=`L L% - \else\ifnum\appendixno=`M M% - \else\ifnum\appendixno=`N N% - \else\ifnum\appendixno=`O O% - \else\ifnum\appendixno=`P P% - \else\ifnum\appendixno=`Q Q% - \else\ifnum\appendixno=`R R% - \else\ifnum\appendixno=`S S% - \else\ifnum\appendixno=`T T% - \else\ifnum\appendixno=`U U% - \else\ifnum\appendixno=`V V% - \else\ifnum\appendixno=`W W% - \else\ifnum\appendixno=`X X% - \else\ifnum\appendixno=`Y Y% - \else\ifnum\appendixno=`Z Z% - % The \the is necessary, despite appearances, because \appendixletter is - % expanded while writing the .toc file. \char\appendixno is not - % expandable, thus it is written literally, thus all appendixes come out - % with the same letter (or @) in the toc without it. - \else\char\the\appendixno - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} - -% Each @chapter defines this as the name of the chapter. -% page headings and footings can use it. @section does likewise. -% However, they are not reliable, because we don't use marks. -\def\thischapter{} -\def\thissection{} - -\newcount\absseclevel % used to calculate proper heading level -\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count - -% @raisesections: treat @section as chapter, @subsection as section, etc. -\def\raisesections{\global\advance\secbase by -1} -\let\up=\raisesections % original BFox name - -% @lowersections: treat @chapter as section, @section as subsection, etc. -\def\lowersections{\global\advance\secbase by 1} -\let\down=\lowersections % original BFox name - -% we only have subsub. -\chardef\maxseclevel = 3 -% -% A numbered section within an unnumbered changes to unnumbered too. -% To achive this, remember the "biggest" unnum. sec. we are currently in: -\chardef\unmlevel = \maxseclevel -% -% Trace whether the current chapter is an appendix or not: -% \chapheadtype is "N" or "A", unnumbered chapters are ignored. -\def\chapheadtype{N} - -% Choose a heading macro -% #1 is heading type -% #2 is heading level -% #3 is text for heading -\def\genhead#1#2#3{% - % Compute the abs. sec. level: - \absseclevel=#2 - \advance\absseclevel by \secbase - % Make sure \absseclevel doesn't fall outside the range: - \ifnum \absseclevel < 0 - \absseclevel = 0 - \else - \ifnum \absseclevel > 3 - \absseclevel = 3 - \fi - \fi - % The heading type: - \def\headtype{#1}% - \if \headtype U% - \ifnum \absseclevel < \unmlevel - \chardef\unmlevel = \absseclevel - \fi - \else - % Check for appendix sections: - \ifnum \absseclevel = 0 - \edef\chapheadtype{\headtype}% - \else - \if \headtype A\if \chapheadtype N% - \errmessage{@appendix... within a non-appendix chapter}% - \fi\fi - \fi - % Check for numbered within unnumbered: - \ifnum \absseclevel > \unmlevel - \def\headtype{U}% - \else - \chardef\unmlevel = 3 - \fi - \fi - % Now print the heading: - \if \headtype U% - \ifcase\absseclevel - \unnumberedzzz{#3}% - \or \unnumberedseczzz{#3}% - \or \unnumberedsubseczzz{#3}% - \or \unnumberedsubsubseczzz{#3}% - \fi - \else - \if \headtype A% - \ifcase\absseclevel - \appendixzzz{#3}% - \or \appendixsectionzzz{#3}% - \or \appendixsubseczzz{#3}% - \or \appendixsubsubseczzz{#3}% - \fi - \else - \ifcase\absseclevel - \chapterzzz{#3}% - \or \seczzz{#3}% - \or \numberedsubseczzz{#3}% - \or \numberedsubsubseczzz{#3}% - \fi - \fi - \fi - \suppressfirstparagraphindent -} - -% an interface: -\def\numhead{\genhead N} -\def\apphead{\genhead A} -\def\unnmhead{\genhead U} - -% @chapter, @appendix, @unnumbered. Increment top-level counter, reset -% all lower-level sectioning counters to zero. -% -% Also set \chaplevelprefix, which we prepend to @float sequence numbers -% (e.g., figures), q.v. By default (before any chapter), that is empty. -\let\chaplevelprefix = \empty -% -\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz -\def\chapterzzz#1{% - % section resetting is \global in case the chapter is in a group, such - % as an @include file. - \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 - \global\advance\chapno by 1 - % - % Used for \float. - \gdef\chaplevelprefix{\the\chapno.}% - \resetallfloatnos - % - \message{\putwordChapter\space \the\chapno}% - % - % Write the actual heading. - \chapmacro{#1}{Ynumbered}{\the\chapno}% - % - % So @section and the like are numbered underneath this chapter. - \global\let\section = \numberedsec - \global\let\subsection = \numberedsubsec - \global\let\subsubsection = \numberedsubsubsec -} - -\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz -\def\appendixzzz#1{% - \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 - \global\advance\appendixno by 1 - \gdef\chaplevelprefix{\appendixletter.}% - \resetallfloatnos - % - \def\appendixnum{\putwordAppendix\space \appendixletter}% - \message{\appendixnum}% - % - \chapmacro{#1}{Yappendix}{\appendixletter}% - % - \global\let\section = \appendixsec - \global\let\subsection = \appendixsubsec - \global\let\subsubsection = \appendixsubsubsec -} - -\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz -\def\unnumberedzzz#1{% - \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 - \global\advance\unnumberedno by 1 - % - % Since an unnumbered has no number, no prefix for figures. - \global\let\chaplevelprefix = \empty - \resetallfloatnos - % - % This used to be simply \message{#1}, but TeX fully expands the - % argument to \message. Therefore, if #1 contained @-commands, TeX - % expanded them. For example, in `@unnumbered The @cite{Book}', TeX - % expanded @cite (which turns out to cause errors because \cite is meant - % to be executed, not expanded). - % - % Anyway, we don't want the fully-expanded definition of @cite to appear - % as a result of the \message, we just want `@cite' itself. We use - % \the to achieve this: TeX expands \the only once, - % simply yielding the contents of . (We also do this for - % the toc entries.) - \toks0 = {#1}% - \message{(\the\toks0)}% - % - \chapmacro{#1}{Ynothing}{\the\unnumberedno}% - % - \global\let\section = \unnumberedsec - \global\let\subsection = \unnumberedsubsec - \global\let\subsubsection = \unnumberedsubsubsec -} - -% @centerchap is like @unnumbered, but the heading is centered. -\outer\parseargdef\centerchap{% - % Well, we could do the following in a group, but that would break - % an assumption that \chapmacro is called at the outermost level. - % Thus we are safer this way: --kasal, 24feb04 - \let\centerparametersmaybe = \centerparameters - \unnmhead0{#1}% - \let\centerparametersmaybe = \relax -} - -% @top is like @unnumbered. -\let\top\unnumbered - -% Sections. -\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz -\def\seczzz#1{% - \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 - \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% -} - -\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz -\def\appendixsectionzzz#1{% - \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 - \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% -} -\let\appendixsec\appendixsection - -\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz -\def\unnumberedseczzz#1{% - \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 - \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% -} - -% Subsections. -\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz -\def\numberedsubseczzz#1{% - \global\subsubsecno=0 \global\advance\subsecno by 1 - \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% -} - -\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz -\def\appendixsubseczzz#1{% - \global\subsubsecno=0 \global\advance\subsecno by 1 - \sectionheading{#1}{subsec}{Yappendix}% - {\appendixletter.\the\secno.\the\subsecno}% -} - -\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz -\def\unnumberedsubseczzz#1{% - \global\subsubsecno=0 \global\advance\subsecno by 1 - \sectionheading{#1}{subsec}{Ynothing}% - {\the\unnumberedno.\the\secno.\the\subsecno}% -} - -% Subsubsections. -\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz -\def\numberedsubsubseczzz#1{% - \global\advance\subsubsecno by 1 - \sectionheading{#1}{subsubsec}{Ynumbered}% - {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% -} - -\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz -\def\appendixsubsubseczzz#1{% - \global\advance\subsubsecno by 1 - \sectionheading{#1}{subsubsec}{Yappendix}% - {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% -} - -\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz -\def\unnumberedsubsubseczzz#1{% - \global\advance\subsubsecno by 1 - \sectionheading{#1}{subsubsec}{Ynothing}% - {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% -} - -% These macros control what the section commands do, according -% to what kind of chapter we are in (ordinary, appendix, or unnumbered). -% Define them by default for a numbered chapter. -\let\section = \numberedsec -\let\subsection = \numberedsubsec -\let\subsubsection = \numberedsubsubsec - -% Define @majorheading, @heading and @subheading - -% NOTE on use of \vbox for chapter headings, section headings, and such: -% 1) We use \vbox rather than the earlier \line to permit -% overlong headings to fold. -% 2) \hyphenpenalty is set to 10000 because hyphenation in a -% heading is obnoxious; this forbids it. -% 3) Likewise, headings look best if no \parindent is used, and -% if justification is not attempted. Hence \raggedright. - - -\def\majorheading{% - {\advance\chapheadingskip by 10pt \chapbreak }% - \parsearg\chapheadingzzz -} - -\def\chapheading{\chapbreak \parsearg\chapheadingzzz} -\def\chapheadingzzz#1{% - {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}% - \bigskip \par\penalty 200\relax - \suppressfirstparagraphindent -} - -% @heading, @subheading, @subsubheading. -\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} - \suppressfirstparagraphindent} -\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} - \suppressfirstparagraphindent} -\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} - \suppressfirstparagraphindent} - -% These macros generate a chapter, section, etc. heading only -% (including whitespace, linebreaking, etc. around it), -% given all the information in convenient, parsed form. - -%%% Args are the skip and penalty (usually negative) -\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} - -%%% Define plain chapter starts, and page on/off switching for it -% Parameter controlling skip before chapter headings (if needed) - -\newskip\chapheadingskip - -\def\chapbreak{\dobreak \chapheadingskip {-4000}} -\def\chappager{\par\vfill\supereject} -\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} - -\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} - -\def\CHAPPAGoff{% -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chapbreak -\global\let\pagealignmacro=\chappager} - -\def\CHAPPAGon{% -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chappager -\global\let\pagealignmacro=\chappager -\global\def\HEADINGSon{\HEADINGSsingle}} - -\def\CHAPPAGodd{% -\global\let\contentsalignmacro = \chapoddpage -\global\let\pchapsepmacro=\chapoddpage -\global\let\pagealignmacro=\chapoddpage -\global\def\HEADINGSon{\HEADINGSdouble}} - -\CHAPPAGon - -% Chapter opening. -% -% #1 is the text, #2 is the section type (Ynumbered, Ynothing, -% Yappendix, Yomitfromtoc), #3 the chapter number. -% -% To test against our argument. -\def\Ynothingkeyword{Ynothing} -\def\Yomitfromtockeyword{Yomitfromtoc} -\def\Yappendixkeyword{Yappendix} -% -\def\chapmacro#1#2#3{% - \pchapsepmacro - {% - \chapfonts \rm - % - % Have to define \thissection before calling \donoderef, because the - % xref code eventually uses it. On the other hand, it has to be called - % after \pchapsepmacro, or the headline will change too soon. - \gdef\thissection{#1}% - \gdef\thischaptername{#1}% - % - % Only insert the separating space if we have a chapter/appendix - % number, and don't print the unnumbered ``number''. - \def\temptype{#2}% - \ifx\temptype\Ynothingkeyword - \setbox0 = \hbox{}% - \def\toctype{unnchap}% - \def\thischapter{#1}% - \else\ifx\temptype\Yomitfromtockeyword - \setbox0 = \hbox{}% contents like unnumbered, but no toc entry - \def\toctype{omit}% - \xdef\thischapter{}% - \else\ifx\temptype\Yappendixkeyword - \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% - \def\toctype{app}% - % We don't substitute the actual chapter name into \thischapter - % because we don't want its macros evaluated now. And we don't - % use \thissection because that changes with each section. - % - \xdef\thischapter{\putwordAppendix{} \appendixletter: - \noexpand\thischaptername}% - \else - \setbox0 = \hbox{#3\enspace}% - \def\toctype{numchap}% - \xdef\thischapter{\putwordChapter{} \the\chapno: - \noexpand\thischaptername}% - \fi\fi\fi - % - % Write the toc entry for this chapter. Must come before the - % \donoderef, because we include the current node name in the toc - % entry, and \donoderef resets it to empty. - \writetocentry{\toctype}{#1}{#3}% - % - % For pdftex, we have to write out the node definition (aka, make - % the pdfdest) after any page break, but before the actual text has - % been typeset. If the destination for the pdf outline is after the - % text, then jumping from the outline may wind up with the text not - % being visible, for instance under high magnification. - \donoderef{#2}% - % - % Typeset the actual heading. - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright - \hangindent=\wd0 \centerparametersmaybe - \unhbox0 #1\par}% - }% - \nobreak\bigskip % no page break after a chapter title - \nobreak -} - -% @centerchap -- centered and unnumbered. -\let\centerparametersmaybe = \relax -\def\centerparameters{% - \advance\rightskip by 3\rightskip - \leftskip = \rightskip - \parfillskip = 0pt -} - - -% I don't think this chapter style is supported any more, so I'm not -% updating it with the new noderef stuff. We'll see. --karl, 11aug03. -% -\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} -% -\def\unnchfopen #1{% -\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\nobreak -} -\def\chfopen #1#2{\chapoddpage {\chapfonts -\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% -\par\penalty 5000 % -} -\def\centerchfopen #1{% -\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt - \hfill {\rm #1}\hfill}}\bigskip \par\nobreak -} -\def\CHAPFopen{% - \global\let\chapmacro=\chfopen - \global\let\centerchapmacro=\centerchfopen} - - -% Section titles. These macros combine the section number parts and -% call the generic \sectionheading to do the printing. -% -\newskip\secheadingskip -\def\secheadingbreak{\dobreak \secheadingskip{-1000}} - -% Subsection titles. -\newskip\subsecheadingskip -\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} - -% Subsubsection titles. -\def\subsubsecheadingskip{\subsecheadingskip} -\def\subsubsecheadingbreak{\subsecheadingbreak} - - -% Print any size, any type, section title. -% -% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is -% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the -% section number. -% -\def\sectionheading#1#2#3#4{% - {% - % Switch to the right set of fonts. - \csname #2fonts\endcsname \rm - % - % Insert space above the heading. - \csname #2headingbreak\endcsname - % - % Only insert the space after the number if we have a section number. - \def\sectionlevel{#2}% - \def\temptype{#3}% - % - \ifx\temptype\Ynothingkeyword - \setbox0 = \hbox{}% - \def\toctype{unn}% - \gdef\thissection{#1}% - \else\ifx\temptype\Yomitfromtockeyword - % for @headings -- no section number, don't include in toc, - % and don't redefine \thissection. - \setbox0 = \hbox{}% - \def\toctype{omit}% - \let\sectionlevel=\empty - \else\ifx\temptype\Yappendixkeyword - \setbox0 = \hbox{#4\enspace}% - \def\toctype{app}% - \gdef\thissection{#1}% - \else - \setbox0 = \hbox{#4\enspace}% - \def\toctype{num}% - \gdef\thissection{#1}% - \fi\fi\fi - % - % Write the toc entry (before \donoderef). See comments in \chfplain. - \writetocentry{\toctype\sectionlevel}{#1}{#4}% - % - % Write the node reference (= pdf destination for pdftex). - % Again, see comments in \chfplain. - \donoderef{#3}% - % - % Output the actual section heading. - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright - \hangindent=\wd0 % zero if no section number - \unhbox0 #1}% - }% - % Add extra space after the heading -- half of whatever came above it. - % Don't allow stretch, though. - \kern .5 \csname #2headingskip\endcsname - % - % Do not let the kern be a potential breakpoint, as it would be if it - % was followed by glue. - \nobreak - % - % We'll almost certainly start a paragraph next, so don't let that - % glue accumulate. (Not a breakpoint because it's preceded by a - % discardable item.) - \vskip-\parskip - % - % This is purely so the last item on the list is a known \penalty > - % 10000. This is so \startdefun can avoid allowing breakpoints after - % section headings. Otherwise, it would insert a valid breakpoint between: - % - % @section sec-whatever - % @deffn def-whatever - \penalty 10001 -} - - -\message{toc,} -% Table of contents. -\newwrite\tocfile - -% Write an entry to the toc file, opening it if necessary. -% Called from @chapter, etc. -% -% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} -% We append the current node name (if any) and page number as additional -% arguments for the \{chap,sec,...}entry macros which will eventually -% read this. The node name is used in the pdf outlines as the -% destination to jump to. -% -% We open the .toc file for writing here instead of at @setfilename (or -% any other fixed time) so that @contents can be anywhere in the document. -% But if #1 is `omit', then we don't do anything. This is used for the -% table of contents chapter openings themselves. -% -\newif\iftocfileopened -\def\omitkeyword{omit}% -% -\def\writetocentry#1#2#3{% - \edef\writetoctype{#1}% - \ifx\writetoctype\omitkeyword \else - \iftocfileopened\else - \immediate\openout\tocfile = \jobname.toc - \global\tocfileopenedtrue - \fi - % - \iflinks - \toks0 = {#2}% - \toks2 = \expandafter{\lastnode}% - \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}{#3}% - {\the\toks2}{\noexpand\folio}}}% - \temp - \fi - \fi - % - % Tell \shipout to create a pdf destination on each page, if we're - % writing pdf. These are used in the table of contents. We can't - % just write one on every page because the title pages are numbered - % 1 and 2 (the page numbers aren't printed), and so are the first - % two pages of the document. Thus, we'd have two destinations named - % `1', and two named `2'. - \ifpdf \global\pdfmakepagedesttrue \fi -} - -\newskip\contentsrightmargin \contentsrightmargin=1in -\newcount\savepageno -\newcount\lastnegativepageno \lastnegativepageno = -1 - -% Prepare to read what we've written to \tocfile. -% -\def\startcontents#1{% - % If @setchapternewpage on, and @headings double, the contents should - % start on an odd page, unlike chapters. Thus, we maintain - % \contentsalignmacro in parallel with \pagealignmacro. - % From: Torbjorn Granlund - \contentsalignmacro - \immediate\closeout\tocfile - % - % Don't need to put `Contents' or `Short Contents' in the headline. - % It is abundantly clear what they are. - \def\thischapter{}% - \chapmacro{#1}{Yomitfromtoc}{}% - % - \savepageno = \pageno - \begingroup % Set up to handle contents files properly. - \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 - % We can't do this, because then an actual ^ in a section - % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97. - %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi - \raggedbottom % Worry more about breakpoints than the bottom. - \advance\hsize by -\contentsrightmargin % Don't use the full line length. - % - % Roman numerals for page numbers. - \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi -} - - -% Normal (long) toc. -\def\contents{% - \startcontents{\putwordTOC}% - \openin 1 \jobname.toc - \ifeof 1 \else - \input \jobname.toc - \fi - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \ifeof 1 \else - \pdfmakeoutlines - \fi - \closein 1 - \endgroup - \lastnegativepageno = \pageno - \global\pageno = \savepageno -} - -% And just the chapters. -\def\summarycontents{% - \startcontents{\putwordShortTOC}% - % - \let\numchapentry = \shortchapentry - \let\appentry = \shortchapentry - \let\unnchapentry = \shortunnchapentry - % We want a true roman here for the page numbers. - \secfonts - \let\rm=\shortcontrm \let\bf=\shortcontbf - \let\sl=\shortcontsl \let\tt=\shortconttt - \rm - \hyphenpenalty = 10000 - \advance\baselineskip by 1pt % Open it up a little. - \def\numsecentry##1##2##3##4{} - \let\appsecentry = \numsecentry - \let\unnsecentry = \numsecentry - \let\numsubsecentry = \numsecentry - \let\appsubsecentry = \numsecentry - \let\unnsubsecentry = \numsecentry - \let\numsubsubsecentry = \numsecentry - \let\appsubsubsecentry = \numsecentry - \let\unnsubsubsecentry = \numsecentry - \openin 1 \jobname.toc - \ifeof 1 \else - \input \jobname.toc - \fi - \closein 1 - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \endgroup - \lastnegativepageno = \pageno - \global\pageno = \savepageno -} -\let\shortcontents = \summarycontents - -% Typeset the label for a chapter or appendix for the short contents. -% The arg is, e.g., `A' for an appendix, or `3' for a chapter. -% -\def\shortchaplabel#1{% - % This space should be enough, since a single number is .5em, and the - % widest letter (M) is 1em, at least in the Computer Modern fonts. - % But use \hss just in case. - % (This space doesn't include the extra space that gets added after - % the label; that gets put in by \shortchapentry above.) - % - % We'd like to right-justify chapter numbers, but that looks strange - % with appendix letters. And right-justifying numbers and - % left-justifying letters looks strange when there is less than 10 - % chapters. Have to read the whole toc once to know how many chapters - % there are before deciding ... - \hbox to 1em{#1\hss}% -} - -% These macros generate individual entries in the table of contents. -% The first argument is the chapter or section name. -% The last argument is the page number. -% The arguments in between are the chapter number, section number, ... - -% Chapters, in the main contents. -\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} -% -% Chapters, in the short toc. -% See comments in \dochapentry re vbox and related settings. -\def\shortchapentry#1#2#3#4{% - \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% -} - -% Appendices, in the main contents. -% Need the word Appendix, and a fixed-size box. -% -\def\appendixbox#1{% - % We use M since it's probably the widest letter. - \setbox0 = \hbox{\putwordAppendix{} M}% - \hbox to \wd0{\putwordAppendix{} #1\hss}} -% -\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} - -% Unnumbered chapters. -\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} -\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} - -% Sections. -\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} -\let\appsecentry=\numsecentry -\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} - -% Subsections. -\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} -\let\appsubsecentry=\numsubsecentry -\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} - -% And subsubsections. -\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} -\let\appsubsubsecentry=\numsubsubsecentry -\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} - -% This parameter controls the indentation of the various levels. -% Same as \defaultparindent. -\newdimen\tocindent \tocindent = 15pt - -% Now for the actual typesetting. In all these, #1 is the text and #2 is the -% page number. -% -% If the toc has to be broken over pages, we want it to be at chapters -% if at all possible; hence the \penalty. -\def\dochapentry#1#2{% - \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip - \begingroup - \chapentryfonts - \tocentry{#1}{\dopageno\bgroup#2\egroup}% - \endgroup - \nobreak\vskip .25\baselineskip plus.1\baselineskip -} - -\def\dosecentry#1#2{\begingroup - \secentryfonts \leftskip=\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -\def\dosubsecentry#1#2{\begingroup - \subsecentryfonts \leftskip=2\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -\def\dosubsubsecentry#1#2{\begingroup - \subsubsecentryfonts \leftskip=3\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -% We use the same \entry macro as for the index entries. -\let\tocentry = \entry - -% Space between chapter (or whatever) number and the title. -\def\labelspace{\hskip1em \relax} - -\def\dopageno#1{{\rm #1}} -\def\doshortpageno#1{{\rm #1}} - -\def\chapentryfonts{\secfonts \rm} -\def\secentryfonts{\textfonts} -\def\subsecentryfonts{\textfonts} -\def\subsubsecentryfonts{\textfonts} - - -\message{environments,} -% @foo ... @end foo. - -% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. -% -% Since these characters are used in examples, it should be an even number of -% \tt widths. Each \tt character is 1en, so two makes it 1em. -% -\def\point{$\star$} -\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} -\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} -\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} -\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} - -% The @error{} command. -% Adapted from the TeXbook's \boxit. -% -\newbox\errorbox -% -{\tentt \global\dimen0 = 3em}% Width of the box. -\dimen2 = .55pt % Thickness of rules -% The text. (`r' is open on the right, `e' somewhat less so on the left.) -\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} -% -\setbox\errorbox=\hbox to \dimen0{\hfil - \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. - \advance\hsize by -2\dimen2 % Rules. - \vbox{% - \hrule height\dimen2 - \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. - \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. - \kern3pt\vrule width\dimen2}% Space to right. - \hrule height\dimen2} - \hfil} -% -\def\error{\leavevmode\lower.7ex\copy\errorbox} - -% @tex ... @end tex escapes into raw Tex temporarily. -% One exception: @ is still an escape character, so that @end tex works. -% But \@ or @@ will get a plain tex @ character. - -\envdef\tex{% - \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 - \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 - \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie - \catcode `\%=14 - \catcode `\+=\other - \catcode `\"=\other - \catcode `\|=\other - \catcode `\<=\other - \catcode `\>=\other - \escapechar=`\\ - % - \let\b=\ptexb - \let\bullet=\ptexbullet - \let\c=\ptexc - \let\,=\ptexcomma - \let\.=\ptexdot - \let\dots=\ptexdots - \let\equiv=\ptexequiv - \let\!=\ptexexclam - \let\i=\ptexi - \let\indent=\ptexindent - \let\noindent=\ptexnoindent - \let\{=\ptexlbrace - \let\+=\tabalign - \let\}=\ptexrbrace - \let\/=\ptexslash - \let\*=\ptexstar - \let\t=\ptext - % - \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% - \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% - \def\@{@}% -} -% There is no need to define \Etex. - -% Define @lisp ... @end lisp. -% @lisp environment forms a group so it can rebind things, -% including the definition of @end lisp (which normally is erroneous). - -% Amount to narrow the margins by for @lisp. -\newskip\lispnarrowing \lispnarrowing=0.4in - -% This is the definition that ^^M gets inside @lisp, @example, and other -% such environments. \null is better than a space, since it doesn't -% have any width. -\def\lisppar{\null\endgraf} - -% This space is always present above and below environments. -\newskip\envskipamount \envskipamount = 0pt - -% Make spacing and below environment symmetrical. We use \parskip here -% to help in doing that, since in @example-like environments \parskip -% is reset to zero; thus the \afterenvbreak inserts no space -- but the -% start of the next paragraph will insert \parskip. -% -\def\aboveenvbreak{{% - % =10000 instead of <10000 because of a special case in \itemzzz and - % \sectionheading, q.v. - \ifnum \lastpenalty=10000 \else - \advance\envskipamount by \parskip - \endgraf - \ifdim\lastskip<\envskipamount - \removelastskip - % it's not a good place to break if the last penalty was \nobreak - % or better ... - \ifnum\lastpenalty<10000 \penalty-50 \fi - \vskip\envskipamount - \fi - \fi -}} - -\let\afterenvbreak = \aboveenvbreak - -% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins. -\let\nonarrowing=\relax - -% @cartouche ... @end cartouche: draw rectangle w/rounded corners around -% environment contents. -\font\circle=lcircle10 -\newdimen\circthick -\newdimen\cartouter\newdimen\cartinner -\newskip\normbskip\newskip\normpskip\newskip\normlskip -\circthick=\fontdimen8\circle -% -\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth -\def\ctr{{\hskip 6pt\circle\char'010}} -\def\cbl{{\circle\char'012\hskip -6pt}} -\def\cbr{{\hskip 6pt\circle\char'011}} -\def\carttop{\hbox to \cartouter{\hskip\lskip - \ctl\leaders\hrule height\circthick\hfil\ctr - \hskip\rskip}} -\def\cartbot{\hbox to \cartouter{\hskip\lskip - \cbl\leaders\hrule height\circthick\hfil\cbr - \hskip\rskip}} -% -\newskip\lskip\newskip\rskip - -\envdef\cartouche{% - \ifhmode\par\fi % can't be in the midst of a paragraph. - \startsavinginserts - \lskip=\leftskip \rskip=\rightskip - \leftskip=0pt\rightskip=0pt % we want these *outside*. - \cartinner=\hsize \advance\cartinner by-\lskip - \advance\cartinner by-\rskip - \cartouter=\hsize - \advance\cartouter by 18.4pt % allow for 3pt kerns on either - % side, and for 6pt waste from - % each corner char, and rule thickness - \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip - % Flag to tell @lisp, etc., not to narrow margin. - \let\nonarrowing=\comment - \vbox\bgroup - \baselineskip=0pt\parskip=0pt\lineskip=0pt - \carttop - \hbox\bgroup - \hskip\lskip - \vrule\kern3pt - \vbox\bgroup - \kern3pt - \hsize=\cartinner - \baselineskip=\normbskip - \lineskip=\normlskip - \parskip=\normpskip - \vskip -\parskip - \comment % For explanation, see the end of \def\group. -} -\def\Ecartouche{% - \ifhmode\par\fi - \kern3pt - \egroup - \kern3pt\vrule - \hskip\rskip - \egroup - \cartbot - \egroup - \checkinserts -} - - -% This macro is called at the beginning of all the @example variants, -% inside a group. -\def\nonfillstart{% - \aboveenvbreak - \hfuzz = 12pt % Don't be fussy - \sepspaces % Make spaces be word-separators rather than space tokens. - \let\par = \lisppar % don't ignore blank lines - \obeylines % each line of input is a line of output - \parskip = 0pt - \parindent = 0pt - \emergencystretch = 0pt % don't try to avoid overfull boxes - % @cartouche defines \nonarrowing to inhibit narrowing - % at next level down. - \ifx\nonarrowing\relax - \advance \leftskip by \lispnarrowing - \exdentamount=\lispnarrowing - \fi - \let\exdent=\nofillexdent -} - -% If you want all examples etc. small: @set dispenvsize small. -% If you want even small examples the full size: @set dispenvsize nosmall. -% This affects the following displayed environments: -% @example, @display, @format, @lisp -% -\def\smallword{small} -\def\nosmallword{nosmall} -\let\SETdispenvsize\relax -\def\setnormaldispenv{% - \ifx\SETdispenvsize\smallword - \smallexamplefonts \rm - \fi -} -\def\setsmalldispenv{% - \ifx\SETdispenvsize\nosmallword - \else - \smallexamplefonts \rm - \fi -} - -% We often define two environments, @foo and @smallfoo. -% Let's do it by one command: -\def\makedispenv #1#2{ - \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} - \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} - \expandafter\let\csname E#1\endcsname \afterenvbreak - \expandafter\let\csname Esmall#1\endcsname \afterenvbreak -} - -% Define two synonyms: -\def\maketwodispenvs #1#2#3{ - \makedispenv{#1}{#3} - \makedispenv{#2}{#3} -} - -% @lisp: indented, narrowed, typewriter font; @example: same as @lisp. -% -% @smallexample and @smalllisp: use smaller fonts. -% Originally contributed by Pavel@xerox. -% -\maketwodispenvs {lisp}{example}{% - \nonfillstart - \tt - \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. - \gobble % eat return -} - -% @display/@smalldisplay: same as @lisp except keep current font. -% -\makedispenv {display}{% - \nonfillstart - \gobble -} - -% @format/@smallformat: same as @display except don't narrow margins. -% -\makedispenv{format}{% - \let\nonarrowing = t% - \nonfillstart - \gobble -} - -% @flushleft: same as @format, but doesn't obey \SETdispenvsize. -\envdef\flushleft{% - \let\nonarrowing = t% - \nonfillstart - \gobble -} -\let\Eflushleft = \afterenvbreak - -% @flushright. -% -\envdef\flushright{% - \let\nonarrowing = t% - \nonfillstart - \advance\leftskip by 0pt plus 1fill - \gobble -} -\let\Eflushright = \afterenvbreak - - -% @quotation does normal linebreaking (hence we can't use \nonfillstart) -% and narrows the margins. We keep \parskip nonzero in general, since -% we're doing normal filling. So, when using \aboveenvbreak and -% \afterenvbreak, temporarily make \parskip 0. -% -\envdef\quotation{% - {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip - \parindent=0pt - % - % @cartouche defines \nonarrowing to inhibit narrowing at next level down. - \ifx\nonarrowing\relax - \advance\leftskip by \lispnarrowing - \advance\rightskip by \lispnarrowing - \exdentamount = \lispnarrowing - \let\nonarrowing = \relax - \fi - \parsearg\quotationlabel -} - -% We have retained a nonzero parskip for the environment, since we're -% doing normal filling. -% -\def\Equotation{% - \par - \ifx\quotationauthor\undefined\else - % indent a bit. - \leftline{\kern 2\leftskip \sl ---\quotationauthor}% - \fi - {\parskip=0pt \afterenvbreak}% -} - -% If we're given an argument, typeset it in bold with a colon after. -\def\quotationlabel#1{% - \def\temp{#1}% - \ifx\temp\empty \else - {\bf #1: }% - \fi -} - - -% LaTeX-like @verbatim...@end verbatim and @verb{...} -% If we want to allow any as delimiter, -% we need the curly braces so that makeinfo sees the @verb command, eg: -% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org -% -% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. -% -% [Knuth] p.344; only we need to do the other characters Texinfo sets -% active too. Otherwise, they get lost as the first character on a -% verbatim line. -\def\dospecials{% - \do\ \do\\\do\{\do\}\do\$\do\&% - \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% - \do\<\do\>\do\|\do\@\do+\do\"% -} -% -% [Knuth] p. 380 -\def\uncatcodespecials{% - \def\do##1{\catcode`##1=\other}\dospecials} -% -% [Knuth] pp. 380,381,391 -% Disable Spanish ligatures ?` and !` of \tt font -\begingroup - \catcode`\`=\active\gdef`{\relax\lq} -\endgroup -% -% Setup for the @verb command. -% -% Eight spaces for a tab -\begingroup - \catcode`\^^I=\active - \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} -\endgroup -% -\def\setupverb{% - \tt % easiest (and conventionally used) font for verbatim - \def\par{\leavevmode\endgraf}% - \catcode`\`=\active - \tabeightspaces - % Respect line breaks, - % print special symbols as themselves, and - % make each space count - % must do in this order: - \obeylines \uncatcodespecials \sepspaces -} - -% Setup for the @verbatim environment -% -% Real tab expansion -\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount -% -\def\starttabbox{\setbox0=\hbox\bgroup} -\begingroup - \catcode`\^^I=\active - \gdef\tabexpand{% - \catcode`\^^I=\active - \def^^I{\leavevmode\egroup - \dimen0=\wd0 % the width so far, or since the previous tab - \divide\dimen0 by\tabw - \multiply\dimen0 by\tabw % compute previous multiple of \tabw - \advance\dimen0 by\tabw % advance to next multiple of \tabw - \wd0=\dimen0 \box0 \starttabbox - }% - } -\endgroup -\def\setupverbatim{% - \nonfillstart - \advance\leftskip by -\defbodyindent - % Easiest (and conventionally used) font for verbatim - \tt - \def\par{\leavevmode\egroup\box0\endgraf}% - \catcode`\`=\active - \tabexpand - % Respect line breaks, - % print special symbols as themselves, and - % make each space count - % must do in this order: - \obeylines \uncatcodespecials \sepspaces - \everypar{\starttabbox}% -} - -% Do the @verb magic: verbatim text is quoted by unique -% delimiter characters. Before first delimiter expect a -% right brace, after last delimiter expect closing brace: -% -% \def\doverb'{'#1'}'{#1} -% -% [Knuth] p. 382; only eat outer {} -\begingroup - \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other - \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] -\endgroup -% -\def\verb{\begingroup\setupverb\doverb} -% -% -% Do the @verbatim magic: define the macro \doverbatim so that -% the (first) argument ends when '@end verbatim' is reached, ie: -% -% \def\doverbatim#1@end verbatim{#1} -% -% For Texinfo it's a lot easier than for LaTeX, -% because texinfo's \verbatim doesn't stop at '\end{verbatim}': -% we need not redefine '\', '{' and '}'. -% -% Inspired by LaTeX's verbatim command set [latex.ltx] -% -\begingroup - \catcode`\ =\active - \obeylines % - % ignore everything up to the first ^^M, that's the newline at the end - % of the @verbatim input line itself. Otherwise we get an extra blank - % line in the output. - \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% - % We really want {...\end verbatim} in the body of the macro, but - % without the active space; thus we have to use \xdef and \gobble. -\endgroup -% -\envdef\verbatim{% - \setupverbatim\doverbatim -} -\let\Everbatim = \afterenvbreak - - -% @verbatiminclude FILE - insert text of file in verbatim environment. -% -\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} -% -\def\doverbatiminclude#1{% - {% - \makevalueexpandable - \setupverbatim - \input #1 - \afterenvbreak - }% -} - -% @copying ... @end copying. -% Save the text away for @insertcopying later. -% -% We save the uninterpreted tokens, rather than creating a box. -% Saving the text in a box would be much easier, but then all the -% typesetting commands (@smallbook, font changes, etc.) have to be done -% beforehand -- and a) we want @copying to be done first in the source -% file; b) letting users define the frontmatter in as flexible order as -% possible is very desirable. -% -\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} -\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} -% -\def\insertcopying{% - \begingroup - \parindent = 0pt % paragraph indentation looks wrong on title page - \scanexp\copyingtext - \endgroup -} - -\message{defuns,} -% @defun etc. - -\newskip\defbodyindent \defbodyindent=.4in -\newskip\defargsindent \defargsindent=50pt -\newskip\deflastargmargin \deflastargmargin=18pt - -% Start the processing of @deffn: -\def\startdefun{% - \ifnum\lastpenalty<10000 - \medbreak - \else - % If there are two @def commands in a row, we'll have a \nobreak, - % which is there to keep the function description together with its - % header. But if there's nothing but headers, we need to allow a - % break somewhere. Check specifically for penalty 10002, inserted - % by \defargscommonending, instead of 10000, since the sectioning - % commands also insert a nobreak penalty, and we don't want to allow - % a break between a section heading and a defun. - % - \ifnum\lastpenalty=10002 \penalty2000 \fi - % - % Similarly, after a section heading, do not allow a break. - % But do insert the glue. - \medskip % preceded by discardable penalty, so not a breakpoint - \fi - % - \parindent=0in - \advance\leftskip by \defbodyindent - \exdentamount=\defbodyindent -} - -\def\dodefunx#1{% - % First, check whether we are in the right environment: - \checkenv#1% - % - % As above, allow line break if we have multiple x headers in a row. - % It's not a great place, though. - \ifnum\lastpenalty=10002 \penalty3000 \fi - % - % And now, it's time to reuse the body of the original defun: - \expandafter\gobbledefun#1% -} -\def\gobbledefun#1\startdefun{} - -% \printdefunline \deffnheader{text} -% -\def\printdefunline#1#2{% - \begingroup - % call \deffnheader: - #1#2 \endheader - % common ending: - \interlinepenalty = 10000 - \advance\rightskip by 0pt plus 1fil - \endgraf - \nobreak\vskip -\parskip - \penalty 10002 % signal to \startdefun and \dodefunx - % Some of the @defun-type tags do not enable magic parentheses, - % rendering the following check redundant. But we don't optimize. - \checkparencounts - \endgroup -} - -\def\Edefun{\endgraf\medbreak} - -% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; -% the only thing remainnig is to define \deffnheader. -% -\def\makedefun#1{% - \expandafter\let\csname E#1\endcsname = \Edefun - \edef\temp{\noexpand\domakedefun - \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% - \temp -} - -% \domakedefun \deffn \deffnx \deffnheader -% -% Define \deffn and \deffnx, without parameters. -% \deffnheader has to be defined explicitly. -% -\def\domakedefun#1#2#3{% - \envdef#1{% - \startdefun - \parseargusing\activeparens{\printdefunline#3}% - }% - \def#2{\dodefunx#1}% - \def#3% -} - -%%% Untyped functions: - -% @deffn category name args -\makedefun{deffn}{\deffngeneral{}} - -% @deffn category class name args -\makedefun{defop}#1 {\defopon{#1\ \putwordon}} - -% \defopon {category on}class name args -\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } - -% \deffngeneral {subind}category name args -% -\def\deffngeneral#1#2 #3 #4\endheader{% - % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. - \dosubind{fn}{\code{#3}}{#1}% - \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% -} - -%%% Typed functions: - -% @deftypefn category type name args -\makedefun{deftypefn}{\deftypefngeneral{}} - -% @deftypeop category class type name args -\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} - -% \deftypeopon {category on}class type name args -\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } - -% \deftypefngeneral {subind}category type name args -% -\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% - \dosubind{fn}{\code{#4}}{#1}% - \defname{#2}{#3}{#4}\defunargs{#5\unskip}% -} - -%%% Typed variables: - -% @deftypevr category type var args -\makedefun{deftypevr}{\deftypecvgeneral{}} - -% @deftypecv category class type var args -\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} - -% \deftypecvof {category of}class type var args -\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } - -% \deftypecvgeneral {subind}category type var args -% -\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% - \dosubind{vr}{\code{#4}}{#1}% - \defname{#2}{#3}{#4}\defunargs{#5\unskip}% -} - -%%% Untyped variables: - -% @defvr category var args -\makedefun{defvr}#1 {\deftypevrheader{#1} {} } - -% @defcv category class var args -\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} - -% \defcvof {category of}class var args -\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } - -%%% Type: -% @deftp category name args -\makedefun{deftp}#1 #2 #3\endheader{% - \doind{tp}{\code{#2}}% - \defname{#1}{}{#2}\defunargs{#3\unskip}% -} - -% Remaining @defun-like shortcuts: -\makedefun{defun}{\deffnheader{\putwordDeffunc} } -\makedefun{defmac}{\deffnheader{\putwordDefmac} } -\makedefun{defspec}{\deffnheader{\putwordDefspec} } -\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } -\makedefun{defvar}{\defvrheader{\putwordDefvar} } -\makedefun{defopt}{\defvrheader{\putwordDefopt} } -\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } -\makedefun{defmethod}{\defopon\putwordMethodon} -\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} -\makedefun{defivar}{\defcvof\putwordInstanceVariableof} -\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} - -% \defname, which formats the name of the @def (not the args). -% #1 is the category, such as "Function". -% #2 is the return type, if any. -% #3 is the function name. -% -% We are followed by (but not passed) the arguments, if any. -% -\def\defname#1#2#3{% - % Get the values of \leftskip and \rightskip as they were outside the @def... - \advance\leftskip by -\defbodyindent - % - % How we'll format the type name. Putting it in brackets helps - % distinguish it from the body text that may end up on the next line - % just below it. - \def\temp{#1}% - \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} - % - % Figure out line sizes for the paragraph shape. - % The first line needs space for \box0; but if \rightskip is nonzero, - % we need only space for the part of \box0 which exceeds it: - \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip - % The continuations: - \dimen2=\hsize \advance\dimen2 by -\defargsindent - % (plain.tex says that \dimen1 should be used only as global.) - \parshape 2 0in \dimen0 \defargsindent \dimen2 - % - % Put the type name to the right margin. - \noindent - \hbox to 0pt{% - \hfil\box0 \kern-\hsize - % \hsize has to be shortened this way: - \kern\leftskip - % Intentionally do not respect \rightskip, since we need the space. - }% - % - % Allow all lines to be underfull without complaint: - \tolerance=10000 \hbadness=10000 - \exdentamount=\defbodyindent - {% - % defun fonts. We use typewriter by default (used to be bold) because: - % . we're printing identifiers, they should be in tt in principle. - % . in languages with many accents, such as Czech or French, it's - % common to leave accents off identifiers. The result looks ok in - % tt, but exceedingly strange in rm. - % . we don't want -- and --- to be treated as ligatures. - % . this still does not fix the ?` and !` ligatures, but so far no - % one has made identifiers using them :). - \df \tt - \def\temp{#2}% return value type - \ifx\temp\empty\else \tclose{\temp} \fi - #3% output function name - }% - {\rm\enskip}% hskip 0.5 em of \tenrm - % - \boldbrax - % arguments will be output next, if any. -} - -% Print arguments in slanted roman (not ttsl), inconsistently with using -% tt for the name. This is because literal text is sometimes needed in -% the argument list (groff manual), and ttsl and tt are not very -% distinguishable. Prevent hyphenation at `-' chars. -% -\def\defunargs#1{% - % use sl by default (not ttsl), - % tt for the names. - \df \sl \hyphenchar\font=0 - % - % On the other hand, if an argument has two dashes (for instance), we - % want a way to get ttsl. Let's try @var for that. - \let\var=\ttslanted - #1% - \sl\hyphenchar\font=45 -} - -% We want ()&[] to print specially on the defun line. -% -\def\activeparens{% - \catcode`\(=\active \catcode`\)=\active - \catcode`\[=\active \catcode`\]=\active - \catcode`\&=\active -} - -% Make control sequences which act like normal parenthesis chars. -\let\lparen = ( \let\rparen = ) - -% Be sure that we always have a definition for `(', etc. For example, -% if the fn name has parens in it, \boldbrax will not be in effect yet, -% so TeX would otherwise complain about undefined control sequence. -{ - \activeparens - \global\let(=\lparen \global\let)=\rparen - \global\let[=\lbrack \global\let]=\rbrack - \global\let& = \& - - \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} - \gdef\magicamp{\let&=\amprm} -} - -\newcount\parencount - -% If we encounter &foo, then turn on ()-hacking afterwards -\newif\ifampseen -\def\amprm#1 {\ampseentrue{\bf\ }} - -\def\parenfont{% - \ifampseen - % At the first level, print parens in roman, - % otherwise use the default font. - \ifnum \parencount=1 \rm \fi - \else - % The \sf parens (in \boldbrax) actually are a little bolder than - % the contained text. This is especially needed for [ and ] . - \sf - \fi -} -\def\infirstlevel#1{% - \ifampseen - \ifnum\parencount=1 - #1% - \fi - \fi -} -\def\bfafterword#1 {#1 \bf} - -\def\opnr{% - \global\advance\parencount by 1 - {\parenfont(}% - \infirstlevel \bfafterword -} -\def\clnr{% - {\parenfont)}% - \infirstlevel \sl - \global\advance\parencount by -1 -} - -\newcount\brackcount -\def\lbrb{% - \global\advance\brackcount by 1 - {\bf[}% -} -\def\rbrb{% - {\bf]}% - \global\advance\brackcount by -1 -} - -\def\checkparencounts{% - \ifnum\parencount=0 \else \badparencount \fi - \ifnum\brackcount=0 \else \badbrackcount \fi -} -\def\badparencount{% - \errmessage{Unbalanced parentheses in @def}% - \global\parencount=0 -} -\def\badbrackcount{% - \errmessage{Unbalanced square braces in @def}% - \global\brackcount=0 -} - - -\message{macros,} -% @macro. - -% To do this right we need a feature of e-TeX, \scantokens, -% which we arrange to emulate with a temporary file in ordinary TeX. -\ifx\eTeXversion\undefined - \newwrite\macscribble - \def\scantokens#1{% - \toks0={#1}% - \immediate\openout\macscribble=\jobname.tmp - \immediate\write\macscribble{\the\toks0}% - \immediate\closeout\macscribble - \input \jobname.tmp - } -\fi - -\def\scanmacro#1{% - \begingroup - \newlinechar`\^^M - \let\xeatspaces\eatspaces - % Undo catcode changes of \startcontents and \doprintindex - % When called from @insertcopying or (short)caption, we need active - % backslash to get it printed correctly. Previously, we had - % \catcode`\\=\other instead. We'll see whether a problem appears - % with macro expansion. --kasal, 19aug04 - \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ - % ... and \example - \spaceisspace - % - % Append \endinput to make sure that TeX does not see the ending newline. - % - % I've verified that it is necessary both for e-TeX and for ordinary TeX - % --kasal, 29nov03 - \scantokens{#1\endinput}% - \endgroup -} - -\def\scanexp#1{% - \edef\temp{\noexpand\scanmacro{#1}}% - \temp -} - -\newcount\paramno % Count of parameters -\newtoks\macname % Macro name -\newif\ifrecursive % Is it recursive? -\def\macrolist{} % List of all defined macros in the form - % \do\macro1\do\macro2... - -% Utility routines. -% This does \let #1 = #2, with \csnames; that is, -% \let \csname#1\endcsname = \csname#2\endcsname -% (except of course we have to play expansion games). -% -\def\cslet#1#2{% - \expandafter\let - \csname#1\expandafter\endcsname - \csname#2\endcsname -} - -% Trim leading and trailing spaces off a string. -% Concepts from aro-bend problem 15 (see CTAN). -{\catcode`\@=11 -\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} -\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} -\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} -\def\unbrace#1{#1} -\unbrace{\gdef\trim@@@ #1 } #2@{#1} -} - -% Trim a single trailing ^^M off a string. -{\catcode`\^^M=\other \catcode`\Q=3% -\gdef\eatcr #1{\eatcra #1Q^^MQ}% -\gdef\eatcra#1^^MQ{\eatcrb#1Q}% -\gdef\eatcrb#1Q#2Q{#1}% -} - -% Macro bodies are absorbed as an argument in a context where -% all characters are catcode 10, 11 or 12, except \ which is active -% (as in normal texinfo). It is necessary to change the definition of \. - -% It's necessary to have hard CRs when the macro is executed. This is -% done by making ^^M (\endlinechar) catcode 12 when reading the macro -% body, and then making it the \newlinechar in \scanmacro. - -\def\scanctxt{% - \catcode`\"=\other - \catcode`\+=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\@=\other - \catcode`\^=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\~=\other -} - -\def\scanargctxt{% - \scanctxt - \catcode`\\=\other - \catcode`\^^M=\other -} - -\def\macrobodyctxt{% - \scanctxt - \catcode`\{=\other - \catcode`\}=\other - \catcode`\^^M=\other - \usembodybackslash -} - -\def\macroargctxt{% - \scanctxt - \catcode`\\=\other -} - -% \mbodybackslash is the definition of \ in @macro bodies. -% It maps \foo\ => \csname macarg.foo\endcsname => #N -% where N is the macro parameter number. -% We define \csname macarg.\endcsname to be \realbackslash, so -% \\ in macro replacement text gets you a backslash. - -{\catcode`@=0 @catcode`@\=@active - @gdef@usembodybackslash{@let\=@mbodybackslash} - @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} -} -\expandafter\def\csname macarg.\endcsname{\realbackslash} - -\def\macro{\recursivefalse\parsearg\macroxxx} -\def\rmacro{\recursivetrue\parsearg\macroxxx} - -\def\macroxxx#1{% - \getargs{#1}% now \macname is the macname and \argl the arglist - \ifx\argl\empty % no arguments - \paramno=0% - \else - \expandafter\parsemargdef \argl;% - \fi - \if1\csname ismacro.\the\macname\endcsname - \message{Warning: redefining \the\macname}% - \else - \expandafter\ifx\csname \the\macname\endcsname \relax - \else \errmessage{Macro name \the\macname\space already defined}\fi - \global\cslet{macsave.\the\macname}{\the\macname}% - \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% - % Add the macroname to \macrolist - \toks0 = \expandafter{\macrolist\do}% - \xdef\macrolist{\the\toks0 - \expandafter\noexpand\csname\the\macname\endcsname}% - \fi - \begingroup \macrobodyctxt - \ifrecursive \expandafter\parsermacbody - \else \expandafter\parsemacbody - \fi} - -\parseargdef\unmacro{% - \if1\csname ismacro.#1\endcsname - \global\cslet{#1}{macsave.#1}% - \global\expandafter\let \csname ismacro.#1\endcsname=0% - % Remove the macro name from \macrolist: - \begingroup - \expandafter\let\csname#1\endcsname \relax - \let\do\unmacrodo - \xdef\macrolist{\macrolist}% - \endgroup - \else - \errmessage{Macro #1 not defined}% - \fi -} - -% Called by \do from \dounmacro on each macro. The idea is to omit any -% macro definitions that have been changed to \relax. -% -\def\unmacrodo#1{% - \ifx#1\relax - % remove this - \else - \noexpand\do \noexpand #1% - \fi -} - -% This makes use of the obscure feature that if the last token of a -% is #, then the preceding argument is delimited by -% an opening brace, and that opening brace is not consumed. -\def\getargs#1{\getargsxxx#1{}} -\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} -\def\getmacname #1 #2\relax{\macname={#1}} -\def\getmacargs#1{\def\argl{#1}} - -% Parse the optional {params} list. Set up \paramno and \paramlist -% so \defmacro knows what to do. Define \macarg.blah for each blah -% in the params list, to be ##N where N is the position in that list. -% That gets used by \mbodybackslash (above). - -% We need to get `macro parameter char #' into several definitions. -% The technique used is stolen from LaTeX: let \hash be something -% unexpandable, insert that wherever you need a #, and then redefine -% it to # just before using the token list produced. -% -% The same technique is used to protect \eatspaces till just before -% the macro is used. - -\def\parsemargdef#1;{\paramno=0\def\paramlist{}% - \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} -\def\parsemargdefxxx#1,{% - \if#1;\let\next=\relax - \else \let\next=\parsemargdefxxx - \advance\paramno by 1% - \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname - {\xeatspaces{\hash\the\paramno}}% - \edef\paramlist{\paramlist\hash\the\paramno,}% - \fi\next} - -% These two commands read recursive and nonrecursive macro bodies. -% (They're different since rec and nonrec macros end differently.) - -\long\def\parsemacbody#1@end macro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% -\long\def\parsermacbody#1@end rmacro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% - -% This defines the macro itself. There are six cases: recursive and -% nonrecursive macros of zero, one, and many arguments. -% Much magic with \expandafter here. -% \xdef is used so that macro definitions will survive the file -% they're defined in; @include reads the file inside a group. -\def\defmacro{% - \let\hash=##% convert placeholders to macro parameter chars - \ifrecursive - \ifcase\paramno - % 0 - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\scanmacro{\temp}}% - \or % 1 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\braceorline - \expandafter\noexpand\csname\the\macname xxx\endcsname}% - \expandafter\xdef\csname\the\macname xxx\endcsname##1{% - \egroup\noexpand\scanmacro{\temp}}% - \else % many - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\csname\the\macname xx\endcsname}% - \expandafter\xdef\csname\the\macname xx\endcsname##1{% - \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname xxx\endcsname - \paramlist{\egroup\noexpand\scanmacro{\temp}}% - \fi - \else - \ifcase\paramno - % 0 - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \or % 1 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\braceorline - \expandafter\noexpand\csname\the\macname xxx\endcsname}% - \expandafter\xdef\csname\the\macname xxx\endcsname##1{% - \egroup - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \else % many - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \expandafter\noexpand\csname\the\macname xx\endcsname}% - \expandafter\xdef\csname\the\macname xx\endcsname##1{% - \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname xxx\endcsname - \paramlist{% - \egroup - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \fi - \fi} - -\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} - -% \braceorline decides whether the next nonwhitespace character is a -% {. If so it reads up to the closing }, if not, it reads the whole -% line. Whatever was read is then fed to the next control sequence -% as an argument (by \parsebrace or \parsearg) -\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} -\def\braceorlinexxx{% - \ifx\nchar\bgroup\else - \expandafter\parsearg - \fi \next} - -% We want to disable all macros during \shipout so that they are not -% expanded by \write. -\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}% - \edef\next{\macrolist}\expandafter\endgroup\next} - -% For \indexnofonts, we need to get rid of all macros, leaving only the -% arguments (if present). Of course this is not nearly correct, but it -% is the best we can do for now. makeinfo does not expand macros in the -% argument to @deffn, which ends up writing an index entry, and texindex -% isn't prepared for an index sort entry that starts with \. -% -% Since macro invocations are followed by braces, we can just redefine them -% to take a single TeX argument. The case of a macro invocation that -% goes to end-of-line is not handled. -% -\def\emptyusermacros{\begingroup - \def\do##1{\let\noexpand##1=\noexpand\asis}% - \edef\next{\macrolist}\expandafter\endgroup\next} - - -% @alias. -% We need some trickery to remove the optional spaces around the equal -% sign. Just make them active and then expand them all to nothing. -\def\alias{\parseargusing\obeyspaces\aliasxxx} -\def\aliasxxx #1{\aliasyyy#1\relax} -\def\aliasyyy #1=#2\relax{% - {% - \expandafter\let\obeyedspace=\empty - \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% - }% - \next -} - - -\message{cross references,} - -\newwrite\auxfile - -\newif\ifhavexrefs % True if xref values are known. -\newif\ifwarnedxrefs % True if we warned once that they aren't known. - -% @inforef is relatively simple. -\def\inforef #1{\inforefzzz #1,,,,**} -\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, - node \samp{\ignorespaces#1{}}} - -% @node's only job in TeX is to define \lastnode, which is used in -% cross-references. The @node line might or might not have commas, and -% might or might not have spaces before the first comma, like: -% @node foo , bar , ... -% We don't want such trailing spaces in the node name. -% -\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} -% -% also remove a trailing comma, in case of something like this: -% @node Help-Cross, , , Cross-refs -\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} -\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} - -\let\nwnode=\node -\let\lastnode=\empty - -% Write a cross-reference definition for the current node. #1 is the -% type (Ynumbered, Yappendix, Ynothing). -% -\def\donoderef#1{% - \ifx\lastnode\empty\else - \setref{\lastnode}{#1}% - \global\let\lastnode=\empty - \fi -} - -% @anchor{NAME} -- define xref target at arbitrary point. -% -\newcount\savesfregister -% -\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} -\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} -\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} - -% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an -% anchor), which consists of three parts: -% 1) NAME-title - the current sectioning name taken from \thissection, -% or the anchor name. -% 2) NAME-snt - section number and type, passed as the SNT arg, or -% empty for anchors. -% 3) NAME-pg - the page number. -% -% This is called from \donoderef, \anchor, and \dofloat. In the case of -% floats, there is an additional part, which is not written here: -% 4) NAME-lof - the text as it should appear in a @listoffloats. -% -\def\setref#1#2{% - \pdfmkdest{#1}% - \iflinks - {% - \atdummies % preserve commands, but don't expand them - \turnoffactive - \otherbackslash - \edef\writexrdef##1##2{% - \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef - ##1}{##2}}% these are parameters of \writexrdef - }% - \toks0 = \expandafter{\thissection}% - \immediate \writexrdef{title}{\the\toks0 }% - \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. - \writexrdef{pg}{\folio}% will be written later, during \shipout - }% - \fi -} - -% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is -% the node name, #2 the name of the Info cross-reference, #3 the printed -% node name, #4 the name of the Info file, #5 the name of the printed -% manual. All but the node name can be omitted. -% -\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} -\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} -\def\ref#1{\xrefX[#1,,,,,,,]} -\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup - \unsepspaces - \def\printedmanual{\ignorespaces #5}% - \def\printedrefname{\ignorespaces #3}% - \setbox1=\hbox{\printedmanual\unskip}% - \setbox0=\hbox{\printedrefname\unskip}% - \ifdim \wd0 = 0pt - % No printed node name was explicitly given. - \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax - % Use the node name inside the square brackets. - \def\printedrefname{\ignorespaces #1}% - \else - % Use the actual chapter/section title appear inside - % the square brackets. Use the real section title if we have it. - \ifdim \wd1 > 0pt - % It is in another manual, so we don't have it. - \def\printedrefname{\ignorespaces #1}% - \else - \ifhavexrefs - % We know the real title if we have the xref values. - \def\printedrefname{\refx{#1-title}{}}% - \else - % Otherwise just copy the Info node name. - \def\printedrefname{\ignorespaces #1}% - \fi% - \fi - \fi - \fi - % - % Make link in pdf output. - \ifpdf - \leavevmode - \getfilename{#4}% - {\turnoffactive \otherbackslash - \ifnum\filenamelength>0 - \startlink attr{/Border [0 0 0]}% - goto file{\the\filename.pdf} name{#1}% - \else - \startlink attr{/Border [0 0 0]}% - goto name{\pdfmkpgn{#1}}% - \fi - }% - \linkcolor - \fi - % - % Float references are printed completely differently: "Figure 1.2" - % instead of "[somenode], p.3". We distinguish them by the - % LABEL-title being set to a magic string. - {% - % Have to otherify everything special to allow the \csname to - % include an _ in the xref name, etc. - \indexnofonts - \turnoffactive - \otherbackslash - \expandafter\global\expandafter\let\expandafter\Xthisreftitle - \csname XR#1-title\endcsname - }% - \iffloat\Xthisreftitle - % If the user specified the print name (third arg) to the ref, - % print it instead of our usual "Figure 1.2". - \ifdim\wd0 = 0pt - \refx{#1-snt}% - \else - \printedrefname - \fi - % - % if the user also gave the printed manual name (fifth arg), append - % "in MANUALNAME". - \ifdim \wd1 > 0pt - \space \putwordin{} \cite{\printedmanual}% - \fi - \else - % node/anchor (non-float) references. - % - % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not - % insert empty discretionaries after hyphens, which means that it will - % not find a line break at a hyphen in a node names. Since some manuals - % are best written with fairly long node names, containing hyphens, this - % is a loss. Therefore, we give the text of the node name again, so it - % is as if TeX is seeing it for the first time. - \ifdim \wd1 > 0pt - \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% - \else - % _ (for example) has to be the character _ for the purposes of the - % control sequence corresponding to the node, but it has to expand - % into the usual \leavevmode...\vrule stuff for purposes of - % printing. So we \turnoffactive for the \refx-snt, back on for the - % printing, back off for the \refx-pg. - {\turnoffactive \otherbackslash - % Only output a following space if the -snt ref is nonempty; for - % @unnumbered and @anchor, it won't be. - \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% - \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi - }% - % output the `[mynode]' via a macro so it can be overridden. - \xrefprintnodename\printedrefname - % - % But we always want a comma and a space: - ,\space - % - % output the `page 3'. - \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}% - \fi - \fi - \endlink -\endgroup} - -% This macro is called from \xrefX for the `[nodename]' part of xref -% output. It's a separate macro only so it can be changed more easily, -% since square brackets don't work well in some documents. Particularly -% one that Bob is working on :). -% -\def\xrefprintnodename#1{[#1]} - -% Things referred to by \setref. -% -\def\Ynothing{} -\def\Yomitfromtoc{} -\def\Ynumbered{% - \ifnum\secno=0 - \putwordChapter@tie \the\chapno - \else \ifnum\subsecno=0 - \putwordSection@tie \the\chapno.\the\secno - \else \ifnum\subsubsecno=0 - \putwordSection@tie \the\chapno.\the\secno.\the\subsecno - \else - \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno - \fi\fi\fi -} -\def\Yappendix{% - \ifnum\secno=0 - \putwordAppendix@tie @char\the\appendixno{}% - \else \ifnum\subsecno=0 - \putwordSection@tie @char\the\appendixno.\the\secno - \else \ifnum\subsubsecno=0 - \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno - \else - \putwordSection@tie - @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno - \fi\fi\fi -} - -% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. -% If its value is nonempty, SUFFIX is output afterward. -% -\def\refx#1#2{% - {% - \indexnofonts - \otherbackslash - \expandafter\global\expandafter\let\expandafter\thisrefX - \csname XR#1\endcsname - }% - \ifx\thisrefX\relax - % If not defined, say something at least. - \angleleft un\-de\-fined\angleright - \iflinks - \ifhavexrefs - \message{\linenumber Undefined cross reference `#1'.}% - \else - \ifwarnedxrefs\else - \global\warnedxrefstrue - \message{Cross reference values unknown; you must run TeX again.}% - \fi - \fi - \fi - \else - % It's defined, so just use it. - \thisrefX - \fi - #2% Output the suffix in any case. -} - -% This is the macro invoked by entries in the aux file. Usually it's -% just a \def (we prepend XR to the control sequence name to avoid -% collisions). But if this is a float type, we have more work to do. -% -\def\xrdef#1#2{% - \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value. - % - % Was that xref control sequence that we just defined for a float? - \expandafter\iffloat\csname XR#1\endcsname - % it was a float, and we have the (safe) float type in \iffloattype. - \expandafter\let\expandafter\floatlist - \csname floatlist\iffloattype\endcsname - % - % Is this the first time we've seen this float type? - \expandafter\ifx\floatlist\relax - \toks0 = {\do}% yes, so just \do - \else - % had it before, so preserve previous elements in list. - \toks0 = \expandafter{\floatlist\do}% - \fi - % - % Remember this xref in the control sequence \floatlistFLOATTYPE, - % for later use in \listoffloats. - \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}% - \fi -} - -% Read the last existing aux file, if any. No error if none exists. -% -\def\tryauxfile{% - \openin 1 \jobname.aux - \ifeof 1 \else - \readauxfile - \global\havexrefstrue - \fi - \closein 1 -} - -\def\readauxfile{\begingroup - \catcode`\^^@=\other - \catcode`\^^A=\other - \catcode`\^^B=\other - \catcode`\^^C=\other - \catcode`\^^D=\other - \catcode`\^^E=\other - \catcode`\^^F=\other - \catcode`\^^G=\other - \catcode`\^^H=\other - \catcode`\^^K=\other - \catcode`\^^L=\other - \catcode`\^^N=\other - \catcode`\^^P=\other - \catcode`\^^Q=\other - \catcode`\^^R=\other - \catcode`\^^S=\other - \catcode`\^^T=\other - \catcode`\^^U=\other - \catcode`\^^V=\other - \catcode`\^^W=\other - \catcode`\^^X=\other - \catcode`\^^Z=\other - \catcode`\^^[=\other - \catcode`\^^\=\other - \catcode`\^^]=\other - \catcode`\^^^=\other - \catcode`\^^_=\other - % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. - % in xref tags, i.e., node names. But since ^^e4 notation isn't - % supported in the main text, it doesn't seem desirable. Furthermore, - % that is not enough: for node names that actually contain a ^ - % character, we would end up writing a line like this: 'xrdef {'hat - % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first - % argument, and \hat is not an expandable control sequence. It could - % all be worked out, but why? Either we support ^^ or we don't. - % - % The other change necessary for this was to define \auxhat: - % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter - % and then to call \auxhat in \setq. - % - \catcode`\^=\other - % - % Special characters. Should be turned off anyway, but... - \catcode`\~=\other - \catcode`\[=\other - \catcode`\]=\other - \catcode`\"=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\$=\other - \catcode`\#=\other - \catcode`\&=\other - \catcode`\%=\other - \catcode`+=\other % avoid \+ for paranoia even though we've turned it off - % - % This is to support \ in node names and titles, since the \ - % characters end up in a \csname. It's easier than - % leaving it active and making its active definition an actual \ - % character. What I don't understand is why it works in the *value* - % of the xrdef. Seems like it should be a catcode12 \, and that - % should not typeset properly. But it works, so I'm moving on for - % now. --karl, 15jan04. - \catcode`\\=\other - % - % Make the characters 128-255 be printing characters. - {% - \count 1=128 - \def\loop{% - \catcode\count 1=\other - \advance\count 1 by 1 - \ifnum \count 1<256 \loop \fi - }% - }% - % - % @ is our escape character in .aux files, and we need braces. - \catcode`\{=1 - \catcode`\}=2 - \catcode`\@=0 - % - \input \jobname.aux -\endgroup} - - -\message{insertions,} -% including footnotes. - -\newcount \footnoteno - -% The trailing space in the following definition for supereject is -% vital for proper filling; pages come out unaligned when you do a -% pagealignmacro call if that space before the closing brace is -% removed. (Generally, numeric constants should always be followed by a -% space to prevent strange expansion errors.) -\def\supereject{\par\penalty -20000\footnoteno =0 } - -% @footnotestyle is meaningful for info output only. -\let\footnotestyle=\comment - -{\catcode `\@=11 -% -% Auto-number footnotes. Otherwise like plain. -\gdef\footnote{% - \let\indent=\ptexindent - \let\noindent=\ptexnoindent - \global\advance\footnoteno by \@ne - \edef\thisfootno{$^{\the\footnoteno}$}% - % - % In case the footnote comes at the end of a sentence, preserve the - % extra spacing after we do the footnote number. - \let\@sf\empty - \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi - % - % Remove inadvertent blank space before typesetting the footnote number. - \unskip - \thisfootno\@sf - \dofootnote -}% - -% Don't bother with the trickery in plain.tex to not require the -% footnote text as a parameter. Our footnotes don't need to be so general. -% -% Oh yes, they do; otherwise, @ifset (and anything else that uses -% \parseargline) fails inside footnotes because the tokens are fixed when -% the footnote is read. --karl, 16nov96. -% -\gdef\dofootnote{% - \insert\footins\bgroup - % We want to typeset this text as a normal paragraph, even if the - % footnote reference occurs in (for example) a display environment. - % So reset some parameters. - \hsize=\pagewidth - \interlinepenalty\interfootnotelinepenalty - \splittopskip\ht\strutbox % top baseline for broken footnotes - \splitmaxdepth\dp\strutbox - \floatingpenalty\@MM - \leftskip\z@skip - \rightskip\z@skip - \spaceskip\z@skip - \xspaceskip\z@skip - \parindent\defaultparindent - % - \smallfonts \rm - % - % Because we use hanging indentation in footnotes, a @noindent appears - % to exdent this text, so make it be a no-op. makeinfo does not use - % hanging indentation so @noindent can still be needed within footnote - % text after an @example or the like (not that this is good style). - \let\noindent = \relax - % - % Hang the footnote text off the number. Use \everypar in case the - % footnote extends for more than one paragraph. - \everypar = {\hang}% - \textindent{\thisfootno}% - % - % Don't crash into the line above the footnote text. Since this - % expands into a box, it must come within the paragraph, lest it - % provide a place where TeX can split the footnote. - \footstrut - \futurelet\next\fo@t -} -}%end \catcode `\@=11 - -% In case a @footnote appears in a vbox, save the footnote text and create -% the real \insert just after the vbox finished. Otherwise, the insertion -% would be lost. -% Similarily, if a @footnote appears inside an alignment, save the footnote -% text to a box and make the \insert when a row of the table is finished. -% And the same can be done for other insert classes. --kasal, 16nov03. - -% Replace the \insert primitive by a cheating macro. -% Deeper inside, just make sure that the saved insertions are not spilled -% out prematurely. -% -\def\startsavinginserts{% - \ifx \insert\ptexinsert - \let\insert\saveinsert - \else - \let\checkinserts\relax - \fi -} - -% This \insert replacement works for both \insert\footins{foo} and -% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. -% -\def\saveinsert#1{% - \edef\next{\noexpand\savetobox \makeSAVEname#1}% - \afterassignment\next - % swallow the left brace - \let\temp = -} -\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} -\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} - -\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} - -\def\placesaveins#1{% - \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname - {\box#1}% -} - -% eat @SAVE -- beware, all of them have catcode \other: -{ - \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) - \gdef\gobblesave @SAVE{} -} - -% initialization: -\def\newsaveins #1{% - \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% - \next -} -\def\newsaveinsX #1{% - \csname newbox\endcsname #1% - \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts - \checksaveins #1}% -} - -% initialize: -\let\checkinserts\empty -\newsaveins\footins -\newsaveins\margin - - -% @image. We use the macros from epsf.tex to support this. -% If epsf.tex is not installed and @image is used, we complain. -% -% Check for and read epsf.tex up front. If we read it only at @image -% time, we might be inside a group, and then its definitions would get -% undone and the next image would fail. -\openin 1 = epsf.tex -\ifeof 1 \else - % Do not bother showing banner with epsf.tex v2.7k (available in - % doc/epsf.tex and on ctan). - \def\epsfannounce{\toks0 = }% - \input epsf.tex -\fi -\closein 1 -% -% We will only complain once about lack of epsf.tex. -\newif\ifwarnednoepsf -\newhelp\noepsfhelp{epsf.tex must be installed for images to - work. It is also included in the Texinfo distribution, or you can get - it from ftp://tug.org/tex/epsf.tex.} -% -\def\image#1{% - \ifx\epsfbox\undefined - \ifwarnednoepsf \else - \errhelp = \noepsfhelp - \errmessage{epsf.tex not found, images will be ignored}% - \global\warnednoepsftrue - \fi - \else - \imagexxx #1,,,,,\finish - \fi -} -% -% Arguments to @image: -% #1 is (mandatory) image filename; we tack on .eps extension. -% #2 is (optional) width, #3 is (optional) height. -% #4 is (ignored optional) html alt text. -% #5 is (ignored optional) extension. -% #6 is just the usual extra ignored arg for parsing this stuff. -\newif\ifimagevmode -\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup - \catcode`\^^M = 5 % in case we're inside an example - \normalturnoffactive % allow _ et al. in names - % If the image is by itself, center it. - \ifvmode - \imagevmodetrue - \nobreak\bigskip - % Usually we'll have text after the image which will insert - % \parskip glue, so insert it here too to equalize the space - % above and below. - \nobreak\vskip\parskip - \nobreak - \line\bgroup\hss - \fi - % - % Output the image. - \ifpdf - \dopdfimage{#1}{#2}{#3}% - \else - % \epsfbox itself resets \epsf?size at each figure. - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi - \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi - \epsfbox{#1.eps}% - \fi - % - \ifimagevmode \hss \egroup \bigbreak \fi % space after the image -\endgroup} - - -% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, -% etc. We don't actually implement floating yet, we always include the -% float "here". But it seemed the best name for the future. -% -\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} - -% There may be a space before second and/or third parameter; delete it. -\def\eatcommaspace#1, {#1,} - -% #1 is the optional FLOATTYPE, the text label for this float, typically -% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, -% this float will not be numbered and cannot be referred to. -% -% #2 is the optional xref label. Also must be present for the float to -% be referable. -% -% #3 is the optional positioning argument; for now, it is ignored. It -% will somehow specify the positions allowed to float to (here, top, bottom). -% -% We keep a separate counter for each FLOATTYPE, which we reset at each -% chapter-level command. -\let\resetallfloatnos=\empty -% -\def\dofloat#1,#2,#3,#4\finish{% - \let\thiscaption=\empty - \let\thisshortcaption=\empty - % - % don't lose footnotes inside @float. - % - % BEWARE: when the floats start float, we have to issue warning whenever an - % insert appears inside a float which could possibly float. --kasal, 26may04 - % - \startsavinginserts - % - % We can't be used inside a paragraph. - \par - % - \vtop\bgroup - \def\floattype{#1}% - \def\floatlabel{#2}% - \def\floatloc{#3}% we do nothing with this yet. - % - \ifx\floattype\empty - \let\safefloattype=\empty - \else - {% - % the floattype might have accents or other special characters, - % but we need to use it in a control sequence name. - \indexnofonts - \turnoffactive - \xdef\safefloattype{\floattype}% - }% - \fi - % - % If label is given but no type, we handle that as the empty type. - \ifx\floatlabel\empty \else - % We want each FLOATTYPE to be numbered separately (Figure 1, - % Table 1, Figure 2, ...). (And if no label, no number.) - % - \expandafter\getfloatno\csname\safefloattype floatno\endcsname - \global\advance\floatno by 1 - % - {% - % This magic value for \thissection is output by \setref as the - % XREFLABEL-title value. \xrefX uses it to distinguish float - % labels (which have a completely different output format) from - % node and anchor labels. And \xrdef uses it to construct the - % lists of floats. - % - \edef\thissection{\floatmagic=\safefloattype}% - \setref{\floatlabel}{Yfloat}% - }% - \fi - % - % start with \parskip glue, I guess. - \vskip\parskip - % - % Don't suppress indentation if a float happens to start a section. - \restorefirstparagraphindent -} - -% we have these possibilities: -% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap -% @float Foo,lbl & no caption: Foo 1.1 -% @float Foo & @caption{Cap}: Foo: Cap -% @float Foo & no caption: Foo -% @float ,lbl & Caption{Cap}: 1.1: Cap -% @float ,lbl & no caption: 1.1 -% @float & @caption{Cap}: Cap -% @float & no caption: -% -\def\Efloat{% - \let\floatident = \empty - % - % In all cases, if we have a float type, it comes first. - \ifx\floattype\empty \else \def\floatident{\floattype}\fi - % - % If we have an xref label, the number comes next. - \ifx\floatlabel\empty \else - \ifx\floattype\empty \else % if also had float type, need tie first. - \appendtomacro\floatident{\tie}% - \fi - % the number. - \appendtomacro\floatident{\chaplevelprefix\the\floatno}% - \fi - % - % Start the printed caption with what we've constructed in - % \floatident, but keep it separate; we need \floatident again. - \let\captionline = \floatident - % - \ifx\thiscaption\empty \else - \ifx\floatident\empty \else - \appendtomacro\captionline{: }% had ident, so need a colon between - \fi - % - % caption text. - \appendtomacro\captionline{\scanexp\thiscaption}% - \fi - % - % If we have anything to print, print it, with space before. - % Eventually this needs to become an \insert. - \ifx\captionline\empty \else - \vskip.5\parskip - \captionline - % - % Space below caption. - \vskip\parskip - \fi - % - % If have an xref label, write the list of floats info. Do this - % after the caption, to avoid chance of it being a breakpoint. - \ifx\floatlabel\empty \else - % Write the text that goes in the lof to the aux file as - % \floatlabel-lof. Besides \floatident, we include the short - % caption if specified, else the full caption if specified, else nothing. - {% - \atdummies \turnoffactive \otherbackslash - % since we read the caption text in the macro world, where ^^M - % is turned into a normal character, we have to scan it back, so - % we don't write the literal three characters "^^M" into the aux file. - \scanexp{% - \xdef\noexpand\gtemp{% - \ifx\thisshortcaption\empty - \thiscaption - \else - \thisshortcaption - \fi - }% - }% - \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident - \ifx\gtemp\empty \else : \gtemp \fi}}% - }% - \fi - \egroup % end of \vtop - % - % place the captured inserts - % - % BEWARE: when the floats start float, we have to issue warning whenever an - % insert appears inside a float which could possibly float. --kasal, 26may04 - % - \checkinserts -} - -% Append the tokens #2 to the definition of macro #1, not expanding either. -% -\def\appendtomacro#1#2{% - \expandafter\def\expandafter#1\expandafter{#1#2}% -} - -% @caption, @shortcaption -% -\def\caption{\docaption\thiscaption} -\def\shortcaption{\docaption\thisshortcaption} -\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} -\def\defcaption#1#2{\egroup \def#1{#2}} - -% The parameter is the control sequence identifying the counter we are -% going to use. Create it if it doesn't exist and assign it to \floatno. -\def\getfloatno#1{% - \ifx#1\relax - % Haven't seen this figure type before. - \csname newcount\endcsname #1% - % - % Remember to reset this floatno at the next chap. - \expandafter\gdef\expandafter\resetallfloatnos - \expandafter{\resetallfloatnos #1=0 }% - \fi - \let\floatno#1% -} - -% \setref calls this to get the XREFLABEL-snt value. We want an @xref -% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we -% first read the @float command. -% -\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% - -% Magic string used for the XREFLABEL-title value, so \xrefX can -% distinguish floats from other xref types. -\def\floatmagic{!!float!!} - -% #1 is the control sequence we are passed; we expand into a conditional -% which is true if #1 represents a float ref. That is, the magic -% \thissection value which we \setref above. -% -\def\iffloat#1{\expandafter\doiffloat#1==\finish} -% -% #1 is (maybe) the \floatmagic string. If so, #2 will be the -% (safe) float type for this float. We set \iffloattype to #2. -% -\def\doiffloat#1=#2=#3\finish{% - \def\temp{#1}% - \def\iffloattype{#2}% - \ifx\temp\floatmagic -} - -% @listoffloats FLOATTYPE - print a list of floats like a table of contents. -% -\parseargdef\listoffloats{% - \def\floattype{#1}% floattype - {% - % the floattype might have accents or other special characters, - % but we need to use it in a control sequence name. - \indexnofonts - \turnoffactive - \xdef\safefloattype{\floattype}% - }% - % - % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. - \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax - \ifhavexrefs - % if the user said @listoffloats foo but never @float foo. - \message{\linenumber No `\safefloattype' floats to list.}% - \fi - \else - \begingroup - \leftskip=\tocindent % indent these entries like a toc - \let\do=\listoffloatsdo - \csname floatlist\safefloattype\endcsname - \endgroup - \fi -} - -% This is called on each entry in a list of floats. We're passed the -% xref label, in the form LABEL-title, which is how we save it in the -% aux file. We strip off the -title and look up \XRLABEL-lof, which -% has the text we're supposed to typeset here. -% -% Figures without xref labels will not be included in the list (since -% they won't appear in the aux file). -% -\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} -\def\listoffloatsdoentry#1-title\finish{{% - % Can't fully expand XR#1-lof because it can contain anything. Just - % pass the control sequence. On the other hand, XR#1-pg is just the - % page number, and we want to fully expand that so we can get a link - % in pdf output. - \toksA = \expandafter{\csname XR#1-lof\endcsname}% - % - % use the same \entry macro we use to generate the TOC and index. - \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% - \writeentry -}} - -\message{localization,} -% and i18n. - -% @documentlanguage is usually given very early, just after -% @setfilename. If done too late, it may not override everything -% properly. Single argument is the language abbreviation. -% It would be nice if we could set up a hyphenation file here. -% -\parseargdef\documentlanguage{% - \tex % read txi-??.tex file in plain TeX. - % Read the file if it exists. - \openin 1 txi-#1.tex - \ifeof 1 - \errhelp = \nolanghelp - \errmessage{Cannot read language file txi-#1.tex}% - \else - \input txi-#1.tex - \fi - \closein 1 - \endgroup -} -\newhelp\nolanghelp{The given language definition file cannot be found or -is empty. Maybe you need to install it? In the current directory -should work if nowhere else does.} - - -% @documentencoding should change something in TeX eventually, most -% likely, but for now just recognize it. -\let\documentencoding = \comment - - -% Page size parameters. -% -\newdimen\defaultparindent \defaultparindent = 15pt - -\chapheadingskip = 15pt plus 4pt minus 2pt -\secheadingskip = 12pt plus 3pt minus 2pt -\subsecheadingskip = 9pt plus 2pt minus 2pt - -% Prevent underfull vbox error messages. -\vbadness = 10000 - -% Don't be so finicky about underfull hboxes, either. -\hbadness = 2000 - -% Following George Bush, just get rid of widows and orphans. -\widowpenalty=10000 -\clubpenalty=10000 - -% Use TeX 3.0's \emergencystretch to help line breaking, but if we're -% using an old version of TeX, don't do anything. We want the amount of -% stretch added to depend on the line length, hence the dependence on -% \hsize. We call this whenever the paper size is set. -% -\def\setemergencystretch{% - \ifx\emergencystretch\thisisundefined - % Allow us to assign to \emergencystretch anyway. - \def\emergencystretch{\dimen0}% - \else - \emergencystretch = .15\hsize - \fi -} - -% Parameters in order: 1) textheight; 2) textwidth; 3) voffset; -% 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8) -% physical page width. -% -% We also call \setleading{\textleading}, so the caller should define -% \textleading. The caller should also set \parskip. -% -\def\internalpagesizes#1#2#3#4#5#6#7#8{% - \voffset = #3\relax - \topskip = #6\relax - \splittopskip = \topskip - % - \vsize = #1\relax - \advance\vsize by \topskip - \outervsize = \vsize - \advance\outervsize by 2\topandbottommargin - \pageheight = \vsize - % - \hsize = #2\relax - \outerhsize = \hsize - \advance\outerhsize by 0.5in - \pagewidth = \hsize - % - \normaloffset = #4\relax - \bindingoffset = #5\relax - % - \ifpdf - \pdfpageheight #7\relax - \pdfpagewidth #8\relax - \fi - % - \setleading{\textleading} - % - \parindent = \defaultparindent - \setemergencystretch -} - -% @letterpaper (the default). -\def\letterpaper{{\globaldefs = 1 - \parskip = 3pt plus 2pt minus 1pt - \textleading = 13.2pt - % - % If page is nothing but text, make it come out even. - \internalpagesizes{46\baselineskip}{6in}% - {\voffset}{.25in}% - {\bindingoffset}{36pt}% - {11in}{8.5in}% -}} - -% Use @smallbook to reset parameters for 7x9.5 (or so) format. -\def\smallbook{{\globaldefs = 1 - \parskip = 2pt plus 1pt - \textleading = 12pt - % - \internalpagesizes{7.5in}{5in}% - {\voffset}{.25in}% - {\bindingoffset}{16pt}% - {9.25in}{7in}% - % - \lispnarrowing = 0.3in - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = .5cm -}} - -% Use @afourpaper to print on European A4 paper. -\def\afourpaper{{\globaldefs = 1 - \parskip = 3pt plus 2pt minus 1pt - \textleading = 13.2pt - % - % Double-side printing via postscript on Laserjet 4050 - % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. - % To change the settings for a different printer or situation, adjust - % \normaloffset until the front-side and back-side texts align. Then - % do the same for \bindingoffset. You can set these for testing in - % your texinfo source file like this: - % @tex - % \global\normaloffset = -6mm - % \global\bindingoffset = 10mm - % @end tex - \internalpagesizes{51\baselineskip}{160mm} - {\voffset}{\hoffset}% - {\bindingoffset}{44pt}% - {297mm}{210mm}% - % - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = 5mm -}} - -% Use @afivepaper to print on European A5 paper. -% From romildo@urano.iceb.ufop.br, 2 July 2000. -% He also recommends making @example and @lisp be small. -\def\afivepaper{{\globaldefs = 1 - \parskip = 2pt plus 1pt minus 0.1pt - \textleading = 12.5pt - % - \internalpagesizes{160mm}{120mm}% - {\voffset}{\hoffset}% - {\bindingoffset}{8pt}% - {210mm}{148mm}% - % - \lispnarrowing = 0.2in - \tolerance = 800 - \hfuzz = 1.2pt - \contentsrightmargin = 0pt - \defbodyindent = 2mm - \tableindent = 12mm -}} - -% A specific text layout, 24x15cm overall, intended for A4 paper. -\def\afourlatex{{\globaldefs = 1 - \afourpaper - \internalpagesizes{237mm}{150mm}% - {\voffset}{4.6mm}% - {\bindingoffset}{7mm}% - {297mm}{210mm}% - % - % Must explicitly reset to 0 because we call \afourpaper. - \globaldefs = 0 -}} - -% Use @afourwide to print on A4 paper in landscape format. -\def\afourwide{{\globaldefs = 1 - \afourpaper - \internalpagesizes{241mm}{165mm}% - {\voffset}{-2.95mm}% - {\bindingoffset}{7mm}% - {297mm}{210mm}% - \globaldefs = 0 -}} - -% @pagesizes TEXTHEIGHT[,TEXTWIDTH] -% Perhaps we should allow setting the margins, \topskip, \parskip, -% and/or leading, also. Or perhaps we should compute them somehow. -% -\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} -\def\pagesizesyyy#1,#2,#3\finish{{% - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi - \globaldefs = 1 - % - \parskip = 3pt plus 2pt minus 1pt - \setleading{\textleading}% - % - \dimen0 = #1 - \advance\dimen0 by \voffset - % - \dimen2 = \hsize - \advance\dimen2 by \normaloffset - % - \internalpagesizes{#1}{\hsize}% - {\voffset}{\normaloffset}% - {\bindingoffset}{44pt}% - {\dimen0}{\dimen2}% -}} - -% Set default to letter. -% -\letterpaper - - -\message{and turning on texinfo input format.} - -% Define macros to output various characters with catcode for normal text. -\catcode`\"=\other -\catcode`\~=\other -\catcode`\^=\other -\catcode`\_=\other -\catcode`\|=\other -\catcode`\<=\other -\catcode`\>=\other -\catcode`\+=\other -\catcode`\$=\other -\def\normaldoublequote{"} -\def\normaltilde{~} -\def\normalcaret{^} -\def\normalunderscore{_} -\def\normalverticalbar{|} -\def\normalless{<} -\def\normalgreater{>} -\def\normalplus{+} -\def\normaldollar{$}%$ font-lock fix - -% This macro is used to make a character print one way in \tt -% (where it can probably be output as-is), and another way in other fonts, -% where something hairier probably needs to be done. -% -% #1 is what to print if we are indeed using \tt; #2 is what to print -% otherwise. Since all the Computer Modern typewriter fonts have zero -% interword stretch (and shrink), and it is reasonable to expect all -% typewriter fonts to have this, we can check that font parameter. -% -\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} - -% Same as above, but check for italic font. Actually this also catches -% non-italic slanted fonts since it is impossible to distinguish them from -% italic fonts. But since this is only used by $ and it uses \sl anyway -% this is not a problem. -\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} - -% Turn off all special characters except @ -% (and those which the user can use as if they were ordinary). -% Most of these we simply print from the \tt font, but for some, we can -% use math or other variants that look better in normal text. - -\catcode`\"=\active -\def\activedoublequote{{\tt\char34}} -\let"=\activedoublequote -\catcode`\~=\active -\def~{{\tt\char126}} -\chardef\hat=`\^ -\catcode`\^=\active -\def^{{\tt \hat}} - -\catcode`\_=\active -\def_{\ifusingtt\normalunderscore\_} -% Subroutine for the previous macro. -\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } - -\catcode`\|=\active -\def|{{\tt\char124}} -\chardef \less=`\< -\catcode`\<=\active -\def<{{\tt \less}} -\chardef \gtr=`\> -\catcode`\>=\active -\def>{{\tt \gtr}} -\catcode`\+=\active -\def+{{\tt \char 43}} -\catcode`\$=\active -\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix - -% If a .fmt file is being used, characters that might appear in a file -% name cannot be active until we have parsed the command line. -% So turn them off again, and have \everyjob (or @setfilename) turn them on. -% \otherifyactive is called near the end of this file. -\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} - -\catcode`\@=0 - -% \backslashcurfont outputs one backslash character in current font, -% as in \char`\\. -\global\chardef\backslashcurfont=`\\ -\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work - -% \rawbackslash defines an active \ to do \backslashcurfont. -% \otherbackslash defines an active \ to be a literal `\' character with -% catcode other. -{\catcode`\\=\active - @gdef@rawbackslash{@let\=@backslashcurfont} - @gdef@otherbackslash{@let\=@realbackslash} -} - -% \realbackslash is an actual character `\' with catcode other. -{\catcode`\\=\other @gdef@realbackslash{\}} - -% \normalbackslash outputs one backslash in fixed width font. -\def\normalbackslash{{\tt\backslashcurfont}} - -\catcode`\\=\active - -% Used sometimes to turn off (effectively) the active characters -% even after parsing them. -@def@turnoffactive{% - @let"=@normaldoublequote - @let\=@realbackslash - @let~=@normaltilde - @let^=@normalcaret - @let_=@normalunderscore - @let|=@normalverticalbar - @let<=@normalless - @let>=@normalgreater - @let+=@normalplus - @let$=@normaldollar %$ font-lock fix - @unsepspaces -} - -% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of -% the literal character `\'. (Thus, \ is not expandable when this is in -% effect.) -% -@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash} - -% Make _ and + \other characters, temporarily. -% This is canceled by @fixbackslash. -@otherifyactive - -% If a .fmt file is being used, we don't want the `\input texinfo' to show up. -% That is what \eatinput is for; after that, the `\' should revert to printing -% a backslash. -% -@gdef@eatinput input texinfo{@fixbackslash} -@global@let\ = @eatinput - -% On the other hand, perhaps the file did not have a `\input texinfo'. Then -% the first `\{ in the file would cause an error. This macro tries to fix -% that, assuming it is called before the first `\' could plausibly occur. -% Also back turn on active characters that might appear in the input -% file name, in case not using a pre-dumped format. -% -@gdef@fixbackslash{% - @ifx\@eatinput @let\ = @normalbackslash @fi - @catcode`+=@active - @catcode`@_=@active -} - -% Say @foo, not \foo, in error messages. -@escapechar = `@@ - -% These look ok in all fonts, so just make them not special. -@catcode`@& = @other -@catcode`@# = @other -@catcode`@% = @other - - -@c Local variables: -@c eval: (add-hook 'write-file-hooks 'time-stamp) -@c page-delimiter: "^\\\\message" -@c time-stamp-start: "def\\\\texinfoversion{" -@c time-stamp-format: "%:y-%02m-%02d.%02H" -@c time-stamp-end: "}" -@c End: - -@c vim:sw=2: - -@ignore - arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 -@end ignore diff --git a/grub/.cvsignore b/grub/.cvsignore deleted file mode 100644 index d720cee60..000000000 --- a/grub/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -.deps -Makefile -grub diff --git a/grub/Makefile.am b/grub/Makefile.am deleted file mode 100644 index 7eb2eaadf..000000000 --- a/grub/Makefile.am +++ /dev/null @@ -1,19 +0,0 @@ -sbin_PROGRAMS = grub - -if SERIAL_SPEED_SIMULATION -SERIAL_FLAGS = -DSUPPORT_SERIAL=1 -DSIMULATE_SLOWNESS_OF_SERIAL=1 -else -SERIAL_FLAGS = -DSUPPORT_SERIAL=1 -endif - -AM_CPPFLAGS = -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \ - -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \ - -DFSYS_UFS2=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \ - -DUSE_MD5_PASSWORDS=1 -DSUPPORT_HERCULES=1 \ - $(SERIAL_FLAGS) -I$(top_srcdir)/stage2 \ - -I$(top_srcdir)/stage1 -I$(top_srcdir)/lib - -AM_CFLAGS = $(GRUB_CFLAGS) - -grub_SOURCES = main.c asmstub.c -grub_LDADD = ../stage2/libgrub.a ../lib/libcommon.a $(GRUB_LIBS) diff --git a/grub/Makefile.in b/grub/Makefile.in deleted file mode 100644 index 136c38fd1..000000000 --- a/grub/Makefile.in +++ /dev/null @@ -1,445 +0,0 @@ -# Makefile.in generated by automake 1.9.4 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -SOURCES = $(grub_SOURCES) - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -sbin_PROGRAMS = grub$(EXEEXT) -subdir = grub -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -am__installdirs = "$(DESTDIR)$(sbindir)" -sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM) -PROGRAMS = $(sbin_PROGRAMS) -am_grub_OBJECTS = main.$(OBJEXT) asmstub.$(OBJEXT) -grub_OBJECTS = $(am_grub_OBJECTS) -am__DEPENDENCIES_1 = -grub_DEPENDENCIES = ../stage2/libgrub.a ../lib/libcommon.a \ - $(am__DEPENDENCIES_1) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(grub_SOURCES) -DIST_SOURCES = $(grub_SOURCES) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ -BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ -CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ -DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FSYS_CFLAGS = @FSYS_CFLAGS@ -GRUB_CFLAGS = @GRUB_CFLAGS@ -GRUB_LIBS = @GRUB_LIBS@ -HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ -HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ -MAKEINFO = @MAKEINFO@ -NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ -NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ -NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ -NET_CFLAGS = @NET_CFLAGS@ -NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ -OBJCOPY = @OBJCOPY@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PERL = @PERL@ -RANLIB = @RANLIB@ -SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ -SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ -SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ -SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STAGE1_CFLAGS = @STAGE1_CFLAGS@ -STAGE2_CFLAGS = @STAGE2_CFLAGS@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -@SERIAL_SPEED_SIMULATION_FALSE@SERIAL_FLAGS = -DSUPPORT_SERIAL=1 -@SERIAL_SPEED_SIMULATION_TRUE@SERIAL_FLAGS = -DSUPPORT_SERIAL=1 -DSIMULATE_SLOWNESS_OF_SERIAL=1 -AM_CPPFLAGS = -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \ - -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \ - -DFSYS_UFS2=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \ - -DUSE_MD5_PASSWORDS=1 -DSUPPORT_HERCULES=1 \ - $(SERIAL_FLAGS) -I$(top_srcdir)/stage2 \ - -I$(top_srcdir)/stage1 -I$(top_srcdir)/lib - -AM_CFLAGS = $(GRUB_CFLAGS) -grub_SOURCES = main.c asmstub.c -grub_LDADD = ../stage2/libgrub.a ../lib/libcommon.a $(GRUB_LIBS) -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu grub/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu grub/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -install-sbinPROGRAMS: $(sbin_PROGRAMS) - @$(NORMAL_INSTALL) - test -z "$(sbindir)" || $(mkdir_p) "$(DESTDIR)$(sbindir)" - @list='$(sbin_PROGRAMS)'; for p in $$list; do \ - p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - if test -f $$p \ - ; then \ - f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(sbindir)/$$f'"; \ - $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(sbindir)/$$f" || exit 1; \ - else :; fi; \ - done - -uninstall-sbinPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(sbin_PROGRAMS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \ - rm -f "$(DESTDIR)$(sbindir)/$$f"; \ - done - -clean-sbinPROGRAMS: - -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) -grub$(EXEEXT): $(grub_OBJECTS) $(grub_DEPENDENCIES) - @rm -f grub$(EXEEXT) - $(LINK) $(grub_LDFLAGS) $(grub_OBJECTS) $(grub_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asmstub.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` -uninstall-info-am: - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) -installdirs: - for dir in "$(DESTDIR)$(sbindir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: install-sbinPROGRAMS - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am uninstall-sbinPROGRAMS - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-sbinPROGRAMS ctags distclean distclean-compile \ - distclean-generic distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-sbinPROGRAMS install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-info-am uninstall-sbinPROGRAMS - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/grub/asmstub.c b/grub/asmstub.c deleted file mode 100644 index 88d704e5e..000000000 --- a/grub/asmstub.c +++ /dev/null @@ -1,1311 +0,0 @@ -/* asmstub.c - a version of shared_src/asm.S that works under Unix */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2002,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* Try to use glibc's transparant LFS support. */ -#define _LARGEFILE_SOURCE 1 -/* lseek becomes synonymous with lseek64. */ -#define _FILE_OFFSET_BITS 64 - -/* Simulator entry point. */ -int grub_stage2 (void); - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef __linux__ -# include /* ioctl */ -# if !defined(__GLIBC__) || \ - ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))) -/* Maybe libc doesn't have large file support. */ -# include /* _llseek */ -# endif /* (GLIBC < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR < 1)) */ -# ifndef BLKFLSBUF -# define BLKFLSBUF _IO (0x12,97) /* flush buffer cache */ -# endif /* ! BLKFLSBUF */ -#endif /* __linux__ */ - -#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__) -# include -#endif - -/* We want to prevent any circularararity in our stubs, as well as - libc name clashes. */ -#define WITHOUT_LIBC_STUBS 1 -#include -#include -#include -#include - -/* Simulated memory sizes. */ -#define EXTENDED_MEMSIZE (3 * 1024 * 1024) /* 3MB */ -#define CONVENTIONAL_MEMSIZE (640 * 1024) /* 640kB */ - -unsigned long install_partition = 0x20000; -unsigned long boot_drive = 0; -int saved_entryno = 0; -char version_string[] = VERSION; -char config_file[128] = "/boot/grub/menu.lst"; /* FIXME: arbitrary */ -unsigned long linux_text_len = 0; -char *linux_data_tmp_addr = 0; -char *linux_data_real_addr = 0; -unsigned short io_map[IO_MAP_SIZE]; -struct apm_info apm_bios_info; - -/* Emulation requirements. */ -char *grub_scratch_mem = 0; - -struct geometry *disks = 0; - -/* The map between BIOS drives and UNIX device file names. */ -char **device_map = 0; - -/* The jump buffer for exiting correctly. */ -static jmp_buf env_for_exit; - -/* The current color for console. */ -int console_current_color = A_NORMAL; - -/* The file descriptor for a serial device. */ -static int serial_fd = -1; - -/* The file name of a serial device. */ -static char *serial_device = 0; - -#ifdef SIMULATE_SLOWNESS_OF_SERIAL -/* The speed of a serial device. */ -static unsigned int serial_speed; -#endif /* SIMULATE_SLOWNESS_OF_SERIAL */ - -/* The main entry point into this mess. */ -int -grub_stage2 (void) -{ - /* These need to be static, because they survive our stack transitions. */ - static int status = 0; - static char *realstack; - char *scratch, *simstack; - int i; - - auto void doit (void); - - /* We need a nested function so that we get a clean stack frame, - regardless of how the code is optimized. */ - void doit (void) - { - /* Make sure our stack lives in the simulated memory area. */ - asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n" - : "=&r" (realstack) : "r" (simstack)); - - /* Do a setjmp here for the stop command. */ - if (! setjmp (env_for_exit)) - { - /* Actually enter the generic stage2 code. */ - status = 0; - init_bios_info (); - } - else - { - /* If ERRNUM is non-zero, then set STATUS to non-zero. */ - if (errnum) - status = 1; - } - - /* Replace our stack before we use any local variables. */ - asm volatile ("movl %0, %%esp\n" : : "r" (realstack)); - } - - assert (grub_scratch_mem == 0); - scratch = malloc (0x100000 + EXTENDED_MEMSIZE + 15); - assert (scratch); - grub_scratch_mem = (char *) ((((int) scratch) >> 4) << 4); - - /* FIXME: simulate the memory holes using mprot, if available. */ - - assert (disks == 0); - disks = malloc (NUM_DISKS * sizeof (*disks)); - assert (disks); - /* Initialize DISKS. */ - for (i = 0; i < NUM_DISKS; i++) - disks[i].flags = -1; - - if (! init_device_map (&device_map, device_map_file, floppy_disks)) - return 1; - - /* Check some invariants. */ - assert ((SCRATCHSEG << 4) == SCRATCHADDR); - assert ((BUFFERSEG << 4) == BUFFERADDR); - assert (BUFFERADDR + BUFFERLEN == SCRATCHADDR); - assert (FSYS_BUF % 16 == 0); - assert (FSYS_BUF + FSYS_BUFLEN == BUFFERADDR); - -#ifdef HAVE_LIBCURSES - /* Get into char-at-a-time mode. */ - if (use_curses) - { - initscr (); - cbreak (); - noecho (); - nonl (); - scrollok (stdscr, TRUE); - keypad (stdscr, TRUE); - wtimeout (stdscr, 100); - signal (SIGWINCH, SIG_IGN); - } -#endif - - /* Make sure that actual writing is done. */ - sync (); - - /* Set our stack, and go for it. */ - simstack = (char *) PROTSTACKINIT; - doit (); - - /* I don't know if this is necessary really. */ - sync (); - -#ifdef HAVE_LIBCURSES - if (use_curses) - endwin (); -#endif - - /* Close off the file descriptors we used. */ - for (i = 0; i < NUM_DISKS; i ++) - if (disks[i].flags != -1) - { -#ifdef __linux__ - /* In Linux, invalidate the buffer cache. In other OSes, reboot - is one of the solutions... */ - ioctl (disks[i].flags, BLKFLSBUF, 0); -#else -# warning "In your operating system, the buffer cache will not be flushed." -#endif - close (disks[i].flags); - } - - if (serial_fd >= 0) - close (serial_fd); - - /* Release memory. */ - restore_device_map (device_map); - device_map = 0; - free (disks); - disks = 0; - free (scratch); - grub_scratch_mem = 0; - - if (serial_device) - free (serial_device); - serial_device = 0; - - /* Ahh... at last we're ready to return to caller. */ - return status; -} - -/* Assign DRIVE to a device name DEVICE. */ -void -assign_device_name (int drive, const char *device) -{ - /* If DRIVE is already assigned, free it. */ - if (device_map[drive]) - free (device_map[drive]); - - /* If the old one is already opened, close it. */ - if (disks[drive].flags != -1) - { - close (disks[drive].flags); - disks[drive].flags = -1; - } - - /* Assign DRIVE to DEVICE. */ - if (! device) - device_map[drive] = 0; - else - device_map[drive] = strdup (device); -} - -void -stop (void) -{ -#ifdef HAVE_LIBCURSES - if (use_curses) - endwin (); -#endif - - /* Jump to doit. */ - longjmp (env_for_exit, 1); -} - -void -grub_reboot (void) -{ - stop (); -} - -void -grub_halt (int no_apm) -{ - stop (); -} - -/* calls for direct boot-loader chaining */ -void -chain_stage1 (unsigned long segment, unsigned long offset, - unsigned long part_table_addr) -{ - stop (); -} - - -void -chain_stage2 (unsigned long segment, unsigned long offset, int second_sector) -{ - stop (); -} - - -/* do some funky stuff, then boot linux */ -void -linux_boot (void) -{ - stop (); -} - - -/* For bzImage kernels. */ -void -big_linux_boot (void) -{ - stop (); -} - - -/* booting a multiboot executable */ -void -multi_boot (int start, int mb_info) -{ - stop (); -} - -/* sets it to linear or wired A20 operation */ -void -gateA20 (int linear) -{ - /* Nothing to do in the simulator. */ -} - -/* Set up the int15 handler. */ -void -set_int15_handler (void) -{ - /* Nothing to do in the simulator. */ -} - -/* Restore the original int15 handler. */ -void -unset_int15_handler (void) -{ - /* Nothing to do in the simulator. */ -} - -/* The key map. */ -unsigned short bios_key_map[KEY_MAP_SIZE + 1]; -unsigned short ascii_key_map[KEY_MAP_SIZE + 1]; - -/* Copy MAP to the drive map and set up the int13 handler. */ -void -set_int13_handler (unsigned short *map) -{ - /* Nothing to do in the simulator. */ -} - -int -get_code_end (void) -{ - /* Just return a little area for simulation. */ - return BOOTSEC_LOCATION + (60 * 1024); -} - - -/* memory probe routines */ -int -get_memsize (int type) -{ - if (! type) - return CONVENTIONAL_MEMSIZE >> 10; - else - return EXTENDED_MEMSIZE >> 10; -} - - -/* get_eisamemsize() : return packed EISA memory map, lower 16 bits is - * memory between 1M and 16M in 1K parts, upper 16 bits is - * memory above 16M in 64K parts. If error, return -1. - */ -int -get_eisamemsize (void) -{ - return (EXTENDED_MEMSIZE >> 10); -} - - -#define MMAR_DESC_TYPE_AVAILABLE 1 /* available to OS */ -#define MMAR_DESC_TYPE_RESERVED 2 /* not available */ -#define MMAR_DESC_TYPE_ACPI_RECLAIM 3 /* usable by OS after reading ACPI */ -#define MMAR_DESC_TYPE_ACPI_NVS 4 /* required to save between NVS sessions */ - -#define MMAR_DESC_LENGTH 20 - -/* Fetch the next entry in the memory map and return the continuation - value. DESC is a pointer to the descriptor buffer, and CONT is the - previous continuation value (0 to get the first entry in the - map). */ -int -get_mmap_entry (struct mmar_desc *desc, int cont) -{ - /* Record the memory map statically. */ - static struct mmar_desc desc_table[] = - { - /* The conventional memory. */ - { - MMAR_DESC_LENGTH, - 0, - CONVENTIONAL_MEMSIZE, - MMAR_DESC_TYPE_AVAILABLE - }, - /* BIOS RAM and ROM (such as video memory). */ - { - MMAR_DESC_LENGTH, - CONVENTIONAL_MEMSIZE, - 0x100000 - CONVENTIONAL_MEMSIZE, - MMAR_DESC_TYPE_RESERVED - }, - /* The extended memory. */ - { - MMAR_DESC_LENGTH, - 0x100000, - EXTENDED_MEMSIZE, - MMAR_DESC_TYPE_AVAILABLE - } - }; - - int num = sizeof (desc_table) / sizeof (*desc_table); - - if (cont < 0 || cont >= num) - { - /* Should not happen. */ - desc->desc_len = 0; - } - else - { - /* Copy the entry. */ - *desc = desc_table[cont++]; - - /* If the next entry exists, return the index. */ - if (cont < num) - return cont; - } - - return 0; -} - -/* Track the int13 handler. */ -void -track_int13 (int drive) -{ - /* Nothing to do in the simulator. */ -} - -/* Get the ROM configuration table. */ -unsigned long -get_rom_config_table (void) -{ - return 0; -} - -/* Get APM BIOS information. */ -void -get_apm_info (void) -{ - /* Nothing to do in the simulator. */ -} - -/* Get VBE controller information. */ -int -get_vbe_controller_info (struct vbe_controller *controller) -{ - /* Always fails. */ - return 0; -} - -/* Get VBE mode information. */ -int -get_vbe_mode_info (int mode_number, struct vbe_mode *mode) -{ - /* Always fails. */ - return 0; -} - -/* Set VBE mode. */ -int -set_vbe_mode (int mode_number) -{ - /* Always fails. */ - return 0; -} - -/* low-level timing info */ -int -getrtsecs (void) -{ - /* FIXME: exact value is not important, so just return time_t for now. */ - return time (0); -} - -int -currticks (void) -{ - struct timeval tv; - long csecs; - int ticks_per_csec, ticks_per_usec; - - /* Note: 18.2 ticks/sec. */ - - /* Get current time. */ - gettimeofday (&tv, 0); - - /* Compute centiseconds. */ - csecs = tv.tv_sec / 10; - - /* Ticks per centisecond. */ - ticks_per_csec = csecs * 182; - - /* Ticks per microsecond. */ - ticks_per_usec = (((tv.tv_sec - csecs * 10) * 1000000 + tv.tv_usec) - * 182 / 10000000); - - /* Sum them. */ - return ticks_per_csec + ticks_per_usec; -} - -/* displays an ASCII character. IBM displays will translate some - characters to special graphical ones */ -void -console_putchar (int c) -{ - /* Curses doesn't have VGA fonts. */ - switch (c) - { - case DISP_UL: - c = ACS_ULCORNER; - break; - case DISP_UR: - c = ACS_URCORNER; - break; - case DISP_LL: - c = ACS_LLCORNER; - break; - case DISP_LR: - c = ACS_LRCORNER; - break; - case DISP_HORIZ: - c = ACS_HLINE; - break; - case DISP_VERT: - c = ACS_VLINE; - break; - case DISP_LEFT: - c = ACS_LARROW; - break; - case DISP_RIGHT: - c = ACS_RARROW; - break; - case DISP_UP: - c = ACS_UARROW; - break; - case DISP_DOWN: - c = ACS_DARROW; - break; - default: - break; - } - -#ifdef HAVE_LIBCURSES - if (use_curses) - { - /* In ncurses, a newline is treated badly, so we emulate it in our - own way. */ - if (c == '\n') - { - int x, y; - - getyx (stdscr, y, x); - if (y + 1 == LINES) - scroll (stdscr); - else - move (y + 1, x); - } - else if (isprint (c)) - { - int x, y; - - getyx (stdscr, y, x); - if (x + 1 == COLS) - { - console_putchar ('\r'); - console_putchar ('\n'); - } - addch (c | console_current_color); - } - else - { - addch (c); - } - -#ifdef REFRESH_IMMEDIATELY - refresh (); -#endif - } - else -#endif - { - /* CR is not used in Unix. */ - if (c != '\r') - putchar (c); - } -} - -/* The store for ungetch simulation. This is necessary, because - ncurses-1.9.9g is still used in the world and its ungetch is - completely broken. */ -#ifdef HAVE_LIBCURSES -static int save_char = ERR; -#endif - -static int -console_translate_key (int c) -{ - switch (c) - { - case KEY_LEFT: - return 2; - case KEY_RIGHT: - return 6; - case KEY_UP: - return 16; - case KEY_DOWN: - return 14; - case KEY_DC: - return 4; - case KEY_BACKSPACE: - return 8; - case KEY_HOME: - return 1; - case KEY_END: - return 5; - case KEY_PPAGE: - return 7; - case KEY_NPAGE: - return 3; - default: - break; - } - - return c; -} - -/* like 'getkey', but doesn't wait, returns -1 if nothing available */ -int -console_checkkey (void) -{ -#ifdef HAVE_LIBCURSES - if (use_curses) - { - int c; - - /* Check for SAVE_CHAR. This should not be true, because this - means checkkey is called twice continuously. */ - if (save_char != ERR) - return save_char; - - c = getch (); - /* If C is not ERR, then put it back in the input queue. */ - if (c != ERR) - save_char = c; - return console_translate_key (c); - } -#endif - - /* Just pretend they hit the space bar, then read the real key when - they call getkey. */ - return ' '; -} - -/* returns packed BIOS/ASCII code */ -int -console_getkey (void) -{ - int c; - -#ifdef HAVE_LIBCURSES - if (use_curses) - { - /* If checkkey has already got a character, then return it. */ - if (save_char != ERR) - { - c = save_char; - save_char = ERR; - return console_translate_key (c); - } - - wtimeout (stdscr, -1); - c = getch (); - wtimeout (stdscr, 100); - } - else -#endif - c = getchar (); - - /* Quit if we get EOF. */ - if (c == -1) - stop (); - - return console_translate_key (c); -} - -/* returns packed values, LSB+1 is x, LSB is y */ -int -console_getxy (void) -{ - int y, x; -#ifdef HAVE_LIBCURSES - if (use_curses) - getyx (stdscr, y, x); - else -#endif - y = x = 0; - return (x << 8) | (y & 0xff); -} - -void -console_gotoxy (int x, int y) -{ -#ifdef HAVE_LIBCURSES - if (use_curses) - move (y, x); -#endif -} - -/* low-level character I/O */ -void -console_cls (void) -{ -#ifdef HAVE_LIBCURSES - if (use_curses) - clear (); -#endif -} - -void -console_setcolorstate (color_state state) -{ - console_current_color = - (state == COLOR_STATE_HIGHLIGHT) ? A_REVERSE : A_NORMAL; -} - -void -console_setcolor (int normal_color, int highlight_color) -{ - /* Nothing to do. */ -} - -int -console_setcursor (int on) -{ - return 1; -} - -/* Low-level disk I/O. Our stubbed version just returns a file - descriptor, not the actual geometry. */ -int -get_diskinfo (int drive, struct geometry *geometry) -{ - /* FIXME: this function is truly horrid. We try opening the device, - then severely abuse the GEOMETRY->flags field to pass a file - descriptor to biosdisk. Thank God nobody's looking at this comment, - or my reputation would be ruined. --Gord */ - - /* See if we have a cached device. */ - if (disks[drive].flags == -1) - { - /* The unpartitioned device name: /dev/XdX */ - char *devname = device_map[drive]; - char buf[512]; - - if (! devname) - return -1; - - if (verbose) - grub_printf ("Attempt to open drive 0x%x (%s)\n", - drive, devname); - - /* Open read/write, or read-only if that failed. */ - if (! read_only) - { -/* By default, kernel of FreeBSD does not allow overwriting MBR */ -#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__) -#define GEOM_SYSCTL "kern.geom.debugflags" - int old_flags, flags; - size_t sizeof_int = sizeof (int); - - if (sysctlbyname (GEOM_SYSCTL, &old_flags, &sizeof_int, NULL, 0) != 0) - grub_printf ("failed to get " GEOM_SYSCTL "sysctl: %s\n", strerror (errno)); - - if ((old_flags & 0x10) == 0) - { - /* "allow foot shooting", see geom(4) */ - flags = old_flags | 0x10; - - if (sysctlbyname (GEOM_SYSCTL, NULL, NULL, &flags, sizeof (int)) != 0) - { - flags = old_flags; - grub_printf ("failed to set " GEOM_SYSCTL "sysctl: %s\n", strerror (errno)); - } - } - else - flags = old_flags; -#endif - disks[drive].flags = open (devname, O_RDWR); -#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__) - if (flags != old_flags) - { - if (sysctlbyname (GEOM_SYSCTL, NULL, NULL, &old_flags, sizeof (int)) != 0) - grub_printf ("failed to set " GEOM_SYSCTL "sysctl: %s\n", strerror (errno)); - } -#endif - } - - if (disks[drive].flags == -1) - { - if (read_only || errno == EACCES || errno == EROFS || errno == EPERM) - { - disks[drive].flags = open (devname, O_RDONLY); - if (disks[drive].flags == -1) - { - assign_device_name (drive, 0); - return -1; - } - } - else - { - assign_device_name (drive, 0); - return -1; - } - } - - /* Attempt to read the first sector. */ - if (read (disks[drive].flags, buf, 512) != 512) - { - close (disks[drive].flags); - disks[drive].flags = -1; - assign_device_name (drive, 0); - return -1; - } - - if (disks[drive].flags != -1) - get_drive_geometry (&disks[drive], device_map, drive); - } - - if (disks[drive].flags == -1) - return -1; - -#ifdef __linux__ - /* In Linux, invalidate the buffer cache, so that left overs - from other program in the cache are flushed and seen by us */ - ioctl (disks[drive].flags, BLKFLSBUF, 0); -#endif - - *geometry = disks[drive]; - return 0; -} - -/* Read LEN bytes from FD in BUF. Return less than or equal to zero if an - error occurs, otherwise return LEN. */ -static int -nread (int fd, char *buf, size_t len) -{ - int size = len; - - while (len) - { - int ret = read (fd, buf, len); - - if (ret <= 0) - { - if (errno == EINTR) - continue; - else - return ret; - } - - len -= ret; - buf += ret; - } - - return size; -} - -/* Write LEN bytes from BUF to FD. Return less than or equal to zero if an - error occurs, otherwise return LEN. */ -static int -nwrite (int fd, char *buf, size_t len) -{ - int size = len; - - while (len) - { - int ret = write (fd, buf, len); - - if (ret <= 0) - { - if (errno == EINTR) - continue; - else - return ret; - } - - len -= ret; - buf += ret; - } - - return size; -} - -/* Dump BUF in the format of hexadecimal numbers. */ -static void -hex_dump (void *buf, size_t size) -{ - /* FIXME: How to determine which length is readable? */ -#define MAX_COLUMN 70 - - /* use unsigned char for numerical computations */ - unsigned char *ptr = buf; - /* count the width of the line */ - int column = 0; - /* how many bytes written */ - int count = 0; - - while (size > 0) - { - /* high 4 bits */ - int hi = *ptr >> 4; - /* low 4 bits */ - int low = *ptr & 0xf; - - /* grub_printf does not handle prefix number, such as %2x, so - format the number by hand... */ - grub_printf ("%x%x", hi, low); - column += 2; - count++; - ptr++; - size--; - - /* Insert space or newline with the interval 4 bytes. */ - if (size != 0 && (count % 4) == 0) - { - if (column < MAX_COLUMN) - { - grub_printf (" "); - column++; - } - else - { - grub_printf ("\n"); - column = 0; - } - } - } - - /* Add a newline at the end for readability. */ - grub_printf ("\n"); -} - -int -biosdisk (int subfunc, int drive, struct geometry *geometry, - unsigned int sector, int nsec, int segment) -{ - char *buf; - int fd = geometry->flags; - - /* Get the file pointer from the geometry, and make sure it matches. */ - if (fd == -1 || fd != disks[drive].flags) - return BIOSDISK_ERROR_GEOMETRY; - - /* Seek to the specified location. */ -#if defined(__linux__) && (!defined(__GLIBC__) || \ - ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1)))) - /* Maybe libc doesn't have large file support. */ - { - loff_t offset, result; - static int _llseek (uint filedes, ulong hi, ulong lo, - loff_t *res, uint wh); - _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo, - loff_t *, res, uint, wh); - - offset = (loff_t) sector * (loff_t) SECTOR_SIZE; - if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET)) - return -1; - } -#else - { - off_t offset = (off_t) sector * (off_t) SECTOR_SIZE; - - if (lseek (fd, offset, SEEK_SET) != offset) - return -1; - } -#endif - - buf = (char *) (segment << 4); - - switch (subfunc) - { - case BIOSDISK_READ: -#ifdef __linux__ - if (sector == 0 && nsec > 1) - { - /* Work around a bug in linux's ez remapping. Linux remaps all - sectors that are read together with the MBR in one read. It - should only remap the MBR, so we split the read in two - parts. -jochen */ - if (nread (fd, buf, SECTOR_SIZE) != SECTOR_SIZE) - return -1; - buf += SECTOR_SIZE; - nsec--; - } -#endif - if (nread (fd, buf, nsec * SECTOR_SIZE) != nsec * SECTOR_SIZE) - return -1; - break; - - case BIOSDISK_WRITE: - if (verbose) - { - grub_printf ("Write %d sectors starting from %d sector" - " to drive 0x%x (%s)\n", - nsec, sector, drive, device_map[drive]); - hex_dump (buf, nsec * SECTOR_SIZE); - } - if (! read_only) - if (nwrite (fd, buf, nsec * SECTOR_SIZE) != nsec * SECTOR_SIZE) - return -1; - break; - - default: - grub_printf ("unknown subfunc %d\n", subfunc); - break; - } - - return 0; -} - - -void -stop_floppy (void) -{ - /* NOTUSED */ -} - -/* Fetch a key from a serial device. */ -int -serial_hw_fetch (void) -{ - fd_set fds; - struct timeval to; - char c; - - /* Wait only for the serial device. */ - FD_ZERO (&fds); - FD_SET (serial_fd, &fds); - - to.tv_sec = 0; - to.tv_usec = 0; - - if (select (serial_fd + 1, &fds, 0, 0, &to) > 0) - { - if (nread (serial_fd, &c, 1) != 1) - stop (); - - return c; - } - - return -1; -} - -/* Put a character to a serial device. */ -void -serial_hw_put (int c) -{ - char ch = (char) c; - - if (nwrite (serial_fd, &ch, 1) != 1) - stop (); -} - -void -serial_hw_delay (void) -{ -#ifdef SIMULATE_SLOWNESS_OF_SERIAL - struct timeval otv, tv; - - gettimeofday (&otv, 0); - - while (1) - { - long delta; - - gettimeofday (&tv, 0); - delta = tv.tv_usec - otv.tv_usec; - if (delta < 0) - delta += 1000000; - - if (delta >= 1000000 / (serial_speed >> 3)) - break; - } -#endif /* SIMULATE_SLOWNESS_OF_SERIAL */ -} - -static speed_t -get_termios_speed (int speed) -{ - switch (speed) - { - case 2400: return B2400; - case 4800: return B4800; - case 9600: return B9600; - case 19200: return B19200; - case 38400: return B38400; -#ifdef B57600 - case 57600: return B57600; -#endif -#ifdef B115200 - case 115200: return B115200; -#endif - } - - return B0; -} - -/* Get the port number of the unit UNIT. In the grub shell, this doesn't - make sense. */ -unsigned short -serial_hw_get_port (int unit) -{ - return 0; -} - -/* Initialize a serial device. In the grub shell, PORT is unused. */ -int -serial_hw_init (unsigned short port, unsigned int speed, - int word_len, int parity, int stop_bit_len) -{ - struct termios termios; - speed_t termios_speed; - int i; - - /* Check if the file name is specified. */ - if (! serial_device) - return 0; - - /* If a serial device is already opened, close it first. */ - if (serial_fd >= 0) - close (serial_fd); - - /* Open the device file. */ - serial_fd = open (serial_device, - O_RDWR | O_NOCTTY -#if defined(O_SYNC) - /* O_SYNC is used in Linux (and some others?). */ - | O_SYNC -#elif defined(O_FSYNC) - /* O_FSYNC is used in FreeBSD. */ - | O_FSYNC -#endif - ); - if (serial_fd < 0) - return 0; - - /* Get the termios parameters. */ - if (tcgetattr (serial_fd, &termios)) - goto fail; - - /* Raw mode. */ - cfmakeraw (&termios); - - /* Set the speed. */ - termios_speed = get_termios_speed (speed); - if (termios_speed == B0) - goto fail; - - cfsetispeed (&termios, termios_speed); - cfsetospeed (&termios, termios_speed); - - /* Set the word length. */ - termios.c_cflag &= ~CSIZE; - switch (word_len) - { - case UART_5BITS_WORD: - termios.c_cflag |= CS5; - break; - case UART_6BITS_WORD: - termios.c_cflag |= CS6; - break; - case UART_7BITS_WORD: - termios.c_cflag |= CS7; - break; - case UART_8BITS_WORD: - termios.c_cflag |= CS8; - break; - default: - goto fail; - } - - /* Set the parity. */ - switch (parity) - { - case UART_NO_PARITY: - termios.c_cflag &= ~PARENB; - break; - case UART_ODD_PARITY: - termios.c_cflag |= PARENB; - termios.c_cflag |= PARODD; - break; - case UART_EVEN_PARITY: - termios.c_cflag |= PARENB; - termios.c_cflag &= ~PARODD; - break; - default: - goto fail; - } - - /* Set the length of stop bit. */ - switch (stop_bit_len) - { - case UART_1_STOP_BIT: - termios.c_cflag &= ~CSTOPB; - break; - case UART_2_STOP_BITS: - termios.c_cflag |= CSTOPB; - break; - default: - goto fail; - } - - /* Set the parameters. */ - if (tcsetattr (serial_fd, TCSANOW, &termios)) - goto fail; - -#ifdef SIMULATE_SLOWNESS_OF_SERIAL - serial_speed = speed; -#endif /* SIMUATE_SLOWNESS_OF_SERIAL */ - - /* Get rid of the flag TERM_NEED_INIT from the serial terminal. */ - for (i = 0; term_table[i].name; i++) - { - if (strcmp (term_table[i].name, "serial") == 0) - { - term_table[i].flags &= ~(TERM_NEED_INIT); - break; - } - } - - return 1; - - fail: - close (serial_fd); - serial_fd = -1; - return 0; -} - -/* Set the file name of a serial device (or a pty device). This is a - function specific to the grub shell. */ -void -serial_set_device (const char *device) -{ - if (serial_device) - free (serial_device); - - serial_device = strdup (device); -} - -/* There is no difference between console and hercules in the grub shell. */ -void -hercules_putchar (int c) -{ - console_putchar (c); -} - -int -hercules_getxy (void) -{ - return console_getxy (); -} - -void -hercules_gotoxy (int x, int y) -{ - console_gotoxy (x, y); -} - -void -hercules_cls (void) -{ - console_cls (); -} - -void -hercules_setcolorstate (color_state state) -{ - console_setcolorstate (state); -} - -void -hercules_setcolor (int normal_color, int highlight_color) -{ - console_setcolor (normal_color, highlight_color); -} - -int -hercules_setcursor (int on) -{ - return 1; -} diff --git a/grub/main.c b/grub/main.c deleted file mode 100644 index 56042da5b..000000000 --- a/grub/main.c +++ /dev/null @@ -1,272 +0,0 @@ -/* main.c - experimental GRUB stage2 that runs under Unix */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2002 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* Simulator entry point. */ -int grub_stage2 (void); - -#include -#include -#include -#include -#include -#include -#include - -#define WITHOUT_LIBC_STUBS 1 -#include -#include -#include - -char *program_name = 0; -int use_config_file = 1; -int use_preset_menu = 0; -#ifdef HAVE_LIBCURSES -int use_curses = 1; -#else -int use_curses = 0; -#endif -int verbose = 0; -int read_only = 0; -int floppy_disks = 1; -char *device_map_file = 0; -static int default_boot_drive; -static int default_install_partition; -static char *default_config_file; - -#define OPT_HELP -2 -#define OPT_VERSION -3 -#define OPT_HOLD -4 -#define OPT_CONFIG_FILE -5 -#define OPT_INSTALL_PARTITION -6 -#define OPT_BOOT_DRIVE -7 -#define OPT_NO_CONFIG_FILE -8 -#define OPT_NO_CURSES -9 -#define OPT_BATCH -10 -#define OPT_VERBOSE -11 -#define OPT_READ_ONLY -12 -#define OPT_PROBE_SECOND_FLOPPY -13 -#define OPT_NO_FLOPPY -14 -#define OPT_DEVICE_MAP -15 -#define OPT_PRESET_MENU -16 -#define OPT_NO_PAGER -17 -#define OPTSTRING "" - -static struct option longopts[] = -{ - {"batch", no_argument, 0, OPT_BATCH}, - {"boot-drive", required_argument, 0, OPT_BOOT_DRIVE}, - {"config-file", required_argument, 0, OPT_CONFIG_FILE}, - {"device-map", required_argument, 0, OPT_DEVICE_MAP}, - {"help", no_argument, 0, OPT_HELP}, - {"hold", optional_argument, 0, OPT_HOLD}, - {"install-partition", required_argument, 0, OPT_INSTALL_PARTITION}, - {"no-config-file", no_argument, 0, OPT_NO_CONFIG_FILE}, - {"no-curses", no_argument, 0, OPT_NO_CURSES}, - {"no-floppy", no_argument, 0, OPT_NO_FLOPPY}, - {"no-pager", no_argument, 0, OPT_NO_PAGER}, - {"preset-menu", no_argument, 0, OPT_PRESET_MENU}, - {"probe-second-floppy", no_argument, 0, OPT_PROBE_SECOND_FLOPPY}, - {"read-only", no_argument, 0, OPT_READ_ONLY}, - {"verbose", no_argument, 0, OPT_VERBOSE}, - {"version", no_argument, 0, OPT_VERSION}, - {0}, -}; - - -static void -usage (int status) -{ - if (status) - fprintf (stderr, "Try ``grub --help'' for more information.\n"); - else - printf ("\ -Usage: grub [OPTION]...\n\ -\n\ -Enter the GRand Unified Bootloader command shell.\n\ -\n\ - --batch turn on batch mode for non-interactive use\n\ - --boot-drive=DRIVE specify stage2 boot_drive [default=0x%x]\n\ - --config-file=FILE specify stage2 config_file [default=%s]\n\ - --device-map=FILE use the device map file FILE\n\ - --help display this message and exit\n\ - --hold wait until a debugger will attach\n\ - --install-partition=PAR specify stage2 install_partition [default=0x%x]\n\ - --no-config-file do not use the config file\n\ - --no-curses do not use curses\n\ - --no-floppy do not probe any floppy drive\n\ - --no-pager do not use internal pager\n\ - --preset-menu use the preset menu\n\ - --probe-second-floppy probe the second floppy drive\n\ - --read-only do not write anything to devices\n\ - --verbose print verbose messages\n\ - --version print version information and exit\n\ -\n\ -Report bugs to .\n\ -", - default_boot_drive, default_config_file, - default_install_partition); - - exit (status); -} - - -int -main (int argc, char **argv) -{ - int c; - int hold = 0; - - /* First of all, call sync so that all in-core data is scheduled to be - actually written to disks. This is very important because GRUB does - not use ordinary stdio interface but raw devices. */ - sync (); - - program_name = argv[0]; - default_boot_drive = boot_drive; - default_install_partition = install_partition; - if (config_file) - default_config_file = config_file; - else - default_config_file = "NONE"; - - /* Parse command-line options. */ - do - { - c = getopt_long (argc, argv, OPTSTRING, longopts, 0); - switch (c) - { - case EOF: - /* Fall through the bottom of the loop. */ - break; - - case OPT_HELP: - usage (0); - break; - - case OPT_VERSION: - printf ("grub (GNU GRUB " VERSION ")\n"); - exit (0); - break; - - case OPT_HOLD: - if (! optarg) - hold = -1; - else - hold = atoi (optarg); - break; - - case OPT_CONFIG_FILE: - strncpy (config_file, optarg, 127); /* FIXME: arbitrary */ - config_file[127] = '\0'; - break; - - case OPT_INSTALL_PARTITION: - install_partition = strtoul (optarg, 0, 0); - if (install_partition == ULONG_MAX) - { - perror ("strtoul"); - exit (1); - } - break; - - case OPT_BOOT_DRIVE: - boot_drive = strtoul (optarg, 0, 0); - if (boot_drive == ULONG_MAX) - { - perror ("strtoul"); - exit (1); - } - if (boot_drive >= NUM_DISKS) - { - fprintf (stderr, "boot_drive should be from 0 to %d\n", - NUM_DISKS - 1); - exit (1); - } - break; - - case OPT_NO_CONFIG_FILE: - use_config_file = 0; - break; - - case OPT_NO_CURSES: - use_curses = 0; - break; - - case OPT_NO_PAGER: - use_pager = 0; - break; - - case OPT_BATCH: - /* This is the same as "--no-config-file --no-curses --no-pager". */ - use_config_file = 0; - use_curses = 0; - use_pager = 0; - break; - - case OPT_READ_ONLY: - read_only = 1; - break; - - case OPT_VERBOSE: - verbose = 1; - break; - - case OPT_NO_FLOPPY: - floppy_disks = 0; - break; - - case OPT_PROBE_SECOND_FLOPPY: - floppy_disks = 2; - break; - - case OPT_DEVICE_MAP: - device_map_file = strdup (optarg); - break; - - case OPT_PRESET_MENU: - use_preset_menu = 1; - break; - - default: - usage (1); - } - } - while (c != EOF); - - /* Wait until the HOLD variable is cleared by an attached debugger. */ - if (hold && verbose) - printf ("Run \"gdb %s %d\", and set HOLD to zero.\n", - program_name, (int) getpid ()); - while (hold) - { - if (hold > 0) - hold--; - - sleep (1); - } - - /* If we don't have curses (!HAVE_LIBCURSES or --no-curses or - --batch) put terminal to dumb for better handling of line i/o */ - if (! use_curses) - current_term->flags = TERM_NO_EDIT | TERM_DUMB; - - /* Transfer control to the stage2 simulator. */ - exit (grub_stage2 ()); -} diff --git a/install-sh b/install-sh deleted file mode 100644 index 6ebe46de6..000000000 --- a/install-sh +++ /dev/null @@ -1,323 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2004-12-17.09 - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. It can only install one file at a time, a restriction -# shared with many OS's install programs. - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" - -# put in absolute paths if you don't have them in your path; or use env. vars. - -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" - -chmodcmd="$chmodprog 0755" -chowncmd= -chgrpcmd= -stripcmd= -rmcmd="$rmprog -f" -mvcmd="$mvprog" -src= -dst= -dir_arg= -dstarg= -no_target_directory= - -usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: --c (ignored) --d create directories instead of installing files. --g GROUP $chgrpprog installed files to GROUP. --m MODE $chmodprog installed files to MODE. --o USER $chownprog installed files to USER. --s $stripprog installed files. --t DIRECTORY install into DIRECTORY. --T report an error if DSTFILE is a directory. ---help display this help and exit. ---version display version info and exit. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG -" - -while test -n "$1"; do - case $1 in - -c) shift - continue;; - - -d) dir_arg=true - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - --help) echo "$usage"; exit 0;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -s) stripcmd=$stripprog - shift - continue;; - - -t) dstarg=$2 - shift - shift - continue;; - - -T) no_target_directory=true - shift - continue;; - - --version) echo "$0 $scriptversion"; exit 0;; - - *) # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - test -n "$dir_arg$dstarg" && break - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dstarg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dstarg" - shift # fnord - fi - shift # arg - dstarg=$arg - done - break;; - esac -done - -if test -z "$1"; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call `install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -for src -do - # Protect names starting with `-'. - case $src in - -*) src=./$src ;; - esac - - if test -n "$dir_arg"; then - dst=$src - src= - - if test -d "$dst"; then - mkdircmd=: - chmodcmd= - else - mkdircmd=$mkdirprog - fi - else - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dstarg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - - dst=$dstarg - # Protect names starting with `-'. - case $dst in - -*) dst=./$dst ;; - esac - - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. - if test -d "$dst"; then - if test -n "$no_target_directory"; then - echo "$0: $dstarg: Is a directory" >&2 - exit 1 - fi - dst=$dst/`basename "$src"` - fi - fi - - # This sed command emulates the dirname command. - dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` - - # Make sure that the destination directory exists. - - # Skip lots of stat calls in the usual case. - if test ! -d "$dstdir"; then - defaultIFS=' - ' - IFS="${IFS-$defaultIFS}" - - oIFS=$IFS - # Some sh's can't handle IFS=/ for some reason. - IFS='%' - set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` - shift - IFS=$oIFS - - pathcomp= - - while test $# -ne 0 ; do - pathcomp=$pathcomp$1 - shift - if test ! -d "$pathcomp"; then - $mkdirprog "$pathcomp" - # mkdir can fail with a `File exist' error in case several - # install-sh are creating the directory concurrently. This - # is OK. - test -d "$pathcomp" || exit - fi - pathcomp=$pathcomp/ - done - fi - - if test -n "$dir_arg"; then - $doit $mkdircmd "$dst" \ - && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ - && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ - && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ - && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } - - else - dstfile=`basename "$dst"` - - # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - trap '(exit $?); exit' 1 2 13 15 - - # Copy the file name to the temp name. - $doit $cpprog "$src" "$dsttmp" && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ - && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ - && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ - && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && - - # Now rename the file to the real destination. - { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ - || { - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - if test -f "$dstdir/$dstfile"; then - $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ - || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ - || { - echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 - (exit 1); exit 1 - } - else - : - fi - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" - } - } - fi || { (exit 1); exit 1; } -done - -# The final little trick to "correctly" pass the exit status to the exit trap. -{ - (exit 0); exit 0 -} - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/lib/.cvsignore b/lib/.cvsignore deleted file mode 100644 index 63f8570f9..000000000 --- a/lib/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -.deps -Makefile diff --git a/lib/Makefile.am b/lib/Makefile.am deleted file mode 100644 index 645a03f46..000000000 --- a/lib/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -noinst_LIBRARIES = libcommon.a - -AM_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/stage2 \ - -I$(top_srcdir)/stage1 - -libcommon_a_SOURCES = getopt.c getopt1.c getopt.h device.c device.h diff --git a/lib/Makefile.in b/lib/Makefile.in deleted file mode 100644 index 3dae206c2..000000000 --- a/lib/Makefile.in +++ /dev/null @@ -1,416 +0,0 @@ -# Makefile.in generated by automake 1.9.4 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -SOURCES = $(libcommon_a_SOURCES) - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = lib -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -LIBRARIES = $(noinst_LIBRARIES) -AR = ar -ARFLAGS = cru -libcommon_a_AR = $(AR) $(ARFLAGS) -libcommon_a_LIBADD = -am_libcommon_a_OBJECTS = getopt.$(OBJEXT) getopt1.$(OBJEXT) \ - device.$(OBJEXT) -libcommon_a_OBJECTS = $(am_libcommon_a_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libcommon_a_SOURCES) -DIST_SOURCES = $(libcommon_a_SOURCES) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ -BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ -CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ -DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FSYS_CFLAGS = @FSYS_CFLAGS@ -GRUB_CFLAGS = @GRUB_CFLAGS@ -GRUB_LIBS = @GRUB_LIBS@ -HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ -HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ -MAKEINFO = @MAKEINFO@ -NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ -NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ -NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ -NET_CFLAGS = @NET_CFLAGS@ -NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ -OBJCOPY = @OBJCOPY@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PERL = @PERL@ -RANLIB = @RANLIB@ -SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ -SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ -SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ -SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STAGE1_CFLAGS = @STAGE1_CFLAGS@ -STAGE2_CFLAGS = @STAGE2_CFLAGS@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -noinst_LIBRARIES = libcommon.a -AM_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/stage2 \ - -I$(top_srcdir)/stage1 - -libcommon_a_SOURCES = getopt.c getopt1.c getopt.h device.c device.h -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu lib/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -clean-noinstLIBRARIES: - -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) -libcommon.a: $(libcommon_a_OBJECTS) $(libcommon_a_DEPENDENCIES) - -rm -f libcommon.a - $(libcommon_a_AR) libcommon.a $(libcommon_a_OBJECTS) $(libcommon_a_LIBADD) - $(RANLIB) libcommon.a - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/device.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` -uninstall-info-am: - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LIBRARIES) -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES ctags distclean distclean-compile \ - distclean-generic distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-info-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/lib/device.c b/lib/device.c deleted file mode 100644 index d04b54ef7..000000000 --- a/lib/device.c +++ /dev/null @@ -1,950 +0,0 @@ -/* device.c - Some helper functions for OS devices and BIOS drives */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2002,2003,2004,2005 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* Try to use glibc's transparant LFS support. */ -#define _LARGEFILE_SOURCE 1 -/* lseek becomes synonymous with lseek64. */ -#define _FILE_OFFSET_BITS 64 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef __linux__ -# if !defined(__GLIBC__) || \ - ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))) -/* Maybe libc doesn't have large file support. */ -# include /* _llseek */ -# endif /* (GLIBC < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR < 1)) */ -# include /* ioctl */ -# ifndef HDIO_GETGEO -# define HDIO_GETGEO 0x0301 /* get device geometry */ -/* If HDIO_GETGEO is not defined, it is unlikely that hd_geometry is - defined. */ -struct hd_geometry -{ - unsigned char heads; - unsigned char sectors; - unsigned short cylinders; - unsigned long start; -}; -# endif /* ! HDIO_GETGEO */ -# ifndef FLOPPY_MAJOR -# define FLOPPY_MAJOR 2 /* the major number for floppy */ -# endif /* ! FLOPPY_MAJOR */ -# ifndef MAJOR -# define MAJOR(dev) \ - ({ \ - unsigned long long __dev = (dev); \ - (unsigned) ((__dev >> 8) & 0xfff) \ - | ((unsigned int) (__dev >> 32) & ~0xfff); \ - }) -# endif /* ! MAJOR */ -# ifndef CDROM_GET_CAPABILITY -# define CDROM_GET_CAPABILITY 0x5331 /* get capabilities */ -# endif /* ! CDROM_GET_CAPABILITY */ -# ifndef BLKGETSIZE64 -# define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size */ -# endif /* ! BLKGETSIZE64 */ -#endif /* __linux__ */ - -/* Use __FreeBSD_kernel__ instead of __FreeBSD__ for compatibility with - kFreeBSD-based non-FreeBSD systems (e.g. GNU/kFreeBSD) */ -#if defined(__FreeBSD__) && ! defined(__FreeBSD_kernel__) -# define __FreeBSD_kernel__ -#endif -#ifdef __FreeBSD_kernel__ - /* Obtain version of kFreeBSD headers */ -# include -# ifndef __FreeBSD_kernel_version -# define __FreeBSD_kernel_version __FreeBSD_version -# endif - - /* Runtime detection of kernel */ -# include -int -get_kfreebsd_version () -{ - struct utsname uts; - int major; int minor, v[2]; - - uname (&uts); - sscanf (uts.release, "%d.%d", &major, &minor); - - if (major >= 9) - major = 9; - if (major >= 5) - { - v[0] = minor/10; v[1] = minor%10; - } - else - { - v[0] = minor%10; v[1] = minor/10; - } - return major*100000+v[0]*10000+v[1]*1000; -} -#endif /* __FreeBSD_kernel__ */ - -#if defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) -# include /* ioctl */ -# include -# include /* CDIOCCLRDEBUG */ -# if defined(__FreeBSD_kernel__) -# include -# if __FreeBSD_kernel_version >= 500040 -# include -# endif -# endif /* __FreeBSD_kernel__ */ -#endif /* __FreeBSD_kernel__ || __NetBSD__ || __OpenBSD__ */ - -#ifdef HAVE_OPENDISK -# include -#endif /* HAVE_OPENDISK */ - -#define WITHOUT_LIBC_STUBS 1 -#include -#include - -/* Get the geometry of a drive DRIVE. */ -void -get_drive_geometry (struct geometry *geom, char **map, int drive) -{ - int fd; - - if (geom->flags == -1) - { - fd = open (map[drive], O_RDONLY); - assert (fd >= 0); - } - else - fd = geom->flags; - - /* XXX This is the default size. */ - geom->sector_size = SECTOR_SIZE; - -#if defined(__linux__) - /* Linux */ - { - struct hd_geometry hdg; - unsigned long long nr; - - if (ioctl (fd, HDIO_GETGEO, &hdg)) - goto fail; - - if (ioctl (fd, BLKGETSIZE64, &nr)) - goto fail; - - /* Got the geometry, so save it. */ - geom->cylinders = hdg.cylinders; - geom->heads = hdg.heads; - geom->sectors = hdg.sectors; - geom->total_sectors = nr / 512; - - goto success; - } - -#elif defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) -# if defined(__FreeBSD_kernel__) && __FreeBSD_kernel_version >= 500040 - /* kFreeBSD version 5 or later */ - if (get_kfreebsd_version () >= 500040) - { - unsigned int sector_size; - off_t media_size; - unsigned int tmp; - - if(ioctl (fd, DIOCGSECTORSIZE, §or_size) != 0) - sector_size = 512; - - if (ioctl (fd, DIOCGMEDIASIZE, &media_size) != 0) - goto fail; - - geom->total_sectors = media_size / sector_size; - - if (ioctl (fd, DIOCGFWSECTORS, &tmp) == 0) - geom->sectors = tmp; - else - geom->sectors = 63; - if (ioctl (fd, DIOCGFWHEADS, &tmp) == 0) - geom->heads = tmp; - else if (geom->total_sectors <= 63 * 1 * 1024) - geom->heads = 1; - else if (geom->total_sectors <= 63 * 16 * 1024) - geom->heads = 16; - else - geom->heads = 255; - - geom->cylinders = (geom->total_sectors - / geom->heads - / geom->sectors); - - goto success; - } - else -#endif /* defined(__FreeBSD_kernel__) && __FreeBSD_kernel_version >= 500040 */ - - /* kFreeBSD < 5, NetBSD or OpenBSD */ - { - struct disklabel hdg; - if (ioctl (fd, DIOCGDINFO, &hdg)) - goto fail; - - geom->cylinders = hdg.d_ncylinders; - geom->heads = hdg.d_ntracks; - geom->sectors = hdg.d_nsectors; - geom->total_sectors = hdg.d_secperunit; - - goto success; - } - -#else - /* Notably, defined(__GNU__) */ -# warning "Automatic detection of geometries will be performed only \ -partially. This is not fatal." -#endif - - fail: - { - struct stat st; - - /* FIXME: It would be nice to somehow compute fake C/H/S settings, - given a proper st_blocks size. */ - if (drive & 0x80) - { - geom->cylinders = DEFAULT_HD_CYLINDERS; - geom->heads = DEFAULT_HD_HEADS; - geom->sectors = DEFAULT_HD_SECTORS; - } - else - { - geom->cylinders = DEFAULT_FD_CYLINDERS; - geom->heads = DEFAULT_FD_HEADS; - geom->sectors = DEFAULT_FD_SECTORS; - } - - /* Set the total sectors properly, if we can. */ - if (! fstat (fd, &st) && st.st_size) - geom->total_sectors = st.st_size >> SECTOR_BITS; - else - geom->total_sectors = geom->cylinders * geom->heads * geom->sectors; - } - - success: - if (geom->flags == -1) - close (fd); -} - -#ifdef __linux__ -/* Check if we have devfs support. */ -static int -have_devfs (void) -{ - static int dev_devfsd_exists = -1; - - if (dev_devfsd_exists < 0) - { - struct stat st; - - dev_devfsd_exists = stat ("/dev/.devfsd", &st) == 0; - } - - return dev_devfsd_exists; -} -#endif /* __linux__ */ - -/* These three functions are quite different among OSes. */ -static void -get_floppy_disk_name (char *name, int unit) -{ -#if defined(__linux__) - /* GNU/Linux */ - if (have_devfs ()) - sprintf (name, "/dev/floppy/%d", unit); - else - sprintf (name, "/dev/fd%d", unit); -#elif defined(__GNU__) - /* GNU/Hurd */ - sprintf (name, "/dev/fd%d", unit); -#elif defined(__FreeBSD_kernel__) - /* kFreeBSD */ - if (get_kfreebsd_version () >= 400000) - sprintf (name, "/dev/fd%d", unit); - else - sprintf (name, "/dev/rfd%d", unit); -#elif defined(__NetBSD__) - /* NetBSD */ - /* opendisk() doesn't work for floppies. */ - sprintf (name, "/dev/rfd%da", unit); -#elif defined(__OpenBSD__) - /* OpenBSD */ - sprintf (name, "/dev/rfd%dc", unit); -#elif defined(__QNXNTO__) - /* QNX RTP */ - sprintf (name, "/dev/fd%d", unit); -#else -# warning "BIOS floppy drives cannot be guessed in your operating system." - /* Set NAME to a bogus string. */ - *name = 0; -#endif -} - -static void -get_ide_disk_name (char *name, int unit) -{ -#if defined(__linux__) - /* GNU/Linux */ - sprintf (name, "/dev/hd%c", unit + 'a'); -#elif defined(__GNU__) - /* GNU/Hurd */ - sprintf (name, "/dev/hd%d", unit); -#elif defined(__FreeBSD_kernel__) - /* kFreeBSD */ - if (get_kfreebsd_version () >= 400000) - sprintf (name, "/dev/ad%d", unit); - else - sprintf (name, "/dev/rwd%d", unit); -#elif defined(__NetBSD__) && defined(HAVE_OPENDISK) - /* NetBSD */ - char shortname[16]; - int fd; - - sprintf (shortname, "wd%d", unit); - fd = opendisk (shortname, O_RDONLY, name, - 16, /* length of NAME */ - 0 /* char device */ - ); - close (fd); -#elif defined(__OpenBSD__) - /* OpenBSD */ - sprintf (name, "/dev/rwd%dc", unit); -#elif defined(__QNXNTO__) - /* QNX RTP */ - /* Actually, QNX RTP doesn't distinguish IDE from SCSI, so this could - contain SCSI disks. */ - sprintf (name, "/dev/hd%d", unit); -#else -# warning "BIOS IDE drives cannot be guessed in your operating system." - /* Set NAME to a bogus string. */ - *name = 0; -#endif -} - -static void -get_scsi_disk_name (char *name, int unit) -{ -#if defined(__linux__) - /* GNU/Linux */ - sprintf (name, "/dev/sd%c", unit + 'a'); -#elif defined(__GNU__) - /* GNU/Hurd */ - sprintf (name, "/dev/sd%d", unit); -#elif defined(__FreeBSD_kernel__) - /* kFreeBSD */ - if (get_kfreebsd_version () >= 400000) - sprintf (name, "/dev/da%d", unit); - else - sprintf (name, "/dev/rda%d", unit); -#elif defined(__NetBSD__) && defined(HAVE_OPENDISK) - /* NetBSD */ - char shortname[16]; - int fd; - - sprintf (shortname, "sd%d", unit); - fd = opendisk (shortname, O_RDONLY, name, - 16, /* length of NAME */ - 0 /* char device */ - ); - close (fd); -#elif defined(__OpenBSD__) - /* OpenBSD */ - sprintf (name, "/dev/rsd%dc", unit); -#elif defined(__QNXNTO__) - /* QNX RTP */ - /* QNX RTP doesn't distinguish SCSI from IDE, so it is better to - disable the detection of SCSI disks here. */ - *name = 0; -#else -# warning "BIOS SCSI drives cannot be guessed in your operating system." - /* Set NAME to a bogus string. */ - *name = 0; -#endif -} - -#ifdef __linux__ -static void -get_dac960_disk_name (char *name, int controller, int drive) -{ - sprintf (name, "/dev/rd/c%dd%d", controller, drive); -} - -static void -get_ataraid_disk_name (char *name, int unit) -{ - sprintf (name, "/dev/ataraid/d%c", unit + '0'); -} - -static void -get_i2o_disk_name (char *name, char unit) -{ - sprintf (name, "/dev/i2o/hd%c", unit); -} -#endif - -/* Check if DEVICE can be read. If an error occurs, return zero, - otherwise return non-zero. */ -int -check_device (const char *device) -{ - char buf[512]; - FILE *fp; - - /* If DEVICE is empty, just return 1. */ - if (*device == 0) - return 1; - - fp = fopen (device, "r"); - if (! fp) - { - switch (errno) - { -#ifdef ENOMEDIUM - case ENOMEDIUM: -# if 0 - /* At the moment, this finds only CDROMs, which can't be - read anyway, so leave it out. Code should be - reactivated if `removable disks' and CDROMs are - supported. */ - /* Accept it, it may be inserted. */ - return 1; -# endif - break; -#endif /* ENOMEDIUM */ - default: - /* Break case and leave. */ - break; - } - /* Error opening the device. */ - return 0; - } - - /* Make sure CD-ROMs don't get assigned a BIOS disk number - before SCSI disks! */ -#ifdef __linux__ -# ifdef CDROM_GET_CAPABILITY - if (ioctl (fileno (fp), CDROM_GET_CAPABILITY, 0) >= 0) - return 0; -# else /* ! CDROM_GET_CAPABILITY */ - /* Check if DEVICE is a CD-ROM drive by the HDIO_GETGEO ioctl. */ - { - struct hd_geometry hdg; - struct stat st; - - if (fstat (fileno (fp), &st)) - return 0; - - /* If it is a block device and isn't a floppy, check if HDIO_GETGEO - succeeds. */ - if (S_ISBLK (st.st_mode) - && MAJOR (st.st_rdev) != FLOPPY_MAJOR - && ioctl (fileno (fp), HDIO_GETGEO, &hdg)) - return 0; - } -# endif /* ! CDROM_GET_CAPABILITY */ -#endif /* __linux__ */ - -#if defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) -# ifdef CDIOCCLRDEBUG - if (ioctl (fileno (fp), CDIOCCLRDEBUG, 0) >= 0) - return 0; -# endif /* CDIOCCLRDEBUG */ -#endif /* __FreeBSD_kernel__ || __NetBSD__ || __OpenBSD__ */ - - /* Attempt to read the first sector. */ - if (fread (buf, 1, 512, fp) != 512) - { - fclose (fp); - return 0; - } - - fclose (fp); - return 1; -} - -/* Read mapping information from FP, and write it to MAP. */ -static int -read_device_map (FILE *fp, char **map, const char *map_file) -{ - auto void show_error (int no, const char *msg); - auto void show_warning (int no, const char *msg, ...); - - auto void show_error (int no, const char *msg) - { - fprintf (stderr, "%s:%d: error: %s\n", map_file, no, msg); - } - - auto void show_warning (int no, const char *msg, ...) - { - va_list ap; - - va_start (ap, msg); - fprintf (stderr, "%s:%d: warning: ", map_file, no); - vfprintf (stderr, msg, ap); - va_end (ap); - } - - /* If there is the device map file, use the data in it instead of - probing devices. */ - char buf[1024]; /* XXX */ - int line_number = 0; - - while (fgets (buf, sizeof (buf), fp)) - { - char *ptr, *eptr; - int drive; - int is_floppy = 0; - - /* Increase the number of lines. */ - line_number++; - - /* If the first character is '#', skip it. */ - if (buf[0] == '#') - continue; - - ptr = buf; - /* Skip leading spaces. */ - while (*ptr && isspace (*ptr)) - ptr++; - - /* Skip empty lines. */ - if (! *ptr) - continue; - - if (*ptr != '(') - { - show_error (line_number, "No open parenthesis found"); - return 0; - } - - ptr++; - if ((*ptr != 'f' && *ptr != 'h') || *(ptr + 1) != 'd') - { - show_error (line_number, "Bad drive name"); - return 0; - } - - if (*ptr == 'f') - is_floppy = 1; - - ptr += 2; - drive = strtoul (ptr, &ptr, 10); - if (drive < 0) - { - show_error (line_number, "Bad device number"); - return 0; - } - else if (drive > 127) - { - show_warning (line_number, - "Ignoring %cd%d due to a BIOS limitation", - is_floppy ? 'f' : 'h', drive); - continue; - } - - if (! is_floppy) - drive += 0x80; - - if (*ptr != ')') - { - show_error (line_number, "No close parenthesis found"); - return 0; - } - - ptr++; - /* Skip spaces. */ - while (*ptr && isspace (*ptr)) - ptr++; - - if (! *ptr) - { - show_error (line_number, "No filename found"); - return 0; - } - - /* Terminate the filename. */ - eptr = ptr; - while (*eptr && ! isspace (*eptr)) - eptr++; - *eptr = 0; - - /* Multiple entries for a given drive is not allowed. */ - if (map[drive]) - { - show_error (line_number, "Duplicated entry found"); - return 0; - } - - map[drive] = strdup (ptr); - assert (map[drive]); - } - - return 1; -} - -/* Initialize the device map MAP. *MAP will be allocated from the heap - space. If MAP_FILE is not NULL, then read mappings from the file - MAP_FILE if it exists, otherwise, write guessed mappings to the file. - FLOPPY_DISKS is the number of floppy disk drives which will be probed. - If it is zero, don't probe any floppy at all. If it is one, probe one - floppy. If it is two, probe two floppies. And so on. */ -int -init_device_map (char ***map, const char *map_file, int floppy_disks) -{ - int i; - int num_hd = 0; - FILE *fp = 0; - - assert (map); - assert (*map == 0); - *map = malloc (NUM_DISKS * sizeof (char *)); - assert (*map); - - /* Probe devices for creating the device map. */ - - /* Initialize DEVICE_MAP. */ - for (i = 0; i < NUM_DISKS; i++) - (*map)[i] = 0; - - if (map_file) - { - /* Open the device map file. */ - fp = fopen (map_file, "r"); - if (fp) - { - int ret; - - ret = read_device_map (fp, *map, map_file); - fclose (fp); - return ret; - } - } - - /* Print something so that the user does not think GRUB has been - crashed. */ - fprintf (stderr, - "Probing devices to guess BIOS drives. " - "This may take a long time.\n"); - - if (map_file) - /* Try to open the device map file to write the probed data. */ - fp = fopen (map_file, "w"); - - /* Floppies. */ - for (i = 0; i < floppy_disks; i++) - { - char name[16]; - - get_floppy_disk_name (name, i); - /* In floppies, write the map, whether check_device succeeds - or not, because the user just does not insert floppies. */ - if (fp) - fprintf (fp, "(fd%d)\t%s\n", i, name); - - if (check_device (name)) - { - (*map)[i] = strdup (name); - assert ((*map)[i]); - } - } - -#ifdef __linux__ - if (have_devfs ()) - { - while (1) - { - char discn[32]; - char name[PATH_MAX]; - struct stat st; - - /* Linux creates symlinks "/dev/discs/discN" for convenience. - The way to number disks is the same as GRUB's. */ - sprintf (discn, "/dev/discs/disc%d", num_hd); - if (stat (discn, &st) < 0) - break; - - if (realpath (discn, name)) - { - strcat (name, "/disc"); - (*map)[num_hd + 0x80] = strdup (name); - assert ((*map)[num_hd + 0x80]); - - /* If the device map file is opened, write the map. */ - if (fp) - fprintf (fp, "(hd%d)\t%s\n", num_hd, name); - } - - num_hd++; - } - - /* OK, close the device map file if opened. */ - if (fp) - fclose (fp); - - return 1; - } -#endif /* __linux__ */ - - /* IDE disks. */ - for (i = 0; i < 8; i++) - { - char name[16]; - - get_ide_disk_name (name, i); - if (check_device (name)) - { - (*map)[num_hd + 0x80] = strdup (name); - assert ((*map)[num_hd + 0x80]); - - /* If the device map file is opened, write the map. */ - if (fp) - fprintf (fp, "(hd%d)\t%s\n", num_hd, name); - - num_hd++; - } - } - -#ifdef __linux__ - /* ATARAID disks. */ - for (i = 0; i < 8; i++) - { - char name[20]; - - get_ataraid_disk_name (name, i); - if (check_device (name)) - { - (*map)[num_hd + 0x80] = strdup (name); - assert ((*map)[num_hd + 0x80]); - - /* If the device map file is opened, write the map. */ - if (fp) - fprintf (fp, "(hd%d)\t%s\n", num_hd, name); - - num_hd++; - } - } -#endif /* __linux__ */ - - /* The rest is SCSI disks. */ - for (i = 0; i < 16; i++) - { - char name[16]; - - get_scsi_disk_name (name, i); - if (check_device (name)) - { - (*map)[num_hd + 0x80] = strdup (name); - assert ((*map)[num_hd + 0x80]); - - /* If the device map file is opened, write the map. */ - if (fp) - fprintf (fp, "(hd%d)\t%s\n", num_hd, name); - - num_hd++; - } - } - -#ifdef __linux__ - /* This is for DAC960 - we have - /dev/rd/cdp. - - DAC960 driver currently supports up to 8 controllers, 32 logical - drives, and 7 partitions. */ - { - int controller, drive; - - for (controller = 0; controller < 8; controller++) - { - for (drive = 0; drive < 15; drive++) - { - char name[24]; - - get_dac960_disk_name (name, controller, drive); - if (check_device (name)) - { - (*map)[num_hd + 0x80] = strdup (name); - assert ((*map)[num_hd + 0x80]); - - /* If the device map file is opened, write the map. */ - if (fp) - fprintf (fp, "(hd%d)\t%s\n", num_hd, name); - - num_hd++; - } - } - } - } - - /* This is for I2O - we have /dev/i2o/hd */ - { - int unit; - - for (unit = 'a'; unit < 'f'; unit++) - { - char name[24]; - - get_i2o_disk_name (name, unit); - if (check_device (name)) - { - (*map)[num_hd + 0x80] = strdup (name); - assert ((*map)[num_hd + 0x80]); - - /* If the device map file is opened, write the map. */ - if (fp) - fprintf (fp, "(hd%d)\t%s\n", num_hd, name); - - num_hd++; - } - } - } -#endif /* __linux__ */ - - /* OK, close the device map file if opened. */ - if (fp) - fclose (fp); - - return 1; -} - -/* Restore the memory consumed for MAP. */ -void -restore_device_map (char **map) -{ - int i; - - for (i = 0; i < NUM_DISKS; i++) - if (map[i]) - free (map[i]); - - free (map); -} - -#ifdef __linux__ -/* Linux-only functions, because Linux has a bug that the disk cache for - a whole disk is not consistent with the one for a partition of the - disk. */ -int -is_disk_device (char **map, int drive) -{ - struct stat st; - - assert (map[drive] != 0); - assert (stat (map[drive], &st) == 0); - /* For now, disk devices under Linux are all block devices. */ - return S_ISBLK (st.st_mode); -} - -int -write_to_partition (char **map, int drive, int partition, - int sector, int size, const char *buf) -{ - char dev[PATH_MAX]; /* XXX */ - int fd; - - if ((partition & 0x00FF00) != 0x00FF00) - { - /* If the partition is a BSD partition, it is difficult to - obtain the representation in Linux. So don't support that. */ - errnum = ERR_DEV_VALUES; - return 1; - } - - assert (map[drive] != 0); - - strcpy (dev, map[drive]); - if (have_devfs ()) - { - if (strcmp (dev + strlen(dev) - 5, "/disc") == 0) - strcpy (dev + strlen(dev) - 5, "/part"); - } - else - { - if ((strncmp (dev, "/dev/ataraid/", 13) == 0) || - (strncmp (dev, "/dev/rd/", 8) == 0)) - strcpy (dev + strlen(dev), "p"); - } - sprintf (dev + strlen(dev), "%d", ((partition >> 16) & 0xFF) + 1); - - /* Open the partition. */ - fd = open (dev, O_RDWR); - if (fd < 0) - { - errnum = ERR_NO_PART; - return 0; - } - -#if defined(__linux__) && (!defined(__GLIBC__) || \ - ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1)))) - /* Maybe libc doesn't have large file support. */ - { - loff_t offset, result; - static int _llseek (uint filedes, ulong hi, ulong lo, - loff_t *res, uint wh); - _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo, - loff_t *, res, uint, wh); - - offset = (loff_t) sector * (loff_t) SECTOR_SIZE; - if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET)) - { - errnum = ERR_DEV_VALUES; - return 0; - } - } -#else - { - off_t offset = (off_t) sector * (off_t) SECTOR_SIZE; - - if (lseek (fd, offset, SEEK_SET) != offset) - { - errnum = ERR_DEV_VALUES; - return 0; - } - } -#endif - - if (write (fd, buf, size * SECTOR_SIZE) != (size * SECTOR_SIZE)) - { - close (fd); - errnum = ERR_WRITE; - return 0; - } - - sync (); /* Paranoia. */ - close (fd); - - return 1; -} -#endif /* __linux__ */ diff --git a/lib/device.h b/lib/device.h deleted file mode 100644 index 02ffce8e8..000000000 --- a/lib/device.h +++ /dev/null @@ -1,48 +0,0 @@ -/* device.h - Define macros and declare prototypes for device.c */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef DEVICE_MAP_HEADER -#define DEVICE_MAP_HEADER 1 - -/* The maximum number of BIOS disks. */ -#define NUM_DISKS 256 - -/* Simulated disk sizes. */ -#define DEFAULT_FD_CYLINDERS 80 -#define DEFAULT_FD_HEADS 2 -#define DEFAULT_FD_SECTORS 18 -#define DEFAULT_HD_CYLINDERS 620 -#define DEFAULT_HD_HEADS 128 -#define DEFAULT_HD_SECTORS 63 - -/* Function prototypes. */ -extern void get_drive_geometry (struct geometry *geom, char **map, int drive); -extern int check_device (const char *device); -extern int init_device_map (char ***map, const char *map_file, - int no_floppies); -extern void restore_device_map (char **map); - -#ifdef __linux__ -extern int is_disk_device (char **map, int drive); -extern int write_to_partition (char **map, int drive, int partition, - int offset, int size, const char *buf); -#endif /* __linux__ */ - -#endif /* DEVICE_MAP_HEADER */ diff --git a/lib/getopt.c b/lib/getopt.c deleted file mode 100644 index 04905fd35..000000000 --- a/lib/getopt.c +++ /dev/null @@ -1,1053 +0,0 @@ -/* Getopt for GNU. - NOTE: getopt is now part of the C library, so if you don't know what - "Keep this file name-space clean" means, talk to drepper@gnu.org - before changing it! - - Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98 - Free Software Foundation, Inc. - - NOTE: The canonical source of this file is maintained with the GNU C Library. - Bugs can be reported to bug-glibc@gnu.org. - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - USA. */ - -/* This tells Alpha OSF/1 not to define a getopt prototype in . - Ditto for AIX 3.2 and . */ -#ifndef _NO_PROTO -# define _NO_PROTO -#endif - -#ifdef HAVE_CONFIG_H -# include -#endif - -#if !defined __STDC__ || !__STDC__ -/* This is a separate conditional since some stdc systems - reject `defined (const)'. */ -# ifndef const -# define const -# endif -#endif - -#include - -/* Comment out all this code if we are using the GNU C Library, and are not - actually compiling the library itself. This code is part of the GNU C - Library, but also included in many other GNU distributions. Compiling - and linking in this code is a waste when using the GNU C library - (especially if it is a shared library). Rather than having every GNU - program understand `configure --with-gnu-libc' and omit the object files, - it is simpler to just do this in the source for each such file. */ - -#define GETOPT_INTERFACE_VERSION 2 -#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 -# include -# if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION -# define ELIDE_CODE -# endif -#endif - -#ifndef ELIDE_CODE - - -/* This needs to come after some library #include - to get __GNU_LIBRARY__ defined. */ -#ifdef __GNU_LIBRARY__ -/* Don't include stdlib.h for non-GNU C libraries because some of them - contain conflicting prototypes for getopt. */ -# include -# include -#endif /* GNU C library. */ - -#ifdef VMS -# include -# if HAVE_STRING_H - 0 -# include -# endif -#endif - -#ifndef _ -/* This is for other GNU distributions with internationalized messages. - When compiling libc, the _ macro is predefined. */ -# ifdef HAVE_LIBINTL_H -# include -# define _(msgid) gettext (msgid) -# else -# define _(msgid) (msgid) -# endif -#endif - -/* This version of `getopt' appears to the caller like standard Unix `getopt' - but it behaves differently for the user, since it allows the user - to intersperse the options with the other arguments. - - As `getopt' works, it permutes the elements of ARGV so that, - when it is done, all the options precede everything else. Thus - all application programs are extended to handle flexible argument order. - - Setting the environment variable POSIXLY_CORRECT disables permutation. - Then the behavior is completely standard. - - GNU application programs can use a third alternative mode in which - they can distinguish the relative order of options and other arguments. */ - -#include "getopt.h" - -/* For communication from `getopt' to the caller. - When `getopt' finds an option that takes an argument, - the argument value is returned here. - Also, when `ordering' is RETURN_IN_ORDER, - each non-option ARGV-element is returned here. */ - -char *optarg = NULL; - -/* Index in ARGV of the next element to be scanned. - This is used for communication to and from the caller - and for communication between successive calls to `getopt'. - - On entry to `getopt', zero means this is the first call; initialize. - - When `getopt' returns -1, this is the index of the first of the - non-option elements that the caller should itself scan. - - Otherwise, `optind' communicates from one call to the next - how much of ARGV has been scanned so far. */ - -/* 1003.2 says this must be 1 before any call. */ -int optind = 1; - -/* Formerly, initialization of getopt depended on optind==0, which - causes problems with re-calling getopt as programs generally don't - know that. */ - -int __getopt_initialized = 0; - -/* The next char to be scanned in the option-element - in which the last option character we returned was found. - This allows us to pick up the scan where we left off. - - If this is zero, or a null string, it means resume the scan - by advancing to the next ARGV-element. */ - -static char *nextchar; - -/* Callers store zero here to inhibit the error message - for unrecognized options. */ - -int opterr = 1; - -/* Set to an option character which was unrecognized. - This must be initialized on some systems to avoid linking in the - system's own getopt implementation. */ - -int optopt = '?'; - -/* Describe how to deal with options that follow non-option ARGV-elements. - - If the caller did not specify anything, - the default is REQUIRE_ORDER if the environment variable - POSIXLY_CORRECT is defined, PERMUTE otherwise. - - REQUIRE_ORDER means don't recognize them as options; - stop option processing when the first non-option is seen. - This is what Unix does. - This mode of operation is selected by either setting the environment - variable POSIXLY_CORRECT, or using `+' as the first character - of the list of option characters. - - PERMUTE is the default. We permute the contents of ARGV as we scan, - so that eventually all the non-options are at the end. This allows options - to be given in any order, even with programs that were not written to - expect this. - - RETURN_IN_ORDER is an option available to programs that were written - to expect options and other ARGV-elements in any order and that care about - the ordering of the two. We describe each non-option ARGV-element - as if it were the argument of an option with character code 1. - Using `-' as the first character of the list of option characters - selects this mode of operation. - - The special argument `--' forces an end of option-scanning regardless - of the value of `ordering'. In the case of RETURN_IN_ORDER, only - `--' can cause `getopt' to return -1 with `optind' != ARGC. */ - -static enum -{ - REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER -} ordering; - -/* Value of POSIXLY_CORRECT environment variable. */ -static char *posixly_correct; - -#ifdef __GNU_LIBRARY__ -/* We want to avoid inclusion of string.h with non-GNU libraries - because there are many ways it can cause trouble. - On some systems, it contains special magic macros that don't work - in GCC. */ -# include -# define my_index strchr -#else - -# if HAVE_STRING_H -# include -# else -# include -# endif - -/* Avoid depending on library functions or files - whose names are inconsistent. */ - -#ifndef getenv -extern char *getenv (); -#endif - -static char * -my_index (str, chr) - const char *str; - int chr; -{ - while (*str) - { - if (*str == chr) - return (char *) str; - str++; - } - return 0; -} - -/* If using GCC, we can safely declare strlen this way. - If not using GCC, it is ok not to declare it. */ -#ifdef __GNUC__ -/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. - That was relevant to code that was here before. */ -# if (!defined __STDC__ || !__STDC__) && !defined strlen -/* gcc with -traditional declares the built-in strlen to return int, - and has done so at least since version 2.4.5. -- rms. */ -extern int strlen (const char *); -# endif /* not __STDC__ */ -#endif /* __GNUC__ */ - -#endif /* not __GNU_LIBRARY__ */ - -/* Handle permutation of arguments. */ - -/* Describe the part of ARGV that contains non-options that have - been skipped. `first_nonopt' is the index in ARGV of the first of them; - `last_nonopt' is the index after the last of them. */ - -static int first_nonopt; -static int last_nonopt; - -#ifdef _LIBC -/* Bash 2.0 gives us an environment variable containing flags - indicating ARGV elements that should not be considered arguments. */ - -/* Defined in getopt_init.c */ -extern char *__getopt_nonoption_flags; - -static int nonoption_flags_max_len; -static int nonoption_flags_len; - -static int original_argc; -static char *const *original_argv; - -/* Make sure the environment variable bash 2.0 puts in the environment - is valid for the getopt call we must make sure that the ARGV passed - to getopt is that one passed to the process. */ -static void -__attribute__ ((unused)) -store_args_and_env (int argc, char *const *argv) -{ - /* XXX This is no good solution. We should rather copy the args so - that we can compare them later. But we must not use malloc(3). */ - original_argc = argc; - original_argv = argv; -} -# ifdef text_set_element -text_set_element (__libc_subinit, store_args_and_env); -# endif /* text_set_element */ - -# define SWAP_FLAGS(ch1, ch2) \ - if (nonoption_flags_len > 0) \ - { \ - char __tmp = __getopt_nonoption_flags[ch1]; \ - __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ - __getopt_nonoption_flags[ch2] = __tmp; \ - } -#else /* !_LIBC */ -# define SWAP_FLAGS(ch1, ch2) -#endif /* _LIBC */ - -/* Exchange two adjacent subsequences of ARGV. - One subsequence is elements [first_nonopt,last_nonopt) - which contains all the non-options that have been skipped so far. - The other is elements [last_nonopt,optind), which contains all - the options processed since those non-options were skipped. - - `first_nonopt' and `last_nonopt' are relocated so that they describe - the new indices of the non-options in ARGV after they are moved. */ - -#if defined __STDC__ && __STDC__ -static void exchange (char **); -#endif - -static void -exchange (argv) - char **argv; -{ - int bottom = first_nonopt; - int middle = last_nonopt; - int top = optind; - char *tem; - - /* Exchange the shorter segment with the far end of the longer segment. - That puts the shorter segment into the right place. - It leaves the longer segment in the right place overall, - but it consists of two parts that need to be swapped next. */ - -#ifdef _LIBC - /* First make sure the handling of the `__getopt_nonoption_flags' - string can work normally. Our top argument must be in the range - of the string. */ - if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) - { - /* We must extend the array. The user plays games with us and - presents new arguments. */ - char *new_str = malloc (top + 1); - if (new_str == NULL) - nonoption_flags_len = nonoption_flags_max_len = 0; - else - { - memset (__mempcpy (new_str, __getopt_nonoption_flags, - nonoption_flags_max_len), - '\0', top + 1 - nonoption_flags_max_len); - nonoption_flags_max_len = top + 1; - __getopt_nonoption_flags = new_str; - } - } -#endif - - while (top > middle && middle > bottom) - { - if (top - middle > middle - bottom) - { - /* Bottom segment is the short one. */ - int len = middle - bottom; - register int i; - - /* Swap it with the top part of the top segment. */ - for (i = 0; i < len; i++) - { - tem = argv[bottom + i]; - argv[bottom + i] = argv[top - (middle - bottom) + i]; - argv[top - (middle - bottom) + i] = tem; - SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); - } - /* Exclude the moved bottom segment from further swapping. */ - top -= len; - } - else - { - /* Top segment is the short one. */ - int len = top - middle; - register int i; - - /* Swap it with the bottom part of the bottom segment. */ - for (i = 0; i < len; i++) - { - tem = argv[bottom + i]; - argv[bottom + i] = argv[middle + i]; - argv[middle + i] = tem; - SWAP_FLAGS (bottom + i, middle + i); - } - /* Exclude the moved top segment from further swapping. */ - bottom += len; - } - } - - /* Update records for the slots the non-options now occupy. */ - - first_nonopt += (optind - last_nonopt); - last_nonopt = optind; -} - -/* Initialize the internal data when the first call is made. */ - -#if defined __STDC__ && __STDC__ -static const char *_getopt_initialize (int, char *const *, const char *); -#endif -static const char * -_getopt_initialize (argc, argv, optstring) - int argc; - char *const *argv; - const char *optstring; -{ - /* Start processing options with ARGV-element 1 (since ARGV-element 0 - is the program name); the sequence of previously skipped - non-option ARGV-elements is empty. */ - - first_nonopt = last_nonopt = optind; - - nextchar = NULL; - - posixly_correct = getenv ("POSIXLY_CORRECT"); - - /* Determine how to handle the ordering of options and nonoptions. */ - - if (optstring[0] == '-') - { - ordering = RETURN_IN_ORDER; - ++optstring; - } - else if (optstring[0] == '+') - { - ordering = REQUIRE_ORDER; - ++optstring; - } - else if (posixly_correct != NULL) - ordering = REQUIRE_ORDER; - else - ordering = PERMUTE; - -#ifdef _LIBC - if (posixly_correct == NULL - && argc == original_argc && argv == original_argv) - { - if (nonoption_flags_max_len == 0) - { - if (__getopt_nonoption_flags == NULL - || __getopt_nonoption_flags[0] == '\0') - nonoption_flags_max_len = -1; - else - { - const char *orig_str = __getopt_nonoption_flags; - int len = nonoption_flags_max_len = strlen (orig_str); - if (nonoption_flags_max_len < argc) - nonoption_flags_max_len = argc; - __getopt_nonoption_flags = - (char *) malloc (nonoption_flags_max_len); - if (__getopt_nonoption_flags == NULL) - nonoption_flags_max_len = -1; - else - memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), - '\0', nonoption_flags_max_len - len); - } - } - nonoption_flags_len = nonoption_flags_max_len; - } - else - nonoption_flags_len = 0; -#endif - - return optstring; -} - -/* Scan elements of ARGV (whose length is ARGC) for option characters - given in OPTSTRING. - - If an element of ARGV starts with '-', and is not exactly "-" or "--", - then it is an option element. The characters of this element - (aside from the initial '-') are option characters. If `getopt' - is called repeatedly, it returns successively each of the option characters - from each of the option elements. - - If `getopt' finds another option character, it returns that character, - updating `optind' and `nextchar' so that the next call to `getopt' can - resume the scan with the following option character or ARGV-element. - - If there are no more option characters, `getopt' returns -1. - Then `optind' is the index in ARGV of the first ARGV-element - that is not an option. (The ARGV-elements have been permuted - so that those that are not options now come last.) - - OPTSTRING is a string containing the legitimate option characters. - If an option character is seen that is not listed in OPTSTRING, - return '?' after printing an error message. If you set `opterr' to - zero, the error message is suppressed but we still return '?'. - - If a char in OPTSTRING is followed by a colon, that means it wants an arg, - so the following text in the same ARGV-element, or the text of the following - ARGV-element, is returned in `optarg'. Two colons mean an option that - wants an optional arg; if there is text in the current ARGV-element, - it is returned in `optarg', otherwise `optarg' is set to zero. - - If OPTSTRING starts with `-' or `+', it requests different methods of - handling the non-option ARGV-elements. - See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. - - Long-named options begin with `--' instead of `-'. - Their names may be abbreviated as long as the abbreviation is unique - or is an exact match for some defined option. If they have an - argument, it follows the option name in the same ARGV-element, separated - from the option name by a `=', or else the in next ARGV-element. - When `getopt' finds a long-named option, it returns 0 if that option's - `flag' field is nonzero, the value of the option's `val' field - if the `flag' field is zero. - - The elements of ARGV aren't really const, because we permute them. - But we pretend they're const in the prototype to be compatible - with other systems. - - LONGOPTS is a vector of `struct option' terminated by an - element containing a name which is zero. - - LONGIND returns the index in LONGOPT of the long-named option found. - It is only valid when a long-named option has been found by the most - recent call. - - If LONG_ONLY is nonzero, '-' as well as '--' can introduce - long-named options. */ - -int -_getopt_internal (argc, argv, optstring, longopts, longind, long_only) - int argc; - char *const *argv; - const char *optstring; - const struct option *longopts; - int *longind; - int long_only; -{ - optarg = NULL; - - if (optind == 0 || !__getopt_initialized) - { - if (optind == 0) - optind = 1; /* Don't scan ARGV[0], the program name. */ - optstring = _getopt_initialize (argc, argv, optstring); - __getopt_initialized = 1; - } - - /* Test whether ARGV[optind] points to a non-option argument. - Either it does not have option syntax, or there is an environment flag - from the shell indicating it is not an option. The later information - is only used when the used in the GNU libc. */ -#ifdef _LIBC -# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ - || (optind < nonoption_flags_len \ - && __getopt_nonoption_flags[optind] == '1')) -#else -# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') -#endif - - if (nextchar == NULL || *nextchar == '\0') - { - /* Advance to the next ARGV-element. */ - - /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been - moved back by the user (who may also have changed the arguments). */ - if (last_nonopt > optind) - last_nonopt = optind; - if (first_nonopt > optind) - first_nonopt = optind; - - if (ordering == PERMUTE) - { - /* If we have just processed some options following some non-options, - exchange them so that the options come first. */ - - if (first_nonopt != last_nonopt && last_nonopt != optind) - exchange ((char **) argv); - else if (last_nonopt != optind) - first_nonopt = optind; - - /* Skip any additional non-options - and extend the range of non-options previously skipped. */ - - while (optind < argc && NONOPTION_P) - optind++; - last_nonopt = optind; - } - - /* The special ARGV-element `--' means premature end of options. - Skip it like a null option, - then exchange with previous non-options as if it were an option, - then skip everything else like a non-option. */ - - if (optind != argc && !strcmp (argv[optind], "--")) - { - optind++; - - if (first_nonopt != last_nonopt && last_nonopt != optind) - exchange ((char **) argv); - else if (first_nonopt == last_nonopt) - first_nonopt = optind; - last_nonopt = argc; - - optind = argc; - } - - /* If we have done all the ARGV-elements, stop the scan - and back over any non-options that we skipped and permuted. */ - - if (optind == argc) - { - /* Set the next-arg-index to point at the non-options - that we previously skipped, so the caller will digest them. */ - if (first_nonopt != last_nonopt) - optind = first_nonopt; - return -1; - } - - /* If we have come to a non-option and did not permute it, - either stop the scan or describe it to the caller and pass it by. */ - - if (NONOPTION_P) - { - if (ordering == REQUIRE_ORDER) - return -1; - optarg = argv[optind++]; - return 1; - } - - /* We have found another option-ARGV-element. - Skip the initial punctuation. */ - - nextchar = (argv[optind] + 1 - + (longopts != NULL && argv[optind][1] == '-')); - } - - /* Decode the current option-ARGV-element. */ - - /* Check whether the ARGV-element is a long option. - - If long_only and the ARGV-element has the form "-f", where f is - a valid short option, don't consider it an abbreviated form of - a long option that starts with f. Otherwise there would be no - way to give the -f short option. - - On the other hand, if there's a long option "fubar" and - the ARGV-element is "-fu", do consider that an abbreviation of - the long option, just like "--fu", and not "-f" with arg "u". - - This distinction seems to be the most useful approach. */ - - if (longopts != NULL - && (argv[optind][1] == '-' - || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) - { - char *nameend; - const struct option *p; - const struct option *pfound = NULL; - int exact = 0; - int ambig = 0; - int indfound = -1; - int option_index; - - for (nameend = nextchar; *nameend && *nameend != '='; nameend++) - /* Do nothing. */ ; - - /* Test all long options for either exact match - or abbreviated matches. */ - for (p = longopts, option_index = 0; p->name; p++, option_index++) - if (!strncmp (p->name, nextchar, nameend - nextchar)) - { - if ((unsigned int) (nameend - nextchar) - == (unsigned int) strlen (p->name)) - { - /* Exact match found. */ - pfound = p; - indfound = option_index; - exact = 1; - break; - } - else if (pfound == NULL) - { - /* First nonexact match found. */ - pfound = p; - indfound = option_index; - } - else - /* Second or later nonexact match found. */ - ambig = 1; - } - - if (ambig && !exact) - { - if (opterr) - fprintf (stderr, _("%s: option `%s' is ambiguous\n"), - argv[0], argv[optind]); - nextchar += strlen (nextchar); - optind++; - optopt = 0; - return '?'; - } - - if (pfound != NULL) - { - option_index = indfound; - optind++; - if (*nameend) - { - /* Don't test has_arg with >, because some C compilers don't - allow it to be used on enums. */ - if (pfound->has_arg) - optarg = nameend + 1; - else - { - if (opterr) - { - if (argv[optind - 1][1] == '-') - /* --option */ - fprintf (stderr, - _("%s: option `--%s' doesn't allow an argument\n"), - argv[0], pfound->name); - else - /* +option or -option */ - fprintf (stderr, - _("%s: option `%c%s' doesn't allow an argument\n"), - argv[0], argv[optind - 1][0], pfound->name); - } - nextchar += strlen (nextchar); - - optopt = pfound->val; - return '?'; - } - } - else if (pfound->has_arg == 1) - { - if (optind < argc) - optarg = argv[optind++]; - else - { - if (opterr) - fprintf (stderr, - _("%s: option `%s' requires an argument\n"), - argv[0], argv[optind - 1]); - nextchar += strlen (nextchar); - optopt = pfound->val; - return optstring[0] == ':' ? ':' : '?'; - } - } - nextchar += strlen (nextchar); - if (longind != NULL) - *longind = option_index; - if (pfound->flag) - { - *(pfound->flag) = pfound->val; - return 0; - } - return pfound->val; - } - - /* Can't find it as a long option. If this is not getopt_long_only, - or the option starts with '--' or is not a valid short - option, then it's an error. - Otherwise interpret it as a short option. */ - if (!long_only || argv[optind][1] == '-' - || my_index (optstring, *nextchar) == NULL) - { - if (opterr) - { - if (argv[optind][1] == '-') - /* --option */ - fprintf (stderr, _("%s: unrecognized option `--%s'\n"), - argv[0], nextchar); - else - /* +option or -option */ - fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), - argv[0], argv[optind][0], nextchar); - } - nextchar = (char *) ""; - optind++; - optopt = 0; - return '?'; - } - } - - /* Look at and handle the next short option-character. */ - - { - char c = *nextchar++; - char *temp = my_index (optstring, c); - - /* Increment `optind' when we start to process its last character. */ - if (*nextchar == '\0') - ++optind; - - if (temp == NULL || c == ':') - { - if (opterr) - { - if (posixly_correct) - /* 1003.2 specifies the format of this message. */ - fprintf (stderr, _("%s: illegal option -- %c\n"), - argv[0], c); - else - fprintf (stderr, _("%s: invalid option -- %c\n"), - argv[0], c); - } - optopt = c; - return '?'; - } - /* Convenience. Treat POSIX -W foo same as long option --foo */ - if (temp[0] == 'W' && temp[1] == ';') - { - char *nameend; - const struct option *p; - const struct option *pfound = NULL; - int exact = 0; - int ambig = 0; - int indfound = 0; - int option_index; - - /* This is an option that requires an argument. */ - if (*nextchar != '\0') - { - optarg = nextchar; - /* If we end this ARGV-element by taking the rest as an arg, - we must advance to the next element now. */ - optind++; - } - else if (optind == argc) - { - if (opterr) - { - /* 1003.2 specifies the format of this message. */ - fprintf (stderr, _("%s: option requires an argument -- %c\n"), - argv[0], c); - } - optopt = c; - if (optstring[0] == ':') - c = ':'; - else - c = '?'; - return c; - } - else - /* We already incremented `optind' once; - increment it again when taking next ARGV-elt as argument. */ - optarg = argv[optind++]; - - /* optarg is now the argument, see if it's in the - table of longopts. */ - - for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++) - /* Do nothing. */ ; - - /* Test all long options for either exact match - or abbreviated matches. */ - for (p = longopts, option_index = 0; p->name; p++, option_index++) - if (!strncmp (p->name, nextchar, nameend - nextchar)) - { - if ((unsigned int) (nameend - nextchar) == strlen (p->name)) - { - /* Exact match found. */ - pfound = p; - indfound = option_index; - exact = 1; - break; - } - else if (pfound == NULL) - { - /* First nonexact match found. */ - pfound = p; - indfound = option_index; - } - else - /* Second or later nonexact match found. */ - ambig = 1; - } - if (ambig && !exact) - { - if (opterr) - fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), - argv[0], argv[optind]); - nextchar += strlen (nextchar); - optind++; - return '?'; - } - if (pfound != NULL) - { - option_index = indfound; - if (*nameend) - { - /* Don't test has_arg with >, because some C compilers don't - allow it to be used on enums. */ - if (pfound->has_arg) - optarg = nameend + 1; - else - { - if (opterr) - fprintf (stderr, _("\ -%s: option `-W %s' doesn't allow an argument\n"), - argv[0], pfound->name); - - nextchar += strlen (nextchar); - return '?'; - } - } - else if (pfound->has_arg == 1) - { - if (optind < argc) - optarg = argv[optind++]; - else - { - if (opterr) - fprintf (stderr, - _("%s: option `%s' requires an argument\n"), - argv[0], argv[optind - 1]); - nextchar += strlen (nextchar); - return optstring[0] == ':' ? ':' : '?'; - } - } - nextchar += strlen (nextchar); - if (longind != NULL) - *longind = option_index; - if (pfound->flag) - { - *(pfound->flag) = pfound->val; - return 0; - } - return pfound->val; - } - nextchar = NULL; - return 'W'; /* Let the application handle it. */ - } - if (temp[1] == ':') - { - if (temp[2] == ':') - { - /* This is an option that accepts an argument optionally. */ - if (*nextchar != '\0') - { - optarg = nextchar; - optind++; - } - else - optarg = NULL; - nextchar = NULL; - } - else - { - /* This is an option that requires an argument. */ - if (*nextchar != '\0') - { - optarg = nextchar; - /* If we end this ARGV-element by taking the rest as an arg, - we must advance to the next element now. */ - optind++; - } - else if (optind == argc) - { - if (opterr) - { - /* 1003.2 specifies the format of this message. */ - fprintf (stderr, - _("%s: option requires an argument -- %c\n"), - argv[0], c); - } - optopt = c; - if (optstring[0] == ':') - c = ':'; - else - c = '?'; - } - else - /* We already incremented `optind' once; - increment it again when taking next ARGV-elt as argument. */ - optarg = argv[optind++]; - nextchar = NULL; - } - } - return c; - } -} - -int -getopt (argc, argv, optstring) - int argc; - char *const *argv; - const char *optstring; -{ - return _getopt_internal (argc, argv, optstring, - (const struct option *) 0, - (int *) 0, - 0); -} - -#endif /* Not ELIDE_CODE. */ - -#ifdef TEST - -/* Compile with -DTEST to make an executable for use in testing - the above definition of `getopt'. */ - -int -main (argc, argv) - int argc; - char **argv; -{ - int c; - int digit_optind = 0; - - while (1) - { - int this_option_optind = optind ? optind : 1; - - c = getopt (argc, argv, "abc:d:0123456789"); - if (c == -1) - break; - - switch (c) - { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - if (digit_optind != 0 && digit_optind != this_option_optind) - printf ("digits occur in two different argv-elements.\n"); - digit_optind = this_option_optind; - printf ("option %c\n", c); - break; - - case 'a': - printf ("option a\n"); - break; - - case 'b': - printf ("option b\n"); - break; - - case 'c': - printf ("option c with value `%s'\n", optarg); - break; - - case '?': - break; - - default: - printf ("?? getopt returned character code 0%o ??\n", c); - } - } - - if (optind < argc) - { - printf ("non-option ARGV-elements: "); - while (optind < argc) - printf ("%s ", argv[optind++]); - printf ("\n"); - } - - exit (0); -} - -#endif /* TEST */ diff --git a/lib/getopt.h b/lib/getopt.h deleted file mode 100644 index fb30719a8..000000000 --- a/lib/getopt.h +++ /dev/null @@ -1,133 +0,0 @@ -/* Declarations for getopt. - Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc. - - NOTE: The canonical source of this file is maintained with the GNU C Library. - Bugs can be reported to bug-glibc@gnu.org. - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - USA. */ - -#ifndef _GETOPT_H -#define _GETOPT_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* For communication from `getopt' to the caller. - When `getopt' finds an option that takes an argument, - the argument value is returned here. - Also, when `ordering' is RETURN_IN_ORDER, - each non-option ARGV-element is returned here. */ - -extern char *optarg; - -/* Index in ARGV of the next element to be scanned. - This is used for communication to and from the caller - and for communication between successive calls to `getopt'. - - On entry to `getopt', zero means this is the first call; initialize. - - When `getopt' returns -1, this is the index of the first of the - non-option elements that the caller should itself scan. - - Otherwise, `optind' communicates from one call to the next - how much of ARGV has been scanned so far. */ - -extern int optind; - -/* Callers store zero here to inhibit the error message `getopt' prints - for unrecognized options. */ - -extern int opterr; - -/* Set to an option character which was unrecognized. */ - -extern int optopt; - -/* Describe the long-named options requested by the application. - The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector - of `struct option' terminated by an element containing a name which is - zero. - - The field `has_arg' is: - no_argument (or 0) if the option does not take an argument, - required_argument (or 1) if the option requires an argument, - optional_argument (or 2) if the option takes an optional argument. - - If the field `flag' is not NULL, it points to a variable that is set - to the value given in the field `val' when the option is found, but - left unchanged if the option is not found. - - To have a long-named option do something other than set an `int' to - a compiled-in constant, such as set a value from `optarg', set the - option's `flag' field to zero and its `val' field to a nonzero - value (the equivalent single-letter option character, if there is - one). For long options that have a zero `flag' field, `getopt' - returns the contents of the `val' field. */ - -struct option -{ -#if defined (__STDC__) && __STDC__ - const char *name; -#else - char *name; -#endif - /* has_arg can't be an enum because some compilers complain about - type mismatches in all the code that assumes it is an int. */ - int has_arg; - int *flag; - int val; -}; - -/* Names for the values of the `has_arg' field of `struct option'. */ - -#define no_argument 0 -#define required_argument 1 -#define optional_argument 2 - -#if defined (__STDC__) && __STDC__ -#ifdef __GNU_LIBRARY__ -/* Many other libraries have conflicting prototypes for getopt, with - differences in the consts, in stdlib.h. To avoid compilation - errors, only prototype getopt for the GNU C library. */ -extern int getopt (int argc, char *const *argv, const char *shortopts); -#else /* not __GNU_LIBRARY__ */ -extern int getopt (); -#endif /* __GNU_LIBRARY__ */ -extern int getopt_long (int argc, char *const *argv, const char *shortopts, - const struct option *longopts, int *longind); -extern int getopt_long_only (int argc, char *const *argv, - const char *shortopts, - const struct option *longopts, int *longind); - -/* Internal only. Users should not call this directly. */ -extern int _getopt_internal (int argc, char *const *argv, - const char *shortopts, - const struct option *longopts, int *longind, - int long_only); -#else /* not __STDC__ */ -extern int getopt (); -extern int getopt_long (); -extern int getopt_long_only (); - -extern int _getopt_internal (); -#endif /* __STDC__ */ - -#ifdef __cplusplus -} -#endif - -#endif /* getopt.h */ diff --git a/lib/getopt1.c b/lib/getopt1.c deleted file mode 100644 index ff257374c..000000000 --- a/lib/getopt1.c +++ /dev/null @@ -1,190 +0,0 @@ -/* getopt_long and getopt_long_only entry points for GNU getopt. - Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98 - Free Software Foundation, Inc. - - NOTE: The canonical source of this file is maintained with the GNU C Library. - Bugs can be reported to bug-glibc@gnu.org. - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - USA. */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "getopt.h" - -#if !defined __STDC__ || !__STDC__ -/* This is a separate conditional since some stdc systems - reject `defined (const)'. */ -#ifndef const -#define const -#endif -#endif - -#include - -/* Comment out all this code if we are using the GNU C Library, and are not - actually compiling the library itself. This code is part of the GNU C - Library, but also included in many other GNU distributions. Compiling - and linking in this code is a waste when using the GNU C library - (especially if it is a shared library). Rather than having every GNU - program understand `configure --with-gnu-libc' and omit the object files, - it is simpler to just do this in the source for each such file. */ - -#define GETOPT_INTERFACE_VERSION 2 -#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 -#include -#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION -#define ELIDE_CODE -#endif -#endif - -#ifndef ELIDE_CODE - - -/* This needs to come after some library #include - to get __GNU_LIBRARY__ defined. */ -#ifdef __GNU_LIBRARY__ -#include -#endif - -#ifndef NULL -#define NULL 0 -#endif - -int -getopt_long (argc, argv, options, long_options, opt_index) - int argc; - char *const *argv; - const char *options; - const struct option *long_options; - int *opt_index; -{ - return _getopt_internal (argc, argv, options, long_options, opt_index, 0); -} - -/* Like getopt_long, but '-' as well as '--' can indicate a long option. - If an option that starts with '-' (not '--') doesn't match a long option, - but does match a short option, it is parsed as a short option - instead. */ - -int -getopt_long_only (argc, argv, options, long_options, opt_index) - int argc; - char *const *argv; - const char *options; - const struct option *long_options; - int *opt_index; -{ - return _getopt_internal (argc, argv, options, long_options, opt_index, 1); -} - - -#endif /* Not ELIDE_CODE. */ - -#ifdef TEST - -#include - -int -main (argc, argv) - int argc; - char **argv; -{ - int c; - int digit_optind = 0; - - while (1) - { - int this_option_optind = optind ? optind : 1; - int option_index = 0; - static struct option long_options[] = - { - {"add", 1, 0, 0}, - {"append", 0, 0, 0}, - {"delete", 1, 0, 0}, - {"verbose", 0, 0, 0}, - {"create", 0, 0, 0}, - {"file", 1, 0, 0}, - {0, 0, 0, 0} - }; - - c = getopt_long (argc, argv, "abc:d:0123456789", - long_options, &option_index); - if (c == -1) - break; - - switch (c) - { - case 0: - printf ("option %s", long_options[option_index].name); - if (optarg) - printf (" with arg %s", optarg); - printf ("\n"); - break; - - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - if (digit_optind != 0 && digit_optind != this_option_optind) - printf ("digits occur in two different argv-elements.\n"); - digit_optind = this_option_optind; - printf ("option %c\n", c); - break; - - case 'a': - printf ("option a\n"); - break; - - case 'b': - printf ("option b\n"); - break; - - case 'c': - printf ("option c with value `%s'\n", optarg); - break; - - case 'd': - printf ("option d with value `%s'\n", optarg); - break; - - case '?': - break; - - default: - printf ("?? getopt returned character code 0%o ??\n", c); - } - } - - if (optind < argc) - { - printf ("non-option ARGV-elements: "); - while (optind < argc) - printf ("%s ", argv[optind++]); - printf ("\n"); - } - - exit (0); -} - -#endif /* TEST */ diff --git a/missing b/missing deleted file mode 100644 index 64b5f901d..000000000 --- a/missing +++ /dev/null @@ -1,353 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. - -scriptversion=2004-09-07.08 - -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004 -# Free Software Foundation, Inc. -# Originally by Fran,cois Pinard , 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -if test $# -eq 0; then - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 -fi - -run=: - -# In the cases where this matters, `missing' is being run in the -# srcdir already. -if test -f configure.ac; then - configure_ac=configure.ac -else - configure_ac=configure.in -fi - -msg="missing on your system" - -case "$1" in ---run) - # Try to run requested program, and just exit if it succeeds. - run= - shift - "$@" && exit 0 - # Exit code 63 means version mismatch. This often happens - # when the user try to use an ancient version of a tool on - # a file that requires a minimum version. In this case we - # we should proceed has if the program had been absent, or - # if --run hadn't been passed. - if test $? = 63; then - run=: - msg="probably too old" - fi - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - --run try to run the given command, and emulate it if it fails - -Supported PROGRAM values: - aclocal touch file \`aclocal.m4' - autoconf touch file \`configure' - autoheader touch file \`config.h.in' - automake touch all \`Makefile.in' files - bison create \`y.tab.[ch]', if possible, from existing .[ch] - flex create \`lex.yy.c', if possible, from existing .c - help2man touch the output file - lex create \`lex.yy.c', if possible, from existing .c - makeinfo touch the output file - tar try tar, gnutar, gtar, then tar without non-portable flags - yacc create \`y.tab.[ch]', if possible, from existing .[ch] - -Send bug reports to ." - exit 0 - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing $scriptversion (GNU Automake)" - exit 0 - ;; - - -*) - echo 1>&2 "$0: Unknown \`$1' option" - echo 1>&2 "Try \`$0 --help' for more information" - exit 1 - ;; - -esac - -# Now exit if we have it, but it failed. Also exit now if we -# don't have it and --version was passed (most likely to detect -# the program). -case "$1" in - lex|yacc) - # Not GNU programs, they don't have --version. - ;; - - tar) - if test -n "$run"; then - echo 1>&2 "ERROR: \`tar' requires --run" - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - exit 1 - fi - ;; - - *) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - # Could not run --version or --help. This is probably someone - # running `$TOOL --version' or `$TOOL --help' to check whether - # $TOOL exists and not knowing $TOOL uses missing. - exit 1 - fi - ;; -esac - -# If it does not exist, or fails to run (possibly an outdated version), -# try to emulate it. -case "$1" in - aclocal*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acinclude.m4' or \`${configure_ac}'. You might want - to install the \`Automake' and \`Perl' packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`${configure_ac}'. You might want to install the - \`Autoconf' and \`GNU m4' packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`acconfig.h' or \`${configure_ac}'. You might want - to install the \`Autoconf' and \`GNU m4' packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case "$f" in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake*) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. - You might want to install the \`Automake' and \`Perl' packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - autom4te) - echo 1>&2 "\ -WARNING: \`$1' is needed, but is $msg. - You might have modified some files without having the - proper tools for further handling them. - You can get \`$1' as part of \`Autoconf' from any GNU - archive site." - - file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` - test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo "#! /bin/sh" - echo "# Created by GNU Automake missing as a replacement of" - echo "# $ $@" - echo "exit 0" - chmod +x $file - exit 1 - fi - ;; - - bison|yacc) - echo 1>&2 "\ -WARNING: \`$1' $msg. You should only need it if - you modified a \`.y' file. You may need the \`Bison' package - in order for those modifications to take effect. You can get - \`Bison' from any GNU archive site." - rm -f y.tab.c y.tab.h - if [ $# -ne 1 ]; then - eval LASTARG="\${$#}" - case "$LASTARG" in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if [ ! -f y.tab.h ]; then - echo >y.tab.h - fi - if [ ! -f y.tab.c ]; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex|flex) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.l' file. You may need the \`Flex' package - in order for those modifications to take effect. You can get - \`Flex' from any GNU archive site." - rm -f lex.yy.c - if [ $# -ne 1 ]; then - eval LASTARG="\${$#}" - case "$LASTARG" in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if [ -f "$SRCFILE" ]; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if [ ! -f lex.yy.c ]; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - help2man) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a dependency of a manual page. You may need the - \`Help2man' package in order for those modifications to take - effect. You can get \`Help2man' from any GNU archive site." - - file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` - if test -z "$file"; then - file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` - fi - if [ -f "$file" ]; then - touch $file - else - test -z "$file" || exec >$file - echo ".ab help2man is required to generate this page" - exit 1 - fi - ;; - - makeinfo) - echo 1>&2 "\ -WARNING: \`$1' is $msg. You should only need it if - you modified a \`.texi' or \`.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy \`make' (AIX, - DU, IRIX). You might want to install the \`Texinfo' package or - the \`GNU make' package. Grab either from any GNU archive site." - file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` - if test -z "$file"; then - file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` - fi - touch $file - ;; - - tar) - shift - - # We have already tried tar in the generic part. - # Look for gnutar/gtar before invocation to avoid ugly error - # messages. - if (gnutar --version > /dev/null 2>&1); then - gnutar "$@" && exit 0 - fi - if (gtar --version > /dev/null 2>&1); then - gtar "$@" && exit 0 - fi - firstarg="$1" - if shift; then - case "$firstarg" in - *o*) - firstarg=`echo "$firstarg" | sed s/o//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - case "$firstarg" in - *h*) - firstarg=`echo "$firstarg" | sed s/h//` - tar "$firstarg" "$@" && exit 0 - ;; - esac - fi - - echo 1>&2 "\ -WARNING: I can't seem to be able to run \`tar' with the given arguments. - You may want to install GNU tar or Free paxutils, or check the - command line arguments." - exit 1 - ;; - - *) - echo 1>&2 "\ -WARNING: \`$1' is needed, and is $msg. - You might have modified some files without having the - proper tools for further handling them. Check the \`README' file, - it often tells you about the needed prerequisites for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing \`$1' program." - exit 1 - ;; -esac - -exit 0 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/mkinstalldirs b/mkinstalldirs deleted file mode 100644 index 6fbe5e117..000000000 --- a/mkinstalldirs +++ /dev/null @@ -1,150 +0,0 @@ -#! /bin/sh -# mkinstalldirs --- make directory hierarchy - -scriptversion=2004-02-15.20 - -# Original author: Noah Friedman -# Created: 1993-05-16 -# Public domain. -# -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -errstatus=0 -dirmode="" - -usage="\ -Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... - -Create each directory DIR (with mode MODE, if specified), including all -leading file name components. - -Report bugs to ." - -# process command line arguments -while test $# -gt 0 ; do - case $1 in - -h | --help | --h*) # -h for help - echo "$usage" - exit 0 - ;; - -m) # -m PERM arg - shift - test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } - dirmode=$1 - shift - ;; - --version) - echo "$0 $scriptversion" - exit 0 - ;; - --) # stop option processing - shift - break - ;; - -*) # unknown option - echo "$usage" 1>&2 - exit 1 - ;; - *) # first non-opt arg - break - ;; - esac -done - -for file -do - if test -d "$file"; then - shift - else - break - fi -done - -case $# in - 0) exit 0 ;; -esac - -# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and -# mkdir -p a/c at the same time, both will detect that a is missing, -# one will create a, then the other will try to create a and die with -# a "File exists" error. This is a problem when calling mkinstalldirs -# from a parallel make. We use --version in the probe to restrict -# ourselves to GNU mkdir, which is thread-safe. -case $dirmode in - '') - if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - echo "mkdir -p -- $*" - exec mkdir -p -- "$@" - else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - test -d ./-p && rmdir ./-p - test -d ./--version && rmdir ./--version - fi - ;; - *) - if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && - test ! -d ./--version; then - echo "mkdir -m $dirmode -p -- $*" - exec mkdir -m "$dirmode" -p -- "$@" - else - # Clean up after NextStep and OpenStep mkdir. - for d in ./-m ./-p ./--version "./$dirmode"; - do - test -d $d && rmdir $d - done - fi - ;; -esac - -for file -do - set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` - shift - - pathcomp= - for d - do - pathcomp="$pathcomp$d" - case $pathcomp in - -*) pathcomp=./$pathcomp ;; - esac - - if test ! -d "$pathcomp"; then - echo "mkdir $pathcomp" - - mkdir "$pathcomp" || lasterr=$? - - if test ! -d "$pathcomp"; then - errstatus=$lasterr - else - if test ! -z "$dirmode"; then - echo "chmod $dirmode $pathcomp" - lasterr="" - chmod "$dirmode" "$pathcomp" || lasterr=$? - - if test ! -z "$lasterr"; then - errstatus=$lasterr - fi - fi - fi - fi - - pathcomp="$pathcomp/" - done -done - -exit $errstatus - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff --git a/netboot/.cvsignore b/netboot/.cvsignore deleted file mode 100644 index 63f8570f9..000000000 --- a/netboot/.cvsignore +++ /dev/null @@ -1,2 +0,0 @@ -.deps -Makefile diff --git a/netboot/3c509.c b/netboot/3c509.c deleted file mode 100644 index 604a6862b..000000000 --- a/netboot/3c509.c +++ /dev/null @@ -1,620 +0,0 @@ -/************************************************************************** -ETHERBOOT - BOOTP/TFTP Bootstrap Program - -Author: Martin Renters. - Date: Mar 22 1995 - - This code is based heavily on David Greenman's if_ed.c driver and - Andres Vega Garcia's if_ep.c driver. - - Copyright (C) 1993-1994, David Greenman, Martin Renters. - Copyright (C) 1993-1995, Andres Vega Garcia. - Copyright (C) 1995, Serge Babkin. - This software may be used, modified, copied, distributed, and sold, in - both source and binary form provided that the above copyright and these - terms are retained. Under no circumstances are the authors responsible for - the proper functioning of this software, nor do the authors assume any - responsibility for damages incurred with its use. - -3c509 support added by Serge Babkin (babkin@hq.icb.chel.su) - -$Id$ - -***************************************************************************/ - -/* #define EDEBUG */ - -#include "etherboot.h" -#include "nic.h" -#include "cards.h" -#include "timer.h" -#include "3c509.h" - -#define udelay(n) waiton_timer2(((n)*TICKS_PER_MS)/1000) - -static unsigned short eth_nic_base; -static enum { none, bnc, utp } connector = none; /* for 3C509 */ - -#ifdef INCLUDE_3C529 -/* - * This table and several other pieces of the MCA support - * code were shamelessly borrowed from the Linux kernel source. - * - * MCA support added by Adam Fritzler (mid@auk.cx) - * - */ -struct el3_mca_adapters_struct { - const char *name; - int id; -}; -static struct el3_mca_adapters_struct el3_mca_adapters[] = { - { "3Com 3c529 EtherLink III (10base2)", 0x627c }, - { "3Com 3c529 EtherLink III (10baseT)", 0x627d }, - { "3Com 3c529 EtherLink III (test mode)", 0x62db }, - { "3Com 3c529 EtherLink III (TP or coax)", 0x62f6 }, - { "3Com 3c529 EtherLink III (TP)", 0x62f7 }, - { NULL, 0 }, -}; -#endif - -/************************************************************************** -ETH_RESET - Reset adapter -***************************************************************************/ -static void t509_reset(struct nic *nic) -{ - int i; - - /*********************************************************** - Reset 3Com 509 card - *************************************************************/ - - /* stop card */ - outw(RX_DISABLE, BASE + EP_COMMAND); - outw(RX_DISCARD_TOP_PACK, BASE + EP_COMMAND); - while (inw(BASE + EP_STATUS) & S_COMMAND_IN_PROGRESS) - ; - outw(TX_DISABLE, BASE + EP_COMMAND); - outw(STOP_TRANSCEIVER, BASE + EP_COMMAND); - udelay(1000); - outw(RX_RESET, BASE + EP_COMMAND); - outw(TX_RESET, BASE + EP_COMMAND); - outw(C_INTR_LATCH, BASE + EP_COMMAND); - outw(SET_RD_0_MASK, BASE + EP_COMMAND); - outw(SET_INTR_MASK, BASE + EP_COMMAND); - outw(SET_RX_FILTER, BASE + EP_COMMAND); - - /* - * initialize card - */ - while (inw(BASE + EP_STATUS) & S_COMMAND_IN_PROGRESS) - ; - - GO_WINDOW(0); - - /* Disable the card */ - outw(0, BASE + EP_W0_CONFIG_CTRL); - - /* Configure IRQ to none */ - outw(SET_IRQ(0), BASE + EP_W0_RESOURCE_CFG); - - /* Enable the card */ - outw(ENABLE_DRQ_IRQ, BASE + EP_W0_CONFIG_CTRL); - - GO_WINDOW(2); - - /* Reload the ether_addr. */ - for (i = 0; i < ETH_ALEN; i++) - outb(nic->node_addr[i], BASE + EP_W2_ADDR_0 + i); - - outw(RX_RESET, BASE + EP_COMMAND); - outw(TX_RESET, BASE + EP_COMMAND); - - /* Window 1 is operating window */ - GO_WINDOW(1); - for (i = 0; i < 31; i++) - inb(BASE + EP_W1_TX_STATUS); - - /* get rid of stray intr's */ - outw(ACK_INTR | 0xff, BASE + EP_COMMAND); - - outw(SET_RD_0_MASK | S_5_INTS, BASE + EP_COMMAND); - - outw(SET_INTR_MASK, BASE + EP_COMMAND); - - outw(SET_RX_FILTER | FIL_INDIVIDUAL | FIL_BRDCST, BASE + EP_COMMAND); - - /* configure BNC */ - if (connector == bnc) { - outw(START_TRANSCEIVER, BASE + EP_COMMAND); - udelay(1000); - } - /* configure UTP */ - else if (connector == utp) { - GO_WINDOW(4); - outw(ENABLE_UTP, BASE + EP_W4_MEDIA_TYPE); - sleep(2); /* Give time for media to negotiate */ - GO_WINDOW(1); - } - - /* start transceiver and receiver */ - outw(RX_ENABLE, BASE + EP_COMMAND); - outw(TX_ENABLE, BASE + EP_COMMAND); - - /* set early threshold for minimal packet length */ - outw(SET_RX_EARLY_THRESH | ETH_ZLEN, BASE + EP_COMMAND); - outw(SET_TX_START_THRESH | 16, BASE + EP_COMMAND); -} - -/************************************************************************** -ETH_TRANSMIT - Transmit a frame -***************************************************************************/ -static char padmap[] = { - 0, 3, 2, 1}; - -static void t509_transmit( -struct nic *nic, -const char *d, /* Destination */ -unsigned int t, /* Type */ -unsigned int s, /* size */ -const char *p) /* Packet */ -{ - register unsigned int len; - int pad; - int status; - -#ifdef EDEBUG - printf("{l=%d,t=%hX}",s+ETH_HLEN,t); -#endif - - /* swap bytes of type */ - t= htons(t); - - len=s+ETH_HLEN; /* actual length of packet */ - pad = padmap[len & 3]; - - /* - * The 3c509 automatically pads short packets to minimum ethernet length, - * but we drop packets that are too large. Perhaps we should truncate - * them instead? - */ - if (len + pad > ETH_FRAME_LEN) { - return; - } - - /* drop acknowledgements */ - while ((status=inb(BASE + EP_W1_TX_STATUS)) & TXS_COMPLETE ) { - if (status & (TXS_UNDERRUN|TXS_MAX_COLLISION|TXS_STATUS_OVERFLOW)) { - outw(TX_RESET, BASE + EP_COMMAND); - outw(TX_ENABLE, BASE + EP_COMMAND); - } - outb(0x0, BASE + EP_W1_TX_STATUS); - } - - while (inw(BASE + EP_W1_FREE_TX) < (unsigned short)len + pad + 4) - ; /* no room in FIFO */ - - outw(len, BASE + EP_W1_TX_PIO_WR_1); - outw(0x0, BASE + EP_W1_TX_PIO_WR_1); /* Second dword meaningless */ - - /* write packet */ - outsw(BASE + EP_W1_TX_PIO_WR_1, d, ETH_ALEN/2); - outsw(BASE + EP_W1_TX_PIO_WR_1, nic->node_addr, ETH_ALEN/2); - outw(t, BASE + EP_W1_TX_PIO_WR_1); - outsw(BASE + EP_W1_TX_PIO_WR_1, p, s / 2); - if (s & 1) - outb(*(p+s - 1), BASE + EP_W1_TX_PIO_WR_1); - - while (pad--) - outb(0, BASE + EP_W1_TX_PIO_WR_1); /* Padding */ - - /* wait for Tx complete */ - while((inw(BASE + EP_STATUS) & S_COMMAND_IN_PROGRESS) != 0) - ; -} - -/************************************************************************** -ETH_POLL - Wait for a frame -***************************************************************************/ -static int t509_poll(struct nic *nic) -{ - /* common variables */ - unsigned short type = 0; /* used by EDEBUG */ - /* variables for 3C509 */ - short status, cst; - register short rx_fifo; - - cst=inw(BASE + EP_STATUS); - -#ifdef EDEBUG - if(cst & 0x1FFF) - printf("-%hX-",cst); -#endif - - if( (cst & S_RX_COMPLETE)==0 ) { - /* acknowledge everything */ - outw(ACK_INTR| (cst & S_5_INTS), BASE + EP_COMMAND); - outw(C_INTR_LATCH, BASE + EP_COMMAND); - - return 0; - } - - status = inw(BASE + EP_W1_RX_STATUS); -#ifdef EDEBUG - printf("*%hX*",status); -#endif - - if (status & ERR_RX) { - outw(RX_DISCARD_TOP_PACK, BASE + EP_COMMAND); - return 0; - } - - rx_fifo = status & RX_BYTES_MASK; - if (rx_fifo==0) - return 0; - - /* read packet */ -#ifdef EDEBUG - printf("[l=%d",rx_fifo); -#endif - insw(BASE + EP_W1_RX_PIO_RD_1, nic->packet, rx_fifo / 2); - if(rx_fifo & 1) - nic->packet[rx_fifo-1]=inb(BASE + EP_W1_RX_PIO_RD_1); - nic->packetlen=rx_fifo; - - while(1) { - status = inw(BASE + EP_W1_RX_STATUS); -#ifdef EDEBUG - printf("*%hX*",status); -#endif - rx_fifo = status & RX_BYTES_MASK; - if(rx_fifo>0) { - insw(BASE + EP_W1_RX_PIO_RD_1, nic->packet+nic->packetlen, rx_fifo / 2); - if(rx_fifo & 1) - nic->packet[nic->packetlen+rx_fifo-1]=inb(BASE + EP_W1_RX_PIO_RD_1); - nic->packetlen+=rx_fifo; -#ifdef EDEBUG - printf("+%d",rx_fifo); -#endif - } - if(( status & RX_INCOMPLETE )==0) { -#ifdef EDEBUG - printf("=%d",nic->packetlen); -#endif - break; - } - udelay(1000); /* if incomplete wait 1 ms */ - } - /* acknowledge reception of packet */ - outw(RX_DISCARD_TOP_PACK, BASE + EP_COMMAND); - while (inw(BASE + EP_STATUS) & S_COMMAND_IN_PROGRESS) - ; -#ifdef EDEBUG - type = (nic->packet[12]<<8) | nic->packet[13]; - if(nic->packet[0]+nic->packet[1]+nic->packet[2]+nic->packet[3]+nic->packet[4]+ - nic->packet[5] == 0xFF*ETH_ALEN) - printf(",t=%hX,b]",type); - else - printf(",t=%hX]",type); -#endif - return (1); -} - -/************************************************************************* - 3Com 509 - specific routines -**************************************************************************/ - -static int -eeprom_rdy(void) -{ - int i; - - for (i = 0; is_eeprom_busy(IS_BASE) && i < MAX_EEPROMBUSY; i++); - if (i >= MAX_EEPROMBUSY) { - /* printf("3c509: eeprom failed to come ready.\n"); */ - printf("3c509: eeprom busy.\n"); /* memory in EPROM is tight */ - return (0); - } - return (1); -} - -/* - * get_e: gets a 16 bits word from the EEPROM. we must have set the window - * before - */ -static int -get_e(int offset) -{ - if (!eeprom_rdy()) - return (0xffff); - outw(EEPROM_CMD_RD | offset, IS_BASE + EP_W0_EEPROM_COMMAND); - if (!eeprom_rdy()) - return (0xffff); - return (inw(IS_BASE + EP_W0_EEPROM_DATA)); -} - -static int -send_ID_sequence(int port) -{ - int cx, al; - - for (al = 0xff, cx = 0; cx < 255; cx++) { - outb(al, port); - al <<= 1; - if (al & 0x100) - al ^= 0xcf; - } - return (1); -} - - -/* - * We get eeprom data from the id_port given an offset into the eeprom. - * Basically; after the ID_sequence is sent to all of the cards; they enter - * the ID_CMD state where they will accept command requests. 0x80-0xbf loads - * the eeprom data. We then read the port 16 times and with every read; the - * cards check for contention (ie: if one card writes a 0 bit and another - * writes a 1 bit then the host sees a 0. At the end of the cycle; each card - * compares the data on the bus; if there is a difference then that card goes - * into ID_WAIT state again). In the meantime; one bit of data is returned in - * the AX register which is conveniently returned to us by inb(). Hence; we - * read 16 times getting one bit of data with each read. - */ -static int -get_eeprom_data(int id_port, int offset) -{ - int i, data = 0; - outb(0x80 + offset, id_port); - /* Do we really need this wait? Won't be noticeable anyway */ - udelay(10000); - for (i = 0; i < 16; i++) - data = (data << 1) | (inw(id_port) & 1); - return (data); -} - -static void t509_disable(struct nic *nic) -{ - outb(0xc0, EP_ID_PORT); -} - -/************************************************************************** -ETH_PROBE - Look for an adapter -***************************************************************************/ -#ifdef INCLUDE_3C529 -struct nic *t529_probe(struct nic *nic, unsigned short *probe_addrs) -#else -struct nic *t509_probe(struct nic *nic, unsigned short *probe_addrs) -#endif -{ - /* common variables */ - int i; - int failcount; - -#ifdef INCLUDE_3C529 - struct el3_mca_adapters_struct *mcafound = NULL; - int mca_pos4 = 0, mca_pos5 = 0, mca_irq = 0; -#endif - - t509_disable(nic); /* in case board was active */ - /* note that nic is not used */ - for (failcount = 0; failcount < 4000; failcount++) { - int data, j, io_base, id_port; - unsigned short k; - int ep_current_tag; - short *p; -#ifdef INCLUDE_3C529 - int curboard; -#endif - - id_port = EP_ID_PORT; - ep_current_tag = EP_LAST_TAG + 1; - - /********************************************************* - Search for 3Com 509 card - ***********************************************************/ -#ifdef INCLUDE_3C529 - /* - * XXX: We should really check to make sure we have an MCA - * bus controller before going ahead with this... - * - * For now, we avoid any hassle by making it a compile - * time option. - * - */ - printf("\nWarning: Assuming presence of MCA bus\n"); - - /* Make sure motherboard setup is off */ - outb_p(0xff, MCA_MOTHERBOARD_SETUP_REG); - - /* Cycle through slots */ - for(curboard=0; curboard= EP_MAX_BOARDS) - goto no3c509; - - /* - * The iobase was found and MFG_ID was 0x6d50. PROD_ID should be - * 0x9[0-f]50 - */ - GO_WINDOW(0); - k = get_e(EEPROM_PROD_ID); -#ifdef INCLUDE_3C529 - /* - * On MCA, the PROD_ID matches the MCA card ID (POS0+POS1) - */ - if (mcafound) { - if (mcafound->id != k) { - printf("MCA: PROD_ID in EEPROM does not match MCA card ID! (%hX != %hX)\n", k, mcafound->id); - goto no3c509; - } - } else { /* for ISA/EISA */ - if ((k & 0xf0ff) != (PROD_ID & 0xf0ff)) - goto no3c509; - } -#else - if ((k & 0xf0ff) != (PROD_ID & 0xf0ff)) - goto no3c509; -#endif - -#ifdef INCLUDE_3C529 - if (mcafound) { - printf("%s board found on MCA at %#hx IRQ %d -", - mcafound->name, eth_nic_base, mca_irq); - } else { -#endif - if(eth_nic_base >= EP_EISA_START) - printf("3C5x9 board on EISA at %#hx - ",eth_nic_base); - else - printf("3C5x9 board on ISA at %#hx - ",eth_nic_base); -#ifdef INCLUDE_3C529 - } -#endif - - /* test for presence of connectors */ - i = inw(IS_BASE + EP_W0_CONFIG_CTRL); - j = (inw(IS_BASE + EP_W0_ADDRESS_CFG) >> 14) & 0x3; - - switch(j) { - case 0: - if (i & IS_UTP) { - printf("10baseT\n"); - connector = utp; - } - else { - printf("10baseT not present\n"); - goto no3c509; - } - break; - case 1: - if (i & IS_AUI) - printf("10base5\n"); - else { - printf("10base5 not present\n"); - goto no3c509; - } - break; - case 3: - if (i & IS_BNC) { - printf("10base2\n"); - connector = bnc; - } - else { - printf("10base2 not present\n"); - goto no3c509; - } - break; - default: - printf("unknown connector\n"); - goto no3c509; - } - /* - * Read the station address from the eeprom - */ - p = (unsigned short *) nic->node_addr; - for (i = 0; i < ETH_ALEN / 2; i++) { - GO_WINDOW(0); - p[i] = htons(get_e(i)); - GO_WINDOW(2); - outw(ntohs(p[i]), BASE + EP_W2_ADDR_0 + (i * 2)); - } - printf("Ethernet address: %!\n", nic->node_addr); - t509_reset(nic); - nic->reset = t509_reset; - nic->poll = t509_poll; - nic->transmit = t509_transmit; - nic->disable = t509_disable; - return nic; -no3c509: - printf("(probe fail)"); - } - return 0; -} - -/* - * Local variables: - * c-basic-offset: 8 - * End: - */ diff --git a/netboot/3c509.h b/netboot/3c509.h deleted file mode 100644 index 7214932ae..000000000 --- a/netboot/3c509.h +++ /dev/null @@ -1,397 +0,0 @@ -/* - * Copyright (c) 1993 Herb Peyerl (hpeyerl@novatel.ca) All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. 2. The name - * of the author may not be used to endorse or promote products derived from - * this software withough specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * if_epreg.h,v 1.4 1994/11/13 10:12:37 gibbs Exp Modified by: - * - October 2, 1994 - - Modified by: Andres Vega Garcia - - INRIA - Sophia Antipolis, France - e-mail: avega@sophia.inria.fr - finger: avega@pax.inria.fr - - */ - -/* - * Ethernet software status per interface. - */ -/* - * Some global constants - */ - -#define TX_INIT_RATE 16 -#define TX_INIT_MAX_RATE 64 -#define RX_INIT_LATENCY 64 -#define RX_INIT_EARLY_THRESH 64 -#define MIN_RX_EARLY_THRESHF 16 /* not less than ether_header */ -#define MIN_RX_EARLY_THRESHL 4 - -#define EEPROMSIZE 0x40 -#define MAX_EEPROMBUSY 1000 -#define EP_LAST_TAG 0xd7 -#define EP_MAX_BOARDS 16 -#define EP_ID_PORT 0x100 - -/* - * some macros to acces long named fields - */ -#define IS_BASE (eth_nic_base) -#define BASE (eth_nic_base) - -/* - * Commands to read/write EEPROM trough EEPROM command register (Window 0, - * Offset 0xa) - */ -#define EEPROM_CMD_RD 0x0080 /* Read: Address required (5 bits) */ -#define EEPROM_CMD_WR 0x0040 /* Write: Address required (5 bits) */ -#define EEPROM_CMD_ERASE 0x00c0 /* Erase: Address required (5 bits) */ -#define EEPROM_CMD_EWEN 0x0030 /* Erase/Write Enable: No data required */ - -#define EEPROM_BUSY (1<<15) -#define EEPROM_TST_MODE (1<<14) - -/* - * Some short functions, worth to let them be a macro - */ -#define is_eeprom_busy(b) (inw((b)+EP_W0_EEPROM_COMMAND)&EEPROM_BUSY) -#define GO_WINDOW(x) outw(WINDOW_SELECT|(x), BASE+EP_COMMAND) - -/************************************************************************** - * - * These define the EEPROM data structure. They are used in the probe - * function to verify the existance of the adapter after having sent - * the ID_Sequence. - * - * There are others but only the ones we use are defined here. - * - **************************************************************************/ - -#define EEPROM_NODE_ADDR_0 0x0 /* Word */ -#define EEPROM_NODE_ADDR_1 0x1 /* Word */ -#define EEPROM_NODE_ADDR_2 0x2 /* Word */ -#define EEPROM_PROD_ID 0x3 /* 0x9[0-f]50 */ -#define EEPROM_MFG_ID 0x7 /* 0x6d50 */ -#define EEPROM_ADDR_CFG 0x8 /* Base addr */ -#define EEPROM_RESOURCE_CFG 0x9 /* IRQ. Bits 12-15 */ - -/************************************************************************** - * - * These are the registers for the 3Com 3c509 and their bit patterns when - * applicable. They have been taken out the the "EtherLink III Parallel - * Tasking EISA and ISA Technical Reference" "Beta Draft 10/30/92" manual - * from 3com. - * - **************************************************************************/ - -#define EP_COMMAND 0x0e /* Write. BASE+0x0e is always a - * command reg. */ -#define EP_STATUS 0x0e /* Read. BASE+0x0e is always status - * reg. */ -#define EP_WINDOW 0x0f /* Read. BASE+0x0f is always window - * reg. */ -/* - * Window 0 registers. Setup. - */ -/* Write */ -#define EP_W0_EEPROM_DATA 0x0c -#define EP_W0_EEPROM_COMMAND 0x0a -#define EP_W0_RESOURCE_CFG 0x08 -#define EP_W0_ADDRESS_CFG 0x06 -#define EP_W0_CONFIG_CTRL 0x04 -/* Read */ -#define EP_W0_PRODUCT_ID 0x02 -#define EP_W0_MFG_ID 0x00 - -/* - * Window 1 registers. Operating Set. - */ -/* Write */ -#define EP_W1_TX_PIO_WR_2 0x02 -#define EP_W1_TX_PIO_WR_1 0x00 -/* Read */ -#define EP_W1_FREE_TX 0x0c -#define EP_W1_TX_STATUS 0x0b /* byte */ -#define EP_W1_TIMER 0x0a /* byte */ -#define EP_W1_RX_STATUS 0x08 -#define EP_W1_RX_PIO_RD_2 0x02 -#define EP_W1_RX_PIO_RD_1 0x00 - -/* - * Window 2 registers. Station Address Setup/Read - */ -/* Read/Write */ -#define EP_W2_ADDR_5 0x05 -#define EP_W2_ADDR_4 0x04 -#define EP_W2_ADDR_3 0x03 -#define EP_W2_ADDR_2 0x02 -#define EP_W2_ADDR_1 0x01 -#define EP_W2_ADDR_0 0x00 - -/* - * Window 3 registers. FIFO Management. - */ -/* Read */ -#define EP_W3_FREE_TX 0x0c -#define EP_W3_FREE_RX 0x0a - -/* - * Window 4 registers. Diagnostics. - */ -/* Read/Write */ -#define EP_W4_MEDIA_TYPE 0x0a -#define EP_W4_CTRLR_STATUS 0x08 -#define EP_W4_NET_DIAG 0x06 -#define EP_W4_FIFO_DIAG 0x04 -#define EP_W4_HOST_DIAG 0x02 -#define EP_W4_TX_DIAG 0x00 - -/* - * Window 5 Registers. Results and Internal status. - */ -/* Read */ -#define EP_W5_READ_0_MASK 0x0c -#define EP_W5_INTR_MASK 0x0a -#define EP_W5_RX_FILTER 0x08 -#define EP_W5_RX_EARLY_THRESH 0x06 -#define EP_W5_TX_AVAIL_THRESH 0x02 -#define EP_W5_TX_START_THRESH 0x00 - -/* - * Window 6 registers. Statistics. - */ -/* Read/Write */ -#define TX_TOTAL_OK 0x0c -#define RX_TOTAL_OK 0x0a -#define TX_DEFERRALS 0x08 -#define RX_FRAMES_OK 0x07 -#define TX_FRAMES_OK 0x06 -#define RX_OVERRUNS 0x05 -#define TX_COLLISIONS 0x04 -#define TX_AFTER_1_COLLISION 0x03 -#define TX_AFTER_X_COLLISIONS 0x02 -#define TX_NO_SQE 0x01 -#define TX_CD_LOST 0x00 - -/**************************************** - * - * Register definitions. - * - ****************************************/ - -/* - * Command register. All windows. - * - * 16 bit register. - * 15-11: 5-bit code for command to be executed. - * 10-0: 11-bit arg if any. For commands with no args; - * this can be set to anything. - */ -#define GLOBAL_RESET (unsigned short) 0x0000 /* Wait at least 1ms - * after issuing */ -#define WINDOW_SELECT (unsigned short) (0x1<<11) -#define START_TRANSCEIVER (unsigned short) (0x2<<11) /* Read ADDR_CFG reg to - * determine whether - * this is needed. If - * so; wait 800 uSec - * before using trans- - * ceiver. */ -#define RX_DISABLE (unsigned short) (0x3<<11) /* state disabled on - * power-up */ -#define RX_ENABLE (unsigned short) (0x4<<11) -#define RX_RESET (unsigned short) (0x5<<11) -#define RX_DISCARD_TOP_PACK (unsigned short) (0x8<<11) -#define TX_ENABLE (unsigned short) (0x9<<11) -#define TX_DISABLE (unsigned short) (0xa<<11) -#define TX_RESET (unsigned short) (0xb<<11) -#define REQ_INTR (unsigned short) (0xc<<11) -#define SET_INTR_MASK (unsigned short) (0xe<<11) -#define SET_RD_0_MASK (unsigned short) (0xf<<11) -#define SET_RX_FILTER (unsigned short) (0x10<<11) -#define FIL_INDIVIDUAL (unsigned short) (0x1) -#define FIL_GROUP (unsigned short) (0x2) -#define FIL_BRDCST (unsigned short) (0x4) -#define FIL_ALL (unsigned short) (0x8) -#define SET_RX_EARLY_THRESH (unsigned short) (0x11<<11) -#define SET_TX_AVAIL_THRESH (unsigned short) (0x12<<11) -#define SET_TX_START_THRESH (unsigned short) (0x13<<11) -#define STATS_ENABLE (unsigned short) (0x15<<11) -#define STATS_DISABLE (unsigned short) (0x16<<11) -#define STOP_TRANSCEIVER (unsigned short) (0x17<<11) -/* - * The following C_* acknowledge the various interrupts. Some of them don't - * do anything. See the manual. - */ -#define ACK_INTR (unsigned short) (0x6800) -#define C_INTR_LATCH (unsigned short) (ACK_INTR|0x1) -#define C_CARD_FAILURE (unsigned short) (ACK_INTR|0x2) -#define C_TX_COMPLETE (unsigned short) (ACK_INTR|0x4) -#define C_TX_AVAIL (unsigned short) (ACK_INTR|0x8) -#define C_RX_COMPLETE (unsigned short) (ACK_INTR|0x10) -#define C_RX_EARLY (unsigned short) (ACK_INTR|0x20) -#define C_INT_RQD (unsigned short) (ACK_INTR|0x40) -#define C_UPD_STATS (unsigned short) (ACK_INTR|0x80) - -/* - * Status register. All windows. - * - * 15-13: Window number(0-7). - * 12: Command_in_progress. - * 11: reserved. - * 10: reserved. - * 9: reserved. - * 8: reserved. - * 7: Update Statistics. - * 6: Interrupt Requested. - * 5: RX Early. - * 4: RX Complete. - * 3: TX Available. - * 2: TX Complete. - * 1: Adapter Failure. - * 0: Interrupt Latch. - */ -#define S_INTR_LATCH (unsigned short) (0x1) -#define S_CARD_FAILURE (unsigned short) (0x2) -#define S_TX_COMPLETE (unsigned short) (0x4) -#define S_TX_AVAIL (unsigned short) (0x8) -#define S_RX_COMPLETE (unsigned short) (0x10) -#define S_RX_EARLY (unsigned short) (0x20) -#define S_INT_RQD (unsigned short) (0x40) -#define S_UPD_STATS (unsigned short) (0x80) -#define S_5_INTS (S_CARD_FAILURE|S_TX_COMPLETE|\ - S_TX_AVAIL|S_RX_COMPLETE|S_RX_EARLY) -#define S_COMMAND_IN_PROGRESS (unsigned short) (0x1000) - -/* - * FIFO Registers. - * RX Status. Window 1/Port 08 - * - * 15: Incomplete or FIFO empty. - * 14: 1: Error in RX Packet 0: Incomplete or no error. - * 13-11: Type of error. - * 1000 = Overrun. - * 1011 = Run Packet Error. - * 1100 = Alignment Error. - * 1101 = CRC Error. - * 1001 = Oversize Packet Error (>1514 bytes) - * 0010 = Dribble Bits. - * (all other error codes, no errors.) - * - * 10-0: RX Bytes (0-1514) - */ -#define ERR_RX_INCOMPLETE (unsigned short) (0x1<<15) -#define ERR_RX (unsigned short) (0x1<<14) -#define ERR_RX_OVERRUN (unsigned short) (0x8<<11) -#define ERR_RX_RUN_PKT (unsigned short) (0xb<<11) -#define ERR_RX_ALIGN (unsigned short) (0xc<<11) -#define ERR_RX_CRC (unsigned short) (0xd<<11) -#define ERR_RX_OVERSIZE (unsigned short) (0x9<<11) -#define ERR_RX_DRIBBLE (unsigned short) (0x2<<11) - -/* - * FIFO Registers. - * TX Status. Window 1/Port 0B - * - * Reports the transmit status of a completed transmission. Writing this - * register pops the transmit completion stack. - * - * Window 1/Port 0x0b. - * - * 7: Complete - * 6: Interrupt on successful transmission requested. - * 5: Jabber Error (TP Only, TX Reset required. ) - * 4: Underrun (TX Reset required. ) - * 3: Maximum Collisions. - * 2: TX Status Overflow. - * 1-0: Undefined. - * - */ -#define TXS_COMPLETE 0x80 -#define TXS_SUCCES_INTR_REQ 0x40 -#define TXS_JABBER 0x20 -#define TXS_UNDERRUN 0x10 -#define TXS_MAX_COLLISION 0x8 -#define TXS_STATUS_OVERFLOW 0x4 - -/* - * Configuration control register. - * Window 0/Port 04 - */ -/* Read */ -#define IS_AUI (1<<13) -#define IS_BNC (1<<12) -#define IS_UTP (1<<9) -/* Write */ -#define ENABLE_DRQ_IRQ 0x0001 -#define W0_P4_CMD_RESET_ADAPTER 0x4 -#define W0_P4_CMD_ENABLE_ADAPTER 0x1 -/* - * Media type and status. - * Window 4/Port 0A - */ -#define ENABLE_UTP 0xc0 -#define DISABLE_UTP 0x0 - -/* - * Resource control register - */ - -#define SET_IRQ(i) ( ((i)<<12) | 0xF00) /* set IRQ i */ - -/* - * Receive status register - */ - -#define RX_BYTES_MASK (unsigned short) (0x07ff) -#define RX_ERROR 0x4000 -#define RX_INCOMPLETE 0x8000 - - -/* - * Misc defines for various things. - */ -#define ACTIVATE_ADAPTER_TO_CONFIG 0xff /* to the id_port */ -#define MFG_ID 0x6d50 /* in EEPROM and W0 ADDR_CONFIG */ -#define PROD_ID 0x9150 - -#define AUI 0x1 -#define BNC 0x2 -#define UTP 0x4 - -#define RX_BYTES_MASK (unsigned short) (0x07ff) - - /* EISA support */ -#define EP_EISA_START 0x1000 -#define EP_EISA_W0 0x0c80 - -#ifdef INCLUDE_3C529 - /* MCA support */ -#define MCA_MOTHERBOARD_SETUP_REG 0x94 -#define MCA_ADAPTER_SETUP_REG 0x96 -#define MCA_MAX_SLOT_NR 8 -#define MCA_POS_REG(n) (0x100+(n)) -#endif - -/* - * Local variables: - * c-basic-offset: 8 - * End: - */ diff --git a/netboot/3c595.c b/netboot/3c595.c deleted file mode 100644 index 5a04e2569..000000000 --- a/netboot/3c595.c +++ /dev/null @@ -1,503 +0,0 @@ -/* -* 3c595.c -- 3COM 3C595 Fast Etherlink III PCI driver for etherboot -* -* Copyright (C) 2000 Shusuke Nisiyama -* All rights reserved. -* Mar. 14, 2000 -* -* This software may be used, modified, copied, distributed, and sold, in -* both source and binary form provided that the above copyright and these -* terms are retained. Under no circumstances are the authors responsible for -* the proper functioning of this software, nor do the authors assume any -* responsibility for damages incurred with its use. -* -* This code is based on Martin Renters' etherboot-4.4.3 3c509.c and -* Herb Peyerl's FreeBSD 3.4-RELEASE if_vx.c driver. -* -* Copyright (C) 1993-1994, David Greenman, Martin Renters. -* Copyright (C) 1993-1995, Andres Vega Garcia. -* Copyright (C) 1995, Serge Babkin. -* -* Copyright (c) 1994 Herb Peyerl -* -*/ - -/* #define EDEBUG */ - -#include "etherboot.h" -#include "nic.h" -#include "pci.h" -#include "3c595.h" -#include "timer.h" - -static unsigned short eth_nic_base, eth_asic_base; -static unsigned short vx_connector, vx_connectors; - -static struct connector_entry { - int bit; - char *name; -} conn_tab[VX_CONNECTORS] = { -#define CONNECTOR_UTP 0 - { 0x08, "utp"}, -#define CONNECTOR_AUI 1 - { 0x20, "aui"}, -/* dummy */ - { 0, "???"}, -#define CONNECTOR_BNC 3 - { 0x10, "bnc"}, -#define CONNECTOR_TX 4 - { 0x02, "tx"}, -#define CONNECTOR_FX 5 - { 0x04, "fx"}, -#define CONNECTOR_MII 6 - { 0x40, "mii"}, - { 0, "???"} -}; - -static void vxgetlink(void); -static void vxsetlink(void); - -#define udelay(n) waiton_timer2(((n)*TICKS_PER_MS)/1000) - -/************************************************************************** -ETH_RESET - Reset adapter -***************************************************************************/ -static void t595_reset(struct nic *nic) -{ - int i, j; - - /*********************************************************** - Reset 3Com 595 card - *************************************************************/ - - /* stop card */ - outw(RX_DISABLE, BASE + VX_COMMAND); - outw(RX_DISCARD_TOP_PACK, BASE + VX_COMMAND); - VX_BUSY_WAIT; - outw(TX_DISABLE, BASE + VX_COMMAND); - outw(STOP_TRANSCEIVER, BASE + VX_COMMAND); - udelay(8000); - outw(RX_RESET, BASE + VX_COMMAND); - VX_BUSY_WAIT; - outw(TX_RESET, BASE + VX_COMMAND); - VX_BUSY_WAIT; - outw(C_INTR_LATCH, BASE + VX_COMMAND); - outw(SET_RD_0_MASK, BASE + VX_COMMAND); - outw(SET_INTR_MASK, BASE + VX_COMMAND); - outw(SET_RX_FILTER, BASE + VX_COMMAND); - - /* - * initialize card - */ - VX_BUSY_WAIT; - - GO_WINDOW(0); - - /* Disable the card */ -/* outw(0, BASE + VX_W0_CONFIG_CTRL); */ - - /* Configure IRQ to none */ -/* outw(SET_IRQ(0), BASE + VX_W0_RESOURCE_CFG); */ - - /* Enable the card */ -/* outw(ENABLE_DRQ_IRQ, BASE + VX_W0_CONFIG_CTRL); */ - - GO_WINDOW(2); - - /* Reload the ether_addr. */ - for (i = 0; i < ETH_ALEN; i++) - outb(nic->node_addr[i], BASE + VX_W2_ADDR_0 + i); - - outw(RX_RESET, BASE + VX_COMMAND); - VX_BUSY_WAIT; - outw(TX_RESET, BASE + VX_COMMAND); - VX_BUSY_WAIT; - - /* Window 1 is operating window */ - GO_WINDOW(1); - for (i = 0; i < 31; i++) - inb(BASE + VX_W1_TX_STATUS); - - outw(SET_RD_0_MASK | S_CARD_FAILURE | S_RX_COMPLETE | - S_TX_COMPLETE | S_TX_AVAIL, BASE + VX_COMMAND); - outw(SET_INTR_MASK | S_CARD_FAILURE | S_RX_COMPLETE | - S_TX_COMPLETE | S_TX_AVAIL, BASE + VX_COMMAND); - -/* - * Attempt to get rid of any stray interrupts that occured during - * configuration. On the i386 this isn't possible because one may - * already be queued. However, a single stray interrupt is - * unimportant. - */ - - outw(ACK_INTR | 0xff, BASE + VX_COMMAND); - - outw(SET_RX_FILTER | FIL_INDIVIDUAL | - FIL_BRDCST, BASE + VX_COMMAND); - - vxsetlink(); -/*{ - int i,j; - i = CONNECTOR_TX; - GO_WINDOW(3); - j = inl(BASE + VX_W3_INTERNAL_CFG) & ~INTERNAL_CONNECTOR_MASK; - outl(BASE + VX_W3_INTERNAL_CFG, j | (i < ETH_FRAME_LEN) { - return; - } - - /* drop acknowledgements */ - while(( status=inb(BASE + VX_W1_TX_STATUS) )& TXS_COMPLETE ) { - if(status & (TXS_UNDERRUN|TXS_MAX_COLLISION|TXS_STATUS_OVERFLOW)) { - outw(TX_RESET, BASE + VX_COMMAND); - outw(TX_ENABLE, BASE + VX_COMMAND); - } - - outb(0x0, BASE + VX_W1_TX_STATUS); - } - - while (inw(BASE + VX_W1_FREE_TX) < len + pad + 4) { - /* no room in FIFO */ - } - - outw(len, BASE + VX_W1_TX_PIO_WR_1); - outw(0x0, BASE + VX_W1_TX_PIO_WR_1); /* Second dword meaningless */ - - /* write packet */ - outsw(BASE + VX_W1_TX_PIO_WR_1, d, ETH_ALEN/2); - outsw(BASE + VX_W1_TX_PIO_WR_1, nic->node_addr, ETH_ALEN/2); - outw(t, BASE + VX_W1_TX_PIO_WR_1); - outsw(BASE + VX_W1_TX_PIO_WR_1, p, s / 2); - if (s & 1) - outb(*(p+s - 1), BASE + VX_W1_TX_PIO_WR_1); - - while (pad--) - outb(0, BASE + VX_W1_TX_PIO_WR_1); /* Padding */ - - /* wait for Tx complete */ - while((inw(BASE + VX_STATUS) & S_COMMAND_IN_PROGRESS) != 0) - ; -} - -/************************************************************************** -ETH_POLL - Wait for a frame -***************************************************************************/ -static int t595_poll(struct nic *nic) -{ - /* common variables */ - unsigned short type = 0; /* used by EDEBUG */ - /* variables for 3C595 */ - short status, cst; - register short rx_fifo; - - cst=inw(BASE + VX_STATUS); - -#ifdef EDEBUG - if(cst & 0x1FFF) - printf("-%hX-",cst); -#endif - - if( (cst & S_RX_COMPLETE)==0 ) { - /* acknowledge everything */ - outw(ACK_INTR | cst, BASE + VX_COMMAND); - outw(C_INTR_LATCH, BASE + VX_COMMAND); - - return 0; - } - - status = inw(BASE + VX_W1_RX_STATUS); -#ifdef EDEBUG - printf("*%hX*",status); -#endif - - if (status & ERR_RX) { - outw(RX_DISCARD_TOP_PACK, BASE + VX_COMMAND); - return 0; - } - - rx_fifo = status & RX_BYTES_MASK; - if (rx_fifo==0) - return 0; - - /* read packet */ -#ifdef EDEBUG - printf("[l=%d",rx_fifo); -#endif - insw(BASE + VX_W1_RX_PIO_RD_1, nic->packet, rx_fifo / 2); - if(rx_fifo & 1) - nic->packet[rx_fifo-1]=inb(BASE + VX_W1_RX_PIO_RD_1); - nic->packetlen=rx_fifo; - - while(1) { - status = inw(BASE + VX_W1_RX_STATUS); -#ifdef EDEBUG - printf("*%hX*",status); -#endif - rx_fifo = status & RX_BYTES_MASK; - - if(rx_fifo>0) { - insw(BASE + VX_W1_RX_PIO_RD_1, nic->packet+nic->packetlen, rx_fifo / 2); - if(rx_fifo & 1) - nic->packet[nic->packetlen+rx_fifo-1]=inb(BASE + VX_W1_RX_PIO_RD_1); - nic->packetlen+=rx_fifo; -#ifdef EDEBUG - printf("+%d",rx_fifo); -#endif - } - if(( status & RX_INCOMPLETE )==0) { -#ifdef EDEBUG - printf("=%d",nic->packetlen); -#endif - break; - } - udelay(1000); - } - - /* acknowledge reception of packet */ - outw(RX_DISCARD_TOP_PACK, BASE + VX_COMMAND); - while (inw(BASE + VX_STATUS) & S_COMMAND_IN_PROGRESS); -#ifdef EDEBUG - type = (nic->packet[12]<<8) | nic->packet[13]; - if(nic->packet[0]+nic->packet[1]+nic->packet[2]+nic->packet[3]+nic->packet[4]+ - nic->packet[5] == 0xFF*ETH_ALEN) - printf(",t=%hX,b]",type); - else - printf(",t=%hX]",type); -#endif - return 1; -} - - -/************************************************************************* - 3Com 595 - specific routines -**************************************************************************/ - -static int -eeprom_rdy() -{ - int i; - - for (i = 0; is_eeprom_busy(BASE) && i < MAX_EEPROMBUSY; i++) - udelay(1000); - if (i >= MAX_EEPROMBUSY) { - /* printf("3c595: eeprom failed to come ready.\n"); */ - printf("3c595: eeprom is busy.\n"); /* memory in EPROM is tight */ - return (0); - } - return (1); -} - -/* - * get_e: gets a 16 bits word from the EEPROM. we must have set the window - * before - */ -static int -get_e(offset) -int offset; -{ - if (!eeprom_rdy()) - return (0xffff); - outw(EEPROM_CMD_RD | offset, BASE + VX_W0_EEPROM_COMMAND); - if (!eeprom_rdy()) - return (0xffff); - return (inw(BASE + VX_W0_EEPROM_DATA)); -} - -static void -vxgetlink(void) -{ - int n, k; - - GO_WINDOW(3); - vx_connectors = inw(BASE + VX_W3_RESET_OPT) & 0x7f; - for (n = 0, k = 0; k < VX_CONNECTORS; k++) { - if (vx_connectors & conn_tab[k].bit) { - if (n > 0) { - printf("/"); - } - printf(conn_tab[k].name); - n++; - } - } - if (vx_connectors == 0) { - printf("no connectors!"); - return; - } - GO_WINDOW(3); - vx_connector = (inl(BASE + VX_W3_INTERNAL_CFG) - & INTERNAL_CONNECTOR_MASK) - >> INTERNAL_CONNECTOR_BITS; - if (vx_connector & 0x10) { - vx_connector &= 0x0f; - printf("[*%s*]", conn_tab[vx_connector].name); - printf(": disable 'auto select' with DOS util!"); - } else { - printf("[*%s*]", conn_tab[vx_connector].name); - } -} - -static void -vxsetlink(void) -{ - int i, j, k; - char *reason, *warning; - static short prev_flags; - static char prev_conn = -1; - - if (prev_conn == -1) { - prev_conn = vx_connector; - } - - i = vx_connector; /* default in EEPROM */ - reason = "default"; - warning = 0; - - if ((vx_connectors & conn_tab[vx_connector].bit) == 0) { - warning = "strange connector type in EEPROM."; - reason = "forced"; - i = CONNECTOR_UTP; - } - - if (warning != 0) { - printf("warning: %s\n", warning); - } - printf("selected %s. (%s)\n", conn_tab[i].name, reason); - - /* Set the selected connector. */ - GO_WINDOW(3); - j = inl(BASE + VX_W3_INTERNAL_CFG) & ~INTERNAL_CONNECTOR_MASK; - outl(j | (i <ioaddr; - - GO_WINDOW(0); - outw(GLOBAL_RESET, BASE + VX_COMMAND); - VX_BUSY_WAIT; - - vxgetlink(); - -/* - printf("\nEEPROM:"); - for (i = 0; i < (EEPROMSIZE/2); i++) { - printf("%hX:", get_e(i)); - } - printf("\n"); -*/ - /* - * Read the station address from the eeprom - */ - p = (unsigned short *) nic->node_addr; - for (i = 0; i < 3; i++) { - GO_WINDOW(0); - p[i] = htons(get_e(EEPROM_OEM_ADDR_0 + i)); - GO_WINDOW(2); - outw(ntohs(p[i]), BASE + VX_W2_ADDR_0 + (i * 2)); - } - - printf("Ethernet address: %!\n", nic->node_addr); - - t595_reset(nic); - nic->reset = t595_reset; - nic->poll = t595_poll; - nic->transmit = t595_transmit; - nic->disable = t595_disable; - return nic; - -} - -/* - * Local variables: - * c-basic-offset: 8 - * End: - */ - diff --git a/netboot/3c595.h b/netboot/3c595.h deleted file mode 100644 index 49d8d9b04..000000000 --- a/netboot/3c595.h +++ /dev/null @@ -1,435 +0,0 @@ -/* - * Copyright (c) 1993 Herb Peyerl (hpeyerl@novatel.ca) All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. 2. The name - * of the author may not be used to endorse or promote products derived from - * this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - October 2, 1994 - - Modified by: Andres Vega Garcia - - INRIA - Sophia Antipolis, France - e-mail: avega@sophia.inria.fr - finger: avega@pax.inria.fr - - */ - -/* - * Created from if_epreg.h by Fred Gray (fgray@rice.edu) to support the - * 3c590 family. - */ - -/* - * Modified by Shusuke Nisiyama - * for etherboot - * Mar. 14, 2000 -*/ - -/* - * Ethernet software status per interface. - */ - -/* - * Some global constants - */ - -#define TX_INIT_RATE 16 -#define TX_INIT_MAX_RATE 64 -#define RX_INIT_LATENCY 64 -#define RX_INIT_EARLY_THRESH 64 -#define MIN_RX_EARLY_THRESHF 16 /* not less than ether_header */ -#define MIN_RX_EARLY_THRESHL 4 - -#define EEPROMSIZE 0x40 -#define MAX_EEPROMBUSY 1000 -#define VX_LAST_TAG 0xd7 -#define VX_MAX_BOARDS 16 -#define VX_ID_PORT 0x100 - -/* - * some macros to acces long named fields - */ -#define BASE (eth_nic_base) - -/* - * Commands to read/write EEPROM trough EEPROM command register (Window 0, - * Offset 0xa) - */ -#define EEPROM_CMD_RD 0x0080 /* Read: Address required (5 bits) */ -#define EEPROM_CMD_WR 0x0040 /* Write: Address required (5 bits) */ -#define EEPROM_CMD_ERASE 0x00c0 /* Erase: Address required (5 bits) */ -#define EEPROM_CMD_EWEN 0x0030 /* Erase/Write Enable: No data required */ - -#define EEPROM_BUSY (1<<15) - -/* - * Some short functions, worth to let them be a macro - */ - -/************************************************************************** - * * - * These define the EEPROM data structure. They are used in the probe - * function to verify the existence of the adapter after having sent - * the ID_Sequence. - * - * There are others but only the ones we use are defined here. - * - **************************************************************************/ - -#define EEPROM_NODE_ADDR_0 0x0 /* Word */ -#define EEPROM_NODE_ADDR_1 0x1 /* Word */ -#define EEPROM_NODE_ADDR_2 0x2 /* Word */ -#define EEPROM_PROD_ID 0x3 /* 0x9[0-f]50 */ -#define EEPROM_MFG_ID 0x7 /* 0x6d50 */ -#define EEPROM_ADDR_CFG 0x8 /* Base addr */ -#define EEPROM_RESOURCE_CFG 0x9 /* IRQ. Bits 12-15 */ -#define EEPROM_OEM_ADDR_0 0xa /* Word */ -#define EEPROM_OEM_ADDR_1 0xb /* Word */ -#define EEPROM_OEM_ADDR_2 0xc /* Word */ -#define EEPROM_SOFT_INFO_2 0xf /* Software information 2 */ - -#define NO_RX_OVN_ANOMALY (1<<5) - -/************************************************************************** - * * - * These are the registers for the 3Com 3c509 and their bit patterns when * - * applicable. They have been taken out the the "EtherLink III Parallel * - * Tasking EISA and ISA Technical Reference" "Beta Draft 10/30/92" manual * - * from 3com. * - * * - **************************************************************************/ - -#define VX_COMMAND 0x0e /* Write. BASE+0x0e is always a - * command reg. */ -#define VX_STATUS 0x0e /* Read. BASE+0x0e is always status - * reg. */ -#define VX_WINDOW 0x0f /* Read. BASE+0x0f is always window - * reg. */ -/* - * Window 0 registers. Setup. - */ -/* Write */ -#define VX_W0_EEPROM_DATA 0x0c -#define VX_W0_EEPROM_COMMAND 0x0a -#define VX_W0_RESOURCE_CFG 0x08 -#define VX_W0_ADDRESS_CFG 0x06 -#define VX_W0_CONFIG_CTRL 0x04 - /* Read */ -#define VX_W0_PRODUCT_ID 0x02 -#define VX_W0_MFG_ID 0x00 - - -/* - * Window 1 registers. Operating Set. - */ -/* Write */ -#define VX_W1_TX_PIO_WR_2 0x02 -#define VX_W1_TX_PIO_WR_1 0x00 -/* Read */ -#define VX_W1_FREE_TX 0x0c -#define VX_W1_TX_STATUS 0x0b /* byte */ -#define VX_W1_TIMER 0x0a /* byte */ -#define VX_W1_RX_STATUS 0x08 -#define VX_W1_RX_PIO_RD_2 0x02 -#define VX_W1_RX_PIO_RD_1 0x00 - -/* - * Window 2 registers. Station Address Setup/Read - */ -/* Read/Write */ -#define VX_W2_ADDR_5 0x05 -#define VX_W2_ADDR_4 0x04 -#define VX_W2_ADDR_3 0x03 -#define VX_W2_ADDR_2 0x02 -#define VX_W2_ADDR_1 0x01 -#define VX_W2_ADDR_0 0x00 - -/* - * Window 3 registers. FIFO Management. - */ -/* Read */ -#define VX_W3_INTERNAL_CFG 0x00 -#define VX_W3_RESET_OPT 0x08 -#define VX_W3_FREE_TX 0x0c -#define VX_W3_FREE_RX 0x0a - -/* - * Window 4 registers. Diagnostics. - */ -/* Read/Write */ -#define VX_W4_MEDIA_TYPE 0x0a -#define VX_W4_CTRLR_STATUS 0x08 -#define VX_W4_NET_DIAG 0x06 -#define VX_W4_FIFO_DIAG 0x04 -#define VX_W4_HOST_DIAG 0x02 -#define VX_W4_TX_DIAG 0x00 - -/* - * Window 5 Registers. Results and Internal status. - */ -/* Read */ -#define VX_W5_READ_0_MASK 0x0c -#define VX_W5_INTR_MASK 0x0a -#define VX_W5_RX_FILTER 0x08 -#define VX_W5_RX_EARLY_THRESH 0x06 -#define VX_W5_TX_AVAIL_THRESH 0x02 -#define VX_W5_TX_START_THRESH 0x00 - -/* - * Window 6 registers. Statistics. - */ -/* Read/Write */ -#define TX_TOTAL_OK 0x0c -#define RX_TOTAL_OK 0x0a -#define TX_DEFERRALS 0x08 -#define RX_FRAMES_OK 0x07 -#define TX_FRAMES_OK 0x06 -#define RX_OVERRUNS 0x05 -#define TX_COLLISIONS 0x04 -#define TX_AFTER_1_COLLISION 0x03 -#define TX_AFTER_X_COLLISIONS 0x02 -#define TX_NO_SQE 0x01 -#define TX_CD_LOST 0x00 - -/**************************************** - * - * Register definitions. - * - ****************************************/ - -/* - * Command register. All windows. - * - * 16 bit register. - * 15-11: 5-bit code for command to be executed. - * 10-0: 11-bit arg if any. For commands with no args; - * this can be set to anything. - */ -#define GLOBAL_RESET (unsigned short) 0x0000 /* Wait at least 1ms - * after issuing */ -#define WINDOW_SELECT (unsigned short) (0x1<<11) -#define START_TRANSCEIVER (unsigned short) (0x2<<11) /* Read ADDR_CFG reg to - * determine whether - * this is needed. If - * so; wait 800 uSec - * before using trans- - * ceiver. */ -#define RX_DISABLE (unsigned short) (0x3<<11) /* state disabled on - * power-up */ -#define RX_ENABLE (unsigned short) (0x4<<11) -#define RX_RESET (unsigned short) (0x5<<11) -#define RX_DISCARD_TOP_PACK (unsigned short) (0x8<<11) -#define TX_ENABLE (unsigned short) (0x9<<11) -#define TX_DISABLE (unsigned short) (0xa<<11) -#define TX_RESET (unsigned short) (0xb<<11) -#define REQ_INTR (unsigned short) (0xc<<11) -/* - * The following C_* acknowledge the various interrupts. Some of them don't - * do anything. See the manual. - */ -#define ACK_INTR (unsigned short) (0x6800) -# define C_INTR_LATCH (unsigned short) (ACK_INTR|0x1) -# define C_CARD_FAILURE (unsigned short) (ACK_INTR|0x2) -# define C_TX_COMPLETE (unsigned short) (ACK_INTR|0x4) -# define C_TX_AVAIL (unsigned short) (ACK_INTR|0x8) -# define C_RX_COMPLETE (unsigned short) (ACK_INTR|0x10) -# define C_RX_EARLY (unsigned short) (ACK_INTR|0x20) -# define C_INT_RQD (unsigned short) (ACK_INTR|0x40) -# define C_UPD_STATS (unsigned short) (ACK_INTR|0x80) -#define SET_INTR_MASK (unsigned short) (0xe<<11) -#define SET_RD_0_MASK (unsigned short) (0xf<<11) -#define SET_RX_FILTER (unsigned short) (0x10<<11) -# define FIL_INDIVIDUAL (unsigned short) (0x1) -# define FIL_MULTICAST (unsigned short) (0x02) -# define FIL_BRDCST (unsigned short) (0x04) -# define FIL_PROMISC (unsigned short) (0x08) -#define SET_RX_EARLY_THRESH (unsigned short) (0x11<<11) -#define SET_TX_AVAIL_THRESH (unsigned short) (0x12<<11) -#define SET_TX_START_THRESH (unsigned short) (0x13<<11) -#define STATS_ENABLE (unsigned short) (0x15<<11) -#define STATS_DISABLE (unsigned short) (0x16<<11) -#define STOP_TRANSCEIVER (unsigned short) (0x17<<11) - -/* - * Status register. All windows. - * - * 15-13: Window number(0-7). - * 12: Command_in_progress. - * 11: reserved. - * 10: reserved. - * 9: reserved. - * 8: reserved. - * 7: Update Statistics. - * 6: Interrupt Requested. - * 5: RX Early. - * 4: RX Complete. - * 3: TX Available. - * 2: TX Complete. - * 1: Adapter Failure. - * 0: Interrupt Latch. - */ -#define S_INTR_LATCH (unsigned short) (0x1) -#define S_CARD_FAILURE (unsigned short) (0x2) -#define S_TX_COMPLETE (unsigned short) (0x4) -#define S_TX_AVAIL (unsigned short) (0x8) -#define S_RX_COMPLETE (unsigned short) (0x10) -#define S_RX_EARLY (unsigned short) (0x20) -#define S_INT_RQD (unsigned short) (0x40) -#define S_UPD_STATS (unsigned short) (0x80) -#define S_COMMAND_IN_PROGRESS (unsigned short) (0x1000) - -#define VX_BUSY_WAIT while (inw(BASE + VX_STATUS) & S_COMMAND_IN_PROGRESS) - -/* Address Config. Register. - * Window 0/Port 06 - */ - -#define ACF_CONNECTOR_BITS 14 -#define ACF_CONNECTOR_UTP 0 -#define ACF_CONNECTOR_AUI 1 -#define ACF_CONNECTOR_BNC 3 - -#define INTERNAL_CONNECTOR_BITS 20 -#define INTERNAL_CONNECTOR_MASK 0x01700000 - -/* - * FIFO Registers. RX Status. - * - * 15: Incomplete or FIFO empty. - * 14: 1: Error in RX Packet 0: Incomplete or no error. - * 13-11: Type of error. - * 1000 = Overrun. - * 1011 = Run Packet Error. - * 1100 = Alignment Error. - * 1101 = CRC Error. - * 1001 = Oversize Packet Error (>1514 bytes) - * 0010 = Dribble Bits. - * (all other error codes, no errors.) - * - * 10-0: RX Bytes (0-1514) - */ -#define ERR_INCOMPLETE (unsigned short) (0x8000) -#define ERR_RX (unsigned short) (0x4000) -#define ERR_MASK (unsigned short) (0x7800) -#define ERR_OVERRUN (unsigned short) (0x4000) -#define ERR_RUNT (unsigned short) (0x5800) -#define ERR_ALIGNMENT (unsigned short) (0x6000) -#define ERR_CRC (unsigned short) (0x6800) -#define ERR_OVERSIZE (unsigned short) (0x4800) -#define ERR_DRIBBLE (unsigned short) (0x1000) - -/* - * TX Status. - * - * Reports the transmit status of a completed transmission. Writing this - * register pops the transmit completion stack. - * - * Window 1/Port 0x0b. - * - * 7: Complete - * 6: Interrupt on successful transmission requested. - * 5: Jabber Error (TP Only, TX Reset required. ) - * 4: Underrun (TX Reset required. ) - * 3: Maximum Collisions. - * 2: TX Status Overflow. - * 1-0: Undefined. - * - */ -#define TXS_COMPLETE 0x80 -#define TXS_INTR_REQ 0x40 -#define TXS_JABBER 0x20 -#define TXS_UNDERRUN 0x10 -#define TXS_MAX_COLLISION 0x8 -#define TXS_STATUS_OVERFLOW 0x4 - -#define RS_AUI (1<<5) -#define RS_BNC (1<<4) -#define RS_UTP (1<<3) -#define RS_T4 (1<<0) -#define RS_TX (1<<1) -#define RS_FX (1<<2) -#define RS_MII (1<<6) - - -/* - * FIFO Status (Window 4) - * - * Supports FIFO diagnostics - * - * Window 4/Port 0x04.1 - * - * 15: 1=RX receiving (RO). Set when a packet is being received - * into the RX FIFO. - * 14: Reserved - * 13: 1=RX underrun (RO). Generates Adapter Failure interrupt. - * Requires RX Reset or Global Reset command to recover. - * It is generated when you read past the end of a packet - - * reading past what has been received so far will give bad - * data. - * 12: 1=RX status overrun (RO). Set when there are already 8 - * packets in the RX FIFO. While this bit is set, no additional - * packets are received. Requires no action on the part of - * the host. The condition is cleared once a packet has been - * read out of the RX FIFO. - * 11: 1=RX overrun (RO). Set when the RX FIFO is full (there - * may not be an overrun packet yet). While this bit is set, - * no additional packets will be received (some additional - * bytes can still be pending between the wire and the RX - * FIFO). Requires no action on the part of the host. The - * condition is cleared once a few bytes have been read out - * from the RX FIFO. - * 10: 1=TX overrun (RO). Generates adapter failure interrupt. - * Requires TX Reset or Global Reset command to recover. - * Disables Transmitter. - * 9-8: Unassigned. - * 7-0: Built in self test bits for the RX and TX FIFO's. - */ -#define FIFOS_RX_RECEIVING (unsigned short) 0x8000 -#define FIFOS_RX_UNDERRUN (unsigned short) 0x2000 -#define FIFOS_RX_STATUS_OVERRUN (unsigned short) 0x1000 -#define FIFOS_RX_OVERRUN (unsigned short) 0x0800 -#define FIFOS_TX_OVERRUN (unsigned short) 0x0400 - -/* - * Misc defines for various things. - */ -#define TAG_ADAPTER 0xd0 -#define ACTIVATE_ADAPTER_TO_CONFIG 0xff -#define ENABLE_DRQ_IRQ 0x0001 -#define MFG_ID 0x506d /* `TCM' */ -#define PROD_ID 0x5090 -#define GO_WINDOW(x) outw(WINDOW_SELECT|(x),BASE+VX_COMMAND) -#define JABBER_GUARD_ENABLE 0x40 -#define LINKBEAT_ENABLE 0x80 -#define ENABLE_UTP (JABBER_GUARD_ENABLE | LINKBEAT_ENABLE) -#define DISABLE_UTP 0x0 -#define RX_BYTES_MASK (unsigned short) (0x07ff) -#define RX_ERROR 0x4000 -#define RX_INCOMPLETE 0x8000 -#define TX_INDICATE 1<<15 -#define is_eeprom_busy(b) (inw((b)+VX_W0_EEPROM_COMMAND)&EEPROM_BUSY) - -#define VX_IOSIZE 0x20 - -#define VX_CONNECTORS 8 - -/* - * Local variables: - * c-basic-offset: 8 - * End: - */ diff --git a/netboot/3c90x.c b/netboot/3c90x.c deleted file mode 100644 index 93996e00a..000000000 --- a/netboot/3c90x.c +++ /dev/null @@ -1,929 +0,0 @@ -/* - * 3c90x.c -- This file implements the 3c90x driver for etherboot. Written - * by Greg Beeley, Greg.Beeley@LightSys.org. Modified by Steve Smith, - * Steve.Smith@Juno.Com - * - * This program Copyright (C) 1999 LightSys Technology Services, Inc. - * Portions Copyright (C) 1999 Steve Smith - * - * This program may be re-distributed in source or binary form, modified, - * sold, or copied for any purpose, provided that the above copyright message - * and this text are included with all source copies or derivative works, and - * provided that the above copyright message and this text are included in the - * documentation of any binary-only distributions. This program is distributed - * WITHOUT ANY WARRANTY, without even the warranty of FITNESS FOR A PARTICULAR - * PURPOSE or MERCHANTABILITY. Please read the associated documentation - * "3c90x.txt" before compiling and using this driver. - * - * -------- - * - * Program written with the assistance of the 3com documentation for - * the 3c905B-TX card, as well as with some assistance from the 3c59x - * driver Donald Becker wrote for the Linux kernel, and with some assistance - * from the remainder of the Etherboot distribution. - * - * REVISION HISTORY: - * - * v0.10 1-26-1998 GRB Initial implementation. - * v0.90 1-27-1998 GRB System works. - * v1.00pre1 2-11-1998 GRB Got prom boot issue fixed. - * v2.0 9-24-1999 SCS Modified for 3c905 (from 3c905b code) - * Re-wrote poll and transmit for - * better error recovery and heavy - * network traffic operation - * - */ - -#include "etherboot.h" -#include "nic.h" -#include "pci.h" -#include "cards.h" -#include "timer.h" - -#define XCVR_MAGIC (0x5A00) -/** any single transmission fails after 16 collisions or other errors - ** this is the number of times to retry the transmission -- this should - ** be plenty - **/ -#define XMIT_RETRIES 250 - -#undef virt_to_bus -#define virt_to_bus(x) ((unsigned long)x) - -/*** Register definitions for the 3c905 ***/ -enum Registers - { - regPowerMgmtCtrl_w = 0x7c, /** 905B Revision Only **/ - regUpMaxBurst_w = 0x7a, /** 905B Revision Only **/ - regDnMaxBurst_w = 0x78, /** 905B Revision Only **/ - regDebugControl_w = 0x74, /** 905B Revision Only **/ - regDebugData_l = 0x70, /** 905B Revision Only **/ - regRealTimeCnt_l = 0x40, /** Universal **/ - regUpBurstThresh_b = 0x3e, /** 905B Revision Only **/ - regUpPoll_b = 0x3d, /** 905B Revision Only **/ - regUpPriorityThresh_b = 0x3c, /** 905B Revision Only **/ - regUpListPtr_l = 0x38, /** Universal **/ - regCountdown_w = 0x36, /** Universal **/ - regFreeTimer_w = 0x34, /** Universal **/ - regUpPktStatus_l = 0x30, /** Universal with Exception, pg 130 **/ - regTxFreeThresh_b = 0x2f, /** 90X Revision Only **/ - regDnPoll_b = 0x2d, /** 905B Revision Only **/ - regDnPriorityThresh_b = 0x2c, /** 905B Revision Only **/ - regDnBurstThresh_b = 0x2a, /** 905B Revision Only **/ - regDnListPtr_l = 0x24, /** Universal with Exception, pg 107 **/ - regDmaCtrl_l = 0x20, /** Universal with Exception, pg 106 **/ - /** **/ - regIntStatusAuto_w = 0x1e, /** 905B Revision Only **/ - regTxStatus_b = 0x1b, /** Universal with Exception, pg 113 **/ - regTimer_b = 0x1a, /** Universal **/ - regTxPktId_b = 0x18, /** 905B Revision Only **/ - regCommandIntStatus_w = 0x0e, /** Universal (Command Variations) **/ - }; - -/** following are windowed registers **/ -enum Registers7 - { - regPowerMgmtEvent_7_w = 0x0c, /** 905B Revision Only **/ - regVlanEtherType_7_w = 0x04, /** 905B Revision Only **/ - regVlanMask_7_w = 0x00, /** 905B Revision Only **/ - }; - -enum Registers6 - { - regBytesXmittedOk_6_w = 0x0c, /** Universal **/ - regBytesRcvdOk_6_w = 0x0a, /** Universal **/ - regUpperFramesOk_6_b = 0x09, /** Universal **/ - regFramesDeferred_6_b = 0x08, /** Universal **/ - regFramesRecdOk_6_b = 0x07, /** Universal with Exceptions, pg 142 **/ - regFramesXmittedOk_6_b = 0x06, /** Universal **/ - regRxOverruns_6_b = 0x05, /** Universal **/ - regLateCollisions_6_b = 0x04, /** Universal **/ - regSingleCollisions_6_b = 0x03, /** Universal **/ - regMultipleCollisions_6_b = 0x02, /** Universal **/ - regSqeErrors_6_b = 0x01, /** Universal **/ - regCarrierLost_6_b = 0x00, /** Universal **/ - }; - -enum Registers5 - { - regIndicationEnable_5_w = 0x0c, /** Universal **/ - regInterruptEnable_5_w = 0x0a, /** Universal **/ - regTxReclaimThresh_5_b = 0x09, /** 905B Revision Only **/ - regRxFilter_5_b = 0x08, /** Universal **/ - regRxEarlyThresh_5_w = 0x06, /** Universal **/ - regTxStartThresh_5_w = 0x00, /** Universal **/ - }; - -enum Registers4 - { - regUpperBytesOk_4_b = 0x0d, /** Universal **/ - regBadSSD_4_b = 0x0c, /** Universal **/ - regMediaStatus_4_w = 0x0a, /** Universal with Exceptions, pg 201 **/ - regPhysicalMgmt_4_w = 0x08, /** Universal **/ - regNetworkDiagnostic_4_w = 0x06, /** Universal with Exceptions, pg 203 **/ - regFifoDiagnostic_4_w = 0x04, /** Universal with Exceptions, pg 196 **/ - regVcoDiagnostic_4_w = 0x02, /** Undocumented? **/ - }; - -enum Registers3 - { - regTxFree_3_w = 0x0c, /** Universal **/ - regRxFree_3_w = 0x0a, /** Universal with Exceptions, pg 125 **/ - regResetMediaOptions_3_w = 0x08, /** Media Options on B Revision, **/ - /** Reset Options on Non-B Revision **/ - regMacControl_3_w = 0x06, /** Universal with Exceptions, pg 199 **/ - regMaxPktSize_3_w = 0x04, /** 905B Revision Only **/ - regInternalConfig_3_l = 0x00, /** Universal, different bit **/ - /** definitions, pg 59 **/ - }; - -enum Registers2 - { - regResetOptions_2_w = 0x0c, /** 905B Revision Only **/ - regStationMask_2_3w = 0x06, /** Universal with Exceptions, pg 127 **/ - regStationAddress_2_3w = 0x00, /** Universal with Exceptions, pg 127 **/ - }; - -enum Registers1 - { - regRxStatus_1_w = 0x0a, /** 90X Revision Only, Pg 126 **/ - }; - -enum Registers0 - { - regEepromData_0_w = 0x0c, /** Universal **/ - regEepromCommand_0_w = 0x0a, /** Universal **/ - regBiosRomData_0_b = 0x08, /** 905B Revision Only **/ - regBiosRomAddr_0_l = 0x04, /** 905B Revision Only **/ - }; - - -/*** The names for the eight register windows ***/ -enum Windows - { - winPowerVlan7 = 0x07, - winStatistics6 = 0x06, - winTxRxControl5 = 0x05, - winDiagnostics4 = 0x04, - winTxRxOptions3 = 0x03, - winAddressing2 = 0x02, - winUnused1 = 0x01, - winEepromBios0 = 0x00, - }; - - -/*** Command definitions for the 3c90X ***/ -enum Commands - { - cmdGlobalReset = 0x00, /** Universal with Exceptions, pg 151 **/ - cmdSelectRegisterWindow = 0x01, /** Universal **/ - cmdEnableDcConverter = 0x02, /** **/ - cmdRxDisable = 0x03, /** **/ - cmdRxEnable = 0x04, /** Universal **/ - cmdRxReset = 0x05, /** Universal **/ - cmdStallCtl = 0x06, /** Universal **/ - cmdTxEnable = 0x09, /** Universal **/ - cmdTxDisable = 0x0A, /** **/ - cmdTxReset = 0x0B, /** Universal **/ - cmdRequestInterrupt = 0x0C, /** **/ - cmdAcknowledgeInterrupt = 0x0D, /** Universal **/ - cmdSetInterruptEnable = 0x0E, /** Universal **/ - cmdSetIndicationEnable = 0x0F, /** Universal **/ - cmdSetRxFilter = 0x10, /** Universal **/ - cmdSetRxEarlyThresh = 0x11, /** **/ - cmdSetTxStartThresh = 0x13, /** **/ - cmdStatisticsEnable = 0x15, /** **/ - cmdStatisticsDisable = 0x16, /** **/ - cmdDisableDcConverter = 0x17, /** **/ - cmdSetTxReclaimThresh = 0x18, /** **/ - cmdSetHashFilterBit = 0x19, /** **/ - }; - - -/*** Values for int status register bitmask **/ -#define INT_INTERRUPTLATCH (1<<0) -#define INT_HOSTERROR (1<<1) -#define INT_TXCOMPLETE (1<<2) -#define INT_RXCOMPLETE (1<<4) -#define INT_RXEARLY (1<<5) -#define INT_INTREQUESTED (1<<6) -#define INT_UPDATESTATS (1<<7) -#define INT_LINKEVENT (1<<8) -#define INT_DNCOMPLETE (1<<9) -#define INT_UPCOMPLETE (1<<10) -#define INT_CMDINPROGRESS (1<<12) -#define INT_WINDOWNUMBER (7<<13) - - -/*** TX descriptor ***/ -typedef struct - { - unsigned int DnNextPtr; - unsigned int FrameStartHeader; - unsigned int HdrAddr; - unsigned int HdrLength; - unsigned int DataAddr; - unsigned int DataLength; - } - TXD; - -/*** RX descriptor ***/ -typedef struct - { - unsigned int UpNextPtr; - unsigned int UpPktStatus; - unsigned int DataAddr; - unsigned int DataLength; - } - RXD; - -/*** Global variables ***/ -static struct - { - unsigned char isBrev; - unsigned char CurrentWindow; - unsigned int IOAddr; - unsigned char HWAddr[ETH_ALEN]; - TXD TransmitDPD; - RXD ReceiveUPD; - } - INF_3C90X; - - -/*** a3c90x_internal_IssueCommand: sends a command to the 3c90x card - ***/ -static int -a3c90x_internal_IssueCommand(int ioaddr, int cmd, int param) - { - unsigned int val; - - /** Build the cmd. **/ - val = cmd; - val <<= 11; - val |= param; - - /** Send the cmd to the cmd register **/ - outw(val, ioaddr + regCommandIntStatus_w); - - /** Wait for the cmd to complete, if necessary **/ - while (inw(ioaddr + regCommandIntStatus_w) & INT_CMDINPROGRESS); - - return 0; - } - - -/*** a3c90x_internal_SetWindow: selects a register window set. - ***/ -static int -a3c90x_internal_SetWindow(int ioaddr, int window) - { - - /** Window already as set? **/ - if (INF_3C90X.CurrentWindow == window) return 0; - - /** Issue the window command. **/ - a3c90x_internal_IssueCommand(ioaddr, cmdSelectRegisterWindow, window); - INF_3C90X.CurrentWindow = window; - - return 0; - } - - -/*** a3c90x_internal_ReadEeprom - read data from the serial eeprom. - ***/ -static unsigned short -a3c90x_internal_ReadEeprom(int ioaddr, int address) - { - unsigned short val; - - /** Select correct window **/ - a3c90x_internal_SetWindow(INF_3C90X.IOAddr, winEepromBios0); - - /** Make sure the eeprom isn't busy **/ - while((1<<15) & inw(ioaddr + regEepromCommand_0_w)); - - /** Read the value. **/ - outw(address + ((0x02)<<6), ioaddr + regEepromCommand_0_w); - while((1<<15) & inw(ioaddr + regEepromCommand_0_w)); - val = inw(ioaddr + regEepromData_0_w); - - return val; - } - - -/*** a3c90x_internal_WriteEepromWord - write a physical word of - *** data to the onboard serial eeprom (not the BIOS prom, but the - *** nvram in the card that stores, among other things, the MAC - *** address). - ***/ -static int -a3c90x_internal_WriteEepromWord(int ioaddr, int address, unsigned short value) - { - /** Select register window **/ - a3c90x_internal_SetWindow(ioaddr, winEepromBios0); - - /** Verify Eeprom not busy **/ - while((1<<15) & inw(ioaddr + regEepromCommand_0_w)); - - /** Issue WriteEnable, and wait for completion. **/ - outw(0x30, ioaddr + regEepromCommand_0_w); - while((1<<15) & inw(ioaddr + regEepromCommand_0_w)); - - /** Issue EraseRegister, and wait for completion. **/ - outw(address + ((0x03)<<6), ioaddr + regEepromCommand_0_w); - while((1<<15) & inw(ioaddr + regEepromCommand_0_w)); - - /** Send the new data to the eeprom, and wait for completion. **/ - outw(value, ioaddr + regEepromData_0_w); - outw(0x30, ioaddr + regEepromCommand_0_w); - while((1<<15) & inw(ioaddr + regEepromCommand_0_w)); - - /** Burn the new data into the eeprom, and wait for completion. **/ - outw(address + ((0x01)<<6), ioaddr + regEepromCommand_0_w); - while((1<<15) & inw(ioaddr + regEepromCommand_0_w)); - - return 0; - } - - -/*** a3c90x_internal_WriteEeprom - write data to the serial eeprom, - *** and re-compute the eeprom checksum. - ***/ -static int -a3c90x_internal_WriteEeprom(int ioaddr, int address, unsigned short value) - { - int cksum = 0,v; - int i; - int maxAddress, cksumAddress; - - if (INF_3C90X.isBrev) - { - maxAddress=0x1f; - cksumAddress=0x20; - } - else - { - maxAddress=0x16; - cksumAddress=0x17; - } - - /** Write the value. **/ - if (a3c90x_internal_WriteEepromWord(ioaddr, address, value) == -1) - return -1; - - /** Recompute the checksum. **/ - for(i=0;i<=maxAddress;i++) - { - v = a3c90x_internal_ReadEeprom(ioaddr, i); - cksum ^= (v & 0xFF); - cksum ^= ((v>>8) & 0xFF); - } - /** Write the checksum to the location in the eeprom **/ - if (a3c90x_internal_WriteEepromWord(ioaddr, cksumAddress, cksum) == -1) - return -1; - - return 0; - } - - - -/*** a3c90x_reset: exported function that resets the card to its default - *** state. This is so the Linux driver can re-set the card up the way - *** it wants to. If CFG_3C90X_PRESERVE_XCVR is defined, then the reset will - *** not alter the selected transceiver that we used to download the boot - *** image. - ***/ -static void -a3c90x_reset(struct nic *nic) - { - int cfg; - -#ifdef CFG_3C90X_PRESERVE_XCVR - /** Read the current InternalConfig value. **/ - a3c90x_internal_SetWindow(INF_3C90X.IOAddr, winTxRxOptions3); - cfg = inl(INF_3C90X.IOAddr + regInternalConfig_3_l); -#endif - - /** Send the reset command to the card **/ - printf("Issuing RESET:\n"); - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdGlobalReset, 0); - - /** wait for reset command to complete **/ - while (inw(INF_3C90X.IOAddr + regCommandIntStatus_w) & INT_CMDINPROGRESS); - - /** global reset command resets station mask, non-B revision cards - ** require explicit reset of values - **/ - a3c90x_internal_SetWindow(INF_3C90X.IOAddr, winAddressing2); - outw(0, INF_3C90X.IOAddr + regStationMask_2_3w+0); - outw(0, INF_3C90X.IOAddr + regStationMask_2_3w+2); - outw(0, INF_3C90X.IOAddr + regStationMask_2_3w+4); - -#ifdef CFG_3C90X_PRESERVE_XCVR - /** Re-set the original InternalConfig value from before reset **/ - a3c90x_internal_SetWindow(INF_3C90X.IOAddr, winTxRxOptions3); - outl(cfg, INF_3C90X.IOAddr + regInternalConfig_3_l); - - /** enable DC converter for 10-Base-T **/ - if ((cfg&0x0300) == 0x0300) - { - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdEnableDcConverter, 0); - } -#endif - - /** Issue transmit reset, wait for command completion **/ - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdTxReset, 0); - while (inw(INF_3C90X.IOAddr + regCommandIntStatus_w) & INT_CMDINPROGRESS) - ; - if (! INF_3C90X.isBrev) - outb(0x01, INF_3C90X.IOAddr + regTxFreeThresh_b); - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdTxEnable, 0); - - /** - ** reset of the receiver on B-revision cards re-negotiates the link - ** takes several seconds (a computer eternity) - **/ - if (INF_3C90X.isBrev) - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdRxReset, 0x04); - else - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdRxReset, 0x00); - while (inw(INF_3C90X.IOAddr + regCommandIntStatus_w) & INT_CMDINPROGRESS); - ; - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdRxEnable, 0); - - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, - cmdSetInterruptEnable, 0); - /** enable rxComplete and txComplete **/ - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, - cmdSetIndicationEnable, 0x0014); - /** acknowledge any pending status flags **/ - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, - cmdAcknowledgeInterrupt, 0x661); - - return; - } - - - -/*** a3c90x_transmit: exported function that transmits a packet. Does not - *** return any particular status. Parameters are: - *** d[6] - destination address, ethernet; - *** t - protocol type (ARP, IP, etc); - *** s - size of the non-header part of the packet that needs transmitted; - *** p - the pointer to the packet data itself. - ***/ -static void -a3c90x_transmit(struct nic *nic, const char *d, unsigned int t, - unsigned int s, const char *p) - { - - struct eth_hdr - { - unsigned char dst_addr[ETH_ALEN]; - unsigned char src_addr[ETH_ALEN]; - unsigned short type; - } hdr; - - unsigned char status; - unsigned i, retries; - - for (retries=0; retries < XMIT_RETRIES ; retries++) - { - /** Stall the download engine **/ - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdStallCtl, 2); - - /** Make sure the card is not waiting on us **/ - inw(INF_3C90X.IOAddr + regCommandIntStatus_w); - inw(INF_3C90X.IOAddr + regCommandIntStatus_w); - - while (inw(INF_3C90X.IOAddr+regCommandIntStatus_w) & - INT_CMDINPROGRESS) - ; - - /** Set the ethernet packet type **/ - hdr.type = htons(t); - - /** Copy the destination address **/ - memcpy(hdr.dst_addr, d, ETH_ALEN); - - /** Copy our MAC address **/ - memcpy(hdr.src_addr, INF_3C90X.HWAddr, ETH_ALEN); - - /** Setup the DPD (download descriptor) **/ - INF_3C90X.TransmitDPD.DnNextPtr = 0; - /** set notification for transmission completion (bit 15) **/ - INF_3C90X.TransmitDPD.FrameStartHeader = (s + sizeof(hdr)) | 0x8000; - INF_3C90X.TransmitDPD.HdrAddr = virt_to_bus(&hdr); - INF_3C90X.TransmitDPD.HdrLength = sizeof(hdr); - INF_3C90X.TransmitDPD.DataAddr = virt_to_bus(p); - INF_3C90X.TransmitDPD.DataLength = s + (1<<31); - - /** Send the packet **/ - outl(virt_to_bus(&(INF_3C90X.TransmitDPD)), - INF_3C90X.IOAddr + regDnListPtr_l); - - /** End Stall and Wait for upload to complete. **/ - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdStallCtl, 3); - while(inl(INF_3C90X.IOAddr + regDnListPtr_l) != 0) - ; - - /** Wait for NIC Transmit to Complete **/ - load_timer2(10*TICKS_PER_MS); /* Give it 10 ms */ - while (!(inw(INF_3C90X.IOAddr + regCommandIntStatus_w)&0x0004) && - timer2_running()) - ; - - if (!(inw(INF_3C90X.IOAddr + regCommandIntStatus_w)&0x0004)) - { - printf("3C90X: Tx Timeout\n"); - continue; - } - - status = inb(INF_3C90X.IOAddr + regTxStatus_b); - - /** acknowledge transmit interrupt by writing status **/ - outb(0x00, INF_3C90X.IOAddr + regTxStatus_b); - - /** successful completion (sans "interrupt Requested" bit) **/ - if ((status & 0xbf) == 0x80) - return; - - printf("3C90X: Status (%hhX)\n", status); - /** check error codes **/ - if (status & 0x02) - { - printf("3C90X: Tx Reclaim Error (%hhX)\n", status); - a3c90x_reset(NULL); - } - else if (status & 0x04) - { - printf("3C90X: Tx Status Overflow (%hhX)\n", status); - for (i=0; i<32; i++) - outb(0x00, INF_3C90X.IOAddr + regTxStatus_b); - /** must re-enable after max collisions before re-issuing tx **/ - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdTxEnable, 0); - } - else if (status & 0x08) - { - printf("3C90X: Tx Max Collisions (%hhX)\n", status); - /** must re-enable after max collisions before re-issuing tx **/ - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdTxEnable, 0); - } - else if (status & 0x10) - { - printf("3C90X: Tx Underrun (%hhX)\n", status); - a3c90x_reset(NULL); - } - else if (status & 0x20) - { - printf("3C90X: Tx Jabber (%hhX)\n", status); - a3c90x_reset(NULL); - } - else if ((status & 0x80) != 0x80) - { - printf("3C90X: Internal Error - Incomplete Transmission (%hhX)\n", - status); - a3c90x_reset(NULL); - } - } - - /** failed after RETRY attempts **/ - printf("Failed to send after %d retries\n", retries); - return; - - } - - - -/*** a3c90x_poll: exported routine that waits for a certain length of time - *** for a packet, and if it sees none, returns 0. This routine should - *** copy the packet to nic->packet if it gets a packet and set the size - *** in nic->packetlen. Return 1 if a packet was found. - ***/ -static int -a3c90x_poll(struct nic *nic) - { - int i, errcode; - - if (!(inw(INF_3C90X.IOAddr + regCommandIntStatus_w)&0x0010)) - { - return 0; - } - - /** we don't need to acknowledge rxComplete -- the upload engine - ** does it for us. - **/ - - /** Build the up-load descriptor **/ - INF_3C90X.ReceiveUPD.UpNextPtr = 0; - INF_3C90X.ReceiveUPD.UpPktStatus = 0; - INF_3C90X.ReceiveUPD.DataAddr = virt_to_bus(nic->packet); - INF_3C90X.ReceiveUPD.DataLength = 1536 + (1<<31); - - /** Submit the upload descriptor to the NIC **/ - outl(virt_to_bus(&(INF_3C90X.ReceiveUPD)), - INF_3C90X.IOAddr + regUpListPtr_l); - - /** Wait for upload completion (upComplete(15) or upError (14)) **/ - for(i=0;i<40000;i++); - while((INF_3C90X.ReceiveUPD.UpPktStatus & ((1<<14) | (1<<15))) == 0) - for(i=0;i<40000;i++); - - /** Check for Error (else we have good packet) **/ - if (INF_3C90X.ReceiveUPD.UpPktStatus & (1<<14)) - { - errcode = INF_3C90X.ReceiveUPD.UpPktStatus; - if (errcode & (1<<16)) - printf("3C90X: Rx Overrun (%hX)\n",errcode>>16); - else if (errcode & (1<<17)) - printf("3C90X: Runt Frame (%hX)\n",errcode>>16); - else if (errcode & (1<<18)) - printf("3C90X: Alignment Error (%hX)\n",errcode>>16); - else if (errcode & (1<<19)) - printf("3C90X: CRC Error (%hX)\n",errcode>>16); - else if (errcode & (1<<20)) - printf("3C90X: Oversized Frame (%hX)\n",errcode>>16); - else - printf("3C90X: Packet error (%hX)\n",errcode>>16); - return 0; - } - - /** Ok, got packet. Set length in nic->packetlen. **/ - nic->packetlen = (INF_3C90X.ReceiveUPD.UpPktStatus & 0x1FFF); - - return 1; - } - - - -/*** a3c90x_disable: exported routine to disable the card. What's this for? - *** the eepro100.c driver didn't have one, so I just left this one empty too. - *** Ideas anyone? - *** Must turn off receiver at least so stray packets will not corrupt memory - *** [Ken] - ***/ -static void -a3c90x_disable(struct nic *nic) - { - /* Disable the receiver and transmitter. */ - outw(cmdRxDisable, INF_3C90X.IOAddr + regCommandIntStatus_w); - outw(cmdTxDisable, INF_3C90X.IOAddr + regCommandIntStatus_w); - } - - - -/*** a3c90x_probe: exported routine to probe for the 3c905 card and perform - *** initialization. If this routine is called, the pci functions did find the - *** card. We just have to init it here. - ***/ -struct nic* -a3c90x_probe(struct nic *nic, unsigned short *probeaddrs, struct pci_device *pci) - { - int i, c; - unsigned short eeprom[0x21]; - unsigned int cfg; - unsigned int mopt; - unsigned short linktype; - - if (probeaddrs == 0 || probeaddrs[0] == 0) - return 0; - - adjust_pci_device(pci); - - INF_3C90X.IOAddr = probeaddrs[0] & ~3; - INF_3C90X.CurrentWindow = 255; - switch (a3c90x_internal_ReadEeprom(INF_3C90X.IOAddr, 0x03)) - { - case 0x9000: /** 10 Base TPO **/ - case 0x9001: /** 10/100 T4 **/ - case 0x9050: /** 10/100 TPO **/ - case 0x9051: /** 10 Base Combo **/ - INF_3C90X.isBrev = 0; - break; - - case 0x9004: /** 10 Base TPO **/ - case 0x9005: /** 10 Base Combo **/ - case 0x9006: /** 10 Base TPO and Base2 **/ - case 0x900A: /** 10 Base FL **/ - case 0x9055: /** 10/100 TPO **/ - case 0x9056: /** 10/100 T4 **/ - case 0x905A: /** 10 Base FX **/ - default: - INF_3C90X.isBrev = 1; - break; - } - - /** Load the EEPROM contents **/ - if (INF_3C90X.isBrev) - { - for(i=0;i<=0x20;i++) - { - eeprom[i] = a3c90x_internal_ReadEeprom(INF_3C90X.IOAddr, i); - } - -#ifdef CFG_3C90X_BOOTROM_FIX - /** Set xcvrSelect in InternalConfig in eeprom. **/ - /* only necessary for 3c905b revision cards with boot PROM bug!!! */ - a3c90x_internal_WriteEeprom(INF_3C90X.IOAddr, 0x13, 0x0160); -#endif - -#ifdef CFG_3C90X_XCVR - if (CFG_3C90X_XCVR == 255) - { - /** Clear the LanWorks register **/ - a3c90x_internal_WriteEeprom(INF_3C90X.IOAddr, 0x16, 0); - } - else - { - /** Set the selected permanent-xcvrSelect in the - ** LanWorks register - **/ - a3c90x_internal_WriteEeprom(INF_3C90X.IOAddr, 0x16, - XCVR_MAGIC + ((CFG_3C90X_XCVR) & 0x000F)); - } -#endif - } - else - { - for(i=0;i<=0x17;i++) - { - eeprom[i] = a3c90x_internal_ReadEeprom(INF_3C90X.IOAddr, i); - } - } - - /** Print identification message **/ - printf("\n\n3C90X Driver 2.00 " - "Copyright 1999 LightSys Technology Services, Inc.\n" - "Portions Copyright 1999 Steve Smith\n"); - printf("Provided with ABSOLUTELY NO WARRANTY.\n"); - printf("-------------------------------------------------------" - "------------------------\n"); - - /** Retrieve the Hardware address and print it on the screen. **/ - INF_3C90X.HWAddr[0] = eeprom[0]>>8; - INF_3C90X.HWAddr[1] = eeprom[0]&0xFF; - INF_3C90X.HWAddr[2] = eeprom[1]>>8; - INF_3C90X.HWAddr[3] = eeprom[1]&0xFF; - INF_3C90X.HWAddr[4] = eeprom[2]>>8; - INF_3C90X.HWAddr[5] = eeprom[2]&0xFF; - printf("MAC Address = %!\n", INF_3C90X.HWAddr); - - /** Program the MAC address into the station address registers **/ - a3c90x_internal_SetWindow(INF_3C90X.IOAddr, winAddressing2); - outw(htons(eeprom[0]), INF_3C90X.IOAddr + regStationAddress_2_3w); - outw(htons(eeprom[1]), INF_3C90X.IOAddr + regStationAddress_2_3w+2); - outw(htons(eeprom[2]), INF_3C90X.IOAddr + regStationAddress_2_3w+4); - outw(0, INF_3C90X.IOAddr + regStationMask_2_3w+0); - outw(0, INF_3C90X.IOAddr + regStationMask_2_3w+2); - outw(0, INF_3C90X.IOAddr + regStationMask_2_3w+4); - - /** Fill in our entry in the etherboot arp table **/ - for(i=0;inode_addr[i] = (eeprom[i/2] >> (8*((i&1)^1))) & 0xff; - - /** Read the media options register, print a message and set default - ** xcvr. - ** - ** Uses Media Option command on B revision, Reset Option on non-B - ** revision cards -- same register address - **/ - a3c90x_internal_SetWindow(INF_3C90X.IOAddr, winTxRxOptions3); - mopt = inw(INF_3C90X.IOAddr + regResetMediaOptions_3_w); - - /** mask out VCO bit that is defined as 10baseFL bit on B-rev cards **/ - if (! INF_3C90X.isBrev) - { - mopt &= 0x7F; - } - - printf("Connectors present: "); - c = 0; - linktype = 0x0008; - if (mopt & 0x01) - { - printf("%s100Base-T4",(c++)?", ":""); - linktype = 0x0006; - } - if (mopt & 0x04) - { - printf("%s100Base-FX",(c++)?", ":""); - linktype = 0x0005; - } - if (mopt & 0x10) - { - printf("%s10Base-2",(c++)?", ":""); - linktype = 0x0003; - } - if (mopt & 0x20) - { - printf("%sAUI",(c++)?", ":""); - linktype = 0x0001; - } - if (mopt & 0x40) - { - printf("%sMII",(c++)?", ":""); - linktype = 0x0006; - } - if ((mopt & 0xA) == 0xA) - { - printf("%s10Base-T / 100Base-TX",(c++)?", ":""); - linktype = 0x0008; - } - else if ((mopt & 0xA) == 0x2) - { - printf("%s100Base-TX",(c++)?", ":""); - linktype = 0x0008; - } - else if ((mopt & 0xA) == 0x8) - { - printf("%s10Base-T",(c++)?", ":""); - linktype = 0x0008; - } - printf(".\n"); - - /** Determine transceiver type to use, depending on value stored in - ** eeprom 0x16 - **/ - if (INF_3C90X.isBrev) - { - if ((eeprom[0x16] & 0xFF00) == XCVR_MAGIC) - { - /** User-defined **/ - linktype = eeprom[0x16] & 0x000F; - } - } - else - { -#ifdef CFG_3C90X_XCVR - if (CFG_3C90X_XCVR != 255) - linktype = CFG_3C90X_XCVR; -#endif /* CFG_3C90X_XCVR */ - - /** I don't know what MII MAC only mode is!!! **/ - if (linktype == 0x0009) - { - if (INF_3C90X.isBrev) - printf("WARNING: MII External MAC Mode only supported on B-revision " - "cards!!!!\nFalling Back to MII Mode\n"); - linktype = 0x0006; - } - } - - /** enable DC converter for 10-Base-T **/ - if (linktype == 0x0003) - { - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdEnableDcConverter, 0); - } - - /** Set the link to the type we just determined. **/ - a3c90x_internal_SetWindow(INF_3C90X.IOAddr, winTxRxOptions3); - cfg = inl(INF_3C90X.IOAddr + regInternalConfig_3_l); - cfg &= ~(0xF<<20); - cfg |= (linktype<<20); - outl(cfg, INF_3C90X.IOAddr + regInternalConfig_3_l); - - /** Now that we set the xcvr type, reset the Tx and Rx, re-enable. **/ - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdTxReset, 0x00); - while (inw(INF_3C90X.IOAddr + regCommandIntStatus_w) & INT_CMDINPROGRESS) - ; - - if (!INF_3C90X.isBrev) - outb(0x01, INF_3C90X.IOAddr + regTxFreeThresh_b); - - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdTxEnable, 0); - - /** - ** reset of the receiver on B-revision cards re-negotiates the link - ** takes several seconds (a computer eternity) - **/ - if (INF_3C90X.isBrev) - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdRxReset, 0x04); - else - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdRxReset, 0x00); - while (inw(INF_3C90X.IOAddr + regCommandIntStatus_w) & INT_CMDINPROGRESS) - ; - - /** Set the RX filter = receive only individual pkts & bcast. **/ - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdSetRxFilter, 0x01 + 0x04); - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdRxEnable, 0); - - - /** - ** set Indication and Interrupt flags , acknowledge any IRQ's - **/ - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, cmdSetInterruptEnable, 0); - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, - cmdSetIndicationEnable, 0x0014); - a3c90x_internal_IssueCommand(INF_3C90X.IOAddr, - cmdAcknowledgeInterrupt, 0x661); - - /** Set our exported functions **/ - nic->reset = a3c90x_reset; - nic->poll = a3c90x_poll; - nic->transmit = a3c90x_transmit; - nic->disable = a3c90x_disable; - - return nic; - } - - diff --git a/netboot/3c90x.txt b/netboot/3c90x.txt deleted file mode 100644 index 3d6746c51..000000000 --- a/netboot/3c90x.txt +++ /dev/null @@ -1,307 +0,0 @@ - - Instructions for use of the 3C90X driver for EtherBoot - - Original 3C905B support by: - Greg Beeley (Greg.Beeley@LightSys.org), - LightSys Technology Services, Inc. - February 11, 1999 - - Updates for 3C90X family by: - Steve Smith (steve.smith@juno.com) - October 1, 1999 - - Minor documentation updates by - Greg Beeley (Greg.Beeley@LightSys.org) - March 29, 2000 - -------------------------------------------------------------------------------- - -I OVERVIEW - - The 3c90X series ethernet cards are a group of high-performance busmaster - DMA cards from 3Com. This particular driver supports both the 3c90x and - the 3c90xB revision cards. 3C90xC family support has been tested to some - degree but not extensively. - - Here's the licensing information: - - This program Copyright (C) 1999 LightSys Technology Services, Inc. - Portions Copyright (C) 1999 Steve Smith. - - This program may be re-distributed in source or binary form, modified, - sold, or copied for any purpose, provided that the above copyright message - and this text are included with all source copies or derivative works, and - provided that the above copyright message and this text are included in the - documentation of any binary-only distributions. This program is - distributed WITHOUT ANY WARRANTY, without even the warranty of FITNESS FOR - A PARTICULAR PURPOSE or MERCHANTABILITY. Please read the associated - documentation "3c90x.txt" before compiling and using this driver. - - -II FLASH PROMS - - The 3c90xB cards, according to the 3Com documentation, only accept the - following flash memory chips: - - Atmel AT29C512 (64 kilobyte) - Atmel AT29C010 (128 kilobyte) - - The 3c90x cards, according to the 3Com documentation, accept the - following flash memory chips capacities: - - 64 kb (8 kB) - 128 kb (16 kB) - 256 kb (32 kB) and - 512 kb (64 kB) - - Atmel AT29C512 (64 kilobyte) chips are specifically listed for both - adapters, but flashing on the 3c905b cards would only be supported - through the Atmel parts. Any device, of the supported size, should - be supported when programmed by a dedicated PROM programmer (e.g. - not the card). - - To use this driver in such a PROM, visit Atmel's web site and download - their .PDF file containing a list of their distributors. Contact the - distributors for pricing information. The prices are quite reasonable - (about $3 US each for the 64 kB part), and are comparable to what one would - expect for similarly sized standard EPROMs. And, the flash chips are much - easier to work with, as they don't need to be UV-erased to be reprogrammed. - The 3C905B card actually provides a method to program the flash memory - while it is resident on board the card itself; if someone would like to - write a small DOS program to do the programming, I can provide the - information about the registers and so forth. - - A utility program, 3c90xutil, is provided with Etherboot in the 'contrib' - directory that allows for the on-board flashing of the ROM while Linux - is running. The program has been successfully used under Linux, but I - have heard problem reports of its use under FreeBSD. Anyone willing to - make it work under FreeBSD is more than welcome to do so! - - You also have the option of using EPROM chips - the 3C905B-TX-NM has been - successfully tested with 27C256 (32kB) and 27C512 (64kB) chips with a - specified access time of 100ns and faster. - - -III GENERAL USE - - Normally, the basic procedure for using this driver is as follows: - - 1. Run the 3c90xcfg program on the driver diskette to enable the - boot PROM and set it to 64k or 128k, as appropriate. - 2. Build the appropriate 3c90x.fd0 or 3c90x.fd0 floppy image with - possibly the value CFG_3C90X_XCVR defined to the transceiver type that - you want to use (i.e., 10/100 rj45, AUI, coax, MII). - 3. Run the floppy image on the PC to be network booted, to get - it configured, and to verify that it will boot properly. - 4. Build the 3c90x.rom or 3c90x.lzrom PROM image and program - it into the flash or EPROM memory chip. - 5. Put the PROM in the ethernet card, boot and enable 'boot from - network first' in the system BIOS, save and reboot. - - Here are some issues to be aware of: - - 1. If you experience crashes or different behaviour when using the - boot PROM, add the setting CFG_3C90X_BOOTROM_FIX and go through the - steps 2-5 above. This works around a bug in some 3c905B cards (see - below), but has some side-effects which may not be desirable. - Please note that you have to boot off a floppy (not PROM!) once for - this fix to take effect. - 2. The possible need to manually set the CFG_3C90X_XCVR value to - configure the transceiver type. Values are listed below. - 3. The possible need to define CFG_3C90X_PRESERVE_XCVR for use in - operating systems that don't intelligently determine the - transceiver type. - - Some things that are on the 'To-Do' list, perhaps for me, but perhaps - for any other volunteers out there: - - 1. Extend the driver to fully implement the auto-select - algorithm if the card has multiple media ports. - 2. Fix any bugs in the code .... - 3. Extend the driver to support the 3c905c revision cards - "officially". Right now, the support has been primarily empirical - and not based on 3c905C documentation. - - Now for the details.... - - This driver has been tested on roughly 300 systems. The main two - configuration issues to contend with are: - - 1. Ensure that PCI Busmastering is enabled for the adapter (configured - in the CMOS setup) - 2. Some systems don't work properly with the adapter when plug and - play OS is enabled; I always set it to "No" or "Disabled" -- this makes - it easier and really doesn't adversely affect anything. - - Roughly 95% of the systems worked when configured properly. A few - have issues with booting locally once the boot PROM has been installed - (this number has been less than 2%). Other configuration issues that - to check: - - 1. Newer BIOS's actually work correctly with the network boot order. - Set the network adapter first. Most older BIOS's automatically go to - the network boot PROM first. - 2. For systems where the adapter was already installed and is just - having the PROM installed, try setting the "reset configuration data" - to yes in the CMOS setup if the BIOS isn't seen at first. If your BIOS - doesn't have this option, remove the card, start the system, shut down, - install the card and restart (or switch to a different PCI slot). - 3. Make sure the CMOS security settings aren't preventing a boot. - - The 3c905B cards have a significant 'bug' that relates to the flash prom: - unless the card is set internally to the MII transceiver, it will only - read the first 8k of the PROM image. Don't ask why -- it seems really - obscure, but it has to do with the way they mux'd the address lines - from the PCI bus to the ROM. Unfortunately, most of us are not using - MII transceivers, and even the .lzrom image ends up being just a little - bit larger than 8k. Note that the workaround for this is disabled by - default, because the Windows NT 4.0 driver does not like it (no packets - are transmitted). - - So, the solution that I've used is to internally set the card's nvram - configuration to use MII when it boots. The 3c905b driver does this - automatically. This way, the 16k prom image can be loaded into memory, - and then the 3c905b driver can set the temporary configuration of the - card to an appropriate value, either configurable by the user or chosen - by the driver. - - To enable the 3c905B bugfix, which is necessary for these cards when - booting from the Flash ROM, define -DCFG_3C90X_BOOTROM_FIX when building, - create a floppy image and boot it once. - Thereafter, the card should accept the larger prom image. - - The driver should choose an appropriate transceiver on the card. However, - if it doesn't on your card or if you need to, for instance, set your - card to 10mbps when connected to an unmanaged 10/100 hub, you can specify - which transceiver you want to use. To do this, build the 3c905b.fd0 - image with -DCFG_3C90X_XCVR=x, where 'x' is one of the following - values: - - 0 10Base-T - 1 10mbps AUI - 3 10Base-2 (thinnet/coax) - 4 100Base-TX - 5 100Base-FX - 6 MII - 8 Auto-negotiation 10Base-T / 100Base-TX (usually the default) - 9 MII External MAC Mode - 255 Allow driver to choose an 'appropriate' media port. - - Then proceed from step 2 in the above 'general use' instructions. The - .rom image can be built with CFG_3C90X_XCVR set to a value, but you - normally don't want to do this, since it is easier to change the - transceiver type by rebuilding a new floppy, changing the BIOS to floppy - boot, booting, and then changing the BIOS back to network boot. If - CFG_3C90X_XCVR is not set in a particular build, it just uses the - current configuration (either its 'best guess' or whatever the stored - CFG_3C90X_XCVR value was from the last time it was set). - - [[ Note for the more technically inclined: The CFG_3C90X_XCVR value is - programmed into a register in the card's NVRAM that was reserved for - LanWorks PROM images to use. When the driver boots, the card comes - up in MII mode, and the driver checks the LanWorks register to find - out if the user specified a transceiver type. If it finds that - information, it uses that, otherwise it picks a transceiver that the - card has based on the 3c905b's MediaOptions register. This driver isn't - quite smart enough to always determine which media port is actually - _connected_; maybe someone else would like to take on that task (it - actually involves sending a self-directed packet and seeing if it - comes back. IF it does, that port is connected). ]] - - Another issue to keep in mind is that it is possible that some OS'es - might not be happy with the way I've handled the PROM-image hack with - setting MII mode on bootup. Linux 2.0.35 does not have this problem. - Behavior of other systems may vary. The 3com documentation specifically - says that, at least with the card that I have, the device driver in the - OS should auto-select the media port, so other drivers should work fine - with this 'hack'. However, if yours doesn't seem to, you can try defining - CFG_3C90X_PRESERVE_XCVR when building to cause Etherboot to keep the - working setting (that allowed the bootp/tftp process) across the eth_reset - operation. - - -IV FOR DEVELOPERS.... - - If you would like to fix/extend/etc. this driver, feel free to do so; just - be sure you can test the modified version on the 3c905B-TX cards that the - driver was originally designed for. This section of this document gives - some information that might be relevant to a programmer. - - A. Main Entry Point - - a3c90x_probe is the main entry point for this driver. It is referred - to in an array in 'config.c'. - - B. Other Important Functions - - The functions a3c90x_transmit, a3c90x_poll, a3c90x_reset, and - a3c90x_disable are static functions that EtherBoot finds out about - as a result of a3c90x_probe setting entries in the nic structure - for them. The EtherBoot framework does not use interrupts. It is - polled. All transmit and receive operations are initiated by the - etherboot framework, not by an interrupt or by the driver. - - C. Internal Functions - - The following functions are internal to the driver: - - a3c90x_internal_IssueCommand - sends a command to the 3c905b card. - a3c90x_internal_SetWindow - shifts between one of eight register - windows onboard the 3c90x. The bottom 16 bytes of the card's - I/O space are multiplexed among 128 bytes, only 16 of which are - visible at any one time. This SetWindow function selects one of - the eight sets. - a3c90x_internal_ReadEeprom - reads a word (16 bits) from the - card's onboard nvram. This is NOT the BIOS boot rom. This is - where the card stores such things as its hardware address. - a3c90x_internal_WriteEeprom - writes a word (16 bits) to the - card's nvram, and recomputes the eeprom checksum. - a3c90x_internal_WriteEepromWord - writes a word (16 bits) to the - card's nvram. Used by the above routine. - a3c90x_internal_WriteEepromWord - writes a word (16 bits) to the - card's nvram. Used by the above routine. - - D. Globals - - All global variables are inside a global structure named INF_3C90X. - So, wherever you see that structure referenced, you know the variable - is a global. Just keeps things a little neater. - - E. Enumerations - - There are quite a few enumerated type definitions for registers and - so forth, many for registers that I didn't even touch in the driver. - Register types start with 'reg', window numbers (for SetWindow) - start with 'win', and commands (for IssueCommand) start with 'cmd'. - Register offsets also include an indication in the name as to the - size of the register (_b = byte, _w = word, _l = long), and which - window the register is in, if it is windowed (0-7). - - F. Why the 'a3c90x' name? - - I had to come up with a letter at the beginning of all of the - identifiers, since 3com so conveniently had their name start with a - number. Another driver used 't' (for 'three'?); I chose 'a' for - no reason at all. - -Addendum by Jorge L. deLyra , 22Nov2000 re -working around the 3C905 hardware bug mentioned above: - -Use this floppy to fix any 3COM model 3C905B PCI 10/100 Ethernet cards -that fail to load and run the boot program the first time around. If -they have a "Lucent" rather than a "Broadcom" chipset these cards have -a configuration bug that causes a hang when trying to load the boot -program from the PROM, if you try to use them right out of the box. - -The boot program in this floppy is the file named 3c905b-tpo100.rom -from Etherboot version 4.6.10, compiled with the bugfix parameter - - CFG_3C90X_BOOTROM_FIX - -You have to take the chip off the card and boot the system once using -this floppy. Once loaded from the floppy, the boot program will access -the card and change some setting in it, correcting the problem. After -that you may use either this boot program or the normal one, compiled -without this bugfix parameter, to boot the machine from the PROM chip. - -[Any recent Etherboot version should do, not just 4.6.10 - Ed.] diff --git a/netboot/Makefile.am b/netboot/Makefile.am deleted file mode 100644 index 0855bb4ad..000000000 --- a/netboot/Makefile.am +++ /dev/null @@ -1,219 +0,0 @@ -# For and . -INCLUDES = -I$(top_srcdir)/stage2 -I$(top_srcdir)/stage1 - -# Don't build the netboot support by default. -if NETBOOT_SUPPORT -LIBDRIVERS = libdrivers.a -else -LIBDRIVERS = -endif - -noinst_LIBRARIES = $(LIBDRIVERS) - -libdrivers_a_SOURCES = cards.h config.c etherboot.h \ - fsys_tftp.c linux-asm-io.h linux-asm-string.h \ - main.c misc.c nic.h osdep.h pci.c pci.h timer.c timer.h -EXTRA_libdrivers_a_SOURCES = 3c509.c 3c509.h 3c595.c 3c595.h 3c90x.c \ - cs89x0.c cs89x0.h davicom.c depca.c eepro.c eepro100.c \ - epic100.c epic100.h fa311.c i82586.c lance.c natsemi.c \ - ni5010.c ns8390.c ns8390.h otulip.c otulip.h rtl8139.c \ - sis900.c sis900.h sk_g16.c sk_g16.h smc9000.c smc9000.h \ - tiara.c tlan.c tulip.c via-rhine.c w89c840.c -libdrivers_a_CFLAGS = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - -DFSYS_TFTP=1 $(NET_CFLAGS) $(NET_EXTRAFLAGS) -# Filled by configure. -libdrivers_a_LIBADD = @NETBOOT_DRIVERS@ -libdrivers_a_DEPENDENCIES = $(libdrivers_a_LIBADD) - -EXTRA_DIST = README.netboot 3c90x.txt cs89x0.txt sis900.txt tulip.txt - -# These below are several special rules for the device drivers. -# We cannot use a simple rule for them... - -# What objects are derived from a driver? -3c509_drivers = 3c509.o 3c529.o -3c595_drivers = 3c595.o -3c90x_drivers = 3c90x.o -cs89x0_drivers = cs89x0.o -davicom_drivers = davicom.o -depca_drivers = depca.o -eepro_drivers = eepro.o -eepro100_drivers = eepro100.o -epic100_drivers = epic100.o -#fa311_drivers = fa311.o -i82586_drivers = 3c507.o exos205.o ni5210.o -lance_drivers = lance.o ne2100.o ni6510.o -natsemi_drivers = natsemi.o -ni5010_drivers = ni5010.o -ns8390_drivers = 3c503.o ne.o ns8390.o wd.o -otulip_drivers = otulip.o -rtl8139_drivers = rtl8139.o -sis900_drivers = sis900.o -sk_g16_drivers = sk_g16.o -smc9000_drivers = smc9000.o -tiara_drivers = tiara.o -#tlan_drivers = tlan.o -tulip_drivers = tulip.o -via_rhine_drivers = via_rhine.o -w89c840_drivers = w89c840.o - -# Is it really necessary to specify dependecies explicitly? -$(3c509_drivers): 3c509.c 3c509.h -$(3c509_drivers): %.o: 3c509.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(3c595_drivers): 3c595.c 3c595.h -$(3c595_drivers): %.o: 3c595.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(3c90x_drivers): 3c90x.c -$(3c90x_drivers): %.o: 3c90x.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(cs89x0_drivers): cs89x0.c cs89x0.h -$(cs89x0_drivers): %.o: cs89x0.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(davicom_drivers): davicom.c -$(davicom_drivers): %.o: davicom.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(depca_drivers): depca.c -$(depca_drivers): %.o: depca.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(eepro_drivers): eepro.c -$(eepro_drivers): %.o: eepro.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(eepro100_drivers): eepro100.c -$(eepro100_drivers): %.o: eepro100.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(epic100_drivers): epic100.c epic100.h -$(epic100_drivers): %.o: epic100.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -#$(fa311_drivers): fa311.c -#$(fa311_drivers): %.o: fa311.c -# $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -# $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(i82586_drivers): i82586.c -$(i82586_drivers): %.o: i82586.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(lance_drivers): lance.c -$(lance_drivers): %.o: lance.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(natsemi_drivers): natsemi.c -$(natsemi_drivers): %.o: natsemi.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(ni5010_drivers): ni5010.c -$(ni5010_drivers): %.o: ni5010.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(ns8390_drivers): ns8390.c ns8390.h -$(ns8390_drivers): %.o: ns8390.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(otulip_drivers): otulip.c otulip.h -$(otulip_drivers): %.o: otulip.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(rtl8139_drivers): rtl8139.c -$(rtl8139_drivers): %.o: rtl8139.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(sis900_drivers): sis900.c -$(sis900_drivers): %.o: sis900.c sis900.h - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(sk_g16_drivers): sk_g16.c sk_g16.h -$(sk_g16_drivers): %.o: sk_g16.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(smc9000_drivers): smc9000.c smc9000.h -$(smc9000_drivers): %.o: smc9000.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(tiara_drivers): tiara.c -$(tiara_drivers): %.o: tiara.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -#$(tlan_drivers): tlan.c -#$(tlan_drivers): %.o: tlan.c -# $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -# $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(tulip_drivers): tulip.c -$(tulip_drivers): %.o: tulip.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(via_rhine_drivers): via-rhine.c -$(via_rhine_drivers): %.o: via-rhine.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(w89c840_drivers): w89c840.c -$(w89c840_drivers): %.o: w89c840.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -# Per-object flags. -3c509_o_CFLAGS = -DINCLUDE_3C509=1 -3c529_o_CFLAGS = -DINCLUDE_3C529=1 -3c595_o_CFLAGS = -DINCLUDE_3C595=1 -3c90x_o_CFLAGS = -DINCLUDE_3C90X=1 -cs89x0_o_CFLAGS = -DINCLUDE_CS89X0=1 -davicom_o_CFLAGS = -DINCLUDE_DAVICOM=1 -depca_o_CFLAGS = -DINCLUDE_DEPCA=1 -eepro_o_CFLAGS = -DINCLUDE_EEPRO=1 -eepro100_o_CFLAGS = -DINCLUDE_EEPRO100=1 -epic100_o_CFLAGS = -DINCLUDE_EPIC100=1 -#fa311_o_CFLAGS = -DINCLUDE_FA311=1 -3c507_o_CFLAGS = -DINCLUDE_3C507=1 -exos205_o_CFLAGS = -DINCLUDE_EXOS205=1 -ni5210_o_CFLAGS = -DINCLUDE_NI5210=1 -lance_o_CFLAGS = -DINCLUDE_LANCE=1 -ne2100_o_CFLAGS = -DINCLUDE_NE2100=1 -ni6510_o_CFLAGS = -DINCLUDE_NI6510=1 -natsemi_o_CFLAGS = -DINCLUDE_NATSEMI=1 -ni5010_o_CFLAGS = -DINCLUDE_NI5010=1 -3c503_o_CFLAGS = -DINCLUDE_3C503=1 -ne_o_CFLAGS = -DINCLUDE_NE=1 -ns8390_o_CFLAGS = -DINCLUDE_NS8390=1 -wd_o_CFLAGS = -DINCLUDE_WD=1 -otulip_o_CFLAGS = -DINCLUDE_OTULIP=1 -rtl8139_o_CFLAGS = -DINCLUDE_RTL8139=1 -sis900_o_CFLAGS = -DINCLUDE_SIS900=1 -sk_g16_o_CFLAGS = -DINCLUDE_SK_G16=1 -smc9000_o_CFLAGS = -DINCLUDE_SMC9000=1 -tiara_o_CFLAGS = -DINCLUDE_TIARA=1 -#tlan_o_CFLAGS = -DINCLUDE_TLAN=1 -tulip_o_CFLAGS = -DINCLUDE_TULIP=1 -via_rhine_o_CFLAGS = -DINCLUDE_VIA_RHINE=1 -w89c840_o_CFLAGS = -DINCLUDE_W89C840=1 diff --git a/netboot/Makefile.in b/netboot/Makefile.in deleted file mode 100644 index 75ac29971..000000000 --- a/netboot/Makefile.in +++ /dev/null @@ -1,1091 +0,0 @@ -# Makefile.in generated by automake 1.9.4 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -SOURCES = $(libdrivers_a_SOURCES) $(EXTRA_libdrivers_a_SOURCES) - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = netboot -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -LIBRARIES = $(noinst_LIBRARIES) -AR = ar -ARFLAGS = cru -libdrivers_a_AR = $(AR) $(ARFLAGS) -am_libdrivers_a_OBJECTS = libdrivers_a-config.$(OBJEXT) \ - libdrivers_a-fsys_tftp.$(OBJEXT) libdrivers_a-main.$(OBJEXT) \ - libdrivers_a-misc.$(OBJEXT) libdrivers_a-pci.$(OBJEXT) \ - libdrivers_a-timer.$(OBJEXT) -libdrivers_a_OBJECTS = $(am_libdrivers_a_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libdrivers_a_SOURCES) $(EXTRA_libdrivers_a_SOURCES) -DIST_SOURCES = $(libdrivers_a_SOURCES) $(EXTRA_libdrivers_a_SOURCES) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ -BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ -CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ -DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FSYS_CFLAGS = @FSYS_CFLAGS@ -GRUB_CFLAGS = @GRUB_CFLAGS@ -GRUB_LIBS = @GRUB_LIBS@ -HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ -HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ -MAKEINFO = @MAKEINFO@ -NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ -NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ -NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ -NET_CFLAGS = @NET_CFLAGS@ -NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ -OBJCOPY = @OBJCOPY@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PERL = @PERL@ -RANLIB = @RANLIB@ -SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ -SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ -SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ -SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STAGE1_CFLAGS = @STAGE1_CFLAGS@ -STAGE2_CFLAGS = @STAGE2_CFLAGS@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ - -# For and . -INCLUDES = -I$(top_srcdir)/stage2 -I$(top_srcdir)/stage1 -@NETBOOT_SUPPORT_FALSE@LIBDRIVERS = - -# Don't build the netboot support by default. -@NETBOOT_SUPPORT_TRUE@LIBDRIVERS = libdrivers.a -noinst_LIBRARIES = $(LIBDRIVERS) -libdrivers_a_SOURCES = cards.h config.c etherboot.h \ - fsys_tftp.c linux-asm-io.h linux-asm-string.h \ - main.c misc.c nic.h osdep.h pci.c pci.h timer.c timer.h - -EXTRA_libdrivers_a_SOURCES = 3c509.c 3c509.h 3c595.c 3c595.h 3c90x.c \ - cs89x0.c cs89x0.h davicom.c depca.c eepro.c eepro100.c \ - epic100.c epic100.h fa311.c i82586.c lance.c natsemi.c \ - ni5010.c ns8390.c ns8390.h otulip.c otulip.h rtl8139.c \ - sis900.c sis900.h sk_g16.c sk_g16.h smc9000.c smc9000.h \ - tiara.c tlan.c tulip.c via-rhine.c w89c840.c - -libdrivers_a_CFLAGS = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - -DFSYS_TFTP=1 $(NET_CFLAGS) $(NET_EXTRAFLAGS) - -# Filled by configure. -libdrivers_a_LIBADD = @NETBOOT_DRIVERS@ -libdrivers_a_DEPENDENCIES = $(libdrivers_a_LIBADD) -EXTRA_DIST = README.netboot 3c90x.txt cs89x0.txt sis900.txt tulip.txt - -# These below are several special rules for the device drivers. -# We cannot use a simple rule for them... - -# What objects are derived from a driver? -3c509_drivers = 3c509.o 3c529.o -3c595_drivers = 3c595.o -3c90x_drivers = 3c90x.o -cs89x0_drivers = cs89x0.o -davicom_drivers = davicom.o -depca_drivers = depca.o -eepro_drivers = eepro.o -eepro100_drivers = eepro100.o -epic100_drivers = epic100.o -#fa311_drivers = fa311.o -i82586_drivers = 3c507.o exos205.o ni5210.o -lance_drivers = lance.o ne2100.o ni6510.o -natsemi_drivers = natsemi.o -ni5010_drivers = ni5010.o -ns8390_drivers = 3c503.o ne.o ns8390.o wd.o -otulip_drivers = otulip.o -rtl8139_drivers = rtl8139.o -sis900_drivers = sis900.o -sk_g16_drivers = sk_g16.o -smc9000_drivers = smc9000.o -tiara_drivers = tiara.o -#tlan_drivers = tlan.o -tulip_drivers = tulip.o -via_rhine_drivers = via_rhine.o -w89c840_drivers = w89c840.o - -# Per-object flags. -3c509_o_CFLAGS = -DINCLUDE_3C509=1 -3c529_o_CFLAGS = -DINCLUDE_3C529=1 -3c595_o_CFLAGS = -DINCLUDE_3C595=1 -3c90x_o_CFLAGS = -DINCLUDE_3C90X=1 -cs89x0_o_CFLAGS = -DINCLUDE_CS89X0=1 -davicom_o_CFLAGS = -DINCLUDE_DAVICOM=1 -depca_o_CFLAGS = -DINCLUDE_DEPCA=1 -eepro_o_CFLAGS = -DINCLUDE_EEPRO=1 -eepro100_o_CFLAGS = -DINCLUDE_EEPRO100=1 -epic100_o_CFLAGS = -DINCLUDE_EPIC100=1 -#fa311_o_CFLAGS = -DINCLUDE_FA311=1 -3c507_o_CFLAGS = -DINCLUDE_3C507=1 -exos205_o_CFLAGS = -DINCLUDE_EXOS205=1 -ni5210_o_CFLAGS = -DINCLUDE_NI5210=1 -lance_o_CFLAGS = -DINCLUDE_LANCE=1 -ne2100_o_CFLAGS = -DINCLUDE_NE2100=1 -ni6510_o_CFLAGS = -DINCLUDE_NI6510=1 -natsemi_o_CFLAGS = -DINCLUDE_NATSEMI=1 -ni5010_o_CFLAGS = -DINCLUDE_NI5010=1 -3c503_o_CFLAGS = -DINCLUDE_3C503=1 -ne_o_CFLAGS = -DINCLUDE_NE=1 -ns8390_o_CFLAGS = -DINCLUDE_NS8390=1 -wd_o_CFLAGS = -DINCLUDE_WD=1 -otulip_o_CFLAGS = -DINCLUDE_OTULIP=1 -rtl8139_o_CFLAGS = -DINCLUDE_RTL8139=1 -sis900_o_CFLAGS = -DINCLUDE_SIS900=1 -sk_g16_o_CFLAGS = -DINCLUDE_SK_G16=1 -smc9000_o_CFLAGS = -DINCLUDE_SMC9000=1 -tiara_o_CFLAGS = -DINCLUDE_TIARA=1 -#tlan_o_CFLAGS = -DINCLUDE_TLAN=1 -tulip_o_CFLAGS = -DINCLUDE_TULIP=1 -via_rhine_o_CFLAGS = -DINCLUDE_VIA_RHINE=1 -w89c840_o_CFLAGS = -DINCLUDE_W89C840=1 -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu netboot/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu netboot/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -clean-noinstLIBRARIES: - -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) -libdrivers.a: $(libdrivers_a_OBJECTS) $(libdrivers_a_DEPENDENCIES) - -rm -f libdrivers.a - $(libdrivers_a_AR) libdrivers.a $(libdrivers_a_OBJECTS) $(libdrivers_a_LIBADD) - $(RANLIB) libdrivers.a - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-3c509.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-3c595.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-3c90x.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-config.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-cs89x0.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-davicom.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-depca.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-eepro.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-eepro100.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-epic100.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-fa311.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-fsys_tftp.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-i82586.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-lance.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-main.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-misc.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-natsemi.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-ni5010.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-ns8390.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-otulip.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-pci.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-rtl8139.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-sis900.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-sk_g16.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-smc9000.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-tiara.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-timer.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-tlan.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-tulip.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-via-rhine.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-w89c840.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -libdrivers_a-config.o: config.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-config.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-config.Tpo" -c -o libdrivers_a-config.o `test -f 'config.c' || echo '$(srcdir)/'`config.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-config.Tpo" "$(DEPDIR)/libdrivers_a-config.Po"; else rm -f "$(DEPDIR)/libdrivers_a-config.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config.c' object='libdrivers_a-config.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-config.o `test -f 'config.c' || echo '$(srcdir)/'`config.c - -libdrivers_a-config.obj: config.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-config.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-config.Tpo" -c -o libdrivers_a-config.obj `if test -f 'config.c'; then $(CYGPATH_W) 'config.c'; else $(CYGPATH_W) '$(srcdir)/config.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-config.Tpo" "$(DEPDIR)/libdrivers_a-config.Po"; else rm -f "$(DEPDIR)/libdrivers_a-config.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config.c' object='libdrivers_a-config.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-config.obj `if test -f 'config.c'; then $(CYGPATH_W) 'config.c'; else $(CYGPATH_W) '$(srcdir)/config.c'; fi` - -libdrivers_a-fsys_tftp.o: fsys_tftp.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-fsys_tftp.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo" -c -o libdrivers_a-fsys_tftp.o `test -f 'fsys_tftp.c' || echo '$(srcdir)/'`fsys_tftp.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo" "$(DEPDIR)/libdrivers_a-fsys_tftp.Po"; else rm -f "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_tftp.c' object='libdrivers_a-fsys_tftp.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-fsys_tftp.o `test -f 'fsys_tftp.c' || echo '$(srcdir)/'`fsys_tftp.c - -libdrivers_a-fsys_tftp.obj: fsys_tftp.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-fsys_tftp.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo" -c -o libdrivers_a-fsys_tftp.obj `if test -f 'fsys_tftp.c'; then $(CYGPATH_W) 'fsys_tftp.c'; else $(CYGPATH_W) '$(srcdir)/fsys_tftp.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo" "$(DEPDIR)/libdrivers_a-fsys_tftp.Po"; else rm -f "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_tftp.c' object='libdrivers_a-fsys_tftp.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-fsys_tftp.obj `if test -f 'fsys_tftp.c'; then $(CYGPATH_W) 'fsys_tftp.c'; else $(CYGPATH_W) '$(srcdir)/fsys_tftp.c'; fi` - -libdrivers_a-main.o: main.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-main.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-main.Tpo" -c -o libdrivers_a-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-main.Tpo" "$(DEPDIR)/libdrivers_a-main.Po"; else rm -f "$(DEPDIR)/libdrivers_a-main.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='libdrivers_a-main.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c - -libdrivers_a-main.obj: main.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-main.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-main.Tpo" -c -o libdrivers_a-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-main.Tpo" "$(DEPDIR)/libdrivers_a-main.Po"; else rm -f "$(DEPDIR)/libdrivers_a-main.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='libdrivers_a-main.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` - -libdrivers_a-misc.o: misc.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-misc.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-misc.Tpo" -c -o libdrivers_a-misc.o `test -f 'misc.c' || echo '$(srcdir)/'`misc.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-misc.Tpo" "$(DEPDIR)/libdrivers_a-misc.Po"; else rm -f "$(DEPDIR)/libdrivers_a-misc.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='misc.c' object='libdrivers_a-misc.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-misc.o `test -f 'misc.c' || echo '$(srcdir)/'`misc.c - -libdrivers_a-misc.obj: misc.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-misc.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-misc.Tpo" -c -o libdrivers_a-misc.obj `if test -f 'misc.c'; then $(CYGPATH_W) 'misc.c'; else $(CYGPATH_W) '$(srcdir)/misc.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-misc.Tpo" "$(DEPDIR)/libdrivers_a-misc.Po"; else rm -f "$(DEPDIR)/libdrivers_a-misc.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='misc.c' object='libdrivers_a-misc.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-misc.obj `if test -f 'misc.c'; then $(CYGPATH_W) 'misc.c'; else $(CYGPATH_W) '$(srcdir)/misc.c'; fi` - -libdrivers_a-pci.o: pci.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-pci.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-pci.Tpo" -c -o libdrivers_a-pci.o `test -f 'pci.c' || echo '$(srcdir)/'`pci.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-pci.Tpo" "$(DEPDIR)/libdrivers_a-pci.Po"; else rm -f "$(DEPDIR)/libdrivers_a-pci.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pci.c' object='libdrivers_a-pci.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-pci.o `test -f 'pci.c' || echo '$(srcdir)/'`pci.c - -libdrivers_a-pci.obj: pci.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-pci.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-pci.Tpo" -c -o libdrivers_a-pci.obj `if test -f 'pci.c'; then $(CYGPATH_W) 'pci.c'; else $(CYGPATH_W) '$(srcdir)/pci.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-pci.Tpo" "$(DEPDIR)/libdrivers_a-pci.Po"; else rm -f "$(DEPDIR)/libdrivers_a-pci.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pci.c' object='libdrivers_a-pci.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-pci.obj `if test -f 'pci.c'; then $(CYGPATH_W) 'pci.c'; else $(CYGPATH_W) '$(srcdir)/pci.c'; fi` - -libdrivers_a-timer.o: timer.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-timer.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-timer.Tpo" -c -o libdrivers_a-timer.o `test -f 'timer.c' || echo '$(srcdir)/'`timer.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-timer.Tpo" "$(DEPDIR)/libdrivers_a-timer.Po"; else rm -f "$(DEPDIR)/libdrivers_a-timer.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='timer.c' object='libdrivers_a-timer.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-timer.o `test -f 'timer.c' || echo '$(srcdir)/'`timer.c - -libdrivers_a-timer.obj: timer.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-timer.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-timer.Tpo" -c -o libdrivers_a-timer.obj `if test -f 'timer.c'; then $(CYGPATH_W) 'timer.c'; else $(CYGPATH_W) '$(srcdir)/timer.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-timer.Tpo" "$(DEPDIR)/libdrivers_a-timer.Po"; else rm -f "$(DEPDIR)/libdrivers_a-timer.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='timer.c' object='libdrivers_a-timer.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-timer.obj `if test -f 'timer.c'; then $(CYGPATH_W) 'timer.c'; else $(CYGPATH_W) '$(srcdir)/timer.c'; fi` - -libdrivers_a-3c509.o: 3c509.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c509.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c509.Tpo" -c -o libdrivers_a-3c509.o `test -f '3c509.c' || echo '$(srcdir)/'`3c509.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-3c509.Tpo" "$(DEPDIR)/libdrivers_a-3c509.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c509.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='3c509.c' object='libdrivers_a-3c509.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c509.o `test -f '3c509.c' || echo '$(srcdir)/'`3c509.c - -libdrivers_a-3c509.obj: 3c509.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c509.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c509.Tpo" -c -o libdrivers_a-3c509.obj `if test -f '3c509.c'; then $(CYGPATH_W) '3c509.c'; else $(CYGPATH_W) '$(srcdir)/3c509.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-3c509.Tpo" "$(DEPDIR)/libdrivers_a-3c509.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c509.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='3c509.c' object='libdrivers_a-3c509.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c509.obj `if test -f '3c509.c'; then $(CYGPATH_W) '3c509.c'; else $(CYGPATH_W) '$(srcdir)/3c509.c'; fi` - -libdrivers_a-3c595.o: 3c595.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c595.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c595.Tpo" -c -o libdrivers_a-3c595.o `test -f '3c595.c' || echo '$(srcdir)/'`3c595.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-3c595.Tpo" "$(DEPDIR)/libdrivers_a-3c595.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c595.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='3c595.c' object='libdrivers_a-3c595.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c595.o `test -f '3c595.c' || echo '$(srcdir)/'`3c595.c - -libdrivers_a-3c595.obj: 3c595.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c595.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c595.Tpo" -c -o libdrivers_a-3c595.obj `if test -f '3c595.c'; then $(CYGPATH_W) '3c595.c'; else $(CYGPATH_W) '$(srcdir)/3c595.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-3c595.Tpo" "$(DEPDIR)/libdrivers_a-3c595.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c595.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='3c595.c' object='libdrivers_a-3c595.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c595.obj `if test -f '3c595.c'; then $(CYGPATH_W) '3c595.c'; else $(CYGPATH_W) '$(srcdir)/3c595.c'; fi` - -libdrivers_a-3c90x.o: 3c90x.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c90x.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c90x.Tpo" -c -o libdrivers_a-3c90x.o `test -f '3c90x.c' || echo '$(srcdir)/'`3c90x.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-3c90x.Tpo" "$(DEPDIR)/libdrivers_a-3c90x.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c90x.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='3c90x.c' object='libdrivers_a-3c90x.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c90x.o `test -f '3c90x.c' || echo '$(srcdir)/'`3c90x.c - -libdrivers_a-3c90x.obj: 3c90x.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c90x.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c90x.Tpo" -c -o libdrivers_a-3c90x.obj `if test -f '3c90x.c'; then $(CYGPATH_W) '3c90x.c'; else $(CYGPATH_W) '$(srcdir)/3c90x.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-3c90x.Tpo" "$(DEPDIR)/libdrivers_a-3c90x.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c90x.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='3c90x.c' object='libdrivers_a-3c90x.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c90x.obj `if test -f '3c90x.c'; then $(CYGPATH_W) '3c90x.c'; else $(CYGPATH_W) '$(srcdir)/3c90x.c'; fi` - -libdrivers_a-cs89x0.o: cs89x0.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-cs89x0.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-cs89x0.Tpo" -c -o libdrivers_a-cs89x0.o `test -f 'cs89x0.c' || echo '$(srcdir)/'`cs89x0.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-cs89x0.Tpo" "$(DEPDIR)/libdrivers_a-cs89x0.Po"; else rm -f "$(DEPDIR)/libdrivers_a-cs89x0.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cs89x0.c' object='libdrivers_a-cs89x0.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-cs89x0.o `test -f 'cs89x0.c' || echo '$(srcdir)/'`cs89x0.c - -libdrivers_a-cs89x0.obj: cs89x0.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-cs89x0.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-cs89x0.Tpo" -c -o libdrivers_a-cs89x0.obj `if test -f 'cs89x0.c'; then $(CYGPATH_W) 'cs89x0.c'; else $(CYGPATH_W) '$(srcdir)/cs89x0.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-cs89x0.Tpo" "$(DEPDIR)/libdrivers_a-cs89x0.Po"; else rm -f "$(DEPDIR)/libdrivers_a-cs89x0.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cs89x0.c' object='libdrivers_a-cs89x0.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-cs89x0.obj `if test -f 'cs89x0.c'; then $(CYGPATH_W) 'cs89x0.c'; else $(CYGPATH_W) '$(srcdir)/cs89x0.c'; fi` - -libdrivers_a-davicom.o: davicom.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-davicom.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-davicom.Tpo" -c -o libdrivers_a-davicom.o `test -f 'davicom.c' || echo '$(srcdir)/'`davicom.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-davicom.Tpo" "$(DEPDIR)/libdrivers_a-davicom.Po"; else rm -f "$(DEPDIR)/libdrivers_a-davicom.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='davicom.c' object='libdrivers_a-davicom.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-davicom.o `test -f 'davicom.c' || echo '$(srcdir)/'`davicom.c - -libdrivers_a-davicom.obj: davicom.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-davicom.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-davicom.Tpo" -c -o libdrivers_a-davicom.obj `if test -f 'davicom.c'; then $(CYGPATH_W) 'davicom.c'; else $(CYGPATH_W) '$(srcdir)/davicom.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-davicom.Tpo" "$(DEPDIR)/libdrivers_a-davicom.Po"; else rm -f "$(DEPDIR)/libdrivers_a-davicom.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='davicom.c' object='libdrivers_a-davicom.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-davicom.obj `if test -f 'davicom.c'; then $(CYGPATH_W) 'davicom.c'; else $(CYGPATH_W) '$(srcdir)/davicom.c'; fi` - -libdrivers_a-depca.o: depca.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-depca.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-depca.Tpo" -c -o libdrivers_a-depca.o `test -f 'depca.c' || echo '$(srcdir)/'`depca.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-depca.Tpo" "$(DEPDIR)/libdrivers_a-depca.Po"; else rm -f "$(DEPDIR)/libdrivers_a-depca.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='depca.c' object='libdrivers_a-depca.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-depca.o `test -f 'depca.c' || echo '$(srcdir)/'`depca.c - -libdrivers_a-depca.obj: depca.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-depca.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-depca.Tpo" -c -o libdrivers_a-depca.obj `if test -f 'depca.c'; then $(CYGPATH_W) 'depca.c'; else $(CYGPATH_W) '$(srcdir)/depca.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-depca.Tpo" "$(DEPDIR)/libdrivers_a-depca.Po"; else rm -f "$(DEPDIR)/libdrivers_a-depca.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='depca.c' object='libdrivers_a-depca.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-depca.obj `if test -f 'depca.c'; then $(CYGPATH_W) 'depca.c'; else $(CYGPATH_W) '$(srcdir)/depca.c'; fi` - -libdrivers_a-eepro.o: eepro.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-eepro.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-eepro.Tpo" -c -o libdrivers_a-eepro.o `test -f 'eepro.c' || echo '$(srcdir)/'`eepro.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-eepro.Tpo" "$(DEPDIR)/libdrivers_a-eepro.Po"; else rm -f "$(DEPDIR)/libdrivers_a-eepro.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eepro.c' object='libdrivers_a-eepro.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-eepro.o `test -f 'eepro.c' || echo '$(srcdir)/'`eepro.c - -libdrivers_a-eepro.obj: eepro.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-eepro.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-eepro.Tpo" -c -o libdrivers_a-eepro.obj `if test -f 'eepro.c'; then $(CYGPATH_W) 'eepro.c'; else $(CYGPATH_W) '$(srcdir)/eepro.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-eepro.Tpo" "$(DEPDIR)/libdrivers_a-eepro.Po"; else rm -f "$(DEPDIR)/libdrivers_a-eepro.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eepro.c' object='libdrivers_a-eepro.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-eepro.obj `if test -f 'eepro.c'; then $(CYGPATH_W) 'eepro.c'; else $(CYGPATH_W) '$(srcdir)/eepro.c'; fi` - -libdrivers_a-eepro100.o: eepro100.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-eepro100.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-eepro100.Tpo" -c -o libdrivers_a-eepro100.o `test -f 'eepro100.c' || echo '$(srcdir)/'`eepro100.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-eepro100.Tpo" "$(DEPDIR)/libdrivers_a-eepro100.Po"; else rm -f "$(DEPDIR)/libdrivers_a-eepro100.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eepro100.c' object='libdrivers_a-eepro100.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-eepro100.o `test -f 'eepro100.c' || echo '$(srcdir)/'`eepro100.c - -libdrivers_a-eepro100.obj: eepro100.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-eepro100.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-eepro100.Tpo" -c -o libdrivers_a-eepro100.obj `if test -f 'eepro100.c'; then $(CYGPATH_W) 'eepro100.c'; else $(CYGPATH_W) '$(srcdir)/eepro100.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-eepro100.Tpo" "$(DEPDIR)/libdrivers_a-eepro100.Po"; else rm -f "$(DEPDIR)/libdrivers_a-eepro100.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eepro100.c' object='libdrivers_a-eepro100.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-eepro100.obj `if test -f 'eepro100.c'; then $(CYGPATH_W) 'eepro100.c'; else $(CYGPATH_W) '$(srcdir)/eepro100.c'; fi` - -libdrivers_a-epic100.o: epic100.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-epic100.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-epic100.Tpo" -c -o libdrivers_a-epic100.o `test -f 'epic100.c' || echo '$(srcdir)/'`epic100.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-epic100.Tpo" "$(DEPDIR)/libdrivers_a-epic100.Po"; else rm -f "$(DEPDIR)/libdrivers_a-epic100.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='epic100.c' object='libdrivers_a-epic100.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-epic100.o `test -f 'epic100.c' || echo '$(srcdir)/'`epic100.c - -libdrivers_a-epic100.obj: epic100.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-epic100.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-epic100.Tpo" -c -o libdrivers_a-epic100.obj `if test -f 'epic100.c'; then $(CYGPATH_W) 'epic100.c'; else $(CYGPATH_W) '$(srcdir)/epic100.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-epic100.Tpo" "$(DEPDIR)/libdrivers_a-epic100.Po"; else rm -f "$(DEPDIR)/libdrivers_a-epic100.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='epic100.c' object='libdrivers_a-epic100.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-epic100.obj `if test -f 'epic100.c'; then $(CYGPATH_W) 'epic100.c'; else $(CYGPATH_W) '$(srcdir)/epic100.c'; fi` - -libdrivers_a-fa311.o: fa311.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-fa311.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-fa311.Tpo" -c -o libdrivers_a-fa311.o `test -f 'fa311.c' || echo '$(srcdir)/'`fa311.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-fa311.Tpo" "$(DEPDIR)/libdrivers_a-fa311.Po"; else rm -f "$(DEPDIR)/libdrivers_a-fa311.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fa311.c' object='libdrivers_a-fa311.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-fa311.o `test -f 'fa311.c' || echo '$(srcdir)/'`fa311.c - -libdrivers_a-fa311.obj: fa311.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-fa311.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-fa311.Tpo" -c -o libdrivers_a-fa311.obj `if test -f 'fa311.c'; then $(CYGPATH_W) 'fa311.c'; else $(CYGPATH_W) '$(srcdir)/fa311.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-fa311.Tpo" "$(DEPDIR)/libdrivers_a-fa311.Po"; else rm -f "$(DEPDIR)/libdrivers_a-fa311.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fa311.c' object='libdrivers_a-fa311.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-fa311.obj `if test -f 'fa311.c'; then $(CYGPATH_W) 'fa311.c'; else $(CYGPATH_W) '$(srcdir)/fa311.c'; fi` - -libdrivers_a-i82586.o: i82586.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-i82586.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-i82586.Tpo" -c -o libdrivers_a-i82586.o `test -f 'i82586.c' || echo '$(srcdir)/'`i82586.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-i82586.Tpo" "$(DEPDIR)/libdrivers_a-i82586.Po"; else rm -f "$(DEPDIR)/libdrivers_a-i82586.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='i82586.c' object='libdrivers_a-i82586.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-i82586.o `test -f 'i82586.c' || echo '$(srcdir)/'`i82586.c - -libdrivers_a-i82586.obj: i82586.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-i82586.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-i82586.Tpo" -c -o libdrivers_a-i82586.obj `if test -f 'i82586.c'; then $(CYGPATH_W) 'i82586.c'; else $(CYGPATH_W) '$(srcdir)/i82586.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-i82586.Tpo" "$(DEPDIR)/libdrivers_a-i82586.Po"; else rm -f "$(DEPDIR)/libdrivers_a-i82586.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='i82586.c' object='libdrivers_a-i82586.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-i82586.obj `if test -f 'i82586.c'; then $(CYGPATH_W) 'i82586.c'; else $(CYGPATH_W) '$(srcdir)/i82586.c'; fi` - -libdrivers_a-lance.o: lance.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-lance.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-lance.Tpo" -c -o libdrivers_a-lance.o `test -f 'lance.c' || echo '$(srcdir)/'`lance.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-lance.Tpo" "$(DEPDIR)/libdrivers_a-lance.Po"; else rm -f "$(DEPDIR)/libdrivers_a-lance.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lance.c' object='libdrivers_a-lance.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-lance.o `test -f 'lance.c' || echo '$(srcdir)/'`lance.c - -libdrivers_a-lance.obj: lance.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-lance.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-lance.Tpo" -c -o libdrivers_a-lance.obj `if test -f 'lance.c'; then $(CYGPATH_W) 'lance.c'; else $(CYGPATH_W) '$(srcdir)/lance.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-lance.Tpo" "$(DEPDIR)/libdrivers_a-lance.Po"; else rm -f "$(DEPDIR)/libdrivers_a-lance.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lance.c' object='libdrivers_a-lance.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-lance.obj `if test -f 'lance.c'; then $(CYGPATH_W) 'lance.c'; else $(CYGPATH_W) '$(srcdir)/lance.c'; fi` - -libdrivers_a-natsemi.o: natsemi.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-natsemi.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-natsemi.Tpo" -c -o libdrivers_a-natsemi.o `test -f 'natsemi.c' || echo '$(srcdir)/'`natsemi.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-natsemi.Tpo" "$(DEPDIR)/libdrivers_a-natsemi.Po"; else rm -f "$(DEPDIR)/libdrivers_a-natsemi.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='natsemi.c' object='libdrivers_a-natsemi.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-natsemi.o `test -f 'natsemi.c' || echo '$(srcdir)/'`natsemi.c - -libdrivers_a-natsemi.obj: natsemi.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-natsemi.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-natsemi.Tpo" -c -o libdrivers_a-natsemi.obj `if test -f 'natsemi.c'; then $(CYGPATH_W) 'natsemi.c'; else $(CYGPATH_W) '$(srcdir)/natsemi.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-natsemi.Tpo" "$(DEPDIR)/libdrivers_a-natsemi.Po"; else rm -f "$(DEPDIR)/libdrivers_a-natsemi.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='natsemi.c' object='libdrivers_a-natsemi.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-natsemi.obj `if test -f 'natsemi.c'; then $(CYGPATH_W) 'natsemi.c'; else $(CYGPATH_W) '$(srcdir)/natsemi.c'; fi` - -libdrivers_a-ni5010.o: ni5010.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-ni5010.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-ni5010.Tpo" -c -o libdrivers_a-ni5010.o `test -f 'ni5010.c' || echo '$(srcdir)/'`ni5010.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-ni5010.Tpo" "$(DEPDIR)/libdrivers_a-ni5010.Po"; else rm -f "$(DEPDIR)/libdrivers_a-ni5010.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ni5010.c' object='libdrivers_a-ni5010.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-ni5010.o `test -f 'ni5010.c' || echo '$(srcdir)/'`ni5010.c - -libdrivers_a-ni5010.obj: ni5010.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-ni5010.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-ni5010.Tpo" -c -o libdrivers_a-ni5010.obj `if test -f 'ni5010.c'; then $(CYGPATH_W) 'ni5010.c'; else $(CYGPATH_W) '$(srcdir)/ni5010.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-ni5010.Tpo" "$(DEPDIR)/libdrivers_a-ni5010.Po"; else rm -f "$(DEPDIR)/libdrivers_a-ni5010.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ni5010.c' object='libdrivers_a-ni5010.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-ni5010.obj `if test -f 'ni5010.c'; then $(CYGPATH_W) 'ni5010.c'; else $(CYGPATH_W) '$(srcdir)/ni5010.c'; fi` - -libdrivers_a-ns8390.o: ns8390.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-ns8390.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-ns8390.Tpo" -c -o libdrivers_a-ns8390.o `test -f 'ns8390.c' || echo '$(srcdir)/'`ns8390.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-ns8390.Tpo" "$(DEPDIR)/libdrivers_a-ns8390.Po"; else rm -f "$(DEPDIR)/libdrivers_a-ns8390.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ns8390.c' object='libdrivers_a-ns8390.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-ns8390.o `test -f 'ns8390.c' || echo '$(srcdir)/'`ns8390.c - -libdrivers_a-ns8390.obj: ns8390.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-ns8390.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-ns8390.Tpo" -c -o libdrivers_a-ns8390.obj `if test -f 'ns8390.c'; then $(CYGPATH_W) 'ns8390.c'; else $(CYGPATH_W) '$(srcdir)/ns8390.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-ns8390.Tpo" "$(DEPDIR)/libdrivers_a-ns8390.Po"; else rm -f "$(DEPDIR)/libdrivers_a-ns8390.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ns8390.c' object='libdrivers_a-ns8390.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-ns8390.obj `if test -f 'ns8390.c'; then $(CYGPATH_W) 'ns8390.c'; else $(CYGPATH_W) '$(srcdir)/ns8390.c'; fi` - -libdrivers_a-otulip.o: otulip.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-otulip.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-otulip.Tpo" -c -o libdrivers_a-otulip.o `test -f 'otulip.c' || echo '$(srcdir)/'`otulip.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-otulip.Tpo" "$(DEPDIR)/libdrivers_a-otulip.Po"; else rm -f "$(DEPDIR)/libdrivers_a-otulip.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='otulip.c' object='libdrivers_a-otulip.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-otulip.o `test -f 'otulip.c' || echo '$(srcdir)/'`otulip.c - -libdrivers_a-otulip.obj: otulip.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-otulip.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-otulip.Tpo" -c -o libdrivers_a-otulip.obj `if test -f 'otulip.c'; then $(CYGPATH_W) 'otulip.c'; else $(CYGPATH_W) '$(srcdir)/otulip.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-otulip.Tpo" "$(DEPDIR)/libdrivers_a-otulip.Po"; else rm -f "$(DEPDIR)/libdrivers_a-otulip.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='otulip.c' object='libdrivers_a-otulip.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-otulip.obj `if test -f 'otulip.c'; then $(CYGPATH_W) 'otulip.c'; else $(CYGPATH_W) '$(srcdir)/otulip.c'; fi` - -libdrivers_a-rtl8139.o: rtl8139.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-rtl8139.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-rtl8139.Tpo" -c -o libdrivers_a-rtl8139.o `test -f 'rtl8139.c' || echo '$(srcdir)/'`rtl8139.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-rtl8139.Tpo" "$(DEPDIR)/libdrivers_a-rtl8139.Po"; else rm -f "$(DEPDIR)/libdrivers_a-rtl8139.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rtl8139.c' object='libdrivers_a-rtl8139.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-rtl8139.o `test -f 'rtl8139.c' || echo '$(srcdir)/'`rtl8139.c - -libdrivers_a-rtl8139.obj: rtl8139.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-rtl8139.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-rtl8139.Tpo" -c -o libdrivers_a-rtl8139.obj `if test -f 'rtl8139.c'; then $(CYGPATH_W) 'rtl8139.c'; else $(CYGPATH_W) '$(srcdir)/rtl8139.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-rtl8139.Tpo" "$(DEPDIR)/libdrivers_a-rtl8139.Po"; else rm -f "$(DEPDIR)/libdrivers_a-rtl8139.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rtl8139.c' object='libdrivers_a-rtl8139.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-rtl8139.obj `if test -f 'rtl8139.c'; then $(CYGPATH_W) 'rtl8139.c'; else $(CYGPATH_W) '$(srcdir)/rtl8139.c'; fi` - -libdrivers_a-sis900.o: sis900.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-sis900.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-sis900.Tpo" -c -o libdrivers_a-sis900.o `test -f 'sis900.c' || echo '$(srcdir)/'`sis900.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-sis900.Tpo" "$(DEPDIR)/libdrivers_a-sis900.Po"; else rm -f "$(DEPDIR)/libdrivers_a-sis900.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sis900.c' object='libdrivers_a-sis900.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-sis900.o `test -f 'sis900.c' || echo '$(srcdir)/'`sis900.c - -libdrivers_a-sis900.obj: sis900.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-sis900.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-sis900.Tpo" -c -o libdrivers_a-sis900.obj `if test -f 'sis900.c'; then $(CYGPATH_W) 'sis900.c'; else $(CYGPATH_W) '$(srcdir)/sis900.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-sis900.Tpo" "$(DEPDIR)/libdrivers_a-sis900.Po"; else rm -f "$(DEPDIR)/libdrivers_a-sis900.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sis900.c' object='libdrivers_a-sis900.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-sis900.obj `if test -f 'sis900.c'; then $(CYGPATH_W) 'sis900.c'; else $(CYGPATH_W) '$(srcdir)/sis900.c'; fi` - -libdrivers_a-sk_g16.o: sk_g16.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-sk_g16.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-sk_g16.Tpo" -c -o libdrivers_a-sk_g16.o `test -f 'sk_g16.c' || echo '$(srcdir)/'`sk_g16.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-sk_g16.Tpo" "$(DEPDIR)/libdrivers_a-sk_g16.Po"; else rm -f "$(DEPDIR)/libdrivers_a-sk_g16.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sk_g16.c' object='libdrivers_a-sk_g16.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-sk_g16.o `test -f 'sk_g16.c' || echo '$(srcdir)/'`sk_g16.c - -libdrivers_a-sk_g16.obj: sk_g16.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-sk_g16.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-sk_g16.Tpo" -c -o libdrivers_a-sk_g16.obj `if test -f 'sk_g16.c'; then $(CYGPATH_W) 'sk_g16.c'; else $(CYGPATH_W) '$(srcdir)/sk_g16.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-sk_g16.Tpo" "$(DEPDIR)/libdrivers_a-sk_g16.Po"; else rm -f "$(DEPDIR)/libdrivers_a-sk_g16.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sk_g16.c' object='libdrivers_a-sk_g16.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-sk_g16.obj `if test -f 'sk_g16.c'; then $(CYGPATH_W) 'sk_g16.c'; else $(CYGPATH_W) '$(srcdir)/sk_g16.c'; fi` - -libdrivers_a-smc9000.o: smc9000.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-smc9000.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-smc9000.Tpo" -c -o libdrivers_a-smc9000.o `test -f 'smc9000.c' || echo '$(srcdir)/'`smc9000.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-smc9000.Tpo" "$(DEPDIR)/libdrivers_a-smc9000.Po"; else rm -f "$(DEPDIR)/libdrivers_a-smc9000.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smc9000.c' object='libdrivers_a-smc9000.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-smc9000.o `test -f 'smc9000.c' || echo '$(srcdir)/'`smc9000.c - -libdrivers_a-smc9000.obj: smc9000.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-smc9000.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-smc9000.Tpo" -c -o libdrivers_a-smc9000.obj `if test -f 'smc9000.c'; then $(CYGPATH_W) 'smc9000.c'; else $(CYGPATH_W) '$(srcdir)/smc9000.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-smc9000.Tpo" "$(DEPDIR)/libdrivers_a-smc9000.Po"; else rm -f "$(DEPDIR)/libdrivers_a-smc9000.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smc9000.c' object='libdrivers_a-smc9000.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-smc9000.obj `if test -f 'smc9000.c'; then $(CYGPATH_W) 'smc9000.c'; else $(CYGPATH_W) '$(srcdir)/smc9000.c'; fi` - -libdrivers_a-tiara.o: tiara.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tiara.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-tiara.Tpo" -c -o libdrivers_a-tiara.o `test -f 'tiara.c' || echo '$(srcdir)/'`tiara.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-tiara.Tpo" "$(DEPDIR)/libdrivers_a-tiara.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tiara.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tiara.c' object='libdrivers_a-tiara.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tiara.o `test -f 'tiara.c' || echo '$(srcdir)/'`tiara.c - -libdrivers_a-tiara.obj: tiara.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tiara.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-tiara.Tpo" -c -o libdrivers_a-tiara.obj `if test -f 'tiara.c'; then $(CYGPATH_W) 'tiara.c'; else $(CYGPATH_W) '$(srcdir)/tiara.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-tiara.Tpo" "$(DEPDIR)/libdrivers_a-tiara.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tiara.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tiara.c' object='libdrivers_a-tiara.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tiara.obj `if test -f 'tiara.c'; then $(CYGPATH_W) 'tiara.c'; else $(CYGPATH_W) '$(srcdir)/tiara.c'; fi` - -libdrivers_a-tlan.o: tlan.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tlan.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-tlan.Tpo" -c -o libdrivers_a-tlan.o `test -f 'tlan.c' || echo '$(srcdir)/'`tlan.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-tlan.Tpo" "$(DEPDIR)/libdrivers_a-tlan.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tlan.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tlan.c' object='libdrivers_a-tlan.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tlan.o `test -f 'tlan.c' || echo '$(srcdir)/'`tlan.c - -libdrivers_a-tlan.obj: tlan.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tlan.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-tlan.Tpo" -c -o libdrivers_a-tlan.obj `if test -f 'tlan.c'; then $(CYGPATH_W) 'tlan.c'; else $(CYGPATH_W) '$(srcdir)/tlan.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-tlan.Tpo" "$(DEPDIR)/libdrivers_a-tlan.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tlan.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tlan.c' object='libdrivers_a-tlan.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tlan.obj `if test -f 'tlan.c'; then $(CYGPATH_W) 'tlan.c'; else $(CYGPATH_W) '$(srcdir)/tlan.c'; fi` - -libdrivers_a-tulip.o: tulip.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tulip.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-tulip.Tpo" -c -o libdrivers_a-tulip.o `test -f 'tulip.c' || echo '$(srcdir)/'`tulip.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-tulip.Tpo" "$(DEPDIR)/libdrivers_a-tulip.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tulip.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tulip.c' object='libdrivers_a-tulip.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tulip.o `test -f 'tulip.c' || echo '$(srcdir)/'`tulip.c - -libdrivers_a-tulip.obj: tulip.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tulip.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-tulip.Tpo" -c -o libdrivers_a-tulip.obj `if test -f 'tulip.c'; then $(CYGPATH_W) 'tulip.c'; else $(CYGPATH_W) '$(srcdir)/tulip.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-tulip.Tpo" "$(DEPDIR)/libdrivers_a-tulip.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tulip.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tulip.c' object='libdrivers_a-tulip.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tulip.obj `if test -f 'tulip.c'; then $(CYGPATH_W) 'tulip.c'; else $(CYGPATH_W) '$(srcdir)/tulip.c'; fi` - -libdrivers_a-via-rhine.o: via-rhine.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-via-rhine.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-via-rhine.Tpo" -c -o libdrivers_a-via-rhine.o `test -f 'via-rhine.c' || echo '$(srcdir)/'`via-rhine.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-via-rhine.Tpo" "$(DEPDIR)/libdrivers_a-via-rhine.Po"; else rm -f "$(DEPDIR)/libdrivers_a-via-rhine.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='via-rhine.c' object='libdrivers_a-via-rhine.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-via-rhine.o `test -f 'via-rhine.c' || echo '$(srcdir)/'`via-rhine.c - -libdrivers_a-via-rhine.obj: via-rhine.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-via-rhine.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-via-rhine.Tpo" -c -o libdrivers_a-via-rhine.obj `if test -f 'via-rhine.c'; then $(CYGPATH_W) 'via-rhine.c'; else $(CYGPATH_W) '$(srcdir)/via-rhine.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-via-rhine.Tpo" "$(DEPDIR)/libdrivers_a-via-rhine.Po"; else rm -f "$(DEPDIR)/libdrivers_a-via-rhine.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='via-rhine.c' object='libdrivers_a-via-rhine.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-via-rhine.obj `if test -f 'via-rhine.c'; then $(CYGPATH_W) 'via-rhine.c'; else $(CYGPATH_W) '$(srcdir)/via-rhine.c'; fi` - -libdrivers_a-w89c840.o: w89c840.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-w89c840.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-w89c840.Tpo" -c -o libdrivers_a-w89c840.o `test -f 'w89c840.c' || echo '$(srcdir)/'`w89c840.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-w89c840.Tpo" "$(DEPDIR)/libdrivers_a-w89c840.Po"; else rm -f "$(DEPDIR)/libdrivers_a-w89c840.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='w89c840.c' object='libdrivers_a-w89c840.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-w89c840.o `test -f 'w89c840.c' || echo '$(srcdir)/'`w89c840.c - -libdrivers_a-w89c840.obj: w89c840.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-w89c840.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-w89c840.Tpo" -c -o libdrivers_a-w89c840.obj `if test -f 'w89c840.c'; then $(CYGPATH_W) 'w89c840.c'; else $(CYGPATH_W) '$(srcdir)/w89c840.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-w89c840.Tpo" "$(DEPDIR)/libdrivers_a-w89c840.Po"; else rm -f "$(DEPDIR)/libdrivers_a-w89c840.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='w89c840.c' object='libdrivers_a-w89c840.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-w89c840.obj `if test -f 'w89c840.c'; then $(CYGPATH_W) 'w89c840.c'; else $(CYGPATH_W) '$(srcdir)/w89c840.c'; fi` -uninstall-info-am: - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LIBRARIES) -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES ctags distclean distclean-compile \ - distclean-generic distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-info-am - - -# Is it really necessary to specify dependecies explicitly? -$(3c509_drivers): 3c509.c 3c509.h -$(3c509_drivers): %.o: 3c509.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(3c595_drivers): 3c595.c 3c595.h -$(3c595_drivers): %.o: 3c595.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(3c90x_drivers): 3c90x.c -$(3c90x_drivers): %.o: 3c90x.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(cs89x0_drivers): cs89x0.c cs89x0.h -$(cs89x0_drivers): %.o: cs89x0.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(davicom_drivers): davicom.c -$(davicom_drivers): %.o: davicom.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(depca_drivers): depca.c -$(depca_drivers): %.o: depca.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(eepro_drivers): eepro.c -$(eepro_drivers): %.o: eepro.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(eepro100_drivers): eepro100.c -$(eepro100_drivers): %.o: eepro100.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(epic100_drivers): epic100.c epic100.h -$(epic100_drivers): %.o: epic100.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -#$(fa311_drivers): fa311.c -#$(fa311_drivers): %.o: fa311.c -# $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -# $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(i82586_drivers): i82586.c -$(i82586_drivers): %.o: i82586.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(lance_drivers): lance.c -$(lance_drivers): %.o: lance.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(natsemi_drivers): natsemi.c -$(natsemi_drivers): %.o: natsemi.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(ni5010_drivers): ni5010.c -$(ni5010_drivers): %.o: ni5010.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(ns8390_drivers): ns8390.c ns8390.h -$(ns8390_drivers): %.o: ns8390.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(otulip_drivers): otulip.c otulip.h -$(otulip_drivers): %.o: otulip.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(rtl8139_drivers): rtl8139.c -$(rtl8139_drivers): %.o: rtl8139.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(sis900_drivers): sis900.c -$(sis900_drivers): %.o: sis900.c sis900.h - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(sk_g16_drivers): sk_g16.c sk_g16.h -$(sk_g16_drivers): %.o: sk_g16.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(smc9000_drivers): smc9000.c smc9000.h -$(smc9000_drivers): %.o: smc9000.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(tiara_drivers): tiara.c -$(tiara_drivers): %.o: tiara.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -#$(tlan_drivers): tlan.c -#$(tlan_drivers): %.o: tlan.c -# $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -# $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(tulip_drivers): tulip.c -$(tulip_drivers): %.o: tulip.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(via_rhine_drivers): via-rhine.c -$(via_rhine_drivers): %.o: via-rhine.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< - -$(w89c840_drivers): w89c840.c -$(w89c840_drivers): %.o: w89c840.c - $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/netboot/README.netboot b/netboot/README.netboot deleted file mode 100644 index 7edfaf02e..000000000 --- a/netboot/README.netboot +++ /dev/null @@ -1,168 +0,0 @@ -You can use the netboot support to download OS images from a network. -Nearly all the device drivers are coming from the network-based boot -loader, Etherboot. Please visit its web page. They have rich -documentations so you will be able to get useful information from there. -The URL is . - -These below are common options for configure. Perhaps you may not need -to specify them. - ---disable-packet-retransmission - Turns off packet retransmission. Use it on an empty network, where - no packet collision can happen. - ---enable-pci-direct - Define this for PCI BIOSes that do not implement BIOS32 or not - correctly. - ---enable-diskless - Enable the diskless support. If specified, you will get two optional - images, called "nbgrub" and "pxegrub". The former is the ``Net Boot - Image Proposal'' format, which is used by Etherboot and Netboot, while - the latter is the ``Preboot Execution Environment" format, which is - used by a PXE ROM. You may buy a PXE ROM from some companies. - -Here is the information about the device drivers. They are all disabled -by default, so you must specify configure options to enable drivers you -want to use. Some drivers have extra per-driver options, so the extra -options are also described below. - -Caution: You should enable them as you need. Don't enable any -unnecessary driver, because GRUB might crash if you include too many -drivers at the same time. - -3Com509, ISA/EISA - --enable-3c509 - -3Com529 == MCA 3c509 - --enable-3c529 - -3Com59x and 3Com900 - --enable-3c595 - -3Com90x - --enable-3c90x - -Crystal Semiconductor CS89x0 - --enable-cs89x0 - --enable-cs-scan=LIST - Probe for CS89x0 base address using LIST of comma separated hex - addresses; increasing the address by one (0x300 -> 0x301) will force - a more aggressive probing algorithm. This might be neccessary after - a soft-reset of the NIC. - -Davicom DM9102 and 9009 - --enable-davicom - -Digital DE100 and DE200 - --enable-depca - -Intel Etherexpress Pro/10 (ISA card) - --enable-eepro - -Intel Etherexpress Pro/100 - --enable-eepro100 - -SMC 83c170 EPIC/100 - --enable-epic100 - -3Com507 - --enable-3c507 - -EXOS205 - --enable-exos205 - -Racal-Interlan NI5210 - --enable-ni5210 - -Lance PCI PCNet/32 -AMD HomePNA - --enable-lance - -Novell NE2100 and NE1500 - --enable-ne2100 - -Racal-Interlan NI6510 - --enable-ni6510 - -National Semiconductor DP8381x (Netgear FA311 and FA312) - --enable-natsemi - -Racal-Interlan NI5010 - --enable-ni5010 - -3Com503, aka Etherlink II, also /16 model - --enable-3c503 - --enable-3c503-shmem - Use 3c503 shared memory mode. - --enable-3c503-aui - Use AUI by default on 3c503 cards. - -NE1000/2000 and clones (ISA) - --enable-ne - --enable-ne-scan=LIST (0x280,0x300,0x320,0x340) - Probe for NE base address using LIST of comma separated hex - addresses. - -NE2000 PCI clone (RTL8029) -Winbond 86C940 -Compex RL2000 -KTI ET32P2 -NetVin 5000SC -Holtek 80232 - --enable-ns8390 - --enable-compex-rl2000-fix - If you have a Compex RL2000 PCI 32-bit (11F6:1401), and the probe - hangs in "Probing...[NE*000/PCI]", try enabling this fix... it - worked for me :). - -WD8003/8013, SMC8216/8416 - --enable-wd - --enable-wd-default-mem=MEM (0xCC000) - Default memory location for WD/SMC cards. - -Old base driver for Tulip clones - --enable-otulip - -Realtek 8139 -SMC 1211 -D-Link DFE530TX+ and DFE538TX - --enable-rtl8139 - -SIS 900 and SIS 7016 - --enable-sis900 - -Schneider and Koch G16 - --enable-sk-g16 - -SMC9000 - --enable-smc9000 - --enable-smc9000-scan=LIST - List of I/O addresses to probe. - -Tiara, Fujitsu Lancard - --enable-tiara - -Linksys LNE100TX and other NICs using this Tulip clone chip -Netgear FA310TX and other NICs using this Tulip clone chip -Tulip clones based on the ADMtek Centaur-P -Tulip clones based on the Macronix 987x5 -Tulip-Fast -Tulip+ -Tulip 21142 -ASIX AX88140 -Intel Tulip -Compex RL100-TX - --enable-tulip - -Rhine-I, e.g. D-Link DFE-530TX -Rhine-II - --enable-via-rhine - -Winbond W89c840 -Compex RL100-ATX - --enable-w89c840 - - -The description about how to use the support can be found in the GRUB -manual. Run "info grub" in the shell prompt. diff --git a/netboot/cards.h b/netboot/cards.h deleted file mode 100644 index cf37050c8..000000000 --- a/netboot/cards.h +++ /dev/null @@ -1,183 +0,0 @@ -#ifndef CARDS_H -#define CARDS_H - -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2, or (at - * your option) any later version. - */ - -#include "nic.h" - -/* OK, this is how the PCI support hack works: if pci.h is included before - * this file is included, assume that the driver supports PCI. This means that - * this file is usually included last. */ - -#ifdef PCI_H -#define PCI_ARG(x) ,x -#else -#define PCI_ARG(x) -#endif - -#ifdef INCLUDE_WD -extern struct nic *wd_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_3C503 -extern struct nic *t503_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_VIA_RHINE -extern struct nic *rhine_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_NE -extern struct nic *ne_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_NS8390 -extern struct nic *nepci_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_3C509 -extern struct nic *t509_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_3C529 -extern struct nic *t529_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_3C595 -extern struct nic *t595_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_3C90X -extern struct nic *a3c90x_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_EEPRO -extern struct nic *eepro_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_EEPRO100 -extern struct nic *eepro100_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_EPIC100 -extern struct nic *epic100_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_OTULIP -extern struct nic *otulip_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_TULIP -extern struct nic *tulip_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_DAVICOM -extern struct nic *davicom_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_CS89X0 -extern struct nic *cs89x0_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_LANCE -extern struct nic *lancepci_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_NE2100 -extern struct nic *ne2100_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_NI6510 -extern struct nic *ni6510_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_SK_G16 -extern struct nic *SK_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_3C507 -extern struct nic *t507_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_NI5010 -extern struct nic *ni5010_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_NI5210 -extern struct nic *ni5210_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_EXOS205 -extern struct nic *exos205_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_SMC9000 -extern struct nic *smc9000_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_TIARA -extern struct nic *tiara_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_DEPCA -extern struct nic *depca_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_RTL8139 -extern struct nic *rtl8139_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_W89C840 -extern struct nic *w89c840_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_SIS900 -extern struct nic *sis900_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_NATSEMI -extern struct nic *natsemi_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#ifdef INCLUDE_TLAN -extern struct nic *tlan_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -#endif /* CARDS_H */ diff --git a/netboot/config.c b/netboot/config.c deleted file mode 100644 index 3949a6746..000000000 --- a/netboot/config.c +++ /dev/null @@ -1,598 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2001,2002 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* Based on "src/config.c" in etherboot-5.0.5. */ - -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2, or (at - * your option) any later version. - */ - -#define GRUB 1 -#include -#include - -#undef INCLUDE_PCI -#if defined(INCLUDE_NS8390) || defined(INCLUDE_EEPRO100) || defined(INCLUDE_LANCE) || defined(INCLUDE_EPIC100) || defined(INCLUDE_TULIP) || defined(INCLUDE_OTULIP) || defined(INCLUDE_3C90X) || defined(INCLUDE_3C595) || defined(INCLUDE_RTL8139) || defined(INCLUDE_VIA_RHINE) || defined(INCLUDE_W89C840) || defined(INCLUDE_DAVICOM) || defined(INCLUDE_SIS900) || defined(INCLUDE_NATSEMI) || defined(INCLUDE_TLAN) - /* || others later */ -# define INCLUDE_PCI -# include -static unsigned short pci_ioaddrs[16]; - -static struct pci_device pci_nic_list[] = -{ -#ifdef INCLUDE_NS8390 - { PCI_VENDOR_ID_REALTEK, PCI_DEVICE_ID_REALTEK_8029, - "Realtek 8029", 0, 0, 0, 0}, - { PCI_VENDOR_ID_WINBOND2, PCI_DEVICE_ID_WINBOND2_89C940, - "Winbond NE2000-PCI", 0, 0, 0, 0}, - { PCI_VENDOR_ID_COMPEX, PCI_DEVICE_ID_COMPEX_RL2000, - "Compex ReadyLink 2000", 0, 0, 0, 0}, - { PCI_VENDOR_ID_KTI, PCI_DEVICE_ID_KTI_ET32P2, - "KTI ET32P2", 0, 0, 0, 0}, - { PCI_VENDOR_ID_NETVIN, PCI_DEVICE_ID_NETVIN_NV5000SC, - "NetVin NV5000SC", 0, 0, 0, 0}, - { PCI_VENDOR_ID_HOLTEK, PCI_DEVICE_ID_HOLTEK_HT80232, - "Holtek HT80232", 0, 0, 0, 0}, -#endif -#ifdef INCLUDE_3C90X - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C900TPO, - "3Com900-TPO", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C900COMBO, - "3Com900-Combo", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C905TX, - "3Com905-TX", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C905T4, - "3Com905-T4", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, 0x9004, - "3Com900B-TPO", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, 0x9005, - "3Com900B-Combo", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, 0x9006, - "3Com900B-2/T", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, 0x900A, - "3Com900B-FL", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C905B_TX, - "3Com905B-TX", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, 0x9056, - "3Com905B-T4", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, 0x905A, - "3Com905B-FL", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C905C_TXM, - "3Com905C-TXM", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, 0x9800, - "3Com980-Cyclone", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, 0x9805, - "3Com9805", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, 0x7646, - "3CSOHO100-TX", 0, 0, 0, 0}, -#endif -#ifdef INCLUDE_3C595 - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C590, - "3Com590", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C595, - "3Com595", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C595_1, - "3Com595", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C595_2, - "3Com595", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C900TPO, - "3Com900-TPO", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C900COMBO, - "3Com900-Combo", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, 0x9004, - "3Com900B-TPO", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, 0x9005, - "3Com900B-Combo", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, 0x9006, - "3Com900B-2/T", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, 0x900A, - "3Com900B-FL", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, 0x9800, - "3Com980-Cyclone", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, 0x9805, - "3Com9805", 0, 0, 0, 0}, - { PCI_VENDOR_ID_3COM, 0x7646, - "3CSOHO100-TX", 0, 0, 0, 0}, -#endif -#ifdef INCLUDE_EEPRO100 - { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82557, - "Intel EtherExpressPro100", 0, 0, 0, 0}, - { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82559ER, - "Intel EtherExpressPro100 82559ER", 0, 0, 0, 0}, - { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ID1029, - "Intel EtherExpressPro100 ID1029", 0, 0, 0, 0}, - { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ID1030, - "Intel Corporation 82559 InBusiness 10/100", 0, 0, 0, 0}, - { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82562, - "Intel EtherExpressPro100 82562EM", 0, 0, 0, 0}, -#endif -#ifdef INCLUDE_EPIC100 - { PCI_VENDOR_ID_SMC, PCI_DEVICE_ID_SMC_EPIC100, - "SMC EtherPowerII", 0, 0, 0, 0}, -#endif -#ifdef INCLUDE_LANCE - { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_LANCE, - "AMD Lance/PCI", 0, 0, 0, 0}, - { PCI_VENDOR_ID_AMD_HOMEPNA, PCI_DEVICE_ID_AMD_HOMEPNA, - "AMD Lance/HomePNA", 0, 0, 0, 0}, -#endif -#ifdef INCLUDE_RTL8139 - { PCI_VENDOR_ID_REALTEK, PCI_DEVICE_ID_REALTEK_8139, - "Realtek 8139", 0, 0, 0, 0}, - { PCI_VENDOR_ID_DLINK, PCI_DEVICE_ID_DFE530TXP, - "DFE530TX+/DFE538TX", 0, 0, 0, 0}, - { PCI_VENDOR_ID_SMC_1211, PCI_DEVICE_ID_SMC_1211, - "SMC EZ10/100", 0, 0, 0, 0}, -#endif -#ifdef INCLUDE_OTULIP - { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP, - "Digital Tulip", 0, 0, 0, 0}, - { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_FAST, - "Digital Tulip Fast", 0, 0, 0, 0}, - { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_PLUS, - "Digital Tulip+", 0, 0, 0, 0}, - { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_21142, - "Digital Tulip 21142", 0, 0, 0, 0}, -#endif -#ifdef INCLUDE_TULIP - { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP, - "Digital Tulip", 0, 0, 0, 0}, - { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_FAST, - "Digital Tulip Fast", 0, 0, 0, 0}, - { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_PLUS, - "Digital Tulip+", 0, 0, 0, 0}, - { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_21142, - "Digital Tulip 21142", 0, 0, 0, 0}, - { PCI_VENDOR_ID_MACRONIX, PCI_DEVICE_ID_MX987x5, - "Macronix MX987x5", 0, 0, 0, 0}, - { PCI_VENDOR_ID_LINKSYS, PCI_DEVICE_ID_LC82C115, - "LinkSys LNE100TX", 0, 0, 0, 0}, - { PCI_VENDOR_ID_LINKSYS, PCI_DEVICE_ID_DEC_TULIP, - "Netgear FA310TX", 0, 0, 0, 0}, - { PCI_VENDOR_ID_DAVICOM, PCI_DEVICE_ID_DM9102, - "Davicom 9102", 0, 0, 0, 0}, - { PCI_VENDOR_ID_DAVICOM, PCI_DEVICE_ID_DM9009, - "Davicom 9009", 0, 0, 0, 0}, - { PCI_VENDOR_ID_ADMTEK, PCI_DEVICE_ID_ADMTEK_0985, - "ADMtek Centaur-P", 0, 0, 0, 0}, - { PCI_VENDOR_ID_ADMTEK, 0x0981, - "ADMtek AN981 Comet", 0, 0, 0, 0}, - { 0x125B, 0x1400, - "ASIX AX88140", 0, 0, 0, 0 }, - { 0x11F6, 0x9881, - "Compex RL100-TX", 0, 0, 0, 0 }, -#endif -#ifdef INCLUDE_DAVICOM - { PCI_VENDOR_ID_DAVICOM, PCI_DEVICE_ID_DM9102, - "Davicom 9102", 0, 0, 0, 0}, - { PCI_VENDOR_ID_DAVICOM, PCI_DEVICE_ID_DM9009, - "Davicom 9009", 0, 0, 0, 0}, -#endif -#ifdef INCLUDE_VIA_RHINE - { PCI_VENDOR_ID_VIATEC, PCI_DEVICE_ID_VIA_VT6102, - "VIA 6102", 0, 0, 0, 0}, - { PCI_VENDOR_ID_VIATEC, PCI_DEVICE_ID_VIA_RHINE_I, - "VIA 3043", 0, 0, 0, 0}, - { PCI_VENDOR_ID_VIATEC, PCI_DEVICE_ID_VIA_86C100A, - "VIA 86C100A", 0, 0, 0, 0}, -#endif -#ifdef INCLUDE_W89C840 - { PCI_VENDOR_ID_WINBOND2, PCI_DEVICE_ID_WINBOND2_89C840, - "Winbond W89C840F", 0, 0, 0, 0}, - { PCI_VENDOR_ID_COMPEX, PCI_DEVICE_ID_COMPEX_RL100ATX, - "Compex RL100ATX", 0, 0, 0, 0}, -#endif -#ifdef INCLUDE_SIS900 - { PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS900, - "SIS900", 0, 0, 0, 0}, - { PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS7016, - "SIS7016", 0, 0, 0, 0}, -#endif - -#ifdef INCLUDE_NATSEMI - { PCI_VENDOR_ID_NS, PCI_DEVICE_ID_DP83815, - "DP83815", 0, 0, 0, 0}, -#endif - -#ifdef INCLUDE_TLAN - { PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2326, - "OC2326", 0, 0, 0, 0}, -#endif - - /* other PCI NICs go here */ - {0, 0, NULL, 0, 0, 0, 0} -}; -#endif /* INCLUDE_*PCI */ - -#include - -#ifdef INCLUDE_PCI -struct pci_dispatch_table -{ - unsigned short vendor; - unsigned short dev_id; - struct nic *(*eth_probe) (struct nic *, unsigned short *, - struct pci_device *); -}; - -static struct pci_dispatch_table PCI_NIC[] = -{ -# ifdef INCLUDE_NS8390 - { PCI_VENDOR_ID_REALTEK, PCI_DEVICE_ID_REALTEK_8029, nepci_probe }, - { PCI_VENDOR_ID_WINBOND2, PCI_DEVICE_ID_WINBOND2_89C940, nepci_probe }, - { PCI_VENDOR_ID_COMPEX, PCI_DEVICE_ID_COMPEX_RL2000, nepci_probe }, - { PCI_VENDOR_ID_KTI, PCI_DEVICE_ID_KTI_ET32P2, nepci_probe }, - { PCI_VENDOR_ID_NETVIN, PCI_DEVICE_ID_NETVIN_NV5000SC, nepci_probe }, - { PCI_VENDOR_ID_HOLTEK, PCI_DEVICE_ID_HOLTEK_HT80232, nepci_probe }, -# endif /* INCLUDE_NS8390 */ -# ifdef INCLUDE_3C90X - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C900TPO, a3c90x_probe }, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C900COMBO, a3c90x_probe }, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C905TX, a3c90x_probe }, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C905T4, a3c90x_probe }, - { PCI_VENDOR_ID_3COM, 0x9004, a3c90x_probe }, - { PCI_VENDOR_ID_3COM, 0x9005, a3c90x_probe }, - { PCI_VENDOR_ID_3COM, 0x9006, a3c90x_probe }, - { PCI_VENDOR_ID_3COM, 0x900A, a3c90x_probe }, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C905B_TX, a3c90x_probe }, - { PCI_VENDOR_ID_3COM, 0x9056, a3c90x_probe }, - { PCI_VENDOR_ID_3COM, 0x905A, a3c90x_probe }, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C905C_TXM, a3c90x_probe }, - { PCI_VENDOR_ID_3COM, 0x9800, a3c90x_probe }, - { PCI_VENDOR_ID_3COM, 0x9805, a3c90x_probe }, - { PCI_VENDOR_ID_3COM, 0x7646, a3c90x_probe }, -# endif /* INCLUDE_3C90X */ -# ifdef INCLUDE_3C595 - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C590, t595_probe }, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C595, t595_probe }, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C595_1, t595_probe }, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C595_2, t595_probe }, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C900TPO, t595_probe }, - { PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C900COMBO, t595_probe }, - { PCI_VENDOR_ID_3COM, 0x9004, t595_probe }, - { PCI_VENDOR_ID_3COM, 0x9005, t595_probe }, - { PCI_VENDOR_ID_3COM, 0x9006, t595_probe }, - { PCI_VENDOR_ID_3COM, 0x900A, t595_probe }, - { PCI_VENDOR_ID_3COM, 0x9800, t595_probe }, - { PCI_VENDOR_ID_3COM, 0x9805, t595_probe }, - { PCI_VENDOR_ID_3COM, 0x7646, t595_probe }, -# endif /* INCLUDE_3C595 */ -# ifdef INCLUDE_EEPRO100 - { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82557, eepro100_probe }, - { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82559ER, eepro100_probe }, - { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ID1029, eepro100_probe }, - { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ID1030, eepro100_probe }, - { PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82562, eepro100_probe }, -# endif /* INCLUDE_EEPRO100 */ -# ifdef INCLUDE_EPIC100 - { PCI_VENDOR_ID_SMC, PCI_DEVICE_ID_SMC_EPIC100, epic100_probe }, -# endif /* INCLUDE_EPIC100 */ -# ifdef INCLUDE_LANCE - { PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_LANCE, lancepci_probe }, - { PCI_VENDOR_ID_AMD_HOMEPNA, PCI_DEVICE_ID_AMD_HOMEPNA, lancepci_probe }, -# endif /* INCLUDE_LANCE */ -# ifdef INCLUDE_RTL8139 - { PCI_VENDOR_ID_REALTEK, PCI_DEVICE_ID_REALTEK_8139, rtl8139_probe }, - { PCI_VENDOR_ID_DLINK, PCI_DEVICE_ID_DFE530TXP, rtl8139_probe }, - { PCI_VENDOR_ID_SMC_1211, PCI_DEVICE_ID_SMC_1211, rtl8139_probe }, -# endif /* INCLUDE_RTL8139 */ -# ifdef INCLUDE_OTULIP - { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP, otulip_probe }, - { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_FAST, otulip_probe }, - { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_PLUS, otulip_probe }, - { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_21142, otulip_probe }, -# endif /* INCLUDE_OTULIP */ -# ifdef INCLUDE_TULIP - { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP, tulip_probe }, - { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_FAST, tulip_probe }, - { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_PLUS, tulip_probe }, - { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_21142, tulip_probe }, - { PCI_VENDOR_ID_MACRONIX, PCI_DEVICE_ID_MX987x5, tulip_probe }, - { PCI_VENDOR_ID_LINKSYS, PCI_DEVICE_ID_LC82C115, tulip_probe }, - { PCI_VENDOR_ID_LINKSYS, PCI_DEVICE_ID_DEC_TULIP, tulip_probe }, - { PCI_VENDOR_ID_DAVICOM, PCI_DEVICE_ID_DM9102, tulip_probe }, - { PCI_VENDOR_ID_DAVICOM, PCI_DEVICE_ID_DM9009, tulip_probe }, - { PCI_VENDOR_ID_ADMTEK, PCI_DEVICE_ID_ADMTEK_0985, tulip_probe }, - { PCI_VENDOR_ID_ADMTEK, 0x0981, tulip_probe }, - { 0x125B, 0x1400, tulip_probe }, - { 0x11F6, 0x9881, tulip_probe }, -# endif /* INCLUDE_TULIP */ -# ifdef INCLUDE_DAVICOM - { PCI_VENDOR_ID_DAVICOM, PCI_DEVICE_ID_DM9102, davicom_probe }, - { PCI_VENDOR_ID_DAVICOM, PCI_DEVICE_ID_DM9009, davicom_probe }, -# endif /* INCLUDE_DAVICOM */ -# ifdef INCLUDE_VIA_RHINE - { PCI_VENDOR_ID_VIATEC, PCI_DEVICE_ID_VIA_VT6102, rhine_probe }, - { PCI_VENDOR_ID_VIATEC, PCI_DEVICE_ID_VIA_RHINE_I, rhine_probe }, - { PCI_VENDOR_ID_VIATEC, PCI_DEVICE_ID_VIA_86C100A, rhine_probe }, -# endif /* INCLUDE_VIA_RHINE */ -# ifdef INCLUDE_W89C840 - { PCI_VENDOR_ID_WINBOND2, PCI_DEVICE_ID_WINBOND2_89C840, w89c840_probe }, - { PCI_VENDOR_ID_COMPEX, PCI_DEVICE_ID_COMPEX_RL100ATX, w89c840_probe }, -# endif /* INCLUDE_W89C840 */ -# ifdef INCLUDE_SIS900 - { PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS900, sis900_probe }, - { PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS7016, sis900_probe }, -# endif /* INCLUDE_SIS900 */ -# ifdef INCLUDE_NATSEMI - { PCI_VENDOR_ID_NS, PCI_DEVICE_ID_DP83815, natsemi_probe }, -# endif /* INCLUDE_NATSEMI */ -# ifdef INCLUDE_TLAN - { PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2326, tlan_probe }, -# endif /* INCLUDE_TLAN */ - { 0, 0, 0 } -}; -#endif /* GRUB && INCLUDE_PCI */ - -struct dispatch_table -{ - const char *nic_name; -#ifdef INCLUDE_PCI - struct nic *(*eth_probe) (struct nic *, unsigned short *, - struct pci_device *); -#else - struct nic *(*eth_probe) (struct nic *, unsigned short *); -#endif /* INCLUDE_PCI */ - unsigned short *probe_ioaddrs; /* for probe overrides */ -}; - -/* - * NIC probing is in order of appearance in this table. - * If for some reason you want to change the order, - * just rearrange the entries (bracketed by the #ifdef/#endif) - */ -static struct dispatch_table NIC[] = -{ -#ifdef INCLUDE_RTL8139 - { "RTL8139", rtl8139_probe, pci_ioaddrs }, -#endif -#ifdef INCLUDE_SIS900 - { "SIS900", sis900_probe, pci_ioaddrs }, -#endif -#ifdef INCLUDE_NATSEMI - { "NATSEMI", natsemi_probe, pci_ioaddrs }, -#endif -#ifdef INCLUDE_WD - { "WD", wd_probe, 0 }, -#endif -#ifdef INCLUDE_3C503 - { "3C503", t503_probe, 0 }, -#endif -#ifdef INCLUDE_NE - { "NE*000", ne_probe, 0 }, -#endif -#ifdef INCLUDE_3C509 - { "3C5x9", t509_probe, 0 }, -#endif -#ifdef INCLUDE_3C529 - { "3C5x9", t529_probe, 0 }, -#endif -#ifdef INCLUDE_3C595 - { "3C595", t595_probe, pci_ioaddrs }, -#endif -#ifdef INCLUDE_3C90X - { "3C90X", a3c90x_probe, pci_ioaddrs }, -#endif -#ifdef INCLUDE_EEPRO - { "EEPRO", eepro_probe, 0 }, -#endif -#ifdef INCLUDE_EEPRO100 - { "EEPRO100", eepro100_probe, pci_ioaddrs }, -#endif -#ifdef INCLUDE_EPIC100 - { "EPIC100", epic100_probe, pci_ioaddrs }, -#endif -#ifdef INCLUDE_OTULIP - { "OTulip", otulip_probe, pci_ioaddrs }, -#endif -#ifdef INCLUDE_TULIP - { "Tulip", tulip_probe, pci_ioaddrs }, -#endif -#ifdef INCLUDE_DAVICOM - { "DAVICOM", davicom_probe, pci_ioaddrs }, -#endif -#ifdef INCLUDE_CS89X0 - { "CS89x0", cs89x0_probe, 0 }, -#endif -#ifdef INCLUDE_NE2100 - { "NE2100", ne2100_probe, 0 }, -#endif -#ifdef INCLUDE_NI6510 - { "NI6510", ni6510_probe, 0 }, -#endif -#ifdef INCLUDE_SK_G16 - { "SK_G16", SK_probe, 0 }, -#endif -#ifdef INCLUDE_3C507 - { "3C507", t507_probe, 0 }, -#endif -#ifdef INCLUDE_NI5010 - { "NI5010", ni5010_probe, 0 }, -#endif -#ifdef INCLUDE_NI5210 - { "NI5210", ni5210_probe, 0 }, -#endif -#ifdef INCLUDE_EXOS205 - { "EXOS205", exos205_probe, 0 }, -#endif -#ifdef INCLUDE_SMC9000 - { "SMC9000", smc9000_probe, 0 }, -#endif -#ifdef INCLUDE_TIARA - { "TIARA", tiara_probe, 0 }, -#endif -#ifdef INCLUDE_DEPCA - { "DEPCA", depca_probe, 0 }, -#endif -#ifdef INCLUDE_NS8390 - { "NE2000/PCI", nepci_probe, pci_ioaddrs }, -#endif -#ifdef INCLUDE_LANCE - { "LANCE/PCI", lancepci_probe, pci_ioaddrs }, -#endif -#ifdef INCLUDE_VIA_RHINE - { "VIA 86C100", rhine_probe, pci_ioaddrs }, -#endif -#ifdef INCLUDE_W89C840 - { "W89C840F", w89c840_probe, pci_ioaddrs }, -#endif -#ifdef INCLUDE_TLAN - { "Olicom 2326", tlan_probe, pci_ioaddrs }, -#endif - /* this entry must always be last to mark the end of list */ - { 0, 0, 0 } -}; - -#define NIC_TABLE_SIZE (sizeof (NIC) / sizeof (NIC[0])) - -static int -eth_dummy (struct nic *dummy) -{ - return 0; -} - -static char packet[ETH_FRAME_LEN]; - -struct nic nic = -{ - (void (*) (struct nic *)) eth_dummy, /* reset */ - eth_dummy, /* poll */ - (void (*) (struct nic *, const char *, - unsigned int, unsigned int, - const char *)) eth_dummy, /* transmit */ - (void (*) (struct nic *)) eth_dummy, /* disable */ -#ifdef T503_AUI - 1, /* aui */ -#else - 0, /* no aui */ -#endif - &rom, /* rom_info */ - arptable[ARP_CLIENT].node, /* node_addr */ - packet, /* packet */ - 0, /* packetlen */ - 0, /* priv_data */ -}; - -void -eth_reset (void) -{ - (*nic.reset) (&nic); -} - -int -eth_probe (void) -{ - struct pci_device *p; - const struct dispatch_table *t; - static int probed = 0; - - /* If already probed, don't try to probe it any longer. */ - if (probed) - return 1; - - /* Clear the ready flag. */ - network_ready = 0; - /* Clear the ARP table. */ - grub_memset ((char *) arptable, 0, - MAX_ARP * sizeof (struct arptable_t)); - - p = 0; - -#ifdef INCLUDE_PCI - /* In GRUB, the ROM info is initialized here. */ - rom = *((struct rom_info *) ROM_INFO_LOCATION); - - eth_pci_init(pci_nic_list); - pci_ioaddrs[0] = 0; - pci_ioaddrs[1] = 0; - /* at this point we have a list of possible PCI candidates - we just pick the first one with a non-zero ioaddr */ - for (p = pci_nic_list; p->vendor != 0; ++p) - { - if (p->ioaddr != 0) - { - pci_ioaddrs[0] = p->ioaddr; - break; - } - } -#endif - - etherboot_printf("Probing..."); - -#ifdef INCLUDE_PCI - if (p->vendor) - { - struct pci_dispatch_table *pt; - - for (pt = PCI_NIC; pt->eth_probe != 0; pt++) - if (p->vendor == pt->vendor && p->dev_id == pt->dev_id) - { - etherboot_printf ("[%s]", p->name); - if ((pt->eth_probe) (&nic, pci_ioaddrs, p)) - { - probed = 1; - return 1; - } - } - } -#endif /* INCLUDE_PCI */ - - for (t = NIC; t->nic_name != 0; ++t) - { - etherboot_printf("[%s]", t->nic_name); -#ifdef INCLUDE_PCI - if ((*t->eth_probe) (&nic, t->probe_ioaddrs, p)) - { - probed = 1; - return 1; - } -#else - if ((*t->eth_probe) (&nic, t->probe_ioaddrs)) - { - probed = 1; - return 1; - } -#endif /* INCLUDE_PCI */ - } - - return 0; -} - -int -eth_poll (void) -{ - return ((*nic.poll) (&nic)); -} - -void -eth_transmit (const char *d, unsigned int t, unsigned int s, const void *p) -{ - (*nic.transmit) (&nic, d, t, s, p); - if (t == IP) - twiddle (); -} - -void -eth_disable (void) -{ - (*nic.disable) (&nic); -} diff --git a/netboot/cs89x0.c b/netboot/cs89x0.c deleted file mode 100644 index 115257fa3..000000000 --- a/netboot/cs89x0.c +++ /dev/null @@ -1,677 +0,0 @@ -/** - Per an email message from Russ Nelson on - 18 March 2008 this file is now licensed under GPL Version 2. - - From: Russ Nelson - Date: Tue, 18 Mar 2008 12:42:00 -0400 - Subject: Re: [Etherboot-developers] cs89x0 driver in etherboot - -- quote from email - As copyright holder, if I say it doesn't conflict with the GPL, - then it doesn't conflict with the GPL. - - However, there's no point in causing people's brains to overheat, - so yes, I grant permission for the code to be relicensed under the - GPLv2. Please make sure that this change in licensing makes its - way upstream. -russ - -- quote from email -**/ - -/* cs89x0.c: A Crystal Semiconductor CS89[02]0 driver for etherboot. */ -/* - Permission is granted to distribute the enclosed cs89x0.[ch] driver - only in conjunction with the Etherboot package. The code is - ordinarily distributed under the GPL. - - Russ Nelson, January 2000 - - ChangeLog: - - Thu Dec 6 22:40:00 1996 Markus Gutschke - - * disabled all "advanced" features; this should make the code more reliable - - * reorganized the reset function - - * always reset the address port, so that autoprobing will continue working - - * some cosmetic changes - - * 2.5 - - Thu Dec 5 21:00:00 1996 Markus Gutschke - - * tested the code against a CS8900 card - - * lots of minor bug fixes and adjustments - - * this is the first release, that actually works! it still requires some - changes in order to be more tolerant to different environments - - * 4 - - Fri Nov 22 23:00:00 1996 Markus Gutschke - - * read the manuals for the CS89x0 chipsets and took note of all the - changes that will be neccessary in order to adapt Russel Nelson's code - to the requirements of a BOOT-Prom - - * 6 - - Thu Nov 19 22:00:00 1996 Markus Gutschke - - * Synched with Russel Nelson's current code (v1.00) - - * 2 - - Thu Nov 12 18:00:00 1996 Markus Gutschke - - * Cleaned up some of the code and tried to optimize the code size. - - * 1.5 - - Sun Nov 10 16:30:00 1996 Markus Gutschke - - * First experimental release. This code compiles fine, but I - have no way of testing whether it actually works. - - * I did not (yet) bother to make the code 16bit aware, so for - the time being, it will only work for Etherboot/32. - - * 12 - - */ - -#include "etherboot.h" -#include "nic.h" -#include "cards.h" -#include "cs89x0.h" - -static unsigned short eth_nic_base; -static unsigned long eth_mem_start; -static unsigned short eth_irq; -static unsigned short eth_cs_type; /* one of: CS8900, CS8920, CS8920M */ -static unsigned short eth_auto_neg_cnf; -static unsigned short eth_adapter_cnf; -static unsigned short eth_linectl; - -/************************************************************************* - CS89x0 - specific routines -**************************************************************************/ - -static inline int readreg(int portno) -{ - outw(portno, eth_nic_base + ADD_PORT); - return inw(eth_nic_base + DATA_PORT); -} - -static inline void writereg(int portno, int value) -{ - outw(portno, eth_nic_base + ADD_PORT); - outw(value, eth_nic_base + DATA_PORT); - return; -} - -/************************************************************************* -EEPROM access -**************************************************************************/ - -static int wait_eeprom_ready(void) -{ - unsigned long tmo = currticks() + 4*TICKS_PER_SEC; - - /* check to see if the EEPROM is ready, a timeout is used - - just in case EEPROM is ready when SI_BUSY in the - PP_SelfST is clear */ - while(readreg(PP_SelfST) & SI_BUSY) { - if (currticks() >= tmo) - return -1; } - return 0; -} - -static int get_eeprom_data(int off, int len, unsigned short *buffer) -{ - int i; - -#ifdef EDEBUG - printf("\ncs: EEPROM data from %hX for %hX:",off,len); -#endif - for (i = 0; i < len; i++) { - if (wait_eeprom_ready() < 0) - return -1; - /* Now send the EEPROM read command and EEPROM location - to read */ - writereg(PP_EECMD, (off + i) | EEPROM_READ_CMD); - if (wait_eeprom_ready() < 0) - return -1; - buffer[i] = readreg(PP_EEData); -#ifdef EDEBUG - if (!(i%10)) - printf("\ncs: "); - printf("%hX ", buffer[i]); -#endif - } -#ifdef EDEBUG - putchar('\n'); -#endif - - return(0); -} - -static int get_eeprom_chksum(int off, int len, unsigned short *buffer) -{ - int i, cksum; - - cksum = 0; - for (i = 0; i < len; i++) - cksum += buffer[i]; - cksum &= 0xffff; - if (cksum == 0) - return 0; - return -1; -} - -/************************************************************************* -Activate all of the available media and probe for network -**************************************************************************/ - -static void clrline(void) -{ - int i; - - putchar('\r'); - for (i = 79; i--; ) putchar(' '); - printf("\rcs: "); - return; -} - -static void control_dc_dc(int on_not_off) -{ - unsigned int selfcontrol; - unsigned long tmo = currticks() + TICKS_PER_SEC; - - /* control the DC to DC convertor in the SelfControl register. */ - selfcontrol = HCB1_ENBL; /* Enable the HCB1 bit as an output */ - if (((eth_adapter_cnf & A_CNF_DC_DC_POLARITY) != 0) ^ on_not_off) - selfcontrol |= HCB1; - else - selfcontrol &= ~HCB1; - writereg(PP_SelfCTL, selfcontrol); - - /* Wait for the DC/DC converter to power up - 1000ms */ - while (currticks() < tmo); - - return; -} - -static int detect_tp(void) -{ - unsigned long tmo; - - /* Turn on the chip auto detection of 10BT/ AUI */ - - clrline(); printf("attempting %s:","TP"); - - /* If connected to another full duplex capable 10-Base-T card - the link pulses seem to be lost when the auto detect bit in - the LineCTL is set. To overcome this the auto detect bit - will be cleared whilst testing the 10-Base-T interface. - This would not be necessary for the sparrow chip but is - simpler to do it anyway. */ - writereg(PP_LineCTL, eth_linectl &~ AUI_ONLY); - control_dc_dc(0); - - /* Delay for the hardware to work out if the TP cable is - present - 150ms */ - for (tmo = currticks() + 4; currticks() < tmo; ); - - if ((readreg(PP_LineST) & LINK_OK) == 0) - return 0; - - if (eth_cs_type != CS8900) { - - writereg(PP_AutoNegCTL, eth_auto_neg_cnf & AUTO_NEG_MASK); - - if ((eth_auto_neg_cnf & AUTO_NEG_BITS) == AUTO_NEG_ENABLE) { - printf(" negotiating duplex... "); - while (readreg(PP_AutoNegST) & AUTO_NEG_BUSY) { - if (currticks() - tmo > 40*TICKS_PER_SEC) { - printf("time out "); - break; - } - } - } - if (readreg(PP_AutoNegST) & FDX_ACTIVE) - printf("using full duplex"); - else - printf("using half duplex"); - } - - return A_CNF_MEDIA_10B_T; -} - -/* send a test packet - return true if carrier bits are ok */ -static int send_test_pkt(struct nic *nic) -{ - static unsigned char testpacket[] = { 0,0,0,0,0,0, 0,0,0,0,0,0, - 0, 46, /*A 46 in network order */ - 0, 0, /*DSAP=0 & SSAP=0 fields */ - 0xf3,0 /*Control (Test Req+P bit set)*/ }; - unsigned long tmo; - - writereg(PP_LineCTL, readreg(PP_LineCTL) | SERIAL_TX_ON); - - memcpy(testpacket, nic->node_addr, ETH_ALEN); - memcpy(testpacket+ETH_ALEN, nic->node_addr, ETH_ALEN); - - outw(TX_AFTER_ALL, eth_nic_base + TX_CMD_PORT); - outw(ETH_ZLEN, eth_nic_base + TX_LEN_PORT); - - /* Test to see if the chip has allocated memory for the packet */ - for (tmo = currticks() + 2; - (readreg(PP_BusST) & READY_FOR_TX_NOW) == 0; ) - if (currticks() >= tmo) - return(0); - - /* Write the contents of the packet */ - outsw(eth_nic_base + TX_FRAME_PORT, testpacket, - (ETH_ZLEN+1)>>1); - - printf(" sending test packet "); - /* wait a couple of timer ticks for packet to be received */ - for (tmo = currticks() + 2; currticks() < tmo; ); - - if ((readreg(PP_TxEvent) & TX_SEND_OK_BITS) == TX_OK) { - printf("succeeded"); - return 1; - } - printf("failed"); - return 0; -} - - -static int detect_aui(struct nic *nic) -{ - clrline(); printf("attempting %s:","AUI"); - control_dc_dc(0); - - writereg(PP_LineCTL, (eth_linectl & ~AUTO_AUI_10BASET) | AUI_ONLY); - - if (send_test_pkt(nic)) { - return A_CNF_MEDIA_AUI; } - else - return 0; -} - -static int detect_bnc(struct nic *nic) -{ - clrline(); printf("attempting %s:","BNC"); - control_dc_dc(1); - - writereg(PP_LineCTL, (eth_linectl & ~AUTO_AUI_10BASET) | AUI_ONLY); - - if (send_test_pkt(nic)) { - return A_CNF_MEDIA_10B_2; } - else - return 0; -} - -/************************************************************************** -ETH_RESET - Reset adapter -***************************************************************************/ - -static void cs89x0_reset(struct nic *nic) -{ - int i; - unsigned long reset_tmo; - - writereg(PP_SelfCTL, readreg(PP_SelfCTL) | POWER_ON_RESET); - - /* wait for two ticks; that is 2*55ms */ - for (reset_tmo = currticks() + 2; currticks() < reset_tmo; ); - - if (eth_cs_type != CS8900) { - /* Hardware problem requires PNP registers to be reconfigured - after a reset */ - if (eth_irq != 0xFFFF) { - outw(PP_CS8920_ISAINT, eth_nic_base + ADD_PORT); - outb(eth_irq, eth_nic_base + DATA_PORT); - outb(0, eth_nic_base + DATA_PORT + 1); } - - if (eth_mem_start) { - outw(PP_CS8920_ISAMemB, eth_nic_base + ADD_PORT); - outb((eth_mem_start >> 8) & 0xff, eth_nic_base + DATA_PORT); - outb((eth_mem_start >> 24) & 0xff, eth_nic_base + DATA_PORT + 1); } } - - /* Wait until the chip is reset */ - for (reset_tmo = currticks() + 2; - (readreg(PP_SelfST) & INIT_DONE) == 0 && - currticks() < reset_tmo; ); - - /* disable interrupts and memory accesses */ - writereg(PP_BusCTL, 0); - - /* set the ethernet address */ - for (i=0; i < ETH_ALEN/2; i++) - writereg(PP_IA+i*2, - nic->node_addr[i*2] | - (nic->node_addr[i*2+1] << 8)); - - /* receive only error free packets addressed to this card */ - writereg(PP_RxCTL, DEF_RX_ACCEPT); - - /* do not generate any interrupts on receive operations */ - writereg(PP_RxCFG, 0); - - /* do not generate any interrupts on transmit operations */ - writereg(PP_TxCFG, 0); - - /* do not generate any interrupts on buffer operations */ - writereg(PP_BufCFG, 0); - - /* reset address port, so that autoprobing will keep working */ - outw(PP_ChipID, eth_nic_base + ADD_PORT); - - return; -} - -/************************************************************************** -ETH_TRANSMIT - Transmit a frame -***************************************************************************/ - -static void cs89x0_transmit( - struct nic *nic, - const char *d, /* Destination */ - unsigned int t, /* Type */ - unsigned int s, /* size */ - const char *p) /* Packet */ -{ - unsigned long tmo; - int sr; - - /* does this size have to be rounded??? please, - somebody have a look in the specs */ - if ((sr = ((s + ETH_HLEN + 1)&~1)) < ETH_ZLEN) - sr = ETH_ZLEN; - -retry: - /* initiate a transmit sequence */ - outw(TX_AFTER_ALL, eth_nic_base + TX_CMD_PORT); - outw(sr, eth_nic_base + TX_LEN_PORT); - - /* Test to see if the chip has allocated memory for the packet */ - if ((readreg(PP_BusST) & READY_FOR_TX_NOW) == 0) { - /* Oops... this should not happen! */ - printf("cs: unable to send packet; retrying...\n"); - for (tmo = currticks() + 5*TICKS_PER_SEC; currticks() < tmo; ); - cs89x0_reset(nic); - goto retry; } - - /* Write the contents of the packet */ - outsw(eth_nic_base + TX_FRAME_PORT, d, ETH_ALEN/2); - outsw(eth_nic_base + TX_FRAME_PORT, nic->node_addr, - ETH_ALEN/2); - outw(((t >> 8)&0xFF)|(t << 8), eth_nic_base + TX_FRAME_PORT); - outsw(eth_nic_base + TX_FRAME_PORT, p, (s+1)/2); - for (sr = sr/2 - (s+1)/2 - ETH_ALEN - 1; sr-- > 0; - outw(0, eth_nic_base + TX_FRAME_PORT)); - - /* wait for transfer to succeed */ - for (tmo = currticks()+5*TICKS_PER_SEC; - (s = readreg(PP_TxEvent)&~0x1F) == 0 && currticks() < tmo;) - /* nothing */ ; - if ((s & TX_SEND_OK_BITS) != TX_OK) { - printf("\ntransmission error %#hX\n", s); - } - - return; -} - -/************************************************************************** -ETH_POLL - Wait for a frame -***************************************************************************/ - -static int cs89x0_poll(struct nic *nic) -{ - int status; - - status = readreg(PP_RxEvent); - - if ((status & RX_OK) == 0) - return(0); - - status = inw(eth_nic_base + RX_FRAME_PORT); - nic->packetlen = inw(eth_nic_base + RX_FRAME_PORT); - insw(eth_nic_base + RX_FRAME_PORT, nic->packet, nic->packetlen >> 1); - if (nic->packetlen & 1) - nic->packet[nic->packetlen-1] = inw(eth_nic_base + RX_FRAME_PORT); - return 1; -} - -static void cs89x0_disable(struct nic *nic) -{ - cs89x0_reset(nic); -} - -/************************************************************************** -ETH_PROBE - Look for an adapter -***************************************************************************/ - -struct nic *cs89x0_probe(struct nic *nic, unsigned short *probe_addrs) -{ - static const unsigned int netcard_portlist[] = { -#ifdef CS_SCAN - CS_SCAN, -#else /* use "conservative" default values for autoprobing */ - 0x300,0x320,0x340,0x200,0x220,0x240, - 0x260,0x280,0x2a0,0x2c0,0x2e0, - /* if that did not work, then be more aggressive */ - 0x301,0x321,0x341,0x201,0x221,0x241, - 0x261,0x281,0x2a1,0x2c1,0x2e1, -#endif - 0}; - - int i, result = -1; - unsigned rev_type = 0, ioaddr, ioidx, isa_cnf, cs_revision; - unsigned short eeprom_buff[CHKSUM_LEN]; - - - for (ioidx = 0; (ioaddr=netcard_portlist[ioidx++]) != 0; ) { - /* if they give us an odd I/O address, then do ONE write to - the address port, to get it back to address zero, where we - expect to find the EISA signature word. */ - if (ioaddr & 1) { - ioaddr &= ~1; - if ((inw(ioaddr + ADD_PORT) & ADD_MASK) != ADD_SIG) - continue; - outw(PP_ChipID, ioaddr + ADD_PORT); - } - - if (inw(ioaddr + DATA_PORT) != CHIP_EISA_ID_SIG) - continue; - eth_nic_base = ioaddr; - - /* get the chip type */ - rev_type = readreg(PRODUCT_ID_ADD); - eth_cs_type = rev_type &~ REVISON_BITS; - cs_revision = ((rev_type & REVISON_BITS) >> 8) + 'A'; - - printf("\ncs: cs89%c0%s rev %c, base %#hX", - eth_cs_type==CS8900?'0':'2', - eth_cs_type==CS8920M?"M":"", - cs_revision, - eth_nic_base); - - /* First check to see if an EEPROM is attached*/ - if ((readreg(PP_SelfST) & EEPROM_PRESENT) == 0) { - printf("\ncs: no EEPROM...\n"); - outw(PP_ChipID, eth_nic_base + ADD_PORT); - continue; } - else if (get_eeprom_data(START_EEPROM_DATA,CHKSUM_LEN, - eeprom_buff) < 0) { - printf("\ncs: EEPROM read failed...\n"); - outw(PP_ChipID, eth_nic_base + ADD_PORT); - continue; } - else if (get_eeprom_chksum(START_EEPROM_DATA,CHKSUM_LEN, - eeprom_buff) < 0) { - printf("\ncs: EEPROM checksum bad...\n"); - outw(PP_ChipID, eth_nic_base + ADD_PORT); - continue; } - - /* get transmission control word but keep the - autonegotiation bits */ - eth_auto_neg_cnf = eeprom_buff[AUTO_NEG_CNF_OFFSET/2]; - /* Store adapter configuration */ - eth_adapter_cnf = eeprom_buff[ADAPTER_CNF_OFFSET/2]; - /* Store ISA configuration */ - isa_cnf = eeprom_buff[ISA_CNF_OFFSET/2]; - - /* store the initial memory base address */ - eth_mem_start = eeprom_buff[PACKET_PAGE_OFFSET/2] << 8; - - printf("%s%s%s, addr ", - (eth_adapter_cnf & A_CNF_10B_T)?", RJ-45":"", - (eth_adapter_cnf & A_CNF_AUI)?", AUI":"", - (eth_adapter_cnf & A_CNF_10B_2)?", BNC":""); - - /* If this is a CS8900 then no pnp soft */ - if (eth_cs_type != CS8900 && - /* Check if the ISA IRQ has been set */ - (i = readreg(PP_CS8920_ISAINT) & 0xff, - (i != 0 && i < CS8920_NO_INTS))) - eth_irq = i; - else { - i = isa_cnf & INT_NO_MASK; - if (eth_cs_type == CS8900) { - /* the table that follows is dependent - upon how you wired up your cs8900 - in your system. The table is the - same as the cs8900 engineering demo - board. irq_map also depends on the - contents of the table. Also see - write_irq, which is the reverse - mapping of the table below. */ - if (i < 4) i = "\012\013\014\005"[i]; - else printf("\ncs: BUG: isa_config is %d\n", i); } - eth_irq = i; } - - /* Retrieve and print the ethernet address. */ - for (i=0; inode_addr[i] = ((unsigned char *)eeprom_buff)[i]; - } - printf("%!\n", nic->node_addr); - - /* Set the LineCTL quintuplet based on adapter - configuration read from EEPROM */ - if ((eth_adapter_cnf & A_CNF_EXTND_10B_2) && - (eth_adapter_cnf & A_CNF_LOW_RX_SQUELCH)) - eth_linectl = LOW_RX_SQUELCH; - else - eth_linectl = 0; - - /* check to make sure that they have the "right" - hardware available */ - switch(eth_adapter_cnf & A_CNF_MEDIA_TYPE) { - case A_CNF_MEDIA_10B_T: result = eth_adapter_cnf & A_CNF_10B_T; - break; - case A_CNF_MEDIA_AUI: result = eth_adapter_cnf & A_CNF_AUI; - break; - case A_CNF_MEDIA_10B_2: result = eth_adapter_cnf & A_CNF_10B_2; - break; - default: result = eth_adapter_cnf & (A_CNF_10B_T | A_CNF_AUI | - A_CNF_10B_2); - } - if (!result) { - printf("cs: EEPROM is configured for unavailable media\n"); - error: - writereg(PP_LineCTL, readreg(PP_LineCTL) & - ~(SERIAL_TX_ON | SERIAL_RX_ON)); - outw(PP_ChipID, eth_nic_base + ADD_PORT); - continue; - } - - /* Initialize the card for probing of the attached media */ - cs89x0_reset(nic); - - /* set the hardware to the configured choice */ - switch(eth_adapter_cnf & A_CNF_MEDIA_TYPE) { - case A_CNF_MEDIA_10B_T: - result = detect_tp(); - if (!result) { - clrline(); - printf("10Base-T (RJ-45%s", - ") has no cable\n"); } - /* check "ignore missing media" bit */ - if (eth_auto_neg_cnf & IMM_BIT) - /* Yes! I don't care if I see a link pulse */ - result = A_CNF_MEDIA_10B_T; - break; - case A_CNF_MEDIA_AUI: - result = detect_aui(nic); - if (!result) { - clrline(); - printf("10Base-5 (AUI%s", - ") has no cable\n"); } - /* check "ignore missing media" bit */ - if (eth_auto_neg_cnf & IMM_BIT) - /* Yes! I don't care if I see a carrrier */ - result = A_CNF_MEDIA_AUI; - break; - case A_CNF_MEDIA_10B_2: - result = detect_bnc(nic); - if (!result) { - clrline(); - printf("10Base-2 (BNC%s", - ") has no cable\n"); } - /* check "ignore missing media" bit */ - if (eth_auto_neg_cnf & IMM_BIT) - /* Yes! I don't care if I can xmit a packet */ - result = A_CNF_MEDIA_10B_2; - break; - case A_CNF_MEDIA_AUTO: - writereg(PP_LineCTL, eth_linectl | AUTO_AUI_10BASET); - if (eth_adapter_cnf & A_CNF_10B_T) - if ((result = detect_tp()) != 0) - break; - if (eth_adapter_cnf & A_CNF_AUI) - if ((result = detect_aui(nic)) != 0) - break; - if (eth_adapter_cnf & A_CNF_10B_2) - if ((result = detect_bnc(nic)) != 0) - break; - clrline(); printf("no media detected\n"); - goto error; - } - clrline(); - switch(result) { - case 0: printf("no network cable attached to configured media\n"); - goto error; - case A_CNF_MEDIA_10B_T: printf("using 10Base-T (RJ-45)\n"); - break; - case A_CNF_MEDIA_AUI: printf("using 10Base-5 (AUI)\n"); - break; - case A_CNF_MEDIA_10B_2: printf("using 10Base-2 (BNC)\n"); - break; - } - - /* Turn on both receive and transmit operations */ - writereg(PP_LineCTL, readreg(PP_LineCTL) | SERIAL_RX_ON | - SERIAL_TX_ON); - - break; - } - - if (ioaddr == 0) - return (0); - nic->reset = cs89x0_reset; - nic->poll = cs89x0_poll; - nic->transmit = cs89x0_transmit; - nic->disable = cs89x0_disable; - return (nic); -} - -/* - * Local variables: - * c-basic-offset: 8 - * End: - */ - diff --git a/netboot/cs89x0.h b/netboot/cs89x0.h deleted file mode 100644 index 6350dc874..000000000 --- a/netboot/cs89x0.h +++ /dev/null @@ -1,479 +0,0 @@ -/** - Per an email message from Russ Nelson on - 18 March 2008 this file is now licensed under GPL Version 2. - - From: Russ Nelson - Date: Tue, 18 Mar 2008 12:42:00 -0400 - Subject: Re: [Etherboot-developers] cs89x0 driver in etherboot - -- quote from email - As copyright holder, if I say it doesn't conflict with the GPL, - then it doesn't conflict with the GPL. - - However, there's no point in causing people's brains to overheat, - so yes, I grant permission for the code to be relicensed under the - GPLv2. Please make sure that this change in licensing makes its - way upstream. -russ - -- quote from email -**/ - -/* Copyright, 1988-1992, Russell Nelson, Crynwr Software - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, version 1. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ - -#define PP_ChipID 0x0000 /* offset 0h -> Corp -ID */ - /* offset 2h -> Model/Product Number */ - /* offset 3h -> Chip Revision Number */ - -#define PP_ISAIOB 0x0020 /* IO base address */ -#define PP_CS8900_ISAINT 0x0022 /* ISA interrupt select */ -#define PP_CS8920_ISAINT 0x0370 /* ISA interrupt select */ -#define PP_CS8900_ISADMA 0x0024 /* ISA Rec DMA channel */ -#define PP_CS8920_ISADMA 0x0374 /* ISA Rec DMA channel */ -#define PP_ISASOF 0x0026 /* ISA DMA offset */ -#define PP_DmaFrameCnt 0x0028 /* ISA DMA Frame count */ -#define PP_DmaByteCnt 0x002A /* ISA DMA Byte count */ -#define PP_CS8900_ISAMemB 0x002C /* Memory base */ -#define PP_CS8920_ISAMemB 0x0348 /* */ - -#define PP_ISABootBase 0x0030 /* Boot Prom base */ -#define PP_ISABootMask 0x0034 /* Boot Prom Mask */ - -/* EEPROM data and command registers */ -#define PP_EECMD 0x0040 /* NVR Interface Command register */ -#define PP_EEData 0x0042 /* NVR Interface Data Register */ -#define PP_DebugReg 0x0044 /* Debug Register */ - -#define PP_RxCFG 0x0102 /* Rx Bus config */ -#define PP_RxCTL 0x0104 /* Receive Control Register */ -#define PP_TxCFG 0x0106 /* Transmit Config Register */ -#define PP_TxCMD 0x0108 /* Transmit Command Register */ -#define PP_BufCFG 0x010A /* Bus configuration Register */ -#define PP_LineCTL 0x0112 /* Line Config Register */ -#define PP_SelfCTL 0x0114 /* Self Command Register */ -#define PP_BusCTL 0x0116 /* ISA bus control Register */ -#define PP_TestCTL 0x0118 /* Test Register */ -#define PP_AutoNegCTL 0x011C /* Auto Negotiation Ctrl */ - -#define PP_ISQ 0x0120 /* Interrupt Status */ -#define PP_RxEvent 0x0124 /* Rx Event Register */ -#define PP_TxEvent 0x0128 /* Tx Event Register */ -#define PP_BufEvent 0x012C /* Bus Event Register */ -#define PP_RxMiss 0x0130 /* Receive Miss Count */ -#define PP_TxCol 0x0132 /* Transmit Collision Count */ -#define PP_LineST 0x0134 /* Line State Register */ -#define PP_SelfST 0x0136 /* Self State register */ -#define PP_BusST 0x0138 /* Bus Status */ -#define PP_TDR 0x013C /* Time Domain Reflectometry */ -#define PP_AutoNegST 0x013E /* Auto Neg Status */ -#define PP_TxCommand 0x0144 /* Tx Command */ -#define PP_TxLength 0x0146 /* Tx Length */ -#define PP_LAF 0x0150 /* Hash Table */ -#define PP_IA 0x0158 /* Physical Address Register */ - -#define PP_RxStatus 0x0400 /* Receive start of frame */ -#define PP_RxLength 0x0402 /* Receive Length of frame */ -#define PP_RxFrame 0x0404 /* Receive frame pointer */ -#define PP_TxFrame 0x0A00 /* Transmit frame pointer */ - -/* Primary I/O Base Address. If no I/O base is supplied by the user, then this */ -/* can be used as the default I/O base to access the PacketPage Area. */ -#define DEFAULTIOBASE 0x0300 -#define FIRST_IO 0x020C /* First I/O port to check */ -#define LAST_IO 0x037C /* Last I/O port to check (+10h) */ -#define ADD_MASK 0x3000 /* Mask it use of the ADD_PORT register */ -#define ADD_SIG 0x3000 /* Expected ID signature */ - -#define CHIP_EISA_ID_SIG 0x630E /* Product ID Code for Crystal Chip (CS8900 spec 4.3) */ - -#ifdef IBMEIPKT -#define EISA_ID_SIG 0x4D24 /* IBM */ -#define PART_NO_SIG 0x1010 /* IBM */ -#define MONGOOSE_BIT 0x0000 /* IBM */ -#else -#define EISA_ID_SIG 0x630E /* PnP Vendor ID (same as chip id for Crystal board) */ -#define PART_NO_SIG 0x4000 /* ID code CS8920 board (PnP Vendor Product code) */ -#define MONGOOSE_BIT 0x2000 /* PART_NO_SIG + MONGOOSE_BUT => ID of mongoose */ -#endif - -#define PRODUCT_ID_ADD 0x0002 /* Address of product ID */ - -/* Mask to find out the types of registers */ -#define REG_TYPE_MASK 0x001F - -/* Eeprom Commands */ -#define ERSE_WR_ENBL 0x00F0 -#define ERSE_WR_DISABLE 0x0000 - -/* Defines Control/Config register quintuplet numbers */ -#define RX_BUF_CFG 0x0003 -#define RX_CONTROL 0x0005 -#define TX_CFG 0x0007 -#define TX_COMMAND 0x0009 -#define BUF_CFG 0x000B -#define LINE_CONTROL 0x0013 -#define SELF_CONTROL 0x0015 -#define BUS_CONTROL 0x0017 -#define TEST_CONTROL 0x0019 - -/* Defines Status/Count registers quintuplet numbers */ -#define RX_EVENT 0x0004 -#define TX_EVENT 0x0008 -#define BUF_EVENT 0x000C -#define RX_MISS_COUNT 0x0010 -#define TX_COL_COUNT 0x0012 -#define LINE_STATUS 0x0014 -#define SELF_STATUS 0x0016 -#define BUS_STATUS 0x0018 -#define TDR 0x001C - -/* PP_RxCFG - Receive Configuration and Interrupt Mask bit definition - Read/write */ -#define SKIP_1 0x0040 -#define RX_STREAM_ENBL 0x0080 -#define RX_OK_ENBL 0x0100 -#define RX_DMA_ONLY 0x0200 -#define AUTO_RX_DMA 0x0400 -#define BUFFER_CRC 0x0800 -#define RX_CRC_ERROR_ENBL 0x1000 -#define RX_RUNT_ENBL 0x2000 -#define RX_EXTRA_DATA_ENBL 0x4000 - -/* PP_RxCTL - Receive Control bit definition - Read/write */ -#define RX_IA_HASH_ACCEPT 0x0040 -#define RX_PROM_ACCEPT 0x0080 -#define RX_OK_ACCEPT 0x0100 -#define RX_MULTCAST_ACCEPT 0x0200 -#define RX_IA_ACCEPT 0x0400 -#define RX_BROADCAST_ACCEPT 0x0800 -#define RX_BAD_CRC_ACCEPT 0x1000 -#define RX_RUNT_ACCEPT 0x2000 -#define RX_EXTRA_DATA_ACCEPT 0x4000 -#define RX_ALL_ACCEPT (RX_PROM_ACCEPT|RX_BAD_CRC_ACCEPT|RX_RUNT_ACCEPT|RX_EXTRA_DATA_ACCEPT) -/* Default receive mode - individually addressed, broadcast, and error free */ -#define DEF_RX_ACCEPT (RX_IA_ACCEPT | RX_BROADCAST_ACCEPT | RX_OK_ACCEPT) - -/* PP_TxCFG - Transmit Configuration Interrupt Mask bit definition - Read/write */ -#define TX_LOST_CRS_ENBL 0x0040 -#define TX_SQE_ERROR_ENBL 0x0080 -#define TX_OK_ENBL 0x0100 -#define TX_LATE_COL_ENBL 0x0200 -#define TX_JBR_ENBL 0x0400 -#define TX_ANY_COL_ENBL 0x0800 -#define TX_16_COL_ENBL 0x8000 - -/* PP_TxCMD - Transmit Command bit definition - Read-only */ -#define TX_START_4_BYTES 0x0000 -#define TX_START_64_BYTES 0x0040 -#define TX_START_128_BYTES 0x0080 -#define TX_START_ALL_BYTES 0x00C0 -#define TX_FORCE 0x0100 -#define TX_ONE_COL 0x0200 -#define TX_TWO_PART_DEFF_DISABLE 0x0400 -#define TX_NO_CRC 0x1000 -#define TX_RUNT 0x2000 - -/* PP_BufCFG - Buffer Configuration Interrupt Mask bit definition - Read/write */ -#define GENERATE_SW_INTERRUPT 0x0040 -#define RX_DMA_ENBL 0x0080 -#define READY_FOR_TX_ENBL 0x0100 -#define TX_UNDERRUN_ENBL 0x0200 -#define RX_MISS_ENBL 0x0400 -#define RX_128_BYTE_ENBL 0x0800 -#define TX_COL_COUNT_OVRFLOW_ENBL 0x1000 -#define RX_MISS_COUNT_OVRFLOW_ENBL 0x2000 -#define RX_DEST_MATCH_ENBL 0x8000 - -/* PP_LineCTL - Line Control bit definition - Read/write */ -#define SERIAL_RX_ON 0x0040 -#define SERIAL_TX_ON 0x0080 -#define AUI_ONLY 0x0100 -#define AUTO_AUI_10BASET 0x0200 -#define MODIFIED_BACKOFF 0x0800 -#define NO_AUTO_POLARITY 0x1000 -#define TWO_PART_DEFDIS 0x2000 -#define LOW_RX_SQUELCH 0x4000 - -/* PP_SelfCTL - Software Self Control bit definition - Read/write */ -#define POWER_ON_RESET 0x0040 -#define SW_STOP 0x0100 -#define SLEEP_ON 0x0200 -#define AUTO_WAKEUP 0x0400 -#define HCB0_ENBL 0x1000 -#define HCB1_ENBL 0x2000 -#define HCB0 0x4000 -#define HCB1 0x8000 - -/* PP_BusCTL - ISA Bus Control bit definition - Read/write */ -#define RESET_RX_DMA 0x0040 -#define MEMORY_ON 0x0400 -#define DMA_BURST_MODE 0x0800 -#define IO_CHANNEL_READY_ON 0x1000 -#define RX_DMA_SIZE_64K 0x2000 -#define ENABLE_IRQ 0x8000 - -/* PP_TestCTL - Test Control bit definition - Read/write */ -#define LINK_OFF 0x0080 -#define ENDEC_LOOPBACK 0x0200 -#define AUI_LOOPBACK 0x0400 -#define BACKOFF_OFF 0x0800 -#define FAST_TEST 0x8000 - -/* PP_RxEvent - Receive Event Bit definition - Read-only */ -#define RX_IA_HASHED 0x0040 -#define RX_DRIBBLE 0x0080 -#define RX_OK 0x0100 -#define RX_HASHED 0x0200 -#define RX_IA 0x0400 -#define RX_BROADCAST 0x0800 -#define RX_CRC_ERROR 0x1000 -#define RX_RUNT 0x2000 -#define RX_EXTRA_DATA 0x4000 - -#define HASH_INDEX_MASK 0x0FC00 - -/* PP_TxEvent - Transmit Event Bit definition - Read-only */ -#define TX_LOST_CRS 0x0040 -#define TX_SQE_ERROR 0x0080 -#define TX_OK 0x0100 -#define TX_LATE_COL 0x0200 -#define TX_JBR 0x0400 -#define TX_16_COL 0x8000 -#define TX_SEND_OK_BITS (TX_OK|TX_LOST_CRS) -#define TX_COL_COUNT_MASK 0x7800 - -/* PP_BufEvent - Buffer Event Bit definition - Read-only */ -#define SW_INTERRUPT 0x0040 -#define RX_DMA 0x0080 -#define READY_FOR_TX 0x0100 -#define TX_UNDERRUN 0x0200 -#define RX_MISS 0x0400 -#define RX_128_BYTE 0x0800 -#define TX_COL_OVRFLW 0x1000 -#define RX_MISS_OVRFLW 0x2000 -#define RX_DEST_MATCH 0x8000 - -/* PP_LineST - Ethernet Line Status bit definition - Read-only */ -#define LINK_OK 0x0080 -#define AUI_ON 0x0100 -#define TENBASET_ON 0x0200 -#define POLARITY_OK 0x1000 -#define CRS_OK 0x4000 - -/* PP_SelfST - Chip Software Status bit definition */ -#define ACTIVE_33V 0x0040 -#define INIT_DONE 0x0080 -#define SI_BUSY 0x0100 -#define EEPROM_PRESENT 0x0200 -#define EEPROM_OK 0x0400 -#define EL_PRESENT 0x0800 -#define EE_SIZE_64 0x1000 - -/* PP_BusST - ISA Bus Status bit definition */ -#define TX_BID_ERROR 0x0080 -#define READY_FOR_TX_NOW 0x0100 - -/* PP_AutoNegCTL - Auto Negotiation Control bit definition */ -#define RE_NEG_NOW 0x0040 -#define ALLOW_FDX 0x0080 -#define AUTO_NEG_ENABLE 0x0100 -#define NLP_ENABLE 0x0200 -#define FORCE_FDX 0x8000 -#define AUTO_NEG_BITS (FORCE_FDX|NLP_ENABLE|AUTO_NEG_ENABLE) -#define AUTO_NEG_MASK (FORCE_FDX|NLP_ENABLE|AUTO_NEG_ENABLE|ALLOW_FDX|RE_NEG_NOW) - -/* PP_AutoNegST - Auto Negotiation Status bit definition */ -#define AUTO_NEG_BUSY 0x0080 -#define FLP_LINK 0x0100 -#define FLP_LINK_GOOD 0x0800 -#define LINK_FAULT 0x1000 -#define HDX_ACTIVE 0x4000 -#define FDX_ACTIVE 0x8000 - -/* The following block defines the ISQ event types */ -#define ISQ_RECEIVER_EVENT 0x04 -#define ISQ_TRANSMITTER_EVENT 0x08 -#define ISQ_BUFFER_EVENT 0x0c -#define ISQ_RX_MISS_EVENT 0x10 -#define ISQ_TX_COL_EVENT 0x12 - -#define ISQ_EVENT_MASK 0x003F /* ISQ mask to find out type of event */ -#define ISQ_HIST 16 /* small history buffer */ -#define AUTOINCREMENT 0x8000 /* Bit mask to set bit-15 for autoincrement */ - -#define TXRXBUFSIZE 0x0600 -#define RXDMABUFSIZE 0x8000 -#define RXDMASIZE 0x4000 -#define TXRX_LENGTH_MASK 0x07FF - -/* rx options bits */ -#define RCV_WITH_RXON 1 /* Set SerRx ON */ -#define RCV_COUNTS 2 /* Use Framecnt1 */ -#define RCV_PONG 4 /* Pong respondent */ -#define RCV_DONG 8 /* Dong operation */ -#define RCV_POLLING 0x10 /* Poll RxEvent */ -#define RCV_ISQ 0x20 /* Use ISQ, int */ -#define RCV_AUTO_DMA 0x100 /* Set AutoRxDMAE */ -#define RCV_DMA 0x200 /* Set RxDMA only */ -#define RCV_DMA_ALL 0x400 /* Copy all DMA'ed */ -#define RCV_FIXED_DATA 0x800 /* Every frame same */ -#define RCV_IO 0x1000 /* Use ISA IO only */ -#define RCV_MEMORY 0x2000 /* Use ISA Memory */ - -#define RAM_SIZE 0x1000 /* The card has 4k bytes or RAM */ -#define PKT_START PP_TxFrame /* Start of packet RAM */ - -#define RX_FRAME_PORT 0x0000 -#define TX_FRAME_PORT RX_FRAME_PORT -#define TX_CMD_PORT 0x0004 -#define TX_NOW 0x0000 /* Tx packet after 5 bytes copied */ -#define TX_AFTER_381 0x0020 /* Tx packet after 381 bytes copied */ -#define TX_AFTER_ALL 0x0060 /* Tx packet after all bytes copied */ -#define TX_LEN_PORT 0x0006 -#define ISQ_PORT 0x0008 -#define ADD_PORT 0x000A -#define DATA_PORT 0x000C - -#define EEPROM_WRITE_EN 0x00F0 -#define EEPROM_WRITE_DIS 0x0000 -#define EEPROM_WRITE_CMD 0x0100 -#define EEPROM_READ_CMD 0x0200 - -/* Receive Header */ -/* Description of header of each packet in receive area of memory */ -#define RBUF_EVENT_LOW 0 /* Low byte of RxEvent - status of received frame */ -#define RBUF_EVENT_HIGH 1 /* High byte of RxEvent - status of received frame */ -#define RBUF_LEN_LOW 2 /* Length of received data - low byte */ -#define RBUF_LEN_HI 3 /* Length of received data - high byte */ -#define RBUF_HEAD_LEN 4 /* Length of this header */ - -#define CHIP_READ 0x1 /* Used to mark state of the repins code (chip or dma) */ -#define DMA_READ 0x2 /* Used to mark state of the repins code (chip or dma) */ - -/* for bios scan */ -/* */ -#ifdef CSDEBUG -/* use these values for debugging bios scan */ -#define BIOS_START_SEG 0x00000 -#define BIOS_OFFSET_INC 0x0010 -#else -#define BIOS_START_SEG 0x0c000 -#define BIOS_OFFSET_INC 0x0200 -#endif - -#define BIOS_LAST_OFFSET 0x0fc00 - -/* Byte offsets into the EEPROM configuration buffer */ -#define ISA_CNF_OFFSET 0x6 -#define TX_CTL_OFFSET (ISA_CNF_OFFSET + 8) /* 8900 eeprom */ -#define AUTO_NEG_CNF_OFFSET (ISA_CNF_OFFSET + 8) /* 8920 eeprom */ - - /* the assumption here is that the bits in the eeprom are generally */ - /* in the same position as those in the autonegctl register. */ - /* Of course the IMM bit is not in that register so it must be */ - /* masked out */ -#define EE_FORCE_FDX 0x8000 -#define EE_NLP_ENABLE 0x0200 -#define EE_AUTO_NEG_ENABLE 0x0100 -#define EE_ALLOW_FDX 0x0080 -#define EE_AUTO_NEG_CNF_MASK (EE_FORCE_FDX|EE_NLP_ENABLE|EE_AUTO_NEG_ENABLE|EE_ALLOW_FDX) - -#define IMM_BIT 0x0040 /* ignore missing media */ - -#define ADAPTER_CNF_OFFSET (AUTO_NEG_CNF_OFFSET + 2) -#define A_CNF_10B_T 0x0001 -#define A_CNF_AUI 0x0002 -#define A_CNF_10B_2 0x0004 -#define A_CNF_MEDIA_TYPE 0x0060 -#define A_CNF_MEDIA_AUTO 0x0000 -#define A_CNF_MEDIA_10B_T 0x0020 -#define A_CNF_MEDIA_AUI 0x0040 -#define A_CNF_MEDIA_10B_2 0x0060 -#define A_CNF_DC_DC_POLARITY 0x0080 -#define A_CNF_NO_AUTO_POLARITY 0x2000 -#define A_CNF_LOW_RX_SQUELCH 0x4000 -#define A_CNF_EXTND_10B_2 0x8000 - -#define PACKET_PAGE_OFFSET 0x8 - -/* Bit definitions for the ISA configuration word from the EEPROM */ -#define INT_NO_MASK 0x000F -#define DMA_NO_MASK 0x0070 -#define ISA_DMA_SIZE 0x0200 -#define ISA_AUTO_RxDMA 0x0400 -#define ISA_RxDMA 0x0800 -#define DMA_BURST 0x1000 -#define STREAM_TRANSFER 0x2000 -#define ANY_ISA_DMA (ISA_AUTO_RxDMA | ISA_RxDMA) - -/* DMA controller registers */ -#define DMA_BASE 0x00 /* DMA controller base */ -#define DMA_BASE_2 0x0C0 /* DMA controller base */ - -#define DMA_STAT 0x0D0 /* DMA controller status register */ -#define DMA_MASK 0x0D4 /* DMA controller mask register */ -#define DMA_MODE 0x0D6 /* DMA controller mode register */ -#define DMA_RESETFF 0x0D8 /* DMA controller first/last flip flop */ - -/* DMA data */ -#define DMA_DISABLE 0x04 /* Disable channel n */ -#define DMA_ENABLE 0x00 /* Enable channel n */ -/* Demand transfers, incr. address, auto init, writes, ch. n */ -#define DMA_RX_MODE 0x14 -/* Demand transfers, incr. address, auto init, reads, ch. n */ -#define DMA_TX_MODE 0x18 - -#define DMA_SIZE (16*1024) /* Size of dma buffer - 16k */ - -#define CS8900 0x0000 -#define CS8920 0x4000 -#define CS8920M 0x6000 -#define REVISON_BITS 0x1F00 -#define EEVER_NUMBER 0x12 -#define CHKSUM_LEN 0x14 -#define CHKSUM_VAL 0x0000 -#define START_EEPROM_DATA 0x001c /* Offset into eeprom for start of data */ -#define IRQ_MAP_EEPROM_DATA 0x0046 /* Offset into eeprom for the IRQ map */ -#define IRQ_MAP_LEN 0x0004 /* No of bytes to read for the IRQ map */ -#define PNP_IRQ_FRMT 0x0022 /* PNP small item IRQ format */ -#define CS8900_IRQ_MAP 0x1c20 /* This IRQ map is fixed */ - -#define CS8920_NO_INTS 0x0F /* Max CS8920 interrupt select # */ - -#define PNP_ADD_PORT 0x0279 -#define PNP_WRITE_PORT 0x0A79 - -#define GET_PNP_ISA_STRUCT 0x40 -#define PNP_ISA_STRUCT_LEN 0x06 -#define PNP_CSN_CNT_OFF 0x01 -#define PNP_RD_PORT_OFF 0x02 -#define PNP_FUNCTION_OK 0x00 -#define PNP_WAKE 0x03 -#define PNP_RSRC_DATA 0x04 -#define PNP_RSRC_READY 0x01 -#define PNP_STATUS 0x05 -#define PNP_ACTIVATE 0x30 -#define PNP_CNF_IO_H 0x60 -#define PNP_CNF_IO_L 0x61 -#define PNP_CNF_INT 0x70 -#define PNP_CNF_DMA 0x74 -#define PNP_CNF_MEM 0x48 - -#define BIT0 1 -#define BIT15 0x8000 - -/* - * Local variables: - * c-basic-offset: 8 - * End: - */ - diff --git a/netboot/cs89x0.txt b/netboot/cs89x0.txt deleted file mode 100644 index 4927641d8..000000000 --- a/netboot/cs89x0.txt +++ /dev/null @@ -1,26 +0,0 @@ -Permission is granted to distribute the enclosed cs89x0.[ch] driver -only in conjunction with the Etherboot package. The code is -ordinarily distributed under the GPL. - -Russ Nelson, January 2000 - -CREDITS - -I want to thank - - Mike Cruse - for providing an evaluation NIC and for sponsoring the - development of this driver. - - Randall Sears - Deva Bodas - Andreas Kraemer - Wolfgang Krause <100303.2673@compuserve.com> - for excellent technical support and for providing the required - programming information. I appreciate Crystal Semiconductor's - commitment towards free software. - - Russell Nelson - for writing the Linux device driver for the CS89x0 - chipset. Russel's code is very well designed and simplified my - job a lot. diff --git a/netboot/davicom.c b/netboot/davicom.c deleted file mode 100644 index 5a9865691..000000000 --- a/netboot/davicom.c +++ /dev/null @@ -1,692 +0,0 @@ -/* - DAVICOM DM9009/DM9102/DM9102A Etherboot Driver V1.00 - - This driver was ported from Marty Conner's Tulip Etherboot driver. - Thanks Marty Connor (mdc@thinguin.org) - You can get Tulip driver source file from this URL: - - "http://etherboot.sourceforge..net/#Distribution" - - This davicom etherboot driver supports DM9009/DM9102/DM9102A/ - DM9102A+DM9801/DM9102A+DM9802 NICs. - - This software may be used and distributed according to the terms - of the GNU Public License, incorporated herein by reference. - -*/ - -/*********************************************************************/ -/* Revision History */ -/*********************************************************************/ - -/* - 19 OCT 2000 Sten 1.00 - Different half and full duplex mode - Do the different programming for DM9801/DM9802 - - 12 OCT 2000 Sten 0.90 - This driver was ported from tulip driver and it - has the following difference. - Changed symbol tulip/TULIP to davicom/DAVICOM - Deleted some code that did not use in this driver. - Used chain-strcture to replace ring structure - for both TX/RX descriptor. - Allocated two tx descriptor. - According current media mode to set operating - register(CR6) -*/ - - -/*********************************************************************/ -/* Declarations */ -/*********************************************************************/ - -#include "etherboot.h" -#include "nic.h" -#include "pci.h" -#include "cards.h" - -#undef DAVICOM_DEBUG -#undef DAVICOM_DEBUG_WHERE - -#define TX_TIME_OUT 2*TICKS_PER_SEC - -typedef unsigned char u8; -typedef signed char s8; -typedef unsigned short u16; -typedef signed short s16; -typedef unsigned int u32; -typedef signed int s32; - -/* Register offsets for davicom device */ -enum davicom_offsets { - CSR0=0, CSR1=0x08, CSR2=0x10, CSR3=0x18, CSR4=0x20, CSR5=0x28, - CSR6=0x30, CSR7=0x38, CSR8=0x40, CSR9=0x48, CSR10=0x50, CSR11=0x58, - CSR12=0x60, CSR13=0x68, CSR14=0x70, CSR15=0x78, CSR16=0x80, CSR20=0xA0 -}; - -/* EEPROM Address width definitions */ -#define EEPROM_ADDRLEN 6 -#define EEPROM_SIZE 32 /* 1 << EEPROM_ADDRLEN */ -/* Used to be 128, but we only need to read enough to get the MAC - address at bytes 20..25 */ - -/* Data Read from the EEPROM */ -static unsigned char ee_data[EEPROM_SIZE]; - -/* The EEPROM commands include the alway-set leading bit. */ -#define EE_WRITE_CMD (5 << addr_len) -#define EE_READ_CMD (6 << addr_len) -#define EE_ERASE_CMD (7 << addr_len) - -/* EEPROM_Ctrl bits. */ -#define EE_SHIFT_CLK 0x02 /* EEPROM shift clock. */ -#define EE_CS 0x01 /* EEPROM chip select. */ -#define EE_DATA_WRITE 0x04 /* EEPROM chip data in. */ -#define EE_WRITE_0 0x01 -#define EE_WRITE_1 0x05 -#define EE_DATA_READ 0x08 /* EEPROM chip data out. */ -#define EE_ENB (0x4800 | EE_CS) - -/* Sten 10/11 for phyxcer */ -#define PHY_DATA_0 0x0 -#define PHY_DATA_1 0x20000 -#define MDCLKH 0x10000 - -/* Delay between EEPROM clock transitions. Even at 33Mhz current PCI - implementations don't overrun the EEPROM clock. We add a bus - turn-around to insure that this remains true. */ -#define eeprom_delay() inl(ee_addr) - -/* helpful macro if on a big_endian machine for changing byte order. - not strictly needed on Intel */ -#define le16_to_cpu(val) (val) - -/* transmit and receive descriptor format */ -struct txdesc { - volatile unsigned long status; /* owner, status */ - unsigned long buf1sz:11, /* size of buffer 1 */ - buf2sz:11, /* size of buffer 2 */ - control:10; /* control bits */ - const unsigned char *buf1addr; /* buffer 1 address */ - const unsigned char *buf2addr; /* buffer 2 address */ -}; - -struct rxdesc { - volatile unsigned long status; /* owner, status */ - unsigned long buf1sz:11, /* size of buffer 1 */ - buf2sz:11, /* size of buffer 2 */ - control:10; /* control bits */ - unsigned char *buf1addr; /* buffer 1 address */ - unsigned char *buf2addr; /* buffer 2 address */ -}; - -/* Size of transmit and receive buffers */ -#define BUFLEN 1536 - -/*********************************************************************/ -/* Global Storage */ -/*********************************************************************/ - -/* PCI Bus parameters */ -static unsigned short vendor, dev_id; -static unsigned long ioaddr; - -/* Note: transmit and receive buffers must be longword aligned and - longword divisable */ - -/* transmit descriptor and buffer */ -#define NTXD 2 -static struct txdesc txd[NTXD] __attribute__ ((aligned(4))); -#ifdef USE_LOWMEM_BUFFER -#define txb ((char *)0x10000 - BUFLEN) -#else -static unsigned char txb[BUFLEN] __attribute__ ((aligned(4))); -#endif - -/* receive descriptor(s) and buffer(s) */ -#define NRXD 4 -static struct rxdesc rxd[NRXD] __attribute__ ((aligned(4))); -#ifdef USE_LOWMEM_BUFFER -#define rxb ((char *)0x10000 - NRXD * BUFLEN - BUFLEN) -#else -static unsigned char rxb[NRXD * BUFLEN] __attribute__ ((aligned(4))); -#endif -static int rxd_tail; -static int TxPtr; - - -/*********************************************************************/ -/* Function Prototypes */ -/*********************************************************************/ -static void whereami(const char *str); -static int read_eeprom(unsigned long ioaddr, int location, int addr_len); -struct nic *davicom_probe(struct nic *nic, unsigned short *io_addrs, - struct pci_device *pci); -static void davicom_init_chain(struct nic *nic); /* Sten 10/9 */ -static void davicom_reset(struct nic *nic); -static void davicom_transmit(struct nic *nic, const char *d, unsigned int t, - unsigned int s, const char *p); -static int davicom_poll(struct nic *nic); -static void davicom_disable(struct nic *nic); -static void whereami (const char *str); -#ifdef DAVICOM_DEBUG -static void davicom_more(void); -#endif /* DAVICOM_DEBUG */ -static void davicom_wait(unsigned int nticks); -static int phy_read(int); -static void phy_write(int, u16); -static void phy_write_1bit(u32, u32); -static int phy_read_1bit(u32); -static void davicom_media_chk(struct nic *); - - -/*********************************************************************/ -/* Utility Routines */ -/*********************************************************************/ - -static inline void whereami (const char *str) -{ -#ifdef DAVICOM_DEBUG_WHERE - printf("%s\n", str); - /* sleep(2); */ -#endif -} - -#ifdef DAVICOM_DEBUG -static void davicom_more() -{ - printf("\n\n-- more --"); - while (!iskey()) - /* wait */; - getchar(); - printf("\n\n"); -} -#endif /* DAVICOM_DEBUG */ - -static void davicom_wait(unsigned int nticks) -{ - unsigned int to = currticks() + nticks; - while (currticks() < to) - /* wait */ ; -} - - -/*********************************************************************/ -/* For DAVICOM phyxcer register by MII interface */ -/*********************************************************************/ -/* - Read a word data from phy register -*/ -static int phy_read(int location) -{ - int i, phy_addr=1; - u16 phy_data; - u32 io_dcr9; - - whereami("phy_read\n"); - - io_dcr9 = ioaddr + CSR9; - - /* Send 33 synchronization clock to Phy controller */ - for (i=0; i<34; i++) - phy_write_1bit(io_dcr9, PHY_DATA_1); - - /* Send start command(01) to Phy */ - phy_write_1bit(io_dcr9, PHY_DATA_0); - phy_write_1bit(io_dcr9, PHY_DATA_1); - - /* Send read command(10) to Phy */ - phy_write_1bit(io_dcr9, PHY_DATA_1); - phy_write_1bit(io_dcr9, PHY_DATA_0); - - /* Send Phy addres */ - for (i=0x10; i>0; i=i>>1) - phy_write_1bit(io_dcr9, phy_addr&i ? PHY_DATA_1: PHY_DATA_0); - - /* Send register addres */ - for (i=0x10; i>0; i=i>>1) - phy_write_1bit(io_dcr9, location&i ? PHY_DATA_1: PHY_DATA_0); - - /* Skip transition state */ - phy_read_1bit(io_dcr9); - - /* read 16bit data */ - for (phy_data=0, i=0; i<16; i++) { - phy_data<<=1; - phy_data|=phy_read_1bit(io_dcr9); - } - - return phy_data; -} - -/* - Write a word to Phy register -*/ -static void phy_write(int location, u16 phy_data) -{ - u16 i, phy_addr=1; - u32 io_dcr9; - - whereami("phy_write\n"); - - io_dcr9 = ioaddr + CSR9; - - /* Send 33 synchronization clock to Phy controller */ - for (i=0; i<34; i++) - phy_write_1bit(io_dcr9, PHY_DATA_1); - - /* Send start command(01) to Phy */ - phy_write_1bit(io_dcr9, PHY_DATA_0); - phy_write_1bit(io_dcr9, PHY_DATA_1); - - /* Send write command(01) to Phy */ - phy_write_1bit(io_dcr9, PHY_DATA_0); - phy_write_1bit(io_dcr9, PHY_DATA_1); - - /* Send Phy addres */ - for (i=0x10; i>0; i=i>>1) - phy_write_1bit(io_dcr9, phy_addr&i ? PHY_DATA_1: PHY_DATA_0); - - /* Send register addres */ - for (i=0x10; i>0; i=i>>1) - phy_write_1bit(io_dcr9, location&i ? PHY_DATA_1: PHY_DATA_0); - - /* written trasnition */ - phy_write_1bit(io_dcr9, PHY_DATA_1); - phy_write_1bit(io_dcr9, PHY_DATA_0); - - /* Write a word data to PHY controller */ - for (i=0x8000; i>0; i>>=1) - phy_write_1bit(io_dcr9, phy_data&i ? PHY_DATA_1: PHY_DATA_0); -} - -/* - Write one bit data to Phy Controller -*/ -static void phy_write_1bit(u32 ee_addr, u32 phy_data) -{ - whereami("phy_write_1bit\n"); - outl(phy_data, ee_addr); /* MII Clock Low */ - eeprom_delay(); - outl(phy_data|MDCLKH, ee_addr); /* MII Clock High */ - eeprom_delay(); - outl(phy_data, ee_addr); /* MII Clock Low */ - eeprom_delay(); -} - -/* - Read one bit phy data from PHY controller -*/ -static int phy_read_1bit(u32 ee_addr) -{ - int phy_data; - - whereami("phy_read_1bit\n"); - - outl(0x50000, ee_addr); - eeprom_delay(); - - phy_data=(inl(ee_addr)>>19) & 0x1; - - outl(0x40000, ee_addr); - eeprom_delay(); - - return phy_data; -} - -/* - DM9801/DM9802 present check and program -*/ -static void HPNA_process(void) -{ - - if ( (phy_read(3) & 0xfff0) == 0xb900 ) { - if ( phy_read(31) == 0x4404 ) { - /* DM9801 present */ - if (phy_read(3) == 0xb901) - phy_write(16, 0x5); /* DM9801 E4 */ - else - phy_write(16, 0x1005); /* DM9801 E3 and others */ - phy_write(25, ((phy_read(24) + 3) & 0xff) | 0xf000); - } else { - /* DM9802 present */ - phy_write(16, 0x5); - phy_write(25, (phy_read(25) & 0xff00) + 2); - } - } -} - -/* - Sense media mode and set CR6 -*/ -static void davicom_media_chk(struct nic * nic) -{ - unsigned long to, csr6; - - csr6 = 0x00200000; /* SF */ - outl(csr6, ioaddr + CSR6); - - if (vendor == PCI_VENDOR_ID_DAVICOM && dev_id == PCI_DEVICE_ID_DM9009) { - /* Set to 10BaseT mode for DM9009 */ - phy_write(0, 0); - } else { - /* For DM9102/DM9102A */ - to = currticks() + 2 * TICKS_PER_SEC; - while ( ((phy_read(1) & 0x24)!=0x24) && (currticks() < to)) - /* wait */ ; - - if ( (phy_read(1) & 0x24) == 0x24 ) { - if (phy_read(17) & 0xa000) - csr6 |= 0x00000200; /* Full Duplex mode */ - } else - csr6 |= 0x00040000; /* Select DM9801/DM9802 when Ethernet link failed */ - } - - /* set the chip's operating mode */ - outl(csr6, ioaddr + CSR6); - - /* DM9801/DM9802 present check & program */ - if (csr6 & 0x40000) - HPNA_process(); -} - - -/*********************************************************************/ -/* EEPROM Reading Code */ -/*********************************************************************/ -/* EEPROM routines adapted from the Linux Tulip Code */ -/* Reading a serial EEPROM is a "bit" grungy, but we work our way - through:->. -*/ -static int read_eeprom(unsigned long ioaddr, int location, int addr_len) -{ - int i; - unsigned short retval = 0; - long ee_addr = ioaddr + CSR9; - int read_cmd = location | EE_READ_CMD; - - whereami("read_eeprom\n"); - - outl(EE_ENB & ~EE_CS, ee_addr); - outl(EE_ENB, ee_addr); - - /* Shift the read command bits out. */ - for (i = 4 + addr_len; i >= 0; i--) { - short dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0; - outl(EE_ENB | dataval, ee_addr); - eeprom_delay(); - outl(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr); - eeprom_delay(); - } - outl(EE_ENB, ee_addr); - - for (i = 16; i > 0; i--) { - outl(EE_ENB | EE_SHIFT_CLK, ee_addr); - eeprom_delay(); - retval = (retval << 1) | ((inl(ee_addr) & EE_DATA_READ) ? 1 : 0); - outl(EE_ENB, ee_addr); - eeprom_delay(); - } - - /* Terminate the EEPROM access. */ - outl(EE_ENB & ~EE_CS, ee_addr); - return retval; -} - -/*********************************************************************/ -/* davicom_init_chain - setup the tx and rx descriptors */ -/* Sten 10/9 */ -/*********************************************************************/ -static void davicom_init_chain(struct nic *nic) -{ - int i; - - /* setup the transmit descriptor */ - /* Sten: Set 2 TX descriptor but use one TX buffer because - it transmit a packet and wait complete every time. */ - for (i=0; inode_addr[0]; - txb[1] = nic->node_addr[1]; - txb[4] = nic->node_addr[2]; - txb[5] = nic->node_addr[3]; - txb[8] = nic->node_addr[4]; - txb[9] = nic->node_addr[5]; - - /* setup receive descriptor */ - for (i=0; i= to) { - printf ("TX Setup Timeout!\n"); - } - /* Point to next TX descriptor */ - TxPtr = (++TxPtr >= NTXD) ? 0:TxPtr; /* Sten 10/9 */ - -#ifdef DAVICOM_DEBUG - printf("txd.status = %X\n", txd.status); - printf("ticks = %d\n", currticks() - (to - TX_TIME_OUT)); - davicom_more(); -#endif - - /* enable RX */ - outl(inl(ioaddr + CSR6) | 0x00000002, ioaddr + CSR6); - /* immediate poll demand */ - outl(0, ioaddr + CSR2); -} - - -/*********************************************************************/ -/* eth_transmit - Transmit a frame */ -/*********************************************************************/ -static void davicom_transmit(struct nic *nic, const char *d, unsigned int t, - unsigned int s, const char *p) -{ - unsigned long to; - - whereami("davicom_transmit\n"); - - /* Stop Tx */ - /* outl(inl(ioaddr + CSR6) & ~0x00002000, ioaddr + CSR6); */ - - /* setup ethernet header */ - memcpy(&txb[0], d, ETH_ALEN); /* DA 6byte */ - memcpy(&txb[ETH_ALEN], nic->node_addr, ETH_ALEN); /* SA 6byte*/ - txb[ETH_ALEN*2] = (t >> 8) & 0xFF; /* Frame type: 2byte */ - txb[ETH_ALEN*2+1] = t & 0xFF; - memcpy(&txb[ETH_HLEN], p, s); /* Frame data */ - - /* setup the transmit descriptor */ - txd[TxPtr].buf1sz = ETH_HLEN+s; - txd[TxPtr].control = 0x00000184; /* LS+FS+CE */ - txd[TxPtr].status = 0x80000000; /* give ownership to device */ - - /* immediate transmit demand */ - outl(0, ioaddr + CSR1); - - to = currticks() + TX_TIME_OUT; - while ((txd[TxPtr].status & 0x80000000) && (currticks() < to)) - /* wait */ ; - - if (currticks() >= to) { - printf ("TX Timeout!\n"); - } - - /* Point to next TX descriptor */ - TxPtr = (++TxPtr >= NTXD) ? 0:TxPtr; /* Sten 10/9 */ - -} - -/*********************************************************************/ -/* eth_poll - Wait for a frame */ -/*********************************************************************/ -static int davicom_poll(struct nic *nic) -{ - whereami("davicom_poll\n"); - - if (rxd[rxd_tail].status & 0x80000000) - return 0; - - whereami("davicom_poll got one\n"); - - nic->packetlen = (rxd[rxd_tail].status & 0x3FFF0000) >> 16; - - if( rxd[rxd_tail].status & 0x00008000){ - rxd[rxd_tail].status = 0x80000000; - rxd_tail++; - if (rxd_tail == NRXD) rxd_tail = 0; - return 0; - } - - /* copy packet to working buffer */ - /* XXX - this copy could be avoided with a little more work - but for now we are content with it because the optimised - memcpy is quite fast */ - - memcpy(nic->packet, rxb + rxd_tail * BUFLEN, nic->packetlen); - - /* return the descriptor and buffer to receive ring */ - rxd[rxd_tail].status = 0x80000000; - rxd_tail++; - if (rxd_tail == NRXD) rxd_tail = 0; - - return 1; -} - -/*********************************************************************/ -/* eth_disable - Disable the interface */ -/*********************************************************************/ -static void davicom_disable(struct nic *nic) -{ - whereami("davicom_disable\n"); - - /* disable interrupts */ - outl(0x00000000, ioaddr + CSR7); - - /* Stop the chip's Tx and Rx processes. */ - outl(inl(ioaddr + CSR6) & ~0x00002002, ioaddr + CSR6); - - /* Clear the missed-packet counter. */ - (volatile unsigned long)inl(ioaddr + CSR8); -} - -/*********************************************************************/ -/* eth_probe - Look for an adapter */ -/*********************************************************************/ -struct nic *davicom_probe(struct nic *nic, unsigned short *io_addrs, - struct pci_device *pci) -{ - unsigned int i; - u32 l1, l2; - - whereami("davicom_probe\n"); - - if (io_addrs == 0 || *io_addrs == 0) - return 0; - - vendor = pci->vendor; - dev_id = pci->dev_id; - ioaddr = *io_addrs; - - /* wakeup chip */ - pcibios_write_config_dword(pci->bus, pci->devfn, 0x40, 0x00000000); - - /* Stop the chip's Tx and Rx processes. */ - outl(inl(ioaddr + CSR6) & ~0x00002002, ioaddr + CSR6); - - /* Clear the missed-packet counter. */ - (volatile unsigned long)inl(ioaddr + CSR8); - - /* Get MAC Address */ - /* read EEPROM data */ - for (i = 0; i < sizeof(ee_data)/2; i++) - ((unsigned short *)ee_data)[i] = - le16_to_cpu(read_eeprom(ioaddr, i, EEPROM_ADDRLEN)); - - /* extract MAC address from EEPROM buffer */ - for (i=0; inode_addr[i] = ee_data[20+i]; - - printf("Davicom %! at ioaddr %#hX\n", nic->node_addr, ioaddr); - - /* initialize device */ - davicom_reset(nic); - - nic->reset = davicom_reset; - nic->poll = davicom_poll; - nic->transmit = davicom_transmit; - nic->disable = davicom_disable; - - return nic; -} diff --git a/netboot/depca.c b/netboot/depca.c deleted file mode 100644 index 120520bc4..000000000 --- a/netboot/depca.c +++ /dev/null @@ -1,752 +0,0 @@ -/* Etherboot: depca.h merged, comments from Linux driver retained */ -/* depca.c: A DIGITAL DEPCA & EtherWORKS ethernet driver for linux. - - Written 1994, 1995 by David C. Davies. - - - Copyright 1994 David C. Davies - and - United States Government - (as represented by the Director, National Security Agency). - - Copyright 1995 Digital Equipment Corporation. - - - This software may be used and distributed according to the terms of - the GNU Public License, incorporated herein by reference. - - This driver is written for the Digital Equipment Corporation series - of DEPCA and EtherWORKS ethernet cards: - - DEPCA (the original) - DE100 - DE101 - DE200 Turbo - DE201 Turbo - DE202 Turbo (TP BNC) - DE210 - DE422 (EISA) - - The driver has been tested on DE100, DE200 and DE202 cards in a - relatively busy network. The DE422 has been tested a little. - - This driver will NOT work for the DE203, DE204 and DE205 series of - cards, since they have a new custom ASIC in place of the AMD LANCE - chip. See the 'ewrk3.c' driver in the Linux source tree for running - those cards. - - I have benchmarked the driver with a DE100 at 595kB/s to (542kB/s from) - a DECstation 5000/200. - - The author may be reached at davies@maniac.ultranet.com - - ========================================================================= - - The driver was originally based on the 'lance.c' driver from Donald - Becker which is included with the standard driver distribution for - linux. V0.4 is a complete re-write with only the kernel interface - remaining from the original code. - - 1) Lance.c code in /linux/drivers/net/ - 2) "Ethernet/IEEE 802.3 Family. 1992 World Network Data Book/Handbook", - AMD, 1992 [(800) 222-9323]. - 3) "Am79C90 CMOS Local Area Network Controller for Ethernet (C-LANCE)", - AMD, Pub. #17881, May 1993. - 4) "Am79C960 PCnet-ISA(tm), Single-Chip Ethernet Controller for ISA", - AMD, Pub. #16907, May 1992 - 5) "DEC EtherWORKS LC Ethernet Controller Owners Manual", - Digital Equipment corporation, 1990, Pub. #EK-DE100-OM.003 - 6) "DEC EtherWORKS Turbo Ethernet Controller Owners Manual", - Digital Equipment corporation, 1990, Pub. #EK-DE200-OM.003 - 7) "DEPCA Hardware Reference Manual", Pub. #EK-DEPCA-PR - Digital Equipment Corporation, 1989 - 8) "DEC EtherWORKS Turbo_(TP BNC) Ethernet Controller Owners Manual", - Digital Equipment corporation, 1991, Pub. #EK-DE202-OM.001 - - - Peter Bauer's depca.c (V0.5) was referred to when debugging V0.1 of this - driver. - - The original DEPCA card requires that the ethernet ROM address counter - be enabled to count and has an 8 bit NICSR. The ROM counter enabling is - only done when a 0x08 is read as the first address octet (to minimise - the chances of writing over some other hardware's I/O register). The - NICSR accesses have been changed to byte accesses for all the cards - supported by this driver, since there is only one useful bit in the MSB - (remote boot timeout) and it is not used. Also, there is a maximum of - only 48kB network RAM for this card. My thanks to Torbjorn Lindh for - help debugging all this (and holding my feet to the fire until I got it - right). - - The DE200 series boards have on-board 64kB RAM for use as a shared - memory network buffer. Only the DE100 cards make use of a 2kB buffer - mode which has not been implemented in this driver (only the 32kB and - 64kB modes are supported [16kB/48kB for the original DEPCA]). - - At the most only 2 DEPCA cards can be supported on the ISA bus because - there is only provision for two I/O base addresses on each card (0x300 - and 0x200). The I/O address is detected by searching for a byte sequence - in the Ethernet station address PROM at the expected I/O address for the - Ethernet PROM. The shared memory base address is 'autoprobed' by - looking for the self test PROM and detecting the card name. When a - second DEPCA is detected, information is placed in the base_addr - variable of the next device structure (which is created if necessary), - thus enabling ethif_probe initialization for the device. More than 2 - EISA cards can be supported, but care will be needed assigning the - shared memory to ensure that each slot has the correct IRQ, I/O address - and shared memory address assigned. - - ************************************************************************ - - NOTE: If you are using two ISA DEPCAs, it is important that you assign - the base memory addresses correctly. The driver autoprobes I/O 0x300 - then 0x200. The base memory address for the first device must be less - than that of the second so that the auto probe will correctly assign the - I/O and memory addresses on the same card. I can't think of a way to do - this unambiguously at the moment, since there is nothing on the cards to - tie I/O and memory information together. - - I am unable to test 2 cards together for now, so this code is - unchecked. All reports, good or bad, are welcome. - - ************************************************************************ - - The board IRQ setting must be at an unused IRQ which is auto-probed - using Donald Becker's autoprobe routines. DEPCA and DE100 board IRQs are - {2,3,4,5,7}, whereas the DE200 is at {5,9,10,11,15}. Note that IRQ2 is - really IRQ9 in machines with 16 IRQ lines. - - No 16MB memory limitation should exist with this driver as DMA is not - used and the common memory area is in low memory on the network card (my - current system has 20MB and I've not had problems yet). - - The ability to load this driver as a loadable module has been added. To - utilise this ability, you have to do <8 things: - - 0) have a copy of the loadable modules code installed on your system. - 1) copy depca.c from the /linux/drivers/net directory to your favourite - temporary directory. - 2) if you wish, edit the source code near line 1530 to reflect the I/O - address and IRQ you're using (see also 5). - 3) compile depca.c, but include -DMODULE in the command line to ensure - that the correct bits are compiled (see end of source code). - 4) if you are wanting to add a new card, goto 5. Otherwise, recompile a - kernel with the depca configuration turned off and reboot. - 5) insmod depca.o [irq=7] [io=0x200] [mem=0xd0000] [adapter_name=DE100] - [Alan Cox: Changed the code to allow command line irq/io assignments] - [Dave Davies: Changed the code to allow command line mem/name - assignments] - 6) run the net startup bits for your eth?? interface manually - (usually /etc/rc.inet[12] at boot time). - 7) enjoy! - - Note that autoprobing is not allowed in loadable modules - the system is - already up and running and you're messing with interrupts. - - To unload a module, turn off the associated interface - 'ifconfig eth?? down' then 'rmmod depca'. - - To assign a base memory address for the shared memory when running as a - loadable module, see 5 above. To include the adapter name (if you have - no PROM but know the card name) also see 5 above. Note that this last - option will not work with kernel built-in depca's. - - The shared memory assignment for a loadable module makes sense to avoid - the 'memory autoprobe' picking the wrong shared memory (for the case of - 2 depca's in a PC). - - ************************************************************************ - Support for MCA EtherWORKS cards added 11-3-98. - Verified to work with up to 2 DE212 cards in a system (although not - fully stress-tested). - - Currently known bugs/limitations: - - Note: with the MCA stuff as a module, it trusts the MCA configuration, - not the command line for IRQ and memory address. You can - specify them if you want, but it will throw your values out. - You still have to pass the IO address it was configured as - though. - - ************************************************************************ - TO DO: - ------ - - - Revision History - ---------------- - - Version Date Description - - 0.1 25-jan-94 Initial writing. - 0.2 27-jan-94 Added LANCE TX hardware buffer chaining. - 0.3 1-feb-94 Added multiple DEPCA support. - 0.31 4-feb-94 Added DE202 recognition. - 0.32 19-feb-94 Tidy up. Improve multi-DEPCA support. - 0.33 25-feb-94 Fix DEPCA ethernet ROM counter enable. - Add jabber packet fix from murf@perftech.com - and becker@super.org - 0.34 7-mar-94 Fix DEPCA max network memory RAM & NICSR access. - 0.35 8-mar-94 Added DE201 recognition. Tidied up. - 0.351 30-apr-94 Added EISA support. Added DE422 recognition. - 0.36 16-may-94 DE422 fix released. - 0.37 22-jul-94 Added MODULE support - 0.38 15-aug-94 Added DBR ROM switch in depca_close(). - Multi DEPCA bug fix. - 0.38axp 15-sep-94 Special version for Alpha AXP Linux V1.0. - 0.381 12-dec-94 Added DE101 recognition, fix multicast bug. - 0.382 9-feb-95 Fix recognition bug reported by . - 0.383 22-feb-95 Fix for conflict with VESA SCSI reported by - - 0.384 17-mar-95 Fix a ring full bug reported by - 0.385 3-apr-95 Fix a recognition bug reported by - - 0.386 21-apr-95 Fix the last fix...sorry, must be galloping senility - 0.40 25-May-95 Rewrite for portability & updated. - ALPHA support from - 0.41 26-Jun-95 Added verify_area() calls in depca_ioctl() from - suggestion by - 0.42 27-Dec-95 Add 'mem' shared memory assignment for loadable - modules. - Add 'adapter_name' for loadable modules when no PROM. - Both above from a suggestion by - . - Add new multicasting code. - 0.421 22-Apr-96 Fix alloc_device() bug - 0.422 29-Apr-96 Fix depca_hw_init() bug - 0.423 7-Jun-96 Fix module load bug - 0.43 16-Aug-96 Update alloc_device() to conform to de4x5.c - 0.44 1-Sep-97 Fix *_probe() to test check_region() first - bug - reported by - 0.45 3-Nov-98 Added support for MCA EtherWORKS (DE210/DE212) cards - by - 0.451 5-Nov-98 Fixed mca stuff cuz I'm a dummy. - 0.5 14-Nov-98 Re-spin for 2.1.x kernels. - 0.51 27-Jun-99 Correct received packet length for CRC from - report by - - ========================================================================= -*/ - -#include "etherboot.h" -#include "nic.h" -#include "cards.h" - -/* -** I/O addresses. Note that the 2k buffer option is not supported in -** this driver. -*/ -#define DEPCA_NICSR ioaddr+0x00 /* Network interface CSR */ -#define DEPCA_RBI ioaddr+0x02 /* RAM buffer index (2k buffer mode) */ -#define DEPCA_DATA ioaddr+0x04 /* LANCE registers' data port */ -#define DEPCA_ADDR ioaddr+0x06 /* LANCE registers' address port */ -#define DEPCA_HBASE ioaddr+0x08 /* EISA high memory base address reg. */ -#define DEPCA_PROM ioaddr+0x0c /* Ethernet address ROM data port */ -#define DEPCA_CNFG ioaddr+0x0c /* EISA Configuration port */ -#define DEPCA_RBSA ioaddr+0x0e /* RAM buffer starting address (2k buff.) */ - -/* -** These are LANCE registers addressable through DEPCA_ADDR -*/ -#define CSR0 0 -#define CSR1 1 -#define CSR2 2 -#define CSR3 3 - -/* -** NETWORK INTERFACE CSR (NI_CSR) bit definitions -*/ - -#define TO 0x0100 /* Time Out for remote boot */ -#define SHE 0x0080 /* SHadow memory Enable */ -#define BS 0x0040 /* Bank Select */ -#define BUF 0x0020 /* BUFfer size (1->32k, 0->64k) */ -#define RBE 0x0010 /* Remote Boot Enable (1->net boot) */ -#define AAC 0x0008 /* Address ROM Address Counter (1->enable) */ -#define _128KB 0x0008 /* 128kB Network RAM (1->enable) */ -#define IM 0x0004 /* Interrupt Mask (1->mask) */ -#define IEN 0x0002 /* Interrupt tristate ENable (1->enable) */ -#define LED 0x0001 /* LED control */ - -/* -** Control and Status Register 0 (CSR0) bit definitions -*/ - -#define ERR 0x8000 /* Error summary */ -#define BABL 0x4000 /* Babble transmitter timeout error */ -#define CERR 0x2000 /* Collision Error */ -#define MISS 0x1000 /* Missed packet */ -#define MERR 0x0800 /* Memory Error */ -#define RINT 0x0400 /* Receiver Interrupt */ -#define TINT 0x0200 /* Transmit Interrupt */ -#define IDON 0x0100 /* Initialization Done */ -#define INTR 0x0080 /* Interrupt Flag */ -#define INEA 0x0040 /* Interrupt Enable */ -#define RXON 0x0020 /* Receiver on */ -#define TXON 0x0010 /* Transmitter on */ -#define TDMD 0x0008 /* Transmit Demand */ -#define STOP 0x0004 /* Stop */ -#define STRT 0x0002 /* Start */ -#define INIT 0x0001 /* Initialize */ -#define INTM 0xff00 /* Interrupt Mask */ -#define INTE 0xfff0 /* Interrupt Enable */ - -/* -** CONTROL AND STATUS REGISTER 3 (CSR3) -*/ - -#define BSWP 0x0004 /* Byte SWaP */ -#define ACON 0x0002 /* ALE control */ -#define BCON 0x0001 /* Byte CONtrol */ - -/* -** Initialization Block Mode Register -*/ - -#define PROM 0x8000 /* Promiscuous Mode */ -#define EMBA 0x0080 /* Enable Modified Back-off Algorithm */ -#define INTL 0x0040 /* Internal Loopback */ -#define DRTY 0x0020 /* Disable Retry */ -#define COLL 0x0010 /* Force Collision */ -#define DTCR 0x0008 /* Disable Transmit CRC */ -#define LOOP 0x0004 /* Loopback */ -#define DTX 0x0002 /* Disable the Transmitter */ -#define DRX 0x0001 /* Disable the Receiver */ - -/* -** Receive Message Descriptor 1 (RMD1) bit definitions. -*/ - -#define R_OWN 0x80000000 /* Owner bit 0 = host, 1 = lance */ -#define R_ERR 0x4000 /* Error Summary */ -#define R_FRAM 0x2000 /* Framing Error */ -#define R_OFLO 0x1000 /* Overflow Error */ -#define R_CRC 0x0800 /* CRC Error */ -#define R_BUFF 0x0400 /* Buffer Error */ -#define R_STP 0x0200 /* Start of Packet */ -#define R_ENP 0x0100 /* End of Packet */ - -/* -** Transmit Message Descriptor 1 (TMD1) bit definitions. -*/ - -#define T_OWN 0x80000000 /* Owner bit 0 = host, 1 = lance */ -#define T_ERR 0x4000 /* Error Summary */ -#define T_ADD_FCS 0x2000 /* More the 1 retry needed to Xmit */ -#define T_MORE 0x1000 /* >1 retry to transmit packet */ -#define T_ONE 0x0800 /* 1 try needed to transmit the packet */ -#define T_DEF 0x0400 /* Deferred */ -#define T_STP 0x02000000 /* Start of Packet */ -#define T_ENP 0x01000000 /* End of Packet */ -#define T_FLAGS 0xff000000 /* TX Flags Field */ - -/* -** Transmit Message Descriptor 3 (TMD3) bit definitions. -*/ - -#define TMD3_BUFF 0x8000 /* BUFFer error */ -#define TMD3_UFLO 0x4000 /* UnderFLOw error */ -#define TMD3_RES 0x2000 /* REServed */ -#define TMD3_LCOL 0x1000 /* Late COLlision */ -#define TMD3_LCAR 0x0800 /* Loss of CARrier */ -#define TMD3_RTRY 0x0400 /* ReTRY error */ - -/* -** Ethernet PROM defines -*/ -#define PROBE_LENGTH 32 - -/* -** Set the number of Tx and Rx buffers. Ensure that the memory requested -** here is <= to the amount of shared memory set up by the board switches. -** The number of descriptors MUST BE A POWER OF 2. -** -** total_memory = NUM_RX_DESC*(8+RX_BUFF_SZ) + NUM_TX_DESC*(8+TX_BUFF_SZ) -*/ -#define NUM_RX_DESC 2 /* Number of RX descriptors */ -#define NUM_TX_DESC 2 /* Number of TX descriptors */ -#define RX_BUFF_SZ 1536 /* Buffer size for each Rx buffer */ -#define TX_BUFF_SZ 1536 /* Buffer size for each Tx buffer */ - -/* -** ISA Bus defines -*/ -#define DEPCA_IO_PORTS {0x300, 0x200, 0} - -#ifndef DEPCA_MODEL -#define DEPCA_MODEL DEPCA -#endif - -static enum { - DEPCA, DE100, DE101, DE200, DE201, DE202, DE210, DE212, DE422, unknown -} adapter = DEPCA_MODEL; - -/* -** Name <-> Adapter mapping -*/ - -static char *adapter_name[] = { - "DEPCA", - "DE100","DE101", - "DE200","DE201","DE202", - "DE210","DE212", - "DE422", - "" -}; - -#ifndef DEPCA_RAM_BASE -#define DEPCA_RAM_BASE 0xd0000 -#endif - -/* -** Memory Alignment. Each descriptor is 4 longwords long. To force a -** particular alignment on the TX descriptor, adjust DESC_SKIP_LEN and -** DESC_ALIGN. ALIGN aligns the start address of the private memory area -** and hence the RX descriptor ring's first entry. -*/ -#define ALIGN4 ((u32)4 - 1) /* 1 longword align */ -#define ALIGN8 ((u32)8 - 1) /* 2 longword (quadword) align */ -#define ALIGN ALIGN8 /* Keep the LANCE happy... */ - -typedef long s32; -typedef unsigned long u32; -typedef short s16; -typedef unsigned short u16; -typedef char s8; -typedef unsigned char u8; - -/* -** The DEPCA Rx and Tx ring descriptors. -*/ -struct depca_rx_desc { - volatile s32 base; - s16 buf_length; /* This length is negative 2's complement! */ - s16 msg_length; /* This length is "normal". */ -}; - -struct depca_tx_desc { - volatile s32 base; - s16 length; /* This length is negative 2's complement! */ - s16 misc; /* Errors and TDR info */ -}; - -#define LA_MASK 0x0000ffff /* LANCE address mask for mapping network RAM - to LANCE memory address space */ - -/* -** The Lance initialization block, described in databook, in common memory. -*/ -struct depca_init { - u16 mode; /* Mode register */ - u8 phys_addr[ETH_ALEN]; /* Physical ethernet address */ - u8 mcast_table[8]; /* Multicast Hash Table. */ - u32 rx_ring; /* Rx ring base pointer & ring length */ - u32 tx_ring; /* Tx ring base pointer & ring length */ -}; - -struct depca_private { - struct depca_rx_desc *rx_ring; - struct depca_tx_desc *tx_ring; - struct depca_init init_block; /* Shadow init block */ - char *rx_memcpy[NUM_RX_DESC]; - char *tx_memcpy[NUM_TX_DESC]; - u32 bus_offset; /* ISA bus address offset */ - u32 sh_mem; /* address of shared mem */ - u32 dma_buffs; /* Rx & Tx buffer start */ - int rx_cur, tx_cur; /* Next free ring entry */ - int txRingMask, rxRingMask; - s32 rx_rlen, tx_rlen; - /* log2([rt]xRingMask+1) for the descriptors */ -}; - -static Address mem_start = DEPCA_RAM_BASE; -static Address mem_len, offset; -static unsigned short ioaddr = 0; -static struct depca_private lp; - -/* -** Miscellaneous defines... -*/ -#define STOP_DEPCA \ - outw(CSR0, DEPCA_ADDR);\ - outw(STOP, DEPCA_DATA) - -/* Initialize the lance Rx and Tx descriptor rings. */ -static void depca_init_ring(struct nic *nic) -{ - int i; - u32 p; - - lp.rx_cur = lp.tx_cur = 0; - /* Initialize the base addresses and length of each buffer in the ring */ - for (i = 0; i <= lp.rxRingMask; i++) { - writel((p = lp.dma_buffs + i * RX_BUFF_SZ) | R_OWN, &lp.rx_ring[i].base); - writew(-RX_BUFF_SZ, &lp.rx_ring[i].buf_length); - lp.rx_memcpy[i] = (char *) (p + lp.bus_offset); - } - for (i = 0; i <= lp.txRingMask; i++) { - writel((p = lp.dma_buffs + (i + lp.txRingMask + 1) * TX_BUFF_SZ) & 0x00ffffff, &lp.tx_ring[i].base); - lp.tx_memcpy[i] = (char *) (p + lp.bus_offset); - } - - /* Set up the initialization block */ - lp.init_block.rx_ring = ((u32) ((u32) lp.rx_ring) & LA_MASK) | lp.rx_rlen; - lp.init_block.tx_ring = ((u32) ((u32) lp.tx_ring) & LA_MASK) | lp.tx_rlen; - for (i = 0; i < ETH_ALEN; i++) - lp.init_block.phys_addr[i] = nic->node_addr[i]; - lp.init_block.mode = 0x0000; /* Enable the Tx and Rx */ - memset(lp.init_block.mcast_table, 0, sizeof(lp.init_block.mcast_table)); -} - -static void LoadCSRs(void) -{ - outw(CSR1, DEPCA_ADDR); /* initialisation block address LSW */ - outw((u16) (lp.sh_mem & LA_MASK), DEPCA_DATA); - outw(CSR2, DEPCA_ADDR); /* initialisation block address MSW */ - outw((u16) ((lp.sh_mem & LA_MASK) >> 16), DEPCA_DATA); - outw(CSR3, DEPCA_ADDR); /* ALE control */ - outw(ACON, DEPCA_DATA); - outw(CSR0, DEPCA_ADDR); /* Point back to CSR0 */ -} - -static int InitRestartDepca(void) -{ - int i; - - /* Copy the shadow init_block to shared memory */ - memcpy_toio((char *)lp.sh_mem, &lp.init_block, sizeof(struct depca_init)); - outw(CSR0, DEPCA_ADDR); /* point back to CSR0 */ - outw(INIT, DEPCA_DATA); /* initialise DEPCA */ - - for (i = 0; i < 100 && !(inw(DEPCA_DATA) & IDON); i++) - ; - if (i < 100) { - /* clear IDON by writing a 1, and start LANCE */ - outw(IDON | STRT, DEPCA_DATA); - } else { - printf("DEPCA not initialised\n"); - return (1); - } - return (0); -} - -/************************************************************************** -RESET - Reset adapter -***************************************************************************/ -static void depca_reset(struct nic *nic) -{ - s16 nicsr; - int i, j; - - STOP_DEPCA; - nicsr = inb(DEPCA_NICSR); - nicsr = ((nicsr & ~SHE & ~RBE & ~IEN) | IM); - outb(nicsr, DEPCA_NICSR); - if (inw(DEPCA_DATA) != STOP) - { - printf("depca: Cannot stop NIC\n"); - return; - } - - /* Initialisation block */ - lp.sh_mem = mem_start; - mem_start += sizeof(struct depca_init); - /* Tx & Rx descriptors (aligned to a quadword boundary) */ - mem_start = (mem_start + ALIGN) & ~ALIGN; - lp.rx_ring = (struct depca_rx_desc *) mem_start; - mem_start += (sizeof(struct depca_rx_desc) * NUM_RX_DESC); - lp.tx_ring = (struct depca_tx_desc *) mem_start; - mem_start += (sizeof(struct depca_tx_desc) * NUM_TX_DESC); - - lp.bus_offset = mem_start & 0x00ff0000; - /* LANCE re-mapped start address */ - lp.dma_buffs = mem_start & LA_MASK; - - /* Finish initialising the ring information. */ - lp.rxRingMask = NUM_RX_DESC - 1; - lp.txRingMask = NUM_TX_DESC - 1; - - /* Calculate Tx/Rx RLEN size for the descriptors. */ - for (i = 0, j = lp.rxRingMask; j > 0; i++) { - j >>= 1; - } - lp.rx_rlen = (s32) (i << 29); - for (i = 0, j = lp.txRingMask; j > 0; i++) { - j >>= 1; - } - lp.tx_rlen = (s32) (i << 29); - - /* Load the initialisation block */ - depca_init_ring(nic); - LoadCSRs(); - InitRestartDepca(); -} - -/************************************************************************** -POLL - Wait for a frame -***************************************************************************/ -static int depca_poll(struct nic *nic) -{ - int entry; - u32 status; - - entry = lp.rx_cur; - if ((status = readl(&lp.rx_ring[entry].base) & R_OWN)) - return (0); - memcpy(nic->packet, lp.rx_memcpy[entry], nic->packetlen = lp.rx_ring[entry].msg_length); - lp.rx_ring[entry].base |= R_OWN; - lp.rx_cur = (++lp.rx_cur) & lp.rxRingMask; - return (1); -} - -/************************************************************************** -TRANSMIT - Transmit a frame -***************************************************************************/ -static void depca_transmit( - struct nic *nic, - const char *d, /* Destination */ - unsigned int t, /* Type */ - unsigned int s, /* size */ - const char *p) /* Packet */ -{ - int entry, len; - char *mem; - - /* send the packet to destination */ - /* - ** Caution: the right order is important here... dont - ** setup the ownership rights until all the other - ** information is in place - */ - mem = lp.tx_memcpy[entry = lp.tx_cur]; - memcpy_toio(mem, d, ETH_ALEN); - memcpy_toio(mem + ETH_ALEN, nic->node_addr, ETH_ALEN); - mem[ETH_ALEN * 2] = t >> 8; - mem[ETH_ALEN * 2 + 1] = t; - memcpy_toio(mem + ETH_HLEN, p, s); - s += ETH_HLEN; - len = (s < ETH_ZLEN ? ETH_ZLEN : s); - /* clean out flags */ - writel(readl(&lp.tx_ring[entry].base) & ~T_FLAGS, &lp.tx_ring[entry].base); - /* clears other error flags */ - writew(0x0000, &lp.tx_ring[entry].misc); - /* packet length in buffer */ - writew(-len, &lp.tx_ring[entry].length); - /* start and end of packet, ownership */ - writel(readl(&lp.tx_ring[entry].base) | (T_STP|T_ENP|T_OWN), &lp.tx_ring[entry].base); - /* update current pointers */ - lp.tx_cur = (++lp.tx_cur) & lp.txRingMask; -} - -/************************************************************************** -DISABLE - Turn off ethernet interface -***************************************************************************/ -static void depca_disable(struct nic *nic) -{ - STOP_DEPCA; -} - -/* -** Look for a special sequence in the Ethernet station address PROM that -** is common across all DEPCA products. Note that the original DEPCA needs -** its ROM address counter to be initialized and enabled. Only enable -** if the first address octet is a 0x08 - this minimises the chances of -** messing around with some other hardware, but it assumes that this DEPCA -** card initialized itself correctly. -** -** Search the Ethernet address ROM for the signature. Since the ROM address -** counter can start at an arbitrary point, the search must include the entire -** probe sequence length plus the (length_of_the_signature - 1). -** Stop the search IMMEDIATELY after the signature is found so that the -** PROM address counter is correctly positioned at the start of the -** ethernet address for later read out. -*/ -static int depca_probe1(struct nic *nic) -{ - u8 data, nicsr; - /* This is only correct for little endian machines, but then - Etherboot doesn't work on anything but a PC */ - u8 sig[] = { 0xFF, 0x00, 0x55, 0xAA, 0xFF, 0x00, 0x55, 0xAA }; - int i, j; - long sum, chksum; - - data = inb(DEPCA_PROM); /* clear counter on DEPCA */ - data = inb(DEPCA_PROM); /* read data */ - if (data == 0x8) { - nicsr = inb(DEPCA_NICSR); - nicsr |= AAC; - outb(nicsr, DEPCA_NICSR); - } - for (i = 0, j = 0; j < (int)sizeof(sig) && i < PROBE_LENGTH+((int)sizeof(sig))-1; ++i) { - data = inb(DEPCA_PROM); - if (data == sig[j]) /* track signature */ - ++j; - else - j = (data == sig[0]) ? 1 : 0; - } - if (j != sizeof(sig)) - return (0); - /* put the card in its initial state */ - STOP_DEPCA; - nicsr = ((inb(DEPCA_NICSR) & ~SHE & ~RBE & ~IEN) | IM); - outb(nicsr, DEPCA_NICSR); - if (inw(DEPCA_DATA) != STOP) - return (0); - memcpy((char *)mem_start, sig, sizeof(sig)); - if (memcmp((char *)mem_start, sig, sizeof(sig)) != 0) - return (0); - for (i = 0, j = 0, sum = 0; j < 3; j++) { - sum <<= 1; - if (sum > 0xFFFF) - sum -= 0xFFFF; - sum += (u8)(nic->node_addr[i++] = inb(DEPCA_PROM)); - sum += (u16)((nic->node_addr[i++] = inb(DEPCA_PROM)) << 8); - if (sum > 0xFFFF) - sum -= 0xFFFF; - } - if (sum == 0xFFFF) - sum = 0; - chksum = (u8)inb(DEPCA_PROM); - chksum |= (u16)(inb(DEPCA_PROM) << 8); - mem_len = (adapter == DEPCA) ? (48 << 10) : (64 << 10); - offset = 0; - if (nicsr & BUF) { - offset = 0x8000; - nicsr &= ~BS; - mem_len -= (32 << 10); - } - if (adapter != DEPCA) /* enable shadow RAM */ - outb(nicsr |= SHE, DEPCA_NICSR); - printf("%s base %#hX, memory [%#hX-%#hX], addr %!", - adapter_name[adapter], ioaddr, mem_start, mem_start + mem_len, - nic->node_addr); - if (sum != chksum) - printf(" (bad checksum)"); - putchar('\n'); - return (1); -} - -/************************************************************************** -PROBE - Look for an adapter, this routine's visible to the outside -***************************************************************************/ -struct nic *depca_probe(struct nic *nic, unsigned short *probe_addrs) -{ - static unsigned short base[] = DEPCA_IO_PORTS; - int i; - - if (probe_addrs == 0 || probe_addrs[0] == 0) - probe_addrs = base; /* Use defaults */ - for (i = 0; (ioaddr = base[i]) != 0; ++i) { - if (depca_probe1(nic)) - break; - } - if (ioaddr == 0) - return (0); - depca_reset(nic); - /* point to NIC specific routines */ - nic->reset = depca_reset; - nic->poll = depca_poll; - nic->transmit = depca_transmit; - nic->disable = depca_disable; - return (nic); -} diff --git a/netboot/eepro.c b/netboot/eepro.c deleted file mode 100644 index 4e3f07b27..000000000 --- a/netboot/eepro.c +++ /dev/null @@ -1,586 +0,0 @@ -/************************************************************************** -Etherboot - BOOTP/TFTP Bootstrap Program -Intel EEPRO/10 NIC driver for Etherboot -Adapted from Linux eepro.c from kernel 2.2.17 - -This board accepts a 32 pin EEPROM (29C256), however a test with a -27C010 shows that this EPROM also works in the socket, but it's not clear -how repeatably. The two top address pins appear to be held low, thus -the bottom 32kB of the 27C010 is visible in the CPU's address space. -To be sure you could put 4 copies of the code in the 27C010, then -it doesn't matter whether the extra lines are held low or high, just -hopefully not floating as CMOS chips don't like floating inputs. - -Be careful with seating the EPROM as the socket on my board actually -has 34 pins, the top row of 2 are not used. -***************************************************************************/ - -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2, or (at - * your option) any later version. - */ - -/* to get some global routines like printf */ -#include "etherboot.h" -/* to get the interface to the body of the program */ -#include "nic.h" -/* to get our own prototype */ -#include "cards.h" -/* we use timer2 for microsecond waits */ -#include "timer.h" - -#undef DEBUG /* only after include files */ - -/* Different 82595 chips */ -#define LAN595 0 -#define LAN595TX 1 -#define LAN595FX 2 -#define LAN595FX_10ISA 3 - -#define SLOW_DOWN inb(0x80); - -/* The station (ethernet) address prefix, used for IDing the board. */ -#define SA_ADDR0 0x00 /* Etherexpress Pro/10 */ -#define SA_ADDR1 0xaa -#define SA_ADDR2 0x00 - -#define GetBit(x,y) ((x & (1<>y) - -/* EEPROM Word 0: */ -#define ee_PnP 0 /* Plug 'n Play enable bit */ -#define ee_Word1 1 /* Word 1? */ -#define ee_BusWidth 2 /* 8/16 bit */ -#define ee_FlashAddr 3 /* Flash Address */ -#define ee_FlashMask 0x7 /* Mask */ -#define ee_AutoIO 6 /* */ -#define ee_reserved0 7 /* =0! */ -#define ee_Flash 8 /* Flash there? */ -#define ee_AutoNeg 9 /* Auto Negotiation enabled? */ -#define ee_IO0 10 /* IO Address LSB */ -#define ee_IO0Mask 0x /*...*/ -#define ee_IO1 15 /* IO MSB */ - -/* EEPROM Word 1: */ -#define ee_IntSel 0 /* Interrupt */ -#define ee_IntMask 0x7 -#define ee_LI 3 /* Link Integrity 0= enabled */ -#define ee_PC 4 /* Polarity Correction 0= enabled */ -#define ee_TPE_AUI 5 /* PortSelection 1=TPE */ -#define ee_Jabber 6 /* Jabber prevention 0= enabled */ -#define ee_AutoPort 7 /* Auto Port Selection 1= Disabled */ -#define ee_SMOUT 8 /* SMout Pin Control 0= Input */ -#define ee_PROM 9 /* Flash EPROM / PROM 0=Flash */ -#define ee_reserved1 10 /* .. 12 =0! */ -#define ee_AltReady 13 /* Alternate Ready, 0=normal */ -#define ee_reserved2 14 /* =0! */ -#define ee_Duplex 15 - -/* Word2,3,4: */ -#define ee_IA5 0 /*bit start for individual Addr Byte 5 */ -#define ee_IA4 8 /*bit start for individual Addr Byte 5 */ -#define ee_IA3 0 /*bit start for individual Addr Byte 5 */ -#define ee_IA2 8 /*bit start for individual Addr Byte 5 */ -#define ee_IA1 0 /*bit start for individual Addr Byte 5 */ -#define ee_IA0 8 /*bit start for individual Addr Byte 5 */ - -/* Word 5: */ -#define ee_BNC_TPE 0 /* 0=TPE */ -#define ee_BootType 1 /* 00=None, 01=IPX, 10=ODI, 11=NDIS */ -#define ee_BootTypeMask 0x3 -#define ee_NumConn 3 /* Number of Connections 0= One or Two */ -#define ee_FlashSock 4 /* Presence of Flash Socket 0= Present */ -#define ee_PortTPE 5 -#define ee_PortBNC 6 -#define ee_PortAUI 7 -#define ee_PowerMgt 10 /* 0= disabled */ -#define ee_CP 13 /* Concurrent Processing */ -#define ee_CPMask 0x7 - -/* Word 6: */ -#define ee_Stepping 0 /* Stepping info */ -#define ee_StepMask 0x0F -#define ee_BoardID 4 /* Manucaturer Board ID, reserved */ -#define ee_BoardMask 0x0FFF - -/* Word 7: */ -#define ee_INT_TO_IRQ 0 /* int to IRQ Mapping = 0x1EB8 for Pro/10+ */ -#define ee_FX_INT2IRQ 0x1EB8 /* the _only_ mapping allowed for FX chips */ - -/*..*/ -#define ee_SIZE 0x40 /* total EEprom Size */ -#define ee_Checksum 0xBABA /* initial and final value for adding checksum */ - - -/* Card identification via EEprom: */ -#define ee_addr_vendor 0x10 /* Word offset for EISA Vendor ID */ -#define ee_addr_id 0x11 /* Word offset for Card ID */ -#define ee_addr_SN 0x12 /* Serial Number */ -#define ee_addr_CRC_8 0x14 /* CRC over last thee Bytes */ - - -#define ee_vendor_intel0 0x25 /* Vendor ID Intel */ -#define ee_vendor_intel1 0xD4 -#define ee_id_eepro10p0 0x10 /* ID for eepro/10+ */ -#define ee_id_eepro10p1 0x31 - -/* now this section could be used by both boards: the oldies and the ee10: - * ee10 uses tx buffer before of rx buffer and the oldies the inverse. - * (aris) - */ -#define RAM_SIZE 0x8000 - -#define RCV_HEADER 8 -#define RCV_DEFAULT_RAM 0x6000 -#define RCV_RAM rcv_ram - -static unsigned rcv_ram = RCV_DEFAULT_RAM; - -#define XMT_HEADER 8 -#define XMT_RAM (RAM_SIZE - RCV_RAM) - -#define XMT_START ((rcv_start + RCV_RAM) % RAM_SIZE) - -#define RCV_LOWER_LIMIT (rcv_start >> 8) -#define RCV_UPPER_LIMIT (((rcv_start + RCV_RAM) - 2) >> 8) -#define XMT_LOWER_LIMIT (XMT_START >> 8) -#define XMT_UPPER_LIMIT (((XMT_START + XMT_RAM) - 2) >> 8) - -#define RCV_START_PRO 0x00 -#define RCV_START_10 XMT_RAM - /* by default the old driver */ -static unsigned rcv_start = RCV_START_PRO; - -#define RCV_DONE 0x0008 -#define RX_OK 0x2000 -#define RX_ERROR 0x0d81 - -#define TX_DONE_BIT 0x0080 -#define CHAIN_BIT 0x8000 -#define XMT_STATUS 0x02 -#define XMT_CHAIN 0x04 -#define XMT_COUNT 0x06 - -#define BANK0_SELECT 0x00 -#define BANK1_SELECT 0x40 -#define BANK2_SELECT 0x80 - -/* Bank 0 registers */ -#define COMMAND_REG 0x00 /* Register 0 */ -#define MC_SETUP 0x03 -#define XMT_CMD 0x04 -#define DIAGNOSE_CMD 0x07 -#define RCV_ENABLE_CMD 0x08 -#define RCV_DISABLE_CMD 0x0a -#define STOP_RCV_CMD 0x0b -#define RESET_CMD 0x0e -#define POWER_DOWN_CMD 0x18 -#define RESUME_XMT_CMD 0x1c -#define SEL_RESET_CMD 0x1e -#define STATUS_REG 0x01 /* Register 1 */ -#define RX_INT 0x02 -#define TX_INT 0x04 -#define EXEC_STATUS 0x30 -#define ID_REG 0x02 /* Register 2 */ -#define R_ROBIN_BITS 0xc0 /* round robin counter */ -#define ID_REG_MASK 0x2c -#define ID_REG_SIG 0x24 -#define AUTO_ENABLE 0x10 -#define INT_MASK_REG 0x03 /* Register 3 */ -#define RX_STOP_MASK 0x01 -#define RX_MASK 0x02 -#define TX_MASK 0x04 -#define EXEC_MASK 0x08 -#define ALL_MASK 0x0f -#define IO_32_BIT 0x10 -#define RCV_BAR 0x04 /* The following are word (16-bit) registers */ -#define RCV_STOP 0x06 - -#define XMT_BAR_PRO 0x0a -#define XMT_BAR_10 0x0b -static unsigned xmt_bar = XMT_BAR_PRO; - -#define HOST_ADDRESS_REG 0x0c -#define IO_PORT 0x0e -#define IO_PORT_32_BIT 0x0c - -/* Bank 1 registers */ -#define REG1 0x01 -#define WORD_WIDTH 0x02 -#define INT_ENABLE 0x80 -#define INT_NO_REG 0x02 -#define RCV_LOWER_LIMIT_REG 0x08 -#define RCV_UPPER_LIMIT_REG 0x09 - -#define XMT_LOWER_LIMIT_REG_PRO 0x0a -#define XMT_UPPER_LIMIT_REG_PRO 0x0b -#define XMT_LOWER_LIMIT_REG_10 0x0b -#define XMT_UPPER_LIMIT_REG_10 0x0a -static unsigned xmt_lower_limit_reg = XMT_LOWER_LIMIT_REG_PRO; -static unsigned xmt_upper_limit_reg = XMT_UPPER_LIMIT_REG_PRO; - -/* Bank 2 registers */ -#define XMT_Chain_Int 0x20 /* Interrupt at the end of the transmit chain */ -#define XMT_Chain_ErrStop 0x40 /* Interrupt at the end of the chain even if there are errors */ -#define RCV_Discard_BadFrame 0x80 /* Throw bad frames away, and continue to receive others */ -#define REG2 0x02 -#define PRMSC_Mode 0x01 -#define Multi_IA 0x20 -#define REG3 0x03 -#define TPE_BIT 0x04 -#define BNC_BIT 0x20 -#define REG13 0x0d -#define FDX 0x00 -#define A_N_ENABLE 0x02 - -#define I_ADD_REG0 0x04 -#define I_ADD_REG1 0x05 -#define I_ADD_REG2 0x06 -#define I_ADD_REG3 0x07 -#define I_ADD_REG4 0x08 -#define I_ADD_REG5 0x09 - -#define EEPROM_REG_PRO 0x0a -#define EEPROM_REG_10 0x0b -static unsigned eeprom_reg = EEPROM_REG_PRO; - -#define EESK 0x01 -#define EECS 0x02 -#define EEDI 0x04 -#define EEDO 0x08 - -/* The horrible routine to read a word from the serial EEPROM. */ -/* IMPORTANT - the 82595 will be set to Bank 0 after the eeprom is read */ - -/* The delay between EEPROM clock transitions. */ -#define eeprom_delay() { udelay(40); } -#define EE_READ_CMD (6 << 6) - -/* do a full reset */ -#define eepro_full_reset(ioaddr) outb(RESET_CMD, ioaddr); udelay(40); - -/* do a nice reset */ -#define eepro_sel_reset(ioaddr) { \ - outb(SEL_RESET_CMD, ioaddr); \ - SLOW_DOWN; \ - SLOW_DOWN; \ - } - -/* clear all interrupts */ -#define eepro_clear_int(ioaddr) outb(ALL_MASK, ioaddr + STATUS_REG) - -/* enable rx */ -#define eepro_en_rx(ioaddr) outb(RCV_ENABLE_CMD, ioaddr) - -/* disable rx */ -#define eepro_dis_rx(ioaddr) outb(RCV_DISABLE_CMD, ioaddr) - -/* switch bank */ -#define eepro_sw2bank0(ioaddr) outb(BANK0_SELECT, ioaddr) -#define eepro_sw2bank1(ioaddr) outb(BANK1_SELECT, ioaddr) -#define eepro_sw2bank2(ioaddr) outb(BANK2_SELECT, ioaddr) - -static unsigned int rx_start, tx_start; -static int tx_last; -static unsigned tx_end; -static int eepro = 0; -static unsigned short ioaddr = 0; -static unsigned int mem_start, mem_end = RCV_DEFAULT_RAM / 1024; - -#define udelay(n) waiton_timer2(((n)*TICKS_PER_MS)/1000) - -/************************************************************************** -RESET - Reset adapter -***************************************************************************/ -static void eepro_reset(struct nic *nic) -{ - int temp_reg, i; - - /* put the card in its initial state */ - eepro_sw2bank2(ioaddr); /* be careful, bank2 now */ - temp_reg = inb(ioaddr + eeprom_reg); -#ifdef DEBUG - printf("Stepping %d\n", temp_reg >> 5); -#endif - if (temp_reg & 0x10) /* check the TurnOff Enable bit */ - outb(temp_reg & 0xEF, ioaddr + eeprom_reg); - for (i = 0; i < ETH_ALEN; i++) /* fill the MAC address */ - outb(nic->node_addr[i], ioaddr + I_ADD_REG0 + i); - temp_reg = inb(ioaddr + REG1); - /* setup Transmit Chaining and discard bad RCV frames */ - outb(temp_reg | XMT_Chain_Int | XMT_Chain_ErrStop - | RCV_Discard_BadFrame, ioaddr + REG1); - temp_reg = inb(ioaddr + REG2); /* match broadcast */ - outb(temp_reg | 0x14, ioaddr + REG2); - temp_reg = inb(ioaddr + REG3); - outb(temp_reg & 0x3F, ioaddr + REG3); /* clear test mode */ - /* set the receiving mode */ - eepro_sw2bank1(ioaddr); /* be careful, bank1 now */ - /* initialise the RCV and XMT upper and lower limits */ - outb(RCV_LOWER_LIMIT, ioaddr + RCV_LOWER_LIMIT_REG); - outb(RCV_UPPER_LIMIT, ioaddr + RCV_UPPER_LIMIT_REG); - outb(XMT_LOWER_LIMIT, ioaddr + xmt_lower_limit_reg); - outb(XMT_UPPER_LIMIT, ioaddr + xmt_upper_limit_reg); - eepro_sw2bank0(ioaddr); /* Switch back to bank 0 */ - eepro_clear_int(ioaddr); - /* Initialise RCV */ - outw(rx_start = (RCV_LOWER_LIMIT << 8), ioaddr + RCV_BAR); - outw(((RCV_UPPER_LIMIT << 8) | 0xFE), ioaddr + RCV_STOP); - /* Intialise XMT */ - outw((XMT_LOWER_LIMIT << 8), ioaddr + xmt_bar); - eepro_sel_reset(ioaddr); - tx_start = tx_end = (XMT_LOWER_LIMIT << 8); - tx_last = 0; - eepro_en_rx(ioaddr); -} - -/************************************************************************** -POLL - Wait for a frame -***************************************************************************/ -static int eepro_poll(struct nic *nic) -{ - int i; - unsigned int rcv_car = rx_start; - unsigned int rcv_event, rcv_status, rcv_next_frame, rcv_size; - - /* return true if there's an ethernet packet ready to read */ - /* nic->packet should contain data on return */ - /* nic->packetlen should contain length of data */ -#if 0 - if ((inb(ioaddr + STATUS_REG) & 0x40) == 0) - return (0); - outb(0x40, ioaddr + STATUS_REG); -#endif - outw(rcv_car, ioaddr + HOST_ADDRESS_REG); - rcv_event = inw(ioaddr + IO_PORT); - if (rcv_event != RCV_DONE) - return (0); - rcv_status = inw(ioaddr + IO_PORT); - rcv_next_frame = inw(ioaddr + IO_PORT); - rcv_size = inw(ioaddr + IO_PORT); -#if 0 - printf("%hX %hX %d %hhX\n", rcv_status, rcv_next_frame, rcv_size, - inb(ioaddr + STATUS_REG)); -#endif - if ((rcv_status & (RX_OK|RX_ERROR)) != RX_OK) { - printf("Receive error %hX\n", rcv_status); - return (0); - } - rcv_size &= 0x3FFF; - insw(ioaddr + IO_PORT, nic->packet, ((rcv_size + 3) >> 1)); -#if 0 - for (i = 0; i < 48; i++) { - printf("%hhX", nic->packet[i]); - putchar(i % 16 == 15 ? '\n' : ' '); - } -#endif - nic->packetlen = rcv_size; - rcv_car = rx_start + RCV_HEADER + rcv_size; - rx_start = rcv_next_frame; - if (rcv_car == 0) - rcv_car = ((RCV_UPPER_LIMIT << 8) | 0xff); - outw(rcv_car - 1, ioaddr + RCV_STOP); - return (1); -} - -/************************************************************************** -TRANSMIT - Transmit a frame -***************************************************************************/ -static void eepro_transmit( - struct nic *nic, - const char *d, /* Destination */ - unsigned int t, /* Type */ - unsigned int s, /* size */ - const char *p) /* Packet */ -{ - unsigned int status, tx_available, last, end, length; - unsigned short type; - int boguscount = 20; - - length = s + ETH_HLEN; - if (tx_end > tx_start) - tx_available = XMT_RAM - (tx_end - tx_start); - else if (tx_end < tx_start) - tx_available = tx_start - tx_end; - else - tx_available = XMT_RAM; - last = tx_end; - end = last + (((length + 3) >> 1) << 1) + XMT_HEADER; - if (end >= (XMT_UPPER_LIMIT << 8)) { - last = (XMT_LOWER_LIMIT << 8); - end = last + (((length + 3) >> 1) << 1) + XMT_HEADER; - } - outw(last, ioaddr + HOST_ADDRESS_REG); - outw(XMT_CMD, ioaddr + IO_PORT); - outw(0, ioaddr + IO_PORT); - outw(end, ioaddr + IO_PORT); - outw(length, ioaddr + IO_PORT); - outsw(ioaddr + IO_PORT, d, ETH_ALEN / 2); - outsw(ioaddr + IO_PORT, nic->node_addr, ETH_ALEN / 2); - type = htons(t); - outsw(ioaddr + IO_PORT, &type, sizeof(type) / 2); - outsw(ioaddr + IO_PORT, p, (s + 3) >> 1); - /* A dummy read to flush the DRAM write pipeline */ - status = inw(ioaddr + IO_PORT); - outw(last, ioaddr + xmt_bar); - outb(XMT_CMD, ioaddr); - tx_start = last; - tx_last = last; - tx_end = end; -#if 0 - printf("%d %d\n", tx_start, tx_end); -#endif - while (boguscount > 0) { - if (((status = inw(ioaddr + IO_PORT)) & TX_DONE_BIT) == 0) { - udelay(40); - boguscount--; - continue; - } -#if DEBUG - if ((status & 0x2000) == 0) - printf("Transmit status %hX\n", status); -#endif - } -} - -/************************************************************************** -DISABLE - Turn off ethernet interface -***************************************************************************/ -static void eepro_disable(struct nic *nic) -{ - eepro_sw2bank0(ioaddr); /* Switch to bank 0 */ - /* Flush the Tx and disable Rx */ - outb(STOP_RCV_CMD, ioaddr); - tx_start = tx_end = (XMT_LOWER_LIMIT << 8); - tx_last = 0; - /* Reset the 82595 */ - eepro_full_reset(ioaddr); -} - -static int read_eeprom(int location) -{ - int i; - unsigned short retval = 0; - int ee_addr = ioaddr + eeprom_reg; - int read_cmd = location | EE_READ_CMD; - int ctrl_val = EECS; - - if (eepro == LAN595FX_10ISA) { - eepro_sw2bank1(ioaddr); - outb(0x00, ioaddr + STATUS_REG); - } - eepro_sw2bank2(ioaddr); - outb(ctrl_val, ee_addr); - /* shift the read command bits out */ - for (i = 8; i >= 0; i--) { - short outval = (read_cmd & (1 << i)) ? ctrl_val | EEDI : ctrl_val; - outb(outval, ee_addr); - outb(outval | EESK, ee_addr); /* EEPROM clock tick */ - eeprom_delay(); - outb(outval, ee_addr); /* finish EEPROM clock tick */ - eeprom_delay(); - } - outb(ctrl_val, ee_addr); - for (i = 16; i > 0; i--) { - outb(ctrl_val | EESK, ee_addr); - eeprom_delay(); - retval = (retval << 1) | ((inb(ee_addr) & EEDO) ? 1 : 0); - outb(ctrl_val, ee_addr); - eeprom_delay(); - } - /* terminate the EEPROM access */ - ctrl_val &= ~EECS; - outb(ctrl_val | EESK, ee_addr); - eeprom_delay(); - outb(ctrl_val, ee_addr); - eeprom_delay(); - eepro_sw2bank0(ioaddr); - return (retval); -} - -static int eepro_probe1(struct nic *nic) -{ - int i, id, counter, l_eepro = 0; - union { - unsigned char caddr[ETH_ALEN]; - unsigned short saddr[ETH_ALEN/2]; - } station_addr; - char *name; - - id = inb(ioaddr + ID_REG); - if ((id & ID_REG_MASK) != ID_REG_SIG) - return (0); - counter = id & R_ROBIN_BITS; - if (((id = inb(ioaddr + ID_REG)) & R_ROBIN_BITS) != (counter + 0x40)) - return (0); - /* yes the 82595 has been found */ - station_addr.saddr[2] = read_eeprom(2); - if (station_addr.saddr[2] == 0x0000 || station_addr.saddr[2] == 0xFFFF) { - l_eepro = 3; - eepro = LAN595FX_10ISA; - eeprom_reg= EEPROM_REG_10; - rcv_start = RCV_START_10; - xmt_lower_limit_reg = XMT_LOWER_LIMIT_REG_10; - xmt_upper_limit_reg = XMT_UPPER_LIMIT_REG_10; - station_addr.saddr[2] = read_eeprom(2); - } - station_addr.saddr[1] = read_eeprom(3); - station_addr.saddr[0] = read_eeprom(4); - if (l_eepro) - name = "Intel EtherExpress 10 ISA"; - else if (read_eeprom(7) == ee_FX_INT2IRQ) { - name = "Intel EtherExpress Pro/10+ ISA"; - l_eepro = 2; - } else if (station_addr.saddr[0] == SA_ADDR1) { - name = "Intel EtherExpress Pro/10 ISA"; - l_eepro = 1; - } else { - l_eepro = 0; - name = "Intel 82595-based LAN card"; - } - station_addr.saddr[0] = swap16(station_addr.saddr[0]); - station_addr.saddr[1] = swap16(station_addr.saddr[1]); - station_addr.saddr[2] = swap16(station_addr.saddr[2]); - for (i = 0; i < ETH_ALEN; i++) { - nic->node_addr[i] = station_addr.caddr[i]; - } - printf("\n%s ioaddr %#hX, addr %!", name, ioaddr, nic->node_addr); - mem_start = RCV_LOWER_LIMIT << 8; - if ((mem_end & 0x3F) < 3 || (mem_end & 0x3F) > 29) - mem_end = RCV_UPPER_LIMIT << 8; - else { - mem_end = mem_end * 1024 + (RCV_LOWER_LIMIT << 8); - rcv_ram = mem_end - (RCV_LOWER_LIMIT << 8); - } - printf(", Rx mem %dK, if %s\n", (mem_end - mem_start) >> 10, - GetBit(read_eeprom(5), ee_BNC_TPE) ? "BNC" : "TP"); - return (1); -} - -/************************************************************************** -PROBE - Look for an adapter, this routine's visible to the outside -***************************************************************************/ -struct nic *eepro_probe(struct nic *nic, unsigned short *probe_addrs) -{ - unsigned short *p; - /* same probe list as the Linux driver */ - static unsigned short ioaddrs[] = { - 0x300, 0x210, 0x240, 0x280, 0x2C0, 0x200, 0x320, 0x340, 0x360, 0}; - - if (probe_addrs == 0 || probe_addrs[0] == 0) - probe_addrs = ioaddrs; - for (p = probe_addrs; (ioaddr = *p) != 0; p++) { - if (eepro_probe1(nic)) - break; - } - if (*p == 0) - return (0); - eepro_reset(nic); - /* point to NIC specific routines */ - nic->reset = eepro_reset; - nic->poll = eepro_poll; - nic->transmit = eepro_transmit; - nic->disable = eepro_disable; - return (nic); -} diff --git a/netboot/eepro100.c b/netboot/eepro100.c deleted file mode 100644 index b6510a715..000000000 --- a/netboot/eepro100.c +++ /dev/null @@ -1,654 +0,0 @@ -/* - * eepro100.c -- This file implements the eepro100 driver for etherboot. - * - * - * Copyright (C) AW Computer Systems. - * written by R.E.Wolff -- R.E.Wolff@BitWizard.nl - * - * - * AW Computer Systems is contributing to the free software community - * by paying for this driver and then putting the result under GPL. - * - * If you need a Linux device driver, please contact BitWizard for a - * quote. - * - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * - * date version by what - * Written: May 29 1997 V0.10 REW Initial revision. - * changes: May 31 1997 V0.90 REW Works! - * Jun 1 1997 V0.91 REW Cleanup - * Jun 2 1997 V0.92 REW Add some code documentation - * Jul 25 1997 V1.00 REW Tested by AW to work in a PROM - * Cleanup for publication - * - * This is the etherboot intel etherexpress Pro/100B driver. - * - * It was written from scratch, with Donald Beckers eepro100.c kernel - * driver as a guideline. Mostly the 82557 related definitions and the - * lower level routines have been cut-and-pasted into this source. - * - * The driver was finished before Intel got the NDA out of the closet. - * I still don't have the docs. - * */ - -/* Philosophy of this driver. - * - * Probing: - * - * Using the pci.c functions of the Etherboot code, the 82557 chip is detected. - * It is verified that the BIOS initialized everything properly and if - * something is missing it is done now. - * - * - * Initialization: - * - * - * The chip is then initialized to "know" its ethernet address, and to - * start recieving packets. The Linux driver has a whole transmit and - * recieve ring of buffers. This is neat if you need high performance: - * you can write the buffers asynchronously to the chip reading the - * buffers and transmitting them over the network. Performance is NOT - * an issue here. We can boot a 400k kernel in about two - * seconds. (Theory: 0.4 seconds). Booting a system is going to take - * about half a minute anyway, so getting 10 times closer to the - * theoretical limit is going to make a difference of a few percent. - * - * - * Transmitting and recieving. - * - * We have only one transmit descriptor. It has two buffer descriptors: - * one for the header, and the other for the data. - * We have only one receive buffer. The chip is told to recieve packets, - * and suspend itself once it got one. The recieve (poll) routine simply - * looks at the recieve buffer to see if there is already a packet there. - * if there is, the buffer is copied, and the reciever is restarted. - * - * Caveats: - * - * The etherboot framework moves the code to the 32k segment from - * 0x98000 to 0xa0000. There is just a little room between the end of - * this driver and the 0xa0000 address. If you compile in too many - * features, this will overflow. - * The number under "hex" in the output of size that scrolls by while - * compiling should be less than 8000. Maybe even the stack is up there, - * so that you need even more headroom. - */ - -/* The etherboot authors seem to dislike the argument ordering in - * outb macros that Linux uses. I disklike the confusion that this - * has caused even more.... This file uses the Linux argument ordering. */ -/* Sorry not us. It's inherted code from FreeBSD. [The authors] */ - -#include "etherboot.h" -#include "nic.h" -#include "pci.h" -#include "cards.h" -#include "timer.h" - -#undef virt_to_bus -#define virt_to_bus(x) ((unsigned long)x) - -static int ioaddr; - -typedef unsigned char u8; -typedef signed char s8; -typedef unsigned short u16; -typedef signed short s16; -typedef unsigned int u32; -typedef signed int s32; - -enum speedo_offsets { - SCBStatus = 0, SCBCmd = 2, /* Rx/Command Unit command and status. */ - SCBPointer = 4, /* General purpose pointer. */ - SCBPort = 8, /* Misc. commands and operands. */ - SCBflash = 12, SCBeeprom = 14, /* EEPROM and flash memory control. */ - SCBCtrlMDI = 16, /* MDI interface control. */ - SCBEarlyRx = 20, /* Early receive byte count. */ -}; - -static int do_eeprom_cmd(int cmd, int cmd_len); -void hd(void *where, int n); - -/***********************************************************************/ -/* I82557 related defines */ -/***********************************************************************/ - -/* Serial EEPROM section. - A "bit" grungy, but we work our way through bit-by-bit :->. */ -/* EEPROM_Ctrl bits. */ -#define EE_SHIFT_CLK 0x01 /* EEPROM shift clock. */ -#define EE_CS 0x02 /* EEPROM chip select. */ -#define EE_DATA_WRITE 0x04 /* EEPROM chip data in. */ -#define EE_DATA_READ 0x08 /* EEPROM chip data out. */ -#define EE_WRITE_0 0x4802 -#define EE_WRITE_1 0x4806 -#define EE_ENB (0x4800 | EE_CS) - -#define udelay(n) waiton_timer2(((n)*TICKS_PER_MS)/1000) - -/* The EEPROM commands include the alway-set leading bit. */ -#define EE_READ_CMD 6 - -/* The SCB accepts the following controls for the Tx and Rx units: */ -#define CU_START 0x0010 -#define CU_RESUME 0x0020 -#define CU_STATSADDR 0x0040 -#define CU_SHOWSTATS 0x0050 /* Dump statistics counters. */ -#define CU_CMD_BASE 0x0060 /* Base address to add to add CU commands. */ -#define CU_DUMPSTATS 0x0070 /* Dump then reset stats counters. */ - -#define RX_START 0x0001 -#define RX_RESUME 0x0002 -#define RX_ABORT 0x0004 -#define RX_ADDR_LOAD 0x0006 -#define RX_RESUMENR 0x0007 -#define INT_MASK 0x0100 -#define DRVR_INT 0x0200 /* Driver generated interrupt. */ - -enum phy_chips { NonSuchPhy=0, I82553AB, I82553C, I82503, DP83840, S80C240, - S80C24, PhyUndefined, DP83840A=10, }; - -/* Commands that can be put in a command list entry. */ -enum commands { - CmdNOp = 0, - CmdIASetup = 1, - CmdConfigure = 2, - CmdMulticastList = 3, - CmdTx = 4, - CmdTDR = 5, - CmdDump = 6, - CmdDiagnose = 7, - - /* And some extra flags: */ - CmdSuspend = 0x4000, /* Suspend after completion. */ - CmdIntr = 0x2000, /* Interrupt after completion. */ - CmdTxFlex = 0x0008, /* Use "Flexible mode" for CmdTx command. */ -}; - -/* How to wait for the command unit to accept a command. - Typically this takes 0 ticks. */ -static inline void wait_for_cmd_done(int cmd_ioaddr) -{ - short wait = 100; - do ; - while(inb(cmd_ioaddr) && --wait >= 0); -} - -/* Elements of the dump_statistics block. This block must be lword aligned. */ -static struct speedo_stats { - u32 tx_good_frames; - u32 tx_coll16_errs; - u32 tx_late_colls; - u32 tx_underruns; - u32 tx_lost_carrier; - u32 tx_deferred; - u32 tx_one_colls; - u32 tx_multi_colls; - u32 tx_total_colls; - u32 rx_good_frames; - u32 rx_crc_errs; - u32 rx_align_errs; - u32 rx_resource_errs; - u32 rx_overrun_errs; - u32 rx_colls_errs; - u32 rx_runt_errs; - u32 done_marker; -} lstats; - -/* A speedo3 TX buffer descriptor with two buffers... */ -static struct TxFD { - volatile s16 status; - s16 command; - u32 link; /* void * */ - u32 tx_desc_addr; /* (almost) Always points to the tx_buf_addr element. */ - s32 count; /* # of TBD (=2), Tx start thresh., etc. */ - /* This constitutes two "TBD" entries: hdr and data */ - u32 tx_buf_addr0; /* void *, header of frame to be transmitted. */ - s32 tx_buf_size0; /* Length of Tx hdr. */ - u32 tx_buf_addr1; /* void *, data to be transmitted. */ - s32 tx_buf_size1; /* Length of Tx data. */ -} txfd; - -struct RxFD { /* Receive frame descriptor. */ - volatile s16 status; - s16 command; - u32 link; /* struct RxFD * */ - u32 rx_buf_addr; /* void * */ - u16 count; - u16 size; - char packet[1518]; -}; - -#ifdef USE_LOWMEM_BUFFER -#define rxfd ((struct RxFD *)(0x10000 - sizeof(struct RxFD))) -#define ACCESS(x) x-> -#else -static struct RxFD rxfd; -#define ACCESS(x) x. -#endif - -static int congenb = 0; /* Enable congestion control in the DP83840. */ -static int txfifo = 8; /* Tx FIFO threshold in 4 byte units, 0-15 */ -static int rxfifo = 8; /* Rx FIFO threshold, default 32 bytes. */ -static int txdmacount = 0; /* Tx DMA burst length, 0-127, default 0. */ -static int rxdmacount = 0; /* Rx DMA length, 0 means no preemption. */ - -/* I don't understand a byte in this structure. It was copied from the - * Linux kernel initialization for the eepro100. -- REW */ -static struct ConfCmd { - s16 status; - s16 command; - u32 link; - unsigned char data[22]; -} confcmd = { - 0, CmdConfigure, - (u32) & txfd, - {22, 0x08, 0, 0, 0, 0x80, 0x32, 0x03, 1, /* 1=Use MII 0=Use AUI */ - 0, 0x2E, 0, 0x60, 0, - 0xf2, 0x48, 0, 0x40, 0xf2, 0x80, /* 0x40=Force full-duplex */ - 0x3f, 0x05, } -}; - -/***********************************************************************/ -/* Locally used functions */ -/***********************************************************************/ - -/* Support function: mdio_write - * - * This probably writes to the "physical media interface chip". - * -- REW - */ - -static int mdio_write(int phy_id, int location, int value) -{ - int val, boguscnt = 64*4; /* <64 usec. to complete, typ 27 ticks */ - - outl(0x04000000 | (location<<16) | (phy_id<<21) | value, - ioaddr + SCBCtrlMDI); - do { - udelay(16); - - val = inl(ioaddr + SCBCtrlMDI); - if (--boguscnt < 0) { - printf(" mdio_write() timed out with val = %X.\n", val); - } - } while (! (val & 0x10000000)); - return val & 0xffff; -} - -/* Support function: mdio_read - * - * This probably reads a register in the "physical media interface chip". - * -- REW - */ -static int mdio_read(int phy_id, int location) -{ - int val, boguscnt = 64*4; /* <64 usec. to complete, typ 27 ticks */ - outl(0x08000000 | (location<<16) | (phy_id<<21), ioaddr + SCBCtrlMDI); - do { - udelay(16); - - val = inl(ioaddr + SCBCtrlMDI); - if (--boguscnt < 0) { - printf( " mdio_read() timed out with val = %X.\n", val); - } - } while (! (val & 0x10000000)); - return val & 0xffff; -} - -/* The fixes for the code were kindly provided by Dragan Stancevic - to strictly follow Intel specifications of EEPROM - access timing. - The publicly available sheet 64486302 (sec. 3.1) specifies 1us access - interval for serial EEPROM. However, it looks like that there is an - additional requirement dictating larger udelay's in the code below. - 2000/05/24 SAW */ -static int do_eeprom_cmd(int cmd, int cmd_len) -{ - unsigned retval = 0; - long ee_addr = ioaddr + SCBeeprom; - - outw(EE_ENB, ee_addr); udelay(2); - outw(EE_ENB | EE_SHIFT_CLK, ee_addr); udelay(2); - - /* Shift the command bits out. */ - do { - short dataval = (cmd & (1 << cmd_len)) ? EE_WRITE_1 : EE_WRITE_0; - outw(dataval, ee_addr); udelay(2); - outw(dataval | EE_SHIFT_CLK, ee_addr); udelay(2); - retval = (retval << 1) | ((inw(ee_addr) & EE_DATA_READ) ? 1 : 0); - } while (--cmd_len >= 0); - outw(EE_ENB, ee_addr); udelay(2); - - /* Terminate the EEPROM access. */ - outw(EE_ENB & ~EE_CS, ee_addr); - return retval; -} - -static inline void whereami (const char *str) -{ -#if 0 - printf ("%s\n", str); - sleep (2); -#endif -} - -/* function: eepro100_reset - * resets the card. This is used to allow Etherboot to probe the card again - * from a "virginal" state.... - * Arguments: none - * - * returns: void. - */ - -static void eepro100_reset(struct nic *nic) -{ - outl(0, ioaddr + SCBPort); -} - -/* function: eepro100_transmit - * This transmits a packet. - * - * Arguments: char d[6]: destination ethernet address. - * unsigned short t: ethernet protocol type. - * unsigned short s: size of the data-part of the packet. - * char *p: the data for the packet. - * returns: void. - */ - -static void eepro100_transmit(struct nic *nic, const char *d, unsigned int t, unsigned int s, const char *p) -{ - struct eth_hdr { - unsigned char dst_addr[ETH_ALEN]; - unsigned char src_addr[ETH_ALEN]; - unsigned short type; - } hdr; - unsigned short status; - int to; - int s1, s2; - - status = inw(ioaddr + SCBStatus); - /* Acknowledge all of the current interrupt sources ASAP. */ - outw(status & 0xfc00, ioaddr + SCBStatus); - -#ifdef DEBUG - printf ("transmitting type %hX packet (%d bytes). status = %hX, cmd=%hX\n", - t, s, status, inw (ioaddr + SCBCmd)); -#endif - - memcpy (&hdr.dst_addr, d, ETH_ALEN); - memcpy (&hdr.src_addr, nic->node_addr, ETH_ALEN); - - hdr.type = htons (t); - - txfd.status = 0; - txfd.command = CmdSuspend | CmdTx | CmdTxFlex; - txfd.link = virt_to_bus (&txfd); - txfd.count = 0x02208000; - txfd.tx_desc_addr = (u32)&txfd.tx_buf_addr0; - - txfd.tx_buf_addr0 = virt_to_bus (&hdr); - txfd.tx_buf_size0 = sizeof (hdr); - - txfd.tx_buf_addr1 = virt_to_bus (p); - txfd.tx_buf_size1 = s; - -#ifdef DEBUG - printf ("txfd: \n"); - hd (&txfd, sizeof (txfd)); -#endif - - outl(virt_to_bus(&txfd), ioaddr + SCBPointer); - outw(INT_MASK | CU_START, ioaddr + SCBCmd); - wait_for_cmd_done(ioaddr + SCBCmd); - - s1 = inw (ioaddr + SCBStatus); - load_timer2(10*TICKS_PER_MS); /* timeout 10 ms for transmit */ - while (!txfd.status && timer2_running()) - /* Wait */; - s2 = inw (ioaddr + SCBStatus); - -#ifdef DEBUG - printf ("s1 = %hX, s2 = %hX.\n", s1, s2); -#endif -} - -/* function: eepro100_poll / eth_poll - * This recieves a packet from the network. - * - * Arguments: none - * - * returns: 1 if a packet was recieved. - * 0 if no pacet was recieved. - * side effects: - * returns the packet in the array nic->packet. - * returns the length of the packet in nic->packetlen. - */ - -static int eepro100_poll(struct nic *nic) -{ - if (!ACCESS(rxfd)status) - return 0; - - /* Ok. We got a packet. Now restart the reciever.... */ - ACCESS(rxfd)status = 0; - ACCESS(rxfd)command = 0xc000; - outl(virt_to_bus(&(ACCESS(rxfd)status)), ioaddr + SCBPointer); - outw(INT_MASK | RX_START, ioaddr + SCBCmd); - wait_for_cmd_done(ioaddr + SCBCmd); - -#ifdef DEBUG - printf ("Got a packet: Len = %d.\n", ACCESS(rxfd)count & 0x3fff); -#endif - nic->packetlen = ACCESS(rxfd)count & 0x3fff; - memcpy (nic->packet, ACCESS(rxfd)packet, nic->packetlen); -#ifdef DEBUG - hd (nic->packet, 0x30); -#endif - return 1; -} - -static void eepro100_disable(struct nic *nic) -{ - /* See if this PartialReset solves the problem with interfering with - kernel operation after Etherboot hands over. - Ken 20001102 */ - outl(2, ioaddr + SCBPort); -} - -/* exported function: eepro100_probe / eth_probe - * initializes a card - * - * side effects: - * leaves the ioaddress of the 82557 chip in the variable ioaddr. - * leaves the 82557 initialized, and ready to recieve packets. - */ - -struct nic *eepro100_probe(struct nic *nic, unsigned short *probeaddrs, struct pci_device *p) -{ - unsigned short sum = 0; - int i; - int read_cmd, ee_size; - unsigned short value; - int options; - int promisc; - - /* we cache only the first few words of the EEPROM data - be careful not to access beyond this array */ - unsigned short eeprom[16]; - - if (probeaddrs == 0 || probeaddrs[0] == 0) - return 0; - ioaddr = probeaddrs[0] & ~3; /* Mask the bit that says "this is an io addr" */ - - adjust_pci_device(p); - - if ((do_eeprom_cmd(EE_READ_CMD << 24, 27) & 0xffe0000) - == 0xffe0000) { - ee_size = 0x100; - read_cmd = EE_READ_CMD << 24; - } else { - ee_size = 0x40; - read_cmd = EE_READ_CMD << 22; - } - - for (i = 0, sum = 0; i < ee_size; i++) { - unsigned short value = do_eeprom_cmd(read_cmd | (i << 16), 27); - if (i < (int)(sizeof(eeprom)/sizeof(eeprom[0]))) - eeprom[i] = value; - sum += value; - } - - for (i=0;inode_addr[i] = (eeprom[i/2] >> (8*(i&1))) & 0xff; - } - printf ("Ethernet addr: %!\n", nic->node_addr); - - if (sum != 0xBABA) - printf("eepro100: Invalid EEPROM checksum %#hX, " - "check settings before activating this device!\n", sum); - outl(0, ioaddr + SCBPort); - udelay (10000); - - whereami ("Got eeprom."); - - outl(virt_to_bus(&lstats), ioaddr + SCBPointer); - outw(INT_MASK | CU_STATSADDR, ioaddr + SCBCmd); - wait_for_cmd_done(ioaddr + SCBCmd); - - whereami ("set stats addr."); - /* INIT RX stuff. */ - - /* Base = 0 */ - outl(0, ioaddr + SCBPointer); - outw(INT_MASK | RX_ADDR_LOAD, ioaddr + SCBCmd); - wait_for_cmd_done(ioaddr + SCBCmd); - - whereami ("set rx base addr."); - - ACCESS(rxfd)status = 0x0001; - ACCESS(rxfd)command = 0x0000; - ACCESS(rxfd)link = virt_to_bus(&(ACCESS(rxfd)status)); - ACCESS(rxfd)rx_buf_addr = (int) &nic->packet; - ACCESS(rxfd)count = 0; - ACCESS(rxfd)size = 1528; - - outl(virt_to_bus(&(ACCESS(rxfd)status)), ioaddr + SCBPointer); - outw(INT_MASK | RX_START, ioaddr + SCBCmd); - wait_for_cmd_done(ioaddr + SCBCmd); - - whereami ("started RX process."); - - /* Start the reciever.... */ - ACCESS(rxfd)status = 0; - ACCESS(rxfd)command = 0xc000; - outl(virt_to_bus(&(ACCESS(rxfd)status)), ioaddr + SCBPointer); - outw(INT_MASK | RX_START, ioaddr + SCBCmd); - - /* INIT TX stuff. */ - - /* Base = 0 */ - outl(0, ioaddr + SCBPointer); - outw(INT_MASK | CU_CMD_BASE, ioaddr + SCBCmd); - wait_for_cmd_done(ioaddr + SCBCmd); - - whereami ("set TX base addr."); - - txfd.command = (CmdIASetup); - txfd.status = 0x0000; - txfd.link = virt_to_bus (&confcmd); - - { - char *t = (char *)&txfd.tx_desc_addr; - - for (i=0;inode_addr[i]; - } - -#ifdef DEBUG - printf ("Setup_eaddr:\n"); - hd (&txfd, 0x20); -#endif - /* options = 0x40; */ /* 10mbps half duplex... */ - options = 0x00; /* Autosense */ - - promisc = 0; - - if ( ((eeprom[6]>>8) & 0x3f) == DP83840 - || ((eeprom[6]>>8) & 0x3f) == DP83840A) { - int mdi_reg23 = mdio_read(eeprom[6] & 0x1f, 23) | 0x0422; - if (congenb) - mdi_reg23 |= 0x0100; - printf(" DP83840 specific setup, setting register 23 to %hX.\n", - mdi_reg23); - mdio_write(eeprom[6] & 0x1f, 23, mdi_reg23); - } - whereami ("Done DP8340 special setup."); - if (options != 0) { - mdio_write(eeprom[6] & 0x1f, 0, - ((options & 0x20) ? 0x2000 : 0) | /* 100mbps? */ - ((options & 0x10) ? 0x0100 : 0)); /* Full duplex? */ - whereami ("set mdio_register."); - } - - confcmd.command = CmdSuspend | CmdConfigure; - confcmd.status = 0x0000; - confcmd.link = virt_to_bus (&txfd); - confcmd.data[1] = (txfifo << 4) | rxfifo; - confcmd.data[4] = rxdmacount; - confcmd.data[5] = txdmacount + 0x80; - confcmd.data[15] = promisc ? 0x49: 0x48; - confcmd.data[19] = (options & 0x10) ? 0xC0 : 0x80; - confcmd.data[21] = promisc ? 0x0D: 0x05; - - outl(virt_to_bus(&txfd), ioaddr + SCBPointer); - outw(INT_MASK | CU_START, ioaddr + SCBCmd); - wait_for_cmd_done(ioaddr + SCBCmd); - - whereami ("started TX thingy (config, iasetup)."); - - load_timer2(10*TICKS_PER_MS); - while (!txfd.status && timer2_running()) - /* Wait */; - - nic->reset = eepro100_reset; - nic->poll = eepro100_poll; - nic->transmit = eepro100_transmit; - nic->disable = eepro100_disable; - return nic; -} - -/*********************************************************************/ - -#ifdef DEBUG - -/* Hexdump a number of bytes from memory... */ -void hd (void *where, int n) -{ - int i; - - while (n > 0) { - printf ("%X ", where); - for (i=0;i < ( (n>16)?16:n);i++) - printf (" %hhX", ((char *)where)[i]); - printf ("\n"); - n -= 16; - where += 16; - } -} -#endif - diff --git a/netboot/epic100.c b/netboot/epic100.c deleted file mode 100644 index c5c3fd22e..000000000 --- a/netboot/epic100.c +++ /dev/null @@ -1,481 +0,0 @@ -/* epic100.c: A SMC 83c170 EPIC/100 fast ethernet driver for Etherboot */ - -#define LINUX_OUT_MACROS - -#include "etherboot.h" -#include "nic.h" -#include "cards.h" -#include "timer.h" -#include "epic100.h" - -#undef virt_to_bus -#define virt_to_bus(x) ((unsigned long)x) - -#define TX_RING_SIZE 2 /* use at least 2 buffers for TX */ -#define RX_RING_SIZE 2 - -#define PKT_BUF_SZ 1536 /* Size of each temporary Tx/Rx buffer.*/ - -/* -#define DEBUG_RX -#define DEBUG_TX -#define DEBUG_EEPROM -*/ - -#define EPIC_DEBUG 0 /* debug level */ - -/* The EPIC100 Rx and Tx buffer descriptors. */ -struct epic_rx_desc { - unsigned short status; - unsigned short rxlength; - unsigned long bufaddr; - unsigned short buflength; - unsigned short control; - unsigned long next; -}; - -/* description of the tx descriptors control bits commonly used */ -#define TD_STDFLAGS TD_LASTDESC - -struct epic_tx_desc { - unsigned short status; - unsigned short txlength; - unsigned long bufaddr; - unsigned short buflength; - unsigned short control; - unsigned long next; -}; - -#define delay(nanosec) do { int _i = 3; while (--_i > 0) \ - { __SLOW_DOWN_IO; }} while (0) - -static void epic100_open(void); -static void epic100_init_ring(void); -static void epic100_disable(struct nic *nic); -static int epic100_poll(struct nic *nic); -static void epic100_transmit(struct nic *nic, const char *destaddr, - unsigned int type, unsigned int len, const char *data); -static int read_eeprom(int location); -static int mii_read(int phy_id, int location); - -static int ioaddr; - -static int command; -static int intstat; -static int intmask; -static int genctl ; -static int eectl ; -static int test ; -static int mmctl ; -static int mmdata ; -static int lan0 ; -static int rxcon ; -static int txcon ; -static int prcdar ; -static int ptcdar ; -static int eththr ; - -static unsigned int cur_rx, cur_tx; /* The next free ring entry */ -#ifdef DEBUG_EEPROM -static unsigned short eeprom[64]; -#endif -static signed char phys[4]; /* MII device addresses. */ -static struct epic_rx_desc rx_ring[RX_RING_SIZE]; -static struct epic_tx_desc tx_ring[TX_RING_SIZE]; -#ifdef USE_LOWMEM_BUFFER -#define rx_packet ((char *)0x10000 - PKT_BUF_SZ * RX_RING_SIZE) -#define tx_packet ((char *)0x10000 - PKT_BUF_SZ * RX_RING_SIZE - PKT_BUF_SZ * TX_RING_SIZE) -#else -static char rx_packet[PKT_BUF_SZ * RX_RING_SIZE]; -static char tx_packet[PKT_BUF_SZ * TX_RING_SIZE]; -#endif - -/***********************************************************************/ -/* Externally visible functions */ -/***********************************************************************/ - - static void -epic100_reset(struct nic *nic) -{ - /* Soft reset the chip. */ - outl(GC_SOFT_RESET, genctl); -} - - struct nic* -epic100_probe(struct nic *nic, unsigned short *probeaddrs) -{ - unsigned short sum = 0; - unsigned short value; - int i; - unsigned short* ap; - unsigned int phy, phy_idx; - - if (probeaddrs == 0 || probeaddrs[0] == 0) - return 0; - - /* Ideally we would detect all network cards in slot order. That would - be best done a central PCI probe dispatch, which wouldn't work - well with the current structure. So instead we detect just the - Epic cards in slot order. */ - - ioaddr = probeaddrs[0] & ~3; /* Mask the bit that says "this is an io addr" */ - - /* compute all used static epic100 registers address */ - command = ioaddr + COMMAND; /* Control Register */ - intstat = ioaddr + INTSTAT; /* Interrupt Status */ - intmask = ioaddr + INTMASK; /* Interrupt Mask */ - genctl = ioaddr + GENCTL; /* General Control */ - eectl = ioaddr + EECTL; /* EEPROM Control */ - test = ioaddr + TEST; /* Test register (clocks) */ - mmctl = ioaddr + MMCTL; /* MII Management Interface Control */ - mmdata = ioaddr + MMDATA; /* MII Management Interface Data */ - lan0 = ioaddr + LAN0; /* MAC address. (0x40-0x48) */ - rxcon = ioaddr + RXCON; /* Receive Control */ - txcon = ioaddr + TXCON; /* Transmit Control */ - prcdar = ioaddr + PRCDAR; /* PCI Receive Current Descr Address */ - ptcdar = ioaddr + PTCDAR; /* PCI Transmit Current Descr Address */ - eththr = ioaddr + ETHTHR; /* Early Transmit Threshold */ - - /* Reset the chip & bring it out of low-power mode. */ - outl(GC_SOFT_RESET, genctl); - - /* Disable ALL interrupts by setting the interrupt mask. */ - outl(INTR_DISABLE, intmask); - - /* - * set the internal clocks: - * Application Note 7.15 says: - * In order to set the CLOCK TEST bit in the TEST register, - * perform the following: - * - * Write 0x0008 to the test register at least sixteen - * consecutive times. - * - * The CLOCK TEST bit is Write-Only. Writing it several times - * consecutively insures a successful write to the bit... - */ - - for (i = 0; i < 16; i++) { - outl(0x00000008, test); - } - -#ifdef DEBUG_EEPROM - for (i = 0; i < 64; i++) { - value = read_eeprom(i); - eeprom[i] = value; - sum += value; - } - -#if (EPIC_DEBUG > 1) - printf("EEPROM contents\n"); - for (i = 0; i < 64; i++) { - printf(" %hhX%s", eeprom[i], i % 16 == 15 ? "\n" : ""); - } -#endif -#endif - - /* This could also be read from the EEPROM. */ - ap = (unsigned short*)nic->node_addr; - for (i = 0; i < 3; i++) - *ap++ = inw(lan0 + i*4); - - printf(" I/O %#hX %! ", ioaddr, nic->node_addr); - - /* Find the connected MII xcvrs. */ - for (phy = 0, phy_idx = 0; phy < 32 && phy_idx < sizeof(phys); phy++) { - int mii_status = mii_read(phy, 0); - - if (mii_status != 0xffff && mii_status != 0x0000) { - phys[phy_idx++] = phy; -#if (EPIC_DEBUG > 1) - printf("MII transceiver found at address %d.\n", phy); -#endif - } - } - if (phy_idx == 0) { -#if (EPIC_DEBUG > 1) - printf("***WARNING***: No MII transceiver found!\n"); -#endif - /* Use the known PHY address of the EPII. */ - phys[0] = 3; - } - - epic100_open(); - - nic->reset = epic100_reset; - nic->poll = epic100_poll; - nic->transmit = epic100_transmit; - nic->disable = epic100_disable; - - return nic; -} - - static void -epic100_open(void) -{ - int mii_reg5; - int full_duplex = 0; - unsigned long tmp; - - epic100_init_ring(); - - /* Pull the chip out of low-power mode, and set for PCI read multiple. */ - outl(GC_RX_FIFO_THR_64 | GC_MRC_READ_MULT | GC_ONE_COPY, genctl); - - outl(TX_FIFO_THRESH, eththr); - - tmp = TC_EARLY_TX_ENABLE | TX_SLOT_TIME; - - mii_reg5 = mii_read(phys[0], 5); - if (mii_reg5 != 0xffff && (mii_reg5 & 0x0100)) { - full_duplex = 1; - printf(" full-duplex mode"); - tmp |= TC_LM_FULL_DPX; - } else - tmp |= TC_LM_NORMAL; - - outl(tmp, txcon); - - /* Give adress of RX and TX ring to the chip */ - outl(virt_to_bus(&rx_ring), prcdar); - outl(virt_to_bus(&tx_ring), ptcdar); - - /* Start the chip's Rx process: receive unicast and broadcast */ - outl(0x04, rxcon); - outl(CR_START_RX | CR_QUEUE_RX, command); - - putchar('\n'); -} - -/* Initialize the Rx and Tx rings. */ - static void -epic100_init_ring(void) -{ - int i; - char* p; - - cur_rx = cur_tx = 0; - - p = &rx_packet[0]; - for (i = 0; i < RX_RING_SIZE; i++) { - rx_ring[i].status = RRING_OWN; /* Owned by Epic chip */ - rx_ring[i].buflength = PKT_BUF_SZ; - rx_ring[i].bufaddr = virt_to_bus(p + (PKT_BUF_SZ * i)); - rx_ring[i].control = 0; - rx_ring[i].next = virt_to_bus(&(rx_ring[i + 1]) ); - } - /* Mark the last entry as wrapping the ring. */ - rx_ring[i-1].next = virt_to_bus(&rx_ring[0]); - - /* - *The Tx buffer descriptor is filled in as needed, - * but we do need to clear the ownership bit. - */ - p = &tx_packet[0]; - - for (i = 0; i < TX_RING_SIZE; i++) { - tx_ring[i].status = 0; /* Owned by CPU */ - tx_ring[i].bufaddr = virt_to_bus(p + (PKT_BUF_SZ * i)); - tx_ring[i].control = TD_STDFLAGS; - tx_ring[i].next = virt_to_bus(&(tx_ring[i + 1]) ); - } - tx_ring[i-1].next = virt_to_bus(&tx_ring[0]); -} - -/* function: epic100_transmit - * This transmits a packet. - * - * Arguments: char d[6]: destination ethernet address. - * unsigned short t: ethernet protocol type. - * unsigned short s: size of the data-part of the packet. - * char *p: the data for the packet. - * returns: void. - */ - static void -epic100_transmit(struct nic *nic, const char *destaddr, unsigned int type, - unsigned int len, const char *data) -{ - unsigned short nstype; - char* txp; - int entry; - - /* Calculate the next Tx descriptor entry. */ - entry = cur_tx % TX_RING_SIZE; - - if ((tx_ring[entry].status & TRING_OWN) == TRING_OWN) { - printf("eth_transmit: Unable to transmit. status=%hX. Resetting...\n", - tx_ring[entry].status); - - epic100_open(); - return; - } - - txp = (char*)tx_ring[entry].bufaddr; - - memcpy(txp, destaddr, ETH_ALEN); - memcpy(txp + ETH_ALEN, nic->node_addr, ETH_ALEN); - nstype = htons(type); - memcpy(txp + 12, (char*)&nstype, 2); - memcpy(txp + ETH_HLEN, data, len); - - len += ETH_HLEN; - - /* - * Caution: the write order is important here, - * set the base address with the "ownership" - * bits last. - */ - tx_ring[entry].txlength = (len >= 60 ? len : 60); - tx_ring[entry].buflength = len; - tx_ring[entry].status = TRING_OWN; /* Pass ownership to the chip. */ - - cur_tx++; - - /* Trigger an immediate transmit demand. */ - outl(CR_QUEUE_TX, command); - - load_timer2(10*TICKS_PER_MS); /* timeout 10 ms for transmit */ - while ((tx_ring[entry].status & TRING_OWN) && timer2_running()) - /* Wait */; - - if ((tx_ring[entry].status & TRING_OWN) != 0) - printf("Oops, transmitter timeout, status=%hX\n", - tx_ring[entry].status); -} - -/* function: epic100_poll / eth_poll - * This receives a packet from the network. - * - * Arguments: none - * - * returns: 1 if a packet was received. - * 0 if no pacet was received. - * side effects: - * returns the packet in the array nic->packet. - * returns the length of the packet in nic->packetlen. - */ - - static int -epic100_poll(struct nic *nic) -{ - int entry; - int status; - int retcode; - - entry = cur_rx % RX_RING_SIZE; - - if ((status = rx_ring[entry].status & RRING_OWN) == RRING_OWN) - return (0); - - /* We own the next entry, it's a new packet. Send it up. */ - -#if (EPIC_DEBUG > 4) - printf("epic_poll: entry %d status %hX\n", entry, status); -#endif - - cur_rx++; - if (status & 0x2000) { - printf("epic_poll: Giant packet\n"); - retcode = 0; - } else if (status & 0x0006) { - /* Rx Frame errors are counted in hardware. */ - printf("epic_poll: Frame received with errors\n"); - retcode = 0; - } else { - /* Omit the four octet CRC from the length. */ - nic->packetlen = rx_ring[entry].rxlength - 4; - memcpy(nic->packet, (char*)rx_ring[entry].bufaddr, nic->packetlen); - retcode = 1; - } - - /* Clear all error sources. */ - outl(status & INTR_CLEARERRS, intstat); - - /* Give the descriptor back to the chip */ - rx_ring[entry].status = RRING_OWN; - - /* Restart Receiver */ - outl(CR_START_RX | CR_QUEUE_RX, command); - - return retcode; -} - - - static void -epic100_disable(struct nic *nic) -{ -} - - -#ifdef DEBUG_EEPROM -/* Serial EEPROM section. */ - -/* EEPROM_Ctrl bits. */ -#define EE_SHIFT_CLK 0x04 /* EEPROM shift clock. */ -#define EE_CS 0x02 /* EEPROM chip select. */ -#define EE_DATA_WRITE 0x08 /* EEPROM chip data in. */ -#define EE_WRITE_0 0x01 -#define EE_WRITE_1 0x09 -#define EE_DATA_READ 0x10 /* EEPROM chip data out. */ -#define EE_ENB (0x0001 | EE_CS) - -/* The EEPROM commands include the alway-set leading bit. */ -#define EE_WRITE_CMD (5 << 6) -#define EE_READ_CMD (6 << 6) -#define EE_ERASE_CMD (7 << 6) - -#define eeprom_delay(n) delay(n) - - static int -read_eeprom(int location) -{ - int i; - int retval = 0; - int read_cmd = location | EE_READ_CMD; - - outl(EE_ENB & ~EE_CS, eectl); - outl(EE_ENB, eectl); - - /* Shift the read command bits out. */ - for (i = 10; i >= 0; i--) { - short dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0; - outl(EE_ENB | dataval, eectl); - eeprom_delay(100); - outl(EE_ENB | dataval | EE_SHIFT_CLK, eectl); - eeprom_delay(150); - outl(EE_ENB | dataval, eectl); /* Finish EEPROM a clock tick. */ - eeprom_delay(250); - } - outl(EE_ENB, eectl); - - for (i = 16; i > 0; i--) { - outl(EE_ENB | EE_SHIFT_CLK, eectl); - eeprom_delay(100); - retval = (retval << 1) | ((inl(eectl) & EE_DATA_READ) ? 1 : 0); - outl(EE_ENB, eectl); - eeprom_delay(100); - } - - /* Terminate the EEPROM access. */ - outl(EE_ENB & ~EE_CS, eectl); - return retval; -} -#endif - - -#define MII_READOP 1 -#define MII_WRITEOP 2 - - static int -mii_read(int phy_id, int location) -{ - int i; - - outl((phy_id << 9) | (location << 4) | MII_READOP, mmctl); - /* Typical operation takes < 50 ticks. */ - - for (i = 4000; i > 0; i--) - if ((inl(mmctl) & MII_READOP) == 0) - break; - return inw(mmdata); -} diff --git a/netboot/epic100.h b/netboot/epic100.h deleted file mode 100644 index 61bd1d94b..000000000 --- a/netboot/epic100.h +++ /dev/null @@ -1,188 +0,0 @@ -#ifndef _EPIC100_H_ -# define _EPIC100_H_ - -#ifndef PCI_VENDOR_SMC -# define PCI_VENDOR_SMC 0x10B8 -#endif - -#ifndef PCI_DEVICE_SMC_EPIC100 -# define PCI_DEVICE_SMC_EPIC100 0x0005 -#endif - -#define PCI_DEVICE_ID_NONE 0xFFFF - -/* Offsets to registers (using SMC names). */ -enum epic100_registers { - COMMAND= 0, /* Control Register */ - INTSTAT= 4, /* Interrupt Status */ - INTMASK= 8, /* Interrupt Mask */ - GENCTL = 0x0C, /* General Control */ - NVCTL = 0x10, /* Non Volatile Control */ - EECTL = 0x14, /* EEPROM Control */ - TEST = 0x1C, /* Test register: marked as reserved (see in source code) */ - CRCCNT = 0x20, /* CRC Error Counter */ - ALICNT = 0x24, /* Frame Alignment Error Counter */ - MPCNT = 0x28, /* Missed Packet Counter */ - MMCTL = 0x30, /* MII Management Interface Control */ - MMDATA = 0x34, /* MII Management Interface Data */ - MIICFG = 0x38, /* MII Configuration */ - IPG = 0x3C, /* InterPacket Gap */ - LAN0 = 0x40, /* MAC address. (0x40-0x48) */ - IDCHK = 0x4C, /* BoardID/ Checksum */ - MC0 = 0x50, /* Multicast filter table. (0x50-0x5c) */ - RXCON = 0x60, /* Receive Control */ - TXCON = 0x70, /* Transmit Control */ - TXSTAT = 0x74, /* Transmit Status */ - PRCDAR = 0x84, /* PCI Receive Current Descriptor Address */ - PRSTAT = 0xA4, /* PCI Receive DMA Status */ - PRCPTHR= 0xB0, /* PCI Receive Copy Threshold */ - PTCDAR = 0xC4, /* PCI Transmit Current Descriptor Address */ - ETHTHR = 0xDC /* Early Transmit Threshold */ -}; - -/* Command register (CR_) bits */ -#define CR_STOP_RX (0x00000001) -#define CR_START_RX (0x00000002) -#define CR_QUEUE_TX (0x00000004) -#define CR_QUEUE_RX (0x00000008) -#define CR_NEXTFRAME (0x00000010) -#define CR_STOP_TX_DMA (0x00000020) -#define CR_STOP_RX_DMA (0x00000040) -#define CR_TX_UGO (0x00000080) - -/* Interrupt register bits. NI means No Interrupt generated */ - -#define INTR_RX_THR_STA (0x00400000) /* rx copy threshold status NI */ -#define INTR_RX_BUFF_EMPTY (0x00200000) /* rx buffers empty. NI */ -#define INTR_TX_IN_PROG (0x00100000) /* tx copy in progess. NI */ -#define INTR_RX_IN_PROG (0x00080000) /* rx copy in progress. NI */ -#define INTR_TXIDLE (0x00040000) /* tx idle. NI */ -#define INTR_RXIDLE (0x00020000) /* rx idle. NI */ -#define INTR_INTR_ACTIVE (0x00010000) /* Interrupt active. NI */ -#define INTR_RX_STATUS_OK (0x00008000) /* rx status valid. NI */ -#define INTR_PCI_TGT_ABT (0x00004000) /* PCI Target abort */ -#define INTR_PCI_MASTER_ABT (0x00002000) /* PCI Master abort */ -#define INTR_PCI_PARITY_ERR (0x00001000) /* PCI adress parity error */ -#define INTR_PCI_DATA_ERR (0x00000800) /* PCI data parity error */ -#define INTR_RX_THR_CROSSED (0x00000400) /* rx copy threshold crossed */ -#define INTR_CNTFULL (0x00000200) /* Counter overflow */ -#define INTR_TXUNDERRUN (0x00000100) /* tx underrun. */ -#define INTR_TXEMPTY (0x00000080) /* tx queue empty */ -#define INTR_TX_CH_COMPLETE (0x00000040) /* tx chain complete */ -#define INTR_TXDONE (0x00000020) /* tx complete (w or w/o err) */ -#define INTR_RXERROR (0x00000010) /* rx error (CRC) */ -#define INTR_RXOVERFLOW (0x00000008) /* rx buffer overflow */ -#define INTR_RX_QUEUE_EMPTY (0x00000004) /* rx queue empty. */ -#define INTR_RXHEADER (0x00000002) /* header copy complete */ -#define INTR_RXDONE (0x00000001) /* Receive copy complete */ - -#define INTR_CLEARINTR (0x00007FFF) -#define INTR_VALIDBITS (0x007FFFFF) -#define INTR_DISABLE (0x00000000) -#define INTR_CLEARERRS (0x00007F18) -#define INTR_ABNINTR (INTR_CNTFULL | INTR_TXUNDERRUN | INTR_RXOVERFLOW) - -/* General Control (GC_) bits */ - -#define GC_SOFT_RESET (0x00000001) -#define GC_INTR_ENABLE (0x00000002) -#define GC_SOFT_INTR (0x00000004) -#define GC_POWER_DOWN (0x00000008) -#define GC_ONE_COPY (0x00000010) -#define GC_BIG_ENDIAN (0x00000020) -#define GC_RX_PREEMPT_TX (0x00000040) -#define GC_TX_PREEMPT_RX (0x00000080) - -/* - * Receive FIFO Threshold values - * Control the level at which the PCI burst state machine - * begins to empty the receive FIFO. Possible values: 0-3 - * - * 0 => 32, 1 => 64, 2 => 96 3 => 128 bytes. - */ -#define GC_RX_FIFO_THR_32 (0x00000000) -#define GC_RX_FIFO_THR_64 (0x00000100) -#define GC_RX_FIFO_THR_96 (0x00000200) -#define GC_RX_FIFO_THR_128 (0x00000300) - -/* Memory Read Control (MRC_) values */ -#define GC_MRC_MEM_READ (0x00000000) -#define GC_MRC_READ_MULT (0x00000400) -#define GC_MRC_READ_LINE (0x00000800) - -#define GC_SOFTBIT0 (0x00001000) -#define GC_SOFTBIT1 (0x00002000) -#define GC_RESET_PHY (0x00004000) - -/* Definitions of the Receive Control (RC_) register bits */ - -#define RC_SAVE_ERRORED_PKT (0x00000001) -#define RC_SAVE_RUNT_FRAMES (0x00000002) -#define RC_RCV_BROADCAST (0x00000004) -#define RC_RCV_MULTICAST (0x00000008) -#define RC_RCV_INVERSE_PKT (0x00000010) -#define RC_PROMISCUOUS_MODE (0x00000020) -#define RC_MONITOR_MODE (0x00000040) -#define RC_EARLY_RCV_ENABLE (0x00000080) - -/* description of the rx descriptors control bits */ -#define RD_FRAGLIST (0x0001) /* Desc points to a fragment list */ -#define RD_LLFORM (0x0002) /* Frag list format */ -#define RD_HDR_CPY (0x0004) /* Desc used for header copy */ - -/* Definition of the Transmit CONTROL (TC) register bits */ - -#define TC_EARLY_TX_ENABLE (0x00000001) - -/* Loopback Mode (LM_) Select valuesbits */ -#define TC_LM_NORMAL (0x00000000) -#define TC_LM_INTERNAL (0x00000002) -#define TC_LM_EXTERNAL (0x00000004) -#define TC_LM_FULL_DPX (0x00000006) - -#define TX_SLOT_TIME (0x00000078) - -/* Bytes transferred to chip before transmission starts. */ -#define TX_FIFO_THRESH 128 /* Rounded down to 4 byte units. */ - -/* description of rx descriptors status bits */ -#define RRING_PKT_INTACT (0x0001) -#define RRING_ALIGN_ERR (0x0002) -#define RRING_CRC_ERR (0x0004) -#define RRING_MISSED_PKT (0x0008) -#define RRING_MULTICAST (0x0010) -#define RRING_BROADCAST (0x0020) -#define RRING_RECEIVER_DISABLE (0x0040) -#define RRING_STATUS_VALID (0x1000) -#define RRING_FRAGLIST_ERR (0x2000) -#define RRING_HDR_COPIED (0x4000) -#define RRING_OWN (0x8000) - -/* error summary */ -#define RRING_ERROR (RRING_ALIGN_ERR|RRING_CRC_ERR) - -/* description of tx descriptors status bits */ -#define TRING_PKT_INTACT (0x0001) /* pkt transmitted. */ -#define TRING_PKT_NONDEFER (0x0002) /* pkt xmitted w/o deferring */ -#define TRING_COLL (0x0004) /* pkt xmitted w collisions */ -#define TRING_CARR (0x0008) /* carrier sense lost */ -#define TRING_UNDERRUN (0x0010) /* DMA underrun */ -#define TRING_HB_COLL (0x0020) /* Collision detect Heartbeat */ -#define TRING_WIN_COLL (0x0040) /* out of window collision */ -#define TRING_DEFERRED (0x0080) /* Deferring */ -#define TRING_COLL_COUNT (0x0F00) /* collision counter (mask) */ -#define TRING_COLL_EXCESS (0x1000) /* tx aborted: excessive colls */ -#define TRING_OWN (0x8000) /* desc ownership bit */ - -/* error summary */ -#define TRING_ABORT (TRING_COLL_EXCESS|TRING_WIN_COLL|TRING_UNDERRUN) -#define TRING_ERROR (TRING_DEFERRED|TRING_WIN_COLL|TRING_UNDERRUN|TRING_CARR/*|TRING_COLL*/ ) - -/* description of the tx descriptors control bits */ -#define TD_FRAGLIST (0x0001) /* Desc points to a fragment list */ -#define TD_LLFORM (0x0002) /* Frag list format */ -#define TD_IAF (0x0004) /* Generate Interrupt after tx */ -#define TD_NOCRC (0x0008) /* No CRC generated */ -#define TD_LASTDESC (0x0010) /* Last desc for this frame */ - -#endif /* _EPIC100_H_ */ diff --git a/netboot/etherboot.h b/netboot/etherboot.h deleted file mode 100644 index e3e067c1b..000000000 --- a/netboot/etherboot.h +++ /dev/null @@ -1,544 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* RULE: You must define the macro ``GRUB'' when including this header - file in GRUB code. */ - -/* Based on "src/etherboot.h" in etherboot-5.0.5. */ - -/************************************************************************** -ETHERBOOT - BOOTP/TFTP Bootstrap Program - -Author: Martin Renters - Date: Dec/93 - -**************************************************************************/ - -/* Include GRUB-specific macros and prototypes here. */ -#include - -/* FIXME: For now, enable the DHCP support. Perhaps I should segregate - the DHCP support from the BOOTP support, and permit both to - co-exist. */ -#undef NO_DHCP_SUPPORT - -/* In GRUB, the relocated address in Etherboot doesn't have any sense. - Just define it as a bogus value. */ -#define RELOC 0 - -/* FIXME: Should be an option. */ -#define BACKOFF_LIMIT 7 - -#include - -#define CTRL_C 3 - -#ifndef MAX_TFTP_RETRIES -# define MAX_TFTP_RETRIES 20 -#endif - -#ifndef MAX_BOOTP_RETRIES -# define MAX_BOOTP_RETRIES 20 -#endif - -#define MAX_BOOTP_EXTLEN (ETH_FRAME_LEN - ETH_HLEN - \ - sizeof (struct bootp_t)) - -#ifndef MAX_ARP_RETRIES -# define MAX_ARP_RETRIES 20 -#endif - -#ifndef MAX_RPC_RETRIES -# define MAX_RPC_RETRIES 20 -#endif - -#define TICKS_PER_SEC 18 - -/* Inter-packet retry in ticks */ -#define TIMEOUT (10 * TICKS_PER_SEC) - -/* These settings have sense only if compiled with -DCONGESTED */ -/* total retransmission timeout in ticks */ -#define TFTP_TIMEOUT (30 * TICKS_PER_SEC) -/* packet retransmission timeout in ticks */ -#define TFTP_REXMT (3 * TICKS_PER_SEC) - -#ifndef NULL -# define NULL ((void *) 0) -#endif - -/* - I'm moving towards the defined names in linux/if_ether.h for clarity. - The confusion between 60/64 and 1514/1518 arose because the NS8390 - counts the 4 byte frame checksum in the incoming packet, but not - in the outgoing packet. 60/1514 are the correct numbers for most - if not all of the other NIC controllers. I will be retiring the - 64/1518 defines in the lead-up to 5.0. -*/ - -#define ETH_ALEN 6 /* Size of Ethernet address */ -#define ETH_HLEN 14 /* Size of ethernet header */ -#define ETH_ZLEN 60 /* Minimum packet */ -/*#define ETH_MIN_PACKET 64*/ -#define ETH_FRAME_LEN 1514 /* Maximum packet */ -/*#define ETH_MAX_PACKET 1518*/ -/* Because some DHCP/BOOTP servers don't treat the maximum length the same - as Etherboot, subtract the size of an IP header and that of an UDP - header. */ -#define ETH_MAX_MTU (ETH_FRAME_LEN - ETH_HLEN \ - - sizeof (struct iphdr) \ - - sizeof (struct udphdr)) - -#define ARP_CLIENT 0 -#define ARP_SERVER 1 -#define ARP_GATEWAY 2 -#define ARP_ROOTSERVER 3 -#define ARP_SWAPSERVER 4 -#define MAX_ARP ARP_SWAPSERVER+1 - -#define RARP_REQUEST 3 -#define RARP_REPLY 4 - -#define IP 0x0800 -#define ARP 0x0806 -#define RARP 0x8035 - -#define BOOTP_SERVER 67 -#define BOOTP_CLIENT 68 -#define TFTP_PORT 69 -#define SUNRPC_PORT 111 - -#define IP_UDP 17 -/* Same after going through htonl */ -#define IP_BROADCAST 0xFFFFFFFF - -#define ARP_REQUEST 1 -#define ARP_REPLY 2 - -#define BOOTP_REQUEST 1 -#define BOOTP_REPLY 2 - -#define TAG_LEN(p) (*((p) + 1)) -#define RFC1533_COOKIE 99, 130, 83, 99 -#define RFC1533_PAD 0 -#define RFC1533_NETMASK 1 -#define RFC1533_TIMEOFFSET 2 -#define RFC1533_GATEWAY 3 -#define RFC1533_TIMESERVER 4 -#define RFC1533_IEN116NS 5 -#define RFC1533_DNS 6 -#define RFC1533_LOGSERVER 7 -#define RFC1533_COOKIESERVER 8 -#define RFC1533_LPRSERVER 9 -#define RFC1533_IMPRESSSERVER 10 -#define RFC1533_RESOURCESERVER 11 -#define RFC1533_HOSTNAME 12 -#define RFC1533_BOOTFILESIZE 13 -#define RFC1533_MERITDUMPFILE 14 -#define RFC1533_DOMAINNAME 15 -#define RFC1533_SWAPSERVER 16 -#define RFC1533_ROOTPATH 17 -#define RFC1533_EXTENSIONPATH 18 -#define RFC1533_IPFORWARDING 19 -#define RFC1533_IPSOURCEROUTING 20 -#define RFC1533_IPPOLICYFILTER 21 -#define RFC1533_IPMAXREASSEMBLY 22 -#define RFC1533_IPTTL 23 -#define RFC1533_IPMTU 24 -#define RFC1533_IPMTUPLATEAU 25 -#define RFC1533_INTMTU 26 -#define RFC1533_INTLOCALSUBNETS 27 -#define RFC1533_INTBROADCAST 28 -#define RFC1533_INTICMPDISCOVER 29 -#define RFC1533_INTICMPRESPOND 30 -#define RFC1533_INTROUTEDISCOVER 31 -#define RFC1533_INTROUTESOLICIT 32 -#define RFC1533_INTSTATICROUTES 33 -#define RFC1533_LLTRAILERENCAP 34 -#define RFC1533_LLARPCACHETMO 35 -#define RFC1533_LLETHERNETENCAP 36 -#define RFC1533_TCPTTL 37 -#define RFC1533_TCPKEEPALIVETMO 38 -#define RFC1533_TCPKEEPALIVEGB 39 -#define RFC1533_NISDOMAIN 40 -#define RFC1533_NISSERVER 41 -#define RFC1533_NTPSERVER 42 -#define RFC1533_VENDOR 43 -#define RFC1533_NBNS 44 -#define RFC1533_NBDD 45 -#define RFC1533_NBNT 46 -#define RFC1533_NBSCOPE 47 -#define RFC1533_XFS 48 -#define RFC1533_XDM 49 -#ifndef NO_DHCP_SUPPORT -#define RFC2132_REQ_ADDR 50 -#define RFC2132_MSG_TYPE 53 -#define RFC2132_SRV_ID 54 -#define RFC2132_PARAM_LIST 55 -#define RFC2132_MAX_SIZE 57 -#define RFC2132_VENDOR_CLASS_ID 60 - -#define DHCPDISCOVER 1 -#define DHCPOFFER 2 -#define DHCPREQUEST 3 -#define DHCPACK 5 -#endif /* NO_DHCP_SUPPORT */ - -#define RFC1533_VENDOR_MAJOR 0 -#define RFC1533_VENDOR_MINOR 0 - -#define RFC1533_VENDOR_MAGIC 128 -#define RFC1533_VENDOR_ADDPARM 129 -#define RFC1533_VENDOR_MNUOPTS 160 -#define RFC1533_VENDOR_SELECTION 176 -#define RFC1533_VENDOR_MOTD 184 -#define RFC1533_VENDOR_NUMOFMOTD 8 -#define RFC1533_VENDOR_IMG 192 -#define RFC1533_VENDOR_NUMOFIMG 16 - -#define RFC1533_VENDOR_CONFIGFILE 150 - -#define RFC1533_END 255 - -#define BOOTP_VENDOR_LEN 64 -#ifndef NO_DHCP_SUPPORT -#define DHCP_OPT_LEN 312 -#endif /* NO_DHCP_SUPPORT */ - -#define TFTP_DEFAULTSIZE_PACKET 512 -#define TFTP_MAX_PACKET 1432 /* 512 */ - -#define TFTP_RRQ 1 -#define TFTP_WRQ 2 -#define TFTP_DATA 3 -#define TFTP_ACK 4 -#define TFTP_ERROR 5 -#define TFTP_OACK 6 - -#define TFTP_CODE_EOF 1 -#define TFTP_CODE_MORE 2 -#define TFTP_CODE_ERROR 3 -#define TFTP_CODE_BOOT 4 -#define TFTP_CODE_CFG 5 - -#define AWAIT_ARP 0 -#define AWAIT_BOOTP 1 -#define AWAIT_TFTP 2 -#define AWAIT_RARP 3 -#define AWAIT_RPC 4 -#define AWAIT_QDRAIN 5 /* drain queue, process ARP requests */ - -typedef struct -{ - unsigned long s_addr; -} -in_addr; - -struct arptable_t -{ - in_addr ipaddr; - unsigned char node[6]; -}; - -/* - * A pity sipaddr and tipaddr are not longword aligned or we could use - * in_addr. No, I don't want to use #pragma packed. - */ -struct arprequest -{ - unsigned short hwtype; - unsigned short protocol; - char hwlen; - char protolen; - unsigned short opcode; - char shwaddr[6]; - char sipaddr[4]; - char thwaddr[6]; - char tipaddr[4]; -}; - -struct iphdr -{ - char verhdrlen; - char service; - unsigned short len; - unsigned short ident; - unsigned short frags; - char ttl; - char protocol; - unsigned short chksum; - in_addr src; - in_addr dest; -}; - -struct udphdr -{ - unsigned short src; - unsigned short dest; - unsigned short len; - unsigned short chksum; -}; - -/* Format of a bootp packet. */ -struct bootp_t -{ - char bp_op; - char bp_htype; - char bp_hlen; - char bp_hops; - unsigned long bp_xid; - unsigned short bp_secs; - unsigned short unused; - in_addr bp_ciaddr; - in_addr bp_yiaddr; - in_addr bp_siaddr; - in_addr bp_giaddr; - char bp_hwaddr[16]; - char bp_sname[64]; - char bp_file[128]; -#ifdef NO_DHCP_SUPPORT - char bp_vend[BOOTP_VENDOR_LEN]; -#else - char bp_vend[DHCP_OPT_LEN]; -#endif /* NO_DHCP_SUPPORT */ -}; - -/* Format of a bootp IP packet. */ -struct bootpip_t -{ - struct iphdr ip; - struct udphdr udp; - struct bootp_t bp; -}; - -/* Format of bootp packet with extensions. */ -struct bootpd_t -{ - struct bootp_t bootp_reply; - unsigned char bootp_extension[MAX_BOOTP_EXTLEN]; -}; - -struct tftp_t -{ - struct iphdr ip; - struct udphdr udp; - unsigned short opcode; - union - { - char rrq[TFTP_DEFAULTSIZE_PACKET]; - - struct - { - unsigned short block; - char download[TFTP_MAX_PACKET]; - } - data; - - struct - { - unsigned short block; - } - ack; - - struct - { - unsigned short errcode; - char errmsg[TFTP_DEFAULTSIZE_PACKET]; - } - err; - - struct - { - char data[TFTP_DEFAULTSIZE_PACKET+2]; - } - oack; - } - u; -}; - -/* Define a smaller tftp packet solely for making requests to conserve stack - 512 bytes should be enough. */ -struct tftpreq_t -{ - struct iphdr ip; - struct udphdr udp; - unsigned short opcode; - union - { - char rrq[512]; - - struct - { - unsigned short block; - } - ack; - - struct - { - unsigned short errcode; - char errmsg[512-2]; - } - err; - } - u; -}; - -#define TFTP_MIN_PACKET (sizeof(struct iphdr) + sizeof(struct udphdr) + 4) - -struct rpc_t -{ - struct iphdr ip; - struct udphdr udp; - union - { - char data[300]; /* longest RPC call must fit!!!! */ - - struct - { - long id; - long type; - long rpcvers; - long prog; - long vers; - long proc; - long data[1]; - } - call; - - struct - { - long id; - long type; - long rstatus; - long verifier; - long v2; - long astatus; - long data[1]; - } - reply; - } - u; -}; - -#define PROG_PORTMAP 100000 -#define PROG_NFS 100003 -#define PROG_MOUNT 100005 - -#define MSG_CALL 0 -#define MSG_REPLY 1 - -#define PORTMAP_GETPORT 3 - -#define MOUNT_ADDENTRY 1 -#define MOUNT_UMOUNTALL 4 - -#define NFS_LOOKUP 4 -#define NFS_READ 6 - -#define NFS_FHSIZE 32 - -#define NFSERR_PERM 1 -#define NFSERR_NOENT 2 -#define NFSERR_ACCES 13 - -/* Block size used for NFS read accesses. A RPC reply packet (including all - * headers) must fit within a single Ethernet frame to avoid fragmentation. - * Chosen to be a power of two, as most NFS servers are optimized for this. */ -#define NFS_READ_SIZE 1024 - -#define FLOPPY_BOOT_LOCATION 0x7c00 -/* Must match offsets in loader.S */ -#define ROM_SEGMENT 0x1fa -#define ROM_LENGTH 0x1fc - -#define ROM_INFO_LOCATION (FLOPPY_BOOT_LOCATION + ROM_SEGMENT) -/* at end of floppy boot block */ - -struct rom_info -{ - unsigned short rom_segment; - unsigned short rom_length; -}; - -static inline int -rom_address_ok (struct rom_info *rom, int assigned_rom_segment) -{ - return (assigned_rom_segment < 0xC000 - || assigned_rom_segment == rom->rom_segment); -} - -/* Define a type for passing info to a loaded program. */ -struct ebinfo -{ - unsigned char major, minor; /* Version */ - unsigned short flags; /* Bit flags */ -}; - -/*************************************************************************** -External prototypes -***************************************************************************/ -/* main.c */ -extern void print_network_configuration (void); -extern int ifconfig (char *ip, char *sm, char *gw, char *svr); -extern int udp_transmit (unsigned long destip, unsigned int srcsock, - unsigned int destsock, int len, const void *buf); -extern int await_reply (int type, int ival, void *ptr, int timeout); -extern int decode_rfc1533 (unsigned char *, int, int, int); -extern long rfc2131_sleep_interval (int base, int exp); -extern void cleanup (void); -extern int rarp (void); -extern int bootp (void); -extern void cleanup_net (void); - -/* config.c */ -extern void print_config (void); -extern void eth_reset (void); -extern int eth_probe (void); -extern int eth_poll (void); -extern void eth_transmit (const char *d, unsigned int t, - unsigned int s, const void *p); -extern void eth_disable (void); - -/* misc.c */ -extern void twiddle (void); -extern void sleep (int secs); -extern int getdec (char **s); -extern void etherboot_printf (const char *, ...); -extern int etherboot_sprintf (char *, const char *, ...); -extern int inet_aton (char *p, in_addr *i); - -/*************************************************************************** -External variables -***************************************************************************/ -/* main.c */ -extern int ip_abort; -extern int network_ready; -extern struct rom_info rom; -extern struct arptable_t arptable[MAX_ARP]; - -/* config.c */ -extern struct nic nic; - -/* Local hack - define some macros to use etherboot source files "as is". */ -#ifndef GRUB -# undef printf -# define printf etherboot_printf -# undef sprintf -# define sprintf etherboot_sprintf -#endif /* GRUB */ diff --git a/netboot/fa311.c b/netboot/fa311.c deleted file mode 100644 index df92a6837..000000000 --- a/netboot/fa311.c +++ /dev/null @@ -1,421 +0,0 @@ -/* - Driver for the National Semiconductor DP83810 Ethernet controller. - - Portions Copyright (C) 2001 Inprimis Technologies, Inc. - http://www.inprimis.com/ - - This driver is based (heavily) on the Linux driver for this chip - which is copyright 1999-2001 by Donald Becker. - - This software has no warranties expressed or implied for any - purpose. - - This software may be used and distributed according to the terms of - the GNU General Public License (GPL), incorporated herein by reference. - Drivers based on or derived from this code fall under the GPL and must - retain the authorship, copyright and license notice. This file is not - a complete program and may only be used when the entire operating - system is licensed under the GPL. License for under other terms may be - available. Contact the original author for details. - - The original author may be reached as becker@scyld.com, or at - Scyld Computing Corporation - 410 Severn Ave., Suite 210 - Annapolis MD 21403 -*/ - - -typedef unsigned char u8; -typedef signed char s8; -typedef unsigned short u16; -typedef signed short s16; -typedef unsigned int u32; -typedef signed int s32; - -#include "etherboot.h" -#include "nic.h" -#include "pci.h" - -#undef virt_to_bus -#define virt_to_bus(x) ((unsigned long)x) -#define cpu_to_le32(val) (val) -#define le32_to_cpu(val) (val) -#define virt_to_le32desc(addr) cpu_to_le32(virt_to_bus(addr)) -#define le32desc_to_virt(addr) bus_to_virt(le32_to_cpu(addr)) - -#define TX_RING_SIZE 1 -#define RX_RING_SIZE 4 -#define TIME_OUT 1000000 -#define PKT_BUF_SZ 1536 - -/* Offsets to the device registers. */ -enum register_offsets { - ChipCmd=0x00, ChipConfig=0x04, EECtrl=0x08, PCIBusCfg=0x0C, - IntrStatus=0x10, IntrMask=0x14, IntrEnable=0x18, - TxRingPtr=0x20, TxConfig=0x24, - RxRingPtr=0x30, RxConfig=0x34, - WOLCmd=0x40, PauseCmd=0x44, RxFilterAddr=0x48, RxFilterData=0x4C, - BootRomAddr=0x50, BootRomData=0x54, StatsCtrl=0x5C, StatsData=0x60, - RxPktErrs=0x60, RxMissed=0x68, RxCRCErrs=0x64, -}; - -/* Bit in ChipCmd. */ -enum ChipCmdBits { - ChipReset=0x100, RxReset=0x20, TxReset=0x10, RxOff=0x08, RxOn=0x04, - TxOff=0x02, TxOn=0x01, -}; - -/* Bits in the interrupt status/mask registers. */ -enum intr_status_bits { - IntrRxDone=0x0001, IntrRxIntr=0x0002, IntrRxErr=0x0004, IntrRxEarly=0x0008, - IntrRxIdle=0x0010, IntrRxOverrun=0x0020, - IntrTxDone=0x0040, IntrTxIntr=0x0080, IntrTxErr=0x0100, - IntrTxIdle=0x0200, IntrTxUnderrun=0x0400, - StatsMax=0x0800, LinkChange=0x4000, WOLPkt=0x2000, - RxResetDone=0x1000000, TxResetDone=0x2000000, - IntrPCIErr=0x00f00000, IntrNormalSummary=0x0251, IntrAbnormalSummary=0xED20, -}; - -/* Bits in the RxMode register. */ -enum rx_mode_bits { - AcceptErr=0x20, AcceptRunt=0x10, AcceptBroadcast=0xC0000000, - AcceptMulticast=0x00200000, AcceptAllMulticast=0x20000000, - AcceptAllPhys=0x10000000, AcceptMyPhys=0x08000000, -}; - -/* Bits in network_desc.status */ -enum desc_status_bits { - DescOwn=0x80000000, DescMore=0x40000000, DescIntr=0x20000000, - DescNoCRC=0x10000000, - DescPktOK=0x08000000, RxTooLong=0x00400000, -}; - -/* The Rx and Tx buffer descriptors. */ -struct netdev_desc { - u32 next_desc; - s32 cmd_status; - u32 addr; -}; - -static struct FA311_DEV { - unsigned int ioaddr; - unsigned short vendor; - unsigned short device; - unsigned int cur_rx; - unsigned int cur_tx; - unsigned int rx_buf_sz; - volatile struct netdev_desc *rx_head_desc; - volatile struct netdev_desc rx_ring[RX_RING_SIZE] __attribute__ ((aligned (4))); - volatile struct netdev_desc tx_ring[TX_RING_SIZE] __attribute__ ((aligned (4))); -} fa311_dev; - -static int eeprom_read(long ioaddr, int location); -static void init_ring(struct FA311_DEV *dev); -static void fa311_reset(struct nic *nic); -static int fa311_poll(struct nic *nic); -static void fa311_transmit(struct nic *nic, const char *d, unsigned int t, unsigned int s, const char *p); -static void fa311_disable(struct nic *nic); - -static char rx_packet[PKT_BUF_SZ * RX_RING_SIZE] __attribute__ ((aligned (4))); -static char tx_packet[PKT_BUF_SZ * TX_RING_SIZE] __attribute__ ((aligned (4))); - -struct nic * fa311_probe(struct nic *nic, unsigned short *io_addrs, struct pci_device *pci) -{ -int prev_eedata; -int i; -int duplex; -int tx_config; -int rx_config; -unsigned char macaddr[6]; -unsigned char mactest; -unsigned char pci_bus = 0; -struct FA311_DEV* dev = &fa311_dev; - - if (io_addrs == 0 || *io_addrs == 0) - return (0); - memset(dev, 0, sizeof(*dev)); - dev->vendor = pci->vendor; - dev->device = pci->dev_id; - dev->ioaddr = pci->membase; - - /* Work around the dropped serial bit. */ - prev_eedata = eeprom_read(dev->ioaddr, 6); - for (i = 0; i < 3; i++) { - int eedata = eeprom_read(dev->ioaddr, i + 7); - macaddr[i*2] = (eedata << 1) + (prev_eedata >> 15); - macaddr[i*2+1] = eedata >> 7; - prev_eedata = eedata; - } - mactest = 0; - for (i = 0; i < 6; i++) - mactest |= macaddr[i]; - if (mactest == 0) - return (0); - for (i = 0; i < 6; i++) - nic->node_addr[i] = macaddr[i]; - printf("%! ", nic->node_addr); - - adjust_pci_device(pci); - - fa311_reset(nic); - - nic->reset = fa311_reset; - nic->disable = fa311_disable; - nic->poll = fa311_poll; - nic->transmit = fa311_transmit; - - init_ring(dev); - - writel(virt_to_bus(dev->rx_ring), dev->ioaddr + RxRingPtr); - writel(virt_to_bus(dev->tx_ring), dev->ioaddr + TxRingPtr); - - for (i = 0; i < 6; i += 2) - { - writel(i, dev->ioaddr + RxFilterAddr); - writew(macaddr[i] + (macaddr[i+1] << 8), - dev->ioaddr + RxFilterData); - } - - /* Initialize other registers. */ - /* Configure for standard, in-spec Ethernet. */ - if (readl(dev->ioaddr + ChipConfig) & 0x20000000) - { /* Full duplex */ - tx_config = 0xD0801002; - rx_config = 0x10000020; - } - else - { - tx_config = 0x10801002; - rx_config = 0x0020; - } - writel(tx_config, dev->ioaddr + TxConfig); - writel(rx_config, dev->ioaddr + RxConfig); - - duplex = readl(dev->ioaddr + ChipConfig) & 0x20000000 ? 1 : 0; - if (duplex) { - rx_config |= 0x10000000; - tx_config |= 0xC0000000; - } else { - rx_config &= ~0x10000000; - tx_config &= ~0xC0000000; - } - writew(tx_config, dev->ioaddr + TxConfig); - writew(rx_config, dev->ioaddr + RxConfig); - - writel(AcceptBroadcast | AcceptAllMulticast | AcceptMyPhys, - dev->ioaddr + RxFilterAddr); - - writel(RxOn | TxOn, dev->ioaddr + ChipCmd); - writel(4, dev->ioaddr + StatsCtrl); /* Clear Stats */ - return nic; - -} - -static void fa311_reset(struct nic *nic) -{ -u32 chip_config; -struct FA311_DEV* dev = &fa311_dev; - - /* Reset the chip to erase previous misconfiguration. */ - outl(ChipReset, dev->ioaddr + ChipCmd); - - if ((readl(dev->ioaddr + ChipConfig) & 0xe000) != 0xe000) - { - chip_config = readl(dev->ioaddr + ChipConfig); - } -} - -static int fa311_poll(struct nic *nic) -{ -s32 desc_status; -int to; -int entry; -int retcode; -struct FA311_DEV* dev = &fa311_dev; - - retcode = 0; - entry = dev->cur_rx; - to = TIME_OUT; - while (to != 0) - { - desc_status = dev->rx_ring[entry].cmd_status; - if ((desc_status & DescOwn) != 0) - break; - else - --to; - } - if (to != 0) - { - readl(dev->ioaddr + IntrStatus); /* clear interrrupt bits */ - /* driver owns the next entry it's a new packet. Send it up. */ - if ((desc_status & (DescMore|DescPktOK|RxTooLong)) == DescPktOK) - { - nic->packetlen = (desc_status & 0x0fff) - 4; /* Omit CRC size. */ - memcpy(nic->packet, (char*)(dev->rx_ring[entry].addr), nic->packetlen); - retcode = 1; - } - /* Give the descriptor back to the chip */ - dev->rx_ring[entry].cmd_status = cpu_to_le32(dev->rx_buf_sz); - dev->cur_rx++; - if (dev->cur_rx >= RX_RING_SIZE) - dev->cur_rx = 0; - dev->rx_head_desc = &dev->rx_ring[dev->cur_rx]; - } - /* Restart Rx engine if stopped. */ - writel(RxOn, dev->ioaddr + ChipCmd); - return retcode; -} - -static void fa311_transmit(struct nic *nic, const char *destaddr, unsigned int type, unsigned int len, const char *data) -{ -unsigned short nstype; -s32 desc_status; -int to; -int entry; -char* txp; -unsigned char* s; -struct FA311_DEV* dev = &fa311_dev; - - /* Calculate the next Tx descriptor entry. */ - entry = dev->cur_tx; - txp = (char*)(dev->tx_ring[entry].addr); - - memcpy(txp, destaddr, ETH_ALEN); - memcpy(txp + ETH_ALEN, nic->node_addr, ETH_ALEN); - nstype = htons(type); - memcpy(txp + 12, (char*)&nstype, 2); - memcpy(txp + ETH_HLEN, data, len); - len += ETH_HLEN; - /* pad frame */ - if (len < ETH_ZLEN) - { - s = (unsigned char*)(txp+len); - while (s < (unsigned char*)(txp+ETH_ZLEN)) - *s++ = 0; - len = ETH_ZLEN; - } - dev->tx_ring[entry].cmd_status = cpu_to_le32(DescOwn | len); - dev->cur_tx++; - if (dev->cur_tx >= TX_RING_SIZE) - dev->cur_tx = 0; - - /* Wake the potentially-idle transmit channel. */ - writel(TxOn, dev->ioaddr + ChipCmd); - - /* wait for tranmission to complete */ - to = TIME_OUT; - while (to != 0) - { - desc_status = dev->tx_ring[entry].cmd_status; - if ((desc_status & DescOwn) == 0) - break; - else - --to; - } - - readl(dev->ioaddr + IntrStatus); /* clear interrrupt bits */ - return; -} - -static void fa311_disable(struct nic *nic) -{ -struct FA311_DEV* dev = &fa311_dev; - - /* Stop the chip's Tx and Rx processes. */ - writel(RxOff | TxOff, dev->ioaddr + ChipCmd); -} - - -/* Read the EEPROM and MII Management Data I/O (MDIO) interfaces. - The EEPROM code is for the common 93c06/46 EEPROMs with 6 bit addresses. */ - -/* Delay between EEPROM clock transitions. - No extra delay is needed with 33Mhz PCI, but future 66Mhz access may need - a delay. Note that pre-2.0.34 kernels had a cache-alignment bug that - made udelay() unreliable. - The old method of using an ISA access as a delay, __SLOW_DOWN_IO__, is - depricated. -*/ -#define eeprom_delay(ee_addr) inl(ee_addr) - -enum EEPROM_Ctrl_Bits { - EE_ShiftClk=0x04, EE_DataIn=0x01, EE_ChipSelect=0x08, EE_DataOut=0x02, -}; -#define EE_Write0 (EE_ChipSelect) -#define EE_Write1 (EE_ChipSelect | EE_DataIn) - -/* The EEPROM commands include the alway-set leading bit. */ -enum EEPROM_Cmds { - EE_WriteCmd=(5 << 6), EE_ReadCmd=(6 << 6), EE_EraseCmd=(7 << 6), -}; - - -static int eeprom_read(long addr, int location) -{ - int i; - int retval = 0; - int ee_addr = addr + EECtrl; - int read_cmd = location | EE_ReadCmd; - writel(EE_Write0, ee_addr); - - /* Shift the read command bits out. */ - for (i = 10; i >= 0; i--) { - short dataval = (read_cmd & (1 << i)) ? EE_Write1 : EE_Write0; - writel(dataval, ee_addr); - eeprom_delay(ee_addr); - writel(dataval | EE_ShiftClk, ee_addr); - eeprom_delay(ee_addr); - } - writel(EE_ChipSelect, ee_addr); - eeprom_delay(ee_addr); - - for (i = 0; i < 16; i++) { - writel(EE_ChipSelect | EE_ShiftClk, ee_addr); - eeprom_delay(ee_addr); - retval |= (readl(ee_addr) & EE_DataOut) ? 1 << i : 0; - writel(EE_ChipSelect, ee_addr); - eeprom_delay(ee_addr); - } - - /* Terminate the EEPROM access. */ - writel(EE_Write0, ee_addr); - writel(0, ee_addr); - return retval; -} - -/* Initialize the Rx and Tx rings, along with various 'dev' bits. */ -static void init_ring(struct FA311_DEV *dev) -{ - int i; - - dev->cur_rx = 0; - dev->cur_tx = 0; - - dev->rx_buf_sz = PKT_BUF_SZ; - dev->rx_head_desc = &dev->rx_ring[0]; - - /* Initialize all Rx descriptors. */ - for (i = 0; i < RX_RING_SIZE; i++) { - dev->rx_ring[i].next_desc = virt_to_le32desc(&dev->rx_ring[i+1]); - dev->rx_ring[i].cmd_status = DescOwn; - } - /* Mark the last entry as wrapping the ring. */ - dev->rx_ring[i-1].next_desc = virt_to_le32desc(&dev->rx_ring[0]); - - /* Fill in the Rx buffers. Handle allocation failure gracefully. */ - for (i = 0; i < RX_RING_SIZE; i++) { - dev->rx_ring[i].addr = (u32)(&rx_packet[PKT_BUF_SZ * i]); - dev->rx_ring[i].cmd_status = cpu_to_le32(dev->rx_buf_sz); - } - - for (i = 0; i < TX_RING_SIZE; i++) { - dev->tx_ring[i].next_desc = virt_to_le32desc(&dev->tx_ring[i+1]); - dev->tx_ring[i].cmd_status = 0; - } - dev->tx_ring[i-1].next_desc = virt_to_le32desc(&dev->tx_ring[0]); - - for (i = 0; i < TX_RING_SIZE; i++) - dev->tx_ring[i].addr = (u32)(&tx_packet[PKT_BUF_SZ * i]); - return; -} - diff --git a/netboot/fsys_tftp.c b/netboot/fsys_tftp.c deleted file mode 100644 index b0233e8fe..000000000 --- a/netboot/fsys_tftp.c +++ /dev/null @@ -1,497 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000,2001,2002,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* Based on "src/main.c" in etherboot-4.5.8. */ -/************************************************************************** -ETHERBOOT - BOOTP/TFTP Bootstrap Program - -Author: Martin Renters - Date: Dec/93 - -**************************************************************************/ - -/* #define TFTP_DEBUG 1 */ - -#include - -#define GRUB 1 -#include -#include - -static int retry; -static unsigned short iport = 2000; -static unsigned short oport; -static unsigned short block, prevblock; -static int bcounter; -static struct tftp_t tp, saved_tp; -static int packetsize; -static int buf_eof, buf_read; -static int saved_filepos; -static unsigned short len, saved_len; -static char *buf; - -/* Fill the buffer by receiving the data via the TFTP protocol. */ -static int -buf_fill (int abort) -{ -#ifdef TFTP_DEBUG - grub_printf ("buf_fill (%d)\n", abort); -#endif - - while (! buf_eof && (buf_read + packetsize <= FSYS_BUFLEN)) - { - struct tftp_t *tr; - long timeout; - -#ifdef CONGESTED - timeout = rfc2131_sleep_interval (block ? TFTP_REXMT : TIMEOUT, retry); -#else - timeout = rfc2131_sleep_interval (TIMEOUT, retry); -#endif - - if (! await_reply (AWAIT_TFTP, iport, NULL, timeout)) - { - if (ip_abort) - return 0; - - if (! block && retry++ < MAX_TFTP_RETRIES) - { - /* Maybe initial request was lost. */ -#ifdef TFTP_DEBUG - grub_printf ("Maybe initial request was lost.\n"); -#endif - if (! udp_transmit (arptable[ARP_SERVER].ipaddr.s_addr, - ++iport, TFTP_PORT, len, &tp)) - return 0; - - continue; - } - -#ifdef CONGESTED - if (block && ((retry += TFTP_REXMT) < TFTP_TIMEOUT)) - { - /* We resend our last ack. */ -# ifdef TFTP_DEBUG - grub_printf ("\n"); -# endif - udp_transmit (arptable[ARP_SERVER].ipaddr.s_addr, - iport, oport, - TFTP_MIN_PACKET, &tp); - continue; - } -#endif - /* Timeout. */ - return 0; - } - - tr = (struct tftp_t *) &nic.packet[ETH_HLEN]; - if (tr->opcode == ntohs (TFTP_ERROR)) - { - grub_printf ("TFTP error %d (%s)\n", - ntohs (tr->u.err.errcode), - tr->u.err.errmsg); - return 0; - } - - if (tr->opcode == ntohs (TFTP_OACK)) - { - char *p = tr->u.oack.data, *e; - -#ifdef TFTP_DEBUG - grub_printf ("OACK "); -#endif - /* Shouldn't happen. */ - if (prevblock) - { - /* Ignore it. */ - grub_printf ("%s:%d: warning: PREVBLOCK != 0 (0x%x)\n", - __FILE__, __LINE__, prevblock); - continue; - } - - len = ntohs (tr->udp.len) - sizeof (struct udphdr) - 2; - if (len > TFTP_MAX_PACKET) - goto noak; - - e = p + len; - while (*p != '\000' && p < e) - { - if (! grub_strcmp ("blksize", p)) - { - p += 8; - if ((packetsize = getdec (&p)) < TFTP_DEFAULTSIZE_PACKET) - goto noak; -#ifdef TFTP_DEBUG - grub_printf ("blksize = %d\n", packetsize); -#endif - } - else if (! grub_strcmp ("tsize", p)) - { - p += 6; - if ((filemax = getdec (&p)) < 0) - { - filemax = -1; - goto noak; - } -#ifdef TFTP_DEBUG - grub_printf ("tsize = %d\n", filemax); -#endif - } - else - { - noak: -#ifdef TFTP_DEBUG - grub_printf ("NOAK\n"); -#endif - tp.opcode = htons (TFTP_ERROR); - tp.u.err.errcode = 8; - len = (grub_sprintf ((char *) tp.u.err.errmsg, - "RFC1782 error") - + sizeof (tp.ip) + sizeof (tp.udp) - + sizeof (tp.opcode) + sizeof (tp.u.err.errcode) - + 1); - udp_transmit (arptable[ARP_SERVER].ipaddr.s_addr, - iport, ntohs (tr->udp.src), - len, &tp); - return 0; - } - - while (p < e && *p) - p++; - - if (p < e) - p++; - } - - if (p > e) - goto noak; - - /* This ensures that the packet does not get processed as - data! */ - block = tp.u.ack.block = 0; - } - else if (tr->opcode == ntohs (TFTP_DATA)) - { -#ifdef TFTP_DEBUG - grub_printf ("DATA "); -#endif - len = ntohs (tr->udp.len) - sizeof (struct udphdr) - 4; - - /* Shouldn't happen. */ - if (len > packetsize) - { - /* Ignore it. */ - grub_printf ("%s:%d: warning: LEN > PACKETSIZE (0x%x > 0x%x)\n", - __FILE__, __LINE__, len, packetsize); - continue; - } - - block = ntohs (tp.u.ack.block = tr->u.data.block); - } - else - /* Neither TFTP_OACK nor TFTP_DATA. */ - break; - - if ((block || bcounter) && (block != prevblock + (unsigned short) 1)) - /* Block order should be continuous */ - tp.u.ack.block = htons (block = prevblock); - - /* Should be continuous. */ - tp.opcode = abort ? htons (TFTP_ERROR) : htons (TFTP_ACK); - oport = ntohs (tr->udp.src); - -#ifdef TFTP_DEBUG - grub_printf ("ACK\n"); -#endif - /* Ack. */ - udp_transmit (arptable[ARP_SERVER].ipaddr.s_addr, iport, - oport, TFTP_MIN_PACKET, &tp); - - if (abort) - { - buf_eof = 1; - break; - } - - /* Retransmission or OACK. */ - if ((unsigned short) (block - prevblock) != 1) - /* Don't process. */ - continue; - - prevblock = block; - /* Is it the right place to zero the timer? */ - retry = 0; - - /* In GRUB, this variable doesn't play any important role at all, - but use it for consistency with Etherboot. */ - bcounter++; - - /* Copy the downloaded data to the buffer. */ - grub_memmove (buf + buf_read, tr->u.data.download, len); - buf_read += len; - - /* End of data. */ - if (len < packetsize) - buf_eof = 1; - } - - return 1; -} - -/* Send the RRQ whose length is LEN. */ -static int -send_rrq (void) -{ - /* Initialize some variables. */ - retry = 0; - block = 0; - prevblock = 0; - packetsize = TFTP_DEFAULTSIZE_PACKET; - bcounter = 0; - - buf = (char *) FSYS_BUF; - buf_eof = 0; - buf_read = 0; - saved_filepos = 0; - - /* Clear out the Rx queue first. It contains nothing of interest, - * except possibly ARP requests from the DHCP/TFTP server. We use - * polling throughout Etherboot, so some time may have passed since we - * last polled the receive queue, which may now be filled with - * broadcast packets. This will cause the reply to the packets we are - * about to send to be lost immediately. Not very clever. */ - await_reply (AWAIT_QDRAIN, 0, NULL, 0); - -#ifdef TFTP_DEBUG - grub_printf ("send_rrq ()\n"); - { - int i; - char *p; - - for (i = 0, p = (char *) &tp; i < len; i++) - if (p[i] >= ' ' && p[i] <= '~') - grub_putchar (p[i]); - else - grub_printf ("\\%x", (unsigned) p[i]); - - grub_putchar ('\n'); - } -#endif - /* Send the packet. */ - return udp_transmit (arptable[ARP_SERVER].ipaddr.s_addr, ++iport, - TFTP_PORT, len, &tp); -} - -/* Mount the network drive. If the drive is ready, return one, otherwise - return zero. */ -int -tftp_mount (void) -{ - /* Check if the current drive is the network drive. */ - if (current_drive != NETWORK_DRIVE) - return 0; - - /* If the drive is not initialized yet, abort. */ - if (! network_ready) - return 0; - - return 1; -} - -/* Read up to SIZE bytes, returned in ADDR. */ -int -tftp_read (char *addr, int size) -{ - /* How many bytes is read? */ - int ret = 0; - -#ifdef TFTP_DEBUG - grub_printf ("tftp_read (0x%x, %d)\n", (int) addr, size); -#endif - - if (filepos < saved_filepos) - { - /* Uggh.. FILEPOS has been moved backwards. So reopen the file. */ - buf_read = 0; - buf_fill (1); - grub_memmove ((char *) &tp, (char *) &saved_tp, saved_len); - len = saved_len; -#ifdef TFTP_DEBUG - { - int i; - grub_printf ("opcode = 0x%x, rrq = ", (unsigned long) tp.opcode); - for (i = 0; i < TFTP_DEFAULTSIZE_PACKET; i++) - { - if (tp.u.rrq[i] >= ' ' && tp.u.rrq[i] <= '~') - grub_putchar (tp.u.rrq[i]); - else - grub_putchar ('*'); - } - grub_putchar ('\n'); - } -#endif - - if (! send_rrq ()) - { - errnum = ERR_WRITE; - return 0; - } - } - - while (size > 0) - { - int amt = buf_read + saved_filepos - filepos; - - /* If the length that can be copied from the buffer is over the - requested size, cut it down. */ - if (amt > size) - amt = size; - - if (amt > 0) - { - /* Copy the buffer to the supplied memory space. */ - grub_memmove (addr, buf + filepos - saved_filepos, amt); - size -= amt; - addr += amt; - filepos += amt; - ret += amt; - - /* If the size of the empty space becomes small, move the unused - data forwards. */ - if (filepos - saved_filepos > FSYS_BUFLEN / 2) - { - grub_memmove (buf, buf + FSYS_BUFLEN / 2, FSYS_BUFLEN / 2); - buf_read -= FSYS_BUFLEN / 2; - saved_filepos += FSYS_BUFLEN / 2; - } - } - else - { - /* Skip the whole buffer. */ - saved_filepos += buf_read; - buf_read = 0; - } - - /* Read the data. */ - if (size > 0 && ! buf_fill (0)) - { - errnum = ERR_READ; - return 0; - } - - /* Sanity check. */ - if (size > 0 && buf_read == 0) - { - errnum = ERR_READ; - return 0; - } - } - - return ret; -} - -/* Check if the file DIRNAME really exists. Get the size and save it in - FILEMAX. */ -int -tftp_dir (char *dirname) -{ - int ch; - -#ifdef TFTP_DEBUG - grub_printf ("tftp_dir (%s)\n", dirname); -#endif - - /* In TFTP, there is no way to know what files exist. */ - if (print_possibilities) - return 1; - - /* Don't know the size yet. */ - filemax = -1; - - reopen: - /* Construct the TFTP request packet. */ - tp.opcode = htons (TFTP_RRQ); - /* Terminate the filename. */ - ch = nul_terminate (dirname); - /* Make the request string (octet, blksize and tsize). */ - len = (grub_sprintf ((char *) tp.u.rrq, - "%s%coctet%cblksize%c%d%ctsize%c0", - dirname, 0, 0, 0, TFTP_MAX_PACKET, 0, 0) - + sizeof (tp.ip) + sizeof (tp.udp) + sizeof (tp.opcode) + 1); - /* Restore the original DIRNAME. */ - dirname[grub_strlen (dirname)] = ch; - /* Save the TFTP packet so that we can reopen the file later. */ - grub_memmove ((char *) &saved_tp, (char *) &tp, len); - saved_len = len; - if (! send_rrq ()) - { - errnum = ERR_WRITE; - return 0; - } - - /* Read the data. */ - if (! buf_fill (0)) - { - errnum = ERR_FILE_NOT_FOUND; - return 0; - } - - if (filemax == -1) - { - /* The server doesn't support the "tsize" option, so we must read - the file twice... */ - - /* Zero the size of the file. */ - filemax = 0; - do - { - /* Add the length of the downloaded data. */ - filemax += buf_read; - /* Reset the offset. Just discard the contents of the buffer. */ - buf_read = 0; - /* Read the data. */ - if (! buf_fill (0)) - { - errnum = ERR_READ; - return 0; - } - } - while (! buf_eof); - - /* Maybe a few amounts of data remains. */ - filemax += buf_read; - - /* Retry the open instruction. */ - goto reopen; - } - - return 1; -} - -/* Close the file. */ -void -tftp_close (void) -{ -#ifdef TFTP_DEBUG - grub_printf ("tftp_close ()\n"); -#endif - - buf_read = 0; - buf_fill (1); -} diff --git a/netboot/i82586.c b/netboot/i82586.c deleted file mode 100644 index 15540c24d..000000000 --- a/netboot/i82586.c +++ /dev/null @@ -1,825 +0,0 @@ -/************************************************************************** -Etherboot - BOOTP/TFTP Bootstrap Program -i82586 NIC driver for Etherboot -Ken Yap, January 1998 -***************************************************************************/ - -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2, or (at - * your option) any later version. - */ - -#include "etherboot.h" -#include "nic.h" -#include "cards.h" -#include "timer.h" - -#define udelay(n) waiton_timer2(((n)*TICKS_PER_MS)/1000) - -/* Sources of information: - - Donald Becker's excellent 3c507 driver in Linux - Intel 82596 data sheet (yes, 82596; it has a 586 compatibility mode) -*/ - -/* Code below mostly stolen wholesale from 3c507.c driver in Linux */ - -/* - Details of the i82586. - - You'll really need the databook to understand the details of this part, - but the outline is that the i82586 has two separate processing units. - Both are started from a list of three configuration tables, of which only - the last, the System Control Block (SCB), is used after reset-time. The SCB - has the following fields: - Status word - Command word - Tx/Command block addr. - Rx block addr. - The command word accepts the following controls for the Tx and Rx units: - */ - -#define CUC_START 0x0100 -#define CUC_RESUME 0x0200 -#define CUC_SUSPEND 0x0300 -#define RX_START 0x0010 -#define RX_RESUME 0x0020 -#define RX_SUSPEND 0x0030 - -/* The Rx unit uses a list of frame descriptors and a list of data buffer - descriptors. We use full-sized (1518 byte) data buffers, so there is - a one-to-one pairing of frame descriptors to buffer descriptors. - - The Tx ("command") unit executes a list of commands that look like: - Status word Written by the 82586 when the command is done. - Command word Command in lower 3 bits, post-command action in upper 3 - Link word The address of the next command. - Parameters (as needed). - - Some definitions related to the Command Word are: - */ -#define CMD_EOL 0x8000 /* The last command of the list, stop. */ -#define CMD_SUSP 0x4000 /* Suspend after doing cmd. */ -#define CMD_INTR 0x2000 /* Interrupt after doing cmd. */ - -enum commands { - CmdNOp = 0, CmdSASetup = 1, CmdConfigure = 2, CmdMulticastList = 3, - CmdTx = 4, CmdTDR = 5, CmdDump = 6, CmdDiagnose = 7}; - -/* - Details of the EtherLink16 Implementation - - The 3c507 and NI5210 are generic shared-memory i82586 implementations. - 3c507: The host can map 16K, 32K, 48K, or 64K of the 64K memory into - 0x0[CD][08]0000, or all 64K into 0xF[02468]0000. - NI5210: The host can map 8k or 16k at 0x[CDE][048C]000 but we - assume 8k because to have 16k you cannot put a ROM on the NIC. - */ - -/* Offsets from the base I/O address. */ - -#ifdef INCLUDE_3C507 - -#define SA_DATA 0 /* Station address data, or 3Com signature. */ -#define MISC_CTRL 6 /* Switch the SA_DATA banks, and bus config bits. */ -#define RESET_IRQ 10 /* Reset the latched IRQ line. */ -#define I82586_ATTN 11 /* Frob the 82586 Channel Attention line. */ -#define ROM_CONFIG 13 -#define MEM_CONFIG 14 -#define IRQ_CONFIG 15 -#define EL16_IO_EXTENT 16 - -/* The ID port is used at boot-time to locate the ethercard. */ -#define ID_PORT 0x100 - -#endif - -#ifdef INCLUDE_NI5210 - -#define NI52_RESET 0 /* writing to this address, resets the i82586 */ -#define I82586_ATTN 1 /* channel attention, kick the 586 */ - -#endif - -#ifdef INCLUDE_EXOS205 - -#define EXOS205_RESET 0 /* writing to this address, resets the i82586 */ -#define I82586_ATTN 1 /* channel attention, kick the 586 */ - -#endif - -/* Offsets to registers in the mailbox (SCB). */ -#define iSCB_STATUS 0x8 -#define iSCB_CMD 0xA -#define iSCB_CBL 0xC /* Command BLock offset. */ -#define iSCB_RFA 0xE /* Rx Frame Area offset. */ - -/* Since the 3c507 maps the shared memory window so that the last byte is -at 82586 address FFFF, the first byte is at 82586 address 0, 16K, 32K, or -48K corresponding to window sizes of 64K, 48K, 32K and 16K respectively. -We can account for this be setting the 'SBC Base' entry in the ISCP table -below for all the 16 bit offset addresses, and also adding the 'SCB Base' -value to all 24 bit physical addresses (in the SCP table and the TX and RX -Buffer Descriptors). - -Mark -*/ - -/* - What follows in 'init_words[]' is the "program" that is downloaded to the - 82586 memory. It's mostly tables and command blocks, and starts at the - reset address 0xfffff6. This is designed to be similar to the EtherExpress, - thus the unusual location of the SCB at 0x0008. - - Even with the additional "don't care" values, doing it this way takes less - program space than initializing the individual tables, and I feel it's much - cleaner. - - The databook is particularly useless for the first two structures, I had - to use the Crynwr driver as an example. - - The memory setup is as follows: -*/ - -#define CONFIG_CMD 0x18 -#define SET_SA_CMD 0x24 -#define SA_OFFSET 0x2A -#define IDLELOOP 0x30 -#define TDR_CMD 0x38 -#define TDR_TIME 0x3C -#define DUMP_CMD 0x40 -#define DIAG_CMD 0x48 -#define SET_MC_CMD 0x4E -#define DUMP_DATA 0x56 /* A 170 byte buffer for dump and Set-MC into. */ - -#define TX_BUF_START 0x0100 -#define TX_BUF_SIZE (1518+14+20+16) /* packet+header+TBD */ - -#define RX_BUF_START 0x1000 -#define RX_BUF_SIZE (1518+14+18) /* packet+header+RBD */ -#define RX_BUF_END (mem_end - mem_start - 20) - -/* - That's it: only 86 bytes to set up the beast, including every extra - command available. The 170 byte buffer at DUMP_DATA is shared between the - Dump command (called only by the diagnostic program) and the SetMulticastList - command. - - To complete the memory setup you only have to write the station address at - SA_OFFSET and create the Tx & Rx buffer lists. - - The Tx command chain and buffer list is setup as follows: - A Tx command table, with the data buffer pointing to... - A Tx data buffer descriptor. The packet is in a single buffer, rather than - chaining together several smaller buffers. - A NoOp command, which initially points to itself, - And the packet data. - - A transmit is done by filling in the Tx command table and data buffer, - re-writing the NoOp command, and finally changing the offset of the last - command to point to the current Tx command. When the Tx command is finished, - it jumps to the NoOp, when it loops until the next Tx command changes the - "link offset" in the NoOp. This way the 82586 never has to go through the - slow restart sequence. - - The Rx buffer list is set up in the obvious ring structure. We have enough - memory (and low enough interrupt latency) that we can avoid the complicated - Rx buffer linked lists by alway associating a full-size Rx data buffer with - each Rx data frame. - - I currently use one transmit buffer starting at TX_BUF_START (0x0100), and - use the rest of memory, from RX_BUF_START to RX_BUF_END, for Rx buffers. - - */ - -static unsigned short init_words[] = { - /* System Configuration Pointer (SCP). */ -#if defined(INCLUDE_3C507) - 0x0000, /* Set bus size to 16 bits. */ -#else - 0x0001, /* Set bus size to 8 bits */ -#endif - 0,0, /* pad words. */ - 0x0000,0x0000, /* ISCP phys addr, set in init_82586_mem(). */ - - /* Intermediate System Configuration Pointer (ISCP). */ - 0x0001, /* Status word that's cleared when init is done. */ - 0x0008,0,0, /* SCB offset, (skip, skip) */ - - /* System Control Block (SCB). */ - 0,0xf000|RX_START|CUC_START, /* SCB status and cmd. */ - CONFIG_CMD, /* Command list pointer, points to Configure. */ - RX_BUF_START, /* Rx block list. */ - 0,0,0,0, /* Error count: CRC, align, buffer, overrun. */ - - /* 0x0018: Configure command. Change to put MAC data with packet. */ - 0, CmdConfigure, /* Status, command. */ - SET_SA_CMD, /* Next command is Set Station Addr. */ - 0x0804, /* "4" bytes of config data, 8 byte FIFO. */ - 0x2e40, /* Magic values, including MAC data location. */ - 0, /* Unused pad word. */ - - /* 0x0024: Setup station address command. */ - 0, CmdSASetup, - SET_MC_CMD, /* Next command. */ - 0xaa00,0xb000,0x0bad, /* Station address (to be filled in) */ - - /* 0x0030: NOP, looping back to itself. Point to first Tx buffer to Tx. */ - 0, CmdNOp, IDLELOOP, 0 /* pad */, - - /* 0x0038: A unused Time-Domain Reflectometer command. */ - 0, CmdTDR, IDLELOOP, 0, - - /* 0x0040: An unused Dump State command. */ - 0, CmdDump, IDLELOOP, DUMP_DATA, - - /* 0x0048: An unused Diagnose command. */ - 0, CmdDiagnose, IDLELOOP, - - /* 0x004E: An empty set-multicast-list command. */ - 0, CmdMulticastList, IDLELOOP, 0, -}; - -/* NIC specific static variables go here */ - -static unsigned short ioaddr, irq, scb_base; -static Address mem_start, mem_end; -static unsigned short rx_head, rx_tail; - -#define read_mem(m,s) fmemcpy((char *)s, m, sizeof(s)) - -static void setup_rx_buffers(struct nic *nic) -{ - Address write_ptr; - unsigned short cur_rx_buf; - static unsigned short rx_cmd[16] = { - 0x0000, /* Rx status */ - 0x0000, /* Rx command, only and last */ - RX_BUF_START, /* Link (will be adjusted) */ - RX_BUF_START + 22, /* Buffer offset (will be adjusted) */ - 0x0000, 0x0000, 0x0000, /* Pad for dest addr */ - 0x0000, 0x0000, 0x0000, /* Pad for source addr */ - 0x0000, /* Pad for protocol */ - 0x0000, /* Buffer: Actual count */ - -1, /* Buffer: Next (none) */ - RX_BUF_START + 0x20, /* Buffer: Address low (+ scb_base) (will be adjusted) */ - 0x0000, /* Buffer: Address high */ - 0x8000 | (RX_BUF_SIZE - 0x20) - }; - - cur_rx_buf = rx_head = RX_BUF_START; - do { /* While there is room for one more buffer */ - write_ptr = mem_start + cur_rx_buf; - /* adjust some contents */ - rx_cmd[1] = 0x0000; - rx_cmd[2] = cur_rx_buf + RX_BUF_SIZE; - rx_cmd[3] = cur_rx_buf + 22; - rx_cmd[13] = cur_rx_buf + 0x20 + scb_base; - memcpy((char *)write_ptr, (char *)rx_cmd, sizeof(rx_cmd)); - rx_tail = cur_rx_buf; - cur_rx_buf += RX_BUF_SIZE; - } while (cur_rx_buf <= RX_BUF_END - RX_BUF_SIZE); - /* Terminate the list by setting the EOL bit and wrap ther pointer - to make the list a ring. */ - write_ptr = mem_start + rx_tail; - rx_cmd[1] = 0xC000; - rx_cmd[2] = rx_head; - memcpy((char *)write_ptr, (char *)rx_cmd, sizeof(unsigned short) * 3); -} - -static void ack_status(void) -{ - unsigned short cmd, status; - unsigned short *shmem = (short *)mem_start; - - cmd = (status = shmem[iSCB_STATUS>>1]) & 0xf000; - if (status & 0x100) /* CU suspended? */ - cmd |= CUC_RESUME; - if ((status & 0x200) == 0) /* CU not active? */ - cmd |= CUC_START; - if (status & 0x010) /* RU suspended? */ - cmd |= RX_RESUME; - else if ((status & 0x040) == 0) /* RU not active? */ - cmd |= RX_START; - if (cmd == 0) /* Nothing to do */ - return; - shmem[iSCB_CMD>>1] = cmd; -#if defined(DEBUG) - printf("Status %hX Command %hX\n", status, cmd); -#endif - outb(0, ioaddr + I82586_ATTN); -} - -/************************************************************************** -RESET - Reset adapter -***************************************************************************/ - -static void i82586_reset(struct nic *nic) -{ - unsigned long time; - unsigned short *shmem = (short *)mem_start; - - /* put the card in its initial state */ - -#ifdef INCLUDE_3C507 - /* Enable loopback to protect the wire while starting up, - and hold the 586 in reset during the memory initialisation. */ - outb(0x20, ioaddr + MISC_CTRL); -#endif - - /* Fix the ISCP address and base. */ - init_words[3] = scb_base; - init_words[7] = scb_base; - - /* Write the words at 0xfff6. */ - /* Write the words at 0x0000. */ - /* Fill in the station address. */ - memcpy((char *)(mem_end - 10), (char *)init_words, 10); - memcpy((char *)mem_start, (char *)&init_words[5], sizeof(init_words) - 10); - memcpy((char *)mem_start + SA_OFFSET, nic->node_addr, ETH_ALEN); - setup_rx_buffers(nic); - -#ifdef INCLUDE_3C507 - /* Start the 586 by releasing the reset line, but leave loopback. */ - outb(0xA0, ioaddr + MISC_CTRL); -#endif - - /* This was time consuming to track down; you need to give two channel - attention signals to reliably start up the i82586. */ - outb(0, ioaddr + I82586_ATTN); - time = currticks() + TICKS_PER_SEC; /* allow 1 second to init */ - while ( - shmem[iSCB_STATUS>>1] == 0) - { - if (currticks() > time) - { - printf("i82586 initialisation timed out with status %hX, cmd %hX\n", - shmem[iSCB_STATUS>>1], shmem[iSCB_CMD>>1]); - break; - } - } - /* Issue channel-attn -- the 82586 won't start. */ - outb(0, ioaddr + I82586_ATTN); - -#ifdef INCLUDE_3C507 - /* Disable loopback. */ - outb(0x80, ioaddr + MISC_CTRL); -#endif -#if defined(DEBUG) - printf("i82586 status %hX, cmd %hX\n", - shmem[iSCB_STATUS>>1], shmem[iSCB_CMD>>1]); -#endif -} - -/************************************************************************** - POLL - Wait for a frame - ***************************************************************************/ -static int i82586_poll(struct nic *nic) -{ - int status; - unsigned short rfd_cmd, next_rx_frame, data_buffer_addr, - frame_status, pkt_len; - unsigned short *shmem = (short *)mem_start + rx_head; - - /* return true if there's an ethernet packet ready to read */ - if ( - ((frame_status = shmem[0]) & 0x8000) == 0) - return (0); /* nope */ - rfd_cmd = shmem[1]; - next_rx_frame = shmem[2]; - data_buffer_addr = shmem[3]; - pkt_len = shmem[11]; - status = 0; - if (rfd_cmd != 0 || data_buffer_addr != rx_head + 22 - || (pkt_len & 0xC000) != 0xC000) - printf("\nRx frame corrupt, discarded"); - else if ((frame_status & 0x2000) == 0) - printf("\nRx frame had error"); - else - { - /* We have a frame, copy it to our buffer */ - pkt_len &= 0x3FFF; - memcpy(nic->packet, (char *)mem_start + rx_head + 0x20, pkt_len); - /* Only packets not from ourself */ - if (memcmp(nic->packet + ETH_ALEN, nic->node_addr, ETH_ALEN) != 0) - { - nic->packetlen = pkt_len; - status = 1; - } - } - /* Clear the status word and set EOL on Rx frame */ - shmem[0] = 0; - shmem[1] = 0xC000; - *(short *)(mem_start + rx_tail + 2) = 0; - rx_tail = rx_head; - rx_head = next_rx_frame; - ack_status(); - return (status); -} - -/************************************************************************** - TRANSMIT - Transmit a frame - ***************************************************************************/ -static void i82586_transmit( - struct nic *nic, - const char *d, /* Destination */ - unsigned int t, /* Type */ - unsigned int s, /* size */ - const char *p) /* Packet */ -{ - Address bptr; - unsigned short type, z; - static unsigned short tx_cmd[11] = { - 0x0, /* Tx status */ - CmdTx, /* Tx command */ - TX_BUF_START+16, /* Next command is a NoOp */ - TX_BUF_START+8, /* Data Buffer offset */ - 0x8000, /* | with size */ - 0xffff, /* No next data buffer */ - TX_BUF_START+22, /* + scb_base */ - 0x0, /* Buffer address high bits (always zero) */ - 0x0, /* Nop status */ - CmdNOp, /* Nop command */ - TX_BUF_START+16 /* Next is myself */ - }; - unsigned short *shmem = (short *)mem_start + TX_BUF_START; - - /* send the packet to destination */ - /* adjust some contents */ - type = htons(t); - if (s < ETH_ZLEN) - s = ETH_ZLEN; - tx_cmd[4] = (s + ETH_HLEN) | 0x8000; - tx_cmd[6] = TX_BUF_START + 22 + scb_base; - bptr = mem_start + TX_BUF_START; - memcpy((char *)bptr, (char *)tx_cmd, sizeof(tx_cmd)); - bptr += sizeof(tx_cmd); - memcpy((char *)bptr, d, ETH_ALEN); - bptr += ETH_ALEN; - memcpy((char *)bptr, nic->node_addr, ETH_ALEN); - bptr += ETH_ALEN; - memcpy((char *)bptr, (char *)&type, sizeof(type)); - bptr += sizeof(type); - memcpy((char *)bptr, p, s); - /* Change the offset in the IDLELOOP */ - *(unsigned short *)(mem_start + IDLELOOP + 4) = TX_BUF_START; - /* Wait for transmit completion */ - while ( - (shmem[0] & 0x2000) == 0) - ; - /* Change the offset in the IDLELOOP back and - change the final loop to point here */ - *(unsigned short *)(mem_start + IDLELOOP + 4) = IDLELOOP; - *(unsigned short *)(mem_start + TX_BUF_START + 20) = IDLELOOP; - ack_status(); -} - -/************************************************************************** - DISABLE - Turn off ethernet interface - ***************************************************************************/ -static void i82586_disable(struct nic *nic) -{ - unsigned short *shmem = (short *)mem_start; - -#if 0 - /* Flush the Tx and disable Rx. */ - shmem[iSCB_CMD>>1] = RX_SUSPEND | CUC_SUSPEND; - outb(0, ioaddr + I82586_ATTN); -#ifdef INCLUDE_NI5210 - outb(0, ioaddr + NI52_RESET); -#endif -#endif /* 0 */ -} - -#ifdef INCLUDE_3C507 - -static int t507_probe1(struct nic *nic, unsigned short ioaddr) -{ - int i; - Address size; - char mem_config; - char if_port; - - if (inb(ioaddr) != '*' || inb(ioaddr+1) != '3' - || inb(ioaddr+2) != 'C' || inb(ioaddr+3) != 'O') - return (0); - irq = inb(ioaddr + IRQ_CONFIG) & 0x0f; - mem_config = inb(ioaddr + MEM_CONFIG); - if (mem_config & 0x20) - { - size = 65536L; - mem_start = 0xf00000L + (mem_config & 0x08 ? 0x080000L - : (((Address)mem_config & 0x3) << 17)); - } - else - { - size = ((((Address)mem_config & 0x3) + 1) << 14); - mem_start = 0x0c0000L + (((Address)mem_config & 0x18) << 12); - } - mem_end = mem_start + size; - scb_base = 65536L - size; - if_port = inb(ioaddr + ROM_CONFIG) & 0x80; - /* Get station address */ - outb(0x01, ioaddr + MISC_CTRL); - for (i = 0; i < ETH_ALEN; ++i) - { - nic->node_addr[i] = inb(ioaddr+i); - } - printf("\n3c507 ioaddr %#hX, IRQ %d, mem [%#X-%#X], %sternal xcvr, addr %!\n", - ioaddr, irq, mem_start, mem_end, if_port ? "in" : "ex", nic->node_addr); - return (1); -} - -/************************************************************************** -PROBE - Look for an adapter, this routine's visible to the outside -***************************************************************************/ - -struct nic *t507_probe(struct nic *nic, unsigned short *probe_addrs) -{ - static unsigned char init_ID_done = 0; - unsigned short lrs_state = 0xff; - static unsigned short io_addrs[] = { 0x300, 0x320, 0x340, 0x280, 0 }; - unsigned short *p; - int i; - - if (init_ID_done == 0) - { - /* Send the ID sequence to the ID_PORT to enable the board */ - outb(0x00, ID_PORT); - for (i = 0; i < 255; ++i) - { - outb(lrs_state, ID_PORT); - lrs_state <<= 1; - if (lrs_state & 0x100) - lrs_state ^= 0xe7; - } - outb(0x00, ID_PORT); - init_ID_done = 1; - } - /* if probe_addrs is 0, then routine can use a hardwired default */ - if (probe_addrs == 0) - probe_addrs = io_addrs; - for (p = probe_addrs; (ioaddr = *p) != 0; ++p) - if (t507_probe1(nic, ioaddr)) - break; - if (ioaddr != 0) - { - /* point to NIC specific routines */ - i82586_reset(nic); - nic->reset = i82586_reset; - nic->poll = i82586_poll; - nic->transmit = i82586_transmit; - nic->disable = i82586_disable; - return nic; - } - /* else */ - { - return 0; - } -} - -#endif - -#ifdef INCLUDE_NI5210 - -static int ni5210_probe2(void) -{ - unsigned short i; - unsigned short shmem[10]; - - /* Fix the ISCP address and base. */ - init_words[3] = scb_base; - init_words[7] = scb_base; - - /* Write the words at 0xfff6. */ - /* Write the words at 0x0000. */ - memcpy((char *)(mem_end - 10), (char *)init_words, 10); - memcpy((char *)mem_start, (char *)&init_words[5], sizeof(init_words) - 10); - if (*(unsigned short *)mem_start != 1) - return (0); - outb(0, ioaddr + NI52_RESET); - outb(0, ioaddr + I82586_ATTN); - udelay(32); - i = 50; - while ( - shmem[iSCB_STATUS>>1] == 0) - { - if (--i == 0) - { - printf("i82586 initialisation timed out with status %hX, cmd %hX\n", - shmem[iSCB_STATUS>>1], shmem[iSCB_CMD>>1]); - break; - } - } - /* Issue channel-attn -- the 82586 won't start. */ - outb(0, ioaddr + I82586_ATTN); - if (*(unsigned short *)mem_start != 0) - return (0); - return (1); -} - -static int ni5210_probe1(struct nic *nic) -{ - int i; - static Address mem_addrs[] = { - 0xc0000, 0xc4000, 0xc8000, 0xcc000, - 0xd0000, 0xd4000, 0xd8000, 0xdc000, - 0xe0000, 0xe4000, 0xe8000, 0xec000, - 0 }; - Address *p; - - if (inb(ioaddr + 6) != 0x0 || inb(ioaddr + 7) != 0x55) - return (0); - scb_base = -8192; /* assume 8k memory */ - for (p = mem_addrs; (mem_start = *p) != 0; ++p) - if (mem_end = mem_start + 8192, ni5210_probe2()) - break; - if (mem_start == 0) - return (0); - /* Get station address */ - for (i = 0; i < ETH_ALEN; ++i) - { - nic->node_addr[i] = inb(ioaddr+i); - } - printf("\nNI5210 ioaddr %#hX, mem [%#X-%#X], addr %!\n", - ioaddr, mem_start, mem_end, nic->node_addr); - return (1); -} - -struct nic *ni5210_probe(struct nic *nic, unsigned short *probe_addrs) -{ - /* missing entries are addresses usually already used */ - static unsigned short io_addrs[] = { - 0x200, 0x208, 0x210, 0x218, 0x220, 0x228, 0x230, 0x238, - 0x240, 0x248, 0x250, 0x258, 0x260, 0x268, 0x270, /*Par*/ - 0x280, 0x288, 0x290, 0x298, 0x2A0, 0x2A8, 0x2B0, 0x2B8, - 0x2C0, 0x2C8, 0x2D0, 0x2D8, 0x2E0, 0x2E8, 0x2F0, /*Ser*/ - 0x300, 0x308, 0x310, 0x318, 0x320, 0x328, 0x330, 0x338, - 0x340, 0x348, 0x350, 0x358, 0x360, 0x368, 0x370, /*Par*/ - 0x380, 0x388, 0x390, 0x398, 0x3A0, 0x3A8, /*Vid,Par*/ - 0x3C0, 0x3C8, 0x3D0, 0x3D8, 0x3E0, 0x3E8, /*Ser*/ - 0x0 - }; - unsigned short *p; - int i; - - /* if probe_addrs is 0, then routine can use a hardwired default */ - if (probe_addrs == 0) - probe_addrs = io_addrs; - for (p = probe_addrs; (ioaddr = *p) != 0; ++p) - if (ni5210_probe1(nic)) - break; - if (ioaddr != 0) - { - /* point to NIC specific routines */ - i82586_reset(nic); - nic->reset = i82586_reset; - nic->poll = i82586_poll; - nic->transmit = i82586_transmit; - nic->disable = i82586_disable; - return nic; - } - /* else */ - { - return 0; - } -} -#endif - -#ifdef INCLUDE_EXOS205 - -/* - * Code to download to I186 in EXOS205 - */ - -static unsigned char exos_i186_init[] = -{ -0x08,0x00,0x14,0x00,0x00,0x00,0xaa,0xfa,0x33,0xc0,0xba,0xfe,0xff,0xef,0xb8,0xf8, -0xff,0xe7,0xa0,0xb8,0x7c,0x00,0xe7,0xa4,0xb8,0xbc,0x80,0xe7,0xa8,0x8c,0xc8,0x8e, -0xd8,0xbb,0x2f,0x0e,0xc6,0x07,0xa5,0x33,0xc9,0xeb,0x00,0xeb,0x00,0xeb,0x00,0xe2, -0xf8,0xbe,0x2c,0x0e,0xba,0x02,0x05,0x33,0xdb,0xb9,0x03,0x00,0xec,0x24,0x0f,0x8a, -0xe0,0x02,0xd8,0x42,0x42,0xec,0x02,0xd8,0xd0,0xe0,0xd0,0xe0,0xd0,0xe0,0xd0,0xe0, -0x0a,0xc4,0x88,0x04,0x42,0x42,0x46,0xe2,0xe3,0x8a,0xe3,0xd0,0xec,0xd0,0xec,0xd0, -0xec,0xd0,0xec,0x80,0xe3,0x0f,0x02,0xe3,0x80,0xf4,0x05,0xec,0x3a,0xe0,0x74,0x05, -0xc6,0x04,0x5a,0xeb,0xfe,0xc6,0x04,0x55,0x33,0xc0,0x8e,0xd8,0xbe,0x38,0x00,0xc7, -0x04,0xce,0x0e,0x46,0x46,0xc7,0x04,0x00,0xff,0xfb,0xba,0x3c,0x00,0xb8,0x03,0x00, -0xef,0x33,0xdb,0x33,0xc9,0xbd,0x04,0x0f,0x90,0x90,0x90,0x90,0xe2,0xfa,0x43,0x2e, -0x89,0x5e,0x00,0xeb,0xf3,0x52,0xba,0x00,0x06,0xef,0x50,0x53,0x55,0xbd,0xf8,0x0e, -0x2e,0x8b,0x5e,0x00,0x43,0x2e,0x89,0x5e,0x00,0xba,0x22,0x00,0xb8,0x00,0x80,0xef, -0x5d,0x5b,0x58,0x5a,0xcf,0x49,0x4e,0x54,0x52,0x20,0x63,0x6e,0x74,0x2d,0x3e,0x00, -0x00,0x4c,0x4f,0x4f,0x50,0x20,0x63,0x6e,0x74,0x2d,0x3e,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xea,0x30,0x0e,0x00,0xff,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,00 -}; - -/* These offsets are from the end of the i186 download code */ - -#define OFFSET_SEMA 0x1D1 -#define OFFSET_ADDR 0x1D7 - -static int exos205_probe2(void) -{ - unsigned short i; - unsigned short shmem[10]; - - /* Fix the ISCP address and base. */ - init_words[3] = scb_base; - init_words[7] = scb_base; - - /* Write the words at 0xfff6. */ - /* Write the words at 0x0000. */ - memcpy((char *)(mem_end - 10), (char *)init_words, 10); - memcpy((char *)mem_start, (char *)&init_words[5], sizeof(init_words) - 10); - if (*(unsigned short *)mem_start != 1) - return (0); - outb(0, ioaddr + EXOS205_RESET); - outb(0, ioaddr + I82586_ATTN); - i = 50; - while ( - shmem[iSCB_STATUS>>1] == 0) - { - if (--i == 0) - { - printf("i82586 initialisation timed out with status %hX, cmd %hX\n", - shmem[iSCB_STATUS>>1], shmem[iSCB_CMD>>1]); - break; - } - } - /* Issue channel-attn -- the 82586 won't start. */ - outb(0, ioaddr + I82586_ATTN); - if (*(unsigned short *)mem_start != 0) - return (0); - return (1); -} - -static int exos205_probe1(struct nic *nic) -{ - int i; - /* If you know the other addresses please let me know */ - static Address mem_addrs[] = { - 0xcc000, 0 }; - Address *p; - - scb_base = -16384; /* assume 8k memory */ - for (p = mem_addrs; (mem_start = *p) != 0; ++p) - if (mem_end = mem_start + 16384, exos205_probe2()) - break; - if (mem_start == 0) - return (0); - /* Get station address */ - for (i = 0; i < ETH_ALEN; ++i) - { - nic->node_addr[i] = inb(ioaddr+i); - } - printf("\nEXOS205 ioaddr %#hX, mem [%#X-%#X], addr %!\n", - ioaddr, mem_start, mem_end, nic->node_addr); - return (1); -} - -struct nic *exos205_probe(struct nic *nic, unsigned short *probe_addrs) -{ - /* If you know the other addresses, please let me know */ - static unsigned short io_addrs[] = { - 0x310, 0x0 - }; - unsigned short *p; - int i; - - /* if probe_addrs is 0, then routine can use a hardwired default */ - if (probe_addrs == 0) - probe_addrs = io_addrs; - for (p = probe_addrs; (ioaddr = *p) != 0; ++p) - if (exos205_probe1(nic)) - break; - if (ioaddr != 0) - { - /* point to NIC specific routines */ - i82586_reset(nic); - nic->reset = i82586_reset; - nic->poll = i82586_poll; - nic->transmit = i82586_transmit; - nic->disable = i82586_disable; - return nic; - } - /* else */ - { - return 0; - } -} - -#endif diff --git a/netboot/lance.c b/netboot/lance.c deleted file mode 100644 index 9db11191d..000000000 --- a/netboot/lance.c +++ /dev/null @@ -1,564 +0,0 @@ -/************************************************************************** -Etherboot - BOOTP/TFTP Bootstrap Program -LANCE NIC driver for Etherboot -Large portions borrowed from the Linux LANCE driver by Donald Becker -Ken Yap, July 1997 -***************************************************************************/ - -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2, or (at - * your option) any later version. - */ - -/* to get some global routines like printf */ -#include "etherboot.h" -/* to get the interface to the body of the program */ -#include "nic.h" -#ifdef INCLUDE_LANCE -#include "pci.h" -#endif -#include "cards.h" - -/* Offsets from base I/O address */ -#if defined(INCLUDE_NE2100) || defined(INCLUDE_LANCE) -#define LANCE_ETH_ADDR 0x0 -#define LANCE_DATA 0x10 -#define LANCE_ADDR 0x12 -#define LANCE_RESET 0x14 -#define LANCE_BUS_IF 0x16 -#define LANCE_TOTAL_SIZE 0x18 -#endif -#ifdef INCLUDE_NI6510 -#define LANCE_ETH_ADDR 0x8 -#define LANCE_DATA 0x0 -#define LANCE_ADDR 0x2 -#define LANCE_RESET 0x4 -#define LANCE_BUS_IF 0x6 -#define LANCE_TOTAL_SIZE 0x10 -#endif - -/* lance_poll() now can use multiple Rx buffers to prevent packet loss. Set - * Set LANCE_LOG_RX_BUFFERS to 0..7 for 1, 2, 4, 8, 16, 32, 64 or 128 Rx - * buffers. Usually 4 (=16 Rx buffers) is a good value. (Andreas Neuhaus) - * Decreased to 2 (=4 Rx buffers) (Ken Yap, 20010305) */ - -#define LANCE_LOG_RX_BUFFERS 2 /* Use 2^2=4 Rx buffers */ - -#define RX_RING_SIZE (1 << (LANCE_LOG_RX_BUFFERS)) -#define RX_RING_MOD_MASK (RX_RING_SIZE - 1) -#define RX_RING_LEN_BITS ((LANCE_LOG_RX_BUFFERS) << 29) - -struct lance_init_block -{ - unsigned short mode; - unsigned char phys_addr[ETH_ALEN]; - unsigned long filter[2]; - Address rx_ring; - Address tx_ring; -}; - -struct lance_rx_head -{ - union { - Address base; - unsigned char addr[4]; - } u; - short buf_length; /* 2s complement */ - short msg_length; -}; - -struct lance_tx_head -{ - union { - Address base; - unsigned char addr[4]; - } u; - short buf_length; /* 2s complement */ - short misc; -}; - -struct lance_interface -{ - struct lance_init_block init_block; - struct lance_rx_head rx_ring[RX_RING_SIZE]; - struct lance_tx_head tx_ring; - unsigned char rbuf[RX_RING_SIZE][ETH_FRAME_LEN+4]; - unsigned char tbuf[ETH_FRAME_LEN]; - /* - * Do not alter the order of the struct members above; - * the hardware depends on the correct alignment. - */ - int rx_idx; -}; - -#define LANCE_MUST_PAD 0x00000001 -#define LANCE_ENABLE_AUTOSELECT 0x00000002 -#define LANCE_SELECT_PHONELINE 0x00000004 -#define LANCE_MUST_UNRESET 0x00000008 - -/* A mapping from the chip ID number to the part number and features. - These are from the datasheets -- in real life the '970 version - reportedly has the same ID as the '965. */ -static const struct lance_chip_type -{ - int id_number; - const char *name; - int flags; -} chip_table[] = { - {0x0000, "LANCE 7990", /* Ancient lance chip. */ - LANCE_MUST_PAD + LANCE_MUST_UNRESET}, - {0x0003, "PCnet/ISA 79C960", /* 79C960 PCnet/ISA. */ - LANCE_ENABLE_AUTOSELECT}, - {0x2260, "PCnet/ISA+ 79C961", /* 79C961 PCnet/ISA+, Plug-n-Play. */ - LANCE_ENABLE_AUTOSELECT}, - {0x2420, "PCnet/PCI 79C970", /* 79C970 or 79C974 PCnet-SCSI, PCI. */ - LANCE_ENABLE_AUTOSELECT}, - /* Bug: the PCnet/PCI actually uses the PCnet/VLB ID number, so just call - it the PCnet32. */ - {0x2430, "PCnet32", /* 79C965 PCnet for VL bus. */ - LANCE_ENABLE_AUTOSELECT}, - {0x2621, "PCnet/PCI-II 79C970A", /* 79C970A PCInetPCI II. */ - LANCE_ENABLE_AUTOSELECT}, - {0x2625, "PCnet-FAST III 79C973", /* 79C973 PCInet-FAST III. */ - LANCE_ENABLE_AUTOSELECT}, - {0x2626, "PCnet/HomePNA 79C978", - LANCE_ENABLE_AUTOSELECT|LANCE_SELECT_PHONELINE}, - {0x0, "PCnet (unknown)", - LANCE_ENABLE_AUTOSELECT}, -}; - -/* Define a macro for converting program addresses to real addresses */ -#undef virt_to_bus -#define virt_to_bus(x) ((unsigned long)x) - -static int chip_version; -static int lance_version; -static unsigned short ioaddr; -#ifndef INCLUDE_LANCE -static int dma; -#endif -static struct lance_interface *lp; - -/* additional 8 bytes for 8-byte alignment space */ -#ifdef USE_LOWMEM_BUFFER -#define lance ((char *)0x10000 - (sizeof(struct lance_interface)+8)) -#else -static char lance[sizeof(struct lance_interface)+8]; -#endif - -#ifndef INCLUDE_LANCE -/* DMA defines and helper routines */ - -/* DMA controller registers */ -#define DMA1_CMD_REG 0x08 /* command register (w) */ -#define DMA1_STAT_REG 0x08 /* status register (r) */ -#define DMA1_REQ_REG 0x09 /* request register (w) */ -#define DMA1_MASK_REG 0x0A /* single-channel mask (w) */ -#define DMA1_MODE_REG 0x0B /* mode register (w) */ -#define DMA1_CLEAR_FF_REG 0x0C /* clear pointer flip-flop (w) */ -#define DMA1_TEMP_REG 0x0D /* Temporary Register (r) */ -#define DMA1_RESET_REG 0x0D /* Master Clear (w) */ -#define DMA1_CLR_MASK_REG 0x0E /* Clear Mask */ -#define DMA1_MASK_ALL_REG 0x0F /* all-channels mask (w) */ - -#define DMA2_CMD_REG 0xD0 /* command register (w) */ -#define DMA2_STAT_REG 0xD0 /* status register (r) */ -#define DMA2_REQ_REG 0xD2 /* request register (w) */ -#define DMA2_MASK_REG 0xD4 /* single-channel mask (w) */ -#define DMA2_MODE_REG 0xD6 /* mode register (w) */ -#define DMA2_CLEAR_FF_REG 0xD8 /* clear pointer flip-flop (w) */ -#define DMA2_TEMP_REG 0xDA /* Temporary Register (r) */ -#define DMA2_RESET_REG 0xDA /* Master Clear (w) */ -#define DMA2_CLR_MASK_REG 0xDC /* Clear Mask */ -#define DMA2_MASK_ALL_REG 0xDE /* all-channels mask (w) */ - - -#define DMA_MODE_READ 0x44 /* I/O to memory, no autoinit, increment, single mode */ -#define DMA_MODE_WRITE 0x48 /* memory to I/O, no autoinit, increment, single mode */ -#define DMA_MODE_CASCADE 0xC0 /* pass thru DREQ->HRQ, DACK<-HLDA only */ - -/* enable/disable a specific DMA channel */ -static void enable_dma(unsigned int dmanr) -{ - if (dmanr <= 3) - outb_p(dmanr, DMA1_MASK_REG); - else - outb_p(dmanr & 3, DMA2_MASK_REG); -} - -static void disable_dma(unsigned int dmanr) -{ - if (dmanr <= 3) - outb_p(dmanr | 4, DMA1_MASK_REG); - else - outb_p((dmanr & 3) | 4, DMA2_MASK_REG); -} - -/* set mode (above) for a specific DMA channel */ -static void set_dma_mode(unsigned int dmanr, char mode) -{ - if (dmanr <= 3) - outb_p(mode | dmanr, DMA1_MODE_REG); - else - outb_p(mode | (dmanr&3), DMA2_MODE_REG); -} -#endif /* !INCLUDE_LANCE */ - -/************************************************************************** -RESET - Reset adapter -***************************************************************************/ -static void lance_reset(struct nic *nic) -{ - int i; - Address l; - - /* Reset the LANCE */ - (void)inw(ioaddr+LANCE_RESET); - /* Un-Reset the LANCE, needed only for the NE2100 */ - if (chip_table[lance_version].flags & LANCE_MUST_UNRESET) - outw(0, ioaddr+LANCE_RESET); - if (chip_table[lance_version].flags & LANCE_ENABLE_AUTOSELECT) - { - /* This is 79C960 specific; Turn on auto-select of media - (AUI, BNC). */ - outw(0x2, ioaddr+LANCE_ADDR); - /* Don't touch 10base2 power bit. */ - outw(inw(ioaddr+LANCE_BUS_IF) | 0x2, ioaddr+LANCE_BUS_IF); - } - /* HomePNA cards need to explicitly pick the phoneline interface. - * Some of these cards have ethernet interfaces as well, this - * code might require some modification for those. - */ - if (chip_table[lance_version].flags & LANCE_SELECT_PHONELINE) { - short media, check ; - /* this is specific to HomePNA cards... */ - outw(49, ioaddr+0x12) ; - media = inw(ioaddr+0x16) ; -#ifdef DEBUG - printf("media was %d\n", media) ; -#endif - media &= ~3 ; - media |= 1 ; -#ifdef DEBUG - printf("media changed to %d\n", media) ; -#endif - media &= ~3 ; - media |= 1 ; - outw(49, ioaddr+0x12) ; - outw(media, ioaddr+0x16) ; - outw(49, ioaddr+0x12) ; - check = inw(ioaddr+0x16) ; -#ifdef DEBUG - printf("check %s, media was set properly\n", - check == media ? "passed" : "FAILED" ) ; -#endif - } - - /* Re-initialise the LANCE, and start it when done. */ - /* Set station address */ - for (i = 0; i < ETH_ALEN; ++i) - lp->init_block.phys_addr[i] = nic->node_addr[i]; - /* Preset the receive ring headers */ - for (i=0; irx_ring[i].buf_length = -ETH_FRAME_LEN-4; - /* OWN */ - lp->rx_ring[i].u.base = virt_to_bus(lp->rbuf[i]) & 0xffffff; - /* we set the top byte as the very last thing */ - lp->rx_ring[i].u.addr[3] = 0x80; - } - lp->rx_idx = 0; - lp->init_block.mode = 0x0; /* enable Rx and Tx */ - l = (Address)virt_to_bus(&lp->init_block); - outw(0x1, ioaddr+LANCE_ADDR); - (void)inw(ioaddr+LANCE_ADDR); - outw((short)l, ioaddr+LANCE_DATA); - outw(0x2, ioaddr+LANCE_ADDR); - (void)inw(ioaddr+LANCE_ADDR); - outw((short)(l >> 16), ioaddr+LANCE_DATA); - outw(0x4, ioaddr+LANCE_ADDR); - (void)inw(ioaddr+LANCE_ADDR); - outw(0x915, ioaddr+LANCE_DATA); - outw(0x0, ioaddr+LANCE_ADDR); - (void)inw(ioaddr+LANCE_ADDR); - outw(0x4, ioaddr+LANCE_DATA); /* stop */ - outw(0x1, ioaddr+LANCE_DATA); /* init */ - for (i = 10000; i > 0; --i) - if (inw(ioaddr+LANCE_DATA) & 0x100) - break; -#ifdef DEBUG - if (i <= 0) - printf("Init timed out\n"); -#endif - /* Apparently clearing the InitDone bit here triggers a bug - in the '974. (Mark Stockton) */ - outw(0x2, ioaddr+LANCE_DATA); /* start */ -} - -/************************************************************************** -POLL - Wait for a frame -***************************************************************************/ -static int lance_poll(struct nic *nic) -{ - int status; - - status = lp->rx_ring[lp->rx_idx].u.base >> 24; - if (status & 0x80) - return (0); -#ifdef DEBUG - printf("LANCE packet received rx_ring.u.base %X mcnt %hX csr0 %hX\n", - lp->rx_ring[lp->rx_idx].u.base, lp->rx_ring[lp->rx_idx].msg_length, - inw(ioaddr+LANCE_DATA)); -#endif - if (status == 0x3) - memcpy(nic->packet, lp->rbuf[lp->rx_idx], nic->packetlen = lp->rx_ring[lp->rx_idx].msg_length); - /* Andrew Boyd of QNX reports that some revs of the 79C765 - clear the buffer length */ - lp->rx_ring[lp->rx_idx].buf_length = -ETH_FRAME_LEN-4; - lp->rx_ring[lp->rx_idx].u.addr[3] |= 0x80; /* prime for next receive */ - - /* I'm not sure if the following is still ok with multiple Rx buffers, but it works */ - outw(0x0, ioaddr+LANCE_ADDR); - (void)inw(ioaddr+LANCE_ADDR); - outw(0x500, ioaddr+LANCE_DATA); /* clear receive + InitDone */ - - /* Switch to the next Rx ring buffer */ - lp->rx_idx = (lp->rx_idx + 1) & RX_RING_MOD_MASK; - - return (status == 0x3); -} - -/************************************************************************** -TRANSMIT - Transmit a frame -***************************************************************************/ -static void lance_transmit( - struct nic *nic, - const char *d, /* Destination */ - unsigned int t, /* Type */ - unsigned int s, /* size */ - const char *p) /* Packet */ -{ - unsigned long time; - - /* copy the packet to ring buffer */ - memcpy(lp->tbuf, d, ETH_ALEN); /* dst */ - memcpy(&lp->tbuf[ETH_ALEN], nic->node_addr, ETH_ALEN); /* src */ - lp->tbuf[ETH_ALEN+ETH_ALEN] = t >> 8; /* type */ - lp->tbuf[ETH_ALEN+ETH_ALEN+1] = t; /* type */ - memcpy(&lp->tbuf[ETH_HLEN], p, s); - s += ETH_HLEN; - if (chip_table[chip_version].flags & LANCE_MUST_PAD) - while (s < ETH_ZLEN) /* pad to min length */ - lp->tbuf[s++] = 0; - lp->tx_ring.buf_length = -s; - lp->tx_ring.misc = 0x0; - /* OWN, STP, ENP */ - lp->tx_ring.u.base = virt_to_bus(lp->tbuf) & 0xffffff; - /* we set the top byte as the very last thing */ - lp->tx_ring.u.addr[3] = 0x83; - /* Trigger an immediate send poll */ - outw(0x0, ioaddr+LANCE_ADDR); - (void)inw(ioaddr+LANCE_ADDR); /* as in the datasheets... */ - /* Klaus Espenlaub: the value below was 0x48, but that enabled the - * interrupt line, causing a hang if for some reasone the interrupt - * controller had the LANCE interrupt enabled. I have no idea why - * nobody ran into this before... */ - outw(0x08, ioaddr+LANCE_DATA); - /* wait for transmit complete */ - time = currticks() + TICKS_PER_SEC; /* wait one second */ - while (currticks() < time && (lp->tx_ring.u.base & 0x80000000) != 0) - ; - if ((lp->tx_ring.u.base & 0x80000000) != 0) - printf("LANCE timed out on transmit\n"); - (void)inw(ioaddr+LANCE_ADDR); - outw(0x200, ioaddr+LANCE_DATA); /* clear transmit + InitDone */ -#ifdef DEBUG - printf("tx_ring.u.base %X tx_ring.buf_length %hX tx_ring.misc %hX csr0 %hX\n", - lp->tx_ring.u.base, lp->tx_ring.buf_length, lp->tx_ring.misc, - inw(ioaddr+LANCE_DATA)); -#endif -} - -static void lance_disable(struct nic *nic) -{ - (void)inw(ioaddr+LANCE_RESET); - if (chip_table[lance_version].flags & LANCE_MUST_UNRESET) - outw(0, ioaddr+LANCE_RESET); - - outw(0, ioaddr+LANCE_ADDR); - outw(0x0004, ioaddr+LANCE_DATA); /* stop the LANCE */ - -#ifndef INCLUDE_LANCE - disable_dma(dma); -#endif -} - -#ifdef INCLUDE_LANCE -static int lance_probe1(struct nic *nic, struct pci_device *pci) -#else -static int lance_probe1(struct nic *nic) -#endif -{ - int reset_val ; - unsigned int i; - Address l; - short dma_channels; -#ifndef INCLUDE_LANCE - static const char dmas[] = { 5, 6, 7, 3 }; -#endif - - reset_val = inw(ioaddr+LANCE_RESET); - outw(reset_val, ioaddr+LANCE_RESET); -#if 1 /* Klaus Espenlaub -- was #ifdef INCLUDE_NE2100*/ - outw(0x0, ioaddr+LANCE_ADDR); /* Switch to window 0 */ - if (inw(ioaddr+LANCE_DATA) != 0x4) - return (-1); -#endif - outw(88, ioaddr+LANCE_ADDR); /* Get the version of the chip */ - if (inw(ioaddr+LANCE_ADDR) != 88) - lance_version = 0; - else - { - chip_version = inw(ioaddr+LANCE_DATA); - outw(89, ioaddr+LANCE_ADDR); - chip_version |= inw(ioaddr+LANCE_DATA) << 16; - if ((chip_version & 0xfff) != 0x3) - return (-1); - chip_version = (chip_version >> 12) & 0xffff; - for (lance_version = 1; chip_table[lance_version].id_number != 0; ++lance_version) - if (chip_table[lance_version].id_number == chip_version) - break; - } - /* make sure data structure is 8-byte aligned */ - l = ((Address)lance + 7) & ~7; - lp = (struct lance_interface *)l; - lp->init_block.mode = 0x3; /* disable Rx and Tx */ - lp->init_block.filter[0] = lp->init_block.filter[1] = 0x0; - /* using multiple Rx buffer and a single Tx buffer */ - lp->init_block.rx_ring = (virt_to_bus(&lp->rx_ring) & 0xffffff) | RX_RING_LEN_BITS; - lp->init_block.tx_ring = virt_to_bus(&lp->tx_ring) & 0xffffff; - l = virt_to_bus(&lp->init_block); - outw(0x1, ioaddr+LANCE_ADDR); - (void)inw(ioaddr+LANCE_ADDR); - outw((unsigned short)l, ioaddr+LANCE_DATA); - outw(0x2, ioaddr+LANCE_ADDR); - (void)inw(ioaddr+LANCE_ADDR); - outw((unsigned short)(l >> 16), ioaddr+LANCE_DATA); - outw(0x4, ioaddr+LANCE_ADDR); - (void)inw(ioaddr+LANCE_ADDR); - outw(0x915, ioaddr+LANCE_DATA); - outw(0x0, ioaddr+LANCE_ADDR); - (void)inw(ioaddr+LANCE_ADDR); - /* Get station address */ - for (i = 0; i < ETH_ALEN; ++i) { - nic->node_addr[i] = inb(ioaddr+LANCE_ETH_ADDR+i); - } -#ifndef INCLUDE_LANCE - /* now probe for DMA channel */ - dma_channels = ((inb(DMA1_STAT_REG) >> 4) & 0xf) | - (inb(DMA2_STAT_REG) & 0xf0); - /* need to fix when PCI provides DMA info */ - for (i = 0; i < (sizeof(dmas)/sizeof(dmas[0])); ++i) - { - int j; - - dma = dmas[i]; - /* Don't enable a permanently busy DMA channel, - or the machine will hang */ - if (dma_channels & (1 << dma)) - continue; - outw(0x7f04, ioaddr+LANCE_DATA); /* clear memory error bits */ - set_dma_mode(dma, DMA_MODE_CASCADE); - enable_dma(dma); - outw(0x1, ioaddr+LANCE_DATA); /* init */ - for (j = 100; j > 0; --j) - if (inw(ioaddr+LANCE_DATA) & 0x900) - break; - if (inw(ioaddr+LANCE_DATA) & 0x100) - break; - else - disable_dma(dma); - } - if (i >= (sizeof(dmas)/sizeof(dmas[0]))) - dma = 0; - printf("\n%s base %#X, DMA %d, addr %!\n", - chip_table[lance_version].name, ioaddr, dma, nic->node_addr); -#else - printf(" %s base %#hX, addr %!\n", chip_table[lance_version].name, ioaddr, nic->node_addr); -#endif - if (chip_table[chip_version].flags & LANCE_ENABLE_AUTOSELECT) { - /* Turn on auto-select of media (10baseT or BNC) so that the - * user watch the LEDs. */ - outw(0x0002, ioaddr+LANCE_ADDR); - /* Don't touch 10base2 power bit. */ - outw(inw(ioaddr+LANCE_BUS_IF) | 0x0002, ioaddr+LANCE_BUS_IF); - } - return (lance_version); -} - -/************************************************************************** -PROBE - Look for an adapter, this routine's visible to the outside -***************************************************************************/ - -#ifdef INCLUDE_LANCE -struct nic *lancepci_probe(struct nic *nic, unsigned short *probe_addrs, struct pci_device *pci) -#endif -#ifdef INCLUDE_NE2100 -struct nic *ne2100_probe(struct nic *nic, unsigned short *probe_addrs) -#endif -#ifdef INCLUDE_NI6510 -struct nic *ni6510_probe(struct nic *nic, unsigned short *probe_addrs) -#endif -{ - unsigned short *p; -#ifndef INCLUDE_LANCE - static unsigned short io_addrs[] = { 0x300, 0x320, 0x340, 0x360, 0 }; -#endif - - /* if probe_addrs is 0, then routine can use a hardwired default */ - if (probe_addrs == 0) { -#ifdef INCLUDE_LANCE - return 0; -#else - probe_addrs = io_addrs; -#endif - } - for (p = probe_addrs; (ioaddr = *p) != 0; ++p) - { - char offset15, offset14 = inb(ioaddr + 14); - unsigned short pci_cmd; - -#ifdef INCLUDE_NE2100 - if ((offset14 == 0x52 || offset14 == 0x57) && - ((offset15 = inb(ioaddr + 15)) == 0x57 || offset15 == 0x44)) - if (lance_probe1(nic) >= 0) - break; -#endif -#ifdef INCLUDE_NI6510 - if ((offset14 == 0x00 || offset14 == 0x52) && - ((offset15 = inb(ioaddr + 15)) == 0x55 || offset15 == 0x44)) - if (lance_probe1(nic) >= 0) - break; -#endif -#ifdef INCLUDE_LANCE - adjust_pci_device(pci); - if (lance_probe1(nic, pci) >= 0) - break; -#endif - } - /* if board found */ - if (ioaddr != 0) - { - /* point to NIC specific routines */ - lance_reset(nic); - nic->reset = lance_reset; - nic->poll = lance_poll; - nic->transmit = lance_transmit; - nic->disable = lance_disable; - return nic; - } - - /* no board found */ - return 0; -} diff --git a/netboot/linux-asm-io.h b/netboot/linux-asm-io.h deleted file mode 100644 index 4fe91fb63..000000000 --- a/netboot/linux-asm-io.h +++ /dev/null @@ -1,187 +0,0 @@ -#ifndef _ASM_IO_H -#define _ASM_IO_H - -/* - * This file contains the definitions for the x86 IO instructions - * inb/inw/inl/outb/outw/outl and the "string versions" of the same - * (insb/insw/insl/outsb/outsw/outsl). You can also use "pausing" - * versions of the single-IO instructions (inb_p/inw_p/..). - * - * This file is not meant to be obfuscating: it's just complicated - * to (a) handle it all in a way that makes gcc able to optimize it - * as well as possible and (b) trying to avoid writing the same thing - * over and over again with slight variations and possibly making a - * mistake somewhere. - */ - -/* - * Thanks to James van Artsdalen for a better timing-fix than - * the two short jumps: using outb's to a nonexistent port seems - * to guarantee better timings even on fast machines. - * - * On the other hand, I'd like to be sure of a non-existent port: - * I feel a bit unsafe about using 0x80 (should be safe, though) - * - * Linus - */ - -#ifdef SLOW_IO_BY_JUMPING -#define __SLOW_DOWN_IO __asm__ __volatile__("jmp 1f\n1:\tjmp 1f\n1:") -#else -#define __SLOW_DOWN_IO __asm__ __volatile__("outb %al,$0x80") -#endif - -#ifdef REALLY_SLOW_IO -#define SLOW_DOWN_IO { __SLOW_DOWN_IO; __SLOW_DOWN_IO; __SLOW_DOWN_IO; __SLOW_DOWN_IO; } -#else -#define SLOW_DOWN_IO __SLOW_DOWN_IO -#endif - -/* - * readX/writeX() are used to access memory mapped devices. On some - * architectures the memory mapped IO stuff needs to be accessed - * differently. On the x86 architecture, we just read/write the - * memory location directly. - */ -#define readb(addr) (*(volatile unsigned char *) (addr)) -#define readw(addr) (*(volatile unsigned short *) (addr)) -#define readl(addr) (*(volatile unsigned int *) (addr)) - -#define writeb(b,addr) ((*(volatile unsigned char *) (addr)) = (b)) -#define writew(b,addr) ((*(volatile unsigned short *) (addr)) = (b)) -#define writel(b,addr) ((*(volatile unsigned int *) (addr)) = (b)) - -#define memset_io(a,b,c) memset((void *)(a),(b),(c)) -#define memcpy_fromio(a,b,c) memcpy((a),(void *)(b),(c)) -#define memcpy_toio(a,b,c) memcpy((void *)(a),(b),(c)) - -/* - * Again, i386 does not require mem IO specific function. - */ - -#define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),(void *)(b),(c),(d)) - -/* - * Talk about misusing macros.. - */ - -#define __OUT1(s,x) \ -extern void __out##s(unsigned x value, unsigned short port); \ -extern inline void __out##s(unsigned x value, unsigned short port) { - -#define __OUT2(s,s1,s2) \ -__asm__ __volatile__ ("out" #s " %" s1 "0,%" s2 "1" - -#define __OUT(s,s1,x) \ -__OUT1(s,x) __OUT2(s,s1,"w") : : "a" (value), "d" (port)); } \ -__OUT1(s##c,x) __OUT2(s,s1,"") : : "a" (value), "id" (port)); } \ -__OUT1(s##_p,x) __OUT2(s,s1,"w") : : "a" (value), "d" (port)); SLOW_DOWN_IO; } \ -__OUT1(s##c_p,x) __OUT2(s,s1,"") : : "a" (value), "id" (port)); SLOW_DOWN_IO; } - -#define __IN1(s,x) \ -extern unsigned x __in##s(unsigned short port); \ -extern inline unsigned x __in##s(unsigned short port) { unsigned x _v; - -#define __IN2(s,s1,s2) \ -__asm__ __volatile__ ("in" #s " %" s2 "1,%" s1 "0" - -#define __IN(s,s1,x,i...) \ -__IN1(s,x) __IN2(s,s1,"w") : "=a" (_v) : "d" (port) ,##i ); return _v; } \ -__IN1(s##c,x) __IN2(s,s1,"") : "=a" (_v) : "id" (port) ,##i ); return _v; } \ -__IN1(s##_p,x) __IN2(s,s1,"w") : "=a" (_v) : "d" (port) ,##i ); SLOW_DOWN_IO; return _v; } \ -__IN1(s##c_p,x) __IN2(s,s1,"") : "=a" (_v) : "id" (port) ,##i ); SLOW_DOWN_IO; return _v; } - -#define __INS(s) \ -extern void ins##s(unsigned short port, void * addr, unsigned long count); \ -extern inline void ins##s(unsigned short port, void * addr, unsigned long count) \ -{ __asm__ __volatile__ ("cld ; rep ; ins" #s \ -: "=D" (addr), "=c" (count) : "d" (port),"0" (addr),"1" (count)); } - -#define __OUTS(s) \ -extern void outs##s(unsigned short port, const void * addr, unsigned long count); \ -extern inline void outs##s(unsigned short port, const void * addr, unsigned long count) \ -{ __asm__ __volatile__ ("cld ; rep ; outs" #s \ -: "=S" (addr), "=c" (count) : "d" (port),"0" (addr),"1" (count)); } - -__IN(b,"", char) -__IN(w,"",short) -__IN(l,"", long) - -__OUT(b,"b",char) -__OUT(w,"w",short) -__OUT(l,,int) - -__INS(b) -__INS(w) -__INS(l) - -__OUTS(b) -__OUTS(w) -__OUTS(l) - -/* - * Note that due to the way __builtin_constant_p() works, you - * - can't use it inside a inline function (it will never be true) - * - you don't have to worry about side effects within the __builtin.. - */ -#define outb(val,port) \ -((__builtin_constant_p((port)) && (port) < 256) ? \ - __outbc((val),(port)) : \ - __outb((val),(port))) - -#define inb(port) \ -((__builtin_constant_p((port)) && (port) < 256) ? \ - __inbc(port) : \ - __inb(port)) - -#define outb_p(val,port) \ -((__builtin_constant_p((port)) && (port) < 256) ? \ - __outbc_p((val),(port)) : \ - __outb_p((val),(port))) - -#define inb_p(port) \ -((__builtin_constant_p((port)) && (port) < 256) ? \ - __inbc_p(port) : \ - __inb_p(port)) - -#define outw(val,port) \ -((__builtin_constant_p((port)) && (port) < 256) ? \ - __outwc((val),(port)) : \ - __outw((val),(port))) - -#define inw(port) \ -((__builtin_constant_p((port)) && (port) < 256) ? \ - __inwc(port) : \ - __inw(port)) - -#define outw_p(val,port) \ -((__builtin_constant_p((port)) && (port) < 256) ? \ - __outwc_p((val),(port)) : \ - __outw_p((val),(port))) - -#define inw_p(port) \ -((__builtin_constant_p((port)) && (port) < 256) ? \ - __inwc_p(port) : \ - __inw_p(port)) - -#define outl(val,port) \ -((__builtin_constant_p((port)) && (port) < 256) ? \ - __outlc((val),(port)) : \ - __outl((val),(port))) - -#define inl(port) \ -((__builtin_constant_p((port)) && (port) < 256) ? \ - __inlc(port) : \ - __inl(port)) - -#define outl_p(val,port) \ -((__builtin_constant_p((port)) && (port) < 256) ? \ - __outlc_p((val),(port)) : \ - __outl_p((val),(port))) - -#define inl_p(port) \ -((__builtin_constant_p((port)) && (port) < 256) ? \ - __inlc_p(port) : \ - __inl_p(port)) - -#endif diff --git a/netboot/linux-asm-string.h b/netboot/linux-asm-string.h deleted file mode 100644 index d5bec088c..000000000 --- a/netboot/linux-asm-string.h +++ /dev/null @@ -1,291 +0,0 @@ -/* - * Taken from Linux /usr/include/asm/string.h - * All except memcpy, memmove, memset and memcmp removed. - */ - -#ifndef _I386_STRING_H_ -#define _I386_STRING_H_ - -/* - * This string-include defines all string functions as inline - * functions. Use gcc. It also assumes ds=es=data space, this should be - * normal. Most of the string-functions are rather heavily hand-optimized, - * see especially strtok,strstr,str[c]spn. They should work, but are not - * very easy to understand. Everything is done entirely within the register - * set, making the functions fast and clean. String instructions have been - * used through-out, making for "slightly" unclear code :-) - * - * NO Copyright (C) 1991, 1992 Linus Torvalds, - * consider these trivial functions to be PD. - */ - -typedef int size_t; - -extern void *__memcpy(void * to, const void * from, size_t n); -extern void *__constant_memcpy(void * to, const void * from, size_t n); -extern void *memmove(void * dest,const void * src, size_t n); -extern void *__memset_generic(void * s, char c,size_t count); -extern void *__constant_c_memset(void * s, unsigned long c, size_t count); -extern void *__constant_c_and_count_memset(void * s, unsigned long pattern, size_t count); - - -extern inline void * __memcpy(void * to, const void * from, size_t n) -{ -int d0, d1, d2; -__asm__ __volatile__( - "cld\n\t" - "rep ; movsl\n\t" - "testb $2,%b4\n\t" - "je 1f\n\t" - "movsw\n" - "1:\ttestb $1,%b4\n\t" - "je 2f\n\t" - "movsb\n" - "2:" - : "=&c" (d0), "=&D" (d1), "=&S" (d2) - :"0" (n/4), "q" (n),"1" ((long) to),"2" ((long) from) - : "memory"); -return (to); -} - -/* - * This looks horribly ugly, but the compiler can optimize it totally, - * as the count is constant. - */ -extern inline void * __constant_memcpy(void * to, const void * from, size_t n) -{ - switch (n) { - case 0: - return to; - case 1: - *(unsigned char *)to = *(const unsigned char *)from; - return to; - case 2: - *(unsigned short *)to = *(const unsigned short *)from; - return to; - case 3: - *(unsigned short *)to = *(const unsigned short *)from; - *(2+(unsigned char *)to) = *(2+(const unsigned char *)from); - return to; - case 4: - *(unsigned long *)to = *(const unsigned long *)from; - return to; - case 6: /* for Ethernet addresses */ - *(unsigned long *)to = *(const unsigned long *)from; - *(2+(unsigned short *)to) = *(2+(const unsigned short *)from); - return to; - case 8: - *(unsigned long *)to = *(const unsigned long *)from; - *(1+(unsigned long *)to) = *(1+(const unsigned long *)from); - return to; - case 12: - *(unsigned long *)to = *(const unsigned long *)from; - *(1+(unsigned long *)to) = *(1+(const unsigned long *)from); - *(2+(unsigned long *)to) = *(2+(const unsigned long *)from); - return to; - case 16: - *(unsigned long *)to = *(const unsigned long *)from; - *(1+(unsigned long *)to) = *(1+(const unsigned long *)from); - *(2+(unsigned long *)to) = *(2+(const unsigned long *)from); - *(3+(unsigned long *)to) = *(3+(const unsigned long *)from); - return to; - case 20: - *(unsigned long *)to = *(const unsigned long *)from; - *(1+(unsigned long *)to) = *(1+(const unsigned long *)from); - *(2+(unsigned long *)to) = *(2+(const unsigned long *)from); - *(3+(unsigned long *)to) = *(3+(const unsigned long *)from); - *(4+(unsigned long *)to) = *(4+(const unsigned long *)from); - return to; - } -#define COMMON(x) \ -__asm__ __volatile__( \ - "cld\n\t" \ - "rep ; movsl" \ - x \ - : "=&c" (d0), "=&D" (d1), "=&S" (d2) \ - : "0" (n/4),"1" ((long) to),"2" ((long) from) \ - : "memory"); -{ - int d0, d1, d2; - switch (n % 4) { - case 0: COMMON(""); return to; - case 1: COMMON("\n\tmovsb"); return to; - case 2: COMMON("\n\tmovsw"); return to; - default: COMMON("\n\tmovsw\n\tmovsb"); return to; - } -} - -#undef COMMON -} - -#define __HAVE_ARCH_MEMCPY -#define memcpy(t, f, n) \ -(__builtin_constant_p(n) ? \ - __constant_memcpy((t),(f),(n)) : \ - __memcpy((t),(f),(n))) - -#define __HAVE_ARCH_MEMMOVE -extern inline void * memmove(void * dest,const void * src, size_t n) -{ -int d0, d1, d2; -if (dest -#include - -/* #define DEBUG 1 */ - -struct arptable_t arptable[MAX_ARP]; - -/* Set if the user pushes Control-C. */ -int ip_abort = 0; -/* Set if an ethernet card is probed and IP addresses are set. */ -int network_ready = 0; - -struct rom_info rom; - -static int vendorext_isvalid; -static unsigned long netmask; -static struct bootpd_t bootp_data; -static unsigned long xid; - -#define BOOTP_DATA_ADDR (&bootp_data) - -#ifndef NO_DHCP_SUPPORT -#endif /* NO_DHCP_SUPPORT */ - -/* äEth */ -static unsigned char vendorext_magic[] = {0xE4, 0x45, 0x74, 0x68}; -static const unsigned char broadcast[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - -#ifdef NO_DHCP_SUPPORT - -static unsigned char rfc1533_cookie[5] = {RFC1533_COOKIE, RFC1533_END}; - -#else /* ! NO_DHCP_SUPPORT */ - -static int dhcp_reply; -static in_addr dhcp_server = {0L}; -static in_addr dhcp_addr = {0L}; -static unsigned char rfc1533_cookie[] = {RFC1533_COOKIE}; -static unsigned char rfc1533_end[] = {RFC1533_END}; - -static const unsigned char dhcpdiscover[] = -{ - RFC2132_MSG_TYPE, 1, DHCPDISCOVER, - RFC2132_MAX_SIZE,2, /* request as much as we can */ - ETH_MAX_MTU / 256, ETH_MAX_MTU % 256, - RFC2132_PARAM_LIST, 4, RFC1533_NETMASK, RFC1533_GATEWAY, - RFC1533_HOSTNAME, RFC1533_EXTENSIONPATH -}; - -static const unsigned char dhcprequest[] = -{ - RFC2132_MSG_TYPE, 1, DHCPREQUEST, - RFC2132_SRV_ID, 4, 0, 0, 0, 0, - RFC2132_REQ_ADDR, 4, 0, 0, 0, 0, - RFC2132_MAX_SIZE, 2, /* request as much as we can */ - ETH_MAX_MTU / 256, ETH_MAX_MTU % 256, - /* request parameters */ - RFC2132_PARAM_LIST, - /* 4 standard + 2 vendortags */ - 4 + 2, - /* Standard parameters */ - RFC1533_NETMASK, RFC1533_GATEWAY, - RFC1533_HOSTNAME, RFC1533_EXTENSIONPATH, - /* Etherboot vendortags */ - RFC1533_VENDOR_MAGIC, - RFC1533_VENDOR_CONFIGFILE, -}; - -#endif /* ! NO_DHCP_SUPPORT */ - -static unsigned short ipchksum (unsigned short *ip, int len); -static unsigned short udpchksum (struct iphdr *packet); - -void -print_network_configuration (void) -{ - if (! eth_probe ()) - grub_printf ("No ethernet card found.\n"); - else if (! network_ready) - grub_printf ("Not initialized yet.\n"); - else - { - etherboot_printf ("Address: %@\n", arptable[ARP_CLIENT].ipaddr.s_addr); - etherboot_printf ("Netmask: %@\n", netmask); - etherboot_printf ("Server: %@\n", arptable[ARP_SERVER].ipaddr.s_addr); - etherboot_printf ("Gateway: %@\n", arptable[ARP_GATEWAY].ipaddr.s_addr); - } -} - - -/************************************************************************** -DEFAULT_NETMASK - Return default netmask for IP address -**************************************************************************/ -static inline unsigned long -default_netmask (void) -{ - int net = ntohl (arptable[ARP_CLIENT].ipaddr.s_addr) >> 24; - if (net <= 127) - return (htonl (0xff000000)); - else if (net < 192) - return (htonl (0xffff0000)); - else - return (htonl (0xffffff00)); -} - -/* ifconfig - configure network interface. */ -int -ifconfig (char *ip, char *sm, char *gw, char *svr) -{ - in_addr tmp; - - if (sm) - { - if (! inet_aton (sm, &tmp)) - return 0; - - netmask = tmp.s_addr; - } - - if (ip) - { - if (! inet_aton (ip, &arptable[ARP_CLIENT].ipaddr)) - return 0; - - if (! netmask && ! sm) - netmask = default_netmask (); - } - - if (gw && ! inet_aton (gw, &arptable[ARP_GATEWAY].ipaddr)) - return 0; - - /* Clear out the ARP entry. */ - grub_memset (arptable[ARP_GATEWAY].node, 0, ETH_ALEN); - - if (svr && ! inet_aton (svr, &arptable[ARP_SERVER].ipaddr)) - return 0; - - /* Likewise. */ - grub_memset (arptable[ARP_SERVER].node, 0, ETH_ALEN); - - if (ip || sm) - { - if (IP_BROADCAST == (netmask | arptable[ARP_CLIENT].ipaddr.s_addr) - || netmask == (netmask | arptable[ARP_CLIENT].ipaddr.s_addr) - || ! netmask) - network_ready = 0; - else - network_ready = 1; - } - - return 1; -} - - -/************************************************************************** -UDP_TRANSMIT - Send a UDP datagram -**************************************************************************/ -int -udp_transmit (unsigned long destip, unsigned int srcsock, - unsigned int destsock, int len, const void *buf) -{ - struct iphdr *ip; - struct udphdr *udp; - struct arprequest arpreq; - int arpentry, i; - int retry; - - ip = (struct iphdr *) buf; - udp = (struct udphdr *) ((unsigned long) buf + sizeof (struct iphdr)); - ip->verhdrlen = 0x45; - ip->service = 0; - ip->len = htons (len); - ip->ident = 0; - ip->frags = 0; - ip->ttl = 60; - ip->protocol = IP_UDP; - ip->chksum = 0; - ip->src.s_addr = arptable[ARP_CLIENT].ipaddr.s_addr; - ip->dest.s_addr = destip; - ip->chksum = ipchksum ((unsigned short *) buf, sizeof (struct iphdr)); - udp->src = htons (srcsock); - udp->dest = htons (destsock); - udp->len = htons (len - sizeof (struct iphdr)); - udp->chksum = 0; - udp->chksum = htons (udpchksum (ip)); - - if (udp->chksum == 0) - udp->chksum = 0xffff; - - if (destip == IP_BROADCAST) - { - eth_transmit (broadcast, IP, len, buf); - } - else - { - if (((destip & netmask) - != (arptable[ARP_CLIENT].ipaddr.s_addr & netmask)) - && arptable[ARP_GATEWAY].ipaddr.s_addr) - destip = arptable[ARP_GATEWAY].ipaddr.s_addr; - - for (arpentry = 0; arpentry < MAX_ARP; arpentry++) - if (arptable[arpentry].ipaddr.s_addr == destip) - break; - - if (arpentry == MAX_ARP) - { - etherboot_printf ("%@ is not in my arp table!\n", destip); - return 0; - } - - for (i = 0; i < ETH_ALEN; i++) - if (arptable[arpentry].node[i]) - break; - - if (i == ETH_ALEN) - { - /* Need to do arp request. */ -#ifdef DEBUG - grub_printf ("arp request.\n"); -#endif - arpreq.hwtype = htons (1); - arpreq.protocol = htons (IP); - arpreq.hwlen = ETH_ALEN; - arpreq.protolen = 4; - arpreq.opcode = htons (ARP_REQUEST); - grub_memmove (arpreq.shwaddr, arptable[ARP_CLIENT].node, - ETH_ALEN); - grub_memmove (arpreq.sipaddr, (char *) &arptable[ARP_CLIENT].ipaddr, - sizeof (in_addr)); - grub_memset (arpreq.thwaddr, 0, ETH_ALEN); - grub_memmove (arpreq.tipaddr, (char *) &destip, sizeof (in_addr)); - - for (retry = 1; retry <= MAX_ARP_RETRIES; retry++) - { - long timeout; - - eth_transmit (broadcast, ARP, sizeof (arpreq), &arpreq); - timeout = rfc2131_sleep_interval (TIMEOUT, retry); - - if (await_reply (AWAIT_ARP, arpentry, arpreq.tipaddr, timeout)) - goto xmit; - - if (ip_abort) - return 0; - } - - return 0; - } - - xmit: - eth_transmit (arptable[arpentry].node, IP, len, buf); - } - - return 1; -} - -/************************************************************************** -TFTP - Download extended BOOTP data, or kernel image -**************************************************************************/ -static int -tftp (const char *name, int (*fnc) (unsigned char *, int, int, int)) -{ - int retry = 0; - static unsigned short iport = 2000; - unsigned short oport = 0; - unsigned short len, block = 0, prevblock = 0; - int bcounter = 0; - struct tftp_t *tr; - struct tftpreq_t tp; - int rc; - int packetsize = TFTP_DEFAULTSIZE_PACKET; - - /* Clear out the Rx queue first. It contains nothing of interest, - * except possibly ARP requests from the DHCP/TFTP server. We use - * polling throughout Etherboot, so some time may have passed since we - * last polled the receive queue, which may now be filled with - * broadcast packets. This will cause the reply to the packets we are - * about to send to be lost immediately. Not very clever. */ - await_reply (AWAIT_QDRAIN, 0, NULL, 0); - - tp.opcode = htons (TFTP_RRQ); - len = (grub_sprintf ((char *) tp.u.rrq, "%s%coctet%cblksize%c%d", - name, 0, 0, 0, TFTP_MAX_PACKET) - + sizeof (tp.ip) + sizeof (tp.udp) + sizeof (tp.opcode) + 1); - if (! udp_transmit (arptable[ARP_SERVER].ipaddr.s_addr, ++iport, - TFTP_PORT, len, &tp)) - return 0; - - for (;;) - { - long timeout; - -#ifdef CONGESTED - timeout = rfc2131_sleep_interval (block ? TFTP_REXMT : TIMEOUT, retry); -#else - timeout = rfc2131_sleep_interval (TIMEOUT, retry); -#endif - - if (! await_reply (AWAIT_TFTP, iport, NULL, timeout)) - { - if (! block && retry++ < MAX_TFTP_RETRIES) - { - /* Maybe initial request was lost. */ - if (! udp_transmit (arptable[ARP_SERVER].ipaddr.s_addr, - ++iport, TFTP_PORT, len, &tp)) - return 0; - - continue; - } - -#ifdef CONGESTED - if (block && ((retry += TFTP_REXMT) < TFTP_TIMEOUT)) - { - /* We resend our last ack. */ -#ifdef MDEBUG - grub_printf ("\n"); -#endif - udp_transmit (arptable[ARP_SERVER].ipaddr.s_addr, - iport, oport, - TFTP_MIN_PACKET, &tp); - continue; - } -#endif - /* Timeout. */ - break; - } - - tr = (struct tftp_t *) &nic.packet[ETH_HLEN]; - if (tr->opcode == ntohs (TFTP_ERROR)) - { - grub_printf ("TFTP error %d (%s)\n", - ntohs (tr->u.err.errcode), - tr->u.err.errmsg); - break; - } - - if (tr->opcode == ntohs (TFTP_OACK)) - { - char *p = tr->u.oack.data, *e; - - /* Shouldn't happen. */ - if (prevblock) - /* Ignore it. */ - continue; - - len = ntohs (tr->udp.len) - sizeof (struct udphdr) - 2; - if (len > TFTP_MAX_PACKET) - goto noak; - - e = p + len; - while (*p != '\000' && p < e) - { - if (! grub_strcmp ("blksize", p)) - { - p += 8; - if ((packetsize = getdec (&p)) < TFTP_DEFAULTSIZE_PACKET) - goto noak; - - while (p < e && *p) - p++; - - if (p < e) - p++; - } - else - { - noak: - tp.opcode = htons (TFTP_ERROR); - tp.u.err.errcode = 8; - len = (grub_sprintf ((char *) tp.u.err.errmsg, - "RFC1782 error") - + sizeof (tp.ip) + sizeof (tp.udp) - + sizeof (tp.opcode) + sizeof (tp.u.err.errcode) - + 1); - udp_transmit (arptable[ARP_SERVER].ipaddr.s_addr, - iport, ntohs (tr->udp.src), - len, &tp); - return 0; - } - } - - if (p > e) - goto noak; - - /* This ensures that the packet does not get processed as data! */ - block = tp.u.ack.block = 0; - } - else if (tr->opcode == ntohs (TFTP_DATA)) - { - len = ntohs (tr->udp.len) - sizeof (struct udphdr) - 4; - /* Shouldn't happen. */ - if (len > packetsize) - /* Ignore it. */ - continue; - - block = ntohs (tp.u.ack.block = tr->u.data.block); - } - else - /* Neither TFTP_OACK nor TFTP_DATA. */ - break; - - if ((block || bcounter) && (block != prevblock + 1)) - /* Block order should be continuous */ - tp.u.ack.block = htons (block = prevblock); - - /* Should be continuous. */ - tp.opcode = htons (TFTP_ACK); - oport = ntohs (tr->udp.src); - /* Ack. */ - udp_transmit (arptable[ARP_SERVER].ipaddr.s_addr, iport, - oport, TFTP_MIN_PACKET, &tp); - - if ((unsigned short) (block - prevblock) != 1) - /* Retransmission or OACK, don't process via callback - * and don't change the value of prevblock. */ - continue; - - prevblock = block; - /* Is it the right place to zero the timer? */ - retry = 0; - - if ((rc = fnc (tr->u.data.download, - ++bcounter, len, len < packetsize)) >= 0) - return rc; - - /* End of data. */ - if (len < packetsize) - return 1; - } - - return 0; -} - -/************************************************************************** -RARP - Get my IP address and load information -**************************************************************************/ -int -rarp (void) -{ - int retry; - - /* arp and rarp requests share the same packet structure. */ - struct arprequest rarpreq; - - /* Make sure that an ethernet is probed. */ - if (! eth_probe ()) - return 0; - - /* Clear the ready flag. */ - network_ready = 0; - - grub_memset (&rarpreq, 0, sizeof (rarpreq)); - - rarpreq.hwtype = htons (1); - rarpreq.protocol = htons (IP); - rarpreq.hwlen = ETH_ALEN; - rarpreq.protolen = 4; - rarpreq.opcode = htons (RARP_REQUEST); - grub_memmove ((char *) &rarpreq.shwaddr, arptable[ARP_CLIENT].node, - ETH_ALEN); - /* sipaddr is already zeroed out */ - grub_memmove ((char *) &rarpreq.thwaddr, arptable[ARP_CLIENT].node, - ETH_ALEN); - /* tipaddr is already zeroed out */ - - for (retry = 0; retry < MAX_ARP_RETRIES; ++retry) - { - long timeout; - - eth_transmit (broadcast, RARP, sizeof (rarpreq), &rarpreq); - - timeout = rfc2131_sleep_interval (TIMEOUT, retry); - if (await_reply (AWAIT_RARP, 0, rarpreq.shwaddr, timeout)) - break; - - if (ip_abort) - return 0; - } - - if (retry < MAX_ARP_RETRIES) - { - network_ready = 1; - return 1; - } - - return 0; -} - -/************************************************************************** -BOOTP - Get my IP address and load information -**************************************************************************/ -int -bootp (void) -{ - int retry; -#ifndef NO_DHCP_SUPPORT - int reqretry; -#endif /* ! NO_DHCP_SUPPORT */ - struct bootpip_t ip; - unsigned long starttime; - - /* Make sure that an ethernet is probed. */ - if (! eth_probe ()) - return 0; - - /* Clear the ready flag. */ - network_ready = 0; - -#ifdef DEBUG - grub_printf ("network is ready.\n"); -#endif - - grub_memset (&ip, 0, sizeof (struct bootpip_t)); - ip.bp.bp_op = BOOTP_REQUEST; - ip.bp.bp_htype = 1; - ip.bp.bp_hlen = ETH_ALEN; - starttime = currticks (); - /* Use lower 32 bits of node address, more likely to be - distinct than the time since booting */ - grub_memmove (&xid, &arptable[ARP_CLIENT].node[2], sizeof(xid)); - ip.bp.bp_xid = xid += htonl (starttime); - grub_memmove (ip.bp.bp_hwaddr, arptable[ARP_CLIENT].node, ETH_ALEN); -#ifdef DEBUG - etherboot_printf ("bp_op = %d\n", ip.bp.bp_op); - etherboot_printf ("bp_htype = %d\n", ip.bp.bp_htype); - etherboot_printf ("bp_hlen = %d\n", ip.bp.bp_hlen); - etherboot_printf ("bp_xid = %d\n", ip.bp.bp_xid); - etherboot_printf ("bp_hwaddr = %!\n", ip.bp.bp_hwaddr); - etherboot_printf ("bp_hops = %d\n", (int) ip.bp.bp_hops); - etherboot_printf ("bp_secs = %d\n", (int) ip.bp.bp_hwaddr); -#endif - -#ifdef NO_DHCP_SUPPORT - /* Request RFC-style options. */ - grub_memmove (ip.bp.bp_vend, rfc1533_cookie, 5); -#else - /* Request RFC-style options. */ - grub_memmove (ip.bp.bp_vend, rfc1533_cookie, sizeof rfc1533_cookie); - grub_memmove (ip.bp.bp_vend + sizeof rfc1533_cookie, dhcpdiscover, - sizeof dhcpdiscover); - grub_memmove (ip.bp.bp_vend + sizeof rfc1533_cookie + sizeof dhcpdiscover, - rfc1533_end, sizeof rfc1533_end); -#endif /* ! NO_DHCP_SUPPORT */ - - for (retry = 0; retry < MAX_BOOTP_RETRIES;) - { - long timeout; - -#ifdef DEBUG - grub_printf ("retry = %d\n", retry); -#endif - - /* Clear out the Rx queue first. It contains nothing of - * interest, except possibly ARP requests from the DHCP/TFTP - * server. We use polling throughout Etherboot, so some time - * may have passed since we last polled the receive queue, - * which may now be filled with broadcast packets. This will - * cause the reply to the packets we are about to send to be - * lost immediately. Not very clever. */ - await_reply (AWAIT_QDRAIN, 0, NULL, 0); - - udp_transmit (IP_BROADCAST, BOOTP_CLIENT, BOOTP_SERVER, - sizeof (struct bootpip_t), &ip); - timeout = rfc2131_sleep_interval (TIMEOUT, retry++); -#ifdef NO_DHCP_SUPPORT - if (await_reply (AWAIT_BOOTP, 0, NULL, timeout)) - { - network_ready = 1; - return 1; - } -#else /* ! NO_DHCP_SUPPORT */ - if (await_reply (AWAIT_BOOTP, 0, NULL, timeout)) - { - if (dhcp_reply != DHCPOFFER) - { - network_ready = 1; - return 1; - } - - dhcp_reply = 0; -#ifdef DEBUG - etherboot_printf ("bp_op = %d\n", (int) ip.bp.bp_op); - etherboot_printf ("bp_htype = %d\n", (int) ip.bp.bp_htype); - etherboot_printf ("bp_hlen = %d\n", (int) ip.bp.bp_hlen); - etherboot_printf ("bp_xid = %d\n", (int) ip.bp.bp_xid); - etherboot_printf ("bp_hwaddr = %!\n", ip.bp.bp_hwaddr); - etherboot_printf ("bp_hops = %d\n", (int) ip.bp.bp_hops); - etherboot_printf ("bp_secs = %d\n", (int) ip.bp.bp_hwaddr); -#endif - grub_memmove (ip.bp.bp_vend, rfc1533_cookie, sizeof rfc1533_cookie); - grub_memmove (ip.bp.bp_vend + sizeof rfc1533_cookie, - dhcprequest, sizeof dhcprequest); - grub_memmove (ip.bp.bp_vend + sizeof rfc1533_cookie - + sizeof dhcprequest, - rfc1533_end, sizeof rfc1533_end); - grub_memmove (ip.bp.bp_vend + 9, (char *) &dhcp_server, - sizeof (in_addr)); - grub_memmove (ip.bp.bp_vend + 15, (char *) &dhcp_addr, - sizeof (in_addr)); -#ifdef DEBUG - grub_printf ("errnum = %d\n", errnum); -#endif - for (reqretry = 0; reqretry < MAX_BOOTP_RETRIES;) - { - int ret; -#ifdef DEBUG - grub_printf ("reqretry = %d\n", reqretry); -#endif - - ret = udp_transmit (IP_BROADCAST, BOOTP_CLIENT, BOOTP_SERVER, - sizeof (struct bootpip_t), &ip); - if (! ret) - grub_printf ("udp_transmit failed.\n"); - - dhcp_reply = 0; - timeout = rfc2131_sleep_interval (TIMEOUT, reqretry++); - if (await_reply (AWAIT_BOOTP, 0, NULL, timeout)) - if (dhcp_reply == DHCPACK) - { - network_ready = 1; - return 1; - } - -#ifdef DEBUG - grub_printf ("dhcp_reply = %d\n", dhcp_reply); -#endif - - if (ip_abort) - return 0; - } - } -#endif /* ! NO_DHCP_SUPPORT */ - - if (ip_abort) - return 0; - - ip.bp.bp_secs = htons ((currticks () - starttime) / TICKS_PER_SEC); - } - - /* Timeout. */ - return 0; -} - -/************************************************************************** -UDPCHKSUM - Checksum UDP Packet (one of the rare cases when assembly is - actually simpler...) - RETURNS: checksum, 0 on checksum error. This - allows for using the same routine for RX and TX summing: - RX if (packet->udp.chksum && udpchksum(packet)) - error("checksum error"); - TX packet->udp.chksum=0; - if (0==(packet->udp.chksum=udpchksum(packet))) - packet->upd.chksum=0xffff; -**************************************************************************/ -static inline void -dosum (unsigned short *start, unsigned int len, unsigned short *sum) -{ - __asm__ __volatile__ - ("clc\n" - "1:\tlodsw\n\t" - "xchg %%al,%%ah\n\t" /* convert to host byte order */ - "adcw %%ax,%0\n\t" /* add carry of previous iteration */ - "loop 1b\n\t" - "adcw $0,%0" /* add carry of last iteration */ - : "=b" (*sum), "=S"(start), "=c"(len) - : "0"(*sum), "1"(start), "2"(len) - : "ax", "cc" - ); -} - -/* UDP sum: - * proto, src_ip, dst_ip, udp_dport, udp_sport, 2*udp_len, payload - */ -static unsigned short -udpchksum (struct iphdr *packet) -{ - int len = ntohs (packet->len); - unsigned short rval; - - /* add udplength + protocol number */ - rval = (len - sizeof (struct iphdr)) + IP_UDP; - - /* pad to an even number of bytes */ - if (len % 2) { - ((char *) packet)[len++] = 0; - } - - /* sum over src/dst ipaddr + udp packet */ - len -= (char *) &packet->src - (char *) packet; - dosum ((unsigned short *) &packet->src, len >> 1, &rval); - - /* take one's complement */ - return ~rval; -} - -/************************************************************************** -AWAIT_REPLY - Wait until we get a response for our request -**************************************************************************/ -int -await_reply (int type, int ival, void *ptr, int timeout) -{ - unsigned long time; - struct iphdr *ip; - struct udphdr *udp; - struct arprequest *arpreply; - struct bootp_t *bootpreply; - unsigned short ptype; - unsigned int protohdrlen = (ETH_HLEN + sizeof (struct iphdr) - + sizeof (struct udphdr)); - - /* Clear the abort flag. */ - ip_abort = 0; - - time = timeout + currticks (); - /* The timeout check is done below. The timeout is only checked if - * there is no packet in the Rx queue. This assumes that eth_poll() - * needs a negligible amount of time. */ - for (;;) - { - if (eth_poll ()) - { - /* We have something! */ - - /* Check for ARP - No IP hdr. */ - if (nic.packetlen >= ETH_HLEN) - { - ptype = (((unsigned short) nic.packet[12]) << 8 - | ((unsigned short) nic.packet[13])); - } - else - /* What else could we do with it? */ - continue; - - if (nic.packetlen >= ETH_HLEN + sizeof (struct arprequest) - && ptype == ARP) - { - unsigned long tmp; - - arpreply = (struct arprequest *) &nic.packet[ETH_HLEN]; - - if (arpreply->opcode == htons (ARP_REPLY) - && ! grub_memcmp (arpreply->sipaddr, ptr, sizeof (in_addr)) - && type == AWAIT_ARP) - { - grub_memmove ((char *) arptable[ival].node, - arpreply->shwaddr, - ETH_ALEN); - return 1; - } - - grub_memmove ((char *) &tmp, arpreply->tipaddr, - sizeof (in_addr)); - - if (arpreply->opcode == htons (ARP_REQUEST) - && tmp == arptable[ARP_CLIENT].ipaddr.s_addr) - { - arpreply->opcode = htons (ARP_REPLY); - grub_memmove (arpreply->tipaddr, arpreply->sipaddr, - sizeof (in_addr)); - grub_memmove (arpreply->thwaddr, (char *) arpreply->shwaddr, - ETH_ALEN); - grub_memmove (arpreply->sipaddr, - (char *) &arptable[ARP_CLIENT].ipaddr, - sizeof (in_addr)); - grub_memmove (arpreply->shwaddr, - arptable[ARP_CLIENT].node, - ETH_ALEN); - eth_transmit (arpreply->thwaddr, ARP, - sizeof (struct arprequest), - arpreply); -#ifdef MDEBUG - grub_memmove (&tmp, arpreply->tipaddr, sizeof (in_addr)); - etherboot_printf ("Sent ARP reply to: %@\n", tmp); -#endif /* MDEBUG */ - } - - continue; - } - - if (type == AWAIT_QDRAIN) - continue; - - /* Check for RARP - No IP hdr. */ - if (type == AWAIT_RARP - && nic.packetlen >= ETH_HLEN + sizeof (struct arprequest) - && ptype == RARP) - { - arpreply = (struct arprequest *) &nic.packet[ETH_HLEN]; - - if (arpreply->opcode == htons (RARP_REPLY) - && ! grub_memcmp (arpreply->thwaddr, ptr, ETH_ALEN)) - { - grub_memmove ((char *) arptable[ARP_SERVER].node, - arpreply->shwaddr, ETH_ALEN); - grub_memmove ((char *) &arptable[ARP_SERVER].ipaddr, - arpreply->sipaddr, sizeof (in_addr)); - grub_memmove ((char *) &arptable[ARP_CLIENT].ipaddr, - arpreply->tipaddr, sizeof (in_addr)); - return 1; - } - - continue; - } - - /* Anything else has IP header. */ - if (nic.packetlen < protohdrlen || ptype != IP) - continue; - - ip = (struct iphdr *) &nic.packet[ETH_HLEN]; - if (ip->verhdrlen != 0x45 - || ipchksum ((unsigned short *) ip, sizeof (struct iphdr)) - || ip->protocol != IP_UDP) - continue; - - /* - - Till Straumann - added udp checksum (safer on a wireless link) - added fragmentation check: I had a corrupted image - in memory due to fragmented TFTP packets - took me - 3 days to find the cause for this :-( - */ - - /* If More Fragments bit and Fragment Offset field - are non-zero then packet is fragmented */ - if (ip->frags & htons(0x3FFF)) - { - grub_printf ("ALERT: got a fragmented packet - reconfigure your server\n"); - continue; - } - - udp = (struct udphdr *) &nic.packet[(ETH_HLEN - + sizeof (struct iphdr))]; - if (udp->chksum && udpchksum (ip)) - { - grub_printf ("UDP checksum error\n"); - continue; - } - - /* BOOTP ? */ - bootpreply = (struct bootp_t *) - &nic.packet[(ETH_HLEN + sizeof (struct iphdr) - + sizeof (struct udphdr))]; - if (type == AWAIT_BOOTP -#ifdef NO_DHCP_SUPPORT - && (nic.packetlen - >= (ETH_HLEN + sizeof (struct bootp_t) - BOOTP_VENDOR_LEN)) -#else - && (nic.packetlen - >= (ETH_HLEN + sizeof (struct bootp_t) - DHCP_OPT_LEN)) -#endif /* ! NO_DHCP_SUPPORT */ - && udp->dest == htons (BOOTP_CLIENT) - && bootpreply->bp_op == BOOTP_REPLY - && bootpreply->bp_xid == xid - && (! grub_memcmp (broadcast, bootpreply->bp_hwaddr, ETH_ALEN) - || ! grub_memcmp (arptable[ARP_CLIENT].node, - bootpreply->bp_hwaddr, ETH_ALEN))) - { -#ifdef DEBUG - grub_printf ("BOOTP packet was received.\n"); -#endif - arptable[ARP_CLIENT].ipaddr.s_addr - = bootpreply->bp_yiaddr.s_addr; -#ifndef NO_DHCP_SUPPORT - dhcp_addr.s_addr = bootpreply->bp_yiaddr.s_addr; -#ifdef DEBUG - etherboot_printf ("dhcp_addr = %@\n", dhcp_addr.s_addr); -#endif -#endif /* ! NO_DHCP_SUPPORT */ - netmask = default_netmask (); - arptable[ARP_SERVER].ipaddr.s_addr - = bootpreply->bp_siaddr.s_addr; - /* Kill arp. */ - grub_memset (arptable[ARP_SERVER].node, 0, ETH_ALEN); - arptable[ARP_GATEWAY].ipaddr.s_addr - = bootpreply->bp_giaddr.s_addr; - /* Kill arp. */ - grub_memset (arptable[ARP_GATEWAY].node, 0, ETH_ALEN); - - grub_memmove ((char *) BOOTP_DATA_ADDR, (char *) bootpreply, - sizeof (struct bootpd_t)); -#ifdef NO_DHCP_SUPPORT - decode_rfc1533 (BOOTP_DATA_ADDR->bootp_reply.bp_vend, - 0, BOOTP_VENDOR_LEN + MAX_BOOTP_EXTLEN, 1); -#else - decode_rfc1533 (BOOTP_DATA_ADDR->bootp_reply.bp_vend, - 0, DHCP_OPT_LEN + MAX_BOOTP_EXTLEN, 1); -#endif /* ! NO_DHCP_SUPPORT */ - - return 1; - } - - /* TFTP ? */ - if (type == AWAIT_TFTP && ntohs (udp->dest) == ival) - return 1; - } - else - { - /* Check for abort key only if the Rx queue is empty - - * as long as we have something to process, don't - * assume that something failed. It is unlikely that - * we have no processing time left between packets. */ - if (checkkey () != -1 && ASCII_CHAR (getkey ()) == CTRL_C) - { - ip_abort = 1; - return 0; - } - - /* Do the timeout after at least a full queue walk. */ - if ((timeout == 0) || (currticks() > time)) - { - break; - } - } - } - - return 0; -} - -/************************************************************************** -DECODE_RFC1533 - Decodes RFC1533 header -**************************************************************************/ -int -decode_rfc1533 (unsigned char *p, int block, int len, int eof) -{ - static unsigned char *extdata = NULL, *extend = NULL; - unsigned char *extpath = NULL; - unsigned char *endp; - - if (block == 0) - { - vendorext_isvalid = 0; - - if (grub_memcmp (p, rfc1533_cookie, 4)) - /* no RFC 1533 header found */ - return 0; - - p += 4; - endp = p + len; - } - else - { - if (block == 1) - { - if (grub_memcmp (p, rfc1533_cookie, 4)) - /* no RFC 1533 header found */ - return 0; - - p += 4; - len -= 4; - } - - if (extend + len - <= ((unsigned char *) - &(BOOTP_DATA_ADDR->bootp_extension[MAX_BOOTP_EXTLEN]))) - { - grub_memmove (extend, p, len); - extend += len; - } - else - { - grub_printf ("Overflow in vendor data buffer! Aborting...\n"); - *extdata = RFC1533_END; - return 0; - } - - p = extdata; - endp = extend; - } - - if (! eof) - return -1; - - while (p < endp) - { - unsigned char c = *p; - - if (c == RFC1533_PAD) - { - p++; - continue; - } - else if (c == RFC1533_END) - { - endp = p; - continue; - } - else if (c == RFC1533_NETMASK) - { - grub_memmove ((char *) &netmask, p + 2, sizeof (in_addr)); - } - else if (c == RFC1533_GATEWAY) - { - /* This is a little simplistic, but it will - usually be sufficient. - Take only the first entry. */ - if (TAG_LEN (p) >= sizeof (in_addr)) - grub_memmove ((char *) &arptable[ARP_GATEWAY].ipaddr, p + 2, - sizeof (in_addr)); - } - else if (c == RFC1533_EXTENSIONPATH) - extpath = p; -#ifndef NO_DHCP_SUPPORT - else if (c == RFC2132_MSG_TYPE) - { - dhcp_reply = *(p + 2); - } - else if (c == RFC2132_SRV_ID) - { - grub_memmove ((char *) &dhcp_server, p + 2, sizeof (in_addr)); -#ifdef DEBUG - etherboot_printf ("dhcp_server = %@\n", dhcp_server.s_addr); -#endif - } -#endif /* ! NO_DHCP_SUPPORT */ - else if (c == RFC1533_VENDOR_MAGIC - && TAG_LEN(p) >= 6 - && ! grub_memcmp (p + 2, vendorext_magic, 4) - && p[6] == RFC1533_VENDOR_MAJOR) - vendorext_isvalid++; - /* GRUB now handles its own tag. Get the name of a configuration - file from the network. Cool... */ - else if (c == RFC1533_VENDOR_CONFIGFILE) - { - int l = TAG_LEN (p); - - /* Eliminate the trailing NULs according to RFC 2132. */ - while (*(p + 2 + l - 1) == '\000' && l > 0) - l--; - - /* XXX: Should check if LEN is less than the maximum length - of CONFIG_FILE. This kind of robustness will be a goal - in GRUB 1.0. */ - grub_memmove (config_file, p + 2, l); - config_file[l] = 0; - } - - p += TAG_LEN (p) + 2; - } - - extdata = extend = endp; - - /* Perhaps we can eliminate this because we doesn't require so - much information, but I leave this alone. */ - if (block == 0 && extpath != NULL) - { - char fname[64]; - int fnamelen = TAG_LEN (extpath); - - while (*(extpath + 2 + fnamelen - 1) == '\000' && fnamelen > 0) - fnamelen--; - - if (fnamelen + 1 > sizeof (fname)) - { - grub_printf ("Too long file name for Extensions Path\n"); - return 0; - } - else if (! fnamelen) - { - grub_printf ("Empty file name for Extensions Path\n"); - return 0; - } - - grub_memmove (fname, extpath + 2, fnamelen); - fname[fnamelen] = '\000'; - grub_printf ("Loading BOOTP-extension file: %s\n", fname); - tftp (fname, decode_rfc1533); - } - - /* Proceed with next block. */ - return -1; -} - -/************************************************************************** -IPCHKSUM - Checksum IP Header -**************************************************************************/ -static unsigned short -ipchksum (unsigned short *ip, int len) -{ - unsigned long sum = 0; - len >>= 1; - while (len--) - { - sum += *(ip++); - if (sum > 0xFFFF) - sum -= 0xFFFF; - } - return (~sum) & 0x0000FFFF; -} - -#define TWO_SECOND_DIVISOR (2147483647l/TICKS_PER_SEC) - -/************************************************************************** -RFC2131_SLEEP_INTERVAL - sleep for expotentially longer times -**************************************************************************/ -long -rfc2131_sleep_interval (int base, int exp) -{ - static long seed = 0; - long q; - unsigned long tmo; - -#ifdef BACKOFF_LIMIT - if (exp > BACKOFF_LIMIT) - exp = BACKOFF_LIMIT; -#endif - if (!seed) - /* Initialize linear congruential generator */ - seed = (currticks () + *((long *) &arptable[ARP_CLIENT].node) - + ((short *) arptable[ARP_CLIENT].node)[2]); - /* simplified version of the LCG given in Bruce Schneier's - "Applied Cryptography" */ - q = seed / 53668; - if ((seed = 40014 * (seed - 53668 * q) - 12211 *q ) < 0) - seed += 2147483563L; - tmo = (base << exp) + (TICKS_PER_SEC - (seed / TWO_SECOND_DIVISOR)); - return tmo; -} - -/************************************************************************** -CLEANUP - shut down networking -**************************************************************************/ -void -cleanup_net (void) -{ - if (network_ready) - { - /* Stop receiving packets. */ - eth_disable (); - network_ready = 0; - } -} diff --git a/netboot/misc.c b/netboot/misc.c deleted file mode 100644 index 28614fdc4..000000000 --- a/netboot/misc.c +++ /dev/null @@ -1,266 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* Based on "src/misc.c" in etherboot-5.0.5. */ - -#define GRUB 1 -#include - -void -sleep (int secs) -{ - unsigned long tmo = currticks () + secs; - - while (currticks () < tmo) - ; -} - -void -twiddle (void) -{ - static unsigned long lastticks = 0; - static int count = 0; - static const char tiddles[]="-\\|/"; - unsigned long ticks; - - if (debug) - { - if ((ticks = currticks ()) == lastticks) - return; - - lastticks = ticks; - grub_putchar (tiddles[(count++) & 3]); - grub_putchar ('\b'); - } -} - -/* Because Etherboot uses its own formats for the printf family, - define separate definitions from GRUB. */ -/************************************************************************** -PRINTF and friends - - Formats: - %[#]x - 4 bytes long (8 hex digits, lower case) - %[#]X - 4 bytes long (8 hex digits, upper case) - %[#]hx - 2 bytes int (4 hex digits, lower case) - %[#]hX - 2 bytes int (4 hex digits, upper case) - %[#]hhx - 1 byte int (2 hex digits, lower case) - %[#]hhX - 1 byte int (2 hex digits, upper case) - - optional # prefixes 0x or 0X - %d - decimal int - %c - char - %s - string - %@ - Internet address in ddd.ddd.ddd.ddd notation - %! - Ethernet address in xx:xx:xx:xx:xx:xx notation - Note: width specification not supported -**************************************************************************/ -static int -etherboot_vsprintf (char *buf, const char *fmt, const int *dp) -{ - char *p, *s; - - s = buf; - for ( ; *fmt != '\0'; ++fmt) - { - if (*fmt != '%') - { - buf ? *s++ = *fmt : grub_putchar (*fmt); - continue; - } - - if (*++fmt == 's') - { - for (p = (char *) *dp++; *p != '\0'; p++) - buf ? *s++ = *p : grub_putchar (*p); - } - else - { - /* Length of item is bounded */ - char tmp[20], *q = tmp; - int alt = 0; - int shift = 28; - - if (*fmt == '#') - { - alt = 1; - fmt++; - } - - if (*fmt == 'h') - { - shift = 12; - fmt++; - } - - if (*fmt == 'h') - { - shift = 4; - fmt++; - } - - /* - * Before each format q points to tmp buffer - * After each format q points past end of item - */ - if ((*fmt | 0x20) == 'x') - { - /* With x86 gcc, sizeof(long) == sizeof(int) */ - const long *lp = (const long *) dp; - long h = *lp++; - int ncase = (*fmt & 0x20); - - dp = (const int *) lp; - if (alt) - { - *q++ = '0'; - *q++ = 'X' | ncase; - } - for (; shift >= 0; shift -= 4) - *q++ = "0123456789ABCDEF"[(h >> shift) & 0xF] | ncase; - } - else if (*fmt == 'd') - { - int i = *dp++; - char *r; - - if (i < 0) - { - *q++ = '-'; - i = -i; - } - - p = q; /* save beginning of digits */ - do - { - *q++ = '0' + (i % 10); - i /= 10; - } - while (i); - - /* reverse digits, stop in middle */ - r = q; /* don't alter q */ - while (--r > p) - { - i = *r; - *r = *p; - *p++ = i; - } - } - else if (*fmt == '@') - { - unsigned char *r; - union - { - long l; - unsigned char c[4]; - } - u; - const long *lp = (const long *) dp; - - u.l = *lp++; - dp = (const int *) lp; - - for (r = &u.c[0]; r < &u.c[4]; ++r) - q += etherboot_sprintf (q, "%d.", *r); - - --q; - } - else if (*fmt == '!') - { - char *r; - p = (char *) *dp++; - - for (r = p + ETH_ALEN; p < r; ++p) - q += etherboot_sprintf (q, "%hhX:", *p); - - --q; - } - else if (*fmt == 'c') - *q++ = *dp++; - else - *q++ = *fmt; - - /* now output the saved string */ - for (p = tmp; p < q; ++p) - buf ? *s++ = *p : grub_putchar (*p); - } - } - - if (buf) - *s = '\0'; - - return (s - buf); -} - -int -etherboot_sprintf (char *buf, const char *fmt, ...) -{ - return etherboot_vsprintf (buf, fmt, ((const int *) &fmt) + 1); -} - -void -etherboot_printf (const char *fmt, ...) -{ - (void) etherboot_vsprintf (0, fmt, ((const int *) &fmt) + 1); -} - -int -inet_aton (char *p, in_addr *addr) -{ - unsigned long ip = 0; - int val; - int i; - - for (i = 0; i < 4; i++) - { - val = getdec (&p); - - if (val < 0 || val > 255) - return 0; - - if (i != 3 && *p++ != '.') - return 0; - - ip = (ip << 8) | val; - } - - addr->s_addr = htonl (ip); - - return 1; -} - -int -getdec (char **ptr) -{ - char *p = *ptr; - int ret = 0; - - if (*p < '0' || *p > '9') - return -1; - - while (*p >= '0' && *p <= '9') - { - ret = ret * 10 + (*p - '0'); - p++; - } - - *ptr = p; - - return ret; -} diff --git a/netboot/natsemi.c b/netboot/natsemi.c deleted file mode 100644 index 5a164185a..000000000 --- a/netboot/natsemi.c +++ /dev/null @@ -1,739 +0,0 @@ -/* -*- Mode:C; c-basic-offset:4; -*- */ - -/* - natsemi.c: An Etherboot driver for the NatSemi DP8381x series. - - Copyright (C) 2001 Entity Cyber, Inc. - - This development of this Etherboot driver was funded by - - Sicom Systems: http://www.sicompos.com/ - - Author: Marty Connor (mdc@thinguin.org) - Adapted from a Linux driver which was written by Donald Becker - - This software may be used and distributed according to the terms - of the GNU Public License (GPL), incorporated herein by reference. - - Original Copyright Notice: - - Written/copyright 1999-2001 by Donald Becker. - - This software may be used and distributed according to the terms of - the GNU General Public License (GPL), incorporated herein by reference. - Drivers based on or derived from this code fall under the GPL and must - retain the authorship, copyright and license notice. This file is not - a complete program and may only be used when the entire operating - system is licensed under the GPL. License for under other terms may be - available. Contact the original author for details. - - The original author may be reached as becker@scyld.com, or at - Scyld Computing Corporation - 410 Severn Ave., Suite 210 - Annapolis MD 21403 - - Support information and updates available at - http://www.scyld.com/network/netsemi.html - - References: - - http://www.scyld.com/expert/100mbps.html - http://www.scyld.com/expert/NWay.html - Datasheet is available from: - http://www.national.com/pf/DP/DP83815.html - -*/ - -/* Revision History */ - -/* - 29 May 2001 mdc 1.0 - Initial Release. Tested with Netgear FA311 and FA312 boards -*/ -/* Includes */ - -#include "etherboot.h" -#include "nic.h" -#include "pci.h" -#include "cards.h" - -/* defines */ - -#define OWN 0x80000000 -#define DSIZE 0x00000FFF -#define CRC_SIZE 4 - -/* Time in ticks before concluding the transmitter is hung. */ -#define TX_TIMEOUT (4*TICKS_PER_SEC) - -#define TX_BUF_SIZE 1536 -#define RX_BUF_SIZE 1536 - -#define NUM_RX_DESC 4 /* Number of Rx descriptor registers. */ - -typedef unsigned char u8; -typedef signed char s8; -typedef unsigned short u16; -typedef signed short s16; -typedef unsigned int u32; -typedef signed int s32; - -/* helpful macroes if on a big_endian machine for changing byte order. - not strictly needed on Intel */ -#define le16_to_cpu(val) (val) -#define cpu_to_le32(val) (val) -#define get_unaligned(ptr) (*(ptr)) -#define put_unaligned(val, ptr) ((void)( *(ptr) = (val) )) -#define get_u16(ptr) (*(u16 *)(ptr)) -#define virt_to_bus(x) ((unsigned long)x) -#define virt_to_le32desc(addr) virt_to_bus(addr) - -enum pcistuff { - PCI_USES_IO = 0x01, - PCI_USES_MEM = 0x02, - PCI_USES_MASTER = 0x04, - PCI_ADDR0 = 0x08, - PCI_ADDR1 = 0x10, -}; - -/* MMIO operations required */ -#define PCI_IOTYPE (PCI_USES_MASTER | PCI_USES_MEM | PCI_ADDR1) - -/* Offsets to the device registers. - Unlike software-only systems, device drivers interact with complex hardware. - It's not useful to define symbolic names for every register bit in the - device. -*/ -enum register_offsets { - ChipCmd = 0x00, - ChipConfig = 0x04, - EECtrl = 0x08, - PCIBusCfg = 0x0C, - IntrStatus = 0x10, - IntrMask = 0x14, - IntrEnable = 0x18, - TxRingPtr = 0x20, - TxConfig = 0x24, - RxRingPtr = 0x30, - RxConfig = 0x34, - ClkRun = 0x3C, - WOLCmd = 0x40, - PauseCmd = 0x44, - RxFilterAddr = 0x48, - RxFilterData = 0x4C, - BootRomAddr = 0x50, - BootRomData = 0x54, - SiliconRev = 0x58, - StatsCtrl = 0x5C, - StatsData = 0x60, - RxPktErrs = 0x60, - RxMissed = 0x68, - RxCRCErrs = 0x64, - PCIPM = 0x44, - PhyStatus = 0xC0, - MIntrCtrl = 0xC4, - MIntrStatus = 0xC8, - - /* These are from the spec, around page 78... on a separate table. */ - PGSEL = 0xCC, - PMDCSR = 0xE4, - TSTDAT = 0xFC, - DSPCFG = 0xF4, - SDCFG = 0x8C -}; - -/* Bit in ChipCmd. */ -enum ChipCmdBits { - ChipReset = 0x100, - RxReset = 0x20, - TxReset = 0x10, - RxOff = 0x08, - RxOn = 0x04, - TxOff = 0x02, - TxOn = 0x01 -}; - -/* Bits in the RxMode register. */ -enum rx_mode_bits { - AcceptErr = 0x20, - AcceptRunt = 0x10, - AcceptBroadcast = 0xC0000000, - AcceptMulticast = 0x00200000, - AcceptAllMulticast = 0x20000000, - AcceptAllPhys = 0x10000000, - AcceptMyPhys = 0x08000000 -}; - -typedef struct _BufferDesc { - u32 link; - volatile u32 cmdsts; - u32 bufptr; - u32 software_use; -} BufferDesc; - -/* Bits in network_desc.status */ -enum desc_status_bits { - DescOwn = 0x80000000, - DescMore = 0x40000000, - DescIntr = 0x20000000, - DescNoCRC = 0x10000000, - DescPktOK = 0x08000000, - RxTooLong = 0x00400000 -}; - -/* Globals */ - -static int natsemi_debug = 1; /* 1 normal messages, 0 quiet .. 7 verbose. */ - -const char *nic_name; - -static u32 SavedClkRun; - - -static unsigned short vendor, dev_id; -static unsigned long ioaddr; - -static unsigned int cur_rx; - -static unsigned int advertising; - -static unsigned int rx_config; -static unsigned int tx_config; - -/* Note: transmit and receive buffers and descriptors must be - longword aligned -*/ - -static BufferDesc txd __attribute__ ((aligned(4))); -static BufferDesc rxd[NUM_RX_DESC] __attribute__ ((aligned(4))); - -#ifdef USE_LOWMEM_BUFFER -#define txb ((char *)0x10000 - TX_BUF_SIZE) -#define rxb ((char *)0x10000 - NUM_RX_DESC*RX_BUF_SIZE - TX_BUF_SIZE) -#else -static unsigned char txb[TX_BUF_SIZE] __attribute__ ((aligned(4))); -static unsigned char rxb[NUM_RX_DESC * RX_BUF_SIZE] __attribute__ ((aligned(4))); -#endif - -/* Function Prototypes */ - -struct nic *natsemi_probe(struct nic *nic, unsigned short *io_addrs, struct pci_device *pci); -static int eeprom_read(long addr, int location); -static int mdio_read(int phy_id, int location); -static void natsemi_init(struct nic *nic); -static void natsemi_reset(struct nic *nic); -static void natsemi_init_rxfilter(struct nic *nic); -static void natsemi_init_txd(struct nic *nic); -static void natsemi_init_rxd(struct nic *nic); -static void natsemi_set_rx_mode(struct nic *nic); -static void natsemi_check_duplex(struct nic *nic); -static void natsemi_transmit(struct nic *nic, const char *d, unsigned int t, unsigned int s, const char *p); -static int natsemi_poll(struct nic *nic); -static void natsemi_disable(struct nic *nic); - -/* - * Function: natsemi_probe - * - * Description: Retrieves the MAC address of the card, and sets up some - * globals required by other routines, and initializes the NIC, making it - * ready to send and receive packets. - * - * Side effects: - * leaves the ioaddress of the natsemi chip in the variable ioaddr. - * leaves the natsemi initialized, and ready to recieve packets. - * - * Returns: struct nic *: pointer to NIC data structure - */ - -struct nic * -natsemi_probe(struct nic *nic, unsigned short *io_addrs, struct pci_device *pci) -{ - int i; - int prev_eedata; - u32 tmp; - - if (io_addrs == 0 || *io_addrs == 0) - return NULL; - - /* initialize some commonly used globals */ - - ioaddr = *io_addrs & ~3; - vendor = pci->vendor; - dev_id = pci->dev_id; - nic_name = pci->name; - - adjust_pci_device(pci); - - /* natsemi has a non-standard PM control register - * in PCI config space. Some boards apparently need - * to be brought to D0 in this manner. - */ - pcibios_read_config_dword(pci->bus, pci->devfn, PCIPM, &tmp); - if (tmp & (0x03|0x100)) { - /* D0 state, disable PME assertion */ - u32 newtmp = tmp & ~(0x03|0x100); - pcibios_write_config_dword(pci->bus, pci->devfn, PCIPM, newtmp); - } - - /* get MAC address */ - - prev_eedata = eeprom_read(ioaddr, 6); - for (i = 0; i < 3; i++) { - int eedata = eeprom_read(ioaddr, i + 7); - nic->node_addr[i*2] = (eedata << 1) + (prev_eedata >> 15); - nic->node_addr[i*2+1] = eedata >> 7; - prev_eedata = eedata; - } - - printf("\nnatsemi_probe: MAC addr %! at ioaddr %#hX\n", - nic->node_addr, ioaddr); - printf("natsemi_probe: Vendor:%#hX Device:%#hX\n", vendor, dev_id); - - /* Reset the chip to erase any previous misconfiguration. */ - outl(ChipReset, ioaddr + ChipCmd); - - advertising = mdio_read(1, 4); - { - u32 chip_config = inl(ioaddr + ChipConfig); - printf("%s: Transceiver default autoneg. %s " - "10%s %s duplex.\n", - nic_name, - chip_config & 0x2000 ? "enabled, advertise" : "disabled, force", - chip_config & 0x4000 ? "0" : "", - chip_config & 0x8000 ? "full" : "half"); - } - printf("%s: Transceiver status %hX advertising %hX\n", - nic_name, (int)inl(ioaddr + 0x84), advertising); - - /* Disable PME: - * The PME bit is initialized from the EEPROM contents. - * PCI cards probably have PME disabled, but motherboard - * implementations may have PME set to enable WakeOnLan. - * With PME set the chip will scan incoming packets but - * nothing will be written to memory. */ - SavedClkRun = inl(ioaddr + ClkRun); - outl(SavedClkRun & ~0x100, ioaddr + ClkRun); - - /* initialize device */ - natsemi_init(nic); - - nic->reset = natsemi_init; - nic->poll = natsemi_poll; - nic->transmit = natsemi_transmit; - nic->disable = natsemi_disable; - - return nic; -} - -/* Read the EEPROM and MII Management Data I/O (MDIO) interfaces. - The EEPROM code is for the common 93c06/46 EEPROMs with 6 bit addresses. -*/ - -/* Delay between EEPROM clock transitions. - No extra delay is needed with 33Mhz PCI, but future 66Mhz access may need - a delay. */ -#define eeprom_delay(ee_addr) inl(ee_addr) - -enum EEPROM_Ctrl_Bits { - EE_ShiftClk = 0x04, - EE_DataIn = 0x01, - EE_ChipSelect = 0x08, - EE_DataOut = 0x02 -}; - -#define EE_Write0 (EE_ChipSelect) -#define EE_Write1 (EE_ChipSelect | EE_DataIn) - -/* The EEPROM commands include the alway-set leading bit. */ -enum EEPROM_Cmds { - EE_WriteCmd=(5 << 6), EE_ReadCmd=(6 << 6), EE_EraseCmd=(7 << 6), -}; - -static int eeprom_read(long addr, int location) -{ - int i; - int retval = 0; - int ee_addr = addr + EECtrl; - int read_cmd = location | EE_ReadCmd; - outl(EE_Write0, ee_addr); - - /* Shift the read command bits out. */ - for (i = 10; i >= 0; i--) { - short dataval = (read_cmd & (1 << i)) ? EE_Write1 : EE_Write0; - outl(dataval, ee_addr); - eeprom_delay(ee_addr); - outl(dataval | EE_ShiftClk, ee_addr); - eeprom_delay(ee_addr); - } - outl(EE_ChipSelect, ee_addr); - eeprom_delay(ee_addr); - - for (i = 0; i < 16; i++) { - outl(EE_ChipSelect | EE_ShiftClk, ee_addr); - eeprom_delay(ee_addr); - retval |= (inl(ee_addr) & EE_DataOut) ? 1 << i : 0; - outl(EE_ChipSelect, ee_addr); - eeprom_delay(ee_addr); - } - - /* Terminate the EEPROM access. */ - outl(EE_Write0, ee_addr); - outl(0, ee_addr); - - return retval; -} - -/* MII transceiver control section. - The 83815 series has an internal transceiver, and we present the - management registers as if they were MII connected. */ - -static int mdio_read(int phy_id, int location) -{ - if (phy_id == 1 && location < 32) - return inl(ioaddr + 0x80 + (location<<2)) & 0xffff; - else - return 0xffff; -} - -/* Function: natsemi_init - * - * Description: resets the ethernet controller chip and configures - * registers and data structures required for sending and receiving packets. - * - * Arguments: struct nic *nic: NIC data structure - * - * returns: void. - */ - -static void -natsemi_init(struct nic *nic) -{ - natsemi_reset(nic); - - /* Disable PME: - * The PME bit is initialized from the EEPROM contents. - * PCI cards probably have PME disabled, but motherboard - * implementations may have PME set to enable WakeOnLan. - * With PME set the chip will scan incoming packets but - * nothing will be written to memory. */ - outl(SavedClkRun & ~0x100, ioaddr + ClkRun); - - natsemi_init_rxfilter(nic); - - natsemi_init_txd(nic); - natsemi_init_rxd(nic); - - /* Initialize other registers. */ - /* Configure the PCI bus bursts and FIFO thresholds. */ - /* Configure for standard, in-spec Ethernet. */ - if (inl(ioaddr + ChipConfig) & 0x20000000) { /* Full duplex */ - tx_config = 0xD0801002; - rx_config = 0x10000020; - } else { - tx_config = 0x10801002; - rx_config = 0x0020; - } - outl(tx_config, ioaddr + TxConfig); - outl(rx_config, ioaddr + RxConfig); - - natsemi_check_duplex(nic); - natsemi_set_rx_mode(nic); - - outl(RxOn, ioaddr + ChipCmd); -} - -/* - * Function: natsemi_reset - * - * Description: soft resets the controller chip - * - * Arguments: struct nic *nic: NIC data structure - * - * Returns: void. - */ -static void -natsemi_reset(struct nic *nic) -{ - outl(ChipReset, ioaddr + ChipCmd); - - /* On page 78 of the spec, they recommend some settings for "optimum - performance" to be done in sequence. These settings optimize some - of the 100Mbit autodetection circuitry. Also, we only want to do - this for rev C of the chip. - */ - if (inl(ioaddr + SiliconRev) == 0x302) { - outw(0x0001, ioaddr + PGSEL); - outw(0x189C, ioaddr + PMDCSR); - outw(0x0000, ioaddr + TSTDAT); - outw(0x5040, ioaddr + DSPCFG); - outw(0x008C, ioaddr + SDCFG); - } - /* Disable interrupts using the mask. */ - outl(0, ioaddr + IntrMask); - outl(0, ioaddr + IntrEnable); -} - -/* Function: natsemi_init_rxfilter - * - * Description: sets receive filter address to our MAC address - * - * Arguments: struct nic *nic: NIC data structure - * - * returns: void. - */ - -static void -natsemi_init_rxfilter(struct nic *nic) -{ - int i; - - for (i = 0; i < ETH_ALEN; i += 2) { - outl(i, ioaddr + RxFilterAddr); - outw(nic->node_addr[i] + (nic->node_addr[i+1] << 8), ioaddr + RxFilterData); - } -} - -/* - * Function: natsemi_init_txd - * - * Description: initializes the Tx descriptor - * - * Arguments: struct nic *nic: NIC data structure - * - * returns: void. - */ - -static void -natsemi_init_txd(struct nic *nic) -{ - txd.link = (u32) 0; - txd.cmdsts = (u32) 0; - txd.bufptr = (u32) &txb[0]; - - /* load Transmit Descriptor Register */ - outl((u32) &txd, ioaddr + TxRingPtr); - if (natsemi_debug > 1) - printf("natsemi_init_txd: TX descriptor register loaded with: %X\n", - inl(ioaddr + TxRingPtr)); -} - -/* Function: natsemi_init_rxd - * - * Description: initializes the Rx descriptor ring - * - * Arguments: struct nic *nic: NIC data structure - * - * Returns: void. - */ - -static void -natsemi_init_rxd(struct nic *nic) -{ - int i; - - cur_rx = 0; - - /* init RX descriptor */ - for (i = 0; i < NUM_RX_DESC; i++) { - rxd[i].link = (i+1 < NUM_RX_DESC) ? (u32) &rxd[i+1] : (u32) &rxd[0]; - rxd[i].cmdsts = (u32) RX_BUF_SIZE; - rxd[i].bufptr = (u32) &rxb[i*RX_BUF_SIZE]; - if (natsemi_debug > 1) - printf("natsemi_init_rxd: rxd[%d]=%X link=%X cmdsts=%X bufptr=%X\n", - i, &rxd[i], rxd[i].link, rxd[i].cmdsts, rxd[i].bufptr); - } - - /* load Receive Descriptor Register */ - outl((u32) &rxd[0], ioaddr + RxRingPtr); - - if (natsemi_debug > 1) - printf("natsemi_init_rxd: RX descriptor register loaded with: %X\n", - inl(ioaddr + RxRingPtr)); -} - -/* Function: natsemi_set_rx_mode - * - * Description: - * sets the receive mode to accept all broadcast packets and packets - * with our MAC address, and reject all multicast packets. - * - * Arguments: struct nic *nic: NIC data structure - * - * Returns: void. - */ - -static void natsemi_set_rx_mode(struct nic *nic) -{ - u32 rx_mode = AcceptBroadcast | AcceptMyPhys; - - outl(rx_mode, ioaddr + RxFilterAddr); -} - -static void natsemi_check_duplex(struct nic *nic) -{ - int duplex = inl(ioaddr + ChipConfig) & 0x20000000 ? 1 : 0; - - if (natsemi_debug) - printf("%s: Setting %s-duplex based on negotiated link" - " capability.\n", nic_name, - duplex ? "full" : "half"); - if (duplex) { - rx_config |= 0x10000000; - tx_config |= 0xC0000000; - } else { - rx_config &= ~0x10000000; - tx_config &= ~0xC0000000; - } - outl(tx_config, ioaddr + TxConfig); - outl(rx_config, ioaddr + RxConfig); -} - -/* Function: natsemi_transmit - * - * Description: transmits a packet and waits for completion or timeout. - * - * Arguments: char d[6]: destination ethernet address. - * unsigned short t: ethernet protocol type. - * unsigned short s: size of the data-part of the packet. - * char *p: the data for the packet. - * - * Returns: void. - */ - -static void -natsemi_transmit(struct nic *nic, - const char *d, /* Destination */ - unsigned int t, /* Type */ - unsigned int s, /* size */ - const char *p) /* Packet */ -{ - u32 status, to, nstype; - volatile u32 tx_status; - - /* Stop the transmitter */ - outl(TxOff, ioaddr + ChipCmd); - - /* load Transmit Descriptor Register */ - outl((u32) &txd, ioaddr + TxRingPtr); - if (natsemi_debug > 1) - printf("natsemi_transmit: TX descriptor register loaded with: %X\n", - inl(ioaddr + TxRingPtr)); - - memcpy(txb, d, ETH_ALEN); - memcpy(txb + ETH_ALEN, nic->node_addr, ETH_ALEN); - nstype = htons(t); - memcpy(txb + 2 * ETH_ALEN, (char*)&nstype, 2); - memcpy(txb + ETH_HLEN, p, s); - - s += ETH_HLEN; - s &= DSIZE; - - if (natsemi_debug > 1) - printf("natsemi_transmit: sending %d bytes ethtype %hX\n", (int) s, t); - - /* pad to minimum packet size */ - while (s < ETH_ZLEN) - txb[s++] = '\0'; - - /* set the transmit buffer descriptor and enable Transmit State Machine */ - txd.bufptr = (u32) &txb[0]; - txd.cmdsts = (u32) OWN | s; - - /* restart the transmitter */ - outl(TxOn, ioaddr + ChipCmd); - - if (natsemi_debug > 1) - printf("natsemi_transmit: Queued Tx packet size %d.\n", (int) s); - - to = currticks() + TX_TIMEOUT; - - while (((tx_status=txd.cmdsts) & OWN) && (currticks() < to)) - /* wait */ ; - - if (currticks() >= to) { - printf("natsemi_transmit: TX Timeout! Tx status %X.\n", tx_status); - } - - if (!(tx_status & 0x08000000)) { - printf("natsemi_transmit: Transmit error, Tx status %X.\n", tx_status); - } -} - -/* Function: natsemi_poll - * - * Description: checks for a received packet and returns it if found. - * - * Arguments: struct nic *nic: NIC data structure - * - * Returns: 1 if packet was received. - * 0 if no packet was received. - * - * Side effects: - * Returns (copies) the packet to the array nic->packet. - * Returns the length of the packet in nic->packetlen. - */ - -static int -natsemi_poll(struct nic *nic) -{ - u32 rx_status = rxd[cur_rx].cmdsts; - int retstat = 0; - - if (natsemi_debug > 2) - printf("natsemi_poll: cur_rx:%d, status:%X\n", cur_rx, rx_status); - - if (!(rx_status & OWN)) - return retstat; - - if (natsemi_debug > 1) - printf("natsemi_poll: got a packet: cur_rx:%d, status:%X\n", - cur_rx, rx_status); - - nic->packetlen = (rx_status & DSIZE) - CRC_SIZE; - - if ((rx_status & (DescMore|DescPktOK|RxTooLong)) != DescPktOK) { - /* corrupted packet received */ - printf("natsemi_poll: Corrupted packet received, buffer status = %X\n", - rx_status); - retstat = 0; - } else { - /* give packet to higher level routine */ - memcpy(nic->packet, (rxb + cur_rx*RX_BUF_SIZE), nic->packetlen); - retstat = 1; - } - - /* return the descriptor and buffer to receive ring */ - rxd[cur_rx].cmdsts = RX_BUF_SIZE; - rxd[cur_rx].bufptr = (u32) &rxb[cur_rx*RX_BUF_SIZE]; - - if (++cur_rx == NUM_RX_DESC) - cur_rx = 0; - - /* re-enable the potentially idle receive state machine */ - outl(RxOn, ioaddr + ChipCmd); - - return retstat; -} - -/* Function: natsemi_disable - * - * Description: Turns off interrupts and stops Tx and Rx engines - * - * Arguments: struct nic *nic: NIC data structure - * - * Returns: void. - */ - -static void -natsemi_disable(struct nic *nic) -{ - /* Disable interrupts using the mask. */ - outl(0, ioaddr + IntrMask); - outl(0, ioaddr + IntrEnable); - - /* Stop the chip's Tx and Rx processes. */ - outl(RxOff | TxOff, ioaddr + ChipCmd); - - /* Restore PME enable bit */ - outl(SavedClkRun, ioaddr + ClkRun); -} diff --git a/netboot/ni5010.c b/netboot/ni5010.c deleted file mode 100644 index da3827a7b..000000000 --- a/netboot/ni5010.c +++ /dev/null @@ -1,371 +0,0 @@ -/************************************************************************** -Etherboot - BOOTP/TFTP Bootstrap Program -Driver for NI5010. -Code freely taken from Jan-Pascal van Best and Andreas Mohr's -Linux NI5010 driver. -***************************************************************************/ - -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2, or (at - * your option) any later version. - */ - -/* to get some global routines like printf */ -#include "etherboot.h" -/* to get the interface to the body of the program */ -#include "nic.h" -/* to get our own prototype */ -#include "cards.h" - -/* ni5010.h file included verbatim */ -/* - * Racal-Interlan ni5010 Ethernet definitions - * - * This is an extension to the Linux operating system, and is covered by the - * same Gnu Public License that covers that work. - * - * copyrights (c) 1996 by Jan-Pascal van Best (jvbest@wi.leidenuniv.nl) - * - * I have done a look in the following sources: - * crynwr-packet-driver by Russ Nelson - */ - -#define NI5010_BUFSIZE 2048 /* number of bytes in a buffer */ - -#define NI5010_MAGICVAL0 0x00 /* magic-values for ni5010 card */ -#define NI5010_MAGICVAL1 0x55 -#define NI5010_MAGICVAL2 0xAA - -#define SA_ADDR0 0x02 -#define SA_ADDR1 0x07 -#define SA_ADDR2 0x01 - -/* The number of low I/O ports used by the ni5010 ethercard. */ -#define NI5010_IO_EXTENT 32 - -#define PRINTK(x) if (NI5010_DEBUG) printk x -#define PRINTK2(x) if (NI5010_DEBUG>=2) printk x -#define PRINTK3(x) if (NI5010_DEBUG>=3) printk x - -/* The various IE command registers */ -#define EDLC_XSTAT (ioaddr + 0x00) /* EDLC transmit csr */ -#define EDLC_XCLR (ioaddr + 0x00) /* EDLC transmit "Clear IRQ" */ -#define EDLC_XMASK (ioaddr + 0x01) /* EDLC transmit "IRQ Masks" */ -#define EDLC_RSTAT (ioaddr + 0x02) /* EDLC receive csr */ -#define EDLC_RCLR (ioaddr + 0x02) /* EDLC receive "Clear IRQ" */ -#define EDLC_RMASK (ioaddr + 0x03) /* EDLC receive "IRQ Masks" */ -#define EDLC_XMODE (ioaddr + 0x04) /* EDLC transmit Mode */ -#define EDLC_RMODE (ioaddr + 0x05) /* EDLC receive Mode */ -#define EDLC_RESET (ioaddr + 0x06) /* EDLC RESET register */ -#define EDLC_TDR1 (ioaddr + 0x07) /* "Time Domain Reflectometry" reg1 */ -#define EDLC_ADDR (ioaddr + 0x08) /* EDLC station address, 6 bytes */ - /* 0x0E doesn't exist for r/w */ -#define EDLC_TDR2 (ioaddr + 0x0f) /* "Time Domain Reflectometry" reg2 */ -#define IE_GP (ioaddr + 0x10) /* GP pointer (word register) */ - /* 0x11 is 2nd byte of GP Pointer */ -#define IE_RCNT (ioaddr + 0x10) /* Count of bytes in rcv'd packet */ - /* 0x11 is 2nd byte of "Byte Count" */ -#define IE_MMODE (ioaddr + 0x12) /* Memory Mode register */ -#define IE_DMA_RST (ioaddr + 0x13) /* IE DMA Reset. write only */ -#define IE_ISTAT (ioaddr + 0x13) /* IE Interrupt Status. read only */ -#define IE_RBUF (ioaddr + 0x14) /* IE Receive Buffer port */ -#define IE_XBUF (ioaddr + 0x15) /* IE Transmit Buffer port */ -#define IE_SAPROM (ioaddr + 0x16) /* window on station addr prom */ -#define IE_RESET (ioaddr + 0x17) /* any write causes Board Reset */ - -/* bits in EDLC_XSTAT, interrupt clear on write, status when read */ -#define XS_TPOK 0x80 /* transmit packet successful */ -#define XS_CS 0x40 /* carrier sense */ -#define XS_RCVD 0x20 /* transmitted packet received */ -#define XS_SHORT 0x10 /* transmission media is shorted */ -#define XS_UFLW 0x08 /* underflow. iff failed board */ -#define XS_COLL 0x04 /* collision occurred */ -#define XS_16COLL 0x02 /* 16th collision occurred */ -#define XS_PERR 0x01 /* parity error */ - -#define XS_CLR_UFLW 0x08 /* clear underflow */ -#define XS_CLR_COLL 0x04 /* clear collision */ -#define XS_CLR_16COLL 0x02 /* clear 16th collision */ -#define XS_CLR_PERR 0x01 /* clear parity error */ - -/* bits in EDLC_XMASK, mask/enable transmit interrupts. register is r/w */ -#define XM_TPOK 0x80 /* =1 to enable Xmt Pkt OK interrupts */ -#define XM_RCVD 0x20 /* =1 to enable Xmt Pkt Rcvd ints */ -#define XM_UFLW 0x08 /* =1 to enable Xmt Underflow ints */ -#define XM_COLL 0x04 /* =1 to enable Xmt Collision ints */ -#define XM_COLL16 0x02 /* =1 to enable Xmt 16th Coll ints */ -#define XM_PERR 0x01 /* =1 to enable Xmt Parity Error ints */ - /* note: always clear this bit */ -#define XM_ALL (XM_TPOK | XM_RCVD | XM_UFLW | XM_COLL | XM_COLL16) - -/* bits in EDLC_RSTAT, interrupt clear on write, status when read */ -#define RS_PKT_OK 0x80 /* received good packet */ -#define RS_RST_PKT 0x10 /* RESET packet received */ -#define RS_RUNT 0x08 /* Runt Pkt rcvd. Len < 64 Bytes */ -#define RS_ALIGN 0x04 /* Alignment error. not 8 bit aligned */ -#define RS_CRC_ERR 0x02 /* Bad CRC on rcvd pkt */ -#define RS_OFLW 0x01 /* overflow for rcv FIFO */ -#define RS_VALID_BITS ( RS_PKT_OK | RS_RST_PKT | RS_RUNT | RS_ALIGN | RS_CRC_ERR | RS_OFLW ) - /* all valid RSTAT bits */ - -#define RS_CLR_PKT_OK 0x80 /* clear rcvd packet interrupt */ -#define RS_CLR_RST_PKT 0x10 /* clear RESET packet received */ -#define RS_CLR_RUNT 0x08 /* clear Runt Pckt received */ -#define RS_CLR_ALIGN 0x04 /* clear Alignment error */ -#define RS_CLR_CRC_ERR 0x02 /* clear CRC error */ -#define RS_CLR_OFLW 0x01 /* clear rcv FIFO Overflow */ - -/* bits in EDLC_RMASK, mask/enable receive interrupts. register is r/w */ -#define RM_PKT_OK 0x80 /* =1 to enable rcvd good packet ints */ -#define RM_RST_PKT 0x10 /* =1 to enable RESET packet ints */ -#define RM_RUNT 0x08 /* =1 to enable Runt Pkt rcvd ints */ -#define RM_ALIGN 0x04 /* =1 to enable Alignment error ints */ -#define RM_CRC_ERR 0x02 /* =1 to enable Bad CRC error ints */ -#define RM_OFLW 0x01 /* =1 to enable overflow error ints */ - -/* bits in EDLC_RMODE, set Receive Packet mode. register is r/w */ -#define RMD_TEST 0x80 /* =1 for Chip testing. normally 0 */ -#define RMD_ADD_SIZ 0x10 /* =1 5-byte addr match. normally 0 */ -#define RMD_EN_RUNT 0x08 /* =1 enable runt rcv. normally 0 */ -#define RMD_EN_RST 0x04 /* =1 to rcv RESET pkt. normally 0 */ - -#define RMD_PROMISC 0x03 /* receive *all* packets. unusual */ -#define RMD_MULTICAST 0x02 /* receive multicasts too. unusual */ -#define RMD_BROADCAST 0x01 /* receive broadcasts & normal. usual */ -#define RMD_NO_PACKETS 0x00 /* don't receive any packets. unusual */ - -/* bits in EDLC_XMODE, set Transmit Packet mode. register is r/w */ -#define XMD_COLL_CNT 0xf0 /* coll's since success. read-only */ -#define XMD_IG_PAR 0x08 /* =1 to ignore parity. ALWAYS set */ -#define XMD_T_MODE 0x04 /* =1 to power xcvr. ALWAYS set this */ -#define XMD_LBC 0x02 /* =1 for loopback. normally set */ -#define XMD_DIS_C 0x01 /* =1 disables contention. normally 0 */ - -/* bits in EDLC_RESET, write only */ -#define RS_RESET 0x80 /* =1 to hold EDLC in reset state */ - -/* bits in IE_MMODE, write only */ -#define MM_EN_DMA 0x80 /* =1 begin DMA xfer, Cplt clrs it */ -#define MM_EN_RCV 0x40 /* =1 allows Pkt rcv. clr'd by rcv */ -#define MM_EN_XMT 0x20 /* =1 begin Xmt pkt. Cplt clrs it */ -#define MM_BUS_PAGE 0x18 /* =00 ALWAYS. Used when MUX=1 */ -#define MM_NET_PAGE 0x06 /* =00 ALWAYS. Used when MUX=0 */ -#define MM_MUX 0x01 /* =1 means Rcv Buff on system bus */ - /* =0 means Xmt Buff on system bus */ - -/* bits in IE_ISTAT, read only */ -#define IS_TDIAG 0x80 /* =1 if Diagnostic problem */ -#define IS_EN_RCV 0x20 /* =1 until frame is rcv'd cplt */ -#define IS_EN_XMT 0x10 /* =1 until frame is xmt'd cplt */ -#define IS_EN_DMA 0x08 /* =1 until DMA is cplt or aborted */ -#define IS_DMA_INT 0x04 /* =0 iff DMA done interrupt. */ -#define IS_R_INT 0x02 /* =0 iff unmasked Rcv interrupt */ -#define IS_X_INT 0x01 /* =0 iff unmasked Xmt interrupt */ - -/* NIC specific static variables go here */ - -static unsigned short ioaddr = 0; -static unsigned int bufsize_rcv = 0; - -#if 0 -static void show_registers(void) -{ - printf("XSTAT %hhX ", inb(EDLC_XSTAT)); - printf("XMASK %hhX ", inb(EDLC_XMASK)); - printf("RSTAT %hhX ", inb(EDLC_RSTAT)); - printf("RMASK %hhX ", inb(EDLC_RMASK)); - printf("RMODE %hhX ", inb(EDLC_RMODE)); - printf("XMODE %hhX ", inb(EDLC_XMODE)); - printf("ISTAT %hhX\n", inb(IE_ISTAT)); -} -#endif - -static void reset_receiver(void) -{ - outw(0, IE_GP); /* Receive packet at start of buffer */ - outb(RS_VALID_BITS, EDLC_RCLR); /* Clear all pending Rcv interrupts */ - outb(MM_EN_RCV, IE_MMODE); /* Enable rcv */ -} - -/************************************************************************** -RESET - Reset adapter -***************************************************************************/ -static void ni5010_reset(struct nic *nic) -{ - int i; - - /* Reset the hardware here. Don't forget to set the station address. */ - outb(RS_RESET, EDLC_RESET); /* Hold up EDLC_RESET while configing board */ - outb(0, IE_RESET); /* Hardware reset of ni5010 board */ - outb(0, EDLC_XMASK); /* Disable all Xmt interrupts */ - outb(0, EDLC_RMASK); /* Disable all Rcv interrupt */ - outb(0xFF, EDLC_XCLR); /* Clear all pending Xmt interrupts */ - outb(0xFF, EDLC_RCLR); /* Clear all pending Rcv interrupts */ - outb(XMD_LBC, EDLC_XMODE); /* Only loopback xmits */ - /* Set the station address */ - for(i = 0; i < ETH_ALEN; i++) - outb(nic->node_addr[i], EDLC_ADDR + i); - outb(XMD_IG_PAR | XMD_T_MODE | XMD_LBC, EDLC_XMODE); - /* Normal packet xmit mode */ - outb(RMD_BROADCAST, EDLC_RMODE); - /* Receive broadcast and normal packets */ - reset_receiver(); - outb(0x00, EDLC_RESET); /* Un-reset the ni5010 */ -} - -/************************************************************************** -POLL - Wait for a frame -***************************************************************************/ -static int ni5010_poll(struct nic *nic) -{ - int rcv_stat; - - if (((rcv_stat = inb(EDLC_RSTAT)) & RS_VALID_BITS) != RS_PKT_OK) { - outb(rcv_stat, EDLC_RSTAT); /* Clear the status */ - return (0); - } - outb(rcv_stat, EDLC_RCLR); /* Clear the status */ - nic->packetlen = inw(IE_RCNT); - /* Read packet into buffer */ - outb(MM_MUX, IE_MMODE); /* Rcv buffer to system bus */ - outw(0, IE_GP); /* Seek to beginning of packet */ - insb(IE_RBUF, nic->packet, nic->packetlen); - return (1); -} - -/************************************************************************** -TRANSMIT - Transmit a frame -***************************************************************************/ -static void ni5010_transmit(struct nic *nic, - const char *d, /* Destination */ - unsigned int t, /* Type */ - unsigned int s, /* size */ - const char *p) /* Packet */ -{ - unsigned int len; - int buf_offs, xmt_stat; - unsigned long time; - - len = s + ETH_HLEN; - if (len < ETH_ZLEN) - len = ETH_ZLEN; - buf_offs = NI5010_BUFSIZE - len; - outb(0, EDLC_RMASK); /* Mask all receive interrupts */ - outb(0, IE_MMODE); /* Put Xmit buffer on system bus */ - outb(0xFF, EDLC_RCLR); /* Clear out pending rcv interrupts */ - outw(buf_offs, IE_GP); /* Point GP at start of packet */ - outsb(IE_XBUF, d, ETH_ALEN); /* Put dst in buffer */ - outsb(IE_XBUF, nic->node_addr, ETH_ALEN);/* Put src in buffer */ - outb(t >> 8, IE_XBUF); - outb(t, IE_XBUF); - outsb(IE_XBUF, p, s); /* Put data in buffer */ - while (s++ < ETH_ZLEN - ETH_HLEN) /* Pad to min size */ - outb(0, IE_XBUF); - outw(buf_offs, IE_GP); /* Rewrite where packet starts */ - /* should work without that outb() (Crynwr used it) */ - /*outb(MM_MUX, IE_MMODE);*/ - /* Xmt buffer to EDLC bus */ - outb(MM_EN_XMT | MM_MUX, IE_MMODE); /* Begin transmission */ - /* wait for transmit complete */ - while (((xmt_stat = inb(IE_ISTAT)) & IS_EN_XMT) != 0) - ; - reset_receiver(); /* Immediately switch to receive */ -} - -/************************************************************************** -DISABLE - Turn off ethernet interface -***************************************************************************/ -static void ni5010_disable(struct nic *nic) -{ - outb(0, IE_MMODE); - outb(RS_RESET, EDLC_RESET); -} - -static inline int rd_port(void) -{ - inb(IE_RBUF); - return inb(IE_SAPROM); -} - -static int ni5010_probe1(struct nic *nic) -{ - int i, boguscount = 40, data; - - /* The tests are from the Linux NI5010 driver - I don't understand it all, but if it works for them... */ - if (inb(ioaddr) == 0xFF) - return (0); - while ((rd_port() & rd_port() & rd_port() - & rd_port() & rd_port() & rd_port()) != 0xFF) - { - if (boguscount-- <= 0) - return (0); - } - for (i = 0; i < 32; i++) - if ((data = rd_port()) != 0xFF) - break; - if (data == 0xFF) - return (0); - if (data == SA_ADDR0 && rd_port() == SA_ADDR1 && rd_port() == SA_ADDR2) { - for (i = 0; i < 4; i++) - rd_port(); - if (rd_port() != NI5010_MAGICVAL1 || rd_port() != NI5010_MAGICVAL2) - return (0); - } else - return (0); - for (i = 0; i < ETH_ALEN; i++) { - outw(i, IE_GP); - nic->node_addr[i] = inb(IE_SAPROM); - } - printf("\nNI5010 ioaddr %#hX, addr %!\n", ioaddr, nic->node_addr); -/* get the size of the onboard receive buffer - * higher addresses than bufsize are wrapped into real buffer - * i.e. data for offs. 0x801 is written to 0x1 with a 2K onboard buffer - */ - if (bufsize_rcv == 0) { - outb(1, IE_MMODE); /* Put Rcv buffer on system bus */ - outw(0, IE_GP); /* Point GP at start of packet */ - outb(0, IE_RBUF); /* set buffer byte 0 to 0 */ - for (i = 1; i < 0xFF; i++) { - outw(i << 8, IE_GP); /* Point GP at packet size to be tested */ - outb(i, IE_RBUF); - outw(0x0, IE_GP); /* Point GP at start of packet */ - data = inb(IE_RBUF); - if (data == i) break; - } - bufsize_rcv = i << 8; - outw(0, IE_GP); /* Point GP at start of packet */ - outb(0, IE_RBUF); /* set buffer byte 0 to 0 again */ - } - printf("Bufsize rcv/xmt=%d/%d\n", bufsize_rcv, NI5010_BUFSIZE); - return (1); -} - -/************************************************************************** -PROBE - Look for an adapter, this routine's visible to the outside -***************************************************************************/ -struct nic *ni5010_probe(struct nic *nic, unsigned short *probe_addrs) -{ - static unsigned short io_addrs[] = { - 0x300, 0x320, 0x340, 0x360, 0x380, 0x3a0, 0 }; - unsigned short *p; - - /* if probe_addrs is 0, then use list above */ - if (probe_addrs == 0 || *probe_addrs == 0) - probe_addrs = io_addrs; - for (p = probe_addrs; (ioaddr = *p) != 0; p++) { - if (ni5010_probe1(nic)) - break; - } - if (ioaddr == 0) - return (0); - ni5010_reset(nic); - /* point to NIC specific routines */ - nic->reset = ni5010_reset; - nic->poll = ni5010_poll; - nic->transmit = ni5010_transmit; - nic->disable = ni5010_disable; - return (nic); -} diff --git a/netboot/nic.h b/netboot/nic.h deleted file mode 100644 index 7a235fb3c..000000000 --- a/netboot/nic.h +++ /dev/null @@ -1,31 +0,0 @@ - /* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2, or (at - * your option) any later version. - */ - -#ifndef NIC_H -#define NIC_H - -/* - * Structure returned from eth_probe and passed to other driver - * functions. - */ - -struct nic -{ - void (*reset)P((struct nic *)); - int (*poll)P((struct nic *)); - void (*transmit)P((struct nic *, const char *d, - unsigned int t, unsigned int s, const char *p)); - void (*disable)P((struct nic *)); - int flags; /* driver specific flags */ - struct rom_info *rom_info; /* -> rom_info from main */ - unsigned char *node_addr; - char *packet; - unsigned int packetlen; - void *priv_data; /* driver can hang private data here */ -}; - -#endif /* NIC_H */ diff --git a/netboot/ns8390.c b/netboot/ns8390.c deleted file mode 100644 index 07ec459f1..000000000 --- a/netboot/ns8390.c +++ /dev/null @@ -1,835 +0,0 @@ -/************************************************************************** -ETHERBOOT - BOOTP/TFTP Bootstrap Program - -Author: Martin Renters - Date: May/94 - - This code is based heavily on David Greenman's if_ed.c driver - - Copyright (C) 1993-1994, David Greenman, Martin Renters. - This software may be used, modified, copied, distributed, and sold, in - both source and binary form provided that the above copyright and these - terms are retained. Under no circumstances are the authors responsible for - the proper functioning of this software, nor do the authors assume any - responsibility for damages incurred with its use. - -3c503 support added by Bill Paul (wpaul@ctr.columbia.edu) on 11/15/94 -SMC8416 support added by Bill Paul (wpaul@ctr.columbia.edu) on 12/25/94 -3c503 PIO support added by Jim Hague (jim.hague@acm.org) on 2/17/98 -RX overrun by Klaus Espenlaub (espenlaub@informatik.uni-ulm.de) on 3/10/99 - parts taken from the Linux 8390 driver (by Donald Becker and Paul Gortmaker) - -**************************************************************************/ - -#include "etherboot.h" -#include "nic.h" -#include "ns8390.h" -#ifdef INCLUDE_NS8390 -#include "pci.h" -#endif -#include "cards.h" - -static unsigned char eth_vendor, eth_flags, eth_laar; -static unsigned short eth_nic_base, eth_asic_base; -static unsigned char eth_memsize, eth_rx_start, eth_tx_start; -static Address eth_bmem, eth_rmem; -static unsigned char eth_drain_receiver; - -#ifdef INCLUDE_WD -static struct wd_board { - const char *name; - char id; - char flags; - char memsize; -} wd_boards[] = { - {"WD8003S", TYPE_WD8003S, 0, MEM_8192}, - {"WD8003E", TYPE_WD8003E, 0, MEM_8192}, - {"WD8013EBT", TYPE_WD8013EBT, FLAG_16BIT, MEM_16384}, - {"WD8003W", TYPE_WD8003W, 0, MEM_8192}, - {"WD8003EB", TYPE_WD8003EB, 0, MEM_8192}, - {"WD8013W", TYPE_WD8013W, FLAG_16BIT, MEM_16384}, - {"WD8003EP/WD8013EP", - TYPE_WD8013EP, 0, MEM_8192}, - {"WD8013WC", TYPE_WD8013WC, FLAG_16BIT, MEM_16384}, - {"WD8013EPC", TYPE_WD8013EPC, FLAG_16BIT, MEM_16384}, - {"SMC8216T", TYPE_SMC8216T, FLAG_16BIT | FLAG_790, MEM_16384}, - {"SMC8216C", TYPE_SMC8216C, FLAG_16BIT | FLAG_790, MEM_16384}, - {"SMC8416T", TYPE_SMC8416T, FLAG_16BIT | FLAG_790, MEM_8192}, - {"SMC8416C/BT", TYPE_SMC8416C, FLAG_16BIT | FLAG_790, MEM_8192}, - {"SMC8013EBP", TYPE_SMC8013EBP,FLAG_16BIT, MEM_16384}, - {NULL, 0, 0, 0} -}; -#endif - -#ifdef INCLUDE_3C503 -static unsigned char t503_output; /* AUI or internal xcvr (Thinnet) */ -#endif - -#if defined(INCLUDE_WD) -#define eth_probe wd_probe -#if defined(INCLUDE_3C503) || defined(INCLUDE_NE) || defined(INCLUDE_NS8390) -Error you must only define one of INCLUDE_WD, INCLUDE_3C503, INCLUDE_NE, INCLUDE_NS8390 -#endif -#endif - -#if defined(INCLUDE_3C503) -#define eth_probe t503_probe -#if defined(INCLUDE_NE) || defined(INCLUDE_NS8390) || defined(INCLUDE_WD) -Error you must only define one of INCLUDE_WD, INCLUDE_3C503, INCLUDE_NE, INCLUDE_NS8390 -#endif -#endif - -#if defined(INCLUDE_NE) -#define eth_probe ne_probe -#if defined(INCLUDE_NS8390) || defined(INCLUDE_3C503) || defined(INCLUDE_WD) -Error you must only define one of INCLUDE_WD, INCLUDE_3C503, INCLUDE_NE, INCLUDE_NS8390 -#endif -#endif - -#if defined(INCLUDE_NS8390) -#define eth_probe nepci_probe -#if defined(INCLUDE_NE) || defined(INCLUDE_3C503) || defined(INCLUDE_WD) -Error you must only define one of INCLUDE_WD, INCLUDE_3C503, INCLUDE_NE, INCLUDE_NS8390 -#endif -#endif - -#if defined(INCLUDE_3C503) -#define ASIC_PIO _3COM_RFMSB -#else -#if defined(INCLUDE_NE) || defined(INCLUDE_NS8390) -#define ASIC_PIO NE_DATA -#endif -#endif - -#if defined(INCLUDE_NE) || defined(INCLUDE_NS8390) || (defined(INCLUDE_3C503) && !defined(T503_SHMEM)) -/************************************************************************** -ETH_PIO_READ - Read a frame via Programmed I/O -**************************************************************************/ -static void eth_pio_read(unsigned int src, unsigned char *dst, unsigned int cnt) -{ - if (eth_flags & FLAG_16BIT) { ++cnt; cnt &= ~1; } - outb(D8390_COMMAND_RD2 | - D8390_COMMAND_STA, eth_nic_base + D8390_P0_COMMAND); - outb(cnt, eth_nic_base + D8390_P0_RBCR0); - outb(cnt>>8, eth_nic_base + D8390_P0_RBCR1); - outb(src, eth_nic_base + D8390_P0_RSAR0); - outb(src>>8, eth_nic_base + D8390_P0_RSAR1); - outb(D8390_COMMAND_RD0 | - D8390_COMMAND_STA, eth_nic_base + D8390_P0_COMMAND); - -#ifdef INCLUDE_3C503 - outb(src & 0xff, eth_asic_base + _3COM_DALSB); - outb(src >> 8, eth_asic_base + _3COM_DAMSB); - outb(t503_output | _3COM_CR_START, eth_asic_base + _3COM_CR); -#endif - - if (eth_flags & FLAG_16BIT) - cnt >>= 1; - - while(cnt--) { -#ifdef INCLUDE_3C503 - while((inb(eth_asic_base + _3COM_STREG) & _3COM_STREG_DPRDY) == 0) - ; -#endif - - if (eth_flags & FLAG_16BIT) { - *((unsigned short *)dst) = inw(eth_asic_base + ASIC_PIO); - dst += 2; - } - else - *(dst++) = inb(eth_asic_base + ASIC_PIO); - } - -#ifdef INCLUDE_3C503 - outb(t503_output, eth_asic_base + _3COM_CR); -#endif -} - -/************************************************************************** -ETH_PIO_WRITE - Write a frame via Programmed I/O -**************************************************************************/ -static void eth_pio_write(const unsigned char *src, unsigned int dst, unsigned int cnt) -{ -#ifdef COMPEX_RL2000_FIX - unsigned int x; -#endif /* COMPEX_RL2000_FIX */ - if (eth_flags & FLAG_16BIT) { ++cnt; cnt &= ~1; } - outb(D8390_COMMAND_RD2 | - D8390_COMMAND_STA, eth_nic_base + D8390_P0_COMMAND); - outb(D8390_ISR_RDC, eth_nic_base + D8390_P0_ISR); - outb(cnt, eth_nic_base + D8390_P0_RBCR0); - outb(cnt>>8, eth_nic_base + D8390_P0_RBCR1); - outb(dst, eth_nic_base + D8390_P0_RSAR0); - outb(dst>>8, eth_nic_base + D8390_P0_RSAR1); - outb(D8390_COMMAND_RD1 | - D8390_COMMAND_STA, eth_nic_base + D8390_P0_COMMAND); - -#ifdef INCLUDE_3C503 - outb(dst & 0xff, eth_asic_base + _3COM_DALSB); - outb(dst >> 8, eth_asic_base + _3COM_DAMSB); - - outb(t503_output | _3COM_CR_DDIR | _3COM_CR_START, eth_asic_base + _3COM_CR); -#endif - - if (eth_flags & FLAG_16BIT) - cnt >>= 1; - - while(cnt--) - { -#ifdef INCLUDE_3C503 - while((inb(eth_asic_base + _3COM_STREG) & _3COM_STREG_DPRDY) == 0) - ; -#endif - - if (eth_flags & FLAG_16BIT) { - outw(*((unsigned short *)src), eth_asic_base + ASIC_PIO); - src += 2; - } - else - outb(*(src++), eth_asic_base + ASIC_PIO); - } - -#ifdef INCLUDE_3C503 - outb(t503_output, eth_asic_base + _3COM_CR); -#else -#ifdef COMPEX_RL2000_FIX - for (x = 0; - x < COMPEX_RL2000_TRIES && - (inb(eth_nic_base + D8390_P0_ISR) & D8390_ISR_RDC) - != D8390_ISR_RDC; - ++x); - if (x >= COMPEX_RL2000_TRIES) - printf("Warning: Compex RL2000 aborted wait!\n"); -#endif /* COMPEX_RL2000_FIX */ - while((inb(eth_nic_base + D8390_P0_ISR) & D8390_ISR_RDC) - != D8390_ISR_RDC); -#endif -} -#else -/************************************************************************** -ETH_PIO_READ - Dummy routine when NE2000 not compiled in -**************************************************************************/ -static void eth_pio_read(unsigned int src, unsigned char *dst, unsigned int cnt) {} -#endif - -/************************************************************************** -NS8390_RESET - Reset adapter -**************************************************************************/ -static void ns8390_reset(struct nic *nic) -{ - int i; - - eth_drain_receiver = 0; -#ifdef INCLUDE_WD - if (eth_flags & FLAG_790) - outb(D8390_COMMAND_PS0 | D8390_COMMAND_STP, eth_nic_base+D8390_P0_COMMAND); - else -#endif - outb(D8390_COMMAND_PS0 | D8390_COMMAND_RD2 | - D8390_COMMAND_STP, eth_nic_base+D8390_P0_COMMAND); - if (eth_flags & FLAG_16BIT) - outb(0x49, eth_nic_base+D8390_P0_DCR); - else - outb(0x48, eth_nic_base+D8390_P0_DCR); - outb(0, eth_nic_base+D8390_P0_RBCR0); - outb(0, eth_nic_base+D8390_P0_RBCR1); - outb(0x20, eth_nic_base+D8390_P0_RCR); /* monitor mode */ - outb(2, eth_nic_base+D8390_P0_TCR); - outb(eth_tx_start, eth_nic_base+D8390_P0_TPSR); - outb(eth_rx_start, eth_nic_base+D8390_P0_PSTART); -#ifdef INCLUDE_WD - if (eth_flags & FLAG_790) outb(0, eth_nic_base + 0x09); -#endif - outb(eth_memsize, eth_nic_base+D8390_P0_PSTOP); - outb(eth_memsize - 1, eth_nic_base+D8390_P0_BOUND); - outb(0xFF, eth_nic_base+D8390_P0_ISR); - outb(0, eth_nic_base+D8390_P0_IMR); -#ifdef INCLUDE_WD - if (eth_flags & FLAG_790) - outb(D8390_COMMAND_PS1 | - D8390_COMMAND_STP, eth_nic_base+D8390_P0_COMMAND); - else -#endif - outb(D8390_COMMAND_PS1 | - D8390_COMMAND_RD2 | D8390_COMMAND_STP, eth_nic_base+D8390_P0_COMMAND); - for (i=0; inode_addr[i], eth_nic_base+D8390_P1_PAR0+i); - for (i=0; iflags) ? 0 : _3COM_CR_XSEL; - outb(t503_output, eth_asic_base + _3COM_CR); -#endif -} - -static int ns8390_poll(struct nic *nic); - -#ifndef INCLUDE_3C503 -/************************************************************************** -ETH_RX_OVERRUN - Bring adapter back to work after an RX overrun -**************************************************************************/ -static void eth_rx_overrun(struct nic *nic) -{ - int start_time; - -#ifdef INCLUDE_WD - if (eth_flags & FLAG_790) - outb(D8390_COMMAND_PS0 | D8390_COMMAND_STP, eth_nic_base+D8390_P0_COMMAND); - else -#endif - outb(D8390_COMMAND_PS0 | D8390_COMMAND_RD2 | - D8390_COMMAND_STP, eth_nic_base+D8390_P0_COMMAND); - - /* wait for at least 1.6ms - we wait one timer tick */ - start_time = currticks(); - while (currticks() - start_time <= 1) - /* Nothing */; - - outb(0, eth_nic_base+D8390_P0_RBCR0); /* reset byte counter */ - outb(0, eth_nic_base+D8390_P0_RBCR1); - - /* - * Linux driver checks for interrupted TX here. This is not necessary, - * because the transmit routine waits until the frame is sent. - */ - - /* enter loopback mode and restart NIC */ - outb(2, eth_nic_base+D8390_P0_TCR); -#ifdef INCLUDE_WD - if (eth_flags & FLAG_790) - outb(D8390_COMMAND_PS0 | D8390_COMMAND_STA, eth_nic_base+D8390_P0_COMMAND); - else -#endif - outb(D8390_COMMAND_PS0 | D8390_COMMAND_RD2 | - D8390_COMMAND_STA, eth_nic_base+D8390_P0_COMMAND); - - /* clear the RX ring, acknowledge overrun interrupt */ - eth_drain_receiver = 1; - while (ns8390_poll(nic)) - /* Nothing */; - eth_drain_receiver = 0; - outb(D8390_ISR_OVW, eth_nic_base+D8390_P0_ISR); - - /* leave loopback mode - no packets to be resent (see Linux driver) */ - outb(0, eth_nic_base+D8390_P0_TCR); -} -#endif /* INCLUDE_3C503 */ - -/************************************************************************** -NS8390_TRANSMIT - Transmit a frame -**************************************************************************/ -static void ns8390_transmit( - struct nic *nic, - const char *d, /* Destination */ - unsigned int t, /* Type */ - unsigned int s, /* size */ - const char *p) /* Packet */ -{ -#ifdef INCLUDE_3C503 - if (!(eth_flags & FLAG_PIO)) { - memcpy((char *)eth_bmem, d, ETH_ALEN); /* dst */ - memcpy((char *)eth_bmem+ETH_ALEN, nic->node_addr, ETH_ALEN); /* src */ - *((char *)eth_bmem+12) = t>>8; /* type */ - *((char *)eth_bmem+13) = t; - memcpy((char *)eth_bmem+ETH_HLEN, p, s); - s += ETH_HLEN; - while (s < ETH_ZLEN) *((char *)eth_bmem+(s++)) = 0; - } -#endif - -#ifdef INCLUDE_WD - /* Memory interface */ - if (eth_flags & FLAG_16BIT) { - outb(eth_laar | WD_LAAR_M16EN, eth_asic_base + WD_LAAR); - inb(0x84); - } - if (eth_flags & FLAG_790) { - outb(WD_MSR_MENB, eth_asic_base + WD_MSR); - inb(0x84); - } - inb(0x84); - memcpy((char *)eth_bmem, d, ETH_ALEN); /* dst */ - memcpy((char *)eth_bmem+ETH_ALEN, nic->node_addr, ETH_ALEN); /* src */ - *((char *)eth_bmem+12) = t>>8; /* type */ - *((char *)eth_bmem+13) = t; - memcpy((char *)eth_bmem+ETH_HLEN, p, s); - s += ETH_HLEN; - while (s < ETH_ZLEN) *((char *)eth_bmem+(s++)) = 0; - if (eth_flags & FLAG_790) { - outb(0, eth_asic_base + WD_MSR); - inb(0x84); - } - if (eth_flags & FLAG_16BIT) { - outb(eth_laar & ~WD_LAAR_M16EN, eth_asic_base + WD_LAAR); - inb(0x84); - } -#endif - -#if defined(INCLUDE_3C503) - if (eth_flags & FLAG_PIO) { -#endif -#if defined(INCLUDE_NE) || defined(INCLUDE_NS8390) || (defined(INCLUDE_3C503) && !defined(T503_SHMEM)) - /* Programmed I/O */ - unsigned short type; - type = (t >> 8) | (t << 8); - eth_pio_write(d, eth_tx_start<<8, ETH_ALEN); - eth_pio_write(nic->node_addr, (eth_tx_start<<8)+ETH_ALEN, ETH_ALEN); - /* bcc generates worse code without (const+const) below */ - eth_pio_write((unsigned char *)&type, (eth_tx_start<<8)+(ETH_ALEN+ETH_ALEN), 2); - eth_pio_write(p, (eth_tx_start<<8)+ETH_HLEN, s); - s += ETH_HLEN; - if (s < ETH_ZLEN) s = ETH_ZLEN; -#endif -#if defined(INCLUDE_3C503) - } -#endif - -#ifdef INCLUDE_WD - if (eth_flags & FLAG_790) - outb(D8390_COMMAND_PS0 | - D8390_COMMAND_STA, eth_nic_base+D8390_P0_COMMAND); - else -#endif - outb(D8390_COMMAND_PS0 | - D8390_COMMAND_RD2 | D8390_COMMAND_STA, eth_nic_base+D8390_P0_COMMAND); - outb(eth_tx_start, eth_nic_base+D8390_P0_TPSR); - outb(s, eth_nic_base+D8390_P0_TBCR0); - outb(s>>8, eth_nic_base+D8390_P0_TBCR1); -#ifdef INCLUDE_WD - if (eth_flags & FLAG_790) - outb(D8390_COMMAND_PS0 | - D8390_COMMAND_TXP | D8390_COMMAND_STA, eth_nic_base+D8390_P0_COMMAND); - else -#endif - outb(D8390_COMMAND_PS0 | - D8390_COMMAND_TXP | D8390_COMMAND_RD2 | - D8390_COMMAND_STA, eth_nic_base+D8390_P0_COMMAND); -} - -/************************************************************************** -NS8390_POLL - Wait for a frame -**************************************************************************/ -static int ns8390_poll(struct nic *nic) -{ - int ret = 0; - unsigned char rstat, curr, next; - unsigned short len, frag; - unsigned short pktoff; - unsigned char *p; - struct ringbuffer pkthdr; - -#ifndef INCLUDE_3C503 - /* avoid infinite recursion: see eth_rx_overrun() */ - if (!eth_drain_receiver && (inb(eth_nic_base+D8390_P0_ISR) & D8390_ISR_OVW)) { - eth_rx_overrun(nic); - return(0); - } -#endif /* INCLUDE_3C503 */ - rstat = inb(eth_nic_base+D8390_P0_RSR); - if (!(rstat & D8390_RSTAT_PRX)) return(0); - next = inb(eth_nic_base+D8390_P0_BOUND)+1; - if (next >= eth_memsize) next = eth_rx_start; - outb(D8390_COMMAND_PS1, eth_nic_base+D8390_P0_COMMAND); - curr = inb(eth_nic_base+D8390_P1_CURR); - outb(D8390_COMMAND_PS0, eth_nic_base+D8390_P0_COMMAND); - if (curr >= eth_memsize) curr=eth_rx_start; - if (curr == next) return(0); -#ifdef INCLUDE_WD - if (eth_flags & FLAG_16BIT) { - outb(eth_laar | WD_LAAR_M16EN, eth_asic_base + WD_LAAR); - inb(0x84); - } - if (eth_flags & FLAG_790) { - outb(WD_MSR_MENB, eth_asic_base + WD_MSR); - inb(0x84); - } - inb(0x84); -#endif - pktoff = next << 8; - if (eth_flags & FLAG_PIO) - eth_pio_read(pktoff, (char *)&pkthdr, 4); - else - memcpy(&pkthdr, (char *)eth_rmem + pktoff, 4); - pktoff += sizeof(pkthdr); - /* incoming length includes FCS so must sub 4 */ - len = pkthdr.len - 4; - if ((pkthdr.status & D8390_RSTAT_PRX) == 0 || len < ETH_ZLEN - || len > ETH_FRAME_LEN) { - printf("Bogus packet, ignoring\n"); - return (0); - } - else { - p = nic->packet; - nic->packetlen = len; /* available to caller */ - frag = (eth_memsize << 8) - pktoff; - if (len > frag) { /* We have a wrap-around */ - /* read first part */ - if (eth_flags & FLAG_PIO) - eth_pio_read(pktoff, p, frag); - else - memcpy(p, (char *)eth_rmem + pktoff, frag); - pktoff = eth_rx_start << 8; - p += frag; - len -= frag; - } - /* read second part */ - if (eth_flags & FLAG_PIO) - eth_pio_read(pktoff, p, len); - else - memcpy(p, (char *)eth_rmem + pktoff, len); - ret = 1; - } -#ifdef INCLUDE_WD - if (eth_flags & FLAG_790) { - outb(0, eth_asic_base + WD_MSR); - inb(0x84); - } - if (eth_flags & FLAG_16BIT) { - outb(eth_laar & ~WD_LAAR_M16EN, eth_asic_base + WD_LAAR); - inb(0x84); - } - inb(0x84); -#endif - next = pkthdr.next; /* frame number of next packet */ - if (next == eth_rx_start) - next = eth_memsize; - outb(next-1, eth_nic_base+D8390_P0_BOUND); - return(ret); -} - -/************************************************************************** -NS8390_DISABLE - Turn off adapter -**************************************************************************/ -static void ns8390_disable(struct nic *nic) -{ -} - -/************************************************************************** -ETH_PROBE - Look for an adapter -**************************************************************************/ -#ifdef INCLUDE_NS8390 -struct nic *eth_probe(struct nic *nic, unsigned short *probe_addrs, - struct pci_device *pci) -#else -struct nic *eth_probe(struct nic *nic, unsigned short *probe_addrs) -#endif -{ - int i; - struct wd_board *brd; - unsigned short chksum; - unsigned char c; - eth_vendor = VENDOR_NONE; - eth_drain_receiver = 0; - -#ifdef INCLUDE_WD - /****************************************************************** - Search for WD/SMC cards - ******************************************************************/ - for (eth_asic_base = WD_LOW_BASE; eth_asic_base <= WD_HIGH_BASE; - eth_asic_base += 0x20) { - chksum = 0; - for (i=8; i<16; i++) - chksum += inb(eth_asic_base+i); - /* Extra checks to avoid soundcard */ - if ((chksum & 0xFF) == 0xFF && - inb(eth_asic_base+8) != 0xFF && - inb(eth_asic_base+9) != 0xFF) - break; - } - if (eth_asic_base > WD_HIGH_BASE) - return (0); - /* We've found a board */ - eth_vendor = VENDOR_WD; - eth_nic_base = eth_asic_base + WD_NIC_ADDR; - c = inb(eth_asic_base+WD_BID); /* Get board id */ - for (brd = wd_boards; brd->name; brd++) - if (brd->id == c) break; - if (!brd->name) { - printf("Unknown WD/SMC NIC type %hhX\n", c); - return (0); /* Unknown type */ - } - eth_flags = brd->flags; - eth_memsize = brd->memsize; - eth_tx_start = 0; - eth_rx_start = D8390_TXBUF_SIZE; - if ((c == TYPE_WD8013EP) && - (inb(eth_asic_base + WD_ICR) & WD_ICR_16BIT)) { - eth_flags = FLAG_16BIT; - eth_memsize = MEM_16384; - } - if ((c & WD_SOFTCONFIG) && (!(eth_flags & FLAG_790))) { - eth_bmem = (0x80000 | - ((inb(eth_asic_base + WD_MSR) & 0x3F) << 13)); - } else - eth_bmem = WD_DEFAULT_MEM; - if (brd->id == TYPE_SMC8216T || brd->id == TYPE_SMC8216C) { - *((unsigned int *)(eth_bmem + 8192)) = (unsigned int)0; - if (*((unsigned int *)(eth_bmem + 8192))) { - brd += 2; - eth_memsize = brd->memsize; - } - } - outb(0x80, eth_asic_base + WD_MSR); /* Reset */ - for (i=0; inode_addr[i] = inb(i+eth_asic_base+WD_LAR); - } - printf("\n%s base %#hx, memory %#hx, addr %!\n", - brd->name, eth_asic_base, eth_bmem, nic->node_addr); - if (eth_flags & FLAG_790) { - outb(WD_MSR_MENB, eth_asic_base+WD_MSR); - outb((inb(eth_asic_base+0x04) | - 0x80), eth_asic_base+0x04); - outb((((unsigned)eth_bmem >> 13) & 0x0F) | - (((unsigned)eth_bmem >> 11) & 0x40) | - (inb(eth_asic_base+0x0B) & 0xB0), eth_asic_base+0x0B); - outb((inb(eth_asic_base+0x04) & - ~0x80), eth_asic_base+0x04); - } else { - outb((((unsigned)eth_bmem >> 13) & 0x3F) | 0x40, eth_asic_base+WD_MSR); - } - if (eth_flags & FLAG_16BIT) { - if (eth_flags & FLAG_790) { - eth_laar = inb(eth_asic_base + WD_LAAR); - outb(WD_LAAR_M16EN, eth_asic_base + WD_LAAR); - } else { - outb((eth_laar = - WD_LAAR_L16EN | 1), eth_asic_base + WD_LAAR); -/* - The previous line used to be - WD_LAAR_M16EN | WD_LAAR_L16EN | 1)); - jluke@deakin.edu.au reported that removing WD_LAAR_M16EN made - it work for WD8013s. This seems to work for my 8013 boards. I - don't know what is really happening. I wish I had data sheets - or more time to decode the Linux driver. - Ken -*/ - } - inb(0x84); - } -#endif -#ifdef INCLUDE_3C503 - /****************************************************************** - Search for 3Com 3c503 if no WD/SMC cards - ******************************************************************/ - if (eth_vendor == VENDOR_NONE) { - int idx; - int iobase_reg, membase_reg; - static unsigned short base[] = { - 0x300, 0x310, 0x330, 0x350, - 0x250, 0x280, 0x2A0, 0x2E0, 0 }; - - /* Loop through possible addresses checking each one */ - - for (idx = 0; (eth_nic_base = base[idx]) != 0; ++idx) { - - eth_asic_base = eth_nic_base + _3COM_ASIC_OFFSET; -/* - * Note that we use the same settings for both 8 and 16 bit cards: - * both have an 8K bank of memory at page 1 while only the 16 bit - * cards have a bank at page 0. - */ - eth_memsize = MEM_16384; - eth_tx_start = 32; - eth_rx_start = 32 + D8390_TXBUF_SIZE; - - /* Check our base address. iobase and membase should */ - /* both have a maximum of 1 bit set or be 0. */ - - iobase_reg = inb(eth_asic_base + _3COM_BCFR); - membase_reg = inb(eth_asic_base + _3COM_PCFR); - - if ((iobase_reg & (iobase_reg - 1)) || - (membase_reg & (membase_reg - 1))) - continue; /* nope */ - - /* Now get the shared memory address */ - - eth_flags = 0; - - switch (membase_reg) { - case _3COM_PCFR_DC000: - eth_bmem = 0xdc000; - break; - case _3COM_PCFR_D8000: - eth_bmem = 0xd8000; - break; - case _3COM_PCFR_CC000: - eth_bmem = 0xcc000; - break; - case _3COM_PCFR_C8000: - eth_bmem = 0xc8000; - break; - case _3COM_PCFR_PIO: - eth_flags |= FLAG_PIO; - eth_bmem = 0; - break; - default: - continue; /* nope */ - } - break; - } - - if (base[idx] == 0) /* not found */ - return (0); -#ifndef T503_SHMEM - eth_flags |= FLAG_PIO; /* force PIO mode */ - eth_bmem = 0; -#endif - eth_vendor = VENDOR_3COM; - - - /* Need this to make ns8390_poll() happy. */ - - eth_rmem = eth_bmem - 0x2000; - - /* Reset NIC and ASIC */ - - outb(_3COM_CR_RST | _3COM_CR_XSEL, eth_asic_base + _3COM_CR ); - outb(_3COM_CR_XSEL, eth_asic_base + _3COM_CR ); - - /* Get our ethernet address */ - - outb(_3COM_CR_EALO | _3COM_CR_XSEL, eth_asic_base + _3COM_CR); - printf("\n3Com 3c503 base %#hx, ", eth_nic_base); - if (eth_flags & FLAG_PIO) - printf("PIO mode"); - else - printf("memory %#hx", eth_bmem); - for (i=0; inode_addr[i] = inb(eth_nic_base+i); - } - printf(", %s, addr %!\n", nic->flags ? "AUI" : "internal xcvr", - nic->node_addr); - outb(_3COM_CR_XSEL, eth_asic_base + _3COM_CR); - /* - * Initialize GA configuration register. Set bank and enable shared - * mem. We always use bank 1. Disable interrupts. - */ - outb(_3COM_GACFR_RSEL | - _3COM_GACFR_MBS0 | _3COM_GACFR_TCM | _3COM_GACFR_NIM, eth_asic_base + _3COM_GACFR); - - outb(0xff, eth_asic_base + _3COM_VPTR2); - outb(0xff, eth_asic_base + _3COM_VPTR1); - outb(0x00, eth_asic_base + _3COM_VPTR0); - /* - * Clear memory and verify that it worked (we use only 8K) - */ - - if (!(eth_flags & FLAG_PIO)) { - memset((char *)eth_bmem, 0, 0x2000); - for(i = 0; i < 0x2000; ++i) - if (*(((char *)eth_bmem)+i)) { - printf ("Failed to clear 3c503 shared mem.\n"); - return (0); - } - } - /* - * Initialize GA page/start/stop registers. - */ - outb(eth_tx_start, eth_asic_base + _3COM_PSTR); - outb(eth_memsize, eth_asic_base + _3COM_PSPR); - } -#endif -#if defined(INCLUDE_NE) || defined(INCLUDE_NS8390) - /****************************************************************** - Search for NE1000/2000 if no WD/SMC or 3com cards - ******************************************************************/ - if (eth_vendor == VENDOR_NONE) { - char romdata[16], testbuf[32]; - int idx; - static char test[] = "NE*000 memory"; - static unsigned short base[] = { -#ifdef NE_SCAN - NE_SCAN, -#endif - 0 }; - /* if no addresses supplied, fall back on defaults */ - if (probe_addrs == 0 || probe_addrs[0] == 0) - probe_addrs = base; - eth_bmem = 0; /* No shared memory */ - for (idx = 0; (eth_nic_base = probe_addrs[idx]) != 0; ++idx) { - eth_flags = FLAG_PIO; - eth_asic_base = eth_nic_base + NE_ASIC_OFFSET; - eth_memsize = MEM_16384; - eth_tx_start = 32; - eth_rx_start = 32 + D8390_TXBUF_SIZE; - c = inb(eth_asic_base + NE_RESET); - outb(c, eth_asic_base + NE_RESET); - inb(0x84); - outb(D8390_COMMAND_STP | - D8390_COMMAND_RD2, eth_nic_base + D8390_P0_COMMAND); - outb(D8390_RCR_MON, eth_nic_base + D8390_P0_RCR); - outb(D8390_DCR_FT1 | D8390_DCR_LS, eth_nic_base + D8390_P0_DCR); - outb(MEM_8192, eth_nic_base + D8390_P0_PSTART); - outb(MEM_16384, eth_nic_base + D8390_P0_PSTOP); -#ifdef NS8390_FORCE_16BIT - eth_flags |= FLAG_16BIT; /* force 16-bit mode */ -#endif - - eth_pio_write(test, 8192, sizeof(test)); - eth_pio_read(8192, testbuf, sizeof(test)); - if (!memcmp(test, testbuf, sizeof(test))) - break; - eth_flags |= FLAG_16BIT; - eth_memsize = MEM_32768; - eth_tx_start = 64; - eth_rx_start = 64 + D8390_TXBUF_SIZE; - outb(D8390_DCR_WTS | - D8390_DCR_FT1 | D8390_DCR_LS, eth_nic_base + D8390_P0_DCR); - outb(MEM_16384, eth_nic_base + D8390_P0_PSTART); - outb(MEM_32768, eth_nic_base + D8390_P0_PSTOP); - eth_pio_write(test, 16384, sizeof(test)); - eth_pio_read(16384, testbuf, sizeof(test)); - if (!memcmp(testbuf, test, sizeof(test))) - break; - } - if (eth_nic_base == 0) - return (0); - if (eth_nic_base > ISA_MAX_ADDR) /* PCI probably */ - eth_flags |= FLAG_16BIT; - eth_vendor = VENDOR_NOVELL; - eth_pio_read(0, romdata, sizeof(romdata)); - for (i=0; inode_addr[i] = romdata[i + ((eth_flags & FLAG_16BIT) ? i : 0)]; - } - printf("\nNE%c000 base %#hx, addr %!\n", - (eth_flags & FLAG_16BIT) ? '2' : '1', eth_nic_base, - nic->node_addr); - } -#endif - if (eth_vendor == VENDOR_NONE) - return(0); - if (eth_vendor != VENDOR_3COM) - eth_rmem = eth_bmem; - ns8390_reset(nic); - nic->reset = ns8390_reset; - nic->poll = ns8390_poll; - nic->transmit = ns8390_transmit; - nic->disable = ns8390_disable; - return(nic); -} - -/* - * Local variables: - * c-basic-offset: 8 - * End: - */ - diff --git a/netboot/ns8390.h b/netboot/ns8390.h deleted file mode 100644 index 2c4e972d5..000000000 --- a/netboot/ns8390.h +++ /dev/null @@ -1,238 +0,0 @@ -/************************************************************************** -ETHERBOOT - BOOTP/TFTP Bootstrap Program - -Author: Martin Renters - Date: Jun/94 - -**************************************************************************/ - -#define VENDOR_NONE 0 -#define VENDOR_WD 1 -#define VENDOR_NOVELL 2 -#define VENDOR_3COM 3 - -#define FLAG_PIO 0x01 -#define FLAG_16BIT 0x02 -#define FLAG_790 0x04 - -#define MEM_8192 32 -#define MEM_16384 64 -#define MEM_32768 128 - -#define ISA_MAX_ADDR 0x400 - -/************************************************************************** -Western Digital/SMC Board Definitions -**************************************************************************/ -#define WD_LOW_BASE 0x200 -#define WD_HIGH_BASE 0x3e0 -#ifndef WD_DEFAULT_MEM -#define WD_DEFAULT_MEM 0xD0000 -#endif -#define WD_NIC_ADDR 0x10 - -/************************************************************************** -Western Digital/SMC ASIC Addresses -**************************************************************************/ -#define WD_MSR 0x00 -#define WD_ICR 0x01 -#define WD_IAR 0x02 -#define WD_BIO 0x03 -#define WD_IRR 0x04 -#define WD_LAAR 0x05 -#define WD_IJR 0x06 -#define WD_GP2 0x07 -#define WD_LAR 0x08 -#define WD_BID 0x0E - -#define WD_ICR_16BIT 0x01 - -#define WD_MSR_MENB 0x40 - -#define WD_LAAR_L16EN 0x40 -#define WD_LAAR_M16EN 0x80 - -#define WD_SOFTCONFIG 0x20 - -/************************************************************************** -Western Digital/SMC Board Types -**************************************************************************/ -#define TYPE_WD8003S 0x02 -#define TYPE_WD8003E 0x03 -#define TYPE_WD8013EBT 0x05 -#define TYPE_WD8003W 0x24 -#define TYPE_WD8003EB 0x25 -#define TYPE_WD8013W 0x26 -#define TYPE_WD8013EP 0x27 -#define TYPE_WD8013WC 0x28 -#define TYPE_WD8013EPC 0x29 -#define TYPE_SMC8216T 0x2a -#define TYPE_SMC8216C 0x2b -#define TYPE_SMC8416T 0x00 /* Bogus entries: the 8416 generates the */ -#define TYPE_SMC8416C 0x00 /* the same codes as the 8216. */ -#define TYPE_SMC8013EBP 0x2c - -/************************************************************************** -3com 3c503 definitions -**************************************************************************/ - -#ifndef _3COM_BASE -#define _3COM_BASE 0x300 -#endif - -#define _3COM_TX_PAGE_OFFSET_8BIT 0x20 -#define _3COM_TX_PAGE_OFFSET_16BIT 0x0 -#define _3COM_RX_PAGE_OFFSET_16BIT 0x20 - -#define _3COM_ASIC_OFFSET 0x400 -#define _3COM_NIC_OFFSET 0x0 - -#define _3COM_PSTR 0 -#define _3COM_PSPR 1 - -#define _3COM_BCFR 3 -#define _3COM_BCFR_2E0 0x01 -#define _3COM_BCFR_2A0 0x02 -#define _3COM_BCFR_280 0x04 -#define _3COM_BCFR_250 0x08 -#define _3COM_BCFR_350 0x10 -#define _3COM_BCFR_330 0x20 -#define _3COM_BCFR_310 0x40 -#define _3COM_BCFR_300 0x80 -#define _3COM_PCFR 4 -#define _3COM_PCFR_PIO 0 -#define _3COM_PCFR_C8000 0x10 -#define _3COM_PCFR_CC000 0x20 -#define _3COM_PCFR_D8000 0x40 -#define _3COM_PCFR_DC000 0x80 -#define _3COM_CR 6 -#define _3COM_CR_RST 0x01 /* Reset GA and NIC */ -#define _3COM_CR_XSEL 0x02 /* Transceiver select. BNC=1(def) AUI=0 */ -#define _3COM_CR_EALO 0x04 /* window EA PROM 0-15 to I/O base */ -#define _3COM_CR_EAHI 0x08 /* window EA PROM 16-31 to I/O base */ -#define _3COM_CR_SHARE 0x10 /* select interrupt sharing option */ -#define _3COM_CR_DBSEL 0x20 /* Double buffer select */ -#define _3COM_CR_DDIR 0x40 /* DMA direction select */ -#define _3COM_CR_START 0x80 /* Start DMA controller */ -#define _3COM_GACFR 5 -#define _3COM_GACFR_MBS0 0x01 -#define _3COM_GACFR_MBS1 0x02 -#define _3COM_GACFR_MBS2 0x04 -#define _3COM_GACFR_RSEL 0x08 /* enable shared memory */ -#define _3COM_GACFR_TEST 0x10 /* for GA testing */ -#define _3COM_GACFR_OWS 0x20 /* select 0WS access to GA */ -#define _3COM_GACFR_TCM 0x40 /* Mask DMA interrupts */ -#define _3COM_GACFR_NIM 0x80 /* Mask NIC interrupts */ -#define _3COM_STREG 7 -#define _3COM_STREG_REV 0x07 /* GA revision */ -#define _3COM_STREG_DIP 0x08 /* DMA in progress */ -#define _3COM_STREG_DTC 0x10 /* DMA terminal count */ -#define _3COM_STREG_OFLW 0x20 /* Overflow */ -#define _3COM_STREG_UFLW 0x40 /* Underflow */ -#define _3COM_STREG_DPRDY 0x80 /* Data port ready */ -#define _3COM_IDCFR 8 -#define _3COM_IDCFR_DRQ0 0x01 /* DMA request 1 select */ -#define _3COM_IDCFR_DRQ1 0x02 /* DMA request 2 select */ -#define _3COM_IDCFR_DRQ2 0x04 /* DMA request 3 select */ -#define _3COM_IDCFR_UNUSED 0x08 /* not used */ -#define _3COM_IDCFR_IRQ2 0x10 /* Interrupt request 2 select */ -#define _3COM_IDCFR_IRQ3 0x20 /* Interrupt request 3 select */ -#define _3COM_IDCFR_IRQ4 0x40 /* Interrupt request 4 select */ -#define _3COM_IDCFR_IRQ5 0x80 /* Interrupt request 5 select */ -#define _3COM_IRQ2 2 -#define _3COM_IRQ3 3 -#define _3COM_IRQ4 4 -#define _3COM_IRQ5 5 -#define _3COM_DAMSB 9 -#define _3COM_DALSB 0x0a -#define _3COM_VPTR2 0x0b -#define _3COM_VPTR1 0x0c -#define _3COM_VPTR0 0x0d -#define _3COM_RFMSB 0x0e -#define _3COM_RFLSB 0x0f - -/************************************************************************** -NE1000/2000 definitions -**************************************************************************/ -#define NE_ASIC_OFFSET 0x10 -#define NE_RESET 0x0F /* Used to reset card */ -#define NE_DATA 0x00 /* Used to read/write NIC mem */ - -#define COMPEX_RL2000_TRIES 200 - -/************************************************************************** -8390 Register Definitions -**************************************************************************/ -#define D8390_P0_COMMAND 0x00 -#define D8390_P0_PSTART 0x01 -#define D8390_P0_PSTOP 0x02 -#define D8390_P0_BOUND 0x03 -#define D8390_P0_TSR 0x04 -#define D8390_P0_TPSR 0x04 -#define D8390_P0_TBCR0 0x05 -#define D8390_P0_TBCR1 0x06 -#define D8390_P0_ISR 0x07 -#define D8390_P0_RSAR0 0x08 -#define D8390_P0_RSAR1 0x09 -#define D8390_P0_RBCR0 0x0A -#define D8390_P0_RBCR1 0x0B -#define D8390_P0_RSR 0x0C -#define D8390_P0_RCR 0x0C -#define D8390_P0_TCR 0x0D -#define D8390_P0_DCR 0x0E -#define D8390_P0_IMR 0x0F -#define D8390_P1_COMMAND 0x00 -#define D8390_P1_PAR0 0x01 -#define D8390_P1_PAR1 0x02 -#define D8390_P1_PAR2 0x03 -#define D8390_P1_PAR3 0x04 -#define D8390_P1_PAR4 0x05 -#define D8390_P1_PAR5 0x06 -#define D8390_P1_CURR 0x07 -#define D8390_P1_MAR0 0x08 - -#define D8390_COMMAND_PS0 0x0 /* Page 0 select */ -#define D8390_COMMAND_PS1 0x40 /* Page 1 select */ -#define D8390_COMMAND_PS2 0x80 /* Page 2 select */ -#define D8390_COMMAND_RD2 0x20 /* Remote DMA control */ -#define D8390_COMMAND_RD1 0x10 -#define D8390_COMMAND_RD0 0x08 -#define D8390_COMMAND_TXP 0x04 /* transmit packet */ -#define D8390_COMMAND_STA 0x02 /* start */ -#define D8390_COMMAND_STP 0x01 /* stop */ - -#define D8390_RCR_MON 0x20 /* monitor mode */ - -#define D8390_DCR_FT1 0x40 -#define D8390_DCR_LS 0x08 /* Loopback select */ -#define D8390_DCR_WTS 0x01 /* Word transfer select */ - -#define D8390_ISR_PRX 0x01 /* successful recv */ -#define D8390_ISR_PTX 0x02 /* successful xmit */ -#define D8390_ISR_RXE 0x04 /* receive error */ -#define D8390_ISR_TXE 0x08 /* transmit error */ -#define D8390_ISR_OVW 0x10 /* Overflow */ -#define D8390_ISR_CNT 0x20 /* Counter overflow */ -#define D8390_ISR_RDC 0x40 /* Remote DMA complete */ -#define D8390_ISR_RST 0x80 /* reset */ - -#define D8390_RSTAT_PRX 0x01 /* successful recv */ -#define D8390_RSTAT_CRC 0x02 /* CRC error */ -#define D8390_RSTAT_FAE 0x04 /* Frame alignment error */ -#define D8390_RSTAT_OVER 0x08 /* FIFO overrun */ - -#define D8390_TXBUF_SIZE 6 -#define D8390_RXBUF_END 32 -#define D8390_PAGE_SIZE 256 - -struct ringbuffer { - unsigned char status; - unsigned char next; - unsigned short len; -}; -/* - * Local variables: - * c-basic-offset: 8 - * End: - */ - diff --git a/netboot/osdep.h b/netboot/osdep.h deleted file mode 100644 index 57218bfa3..000000000 --- a/netboot/osdep.h +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef __OSDEP_H__ -#define __OSDEP_H__ - -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2, or (at - * your option) any later version. - */ - -#define __LITTLE_ENDIAN /* x86 */ - -/* Taken from /usr/include/linux/hfs_sysdep.h */ -#if defined(__BIG_ENDIAN) -# if !defined(__constant_htonl) -# define __constant_htonl(x) (x) -# endif -# if !defined(__constant_htons) -# define __constant_htons(x) (x) -# endif -#elif defined(__LITTLE_ENDIAN) -# if !defined(__constant_htonl) -# define __constant_htonl(x) \ - ((unsigned long int)((((unsigned long int)(x) & 0x000000ffU) << 24) | \ - (((unsigned long int)(x) & 0x0000ff00U) << 8) | \ - (((unsigned long int)(x) & 0x00ff0000U) >> 8) | \ - (((unsigned long int)(x) & 0xff000000U) >> 24))) -# endif -# if !defined(__constant_htons) -# define __constant_htons(x) \ - ((unsigned short int)((((unsigned short int)(x) & 0x00ff) << 8) | \ - (((unsigned short int)(x) & 0xff00) >> 8))) -# endif -#else -# error "Don't know if bytes are big- or little-endian!" -#endif - -#define ntohl(x) \ -(__builtin_constant_p(x) ? \ - __constant_htonl((x)) : \ - __swap32(x)) -#define htonl(x) \ -(__builtin_constant_p(x) ? \ - __constant_htonl((x)) : \ - __swap32(x)) -#define ntohs(x) \ -(__builtin_constant_p(x) ? \ - __constant_htons((x)) : \ - __swap16(x)) -#define htons(x) \ -(__builtin_constant_p(x) ? \ - __constant_htons((x)) : \ - __swap16(x)) - -static inline unsigned long int __swap32(unsigned long int x) -{ - __asm__("xchgb %b0,%h0\n\t" - "rorl $16,%0\n\t" - "xchgb %b0,%h0" - : "=q" (x) - : "0" (x)); - return x; -} - -static inline unsigned short int __swap16(unsigned short int x) -{ - __asm__("xchgb %b0,%h0" - : "=q" (x) - : "0" (x)); - return x; -} - -/* Make routines available to all */ -#define swap32(x) __swap32(x) -#define swap16(x) __swap16(x) - -#include "linux-asm-io.h" - -typedef unsigned long Address; - -/* ANSI prototyping macro */ -#ifdef __STDC__ -#define P(x) x -#else -#define P(x) () -#endif - -#endif - -/* - * Local variables: - * c-basic-offset: 8 - * End: - */ diff --git a/netboot/otulip.c b/netboot/otulip.c deleted file mode 100644 index ea2b19bc1..000000000 --- a/netboot/otulip.c +++ /dev/null @@ -1,374 +0,0 @@ -/* - Etherboot DEC Tulip driver - adapted by Ken Yap from - - FreeBSD netboot DEC 21143 driver - - Author: David Sharp - date: Nov/98 - - Known to work on DEC DE500 using 21143-PC chipset. - Even on cards with the same chipset there can be - incompatablity problems with the way media selection - and status LED settings are done. See comments below. - - Some code fragments were taken from verious places, - Ken Yap's etherboot, FreeBSD's if_de.c, and various - Linux related files. DEC's manuals for the 21143 and - SROM format were very helpful. The Linux de driver - development page has a number of links to useful - related information. Have a look at: - ftp://cesdis.gsfc.nasa.gov/pub/linux/drivers/tulip-devel.html - -*/ - -#include "etherboot.h" -#include "nic.h" -#include "pci.h" -#include "cards.h" -#include "otulip.h" - -static unsigned short vendor, dev_id; -static unsigned short ioaddr; -static unsigned int *membase; -static unsigned char srom[1024]; - -#define BUFLEN 1536 /* must be longword divisable */ - /* buffers must be longword aligned */ - -/* transmit descriptor and buffer */ -static struct txdesc txd; - -/* receive descriptor(s) and buffer(s) */ -#define NRXD 4 -static struct rxdesc rxd[NRXD]; -static int rxd_tail = 0; -#ifdef USE_LOWMEM_BUFFER -#define rxb ((char *)0x10000 - NRXD * BUFLEN) -#define txb ((char *)0x10000 - NRXD * BUFLEN - BUFLEN) -#else -static unsigned char rxb[NRXD * BUFLEN]; -static unsigned char txb[BUFLEN]; -#endif - -static unsigned char ehdr[ETH_HLEN]; /* buffer for ethernet header */ - -enum tulip_offsets { - CSR0=0, CSR1=0x08, CSR2=0x10, CSR3=0x18, CSR4=0x20, CSR5=0x28, - CSR6=0x30, CSR7=0x38, CSR8=0x40, CSR9=0x48, CSR10=0x50, CSR11=0x58, - CSR12=0x60, CSR13=0x68, CSR14=0x70, CSR15=0x78 }; - - -/***************************************************************************/ -/* 21143 specific stuff */ -/***************************************************************************/ - -/* XXX assume 33MHz PCI bus, this is not very accurate and should be - used only with gross over estimations of required delay times unless - you tune UADJUST to your specific processor and I/O subsystem */ - -#define UADJUST 870 -static void udelay(unsigned long usec) { - unsigned long i; - for (i=((usec*UADJUST)/33)+1; i>0; i--) (void) TULIP_CSR_READ(csr_0); -} - -/* The following srom related code was taken from FreeBSD's if_de.c */ -/* with minor alterations to make it work here. the Linux code is */ -/* better but this was easier to use */ - -static void delay_300ns(void) -{ - int idx; - for (idx = (300 / 33) + 1; idx > 0; idx--) - (void) TULIP_CSR_READ(csr_busmode); -} - -#define EMIT do { TULIP_CSR_WRITE(csr_srom_mii, csr); delay_300ns(); } while (0) - -static void srom_idle(void) -{ - unsigned bit, csr; - - csr = SROMSEL ; EMIT; - csr = SROMSEL | SROMRD; EMIT; - csr ^= SROMCS; EMIT; - csr ^= SROMCLKON; EMIT; - /* - * Write 25 cycles of 0 which will force the SROM to be idle. - */ - for (bit = 3 + SROM_BITWIDTH + 16; bit > 0; bit--) { - csr ^= SROMCLKOFF; EMIT; /* clock low; data not valid */ - csr ^= SROMCLKON; EMIT; /* clock high; data valid */ - } - csr ^= SROMCLKOFF; EMIT; - csr ^= SROMCS; EMIT; - csr = 0; EMIT; -} - -static void srom_read(void) -{ - unsigned idx; - const unsigned bitwidth = SROM_BITWIDTH; - const unsigned cmdmask = (SROMCMD_RD << bitwidth); - const unsigned msb = 1 << (bitwidth + 3 - 1); - unsigned lastidx = (1 << bitwidth) - 1; - - srom_idle(); - - for (idx = 0; idx <= lastidx; idx++) { - unsigned lastbit, data, bits, bit, csr; - csr = SROMSEL ; EMIT; - csr = SROMSEL | SROMRD; EMIT; - csr ^= SROMCSON; EMIT; - csr ^= SROMCLKON; EMIT; - - lastbit = 0; - for (bits = idx|cmdmask, bit = bitwidth + 3; bit > 0; bit--, bits <<= 1) - { - const unsigned thisbit = bits & msb; - csr ^= SROMCLKOFF; EMIT; /* clock low; data not valid */ - if (thisbit != lastbit) { - csr ^= SROMDOUT; EMIT; /* clock low; invert data */ - } else { - EMIT; - } - csr ^= SROMCLKON; EMIT; /* clock high; data valid */ - lastbit = thisbit; - } - csr ^= SROMCLKOFF; EMIT; - - for (data = 0, bits = 0; bits < 16; bits++) { - data <<= 1; - csr ^= SROMCLKON; EMIT; /* clock high; data valid */ - data |= TULIP_CSR_READ(csr_srom_mii) & SROMDIN ? 1 : 0; - csr ^= SROMCLKOFF; EMIT; /* clock low; data not valid */ - } - srom[idx*2] = data & 0xFF; - srom[idx*2+1] = data >> 8; - csr = SROMSEL | SROMRD; EMIT; - csr = 0; EMIT; - } - srom_idle(); -} - -/************************************************************************** -ETH_RESET - Reset adapter -***************************************************************************/ -static void tulip_reset(struct nic *nic) -{ - int x,cnt=2; - - outl(0x00000001, ioaddr + CSR0); - udelay(1000); - /* turn off reset and set cache align=16lword, burst=unlimit */ - outl(0x01A08000, ioaddr + CSR0); - - /* for some reason the media selection does not take - the first time se it is repeated. */ - - while(cnt--) { - /* stop TX,RX processes */ - if (cnt == 1) - outl(0x32404000, ioaddr + CSR6); - else - outl(0x32000040, ioaddr + CSR6); - - /* XXX - media selection is vendor specific and hard coded right - here. This should be fixed to use the hints in the SROM and - allow media selection by the user at runtime. MII support - should also be added. Support for chips other than the - 21143 should be added here as well */ - - /* start set to 10Mbps half-duplex */ - - /* setup SIA */ - outl(0x0, ioaddr + CSR13); /* reset SIA */ - outl(0x7f3f, ioaddr + CSR14); - outl(0x8000008, ioaddr + CSR15); - outl(0x0, ioaddr + CSR13); - outl(0x1, ioaddr + CSR13); - outl(0x2404000, ioaddr + CSR6); - - /* initalize GP */ - outl(0x8af0008, ioaddr + CSR15); - outl(0x50008, ioaddr + CSR15); - - /* end set to 10Mbps half-duplex */ - - if (vendor == PCI_VENDOR_ID_MACRONIX && dev_id == PCI_DEVICE_ID_MX987x5) { - /* do stuff for MX98715 */ - outl(0x01a80000, ioaddr + CSR6); - outl(0xFFFFFFFF, ioaddr + CSR14); - outl(0x00001000, ioaddr + CSR12); - } - - outl(0x0, ioaddr + CSR7); /* disable interrupts */ - - /* construct setup packet which is used by the 21143 to - program its CAM to recognize interesting MAC addresses */ - - memset(&txd, 0, sizeof(struct txdesc)); - txd.buf1addr = &txb[0]; - txd.buf2addr = &txb[0]; /* just in case */ - txd.buf1sz = 192; /* setup packet must be 192 bytes */ - txd.buf2sz = 0; - txd.control = 0x020; /* setup packet */ - txd.status = 0x80000000; /* give ownership to 21143 */ - - /* construct perfect filter frame */ - /* with mac address as first match */ - /* and broadcast address for all others */ - - for(x=0;x<192;x++) txb[x] = 0xff; - txb[0] = nic->node_addr[0]; - txb[1] = nic->node_addr[1]; - txb[4] = nic->node_addr[2]; - txb[5] = nic->node_addr[3]; - txb[8] = nic->node_addr[4]; - txb[9] = nic->node_addr[5]; - outl((unsigned long)&txd, ioaddr + CSR4); /* set xmit buf */ - outl(0x2406000, ioaddr + CSR6); /* start transmiter */ - - udelay(50000); /* wait for the setup packet to be processed */ - - } - - /* setup receive descriptor */ - { - int x; - for(x=0;xnode_addr, ETH_ALEN); - ehdr[ETH_ALEN*2] = (t >> 8) & 0xff; - ehdr[ETH_ALEN*2+1] = t & 0xff; - - /* setup the transmit descriptor */ - - memset(&txd, 0, sizeof(struct txdesc)); - - txd.buf1addr = &ehdr[0]; /* ethernet header */ - txd.buf1sz = ETH_HLEN; - - txd.buf2addr = p; /* packet to transmit */ - txd.buf2sz = s; - - txd.control = 0x188; /* LS+FS+TER */ - - txd.status = 0x80000000; /* give it to 21143 */ - - outl(inl(ioaddr + CSR6) & ~0x00004000, ioaddr + CSR6); - outl((unsigned long)&txd, ioaddr + CSR4); - outl(inl(ioaddr + CSR6) | 0x00004000, ioaddr + CSR6); - -/* Wait for transmit to complete before returning. not well tested. - - time = currticks(); - while(txd.status & 0x80000000) { - if (currticks() - time > 20) { - printf("transmit timeout.\n"); - break; - } - } -*/ - -} - -/************************************************************************** -ETH_POLL - Wait for a frame -***************************************************************************/ -static int tulip_poll(struct nic *nic) -{ - if (rxd[rxd_tail].status & 0x80000000) return 0; - - nic->packetlen = (rxd[rxd_tail].status & 0x3FFF0000) >> 16; - - /* copy packet to working buffer */ - /* XXX - this copy could be avoided with a little more work - but for now we are content with it because the optimised - memcpy(, , ) is quite fast */ - - memcpy(nic->packet, rxb + rxd_tail * BUFLEN, nic->packetlen); - - /* return the descriptor and buffer to recieve ring */ - rxd[rxd_tail].status = 0x80000000; - rxd_tail++; - if (rxd_tail == NRXD) rxd_tail = 0; - - return 1; -} - -static void tulip_disable(struct nic *nic) -{ - /* nothing for the moment */ -} - -/************************************************************************** -ETH_PROBE - Look for an adapter -***************************************************************************/ -struct nic *otulip_probe(struct nic *nic, unsigned short *io_addrs, struct pci_device *pci) -{ - int i; - - if (io_addrs == 0 || *io_addrs == 0) - return (0); - vendor = pci->vendor; - dev_id = pci->dev_id; - ioaddr = *io_addrs; - membase = (unsigned int *)pci->membase; - - /* wakeup chip */ - pcibios_write_config_dword(pci->bus,pci->devfn,0x40,0x00000000); - - /* Stop the chip's Tx and Rx processes. */ - /* outl(inl(ioaddr + CSR6) & ~0x2002, ioaddr + CSR6); */ - /* Clear the missed-packet counter. */ - /* (volatile int)inl(ioaddr + CSR8); */ - - srom_read(); - - for (i=0; i < ETH_ALEN; i++) - nic->node_addr[i] = srom[20+i]; - - printf("Tulip %! at ioaddr %#hX\n", nic->node_addr, ioaddr); - - tulip_reset(nic); - - nic->reset = tulip_reset; - nic->poll = tulip_poll; - nic->transmit = tulip_transmit; - nic->disable = tulip_disable; - return nic; -} diff --git a/netboot/otulip.h b/netboot/otulip.h deleted file mode 100644 index 0e1aa90ef..000000000 --- a/netboot/otulip.h +++ /dev/null @@ -1,76 +0,0 @@ -/* mostly stolen from FreeBSD if_de.c, if_devar.h */ - -#define TULIP_CSR_READ(csr) (membase[csr*2]) -#define CSR_READ(csr) (membase[csr*2]) -#define TULIP_CSR_WRITE(csr, val) (membase[csr*2] = val) -#define CSR_WRITE(csr, val) (membase[csr*2] = val) - -#define csr_0 0 -#define csr_1 1 -#define csr_2 2 -#define csr_3 3 -#define csr_4 4 -#define csr_5 5 -#define csr_6 6 -#define csr_7 7 -#define csr_8 8 -#define csr_9 9 -#define csr_10 10 -#define csr_11 11 -#define csr_12 12 -#define csr_13 13 -#define csr_14 14 -#define csr_15 15 - -#define csr_busmode csr_0 -#define csr_txpoll csr_1 -#define csr_rxpoll csr_2 -#define csr_rxlist csr_3 -#define csr_txlist csr_4 -#define csr_status csr_5 -#define csr_command csr_6 -#define csr_intr csr_7 -#define csr_missed_frames csr_8 -#define csr_enetrom csr_9 /* 21040 */ -#define csr_reserved csr_10 /* 21040 */ -#define csr_full_duplex csr_11 /* 21040 */ -#define csr_bootrom csr_10 /* 21041/21140A/?? */ -#define csr_gp csr_12 /* 21140* */ -#define csr_watchdog csr_15 /* 21140* */ -#define csr_gp_timer csr_11 /* 21041/21140* */ -#define csr_srom_mii csr_9 /* 21041/21140* */ -#define csr_sia_status csr_12 /* 2104x */ -#define csr_sia_connectivity csr_13 /* 2104x */ -#define csr_sia_tx_rx csr_14 /* 2104x */ -#define csr_sia_general csr_15 /* 2104x */ - -#define SROMSEL 0x0800 -#define SROMCS 0x0001 -#define SROMCLKON 0x0002 -#define SROMCLKOFF 0x0002 -#define SROMRD 0x4000 -#define SROMWR 0x2000 -#define SROM_BITWIDTH 6 -#define SROMCMD_RD 6 -#define SROMCSON 0x0001 -#define SROMDOUT 0x0004 -#define SROMDIN 0x0008 - - -struct txdesc { - unsigned long status; /* owner, status */ - unsigned long buf1sz:11, /* size of buffer 1 */ - buf2sz:11, /* size of buffer 2 */ - control:10; /* control bits */ - const unsigned char *buf1addr; /* buffer 1 address */ - const unsigned char *buf2addr; /* buffer 2 address */ -}; - -struct rxdesc { - unsigned long status; /* owner, status */ - unsigned long buf1sz:11, /* size of buffer 1 */ - buf2sz:11, /* size of buffer 2 */ - control:10; /* control bits */ - unsigned char *buf1addr; /* buffer 1 address */ - unsigned char *buf2addr; /* buffer 2 address */ -}; diff --git a/netboot/pci.c b/netboot/pci.c deleted file mode 100644 index 471c85632..000000000 --- a/netboot/pci.c +++ /dev/null @@ -1,501 +0,0 @@ -/* -** Support for NE2000 PCI clones added David Monro June 1997 -** Generalised to other NICs by Ken Yap July 1997 -** -** Most of this is taken from: -** -** /usr/src/linux/drivers/pci/pci.c -** /usr/src/linux/include/linux/pci.h -** /usr/src/linux/arch/i386/bios32.c -** /usr/src/linux/include/linux/bios32.h -** /usr/src/linux/drivers/net/ne.c -*/ - -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2, or (at - * your option) any later version. - */ - -#include "etherboot.h" -#include "pci.h" - -/*#define DEBUG 1*/ -#define DEBUG 0 - -#ifdef CONFIG_PCI_DIRECT -#define PCIBIOS_SUCCESSFUL 0x00 - -/* - * Functions for accessing PCI configuration space with type 1 accesses - */ - -#define CONFIG_CMD(bus, device_fn, where) (0x80000000 | (bus << 16) | (device_fn << 8) | (where & ~3)) - -int pcibios_read_config_byte(unsigned int bus, unsigned int device_fn, - unsigned int where, unsigned char *value) -{ - outl(CONFIG_CMD(bus,device_fn,where), 0xCF8); - *value = inb(0xCFC + (where&3)); - return PCIBIOS_SUCCESSFUL; -} - -int pcibios_read_config_word (unsigned int bus, - unsigned int device_fn, unsigned int where, unsigned short *value) -{ - outl(CONFIG_CMD(bus,device_fn,where), 0xCF8); - *value = inw(0xCFC + (where&2)); - return PCIBIOS_SUCCESSFUL; -} - -int pcibios_read_config_dword (unsigned int bus, unsigned int device_fn, - unsigned int where, unsigned int *value) -{ - outl(CONFIG_CMD(bus,device_fn,where), 0xCF8); - *value = inl(0xCFC); - return PCIBIOS_SUCCESSFUL; -} - -int pcibios_write_config_byte (unsigned int bus, unsigned int device_fn, - unsigned int where, unsigned char value) -{ - outl(CONFIG_CMD(bus,device_fn,where), 0xCF8); - outb(value, 0xCFC + (where&3)); - return PCIBIOS_SUCCESSFUL; -} - -int pcibios_write_config_word (unsigned int bus, unsigned int device_fn, - unsigned int where, unsigned short value) -{ - outl(CONFIG_CMD(bus,device_fn,where), 0xCF8); - outw(value, 0xCFC + (where&2)); - return PCIBIOS_SUCCESSFUL; -} - -int pcibios_write_config_dword (unsigned int bus, unsigned int device_fn, unsigned int where, unsigned int value) -{ - outl(CONFIG_CMD(bus,device_fn,where), 0xCF8); - outl(value, 0xCFC); - return PCIBIOS_SUCCESSFUL; -} - -#undef CONFIG_CMD - -#else /* CONFIG_PCI_DIRECT not defined */ - -static struct { - unsigned long address; - unsigned short segment; -} bios32_indirect = { 0, KERN_CODE_SEG }; - -static long pcibios_entry; -static struct { - unsigned long address; - unsigned short segment; -} pci_indirect = { 0, KERN_CODE_SEG }; - -static unsigned long bios32_service(unsigned long service) -{ - unsigned char return_code; /* %al */ - unsigned long address; /* %ebx */ - unsigned long length; /* %ecx */ - unsigned long entry; /* %edx */ - unsigned long flags; - - save_flags(flags); - __asm__( -#ifdef ABSOLUTE_WITHOUT_ASTERISK - "lcall (%%edi)" -#else - "lcall *(%%edi)" -#endif - : "=a" (return_code), - "=b" (address), - "=c" (length), - "=d" (entry) - : "0" (service), - "1" (0), - "D" (&bios32_indirect)); - restore_flags(flags); - - switch (return_code) { - case 0: - return address + entry; - case 0x80: /* Not present */ - printf("bios32_service(%d) : not present\n", service); - return 0; - default: /* Shouldn't happen */ - printf("bios32_service(%d) : returned %#X, mail drew@colorado.edu\n", - service, return_code); - return 0; - } -} - -int pcibios_read_config_byte(unsigned int bus, - unsigned int device_fn, unsigned int where, unsigned char *value) -{ - unsigned long ret; - unsigned long bx = (bus << 8) | device_fn; - unsigned long flags; - - save_flags(flags); - __asm__( -#ifdef ABSOLUTE_WITHOUT_ASTERISK - "lcall (%%esi)\n\t" -#else - "lcall *(%%esi)\n\t" -#endif - "jc 1f\n\t" - "xor %%ah, %%ah\n" - "1:" - : "=c" (*value), - "=a" (ret) - : "1" (PCIBIOS_READ_CONFIG_BYTE), - "b" (bx), - "D" ((long) where), - "S" (&pci_indirect)); - restore_flags(flags); - return (int) (ret & 0xff00) >> 8; -} - -int pcibios_read_config_word(unsigned int bus, - unsigned int device_fn, unsigned int where, unsigned short *value) -{ - unsigned long ret; - unsigned long bx = (bus << 8) | device_fn; - unsigned long flags; - - save_flags(flags); - __asm__( -#ifdef ABSOLUTE_WITHOUT_ASTERISK - "lcall (%%esi)\n\t" -#else - "lcall *(%%esi)\n\t" -#endif - "jc 1f\n\t" - "xor %%ah, %%ah\n" - "1:" - : "=c" (*value), - "=a" (ret) - : "1" (PCIBIOS_READ_CONFIG_WORD), - "b" (bx), - "D" ((long) where), - "S" (&pci_indirect)); - restore_flags(flags); - return (int) (ret & 0xff00) >> 8; -} - -int pcibios_read_config_dword(unsigned int bus, - unsigned int device_fn, unsigned int where, unsigned int *value) -{ - unsigned long ret; - unsigned long bx = (bus << 8) | device_fn; - unsigned long flags; - - save_flags(flags); - __asm__( -#ifdef ABSOLUTE_WITHOUT_ASTERISK - "lcall (%%esi)\n\t" -#else - "lcall *(%%esi)\n\t" -#endif - "jc 1f\n\t" - "xor %%ah, %%ah\n" - "1:" - : "=c" (*value), - "=a" (ret) - : "1" (PCIBIOS_READ_CONFIG_DWORD), - "b" (bx), - "D" ((long) where), - "S" (&pci_indirect)); - restore_flags(flags); - return (int) (ret & 0xff00) >> 8; -} - -int pcibios_write_config_byte (unsigned int bus, - unsigned int device_fn, unsigned int where, unsigned char value) -{ - unsigned long ret; - unsigned long bx = (bus << 8) | device_fn; - unsigned long flags; - - save_flags(flags); cli(); - __asm__( -#ifdef ABSOLUTE_WITHOUT_ASTERISK - "lcall (%%esi)\n\t" -#else - "lcall *(%%esi)\n\t" -#endif - "jc 1f\n\t" - "xor %%ah, %%ah\n" - "1:" - : "=a" (ret) - : "0" (PCIBIOS_WRITE_CONFIG_BYTE), - "c" (value), - "b" (bx), - "D" ((long) where), - "S" (&pci_indirect)); - restore_flags(flags); - return (int) (ret & 0xff00) >> 8; -} - -int pcibios_write_config_word (unsigned int bus, - unsigned int device_fn, unsigned int where, unsigned short value) -{ - unsigned long ret; - unsigned long bx = (bus << 8) | device_fn; - unsigned long flags; - - save_flags(flags); cli(); - __asm__( -#ifdef ABSOLUTE_WITHOUT_ASTERISK - "lcall (%%esi)\n\t" -#else - "lcall *(%%esi)\n\t" -#endif - "jc 1f\n\t" - "xor %%ah, %%ah\n" - "1:" - : "=a" (ret) - : "0" (PCIBIOS_WRITE_CONFIG_WORD), - "c" (value), - "b" (bx), - "D" ((long) where), - "S" (&pci_indirect)); - restore_flags(flags); - return (int) (ret & 0xff00) >> 8; -} - -int pcibios_write_config_dword (unsigned int bus, - unsigned int device_fn, unsigned int where, unsigned int value) -{ - unsigned long ret; - unsigned long bx = (bus << 8) | device_fn; - unsigned long flags; - - save_flags(flags); cli(); - __asm__( -#ifdef ABSOLUTE_WITHOUT_ASTERISK - "lcall (%%esi)\n\t" -#else - "lcall *(%%esi)\n\t" -#endif - "jc 1f\n\t" - "xor %%ah, %%ah\n" - "1:" - : "=a" (ret) - : "0" (PCIBIOS_WRITE_CONFIG_DWORD), - "c" (value), - "b" (bx), - "D" ((long) where), - "S" (&pci_indirect)); - restore_flags(flags); - return (int) (ret & 0xff00) >> 8; -} - -static void check_pcibios(void) -{ - unsigned long signature; - unsigned char present_status; - unsigned char major_revision; - unsigned char minor_revision; - unsigned long flags; - int pack; - - if ((pcibios_entry = bios32_service(PCI_SERVICE))) { - pci_indirect.address = pcibios_entry; - - save_flags(flags); - __asm__( -#ifdef ABSOLUTE_WITHOUT_ASTERISK - "lcall (%%edi)\n\t" -#else - "lcall *(%%edi)\n\t" -#endif - "jc 1f\n\t" - "xor %%ah, %%ah\n" - "1:\tshl $8, %%eax\n\t" - "movw %%bx, %%ax" - : "=d" (signature), - "=a" (pack) - : "1" (PCIBIOS_PCI_BIOS_PRESENT), - "D" (&pci_indirect) - : "bx", "cx"); - restore_flags(flags); - - present_status = (pack >> 16) & 0xff; - major_revision = (pack >> 8) & 0xff; - minor_revision = pack & 0xff; - if (present_status || (signature != PCI_SIGNATURE)) { - printf("ERROR: BIOS32 says PCI BIOS, but no PCI " - "BIOS????\n"); - pcibios_entry = 0; - } -#if DEBUG - if (pcibios_entry) { - printf ("pcibios_init : PCI BIOS revision %hhX.%hhX" - " entry at %#X\n", major_revision, - minor_revision, pcibios_entry); - } -#endif - } -} - -static void pcibios_init(void) -{ - union bios32 *check; - unsigned char sum; - int i, length; - unsigned long bios32_entry = 0; - - /* - * Follow the standard procedure for locating the BIOS32 Service - * directory by scanning the permissible address range from - * 0xe0000 through 0xfffff for a valid BIOS32 structure. - * - */ - - for (check = (union bios32 *) 0xe0000; check <= (union bios32 *) 0xffff0; ++check) { - if (check->fields.signature != BIOS32_SIGNATURE) - continue; - length = check->fields.length * 16; - if (!length) - continue; - sum = 0; - for (i = 0; i < length ; ++i) - sum += check->chars[i]; - if (sum != 0) - continue; - if (check->fields.revision != 0) { - printf("pcibios_init : unsupported revision %d at %#X, mail drew@colorado.edu\n", - check->fields.revision, check); - continue; - } -#if DEBUG - printf("pcibios_init : BIOS32 Service Directory " - "structure at %#X\n", check); -#endif - if (!bios32_entry) { - if (check->fields.entry >= 0x100000) { - printf("pcibios_init: entry in high " - "memory, giving up\n"); - return; - } else { - bios32_entry = check->fields.entry; -#if DEBUG - printf("pcibios_init : BIOS32 Service Directory" - " entry at %#X\n", bios32_entry); -#endif - bios32_indirect.address = bios32_entry; - } - } - } - if (bios32_entry) - check_pcibios(); -} -#endif /* CONFIG_PCI_DIRECT not defined*/ - -static void scan_bus(struct pci_device *pcidev) -{ - unsigned int devfn, l, bus, buses; - unsigned char hdr_type = 0; - unsigned short vendor, device; - unsigned int membase, ioaddr, romaddr; - int i, reg; - unsigned int pci_ioaddr = 0; - - /* Scan all PCI buses, until we find our card. - * We could be smart only scan the required busses but that - * is error prone, and tricky. - * By scanning all possible pci busses in order we should find - * our card eventually. - */ - buses=256; - for (bus = 0; bus < buses; ++bus) { - for (devfn = 0; devfn < 0xff; ++devfn) { - if (PCI_FUNC (devfn) == 0) - pcibios_read_config_byte(bus, devfn, PCI_HEADER_TYPE, &hdr_type); - else if (!(hdr_type & 0x80)) /* not a multi-function device */ - continue; - pcibios_read_config_dword(bus, devfn, PCI_VENDOR_ID, &l); - /* some broken boards return 0 if a slot is empty: */ - if (l == 0xffffffff || l == 0x00000000) { - hdr_type = 0; - continue; - } - vendor = l & 0xffff; - device = (l >> 16) & 0xffff; - -#if DEBUG - printf("bus %hhX, function %hhX, vendor %hX, device %hX\n", - bus, devfn, vendor, device); -#endif - for (i = 0; pcidev[i].vendor != 0; i++) { - if (vendor != pcidev[i].vendor - || device != pcidev[i].dev_id) - continue; - pcidev[i].devfn = devfn; - pcidev[i].bus = bus; - for (reg = PCI_BASE_ADDRESS_0; reg <= PCI_BASE_ADDRESS_5; reg += 4) { - pcibios_read_config_dword(bus, devfn, reg, &ioaddr); - - if ((ioaddr & PCI_BASE_ADDRESS_IO_MASK) == 0 || (ioaddr & PCI_BASE_ADDRESS_SPACE_IO) == 0) - continue; - /* Strip the I/O address out of the returned value */ - ioaddr &= PCI_BASE_ADDRESS_IO_MASK; - /* Get the memory base address */ - pcibios_read_config_dword(bus, devfn, - PCI_BASE_ADDRESS_1, &membase); - /* Get the ROM base address */ - pcibios_read_config_dword(bus, devfn, PCI_ROM_ADDRESS, &romaddr); - romaddr >>= 10; - printf("Found %s at %#hx, ROM address %#hx\n", - pcidev[i].name, ioaddr, romaddr); - /* Take the first one or the one that matches in boot ROM address */ - if (pci_ioaddr == 0 || romaddr == ((unsigned long) rom.rom_segment << 4)) { - pcidev[i].membase = membase; - pcidev[i].ioaddr = ioaddr; - return; - } - } - } - } - } -} - -void eth_pci_init(struct pci_device *pcidev) -{ -#ifndef CONFIG_PCI_DIRECT - pcibios_init(); - if (!pcibios_entry) { - printf("pci_init: no BIOS32 detected\n"); - return; - } -#endif - scan_bus(pcidev); - /* return values are in pcidev structures */ -} - -/* - * Set device to be a busmaster in case BIOS neglected to do so. - * Also adjust PCI latency timer to a reasonable value, 32. - */ -void adjust_pci_device(struct pci_device *p) -{ - unsigned short new_command, pci_command; - unsigned char pci_latency; - - pcibios_read_config_word(p->bus, p->devfn, PCI_COMMAND, &pci_command); - new_command = pci_command | PCI_COMMAND_MASTER|PCI_COMMAND_IO; - if (pci_command != new_command) { - printf("The PCI BIOS has not enabled this device!\nUpdating PCI command %hX->%hX. pci_bus %hhX pci_device_fn %hhX\n", - pci_command, new_command, p->bus, p->devfn); - pcibios_write_config_word(p->bus, p->devfn, PCI_COMMAND, new_command); - } - pcibios_read_config_byte(p->bus, p->devfn, PCI_LATENCY_TIMER, &pci_latency); - if (pci_latency < 32) { - printf("PCI latency timer (CFLT) is unreasonably low at %d. Setting to 32 clocks.\n", pci_latency); - pcibios_write_config_byte(p->bus, p->devfn, PCI_LATENCY_TIMER, 32); - } -} diff --git a/netboot/pci.h b/netboot/pci.h deleted file mode 100644 index a99dc141b..000000000 --- a/netboot/pci.h +++ /dev/null @@ -1,192 +0,0 @@ -#ifndef PCI_H -#define PCI_H - -/* -** Support for NE2000 PCI clones added David Monro June 1997 -** Generalised for other PCI NICs by Ken Yap July 1997 -** -** Most of this is taken from: -** -** /usr/src/linux/drivers/pci/pci.c -** /usr/src/linux/include/linux/pci.h -** /usr/src/linux/arch/i386/bios32.c -** /usr/src/linux/include/linux/bios32.h -** /usr/src/linux/drivers/net/ne.c -*/ - -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2, or (at - * your option) any later version. - */ - -#define PCI_COMMAND_IO 0x1 /* Enable response in I/O space */ -#define PCI_COMMAND_MEM 0x2 /* Enable response in mem space */ -#define PCI_COMMAND_MASTER 0x4 /* Enable bus mastering */ -#define PCI_LATENCY_TIMER 0x0d /* 8 bits */ - -#define PCIBIOS_PCI_FUNCTION_ID 0xb1XX -#define PCIBIOS_PCI_BIOS_PRESENT 0xb101 -#define PCIBIOS_FIND_PCI_DEVICE 0xb102 -#define PCIBIOS_FIND_PCI_CLASS_CODE 0xb103 -#define PCIBIOS_GENERATE_SPECIAL_CYCLE 0xb106 -#define PCIBIOS_READ_CONFIG_BYTE 0xb108 -#define PCIBIOS_READ_CONFIG_WORD 0xb109 -#define PCIBIOS_READ_CONFIG_DWORD 0xb10a -#define PCIBIOS_WRITE_CONFIG_BYTE 0xb10b -#define PCIBIOS_WRITE_CONFIG_WORD 0xb10c -#define PCIBIOS_WRITE_CONFIG_DWORD 0xb10d - -#define PCI_VENDOR_ID 0x00 /* 16 bits */ -#define PCI_DEVICE_ID 0x02 /* 16 bits */ -#define PCI_COMMAND 0x04 /* 16 bits */ - -#define PCI_REVISION 0x08 /* 8 bits */ -#define PCI_CLASS_CODE 0x0b /* 8 bits */ -#define PCI_SUBCLASS_CODE 0x0a /* 8 bits */ -#define PCI_HEADER_TYPE 0x0e /* 8 bits */ - -#define PCI_BASE_ADDRESS_0 0x10 /* 32 bits */ -#define PCI_BASE_ADDRESS_1 0x14 /* 32 bits */ -#define PCI_BASE_ADDRESS_2 0x18 /* 32 bits */ -#define PCI_BASE_ADDRESS_3 0x1c /* 32 bits */ -#define PCI_BASE_ADDRESS_4 0x20 /* 32 bits */ -#define PCI_BASE_ADDRESS_5 0x24 /* 32 bits */ - -#ifndef PCI_BASE_ADDRESS_IO_MASK -#define PCI_BASE_ADDRESS_IO_MASK (~0x03) -#endif -#define PCI_BASE_ADDRESS_SPACE_IO 0x01 -#define PCI_ROM_ADDRESS 0x30 /* 32 bits */ -#define PCI_ROM_ADDRESS_ENABLE 0x01 /* Write 1 to enable ROM, - bits 31..11 are address, - 10..2 are reserved */ - -#define PCI_FUNC(devfn) ((devfn) & 0x07) - -#define BIOS32_SIGNATURE (('_' << 0) + ('3' << 8) + ('2' << 16) + ('_' << 24)) - -/* PCI signature: "PCI " */ -#define PCI_SIGNATURE (('P' << 0) + ('C' << 8) + ('I' << 16) + (' ' << 24)) - -/* PCI service signature: "$PCI" */ -#define PCI_SERVICE (('$' << 0) + ('P' << 8) + ('C' << 16) + ('I' << 24)) - -union bios32 { - struct { - unsigned long signature; /* _32_ */ - unsigned long entry; /* 32 bit physical address */ - unsigned char revision; /* Revision level, 0 */ - unsigned char length; /* Length in paragraphs should be 01 */ - unsigned char checksum; /* All bytes must add up to zero */ - unsigned char reserved[5]; /* Must be zero */ - } fields; - char chars[16]; -}; - -#define KERN_CODE_SEG 0x8 /* This _MUST_ match start.S */ - -/* Stuff for asm */ -#define save_flags(x) \ -__asm__ __volatile__("pushfl ; popl %0":"=g" (x): /* no input */ :"memory") - -#define cli() __asm__ __volatile__ ("cli": : :"memory") - -#define restore_flags(x) \ -__asm__ __volatile__("pushl %0 ; popfl": /* no output */ :"g" (x):"memory") - -#define PCI_VENDOR_ID_ADMTEK 0x1317 -#define PCI_DEVICE_ID_ADMTEK_0985 0x0985 -#define PCI_VENDOR_ID_REALTEK 0x10ec -#define PCI_DEVICE_ID_REALTEK_8029 0x8029 -#define PCI_DEVICE_ID_REALTEK_8139 0x8139 -#define PCI_VENDOR_ID_WINBOND2 0x1050 -#define PCI_DEVICE_ID_WINBOND2_89C940 0x0940 -#define PCI_DEVICE_ID_WINBOND2_89C840 0x0840 -#define PCI_VENDOR_ID_COMPEX 0x11f6 -#define PCI_DEVICE_ID_COMPEX_RL2000 0x1401 -#define PCI_DEVICE_ID_COMPEX_RL100ATX 0x2011 -#define PCI_VENDOR_ID_KTI 0x8e2e -#define PCI_DEVICE_ID_KTI_ET32P2 0x3000 -#define PCI_VENDOR_ID_NETVIN 0x4a14 -#define PCI_DEVICE_ID_NETVIN_NV5000SC 0x5000 -#define PCI_VENDOR_ID_HOLTEK 0x12c3 -#define PCI_DEVICE_ID_HOLTEK_HT80232 0x0058 -#define PCI_VENDOR_ID_3COM 0x10b7 -#define PCI_DEVICE_ID_3COM_3C590 0x5900 -#define PCI_DEVICE_ID_3COM_3C595 0x5950 -#define PCI_DEVICE_ID_3COM_3C595_1 0x5951 -#define PCI_DEVICE_ID_3COM_3C595_2 0x5952 -#define PCI_DEVICE_ID_3COM_3C900TPO 0x9000 -#define PCI_DEVICE_ID_3COM_3C900COMBO 0x9001 -#define PCI_DEVICE_ID_3COM_3C905TX 0x9050 -#define PCI_DEVICE_ID_3COM_3C905T4 0x9051 -#define PCI_DEVICE_ID_3COM_3C905B_TX 0x9055 -#define PCI_DEVICE_ID_3COM_3C905C_TXM 0x9200 -#define PCI_VENDOR_ID_INTEL 0x8086 -#define PCI_DEVICE_ID_INTEL_82557 0x1229 -#define PCI_DEVICE_ID_INTEL_82559ER 0x1209 -#define PCI_DEVICE_ID_INTEL_ID1029 0x1029 -#define PCI_DEVICE_ID_INTEL_ID1030 0x1030 -#define PCI_DEVICE_ID_INTEL_82562 0x2449 -#define PCI_VENDOR_ID_AMD 0x1022 -#define PCI_DEVICE_ID_AMD_LANCE 0x2000 -#define PCI_VENDOR_ID_AMD_HOMEPNA 0x1022 -#define PCI_DEVICE_ID_AMD_HOMEPNA 0x2001 -#define PCI_VENDOR_ID_SMC_1211 0x1113 -#define PCI_DEVICE_ID_SMC_1211 0x1211 -#define PCI_VENDOR_ID_DEC 0x1011 -#define PCI_DEVICE_ID_DEC_TULIP 0x0002 -#define PCI_DEVICE_ID_DEC_TULIP_FAST 0x0009 -#define PCI_DEVICE_ID_DEC_TULIP_PLUS 0x0014 -#define PCI_DEVICE_ID_DEC_21142 0x0019 -#define PCI_VENDOR_ID_SMC 0x10B8 -#ifndef PCI_DEVICE_ID_SMC_EPIC100 -# define PCI_DEVICE_ID_SMC_EPIC100 0x0005 -#endif -#define PCI_VENDOR_ID_MACRONIX 0x10d9 -#define PCI_DEVICE_ID_MX987x5 0x0531 -#define PCI_VENDOR_ID_LINKSYS 0x11AD -#define PCI_DEVICE_ID_LC82C115 0xC115 -#define PCI_VENDOR_ID_VIATEC 0x1106 -#define PCI_DEVICE_ID_VIA_RHINE_I 0x3043 -#define PCI_DEVICE_ID_VIA_VT6102 0x3065 -#define PCI_DEVICE_ID_VIA_86C100A 0x6100 -#define PCI_VENDOR_ID_DAVICOM 0x1282 -#define PCI_DEVICE_ID_DM9009 0x9009 -#define PCI_DEVICE_ID_DM9102 0x9102 -#define PCI_VENDOR_ID_SIS 0x1039 -#define PCI_DEVICE_ID_SIS900 0x0900 -#define PCI_DEVICE_ID_SIS7016 0x7016 -#define PCI_VENDOR_ID_DLINK 0x1186 -#define PCI_DEVICE_ID_DFE530TXP 0x1300 -#define PCI_VENDOR_ID_NS 0x100B -#define PCI_DEVICE_ID_DP83815 0x0020 -#define PCI_VENDOR_ID_OLICOM 0x108d -#define PCI_DEVICE_ID_OLICOM_OC3136 0x0001 -#define PCI_DEVICE_ID_OLICOM_OC2315 0x0011 -#define PCI_DEVICE_ID_OLICOM_OC2325 0x0012 -#define PCI_DEVICE_ID_OLICOM_OC2183 0x0013 -#define PCI_DEVICE_ID_OLICOM_OC2326 0x0014 -#define PCI_DEVICE_ID_OLICOM_OC6151 0x0021 - -struct pci_device { - unsigned short vendor, dev_id; - const char *name; - unsigned int membase; - unsigned short ioaddr; - unsigned char devfn; - unsigned char bus; -}; - -extern void eth_pci_init(struct pci_device *); - -extern int pcibios_read_config_byte(unsigned int bus, unsigned int device_fn, unsigned int where, unsigned char *value); -extern int pcibios_write_config_byte (unsigned int bus, unsigned int device_fn, unsigned int where, unsigned char value); -extern int pcibios_read_config_word(unsigned int bus, unsigned int device_fn, unsigned int where, unsigned short *value); -extern int pcibios_write_config_word (unsigned int bus, unsigned int device_fn, unsigned int where, unsigned short value); -extern int pcibios_read_config_dword(unsigned int bus, unsigned int device_fn, unsigned int where, unsigned int *value); -extern int pcibios_write_config_dword(unsigned int bus, unsigned int device_fn, unsigned int where, unsigned int value); -void adjust_pci_device(struct pci_device *p); -#endif /* PCI_H */ diff --git a/netboot/rtl8139.c b/netboot/rtl8139.c deleted file mode 100644 index 62d6e3a7a..000000000 --- a/netboot/rtl8139.c +++ /dev/null @@ -1,458 +0,0 @@ -/* rtl8139.c - etherboot driver for the Realtek 8139 chipset - - ported from the linux driver written by Donald Becker - by Rainer Bawidamann (Rainer.Bawidamann@informatik.uni-ulm.de) 1999 - - This software may be used and distributed according to the terms - of the GNU Public License, incorporated herein by reference. - - changes to the original driver: - - removed support for interrupts, switching to polling mode (yuck!) - - removed support for the 8129 chip (external MII) - -*/ - -/*********************************************************************/ -/* Revision History */ -/*********************************************************************/ - -/* - - 06 Apr 2001 ken_yap@users.sourceforge.net (Ken Yap) - Following email from Hyun-Joon Cha, added a disable routine, otherwise - NIC remains live and can crash the kernel later. - - 4 Feb 2000 espenlaub@informatik.uni-ulm.de (Klaus Espenlaub) - Shuffled things around, removed the leftovers from the 8129 support - that was in the Linux driver and added a bit more 8139 definitions. - Moved the 8K receive buffer to a fixed, available address outside the - 0x98000-0x9ffff range. This is a bit of a hack, but currently the only - way to make room for the Etherboot features that need substantial amounts - of code like the ANSI console support. Currently the buffer is just below - 0x10000, so this even conforms to the tagged boot image specification, - which reserves the ranges 0x00000-0x10000 and 0x98000-0xA0000. My - interpretation of this "reserved" is that Etherboot may do whatever it - likes, as long as its environment is kept intact (like the BIOS - variables). Hopefully fixed rtl_poll() once and for all. The symptoms - were that if Etherboot was left at the boot menu for several minutes, the - first eth_poll failed. Seems like I am the only person who does this. - First of all I fixed the debugging code and then set out for a long bug - hunting session. It took me about a week full time work - poking around - various places in the driver, reading Don Becker's and Jeff Garzik's Linux - driver and even the FreeBSD driver (what a piece of crap!) - and - eventually spotted the nasty thing: the transmit routine was acknowledging - each and every interrupt pending, including the RxOverrun and RxFIFIOver - interrupts. This confused the RTL8139 thoroughly. It destroyed the - Rx ring contents by dumping the 2K FIFO contents right where we wanted to - get the next packet. Oh well, what fun. - - 18 Jan 2000 mdc@thinguin.org (Marty Connor) - Drastically simplified error handling. Basically, if any error - in transmission or reception occurs, the card is reset. - Also, pointed all transmit descriptors to the same buffer to - save buffer space. This should decrease driver size and avoid - corruption because of exceeding 32K during runtime. - - 28 Jul 1999 (Matthias Meixner - meixner@rbg.informatik.tu-darmstadt.de) - rtl_poll was quite broken: it used the RxOK interrupt flag instead - of the RxBufferEmpty flag which often resulted in very bad - transmission performace - below 1kBytes/s. - -*/ - -#include "etherboot.h" -#include "nic.h" -#include "pci.h" -#include "cards.h" -#include "timer.h" - -#define RTL_TIMEOUT (1*TICKS_PER_SEC) - -/* PCI Tuning Parameters - Threshold is bytes transferred to chip before transmission starts. */ -#define TX_FIFO_THRESH 256 /* In bytes, rounded down to 32 byte units. */ -#define RX_FIFO_THRESH 4 /* Rx buffer level before first PCI xfer. */ -#define RX_DMA_BURST 4 /* Maximum PCI burst, '4' is 256 bytes */ -#define TX_DMA_BURST 4 /* Calculate as 16<node_addr; - for (i = 0; i < 3; i++) - *ap++ = read_eeprom(i + 7); - } else { - unsigned char *ap = (unsigned char*)nic->node_addr; - for (i = 0; i < ETH_ALEN; i++) - *ap++ = inb(ioaddr + MAC0 + i); - } - - speed10 = inb(ioaddr + MediaStatus) & MSRSpeed10; - fullduplex = inw(ioaddr + MII_BMCR) & BMCRDuplex; - printf("ioaddr %#hX, addr %! %sMbps %s-duplex\n", ioaddr, - nic->node_addr, speed10 ? "10" : "100", - fullduplex ? "full" : "half"); - - rtl_reset(nic); - - nic->reset = rtl_reset; - nic->poll = rtl_poll; - nic->transmit = rtl_transmit; - nic->disable = rtl_disable; - - return nic; -} - -/* Serial EEPROM section. */ - -/* EEPROM_Ctrl bits. */ -#define EE_SHIFT_CLK 0x04 /* EEPROM shift clock. */ -#define EE_CS 0x08 /* EEPROM chip select. */ -#define EE_DATA_WRITE 0x02 /* EEPROM chip data in. */ -#define EE_WRITE_0 0x00 -#define EE_WRITE_1 0x02 -#define EE_DATA_READ 0x01 /* EEPROM chip data out. */ -#define EE_ENB (0x80 | EE_CS) - -/* - Delay between EEPROM clock transitions. - No extra delay is needed with 33Mhz PCI, but 66Mhz may change this. -*/ - -#define eeprom_delay() inl(ee_addr) - -/* The EEPROM commands include the alway-set leading bit. */ -#define EE_WRITE_CMD (5 << 6) -#define EE_READ_CMD (6 << 6) -#define EE_ERASE_CMD (7 << 6) - -static int read_eeprom(int location) -{ - int i; - unsigned int retval = 0; - long ee_addr = ioaddr + Cfg9346; - int read_cmd = location | EE_READ_CMD; - - outb(EE_ENB & ~EE_CS, ee_addr); - outb(EE_ENB, ee_addr); - - /* Shift the read command bits out. */ - for (i = 10; i >= 0; i--) { - int dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0; - outb(EE_ENB | dataval, ee_addr); - eeprom_delay(); - outb(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr); - eeprom_delay(); - } - outb(EE_ENB, ee_addr); - eeprom_delay(); - - for (i = 16; i > 0; i--) { - outb(EE_ENB | EE_SHIFT_CLK, ee_addr); - eeprom_delay(); - retval = (retval << 1) | ((inb(ee_addr) & EE_DATA_READ) ? 1 : 0); - outb(EE_ENB, ee_addr); - eeprom_delay(); - } - - /* Terminate the EEPROM access. */ - outb(~EE_CS, ee_addr); - return retval; -} - -static void rtl_reset(struct nic* nic) -{ - int i; - - outb(CmdReset, ioaddr + ChipCmd); - - cur_rx = 0; - cur_tx = 0; - - /* Give the chip 10ms to finish the reset. */ - load_timer2(10*TICKS_PER_MS); - while ((inb(ioaddr + ChipCmd) & CmdReset) != 0 && timer2_running()) - /* wait */; - - for (i = 0; i < ETH_ALEN; i++) - outb(nic->node_addr[i], ioaddr + MAC0 + i); - - /* Must enable Tx/Rx before setting transfer thresholds! */ - outb(CmdRxEnb | CmdTxEnb, ioaddr + ChipCmd); - outl((RX_FIFO_THRESH<<13) | (RX_BUF_LEN_IDX<<11) | (RX_DMA_BURST<<8), - ioaddr + RxConfig); /* accept no frames yet! */ - outl((TX_DMA_BURST<<8)|0x03000000, ioaddr + TxConfig); - - /* The Linux driver changes Config1 here to use a different LED pattern - * for half duplex or full/autodetect duplex (for full/autodetect, the - * outputs are TX/RX, Link10/100, FULL, while for half duplex it uses - * TX/RX, Link100, Link10). This is messy, because it doesn't match - * the inscription on the mounting bracket. It should not be changed - * from the configuration EEPROM default, because the card manufacturer - * should have set that to match the card. */ - -#ifdef DEBUG_RX - printf("rx ring address is %X\n",(unsigned long)rx_ring); -#endif - outl((unsigned long)rx_ring, ioaddr + RxBuf); - - /* Start the chip's Tx and Rx process. */ - outl(0, ioaddr + RxMissed); - /* set_rx_mode */ - outb(AcceptBroadcast|AcceptMyPhys, ioaddr + RxConfig); - /* If we add multicast support, the MAR0 register would have to be - * initialized to 0xffffffffffffffff (two 32 bit accesses). Etherboot - * only needs broadcast (for ARP/RARP/BOOTP/DHCP) and unicast. */ - outb(CmdRxEnb | CmdTxEnb, ioaddr + ChipCmd); - - /* Disable all known interrupts by setting the interrupt mask. */ - outw(0, ioaddr + IntrMask); -} - -static void rtl_transmit(struct nic *nic, const char *destaddr, - unsigned int type, unsigned int len, const char *data) -{ - unsigned int status, to, nstype; - unsigned long txstatus; - - memcpy(tx_buffer, destaddr, ETH_ALEN); - memcpy(tx_buffer + ETH_ALEN, nic->node_addr, ETH_ALEN); - nstype = htons(type); - memcpy(tx_buffer + 2 * ETH_ALEN, (char*)&nstype, 2); - memcpy(tx_buffer + ETH_HLEN, data, len); - - len += ETH_HLEN; -#ifdef DEBUG_TX - printf("sending %d bytes ethtype %hX\n", len, type); -#endif - - /* Note: RTL8139 doesn't auto-pad, send minimum payload (another 4 - * bytes are sent automatically for the FCS, totalling to 64 bytes). */ - while (len < ETH_ZLEN) { - tx_buffer[len++] = '\0'; - } - - outl((unsigned long)tx_buffer, ioaddr + TxAddr0 + cur_tx*4); - outl(((TX_FIFO_THRESH<<11) & 0x003f0000) | len, - ioaddr + TxStatus0 + cur_tx*4); - - to = currticks() + RTL_TIMEOUT; - - do { - status = inw(ioaddr + IntrStatus); - /* Only acknlowledge interrupt sources we can properly handle - * here - the RxOverflow/RxFIFOOver MUST be handled in the - * rtl_poll() function. */ - outw(status & (TxOK | TxErr | PCIErr), ioaddr + IntrStatus); - if ((status & (TxOK | TxErr | PCIErr)) != 0) break; - } while (currticks() < to); - - txstatus = inl(ioaddr+ TxStatus0 + cur_tx*4); - - if (status & TxOK) { - cur_tx = (cur_tx + 1) % NUM_TX_DESC; -#ifdef DEBUG_TX - printf("tx done (%d ticks), status %hX txstatus %X\n", - to-currticks(), status, txstatus); -#endif - } else { -#ifdef DEBUG_TX - printf("tx timeout/error (%d ticks), status %hX txstatus %X\n", - currticks()-to, status, txstatus); -#endif - rtl_reset(nic); - } -} - -static int rtl_poll(struct nic *nic) -{ - unsigned int status; - unsigned int ring_offs; - unsigned int rx_size, rx_status; - - if (inb(ioaddr + ChipCmd) & RxBufEmpty) { - return 0; - } - - status = inw(ioaddr + IntrStatus); - /* See below for the rest of the interrupt acknowledges. */ - outw(status & ~(RxFIFOOver | RxOverflow | RxOK), ioaddr + IntrStatus); - -#ifdef DEBUG_RX - printf("rtl_poll: int %hX ", status); -#endif - - ring_offs = cur_rx % RX_BUF_LEN; - rx_status = *(unsigned int*)(rx_ring + ring_offs); - rx_size = rx_status >> 16; - rx_status &= 0xffff; - - if ((rx_status & (RxBadSymbol|RxRunt|RxTooLong|RxCRCErr|RxBadAlign)) || - (rx_size < ETH_ZLEN) || (rx_size > ETH_FRAME_LEN + 4)) { - printf("rx error %hX\n", rx_status); - rtl_reset(nic); /* this clears all interrupts still pending */ - return 0; - } - - /* Received a good packet */ - nic->packetlen = rx_size - 4; /* no one cares about the FCS */ - if (ring_offs+4+rx_size-4 > RX_BUF_LEN) { - int semi_count = RX_BUF_LEN - ring_offs - 4; - - memcpy(nic->packet, rx_ring + ring_offs + 4, semi_count); - memcpy(nic->packet+semi_count, rx_ring, rx_size-4-semi_count); -#ifdef DEBUG_RX - printf("rx packet %d+%d bytes", semi_count,rx_size-4-semi_count); -#endif - } else { - memcpy(nic->packet, rx_ring + ring_offs + 4, nic->packetlen); -#ifdef DEBUG_RX - printf("rx packet %d bytes", rx_size-4); -#endif - } -#ifdef DEBUG_RX - printf(" at %X type %hhX%hhX rxstatus %hX\n", - (unsigned long)(rx_ring+ring_offs+4), - nic->packet[12], nic->packet[13], rx_status); -#endif - cur_rx = (cur_rx + rx_size + 4 + 3) & ~3; - outw(cur_rx - 16, ioaddr + RxBufPtr); - /* See RTL8139 Programming Guide V0.1 for the official handling of - * Rx overflow situations. The document itself contains basically no - * usable information, except for a few exception handling rules. */ - outw(status & (RxFIFOOver | RxOverflow | RxOK), ioaddr + IntrStatus); - return 1; -} - -static void rtl_disable(struct nic *nic) -{ - /* reset the chip */ - outb(CmdReset, ioaddr + ChipCmd); - - /* 10 ms timeout */ - load_timer2(10*TICKS_PER_MS); - while ((inb(ioaddr + ChipCmd) & CmdReset) != 0 && timer2_running()) - /* wait */; -} diff --git a/netboot/sis900.c b/netboot/sis900.c deleted file mode 100644 index 44980d856..000000000 --- a/netboot/sis900.c +++ /dev/null @@ -1,1034 +0,0 @@ -/* -*- Mode:C; c-basic-offset:4; -*- */ - -/* - sis900.c: An SiS 900/7016 PCI Fast Ethernet driver for Etherboot - Copyright (C) 2001 Entity Cyber, Inc. - - Revision: 1.0 March 1, 2001 - - Author: Marty Connor (mdc@thinguin.org) - - Adapted from a Linux driver which was written by Donald Becker - and modified by Ollie Lho and Chin-Shan Li of SiS Corporation. - Rewritten for Etherboot by Marty Connor. - - This software may be used and distributed according to the terms - of the GNU Public License (GPL), incorporated herein by reference. - - References: - SiS 7016 Fast Ethernet PCI Bus 10/100 Mbps LAN Controller with OnNow Support, - preliminary Rev. 1.0 Jan. 14, 1998 - SiS 900 Fast Ethernet PCI Bus 10/100 Mbps LAN Single Chip with OnNow Support, - preliminary Rev. 1.0 Nov. 10, 1998 - SiS 7014 Single Chip 100BASE-TX/10BASE-T Physical Layer Solution, - preliminary Rev. 1.0 Jan. 18, 1998 - http://www.sis.com.tw/support/databook.htm */ - -/* Revision History */ - -/* - 01 March 2001 mdc 1.0 - Initial Release. Tested with PCI based sis900 card and ThinkNIC - computer. - 20 March 2001 P.Koegel - added support for sis630e and PHY ICS1893 and RTL8201 - Testet with SIS730S chipset + ICS1893 -*/ - - -/* Includes */ - -#include "etherboot.h" -#include "nic.h" -#include "pci.h" -#include "cards.h" - -#include "sis900.h" - -/* Globals */ - -static int sis900_debug = 0; - -static unsigned short vendor, dev_id; -static unsigned long ioaddr; - -static unsigned int cur_phy; - -static unsigned int cur_rx; - -static BufferDesc txd; -static BufferDesc rxd[NUM_RX_DESC]; - -#ifdef USE_LOWMEM_BUFFER -#define txb ((char *)0x10000 - TX_BUF_SIZE) -#define rxb ((char *)0x10000 - NUM_RX_DESC*RX_BUF_SIZE - TX_BUF_SIZE) -#else -static unsigned char txb[TX_BUF_SIZE]; -static unsigned char rxb[NUM_RX_DESC * RX_BUF_SIZE]; -#endif - -static struct mac_chip_info { - const char *name; - u16 vendor_id, device_id, flags; - int io_size; -} mac_chip_table[] = { - { "SiS 900 PCI Fast Ethernet", PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS900, - PCI_COMMAND_IO|PCI_COMMAND_MASTER, SIS900_TOTAL_SIZE}, - { "SiS 7016 PCI Fast Ethernet",PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS7016, - PCI_COMMAND_IO|PCI_COMMAND_MASTER, SIS900_TOTAL_SIZE}, - {0,0,0,0,0} /* 0 terminated list. */ -}; - -static void sis900_read_mode(struct nic *nic, int phy_addr, int *speed, int *duplex); -static void amd79c901_read_mode(struct nic *nic, int phy_addr, int *speed, int *duplex); -static void ics1893_read_mode(struct nic *nic, int phy_addr, int *speed, int *duplex); -static void rtl8201_read_mode(struct nic *nic, int phy_addr, int *speed, int *duplex); - -static struct mii_chip_info { - const char * name; - u16 phy_id0; - u16 phy_id1; - void (*read_mode) (struct nic *nic, int phy_addr, int *speed, int *duplex); -} mii_chip_table[] = { - {"SiS 900 Internal MII PHY", 0x001d, 0x8000, sis900_read_mode}, - {"SiS 7014 Physical Layer Solution", 0x0016, 0xf830,sis900_read_mode}, - {"AMD 79C901 10BASE-T PHY", 0x0000, 0x35b9, amd79c901_read_mode}, - {"AMD 79C901 HomePNA PHY", 0x0000, 0x35c8, amd79c901_read_mode}, - {"ICS 1893 Integrated PHYceiver" , 0x0015, 0xf441,ics1893_read_mode}, - {"RTL 8201 10/100Mbps Phyceiver" , 0x0000, 0x8201,rtl8201_read_mode}, - {0,0,0,0} -}; - -static struct mii_phy { - struct mii_phy * next; - struct mii_chip_info * chip_info; - int phy_addr; - u16 status; -} mii; - - -// PCI to ISA bridge for SIS640E access -static struct pci_device pci_isa_bridge_list[] = { - { 0x1039, 0x0008, - "SIS 85C503/5513 PCI to ISA bridge", 0, 0, 0, 0}, - {0, 0, NULL, 0, 0, 0, 0} -}; - -/* Function Prototypes */ - -struct nic *sis900_probe(struct nic *nic, unsigned short *io_addrs, struct pci_device *pci); - -static u16 sis900_read_eeprom(int location); -static void sis900_mdio_reset(long mdio_addr); -static void sis900_mdio_idle(long mdio_addr); -static u16 sis900_mdio_read(int phy_id, int location); -static void sis900_mdio_write(int phy_id, int location, int val); - -static void sis900_init(struct nic *nic); - -static void sis900_reset(struct nic *nic); - -static void sis900_init_rxfilter(struct nic *nic); -static void sis900_init_txd(struct nic *nic); -static void sis900_init_rxd(struct nic *nic); -static void sis900_set_rx_mode(struct nic *nic); -static void sis900_check_mode(struct nic *nic); - -static void sis900_transmit(struct nic *nic, const char *d, - unsigned int t, unsigned int s, const char *p); -static int sis900_poll(struct nic *nic); - -static void sis900_disable(struct nic *nic); - -/** - * sis900_get_mac_addr: - Get MAC address for stand alone SiS900 model - * @pci_dev: the sis900 pci device - * @net_dev: the net device to get address for - * - * Older SiS900 and friends, use EEPROM to store MAC address. - * MAC address is read from read_eeprom() into @net_dev->dev_addr. - */ - -static int sis900_get_mac_addr(struct pci_device * pci_dev , struct nic *nic) -{ - u16 signature; - int i; - - /* check to see if we have sane EEPROM */ - signature = (u16) sis900_read_eeprom( EEPROMSignature); - if (signature == 0xffff || signature == 0x0000) { - printf ("sis900_probe: Error EERPOM read %hX\n", signature); - return 0; - } - - /* get MAC address from EEPROM */ - for (i = 0; i < 3; i++) - ((u16 *)(nic->node_addr))[i] = sis900_read_eeprom(i+EEPROMMACAddr); - return 1; -} - -/** - * sis630e_get_mac_addr: - Get MAC address for SiS630E model - * @pci_dev: the sis900 pci device - * @net_dev: the net device to get address for - * - * SiS630E model, use APC CMOS RAM to store MAC address. - * APC CMOS RAM is accessed through ISA bridge. - * MAC address is read into @net_dev->dev_addr. - */ - -static int sis630e_get_mac_addr(struct pci_device * pci_dev, struct nic *nic) -{ - u8 reg; - int i; - struct pci_device *p; - - // find PCI to ISA bridge - eth_pci_init(pci_isa_bridge_list); - - /* the firts entry in this list should contain bus/devfn */ - p = pci_isa_bridge_list; - - pcibios_read_config_byte(p->bus,p->devfn, 0x48, ®); - pcibios_write_config_byte(p->bus,p->devfn, 0x48, reg | 0x40); - - for (i = 0; i < ETH_ALEN; i++) - { - outb(0x09 + i, 0x70); - ((u8 *)(nic->node_addr))[i] = inb(0x71); - } - pcibios_write_config_byte(p->bus,p->devfn, 0x48, reg & ~0x40); - - return 1; -} - -/* - * Function: sis900_probe - * - * Description: initializes initializes the NIC, retrieves the - * MAC address of the card, and sets up some globals required by - * other routines. - * - * Side effects: - * leaves the ioaddress of the sis900 chip in the variable ioaddr. - * leaves the sis900 initialized, and ready to recieve packets. - * - * Returns: struct nic *: pointer to NIC data structure - */ - -struct nic *sis900_probe(struct nic *nic, unsigned short *io_addrs, struct pci_device *pci) -{ - int i; - int found=0; - int phy_addr; - u16 signature; - u8 revision; - int ret; - - if (io_addrs == 0 || *io_addrs == 0) - return NULL; - - ioaddr = *io_addrs & ~3; - vendor = pci->vendor; - dev_id = pci->dev_id; - - /* wakeup chip */ - pcibios_write_config_dword(pci->bus, pci->devfn, 0x40, 0x00000000); - - adjust_pci_device(pci); - - /* get MAC address */ - ret = 0; - pcibios_read_config_byte(pci->bus,pci->devfn, PCI_REVISION, &revision); - if (revision == SIS630E_900_REV || revision == SIS630EA1_900_REV) - ret = sis630e_get_mac_addr(pci, nic); - else if (revision == SIS630S_900_REV) - ret = sis630e_get_mac_addr(pci, nic); - else - ret = sis900_get_mac_addr(pci, nic); - - if (ret == 0) - { - printf ("sis900_probe: Error MAC address not found\n"); - return NULL; - } - - printf("\nsis900_probe: MAC addr %! at ioaddr %#hX\n", - nic->node_addr, ioaddr); - printf("sis900_probe: Vendor:%#hX Device:%#hX\n", vendor, dev_id); - - /* probe for mii transceiver */ - /* search for total of 32 possible mii phy addresses */ - - found = 0; - for (phy_addr = 0; phy_addr < 32; phy_addr++) { - u16 mii_status; - u16 phy_id0, phy_id1; - - mii_status = sis900_mdio_read(phy_addr, MII_STATUS); - if (mii_status == 0xffff || mii_status == 0x0000) - /* the mii is not accessable, try next one */ - continue; - - phy_id0 = sis900_mdio_read(phy_addr, MII_PHY_ID0); - phy_id1 = sis900_mdio_read(phy_addr, MII_PHY_ID1); - - /* search our mii table for the current mii */ - for (i = 0; mii_chip_table[i].phy_id1; i++) { - - if (phy_id0 == mii_chip_table[i].phy_id0) { - - printf("sis900_probe: %s transceiver found at address %d.\n", - mii_chip_table[i].name, phy_addr); - - mii.chip_info = &mii_chip_table[i]; - mii.phy_addr = phy_addr; - mii.status = sis900_mdio_read(phy_addr, MII_STATUS); - mii.next = NULL; - - found=1; - break; - } - } - } - - if (found == 0) { - printf("sis900_probe: No MII transceivers found!\n"); - return NULL; - } - - /* Arbitrarily select the last PHY found as current PHY */ - cur_phy = mii.phy_addr; - printf("sis900_probe: Using %s as default\n", mii.chip_info->name); - - /* initialize device */ - sis900_init(nic); - - nic->reset = sis900_init; - nic->poll = sis900_poll; - nic->transmit = sis900_transmit; - nic->disable = sis900_disable; - - return nic; -} - - -/* - * EEPROM Routines: These functions read and write to EEPROM for - * retrieving the MAC address and other configuration information about - * the card. - */ - -/* Delay between EEPROM clock transitions. */ -#define eeprom_delay() inl(ee_addr) - - -/* Function: sis900_read_eeprom - * - * Description: reads and returns a given location from EEPROM - * - * Arguments: int location: requested EEPROM location - * - * Returns: u16: contents of requested EEPROM location - * - */ - -/* Read Serial EEPROM through EEPROM Access Register, Note that location is - in word (16 bits) unit */ -static u16 sis900_read_eeprom(int location) -{ - int i; - u16 retval = 0; - long ee_addr = ioaddr + mear; - u32 read_cmd = location | EEread; - - outl(0, ee_addr); - eeprom_delay(); - outl(EECLK, ee_addr); - eeprom_delay(); - - /* Shift the read command (9) bits out. */ - for (i = 8; i >= 0; i--) { - u32 dataval = (read_cmd & (1 << i)) ? EEDI | EECS : EECS; - outl(dataval, ee_addr); - eeprom_delay(); - outl(dataval | EECLK, ee_addr); - eeprom_delay(); - } - outb(EECS, ee_addr); - eeprom_delay(); - - /* read the 16-bits data in */ - for (i = 16; i > 0; i--) { - outl(EECS, ee_addr); - eeprom_delay(); - outl(EECS | EECLK, ee_addr); - eeprom_delay(); - retval = (retval << 1) | ((inl(ee_addr) & EEDO) ? 1 : 0); - eeprom_delay(); - } - - /* Terminate the EEPROM access. */ - outl(0, ee_addr); - eeprom_delay(); - outl(EECLK, ee_addr); - - return (retval); -} - -#define sis900_mdio_delay() inl(mdio_addr) - - -/* - Read and write the MII management registers using software-generated - serial MDIO protocol. Note that the command bits and data bits are - send out seperately -*/ - -static void sis900_mdio_idle(long mdio_addr) -{ - outl(MDIO | MDDIR, mdio_addr); - sis900_mdio_delay(); - outl(MDIO | MDDIR | MDC, mdio_addr); -} - -/* Syncronize the MII management interface by shifting 32 one bits out. */ -static void sis900_mdio_reset(long mdio_addr) -{ - int i; - - for (i = 31; i >= 0; i--) { - outl(MDDIR | MDIO, mdio_addr); - sis900_mdio_delay(); - outl(MDDIR | MDIO | MDC, mdio_addr); - sis900_mdio_delay(); - } - return; -} - -static u16 sis900_mdio_read(int phy_id, int location) -{ - long mdio_addr = ioaddr + mear; - int mii_cmd = MIIread|(phy_id<= 0; i--) { - int dataval = (mii_cmd & (1 << i)) ? MDDIR | MDIO : MDDIR; - outl(dataval, mdio_addr); - sis900_mdio_delay(); - outl(dataval | MDC, mdio_addr); - sis900_mdio_delay(); - } - - /* Read the 16 data bits. */ - for (i = 16; i > 0; i--) { - outl(0, mdio_addr); - sis900_mdio_delay(); - retval = (retval << 1) | ((inl(mdio_addr) & MDIO) ? 1 : 0); - outl(MDC, mdio_addr); - sis900_mdio_delay(); - } - return retval; -} - -static void sis900_mdio_write(int phy_id, int location, int value) -{ - long mdio_addr = ioaddr + mear; - int mii_cmd = MIIwrite|(phy_id<= 0; i--) { - int dataval = (mii_cmd & (1 << i)) ? MDDIR | MDIO : MDDIR; - outb(dataval, mdio_addr); - sis900_mdio_delay(); - outb(dataval | MDC, mdio_addr); - sis900_mdio_delay(); - } - sis900_mdio_delay(); - - /* Shift the value bits out. */ - for (i = 15; i >= 0; i--) { - int dataval = (value & (1 << i)) ? MDDIR | MDIO : MDDIR; - outl(dataval, mdio_addr); - sis900_mdio_delay(); - outl(dataval | MDC, mdio_addr); - sis900_mdio_delay(); - } - sis900_mdio_delay(); - - /* Clear out extra bits. */ - for (i = 2; i > 0; i--) { - outb(0, mdio_addr); - sis900_mdio_delay(); - outb(MDC, mdio_addr); - sis900_mdio_delay(); - } - return; -} - - -/* Function: sis900_init - * - * Description: resets the ethernet controller chip and various - * data structures required for sending and receiving packets. - * - * Arguments: struct nic *nic: NIC data structure - * - * returns: void. - */ - -static void -sis900_init(struct nic *nic) -{ - /* Soft reset the chip. */ - sis900_reset(nic); - - sis900_init_rxfilter(nic); - - sis900_init_txd(nic); - sis900_init_rxd(nic); - - sis900_set_rx_mode(nic); - - sis900_check_mode(nic); - - outl(RxENA, ioaddr + cr); -} - - -/* - * Function: sis900_reset - * - * Description: disables interrupts and soft resets the controller chip - * - * Arguments: struct nic *nic: NIC data structure - * - * Returns: void. - */ - -static void -sis900_reset(struct nic *nic) -{ - int i = 0; - u32 status = TxRCMP | RxRCMP; - - outl(0, ioaddr + ier); - outl(0, ioaddr + imr); - outl(0, ioaddr + rfcr); - - outl(RxRESET | TxRESET | RESET, ioaddr + cr); - - /* Check that the chip has finished the reset. */ - while (status && (i++ < 1000)) { - status ^= (inl(isr + ioaddr) & status); - } - outl(PESEL, ioaddr + cfg); -} - - -/* Function: sis_init_rxfilter - * - * Description: sets receive filter address to our MAC address - * - * Arguments: struct nic *nic: NIC data structure - * - * returns: void. - */ - -static void -sis900_init_rxfilter(struct nic *nic) -{ - u32 rfcrSave; - int i; - - rfcrSave = inl(rfcr + ioaddr); - - /* disable packet filtering before setting filter */ - outl(rfcrSave & ~RFEN, rfcr); - - /* load MAC addr to filter data register */ - for (i = 0 ; i < 3 ; i++) { - u32 w; - - w = (u32) *((u16 *)(nic->node_addr)+i); - outl((i << RFADDR_shift), ioaddr + rfcr); - outl(w, ioaddr + rfdr); - - if (sis900_debug > 0) - printf("sis900_init_rxfilter: Receive Filter Addrss[%d]=%X\n", - i, inl(ioaddr + rfdr)); - } - - /* enable packet filitering */ - outl(rfcrSave | RFEN, rfcr + ioaddr); -} - - -/* - * Function: sis_init_txd - * - * Description: initializes the Tx descriptor - * - * Arguments: struct nic *nic: NIC data structure - * - * returns: void. - */ - -static void -sis900_init_txd(struct nic *nic) -{ - txd.link = (u32) 0; - txd.cmdsts = (u32) 0; - txd.bufptr = (u32) &txb[0]; - - /* load Transmit Descriptor Register */ - outl((u32) &txd, ioaddr + txdp); - if (sis900_debug > 0) - printf("sis900_init_txd: TX descriptor register loaded with: %X\n", - inl(ioaddr + txdp)); -} - - -/* Function: sis_init_rxd - * - * Description: initializes the Rx descriptor ring - * - * Arguments: struct nic *nic: NIC data structure - * - * Returns: void. - */ - -static void -sis900_init_rxd(struct nic *nic) -{ - int i; - - cur_rx = 0; - - /* init RX descriptor */ - for (i = 0; i < NUM_RX_DESC; i++) { - rxd[i].link = (i+1 < NUM_RX_DESC) ? (u32) &rxd[i+1] : (u32) &rxd[0]; - rxd[i].cmdsts = (u32) RX_BUF_SIZE; - rxd[i].bufptr = (u32) &rxb[i*RX_BUF_SIZE]; - if (sis900_debug > 0) - printf("sis900_init_rxd: rxd[%d]=%X link=%X cmdsts=%X bufptr=%X\n", - i, &rxd[i], rxd[i].link, rxd[i].cmdsts, rxd[i].bufptr); - } - - /* load Receive Descriptor Register */ - outl((u32) &rxd[0], ioaddr + rxdp); - - if (sis900_debug > 0) - printf("sis900_init_rxd: RX descriptor register loaded with: %X\n", - inl(ioaddr + rxdp)); - -} - - -/* Function: sis_init_rxd - * - * Description: - * sets the receive mode to accept all broadcast packets and packets - * with our MAC address, and reject all multicast packets. - * - * Arguments: struct nic *nic: NIC data structure - * - * Returns: void. - */ - -static void sis900_set_rx_mode(struct nic *nic) -{ - int i; - - /* Configure Multicast Hash Table in Receive Filter - to reject all MCAST packets */ - for (i = 0; i < 8; i++) { - /* why plus 0x04? That makes the correct value for hash table. */ - outl((u32)(0x00000004+i) << RFADDR_shift, ioaddr + rfcr); - outl((u32)(0x0), ioaddr + rfdr); - } - /* Accept Broadcast packets, destination addresses that match - our MAC address */ - outl(RFEN | RFAAB, ioaddr + rfcr); - - return; -} - - -/* Function: sis900_check_mode - * - * Description: checks the state of transmit and receive - * parameters on the NIC, and updates NIC registers to match - * - * Arguments: struct nic *nic: NIC data structure - * - * Returns: void. - */ - -static void -sis900_check_mode (struct nic *nic) -{ - int speed, duplex; - u32 tx_flags = 0, rx_flags = 0; - - mii.chip_info->read_mode(nic, cur_phy, &speed, &duplex); - - tx_flags = TxATP | (TX_DMA_BURST << TxMXDMA_shift) | (TX_FILL_THRESH << TxFILLT_shift); - rx_flags = RX_DMA_BURST << RxMXDMA_shift; - - if (speed == HW_SPEED_HOME || speed == HW_SPEED_10_MBPS) { - rx_flags |= (RxDRNT_10 << RxDRNT_shift); - tx_flags |= (TxDRNT_10 << TxDRNT_shift); - } - else { - rx_flags |= (RxDRNT_100 << RxDRNT_shift); - tx_flags |= (TxDRNT_100 << TxDRNT_shift); - } - - if (duplex == FDX_CAPABLE_FULL_SELECTED) { - tx_flags |= (TxCSI | TxHBI); - rx_flags |= RxATX; - } - - outl (tx_flags, ioaddr + txcfg); - outl (rx_flags, ioaddr + rxcfg); -} - - -/* Function: sis900_read_mode - * - * Description: retrieves and displays speed and duplex - * parameters from the NIC - * - * Arguments: struct nic *nic: NIC data structure - * - * Returns: void. - */ - -static void -sis900_read_mode(struct nic *nic, int phy_addr, int *speed, int *duplex) -{ - int i = 0; - u32 status; - - /* STSOUT register is Latched on Transition, read operation updates it */ - while (i++ < 2) - status = sis900_mdio_read(phy_addr, MII_STSOUT); - - if (status & MII_STSOUT_SPD) - *speed = HW_SPEED_100_MBPS; - else - *speed = HW_SPEED_10_MBPS; - - if (status & MII_STSOUT_DPLX) - *duplex = FDX_CAPABLE_FULL_SELECTED; - else - *duplex = FDX_CAPABLE_HALF_SELECTED; - - if (status & MII_STSOUT_LINK_FAIL) - printf("sis900_read_mode: Media Link Off\n"); - else - printf("sis900_read_mode: Media Link On %s %s-duplex \n", - *speed == HW_SPEED_100_MBPS ? - "100mbps" : "10mbps", - *duplex == FDX_CAPABLE_FULL_SELECTED ? - "full" : "half"); -} - - -/* Function: amd79c901_read_mode - * - * Description: retrieves and displays speed and duplex - * parameters from the NIC - * - * Arguments: struct nic *nic: NIC data structure - * - * Returns: void. - */ - -static void -amd79c901_read_mode(struct nic *nic, int phy_addr, int *speed, int *duplex) -{ - int i; - u16 status; - - for (i = 0; i < 2; i++) - status = sis900_mdio_read(phy_addr, MII_STATUS); - - if (status & MII_STAT_CAN_AUTO) { - /* 10BASE-T PHY */ - for (i = 0; i < 2; i++) - status = sis900_mdio_read(phy_addr, MII_STATUS_SUMMARY); - if (status & MII_STSSUM_SPD) - *speed = HW_SPEED_100_MBPS; - else - *speed = HW_SPEED_10_MBPS; - if (status & MII_STSSUM_DPLX) - *duplex = FDX_CAPABLE_FULL_SELECTED; - else - *duplex = FDX_CAPABLE_HALF_SELECTED; - - if (status & MII_STSSUM_LINK) - printf("amd79c901_read_mode: Media Link On %s %s-duplex \n", - *speed == HW_SPEED_100_MBPS ? - "100mbps" : "10mbps", - *duplex == FDX_CAPABLE_FULL_SELECTED ? - "full" : "half"); - else - printf("amd79c901_read_mode: Media Link Off\n"); - } - else { - /* HomePNA */ - *speed = HW_SPEED_HOME; - *duplex = FDX_CAPABLE_HALF_SELECTED; - if (status & MII_STAT_LINK) - printf("amd79c901_read_mode:Media Link On 1mbps half-duplex \n"); - else - printf("amd79c901_read_mode: Media Link Off\n"); - } -} - - -/** - * ics1893_read_mode: - read media mode for ICS1893 PHY - * @net_dev: the net device to read mode for - * @phy_addr: mii phy address - * @speed: the transmit speed to be determined - * @duplex: the duplex mode to be determined - * - * ICS1893 PHY use Quick Poll Detailed Status register - * to determine the speed and duplex mode for sis900 - */ - -static void ics1893_read_mode(struct nic *nic, int phy_addr, int *speed, int *duplex) -{ - int i = 0; - u32 status; - - /* MII_QPDSTS is Latched, read twice in succession will reflect the current state */ - for (i = 0; i < 2; i++) - status = sis900_mdio_read(phy_addr, MII_QPDSTS); - - if (status & MII_STSICS_SPD) - *speed = HW_SPEED_100_MBPS; - else - *speed = HW_SPEED_10_MBPS; - - if (status & MII_STSICS_DPLX) - *duplex = FDX_CAPABLE_FULL_SELECTED; - else - *duplex = FDX_CAPABLE_HALF_SELECTED; - - if (status & MII_STSICS_LINKSTS) - printf("ics1893_read_mode: Media Link On %s %s-duplex \n", - *speed == HW_SPEED_100_MBPS ? - "100mbps" : "10mbps", - *duplex == FDX_CAPABLE_FULL_SELECTED ? - "full" : "half"); - else - printf("ics1893_read_mode: Media Link Off\n"); -} - -/** - * rtl8201_read_mode: - read media mode for rtl8201 phy - * @nic: the net device to read mode for - * @phy_addr: mii phy address - * @speed: the transmit speed to be determined - * @duplex: the duplex mode to be determined - * - * read MII_STATUS register from rtl8201 phy - * to determine the speed and duplex mode for sis900 - */ - -static void rtl8201_read_mode(struct nic *nic, int phy_addr, int *speed, int *duplex) -{ - u32 status; - - status = sis900_mdio_read(phy_addr, MII_STATUS); - - if (status & MII_STAT_CAN_TX_FDX) { - *speed = HW_SPEED_100_MBPS; - *duplex = FDX_CAPABLE_FULL_SELECTED; - } - else if (status & MII_STAT_CAN_TX) { - *speed = HW_SPEED_100_MBPS; - *duplex = FDX_CAPABLE_HALF_SELECTED; - } - else if (status & MII_STAT_CAN_T_FDX) { - *speed = HW_SPEED_10_MBPS; - *duplex = FDX_CAPABLE_FULL_SELECTED; - } - else if (status & MII_STAT_CAN_T) { - *speed = HW_SPEED_10_MBPS; - *duplex = FDX_CAPABLE_HALF_SELECTED; - } - - if (status & MII_STAT_LINK) - printf("rtl8201_read_mode: Media Link On %s %s-duplex \n", - *speed == HW_SPEED_100_MBPS ? - "100mbps" : "10mbps", - *duplex == FDX_CAPABLE_FULL_SELECTED ? - "full" : "half"); - else - printf("rtl9201_read_config_mode: Media Link Off\n"); -} - -/* Function: sis900_transmit - * - * Description: transmits a packet and waits for completion or timeout. - * - * Arguments: char d[6]: destination ethernet address. - * unsigned short t: ethernet protocol type. - * unsigned short s: size of the data-part of the packet. - * char *p: the data for the packet. - * - * Returns: void. - */ - -static void -sis900_transmit(struct nic *nic, - const char *d, /* Destination */ - unsigned int t, /* Type */ - unsigned int s, /* size */ - const char *p) /* Packet */ -{ - u32 status, to, nstype; - volatile u32 tx_status; - - /* Stop the transmitter */ - outl(TxDIS, ioaddr + cr); - - /* load Transmit Descriptor Register */ - outl((u32) &txd, ioaddr + txdp); - if (sis900_debug > 1) - printf("sis900_transmit: TX descriptor register loaded with: %X\n", - inl(ioaddr + txdp)); - - memcpy(txb, d, ETH_ALEN); - memcpy(txb + ETH_ALEN, nic->node_addr, ETH_ALEN); - nstype = htons(t); - memcpy(txb + 2 * ETH_ALEN, (char*)&nstype, 2); - memcpy(txb + ETH_HLEN, p, s); - - s += ETH_HLEN; - s &= DSIZE; - - if (sis900_debug > 1) - printf("sis900_transmit: sending %d bytes ethtype %hX\n", (int) s, t); - - /* pad to minimum packet size */ - while (s < ETH_ZLEN) - txb[s++] = '\0'; - - /* set the transmit buffer descriptor and enable Transmit State Machine */ - txd.bufptr = (u32) &txb[0]; - txd.cmdsts = (u32) OWN | s; - - /* restart the transmitter */ - outl(TxENA, ioaddr + cr); - - if (sis900_debug > 1) - printf("sis900_transmit: Queued Tx packet size %d.\n", (int) s); - - to = currticks() + TX_TIMEOUT; - - while (((tx_status=txd.cmdsts) & OWN) && (currticks() < to)) - /* wait */ ; - - if (currticks() >= to) { - printf("sis900_transmit: TX Timeout! Tx status %X.\n", tx_status); - } - - if (tx_status & (ABORT | UNDERRUN | OWCOLL)) { - /* packet unsuccessfully transmited */ - printf("sis900_transmit: Transmit error, Tx status %X.\n", tx_status); - } - /* Disable interrupts by clearing the interrupt mask. */ - outl(0, ioaddr + imr); -} - - -/* Function: sis900_poll - * - * Description: checks for a received packet and returns it if found. - * - * Arguments: struct nic *nic: NIC data structure - * - * Returns: 1 if a packet was recieved. - * 0 if no pacet was recieved. - * - * Side effects: - * Returns (copies) the packet to the array nic->packet. - * Returns the length of the packet in nic->packetlen. - */ - -static int -sis900_poll(struct nic *nic) -{ - u32 rx_status = rxd[cur_rx].cmdsts; - int retstat = 0; - - if (sis900_debug > 2) - printf("sis900_poll: cur_rx:%d, status:%X\n", cur_rx, rx_status); - - if (!(rx_status & OWN)) - return retstat; - - if (sis900_debug > 1) - printf("sis900_poll: got a packet: cur_rx:%d, status:%X\n", - cur_rx, rx_status); - - nic->packetlen = (rx_status & DSIZE) - CRC_SIZE; - - if (rx_status & (ABORT|OVERRUN|TOOLONG|RUNT|RXISERR|CRCERR|FAERR)) { - /* corrupted packet received */ - printf("sis900_poll: Corrupted packet received, buffer status = %X\n", - rx_status); - retstat = 0; - } else { - /* give packet to higher level routine */ - memcpy(nic->packet, (rxb + cur_rx*RX_BUF_SIZE), nic->packetlen); - retstat = 1; - } - - /* return the descriptor and buffer to receive ring */ - rxd[cur_rx].cmdsts = RX_BUF_SIZE; - rxd[cur_rx].bufptr = (u32) &rxb[cur_rx*RX_BUF_SIZE]; - - if (++cur_rx == NUM_RX_DESC) - cur_rx = 0; - - /* re-enable the potentially idle receive state machine */ - outl(RxENA , ioaddr + cr); - - return retstat; -} - - -/* Function: sis900_disable - * - * Description: Turns off interrupts and stops Tx and Rx engines - * - * Arguments: struct nic *nic: NIC data structure - * - * Returns: void. - */ - -static void -sis900_disable(struct nic *nic) -{ - /* Disable interrupts by clearing the interrupt mask. */ - outl(0, ioaddr + imr); - outl(0, ioaddr + ier); - - /* Stop the chip's Tx and Rx Status Machine */ - outl(RxDIS | TxDIS, ioaddr + cr); -} diff --git a/netboot/sis900.h b/netboot/sis900.h deleted file mode 100644 index 44feafbad..000000000 --- a/netboot/sis900.h +++ /dev/null @@ -1,363 +0,0 @@ -/* -*- Mode:C; c-basic-offset:4; -*- */ - -/* Definitions for SiS ethernet controllers including 7014/7016 and 900 - * References: - * SiS 7016 Fast Ethernet PCI Bus 10/100 Mbps LAN Controller with OnNow Support, - * preliminary Rev. 1.0 Jan. 14, 1998 - * SiS 900 Fast Ethernet PCI Bus 10/100 Mbps LAN Single Chip with OnNow Support, - * preliminary Rev. 1.0 Nov. 10, 1998 - * SiS 7014 Single Chip 100BASE-TX/10BASE-T Physical Layer Solution, - * preliminary Rev. 1.0 Jan. 18, 1998 - * http://www.sis.com.tw/support/databook.htm - */ - -/* MAC operationl registers of SiS 7016 and SiS 900 ethernet controller */ -/* The I/O extent, SiS 900 needs 256 bytes of io address */ -#define SIS900_TOTAL_SIZE 0x100 - -/* Symbolic offsets to registers. */ -enum sis900_registers { - cr=0x0, /* Command Register */ - cfg=0x4, /* Configuration Register */ - mear=0x8, /* EEPROM Access Register */ - ptscr=0xc, /* PCI Test Control Register */ - isr=0x10, /* Interrupt Status Register */ - imr=0x14, /* Interrupt Mask Register */ - ier=0x18, /* Interrupt Enable Register */ - epar=0x18, /* Enhanced PHY Access Register */ - txdp=0x20, /* Transmit Descriptor Pointer Register */ - txcfg=0x24, /* Transmit Configuration Register */ - rxdp=0x30, /* Receive Descriptor Pointer Register */ - rxcfg=0x34, /* Receive Configuration Register */ - flctrl=0x38, /* Flow Control Register */ - rxlen=0x3c, /* Receive Packet Length Register */ - rfcr=0x48, /* Receive Filter Control Register */ - rfdr=0x4C, /* Receive Filter Data Register */ - pmctrl=0xB0, /* Power Management Control Register */ - pmer=0xB4 /* Power Management Wake-up Event Register */ -}; - -/* Symbolic names for bits in various registers */ -enum sis900_command_register_bits { - RESET = 0x00000100, - SWI = 0x00000080, - RxRESET = 0x00000020, - TxRESET = 0x00000010, - RxDIS = 0x00000008, - RxENA = 0x00000004, - TxDIS = 0x00000002, - TxENA = 0x00000001 -}; - -enum sis900_configuration_register_bits { - DESCRFMT = 0x00000100, /* 7016 specific */ - REQALG = 0x00000080, - SB = 0x00000040, - POW = 0x00000020, - EXD = 0x00000010, - PESEL = 0x00000008, - LPM = 0x00000004, - BEM = 0x00000001 -}; - -enum sis900_eeprom_access_reigster_bits { - MDC = 0x00000040, - MDDIR = 0x00000020, - MDIO = 0x00000010, /* 7016 specific */ - EECS = 0x00000008, - EECLK = 0x00000004, - EEDO = 0x00000002, - EEDI = 0x00000001 -}; - -enum sis900_interrupt_register_bits { - WKEVT = 0x10000000, - TxPAUSEEND = 0x08000000, - TxPAUSE = 0x04000000, - TxRCMP = 0x02000000, - RxRCMP = 0x01000000, - DPERR = 0x00800000, - SSERR = 0x00400000, - RMABT = 0x00200000, - RTABT = 0x00100000, - RxSOVR = 0x00010000, - HIBERR = 0x00008000, - SWINT = 0x00001000, - MIBINT = 0x00000800, - TxURN = 0x00000400, - TxIDLE = 0x00000200, - TxERR = 0x00000100, - TxDESC = 0x00000080, - TxOK = 0x00000040, - RxORN = 0x00000020, - RxIDLE = 0x00000010, - RxEARLY = 0x00000008, - RxERR = 0x00000004, - RxDESC = 0x00000002, - RxOK = 0x00000001 -}; - -enum sis900_interrupt_enable_reigster_bits { - IE = 0x00000001 -}; - -/* maximum dma burst fro transmission and receive*/ -#define MAX_DMA_RANGE 7 /* actually 0 means MAXIMUM !! */ -#define TxMXDMA_shift 20 -#define RxMXDMA_shift 20 -#define TX_DMA_BURST 0 -#define RX_DMA_BURST 0 - -/* transmit FIFO threshholds */ -#define TX_FILL_THRESH 16 /* 1/4 FIFO size */ -#define TxFILLT_shift 8 -#define TxDRNT_shift 0 -#define TxDRNT_100 48 /* 3/4 FIFO size */ -#define TxDRNT_10 16 /* 1/2 FIFO size */ - -enum sis900_transmit_config_register_bits { - TxCSI = 0x80000000, - TxHBI = 0x40000000, - TxMLB = 0x20000000, - TxATP = 0x10000000, - TxIFG = 0x0C000000, - TxFILLT = 0x00003F00, - TxDRNT = 0x0000003F -}; - -/* recevie FIFO thresholds */ -#define RxDRNT_shift 1 -#define RxDRNT_100 16 /* 1/2 FIFO size */ -#define RxDRNT_10 24 /* 3/4 FIFO size */ - -enum sis900_reveive_config_register_bits { - RxAEP = 0x80000000, - RxARP = 0x40000000, - RxATX = 0x10000000, - RxAJAB = 0x08000000, - RxDRNT = 0x0000007F -}; - -#define RFAA_shift 28 -#define RFADDR_shift 16 - -enum sis900_receive_filter_control_register_bits { - RFEN = 0x80000000, - RFAAB = 0x40000000, - RFAAM = 0x20000000, - RFAAP = 0x10000000, - RFPromiscuous = (RFAAB|RFAAM|RFAAP) -}; - -enum sis900_reveive_filter_data_mask { - RFDAT = 0x0000FFFF -}; - -/* EEPROM Addresses */ -enum sis900_eeprom_address { - EEPROMSignature = 0x00, - EEPROMVendorID = 0x02, - EEPROMDeviceID = 0x03, - EEPROMMACAddr = 0x08, - EEPROMChecksum = 0x0b -}; - -/* The EEPROM commands include the alway-set leading bit. Refer to NM93Cxx datasheet */ -enum sis900_eeprom_command { - EEread = 0x0180, - EEwrite = 0x0140, - EEerase = 0x01C0, - EEwriteEnable = 0x0130, - EEwriteDisable = 0x0100, - EEeraseAll = 0x0120, - EEwriteAll = 0x0110, - EEaddrMask = 0x013F, -}; - -/* Manamgement Data I/O (mdio) frame */ -#define MIIread 0x6000 -#define MIIwrite 0x5002 -#define MIIpmdShift 7 -#define MIIregShift 2 -#define MIIcmdLen 16 -#define MIIcmdShift 16 - -/* Buffer Descriptor Status*/ -enum sis900_buffer_status { - OWN = 0x80000000, - MORE = 0x40000000, - INTR = 0x20000000, - SUPCRC = 0x10000000, - INCCRC = 0x10000000, - OK = 0x08000000, - DSIZE = 0x00000FFF -}; - -/* Status for TX Buffers */ -enum sis900_tx_buffer_status { - ABORT = 0x04000000, - UNDERRUN = 0x02000000, - NOCARRIER = 0x01000000, - DEFERD = 0x00800000, - EXCDEFER = 0x00400000, - OWCOLL = 0x00200000, - EXCCOLL = 0x00100000, - COLCNT = 0x000F0000 -}; - -enum sis900_rx_bufer_status { - OVERRUN = 0x02000000, - DEST = 0x00800000, - BCAST = 0x01800000, - MCAST = 0x01000000, - UNIMATCH = 0x00800000, - TOOLONG = 0x00400000, - RUNT = 0x00200000, - RXISERR = 0x00100000, - CRCERR = 0x00080000, - FAERR = 0x00040000, - LOOPBK = 0x00020000, - RXCOL = 0x00010000 -}; - -/* MII register offsets */ -enum mii_registers { - MII_CONTROL = 0x0000, - MII_STATUS = 0x0001, - MII_PHY_ID0 = 0x0002, - MII_PHY_ID1 = 0x0003, - MII_ANADV = 0x0004, - MII_ANLPAR = 0x0005, - MII_ANEXT = 0x0006 -}; - -/* mii registers specific to SiS 900 */ -enum sis_mii_registers { - MII_CONFIG1 = 0x0010, - MII_CONFIG2 = 0x0011, - MII_STSOUT = 0x0012, - MII_MASK = 0x0013 -}; - -/* mii registers specific to AMD 79C901 */ -enum amd_mii_registers { - MII_STATUS_SUMMARY = 0x0018 -}; - -/* mii registers specific to ICS 1893 */ -enum ics_mii_registers { - MII_EXTCTRL = 0x0010, MII_QPDSTS = 0x0011, MII_10BTOP = 0x0012, - MII_EXTCTRL2 = 0x0013 -}; - - - -/* MII Control register bit definitions. */ -enum mii_control_register_bits { - MII_CNTL_FDX = 0x0100, - MII_CNTL_RST_AUTO = 0x0200, - MII_CNTL_ISOLATE = 0x0400, - MII_CNTL_PWRDWN = 0x0800, - MII_CNTL_AUTO = 0x1000, - MII_CNTL_SPEED = 0x2000, - MII_CNTL_LPBK = 0x4000, - MII_CNTL_RESET = 0x8000 -}; - -/* MII Status register bit */ -enum mii_status_register_bits { - MII_STAT_EXT = 0x0001, - MII_STAT_JAB = 0x0002, - MII_STAT_LINK = 0x0004, - MII_STAT_CAN_AUTO = 0x0008, - MII_STAT_FAULT = 0x0010, - MII_STAT_AUTO_DONE = 0x0020, - MII_STAT_CAN_T = 0x0800, - MII_STAT_CAN_T_FDX = 0x1000, - MII_STAT_CAN_TX = 0x2000, - MII_STAT_CAN_TX_FDX = 0x4000, - MII_STAT_CAN_T4 = 0x8000 -}; - -#define MII_ID1_OUI_LO 0xFC00 /* low bits of OUI mask */ -#define MII_ID1_MODEL 0x03F0 /* model number */ -#define MII_ID1_REV 0x000F /* model number */ - -/* MII NWAY Register Bits ... - valid for the ANAR (Auto-Negotiation Advertisement) and - ANLPAR (Auto-Negotiation Link Partner) registers */ -enum mii_nway_register_bits { - MII_NWAY_NODE_SEL = 0x001f, - MII_NWAY_CSMA_CD = 0x0001, - MII_NWAY_T = 0x0020, - MII_NWAY_T_FDX = 0x0040, - MII_NWAY_TX = 0x0080, - MII_NWAY_TX_FDX = 0x0100, - MII_NWAY_T4 = 0x0200, - MII_NWAY_PAUSE = 0x0400, - MII_NWAY_RF = 0x2000, - MII_NWAY_ACK = 0x4000, - MII_NWAY_NP = 0x8000 -}; - -enum mii_stsout_register_bits { - MII_STSOUT_LINK_FAIL = 0x4000, - MII_STSOUT_SPD = 0x0080, - MII_STSOUT_DPLX = 0x0040 -}; - -enum mii_stsics_register_bits { - MII_STSICS_SPD = 0x8000, MII_STSICS_DPLX = 0x4000, - MII_STSICS_LINKSTS = 0x0001 -}; - -enum mii_stssum_register_bits { - MII_STSSUM_LINK = 0x0008, - MII_STSSUM_DPLX = 0x0004, - MII_STSSUM_AUTO = 0x0002, - MII_STSSUM_SPD = 0x0001 -}; - -enum sis900_revision_id { - SIS630A_900_REV = 0x80, SIS630E_900_REV = 0x81, - SIS630S_900_REV = 0x82, SIS630EA1_900_REV = 0x83 -}; - -enum sis630_revision_id { - SIS630A0 = 0x00, SIS630A1 = 0x01, - SIS630B0 = 0x10, SIS630B1 = 0x11 -}; - -#define FDX_CAPABLE_DUPLEX_UNKNOWN 0 -#define FDX_CAPABLE_HALF_SELECTED 1 -#define FDX_CAPABLE_FULL_SELECTED 2 - -#define HW_SPEED_UNCONFIG 0 -#define HW_SPEED_HOME 1 -#define HW_SPEED_10_MBPS 10 -#define HW_SPEED_100_MBPS 100 -#define HW_SPEED_DEFAULT (HW_SPEED_100_MBPS) - -#define CRC_SIZE 4 -#define MAC_HEADER_SIZE 14 - -#define TX_BUF_SIZE 1536 -#define RX_BUF_SIZE 1536 - -#define NUM_RX_DESC 4 /* Number of Rx descriptor registers. */ - -typedef unsigned char u8; -typedef signed char s8; -typedef unsigned short u16; -typedef signed short s16; -typedef unsigned int u32; -typedef signed int s32; - -/* Time in ticks before concluding the transmitter is hung. */ -#define TX_TIMEOUT (4*TICKS_PER_SEC) - -typedef struct _BufferDesc { - u32 link; - volatile u32 cmdsts; - u32 bufptr; -} BufferDesc; diff --git a/netboot/sis900.txt b/netboot/sis900.txt deleted file mode 100644 index 77419fad6..000000000 --- a/netboot/sis900.txt +++ /dev/null @@ -1,91 +0,0 @@ -How I added the SIS900 card to Etherboot - -Author: Marty Connor (mdc@thinguin.org) - -Date: 25 Febrary 2001 - -Description: - -This file is intended to help people who want to write an Etherboot -driver or port another driver to Etherboot. It is a starting point. -Perhaps someday I may write a more detailed description of writing an -Etherboot driver. This text should help get people started, and -studying sis900.[ch] should help show the basic structure and -techniques involved in writing and Etherboot driver. - -*********************************************************************** - -0. Back up all the files I need to modify: - -cd etherboot-4.7.20/src -cp Makefile Makefile.orig -cp config.c config.c.orig -cp pci.h pci.h.orig -cp NIC NIC.orig -cp cards.h cards.h.orig - -1. Edit src/Makefile to add SIS900FLAGS to defines - -SIS900FLAGS= -DINCLUDE_SIS900 - -2. edit src/pci.h to add PCI signatures for card - -#define PCI_VENDOR_ID_SIS 0x1039 -#define PCI_DEVICE_ID_SIS900 0x0900 -#define PCI_DEVICE_ID_SIS7016 0x7016 - -3. Edit src/config.c to add the card to the card probe list - -#if defined(INCLUDE_NS8390) || defined(INCLUDE_EEPRO100) || - defined(INCLUDE_LANCE) || defined(INCLUDE_EPIC100) || - defined(INCLUDE_TULIP) || defined(INCLUDE_OTULIP) || - defined(INCLUDE_3C90X) || defined(INCLUDE_3C595) || - defined(INCLUDE_RTL8139) || defined(INCLUDE_VIA_RHINE) || - defined(INCLUDE_SIS900) || defined(INCLUDE_W89C840) - -... and ... - -#ifdef INCLUDE_SIS900 - { PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS900, - "SIS900", 0, 0, 0, 0}, - { PCI_VENDOR_ID_SIS, PCI_DEVICE_ID_SIS7016, - "SIS7016", 0, 0, 0, 0}, -#endif - -... and ... - -#ifdef INCLUDE_SIS900 - { "SIS900", sis900_probe, pci_ioaddrs }, -#endif - -4. Edit NIC to add sis900 and sis7016 to NIC list - -# SIS 900 and SIS 7016 -sis900 sis900 0x1039,0x0900 -sis7016 sis900 0x1039,0x7016 - -5. Edit cards.h to add sis900 probe routine declaration - -#ifdef INCLUDE_SIS900 -extern struct nic *sis900_probe(struct nic *, unsigned short * - PCI_ARG(struct pci_device *)); -#endif - -*********************************************************************** - -At this point, you can begin creating your driver source file. See -the "Writing and Etherboot Driver" section of the Etherboot -documentation for some hints. See the skel.c file for a starting -point. If there is a Linux driver for the card, you may be able to -use that. Copy and learn from existing Etherboot drivers (this is GPL -/ Open Source software!). - -Join the etherboot-developers and etherboot-users mailing lists -(information is on etherboot.sourceforge.net) for information and -assistance. We invite more developers to help improve Etherboot. - -Visit the http://etherboot.sourceforge.net, http://thinguin.org, -http://rom-o-matic.net, and http://ltsp.org sites for information and -assistance. - -Enjoy. diff --git a/netboot/sk_g16.c b/netboot/sk_g16.c deleted file mode 100644 index eda52a0f7..000000000 --- a/netboot/sk_g16.c +++ /dev/null @@ -1,1160 +0,0 @@ -/************************************************************************** -Etherboot - BOOTP/TFTP Bootstrap Program -Schneider & Koch G16 NIC driver for Etherboot -heavily based on SK G16 driver from Linux 2.0.36 -Changes to make it work with Etherboot by Georg Baum -***************************************************************************/ - -/*- - * Copyright (C) 1994 by PJD Weichmann & SWS Bern, Switzerland - * - * This software may be used and distributed according to the terms - * of the GNU Public License, incorporated herein by reference. - * - * Module : sk_g16.c - * - * Version : $Revision$ - * - * Author : Patrick J.D. Weichmann - * - * Date Created : 94/05/26 - * Last Updated : $Date$ - * - * Description : Schneider & Koch G16 Ethernet Device Driver for - * Linux Kernel >= 1.1.22 - * Update History : - * --*/ - -/* - * The Schneider & Koch (SK) G16 Network device driver is based - * on the 'ni6510' driver from Michael Hipp which can be found at - * ftp://sunsite.unc.edu/pub/Linux/system/Network/drivers/nidrivers.tar.gz - * - * Sources: 1) ni6510.c by M. Hipp - * 2) depca.c by D.C. Davies - * 3) skeleton.c by D. Becker - * 4) Am7990 Local Area Network Controller for Ethernet (LANCE), - * AMD, Pub. #05698, June 1989 - * - * Many Thanks for helping me to get things working to: - * - * A. Cox (A.Cox@swansea.ac.uk) - * M. Hipp (mhipp@student.uni-tuebingen.de) - * R. Bolz (Schneider & Koch, Germany) - * - * See README.sk_g16 for details about limitations and bugs for the - * current version. - * - * To Do: - * - Support of SK_G8 and other SK Network Cards. - * - Autoset memory mapped RAM. Check for free memory and then - * configure RAM correctly. - * - SK_close should really set card in to initial state. - * - Test if IRQ 3 is not switched off. Use autoirq() functionality. - * (as in /drivers/net/skeleton.c) - * - Implement Multicast addressing. At minimum something like - * in depca.c. - * - Redo the statistics part. - * - Try to find out if the board is in 8 Bit or 16 Bit slot. - * If in 8 Bit mode don't use IRQ 11. - * - (Try to make it slightly faster.) - */ - -/* to get some global routines like printf */ -#include "etherboot.h" -/* to get the interface to the body of the program */ -#include "nic.h" - -/* From linux/if_ether.h: */ -#define ETH_ZLEN 60 /* Min. octets in frame sans FCS */ - -#include "sk_g16.h" - -/* - * Schneider & Koch Card Definitions - * ================================= - */ - -#define SK_NAME "SK_G16" - -/* - * SK_G16 Configuration - * -------------------- - */ - -/* - * Abbreviations - * ------------- - * - * RAM - used for the 16KB shared memory - * Boot_ROM, ROM - are used for referencing the BootEPROM - * - * SK_ADDR is a symbolic constant used to configure - * the behaviour of the driver and the SK_G16. - * - * SK_ADDR defines the address where the RAM will be mapped into the real - * host memory. - * valid addresses are from 0xa0000 to 0xfc000 in 16Kbyte steps. - */ - -#define SK_ADDR 0xcc000 - -/* - * In POS3 are bits A14-A19 of the address bus. These bits can be set - * to choose the RAM address. That's why we only can choose the RAM address - * in 16KB steps. - */ - -#define POS_ADDR (rom_addr>>14) /* Do not change this line */ - -/* - * SK_G16 I/O PORT's + IRQ's + Boot_ROM locations - * ---------------------------------------------- - */ - -/* - * As nearly every card has also SK_G16 a specified I/O Port region and - * only a few possible IRQ's. - * In the Installation Guide from Schneider & Koch is listed a possible - * Interrupt IRQ2. IRQ2 is always IRQ9 in boards with two cascaded interrupt - * controllers. So we use in SK_IRQS IRQ9. - */ - -/* Don't touch any of the following #defines. */ - -#define SK_IO_PORTS { 0x100, 0x180, 0x208, 0x220, 0x288, 0x320, 0x328, 0x390, 0 } - -/* - * SK_G16 POS REGISTERS - * -------------------- - */ - -/* - * SK_G16 has a Programmable Option Select (POS) Register. - * The POS is composed of 8 separate registers (POS0-7) which - * are I/O mapped on an address set by the W1 switch. - * - */ - -#define SK_POS_SIZE 8 /* 8 I/O Ports are used by SK_G16 */ - -#define SK_POS0 ioaddr /* Card-ID Low (R) */ -#define SK_POS1 ioaddr+1 /* Card-ID High (R) */ -#define SK_POS2 ioaddr+2 /* Card-Enable, Boot-ROM Disable (RW) */ -#define SK_POS3 ioaddr+3 /* Base address of RAM */ -#define SK_POS4 ioaddr+4 /* IRQ */ - -/* POS5 - POS7 are unused */ - -/* - * SK_G16 MAC PREFIX - * ----------------- - */ - -/* - * Scheider & Koch manufacturer code (00:00:a5). - * This must be checked, that we are sure it is a SK card. - */ - -#define SK_MAC0 0x00 -#define SK_MAC1 0x00 -#define SK_MAC2 0x5a - -/* - * SK_G16 ID - * --------- - */ - -/* - * If POS0,POS1 contain the following ID, then we know - * at which I/O Port Address we are. - */ - -#define SK_IDLOW 0xfd -#define SK_IDHIGH 0x6a - - -/* - * LANCE POS Bit definitions - * ------------------------- - */ - -#define SK_ROM_RAM_ON (POS2_CARD) -#define SK_ROM_RAM_OFF (POS2_EPROM) -#define SK_ROM_ON (inb(SK_POS2) & POS2_CARD) -#define SK_ROM_OFF (inb(SK_POS2) | POS2_EPROM) -#define SK_RAM_ON (inb(SK_POS2) | POS2_CARD) -#define SK_RAM_OFF (inb(SK_POS2) & POS2_EPROM) - -#define POS2_CARD 0x0001 /* 1 = SK_G16 on 0 = off */ -#define POS2_EPROM 0x0002 /* 1 = Boot EPROM off 0 = on */ - -/* - * SK_G16 Memory mapped Registers - * ------------------------------ - * - */ - -#define SK_IOREG (board->ioreg) /* LANCE data registers. */ -#define SK_PORT (board->port) /* Control, Status register */ -#define SK_IOCOM (board->iocom) /* I/O Command */ - -/* - * SK_G16 Status/Control Register bits - * ----------------------------------- - * - * (C) Controlreg (S) Statusreg - */ - -/* - * Register transfer: 0 = no transfer - * 1 = transferring data between LANCE and I/O reg - */ -#define SK_IORUN 0x20 - -/* - * LANCE interrupt: 0 = LANCE interrupt occurred - * 1 = no LANCE interrupt occurred - */ -#define SK_IRQ 0x10 - -#define SK_RESET 0x08 /* Reset SK_CARD: 0 = RESET 1 = normal */ -#define SK_RW 0x02 /* 0 = write to 1 = read from */ -#define SK_ADR 0x01 /* 0 = REG DataPort 1 = RAP Reg addr port */ - - -#define SK_RREG SK_RW /* Transferdirection to read from lance */ -#define SK_WREG 0 /* Transferdirection to write to lance */ -#define SK_RAP SK_ADR /* Destination Register RAP */ -#define SK_RDATA 0 /* Destination Register REG DataPort */ - -/* - * SK_G16 I/O Command - * ------------------ - */ - -/* - * Any bitcombination sets the internal I/O bit (transfer will start) - * when written to I/O Command - */ - -#define SK_DOIO 0x80 /* Do Transfer */ - -/* - * LANCE RAP (Register Address Port). - * --------------------------------- - */ - -/* - * The LANCE internal registers are selected through the RAP. - * The Registers are: - * - * CSR0 - Status and Control flags - * CSR1 - Low order bits of initialize block (bits 15:00) - * CSR2 - High order bits of initialize block (bits 07:00, 15:08 are reserved) - * CSR3 - Allows redefinition of the Bus Master Interface. - * This register must be set to 0x0002, which means BSWAP = 0, - * ACON = 1, BCON = 0; - * - */ - -#define CSR0 0x00 -#define CSR1 0x01 -#define CSR2 0x02 -#define CSR3 0x03 - -/* - * General Definitions - * =================== - */ - -/* - * Set the number of Tx and Rx buffers, using Log_2(# buffers). - * We have 16KB RAM which can be accessed by the LANCE. In the - * memory are not only the buffers but also the ring descriptors and - * the initialize block. - * Don't change anything unless you really know what you do. - */ - -#define LC_LOG_TX_BUFFERS 1 /* (2 == 2^^1) 2 Transmit buffers */ -#define LC_LOG_RX_BUFFERS 2 /* (8 == 2^^3) 8 Receive buffers */ - -/* Descriptor ring sizes */ - -#define TMDNUM (1 << (LC_LOG_TX_BUFFERS)) /* 2 Transmit descriptor rings */ -#define RMDNUM (1 << (LC_LOG_RX_BUFFERS)) /* 8 Receive Buffers */ - -/* Define Mask for setting RMD, TMD length in the LANCE init_block */ - -#define TMDNUMMASK (LC_LOG_TX_BUFFERS << 29) -#define RMDNUMMASK (LC_LOG_RX_BUFFERS << 29) - -/* - * Data Buffer size is set to maximum packet length. - */ - -#define PKT_BUF_SZ 1518 - -/* - * The number of low I/O ports used by the ethercard. - */ - -#define ETHERCARD_TOTAL_SIZE SK_POS_SIZE - -/* - * Portreserve is there to mark the Card I/O Port region as used. - * Check_region is to check if the region at ioaddr with the size "size" - * is free or not. - * Snarf_region allocates the I/O Port region. - */ - -#ifndef HAVE_PORTRESERVE - -#define check_region(ioaddr1, size) 0 -#define request_region(ioaddr1, size,name) do ; while (0) - -#endif - -/* - * SK_DEBUG - * - * Here you can choose what level of debugging wanted. - * - * If SK_DEBUG and SK_DEBUG2 are undefined, then only the - * necessary messages will be printed. - * - * If SK_DEBUG is defined, there will be many debugging prints - * which can help to find some mistakes in configuration or even - * in the driver code. - * - * If SK_DEBUG2 is defined, many many messages will be printed - * which normally you don't need. I used this to check the interrupt - * routine. - * - * (If you define only SK_DEBUG2 then only the messages for - * checking interrupts will be printed!) - * - * Normal way of live is: - * - * For the whole thing get going let both symbolic constants - * undefined. If you face any problems and you know what's going - * on (you know something about the card and you can interpret some - * hex LANCE register output) then define SK_DEBUG - * - */ - -#undef SK_DEBUG /* debugging */ -#undef SK_DEBUG2 /* debugging with more verbose report */ - -#ifdef SK_DEBUG -#define PRINTF(x) printf x -#else -#define PRINTF(x) /**/ -#endif - -#ifdef SK_DEBUG2 -#define PRINTF2(x) printf x -#else -#define PRINTF2(x) /**/ -#endif - -/* - * SK_G16 RAM - * - * The components are memory mapped and can be set in a region from - * 0x00000 through 0xfc000 in 16KB steps. - * - * The Network components are: dual ported RAM, Prom, I/O Reg, Status-, - * Controlregister and I/O Command. - * - * dual ported RAM: This is the only memory region which the LANCE chip - * has access to. From the Lance it is addressed from 0x0000 to - * 0x3fbf. The host accesses it normally. - * - * PROM: The PROM obtains the ETHERNET-MAC-Address. It is realised as a - * 8-Bit PROM, this means only the 16 even addresses are used of the - * 32 Byte Address region. Access to a odd address results in invalid - * data. - * - * LANCE I/O Reg: The I/O Reg is build of 4 single Registers, Low-Byte Write, - * Hi-Byte Write, Low-Byte Read, Hi-Byte Read. - * Transfer from or to the LANCE is always in 16Bit so Low and High - * registers are always relevant. - * - * The Data from the Readregister is not the data in the Writeregister!! - * - * Port: Status- and Controlregister. - * Two different registers which share the same address, Status is - * read-only, Control is write-only. - * - * I/O Command: - * Any bitcombination written in here starts the transmission between - * Host and LANCE. - */ - -typedef struct -{ - unsigned char ram[0x3fc0]; /* 16KB dual ported ram */ - unsigned char rom[0x0020]; /* 32Byte PROM containing 6Byte MAC */ - unsigned char res1[0x0010]; /* reserved */ - unsigned volatile short ioreg;/* LANCE I/O Register */ - unsigned volatile char port; /* Statusregister and Controlregister */ - unsigned char iocom; /* I/O Command Register */ -} SK_RAM; - -/* struct */ - -/* - * This is the structure for the dual ported ram. We - * have exactly 16 320 Bytes. In here there must be: - * - * - Initialize Block (starting at a word boundary) - * - Receive and Transmit Descriptor Rings (quadword boundary) - * - Data Buffers (arbitrary boundary) - * - * This is because LANCE has on SK_G16 only access to the dual ported - * RAM and nowhere else. - */ - -struct SK_ram -{ - struct init_block ib; - struct tmd tmde[TMDNUM]; - struct rmd rmde[RMDNUM]; - char tmdbuf[TMDNUM][PKT_BUF_SZ]; - char rmdbuf[RMDNUM][PKT_BUF_SZ]; -}; - -/* - * Structure where all necessary information is for ring buffer - * management and statistics. - */ - -struct priv -{ - struct SK_ram *ram; /* dual ported ram structure */ - struct rmd *rmdhead; /* start of receive ring descriptors */ - struct tmd *tmdhead; /* start of transmit ring descriptors */ - int rmdnum; /* actual used ring descriptor */ - int tmdnum; /* actual transmit descriptor for transmitting data */ - int tmdlast; /* last sent descriptor used for error handling, etc */ - void *rmdbufs[RMDNUM]; /* pointer to the receive buffers */ - void *tmdbufs[TMDNUM]; /* pointer to the transmit buffers */ -}; - -/* global variable declaration */ - -/* static variables */ - -static SK_RAM *board; /* pointer to our memory mapped board components */ -static unsigned short ioaddr; /* base io address */ -static struct priv p_data; - -/* Macros */ - - -/* Function Prototypes */ - -/* - * Device Driver functions - * ----------------------- - * See for short explanation of each function its definitions header. - */ - -static int SK_probe1(struct nic *nic, short ioaddr1); - -static void SK_reset(struct nic *nic); -static int SK_poll(struct nic *nic); -static void SK_transmit( -struct nic *nic, -const char *d, /* Destination */ -unsigned int t, /* Type */ -unsigned int s, /* size */ -const char *p); /* Packet */ -static void SK_disable(struct nic *nic); -struct nic *SK_probe(struct nic *nic, unsigned short *probe_addrs); - -/* - * LANCE Functions - * --------------- - */ - -static int SK_lance_init(struct nic *nic, unsigned short mode); -static void SK_reset_board(void); -static void SK_set_RAP(int reg_number); -static int SK_read_reg(int reg_number); -static int SK_rread_reg(void); -static void SK_write_reg(int reg_number, int value); - -/* - * Debugging functions - * ------------------- - */ - -static void SK_print_pos(struct nic *nic, char *text); -static void SK_print_ram(struct nic *nic); - - -/************************************************************************** -RESET - Reset adapter -***************************************************************************/ -static void SK_reset(struct nic *nic) -{ - /* put the card in its initial state */ - SK_lance_init(nic, MODE_NORMAL); -} - -/************************************************************************** -POLL - Wait for a frame -***************************************************************************/ -static int SK_poll(struct nic *nic) -{ - /* return true if there's an ethernet packet ready to read */ - struct priv *p; /* SK_G16 private structure */ - struct rmd *rmdp; - int csr0, rmdstat, packet_there; - PRINTF2(("## %s: At beginning of SK_poll(). CSR0: %#hX\n", - SK_NAME, SK_read_reg(CSR0))); - - p = nic->priv_data; - csr0 = SK_read_reg(CSR0); /* store register for checking */ - - /* - * Acknowledge all of the current interrupt sources, disable - * Interrupts (INEA = 0) - */ - - SK_write_reg(CSR0, csr0 & CSR0_CLRALL); - - if (csr0 & CSR0_ERR) /* LANCE Error */ - { - printf("%s: error: %#hX", SK_NAME, csr0); - - if (csr0 & CSR0_MISS) /* No place to store packet ? */ - { - printf(", Packet dropped."); - } - putchar('\n'); - } - - rmdp = p->rmdhead + p->rmdnum; - packet_there = 0; - /* As long as we own the next entry, check status and send - * it up to higher layer - */ - - while (!( (rmdstat = rmdp->u.s.status) & RX_OWN)) - { - /* - * Start and end of packet must be set, because we use - * the ethernet maximum packet length (1518) as buffer size. - * - * Because our buffers are at maximum OFLO and BUFF errors are - * not to be concerned (see Data sheet) - */ - - if ((rmdstat & (RX_STP | RX_ENP)) != (RX_STP | RX_ENP)) - { - /* Start of a frame > 1518 Bytes ? */ - - if (rmdstat & RX_STP) - { - printf("%s: packet too long\n", SK_NAME); - } - - /* - * All other packets will be ignored until a new frame with - * start (RX_STP) set follows. - * - * What we do is just give descriptor free for new incoming - * packets. - */ - - rmdp->u.s.status = RX_OWN; /* Relinquish ownership to LANCE */ - - } - else if (rmdstat & RX_ERR) /* Receive Error ? */ - { - printf("%s: RX error: %#hX\n", SK_NAME, (int) rmdstat); - rmdp->u.s.status = RX_OWN; /* Relinquish ownership to LANCE */ - } - else /* We have a packet which can be queued for the upper layers */ - { - - int len = (rmdp->mlen & 0x0fff); /* extract message length from receive buffer */ - - /* - * Copy data out of our receive descriptor into nic->packet. - * - * (rmdp->u.buffer & 0x00ffffff) -> get address of buffer and - * ignore status fields) - */ - - memcpy(nic->packet, (unsigned char *) (rmdp->u.buffer & 0x00ffffff), nic->packetlen = len); - packet_there = 1; - - - /* - * Packet is queued and marked for processing so we - * free our descriptor - */ - - rmdp->u.s.status = RX_OWN; - - p->rmdnum++; - p->rmdnum %= RMDNUM; - - rmdp = p->rmdhead + p->rmdnum; - } - } - SK_write_reg(CSR0, CSR0_INEA); /* Enable Interrupts */ - return (packet_there); -} - -/************************************************************************** -TRANSMIT - Transmit a frame -***************************************************************************/ -static void SK_transmit( -struct nic *nic, -const char *d, /* Destination */ -unsigned int t, /* Type */ -unsigned int s, /* size */ -const char *pack) /* Packet */ -{ - /* send the packet to destination */ - struct priv *p; /* SK_G16 private structure */ - struct tmd *tmdp; - short len; - int csr0, i, tmdstat; - - PRINTF2(("## %s: At beginning of SK_transmit(). CSR0: %#hX\n", - SK_NAME, SK_read_reg(CSR0))); - p = nic->priv_data; - tmdp = p->tmdhead + p->tmdnum; /* Which descriptor for transmitting */ - - /* Copy data into dual ported ram */ - - memcpy(&p->ram->tmdbuf[p->tmdnum][0], d, ETH_ALEN); /* dst */ - memcpy(&p->ram->tmdbuf[p->tmdnum][ETH_ALEN], nic->node_addr, ETH_ALEN); /* src */ - p->ram->tmdbuf[p->tmdnum][ETH_ALEN + ETH_ALEN] = t >> 8; /* type */ - p->ram->tmdbuf[p->tmdnum][ETH_ALEN + ETH_ALEN + 1] = t; /* type */ - memcpy(&p->ram->tmdbuf[p->tmdnum][ETH_HLEN], pack, s); - s += ETH_HLEN; - while (s < ETH_ZLEN) /* pad to min length */ - p->ram->tmdbuf[p->tmdnum][s++] = 0; - p->ram->tmde[p->tmdnum].status2 = 0x0; - - /* Evaluate Packet length */ - len = ETH_ZLEN < s ? s : ETH_ZLEN; - - /* Fill in Transmit Message Descriptor */ - - tmdp->blen = -len; /* set length to transmit */ - - /* - * Packet start and end is always set because we use the maximum - * packet length as buffer length. - * Relinquish ownership to LANCE - */ - - tmdp->u.s.status = TX_OWN | TX_STP | TX_ENP; - - /* Start Demand Transmission */ - SK_write_reg(CSR0, CSR0_TDMD | CSR0_INEA); - - csr0 = SK_read_reg(CSR0); /* store register for checking */ - - /* - * Acknowledge all of the current interrupt sources, disable - * Interrupts (INEA = 0) - */ - - SK_write_reg(CSR0, csr0 & CSR0_CLRALL); - - if (csr0 & CSR0_ERR) /* LANCE Error */ - { - printf("%s: error: %#hX", SK_NAME, csr0); - - if (csr0 & CSR0_MISS) /* No place to store packet ? */ - { - printf(", Packet dropped."); - } - putchar('\n'); - } - - - /* Set next buffer */ - p->tmdlast++; - p->tmdlast &= TMDNUM-1; - - tmdstat = tmdp->u.s.status & 0xff00; /* filter out status bits 15:08 */ - - /* - * We check status of transmitted packet. - * see LANCE data-sheet for error explanation - */ - if (tmdstat & TX_ERR) /* Error occurred */ - { - printf("%s: TX error: %#hX %#hX\n", SK_NAME, (int) tmdstat, - (int) tmdp->status2); - - if (tmdp->status2 & TX_TDR) /* TDR problems? */ - { - printf("%s: tdr-problems \n", SK_NAME); - } - - if (tmdp->status2 & TX_UFLO) /* Underflow error ? */ - { - /* - * If UFLO error occurs it will turn transmitter of. - * So we must reinit LANCE - */ - - SK_lance_init(nic, MODE_NORMAL); - } - - tmdp->status2 = 0; /* Clear error flags */ - } - - SK_write_reg(CSR0, CSR0_INEA); /* Enable Interrupts */ - - /* Set pointer to next transmit buffer */ - p->tmdnum++; - p->tmdnum &= TMDNUM-1; - -} - -/************************************************************************** -DISABLE - Turn off ethernet interface -***************************************************************************/ -static void SK_disable(struct nic *nic) -{ - PRINTF(("## %s: At beginning of SK_disable(). CSR0: %#hX\n", - SK_NAME, SK_read_reg(CSR0))); - PRINTF(("%s: Shutting %s down CSR0 %#hX\n", SK_NAME, SK_NAME, - (int) SK_read_reg(CSR0))); - - SK_write_reg(CSR0, CSR0_STOP); /* STOP the LANCE */ -} - -/************************************************************************** -PROBE - Look for an adapter, this routine's visible to the outside -***************************************************************************/ -struct nic *SK_probe(struct nic *nic, unsigned short *probe_addrs) -{ - unsigned short *p; - static unsigned short io_addrs[] = SK_IO_PORTS; - /* if probe_addrs is 0, then routine can use a hardwired default */ - putchar('\n'); - nic->priv_data = &p_data; - if (probe_addrs == 0) - probe_addrs = io_addrs; - for (p = probe_addrs; (ioaddr = *p) != 0; ++p) - { - long offset1, offset0 = inb(ioaddr); - if ((offset0 == SK_IDLOW) && - ((offset1 = inb(ioaddr + 1)) == SK_IDHIGH)) - if (SK_probe1(nic, ioaddr) >= 0) - break; - } - /* if board found */ - if (ioaddr != 0) - { - /* point to NIC specific routines */ - nic->reset = SK_reset; - nic->poll = SK_poll; - nic->transmit = SK_transmit; - nic->disable = SK_disable; - return nic; - } - /* else */ - { - return 0; - } -} - -int SK_probe1(struct nic *nic, short ioaddr1) -{ - int i,j; /* Counters */ - int sk_addr_flag = 0; /* SK ADDR correct? 1 - no, 0 - yes */ - unsigned int rom_addr; /* used to store RAM address used for POS_ADDR */ - - struct priv *p; /* SK_G16 private structure */ - - if (SK_ADDR & 0x3fff || SK_ADDR < 0xa0000) - { - /* - * Now here we could use a routine which searches for a free - * place in the ram and set SK_ADDR if found. TODO. - */ - printf("%s: SK_ADDR %#hX is not valid. Check configuration.\n", - SK_NAME, SK_ADDR); - return -1; - } - - rom_addr = SK_ADDR; - - outb(SK_ROM_RAM_OFF, SK_POS2); /* Boot_ROM + RAM off */ - outb(POS_ADDR, SK_POS3); /* Set RAM address */ - outb(SK_ROM_RAM_ON, SK_POS2); /* RAM on, BOOT_ROM on */ -#ifdef SK_DEBUG - SK_print_pos(nic, "POS registers after ROM, RAM config"); -#endif - - board = (SK_RAM *) rom_addr; - PRINTF(("adr[0]: %hX, adr[1]: %hX, adr[2]: %hX\n", - board->rom[0], board->rom[2], board->rom[4])); - - /* Read in station address */ - for (i = 0, j = 0; i < ETH_ALEN; i++, j+=2) - { - *(nic->node_addr+i) = board->rom[j]; - } - - /* Check for manufacturer code */ -#ifdef SK_DEBUG - if (!(*(nic->node_addr+0) == SK_MAC0 && - *(nic->node_addr+1) == SK_MAC1 && - *(nic->node_addr+2) == SK_MAC2) ) - { - PRINTF(("## %s: We did not find SK_G16 at RAM location.\n", - SK_NAME)); - return -1; /* NO SK_G16 found */ - } -#endif - - p = nic->priv_data; - - /* Initialize private structure */ - - p->ram = (struct SK_ram *) rom_addr; /* Set dual ported RAM addr */ - p->tmdhead = &(p->ram)->tmde[0]; /* Set TMD head */ - p->rmdhead = &(p->ram)->rmde[0]; /* Set RMD head */ - - printf("Schneider & Koch G16 at %#hX, mem at %#hX, HW addr: %!\n", - (unsigned int) ioaddr, (unsigned int) p->ram, nic->node_addr); - - /* Initialize buffer pointers */ - - for (i = 0; i < TMDNUM; i++) - { - p->tmdbufs[i] = p->ram->tmdbuf[i]; - } - - for (i = 0; i < RMDNUM; i++) - { - p->rmdbufs[i] = p->ram->rmdbuf[i]; - } - i = 0; - - if (!(i = SK_lance_init(nic, MODE_NORMAL))) /* LANCE init OK? */ - { - -#ifdef SK_DEBUG - /* - * This debug block tries to stop LANCE, - * reinit LANCE with transmitter and receiver disabled, - * then stop again and reinit with NORMAL_MODE - */ - - printf("## %s: After lance init. CSR0: %#hX\n", - SK_NAME, SK_read_reg(CSR0)); - SK_write_reg(CSR0, CSR0_STOP); - printf("## %s: LANCE stopped. CSR0: %#hX\n", - SK_NAME, SK_read_reg(CSR0)); - SK_lance_init(nic, MODE_DTX | MODE_DRX); - printf("## %s: Reinit with DTX + DRX off. CSR0: %#hX\n", - SK_NAME, SK_read_reg(CSR0)); - SK_write_reg(CSR0, CSR0_STOP); - printf("## %s: LANCE stopped. CSR0: %#hX\n", - SK_NAME, SK_read_reg(CSR0)); - SK_lance_init(nic, MODE_NORMAL); - printf("## %s: LANCE back to normal mode. CSR0: %#hX\n", - SK_NAME, SK_read_reg(CSR0)); - SK_print_pos(nic, "POS regs before returning OK"); - -#endif /* SK_DEBUG */ - - } - else /* LANCE init failed */ - { - - PRINTF(("## %s: LANCE init failed: CSR0: %#hX\n", - SK_NAME, SK_read_reg(CSR0))); - return -1; - } - -#ifdef SK_DEBUG - SK_print_pos(nic, "End of SK_probe1"); - SK_print_ram(nic); -#endif - - return 0; /* Initialization done */ - -} /* End of SK_probe1() */ - -static int SK_lance_init(struct nic *nic, unsigned short mode) -{ - int i; - struct priv *p = (struct priv *) nic->priv_data; - struct tmd *tmdp; - struct rmd *rmdp; - - PRINTF(("## %s: At beginning of LANCE init. CSR0: %#hX\n", - SK_NAME, SK_read_reg(CSR0))); - - /* Reset LANCE */ - SK_reset_board(); - - /* Initialize TMD's with start values */ - p->tmdnum = 0; /* First descriptor for transmitting */ - p->tmdlast = 0; /* First descriptor for reading stats */ - - for (i = 0; i < TMDNUM; i++) /* Init all TMD's */ - { - tmdp = p->tmdhead + i; - - tmdp->u.buffer = (unsigned long) p->tmdbufs[i]; /* assign buffer */ - - /* Mark TMD as start and end of packet */ - tmdp->u.s.status = TX_STP | TX_ENP; - } - - - /* Initialize RMD's with start values */ - - p->rmdnum = 0; /* First RMD which will be used */ - - for (i = 0; i < RMDNUM; i++) /* Init all RMD's */ - { - rmdp = p->rmdhead + i; - - - rmdp->u.buffer = (unsigned long) p->rmdbufs[i]; /* assign buffer */ - - /* - * LANCE must be owner at beginning so that he can fill in - * receiving packets, set status and release RMD - */ - - rmdp->u.s.status = RX_OWN; - - rmdp->blen = -PKT_BUF_SZ; /* Buffer Size in a two's complement */ - - rmdp->mlen = 0; /* init message length */ - - } - - /* Fill LANCE Initialize Block */ - - (p->ram)->ib.mode = mode; /* Set operation mode */ - - for (i = 0; i < ETH_ALEN; i++) /* Set physical address */ - { - (p->ram)->ib.paddr[i] = *(nic->node_addr+i); - } - - for (i = 0; i < 8; i++) /* Set multicast, logical address */ - { - (p->ram)->ib.laddr[i] = 0; /* We do not use logical addressing */ - } - - /* Set ring descriptor pointers and set number of descriptors */ - - (p->ram)->ib.rdrp = (int) p->rmdhead | RMDNUMMASK; - (p->ram)->ib.tdrp = (int) p->tmdhead | TMDNUMMASK; - - /* Prepare LANCE Control and Status Registers */ - - SK_write_reg(CSR3, CSR3_ACON); /* Ale Control !!!THIS MUST BE SET!!!! */ - - /* - * LANCE addresses the RAM from 0x0000 to 0x3fbf and has no access to - * PC Memory locations. - * - * In structure SK_ram is defined that the first thing in ram - * is the initialization block. So his address is for LANCE always - * 0x0000 - * - * CSR1 contains low order bits 15:0 of initialization block address - * CSR2 is built of: - * 7:0 High order bits 23:16 of initialization block address - * 15:8 reserved, must be 0 - */ - - /* Set initialization block address (must be on word boundary) */ - SK_write_reg(CSR1, 0); /* Set low order bits 15:0 */ - SK_write_reg(CSR2, 0); /* Set high order bits 23:16 */ - - - PRINTF(("## %s: After setting CSR1-3. CSR0: %#hX\n", - SK_NAME, SK_read_reg(CSR0))); - - /* Initialize LANCE */ - - /* - * INIT = Initialize, when set, causes the LANCE to begin the - * initialization procedure and access the Init Block. - */ - - SK_write_reg(CSR0, CSR0_INIT); - - /* Wait until LANCE finished initialization */ - - SK_set_RAP(CSR0); /* Register Address Pointer to CSR0 */ - - for (i = 0; (i < 100) && !(SK_rread_reg() & CSR0_IDON); i++) - ; /* Wait until init done or go ahead if problems (i>=100) */ - - if (i >= 100) /* Something is wrong ! */ - { - printf("%s: can't init am7990, status: %#hX " - "init_block: %#hX\n", - SK_NAME, (int) SK_read_reg(CSR0), - (unsigned int) &(p->ram)->ib); - -#ifdef SK_DEBUG - SK_print_pos(nic, "LANCE INIT failed"); -#endif - - return -1; /* LANCE init failed */ - } - - PRINTF(("## %s: init done after %d ticks\n", SK_NAME, i)); - - /* Clear Initialize done, enable Interrupts, start LANCE */ - - SK_write_reg(CSR0, CSR0_IDON | CSR0_INEA | CSR0_STRT); - - PRINTF(("## %s: LANCE started. CSR0: %#hX\n", SK_NAME, - SK_read_reg(CSR0))); - - return 0; /* LANCE is up and running */ - -} /* End of SK_lance_init() */ - -/* LANCE access functions - * - * ! CSR1-3 can only be accessed when in CSR0 the STOP bit is set ! - */ - -static void SK_reset_board(void) -{ - int i; - - PRINTF(("## %s: At beginning of SK_reset_board.\n", SK_NAME)); - SK_PORT = 0x00; /* Reset active */ - for (i = 0; i < 10 ; i++) /* Delay min 5ms */ - ; - SK_PORT = SK_RESET; /* Set back to normal operation */ - -} /* End of SK_reset_board() */ - -static void SK_set_RAP(int reg_number) -{ - SK_IOREG = reg_number; - SK_PORT = SK_RESET | SK_RAP | SK_WREG; - SK_IOCOM = SK_DOIO; - - while (SK_PORT & SK_IORUN) - ; -} /* End of SK_set_RAP() */ - -static int SK_read_reg(int reg_number) -{ - SK_set_RAP(reg_number); - - SK_PORT = SK_RESET | SK_RDATA | SK_RREG; - SK_IOCOM = SK_DOIO; - - while (SK_PORT & SK_IORUN) - ; - return (SK_IOREG); - -} /* End of SK_read_reg() */ - -static int SK_rread_reg(void) -{ - SK_PORT = SK_RESET | SK_RDATA | SK_RREG; - - SK_IOCOM = SK_DOIO; - - while (SK_PORT & SK_IORUN) - ; - return (SK_IOREG); - -} /* End of SK_rread_reg() */ - -static void SK_write_reg(int reg_number, int value) -{ - SK_set_RAP(reg_number); - - SK_IOREG = value; - SK_PORT = SK_RESET | SK_RDATA | SK_WREG; - SK_IOCOM = SK_DOIO; - - while (SK_PORT & SK_IORUN) - ; -} /* End of SK_write_reg */ - -/* - * Debugging functions - * ------------------- - */ - -#ifdef SK_DEBUG -static void SK_print_pos(struct nic *nic, char *text) -{ - - unsigned char pos0 = inb(SK_POS0), - pos1 = inb(SK_POS1), - pos2 = inb(SK_POS2), - pos3 = inb(SK_POS3), - pos4 = inb(SK_POS4); - - - printf("## %s: %s.\n" - "## pos0=%#hX pos1=%#hX pos2=%#hX pos3=%#hX pos4=%#hX\n", - SK_NAME, text, pos0, pos1, pos2, (pos3<<14), pos4); - -} /* End of SK_print_pos() */ - -static void SK_print_ram(struct nic *nic) -{ - - int i; - struct priv *p = (struct priv *) nic->priv_data; - - printf("## %s: RAM Details.\n" - "## RAM at %#hX tmdhead: %#hX rmdhead: %#hX initblock: %#hX\n", - SK_NAME, - (unsigned int) p->ram, - (unsigned int) p->tmdhead, - (unsigned int) p->rmdhead, - (unsigned int) &(p->ram)->ib); - - printf("## "); - - for(i = 0; i < TMDNUM; i++) - { - if (!(i % 3)) /* Every third line do a newline */ - { - printf("\n## "); - } - printf("tmdbufs%d: %#hX ", (i+1), (int) p->tmdbufs[i]); - } - printf("## "); - - for(i = 0; i < RMDNUM; i++) - { - if (!(i % 3)) /* Every third line do a newline */ - { - printf("\n## "); - } - printf("rmdbufs%d: %#hX ", (i+1), (int) p->rmdbufs[i]); - } - putchar('\n'); - -} /* End of SK_print_ram() */ -#endif diff --git a/netboot/sk_g16.h b/netboot/sk_g16.h deleted file mode 100644 index 9f0bb0745..000000000 --- a/netboot/sk_g16.h +++ /dev/null @@ -1,168 +0,0 @@ -/*- - * - * This software may be used and distributed according to the terms - * of the GNU Public License, incorporated herein by reference. - * - * Module : sk_g16.h - * Version : $Revision$ - * - * Author : M.Hipp (mhipp@student.uni-tuebingen.de) - * changes by : Patrick J.D. Weichmann - * - * Date Created : 94/05/25 - * - * Description : In here are all necessary definitions of - * the am7990 (LANCE) chip used for writing a - * network device driver which uses this chip - * - * $Log$ - * Revision 1.3 2000-07-29 19:22:54 okuji - * update the network support to etherboot-4.6.4. - * --*/ - -#ifndef SK_G16_H - -#define SK_G16_H - - -/* - * Control and Status Register 0 (CSR0) bit definitions - * - * (R=Readable) (W=Writeable) (S=Set on write) (C-Clear on write) - * - */ - -#define CSR0_ERR 0x8000 /* Error summary (R) */ -#define CSR0_BABL 0x4000 /* Babble transmitter timeout error (RC) */ -#define CSR0_CERR 0x2000 /* Collision Error (RC) */ -#define CSR0_MISS 0x1000 /* Missed packet (RC) */ -#define CSR0_MERR 0x0800 /* Memory Error (RC) */ -#define CSR0_RINT 0x0400 /* Receiver Interrupt (RC) */ -#define CSR0_TINT 0x0200 /* Transmit Interrupt (RC) */ -#define CSR0_IDON 0x0100 /* Initialization Done (RC) */ -#define CSR0_INTR 0x0080 /* Interrupt Flag (R) */ -#define CSR0_INEA 0x0040 /* Interrupt Enable (RW) */ -#define CSR0_RXON 0x0020 /* Receiver on (R) */ -#define CSR0_TXON 0x0010 /* Transmitter on (R) */ -#define CSR0_TDMD 0x0008 /* Transmit Demand (RS) */ -#define CSR0_STOP 0x0004 /* Stop (RS) */ -#define CSR0_STRT 0x0002 /* Start (RS) */ -#define CSR0_INIT 0x0001 /* Initialize (RS) */ - -#define CSR0_CLRALL 0x7f00 /* mask for all clearable bits */ - -/* - * Control and Status Register 3 (CSR3) bit definitions - * - */ - -#define CSR3_BSWAP 0x0004 /* Byte Swap (RW) */ -#define CSR3_ACON 0x0002 /* ALE Control (RW) */ -#define CSR3_BCON 0x0001 /* Byte Control (RW) */ - -/* - * Initialization Block Mode operation Bit Definitions. - */ - -#define MODE_PROM 0x8000 /* Promiscuous Mode */ -#define MODE_INTL 0x0040 /* Internal Loopback */ -#define MODE_DRTY 0x0020 /* Disable Retry */ -#define MODE_COLL 0x0010 /* Force Collision */ -#define MODE_DTCR 0x0008 /* Disable Transmit CRC) */ -#define MODE_LOOP 0x0004 /* Loopback */ -#define MODE_DTX 0x0002 /* Disable the Transmitter */ -#define MODE_DRX 0x0001 /* Disable the Receiver */ - -#define MODE_NORMAL 0x0000 /* Normal operation mode */ - -/* - * Receive message descriptor status bit definitions. - */ - -#define RX_OWN 0x80 /* Owner bit 0 = host, 1 = lance */ -#define RX_ERR 0x40 /* Error Summary */ -#define RX_FRAM 0x20 /* Framing Error */ -#define RX_OFLO 0x10 /* Overflow Error */ -#define RX_CRC 0x08 /* CRC Error */ -#define RX_BUFF 0x04 /* Buffer Error */ -#define RX_STP 0x02 /* Start of Packet */ -#define RX_ENP 0x01 /* End of Packet */ - - -/* - * Transmit message descriptor status bit definitions. - */ - -#define TX_OWN 0x80 /* Owner bit 0 = host, 1 = lance */ -#define TX_ERR 0x40 /* Error Summary */ -#define TX_MORE 0x10 /* More the 1 retry needed to Xmit */ -#define TX_ONE 0x08 /* One retry needed to Xmit */ -#define TX_DEF 0x04 /* Deferred */ -#define TX_STP 0x02 /* Start of Packet */ -#define TX_ENP 0x01 /* End of Packet */ - -/* - * Transmit status (2) (valid if TX_ERR == 1) - */ - -#define TX_BUFF 0x8000 /* Buffering error (no ENP) */ -#define TX_UFLO 0x4000 /* Underflow (late memory) */ -#define TX_LCOL 0x1000 /* Late collision */ -#define TX_LCAR 0x0400 /* Loss of Carrier */ -#define TX_RTRY 0x0200 /* Failed after 16 retransmissions */ -#define TX_TDR 0x003f /* Time-domain-reflectometer-value */ - - -/* - * Structures used for Communication with the LANCE - */ - -/* LANCE Initialize Block */ - -struct init_block -{ - unsigned short mode; /* Mode Register */ - unsigned char paddr[6]; /* Physical Address (MAC) */ - unsigned char laddr[8]; /* Logical Filter Address (not used) */ - unsigned int rdrp; /* Receive Descriptor Ring pointer */ - unsigned int tdrp; /* Transmit Descriptor Ring pointer */ -}; - - -/* Receive Message Descriptor Entry */ - -struct rmd -{ - union rmd_u - { - unsigned long buffer; /* Address of buffer */ - struct rmd_s - { - unsigned char unused[3]; - unsigned volatile char status; /* Status Bits */ - } s; - } u; - volatile short blen; /* Buffer Length (two's complement) */ - unsigned short mlen; /* Message Byte Count */ -}; - - -/* Transmit Message Descriptor Entry */ - -struct tmd -{ - union tmd_u - { - unsigned long buffer; /* Address of buffer */ - struct tmd_s - { - unsigned char unused[3]; - unsigned volatile char status; /* Status Bits */ - } s; - } u; - unsigned short blen; /* Buffer Length (two's complement) */ - unsigned volatile short status2; /* Error Status Bits */ -}; - -#endif /* End of SK_G16_H */ diff --git a/netboot/smc9000.c b/netboot/smc9000.c deleted file mode 100644 index 4384a1356..000000000 --- a/netboot/smc9000.c +++ /dev/null @@ -1,522 +0,0 @@ - /*------------------------------------------------------------------------ - * smc9000.c - * This is a Etherboot driver for SMC's 9000 series of Ethernet cards. - * - * Copyright (C) 1998 Daniel Engström - * Based on the Linux SMC9000 driver, smc9194.c by Eric Stahlman - * Copyright (C) 1996 by Erik Stahlman - * - * This software may be used and distributed according to the terms - * of the GNU Public License, incorporated herein by reference. - * - * "Features" of the SMC chip: - * 4608 byte packet memory. ( for the 91C92/4. Others have more ) - * EEPROM for configuration - * AUI/TP selection - * - * Authors - * Erik Stahlman - * Daniel Engström - * - * History - * 98-09-25 Daniel Engström Etherboot driver crated from Eric's - * Linux driver. - * - *---------------------------------------------------------------------------*/ -#define LINUX_OUT_MACROS 1 -#define SMC9000_VERBOSE 1 -#define SMC9000_DEBUG 0 - -#include "etherboot.h" -#include "nic.h" -#include "cards.h" -#include "smc9000.h" - -# define _outb outb -# define _outw outw - -static const char smc9000_version[] = "Version 0.99 98-09-30"; -static unsigned int smc9000_base=0; -static const char *interfaces[ 2 ] = { "TP", "AUI" }; -static const char *chip_ids[ 15 ] = { - NULL, NULL, NULL, - /* 3 */ "SMC91C90/91C92", - /* 4 */ "SMC91C94", - /* 5 */ "SMC91C95", - NULL, - /* 7 */ "SMC91C100", - /* 8 */ "SMC91C100FD", - NULL, NULL, NULL, - NULL, NULL, NULL -}; -static const char smc91c96_id[] = "SMC91C96"; - -/* - * Function: smc_reset( int ioaddr ) - * Purpose: - * This sets the SMC91xx chip to its normal state, hopefully from whatever - * mess that any other DOS driver has put it in. - * - * Maybe I should reset more registers to defaults in here? SOFTRESET should - * do that for me. - * - * Method: - * 1. send a SOFT RESET - * 2. wait for it to finish - * 3. reset the memory management unit - * 4. clear all interrupts - * -*/ -static void smc_reset(int ioaddr) -{ - /* This resets the registers mostly to defaults, but doesn't - * affect EEPROM. That seems unnecessary */ - SMC_SELECT_BANK(ioaddr, 0); - _outw( RCR_SOFTRESET, ioaddr + RCR ); - - /* this should pause enough for the chip to be happy */ - SMC_DELAY(ioaddr); - - /* Set the transmit and receive configuration registers to - * default values */ - _outw(RCR_CLEAR, ioaddr + RCR); - _outw(TCR_CLEAR, ioaddr + TCR); - - /* Reset the MMU */ - SMC_SELECT_BANK(ioaddr, 2); - _outw( MC_RESET, ioaddr + MMU_CMD ); - - /* Note: It doesn't seem that waiting for the MMU busy is needed here, - * but this is a place where future chipsets _COULD_ break. Be wary - * of issuing another MMU command right after this */ - _outb(0, ioaddr + INT_MASK); -} - - -/*---------------------------------------------------------------------- - * Function: smc_probe( int ioaddr ) - * - * Purpose: - * Tests to see if a given ioaddr points to an SMC9xxx chip. - * Returns a 0 on success - * - * Algorithm: - * (1) see if the high byte of BANK_SELECT is 0x33 - * (2) compare the ioaddr with the base register's address - * (3) see if I recognize the chip ID in the appropriate register - * - * --------------------------------------------------------------------- - */ -static int smc_probe( int ioaddr ) -{ - word bank; - word revision_register; - word base_address_register; - - /* First, see if the high byte is 0x33 */ - bank = inw(ioaddr + BANK_SELECT); - if ((bank & 0xFF00) != 0x3300) { - return -1; - } - /* The above MIGHT indicate a device, but I need to write to further - * test this. */ - _outw(0x0, ioaddr + BANK_SELECT); - bank = inw(ioaddr + BANK_SELECT); - if ((bank & 0xFF00) != 0x3300) { - return -1; - } - - /* well, we've already written once, so hopefully another time won't - * hurt. This time, I need to switch the bank register to bank 1, - * so I can access the base address register */ - SMC_SELECT_BANK(ioaddr, 1); - base_address_register = inw(ioaddr + BASE); - - if (ioaddr != (base_address_register >> 3 & 0x3E0)) { -#ifdef SMC9000_VERBOSE - printf("SMC9000: IOADDR %hX doesn't match configuration (%hX)." - "Probably not a SMC chip\n", - ioaddr, base_address_register >> 3 & 0x3E0); -#endif - /* well, the base address register didn't match. Must not have - * been a SMC chip after all. */ - return -1; - } - - - /* check if the revision register is something that I recognize. - * These might need to be added to later, as future revisions - * could be added. */ - SMC_SELECT_BANK(ioaddr, 3); - revision_register = inw(ioaddr + REVISION); - if (!chip_ids[(revision_register >> 4) & 0xF]) { - /* I don't recognize this chip, so... */ -#ifdef SMC9000_VERBOSE - printf("SMC9000: IO %hX: Unrecognized revision register:" - " %hX, Contact author.\n", ioaddr, revision_register); -#endif - return -1; - } - - /* at this point I'll assume that the chip is an SMC9xxx. - * It might be prudent to check a listing of MAC addresses - * against the hardware address, or do some other tests. */ - return 0; -} - - -/************************************************************************** - * ETH_RESET - Reset adapter - ***************************************************************************/ - -static void smc9000_reset(struct nic *nic) -{ - smc_reset(smc9000_base); -} - -/************************************************************************** - * ETH_TRANSMIT - Transmit a frame - ***************************************************************************/ -static void smc9000_transmit( - struct nic *nic, - const char *d, /* Destination */ - unsigned int t, /* Type */ - unsigned int s, /* size */ - const char *p) /* Packet */ -{ - word length; /* real, length incl. header */ - word numPages; - unsigned long time_out; - byte packet_no; - word status; - int i; - - /* We dont pad here since we can have the hardware doing it for us */ - length = (s + ETH_HLEN + 1)&~1; - - /* convert to MMU pages */ - numPages = length / 256; - - if (numPages > 7 ) { -#ifdef SMC9000_VERBOSE - printf("SMC9000: Far too big packet error. \n"); -#endif - return; - } - - /* dont try more than, say 30 times */ - for (i=0;i<30;i++) { - /* now, try to allocate the memory */ - SMC_SELECT_BANK(smc9000_base, 2); - _outw(MC_ALLOC | numPages, smc9000_base + MMU_CMD); - - status = 0; - /* wait for the memory allocation to finnish */ - for (time_out = currticks() + 5*TICKS_PER_SEC; currticks() < time_out; ) { - status = inb(smc9000_base + INTERRUPT); - if ( status & IM_ALLOC_INT ) { - /* acknowledge the interrupt */ - _outb(IM_ALLOC_INT, smc9000_base + INTERRUPT); - break; - } - } - - if ((status & IM_ALLOC_INT) != 0 ) { - /* We've got the memory */ - break; - } else { - printf("SMC9000: Memory allocation timed out, resetting MMU.\n"); - _outw(MC_RESET, smc9000_base + MMU_CMD); - } - } - - /* If I get here, I _know_ there is a packet slot waiting for me */ - packet_no = inb(smc9000_base + PNR_ARR + 1); - if (packet_no & 0x80) { - /* or isn't there? BAD CHIP! */ - printf("SMC9000: Memory allocation failed. \n"); - return; - } - - /* we have a packet address, so tell the card to use it */ - _outb(packet_no, smc9000_base + PNR_ARR); - - /* point to the beginning of the packet */ - _outw(PTR_AUTOINC, smc9000_base + POINTER); - -#if SMC9000_DEBUG > 2 - printf("Trying to xmit packet of length %hX\n", length ); -#endif - - /* send the packet length ( +6 for status, length and ctl byte ) - * and the status word ( set to zeros ) */ - _outw(0, smc9000_base + DATA_1 ); - - /* send the packet length ( +6 for status words, length, and ctl) */ - _outb((length+6) & 0xFF, smc9000_base + DATA_1); - _outb((length+6) >> 8 , smc9000_base + DATA_1); - - /* Write the contents of the packet */ - - /* The ethernet header first... */ - outsw(smc9000_base + DATA_1, d, ETH_ALEN >> 1); - outsw(smc9000_base + DATA_1, nic->node_addr, ETH_ALEN >> 1); - _outw(htons(t), smc9000_base + DATA_1); - - /* ... the data ... */ - outsw(smc9000_base + DATA_1 , p, s >> 1); - - /* ... and the last byte, if there is one. */ - if ((s & 1) == 0) { - _outw(0, smc9000_base + DATA_1); - } else { - _outb(p[s-1], smc9000_base + DATA_1); - _outb(0x20, smc9000_base + DATA_1); - } - - /* and let the chipset deal with it */ - _outw(MC_ENQUEUE , smc9000_base + MMU_CMD); - - status = 0; time_out = currticks() + 5*TICKS_PER_SEC; - do { - status = inb(smc9000_base + INTERRUPT); - - if ((status & IM_TX_INT ) != 0) { - word tx_status; - - /* ack interrupt */ - _outb(IM_TX_INT, smc9000_base + INTERRUPT); - - packet_no = inw(smc9000_base + FIFO_PORTS); - packet_no &= 0x7F; - - /* select this as the packet to read from */ - _outb( packet_no, smc9000_base + PNR_ARR ); - - /* read the first word from this packet */ - _outw( PTR_AUTOINC | PTR_READ, smc9000_base + POINTER ); - - tx_status = inw( smc9000_base + DATA_1 ); - - if (0 == (tx_status & TS_SUCCESS)) { -#ifdef SMC9000_VERBOSE - printf("SMC9000: TX FAIL STATUS: %hX \n", tx_status); -#endif - /* re-enable transmit */ - SMC_SELECT_BANK(smc9000_base, 0); - _outw(inw(smc9000_base + TCR ) | TCR_ENABLE, smc9000_base + TCR ); - } - - /* kill the packet */ - SMC_SELECT_BANK(smc9000_base, 2); - _outw(MC_FREEPKT, smc9000_base + MMU_CMD); - - return; - } - }while(currticks() < time_out); - - printf("SMC9000: Waring TX timed out, resetting board\n"); - smc_reset(smc9000_base); - return; -} - -/************************************************************************** - * ETH_POLL - Wait for a frame - ***************************************************************************/ -static int smc9000_poll(struct nic *nic) -{ - if(!smc9000_base) - return 0; - - SMC_SELECT_BANK(smc9000_base, 2); - if (inw(smc9000_base + FIFO_PORTS) & FP_RXEMPTY) - return 0; - - /* start reading from the start of the packet */ - _outw(PTR_READ | PTR_RCV | PTR_AUTOINC, smc9000_base + POINTER); - - /* First read the status and check that we're ok */ - if (!(inw(smc9000_base + DATA_1) & RS_ERRORS)) { - /* Next: read the packet length and mask off the top bits */ - nic->packetlen = (inw(smc9000_base + DATA_1) & 0x07ff); - - /* the packet length includes the 3 extra words */ - nic->packetlen -= 6; -#if SMC9000_DEBUG > 2 - printf(" Reading %d words (and %d byte(s))\n", - (nic->packetlen >> 1), nic->packetlen & 1); -#endif - /* read the packet (and the last "extra" word) */ - insw(smc9000_base + DATA_1, nic->packet, (nic->packetlen+2) >> 1); - /* is there an odd last byte ? */ - if (nic->packet[nic->packetlen+1] & 0x20) - nic->packetlen++; - - /* error or good, tell the card to get rid of this packet */ - _outw(MC_RELEASE, smc9000_base + MMU_CMD); - return 1; - } - - printf("SMC9000: RX error\n"); - /* error or good, tell the card to get rid of this packet */ - _outw(MC_RELEASE, smc9000_base + MMU_CMD); - return 0; -} - -static void smc9000_disable(struct nic *nic) -{ - if(!smc9000_base) - return; - - /* no more interrupts for me */ - SMC_SELECT_BANK(smc9000_base, 2); - _outb( 0, smc9000_base + INT_MASK); - - /* and tell the card to stay away from that nasty outside world */ - SMC_SELECT_BANK(smc9000_base, 0); - _outb( RCR_CLEAR, smc9000_base + RCR ); - _outb( TCR_CLEAR, smc9000_base + TCR ); -} - -/************************************************************************** - * ETH_PROBE - Look for an adapter - ***************************************************************************/ - -struct nic *smc9000_probe(struct nic *nic, unsigned short *probe_addrs) -{ - unsigned short revision; - int memory; - int media; - const char * version_string; - const char * if_string; - int i; - - /* - * the SMC9000 can be at any of the following port addresses. To change, - * for a slightly different card, you can add it to the array. Keep in - * mind that the array must end in zero. - */ - static unsigned short portlist[] = { -#ifdef SMC9000_SCAN - SMC9000_SCAN, -#else - 0x200, 0x220, 0x240, 0x260, 0x280, 0x2A0, 0x2C0, 0x2E0, - 0x300, 0x320, 0x340, 0x360, 0x380, 0x3A0, 0x3C0, 0x3E0, -#endif - 0 }; - - printf("\nSMC9000 %s\n", smc9000_version); -#ifdef SMC9000_VERBOSE - printf("Copyright (C) 1998 Daniel Engstr\x94m\n"); - printf("Copyright (C) 1996 Eric Stahlman\n"); -#endif - /* if no addresses supplied, fall back on defaults */ - if (probe_addrs == 0 || probe_addrs[0] == 0) - probe_addrs = portlist; - - /* check every ethernet address */ - for (i = 0; probe_addrs[i]; i++) { - /* check this specific address */ - if (smc_probe(probe_addrs[i]) == 0) - smc9000_base = probe_addrs[i]; - } - - /* couldn't find anything */ - if(0 == smc9000_base) - goto out; - - /* - * Get the MAC address ( bank 1, regs 4 - 9 ) - */ - SMC_SELECT_BANK(smc9000_base, 1); - for ( i = 0; i < 6; i += 2 ) { - word address; - - address = inw(smc9000_base + ADDR0 + i); - nic->node_addr[i+1] = address >> 8; - nic->node_addr[i] = address & 0xFF; - } - - - /* get the memory information */ - SMC_SELECT_BANK(smc9000_base, 0); - memory = ( inw(smc9000_base + MCR) >> 9 ) & 0x7; /* multiplier */ - memory *= 256 * (inw(smc9000_base + MIR) & 0xFF); - - /* - * Now, I want to find out more about the chip. This is sort of - * redundant, but it's cleaner to have it in both, rather than having - * one VERY long probe procedure. - */ - SMC_SELECT_BANK(smc9000_base, 3); - revision = inw(smc9000_base + REVISION); - version_string = chip_ids[(revision >> 4) & 0xF]; - - if (((revision & 0xF0) >> 4 == CHIP_9196) && - ((revision & 0x0F) >= REV_9196)) { - /* This is a 91c96. 'c96 has the same chip id as 'c94 (4) but - * a revision starting at 6 */ - version_string = smc91c96_id; - } - - if ( !version_string ) { - /* I shouldn't get here because this call was done before.... */ - goto out; - } - - /* is it using AUI or 10BaseT ? */ - SMC_SELECT_BANK(smc9000_base, 1); - if (inw(smc9000_base + CONFIG) & CFG_AUI_SELECT) - media = 2; - else - media = 1; - - if_string = interfaces[media - 1]; - - /* now, reset the chip, and put it into a known state */ - smc_reset(smc9000_base); - - printf("%s rev:%d I/O port:%hX Interface:%s RAM:%d bytes \n", - version_string, revision & 0xF, - smc9000_base, if_string, memory ); - /* - * Print the Ethernet address - */ - printf("Ethernet MAC address: %!\n", nic->node_addr); - - SMC_SELECT_BANK(smc9000_base, 0); - - /* see the header file for options in TCR/RCR NORMAL*/ - _outw(TCR_NORMAL, smc9000_base + TCR); - _outw(RCR_NORMAL, smc9000_base + RCR); - - /* Select which interface to use */ - SMC_SELECT_BANK(smc9000_base, 1); - if ( media == 1 ) { - _outw( inw( smc9000_base + CONFIG ) & ~CFG_AUI_SELECT, - smc9000_base + CONFIG ); - } - else if ( media == 2 ) { - _outw( inw( smc9000_base + CONFIG ) | CFG_AUI_SELECT, - smc9000_base + CONFIG ); - } - - nic->reset = smc9000_reset; - nic->poll = smc9000_poll; - nic->transmit = smc9000_transmit; - nic->disable = smc9000_disable; - - - return nic; - -out: -#ifdef SMC9000_VERBOSE - printf("No SMC9000 adapters found\n"); -#endif - smc9000_base = 0; - - return (0); -} - - - diff --git a/netboot/smc9000.h b/netboot/smc9000.h deleted file mode 100644 index ac7f91639..000000000 --- a/netboot/smc9000.h +++ /dev/null @@ -1,205 +0,0 @@ -/*------------------------------------------------------------------------ - * smc9000.h - * - * Copyright (C) 1998 by Daniel Engström - * Copyright (C) 1996 by Erik Stahlman - * - * This software may be used and distributed according to the terms - * of the GNU Public License, incorporated herein by reference. - * - * This file contains register information and access macros for - * the SMC91xxx chipset. - * - * Information contained in this file was obtained from the SMC91C94 - * manual from SMC. To get a copy, if you really want one, you can find - * information under www.smsc.com in the components division. - * ( this thanks to advice from Donald Becker ). - * - * Authors - * Daniel Engström - * Erik Stahlman - * - * History - * 96-01-06 Erik Stahlman moved definitions here from main .c - * file - * 96-01-19 Erik Stahlman polished this up some, and added - * better error handling - * 98-09-25 Daniel Engström adjusted for Etherboot - * 98-09-27 Daniel Engström moved some static strings back to the - * main .c file - * --------------------------------------------------------------------------*/ -#ifndef _SMC9000_H_ -# define _SMC9000_H_ - -/* I want some simple types */ -typedef unsigned char byte; -typedef unsigned short word; -typedef unsigned long int dword; - -/*--------------------------------------------------------------- - * - * A description of the SMC registers is probably in order here, - * although for details, the SMC datasheet is invaluable. - * - * Basically, the chip has 4 banks of registers ( 0 to 3 ), which - * are accessed by writing a number into the BANK_SELECT register - * ( I also use a SMC_SELECT_BANK macro for this ). - * - * The banks are configured so that for most purposes, bank 2 is all - * that is needed for simple run time tasks. - * ----------------------------------------------------------------------*/ - -/* - * Bank Select Register: - * - * yyyy yyyy 0000 00xx - * xx = bank number - * yyyy yyyy = 0x33, for identification purposes. - */ -#define BANK_SELECT 14 - -/* BANK 0 */ - -#define TCR 0 /* transmit control register */ -#define TCR_ENABLE 0x0001 /* if this is 1, we can transmit */ -#define TCR_FDUPLX 0x0800 /* receive packets sent out */ -#define TCR_STP_SQET 0x1000 /* stop transmitting if Signal quality error */ -#define TCR_MON_CNS 0x0400 /* monitors the carrier status */ -#define TCR_PAD_ENABLE 0x0080 /* pads short packets to 64 bytes */ - -#define TCR_CLEAR 0 /* do NOTHING */ -/* the normal settings for the TCR register : */ -#define TCR_NORMAL (TCR_ENABLE | TCR_PAD_ENABLE) - - -#define EPH_STATUS 2 -#define ES_LINK_OK 0x4000 /* is the link integrity ok ? */ - -#define RCR 4 -#define RCR_SOFTRESET 0x8000 /* resets the chip */ -#define RCR_STRIP_CRC 0x200 /* strips CRC */ -#define RCR_ENABLE 0x100 /* IFF this is set, we can receive packets */ -#define RCR_ALMUL 0x4 /* receive all multicast packets */ -#define RCR_PROMISC 0x2 /* enable promiscuous mode */ - -/* the normal settings for the RCR register : */ -#define RCR_NORMAL (RCR_STRIP_CRC | RCR_ENABLE) -#define RCR_CLEAR 0x0 /* set it to a base state */ - -#define COUNTER 6 -#define MIR 8 -#define MCR 10 -/* 12 is reserved */ - -/* BANK 1 */ -#define CONFIG 0 -#define CFG_AUI_SELECT 0x100 -#define BASE 2 -#define ADDR0 4 -#define ADDR1 6 -#define ADDR2 8 -#define GENERAL 10 -#define CONTROL 12 -#define CTL_POWERDOWN 0x2000 -#define CTL_LE_ENABLE 0x80 -#define CTL_CR_ENABLE 0x40 -#define CTL_TE_ENABLE 0x0020 -#define CTL_AUTO_RELEASE 0x0800 -#define CTL_EPROM_ACCESS 0x0003 /* high if Eprom is being read */ - -/* BANK 2 */ -#define MMU_CMD 0 -#define MC_BUSY 1 /* only readable bit in the register */ -#define MC_NOP 0 -#define MC_ALLOC 0x20 /* or with number of 256 byte packets */ -#define MC_RESET 0x40 -#define MC_REMOVE 0x60 /* remove the current rx packet */ -#define MC_RELEASE 0x80 /* remove and release the current rx packet */ -#define MC_FREEPKT 0xA0 /* Release packet in PNR register */ -#define MC_ENQUEUE 0xC0 /* Enqueue the packet for transmit */ - -#define PNR_ARR 2 -#define FIFO_PORTS 4 - -#define FP_RXEMPTY 0x8000 -#define FP_TXEMPTY 0x80 - -#define POINTER 6 -#define PTR_READ 0x2000 -#define PTR_RCV 0x8000 -#define PTR_AUTOINC 0x4000 -#define PTR_AUTO_INC 0x0040 - -#define DATA_1 8 -#define DATA_2 10 -#define INTERRUPT 12 - -#define INT_MASK 13 -#define IM_RCV_INT 0x1 -#define IM_TX_INT 0x2 -#define IM_TX_EMPTY_INT 0x4 -#define IM_ALLOC_INT 0x8 -#define IM_RX_OVRN_INT 0x10 -#define IM_EPH_INT 0x20 -#define IM_ERCV_INT 0x40 /* not on SMC9192 */ - -/* BANK 3 */ -#define MULTICAST1 0 -#define MULTICAST2 2 -#define MULTICAST3 4 -#define MULTICAST4 6 -#define MGMT 8 -#define REVISION 10 /* ( hi: chip id low: rev # ) */ - - -/* this is NOT on SMC9192 */ -#define ERCV 12 - -/* Note that 9194 and 9196 have the smame chip id, - * the 9196 will have revisions starting at 6 */ -#define CHIP_9190 3 -#define CHIP_9194 4 -#define CHIP_9195 5 -#define CHIP_9196 4 -#define CHIP_91100 7 -#define CHIP_91100FD 8 - -#define REV_9196 6 - -/* - * Transmit status bits - */ -#define TS_SUCCESS 0x0001 -#define TS_LOSTCAR 0x0400 -#define TS_LATCOL 0x0200 -#define TS_16COL 0x0010 - -/* - * Receive status bits - */ -#define RS_ALGNERR 0x8000 -#define RS_BADCRC 0x2000 -#define RS_ODDFRAME 0x1000 -#define RS_TOOLONG 0x0800 -#define RS_TOOSHORT 0x0400 -#define RS_MULTICAST 0x0001 -#define RS_ERRORS (RS_ALGNERR | RS_BADCRC | RS_TOOLONG | RS_TOOSHORT) - - -/*------------------------------------------------------------------------- - * I define some macros to make it easier to do somewhat common - * or slightly complicated, repeated tasks. - --------------------------------------------------------------------------*/ - -/* select a register bank, 0 to 3 */ - -#define SMC_SELECT_BANK(x, y) { _outw( y, x + BANK_SELECT ); } - -/* define a small delay for the reset */ -#define SMC_DELAY(x) { inw( x + RCR );\ - inw( x + RCR );\ - inw( x + RCR ); } - - -#endif /* _SMC_9000_H_ */ - diff --git a/netboot/tiara.c b/netboot/tiara.c deleted file mode 100644 index cbf485d01..000000000 --- a/netboot/tiara.c +++ /dev/null @@ -1,255 +0,0 @@ -/************************************************************************** -Etherboot - BOOTP/TFTP Bootstrap Program - -TIARA (Fujitsu Etherstar) NIC driver for Etherboot -Copyright (c) Ken Yap 1998 - -Information gleaned from: - -TIARA.ASM Packet driver by Brian Fisher, Queens U, Kingston, Ontario -Fujitsu MB86960 spec sheet (different chip but same family) -***************************************************************************/ - -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2, or (at - * your option) any later version. - */ - -/* to get some global routines like printf */ -#include "etherboot.h" -/* to get the interface to the body of the program */ -#include "nic.h" -#include "cards.h" - -/* - EtherStar I/O Register offsets -*/ - -/* Offsets of registers */ -#define DLCR_XMIT_STAT 0x00 -#define DLCR_XMIT_MASK 0x01 -#define DLCR_RECV_STAT 0x02 -#define DLCR_RECV_MASK 0x03 -#define DLCR_XMIT_MODE 0x04 -#define DLCR_RECV_MODE 0x05 -#define DLCR_ENABLE 0x06 -#define DLCR_TDR_LOW 0x07 -#define DLCR_NODE_ID 0x08 -#define DLCR_TDR_HIGH 0x0F -#define BMPR_MEM_PORT 0x10 -#define BMPR_PKT_LEN 0x12 -#define BMPR_DMA_ENABLE 0x14 -#define PROM_ID 0x18 - -#define TMST 0x80 -#define TMT_OK 0x80 -#define TMT_16COLL 0x02 -#define BUF_EMPTY 0x40 - -#define CARD_DISABLE 0x80 /* written to DLCR_ENABLE to disable card */ -#define CARD_ENABLE 0 /* written to DLCR_ENABLE to enable card */ - -#define CLEAR_STATUS 0x0F /* used to clear status info */ -/* - 00001111B - !!!!!!!!-------- - !!!!!!!+--------CLEAR BUS WRITE ERROR - !!!!!!+---------CLEAR 16 COLLISION - !!!!!+----------CLEAR COLLISION - !!!!+-----------CLEAR UNDERFLOW - !!!+------------NC - !!+-------------NC - !+--------------NC - +---------------NC -*/ - -#define NO_TX_IRQS 0 /* written to clear transmit IRQs */ - -#define CLR_RCV_STATUS 0xCF /* clears receive status */ - -#define EN_RCV_IRQS 0x80 /* enable receive interrupts */ -/* - 10000000B - !!!!!!!!-------- - !!!!!!!+--------ENABLE OVERFLOW - !!!!!!+---------ENABLE CRC - !!!!!+----------ENABLE ALIGN - !!!!+-----------ENABLE SHORT PKT - !!!+------------DISABLE REMOTE RESET - !!+-------------RESERVED - !+--------------RESERVED - +---------------ENABLE PKT READY -*/ - -#define XMIT_MODE 0x02 -/* - 00000010B - !!!!!!!!---------ENABLE CARRIER DETECT - !!!!!!!+---------DISABLE LOOPBACK -*/ - -#define RECV_MODE 0x02 -/* - 00000010B - !!!!!!!!---------ACCEPT ALL PACKETS - !!!!!!!+---------ACCEPT PHYSICAL, MULTICAST, AND - !!!!!!+----------BROADCAST PACKETS - !!!!!+-----------DISABLE REMOTE RESET - !!!!+------------DISABLE SHORT PACKETS - !!!+-------------USE 6 BYTE ADDRESS - !!+--------------NC - !+---------------NC - +----------------DISABLE CRC TEST MODE -*/ - -/* NIC specific static variables go here */ - -static unsigned short ioaddr; - -/************************************************************************** -RESET - Reset adapter -***************************************************************************/ -static void tiara_reset(struct nic *nic) -{ - int i; - - outb(CARD_DISABLE, ioaddr + DLCR_ENABLE); - outb(CLEAR_STATUS, ioaddr + DLCR_XMIT_STAT); - outb(NO_TX_IRQS, ioaddr + DLCR_XMIT_MASK); - outb(CLR_RCV_STATUS, ioaddr + DLCR_RECV_STAT); - outb(XMIT_MODE, ioaddr + DLCR_XMIT_MODE); - outb(RECV_MODE, ioaddr + DLCR_RECV_MODE); - /* Vacuum recv buffer */ - while ((inb(ioaddr + DLCR_RECV_MODE) & BUF_EMPTY) == 0) - inb(ioaddr + BMPR_MEM_PORT); - /* Set node address */ - for (i = 0; i < ETH_ALEN; ++i) - outb(nic->node_addr[i], ioaddr + DLCR_NODE_ID + i); - outb(CLR_RCV_STATUS, ioaddr + DLCR_RECV_STAT); - outb(CARD_ENABLE, ioaddr + DLCR_ENABLE); -} - -/************************************************************************** -POLL - Wait for a frame -***************************************************************************/ -static int tiara_poll(struct nic *nic) -{ - unsigned int len; - - if (inb(ioaddr + DLCR_RECV_MODE) & BUF_EMPTY) - return (0); - /* Ack packet */ - outw(CLR_RCV_STATUS, ioaddr + DLCR_RECV_STAT); - len = inw(ioaddr + BMPR_MEM_PORT); /* throw away status */ - len = inw(ioaddr + BMPR_MEM_PORT); - /* Drop overlength packets */ - if (len > ETH_FRAME_LEN) - return (0); /* should we drain the buffer? */ - insw(ioaddr + BMPR_MEM_PORT, nic->packet, len / 2); - /* If it's our own, drop it */ - if (memcmp(nic->packet + ETH_ALEN, nic->node_addr, ETH_ALEN) == 0) - return (0); - nic->packetlen = len; - return (1); -} - -/************************************************************************** -TRANSMIT - Transmit a frame -***************************************************************************/ -static void tiara_transmit( -struct nic *nic, -const char *d, /* Destination */ -unsigned int t, /* Type */ -unsigned int s, /* size */ -const char *p) /* Packet */ -{ - unsigned int len; - unsigned long time; - - len = s + ETH_HLEN; - if (len < ETH_ZLEN) - len = ETH_ZLEN; - t = htons(t); - outsw(ioaddr + BMPR_MEM_PORT, d, ETH_ALEN / 2); - outsw(ioaddr + BMPR_MEM_PORT, nic->node_addr, ETH_ALEN / 2); - outw(t, ioaddr + BMPR_MEM_PORT); - outsw(ioaddr + BMPR_MEM_PORT, p, s / 2); - if (s & 1) /* last byte */ - outb(p[s-1], ioaddr + BMPR_MEM_PORT); - while (s++ < ETH_ZLEN - ETH_HLEN) /* pad */ - outb(0, ioaddr + BMPR_MEM_PORT); - outw(len | (TMST << 8), ioaddr + BMPR_PKT_LEN); - /* wait for transmit complete */ - time = currticks() + TICKS_PER_SEC; /* wait one second */ - while (currticks() < time && (inb(ioaddr) & (TMT_OK|TMT_16COLL)) == 0) - ; - if ((inb(ioaddr) & (TMT_OK|TMT_16COLL)) == 0) - printf("Tiara timed out on transmit\n"); - /* Do we need to ack the transmit? */ -} - -/************************************************************************** -DISABLE - Turn off ethernet interface -***************************************************************************/ -static void tiara_disable(struct nic *nic) -{ - /* Apparently only a power down can do this properly */ - outb(CARD_DISABLE, ioaddr + DLCR_ENABLE); -} - -static int tiara_probe1(struct nic *nic) -{ - /* Hope all the Tiara cards have this vendor prefix */ - static char vendor_prefix[] = { 0x08, 0x00, 0x1A }; - static char all_ones[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; - int i; - - for (i = 0; i < ETH_ALEN; ++i) - nic->node_addr[i] = inb(ioaddr + PROM_ID + i); - if (memcmp(nic->node_addr, vendor_prefix, sizeof(vendor_prefix)) != 0) - return (0); - if (memcmp(nic->node_addr, all_ones, sizeof(all_ones)) == 0) - return (0); - printf("\nTiara ioaddr %#hX, addr %!\n", ioaddr, nic->node_addr); - return (1); -} - -/************************************************************************** -PROBE - Look for an adapter, this routine's visible to the outside -***************************************************************************/ -struct nic *tiara_probe(struct nic *nic, unsigned short *probe_addrs) -{ - /* missing entries are addresses usually already used */ - static unsigned short io_addrs[] = { - 0x100, 0x120, 0x140, 0x160, - 0x180, 0x1A0, 0x1C0, 0x1E0, - 0x200, 0x220, 0x240, /*Par*/ - 0x280, 0x2A0, 0x2C0, /*Ser*/ - 0x300, 0x320, 0x340, /*Par*/ - 0x380, /*Vid,Par*/ 0x3C0, /*Ser*/ - 0x0 - }; - unsigned short *p; - - /* if probe_addrs is 0, then routine can use a hardwired default */ - if (probe_addrs == 0) - probe_addrs = io_addrs; - for (p = probe_addrs; (ioaddr = *p) != 0; ++p) - if (tiara_probe1(nic)) - break; - /* if board found */ - if (ioaddr != 0) - { - tiara_reset(nic); - /* point to NIC specific routines */ - nic->reset = tiara_reset; - nic->poll = tiara_poll; - nic->transmit = tiara_transmit; - nic->disable = tiara_disable; - return nic; - } - else - return (0); -} diff --git a/netboot/timer.c b/netboot/timer.c deleted file mode 100644 index 2487d63c9..000000000 --- a/netboot/timer.c +++ /dev/null @@ -1,127 +0,0 @@ -/* A couple of routines to implement a low-overhead timer for drivers */ - - /* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2, or (at - * your option) any later version. - */ - -#include "etherboot.h" -#include "timer.h" - -void load_timer2(unsigned int ticks) -{ - /* Set up the timer gate, turn off the speaker */ - outb((inb(PPC_PORTB) & ~PPCB_SPKR) | PPCB_T2GATE, PPC_PORTB); - outb(TIMER2_SEL|WORD_ACCESS|MODE0|BINARY_COUNT, TIMER_MODE_PORT); - outb(ticks & 0xFF, TIMER2_PORT); - outb(ticks >> 8, TIMER2_PORT); -} - -#if defined(CONFIG_TSC_CURRTICKS) -#define rdtsc(low,high) \ - __asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high)) - -#define rdtscll(val) \ - __asm__ __volatile__ ("rdtsc" : "=A" (val)) - - -#define HZ TICKS_PER_SEC -#define CLOCK_TICK_RATE 1193180U /* Underlying HZ */ -/* LATCH is used in the interval timer and ftape setup. */ -#define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ) /* For divider */ - - -/* ------ Calibrate the TSC ------- - * Return 2^32 * (1 / (TSC clocks per usec)) for do_fast_gettimeoffset(). - * Too much 64-bit arithmetic here to do this cleanly in C, and for - * accuracy's sake we want to keep the overhead on the CTC speaker (channel 2) - * output busy loop as low as possible. We avoid reading the CTC registers - * directly because of the awkward 8-bit access mechanism of the 82C54 - * device. - */ - -#define CALIBRATE_LATCH (5 * LATCH) - -static unsigned long long calibrate_tsc(void) -{ - /* Set the Gate high, disable speaker */ - outb((inb(0x61) & ~0x02) | 0x01, 0x61); - - /* - * Now let's take care of CTC channel 2 - * - * Set the Gate high, program CTC channel 2 for mode 0, - * (interrupt on terminal count mode), binary count, - * load 5 * LATCH count, (LSB and MSB) to begin countdown. - */ - outb(0xb0, 0x43); /* binary, mode 0, LSB/MSB, Ch 2 */ - outb(CALIBRATE_LATCH & 0xff, 0x42); /* LSB of count */ - outb(CALIBRATE_LATCH >> 8, 0x42); /* MSB of count */ - - { - unsigned long startlow, starthigh; - unsigned long endlow, endhigh; - unsigned long count; - - rdtsc(startlow,starthigh); - count = 0; - do { - count++; - } while ((inb(0x61) & 0x20) == 0); - rdtsc(endlow,endhigh); - - /* Error: ECTCNEVERSET */ - if (count <= 1) - goto bad_ctc; - - /* 64-bit subtract - gcc just messes up with long longs */ - __asm__("subl %2,%0\n\t" - "sbbl %3,%1" - :"=a" (endlow), "=d" (endhigh) - :"g" (startlow), "g" (starthigh), - "0" (endlow), "1" (endhigh)); - - /* Error: ECPUTOOFAST */ - if (endhigh) - goto bad_ctc; - - endlow /= 5; - return endlow; - } - - /* - * The CTC wasn't reliable: we got a hit on the very first read, - * or the CPU was so fast/slow that the quotient wouldn't fit in - * 32 bits.. - */ -bad_ctc: - printf("bad_ctc\n"); - return 0; -} - - -unsigned long currticks(void) -{ - static unsigned long clocks_per_tick; - unsigned long clocks_high, clocks_low; - unsigned long currticks; - if (!clocks_per_tick) { - clocks_per_tick = calibrate_tsc(); - printf("clocks_per_tick = %d\n", clocks_per_tick); - } - - /* Read the Time Stamp Counter */ - rdtsc(clocks_low, clocks_high); - - /* currticks = clocks / clocks_per_tick; */ - __asm__("divl %1" - :"=a" (currticks) - :"r" (clocks_per_tick), "0" (clocks_low), "d" (clocks_high)); - - - return currticks; -} - -#endif /* RTC_CURRTICKS */ diff --git a/netboot/timer.h b/netboot/timer.h deleted file mode 100644 index b44962a79..000000000 --- a/netboot/timer.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Defines for routines to implement a low-overhead timer for drivers */ - - /* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2, or (at - * your option) any later version. - */ - -#ifndef TIMER_H -#define TIMER_H - -/* Ports for the 8254 timer chip */ -#define TIMER2_PORT 0x42 -#define TIMER_MODE_PORT 0x43 - -/* Meaning of the mode bits */ -#define TIMER0_SEL 0x00 -#define TIMER1_SEL 0x40 -#define TIMER2_SEL 0x80 -#define READBACK_SEL 0xC0 - -#define LATCH_COUNT 0x00 -#define LOBYTE_ACCESS 0x10 -#define HIBYTE_ACCESS 0x20 -#define WORD_ACCESS 0x30 - -#define MODE0 0x00 -#define MODE1 0x02 -#define MODE2 0x04 -#define MODE3 0x06 -#define MODE4 0x08 -#define MODE5 0x0A - -#define BINARY_COUNT 0x00 -#define BCD_COUNT 0x01 - -/* Timers tick over at this rate */ -#define TICKS_PER_MS 1193 - -/* Parallel Peripheral Controller Port B */ -#define PPC_PORTB 0x61 - -/* Meaning of the port bits */ -#define PPCB_T2OUT 0x20 /* Bit 5 */ -#define PPCB_SPKR 0x02 /* Bit 1 */ -#define PPCB_T2GATE 0x01 /* Bit 0 */ - -/* Ticks must be between 0 and 65535 (0 == 65536) - because it is a 16 bit counter */ -extern void load_timer2(unsigned int ticks); -extern inline int timer2_running(void) -{ - return ((inb(PPC_PORTB) & PPCB_T2OUT) == 0); -} - -extern inline void waiton_timer2(unsigned int ticks) -{ - load_timer2(ticks); - while ((inb(PPC_PORTB) & PPCB_T2OUT) == 0) - ; -} - -#endif /* TIMER_H */ diff --git a/netboot/tlan.c b/netboot/tlan.c deleted file mode 100644 index 03b69f7f7..000000000 --- a/netboot/tlan.c +++ /dev/null @@ -1,3746 +0,0 @@ -/************************************************************************** -Etherboot - BOOTP/TFTP Bootstrap Program -TLAN driver for Etherboot -***************************************************************************/ - -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2, or (at - * your option) any later version. - */ - -/* to get some global routines like printf */ -#include "etherboot.h" -/* to get the interface to the body of the program */ -#include "nic.h" -/* to get the PCI support functions, if this is a PCI NIC */ -#include "pci.h" -/* to get our own prototype */ -#include "cards.h" - - /***************************************************************** - * TLan Definitions - * - ****************************************************************/ - -#define TLAN_MIN_FRAME_SIZE 64 -#define TLAN_MAX_FRAME_SIZE 1600 - -#define TLAN_NUM_RX_LISTS 32 -#define TLAN_NUM_TX_LISTS 64 - -#define TLAN_IGNORE 0 -#define TLAN_RECORD 1 - -#define TLAN_DBG(lvl, format, args...) if (debug&lvl) printf("TLAN: " format, ##args ); -#define TLAN_DEBUG_GNRL 0x0001 -#define TLAN_DEBUG_TX 0x0002 -#define TLAN_DEBUG_RX 0x0004 -#define TLAN_DEBUG_LIST 0x0008 -#define TLAN_DEBUG_PROBE 0x0010 - -#define MAX_TLAN_BOARDS 8 /* Max number of boards installed at a time */ - - /***************************************************************** - * Device Identification Definitions - * - ****************************************************************/ - -#define PCI_DEVICE_ID_NETELLIGENT_10_T2 0xB012 -#define PCI_DEVICE_ID_NETELLIGENT_10_100_WS_5100 0xB030 -#ifndef PCI_DEVICE_ID_OLICOM_OC2183 -#define PCI_DEVICE_ID_OLICOM_OC2183 0x0013 -#endif -#ifndef PCI_DEVICE_ID_OLICOM_OC2325 -#define PCI_DEVICE_ID_OLICOM_OC2325 0x0012 -#endif -#ifndef PCI_DEVICE_ID_OLICOM_OC2326 -#define PCI_DEVICE_ID_OLICOM_OC2326 0x0014 -#endif -#define TLAN_ADAPTER_NONE 0x00000000 -#define TLAN_ADAPTER_UNMANAGED_PHY 0x00000001 -#define TLAN_ADAPTER_BIT_RATE_PHY 0x00000002 -#define TLAN_ADAPTER_USE_INTERN_10 0x00000004 -#define TLAN_ADAPTER_ACTIVITY_LED 0x00000008 -#define TLAN_SPEED_DEFAULT 0 -#define TLAN_SPEED_10 10 -#define TLAN_SPEED_100 100 -#define TLAN_DUPLEX_DEFAULT 0 -#define TLAN_DUPLEX_HALF 1 -#define TLAN_DUPLEX_FULL 2 -#define TLAN_BUFFERS_PER_LIST 10 -#define TLAN_LAST_BUFFER 0x80000000 -#define TLAN_CSTAT_UNUSED 0x8000 -#define TLAN_CSTAT_FRM_CMP 0x4000 -#define TLAN_CSTAT_READY 0x3000 -#define TLAN_CSTAT_EOC 0x0800 -#define TLAN_CSTAT_RX_ERROR 0x0400 -#define TLAN_CSTAT_PASS_CRC 0x0200 -#define TLAN_CSTAT_DP_PR 0x0100 - - /***************************************************************** - * PHY definitions - * - ****************************************************************/ - -#define TLAN_PHY_MAX_ADDR 0x1F -#define TLAN_PHY_NONE 0x20 - - /***************************************************************** - * TLan Driver Timer Definitions - * - ****************************************************************/ - -#define TLAN_TIMER_LINK_BEAT 1 -#define TLAN_TIMER_ACTIVITY 2 -#define TLAN_TIMER_PHY_PDOWN 3 -#define TLAN_TIMER_PHY_PUP 4 -#define TLAN_TIMER_PHY_RESET 5 -#define TLAN_TIMER_PHY_START_LINK 6 -#define TLAN_TIMER_PHY_FINISH_AN 7 -#define TLAN_TIMER_FINISH_RESET 8 -#define TLAN_TIMER_ACT_DELAY (HZ/10) - - /***************************************************************** - * TLan Driver Eeprom Definitions - * - ****************************************************************/ - -#define TLAN_EEPROM_ACK 0 -#define TLAN_EEPROM_STOP 1 - - /***************************************************************** - * Host Register Offsets and Contents - * - ****************************************************************/ - -#define TLAN_HOST_CMD 0x00 -#define TLAN_HC_GO 0x80000000 -#define TLAN_HC_STOP 0x40000000 -#define TLAN_HC_ACK 0x20000000 -#define TLAN_HC_CS_MASK 0x1FE00000 -#define TLAN_HC_EOC 0x00100000 -#define TLAN_HC_RT 0x00080000 -#define TLAN_HC_NES 0x00040000 -#define TLAN_HC_AD_RST 0x00008000 -#define TLAN_HC_LD_TMR 0x00004000 -#define TLAN_HC_LD_THR 0x00002000 -#define TLAN_HC_REQ_INT 0x00001000 -#define TLAN_HC_INT_OFF 0x00000800 -#define TLAN_HC_INT_ON 0x00000400 -#define TLAN_HC_AC_MASK 0x000000FF -#define TLAN_CH_PARM 0x04 -#define TLAN_DIO_ADR 0x08 -#define TLAN_DA_ADR_INC 0x8000 -#define TLAN_DA_RAM_ADR 0x4000 -#define TLAN_HOST_INT 0x0A -#define TLAN_HI_IV_MASK 0x1FE0 -#define TLAN_HI_IT_MASK 0x001C -#define TLAN_DIO_DATA 0x0C - -/* ThunderLAN Internal Register DIO Offsets */ - -#define TLAN_NET_CMD 0x00 -#define TLAN_NET_CMD_NRESET 0x80 -#define TLAN_NET_CMD_NWRAP 0x40 -#define TLAN_NET_CMD_CSF 0x20 -#define TLAN_NET_CMD_CAF 0x10 -#define TLAN_NET_CMD_NOBRX 0x08 -#define TLAN_NET_CMD_DUPLEX 0x04 -#define TLAN_NET_CMD_TRFRAM 0x02 -#define TLAN_NET_CMD_TXPACE 0x01 -#define TLAN_NET_SIO 0x01 -#define TLAN_NET_SIO_MINTEN 0x80 -#define TLAN_NET_SIO_ECLOK 0x40 -#define TLAN_NET_SIO_ETXEN 0x20 -#define TLAN_NET_SIO_EDATA 0x10 -#define TLAN_NET_SIO_NMRST 0x08 -#define TLAN_NET_SIO_MCLK 0x04 -#define TLAN_NET_SIO_MTXEN 0x02 -#define TLAN_NET_SIO_MDATA 0x01 -#define TLAN_NET_STS 0x02 -#define TLAN_NET_STS_MIRQ 0x80 -#define TLAN_NET_STS_HBEAT 0x40 -#define TLAN_NET_STS_TXSTOP 0x20 -#define TLAN_NET_STS_RXSTOP 0x10 -#define TLAN_NET_STS_RSRVD 0x0F -#define TLAN_NET_MASK 0x03 -#define TLAN_NET_MASK_MASK7 0x80 -#define TLAN_NET_MASK_MASK6 0x40 -#define TLAN_NET_MASK_MASK5 0x20 -#define TLAN_NET_MASK_MASK4 0x10 -#define TLAN_NET_MASK_RSRVD 0x0F -#define TLAN_NET_CONFIG 0x04 -#define TLAN_NET_CFG_RCLK 0x8000 -#define TLAN_NET_CFG_TCLK 0x4000 -#define TLAN_NET_CFG_BIT 0x2000 -#define TLAN_NET_CFG_RXCRC 0x1000 -#define TLAN_NET_CFG_PEF 0x0800 -#define TLAN_NET_CFG_1FRAG 0x0400 -#define TLAN_NET_CFG_1CHAN 0x0200 -#define TLAN_NET_CFG_MTEST 0x0100 -#define TLAN_NET_CFG_PHY_EN 0x0080 -#define TLAN_NET_CFG_MSMASK 0x007F -#define TLAN_MAN_TEST 0x06 -#define TLAN_DEF_VENDOR_ID 0x08 -#define TLAN_DEF_DEVICE_ID 0x0A -#define TLAN_DEF_REVISION 0x0C -#define TLAN_DEF_SUBCLASS 0x0D -#define TLAN_DEF_MIN_LAT 0x0E -#define TLAN_DEF_MAX_LAT 0x0F -#define TLAN_AREG_0 0x10 -#define TLAN_AREG_1 0x16 -#define TLAN_AREG_2 0x1C -#define TLAN_AREG_3 0x22 -#define TLAN_HASH_1 0x28 -#define TLAN_HASH_2 0x2C -#define TLAN_GOOD_TX_FRMS 0x30 -#define TLAN_TX_UNDERUNS 0x33 -#define TLAN_GOOD_RX_FRMS 0x34 -#define TLAN_RX_OVERRUNS 0x37 -#define TLAN_DEFERRED_TX 0x38 -#define TLAN_CRC_ERRORS 0x3A -#define TLAN_CODE_ERRORS 0x3B -#define TLAN_MULTICOL_FRMS 0x3C -#define TLAN_SINGLECOL_FRMS 0x3E -#define TLAN_EXCESSCOL_FRMS 0x40 -#define TLAN_LATE_COLS 0x41 -#define TLAN_CARRIER_LOSS 0x42 -#define TLAN_ACOMMIT 0x43 -#define TLAN_LED_REG 0x44 -#define TLAN_LED_ACT 0x10 -#define TLAN_LED_LINK 0x01 -#define TLAN_BSIZE_REG 0x45 -#define TLAN_MAX_RX 0x46 -#define TLAN_INT_DIS 0x48 -#define TLAN_ID_TX_EOC 0x04 -#define TLAN_ID_RX_EOF 0x02 -#define TLAN_ID_RX_EOC 0x01 - -/* ThunderLAN Interrupt Codes */ - -#define TLAN_INT_NUMBER_OF_INTS 8 - -#define TLAN_INT_NONE 0x0000 -#define TLAN_INT_TX_EOF 0x0001 -#define TLAN_INT_STAT_OVERFLOW 0x0002 -#define TLAN_INT_RX_EOF 0x0003 -#define TLAN_INT_DUMMY 0x0004 -#define TLAN_INT_TX_EOC 0x0005 -#define TLAN_INT_STATUS_CHECK 0x0006 -#define TLAN_INT_RX_EOC 0x0007 -#define TLAN_TLPHY_ID 0x10 -#define TLAN_TLPHY_CTL 0x11 -#define TLAN_TC_IGLINK 0x8000 -#define TLAN_TC_SWAPOL 0x4000 -#define TLAN_TC_AUISEL 0x2000 -#define TLAN_TC_SQEEN 0x1000 -#define TLAN_TC_MTEST 0x0800 -#define TLAN_TC_RESERVED 0x07F8 -#define TLAN_TC_NFEW 0x0004 -#define TLAN_TC_INTEN 0x0002 -#define TLAN_TC_TINT 0x0001 -#define TLAN_TLPHY_STS 0x12 -#define TLAN_TS_MINT 0x8000 -#define TLAN_TS_PHOK 0x4000 -#define TLAN_TS_POLOK 0x2000 -#define TLAN_TS_TPENERGY 0x1000 -#define TLAN_TS_RESERVED 0x0FFF -#define TLAN_TLPHY_PAR 0x19 -#define TLAN_PHY_CIM_STAT 0x0020 -#define TLAN_PHY_SPEED_100 0x0040 -#define TLAN_PHY_DUPLEX_FULL 0x0080 -#define TLAN_PHY_AN_EN_STAT 0x0400 - - -/* ThunderLAN MII Registers */ - -/* Generic MII/PHY Registers */ - -#define MII_GEN_CTL 0x00 -#define MII_GC_RESET 0x8000 -#define MII_GC_LOOPBK 0x4000 -#define MII_GC_SPEEDSEL 0x2000 -#define MII_GC_AUTOENB 0x1000 -#define MII_GC_PDOWN 0x0800 -#define MII_GC_ISOLATE 0x0400 -#define MII_GC_AUTORSRT 0x0200 -#define MII_GC_DUPLEX 0x0100 -#define MII_GC_COLTEST 0x0080 -#define MII_GC_RESERVED 0x007F -#define MII_GEN_STS 0x01 -#define MII_GS_100BT4 0x8000 -#define MII_GS_100BTXFD 0x4000 -#define MII_GS_100BTXHD 0x2000 -#define MII_GS_10BTFD 0x1000 -#define MII_GS_10BTHD 0x0800 -#define MII_GS_RESERVED 0x07C0 -#define MII_GS_AUTOCMPLT 0x0020 -#define MII_GS_RFLT 0x0010 -#define MII_GS_AUTONEG 0x0008 -#define MII_GS_LINK 0x0004 -#define MII_GS_JABBER 0x0002 -#define MII_GS_EXTCAP 0x0001 -#define MII_GEN_ID_HI 0x02 -#define MII_GEN_ID_LO 0x03 -#define MII_GIL_OUI 0xFC00 -#define MII_GIL_MODEL 0x03F0 -#define MII_GIL_REVISION 0x000F -#define MII_AN_ADV 0x04 -#define MII_AN_LPA 0x05 -#define MII_AN_EXP 0x06 - -/* ThunderLAN Specific MII/PHY Registers */ - -#define TLAN_TC_IGLINK 0x8000 -#define TLAN_TC_SWAPOL 0x4000 -#define TLAN_TC_AUISEL 0x2000 -#define TLAN_TC_SQEEN 0x1000 -#define TLAN_TC_MTEST 0x0800 -#define TLAN_TC_RESERVED 0x07F8 -#define TLAN_TC_NFEW 0x0004 -#define TLAN_TC_INTEN 0x0002 -#define TLAN_TC_TINT 0x0001 -#define TLAN_TS_MINT 0x8000 -#define TLAN_TS_PHOK 0x4000 -#define TLAN_TS_POLOK 0x2000 -#define TLAN_TS_TPENERGY 0x1000 -#define TLAN_TS_RESERVED 0x0FFF -#define TLAN_PHY_CIM_STAT 0x0020 -#define TLAN_PHY_SPEED_100 0x0040 -#define TLAN_PHY_DUPLEX_FULL 0x0080 -#define TLAN_PHY_AN_EN_STAT 0x0400 - -/* National Sem. & Level1 PHY id's */ -#define NAT_SEM_ID1 0x2000 -#define NAT_SEM_ID2 0x5C01 -#define LEVEL1_ID1 0x7810 -#define LEVEL1_ID2 0x0000 - -#define TLan_ClearBit( bit, port ) outb_p(inb_p(port) & ~bit, port) -#define TLan_GetBit( bit, port ) ((int) (inb_p(port) & bit)) -#define TLan_SetBit( bit, port ) outb_p(inb_p(port) | bit, port) - -typedef unsigned int u32; -typedef unsigned short u16; -typedef unsigned char u8; - -/* Routines to access internal registers. */ - -inline u8 TLan_DioRead8(u16 base_addr, u16 internal_addr) -{ - outw(internal_addr, base_addr + TLAN_DIO_ADR); - return (inb((base_addr + TLAN_DIO_DATA) + (internal_addr & 0x3))); - -} /* TLan_DioRead8 */ - -inline u16 TLan_DioRead16(u16 base_addr, u16 internal_addr) -{ - outw(internal_addr, base_addr + TLAN_DIO_ADR); - return (inw((base_addr + TLAN_DIO_DATA) + (internal_addr & 0x2))); - -} /* TLan_DioRead16 */ - -inline u32 TLan_DioRead32(u16 base_addr, u16 internal_addr) -{ - outw(internal_addr, base_addr + TLAN_DIO_ADR); - return (inl(base_addr + TLAN_DIO_DATA)); - -} /* TLan_DioRead32 */ - -inline void TLan_DioWrite8(u16 base_addr, u16 internal_addr, u8 data) -{ - outw(internal_addr, base_addr + TLAN_DIO_ADR); - outb(data, base_addr + TLAN_DIO_DATA + (internal_addr & 0x3)); - -} - -inline void TLan_DioWrite16(u16 base_addr, u16 internal_addr, u16 data) -{ - outw(internal_addr, base_addr + TLAN_DIO_ADR); - outw(data, base_addr + TLAN_DIO_DATA + (internal_addr & 0x2)); - -} - -inline void TLan_DioWrite32(u16 base_addr, u16 internal_addr, u32 data) -{ - outw(internal_addr, base_addr + TLAN_DIO_ADR); - outl(data, base_addr + TLAN_DIO_DATA + (internal_addr & 0x2)); - -} - -/* NIC specific static variables go here */ - -/***************************************************************************** -****************************************************************************** - - ThunderLAN Driver Eeprom routines - - The Compaq Netelligent 10 and 10/100 cards use a Microchip 24C02A - EEPROM. These functions are based on information in Microchip's - data sheet. I don't know how well this functions will work with - other EEPROMs. - -****************************************************************************** -*****************************************************************************/ - - /*************************************************************** - * TLan_EeSendStart - * - * Returns: - * Nothing - * Parms: - * io_base The IO port base address for the - * TLAN device with the EEPROM to - * use. - * - * This function sends a start cycle to an EEPROM attached - * to a TLAN chip. - * - **************************************************************/ - -static void TLan_EeSendStart( u16 io_base ) -{ - u16 sio; - - outw( TLAN_NET_SIO, io_base + TLAN_DIO_ADR ); - sio = io_base + TLAN_DIO_DATA + TLAN_NET_SIO; - - TLan_SetBit( TLAN_NET_SIO_ECLOK, sio ); - TLan_SetBit( TLAN_NET_SIO_EDATA, sio ); - TLan_SetBit( TLAN_NET_SIO_ETXEN, sio ); - TLan_ClearBit( TLAN_NET_SIO_EDATA, sio ); - TLan_ClearBit( TLAN_NET_SIO_ECLOK, sio ); - -} /* TLan_EeSendStart */ - - /*************************************************************** - * TLan_EeSendByte - * - * Returns: - * If the correct ack was received, 0, otherwise 1 - * Parms: io_base The IO port base address for the - * TLAN device with the EEPROM to - * use. - * data The 8 bits of information to - * send to the EEPROM. - * stop If TLAN_EEPROM_STOP is passed, a - * stop cycle is sent after the - * byte is sent after the ack is - * read. - * - * This function sends a byte on the serial EEPROM line, - * driving the clock to send each bit. The function then - * reverses transmission direction and reads an acknowledge - * bit. - * - **************************************************************/ - -static int TLan_EeSendByte( u16 io_base, u8 data, int stop ) -{ - int err; - u8 place; - u16 sio; - - outw( TLAN_NET_SIO, io_base + TLAN_DIO_ADR ); - sio = io_base + TLAN_DIO_DATA + TLAN_NET_SIO; - - /* Assume clock is low, tx is enabled; */ - for ( place = 0x80; place != 0; place >>= 1 ) { - if ( place & data ) - TLan_SetBit( TLAN_NET_SIO_EDATA, sio ); - else - TLan_ClearBit( TLAN_NET_SIO_EDATA, sio ); - TLan_SetBit( TLAN_NET_SIO_ECLOK, sio ); - TLan_ClearBit( TLAN_NET_SIO_ECLOK, sio ); - } - TLan_ClearBit( TLAN_NET_SIO_ETXEN, sio ); - TLan_SetBit( TLAN_NET_SIO_ECLOK, sio ); - err = TLan_GetBit( TLAN_NET_SIO_EDATA, sio ); - TLan_ClearBit( TLAN_NET_SIO_ECLOK, sio ); - TLan_SetBit( TLAN_NET_SIO_ETXEN, sio ); - - if ( ( ! err ) && stop ) { - TLan_ClearBit( TLAN_NET_SIO_EDATA, sio ); /* STOP, raise data while clock is high */ - TLan_SetBit( TLAN_NET_SIO_ECLOK, sio ); - TLan_SetBit( TLAN_NET_SIO_EDATA, sio ); - } - - return ( err ); - -} /* TLan_EeSendByte */ - - /*************************************************************** - * TLan_EeReceiveByte - * - * Returns: - * Nothing - * Parms: - * io_base The IO port base address for the - * TLAN device with the EEPROM to - * use. - * data An address to a char to hold the - * data sent from the EEPROM. - * stop If TLAN_EEPROM_STOP is passed, a - * stop cycle is sent after the - * byte is received, and no ack is - * sent. - * - * This function receives 8 bits of data from the EEPROM - * over the serial link. It then sends and ack bit, or no - * ack and a stop bit. This function is used to retrieve - * data after the address of a byte in the EEPROM has been - * sent. - * - **************************************************************/ - -static void TLan_EeReceiveByte( u16 io_base, u8 *data, int stop ) -{ - u8 place; - u16 sio; - - outw( TLAN_NET_SIO, io_base + TLAN_DIO_ADR ); - sio = io_base + TLAN_DIO_DATA + TLAN_NET_SIO; - *data = 0; - - /* Assume clock is low, tx is enabled; */ - TLan_ClearBit( TLAN_NET_SIO_ETXEN, sio ); - for ( place = 0x80; place; place >>= 1 ) { - TLan_SetBit( TLAN_NET_SIO_ECLOK, sio ); - if ( TLan_GetBit( TLAN_NET_SIO_EDATA, sio ) ) - *data |= place; - TLan_ClearBit( TLAN_NET_SIO_ECLOK, sio ); - } - - TLan_SetBit( TLAN_NET_SIO_ETXEN, sio ); - if ( ! stop ) { - TLan_ClearBit( TLAN_NET_SIO_EDATA, sio ); /* Ack = 0 */ - TLan_SetBit( TLAN_NET_SIO_ECLOK, sio ); - TLan_ClearBit( TLAN_NET_SIO_ECLOK, sio ); - } else { - TLan_SetBit( TLAN_NET_SIO_EDATA, sio ); /* No ack = 1 (?) */ - TLan_SetBit( TLAN_NET_SIO_ECLOK, sio ); - TLan_ClearBit( TLAN_NET_SIO_ECLOK, sio ); - TLan_ClearBit( TLAN_NET_SIO_EDATA, sio ); /* STOP, raise data while clock is high */ - TLan_SetBit( TLAN_NET_SIO_ECLOK, sio ); - TLan_SetBit( TLAN_NET_SIO_EDATA, sio ); - } - -} /* TLan_EeReceiveByte */ - - /*************************************************************** - * TLan_EeReadByte - * - * Returns: - * No error = 0, else, the stage at which the error - * occurred. - * Parms: - * io_base The IO port base address for the - * TLAN device with the EEPROM to - * use. - * ee_addr The address of the byte in the - * EEPROM whose contents are to be - * retrieved. - * data An address to a char to hold the - * data obtained from the EEPROM. - * - * This function reads a byte of information from an byte - * cell in the EEPROM. - * - **************************************************************/ - -static int TLan_EeReadByte( u16 io_base, u8 ee_addr, u8 *data ) -{ - int err; - unsigned long flags = 0; - int ret=0; - - TLan_EeSendStart( io_base ); - err = TLan_EeSendByte( io_base, 0xA0, TLAN_EEPROM_ACK ); - if (err) - { - ret=1; - goto fail; - } - err = TLan_EeSendByte( io_base, ee_addr, TLAN_EEPROM_ACK ); - if (err) - { - ret=2; - goto fail; - } - TLan_EeSendStart( io_base ); - err = TLan_EeSendByte( io_base, 0xA1, TLAN_EEPROM_ACK ); - if (err) - { - ret=3; - goto fail; - } - TLan_EeReceiveByte( io_base, data, TLAN_EEPROM_STOP ); -fail: - - return ret; - -} /* TLan_EeReadByte */ - -#if 0 -/* Not yet converted from Linux driver */ -/***************************************************************************** -****************************************************************************** - - ThunderLAN Driver PHY Layer Routines - -****************************************************************************** -*****************************************************************************/ - - /********************************************************************* - * TLan_PhyPrint - * - * Returns: - * Nothing - * Parms: - * dev A pointer to the device structure of the - * TLAN device having the PHYs to be detailed. - * - * This function prints the registers a PHY (aka tranceiver). - * - ********************************************************************/ - -void TLan_PhyPrint( struct net_device *dev ) -{ - TLanPrivateInfo *priv = dev->priv; - u16 i, data0, data1, data2, data3, phy; - - phy = priv->phy[priv->phyNum]; - - if ( priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY ) { - printk( "TLAN: Device %s, Unmanaged PHY.\n", dev->name ); - } else if ( phy <= TLAN_PHY_MAX_ADDR ) { - printk( "TLAN: Device %s, PHY 0x%02x.\n", dev->name, phy ); - printk( "TLAN: Off. +0 +1 +2 +3 \n" ); - for ( i = 0; i < 0x20; i+= 4 ) { - printk( "TLAN: 0x%02x", i ); - TLan_MiiReadReg( dev, phy, i, &data0 ); - printk( " 0x%04hx", data0 ); - TLan_MiiReadReg( dev, phy, i + 1, &data1 ); - printk( " 0x%04hx", data1 ); - TLan_MiiReadReg( dev, phy, i + 2, &data2 ); - printk( " 0x%04hx", data2 ); - TLan_MiiReadReg( dev, phy, i + 3, &data3 ); - printk( " 0x%04hx\n", data3 ); - } - } else { - printk( "TLAN: Device %s, Invalid PHY.\n", dev->name ); - } - -} /* TLan_PhyPrint */ - - /********************************************************************* - * TLan_PhyDetect - * - * Returns: - * Nothing - * Parms: - * dev A pointer to the device structure of the adapter - * for which the PHY needs determined. - * - * So far I've found that adapters which have external PHYs - * may also use the internal PHY for part of the functionality. - * (eg, AUI/Thinnet). This function finds out if this TLAN - * chip has an internal PHY, and then finds the first external - * PHY (starting from address 0) if it exists). - * - ********************************************************************/ - -void TLan_PhyDetect( struct net_device *dev ) -{ - TLanPrivateInfo *priv = dev->priv; - u16 control; - u16 hi; - u16 lo; - u32 phy; - - if ( priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY ) { - priv->phyNum = 0xFFFF; - return; - } - - TLan_MiiReadReg( dev, TLAN_PHY_MAX_ADDR, MII_GEN_ID_HI, &hi ); - - if ( hi != 0xFFFF ) { - priv->phy[0] = TLAN_PHY_MAX_ADDR; - } else { - priv->phy[0] = TLAN_PHY_NONE; - } - - priv->phy[1] = TLAN_PHY_NONE; - for ( phy = 0; phy <= TLAN_PHY_MAX_ADDR; phy++ ) { - TLan_MiiReadReg( dev, phy, MII_GEN_CTL, &control ); - TLan_MiiReadReg( dev, phy, MII_GEN_ID_HI, &hi ); - TLan_MiiReadReg( dev, phy, MII_GEN_ID_LO, &lo ); - if ( ( control != 0xFFFF ) || ( hi != 0xFFFF ) || ( lo != 0xFFFF ) ) { - TLAN_DBG( TLAN_DEBUG_GNRL, "PHY found at %02x %04x %04x %04x\n", phy, control, hi, lo ); - if ( ( priv->phy[1] == TLAN_PHY_NONE ) && ( phy != TLAN_PHY_MAX_ADDR ) ) { - priv->phy[1] = phy; - } - } - } - - if ( priv->phy[1] != TLAN_PHY_NONE ) { - priv->phyNum = 1; - } else if ( priv->phy[0] != TLAN_PHY_NONE ) { - priv->phyNum = 0; - } else { - printk( "TLAN: Cannot initialize device, no PHY was found!\n" ); - } - -} /* TLan_PhyDetect */ - -void TLan_PhyPowerDown( struct net_device *dev ) -{ - TLanPrivateInfo *priv = dev->priv; - u16 value; - - TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Powering down PHY(s).\n", dev->name ); - value = MII_GC_PDOWN | MII_GC_LOOPBK | MII_GC_ISOLATE; - TLan_MiiSync( dev->base_addr ); - TLan_MiiWriteReg( dev, priv->phy[priv->phyNum], MII_GEN_CTL, value ); - if ( ( priv->phyNum == 0 ) && ( priv->phy[1] != TLAN_PHY_NONE ) && ( ! ( priv->adapter->flags & TLAN_ADAPTER_USE_INTERN_10 ) ) ) { - TLan_MiiSync( dev->base_addr ); - TLan_MiiWriteReg( dev, priv->phy[1], MII_GEN_CTL, value ); - } - - /* Wait for 50 ms and powerup - * This is abitrary. It is intended to make sure the - * tranceiver settles. - */ - TLan_SetTimer( dev, (HZ/20), TLAN_TIMER_PHY_PUP ); - -} /* TLan_PhyPowerDown */ - -void TLan_PhyPowerUp( struct net_device *dev ) -{ - TLanPrivateInfo *priv = dev->priv; - u16 value; - - TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Powering up PHY.\n", dev->name ); - TLan_MiiSync( dev->base_addr ); - value = MII_GC_LOOPBK; - TLan_MiiWriteReg( dev, priv->phy[priv->phyNum], MII_GEN_CTL, value ); - TLan_MiiSync(dev->base_addr); - /* Wait for 500 ms and reset the - * tranceiver. The TLAN docs say both 50 ms and - * 500 ms, so do the longer, just in case. - */ - TLan_SetTimer( dev, (HZ/20), TLAN_TIMER_PHY_RESET ); - -} /* TLan_PhyPowerUp */ - -void TLan_PhyReset( struct net_device *dev ) -{ - TLanPrivateInfo *priv = dev->priv; - u16 phy; - u16 value; - - phy = priv->phy[priv->phyNum]; - - TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Reseting PHY.\n", dev->name ); - TLan_MiiSync( dev->base_addr ); - value = MII_GC_LOOPBK | MII_GC_RESET; - TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, value ); - TLan_MiiReadReg( dev, phy, MII_GEN_CTL, &value ); - while ( value & MII_GC_RESET ) { - TLan_MiiReadReg( dev, phy, MII_GEN_CTL, &value ); - } - - /* Wait for 500 ms and initialize. - * I don't remember why I wait this long. - * I've changed this to 50ms, as it seems long enough. - */ - TLan_SetTimer( dev, (HZ/20), TLAN_TIMER_PHY_START_LINK ); - -} /* TLan_PhyReset */ - -void TLan_PhyStartLink( struct net_device *dev ) -{ - TLanPrivateInfo *priv = dev->priv; - u16 ability; - u16 control; - u16 data; - u16 phy; - u16 status; - u16 tctl; - - phy = priv->phy[priv->phyNum]; - TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Trying to activate link.\n", dev->name ); - TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status ); - TLan_MiiReadReg( dev, phy, MII_GEN_STS, &ability ); - - if ( ( status & MII_GS_AUTONEG ) && - ( ! priv->aui ) ) { - ability = status >> 11; - if ( priv->speed == TLAN_SPEED_10 && - priv->duplex == TLAN_DUPLEX_HALF) { - TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x0000); - } else if ( priv->speed == TLAN_SPEED_10 && - priv->duplex == TLAN_DUPLEX_FULL) { - priv->tlanFullDuplex = TRUE; - TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x0100); - } else if ( priv->speed == TLAN_SPEED_100 && - priv->duplex == TLAN_DUPLEX_HALF) { - TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x2000); - } else if ( priv->speed == TLAN_SPEED_100 && - priv->duplex == TLAN_DUPLEX_FULL) { - priv->tlanFullDuplex = TRUE; - TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x2100); - } else { - - /* Set Auto-Neg advertisement */ - TLan_MiiWriteReg( dev, phy, MII_AN_ADV, (ability << 5) | 1); - /* Enablee Auto-Neg */ - TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x1000 ); - /* Restart Auto-Neg */ - TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, 0x1200 ); - /* Wait for 4 sec for autonegotiation - * to complete. The max spec time is less than this - * but the card need additional time to start AN. - * .5 sec should be plenty extra. - */ - printk( "TLAN: %s: Starting autonegotiation.\n", dev->name ); - TLan_SetTimer( dev, (2*HZ), TLAN_TIMER_PHY_FINISH_AN ); - return; - } - - } - - if ( ( priv->aui ) && ( priv->phyNum != 0 ) ) { - priv->phyNum = 0; - data = TLAN_NET_CFG_1FRAG | TLAN_NET_CFG_1CHAN | TLAN_NET_CFG_PHY_EN; - TLan_DioWrite16( dev->base_addr, TLAN_NET_CONFIG, data ); - TLan_SetTimer( dev, (40*HZ/1000), TLAN_TIMER_PHY_PDOWN ); - return; - } else if ( priv->phyNum == 0 ) { - TLan_MiiReadReg( dev, phy, TLAN_TLPHY_CTL, &tctl ); - if ( priv->aui ) { - tctl |= TLAN_TC_AUISEL; - } else { - tctl &= ~TLAN_TC_AUISEL; - control = 0; - if ( priv->duplex == TLAN_DUPLEX_FULL ) { - control |= MII_GC_DUPLEX; - priv->tlanFullDuplex = TRUE; - } - if ( priv->speed == TLAN_SPEED_100 ) { - control |= MII_GC_SPEEDSEL; - } - TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, control ); - } - TLan_MiiWriteReg( dev, phy, TLAN_TLPHY_CTL, tctl ); - } - - /* Wait for 2 sec to give the tranceiver time - * to establish link. - */ - TLan_SetTimer( dev, (4*HZ), TLAN_TIMER_FINISH_RESET ); - -} /* TLan_PhyStartLink */ - -void TLan_PhyFinishAutoNeg( struct net_device *dev ) -{ - TLanPrivateInfo *priv = dev->priv; - u16 an_adv; - u16 an_lpa; - u16 data; - u16 mode; - u16 phy; - u16 status; - - phy = priv->phy[priv->phyNum]; - - TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status ); - udelay( 1000 ); - TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status ); - - if ( ! ( status & MII_GS_AUTOCMPLT ) ) { - /* Wait for 8 sec to give the process - * more time. Perhaps we should fail after a while. - */ - if (!priv->neg_be_verbose++) { - printk(KERN_INFO "TLAN: Giving autonegotiation more time.\n"); - printk(KERN_INFO "TLAN: Please check that your adapter has\n"); - printk(KERN_INFO "TLAN: been properly connected to a HUB or Switch.\n"); - printk(KERN_INFO "TLAN: Trying to establish link in the background...\n"); - } - TLan_SetTimer( dev, (8*HZ), TLAN_TIMER_PHY_FINISH_AN ); - return; - } - - printk( "TLAN: %s: Autonegotiation complete.\n", dev->name ); - TLan_MiiReadReg( dev, phy, MII_AN_ADV, &an_adv ); - TLan_MiiReadReg( dev, phy, MII_AN_LPA, &an_lpa ); - mode = an_adv & an_lpa & 0x03E0; - if ( mode & 0x0100 ) { - priv->tlanFullDuplex = TRUE; - } else if ( ! ( mode & 0x0080 ) && ( mode & 0x0040 ) ) { - priv->tlanFullDuplex = TRUE; - } - - if ( ( ! ( mode & 0x0180 ) ) && ( priv->adapter->flags & TLAN_ADAPTER_USE_INTERN_10 ) && ( priv->phyNum != 0 ) ) { - priv->phyNum = 0; - data = TLAN_NET_CFG_1FRAG | TLAN_NET_CFG_1CHAN | TLAN_NET_CFG_PHY_EN; - TLan_DioWrite16( dev->base_addr, TLAN_NET_CONFIG, data ); - TLan_SetTimer( dev, (400*HZ/1000), TLAN_TIMER_PHY_PDOWN ); - return; - } - - if ( priv->phyNum == 0 ) { - if ( ( priv->duplex == TLAN_DUPLEX_FULL ) || ( an_adv & an_lpa & 0x0040 ) ) { - TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, MII_GC_AUTOENB | MII_GC_DUPLEX ); - printk( "TLAN: Starting internal PHY with FULL-DUPLEX\n" ); - } else { - TLan_MiiWriteReg( dev, phy, MII_GEN_CTL, MII_GC_AUTOENB ); - printk( "TLAN: Starting internal PHY with HALF-DUPLEX\n" ); - } - } - - /* Wait for 100 ms. No reason in partiticular. - */ - TLan_SetTimer( dev, (HZ/10), TLAN_TIMER_FINISH_RESET ); - -} /* TLan_PhyFinishAutoNeg */ - -#ifdef MONITOR - - /********************************************************************* - * - * TLan_phyMonitor - * - * Returns: - * None - * - * Params: - * dev The device structure of this device. - * - * - * This function monitors PHY condition by reading the status - * register via the MII bus. This can be used to give info - * about link changes (up/down), and possible switch to alternate - * media. - * - * ******************************************************************/ - -void TLan_PhyMonitor( struct net_device *dev ) -{ - TLanPrivateInfo *priv = dev->priv; - u16 phy; - u16 phy_status; - - phy = priv->phy[priv->phyNum]; - - /* Get PHY status register */ - TLan_MiiReadReg( dev, phy, MII_GEN_STS, &phy_status ); - - /* Check if link has been lost */ - if (!(phy_status & MII_GS_LINK)) { - if (priv->link) { - priv->link = 0; - printk(KERN_DEBUG "TLAN: %s has lost link\n", dev->name); - dev->flags &= ~IFF_RUNNING; - TLan_SetTimer( dev, (2*HZ), TLAN_TIMER_LINK_BEAT ); - return; - } - } - - /* Link restablished? */ - if ((phy_status & MII_GS_LINK) && !priv->link) { - priv->link = 1; - printk(KERN_DEBUG "TLAN: %s has reestablished link\n", dev->name); - dev->flags |= IFF_RUNNING; - } - - /* Setup a new monitor */ - TLan_SetTimer( dev, (2*HZ), TLAN_TIMER_LINK_BEAT ); -} - -#endif /* MONITOR */ - -/***************************************************************************** -****************************************************************************** - - ThunderLAN Driver MII Routines - - These routines are based on the information in Chap. 2 of the - "ThunderLAN Programmer's Guide", pp. 15-24. - -****************************************************************************** -*****************************************************************************/ - - /*************************************************************** - * TLan_MiiReadReg - * - * Returns: - * 0 if ack received ok - * 1 otherwise. - * - * Parms: - * dev The device structure containing - * The io address and interrupt count - * for this device. - * phy The address of the PHY to be queried. - * reg The register whose contents are to be - * retreived. - * val A pointer to a variable to store the - * retrieved value. - * - * This function uses the TLAN's MII bus to retreive the contents - * of a given register on a PHY. It sends the appropriate info - * and then reads the 16-bit register value from the MII bus via - * the TLAN SIO register. - * - **************************************************************/ - -int TLan_MiiReadReg( struct net_device *dev, u16 phy, u16 reg, u16 *val ) -{ - u8 nack; - u16 sio, tmp; - u32 i; - int err; - int minten; - TLanPrivateInfo *priv = dev->priv; - unsigned long flags = 0; - - err = FALSE; - outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR); - sio = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO; - - if (!in_irq()) - spin_lock_irqsave(&priv->lock, flags); - - TLan_MiiSync(dev->base_addr); - - minten = TLan_GetBit( TLAN_NET_SIO_MINTEN, sio ); - if ( minten ) - TLan_ClearBit(TLAN_NET_SIO_MINTEN, sio); - - TLan_MiiSendData( dev->base_addr, 0x1, 2 ); /* Start ( 01b ) */ - TLan_MiiSendData( dev->base_addr, 0x2, 2 ); /* Read ( 10b ) */ - TLan_MiiSendData( dev->base_addr, phy, 5 ); /* Device # */ - TLan_MiiSendData( dev->base_addr, reg, 5 ); /* Register # */ - - TLan_ClearBit(TLAN_NET_SIO_MTXEN, sio); /* Change direction */ - - TLan_ClearBit(TLAN_NET_SIO_MCLK, sio); /* Clock Idle bit */ - TLan_SetBit(TLAN_NET_SIO_MCLK, sio); - TLan_ClearBit(TLAN_NET_SIO_MCLK, sio); /* Wait 300ns */ - - nack = TLan_GetBit(TLAN_NET_SIO_MDATA, sio); /* Check for ACK */ - TLan_SetBit(TLAN_NET_SIO_MCLK, sio); /* Finish ACK */ - if (nack) { /* No ACK, so fake it */ - for (i = 0; i < 16; i++) { - TLan_ClearBit(TLAN_NET_SIO_MCLK, sio); - TLan_SetBit(TLAN_NET_SIO_MCLK, sio); - } - tmp = 0xffff; - err = TRUE; - } else { /* ACK, so read data */ - for (tmp = 0, i = 0x8000; i; i >>= 1) { - TLan_ClearBit(TLAN_NET_SIO_MCLK, sio); - if (TLan_GetBit(TLAN_NET_SIO_MDATA, sio)) - tmp |= i; - TLan_SetBit(TLAN_NET_SIO_MCLK, sio); - } - } - - TLan_ClearBit(TLAN_NET_SIO_MCLK, sio); /* Idle cycle */ - TLan_SetBit(TLAN_NET_SIO_MCLK, sio); - - if ( minten ) - TLan_SetBit(TLAN_NET_SIO_MINTEN, sio); - - *val = tmp; - - if (!in_irq()) - spin_unlock_irqrestore(&priv->lock, flags); - - return err; - -} /* TLan_MiiReadReg */ - - /*************************************************************** - * TLan_MiiSendData - * - * Returns: - * Nothing - * Parms: - * base_port The base IO port of the adapter in - * question. - * dev The address of the PHY to be queried. - * data The value to be placed on the MII bus. - * num_bits The number of bits in data that are to - * be placed on the MII bus. - * - * This function sends on sequence of bits on the MII - * configuration bus. - * - **************************************************************/ - -void TLan_MiiSendData( u16 base_port, u32 data, unsigned num_bits ) -{ - u16 sio; - u32 i; - - if ( num_bits == 0 ) - return; - - outw( TLAN_NET_SIO, base_port + TLAN_DIO_ADR ); - sio = base_port + TLAN_DIO_DATA + TLAN_NET_SIO; - TLan_SetBit( TLAN_NET_SIO_MTXEN, sio ); - - for ( i = ( 0x1 << ( num_bits - 1 ) ); i; i >>= 1 ) { - TLan_ClearBit( TLAN_NET_SIO_MCLK, sio ); - (void) TLan_GetBit( TLAN_NET_SIO_MCLK, sio ); - if ( data & i ) - TLan_SetBit( TLAN_NET_SIO_MDATA, sio ); - else - TLan_ClearBit( TLAN_NET_SIO_MDATA, sio ); - TLan_SetBit( TLAN_NET_SIO_MCLK, sio ); - (void) TLan_GetBit( TLAN_NET_SIO_MCLK, sio ); - } - -} /* TLan_MiiSendData */ - - /*************************************************************** - * TLan_MiiSync - * - * Returns: - * Nothing - * Parms: - * base_port The base IO port of the adapter in - * question. - * - * This functions syncs all PHYs in terms of the MII configuration - * bus. - * - **************************************************************/ - -void TLan_MiiSync( u16 base_port ) -{ - int i; - u16 sio; - - outw( TLAN_NET_SIO, base_port + TLAN_DIO_ADR ); - sio = base_port + TLAN_DIO_DATA + TLAN_NET_SIO; - - TLan_ClearBit( TLAN_NET_SIO_MTXEN, sio ); - for ( i = 0; i < 32; i++ ) { - TLan_ClearBit( TLAN_NET_SIO_MCLK, sio ); - TLan_SetBit( TLAN_NET_SIO_MCLK, sio ); - } - -} /* TLan_MiiSync */ - - /*************************************************************** - * TLan_MiiWriteReg - * - * Returns: - * Nothing - * Parms: - * dev The device structure for the device - * to write to. - * phy The address of the PHY to be written to. - * reg The register whose contents are to be - * written. - * val The value to be written to the register. - * - * This function uses the TLAN's MII bus to write the contents of a - * given register on a PHY. It sends the appropriate info and then - * writes the 16-bit register value from the MII configuration bus - * via the TLAN SIO register. - * - **************************************************************/ - -void TLan_MiiWriteReg( struct net_device *dev, u16 phy, u16 reg, u16 val ) -{ - u16 sio; - int minten; - unsigned long flags = 0; - TLanPrivateInfo *priv = dev->priv; - - outw(TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR); - sio = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO; - - if (!in_irq()) - spin_lock_irqsave(&priv->lock, flags); - - TLan_MiiSync( dev->base_addr ); - - minten = TLan_GetBit( TLAN_NET_SIO_MINTEN, sio ); - if ( minten ) - TLan_ClearBit( TLAN_NET_SIO_MINTEN, sio ); - - TLan_MiiSendData( dev->base_addr, 0x1, 2 ); /* Start ( 01b ) */ - TLan_MiiSendData( dev->base_addr, 0x1, 2 ); /* Write ( 01b ) */ - TLan_MiiSendData( dev->base_addr, phy, 5 ); /* Device # */ - TLan_MiiSendData( dev->base_addr, reg, 5 ); /* Register # */ - - TLan_MiiSendData( dev->base_addr, 0x2, 2 ); /* Send ACK */ - TLan_MiiSendData( dev->base_addr, val, 16 ); /* Send Data */ - - TLan_ClearBit( TLAN_NET_SIO_MCLK, sio ); /* Idle cycle */ - TLan_SetBit( TLAN_NET_SIO_MCLK, sio ); - - if ( minten ) - TLan_SetBit( TLAN_NET_SIO_MINTEN, sio ); - - if (!in_irq()) - spin_unlock_irqrestore(&priv->lock, flags); - -} /* TLan_MiiWriteReg */ -#endif - -/************************************************************************** -RESET - Reset adapter -***************************************************************************/ -static void skel_reset(struct nic *nic) -{ - /* put the card in its initial state */ -} - -/************************************************************************** -POLL - Wait for a frame -***************************************************************************/ -static int skel_poll(struct nic *nic) -{ - /* return true if there's an ethernet packet ready to read */ - /* nic->packet should contain data on return */ - /* nic->packetlen should contain length of data */ - return (0); /* initially as this is called to flush the input */ -} - -/************************************************************************** -TRANSMIT - Transmit a frame -***************************************************************************/ -static void skel_transmit( - struct nic *nic, - const char *d, /* Destination */ - unsigned int t, /* Type */ - unsigned int s, /* size */ - const char *p) /* Packet */ -{ - /* send the packet to destination */ -} - -/************************************************************************** -DISABLE - Turn off ethernet interface -***************************************************************************/ -static void skel_disable(struct nic *nic) -{ -} - -/************************************************************************** -PROBE - Look for an adapter, this routine's visible to the outside -You should omit the last argument struct pci_device * for a non-PCI NIC -***************************************************************************/ -struct nic *tlan_probe(struct nic *nic, unsigned short *probe_addrs, - struct pci_device *p) -{ - /* if probe_addrs is 0, then routine can use a hardwired default */ - /* if board found */ - { - /* point to NIC specific routines */ - nic->reset = skel_reset; - nic->poll = skel_poll; - nic->transmit = skel_transmit; - nic->disable = skel_disable; - return nic; - } - /* else */ - return 0; -} - -#if 0 -#ifndef TLAN_H -#define TLAN_H -/******************************************************************** - * - * Linux ThunderLAN Driver - * - * tlan.h - * by James Banks - * - * (C) 1997-1998 Caldera, Inc. - * (C) 1999-2001 Torben Mathiasen - * - * This software may be used and distributed according to the terms - * of the GNU General Public License, incorporated herein by reference. - * - ** This file is best viewed/edited with tabstop=4, colums>=132 - * - * - * Dec 10, 1999 Torben Mathiasen - * New Maintainer - * - ********************************************************************/ - -#include -#include -#include - -#define FALSE 0 -#define TRUE 1 - -#define TX_TIMEOUT (10*HZ) /* We need time for auto-neg */ - -typedef struct tlan_adapter_entry { - u16 vendorId; - u16 deviceId; - char *deviceLabel; - u32 flags; - u16 addrOfs; -} TLanAdapterEntry; - - /***************************************************************** - * EISA Definitions - * - ****************************************************************/ - -#define EISA_ID 0xc80 /* EISA ID Registers */ -#define EISA_ID0 0xc80 /* EISA ID Register 0 */ -#define EISA_ID1 0xc81 /* EISA ID Register 1 */ -#define EISA_ID2 0xc82 /* EISA ID Register 2 */ -#define EISA_ID3 0xc83 /* EISA ID Register 3 */ -#define EISA_CR 0xc84 /* EISA Control Register */ -#define EISA_REG0 0xc88 /* EISA Configuration Register 0 */ -#define EISA_REG1 0xc89 /* EISA Configuration Register 1 */ -#define EISA_REG2 0xc8a /* EISA Configuration Register 2 */ -#define EISA_REG3 0xc8f /* EISA Configuration Register 3 */ -#define EISA_APROM 0xc90 /* Ethernet Address PROM */ - - /***************************************************************** - * Rx/Tx List Definitions - * - ****************************************************************/ - -typedef struct tlan_buffer_ref_tag { - u32 count; - u32 address; -} TLanBufferRef; - -typedef struct tlan_list_tag { - u32 forward; - u16 cStat; - u16 frameSize; - TLanBufferRef buffer[TLAN_BUFFERS_PER_LIST]; -} TLanList; - -typedef u8 TLanBuffer[TLAN_MAX_FRAME_SIZE]; - - /***************************************************************** - * TLAN Private Information Structure - * - ****************************************************************/ - -typedef struct tlan_private_tag { - struct net_device *nextDevice; - void *dmaStorage; - u8 *padBuffer; - TLanList *rxList; - u8 *rxBuffer; - u32 rxHead; - u32 rxTail; - u32 rxEocCount; - TLanList *txList; - u8 *txBuffer; - u32 txHead; - u32 txInProgress; - u32 txTail; - u32 txBusyCount; - u32 phyOnline; - u32 timerSetAt; - u32 timerType; - struct timer_list timer; - struct net_device_stats stats; - struct board *adapter; - u32 adapterRev; - u32 aui; - u32 debug; - u32 duplex; - u32 phy[2]; - u32 phyNum; - u32 speed; - u8 tlanRev; - u8 tlanFullDuplex; - char devName[8]; - spinlock_t lock; - u8 link; - u8 is_eisa; - struct tq_struct tlan_tqueue; - u8 neg_be_verbose; -} TLanPrivateInfo; - -#define TLAN_HC_GO 0x80000000 -#define TLAN_HC_STOP 0x40000000 -#define TLAN_HC_ACK 0x20000000 -#define TLAN_HC_CS_MASK 0x1FE00000 -#define TLAN_HC_EOC 0x00100000 -#define TLAN_HC_RT 0x00080000 -#define TLAN_HC_NES 0x00040000 -#define TLAN_HC_AD_RST 0x00008000 -#define TLAN_HC_LD_TMR 0x00004000 -#define TLAN_HC_LD_THR 0x00002000 -#define TLAN_HC_REQ_INT 0x00001000 -#define TLAN_HC_INT_OFF 0x00000800 -#define TLAN_HC_INT_ON 0x00000400 -#define TLAN_HC_AC_MASK 0x000000FF -#define TLAN_DA_ADR_INC 0x8000 -#define TLAN_DA_RAM_ADR 0x4000 -#define TLAN_HI_IV_MASK 0x1FE0 -#define TLAN_HI_IT_MASK 0x001C - -#define TLAN_NET_CMD_NRESET 0x80 -#define TLAN_NET_CMD_NWRAP 0x40 -#define TLAN_NET_CMD_CSF 0x20 -#define TLAN_NET_CMD_CAF 0x10 -#define TLAN_NET_CMD_NOBRX 0x08 -#define TLAN_NET_CMD_DUPLEX 0x04 -#define TLAN_NET_CMD_TRFRAM 0x02 -#define TLAN_NET_CMD_TXPACE 0x01 -#define TLAN_NET_SIO_MINTEN 0x80 -#define TLAN_NET_SIO_ECLOK 0x40 -#define TLAN_NET_SIO_ETXEN 0x20 -#define TLAN_NET_SIO_EDATA 0x10 -#define TLAN_NET_SIO_NMRST 0x08 -#define TLAN_NET_SIO_MCLK 0x04 -#define TLAN_NET_SIO_MTXEN 0x02 -#define TLAN_NET_SIO_MDATA 0x01 -#define TLAN_NET_STS_MIRQ 0x80 -#define TLAN_NET_STS_HBEAT 0x40 -#define TLAN_NET_STS_TXSTOP 0x20 -#define TLAN_NET_STS_RXSTOP 0x10 -#define TLAN_NET_STS_RSRVD 0x0F -#define TLAN_NET_MASK_MASK7 0x80 -#define TLAN_NET_MASK_MASK6 0x40 -#define TLAN_NET_MASK_MASK5 0x20 -#define TLAN_NET_MASK_MASK4 0x10 -#define TLAN_NET_MASK_RSRVD 0x0F -#define TLAN_NET_CFG_RCLK 0x8000 -#define TLAN_NET_CFG_TCLK 0x4000 -#define TLAN_NET_CFG_BIT 0x2000 -#define TLAN_NET_CFG_RXCRC 0x1000 -#define TLAN_NET_CFG_PEF 0x0800 -#define TLAN_NET_CFG_1FRAG 0x0400 -#define TLAN_NET_CFG_1CHAN 0x0200 -#define TLAN_NET_CFG_MTEST 0x0100 -#define TLAN_NET_CFG_PHY_EN 0x0080 -#define TLAN_NET_CFG_MSMASK 0x007F -#define TLAN_LED_ACT 0x10 -#define TLAN_LED_LINK 0x01 -#define TLAN_ID_TX_EOC 0x04 -#define TLAN_ID_RX_EOF 0x02 -#define TLAN_ID_RX_EOC 0x01 - -#define CIRC_INC( a, b ) if ( ++a >= b ) a = 0 - -#ifdef I_LIKE_A_FAST_HASH_FUNCTION -/* given 6 bytes, view them as 8 6-bit numbers and return the XOR of those */ -/* the code below is about seven times as fast as the original code */ -inline u32 TLan_HashFunc( u8 *a ) -{ - u8 hash; - - hash = (a[0]^a[3]); /* & 077 */ - hash ^= ((a[0]^a[3])>>6); /* & 003 */ - hash ^= ((a[1]^a[4])<<2); /* & 074 */ - hash ^= ((a[1]^a[4])>>4); /* & 017 */ - hash ^= ((a[2]^a[5])<<4); /* & 060 */ - hash ^= ((a[2]^a[5])>>2); /* & 077 */ - - return (hash & 077); -} - -#else /* original code */ - -inline u32 xor( u32 a, u32 b ) -{ - return ( ( a && ! b ) || ( ! a && b ) ); -} -#define XOR8( a, b, c, d, e, f, g, h ) xor( a, xor( b, xor( c, xor( d, xor( e, xor( f, xor( g, h ) ) ) ) ) ) ) -#define DA( a, bit ) ( ( (u8) a[bit/8] ) & ( (u8) ( 1 << bit%8 ) ) ) - -inline u32 TLan_HashFunc( u8 *a ) -{ - u32 hash; - - hash = XOR8( DA(a,0), DA(a, 6), DA(a,12), DA(a,18), DA(a,24), DA(a,30), DA(a,36), DA(a,42) ); - hash |= XOR8( DA(a,1), DA(a, 7), DA(a,13), DA(a,19), DA(a,25), DA(a,31), DA(a,37), DA(a,43) ) << 1; - hash |= XOR8( DA(a,2), DA(a, 8), DA(a,14), DA(a,20), DA(a,26), DA(a,32), DA(a,38), DA(a,44) ) << 2; - hash |= XOR8( DA(a,3), DA(a, 9), DA(a,15), DA(a,21), DA(a,27), DA(a,33), DA(a,39), DA(a,45) ) << 3; - hash |= XOR8( DA(a,4), DA(a,10), DA(a,16), DA(a,22), DA(a,28), DA(a,34), DA(a,40), DA(a,46) ) << 4; - hash |= XOR8( DA(a,5), DA(a,11), DA(a,17), DA(a,23), DA(a,29), DA(a,35), DA(a,41), DA(a,47) ) << 5; - - return hash; - -} - -#endif /* I_LIKE_A_FAST_HASH_FUNCTION */ -#endif -/******************************************************************************* - * - * Linux ThunderLAN Driver - * - * tlan.c - * by James Banks - * - * (C) 1997-1998 Caldera, Inc. - * (C) 1998 James Banks - * (C) 1999-2001 Torben Mathiasen - * - * This software may be used and distributed according to the terms - * of the GNU General Public License, incorporated herein by reference. - * - ** This file is best viewed/edited with columns>=132. - * - ** Useful (if not required) reading: - * - * Texas Instruments, ThunderLAN Programmer's Guide, - * TI Literature Number SPWU013A - * available in PDF format from www.ti.com - * Level One, LXT901 and LXT970 Data Sheets - * available in PDF format from www.level1.com - * National Semiconductor, DP83840A Data Sheet - * available in PDF format from www.national.com - * Microchip Technology, 24C01A/02A/04A Data Sheet - * available in PDF format from www.microchip.com - * - * Change History - * - * Tigran Aivazian : TLan_PciProbe() now uses - * new PCI BIOS interface. - * Alan Cox : Fixed the out of memory - * handling. - * - * Torben Mathiasen New Maintainer! - * - * v1.1 Dec 20, 1999 - Removed linux version checking - * Patch from Tigran Aivazian. - * - v1.1 includes Alan's SMP updates. - * - We still have problems on SMP though, - * but I'm looking into that. - * - * v1.2 Jan 02, 2000 - Hopefully fixed the SMP deadlock. - * - Removed dependency of HZ being 100. - * - We now allow higher priority timers to - * overwrite timers like TLAN_TIMER_ACTIVITY - * Patch from John Cagle . - * - Fixed a few compiler warnings. - * - * v1.3 Feb 04, 2000 - Fixed the remaining HZ issues. - * - Removed call to pci_present(). - * - Removed SA_INTERRUPT flag from irq handler. - * - Added __init and __initdata to reduce resisdent - * code size. - * - Driver now uses module_init/module_exit. - * - Rewrote init_module and tlan_probe to - * share a lot more code. We now use tlan_probe - * with builtin and module driver. - * - Driver ported to new net API. - * - tlan.txt has been reworked to reflect current - * driver (almost) - * - Other minor stuff - * - * v1.4 Feb 10, 2000 - Updated with more changes required after Dave's - * network cleanup in 2.3.43pre7 (Tigran & myself) - * - Minor stuff. - * - * v1.5 March 22, 2000 - Fixed another timer bug that would hang the driver - * if no cable/link were present. - * - Cosmetic changes. - * - TODO: Port completely to new PCI/DMA API - * Auto-Neg fallback. - * - * v1.6 April 04, 2000 - Fixed driver support for kernel-parameters. Haven't - * tested it though, as the kernel support is currently - * broken (2.3.99p4p3). - * - Updated tlan.txt accordingly. - * - Adjusted minimum/maximum frame length. - * - There is now a TLAN website up at - * http://tlan.kernel.dk - * - * v1.7 April 07, 2000 - Started to implement custom ioctls. Driver now - * reports PHY information when used with Donald - * Beckers userspace MII diagnostics utility. - * - * v1.8 April 23, 2000 - Fixed support for forced speed/duplex settings. - * - Added link information to Auto-Neg and forced - * modes. When NIC operates with auto-neg the driver - * will report Link speed & duplex modes as well as - * link partner abilities. When forced link is used, - * the driver will report status of the established - * link. - * Please read tlan.txt for additional information. - * - Removed call to check_region(), and used - * return value of request_region() instead. - * - * v1.8a May 28, 2000 - Minor updates. - * - * v1.9 July 25, 2000 - Fixed a few remaining Full-Duplex issues. - * - Updated with timer fixes from Andrew Morton. - * - Fixed module race in TLan_Open. - * - Added routine to monitor PHY status. - * - Added activity led support for Proliant devices. - * - * v1.10 Aug 30, 2000 - Added support for EISA based tlan controllers - * like the Compaq NetFlex3/E. - * - Rewrote tlan_probe to better handle multiple - * bus probes. Probing and device setup is now - * done through TLan_Probe and TLan_init_one. Actual - * hardware probe is done with kernel API and - * TLan_EisaProbe. - * - Adjusted debug information for probing. - * - Fixed bug that would cause general debug information - * to be printed after driver removal. - * - Added transmit timeout handling. - * - Fixed OOM return values in tlan_probe. - * - Fixed possible mem leak in tlan_exit - * (now tlan_remove_one). - * - Fixed timer bug in TLan_phyMonitor. - * - This driver version is alpha quality, please - * send me any bug issues you may encounter. - * - * v1.11 Aug 31, 2000 - Do not try to register irq 0 if no irq line was - * set for EISA cards. - * - Added support for NetFlex3/E with nibble-rate - * 10Base-T PHY. This is untestet as I haven't got - * one of these cards. - * - Fixed timer being added twice. - * - Disabled PhyMonitoring by default as this is - * work in progress. Define MONITOR to enable it. - * - Now we don't display link info with PHYs that - * doesn't support it (level1). - * - Incresed tx_timeout beacuse of auto-neg. - * - Adjusted timers for forced speeds. - * - * v1.12 Oct 12, 2000 - Minor fixes (memleak, init, etc.) - * - * v1.13 Nov 28, 2000 - Stop flooding console with auto-neg issues - * when link can't be established. - * - Added the bbuf option as a kernel parameter. - * - Fixed ioaddr probe bug. - * - Fixed stupid deadlock with MII interrupts. - * - Added support for speed/duplex selection with - * multiple nics. - * - Added partly fix for TX Channel lockup with - * TLAN v1.0 silicon. This needs to be investigated - * further. - * - * v1.14 Dec 16, 2000 - Added support for servicing multiple frames per. - * interrupt. Thanks goes to - * Adam Keys - * Denis Beaudoin - * for providing the patch. - * - Fixed auto-neg output when using multiple - * adapters. - * - Converted to use new taskq interface. - * - * v1.14a Jan 6, 2001 - Minor adjustments (spinlocks, etc.) - * - *******************************************************************************/ - - -#include - -#include "tlan.h" - -#include -#include -#include -#include -#include -#include -#include - -typedef u32 (TLanIntVectorFunc)( struct net_device *, u16 ); - -/* For removing EISA devices */ -static struct net_device *TLan_Eisa_Devices; - -static int TLanDevicesInstalled; - -/* Set speed, duplex and aui settings */ -static int aui[MAX_TLAN_BOARDS]; -static int duplex[MAX_TLAN_BOARDS]; -static int speed[MAX_TLAN_BOARDS]; -static int boards_found; - -MODULE_AUTHOR("Maintainer: Torben Mathiasen "); -MODULE_DESCRIPTION("Driver for TI ThunderLAN based ethernet PCI adapters"); -MODULE_LICENSE("GPL"); - -MODULE_PARM(aui, "1-" __MODULE_STRING(MAX_TLAN_BOARDS) "i"); -MODULE_PARM(duplex, "1-" __MODULE_STRING(MAX_TLAN_BOARDS) "i"); -MODULE_PARM(speed, "1-" __MODULE_STRING(MAX_TLAN_BOARDS) "i"); -MODULE_PARM(debug, "i"); -MODULE_PARM(bbuf, "i"); -MODULE_PARM_DESC(aui, "ThunderLAN use AUI port(s) (0-1)"); -MODULE_PARM_DESC(duplex, "ThunderLAN duplex setting(s) (0-default, 1-half, 2-full)"); -MODULE_PARM_DESC(speed, "ThunderLAN port speen setting(s) (0,10,100)"); -MODULE_PARM_DESC(debug, "ThunderLAN debug mask"); -MODULE_PARM_DESC(bbuf, "ThunderLAN use big buffer (0-1)"); -EXPORT_NO_SYMBOLS; - -/* Define this to enable Link beat monitoring */ -#undef MONITOR - -/* Turn on debugging. See linux/Documentation/networking/tlan.txt for details */ -static int debug; - -static int bbuf; -static u8 *TLanPadBuffer; -static char TLanSignature[] = "TLAN"; -static const char tlan_banner[] = "ThunderLAN driver v1.14a\n"; -static int tlan_have_pci; -static int tlan_have_eisa; - -const char *media[] = { - "10BaseT-HD ", "10BaseT-FD ","100baseTx-HD ", - "100baseTx-FD", "100baseT4", 0 -}; - -int media_map[] = { 0x0020, 0x0040, 0x0080, 0x0100, 0x0200,}; - -static struct board { - const char *deviceLabel; - u32 flags; - u16 addrOfs; -} board_info[] __devinitdata = { - { "Compaq Netelligent 10 T PCI UTP", TLAN_ADAPTER_ACTIVITY_LED, 0x83 }, - { "Compaq Netelligent 10/100 TX PCI UTP", TLAN_ADAPTER_ACTIVITY_LED, 0x83 }, - { "Compaq Integrated NetFlex-3/P", TLAN_ADAPTER_NONE, 0x83 }, - { "Compaq NetFlex-3/P", TLAN_ADAPTER_UNMANAGED_PHY | TLAN_ADAPTER_BIT_RATE_PHY, 0x83 }, - { "Compaq NetFlex-3/P", TLAN_ADAPTER_NONE, 0x83 }, - { "Compaq Netelligent Integrated 10/100 TX UTP", TLAN_ADAPTER_ACTIVITY_LED, 0x83 }, - { "Compaq Netelligent Dual 10/100 TX PCI UTP", TLAN_ADAPTER_NONE, 0x83 }, - { "Compaq Netelligent 10/100 TX Embedded UTP", TLAN_ADAPTER_NONE, 0x83 }, - { "Olicom OC-2183/2185", TLAN_ADAPTER_USE_INTERN_10, 0x83 }, - { "Olicom OC-2325", TLAN_ADAPTER_UNMANAGED_PHY, 0xF8 }, - { "Olicom OC-2326", TLAN_ADAPTER_USE_INTERN_10, 0xF8 }, - { "Compaq Netelligent 10/100 TX UTP", TLAN_ADAPTER_ACTIVITY_LED, 0x83 }, - { "Compaq Netelligent 10 T/2 PCI UTP/Coax", TLAN_ADAPTER_NONE, 0x83 }, - { "Compaq NetFlex-3/E", TLAN_ADAPTER_ACTIVITY_LED | /* EISA card */ - TLAN_ADAPTER_UNMANAGED_PHY | TLAN_ADAPTER_BIT_RATE_PHY, 0x83 }, - { "Compaq NetFlex-3/E", TLAN_ADAPTER_ACTIVITY_LED, 0x83 }, /* EISA card */ -}; - -static struct pci_device_id tlan_pci_tbl[] __devinitdata = { - { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL10, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, - { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL100, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 }, - { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETFLEX3I, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2 }, - { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_THUNDER, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3 }, - { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETFLEX3B, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, 4 }, - { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL100PI, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, 5 }, - { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL100D, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, 6 }, - { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_NETEL100I, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, 7 }, - { PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2183, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, 8 }, - { PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2325, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, 9 }, - { PCI_VENDOR_ID_OLICOM, PCI_DEVICE_ID_OLICOM_OC2326, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, 10 }, - { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_NETELLIGENT_10_100_WS_5100, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, 11 }, - { PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_NETELLIGENT_10_T2, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, 12 }, - { 0,} -}; -MODULE_DEVICE_TABLE(pci, tlan_pci_tbl); - -static void TLan_EisaProbe( void ); -static void TLan_Eisa_Cleanup( void ); -static int TLan_Init( struct net_device * ); -static int TLan_Open( struct net_device *dev ); -static int TLan_StartTx( struct sk_buff *, struct net_device *); -static void TLan_HandleInterrupt( int, void *, struct pt_regs *); -static int TLan_Close( struct net_device *); -static struct net_device_stats *TLan_GetStats( struct net_device *); -static void TLan_SetMulticastList( struct net_device *); -static int TLan_ioctl( struct net_device *dev, struct ifreq *rq, int cmd); -static int TLan_probe1( struct pci_dev *pdev, long ioaddr, int irq, int rev, const struct pci_device_id *ent); -static void TLan_tx_timeout( struct net_device *dev); -static int tlan_init_one( struct pci_dev *pdev, const struct pci_device_id *ent); - -static u32 TLan_HandleInvalid( struct net_device *, u16 ); -static u32 TLan_HandleTxEOF( struct net_device *, u16 ); -static u32 TLan_HandleStatOverflow( struct net_device *, u16 ); -static u32 TLan_HandleRxEOF( struct net_device *, u16 ); -static u32 TLan_HandleDummy( struct net_device *, u16 ); -static u32 TLan_HandleTxEOC( struct net_device *, u16 ); -static u32 TLan_HandleStatusCheck( struct net_device *, u16 ); -static u32 TLan_HandleRxEOC( struct net_device *, u16 ); - -static void TLan_Timer( unsigned long ); - -static void TLan_ResetLists( struct net_device * ); -static void TLan_FreeLists( struct net_device * ); -static void TLan_PrintDio( u16 ); -static void TLan_PrintList( TLanList *, char *, int ); -static void TLan_ReadAndClearStats( struct net_device *, int ); -static void TLan_ResetAdapter( struct net_device * ); -static void TLan_FinishReset( struct net_device * ); -static void TLan_SetMac( struct net_device *, int areg, char *mac ); - -static void TLan_PhyPrint( struct net_device * ); -static void TLan_PhyDetect( struct net_device * ); -static void TLan_PhyPowerDown( struct net_device * ); -static void TLan_PhyPowerUp( struct net_device * ); -static void TLan_PhyReset( struct net_device * ); -static void TLan_PhyStartLink( struct net_device * ); -static void TLan_PhyFinishAutoNeg( struct net_device * ); -#ifdef MONITOR -static void TLan_PhyMonitor( struct net_device * ); -#endif - -/* -static int TLan_PhyNop( struct net_device * ); -static int TLan_PhyInternalCheck( struct net_device * ); -static int TLan_PhyInternalService( struct net_device * ); -static int TLan_PhyDp83840aCheck( struct net_device * ); -*/ - -static int TLan_MiiReadReg( struct net_device *, u16, u16, u16 * ); -static void TLan_MiiSendData( u16, u32, unsigned ); -static void TLan_MiiSync( u16 ); -static void TLan_MiiWriteReg( struct net_device *, u16, u16, u16 ); - -static void TLan_EeSendStart( u16 ); -static int TLan_EeSendByte( u16, u8, int ); -static void TLan_EeReceiveByte( u16, u8 *, int ); -static int TLan_EeReadByte( struct net_device *, u8, u8 * ); - -static TLanIntVectorFunc *TLanIntVector[TLAN_INT_NUMBER_OF_INTS] = { - TLan_HandleInvalid, - TLan_HandleTxEOF, - TLan_HandleStatOverflow, - TLan_HandleRxEOF, - TLan_HandleDummy, - TLan_HandleTxEOC, - TLan_HandleStatusCheck, - TLan_HandleRxEOC -}; - -static inline void -TLan_SetTimer( struct net_device *dev, u32 ticks, u32 type ) -{ - TLanPrivateInfo *priv = dev->priv; - unsigned long flags = 0; - - if (!in_irq()) - spin_lock_irqsave(&priv->lock, flags); - if ( priv->timer.function != NULL && - priv->timerType != TLAN_TIMER_ACTIVITY ) { - if (!in_irq()) - spin_unlock_irqrestore(&priv->lock, flags); - return; - } - priv->timer.function = &TLan_Timer; - if (!in_irq()) - spin_unlock_irqrestore(&priv->lock, flags); - - priv->timer.data = (unsigned long) dev; - priv->timerSetAt = jiffies; - priv->timerType = type; - mod_timer(&priv->timer, jiffies + ticks); - -} /* TLan_SetTimer */ - -/***************************************************************************** -****************************************************************************** - - ThunderLAN Driver Primary Functions - - These functions are more or less common to all Linux network drivers. - -****************************************************************************** -*****************************************************************************/ - - /*************************************************************** - * tlan_remove_one - * - * Returns: - * Nothing - * Parms: - * None - * - * Goes through the TLanDevices list and frees the device - * structs and memory associated with each device (lists - * and buffers). It also ureserves the IO port regions - * associated with this device. - * - **************************************************************/ - -static void __devexit tlan_remove_one( struct pci_dev *pdev) -{ - struct net_device *dev = pci_get_drvdata( pdev ); - TLanPrivateInfo *priv = dev->priv; - - unregister_netdev( dev ); - - if ( priv->dmaStorage ) { - kfree( priv->dmaStorage ); - } - - release_region( dev->base_addr, 0x10 ); - - kfree( dev ); - - pci_set_drvdata( pdev, NULL ); -} - -static struct pci_driver tlan_driver = { - name: "tlan", - id_table: tlan_pci_tbl, - probe: tlan_init_one, - remove: tlan_remove_one, -}; - -static int __init tlan_probe(void) -{ - static int pad_allocated; - - printk(KERN_INFO "%s", tlan_banner); - - TLanPadBuffer = (u8 *) kmalloc(TLAN_MIN_FRAME_SIZE, - GFP_KERNEL); - - if (TLanPadBuffer == NULL) { - printk(KERN_ERR "TLAN: Could not allocate memory for pad buffer.\n"); - return -ENOMEM; - } - - memset(TLanPadBuffer, 0, TLAN_MIN_FRAME_SIZE); - pad_allocated = 1; - - TLAN_DBG(TLAN_DEBUG_PROBE, "Starting PCI Probe....\n"); - - /* Use new style PCI probing. Now the kernel will - do most of this for us */ - pci_register_driver(&tlan_driver); - - TLAN_DBG(TLAN_DEBUG_PROBE, "Starting EISA Probe....\n"); - TLan_EisaProbe(); - - printk(KERN_INFO "TLAN: %d device%s installed, PCI: %d EISA: %d\n", - TLanDevicesInstalled, TLanDevicesInstalled == 1 ? "" : "s", - tlan_have_pci, tlan_have_eisa); - - if (TLanDevicesInstalled == 0) { - pci_unregister_driver(&tlan_driver); - kfree(TLanPadBuffer); - return -ENODEV; - } - return 0; -} - - -static int __devinit tlan_init_one( struct pci_dev *pdev, - const struct pci_device_id *ent) -{ - return TLan_probe1( pdev, -1, -1, 0, ent); -} - -/* - *************************************************************** - * tlan_probe1 - * - * Returns: - * 0 on success, error code on error - * Parms: - * none - * - * The name is lower case to fit in with all the rest of - * the netcard_probe names. This function looks for - * another TLan based adapter, setting it up with the - * allocated device struct if one is found. - * tlan_probe has been ported to the new net API and - * now allocates its own device structure. This function - * is also used by modules. - * - **************************************************************/ - -static int __devinit TLan_probe1(struct pci_dev *pdev, - long ioaddr, int irq, int rev, const struct pci_device_id *ent ) -{ - - struct net_device *dev; - TLanPrivateInfo *priv; - u8 pci_rev; - u16 device_id; - int reg; - - if (pdev && pci_enable_device(pdev)) - return -EIO; - - dev = init_etherdev(NULL, sizeof(TLanPrivateInfo)); - if (dev == NULL) { - printk(KERN_ERR "TLAN: Could not allocate memory for device.\n"); - return -ENOMEM; - } - SET_MODULE_OWNER(dev); - - priv = dev->priv; - - /* Is this a PCI device? */ - if (pdev) { - u32 pci_io_base = 0; - - priv->adapter = &board_info[ent->driver_data]; - - pci_read_config_byte ( pdev, PCI_REVISION_ID, &pci_rev); - - for ( reg= 0; reg <= 5; reg ++ ) { - if (pci_resource_flags(pdev, reg) & IORESOURCE_IO) { - pci_io_base = pci_resource_start(pdev, reg); - TLAN_DBG( TLAN_DEBUG_GNRL, "IO mapping is available at %x.\n", - pci_io_base); - break; - } - } - if (!pci_io_base) { - printk(KERN_ERR "TLAN: No IO mappings available\n"); - unregister_netdev(dev); - kfree(dev); - return -ENODEV; - } - - dev->base_addr = pci_io_base; - dev->irq = pdev->irq; - priv->adapterRev = pci_rev; - pci_set_master(pdev); - pci_set_drvdata(pdev, dev); - - } else { /* EISA card */ - /* This is a hack. We need to know which board structure - * is suited for this adapter */ - device_id = inw(ioaddr + EISA_ID2); - priv->is_eisa = 1; - if (device_id == 0x20F1) { - priv->adapter = &board_info[13]; /* NetFlex-3/E */ - priv->adapterRev = 23; /* TLAN 2.3 */ - } else { - priv->adapter = &board_info[14]; - priv->adapterRev = 10; /* TLAN 1.0 */ - } - dev->base_addr = ioaddr; - dev->irq = irq; - } - - /* Kernel parameters */ - if (dev->mem_start) { - priv->aui = dev->mem_start & 0x01; - priv->duplex = ((dev->mem_start & 0x06) == 0x06) ? 0 : (dev->mem_start & 0x06) >> 1; - priv->speed = ((dev->mem_start & 0x18) == 0x18) ? 0 : (dev->mem_start & 0x18) >> 3; - - if (priv->speed == 0x1) { - priv->speed = TLAN_SPEED_10; - } else if (priv->speed == 0x2) { - priv->speed = TLAN_SPEED_100; - } - debug = priv->debug = dev->mem_end; - } else { - priv->aui = aui[boards_found]; - priv->speed = speed[boards_found]; - priv->duplex = duplex[boards_found]; - priv->debug = debug; - } - - /* This will be used when we get an adapter error from - * within our irq handler */ - INIT_LIST_HEAD(&priv->tlan_tqueue.list); - priv->tlan_tqueue.sync = 0; - priv->tlan_tqueue.routine = (void *)(void*)TLan_tx_timeout; - priv->tlan_tqueue.data = dev; - - spin_lock_init(&priv->lock); - - if (TLan_Init(dev)) { - printk(KERN_ERR "TLAN: Could not register device.\n"); - unregister_netdev(dev); - kfree(dev); - return -EAGAIN; - } else { - - TLanDevicesInstalled++; - boards_found++; - - /* pdev is NULL if this is an EISA device */ - if (pdev) - tlan_have_pci++; - else { - priv->nextDevice = TLan_Eisa_Devices; - TLan_Eisa_Devices = dev; - tlan_have_eisa++; - } - - printk(KERN_INFO "TLAN: %s irq=%2d, io=%04x, %s, Rev. %d\n", - dev->name, - (int) dev->irq, - (int) dev->base_addr, - priv->adapter->deviceLabel, - priv->adapterRev); - return 0; - } - -} - -static void TLan_Eisa_Cleanup(void) -{ - struct net_device *dev; - TLanPrivateInfo *priv; - - while( tlan_have_eisa ) { - dev = TLan_Eisa_Devices; - priv = dev->priv; - if (priv->dmaStorage) { - kfree(priv->dmaStorage); - } - release_region( dev->base_addr, 0x10); - unregister_netdev( dev ); - TLan_Eisa_Devices = priv->nextDevice; - kfree( dev ); - tlan_have_eisa--; - } -} - - -static void __exit tlan_exit(void) -{ - pci_unregister_driver(&tlan_driver); - - if (tlan_have_eisa) - TLan_Eisa_Cleanup(); - - kfree( TLanPadBuffer ); - -} - -/* Module loading/unloading */ -module_init(tlan_probe); -module_exit(tlan_exit); - - /************************************************************** - * TLan_EisaProbe - * - * Returns: 0 on success, 1 otherwise - * - * Parms: None - * - * - * This functions probes for EISA devices and calls - * TLan_probe1 when one is found. - * - *************************************************************/ - -static void __init TLan_EisaProbe (void) -{ - long ioaddr; - int rc = -ENODEV; - int irq; - u16 device_id; - - if (!EISA_bus) { - TLAN_DBG(TLAN_DEBUG_PROBE, "No EISA bus present\n"); - return; - } - - /* Loop through all slots of the EISA bus */ - for (ioaddr = 0x1000; ioaddr < 0x9000; ioaddr += 0x1000) { - - TLAN_DBG(TLAN_DEBUG_PROBE,"EISA_ID 0x%4x: 0x%4x\n", (int) ioaddr + 0xC80, inw(ioaddr + EISA_ID)); - TLAN_DBG(TLAN_DEBUG_PROBE,"EISA_ID 0x%4x: 0x%4x\n", (int) ioaddr + 0xC82, inw(ioaddr + EISA_ID2)); - - TLAN_DBG(TLAN_DEBUG_PROBE, "Probing for EISA adapter at IO: 0x%4x : ", - (int) ioaddr); - if (request_region(ioaddr, 0x10, TLanSignature) == NULL) - goto out; - - if (inw(ioaddr + EISA_ID) != 0x110E) { - release_region(ioaddr, 0x10); - goto out; - } - - device_id = inw(ioaddr + EISA_ID2); - if (device_id != 0x20F1 && device_id != 0x40F1) { - release_region (ioaddr, 0x10); - goto out; - } - - if (inb(ioaddr + EISA_CR) != 0x1) { /* Check if adapter is enabled */ - release_region (ioaddr, 0x10); - goto out2; - } - - if (debug == 0x10) - printk("Found one\n"); - - /* Get irq from board */ - switch (inb(ioaddr + 0xCC0)) { - case(0x10): - irq=5; - break; - case(0x20): - irq=9; - break; - case(0x40): - irq=10; - break; - case(0x80): - irq=11; - break; - default: - goto out; - } - - - /* Setup the newly found eisa adapter */ - rc = TLan_probe1( NULL, ioaddr, irq, - 12, NULL); - continue; - - out: - if (debug == 0x10) - printk("None found\n"); - continue; - - out2: if (debug == 0x10) - printk("Card found but it is not enabled, skipping\n"); - continue; - - } - -} /* TLan_EisaProbe */ - - - - /*************************************************************** - * TLan_Init - * - * Returns: - * 0 on success, error code otherwise. - * Parms: - * dev The structure of the device to be - * init'ed. - * - * This function completes the initialization of the - * device structure and driver. It reserves the IO - * addresses, allocates memory for the lists and bounce - * buffers, retrieves the MAC address from the eeprom - * and assignes the device's methods. - * - **************************************************************/ - -static int TLan_Init( struct net_device *dev ) -{ - int dma_size; - int err; - int i; - TLanPrivateInfo *priv; - - priv = dev->priv; - - if (!priv->is_eisa) /* EISA devices have already requested IO */ - if (!request_region( dev->base_addr, 0x10, TLanSignature )) { - printk(KERN_ERR "TLAN: %s: IO port region 0x%lx size 0x%x in use.\n", - dev->name, - dev->base_addr, - 0x10 ); - return -EIO; - } - - if ( bbuf ) { - dma_size = ( TLAN_NUM_RX_LISTS + TLAN_NUM_TX_LISTS ) - * ( sizeof(TLanList) + TLAN_MAX_FRAME_SIZE ); - } else { - dma_size = ( TLAN_NUM_RX_LISTS + TLAN_NUM_TX_LISTS ) - * ( sizeof(TLanList) ); - } - priv->dmaStorage = kmalloc(dma_size, GFP_KERNEL | GFP_DMA); - if ( priv->dmaStorage == NULL ) { - printk(KERN_ERR "TLAN: Could not allocate lists and buffers for %s.\n", - dev->name ); - release_region( dev->base_addr, 0x10 ); - return -ENOMEM; - } - memset( priv->dmaStorage, 0, dma_size ); - priv->rxList = (TLanList *) - ( ( ( (u32) priv->dmaStorage ) + 7 ) & 0xFFFFFFF8 ); - priv->txList = priv->rxList + TLAN_NUM_RX_LISTS; - if ( bbuf ) { - priv->rxBuffer = (u8 *) ( priv->txList + TLAN_NUM_TX_LISTS ); - priv->txBuffer = priv->rxBuffer - + ( TLAN_NUM_RX_LISTS * TLAN_MAX_FRAME_SIZE ); - } - - err = 0; - for ( i = 0; i < 6 ; i++ ) - err |= TLan_EeReadByte( dev, - (u8) priv->adapter->addrOfs + i, - (u8 *) &dev->dev_addr[i] ); - if ( err ) { - printk(KERN_ERR "TLAN: %s: Error reading MAC from eeprom: %d\n", - dev->name, - err ); - } - dev->addr_len = 6; - - /* Device methods */ - dev->open = &TLan_Open; - dev->hard_start_xmit = &TLan_StartTx; - dev->stop = &TLan_Close; - dev->get_stats = &TLan_GetStats; - dev->set_multicast_list = &TLan_SetMulticastList; - dev->do_ioctl = &TLan_ioctl; - dev->tx_timeout = &TLan_tx_timeout; - dev->watchdog_timeo = TX_TIMEOUT; - - return 0; - -} /* TLan_Init */ - - /*************************************************************** - * TLan_Open - * - * Returns: - * 0 on success, error code otherwise. - * Parms: - * dev Structure of device to be opened. - * - * This routine puts the driver and TLAN adapter in a - * state where it is ready to send and receive packets. - * It allocates the IRQ, resets and brings the adapter - * out of reset, and allows interrupts. It also delays - * the startup for autonegotiation or sends a Rx GO - * command to the adapter, as appropriate. - * - **************************************************************/ - -static int TLan_Open( struct net_device *dev ) -{ - TLanPrivateInfo *priv = dev->priv; - int err; - - priv->tlanRev = TLan_DioRead8( dev->base_addr, TLAN_DEF_REVISION ); - err = request_irq( dev->irq, TLan_HandleInterrupt, SA_SHIRQ, TLanSignature, dev ); - - if ( err ) { - printk(KERN_ERR "TLAN: Cannot open %s because IRQ %d is already in use.\n", dev->name, dev->irq ); - return err; - } - - init_timer(&priv->timer); - netif_start_queue(dev); - - /* NOTE: It might not be necessary to read the stats before a - reset if you don't care what the values are. - */ - TLan_ResetLists( dev ); - TLan_ReadAndClearStats( dev, TLAN_IGNORE ); - TLan_ResetAdapter( dev ); - - TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Opened. TLAN Chip Rev: %x\n", dev->name, priv->tlanRev ); - - return 0; - -} /* TLan_Open */ - - /************************************************************** - * TLan_ioctl - * - * Returns: - * 0 on success, error code otherwise - * Params: - * dev structure of device to receive ioctl. - * - * rq ifreq structure to hold userspace data. - * - * cmd ioctl command. - * - * - *************************************************************/ - -static int TLan_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) -{ - TLanPrivateInfo *priv = dev->priv; - struct mii_ioctl_data *data = (struct mii_ioctl_data *)&rq->ifr_data; - u32 phy = priv->phy[priv->phyNum]; - - if (!priv->phyOnline) - return -EAGAIN; - - switch(cmd) { - case SIOCGMIIPHY: /* Get address of MII PHY in use. */ - case SIOCDEVPRIVATE: /* for binary compat, remove in 2.5 */ - data->phy_id = phy; - - case SIOCGMIIREG: /* Read MII PHY register. */ - case SIOCDEVPRIVATE+1: /* for binary compat, remove in 2.5 */ - TLan_MiiReadReg(dev, data->phy_id & 0x1f, data->reg_num & 0x1f, &data->val_out); - return 0; - - - case SIOCSMIIREG: /* Write MII PHY register. */ - case SIOCDEVPRIVATE+2: /* for binary compat, remove in 2.5 */ - if (!capable(CAP_NET_ADMIN)) - return -EPERM; - TLan_MiiWriteReg(dev, data->phy_id & 0x1f, data->reg_num & 0x1f, data->val_in); - return 0; - default: - return -EOPNOTSUPP; - } -} /* tlan_ioctl */ - - /*************************************************************** - * TLan_tx_timeout - * - * Returns: nothing - * - * Params: - * dev structure of device which timed out - * during transmit. - * - **************************************************************/ - -static void TLan_tx_timeout(struct net_device *dev) -{ - - TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Transmit timed out.\n", dev->name); - - /* Ok so we timed out, lets see what we can do about it...*/ - TLan_FreeLists( dev ); - TLan_ResetLists( dev ); - TLan_ReadAndClearStats( dev, TLAN_IGNORE ); - TLan_ResetAdapter( dev ); - dev->trans_start = jiffies; - netif_wake_queue( dev ); - -} - - - /*************************************************************** - * TLan_StartTx - * - * Returns: - * 0 on success, non-zero on failure. - * Parms: - * skb A pointer to the sk_buff containing the - * frame to be sent. - * dev The device to send the data on. - * - * This function adds a frame to the Tx list to be sent - * ASAP. First it verifies that the adapter is ready and - * there is room in the queue. Then it sets up the next - * available list, copies the frame to the corresponding - * buffer. If the adapter Tx channel is idle, it gives - * the adapter a Tx Go command on the list, otherwise it - * sets the forward address of the previous list to point - * to this one. Then it frees the sk_buff. - * - **************************************************************/ - -static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev ) -{ - TLanPrivateInfo *priv = dev->priv; - TLanList *tail_list; - u8 *tail_buffer; - int pad; - unsigned long flags; - - if ( ! priv->phyOnline ) { - TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: %s PHY is not ready\n", dev->name ); - dev_kfree_skb_any(skb); - return 0; - } - - tail_list = priv->txList + priv->txTail; - - if ( tail_list->cStat != TLAN_CSTAT_UNUSED ) { - TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: %s is busy (Head=%d Tail=%d)\n", dev->name, priv->txHead, priv->txTail ); - netif_stop_queue(dev); - priv->txBusyCount++; - return 1; - } - - tail_list->forward = 0; - - if ( bbuf ) { - tail_buffer = priv->txBuffer + ( priv->txTail * TLAN_MAX_FRAME_SIZE ); - memcpy( tail_buffer, skb->data, skb->len ); - } else { - tail_list->buffer[0].address = virt_to_bus( skb->data ); - tail_list->buffer[9].address = (u32) skb; - } - - pad = TLAN_MIN_FRAME_SIZE - skb->len; - - if ( pad > 0 ) { - tail_list->frameSize = (u16) skb->len + pad; - tail_list->buffer[0].count = (u32) skb->len; - tail_list->buffer[1].count = TLAN_LAST_BUFFER | (u32) pad; - tail_list->buffer[1].address = virt_to_bus( TLanPadBuffer ); - } else { - tail_list->frameSize = (u16) skb->len; - tail_list->buffer[0].count = TLAN_LAST_BUFFER | (u32) skb->len; - tail_list->buffer[1].count = 0; - tail_list->buffer[1].address = 0; - } - - spin_lock_irqsave(&priv->lock, flags); - tail_list->cStat = TLAN_CSTAT_READY; - if ( ! priv->txInProgress ) { - priv->txInProgress = 1; - TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: Starting TX on buffer %d\n", priv->txTail ); - outl( virt_to_bus( tail_list ), dev->base_addr + TLAN_CH_PARM ); - outl( TLAN_HC_GO, dev->base_addr + TLAN_HOST_CMD ); - } else { - TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: Adding buffer %d to TX channel\n", priv->txTail ); - if ( priv->txTail == 0 ) { - ( priv->txList + ( TLAN_NUM_TX_LISTS - 1 ) )->forward = virt_to_bus( tail_list ); - } else { - ( priv->txList + ( priv->txTail - 1 ) )->forward = virt_to_bus( tail_list ); - } - } - spin_unlock_irqrestore(&priv->lock, flags); - - CIRC_INC( priv->txTail, TLAN_NUM_TX_LISTS ); - - if ( bbuf ) - dev_kfree_skb_any(skb); - - dev->trans_start = jiffies; - return 0; - -} /* TLan_StartTx */ - - /*************************************************************** - * TLan_HandleInterrupt - * - * Returns: - * Nothing - * Parms: - * irq The line on which the interrupt - * occurred. - * dev_id A pointer to the device assigned to - * this irq line. - * regs ??? - * - * This function handles an interrupt generated by its - * assigned TLAN adapter. The function deactivates - * interrupts on its adapter, records the type of - * interrupt, executes the appropriate subhandler, and - * acknowdges the interrupt to the adapter (thus - * re-enabling adapter interrupts. - * - **************************************************************/ - -static void TLan_HandleInterrupt(int irq, void *dev_id, struct pt_regs *regs) -{ - u32 ack; - struct net_device *dev; - u32 host_cmd; - u16 host_int; - int type; - TLanPrivateInfo *priv; - - dev = dev_id; - priv = dev->priv; - - spin_lock(&priv->lock); - - host_int = inw( dev->base_addr + TLAN_HOST_INT ); - outw( host_int, dev->base_addr + TLAN_HOST_INT ); - - type = ( host_int & TLAN_HI_IT_MASK ) >> 2; - - ack = TLanIntVector[type]( dev, host_int ); - - if ( ack ) { - host_cmd = TLAN_HC_ACK | ack | ( type << 18 ); - outl( host_cmd, dev->base_addr + TLAN_HOST_CMD ); - } - - spin_unlock(&priv->lock); - -} /* TLan_HandleInterrupts */ - - /*************************************************************** - * TLan_Close - * - * Returns: - * An error code. - * Parms: - * dev The device structure of the device to - * close. - * - * This function shuts down the adapter. It records any - * stats, puts the adapter into reset state, deactivates - * its time as needed, and frees the irq it is using. - * - **************************************************************/ - -static int TLan_Close(struct net_device *dev) -{ - TLanPrivateInfo *priv = dev->priv; - - netif_stop_queue(dev); - priv->neg_be_verbose = 0; - - TLan_ReadAndClearStats( dev, TLAN_RECORD ); - outl( TLAN_HC_AD_RST, dev->base_addr + TLAN_HOST_CMD ); - if ( priv->timer.function != NULL ) { - del_timer_sync( &priv->timer ); - priv->timer.function = NULL; - } - - free_irq( dev->irq, dev ); - TLan_FreeLists( dev ); - TLAN_DBG( TLAN_DEBUG_GNRL, "Device %s closed.\n", dev->name ); - - return 0; - -} /* TLan_Close */ - - /*************************************************************** - * TLan_GetStats - * - * Returns: - * A pointer to the device's statistics structure. - * Parms: - * dev The device structure to return the - * stats for. - * - * This function updates the devices statistics by reading - * the TLAN chip's onboard registers. Then it returns the - * address of the statistics structure. - * - **************************************************************/ - -static struct net_device_stats *TLan_GetStats( struct net_device *dev ) -{ - TLanPrivateInfo *priv = dev->priv; - int i; - - /* Should only read stats if open ? */ - TLan_ReadAndClearStats( dev, TLAN_RECORD ); - - TLAN_DBG( TLAN_DEBUG_RX, "RECEIVE: %s EOC count = %d\n", dev->name, priv->rxEocCount ); - TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: %s Busy count = %d\n", dev->name, priv->txBusyCount ); - if ( debug & TLAN_DEBUG_GNRL ) { - TLan_PrintDio( dev->base_addr ); - TLan_PhyPrint( dev ); - } - if ( debug & TLAN_DEBUG_LIST ) { - for ( i = 0; i < TLAN_NUM_RX_LISTS; i++ ) - TLan_PrintList( priv->rxList + i, "RX", i ); - for ( i = 0; i < TLAN_NUM_TX_LISTS; i++ ) - TLan_PrintList( priv->txList + i, "TX", i ); - } - - return ( &( (TLanPrivateInfo *) dev->priv )->stats ); - -} /* TLan_GetStats */ - - /*************************************************************** - * TLan_SetMulticastList - * - * Returns: - * Nothing - * Parms: - * dev The device structure to set the - * multicast list for. - * - * This function sets the TLAN adaptor to various receive - * modes. If the IFF_PROMISC flag is set, promiscuous - * mode is acitviated. Otherwise, promiscuous mode is - * turned off. If the IFF_ALLMULTI flag is set, then - * the hash table is set to receive all group addresses. - * Otherwise, the first three multicast addresses are - * stored in AREG_1-3, and the rest are selected via the - * hash table, as necessary. - * - **************************************************************/ - -static void TLan_SetMulticastList( struct net_device *dev ) -{ - struct dev_mc_list *dmi = dev->mc_list; - u32 hash1 = 0; - u32 hash2 = 0; - int i; - u32 offset; - u8 tmp; - - if ( dev->flags & IFF_PROMISC ) { - tmp = TLan_DioRead8( dev->base_addr, TLAN_NET_CMD ); - TLan_DioWrite8( dev->base_addr, TLAN_NET_CMD, tmp | TLAN_NET_CMD_CAF ); - } else { - tmp = TLan_DioRead8( dev->base_addr, TLAN_NET_CMD ); - TLan_DioWrite8( dev->base_addr, TLAN_NET_CMD, tmp & ~TLAN_NET_CMD_CAF ); - if ( dev->flags & IFF_ALLMULTI ) { - for ( i = 0; i < 3; i++ ) - TLan_SetMac( dev, i + 1, NULL ); - TLan_DioWrite32( dev->base_addr, TLAN_HASH_1, 0xFFFFFFFF ); - TLan_DioWrite32( dev->base_addr, TLAN_HASH_2, 0xFFFFFFFF ); - } else { - for ( i = 0; i < dev->mc_count; i++ ) { - if ( i < 3 ) { - TLan_SetMac( dev, i + 1, (char *) &dmi->dmi_addr ); - } else { - offset = TLan_HashFunc( (u8 *) &dmi->dmi_addr ); - if ( offset < 32 ) - hash1 |= ( 1 << offset ); - else - hash2 |= ( 1 << ( offset - 32 ) ); - } - dmi = dmi->next; - } - for ( ; i < 3; i++ ) - TLan_SetMac( dev, i + 1, NULL ); - TLan_DioWrite32( dev->base_addr, TLAN_HASH_1, hash1 ); - TLan_DioWrite32( dev->base_addr, TLAN_HASH_2, hash2 ); - } - } - -} /* TLan_SetMulticastList */ - -/***************************************************************************** -****************************************************************************** - - ThunderLAN Driver Interrupt Vectors and Table - - Please see Chap. 4, "Interrupt Handling" of the "ThunderLAN - Programmer's Guide" for more informations on handling interrupts - generated by TLAN based adapters. - -****************************************************************************** -*****************************************************************************/ - - /*************************************************************** - * TLan_HandleInvalid - * - * Returns: - * 0 - * Parms: - * dev Device assigned the IRQ that was - * raised. - * host_int The contents of the HOST_INT - * port. - * - * This function handles invalid interrupts. This should - * never happen unless some other adapter is trying to use - * the IRQ line assigned to the device. - * - **************************************************************/ - -u32 TLan_HandleInvalid( struct net_device *dev, u16 host_int ) -{ - /* printk( "TLAN: Invalid interrupt on %s.\n", dev->name ); */ - return 0; - -} /* TLan_HandleInvalid */ - - /*************************************************************** - * TLan_HandleTxEOF - * - * Returns: - * 1 - * Parms: - * dev Device assigned the IRQ that was - * raised. - * host_int The contents of the HOST_INT - * port. - * - * This function handles Tx EOF interrupts which are raised - * by the adapter when it has completed sending the - * contents of a buffer. If detemines which list/buffer - * was completed and resets it. If the buffer was the last - * in the channel (EOC), then the function checks to see if - * another buffer is ready to send, and if so, sends a Tx - * Go command. Finally, the driver activates/continues the - * activity LED. - * - **************************************************************/ - -u32 TLan_HandleTxEOF( struct net_device *dev, u16 host_int ) -{ - TLanPrivateInfo *priv = dev->priv; - int eoc = 0; - TLanList *head_list; - u32 ack = 0; - u16 tmpCStat; - - TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: Handling TX EOF (Head=%d Tail=%d)\n", priv->txHead, priv->txTail ); - head_list = priv->txList + priv->txHead; - - while (((tmpCStat = head_list->cStat ) & TLAN_CSTAT_FRM_CMP) && (ack < 255)) { - ack++; - if ( ! bbuf ) { - dev_kfree_skb_any( (struct sk_buff *) head_list->buffer[9].address ); - head_list->buffer[9].address = 0; - } - - if ( tmpCStat & TLAN_CSTAT_EOC ) - eoc = 1; - - priv->stats.tx_bytes += head_list->frameSize; - - head_list->cStat = TLAN_CSTAT_UNUSED; - netif_start_queue(dev); - CIRC_INC( priv->txHead, TLAN_NUM_TX_LISTS ); - head_list = priv->txList + priv->txHead; - } - - if (!ack) - printk(KERN_INFO "TLAN: Received interrupt for uncompleted TX frame.\n"); - - if ( eoc ) { - TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: Handling TX EOC (Head=%d Tail=%d)\n", priv->txHead, priv->txTail ); - head_list = priv->txList + priv->txHead; - if ( ( head_list->cStat & TLAN_CSTAT_READY ) == TLAN_CSTAT_READY ) { - outl( virt_to_bus( head_list ), dev->base_addr + TLAN_CH_PARM ); - ack |= TLAN_HC_GO; - } else { - priv->txInProgress = 0; - } - } - - if ( priv->adapter->flags & TLAN_ADAPTER_ACTIVITY_LED ) { - TLan_DioWrite8( dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK | TLAN_LED_ACT ); - if ( priv->timer.function == NULL ) { - priv->timer.function = &TLan_Timer; - priv->timer.data = (unsigned long) dev; - priv->timer.expires = jiffies + TLAN_TIMER_ACT_DELAY; - priv->timerSetAt = jiffies; - priv->timerType = TLAN_TIMER_ACTIVITY; - add_timer(&priv->timer); - } else if ( priv->timerType == TLAN_TIMER_ACTIVITY ) { - priv->timerSetAt = jiffies; - } - } - - return ack; - -} /* TLan_HandleTxEOF */ - - /*************************************************************** - * TLan_HandleStatOverflow - * - * Returns: - * 1 - * Parms: - * dev Device assigned the IRQ that was - * raised. - * host_int The contents of the HOST_INT - * port. - * - * This function handles the Statistics Overflow interrupt - * which means that one or more of the TLAN statistics - * registers has reached 1/2 capacity and needs to be read. - * - **************************************************************/ - -u32 TLan_HandleStatOverflow( struct net_device *dev, u16 host_int ) -{ - TLan_ReadAndClearStats( dev, TLAN_RECORD ); - - return 1; - -} /* TLan_HandleStatOverflow */ - - /*************************************************************** - * TLan_HandleRxEOF - * - * Returns: - * 1 - * Parms: - * dev Device assigned the IRQ that was - * raised. - * host_int The contents of the HOST_INT - * port. - * - * This function handles the Rx EOF interrupt which - * indicates a frame has been received by the adapter from - * the net and the frame has been transferred to memory. - * The function determines the bounce buffer the frame has - * been loaded into, creates a new sk_buff big enough to - * hold the frame, and sends it to protocol stack. It - * then resets the used buffer and appends it to the end - * of the list. If the frame was the last in the Rx - * channel (EOC), the function restarts the receive channel - * by sending an Rx Go command to the adapter. Then it - * activates/continues the activity LED. - * - **************************************************************/ - -u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int ) -{ - TLanPrivateInfo *priv = dev->priv; - u32 ack = 0; - int eoc = 0; - u8 *head_buffer; - TLanList *head_list; - struct sk_buff *skb; - TLanList *tail_list; - void *t; - u32 frameSize; - u16 tmpCStat; - - TLAN_DBG( TLAN_DEBUG_RX, "RECEIVE: Handling RX EOF (Head=%d Tail=%d)\n", priv->rxHead, priv->rxTail ); - head_list = priv->rxList + priv->rxHead; - - while (((tmpCStat = head_list->cStat) & TLAN_CSTAT_FRM_CMP) && (ack < 255)) { - frameSize = head_list->frameSize; - ack++; - if (tmpCStat & TLAN_CSTAT_EOC) - eoc = 1; - - if (bbuf) { - skb = dev_alloc_skb(frameSize + 7); - if (skb == NULL) - printk(KERN_INFO "TLAN: Couldn't allocate memory for received data.\n"); - else { - head_buffer = priv->rxBuffer + (priv->rxHead * TLAN_MAX_FRAME_SIZE); - skb->dev = dev; - skb_reserve(skb, 2); - t = (void *) skb_put(skb, frameSize); - - priv->stats.rx_bytes += head_list->frameSize; - - memcpy( t, head_buffer, frameSize ); - skb->protocol = eth_type_trans( skb, dev ); - netif_rx( skb ); - } - } else { - struct sk_buff *new_skb; - - /* - * I changed the algorithm here. What we now do - * is allocate the new frame. If this fails we - * simply recycle the frame. - */ - - new_skb = dev_alloc_skb( TLAN_MAX_FRAME_SIZE + 7 ); - - if ( new_skb != NULL ) { - /* If this ever happened it would be a problem */ - /* not any more - ac */ - skb = (struct sk_buff *) head_list->buffer[9].address; - skb_trim( skb, frameSize ); - - priv->stats.rx_bytes += frameSize; - - skb->protocol = eth_type_trans( skb, dev ); - netif_rx( skb ); - - new_skb->dev = dev; - skb_reserve( new_skb, 2 ); - t = (void *) skb_put( new_skb, TLAN_MAX_FRAME_SIZE ); - head_list->buffer[0].address = virt_to_bus( t ); - head_list->buffer[8].address = (u32) t; - head_list->buffer[9].address = (u32) new_skb; - } else - printk(KERN_WARNING "TLAN: Couldn't allocate memory for received data.\n" ); - } - - head_list->forward = 0; - head_list->cStat = 0; - tail_list = priv->rxList + priv->rxTail; - tail_list->forward = virt_to_bus( head_list ); - - CIRC_INC( priv->rxHead, TLAN_NUM_RX_LISTS ); - CIRC_INC( priv->rxTail, TLAN_NUM_RX_LISTS ); - head_list = priv->rxList + priv->rxHead; - } - - if (!ack) - printk(KERN_INFO "TLAN: Received interrupt for uncompleted RX frame.\n"); - - - if ( eoc ) { - TLAN_DBG( TLAN_DEBUG_RX, "RECEIVE: Handling RX EOC (Head=%d Tail=%d)\n", priv->rxHead, priv->rxTail ); - head_list = priv->rxList + priv->rxHead; - outl( virt_to_bus( head_list ), dev->base_addr + TLAN_CH_PARM ); - ack |= TLAN_HC_GO | TLAN_HC_RT; - priv->rxEocCount++; - } - - if ( priv->adapter->flags & TLAN_ADAPTER_ACTIVITY_LED ) { - TLan_DioWrite8( dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK | TLAN_LED_ACT ); - if ( priv->timer.function == NULL ) { - priv->timer.function = &TLan_Timer; - priv->timer.data = (unsigned long) dev; - priv->timer.expires = jiffies + TLAN_TIMER_ACT_DELAY; - priv->timerSetAt = jiffies; - priv->timerType = TLAN_TIMER_ACTIVITY; - add_timer(&priv->timer); - } else if ( priv->timerType == TLAN_TIMER_ACTIVITY ) { - priv->timerSetAt = jiffies; - } - } - - dev->last_rx = jiffies; - - return ack; - -} /* TLan_HandleRxEOF */ - - /*************************************************************** - * TLan_HandleDummy - * - * Returns: - * 1 - * Parms: - * dev Device assigned the IRQ that was - * raised. - * host_int The contents of the HOST_INT - * port. - * - * This function handles the Dummy interrupt, which is - * raised whenever a test interrupt is generated by setting - * the Req_Int bit of HOST_CMD to 1. - * - **************************************************************/ - -u32 TLan_HandleDummy( struct net_device *dev, u16 host_int ) -{ - printk( "TLAN: Test interrupt on %s.\n", dev->name ); - return 1; - -} /* TLan_HandleDummy */ - - /*************************************************************** - * TLan_HandleTxEOC - * - * Returns: - * 1 - * Parms: - * dev Device assigned the IRQ that was - * raised. - * host_int The contents of the HOST_INT - * port. - * - * This driver is structured to determine EOC occurances by - * reading the CSTAT member of the list structure. Tx EOC - * interrupts are disabled via the DIO INTDIS register. - * However, TLAN chips before revision 3.0 didn't have this - * functionality, so process EOC events if this is the - * case. - * - **************************************************************/ - -u32 TLan_HandleTxEOC( struct net_device *dev, u16 host_int ) -{ - TLanPrivateInfo *priv = dev->priv; - TLanList *head_list; - u32 ack = 1; - - host_int = 0; - if ( priv->tlanRev < 0x30 ) { - TLAN_DBG( TLAN_DEBUG_TX, "TRANSMIT: Handling TX EOC (Head=%d Tail=%d) -- IRQ\n", priv->txHead, priv->txTail ); - head_list = priv->txList + priv->txHead; - if ( ( head_list->cStat & TLAN_CSTAT_READY ) == TLAN_CSTAT_READY ) { - netif_stop_queue(dev); - outl( virt_to_bus( head_list ), dev->base_addr + TLAN_CH_PARM ); - ack |= TLAN_HC_GO; - } else { - priv->txInProgress = 0; - } - } - - return ack; - -} /* TLan_HandleTxEOC */ - - /*************************************************************** - * TLan_HandleStatusCheck - * - * Returns: - * 0 if Adapter check, 1 if Network Status check. - * Parms: - * dev Device assigned the IRQ that was - * raised. - * host_int The contents of the HOST_INT - * port. - * - * This function handles Adapter Check/Network Status - * interrupts generated by the adapter. It checks the - * vector in the HOST_INT register to determine if it is - * an Adapter Check interrupt. If so, it resets the - * adapter. Otherwise it clears the status registers - * and services the PHY. - * - **************************************************************/ - -u32 TLan_HandleStatusCheck( struct net_device *dev, u16 host_int ) -{ - TLanPrivateInfo *priv = dev->priv; - u32 ack; - u32 error; - u8 net_sts; - u32 phy; - u16 tlphy_ctl; - u16 tlphy_sts; - - ack = 1; - if ( host_int & TLAN_HI_IV_MASK ) { - netif_stop_queue( dev ); - error = inl( dev->base_addr + TLAN_CH_PARM ); - printk( "TLAN: %s: Adaptor Error = 0x%x\n", dev->name, error ); - TLan_ReadAndClearStats( dev, TLAN_RECORD ); - outl( TLAN_HC_AD_RST, dev->base_addr + TLAN_HOST_CMD ); - - queue_task(&priv->tlan_tqueue, &tq_immediate); - mark_bh(IMMEDIATE_BH); - - netif_wake_queue(dev); - ack = 0; - } else { - TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Status Check\n", dev->name ); - phy = priv->phy[priv->phyNum]; - - net_sts = TLan_DioRead8( dev->base_addr, TLAN_NET_STS ); - if ( net_sts ) { - TLan_DioWrite8( dev->base_addr, TLAN_NET_STS, net_sts ); - TLAN_DBG( TLAN_DEBUG_GNRL, "%s: Net_Sts = %x\n", dev->name, (unsigned) net_sts ); - } - if ( ( net_sts & TLAN_NET_STS_MIRQ ) && ( priv->phyNum == 0 ) ) { - TLan_MiiReadReg( dev, phy, TLAN_TLPHY_STS, &tlphy_sts ); - TLan_MiiReadReg( dev, phy, TLAN_TLPHY_CTL, &tlphy_ctl ); - if ( ! ( tlphy_sts & TLAN_TS_POLOK ) && ! ( tlphy_ctl & TLAN_TC_SWAPOL ) ) { - tlphy_ctl |= TLAN_TC_SWAPOL; - TLan_MiiWriteReg( dev, phy, TLAN_TLPHY_CTL, tlphy_ctl); - } else if ( ( tlphy_sts & TLAN_TS_POLOK ) && ( tlphy_ctl & TLAN_TC_SWAPOL ) ) { - tlphy_ctl &= ~TLAN_TC_SWAPOL; - TLan_MiiWriteReg( dev, phy, TLAN_TLPHY_CTL, tlphy_ctl); - } - - if (debug) { - TLan_PhyPrint( dev ); - } - } - } - - return ack; - -} /* TLan_HandleStatusCheck */ - - /*************************************************************** - * TLan_HandleRxEOC - * - * Returns: - * 1 - * Parms: - * dev Device assigned the IRQ that was - * raised. - * host_int The contents of the HOST_INT - * port. - * - * This driver is structured to determine EOC occurances by - * reading the CSTAT member of the list structure. Rx EOC - * interrupts are disabled via the DIO INTDIS register. - * However, TLAN chips before revision 3.0 didn't have this - * CSTAT member or a INTDIS register, so if this chip is - * pre-3.0, process EOC interrupts normally. - * - **************************************************************/ - -u32 TLan_HandleRxEOC( struct net_device *dev, u16 host_int ) -{ - TLanPrivateInfo *priv = dev->priv; - TLanList *head_list; - u32 ack = 1; - - if ( priv->tlanRev < 0x30 ) { - TLAN_DBG( TLAN_DEBUG_RX, "RECEIVE: Handling RX EOC (Head=%d Tail=%d) -- IRQ\n", priv->rxHead, priv->rxTail ); - head_list = priv->rxList + priv->rxHead; - outl( virt_to_bus( head_list ), dev->base_addr + TLAN_CH_PARM ); - ack |= TLAN_HC_GO | TLAN_HC_RT; - priv->rxEocCount++; - } - - return ack; - -} /* TLan_HandleRxEOC */ - -/***************************************************************************** -****************************************************************************** - - ThunderLAN Driver Timer Function - -****************************************************************************** -*****************************************************************************/ - - /*************************************************************** - * TLan_Timer - * - * Returns: - * Nothing - * Parms: - * data A value given to add timer when - * add_timer was called. - * - * This function handles timed functionality for the - * TLAN driver. The two current timer uses are for - * delaying for autonegotionation and driving the ACT LED. - * - Autonegotiation requires being allowed about - * 2 1/2 seconds before attempting to transmit a - * packet. It would be a very bad thing to hang - * the kernel this long, so the driver doesn't - * allow transmission 'til after this time, for - * certain PHYs. It would be much nicer if all - * PHYs were interrupt-capable like the internal - * PHY. - * - The ACT LED, which shows adapter activity, is - * driven by the driver, and so must be left on - * for a short period to power up the LED so it - * can be seen. This delay can be changed by - * changing the TLAN_TIMER_ACT_DELAY in tlan.h, - * if desired. 100 ms produces a slightly - * sluggish response. - * - **************************************************************/ - -void TLan_Timer( unsigned long data ) -{ - struct net_device *dev = (struct net_device *) data; - TLanPrivateInfo *priv = dev->priv; - u32 elapsed; - unsigned long flags = 0; - - priv->timer.function = NULL; - - switch ( priv->timerType ) { -#ifdef MONITOR - case TLAN_TIMER_LINK_BEAT: - TLan_PhyMonitor( dev ); - break; -#endif - case TLAN_TIMER_PHY_PDOWN: - TLan_PhyPowerDown( dev ); - break; - case TLAN_TIMER_PHY_PUP: - TLan_PhyPowerUp( dev ); - break; - case TLAN_TIMER_PHY_RESET: - TLan_PhyReset( dev ); - break; - case TLAN_TIMER_PHY_START_LINK: - TLan_PhyStartLink( dev ); - break; - case TLAN_TIMER_PHY_FINISH_AN: - TLan_PhyFinishAutoNeg( dev ); - break; - case TLAN_TIMER_FINISH_RESET: - TLan_FinishReset( dev ); - break; - case TLAN_TIMER_ACTIVITY: - spin_lock_irqsave(&priv->lock, flags); - if ( priv->timer.function == NULL ) { - elapsed = jiffies - priv->timerSetAt; - if ( elapsed >= TLAN_TIMER_ACT_DELAY ) { - TLan_DioWrite8( dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK ); - } else { - priv->timer.function = &TLan_Timer; - priv->timer.expires = priv->timerSetAt + TLAN_TIMER_ACT_DELAY; - spin_unlock_irqrestore(&priv->lock, flags); - add_timer( &priv->timer ); - break; - } - } - spin_unlock_irqrestore(&priv->lock, flags); - break; - default: - break; - } - -} /* TLan_Timer */ - -/***************************************************************************** -****************************************************************************** - - ThunderLAN Driver Adapter Related Routines - -****************************************************************************** -*****************************************************************************/ - - /*************************************************************** - * TLan_ResetLists - * - * Returns: - * Nothing - * Parms: - * dev The device structure with the list - * stuctures to be reset. - * - * This routine sets the variables associated with managing - * the TLAN lists to their initial values. - * - **************************************************************/ - -void TLan_ResetLists( struct net_device *dev ) -{ - TLanPrivateInfo *priv = dev->priv; - int i; - TLanList *list; - struct sk_buff *skb; - void *t = NULL; - - priv->txHead = 0; - priv->txTail = 0; - for ( i = 0; i < TLAN_NUM_TX_LISTS; i++ ) { - list = priv->txList + i; - list->cStat = TLAN_CSTAT_UNUSED; - if ( bbuf ) { - list->buffer[0].address = virt_to_bus( priv->txBuffer + ( i * TLAN_MAX_FRAME_SIZE ) ); - } else { - list->buffer[0].address = 0; - } - list->buffer[2].count = 0; - list->buffer[2].address = 0; - list->buffer[9].address = 0; - } - - priv->rxHead = 0; - priv->rxTail = TLAN_NUM_RX_LISTS - 1; - for ( i = 0; i < TLAN_NUM_RX_LISTS; i++ ) { - list = priv->rxList + i; - list->cStat = TLAN_CSTAT_READY; - list->frameSize = TLAN_MAX_FRAME_SIZE; - list->buffer[0].count = TLAN_MAX_FRAME_SIZE | TLAN_LAST_BUFFER; - if ( bbuf ) { - list->buffer[0].address = virt_to_bus( priv->rxBuffer + ( i * TLAN_MAX_FRAME_SIZE ) ); - } else { - skb = dev_alloc_skb( TLAN_MAX_FRAME_SIZE + 7 ); - if ( skb == NULL ) { - printk( "TLAN: Couldn't allocate memory for received data.\n" ); - /* If this ever happened it would be a problem */ - } else { - skb->dev = dev; - skb_reserve( skb, 2 ); - t = (void *) skb_put( skb, TLAN_MAX_FRAME_SIZE ); - } - list->buffer[0].address = virt_to_bus( t ); - list->buffer[8].address = (u32) t; - list->buffer[9].address = (u32) skb; - } - list->buffer[1].count = 0; - list->buffer[1].address = 0; - if ( i < TLAN_NUM_RX_LISTS - 1 ) - list->forward = virt_to_bus( list + 1 ); - else - list->forward = 0; - } - -} /* TLan_ResetLists */ - -void TLan_FreeLists( struct net_device *dev ) -{ - TLanPrivateInfo *priv = dev->priv; - int i; - TLanList *list; - struct sk_buff *skb; - - if ( ! bbuf ) { - for ( i = 0; i < TLAN_NUM_TX_LISTS; i++ ) { - list = priv->txList + i; - skb = (struct sk_buff *) list->buffer[9].address; - if ( skb ) { - dev_kfree_skb_any( skb ); - list->buffer[9].address = 0; - } - } - - for ( i = 0; i < TLAN_NUM_RX_LISTS; i++ ) { - list = priv->rxList + i; - skb = (struct sk_buff *) list->buffer[9].address; - if ( skb ) { - dev_kfree_skb_any( skb ); - list->buffer[9].address = 0; - } - } - } - -} /* TLan_FreeLists */ - - /*************************************************************** - * TLan_PrintDio - * - * Returns: - * Nothing - * Parms: - * io_base Base IO port of the device of - * which to print DIO registers. - * - * This function prints out all the internal (DIO) - * registers of a TLAN chip. - * - **************************************************************/ - -void TLan_PrintDio( u16 io_base ) -{ - u32 data0, data1; - int i; - - printk( "TLAN: Contents of internal registers for io base 0x%04hx.\n", io_base ); - printk( "TLAN: Off. +0 +4\n" ); - for ( i = 0; i < 0x4C; i+= 8 ) { - data0 = TLan_DioRead32( io_base, i ); - data1 = TLan_DioRead32( io_base, i + 0x4 ); - printk( "TLAN: 0x%02x 0x%08x 0x%08x\n", i, data0, data1 ); - } - -} /* TLan_PrintDio */ - - /*************************************************************** - * TLan_PrintList - * - * Returns: - * Nothing - * Parms: - * list A pointer to the TLanList structure to - * be printed. - * type A string to designate type of list, - * "Rx" or "Tx". - * num The index of the list. - * - * This function prints out the contents of the list - * pointed to by the list parameter. - * - **************************************************************/ - -void TLan_PrintList( TLanList *list, char *type, int num) -{ - int i; - - printk( "TLAN: %s List %d at 0x%08x\n", type, num, (u32) list ); - printk( "TLAN: Forward = 0x%08x\n", list->forward ); - printk( "TLAN: CSTAT = 0x%04hx\n", list->cStat ); - printk( "TLAN: Frame Size = 0x%04hx\n", list->frameSize ); - /* for ( i = 0; i < 10; i++ ) { */ - for ( i = 0; i < 2; i++ ) { - printk( "TLAN: Buffer[%d].count, addr = 0x%08x, 0x%08x\n", i, list->buffer[i].count, list->buffer[i].address ); - } - -} /* TLan_PrintList */ - - /*************************************************************** - * TLan_ReadAndClearStats - * - * Returns: - * Nothing - * Parms: - * dev Pointer to device structure of adapter - * to which to read stats. - * record Flag indicating whether to add - * - * This functions reads all the internal status registers - * of the TLAN chip, which clears them as a side effect. - * It then either adds the values to the device's status - * struct, or discards them, depending on whether record - * is TLAN_RECORD (!=0) or TLAN_IGNORE (==0). - * - **************************************************************/ - -void TLan_ReadAndClearStats( struct net_device *dev, int record ) -{ - TLanPrivateInfo *priv = dev->priv; - u32 tx_good, tx_under; - u32 rx_good, rx_over; - u32 def_tx, crc, code; - u32 multi_col, single_col; - u32 excess_col, late_col, loss; - - outw( TLAN_GOOD_TX_FRMS, dev->base_addr + TLAN_DIO_ADR ); - tx_good = inb( dev->base_addr + TLAN_DIO_DATA ); - tx_good += inb( dev->base_addr + TLAN_DIO_DATA + 1 ) << 8; - tx_good += inb( dev->base_addr + TLAN_DIO_DATA + 2 ) << 16; - tx_under = inb( dev->base_addr + TLAN_DIO_DATA + 3 ); - - outw( TLAN_GOOD_RX_FRMS, dev->base_addr + TLAN_DIO_ADR ); - rx_good = inb( dev->base_addr + TLAN_DIO_DATA ); - rx_good += inb( dev->base_addr + TLAN_DIO_DATA + 1 ) << 8; - rx_good += inb( dev->base_addr + TLAN_DIO_DATA + 2 ) << 16; - rx_over = inb( dev->base_addr + TLAN_DIO_DATA + 3 ); - - outw( TLAN_DEFERRED_TX, dev->base_addr + TLAN_DIO_ADR ); - def_tx = inb( dev->base_addr + TLAN_DIO_DATA ); - def_tx += inb( dev->base_addr + TLAN_DIO_DATA + 1 ) << 8; - crc = inb( dev->base_addr + TLAN_DIO_DATA + 2 ); - code = inb( dev->base_addr + TLAN_DIO_DATA + 3 ); - - outw( TLAN_MULTICOL_FRMS, dev->base_addr + TLAN_DIO_ADR ); - multi_col = inb( dev->base_addr + TLAN_DIO_DATA ); - multi_col += inb( dev->base_addr + TLAN_DIO_DATA + 1 ) << 8; - single_col = inb( dev->base_addr + TLAN_DIO_DATA + 2 ); - single_col += inb( dev->base_addr + TLAN_DIO_DATA + 3 ) << 8; - - outw( TLAN_EXCESSCOL_FRMS, dev->base_addr + TLAN_DIO_ADR ); - excess_col = inb( dev->base_addr + TLAN_DIO_DATA ); - late_col = inb( dev->base_addr + TLAN_DIO_DATA + 1 ); - loss = inb( dev->base_addr + TLAN_DIO_DATA + 2 ); - - if ( record ) { - priv->stats.rx_packets += rx_good; - priv->stats.rx_errors += rx_over + crc + code; - priv->stats.tx_packets += tx_good; - priv->stats.tx_errors += tx_under + loss; - priv->stats.collisions += multi_col + single_col + excess_col + late_col; - - priv->stats.rx_over_errors += rx_over; - priv->stats.rx_crc_errors += crc; - priv->stats.rx_frame_errors += code; - - priv->stats.tx_aborted_errors += tx_under; - priv->stats.tx_carrier_errors += loss; - } - -} /* TLan_ReadAndClearStats */ - - /*************************************************************** - * TLan_Reset - * - * Returns: - * 0 - * Parms: - * dev Pointer to device structure of adapter - * to be reset. - * - * This function resets the adapter and it's physical - * device. See Chap. 3, pp. 9-10 of the "ThunderLAN - * Programmer's Guide" for details. The routine tries to - * implement what is detailed there, though adjustments - * have been made. - * - **************************************************************/ - -void -TLan_ResetAdapter( struct net_device *dev ) -{ - TLanPrivateInfo *priv = dev->priv; - int i; - u32 addr; - u32 data; - u8 data8; - - priv->tlanFullDuplex = FALSE; - priv->phyOnline=0; -/* 1. Assert reset bit. */ - - data = inl(dev->base_addr + TLAN_HOST_CMD); - data |= TLAN_HC_AD_RST; - outl(data, dev->base_addr + TLAN_HOST_CMD); - - udelay(1000); - -/* 2. Turn off interrupts. ( Probably isn't necessary ) */ - - data = inl(dev->base_addr + TLAN_HOST_CMD); - data |= TLAN_HC_INT_OFF; - outl(data, dev->base_addr + TLAN_HOST_CMD); - -/* 3. Clear AREGs and HASHs. */ - - for ( i = TLAN_AREG_0; i <= TLAN_HASH_2; i += 4 ) { - TLan_DioWrite32( dev->base_addr, (u16) i, 0 ); - } - -/* 4. Setup NetConfig register. */ - - data = TLAN_NET_CFG_1FRAG | TLAN_NET_CFG_1CHAN | TLAN_NET_CFG_PHY_EN; - TLan_DioWrite16( dev->base_addr, TLAN_NET_CONFIG, (u16) data ); - -/* 5. Load Ld_Tmr and Ld_Thr in HOST_CMD. */ - - outl( TLAN_HC_LD_TMR | 0x3f, dev->base_addr + TLAN_HOST_CMD ); - outl( TLAN_HC_LD_THR | 0x9, dev->base_addr + TLAN_HOST_CMD ); - -/* 6. Unreset the MII by setting NMRST (in NetSio) to 1. */ - - outw( TLAN_NET_SIO, dev->base_addr + TLAN_DIO_ADR ); - addr = dev->base_addr + TLAN_DIO_DATA + TLAN_NET_SIO; - TLan_SetBit( TLAN_NET_SIO_NMRST, addr ); - -/* 7. Setup the remaining registers. */ - - if ( priv->tlanRev >= 0x30 ) { - data8 = TLAN_ID_TX_EOC | TLAN_ID_RX_EOC; - TLan_DioWrite8( dev->base_addr, TLAN_INT_DIS, data8 ); - } - TLan_PhyDetect( dev ); - data = TLAN_NET_CFG_1FRAG | TLAN_NET_CFG_1CHAN; - - if ( priv->adapter->flags & TLAN_ADAPTER_BIT_RATE_PHY ) { - data |= TLAN_NET_CFG_BIT; - if ( priv->aui == 1 ) { - TLan_DioWrite8( dev->base_addr, TLAN_ACOMMIT, 0x0a ); - } else if ( priv->duplex == TLAN_DUPLEX_FULL ) { - TLan_DioWrite8( dev->base_addr, TLAN_ACOMMIT, 0x00 ); - priv->tlanFullDuplex = TRUE; - } else { - TLan_DioWrite8( dev->base_addr, TLAN_ACOMMIT, 0x08 ); - } - } - - if ( priv->phyNum == 0 ) { - data |= TLAN_NET_CFG_PHY_EN; - } - TLan_DioWrite16( dev->base_addr, TLAN_NET_CONFIG, (u16) data ); - - if ( priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY ) { - TLan_FinishReset( dev ); - } else { - TLan_PhyPowerDown( dev ); - } - -} /* TLan_ResetAdapter */ - -void -TLan_FinishReset( struct net_device *dev ) -{ - TLanPrivateInfo *priv = dev->priv; - u8 data; - u32 phy; - u8 sio; - u16 status; - u16 partner; - u16 tlphy_ctl; - u16 tlphy_par; - u16 tlphy_id1, tlphy_id2; - int i; - - phy = priv->phy[priv->phyNum]; - - data = TLAN_NET_CMD_NRESET | TLAN_NET_CMD_NWRAP; - if ( priv->tlanFullDuplex ) { - data |= TLAN_NET_CMD_DUPLEX; - } - TLan_DioWrite8( dev->base_addr, TLAN_NET_CMD, data ); - data = TLAN_NET_MASK_MASK4 | TLAN_NET_MASK_MASK5; - if ( priv->phyNum == 0 ) { - data |= TLAN_NET_MASK_MASK7; - } - TLan_DioWrite8( dev->base_addr, TLAN_NET_MASK, data ); - TLan_DioWrite16( dev->base_addr, TLAN_MAX_RX, ((1536)+7)&~7 ); - TLan_MiiReadReg( dev, phy, MII_GEN_ID_HI, &tlphy_id1 ); - TLan_MiiReadReg( dev, phy, MII_GEN_ID_LO, &tlphy_id2 ); - - if ( ( priv->adapter->flags & TLAN_ADAPTER_UNMANAGED_PHY ) || ( priv->aui ) ) { - status = MII_GS_LINK; - printk( "TLAN: %s: Link forced.\n", dev->name ); - } else { - TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status ); - udelay( 1000 ); - TLan_MiiReadReg( dev, phy, MII_GEN_STS, &status ); - if ( (status & MII_GS_LINK) && /* We only support link info on Nat.Sem. PHY's */ - (tlphy_id1 == NAT_SEM_ID1) && - (tlphy_id2 == NAT_SEM_ID2) ) { - TLan_MiiReadReg( dev, phy, MII_AN_LPA, &partner ); - TLan_MiiReadReg( dev, phy, TLAN_TLPHY_PAR, &tlphy_par ); - - printk( "TLAN: %s: Link active with ", dev->name ); - if (!(tlphy_par & TLAN_PHY_AN_EN_STAT)) { - printk( "forced 10%sMbps %s-Duplex\n", - tlphy_par & TLAN_PHY_SPEED_100 ? "" : "0", - tlphy_par & TLAN_PHY_DUPLEX_FULL ? "Full" : "Half"); - } else { - printk( "AutoNegotiation enabled, at 10%sMbps %s-Duplex\n", - tlphy_par & TLAN_PHY_SPEED_100 ? "" : "0", - tlphy_par & TLAN_PHY_DUPLEX_FULL ? "Full" : "Half"); - printk("TLAN: Partner capability: "); - for (i = 5; i <= 10; i++) - if (partner & (1<base_addr, TLAN_LED_REG, TLAN_LED_LINK ); -#ifdef MONITOR - /* We have link beat..for now anyway */ - priv->link = 1; - /*Enabling link beat monitoring */ - TLan_SetTimer( dev, (10*HZ), TLAN_TIMER_LINK_BEAT ); -#endif - } else if (status & MII_GS_LINK) { - printk( "TLAN: %s: Link active\n", dev->name ); - TLan_DioWrite8( dev->base_addr, TLAN_LED_REG, TLAN_LED_LINK ); - } - } - - if ( priv->phyNum == 0 ) { - TLan_MiiReadReg( dev, phy, TLAN_TLPHY_CTL, &tlphy_ctl ); - tlphy_ctl |= TLAN_TC_INTEN; - TLan_MiiWriteReg( dev, phy, TLAN_TLPHY_CTL, tlphy_ctl ); - sio = TLan_DioRead8( dev->base_addr, TLAN_NET_SIO ); - sio |= TLAN_NET_SIO_MINTEN; - TLan_DioWrite8( dev->base_addr, TLAN_NET_SIO, sio ); - } - - if ( status & MII_GS_LINK ) { - TLan_SetMac( dev, 0, dev->dev_addr ); - priv->phyOnline = 1; - outb( ( TLAN_HC_INT_ON >> 8 ), dev->base_addr + TLAN_HOST_CMD + 1 ); - if ( debug >= 1 && debug != TLAN_DEBUG_PROBE ) { - outb( ( TLAN_HC_REQ_INT >> 8 ), dev->base_addr + TLAN_HOST_CMD + 1 ); - } - outl( virt_to_bus( priv->rxList ), dev->base_addr + TLAN_CH_PARM ); - outl( TLAN_HC_GO | TLAN_HC_RT, dev->base_addr + TLAN_HOST_CMD ); - } else { - printk( "TLAN: %s: Link inactive, will retry in 10 secs...\n", dev->name ); - TLan_SetTimer( dev, (10*HZ), TLAN_TIMER_FINISH_RESET ); - return; - } - -} /* TLan_FinishReset */ - - /*************************************************************** - * TLan_SetMac - * - * Returns: - * Nothing - * Parms: - * dev Pointer to device structure of adapter - * on which to change the AREG. - * areg The AREG to set the address in (0 - 3). - * mac A pointer to an array of chars. Each - * element stores one byte of the address. - * IE, it isn't in ascii. - * - * This function transfers a MAC address to one of the - * TLAN AREGs (address registers). The TLAN chip locks - * the register on writing to offset 0 and unlocks the - * register after writing to offset 5. If NULL is passed - * in mac, then the AREG is filled with 0's. - * - **************************************************************/ - -void TLan_SetMac( struct net_device *dev, int areg, char *mac ) -{ - int i; - - areg *= 6; - - if ( mac != NULL ) { - for ( i = 0; i < 6; i++ ) - TLan_DioWrite8( dev->base_addr, TLAN_AREG_0 + areg + i, mac[i] ); - } else { - for ( i = 0; i < 6; i++ ) - TLan_DioWrite8( dev->base_addr, TLAN_AREG_0 + areg + i, 0 ); - } - -} /* TLan_SetMac */ - -#endif diff --git a/netboot/tulip.c b/netboot/tulip.c deleted file mode 100644 index b784ea7bd..000000000 --- a/netboot/tulip.c +++ /dev/null @@ -1,1989 +0,0 @@ -/* -*- Mode:C; c-basic-offset:4; -*- */ - -/* - Tulip and clone Etherboot Driver - - By Marty Connor (mdc@thinguin.org) - Copyright (C) 2001 Entity Cyber, Inc. - - This software may be used and distributed according to the terms - of the GNU Public License, incorporated herein by reference. - - As of April 2001 this driver should support most tulip cards that - the Linux tulip driver supports because Donald Becker's Linux media - detection code is now included. - - Based on Ken Yap's Tulip Etherboot Driver and Donald Becker's - Linux Tulip Driver. Supports N-Way speed auto-configuration on - MX98715, MX98715A and MX98725. Support inexpensive PCI 10/100 cards - based on the Macronix MX987x5 chip, such as the SOHOware Fast - model SFA110A, and the LinkSYS model LNE100TX. The NetGear - model FA310X, based on the LC82C168 chip is supported. - The TRENDnet TE100-PCIA NIC which uses a genuine Intel 21143-PD - chipset is supported. Also, Davicom DM9102's. - - Documentation and source code used: - Source for Etherboot driver at - http://etherboot.sourceforge.net/ - MX98715A Data Sheet and MX98715A Application Note - on http://www.macronix.com/ (PDF format files) - Source for Linux tulip driver at - http://cesdis.gsfc.nasa.gov/linux/drivers/tulip.html - - Adapted by Ken Yap from - FreeBSD netboot DEC 21143 driver - Author: David Sharp - date: Nov/98 - - Some code fragments were taken from verious places, Ken Yap's - etherboot, FreeBSD's if_de.c, and various Linux related files. - DEC's manuals for the 21143 and SROM format were very helpful. - The Linux de driver development page has a number of links to - useful related information. Have a look at: - ftp://cesdis.gsfc.nasa.gov/pub/linux/drivers/tulip-devel.html -*/ - -/*********************************************************************/ -/* Revision History */ -/*********************************************************************/ - -/* - 11 Apr 2001 mdc [patch to etherboot 4.7.24] - Major rewrite to include Linux tulip driver media detection - code. This driver should support a lot more cards now. - 16 Jul 2000 mdc 0.75b11 - Added support for ADMtek 0985 Centaur-P, a "Comet" tulip clone - which is used on the LinkSYS LNE100TX v4.x cards. We already - support LNE100TX v2.0 cards, which use a different controller. - 04 Jul 2000 jam ? - Added test of status after receiving a packet from the card. - Also uncommented the tulip_disable routine. Stray packets - seemed to be causing problems. - 27 Apr 2000 njl ? - 29 Feb 2000 mdc 0.75b7 - Increased reset delay to 3 seconds because Macronix cards seem to - need more reset time before card comes back to a usable state. - 26 Feb 2000 mdc 0.75b6 - Added a 1 second delay after initializing the transmitter because - some cards seem to need the time or they drop the first packet - transmitted. - 23 Feb 2000 mdc 0.75b5 - removed udelay code and used currticks() for more reliable delay - code in reset pause and sanity timeouts. Added function prototypes - and TX debugging code. - 21 Feb 2000 mdc patch to Etherboot 4.4.3 - Incorporated patches from Bob Edwards and Paul Mackerras of - Linuxcare's OZLabs to deal with inefficiencies in tulip_transmit - and udelay. We now wait for packet transmission to complete - (or sanity timeout). - 04 Feb 2000 Robert.Edwards@anu.edu.au patch to Etherboot 4.4.2 - patch to tulip.c that implements the automatic selection of the MII - interface on cards using the Intel/DEC 21143 reference design, in - particular, the TRENDnet TE100-PCIA NIC which uses a genuine Intel - 21143-PD chipset. - 11 Jan 2000 mdc 0.75b4 - Added support for NetGear FA310TX card based on the LC82C168 - chip. This should also support Lite-On LC82C168 boards. - Added simple MII support. Re-arranged code to better modularize - initializations. - 04 Dec 1999 mdc 0.75b3 - Added preliminary support for LNE100TX PCI cards. Should work for - PNIC2 cards. No MII support, but single interface (RJ45) tulip - cards seem to not care. - 03 Dec 1999 mdc 0.75b2 - Renamed from mx987x5 to tulip, merged in original tulip init code - from tulip.c to support other tulip compatible cards. - 02 Dec 1999 mdc 0.75b1 - Released Beta MX987x5 Driver for code review and testing to netboot - and thinguin mailing lists. -*/ - - -/*********************************************************************/ -/* Declarations */ -/*********************************************************************/ - -#include "etherboot.h" -#include "nic.h" -#include "pci.h" -#include "cards.h" - -/* User settable parameters */ - -#undef TULIP_DEBUG -#undef TULIP_DEBUG_WHERE -static int tulip_debug = 2; /* 1 normal messages, 0 quiet .. 7 verbose. */ - -#define TX_TIME_OUT 2*TICKS_PER_SEC - -typedef unsigned char u8; -typedef signed char s8; -typedef unsigned short u16; -typedef signed short s16; -typedef unsigned int u32; -typedef signed int s32; - -/* helpful macros if on a big_endian machine for changing byte order. - not strictly needed on Intel */ -#define le16_to_cpu(val) (val) -#define cpu_to_le32(val) (val) -#define get_unaligned(ptr) (*(ptr)) -#define put_unaligned(val, ptr) ((void)( *(ptr) = (val) )) -#define get_u16(ptr) (*(u16 *)(ptr)) -#define virt_to_bus(x) ((unsigned long)x) -#define virt_to_le32desc(addr) virt_to_bus(addr) - -#define TULIP_IOTYPE PCI_USES_MASTER | PCI_USES_IO | PCI_ADDR0 -#define TULIP_SIZE 0x80 - -/* This is a mysterious value that can be written to CSR11 in the 21040 (only) - to support a pre-NWay full-duplex signaling mechanism using short frames. - No one knows what it should be, but if left at its default value some - 10base2(!) packets trigger a full-duplex-request interrupt. */ -#define FULL_DUPLEX_MAGIC 0x6969 - -static const int csr0 = 0x01A00000 | 0x8000; - -/* The possible media types that can be set in options[] are: */ -#define MEDIA_MASK 31 -static const char * const medianame[32] = { - "10baseT", "10base2", "AUI", "100baseTx", - "10baseT-FDX", "100baseTx-FDX", "100baseT4", "100baseFx", - "100baseFx-FDX", "MII 10baseT", "MII 10baseT-FDX", "MII", - "10baseT(forced)", "MII 100baseTx", "MII 100baseTx-FDX", "MII 100baseT4", - "MII 100baseFx-HDX", "MII 100baseFx-FDX", "Home-PNA 1Mbps", "Invalid-19", -}; - -/* This much match tulip_tbl[]! Note 21142 == 21143. */ -enum tulip_chips { - DC21040=0, DC21041=1, DC21140=2, DC21142=3, DC21143=3, - LC82C168, MX98713, MX98715, MX98725, AX88141, AX88140, PNIC2, COMET, - COMPEX9881, I21145, XIRCOM -}; - -enum pci_id_flags_bits { - /* Set PCI command register bits before calling probe1(). */ - PCI_USES_IO=1, PCI_USES_MEM=2, PCI_USES_MASTER=4, - /* Read and map the single following PCI BAR. */ - PCI_ADDR0=0<<4, PCI_ADDR1=1<<4, PCI_ADDR2=2<<4, PCI_ADDR3=3<<4, - PCI_ADDR_64BITS=0x100, PCI_NO_ACPI_WAKE=0x200, PCI_NO_MIN_LATENCY=0x400, - PCI_UNUSED_IRQ=0x800, -}; - -struct pci_id_info { - char *name; - struct match_info { - u32 pci, pci_mask, subsystem, subsystem_mask; - u32 revision, revision_mask; /* Only 8 bits. */ - } id; - enum pci_id_flags_bits pci_flags; - int io_size; /* Needed for I/O region check or ioremap(). */ - int drv_flags; /* Driver use, intended as capability flags. */ -}; - -static struct pci_id_info pci_id_tbl[] = { - { "Digital DC21040 Tulip", { 0x00021011, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, 0x80, DC21040 }, - { "Digital DC21041 Tulip", { 0x00141011, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, 0x80, DC21041 }, - { "Digital DS21140A Tulip", { 0x00091011, 0xffffffff, 0,0, 0x20,0xf0 }, - TULIP_IOTYPE, 0x80, DC21140 }, - { "Digital DS21140 Tulip", { 0x00091011, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, 0x80, DC21140 }, - { "Digital DS21143 Tulip", { 0x00191011, 0xffffffff, 0,0, 65,0xff }, - TULIP_IOTYPE, TULIP_SIZE, DC21142 }, - { "Digital DS21142 Tulip", { 0x00191011, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, TULIP_SIZE, DC21142 }, - { "Kingston KNE110tx (PNIC)", { 0x000211AD, 0xffffffff, 0xf0022646, 0xffffffff, 0, 0 }, - TULIP_IOTYPE, 256, LC82C168 }, - { "Lite-On 82c168 PNIC", { 0x000211AD, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, 256, LC82C168 }, - { "Macronix 98713 PMAC", { 0x051210d9, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, 256, MX98713 }, - { "Macronix 98715 PMAC", { 0x053110d9, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, 256, MX98715 }, - { "Macronix 98725 PMAC", { 0x053110d9, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, 256, MX98725 }, - { "ASIX AX88141", { 0x1400125B, 0xffffffff, 0,0, 0x10, 0xf0 }, - TULIP_IOTYPE, 128, AX88141 }, - { "ASIX AX88140", { 0x1400125B, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, 128, AX88140 }, - { "Lite-On LC82C115 PNIC-II", { 0xc11511AD, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, 256, PNIC2 }, - { "ADMtek AN981 Comet", { 0x09811317, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, 256, COMET }, - { "ADMtek Centaur-P", { 0x09851317, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, 256, COMET }, - { "ADMtek Centaur-C", { 0x19851317, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, 256, COMET }, - { "Compex RL100-TX", { 0x988111F6, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, 128, COMPEX9881 }, - { "Intel 21145 Tulip", { 0x00398086, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, 128, I21145 }, - { "Xircom Tulip clone", { 0x0003115d, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, 128, XIRCOM }, - { "Davicom DM9102", { 0x91021282, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, 0x80, DC21140 }, - { "Davicom DM9100", { 0x91001282, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, 0x80, DC21140 }, - { "Macronix mxic-98715 (EN1217)", { 0x12171113, 0xffffffff, 0, 0, 0, 0 }, - TULIP_IOTYPE, 256, MX98715 }, - { 0, { 0, 0, 0, 0, 0, 0 }, 0, 0, 0 }, -}; - -enum tbl_flag { - HAS_MII=1, HAS_MEDIA_TABLE=2, CSR12_IN_SROM=4, ALWAYS_CHECK_MII=8, - HAS_PWRDWN=0x10, MC_HASH_ONLY=0x20, /* Hash-only multicast filter. */ - HAS_PNICNWAY=0x80, HAS_NWAY=0x40, /* Uses internal NWay xcvr. */ - HAS_INTR_MITIGATION=0x100, IS_ASIX=0x200, HAS_8023X=0x400, -}; - -/* Note: this table must match enum tulip_chips above. */ -static struct tulip_chip_table { - char *chip_name; - int flags; -} tulip_tbl[] = { - { "Digital DC21040 Tulip", 0}, - { "Digital DC21041 Tulip", HAS_MEDIA_TABLE | HAS_NWAY }, - { "Digital DS21140 Tulip", HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM }, - { "Digital DS21143 Tulip", HAS_MII | HAS_MEDIA_TABLE | ALWAYS_CHECK_MII - | HAS_PWRDWN | HAS_NWAY | HAS_INTR_MITIGATION }, - { "Lite-On 82c168 PNIC", HAS_MII | HAS_PNICNWAY }, - { "Macronix 98713 PMAC", HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM }, - { "Macronix 98715 PMAC", HAS_MEDIA_TABLE }, - { "Macronix 98725 PMAC", HAS_MEDIA_TABLE }, - { "ASIX AX88140", HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM - | MC_HASH_ONLY | IS_ASIX }, - { "ASIX AX88141", HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM | MC_HASH_ONLY - | IS_ASIX }, - { "Lite-On PNIC-II", HAS_MII | HAS_NWAY | HAS_8023X }, - { "ADMtek Comet", MC_HASH_ONLY }, - { "Compex 9881 PMAC", HAS_MII | HAS_MEDIA_TABLE | CSR12_IN_SROM }, - { "Intel DS21145 Tulip", HAS_MII | HAS_MEDIA_TABLE | ALWAYS_CHECK_MII - | HAS_PWRDWN | HAS_NWAY }, - { "Xircom tulip work-alike", HAS_MII | HAS_MEDIA_TABLE | ALWAYS_CHECK_MII - | HAS_PWRDWN | HAS_NWAY }, - { 0, 0 }, -}; - -/* A full-duplex map for media types. */ -enum MediaIs { - MediaIsFD = 1, MediaAlwaysFD=2, MediaIsMII=4, MediaIsFx=8, - MediaIs100=16}; - -static const char media_cap[32] = -{0,0,0,16, 3,19,16,24, 27,4,7,5, 0,20,23,20, 20,31,0,0, }; -static u8 t21040_csr13[] = {2,0x0C,8,4, 4,0,0,0, 0,0,0,0, 4,0,0,0}; - -/* 21041 transceiver register settings: 10-T, 10-2, AUI, 10-T, 10T-FD */ -static u16 t21041_csr13[] = { 0xEF01, 0xEF09, 0xEF09, 0xEF01, 0xEF09, }; -static u16 t21041_csr14[] = { 0xFFFF, 0xF7FD, 0xF7FD, 0x7F3F, 0x7F3D, }; -static u16 t21041_csr15[] = { 0x0008, 0x0006, 0x000E, 0x0008, 0x0008, }; - -static u16 t21142_csr13[] = { 0x0001, 0x0009, 0x0009, 0x0000, 0x0001, }; -static u16 t21142_csr14[] = { 0xFFFF, 0x0705, 0x0705, 0x0000, 0x7F3D, }; -static u16 t21142_csr15[] = { 0x0008, 0x0006, 0x000E, 0x0008, 0x0008, }; - -/* Offsets to the Command and Status Registers, "CSRs". All accesses - must be longword instructions and quadword aligned. */ -enum tulip_offsets { - CSR0=0, CSR1=0x08, CSR2=0x10, CSR3=0x18, CSR4=0x20, CSR5=0x28, - CSR6=0x30, CSR7=0x38, CSR8=0x40, CSR9=0x48, CSR10=0x50, CSR11=0x58, - CSR12=0x60, CSR13=0x68, CSR14=0x70, CSR15=0x78, CSR16=0x80, CSR20=0xA0 -}; - -/* The bits in the CSR5 status registers, mostly interrupt sources. */ -enum status_bits { - TimerInt=0x800, TPLnkFail=0x1000, TPLnkPass=0x10, - NormalIntr=0x10000, AbnormalIntr=0x8000, - RxJabber=0x200, RxDied=0x100, RxNoBuf=0x80, RxIntr=0x40, - TxFIFOUnderflow=0x20, TxJabber=0x08, TxNoBuf=0x04, TxDied=0x02, TxIntr=0x01, -}; - -enum desc_status_bits { - DescOwnded=0x80000000, RxDescFatalErr=0x8000, RxWholePkt=0x0300, -}; - -struct medialeaf { - u8 type; - u8 media; - unsigned char *leafdata; -}; - -struct mediatable { - u16 defaultmedia; - u8 leafcount, csr12dir; /* General purpose pin directions. */ - unsigned has_mii:1, has_nonmii:1, has_reset:6; - u32 csr15dir, csr15val; /* 21143 NWay setting. */ - struct medialeaf mleaf[0]; -}; - -struct mediainfo { - struct mediainfo *next; - int info_type; - int index; - unsigned char *info; -}; - -/* EEPROM Address width definitions */ -#define EEPROM_ADDRLEN 6 -#define EEPROM_SIZE 128 /* 2 << EEPROM_ADDRLEN */ - -/* The EEPROM commands include the alway-set leading bit. */ -#define EE_WRITE_CMD (5 << addr_len) -#define EE_READ_CMD (6 << addr_len) -#define EE_ERASE_CMD (7 << addr_len) - -/* EEPROM_Ctrl bits. */ -#define EE_SHIFT_CLK 0x02 /* EEPROM shift clock. */ -#define EE_CS 0x01 /* EEPROM chip select. */ -#define EE_DATA_WRITE 0x04 /* EEPROM chip data in. */ -#define EE_WRITE_0 0x01 -#define EE_WRITE_1 0x05 -#define EE_DATA_READ 0x08 /* EEPROM chip data out. */ -#define EE_ENB (0x4800 | EE_CS) - -/* Delay between EEPROM clock transitions. Even at 33Mhz current PCI - implementations don't overrun the EEPROM clock. We add a bus - turn-around to insure that this remains true. */ -#define eeprom_delay() inl(ee_addr) - -/* Size of transmit and receive buffers */ -#define BUFLEN 1536 - -/* Ring-wrap flag in length field, use for last ring entry. - 0x01000000 means chain on buffer2 address, - 0x02000000 means use the ring start address in CSR2/3. - Note: Some work-alike chips do not function correctly in chained mode. - The ASIX chip works only in chained mode. - Thus we indicate ring mode, but always write the 'next' field for - chained mode as well. */ -#define DESC_RING_WRAP 0x02000000 - -/* transmit and receive descriptor format */ -struct tulip_rx_desc { - volatile u32 status; - u32 length; - u32 buffer1, buffer2; -}; - -struct tulip_tx_desc { - volatile u32 status; - u32 length; - u32 buffer1, buffer2; -}; - -/*********************************************************************/ -/* Global Storage */ -/*********************************************************************/ - -static u32 ioaddr; - -/* Note: transmit and receive buffers must be longword aligned and - longword divisable */ - -#define TX_RING_SIZE 2 -static struct tulip_tx_desc tx_ring[TX_RING_SIZE] __attribute__ ((aligned(4))); - -#ifdef USE_LOWMEM_BUFFER -#define txb ((char *)0x10000 - BUFLEN) -#else -static unsigned char txb[BUFLEN] __attribute__ ((aligned(4))); -#endif - -#define RX_RING_SIZE 4 -static struct tulip_rx_desc rx_ring[RX_RING_SIZE] __attribute__ ((aligned(4))); - -#ifdef USE_LOWMEM_BUFFER -#define rxb ((char *)0x10000 - RX_RING_SIZE * BUFLEN - BUFLEN) -#else -static unsigned char rxb[RX_RING_SIZE * BUFLEN] __attribute__ ((aligned(4))); -#endif - -static struct tulip_private { - int cur_rx; - int chip_id; /* index into tulip_tbl[] */ - int pci_id_idx; /* index into pci_id_tbl[] */ - int revision; - int flags; - unsigned short vendor_id; /* PCI card vendor code */ - unsigned short dev_id; /* PCI card device code */ - unsigned char ehdr[ETH_HLEN]; /* buffer for ethernet header */ - const char *nic_name; - unsigned int csr0, csr6; /* Current CSR0, CSR6 settings. */ - unsigned int if_port; - unsigned int full_duplex; /* Full-duplex operation requested. */ - unsigned int full_duplex_lock; - unsigned int medialock; /* Do not sense media type. */ - unsigned int mediasense; /* Media sensing in progress. */ - unsigned int nway, nwayset; /* 21143 internal NWay. */ - unsigned int default_port; - unsigned char eeprom[EEPROM_SIZE]; /* Serial EEPROM contents. */ - u8 media_table_storage[(sizeof(struct mediatable) + 32*sizeof(struct medialeaf))]; - u16 sym_advertise, mii_advertise; /* NWay to-advertise. */ - struct mediatable *mtable; - u16 lpar; /* 21143 Link partner ability. */ - u16 advertising[4]; /* MII advertise, from SROM table. */ - signed char phys[4], mii_cnt; /* MII device addresses. */ - int cur_index; /* Current media index. */ - int saved_if_port; -} tpx; - -static struct tulip_private *tp; - -/* Known cards that have old-style EEPROMs. - Writing this table is described at - http://cesdis.gsfc.nasa.gov/linux/drivers/tulip-drivers/tulip-media.html */ -static struct fixups { - char *name; - unsigned char addr0, addr1, addr2; - u16 newtable[32]; /* Max length below. */ -} eeprom_fixups[] = { - {"Asante", 0, 0, 0x94, {0x1e00, 0x0000, 0x0800, 0x0100, 0x018c, - 0x0000, 0x0000, 0xe078, 0x0001, 0x0050, 0x0018 }}, - {"SMC9332DST", 0, 0, 0xC0, { 0x1e00, 0x0000, 0x0800, 0x041f, - 0x0000, 0x009E, /* 10baseT */ - 0x0004, 0x009E, /* 10baseT-FD */ - 0x0903, 0x006D, /* 100baseTx */ - 0x0905, 0x006D, /* 100baseTx-FD */ }}, - {"Cogent EM100", 0, 0, 0x92, { 0x1e00, 0x0000, 0x0800, 0x063f, - 0x0107, 0x8021, /* 100baseFx */ - 0x0108, 0x8021, /* 100baseFx-FD */ - 0x0100, 0x009E, /* 10baseT */ - 0x0104, 0x009E, /* 10baseT-FD */ - 0x0103, 0x006D, /* 100baseTx */ - 0x0105, 0x006D, /* 100baseTx-FD */ }}, - {"Maxtech NX-110", 0, 0, 0xE8, { 0x1e00, 0x0000, 0x0800, 0x0513, - 0x1001, 0x009E, /* 10base2, CSR12 0x10*/ - 0x0000, 0x009E, /* 10baseT */ - 0x0004, 0x009E, /* 10baseT-FD */ - 0x0303, 0x006D, /* 100baseTx, CSR12 0x03 */ - 0x0305, 0x006D, /* 100baseTx-FD CSR12 0x03 */}}, - {"Accton EN1207", 0, 0, 0xE8, { 0x1e00, 0x0000, 0x0800, 0x051F, - 0x1B01, 0x0000, /* 10base2, CSR12 0x1B */ - 0x0B00, 0x009E, /* 10baseT, CSR12 0x0B */ - 0x0B04, 0x009E, /* 10baseT-FD,CSR12 0x0B */ - 0x1B03, 0x006D, /* 100baseTx, CSR12 0x1B */ - 0x1B05, 0x006D, /* 100baseTx-FD CSR12 0x1B */ - }}, - {0, 0, 0, 0, {}}}; - -static const char * block_name[] = {"21140 non-MII", "21140 MII PHY", - "21142 Serial PHY", "21142 MII PHY", "21143 SYM PHY", "21143 reset method"}; - - -/*********************************************************************/ -/* Function Prototypes */ -/*********************************************************************/ -static int mdio_read(struct nic *nic, int phy_id, int location); -static void mdio_write(struct nic *nic, int phy_id, int location, int value); -static int read_eeprom(unsigned long ioaddr, int location, int addr_len); -static void parse_eeprom(struct nic *nic); -struct nic *tulip_probe(struct nic *nic, unsigned short *io_addrs, - struct pci_device *pci); -static void tulip_init_ring(struct nic *nic); -static void tulip_reset(struct nic *nic); -static void tulip_transmit(struct nic *nic, const char *d, unsigned int t, - unsigned int s, const char *p); -static int tulip_poll(struct nic *nic); -static void tulip_disable(struct nic *nic); -static void nway_start(struct nic *nic); -static void pnic_do_nway(struct nic *nic); -static void select_media(struct nic *nic, int startup); -static void init_media(struct nic *nic); -static void start_link(struct nic *nic); -static int tulip_check_duplex(struct nic *nic); - -static void tulip_wait(unsigned int nticks); - -#ifdef TULIP_DEBUG_WHERE -static void whereami(const char *str); -#endif - -#ifdef TULIP_DEBUG -static void tulip_more(void); -#endif - - -/*********************************************************************/ -/* Utility Routines */ -/*********************************************************************/ - -#ifdef TULIP_DEBUG_WHERE -static void whereami (const char *str) -{ - printf("%s: %s\n", tp->nic_name, str); - /* sleep(2); */ -} -#endif - -#ifdef TULIP_DEBUG -static void tulip_more(void) -{ - printf("\n\n-- more --"); - while (!iskey()) - /* wait */; - getchar(); - printf("\n\n"); -} -#endif /* TULIP_DEBUG */ - -static void tulip_wait(unsigned int nticks) -{ - unsigned int to = currticks() + nticks; - while (currticks() < to) - /* wait */ ; -} - - -/*********************************************************************/ -/* Media Descriptor Code */ -/*********************************************************************/ - -/* MII transceiver control section. - Read and write the MII registers using software-generated serial - MDIO protocol. See the MII specifications or DP83840A data sheet - for details. */ - -/* The maximum data clock rate is 2.5 Mhz. The minimum timing is usually - met by back-to-back PCI I/O cycles, but we insert a delay to avoid - "overclocking" issues or future 66Mhz PCI. */ -#define mdio_delay() inl(mdio_addr) - -/* Read and write the MII registers using software-generated serial - MDIO protocol. It is just different enough from the EEPROM protocol - to not share code. The maxium data clock rate is 2.5 Mhz. */ -#define MDIO_SHIFT_CLK 0x10000 -#define MDIO_DATA_WRITE0 0x00000 -#define MDIO_DATA_WRITE1 0x20000 -#define MDIO_ENB 0x00000 /* Ignore the 0x02000 databook setting. */ -#define MDIO_ENB_IN 0x40000 -#define MDIO_DATA_READ 0x80000 - -/* MII transceiver control section. - Read and write the MII registers using software-generated serial - MDIO protocol. See the MII specifications or DP83840A data sheet - for details. */ - -int mdio_read(struct nic *nic, int phy_id, int location) -{ - int i; - int read_cmd = (0xf6 << 10) | (phy_id << 5) | location; - int retval = 0; - long mdio_addr = ioaddr + CSR9; - -#ifdef TULIP_DEBUG_WHERE - whereami("mdio_read\n"); -#endif - - if (tp->chip_id == LC82C168) { - int i = 1000; - outl(0x60020000 + (phy_id<<23) + (location<<18), ioaddr + 0xA0); - inl(ioaddr + 0xA0); - inl(ioaddr + 0xA0); - while (--i > 0) - if ( ! ((retval = inl(ioaddr + 0xA0)) & 0x80000000)) - return retval & 0xffff; - return 0xffff; - } - - if (tp->chip_id == COMET) { - if (phy_id == 1) { - if (location < 7) - return inl(ioaddr + 0xB4 + (location<<2)); - else if (location == 17) - return inl(ioaddr + 0xD0); - else if (location >= 29 && location <= 31) - return inl(ioaddr + 0xD4 + ((location-29)<<2)); - } - return 0xffff; - } - - /* Establish sync by sending at least 32 logic ones. */ - for (i = 32; i >= 0; i--) { - outl(MDIO_ENB | MDIO_DATA_WRITE1, mdio_addr); - mdio_delay(); - outl(MDIO_ENB | MDIO_DATA_WRITE1 | MDIO_SHIFT_CLK, mdio_addr); - mdio_delay(); - } - /* Shift the read command bits out. */ - for (i = 15; i >= 0; i--) { - int dataval = (read_cmd & (1 << i)) ? MDIO_DATA_WRITE1 : 0; - - outl(MDIO_ENB | dataval, mdio_addr); - mdio_delay(); - outl(MDIO_ENB | dataval | MDIO_SHIFT_CLK, mdio_addr); - mdio_delay(); - } - /* Read the two transition, 16 data, and wire-idle bits. */ - for (i = 19; i > 0; i--) { - outl(MDIO_ENB_IN, mdio_addr); - mdio_delay(); - retval = (retval << 1) | ((inl(mdio_addr) & MDIO_DATA_READ) ? 1 : 0); - outl(MDIO_ENB_IN | MDIO_SHIFT_CLK, mdio_addr); - mdio_delay(); - } - return (retval>>1) & 0xffff; -} - -void mdio_write(struct nic *nic, int phy_id, int location, int value) -{ - int i; - int cmd = (0x5002 << 16) | (phy_id << 23) | (location<<18) | value; - long mdio_addr = ioaddr + CSR9; - -#ifdef TULIP_DEBUG_WHERE - whereami("mdio_write\n"); -#endif - - if (tp->chip_id == LC82C168) { - int i = 1000; - outl(cmd, ioaddr + 0xA0); - do - if ( ! (inl(ioaddr + 0xA0) & 0x80000000)) - break; - while (--i > 0); - return; - } - - if (tp->chip_id == COMET) { - if (phy_id != 1) - return; - if (location < 7) - outl(value, ioaddr + 0xB4 + (location<<2)); - else if (location == 17) - outl(value, ioaddr + 0xD0); - else if (location >= 29 && location <= 31) - outl(value, ioaddr + 0xD4 + ((location-29)<<2)); - return; - } - - /* Establish sync by sending 32 logic ones. */ - for (i = 32; i >= 0; i--) { - outl(MDIO_ENB | MDIO_DATA_WRITE1, mdio_addr); - mdio_delay(); - outl(MDIO_ENB | MDIO_DATA_WRITE1 | MDIO_SHIFT_CLK, mdio_addr); - mdio_delay(); - } - /* Shift the command bits out. */ - for (i = 31; i >= 0; i--) { - int dataval = (cmd & (1 << i)) ? MDIO_DATA_WRITE1 : 0; - outl(MDIO_ENB | dataval, mdio_addr); - mdio_delay(); - outl(MDIO_ENB | dataval | MDIO_SHIFT_CLK, mdio_addr); - mdio_delay(); - } - /* Clear out extra bits. */ - for (i = 2; i > 0; i--) { - outl(MDIO_ENB_IN, mdio_addr); - mdio_delay(); - outl(MDIO_ENB_IN | MDIO_SHIFT_CLK, mdio_addr); - mdio_delay(); - } -} - - -/*********************************************************************/ -/* EEPROM Reading Code */ -/*********************************************************************/ -/* EEPROM routines adapted from the Linux Tulip Code */ -/* Reading a serial EEPROM is a "bit" grungy, but we work our way - through:->. -*/ -static int read_eeprom(unsigned long ioaddr, int location, int addr_len) -{ - int i; - unsigned short retval = 0; - long ee_addr = ioaddr + CSR9; - int read_cmd = location | EE_READ_CMD; - -#ifdef TULIP_DEBUG_WHERE - whereami("read_eeprom\n"); -#endif - - outl(EE_ENB & ~EE_CS, ee_addr); - outl(EE_ENB, ee_addr); - - /* Shift the read command bits out. */ - for (i = 4 + addr_len; i >= 0; i--) { - short dataval = (read_cmd & (1 << i)) ? EE_DATA_WRITE : 0; - outl(EE_ENB | dataval, ee_addr); - eeprom_delay(); - outl(EE_ENB | dataval | EE_SHIFT_CLK, ee_addr); - eeprom_delay(); - } - outl(EE_ENB, ee_addr); - - for (i = 16; i > 0; i--) { - outl(EE_ENB | EE_SHIFT_CLK, ee_addr); - eeprom_delay(); - retval = (retval << 1) | ((inl(ee_addr) & EE_DATA_READ) ? 1 : 0); - outl(EE_ENB, ee_addr); - eeprom_delay(); - } - - /* Terminate the EEPROM access. */ - outl(EE_ENB & ~EE_CS, ee_addr); - return retval; -} - - -/*********************************************************************/ -/* EEPROM Parsing Code */ -/*********************************************************************/ -static void parse_eeprom(struct nic *nic) -{ - unsigned char *p, *ee_data = tp->eeprom; - int new_advertise = 0; - int i; - -#ifdef TULIP_DEBUG_WHERE - whereami("parse_eeprom\n"); -#endif - - tp->mtable = 0; - /* Detect an old-style (SA only) EEPROM layout: - memcmp(ee_data, ee_data+16, 8). */ - for (i = 0; i < 8; i ++) - if (ee_data[i] != ee_data[16+i]) - break; - if (i >= 8) { - /* Do a fix-up based on the vendor half of the station address. */ - for (i = 0; eeprom_fixups[i].name; i++) { - if (nic->node_addr[0] == eeprom_fixups[i].addr0 - && nic->node_addr[1] == eeprom_fixups[i].addr1 - && nic->node_addr[2] == eeprom_fixups[i].addr2) { - if (nic->node_addr[2] == 0xE8 && ee_data[0x1a] == 0x55) - i++; /* An Accton EN1207, not an outlaw Maxtech. */ - memcpy(ee_data + 26, eeprom_fixups[i].newtable, - sizeof(eeprom_fixups[i].newtable)); -#ifdef TULIP_DEBUG - printf("%s: Old format EEPROM on '%s' board.\n%s: Using substitute media control info.\n", - tp->nic_name, eeprom_fixups[i].name, tp->nic_name); -#endif - break; - } - } - if (eeprom_fixups[i].name == NULL) { /* No fixup found. */ -#ifdef TULIP_DEBUG - printf("%s: Old style EEPROM with no media selection information.\n", - tp->nic_name); -#endif - return; - } - } - - if (ee_data[19] > 1) { -#ifdef TULIP_DEBUG - printf("%s: Multiport cards (%d ports) may not work correctly.\n", - tp->nic_name, ee_data[19]); -#endif - } - - p = (void *)ee_data + ee_data[27]; - - if (ee_data[27] == 0) { /* No valid media table. */ -#ifdef TULIP_DEBUG - if (tulip_debug > 1) { - printf("%s: No Valid Media Table. ee_data[27] = %hhX\n", - tp->nic_name, ee_data[27]); - } -#endif - } else if (tp->chip_id == DC21041) { - int media = get_u16(p); - int count = p[2]; - p += 3; - - printf("%s: 21041 Media table, default media %hX (%s).\n", - tp->nic_name, media, - media & 0x0800 ? "Autosense" : medianame[media & 15]); - for (i = 0; i < count; i++) { - unsigned char media_block = *p++; - int media_code = media_block & MEDIA_MASK; - if (media_block & 0x40) - p += 6; - switch(media_code) { - case 0: new_advertise |= 0x0020; break; - case 4: new_advertise |= 0x0040; break; - } - printf("%s: 21041 media #%d, %s.\n", - tp->nic_name, media_code, medianame[media_code]); - } - } else { - unsigned char csr12dir = 0; - int count; - struct mediatable *mtable; - u16 media = get_u16(p); - - p += 2; - if (tp->flags & CSR12_IN_SROM) - csr12dir = *p++; - count = *p++; - - tp->mtable = mtable = (struct mediatable *)&tp->media_table_storage[0]; - - mtable->defaultmedia = media; - mtable->leafcount = count; - mtable->csr12dir = csr12dir; - mtable->has_nonmii = mtable->has_mii = mtable->has_reset = 0; - mtable->csr15dir = mtable->csr15val = 0; - - printf("%s: EEPROM default media type %s.\n", tp->nic_name, - media & 0x0800 ? "Autosense" : medianame[media & MEDIA_MASK]); - - for (i = 0; i < count; i++) { - struct medialeaf *leaf = &mtable->mleaf[i]; - - if ((p[0] & 0x80) == 0) { /* 21140 Compact block. */ - leaf->type = 0; - leaf->media = p[0] & 0x3f; - leaf->leafdata = p; - if ((p[2] & 0x61) == 0x01) /* Bogus, but Znyx boards do it. */ - mtable->has_mii = 1; - p += 4; - } else { - switch(leaf->type = p[1]) { - case 5: - mtable->has_reset = i; - leaf->media = p[2] & 0x0f; - break; - case 1: case 3: - mtable->has_mii = 1; - leaf->media = 11; - break; - case 2: - if ((p[2] & 0x3f) == 0) { - u32 base15 = (p[2] & 0x40) ? get_u16(p + 7) : 0x0008; - u16 *p1 = (u16 *)(p + (p[2] & 0x40 ? 9 : 3)); - mtable->csr15dir = (get_unaligned(p1 + 0)<<16) + base15; - mtable->csr15val = (get_unaligned(p1 + 1)<<16) + base15; - } - /* Fall through. */ - case 0: case 4: - mtable->has_nonmii = 1; - leaf->media = p[2] & MEDIA_MASK; - switch (leaf->media) { - case 0: new_advertise |= 0x0020; break; - case 4: new_advertise |= 0x0040; break; - case 3: new_advertise |= 0x0080; break; - case 5: new_advertise |= 0x0100; break; - case 6: new_advertise |= 0x0200; break; - } - break; - default: - leaf->media = 19; - } - leaf->leafdata = p + 2; - p += (p[0] & 0x3f) + 1; - } -#ifdef TULIP_DEBUG - if (tulip_debug > 1 && leaf->media == 11) { - unsigned char *bp = leaf->leafdata; - printf("%s: MII interface PHY %d, setup/reset sequences %d/%d long, capabilities %hhX %hhX.\n", - tp->nic_name, bp[0], bp[1], bp[2 + bp[1]*2], - bp[5 + bp[2 + bp[1]*2]*2], bp[4 + bp[2 + bp[1]*2]*2]); - } -#endif - printf("%s: Index #%d - Media %s (#%d) described " - "by a %s (%d) block.\n", - tp->nic_name, i, medianame[leaf->media], leaf->media, - leaf->type < 6 ? block_name[leaf->type] : "UNKNOWN", - leaf->type); - } - if (new_advertise) - tp->sym_advertise = new_advertise; - } -} - - -/*********************************************************************/ -/* tulip_init_ring - setup the tx and rx descriptors */ -/*********************************************************************/ -static void tulip_init_ring(struct nic *nic) -{ - int i; - -#ifdef TULIP_DEBUG_WHERE - whereami("tulip_init_ring\n"); -#endif - - tp->cur_rx = 0; - - for (i = 0; i < RX_RING_SIZE; i++) { - rx_ring[i].status = cpu_to_le32(0x80000000); - rx_ring[i].length = cpu_to_le32(BUFLEN); - rx_ring[i].buffer1 = virt_to_le32desc(&rxb[i * BUFLEN]); - rx_ring[i].buffer2 = virt_to_le32desc(&rx_ring[i+1]); - } - /* Mark the last entry as wrapping the ring. */ - rx_ring[i-1].length = cpu_to_le32(DESC_RING_WRAP | BUFLEN); - rx_ring[i-1].buffer2 = virt_to_le32desc(&rx_ring[0]); - - /* We only use 1 transmit buffer, but we use 2 descriptors so - transmit engines have somewhere to point to if they feel the need */ - - tx_ring[0].status = 0x00000000; - tx_ring[0].buffer1 = virt_to_le32desc(&txb[0]); - tx_ring[0].buffer2 = virt_to_le32desc(&tx_ring[1]); - - /* this descriptor should never get used, since it will never be owned - by the machine (status will always == 0) */ - tx_ring[1].status = 0x00000000; - tx_ring[1].buffer1 = virt_to_le32desc(&txb[0]); - tx_ring[1].buffer2 = virt_to_le32desc(&tx_ring[0]); - - /* Mark the last entry as wrapping the ring, though this should never happen */ - tx_ring[1].length = cpu_to_le32(DESC_RING_WRAP | BUFLEN); -} - -/*********************************************************************/ -/* eth_reset - Reset adapter */ -/*********************************************************************/ -static void tulip_reset(struct nic *nic) -{ - int i; - unsigned long to; - u32 addr_low, addr_high; - -#ifdef TULIP_DEBUG_WHERE - whereami("tulip_reset\n"); -#endif - - /* Stop Tx and RX */ - outl(inl(ioaddr + CSR6) & ~0x00002002, ioaddr + CSR6); - - /* On some chip revs we must set the MII/SYM port before the reset!? */ - if (tp->mii_cnt || (tp->mtable && tp->mtable->has_mii)) { - outl(0x814C0000, ioaddr + CSR6); - } - - /* Reset the chip, holding bit 0 set at least 50 PCI cycles. */ - outl(0x00000001, ioaddr + CSR0); - tulip_wait(1); - - /* turn off reset and set cache align=16lword, burst=unlimit */ - outl(tp->csr0, ioaddr + CSR0); - - /* Wait the specified 50 PCI cycles after a reset */ - tulip_wait(1); - - /* set up transmit and receive descriptors */ - tulip_init_ring(nic); - - if (tp->chip_id == PNIC2) { - u32 addr_high = (nic->node_addr[1]<<8) + (nic->node_addr[0]<<0); - /* This address setting does not appear to impact chip operation?? */ - outl((nic->node_addr[5]<<8) + nic->node_addr[4] + - (nic->node_addr[3]<<24) + (nic->node_addr[2]<<16), - ioaddr + 0xB0); - outl(addr_high + (addr_high<<16), ioaddr + 0xB8); - } - - /* MC_HASH_ONLY boards don't support setup packets */ - if (tp->flags & MC_HASH_ONLY) { - u32 addr_low = cpu_to_le32(get_unaligned((u32 *)nic->node_addr)); - u32 addr_high = cpu_to_le32(get_unaligned((u16 *)(nic->node_addr+4))); - - /* clear multicast hash filters and setup MAC address filters */ - if (tp->flags & IS_ASIX) { - outl(0, ioaddr + CSR13); - outl(addr_low, ioaddr + CSR14); - outl(1, ioaddr + CSR13); - outl(addr_high, ioaddr + CSR14); - outl(2, ioaddr + CSR13); - outl(0, ioaddr + CSR14); - outl(3, ioaddr + CSR13); - outl(0, ioaddr + CSR14); - } else if (tp->chip_id == COMET) { - outl(addr_low, ioaddr + 0xA4); - outl(addr_high, ioaddr + 0xA8); - outl(0, ioaddr + 0xAC); - outl(0, ioaddr + 0xB0); - } - } else { - /* for other boards we send a setup packet to initialize - the filters */ - u32 tx_flags = 0x08000000 | 192; - - /* construct perfect filter frame with mac address as first match - and broadcast address for all others */ - for (i=0; i<192; i++) - txb[i] = 0xFF; - txb[0] = nic->node_addr[0]; - txb[1] = nic->node_addr[1]; - txb[4] = nic->node_addr[2]; - txb[5] = nic->node_addr[3]; - txb[8] = nic->node_addr[4]; - txb[9] = nic->node_addr[5]; - - tx_ring[0].length = cpu_to_le32(tx_flags); - tx_ring[0].buffer1 = virt_to_le32desc(&txb[0]); - tx_ring[0].status = cpu_to_le32(0x80000000); - } - - /* Point to rx and tx descriptors */ - outl((unsigned long)&rx_ring[0], ioaddr + CSR3); - outl((unsigned long)&tx_ring[0], ioaddr + CSR4); - - init_media(nic); - - /* set the chip's operating mode (but don't turn on xmit and recv yet) */ - outl((tp->csr6 & ~0x00002002), ioaddr + CSR6); - - /* send setup packet for cards that support it */ - if (!(tp->flags & MC_HASH_ONLY)) { - /* enable transmit wait for completion */ - outl(tp->csr6 | 0x00002000, ioaddr + CSR6); - /* immediate transmit demand */ - outl(0, ioaddr + CSR1); - - to = currticks() + TX_TIME_OUT; - while ((tx_ring[0].status & 0x80000000) && (currticks() < to)) - /* wait */ ; - - if (currticks() >= to) { - printf ("%s: TX Setup Timeout.\n", tp->nic_name); - } - } - - if (tp->chip_id == LC82C168) - tulip_check_duplex(nic); - - /* enable transmit and receive */ - outl(tp->csr6 | 0x00002002, ioaddr + CSR6); -} - - -/*********************************************************************/ -/* eth_transmit - Transmit a frame */ -/*********************************************************************/ -static void tulip_transmit(struct nic *nic, const char *d, unsigned int t, - unsigned int s, const char *p) -{ - u16 nstype; - u32 to; - u32 csr6 = inl(ioaddr + CSR6); - -#ifdef TULIP_DEBUG_WHERE - whereami("tulip_transmit\n"); -#endif - - /* Disable Tx */ - outl(csr6 & ~0x00002000, ioaddr + CSR6); - - memcpy(txb, d, ETH_ALEN); - memcpy(txb + ETH_ALEN, nic->node_addr, ETH_ALEN); - nstype = htons((u16) t); - memcpy(txb + 2 * ETH_ALEN, (u8 *)&nstype, 2); - memcpy(txb + ETH_HLEN, p, s); - - s += ETH_HLEN; - s &= 0x0FFF; - - /* pad to minimum packet size */ - while (s < ETH_ZLEN) - txb[s++] = '\0'; - -#ifdef TULIP_DEBUG - if (tulip_debug > 1) - printf("%s: sending %d bytes ethtype %hX\n", tp->nic_name, s, t); -#endif - - /* setup the transmit descriptor */ - /* 0x60000000 = no interrupt on completion */ - tx_ring[0].length = cpu_to_le32(0x60000000 | s); - tx_ring[0].status = cpu_to_le32(0x80000000); - - /* Point to transmit descriptor */ - outl((u32)&tx_ring[0], ioaddr + CSR4); - - /* Enable Tx */ - outl(csr6 | 0x00002000, ioaddr + CSR6); - /* immediate transmit demand */ - outl(0, ioaddr + CSR1); - - to = currticks() + TX_TIME_OUT; - while ((tx_ring[0].status & 0x80000000) && (currticks() < to)) - /* wait */ ; - - if (currticks() >= to) { - printf ("TX Timeout!\n"); - } - - /* Disable Tx */ - outl(csr6 & ~0x00002000, ioaddr + CSR6); -} - -/*********************************************************************/ -/* eth_poll - Wait for a frame */ -/*********************************************************************/ -static int tulip_poll(struct nic *nic) -{ - -#ifdef TULIP_DEBUG_WHERE - whereami("tulip_poll\n"); -#endif - - /* no packet waiting. packet still owned by NIC */ - if (rx_ring[tp->cur_rx].status & 0x80000000) - return 0; - -#ifdef TULIP_DEBUG_WHERE - whereami("tulip_poll got one\n"); -#endif - - nic->packetlen = (rx_ring[tp->cur_rx].status & 0x3FFF0000) >> 16; - - /* if we get a corrupted packet. throw it away and move on */ - if (rx_ring[tp->cur_rx].status & 0x00008000) { - /* return the descriptor and buffer to receive ring */ - rx_ring[tp->cur_rx].status = 0x80000000; - tp->cur_rx = (++tp->cur_rx) % RX_RING_SIZE; - return 0; - } - - /* copy packet to working buffer */ - memcpy(nic->packet, rxb + tp->cur_rx * BUFLEN, nic->packetlen); - - /* return the descriptor and buffer to receive ring */ - rx_ring[tp->cur_rx].status = 0x80000000; - tp->cur_rx = (++tp->cur_rx) % RX_RING_SIZE; - - return 1; -} - -/*********************************************************************/ -/* eth_disable - Disable the interface */ -/*********************************************************************/ -static void tulip_disable(struct nic *nic) -{ - -#ifdef TULIP_DEBUG_WHERE - whereami("tulip_disable\n"); -#endif - - /* disable interrupts */ - outl(0x00000000, ioaddr + CSR7); - - /* Stop the chip's Tx and Rx processes. */ - outl(inl(ioaddr + CSR6) & ~0x00002002, ioaddr + CSR6); - - /* Clear the missed-packet counter. */ - (volatile unsigned long)inl(ioaddr + CSR8); -} - -/*********************************************************************/ -/* eth_probe - Look for an adapter */ -/*********************************************************************/ -struct nic *tulip_probe(struct nic *nic, unsigned short *io_addrs, - struct pci_device *pci) -{ - u32 i, l1, l2; - u8 chip_rev; - u8 ee_data[EEPROM_SIZE]; - unsigned short sum; - int chip_idx; - static unsigned char last_phys_addr[ETH_ALEN] = {0x00, 'L', 'i', 'n', 'u', 'x'}; - - if (io_addrs == 0 || *io_addrs == 0) - return 0; - - ioaddr = *io_addrs; - - /* point to private storage */ - tp = &tpx; - - tp->vendor_id = pci->vendor; - tp->dev_id = pci->dev_id; - tp->nic_name = pci->name; - - tp->if_port = 0; - tp->default_port = 0; - - adjust_pci_device(pci); - - /* disable interrupts */ - outl(0x00000000, ioaddr + CSR7); - - /* Stop the chip's Tx and Rx processes. */ - outl(inl(ioaddr + CSR6) & ~0x00002002, ioaddr + CSR6); - - /* Clear the missed-packet counter. */ - (volatile unsigned long)inl(ioaddr + CSR8); - - printf("\n"); /* so we start on a fresh line */ -#ifdef TULIP_DEBUG_WHERE - whereami("tulip_probe\n"); -#endif - -#ifdef TULIP_DEBUG - if (tulip_debug > 1) - printf ("%s: Looking for Tulip Chip: Vendor=%hX Device=%hX\n", tp->nic_name, - tp->vendor_id, tp->dev_id); -#endif - - /* Figure out which chip we're dealing with */ - i = 0; - chip_idx = -1; - - while (pci_id_tbl[i].name) { - if ( (((u32) tp->dev_id << 16) | tp->vendor_id) == - (pci_id_tbl[i].id.pci & pci_id_tbl[i].id.pci_mask) ) { - chip_idx = pci_id_tbl[i].drv_flags; - break; - } - i++; - } - - if (chip_idx == -1) { - printf ("%s: Unknown Tulip Chip: Vendor=%hX Device=%hX\n", tp->nic_name, - tp->vendor_id, tp->dev_id); - return 0; - } - - tp->pci_id_idx = i; - tp->flags = tulip_tbl[chip_idx].flags; - -#ifdef TULIP_DEBUG - if (tulip_debug > 1) { - printf ("%s: tp->pci_id_idx == %d, name == %s\n", tp->nic_name, - tp->pci_id_idx, pci_id_tbl[tp->pci_id_idx].name); - printf ("%s: chip_idx == %d, name == %s\n", tp->nic_name, chip_idx, - tulip_tbl[chip_idx].chip_name); - } -#endif - - /* Bring the 21041/21143 out of sleep mode. - Caution: Snooze mode does not work with some boards! */ - if (tp->flags & HAS_PWRDWN) - pcibios_write_config_dword(pci->bus, pci->devfn, 0x40, 0x00000000); - - if (inl(ioaddr + CSR5) == 0xFFFFFFFF) { - printf("%s: The Tulip chip at %X is not functioning.\n", - tp->nic_name, ioaddr); - return 0; - } - - pcibios_read_config_byte(pci->bus, pci->devfn, PCI_REVISION, &chip_rev); - - printf("%s: [chip: %s] rev %d at %hX\n", tp->nic_name, - tulip_tbl[chip_idx].chip_name, chip_rev, ioaddr); - printf("%s: Vendor=%hX Device=%hX", tp->nic_name, tp->vendor_id, tp->dev_id); - - if (chip_idx == DC21041 && inl(ioaddr + CSR9) & 0x8000) { - printf(" 21040 compatible mode."); - chip_idx = DC21040; - } - - printf("\n"); - - /* The SROM/EEPROM interface varies dramatically. */ - sum = 0; - if (chip_idx == DC21040) { - outl(0, ioaddr + CSR9); /* Reset the pointer with a dummy write. */ - for (i = 0; i < ETH_ALEN; i++) { - int value, boguscnt = 100000; - do - value = inl(ioaddr + CSR9); - while (value < 0 && --boguscnt > 0); - nic->node_addr[i] = value; - sum += value & 0xff; - } - } else if (chip_idx == LC82C168) { - for (i = 0; i < 3; i++) { - int value, boguscnt = 100000; - outl(0x600 | i, ioaddr + 0x98); - do - value = inl(ioaddr + CSR9); - while (value < 0 && --boguscnt > 0); - put_unaligned(le16_to_cpu(value), ((u16*)nic->node_addr) + i); - sum += value & 0xffff; - } - } else if (chip_idx == COMET) { - /* No need to read the EEPROM. */ - put_unaligned(inl(ioaddr + 0xA4), (u32 *)nic->node_addr); - put_unaligned(inl(ioaddr + 0xA8), (u16 *)(nic->node_addr + 4)); - for (i = 0; i < ETH_ALEN; i ++) - sum += nic->node_addr[i]; - } else { - /* A serial EEPROM interface, we read now and sort it out later. */ - int sa_offset = 0; - int ee_addr_size = read_eeprom(ioaddr, 0xff, 8) & 0x40000 ? 8 : 6; - - for (i = 0; i < sizeof(ee_data)/2; i++) - ((u16 *)ee_data)[i] = - le16_to_cpu(read_eeprom(ioaddr, i, ee_addr_size)); - - /* DEC now has a specification (see Notes) but early board makers - just put the address in the first EEPROM locations. */ - /* This does memcmp(eedata, eedata+16, 8) */ - for (i = 0; i < 8; i ++) - if (ee_data[i] != ee_data[16+i]) - sa_offset = 20; - if (ee_data[0] == 0xff && ee_data[1] == 0xff && ee_data[2] == 0) { - sa_offset = 2; /* Grrr, damn Matrox boards. */ - } - for (i = 0; i < ETH_ALEN; i ++) { - nic->node_addr[i] = ee_data[i + sa_offset]; - sum += ee_data[i + sa_offset]; - } - } - /* Lite-On boards have the address byte-swapped. */ - if ((nic->node_addr[0] == 0xA0 || nic->node_addr[0] == 0xC0) - && nic->node_addr[1] == 0x00) - for (i = 0; i < ETH_ALEN; i+=2) { - char tmp = nic->node_addr[i]; - nic->node_addr[i] = nic->node_addr[i+1]; - nic->node_addr[i+1] = tmp; - } - - if (sum == 0 || sum == ETH_ALEN*0xff) { - printf("%s: EEPROM not present!\n", tp->nic_name); - for (i = 0; i < ETH_ALEN-1; i++) - nic->node_addr[i] = last_phys_addr[i]; - nic->node_addr[i] = last_phys_addr[i] + 1; - } - - for (i = 0; i < ETH_ALEN; i++) - last_phys_addr[i] = nic->node_addr[i]; - - printf("%s: %! at ioaddr %hX\n", tp->nic_name, nic->node_addr, ioaddr); - - tp->chip_id = chip_idx; - tp->revision = chip_rev; - tp->csr0 = csr0; - - /* BugFixes: The 21143-TD hangs with PCI Write-and-Invalidate cycles. - And the ASIX must have a burst limit or horrible things happen. */ - if (chip_idx == DC21143 && chip_rev == 65) - tp->csr0 &= ~0x01000000; - else if (tp->flags & IS_ASIX) - tp->csr0 |= 0x2000; - - if (media_cap[tp->default_port] & MediaIsMII) { - u16 media2advert[] = { 0x20, 0x40, 0x03e0, 0x60, 0x80, 0x100, 0x200 }; - tp->mii_advertise = media2advert[tp->default_port - 9]; - tp->mii_advertise |= (tp->flags & HAS_8023X); /* Matching bits! */ - } - - /* This is logically part of the probe routine, but too complex - to write inline. */ - if (tp->flags & HAS_MEDIA_TABLE) { - memcpy(tp->eeprom, ee_data, sizeof(tp->eeprom)); - parse_eeprom(nic); - } - - start_link(nic); - - /* reset the device and make ready for tx and rx of packets */ - tulip_reset(nic); - - nic->reset = tulip_reset; - nic->poll = tulip_poll; - nic->transmit = tulip_transmit; - nic->disable = tulip_disable; - - /* give the board a chance to reset before returning */ - tulip_wait(4*TICKS_PER_SEC); - - return nic; -} - -static void start_link(struct nic *nic) -{ - int i; - -#ifdef TULIP_DEBUG_WHERE - whereami("start_link\n"); -#endif - - if ((tp->flags & ALWAYS_CHECK_MII) || - (tp->mtable && tp->mtable->has_mii) || - ( ! tp->mtable && (tp->flags & HAS_MII))) { - unsigned int phy, phy_idx; - if (tp->mtable && tp->mtable->has_mii) { - for (i = 0; i < tp->mtable->leafcount; i++) - if (tp->mtable->mleaf[i].media == 11) { - tp->cur_index = i; - tp->saved_if_port = tp->if_port; - select_media(nic, 2); - tp->if_port = tp->saved_if_port; - break; - } - } - - /* Find the connected MII xcvrs. */ - for (phy = 0, phy_idx = 0; phy < 32 && phy_idx < sizeof(tp->phys); - phy++) { - int mii_status = mdio_read(nic, phy, 1); - if ((mii_status & 0x8301) == 0x8001 || - ((mii_status & 0x8000) == 0 && (mii_status & 0x7800) != 0)) { - int mii_reg0 = mdio_read(nic, phy, 0); - int mii_advert = mdio_read(nic, phy, 4); - int to_advert; - - if (tp->mii_advertise) - to_advert = tp->mii_advertise; - else if (tp->advertising[phy_idx]) - to_advert = tp->advertising[phy_idx]; - else /* Leave unchanged. */ - tp->mii_advertise = to_advert = mii_advert; - - tp->phys[phy_idx++] = phy; - printf("%s: MII transceiver %d config %hX status %hX advertising %hX.\n", - tp->nic_name, phy, mii_reg0, mii_status, mii_advert); - /* Fixup for DLink with miswired PHY. */ - if (mii_advert != to_advert) { - printf("%s: Advertising %hX on PHY %d previously advertising %hX.\n", - tp->nic_name, to_advert, phy, mii_advert); - mdio_write(nic, phy, 4, to_advert); - } - /* Enable autonegotiation: some boards default to off. */ - mdio_write(nic, phy, 0, mii_reg0 | - (tp->full_duplex ? 0x1100 : 0x1000) | - (media_cap[tp->default_port]&MediaIs100 ? 0x2000:0)); - } - } - tp->mii_cnt = phy_idx; - if (tp->mtable && tp->mtable->has_mii && phy_idx == 0) { - printf("%s: ***WARNING***: No MII transceiver found!\n", - tp->nic_name); - tp->phys[0] = 1; - } - } - - /* Reset the xcvr interface and turn on heartbeat. */ - switch (tp->chip_id) { - case DC21040: - outl(0x00000000, ioaddr + CSR13); - outl(0x00000004, ioaddr + CSR13); - break; - case DC21041: - /* This is nway_start(). */ - if (tp->sym_advertise == 0) - tp->sym_advertise = 0x0061; - outl(0x00000000, ioaddr + CSR13); - outl(0xFFFFFFFF, ioaddr + CSR14); - outl(0x00000008, ioaddr + CSR15); /* Listen on AUI also. */ - outl(inl(ioaddr + CSR6) | 0x0200, ioaddr + CSR6); - outl(0x0000EF01, ioaddr + CSR13); - break; - case DC21140: default: - if (tp->mtable) - outl(tp->mtable->csr12dir | 0x100, ioaddr + CSR12); - break; - case DC21142: - case PNIC2: - if (tp->mii_cnt || media_cap[tp->if_port] & MediaIsMII) { - outl(0x82020000, ioaddr + CSR6); - outl(0x0000, ioaddr + CSR13); - outl(0x0000, ioaddr + CSR14); - outl(0x820E0000, ioaddr + CSR6); - } else - nway_start(nic); - break; - case LC82C168: - if ( ! tp->mii_cnt) { - tp->nway = 1; - tp->nwayset = 0; - outl(0x00420000, ioaddr + CSR6); - outl(0x30, ioaddr + CSR12); - outl(0x0001F078, ioaddr + 0xB8); - outl(0x0201F078, ioaddr + 0xB8); /* Turn on autonegotiation. */ - } - break; - case MX98713: case COMPEX9881: - outl(0x00000000, ioaddr + CSR6); - outl(0x000711C0, ioaddr + CSR14); /* Turn on NWay. */ - outl(0x00000001, ioaddr + CSR13); - break; - case MX98715: case MX98725: - outl(0x01a80000, ioaddr + CSR6); - outl(0xFFFFFFFF, ioaddr + CSR14); - outl(0x00001000, ioaddr + CSR12); - break; - case COMET: - /* No initialization necessary. */ - break; - } -} - -static void nway_start(struct nic *nic) -{ - int csr14 = ((tp->sym_advertise & 0x0780) << 9) | - ((tp->sym_advertise&0x0020)<<1) | 0xffbf; - -#ifdef TULIP_DEBUG_WHERE - whereami("nway_start\n"); -#endif - - tp->if_port = 0; - tp->nway = tp->mediasense = 1; - tp->nwayset = tp->lpar = 0; - if (tp->chip_id == PNIC2) { - tp->csr6 = 0x01000000 | (tp->sym_advertise & 0x0040 ? 0x0200 : 0); - return; - } -#ifdef TULIP_DEBUG - if (tulip_debug > 1) - printf("%s: Restarting internal NWay autonegotiation, %X.\n", - tp->nic_name, csr14); -#endif - outl(0x0001, ioaddr + CSR13); - outl(csr14, ioaddr + CSR14); - tp->csr6 = 0x82420000 | (tp->sym_advertise & 0x0040 ? 0x0200 : 0); - outl(tp->csr6, ioaddr + CSR6); - if (tp->mtable && tp->mtable->csr15dir) { - outl(tp->mtable->csr15dir, ioaddr + CSR15); - outl(tp->mtable->csr15val, ioaddr + CSR15); - } else if (tp->chip_id != PNIC2) - outw(0x0008, ioaddr + CSR15); - if (tp->chip_id == DC21041) /* Trigger NWAY. */ - outl(0xEF01, ioaddr + CSR12); - else - outl(0x1301, ioaddr + CSR12); -} - -static void init_media(struct nic *nic) -{ - int i; - -#ifdef TULIP_DEBUG_WHERE - whereami("init_media\n"); -#endif - - tp->saved_if_port = tp->if_port; - if (tp->if_port == 0) - tp->if_port = tp->default_port; - - /* Allow selecting a default media. */ - i = 0; - if (tp->mtable == NULL) - goto media_picked; - if (tp->if_port) { - int looking_for = media_cap[tp->if_port] & MediaIsMII ? 11 : - (tp->if_port == 12 ? 0 : tp->if_port); - for (i = 0; i < tp->mtable->leafcount; i++) - if (tp->mtable->mleaf[i].media == looking_for) { - printf("%s: Using user-specified media %s.\n", - tp->nic_name, medianame[tp->if_port]); - goto media_picked; - } - } - if ((tp->mtable->defaultmedia & 0x0800) == 0) { - int looking_for = tp->mtable->defaultmedia & 15; - for (i = 0; i < tp->mtable->leafcount; i++) - if (tp->mtable->mleaf[i].media == looking_for) { - printf("%s: Using EEPROM-set media %s.\n", - tp->nic_name, medianame[looking_for]); - goto media_picked; - } - } - /* Start sensing first non-full-duplex media. */ - for (i = tp->mtable->leafcount - 1; - (media_cap[tp->mtable->mleaf[i].media] & MediaAlwaysFD) && i > 0; i--) - ; - media_picked: - - tp->csr6 = 0; - tp->cur_index = i; - tp->nwayset = 0; - - if (tp->if_port) { - if (tp->chip_id == DC21143 && media_cap[tp->if_port] & MediaIsMII) { - /* We must reset the media CSRs when we force-select MII mode. */ - outl(0x0000, ioaddr + CSR13); - outl(0x0000, ioaddr + CSR14); - outl(0x0008, ioaddr + CSR15); - } - select_media(nic, 1); - return; - } - switch(tp->chip_id) { - case DC21041: - /* tp->nway = 1;*/ - nway_start(nic); - break; - case DC21142: - if (tp->mii_cnt) { - select_media(nic, 1); -#ifdef TULIP_DEBUG - if (tulip_debug > 1) - printf("%s: Using MII transceiver %d, status %hX.\n", - tp->nic_name, tp->phys[0], mdio_read(nic, tp->phys[0], 1)); -#endif - outl(0x82020000, ioaddr + CSR6); - tp->csr6 = 0x820E0000; - tp->if_port = 11; - outl(0x0000, ioaddr + CSR13); - outl(0x0000, ioaddr + CSR14); - } else - nway_start(nic); - break; - case PNIC2: - nway_start(nic); - break; - case LC82C168: - if (tp->mii_cnt) { - tp->if_port = 11; - tp->csr6 = 0x814C0000 | (tp->full_duplex ? 0x0200 : 0); - outl(0x0001, ioaddr + CSR15); - } else if (inl(ioaddr + CSR5) & TPLnkPass) - pnic_do_nway(nic); - else { - /* Start with 10mbps to do autonegotiation. */ - outl(0x32, ioaddr + CSR12); - tp->csr6 = 0x00420000; - outl(0x0001B078, ioaddr + 0xB8); - outl(0x0201B078, ioaddr + 0xB8); - } - break; - case MX98713: case COMPEX9881: - tp->if_port = 0; - tp->csr6 = 0x01880000 | (tp->full_duplex ? 0x0200 : 0); - outl(0x0f370000 | inw(ioaddr + 0x80), ioaddr + 0x80); - break; - case MX98715: case MX98725: - /* Provided by BOLO, Macronix - 12/10/1998. */ - tp->if_port = 0; - tp->csr6 = 0x01a80200; - outl(0x0f370000 | inw(ioaddr + 0x80), ioaddr + 0x80); - outl(0x11000 | inw(ioaddr + 0xa0), ioaddr + 0xa0); - break; - case COMET: - tp->if_port = 0; - tp->csr6 = 0x00040000; - break; - case AX88140: case AX88141: - tp->csr6 = tp->mii_cnt ? 0x00040100 : 0x00000100; - break; - default: - select_media(nic, 1); - } -} - -static void pnic_do_nway(struct nic *nic) -{ - u32 phy_reg = inl(ioaddr + 0xB8); - u32 new_csr6 = tp->csr6 & ~0x40C40200; - -#ifdef TULIP_DEBUG_WHERE - whereami("pnic_do_nway\n"); -#endif - - if (phy_reg & 0x78000000) { /* Ignore baseT4 */ - if (phy_reg & 0x20000000) tp->if_port = 5; - else if (phy_reg & 0x40000000) tp->if_port = 3; - else if (phy_reg & 0x10000000) tp->if_port = 4; - else if (phy_reg & 0x08000000) tp->if_port = 0; - tp->nwayset = 1; - new_csr6 = (tp->if_port & 1) ? 0x01860000 : 0x00420000; - outl(0x32 | (tp->if_port & 1), ioaddr + CSR12); - if (tp->if_port & 1) - outl(0x1F868, ioaddr + 0xB8); - if (phy_reg & 0x30000000) { - tp->full_duplex = 1; - new_csr6 |= 0x00000200; - } -#ifdef TULIP_DEBUG - if (tulip_debug > 1) - printf("%s: PNIC autonegotiated status %X, %s.\n", - tp->nic_name, phy_reg, medianame[tp->if_port]); -#endif - if (tp->csr6 != new_csr6) { - tp->csr6 = new_csr6; - outl(tp->csr6 | 0x0002, ioaddr + CSR6); /* Restart Tx */ - outl(tp->csr6 | 0x2002, ioaddr + CSR6); - } - } -} - -/* Set up the transceiver control registers for the selected media type. */ -static void select_media(struct nic *nic, int startup) -{ - struct mediatable *mtable = tp->mtable; - u32 new_csr6; - int i; - -#ifdef TULIP_DEBUG_WHERE - whereami("select_media\n"); -#endif - - if (mtable) { - struct medialeaf *mleaf = &mtable->mleaf[tp->cur_index]; - unsigned char *p = mleaf->leafdata; - switch (mleaf->type) { - case 0: /* 21140 non-MII xcvr. */ -#ifdef TULIP_DEBUG - if (tulip_debug > 1) - printf("%s: Using a 21140 non-MII transceiver" - " with control setting %hhX.\n", - tp->nic_name, p[1]); -#endif - tp->if_port = p[0]; - if (startup) - outl(mtable->csr12dir | 0x100, ioaddr + CSR12); - outl(p[1], ioaddr + CSR12); - new_csr6 = 0x02000000 | ((p[2] & 0x71) << 18); - break; - case 2: case 4: { - u16 setup[5]; - u32 csr13val, csr14val, csr15dir, csr15val; - for (i = 0; i < 5; i++) - setup[i] = get_u16(&p[i*2 + 1]); - - tp->if_port = p[0] & 15; - if (media_cap[tp->if_port] & MediaAlwaysFD) - tp->full_duplex = 1; - - if (startup && mtable->has_reset) { - struct medialeaf *rleaf = &mtable->mleaf[mtable->has_reset]; - unsigned char *rst = rleaf->leafdata; -#ifdef TULIP_DEBUG - if (tulip_debug > 1) - printf("%s: Resetting the transceiver.\n", - tp->nic_name); -#endif - for (i = 0; i < rst[0]; i++) - outl(get_u16(rst + 1 + (i<<1)) << 16, ioaddr + CSR15); - } -#ifdef TULIP_DEBUG - if (tulip_debug > 1) - printf("%s: 21143 non-MII %s transceiver control " - "%hX/%hX.\n", - tp->nic_name, medianame[tp->if_port], setup[0], setup[1]); -#endif - if (p[0] & 0x40) { /* SIA (CSR13-15) setup values are provided. */ - csr13val = setup[0]; - csr14val = setup[1]; - csr15dir = (setup[3]<<16) | setup[2]; - csr15val = (setup[4]<<16) | setup[2]; - outl(0, ioaddr + CSR13); - outl(csr14val, ioaddr + CSR14); - outl(csr15dir, ioaddr + CSR15); /* Direction */ - outl(csr15val, ioaddr + CSR15); /* Data */ - outl(csr13val, ioaddr + CSR13); - } else { - csr13val = 1; - csr14val = 0x0003FF7F; - csr15dir = (setup[0]<<16) | 0x0008; - csr15val = (setup[1]<<16) | 0x0008; - if (tp->if_port <= 4) - csr14val = t21142_csr14[tp->if_port]; - if (startup) { - outl(0, ioaddr + CSR13); - outl(csr14val, ioaddr + CSR14); - } - outl(csr15dir, ioaddr + CSR15); /* Direction */ - outl(csr15val, ioaddr + CSR15); /* Data */ - if (startup) outl(csr13val, ioaddr + CSR13); - } -#ifdef TULIP_DEBUG - if (tulip_debug > 1) - printf("%s: Setting CSR15 to %X/%X.\n", - tp->nic_name, csr15dir, csr15val); -#endif - if (mleaf->type == 4) - new_csr6 = 0x82020000 | ((setup[2] & 0x71) << 18); - else - new_csr6 = 0x82420000; - break; - } - case 1: case 3: { - int phy_num = p[0]; - int init_length = p[1]; - u16 *misc_info; - - tp->if_port = 11; - new_csr6 = 0x020E0000; - if (mleaf->type == 3) { /* 21142 */ - u16 *init_sequence = (u16*)(p+2); - u16 *reset_sequence = &((u16*)(p+3))[init_length]; - int reset_length = p[2 + init_length*2]; - misc_info = reset_sequence + reset_length; - if (startup) - for (i = 0; i < reset_length; i++) - outl(get_u16(&reset_sequence[i]) << 16, ioaddr + CSR15); - for (i = 0; i < init_length; i++) - outl(get_u16(&init_sequence[i]) << 16, ioaddr + CSR15); - } else { - u8 *init_sequence = p + 2; - u8 *reset_sequence = p + 3 + init_length; - int reset_length = p[2 + init_length]; - misc_info = (u16*)(reset_sequence + reset_length); - if (startup) { - outl(mtable->csr12dir | 0x100, ioaddr + CSR12); - for (i = 0; i < reset_length; i++) - outl(reset_sequence[i], ioaddr + CSR12); - } - for (i = 0; i < init_length; i++) - outl(init_sequence[i], ioaddr + CSR12); - } - tp->advertising[phy_num] = get_u16(&misc_info[1]) | 1; - if (startup < 2) { - if (tp->mii_advertise == 0) - tp->mii_advertise = tp->advertising[phy_num]; -#ifdef TULIP_DEBUG - if (tulip_debug > 1) - printf("%s: Advertising %hX on MII %d.\n", - tp->nic_name, tp->mii_advertise, tp->phys[phy_num]); -#endif - mdio_write(nic, tp->phys[phy_num], 4, tp->mii_advertise); - } - break; - } - default: - printf("%s: Invalid media table selection %d.\n", - tp->nic_name, mleaf->type); - new_csr6 = 0x020E0000; - } -#ifdef TULIP_DEBUG - if (tulip_debug > 1) - printf("%s: Using media type %s, CSR12 is %hhX.\n", - tp->nic_name, medianame[tp->if_port], - inl(ioaddr + CSR12) & 0xff); -#endif - } else if (tp->chip_id == DC21041) { - int port = tp->if_port <= 4 ? tp->if_port : 0; -#ifdef TULIP_DEBUG - if (tulip_debug > 1) - printf("%s: 21041 using media %s, CSR12 is %hX.\n", - tp->nic_name, medianame[port == 3 ? 12: port], - inl(ioaddr + CSR12)); -#endif - outl(0x00000000, ioaddr + CSR13); /* Reset the serial interface */ - outl(t21041_csr14[port], ioaddr + CSR14); - outl(t21041_csr15[port], ioaddr + CSR15); - outl(t21041_csr13[port], ioaddr + CSR13); - new_csr6 = 0x80020000; - } else if (tp->chip_id == LC82C168) { - if (startup && ! tp->medialock) - tp->if_port = tp->mii_cnt ? 11 : 0; -#ifdef TULIP_DEBUG - if (tulip_debug > 1) - printf("%s: PNIC PHY status is %hX, media %s.\n", - tp->nic_name, inl(ioaddr + 0xB8), medianame[tp->if_port]); -#endif - if (tp->mii_cnt) { - new_csr6 = 0x810C0000; - outl(0x0001, ioaddr + CSR15); - outl(0x0201B07A, ioaddr + 0xB8); - } else if (startup) { - /* Start with 10mbps to do autonegotiation. */ - outl(0x32, ioaddr + CSR12); - new_csr6 = 0x00420000; - outl(0x0001B078, ioaddr + 0xB8); - outl(0x0201B078, ioaddr + 0xB8); - } else if (tp->if_port == 3 || tp->if_port == 5) { - outl(0x33, ioaddr + CSR12); - new_csr6 = 0x01860000; - /* Trigger autonegotiation. */ - outl(startup ? 0x0201F868 : 0x0001F868, ioaddr + 0xB8); - } else { - outl(0x32, ioaddr + CSR12); - new_csr6 = 0x00420000; - outl(0x1F078, ioaddr + 0xB8); - } - } else if (tp->chip_id == DC21040) { /* 21040 */ - /* Turn on the xcvr interface. */ - int csr12 = inl(ioaddr + CSR12); -#ifdef TULIP_DEBUG - if (tulip_debug > 1) - printf("%s: 21040 media type is %s, CSR12 is %hhX.\n", - tp->nic_name, medianame[tp->if_port], csr12); -#endif - if (media_cap[tp->if_port] & MediaAlwaysFD) - tp->full_duplex = 1; - new_csr6 = 0x20000; - /* Set the full duplux match frame. */ - outl(FULL_DUPLEX_MAGIC, ioaddr + CSR11); - outl(0x00000000, ioaddr + CSR13); /* Reset the serial interface */ - if (t21040_csr13[tp->if_port] & 8) { - outl(0x0705, ioaddr + CSR14); - outl(0x0006, ioaddr + CSR15); - } else { - outl(0xffff, ioaddr + CSR14); - outl(0x0000, ioaddr + CSR15); - } - outl(0x8f01 | t21040_csr13[tp->if_port], ioaddr + CSR13); - } else { /* Unknown chip type with no media table. */ - if (tp->default_port == 0) - tp->if_port = tp->mii_cnt ? 11 : 3; - if (media_cap[tp->if_port] & MediaIsMII) { - new_csr6 = 0x020E0000; - } else if (media_cap[tp->if_port] & MediaIsFx) { - new_csr6 = 0x028600000; - } else - new_csr6 = 0x038600000; -#ifdef TULIP_DEBUG - if (tulip_debug > 1) - printf("%s: No media description table, assuming " - "%s transceiver, CSR12 %hhX.\n", - tp->nic_name, medianame[tp->if_port], - inl(ioaddr + CSR12)); -#endif - } - - tp->csr6 = new_csr6 | (tp->csr6 & 0xfdff) | (tp->full_duplex ? 0x0200 : 0); - return; -} - -/* - Check the MII negotiated duplex and change the CSR6 setting if - required. - Return 0 if everything is OK. - Return < 0 if the transceiver is missing or has no link beat. -*/ -static int tulip_check_duplex(struct nic *nic) -{ - unsigned int bmsr, lpa, negotiated, new_csr6; - - bmsr = mdio_read(nic, tp->phys[0], 1); - lpa = mdio_read(nic, tp->phys[0], 5); - -#ifdef TULIP_DEBUG - if (tulip_debug > 1) - printf("%s: MII status %#x, Link partner report " - "%#x.\n", tp->nic_name, bmsr, lpa); -#endif - - if (bmsr == 0xffff) - return -2; - if ((bmsr & 4) == 0) { - int new_bmsr = mdio_read(nic, tp->phys[0], 1); - if ((new_bmsr & 4) == 0) { -#ifdef TULIP_DEBUG - if (tulip_debug > 1) - printf("%s: No link beat on the MII interface," - " status %#x.\n", tp->nic_name, - new_bmsr); -#endif - return -1; - } - } - tp->full_duplex = lpa & 0x140; - - new_csr6 = tp->csr6; - negotiated = lpa & tp->advertising[0]; - - if(negotiated & 0x380) new_csr6 &= ~0x400000; - else new_csr6 |= 0x400000; - if (tp->full_duplex) new_csr6 |= 0x200; - else new_csr6 &= ~0x200; - - if (new_csr6 != tp->csr6) { - tp->csr6 = new_csr6; - -#ifdef TULIP_DEBUG - if (tulip_debug > 0) - printf("%s: Setting %s-duplex based on MII" - "#%d link partner capability of %#x.\n", - tp->nic_name, - tp->full_duplex ? "full" : "half", - tp->phys[0], lpa); -#endif - return 1; - } - - return 0; -} diff --git a/netboot/tulip.txt b/netboot/tulip.txt deleted file mode 100644 index 68b7b3b78..000000000 --- a/netboot/tulip.txt +++ /dev/null @@ -1,53 +0,0 @@ -This software may be used and distributed according to the terms of -the GNU Public License, incorporated herein by reference. - -This is a tulip and clone driver for Etherboot. See the revision -history in the tulip.c file for information on changes. This version -of the driver incorporates changes from Bob Edwards and Paul Mackerras -who cantributed changes to support the TRENDnet TE100-PCIA NIC which -uses a genuine Intel 21143-PD chipset. There are also various code -cleanups to make time-based activities more reliable. - -Of course you have to have all the usual Etherboot environment -(bootp/dhcp/NFS) set up, and you need a Linux kernel with v0.91g -(7.16.99) or later of the tulip.c driver compiled in to support some -MX98715 based cards. That file is available at: - - http://cesdis.gsfc.nasa.gov/linux/drivers/test/tulip.c - -NOTES - -I've tested this driver with a SOHOware Fast 10/100 Model SDA110A, -a Linksys LNE100TX v2.0, and a Netgear FA310TX card, and it worked at -both 10 and 100 mbits. Other cards based on the tulip family may work as -well. - -These cards are about 20$US, are supported by Linux and now Etherboot, -and being PCI, they auto-configure IRQ and IOADDR and auto-negotiate -10/100 half/full duplex. It seems like a pretty good value compared to -some of the pricier cards, and can lower the cost of building/adapting -thin client workstations substantially while giving a considerable -performance increase. - -On some PCI tulip clone chipsets (MX987x5, LC82C115, LC82C168) this driver -lets the card choose the fastest speed it can negotiate with the peer -device. On other cards, it chooses 10mbit half-duplex. - -I burned an AM27C256 (32KByte) EPROM with mx987x5.lzrom and it worked. -According to the data sheet the MX98715A supports up to 64K (27C512) -EPROMs, - -I've liberally commented the code and header files in the hope that it -will help the next person who hacks the code or needs to support some -tulip clone card, or wishes to add functionality. - -Anyway, please test this if you can on your tulip based card, and let -me (mdc@thinguin.org) and the netboot list (netboot@baghira.han.de) -know how things go. I also would appreciate code review by people who -program. I'm a strong believer in "another set of eyes". - -Regards, - -Marty Connor -mdc@thinguin.org -http://www.thinguin.org/ diff --git a/netboot/via-rhine.c b/netboot/via-rhine.c deleted file mode 100644 index 070edb840..000000000 --- a/netboot/via-rhine.c +++ /dev/null @@ -1,1180 +0,0 @@ -/* rhine.c:Fast Ethernet driver for Linux. */ -/* - Adapted 09-jan-2000 by Paolo Marini (paolom@prisma-eng.it) - - originally written by Donald Becker. - - This software may be used and distributed according to the terms - of the GNU Public License (GPL), incorporated herein by reference. - Drivers derived from this code also fall under the GPL and must retain - this authorship and copyright notice. - - Under no circumstances are the authors responsible for - the proper functioning of this software, nor do the authors assume any - responsibility for damages incurred with its use. - - This driver is designed for the VIA VT86C100A Rhine-II PCI Fast Ethernet - controller. - -*/ - -static const char *version = "rhine.c v1.0.0 2000-01-07\n"; - -/* A few user-configurable values. */ - -/* Size of the in-memory receive ring. */ -#define RX_BUF_LEN_IDX 3 /* 0==8K, 1==16K, 2==32K, 3==64K */ -#define RX_BUF_LEN (8192 << RX_BUF_LEN_IDX) - -/* Size of the Tx bounce buffers -- must be at least (dev->mtu+14+4). */ -#define TX_BUF_SIZE 1536 -#define RX_BUF_SIZE 1536 - -/* PCI Tuning Parameters - Threshold is bytes transferred to chip before transmission starts. */ -#define TX_FIFO_THRESH 256 /* In bytes, rounded down to 32 byte units. */ - -/* The following settings are log_2(bytes)-4: 0 == 16 bytes .. 6==1024. */ -#define RX_FIFO_THRESH 4 /* Rx buffer level before first PCI xfer. */ -#define RX_DMA_BURST 4 /* Maximum PCI burst, '4' is 256 bytes */ -#define TX_DMA_BURST 4 - -/* Operational parameters that usually are not changed. */ -/* Time in jiffies before concluding the transmitter is hung. */ -#define TX_TIMEOUT ((2000*HZ)/1000) - -#include "etherboot.h" -#include "nic.h" -#include "pci.h" -#include "cards.h" - -/* define all ioaddr */ - -#define byPAR0 ioaddr -#define byRCR ioaddr + 6 -#define byTCR ioaddr + 7 -#define byCR0 ioaddr + 8 -#define byCR1 ioaddr + 9 -#define byISR0 ioaddr + 0x0c -#define byISR1 ioaddr + 0x0d -#define byIMR0 ioaddr + 0x0e -#define byIMR1 ioaddr + 0x0f -#define byMAR0 ioaddr + 0x10 -#define byMAR1 ioaddr + 0x11 -#define byMAR2 ioaddr + 0x12 -#define byMAR3 ioaddr + 0x13 -#define byMAR4 ioaddr + 0x14 -#define byMAR5 ioaddr + 0x15 -#define byMAR6 ioaddr + 0x16 -#define byMAR7 ioaddr + 0x17 -#define dwCurrentRxDescAddr ioaddr + 0x18 -#define dwCurrentTxDescAddr ioaddr + 0x1c -#define dwCurrentRDSE0 ioaddr + 0x20 -#define dwCurrentRDSE1 ioaddr + 0x24 -#define dwCurrentRDSE2 ioaddr + 0x28 -#define dwCurrentRDSE3 ioaddr + 0x2c -#define dwNextRDSE0 ioaddr + 0x30 -#define dwNextRDSE1 ioaddr + 0x34 -#define dwNextRDSE2 ioaddr + 0x38 -#define dwNextRDSE3 ioaddr + 0x3c -#define dwCurrentTDSE0 ioaddr + 0x40 -#define dwCurrentTDSE1 ioaddr + 0x44 -#define dwCurrentTDSE2 ioaddr + 0x48 -#define dwCurrentTDSE3 ioaddr + 0x4c -#define dwNextTDSE0 ioaddr + 0x50 -#define dwNextTDSE1 ioaddr + 0x54 -#define dwNextTDSE2 ioaddr + 0x58 -#define dwNextTDSE3 ioaddr + 0x5c -#define dwCurrRxDMAPtr ioaddr + 0x60 -#define dwCurrTxDMAPtr ioaddr + 0x64 -#define byMPHY ioaddr + 0x6c -#define byMIISR ioaddr + 0x6d -#define byBCR0 ioaddr + 0x6e -#define byBCR1 ioaddr + 0x6f -#define byMIICR ioaddr + 0x70 -#define byMIIAD ioaddr + 0x71 -#define wMIIDATA ioaddr + 0x72 -#define byEECSR ioaddr + 0x74 -#define byTEST ioaddr + 0x75 -#define byGPIO ioaddr + 0x76 -#define byCFGA ioaddr + 0x78 -#define byCFGB ioaddr + 0x79 -#define byCFGC ioaddr + 0x7a -#define byCFGD ioaddr + 0x7b -#define wTallyCntMPA ioaddr + 0x7c -#define wTallyCntCRC ioaddr + 0x7d -/*--------------------- Exioaddr Definitions -------------------------*/ - -/* - * Bits in the RCR register - */ - -#define RCR_RRFT2 0x80 -#define RCR_RRFT1 0x40 -#define RCR_RRFT0 0x20 -#define RCR_PROM 0x10 -#define RCR_AB 0x08 -#define RCR_AM 0x04 -#define RCR_AR 0x02 -#define RCR_SEP 0x01 - -/* - * Bits in the TCR register - */ - -#define TCR_RTSF 0x80 -#define TCR_RTFT1 0x40 -#define TCR_RTFT0 0x20 -#define TCR_OFSET 0x08 -#define TCR_LB1 0x04 /* loopback[1] */ -#define TCR_LB0 0x02 /* loopback[0] */ - -/* - * Bits in the CR0 register - */ - -#define CR0_RDMD 0x40 /* rx descriptor polling demand */ -#define CR0_TDMD 0x20 /* tx descriptor polling demand */ -#define CR0_TXON 0x10 -#define CR0_RXON 0x08 -#define CR0_STOP 0x04 /* stop NIC, default = 1 */ -#define CR0_STRT 0x02 /* start NIC */ -#define CR0_INIT 0x01 /* start init process */ - - -/* - * Bits in the CR1 register - */ - -#define CR1_SFRST 0x80 /* software reset */ -#define CR1_RDMD1 0x40 /* RDMD1 */ -#define CR1_TDMD1 0x20 /* TDMD1 */ -#define CR1_KEYPAG 0x10 /* turn on par/key */ -#define CR1_DPOLL 0x08 /* disable rx/tx auto polling */ -#define CR1_FDX 0x04 /* full duplex mode */ -#define CR1_ETEN 0x02 /* early tx mode */ -#define CR1_EREN 0x01 /* early rx mode */ - -/* - * Bits in the CR register - */ - -#define CR_RDMD 0x0040 /* rx descriptor polling demand */ -#define CR_TDMD 0x0020 /* tx descriptor polling demand */ -#define CR_TXON 0x0010 -#define CR_RXON 0x0008 -#define CR_STOP 0x0004 /* stop NIC, default = 1 */ -#define CR_STRT 0x0002 /* start NIC */ -#define CR_INIT 0x0001 /* start init process */ -#define CR_SFRST 0x8000 /* software reset */ -#define CR_RDMD1 0x4000 /* RDMD1 */ -#define CR_TDMD1 0x2000 /* TDMD1 */ -#define CR_KEYPAG 0x1000 /* turn on par/key */ -#define CR_DPOLL 0x0800 /* disable rx/tx auto polling */ -#define CR_FDX 0x0400 /* full duplex mode */ -#define CR_ETEN 0x0200 /* early tx mode */ -#define CR_EREN 0x0100 /* early rx mode */ - -/* - * Bits in the IMR0 register - */ - -#define IMR0_CNTM 0x80 -#define IMR0_BEM 0x40 -#define IMR0_RUM 0x20 -#define IMR0_TUM 0x10 -#define IMR0_TXEM 0x08 -#define IMR0_RXEM 0x04 -#define IMR0_PTXM 0x02 -#define IMR0_PRXM 0x01 - -/* define imrshadow */ - -#define IMRShadow 0x5AFF - -/* - * Bits in the IMR1 register - */ - -#define IMR1_INITM 0x80 -#define IMR1_SRCM 0x40 -#define IMR1_NBFM 0x10 -#define IMR1_PRAIM 0x08 -#define IMR1_RES0M 0x04 -#define IMR1_ETM 0x02 -#define IMR1_ERM 0x01 - -/* - * Bits in the ISR register - */ - -#define ISR_INITI 0x8000 -#define ISR_SRCI 0x4000 -#define ISR_ABTI 0x2000 -#define ISR_NORBF 0x1000 -#define ISR_PKTRA 0x0800 -#define ISR_RES0 0x0400 -#define ISR_ETI 0x0200 -#define ISR_ERI 0x0100 -#define ISR_CNT 0x0080 -#define ISR_BE 0x0040 -#define ISR_RU 0x0020 -#define ISR_TU 0x0010 -#define ISR_TXE 0x0008 -#define ISR_RXE 0x0004 -#define ISR_PTX 0x0002 -#define ISR_PRX 0x0001 - -/* - * Bits in the ISR0 register - */ - -#define ISR0_CNT 0x80 -#define ISR0_BE 0x40 -#define ISR0_RU 0x20 -#define ISR0_TU 0x10 -#define ISR0_TXE 0x08 -#define ISR0_RXE 0x04 -#define ISR0_PTX 0x02 -#define ISR0_PRX 0x01 - -/* - * Bits in the ISR1 register - */ - -#define ISR1_INITI 0x80 -#define ISR1_SRCI 0x40 -#define ISR1_NORBF 0x10 -#define ISR1_PKTRA 0x08 -#define ISR1_ETI 0x02 -#define ISR1_ERI 0x01 - -/* ISR ABNORMAL CONDITION */ - -#define ISR_ABNORMAL ISR_BE+ISR_RU+ISR_TU+ISR_CNT+ISR_NORBF+ISR_PKTRA - -/* - * Bits in the MIISR register - */ - -#define MIISR_MIIERR 0x08 -#define MIISR_MRERR 0x04 -#define MIISR_LNKFL 0x02 -#define MIISR_SPEED 0x01 - -/* - * Bits in the MIICR register - */ - -#define MIICR_MAUTO 0x80 -#define MIICR_RCMD 0x40 -#define MIICR_WCMD 0x20 -#define MIICR_MDPM 0x10 -#define MIICR_MOUT 0x08 -#define MIICR_MDO 0x04 -#define MIICR_MDI 0x02 -#define MIICR_MDC 0x01 - -/* - * Bits in the EECSR register - */ - -#define EECSR_EEPR 0x80 /* eeprom programed status, 73h means programed */ -#define EECSR_EMBP 0x40 /* eeprom embeded programming */ -#define EECSR_AUTOLD 0x20 /* eeprom content reload */ -#define EECSR_DPM 0x10 /* eeprom direct programming */ -#define EECSR_CS 0x08 /* eeprom CS pin */ -#define EECSR_SK 0x04 /* eeprom SK pin */ -#define EECSR_DI 0x02 /* eeprom DI pin */ -#define EECSR_DO 0x01 /* eeprom DO pin */ - -/* - * Bits in the BCR0 register - */ - -#define BCR0_CRFT2 0x20 -#define BCR0_CRFT1 0x10 -#define BCR0_CRFT0 0x08 -#define BCR0_DMAL2 0x04 -#define BCR0_DMAL1 0x02 -#define BCR0_DMAL0 0x01 - -/* - * Bits in the BCR1 register - */ - -#define BCR1_CTSF 0x20 -#define BCR1_CTFT1 0x10 -#define BCR1_CTFT0 0x08 -#define BCR1_POT2 0x04 -#define BCR1_POT1 0x02 -#define BCR1_POT0 0x01 - -/* - * Bits in the CFGA register - */ - -#define CFGA_EELOAD 0x80 /* enable eeprom embeded and direct programming */ -#define CFGA_JUMPER 0x40 -#define CFGA_MTGPIO 0x08 -#define CFGA_T10EN 0x02 -#define CFGA_AUTO 0x01 - -/* - * Bits in the CFGB register - */ - -#define CFGB_PD 0x80 -#define CFGB_POLEN 0x02 -#define CFGB_LNKEN 0x01 - -/* - * Bits in the CFGC register - */ - -#define CFGC_M10TIO 0x80 -#define CFGC_M10POL 0x40 -#define CFGC_PHY1 0x20 -#define CFGC_PHY0 0x10 -#define CFGC_BTSEL 0x08 -#define CFGC_BPS2 0x04 /* bootrom select[2] */ -#define CFGC_BPS1 0x02 /* bootrom select[1] */ -#define CFGC_BPS0 0x01 /* bootrom select[0] */ - -/* - * Bits in the CFGD register - */ - -#define CFGD_GPIOEN 0x80 -#define CFGD_DIAG 0x40 -#define CFGD_MAGIC 0x10 -#define CFGD_CFDX 0x04 -#define CFGD_CEREN 0x02 -#define CFGD_CETEN 0x01 - -/* Bits in RSR */ -#define RSR_RERR 0x00000001 -#define RSR_CRC 0x00000002 -#define RSR_FAE 0x00000004 -#define RSR_FOV 0x00000008 -#define RSR_LONG 0x00000010 -#define RSR_RUNT 0x00000020 -#define RSR_SERR 0x00000040 -#define RSR_BUFF 0x00000080 -#define RSR_EDP 0x00000100 -#define RSR_STP 0x00000200 -#define RSR_CHN 0x00000400 -#define RSR_PHY 0x00000800 -#define RSR_BAR 0x00001000 -#define RSR_MAR 0x00002000 -#define RSR_RXOK 0x00008000 -#define RSR_ABNORMAL RSR_RERR+RSR_LONG+RSR_RUNT - -/* Bits in TSR */ -#define TSR_NCR0 0x00000001 -#define TSR_NCR1 0x00000002 -#define TSR_NCR2 0x00000004 -#define TSR_NCR3 0x00000008 -#define TSR_COLS 0x00000010 -#define TSR_CDH 0x00000080 -#define TSR_ABT 0x00000100 -#define TSR_OWC 0x00000200 -#define TSR_CRS 0x00000400 -#define TSR_UDF 0x00000800 -#define TSR_TBUFF 0x00001000 -#define TSR_SERR 0x00002000 -#define TSR_JAB 0x00004000 -#define TSR_TERR 0x00008000 -#define TSR_ABNORMAL TSR_TERR+TSR_OWC+TSR_ABT+TSR_JAB+TSR_CRS -#define TSR_OWN_BIT 0x80000000 - -#define CB_DELAY_LOOP_WAIT 10 /* 10ms */ -/* enabled mask value of irq */ - -#define W_IMR_MASK_VALUE 0x1BFF /* initial value of IMR */ - -/* Ethernet address filter type */ -#define PKT_TYPE_DIRECTED 0x0001 /* obsolete, directed address is always accepted */ -#define PKT_TYPE_MULTICAST 0x0002 -#define PKT_TYPE_ALL_MULTICAST 0x0004 -#define PKT_TYPE_BROADCAST 0x0008 -#define PKT_TYPE_PROMISCUOUS 0x0020 -#define PKT_TYPE_LONG 0x2000 -#define PKT_TYPE_RUNT 0x4000 -#define PKT_TYPE_ERROR 0x8000 /* accept error packets, e.g. CRC error */ - -/* Loopback mode */ - -#define NIC_LB_NONE 0x00 -#define NIC_LB_INTERNAL 0x01 -#define NIC_LB_PHY 0x02 /* MII or Internal-10BaseT loopback */ - -#define TX_RING_SIZE 2 -#define RX_RING_SIZE 2 -#define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer. */ - -/* Transmit and receive descriptors definition */ - -struct rhine_tx_desc -{ - union VTC_tx_status_tag - { - struct - { - unsigned long ncro:1; - unsigned long ncr1:1; - unsigned long ncr2:1; - unsigned long ncr3:1; - unsigned long cols:1; - unsigned long reserve_1:2; - unsigned long cdh:1; - unsigned long abt:1; - unsigned long owc:1; - unsigned long crs:1; - unsigned long udf:1; - unsigned long tbuff:1; - unsigned long serr:1; - unsigned long jab:1; - unsigned long terr:1; - unsigned long reserve_2:15; - unsigned long own_bit:1; - } - bits; - unsigned long lw; - } - tx_status; - - union VTC_tx_ctrl_tag - { - struct - { - unsigned long tx_buf_size:11; - unsigned long extend_tx_buf_size:4; - unsigned long chn:1; - unsigned long crc:1; - unsigned long reserve_1:4; - unsigned long stp:1; - unsigned long edp:1; - unsigned long ic:1; - unsigned long reserve_2:8; - } - bits; - unsigned long lw; - } - tx_ctrl; - - unsigned long buf_addr_1:32; - unsigned long buf_addr_2:32; - -}; - -struct rhine_rx_desc -{ - union VTC_rx_status_tag - { - struct - { - unsigned long rerr:1; - unsigned long crc_error:1; - unsigned long fae:1; - unsigned long fov:1; - unsigned long toolong:1; - unsigned long runt:1; - unsigned long serr:1; - unsigned long buff:1; - unsigned long edp:1; - unsigned long stp:1; - unsigned long chn:1; - unsigned long phy:1; - unsigned long bar:1; - unsigned long mar:1; - unsigned long reserve_1:1; - unsigned long rxok:1; - unsigned long frame_length:11; - unsigned long reverve_2:4; - unsigned long own_bit:1; - } - bits; - unsigned long lw; - } - rx_status; - - union VTC_rx_ctrl_tag - { - struct - { - unsigned long rx_buf_size:11; - unsigned long extend_rx_buf_size:4; - unsigned long reserved_1:17; - } - bits; - unsigned long lw; - } - rx_ctrl; - - unsigned long buf_addr_1:32; - unsigned long buf_addr_2:32; - -}; - - -/* The I/O extent. */ -#define rhine_TOTAL_SIZE 0x80 - -#ifdef HAVE_DEVLIST -struct netdev_entry rhine_drv = - { "rhine", rhine_probe, rhine_TOTAL_SIZE, NULL }; -#endif - -static int rhine_debug = 1; - -/* - Theory of Operation - -I. Board Compatibility - -This driver is designed for the VIA 86c100A Rhine-II PCI Fast Ethernet -controller. - -II. Board-specific settings - -Boards with this chip are functional only in a bus-master PCI slot. - -Many operational settings are loaded from the EEPROM to the Config word at -offset 0x78. This driver assumes that they are correct. -If this driver is compiled to use PCI memory space operations the EEPROM -must be configured to enable memory ops. - -III. Driver operation - -IIIa. Ring buffers - -This driver uses two statically allocated fixed-size descriptor lists -formed into rings by a branch from the final descriptor to the beginning of -the list. The ring sizes are set at compile time by RX/TX_RING_SIZE. - -IIIb/c. Transmit/Receive Structure - -This driver attempts to use a zero-copy receive and transmit scheme. - -Alas, all data buffers are required to start on a 32 bit boundary, so -the driver must often copy transmit packets into bounce buffers. - -The driver allocates full frame size skbuffs for the Rx ring buffers at -open() time and passes the skb->data field to the chip as receive data -buffers. When an incoming frame is less than RX_COPYBREAK bytes long, -a fresh skbuff is allocated and the frame is copied to the new skbuff. -When the incoming frame is larger, the skbuff is passed directly up the -protocol stack. Buffers consumed this way are replaced by newly allocated -skbuffs in the last phase of netdev_rx(). - -The RX_COPYBREAK value is chosen to trade-off the memory wasted by -using a full-sized skbuff for small frames vs. the copying costs of larger -frames. New boards are typically used in generously configured machines -and the underfilled buffers have negligible impact compared to the benefit of -a single allocation size, so the default value of zero results in never -copying packets. When copying is done, the cost is usually mitigated by using -a combined copy/checksum routine. Copying also preloads the cache, which is -most useful with small frames. - -Since the VIA chips are only able to transfer data to buffers on 32 bit -boundaries, the the IP header at offset 14 in an ethernet frame isn't -longword aligned for further processing. Copying these unaligned buffers -has the beneficial effect of 16-byte aligning the IP header. - -IIId. Synchronization - -The driver runs as two independent, single-threaded flows of control. One -is the send-packet routine, which enforces single-threaded use by the -dev->tbusy flag. The other thread is the interrupt handler, which is single -threaded by the hardware and interrupt handling software. - -The send packet thread has partial control over the Tx ring and 'dev->tbusy' -flag. It sets the tbusy flag whenever it's queuing a Tx packet. If the next -queue slot is empty, it clears the tbusy flag when finished otherwise it sets -the 'lp->tx_full' flag. - -The interrupt handler has exclusive control over the Rx ring and records stats -from the Tx ring. After reaping the stats, it marks the Tx queue entry as -empty by incrementing the dirty_tx mark. Iff the 'lp->tx_full' flag is set, it -clears both the tx_full and tbusy flags. - -IV. Notes - -IVb. References - -Preliminary VT86C100A manual from http://www.via.com.tw/ -http://cesdis.gsfc.nasa.gov/linux/misc/100mbps.html -http://cesdis.gsfc.nasa.gov/linux/misc/NWay.html - -IVc. Errata - -The VT86C100A manual is not reliable information. -The chip does not handle unaligned transmit or receive buffers, resulting -in significant performance degradation for bounce buffer copies on transmit -and unaligned IP headers on receive. -The chip does not pad to minimum transmit length. - -*/ - -#define PCI_VENDOR_ID_FET 0x1106 -#define PCI_DEVICE_ID_FET_3043 0x3043 - -/* The rest of these values should never change. */ -#define NUM_TX_DESC 2 /* Number of Tx descriptor registers. */ - -static struct rhine_private -{ - char devname[8]; /* Used only for kernel debugging. */ - const char *product_name; - struct rhine_rx_desc *rx_ring; - struct rhine_tx_desc *tx_ring; - char *rx_buffs[RX_RING_SIZE]; - char *tx_buffs[TX_RING_SIZE]; - - /* temporary Rx buffers. */ - - int chip_id; - int chip_revision; - unsigned short ioaddr; - unsigned int cur_rx, cur_tx; /* The next free and used entries */ - unsigned int dirty_rx, dirty_tx; - /* The saved address of a sent-in-place packet/buffer, for skfree(). */ - struct sk_buff *tx_skbuff[TX_RING_SIZE]; - unsigned char mc_filter[8]; /* Current multicast filter. */ - char phys[4]; /* MII device addresses. */ - unsigned int tx_full:1; /* The Tx queue is full. */ - unsigned int full_duplex:1; /* Full-duplex operation requested. */ - unsigned int default_port:4; /* Last dev->if_port value. */ - unsigned int media2:4; /* Secondary monitored media port. */ - unsigned int medialock:1; /* Don't sense media type. */ - unsigned int mediasense:1; /* Media sensing in progress. */ -} -rhine; - -static struct nic *rhine_probe1 (struct nic *dev, int ioaddr, - int chip_id, int options); -static int QueryAuto (int); -static int ReadMII (int byMIIIndex, int); -static void WriteMII (char, char, char, int); -static void MIIDelay (void); -static void rhine_init_ring (struct nic *dev); -static void rhine_disable (struct nic *nic); -static void rhine_reset (struct nic *nic); -static int rhine_poll (struct nic *nic); -static void rhine_transmit (struct nic *nic, const char *d, unsigned int t, - unsigned int s, const char *p); - -/* Linux support functions */ -#define virt_to_bus(x) ((unsigned long)x) -#define bus_to_virt(x) ((void *)x) - -/* Initialize the Rx and Tx rings, along with various 'dev' bits. */ -static void -rhine_init_ring (struct nic *nic) -{ - struct rhine_private *tp = (struct rhine_private *) nic->priv_data; - int i; - - tp->tx_full = 0; - tp->cur_rx = tp->cur_tx = 0; - tp->dirty_rx = tp->dirty_tx = 0; - - for (i = 0; i < RX_RING_SIZE; i++) - { - - tp->rx_ring[i].rx_status.bits.own_bit = 1; - tp->rx_ring[i].rx_ctrl.bits.rx_buf_size = 1536; - - tp->rx_ring[i].buf_addr_1 = virt_to_bus (tp->rx_buffs[i]); - tp->rx_ring[i].buf_addr_2 = virt_to_bus (&tp->rx_ring[i + 1]); - /* printf("[%d]buf1=%hX,buf2=%hX",i,tp->rx_ring[i].buf_addr_1,tp->rx_ring[i].buf_addr_2); */ - } - /* Mark the last entry as wrapping the ring. */ - /* tp->rx_ring[i-1].rx_ctrl.bits.rx_buf_size =1518; */ - tp->rx_ring[i - 1].buf_addr_2 = virt_to_bus (&tp->rx_ring[0]); - /*printf("[%d]buf1=%hX,buf2=%hX",i-1,tp->rx_ring[i-1].buf_addr_1,tp->rx_ring[i-1].buf_addr_2); */ - - /* The Tx buffer descriptor is filled in as needed, but we - do need to clear the ownership bit. */ - - for (i = 0; i < TX_RING_SIZE; i++) - { - - tp->tx_ring[i].tx_status.lw = 0; - tp->tx_ring[i].tx_ctrl.lw = 0x00e08000; - tp->tx_ring[i].buf_addr_1 = virt_to_bus (tp->tx_buffs[i]); - tp->tx_ring[i].buf_addr_2 = virt_to_bus (&tp->tx_ring[i + 1]); - /* printf("[%d]buf1=%hX,buf2=%hX",i,tp->tx_ring[i].buf_addr_1,tp->tx_ring[i].buf_addr_2); */ - } - - tp->tx_ring[i - 1].buf_addr_2 = virt_to_bus (&tp->tx_ring[0]); - /* printf("[%d]buf1=%hX,buf2=%hX",i,tp->tx_ring[i-1].buf_addr_1,tp->tx_ring[i-1].buf_addr_2); */ -} - -int -QueryAuto (int ioaddr) -{ - int byMIIIndex; - int MIIReturn; - - int advertising,mii_reg5; - int negociated; - - byMIIIndex = 0x04; - MIIReturn = ReadMII (byMIIIndex, ioaddr); - advertising=MIIReturn; - - byMIIIndex = 0x05; - MIIReturn = ReadMII (byMIIIndex, ioaddr); - mii_reg5=MIIReturn; - - negociated=mii_reg5 & advertising; - - if ( (negociated & 0x100) || (negociated & 0x1C0) == 0x40 ) - return 1; - else - return 0; - -} - -int -ReadMII (int byMIIIndex, int ioaddr) -{ - int ReturnMII; - char byMIIAdrbak; - char byMIICRbak; - char byMIItemp; - - byMIIAdrbak = inb (byMIIAD); - byMIICRbak = inb (byMIICR); - outb (byMIICRbak & 0x7f, byMIICR); - MIIDelay (); - - outb (byMIIIndex, byMIIAD); - MIIDelay (); - - outb (inb (byMIICR) | 0x40, byMIICR); - - byMIItemp = inb (byMIICR); - byMIItemp = byMIItemp & 0x40; - - while (byMIItemp != 0) - { - byMIItemp = inb (byMIICR); - byMIItemp = byMIItemp & 0x40; - } - MIIDelay (); - - ReturnMII = inw (wMIIDATA); - - outb (byMIIAdrbak, byMIIAD); - outb (byMIICRbak, byMIICR); - MIIDelay (); - - return (ReturnMII); - -} - -void -WriteMII (char byMIISetByte, char byMIISetBit, char byMIIOP, int ioaddr) -{ - int ReadMIItmp; - int MIIMask; - char byMIIAdrbak; - char byMIICRbak; - char byMIItemp; - - - byMIIAdrbak = inb (byMIIAD); - - byMIICRbak = inb (byMIICR); - outb (byMIICRbak & 0x7f, byMIICR); - MIIDelay (); - outb (byMIISetByte, byMIIAD); - MIIDelay (); - - outb (inb (byMIICR) | 0x40, byMIICR); - - byMIItemp = inb (byMIICR); - byMIItemp = byMIItemp & 0x40; - - while (byMIItemp != 0) - { - byMIItemp = inb (byMIICR); - byMIItemp = byMIItemp & 0x40; - } - MIIDelay (); - - ReadMIItmp = inw (wMIIDATA); - MIIMask = 0x0001; - MIIMask = MIIMask << byMIISetBit; - - - if (byMIIOP == 0) - { - MIIMask = ~MIIMask; - ReadMIItmp = ReadMIItmp & MIIMask; - } - else - { - ReadMIItmp = ReadMIItmp | MIIMask; - - } - outw (ReadMIItmp, wMIIDATA); - MIIDelay (); - - outb (inb (byMIICR) | 0x20, byMIICR); - byMIItemp = inb (byMIICR); - byMIItemp = byMIItemp & 0x20; - - while (byMIItemp != 0) - { - byMIItemp = inb (byMIICR); - byMIItemp = byMIItemp & 0x20; - } - MIIDelay (); - - outb (byMIIAdrbak & 0x7f, byMIIAD); - outb (byMIICRbak, byMIICR); - MIIDelay (); - -} - -void -MIIDelay (void) -{ - int i; - for (i = 0; i < 0x7fff; i++) - { - inb (0x61); - inb (0x61); - inb (0x61); - inb (0x61); - } -} - -struct nic * -rhine_probe (struct nic *nic, unsigned short *probeaddrs, - struct pci_device *pci) -{ - if (!pci->ioaddr) - return NULL; - nic = rhine_probe1 (nic, pci->ioaddr, 0, -1); - - if (nic) - adjust_pci_device(pci); - nic->poll = rhine_poll; - nic->transmit = rhine_transmit; - nic->reset = rhine_reset; - nic->disable = rhine_disable; - rhine_reset (nic); - - return nic; -} - -static struct nic * -rhine_probe1 (struct nic *nic, int ioaddr, int chip_id, int options) -{ - struct rhine_private *tp; - static int did_version = 0; /* Already printed version info. */ - int i; - unsigned int timeout; - int FDXFlag; - int byMIIvalue, LineSpeed, MIICRbak; - - if (rhine_debug > 0 && did_version++ == 0) - printf (version); - /* Perhaps this should be read from the EEPROM? */ - for (i = 0; i < ETH_ALEN; i++) - nic->node_addr[i] = inb (byPAR0 + i); - printf ("IO address %hX Ethernet Address: %!\n", ioaddr, nic->node_addr); - - /* restart MII auto-negotiation */ - WriteMII (0, 9, 1, ioaddr); - printf ("Analyzing Media type,this will take several seconds........"); - for (i = 0; i < 5; i++) - { - /* need to wait 1 millisecond - we will round it up to 50-100ms */ - timeout = currticks() + 2; - for (timeout = currticks() + 2; currticks() < timeout;) - /* nothing */; - if (ReadMII (1, ioaddr) & 0x0020) - break; - } - printf ("OK\n"); - -#if 0 - /* JJM : for Debug */ - printf("MII : Address %hhX ",inb(ioaddr+0x6c)); - { - unsigned char st1,st2,adv1,adv2,l1,l2; - - st1=ReadMII(1,ioaddr)>>8; - st2=ReadMII(1,ioaddr)&0xFF; - adv1=ReadMII(4,ioaddr)>>8; - adv2=ReadMII(4,ioaddr)&0xFF; - l1=ReadMII(5,ioaddr)>>8; - l2=ReadMII(5,ioaddr)&0xFF; - printf(" status 0x%hhX%hhX, advertising 0x%hhX%hhX, link 0x%hhX%hhX\n", st1,st2,adv1,adv2,l1,l2); - } -#endif - - /* query MII to know LineSpeed,duplex mode */ - byMIIvalue = inb (ioaddr + 0x6d); - LineSpeed = byMIIvalue & MIISR_SPEED; - if (LineSpeed != 0) //JJM - { - printf ("Linespeed=10Mbs"); - } - else - { - printf ("Linespeed=100Mbs"); - } - - FDXFlag = QueryAuto (ioaddr); - if (FDXFlag == 1) - { - printf (" Fullduplex\n"); - outw (CR_FDX, byCR0); - } - else - { - printf (" Halfduplex\n"); - } - - - /* set MII 10 FULL ON */ - WriteMII (17, 1, 1, ioaddr); - - /* turn on MII link change */ - MIICRbak = inb (byMIICR); - outb (MIICRbak & 0x7F, byMIICR); - MIIDelay (); - outb (0x41, byMIIAD); - MIIDelay (); - - /* while((inb(byMIIAD)&0x20)==0) ; */ - outb (MIICRbak | 0x80, byMIICR); - - nic->priv_data = &rhine; - tp = &rhine; - tp->chip_id = chip_id; - tp->ioaddr = ioaddr; - tp->phys[0] = -1; - - /* The lower four bits are the media type. */ - if (options > 0) - { - tp->full_duplex = (options & 16) ? 1 : 0; - tp->default_port = options & 15; - if (tp->default_port) - tp->medialock = 1; - } - return nic; -} - -static void -rhine_disable (struct nic *nic) -{ - struct rhine_private *tp = (struct rhine_private *) nic->priv_data; - int ioaddr = tp->ioaddr; - - printf ("rhine disable\n"); - /* Switch to loopback mode to avoid hardware races. */ - writeb(0x60 | 0x01, byTCR); - /* Stop the chip's Tx and Rx processes. */ - writew(CR_STOP, byCR0); -} - -/************************************************************************** -ETH_RESET - Reset adapter -***************************************************************************/ -static void -rhine_reset (struct nic *nic) -{ - struct rhine_private *tp = (struct rhine_private *) nic->priv_data; - int ioaddr = tp->ioaddr; - int i, j; - int FDXFlag, CRbak; - int rx_ring_tmp, rx_ring_tmp1; - int tx_ring_tmp, tx_ring_tmp1; - int rx_bufs_tmp, rx_bufs_tmp1; - int tx_bufs_tmp, tx_bufs_tmp1; - -#ifdef USE_LOWMEM_BUFFER -#define buf1 (0x10000 - (RX_RING_SIZE * PKT_BUF_SZ + 32)) -#define buf2 (buf1 - (RX_RING_SIZE * PKT_BUF_SZ + 32)) -#define desc1 (buf2 - (TX_RING_SIZE * sizeof (struct rhine_tx_desc) + 32)) -#define desc2 (desc1 - (TX_RING_SIZE * sizeof (struct rhine_tx_desc) + 32)) -#else - static char buf1[RX_RING_SIZE * PKT_BUF_SZ + 32]; - static char buf2[RX_RING_SIZE * PKT_BUF_SZ + 32]; - static char desc1[TX_RING_SIZE * sizeof (struct rhine_tx_desc) + 32]; - static char desc2[TX_RING_SIZE * sizeof (struct rhine_tx_desc) + 32]; -#endif - - /* printf ("rhine_reset\n"); */ - /* Soft reset the chip. */ - /*outb(CmdReset, ioaddr + ChipCmd); */ - - tx_bufs_tmp = (int) buf1; - tx_ring_tmp = (int) desc1; - rx_bufs_tmp = (int) buf2; - rx_ring_tmp = (int) desc2; - - /* tune RD TD 32 byte alignment */ - rx_ring_tmp1 = (int) virt_to_bus ((char *) rx_ring_tmp); - j = (rx_ring_tmp1 + 32) & (~0x1f); - /* printf ("txring[%d]", j); */ - tp->rx_ring = (struct rhine_rx_desc *) bus_to_virt (j); - - tx_ring_tmp1 = (int) virt_to_bus ((char *) tx_ring_tmp); - j = (tx_ring_tmp1 + 32) & (~0x1f); - tp->tx_ring = (struct rhine_tx_desc *) bus_to_virt (j); - /* printf ("rxring[%X]", j); */ - - - tx_bufs_tmp1 = (int) virt_to_bus ((char *) tx_bufs_tmp); - j = (int) (tx_bufs_tmp1 + 32) & (~0x1f); - tx_bufs_tmp = (int) bus_to_virt (j); - /* printf ("txb[%X]", j); */ - - rx_bufs_tmp1 = (int) virt_to_bus ((char *) rx_bufs_tmp); - j = (int) (rx_bufs_tmp1 + 32) & (~0x1f); - rx_bufs_tmp = (int) bus_to_virt (j); - /* printf ("rxb[%X][%X]", rx_bufs_tmp1, j); */ - - for (i = 0; i < RX_RING_SIZE; i++) - { - tp->rx_buffs[i] = (char *) rx_bufs_tmp; - /* printf("r[%X]",tp->rx_buffs[i]); */ - rx_bufs_tmp += 1536; - } - - for (i = 0; i < TX_RING_SIZE; i++) - { - tp->tx_buffs[i] = (char *) tx_bufs_tmp; - /* printf("t[%X]",tp->tx_buffs[i]); */ - tx_bufs_tmp += 1536; - } - - /* software reset */ - outb (CR1_SFRST, byCR1); - MIIDelay (); - - /* printf ("init ring"); */ - rhine_init_ring (nic); - /*write TD RD Descriptor to MAC */ - outl (virt_to_bus (tp->rx_ring), dwCurrentRxDescAddr); - outl (virt_to_bus (tp->tx_ring), dwCurrentTxDescAddr); - - /* close IMR */ - outw (0x0000, byIMR0); - - /* set TCR RCR threshold */ - outb (0x06, byBCR0); - outb (0x00, byBCR1); - outb (0x2c, byRCR); - outb (0x60, byTCR); - /* Set Fulldupex */ - FDXFlag = QueryAuto (ioaddr); - if (FDXFlag == 1) - { - outb (CFGD_CFDX, byCFGD); - outw (CR_FDX, byCR0); - } - - /* KICK NIC to WORK */ - CRbak = inw (byCR0); - CRbak = CRbak & 0xFFFB; /* not CR_STOP */ - outw ((CRbak | CR_STRT | CR_TXON | CR_RXON | CR_DPOLL), byCR0); - - /*set IMR to work */ - outw (IMRShadow, byIMR0); -} - -static int -rhine_poll (struct nic *nic) -{ - struct rhine_private *tp = (struct rhine_private *) nic->priv_data; - int rxstatus, good = 0;; - - if (tp->rx_ring[tp->cur_rx].rx_status.bits.own_bit == 0) - { - rxstatus = tp->rx_ring[tp->cur_rx].rx_status.lw; - if ((rxstatus & 0x0300) != 0x0300) - { - printf("rhine_poll: bad status\n"); - } - else if (rxstatus & (RSR_ABNORMAL)) - { - printf ("rxerr[%X]\n", rxstatus); - } - else - good = 1; - - if (good) - { - nic->packetlen = tp->rx_ring[tp->cur_rx].rx_status.bits.frame_length; - memcpy (nic->packet, tp->rx_buffs[tp->cur_rx], nic->packetlen); - /* printf ("Packet RXed\n"); */ - } - tp->rx_ring[tp->cur_rx].rx_status.bits.own_bit = 1; - tp->cur_rx++; - tp->cur_rx = tp->cur_rx % RX_RING_SIZE; - } - return good; -} - -static void -rhine_transmit (struct nic *nic, - const char *d, unsigned int t, unsigned int s, const char *p) -{ - struct rhine_private *tp = (struct rhine_private *) nic->priv_data; - int ioaddr = tp->ioaddr; - int entry; - unsigned char CR1bak; - - /*printf ("rhine_transmit\n"); */ - /* setup ethernet header */ - - - /* Calculate the next Tx descriptor entry. */ - entry = tp->cur_tx % TX_RING_SIZE; - - memcpy (tp->tx_buffs[entry], d, ETH_ALEN); /* dst */ - memcpy (tp->tx_buffs[entry] + ETH_ALEN, nic->node_addr, ETH_ALEN); /* src */ - *((char *) tp->tx_buffs[entry] + 12) = t >> 8; /* type */ - *((char *) tp->tx_buffs[entry] + 13) = t; - memcpy (tp->tx_buffs[entry] + ETH_HLEN, p, s); - s += ETH_HLEN; - while (s < ETH_ZLEN) - *((char *) tp->tx_buffs[entry] + ETH_HLEN + (s++)) = 0; - - tp->tx_ring[entry].tx_ctrl.bits.tx_buf_size = ETH_HLEN + s; - - tp->tx_ring[entry].tx_status.bits.own_bit = 1; - - - CR1bak = inb (byCR1); - - CR1bak = CR1bak | CR1_TDMD1; - /*printf("tdsw=[%X]",tp->tx_ring[entry].tx_status.lw); */ - /*printf("tdcw=[%X]",tp->tx_ring[entry].tx_ctrl.lw); */ - /*printf("tdbuf1=[%X]",tp->tx_ring[entry].buf_addr_1); */ - /*printf("tdbuf2=[%X]",tp->tx_ring[entry].buf_addr_2); */ - /*printf("td1=[%X]",inl(dwCurrentTDSE0)); */ - /*printf("td2=[%X]",inl(dwCurrentTDSE1)); */ - /*printf("td3=[%X]",inl(dwCurrentTDSE2)); */ - /*printf("td4=[%X]",inl(dwCurrentTDSE3)); */ - - outb (CR1bak, byCR1); - tp->cur_tx++; - - /*outw(IMRShadow,byIMR0); */ - /*dev_kfree_skb(tp->tx_skbuff[entry], FREE_WRITE); */ - /*tp->tx_skbuff[entry] = 0; */ -} - -/* EOF via-rhine.c */ diff --git a/netboot/w89c840.c b/netboot/w89c840.c deleted file mode 100644 index cc268c66f..000000000 --- a/netboot/w89c840.c +++ /dev/null @@ -1,934 +0,0 @@ -/* - * Etherboot - BOOTP/TFTP Bootstrap Program - * - * w89c840.c -- This file implements the winbond-840 driver for etherboot. - * - */ - -/* - * Adapted by Igor V. Kovalenko - * -- - * OR - * -- - * Initial adaptaion stage, including testing, completed 23 August 2000. - */ - -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* - * date version by what - * Written: Aug 20 2000 V0.10 iko Initial revision. - * changes: Aug 22 2000 V0.90 iko Works! - * Aug 23 2000 V0.91 iko Cleanup, posted to etherboot - * maintainer. - * Aug 26 2000 V0.92 iko Fixed Rx ring handling. - * First Linux Kernel (TM) - * successfully loaded using - * this driver. - * Jan 07 2001 V0.93 iko Transmitter timeouts are handled - * using timer2 routines. Proposed - * by Ken Yap to eliminate CPU speed - * dependency. - * - * This is the etherboot driver for cards based on Winbond W89c840F chip. - * - * It was written from skeleton source, with Donald Becker's winbond-840.c - * kernel driver as a guideline. Mostly the w89c840 related definitions - * and the lower level routines have been cut-and-pasted into this source. - * - * Frankly speaking, about 90% of the code was obtained using cut'n'paste - * sequence :) while the remainder appeared while brainstorming - * Linux Kernel 2.4.0-testX source code. Thanks, Donald and Linus! - * - * There was a demand for using this card in a rather large - * remote boot environment at MSKP OVTI Lab of - * Moscow Institute for Physics and Technology (MIPT) -- http://www.mipt.ru/ - * so you may count that for motivation. - * - */ - -/* - * If you want to see debugging output then define W89C840_DEBUG - */ - -/* -#define W89C840_DEBUG -*/ - -/* - * Keep using IO_OPS for Etherboot driver! - */ -#define USE_IO_OPS - -#include "etherboot.h" -#include "nic.h" -#include "pci.h" -#include "cards.h" -#include "timer.h" - -static const char *w89c840_version = "diver Version 0.92 - August 27, 2000"; - -typedef unsigned char u8; -typedef signed char s8; -typedef unsigned short u16; -typedef signed short s16; -typedef unsigned int u32; -typedef signed int s32; - -/* Linux support functions */ -#define virt_to_bus(x) ((unsigned long)x) -#define bus_to_virt(x) ((void *)x) - -#define virt_to_le32desc(addr) virt_to_bus(addr) -#define le32desc_to_virt(addr) bus_to_virt(addr) - -/* -#define cpu_to_le32(val) (val) -#define le32_to_cpu(val) (val) -*/ - -/* Operational parameters that are set at compile time. */ - -/* Keep the ring sizes a power of two for compile efficiency. - The compiler will convert '%'<2^N> into a bit mask. - Making the Tx ring too large decreases the effectiveness of channel - bonding and packet priority. - There are no ill effects from too-large receive rings. */ -#define TX_RING_SIZE 2 - -#define RX_RING_SIZE 2 - -/* The presumed FIFO size for working around the Tx-FIFO-overflow bug. - To avoid overflowing we don't queue again until we have room for a - full-size packet. - */ -#define TX_FIFO_SIZE (2048) -#define TX_BUG_FIFO_LIMIT (TX_FIFO_SIZE-1514-16) - -/* Operational parameters that usually are not changed. */ -/* Time in jiffies before concluding the transmitter is hung. */ -#define TX_TIMEOUT (10*TICKS_PER_MS) - -#define PKT_BUF_SZ 1536 /* Size of each temporary Rx buffer.*/ - -/* - * Used to be this much CPU loops on Celeron@400 (?), - * now using real timer and TX_TIMEOUT! - * #define TX_LOOP_COUNT 10000000 - */ - -#if !defined(__OPTIMIZE__) -#warning You must compile this file with the correct options! -#warning See the last lines of the source file. -#error You must compile this driver with "-O". -#endif - -enum chip_capability_flags {CanHaveMII=1, HasBrokenTx=2}; - -#ifdef USE_IO_OPS -#define W840_FLAGS (PCI_USES_IO | PCI_ADDR0 | PCI_USES_MASTER) -#else -#define W840_FLAGS (PCI_USES_MEM | PCI_ADDR1 | PCI_USES_MASTER) -#endif - -static u32 driver_flags = CanHaveMII | HasBrokenTx; - -/* This driver was written to use PCI memory space, however some x86 systems - work only with I/O space accesses. Pass -DUSE_IO_OPS to use PCI I/O space - accesses instead of memory space. */ - -#ifdef USE_IO_OPS -#undef readb -#undef readw -#undef readl -#undef writeb -#undef writew -#undef writel -#define readb inb -#define readw inw -#define readl inl -#define writeb outb -#define writew outw -#define writel outl -#endif - -/* Offsets to the Command and Status Registers, "CSRs". - While similar to the Tulip, these registers are longword aligned. - Note: It's not useful to define symbolic names for every register bit in - the device. The name can only partially document the semantics and make - the driver longer and more difficult to read. -*/ -enum w840_offsets { - PCIBusCfg=0x00, TxStartDemand=0x04, RxStartDemand=0x08, - RxRingPtr=0x0C, TxRingPtr=0x10, - IntrStatus=0x14, NetworkConfig=0x18, IntrEnable=0x1C, - RxMissed=0x20, EECtrl=0x24, MIICtrl=0x24, BootRom=0x28, GPTimer=0x2C, - CurRxDescAddr=0x30, CurRxBufAddr=0x34, /* Debug use */ - MulticastFilter0=0x38, MulticastFilter1=0x3C, StationAddr=0x40, - CurTxDescAddr=0x4C, CurTxBufAddr=0x50, -}; - -/* Bits in the interrupt status/enable registers. */ -/* The bits in the Intr Status/Enable registers, mostly interrupt sources. */ -enum intr_status_bits { - NormalIntr=0x10000, AbnormalIntr=0x8000, - IntrPCIErr=0x2000, TimerInt=0x800, - IntrRxDied=0x100, RxNoBuf=0x80, IntrRxDone=0x40, - TxFIFOUnderflow=0x20, RxErrIntr=0x10, - TxIdle=0x04, IntrTxStopped=0x02, IntrTxDone=0x01, -}; - -/* Bits in the NetworkConfig register. */ -enum rx_mode_bits { - AcceptErr=0x80, AcceptRunt=0x40, - AcceptBroadcast=0x20, AcceptMulticast=0x10, - AcceptAllPhys=0x08, AcceptMyPhys=0x02, -}; - -enum mii_reg_bits { - MDIO_ShiftClk=0x10000, MDIO_DataIn=0x80000, MDIO_DataOut=0x20000, - MDIO_EnbOutput=0x40000, MDIO_EnbIn = 0x00000, -}; - -/* The Tulip Rx and Tx buffer descriptors. */ -struct w840_rx_desc { - s32 status; - s32 length; - u32 buffer1; - u32 next_desc; -}; - -struct w840_tx_desc { - s32 status; - s32 length; - u32 buffer1, buffer2; /* We use only buffer 1. */ -}; - -/* Bits in network_desc.status */ -enum desc_status_bits { - DescOwn=0x80000000, DescEndRing=0x02000000, DescUseLink=0x01000000, - DescWholePkt=0x60000000, DescStartPkt=0x20000000, DescEndPkt=0x40000000, - DescIntr=0x80000000, -}; -#define PRIV_ALIGN 15 /* Required alignment mask */ -#define PRIV_ALIGN_BYTES 32 - -static struct winbond_private -{ - /* Descriptor rings first for alignment. */ - struct w840_rx_desc rx_ring[RX_RING_SIZE]; - struct w840_tx_desc tx_ring[TX_RING_SIZE]; - struct net_device *next_module; /* Link for devices of this type. */ - void *priv_addr; /* Unaligned address for kfree */ - const char *product_name; - /* Frequently used values: keep some adjacent for cache effect. */ - int chip_id, drv_flags; - struct pci_dev *pci_dev; - int csr6; - struct w840_rx_desc *rx_head_desc; - unsigned int cur_rx, dirty_rx; /* Producer/consumer ring indices */ - unsigned int rx_buf_sz; /* Based on MTU+slack. */ - unsigned int cur_tx, dirty_tx; - int tx_q_bytes; - unsigned int tx_full:1; /* The Tx queue is full. */ - /* These values are keep track of the transceiver/media in use. */ - unsigned int full_duplex:1; /* Full-duplex operation requested. */ - unsigned int duplex_lock:1; - unsigned int medialock:1; /* Do not sense media. */ - unsigned int default_port:4; /* Last dev->if_port value. */ - /* MII transceiver section. */ - int mii_cnt; /* MII device addresses. */ - u16 advertising; /* NWay media advertisement */ - unsigned char phys[2]; /* MII device addresses. */ -} w840private __attribute__ ((aligned (PRIV_ALIGN_BYTES))); - -/* NIC specific static variables go here */ - -static int ioaddr; -static unsigned short eeprom [0x40]; - -#ifdef USE_LOWMEM_BUFFER -#define rx_packet ((char *)0x10000 - PKT_BUF_SZ * RX_RING_SIZE) -#define tx_packet ((char *)0x10000 - PKT_BUF_SZ * RX_RING_SIZE - PKT_BUF_SZ * TX_RING_SIZE) -#else -static char rx_packet[PKT_BUF_SZ * RX_RING_SIZE]; -static char tx_packet[PKT_BUF_SZ * TX_RING_SIZE]; -#endif - -static int eeprom_read(long ioaddr, int location); -static int mdio_read(int base_address, int phy_id, int location); -static void mdio_write(int base_address, int phy_id, int location, int value); - -static void check_duplex(void); -static void set_rx_mode(void); -static void init_ring(void); - -/* -static void wait_long_time(void) -{ - printf("Paused - please read output above this line\n"); - sleep(3); -} -*/ - -#if defined W89C840_DEBUG -static void decode_interrupt(u32 intr_status) -{ - printf("Interrupt status: "); - -#define TRACE_INTR(_intr_) \ - if (intr_status & (_intr_)) { printf (" " #_intr_); } - - TRACE_INTR(NormalIntr); - TRACE_INTR(AbnormalIntr); - TRACE_INTR(IntrPCIErr); - TRACE_INTR(TimerInt); - TRACE_INTR(IntrRxDied); - TRACE_INTR(RxNoBuf); - TRACE_INTR(IntrRxDone); - TRACE_INTR(TxFIFOUnderflow); - TRACE_INTR(RxErrIntr); - TRACE_INTR(TxIdle); - TRACE_INTR(IntrTxStopped); - TRACE_INTR(IntrTxDone); - - printf("\n"); - /*sleep(1);*/ -} -#endif - -/************************************************************************** -w89c840_reset - Reset adapter -***************************************************************************/ -static void w89c840_reset(struct nic *nic) -{ - int i; - - /* Reset the chip to erase previous misconfiguration. - No hold time required! */ - writel(0x00000001, ioaddr + PCIBusCfg); - - init_ring(); - - writel(virt_to_bus(w840private.rx_ring), ioaddr + RxRingPtr); - writel(virt_to_bus(w840private.tx_ring), ioaddr + TxRingPtr); - - for (i = 0; i < ETH_ALEN; i++) - writeb(nic->node_addr[i], ioaddr + StationAddr + i); - - /* Initialize other registers. */ - /* Configure the PCI bus bursts and FIFO thresholds. - 486: Set 8 longword cache alignment, 8 longword burst. - 586: Set 16 longword cache alignment, no burst limit. - Cache alignment bits 15:14 Burst length 13:8 - 0000 0000 align to cache 0800 8 longwords - 4000 8 longwords 0100 1 longword 1000 16 longwords - 8000 16 longwords 0200 2 longwords 2000 32 longwords - C000 32 longwords 0400 4 longwords - Wait the specified 50 PCI cycles after a reset by initializing - Tx and Rx queues and the address filter list. */ - - writel(0xE010, ioaddr + PCIBusCfg); - - writel(0, ioaddr + RxStartDemand); - w840private.csr6 = 0x20022002; - check_duplex(); - set_rx_mode(); - - /* Clear and Enable interrupts by setting the interrupt mask. */ - writel(0x1A0F5, ioaddr + IntrStatus); - writel(0x1A0F5, ioaddr + IntrEnable); - -#if defined(W89C840_DEBUG) - printf("winbond-840 : Done reset.\n"); -#endif -} - -static void handle_intr(u32 intr_stat) -{ - if ((intr_stat & (NormalIntr|AbnormalIntr)) == 0) { - /* we are polling, do not return now */ - /*return 0;*/ - } else { - /* Acknowledge all of the current interrupt sources ASAP. */ - writel(intr_stat & 0x001ffff, ioaddr + IntrStatus); - } - - if (intr_stat & AbnormalIntr) { - /* There was an abnormal interrupt */ - printf("\n-=- Abnormal interrupt.\n"); - -#if defined (W89C840_DEBUG) - decode_interrupt(intr_stat); -#endif - - if (intr_stat & RxNoBuf) { - /* There was an interrupt */ - printf("-=- <=> No receive buffers available.\n"); - writel(0, ioaddr + RxStartDemand); - } - } -} - -/************************************************************************** -w89c840_poll - Wait for a frame -***************************************************************************/ -static int w89c840_poll(struct nic *nic) -{ - /* return true if there's an ethernet packet ready to read */ - /* nic->packet should contain data on return */ - /* nic->packetlen should contain length of data */ - int packet_received = 0; - - u32 intr_status = readl(ioaddr + IntrStatus); - /* handle_intr(intr_status); */ /* -- handled later */ - - do { - /* Code from netdev_rx(dev) */ - - int entry = w840private.cur_rx % RX_RING_SIZE; - - struct w840_rx_desc *desc = w840private.rx_head_desc; - s32 status = desc->status; - - if (status & DescOwn) { - /* DescOwn bit is still set, we should wait for RX to complete */ - packet_received = 0; - break; - } - - if ((status & 0x38008300) != 0x0300) { - if ((status & 0x38000300) != 0x0300) { - /* Ingore earlier buffers. */ - if ((status & 0xffff) != 0x7fff) { - printf("winbond-840 : Oversized Ethernet frame spanned " - "multiple buffers, entry %d status %X !\n", - w840private.cur_rx, status); - } - } else if (status & 0x8000) { - /* There was a fatal error. */ -#if defined(W89C840_DEBUG) - printf("winbond-840 : Receive error, Rx status %X :", status); - if (status & 0x0890) { - printf(" RXLEN_ERROR"); - } - if (status & 0x004C) { - printf(", FRAME_ERROR"); - } - if (status & 0x0002) { - printf(", CRC_ERROR"); - } - printf("\n"); -#endif - - /* Simpy do a reset now... */ - w89c840_reset(nic); - - packet_received = 0; - break; - } - } else { - /* Omit the four octet CRC from the length. */ - int pkt_len = ((status >> 16) & 0x7ff) - 4; - -#if defined(W89C840_DEBUG) - printf(" netdev_rx() normal Rx pkt ring %d length %d status %X\n", entry, pkt_len, status); -#endif - - nic->packetlen = pkt_len; - - /* Check if the packet is long enough to accept without copying - to a minimally-sized skbuff. */ - - memcpy(nic->packet, le32desc_to_virt(w840private.rx_ring[entry].buffer1), pkt_len); - packet_received = 1; - - /* Release buffer to NIC */ - w840private.rx_ring[entry].status = DescOwn; - -#if defined(W89C840_DEBUG) - /* You will want this info for the initial debug. */ - printf(" Rx data %hhX:%hhX:%hhX:%hhX:%hhX:" - "%hhX %hhX:%hhX:%hhX:%hhX:%hhX:%hhX %hhX%hhX " - "%hhX.%hhX.%hhX.%hhX.\n", - nic->packet[0], nic->packet[1], nic->packet[2], nic->packet[3], - nic->packet[4], nic->packet[5], nic->packet[6], nic->packet[7], - nic->packet[8], nic->packet[9], nic->packet[10], - nic->packet[11], nic->packet[12], nic->packet[13], - nic->packet[14], nic->packet[15], nic->packet[16], - nic->packet[17]); -#endif - - } - - entry = (++w840private.cur_rx) % RX_RING_SIZE; - w840private.rx_head_desc = &w840private.rx_ring[entry]; - } while (0); - - if (intr_status & (AbnormalIntr | TxFIFOUnderflow | IntrPCIErr |TimerInt | IntrTxStopped)) { - handle_intr(intr_status); - } - - return packet_received; -} - -/************************************************************************** -w89c840_transmit - Transmit a frame -***************************************************************************/ - -static void w89c840_transmit( - struct nic *nic, - const char *d, /* Destination */ - unsigned int t, /* Type */ - unsigned int s, /* size */ - const char *p) /* Packet */ -{ - /* send the packet to destination */ - unsigned entry; - int transmit_status; - - /* Caution: the write order is important here, set the field - with the "ownership" bits last. */ - - /* Fill in our transmit buffer */ - entry = w840private.cur_tx % TX_RING_SIZE; - - memcpy (tx_packet, d, ETH_ALEN); /* dst */ - memcpy (tx_packet + ETH_ALEN, nic->node_addr, ETH_ALEN);/* src */ - - *((char *) tx_packet + 12) = t >> 8; /* type */ - *((char *) tx_packet + 13) = t; - - memcpy (tx_packet + ETH_HLEN, p, s); - s += ETH_HLEN; - - while (s < ETH_ZLEN) - *((char *) tx_packet + ETH_HLEN + (s++)) = 0; - - w840private.tx_ring[entry].buffer1 = virt_to_le32desc(tx_packet); - - w840private.tx_ring[entry].length = (DescWholePkt | s); - if (entry >= TX_RING_SIZE-1) /* Wrap ring */ - w840private.tx_ring[entry].length |= (DescIntr | DescEndRing); - w840private.tx_ring[entry].status = (DescOwn); - w840private.cur_tx++; - - w840private.tx_q_bytes += s; - writel(0, ioaddr + TxStartDemand); - - /* Work around horrible bug in the chip by marking the queue as full - when we do not have FIFO room for a maximum sized packet. */ - - if ((w840private.drv_flags & HasBrokenTx) && w840private.tx_q_bytes > TX_BUG_FIFO_LIMIT) { - /* Actually this is left to help finding error tails later in debugging... - * See Linux kernel driver in winbond-840.c for details. - */ - w840private.tx_full = 1; - } - -#if defined(W89C840_DEBUG) - printf("winbond-840 : Transmit frame # %d size %d queued in slot %d.\n", w840private.cur_tx, s, entry); -#endif - - /* Now wait for TX to complete. */ - transmit_status = w840private.tx_ring[entry].status; - - load_timer2(TX_TIMEOUT); - - { - u32 intr_stat = 0; - - while (1) { - - intr_stat = readl(ioaddr + IntrStatus); -#if defined(W89C840_DEBUG) - decode_interrupt(intr_stat); -#endif - - if (intr_stat & (NormalIntr | IntrTxDone)) { - - while ( (transmit_status & DescOwn) && timer2_running()) { - - transmit_status = w840private.tx_ring[entry].status; - } - - writel(intr_stat & 0x0001ffff, ioaddr + IntrStatus); - break; - } - } - } - - if ((transmit_status & DescOwn) == 0) { - -#if defined(W89C840_DEBUG) - printf("winbond-840 : transmission complete after %d wait loop iterations, status %X\n", - TX_LOOP_COUNT - transmit_loop_counter, w840private.tx_ring[entry].status); -#endif - - return; - } - - /* Transmit timed out... */ - - printf("winbond-840 : transmission TIMEOUT : status %X\n", w840private.tx_ring[entry].status); - - return; -} - -/************************************************************************** -w89c840_disable - Turn off ethernet interface -***************************************************************************/ -static void w89c840_disable(struct nic *nic) -{ - /* Don't know what to do to disable the board. Is this needed at all? */ - /* Yes, a live NIC can corrupt the loaded memory later [Ken] */ - /* Stop the chip's Tx and Rx processes. */ - writel(w840private.csr6 &= ~0x20FA, ioaddr + NetworkConfig); -} - -/************************************************************************** -w89c840_probe - Look for an adapter, this routine's visible to the outside -***************************************************************************/ -struct nic *w89c840_probe(struct nic *nic, unsigned short *probe_addrs, struct pci_device *p) -{ - u16 sum = 0; - int i, j, to; - unsigned short value; - int options; - int promisc; - - if (probe_addrs == 0 || probe_addrs[0] == 0) - return 0; - - ioaddr = probe_addrs[0]; /* Mask the bit that says "this is an io addr" */ - -#if defined(W89C840_DEBUG) - printf("winbond-840: PCI bus %hhX device function %hhX: I/O address: %hX\n", p->bus, p->devfn, ioaddr); -#endif - - ioaddr = ioaddr & ~3; /* Mask the bit that says "this is an io addr" */ - - /* if probe_addrs is 0, then routine can use a hardwired default */ - - /* From Matt Hortman */ - if (p->vendor == PCI_VENDOR_ID_WINBOND2 - && p->dev_id == PCI_DEVICE_ID_WINBOND2_89C840) { - - /* detected "Winbond W89c840 Fast Ethernet PCI NIC" */ - - } else if ( p->vendor == PCI_VENDOR_ID_COMPEX - && p->dev_id == PCI_DEVICE_ID_COMPEX_RL100ATX) { - - /* detected "Compex RL100ATX Fast Ethernet PCI NIC" */ - - } else { - /* Gee, guess what? They missed again. */ - printf("device ID : %X - is not a Compex RL100ATX NIC.\n", p->dev_id); - return 0; - } - - printf(" %s\n", w89c840_version); - - adjust_pci_device(p); - - /* Ok. Got one. Read the eeprom. */ - for (j = 0, i = 0; i < 0x40; i++) { - value = eeprom_read(ioaddr, i); - eeprom[i] = value; - sum += value; - } - - for (i=0;inode_addr[i] = (eeprom[i/2] >> (8*(i&1))) & 0xff; - } - printf ("Ethernet addr: %!\n", nic->node_addr); - -#if defined(W89C840_DEBUG) - printf("winbond-840: EEPROM checksum %hX, got eeprom", sum); -#endif - - /* Reset the chip to erase previous misconfiguration. - No hold time required! */ - writel(0x00000001, ioaddr + PCIBusCfg); - - if (driver_flags & CanHaveMII) { - int phy, phy_idx = 0; - for (phy = 1; phy < 32 && phy_idx < 4; phy++) { - int mii_status = mdio_read(ioaddr, phy, 1); - if (mii_status != 0xffff && mii_status != 0x0000) { - w840private.phys[phy_idx++] = phy; - w840private.advertising = mdio_read(ioaddr, phy, 4); - -#if defined(W89C840_DEBUG) - printf("winbond-840 : MII PHY found at address %d, status " - "%X advertising %hX.\n", phy, mii_status, w840private.advertising); -#endif - - } - } - - w840private.mii_cnt = phy_idx; - - if (phy_idx == 0) { - printf("winbond-840 : MII PHY not found -- this device may not operate correctly.\n"); - } - } - - /* point to NIC specific routines */ - nic->reset = w89c840_reset; - nic->poll = w89c840_poll; - nic->transmit = w89c840_transmit; - nic->disable = w89c840_disable; - - w89c840_reset(nic); - - return nic; -} - -/* Read the EEPROM and MII Management Data I/O (MDIO) interfaces. These are - often serial bit streams generated by the host processor. - The example below is for the common 93c46 EEPROM, 64 16 bit words. */ - -/* Delay between EEPROM clock transitions. - No extra delay is needed with 33Mhz PCI, but future 66Mhz access may need - a delay. Note that pre-2.0.34 kernels had a cache-alignment bug that - made udelay() unreliable. - The old method of using an ISA access as a delay, __SLOW_DOWN_IO__, is - depricated. -*/ -#define eeprom_delay(ee_addr) readl(ee_addr) - -enum EEPROM_Ctrl_Bits { - EE_ShiftClk=0x02, EE_Write0=0x801, EE_Write1=0x805, - EE_ChipSelect=0x801, EE_DataIn=0x08, -}; - -/* The EEPROM commands include the alway-set leading bit. */ -enum EEPROM_Cmds { - EE_WriteCmd=(5 << 6), EE_ReadCmd=(6 << 6), EE_EraseCmd=(7 << 6), -}; - -static int eeprom_read(long addr, int location) -{ - int i; - int retval = 0; - int ee_addr = addr + EECtrl; - int read_cmd = location | EE_ReadCmd; - writel(EE_ChipSelect, ee_addr); - - /* Shift the read command bits out. */ - for (i = 10; i >= 0; i--) { - short dataval = (read_cmd & (1 << i)) ? EE_Write1 : EE_Write0; - writel(dataval, ee_addr); - eeprom_delay(ee_addr); - writel(dataval | EE_ShiftClk, ee_addr); - eeprom_delay(ee_addr); - } - writel(EE_ChipSelect, ee_addr); - - for (i = 16; i > 0; i--) { - writel(EE_ChipSelect | EE_ShiftClk, ee_addr); - eeprom_delay(ee_addr); - retval = (retval << 1) | ((readl(ee_addr) & EE_DataIn) ? 1 : 0); - writel(EE_ChipSelect, ee_addr); - eeprom_delay(ee_addr); - } - - /* Terminate the EEPROM access. */ - writel(0, ee_addr); - return retval; -} - -/* MII transceiver control section. - Read and write the MII registers using software-generated serial - MDIO protocol. See the MII specifications or DP83840A data sheet - for details. - - The maximum data clock rate is 2.5 Mhz. The minimum timing is usually - met by back-to-back 33Mhz PCI cycles. */ -#define mdio_delay(mdio_addr) readl(mdio_addr) - -/* Set iff a MII transceiver on any interface requires mdio preamble. - This only set with older tranceivers, so the extra - code size of a per-interface flag is not worthwhile. */ -static char mii_preamble_required = 1; - -#define MDIO_WRITE0 (MDIO_EnbOutput) -#define MDIO_WRITE1 (MDIO_DataOut | MDIO_EnbOutput) - -/* Generate the preamble required for initial synchronization and - a few older transceivers. */ -static void mdio_sync(long mdio_addr) -{ - int bits = 32; - - /* Establish sync by sending at least 32 logic ones. */ - while (--bits >= 0) { - writel(MDIO_WRITE1, mdio_addr); - mdio_delay(mdio_addr); - writel(MDIO_WRITE1 | MDIO_ShiftClk, mdio_addr); - mdio_delay(mdio_addr); - } -} - -static int mdio_read(int base_address, int phy_id, int location) -{ - long mdio_addr = base_address + MIICtrl; - int mii_cmd = (0xf6 << 10) | (phy_id << 5) | location; - int i, retval = 0; - - if (mii_preamble_required) - mdio_sync(mdio_addr); - - /* Shift the read command bits out. */ - for (i = 15; i >= 0; i--) { - int dataval = (mii_cmd & (1 << i)) ? MDIO_WRITE1 : MDIO_WRITE0; - - writel(dataval, mdio_addr); - mdio_delay(mdio_addr); - writel(dataval | MDIO_ShiftClk, mdio_addr); - mdio_delay(mdio_addr); - } - /* Read the two transition, 16 data, and wire-idle bits. */ - for (i = 20; i > 0; i--) { - writel(MDIO_EnbIn, mdio_addr); - mdio_delay(mdio_addr); - retval = (retval << 1) | ((readl(mdio_addr) & MDIO_DataIn) ? 1 : 0); - writel(MDIO_EnbIn | MDIO_ShiftClk, mdio_addr); - mdio_delay(mdio_addr); - } - return (retval>>1) & 0xffff; -} - -static void mdio_write(int base_address, int phy_id, int location, int value) -{ - long mdio_addr = base_address + MIICtrl; - int mii_cmd = (0x5002 << 16) | (phy_id << 23) | (location<<18) | value; - int i; - - if (location == 4 && phy_id == w840private.phys[0]) - w840private.advertising = value; - - if (mii_preamble_required) - mdio_sync(mdio_addr); - - /* Shift the command bits out. */ - for (i = 31; i >= 0; i--) { - int dataval = (mii_cmd & (1 << i)) ? MDIO_WRITE1 : MDIO_WRITE0; - - writel(dataval, mdio_addr); - mdio_delay(mdio_addr); - writel(dataval | MDIO_ShiftClk, mdio_addr); - mdio_delay(mdio_addr); - } - /* Clear out extra bits. */ - for (i = 2; i > 0; i--) { - writel(MDIO_EnbIn, mdio_addr); - mdio_delay(mdio_addr); - writel(MDIO_EnbIn | MDIO_ShiftClk, mdio_addr); - mdio_delay(mdio_addr); - } - return; -} - -static void check_duplex(void) -{ - int mii_reg5 = mdio_read(ioaddr, w840private.phys[0], 5); - int negotiated = mii_reg5 & w840private.advertising; - int duplex; - - if (w840private.duplex_lock || mii_reg5 == 0xffff) - return; - - duplex = (negotiated & 0x0100) || (negotiated & 0x01C0) == 0x0040; - if (w840private.full_duplex != duplex) { - w840private.full_duplex = duplex; - -#if defined(W89C840_DEBUG) - printf("winbond-840 : Setting %s-duplex based on MII # %d negotiated capability %X\n", - duplex ? "full" : "half", w840private.phys[0], negotiated); -#endif - - w840private.csr6 &= ~0x200; - w840private.csr6 |= duplex ? 0x200 : 0; - } -} - -static void set_rx_mode(void) -{ - u32 mc_filter[2]; /* Multicast hash filter */ - u32 rx_mode; - - /* Accept all multicasts from now on. */ - memset(mc_filter, 0xff, sizeof(mc_filter)); - -/* - * Actually, should work OK with multicast enabled. -- iko - */ -/* - * rx_mode = AcceptBroadcast | AcceptMyPhys | AcceptMulticast; - */ - rx_mode = AcceptBroadcast | AcceptMyPhys; - - writel(mc_filter[0], ioaddr + MulticastFilter0); - writel(mc_filter[1], ioaddr + MulticastFilter1); - w840private.csr6 &= ~0x00F8; - w840private.csr6 |= rx_mode; - writel(w840private.csr6, ioaddr + NetworkConfig); - -#if defined(W89C840_DEBUG) - printf("winbond-840 : Done setting RX mode.\n"); -#endif -} - -/* Initialize the Rx and Tx rings, along with various 'dev' bits. */ -static void init_ring(void) -{ - int i; - char * p; - - w840private.tx_full = 0; - w840private.tx_q_bytes = w840private.cur_rx = w840private.cur_tx = 0; - w840private.dirty_rx = w840private.dirty_tx = 0; - - w840private.rx_buf_sz = PKT_BUF_SZ; - w840private.rx_head_desc = &w840private.rx_ring[0]; - - /* Initial all Rx descriptors. Fill in the Rx buffers. */ - - p = &rx_packet[0]; - - for (i = 0; i < RX_RING_SIZE; i++) { - w840private.rx_ring[i].length = w840private.rx_buf_sz; - w840private.rx_ring[i].status = 0; - w840private.rx_ring[i].next_desc = virt_to_le32desc(&w840private.rx_ring[i+1]); - - w840private.rx_ring[i].buffer1 = virt_to_le32desc(p + (PKT_BUF_SZ * i)); - w840private.rx_ring[i].status = DescOwn | DescIntr; - } - - /* Mark the last entry as wrapping the ring. */ - w840private.rx_ring[i-1].length |= DescEndRing; - w840private.rx_ring[i-1].next_desc = virt_to_le32desc(&w840private.rx_ring[0]); - - w840private.dirty_rx = (unsigned int)(i - RX_RING_SIZE); - - for (i = 0; i < TX_RING_SIZE; i++) { - w840private.tx_ring[i].status = 0; - } - return; -} diff --git a/stage1/.cvsignore b/stage1/.cvsignore deleted file mode 100644 index e17330df9..000000000 --- a/stage1/.cvsignore +++ /dev/null @@ -1,4 +0,0 @@ -.deps -Makefile -stage1 -stage1.exec diff --git a/stage1/Makefile.am b/stage1/Makefile.am deleted file mode 100644 index 0b7994a86..000000000 --- a/stage1/Makefile.am +++ /dev/null @@ -1,15 +0,0 @@ -pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) -nodist_pkglib_DATA = stage1 - -CLEANFILES = $(nodist_pkglib_DATA) - -# We can't use builtins or standard includes. -AM_CCASFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc -stage1_exec_LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00 - -noinst_PROGRAMS = stage1.exec -stage1_exec_SOURCES = stage1.S stage1.h - -SUFFIXES = .exec -.exec: - $(OBJCOPY) -O binary $< $@ diff --git a/stage1/Makefile.in b/stage1/Makefile.in deleted file mode 100644 index 2a0b7e578..000000000 --- a/stage1/Makefile.in +++ /dev/null @@ -1,434 +0,0 @@ -# Makefile.in generated by automake 1.9.4 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -SOURCES = $(stage1_exec_SOURCES) - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -noinst_PROGRAMS = stage1.exec$(EXEEXT) -subdir = stage1 -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -PROGRAMS = $(noinst_PROGRAMS) -am_stage1_exec_OBJECTS = stage1.$(OBJEXT) -stage1_exec_OBJECTS = $(am_stage1_exec_OBJECTS) -stage1_exec_LDADD = $(LDADD) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(stage1_exec_SOURCES) -DIST_SOURCES = $(stage1_exec_SOURCES) -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(pkglibdir)" -nodist_pkglibDATA_INSTALL = $(INSTALL_DATA) -DATA = $(nodist_pkglib_DATA) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ -BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ -CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ -DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FSYS_CFLAGS = @FSYS_CFLAGS@ -GRUB_CFLAGS = @GRUB_CFLAGS@ -GRUB_LIBS = @GRUB_LIBS@ -HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ -HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ -MAKEINFO = @MAKEINFO@ -NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ -NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ -NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ -NET_CFLAGS = @NET_CFLAGS@ -NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ -OBJCOPY = @OBJCOPY@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PERL = @PERL@ -RANLIB = @RANLIB@ -SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ -SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ -SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ -SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STAGE1_CFLAGS = @STAGE1_CFLAGS@ -STAGE2_CFLAGS = @STAGE2_CFLAGS@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -nodist_pkglib_DATA = stage1 -CLEANFILES = $(nodist_pkglib_DATA) - -# We can't use builtins or standard includes. -AM_CCASFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc -stage1_exec_LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00 -stage1_exec_SOURCES = stage1.S stage1.h -SUFFIXES = .exec -all: all-am - -.SUFFIXES: -.SUFFIXES: .exec .S .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu stage1/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu stage1/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -clean-noinstPROGRAMS: - -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) -stage1.exec$(EXEEXT): $(stage1_exec_OBJECTS) $(stage1_exec_DEPENDENCIES) - @rm -f stage1.exec$(EXEEXT) - $(LINK) $(stage1_exec_LDFLAGS) $(stage1_exec_OBJECTS) $(stage1_exec_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -.S.o: - $(CCASCOMPILE) -c $< - -.S.obj: - $(CCASCOMPILE) -c `$(CYGPATH_W) '$<'` -uninstall-info-am: -install-nodist_pkglibDATA: $(nodist_pkglib_DATA) - @$(NORMAL_INSTALL) - test -z "$(pkglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkglibdir)" - @list='$(nodist_pkglib_DATA)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(nodist_pkglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkglibdir)/$$f'"; \ - $(nodist_pkglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkglibdir)/$$f"; \ - done - -uninstall-nodist_pkglibDATA: - @$(NORMAL_UNINSTALL) - @list='$(nodist_pkglib_DATA)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ - rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) $(DATA) -installdirs: - for dir in "$(DESTDIR)$(pkglibdir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: install-nodist_pkglibDATA - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am uninstall-nodist_pkglibDATA - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-noinstPROGRAMS ctags distclean distclean-compile \ - distclean-generic distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-nodist_pkglibDATA \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-info-am \ - uninstall-nodist_pkglibDATA - -.exec: - $(OBJCOPY) -O binary $< $@ -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/stage1/stage1.S b/stage1/stage1.S deleted file mode 100644 index 985963dd1..000000000 --- a/stage1/stage1.S +++ /dev/null @@ -1,499 +0,0 @@ -/* -*-Asm-*- */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2002,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include - -/* - * defines for the code go here - */ - - /* Absolute addresses - This makes the assembler generate the address without support - from the linker. (ELF can't relocate 16-bit addresses!) */ -#define ABS(x) (x-_start+0x7c00) - - /* Print message string */ -#define MSG(x) movw $ABS(x), %si; call message - - /* XXX: binutils-2.9.1.0.x doesn't produce a short opcode for this. */ -#define MOV_MEM_TO_AL(x) .byte 0xa0; .word x - - .file "stage1.S" - - .text - - /* Tell GAS to generate 16-bit instructions so that this code works - in real mode. */ - .code16 - -.globl _start; _start: - /* - * _start is loaded at 0x7c00 and is jumped to with CS:IP 0:0x7c00 - */ - - /* - * Beginning of the sector is compatible with the FAT/HPFS BIOS - * parameter block. - */ - - jmp after_BPB - nop /* do I care about this ??? */ - - /* - * This space is for the BIOS parameter block!!!! Don't change - * the first jump, nor start the code anywhere but right after - * this area. - */ - - . = _start + 4 - - /* scratch space */ -mode: - .byte 0 -disk_address_packet: -sectors: - .long 0 -heads: - .long 0 -cylinders: - .word 0 -sector_start: - .byte 0 -head_start: - .byte 0 -cylinder_start: - .word 0 - /* more space... */ - - . = _start + STAGE1_BPBEND - - /* - * End of BIOS parameter block. - */ - -stage1_version: - .byte COMPAT_VERSION_MAJOR, COMPAT_VERSION_MINOR -boot_drive: - .byte GRUB_INVALID_DRIVE /* the disk to load stage2 from */ -force_lba: - .byte 0 -stage2_address: - .word 0x8000 -stage2_sector: - .long 1 -stage2_segment: - .word 0x800 - -after_BPB: - -/* general setup */ - cli /* we're not safe here! */ - - /* - * This is a workaround for buggy BIOSes which don't pass boot - * drive correctly. If GRUB is installed into a HDD, check if - * DL is masked correctly. If not, assume that the BIOS passed - * a bogus value and set DL to 0x80, since this is the only - * possible boot drive. If GRUB is installed into a floppy, - * this does nothing (only jump). - */ -boot_drive_check: - jmp 1f - testb $0x80, %dl - jnz 1f - movb $0x80, %dl -1: - - /* - * ljmp to the next instruction because some bogus BIOSes - * jump to 07C0:0000 instead of 0000:7C00. - */ - ljmp $0, $ABS(real_start) - -real_start: - - /* set up %ds and %ss as offset from 0 */ - xorw %ax, %ax - movw %ax, %ds - movw %ax, %ss - - /* set up the REAL stack */ - movw $STAGE1_STACKSEG, %sp - - sti /* we're safe again */ - - /* - * Check if we have a forced disk reference here - */ - MOV_MEM_TO_AL(ABS(boot_drive)) /* movb ABS(boot_drive), %al */ - cmpb $GRUB_INVALID_DRIVE, %al - je 1f - movb %al, %dl -1: - /* save drive reference first thing! */ - pushw %dx - - /* print a notification message on the screen */ - MSG(notification_string) - - /* do not probe LBA if the drive is a floppy */ - testb $STAGE1_BIOS_HD_FLAG, %dl - jz chs_mode - - /* check if LBA is supported */ - movb $0x41, %ah - movw $0x55aa, %bx - int $0x13 - - /* - * %dl may have been clobbered by INT 13, AH=41H. - * This happens, for example, with AST BIOS 1.04. - */ - popw %dx - pushw %dx - - /* use CHS if fails */ - jc chs_mode - cmpw $0xaa55, %bx - jne chs_mode - - /* check if AH=0x42 is supported if FORCE_LBA is zero */ - MOV_MEM_TO_AL(ABS(force_lba)) /* movb ABS(force_lba), %al */ - testb %al, %al - jnz lba_mode - andw $1, %cx - jz chs_mode - -lba_mode: - /* save the total number of sectors */ - movl 0x10(%si), %ecx - - /* set %si to the disk address packet */ - movw $ABS(disk_address_packet), %si - - /* set the mode to non-zero */ - movb $1, -1(%si) - - movl ABS(stage2_sector), %ebx - - /* the size and the reserved byte */ - movw $0x0010, (%si) - - /* the blocks */ - movw $1, 2(%si) - - /* the absolute address (low 32 bits) */ - movl %ebx, 8(%si) - - /* the segment of buffer address */ - movw $STAGE1_BUFFERSEG, 6(%si) - - xorl %eax, %eax - movw %ax, 4(%si) - movl %eax, 12(%si) - -/* - * BIOS call "INT 0x13 Function 0x42" to read sectors from disk into memory - * Call with %ah = 0x42 - * %dl = drive number - * %ds:%si = segment:offset of disk address packet - * Return: - * %al = 0x0 on success; err code on failure - */ - - movb $0x42, %ah - int $0x13 - - /* LBA read is not supported, so fallback to CHS. */ - jc chs_mode - - movw $STAGE1_BUFFERSEG, %bx - jmp copy_buffer - -chs_mode: - /* - * Determine the hard disk geometry from the BIOS! - * We do this first, so that LS-120 IDE floppies work correctly. - */ - movb $8, %ah - int $0x13 - jnc final_init - - /* - * The call failed, so maybe use the floppy probe instead. - */ - testb $STAGE1_BIOS_HD_FLAG, %dl - jz floppy_probe - - /* Nope, we definitely have a hard disk, and we're screwed. */ - jmp hd_probe_error - -final_init: - - movw $ABS(sectors), %si - - /* set the mode to zero */ - movb $0, -1(%si) - - /* save number of heads */ - xorl %eax, %eax - movb %dh, %al - incw %ax - movl %eax, 4(%si) - - xorw %dx, %dx - movb %cl, %dl - shlw $2, %dx - movb %ch, %al - movb %dh, %ah - - /* save number of cylinders */ - incw %ax - movw %ax, 8(%si) - - xorw %ax, %ax - movb %dl, %al - shrb $2, %al - - /* save number of sectors */ - movl %eax, (%si) - -setup_sectors: - /* load logical sector start (bottom half) */ - movl ABS(stage2_sector), %eax - - /* zero %edx */ - xorl %edx, %edx - - /* divide by number of sectors */ - divl (%si) - - /* save sector start */ - movb %dl, 10(%si) - - xorl %edx, %edx /* zero %edx */ - divl 4(%si) /* divide by number of heads */ - - /* save head start */ - movb %dl, 11(%si) - - /* save cylinder start */ - movw %ax, 12(%si) - - /* do we need too many cylinders? */ - cmpw 8(%si), %ax - jge geometry_error - -/* - * This is the loop for taking care of BIOS geometry translation (ugh!) - */ - - /* get high bits of cylinder */ - movb 13(%si), %dl - - shlb $6, %dl /* shift left by 6 bits */ - movb 10(%si), %cl /* get sector */ - - incb %cl /* normalize sector (sectors go - from 1-N, not 0-(N-1) ) */ - orb %dl, %cl /* composite together */ - movb 12(%si), %ch /* sector+hcyl in cl, cylinder in ch */ - - /* restore %dx */ - popw %dx - - /* head number */ - movb 11(%si), %dh - -/* - * BIOS call "INT 0x13 Function 0x2" to read sectors from disk into memory - * Call with %ah = 0x2 - * %al = number of sectors - * %ch = cylinder - * %cl = sector (bits 6-7 are high bits of "cylinder") - * %dh = head - * %dl = drive (0x80 for hard disk, 0x0 for floppy disk) - * %es:%bx = segment:offset of buffer - * Return: - * %al = 0x0 on success; err code on failure - */ - - movw $STAGE1_BUFFERSEG, %bx - movw %bx, %es /* load %es segment with disk buffer */ - - xorw %bx, %bx /* %bx = 0, put it at 0 in the segment */ - movw $0x0201, %ax /* function 2 */ - int $0x13 - - jc read_error - - movw %es, %bx - -copy_buffer: - movw ABS(stage2_segment), %es - - /* - * We need to save %cx and %si because the startup code in - * stage2 uses them without initializing them. - */ - pusha - pushw %ds - - movw $0x100, %cx - movw %bx, %ds - xorw %si, %si - xorw %di, %di - - cld - - rep - movsw - - popw %ds - popa - - /* boot stage2 */ - jmp *(stage2_address) - -/* END OF MAIN LOOP */ - -/* - * BIOS Geometry translation error (past the end of the disk geometry!). - */ -geometry_error: - MSG(geometry_error_string) - jmp general_error - -/* - * Disk probe failure. - */ -hd_probe_error: - MSG(hd_probe_error_string) - jmp general_error - -/* - * Read error on the disk. - */ -read_error: - MSG(read_error_string) - -general_error: - MSG(general_error_string) - -/* go here when you need to stop the machine hard after an error condition */ -stop: jmp stop - -notification_string: .string "GRUB " -geometry_error_string: .string "Geom" -hd_probe_error_string: .string "Hard Disk" -read_error_string: .string "Read" -general_error_string: .string " Error" - -/* - * message: write the string pointed to by %si - * - * WARNING: trashes %si, %ax, and %bx - */ - - /* - * Use BIOS "int 10H Function 0Eh" to write character in teletype mode - * %ah = 0xe %al = character - * %bh = page %bl = foreground color (graphics modes) - */ -1: - movw $0x0001, %bx - movb $0xe, %ah - int $0x10 /* display a byte */ -message: - lodsb - cmpb $0, %al - jne 1b /* if not end of string, jmp to display */ - ret - - /* - * Windows NT breaks compatibility by embedding a magic - * number here. - */ - - . = _start + STAGE1_WINDOWS_NT_MAGIC -nt_magic: - .long 0 - .word 0 - - /* - * This is where an MBR would go if on a hard disk. The code - * here isn't even referenced unless we're on a floppy. Kinda - * sneaky, huh? - */ - -part_start: - . = _start + STAGE1_PARTSTART - -probe_values: - .byte 36, 18, 15, 9, 0 - -floppy_probe: -/* - * Perform floppy probe. - */ - - movw $ABS(probe_values-1), %si - -probe_loop: - /* reset floppy controller INT 13h AH=0 */ - xorw %ax, %ax - int $0x13 - - incw %si - movb (%si), %cl - - /* if number of sectors is 0, display error and die */ - cmpb $0, %cl - jne 1f - -/* - * Floppy disk probe failure. - */ - MSG(fd_probe_error_string) - jmp general_error - -fd_probe_error_string: .string "Floppy" - -1: - /* perform read */ - movw $STAGE1_BUFFERSEG, %bx - movw $0x201, %ax - movb $0, %ch - movb $0, %dh - int $0x13 - - /* if error, jump to "probe_loop" */ - jc probe_loop - - /* %cl is already the correct value! */ - movb $1, %dh - movb $79, %ch - - jmp final_init - - . = _start + STAGE1_PARTEND - -/* the last 2 bytes in the sector 0 contain the signature */ - .word STAGE1_SIGNATURE diff --git a/stage1/stage1.h b/stage1/stage1.h deleted file mode 100644 index d232ade11..000000000 --- a/stage1/stage1.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2002,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef STAGE1_HEADER -#define STAGE1_HEADER 1 - - -/* Define the version numbers here, so that Stage 1 can know them. */ -#define COMPAT_VERSION_MAJOR 3 -#define COMPAT_VERSION_MINOR 2 -#define COMPAT_VERSION ((COMPAT_VERSION_MINOR << 8) \ - | COMPAT_VERSION_MAJOR) - -/* The signature for bootloader. */ -#define STAGE1_SIGNATURE 0xaa55 - -/* The offset of the end of BPB (BIOS Parameter Block). */ -#define STAGE1_BPBEND 0x3e - -/* The offset of the major version. */ -#define STAGE1_VER_MAJ_OFFS 0x3e - -/* The offset of BOOT_DRIVE. */ -#define STAGE1_BOOT_DRIVE 0x40 - -/* The offset of FORCE_LBA. */ -#define STAGE1_FORCE_LBA 0x41 - -/* The offset of STAGE2_ADDRESS. */ -#define STAGE1_STAGE2_ADDRESS 0x42 - -/* The offset of STAGE2_SECTOR. */ -#define STAGE1_STAGE2_SECTOR 0x44 - -/* The offset of STAGE2_SEGMENT. */ -#define STAGE1_STAGE2_SEGMENT 0x48 - -/* The offset of BOOT_DRIVE_CHECK. */ -#define STAGE1_BOOT_DRIVE_CHECK 0x4b - -/* The offset of a magic number used by Windows NT. */ -#define STAGE1_WINDOWS_NT_MAGIC 0x1b8 - -/* The offset of the start of the partition table. */ -#define STAGE1_PARTSTART 0x1be - -/* The offset of the end of the partition table. */ -#define STAGE1_PARTEND 0x1fe - -/* The stack segment. */ -#define STAGE1_STACKSEG 0x2000 - -/* The segment of disk buffer. The disk buffer MUST be 32K long and - cannot straddle a 64K boundary. */ -#define STAGE1_BUFFERSEG 0x7000 - -/* The address of drive parameters. */ -#define STAGE1_DRP_ADDR 0x7f00 - -/* The size of drive parameters. */ -#define STAGE1_DRP_SIZE 0x42 - -/* The flag for BIOS drive number to designate a hard disk vs. a - floppy. */ -#define STAGE1_BIOS_HD_FLAG 0x80 - -/* The drive number of an invalid drive. */ -#define GRUB_INVALID_DRIVE 0xFF - -#endif /* ! STAGE1_HEADER */ diff --git a/stage2/.cvsignore b/stage2/.cvsignore deleted file mode 100644 index f6f0a068f..000000000 --- a/stage2/.cvsignore +++ /dev/null @@ -1,16 +0,0 @@ -.deps -Makefile -diskless -diskless_size.h -nbgrub -nbloader -pre_stage2 -pxegrub -pxeloader -stage2 -stage2_eltorito -stage2_size.h -start -start_eltorito -*.exec -*_stage1_5 diff --git a/stage2/Makefile.am b/stage2/Makefile.am deleted file mode 100644 index f8e6d42b2..000000000 --- a/stage2/Makefile.am +++ /dev/null @@ -1,272 +0,0 @@ -# For test target. -TESTS = size_test -noinst_SCRIPTS = $(TESTS) - -# For dist target. -noinst_HEADERS = apic.h defs.h dir.h disk_inode.h disk_inode_ffs.h \ - fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \ - imgact_aout.h iso9660.h jfs.h mb_header.h mb_info.h md5.h \ - nbi.h pc_slice.h serial.h shared.h smp-imps.h term.h \ - terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h -EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS) - -# For . -INCLUDES = -I$(top_srcdir)/stage1 - -# The library for /sbin/grub. -noinst_LIBRARIES = libgrub.a -libgrub_a_SOURCES = boot.c builtins.c char_io.c cmdline.c common.c \ - disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \ - fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_ufs2.c \ - fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c stage2.c \ - terminfo.c tparm.c -libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \ - -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \ - -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \ - -DFSYS_UFS2=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \ - -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1 - -# Stage 2 and Stage 1.5's. -pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) - -EXTRA_PROGRAMS = nbloader.exec pxeloader.exec diskless.exec - -if DISKLESS_SUPPORT -pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ - ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \ - reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 \ - nbgrub pxegrub -noinst_DATA = pre_stage2 start start_eltorito nbloader pxeloader diskless -noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \ - e2fs_stage1_5.exec fat_stage1_5.exec ffs_stage1_5.exec \ - iso9660_stage1_5.exec jfs_stage1_5.exec minix_stage1_5.exec \ - reiserfs_stage1_5.exec ufs2_stage1_5.exec vstafs_stage1_5.exec \ - xfs_stage1_5.exec nbloader.exec pxeloader.exec diskless.exec -else -pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ - ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \ - reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 -noinst_DATA = pre_stage2 start start_eltorito -noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \ - e2fs_stage1_5.exec fat_stage1_5.exec ffs_stage1_5.exec \ - iso9660_stage1_5.exec jfs_stage1_5.exec minix_stage1_5.exec \ - reiserfs_stage1_5.exec ufs2_stage1_5.exec vstafs_stage1_5.exec \ - xfs_stage1_5.exec -endif -MOSTLYCLEANFILES = $(noinst_PROGRAMS) - -PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200 -START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000 -NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0 -PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 -START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 - -if NETBOOT_SUPPORT -NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1 -else -NETBOOT_FLAGS = -endif - -if SERIAL_SUPPORT -SERIAL_FLAGS = -DSUPPORT_SERIAL=1 -else -SERIAL_FLAGS = -endif - -if HERCULES_SUPPORT -HERCULES_FLAGS = -DSUPPORT_HERCULES=1 -else -HERCULES_FLAGS = -endif - -STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) - -STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000 -STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1 - -# For stage2 target. -pre_stage2_exec_SOURCES = asm.S bios.c boot.c builtins.c char_io.c \ - cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \ - fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \ - fsys_reiserfs.c fsys_ufs2.c fsys_vstafs.c fsys_xfs.c gunzip.c \ - hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c -pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) -pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) -pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK) - -if NETBOOT_SUPPORT -pre_stage2_exec_LDADD = ../netboot/libdrivers.a -endif - -if DISKLESS_SUPPORT -BUILT_SOURCES = stage2_size.h diskless_size.h -else -BUILT_SOURCES = stage2_size.h -endif - -CLEANFILES = $(pkglib_DATA) $(noinst_DATA) $(BUILT_SOURCES) - -stage2_size.h: pre_stage2 - -rm -f stage2_size.h - set dummy `ls -l pre_stage2`; \ - echo "#define STAGE2_SIZE $$6" > stage2_size.h - -start_exec_SOURCES = start.S -start_exec_CCASFLAGS = $(STAGE2_COMPILE) -start_exec_LDFLAGS = $(START_LINK) - -# XXX: automake doesn't provide a way to specify dependencies for object -# files explicitly, so we must write this by a general Makefile scheme. -# If automake change the naming scheme for per-executable objects, this -# will be broken. -start_exec-start.$(OBJEXT): stage2_size.h - -stage2: pre_stage2 start - -rm -f stage2 - cat start pre_stage2 > stage2 - -start_eltorito_exec_SOURCES = start_eltorito.S -start_eltorito_exec_CCASFLAGS = $(STAGE2_COMPILE) -start_eltorito_exec_LDFLAGS = $(START_ELTORITO_LINK) - -start_eltorito_exec-start.$(OBJEXT): stage2_size.h - -stage2_eltorito: pre_stage2 start_eltorito - -rm -f stage2_eltorito - cat start_eltorito pre_stage2 > stage2_eltorito - -# For e2fs_stage1_5 target. -e2fs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ - stage1_5.c fsys_ext2fs.c bios.c -e2fs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \ - -DNO_BLOCK_FILES=1 -e2fs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \ - -DNO_BLOCK_FILES=1 -e2fs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For fat_stage1_5 target. -fat_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ - stage1_5.c fsys_fat.c bios.c -fat_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \ - -DNO_BLOCK_FILES=1 -fat_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \ - -DNO_BLOCK_FILES=1 -fat_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For ffs_stage1_5 target. -ffs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ - stage1_5.c fsys_ffs.c bios.c -ffs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \ - -DNO_BLOCK_FILES=1 -ffs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \ - -DNO_BLOCK_FILES=1 -ffs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For ufs2_stage1_5 target. -ufs2_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ - stage1_5.c fsys_ufs2.c bios.c -ufs2_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \ - -DNO_BLOCK_FILES=1 -ufs2_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \ - -DNO_BLOCK_FILES=1 -ufs2_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For minix_stage1_5 target. -minix_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ - stage1_5.c fsys_minix.c bios.c -minix_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \ - -DNO_BLOCK_FILES=1 -minix_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \ - -DNO_BLOCK_FILES=1 -minix_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For reiserfs_stage1_5 target. -reiserfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ - disk_io.c stage1_5.c fsys_reiserfs.c bios.c -reiserfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \ - -DNO_BLOCK_FILES=1 -reiserfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \ - -DNO_BLOCK_FILES=1 -reiserfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For vstafs_stage1_5 target. -vstafs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ - disk_io.c stage1_5.c fsys_vstafs.c bios.c -vstafs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \ - -DNO_BLOCK_FILES=1 -vstafs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \ - -DNO_BLOCK_FILES=1 -vstafs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For jfs_stage1_5 target. -jfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ - disk_io.c stage1_5.c fsys_jfs.c bios.c -jfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \ - -DNO_BLOCK_FILES=1 -jfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \ - -DNO_BLOCK_FILES=1 -jfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For xfs_stage1_5 target. -xfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ - disk_io.c stage1_5.c fsys_xfs.c bios.c -xfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \ - -DNO_BLOCK_FILES=1 -xfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \ - -DNO_BLOCK_FILES=1 -xfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For iso9660_stage1_5 target. -iso9660_stage1_5_exec_SOURCES = start_eltorito.S asm.S common.c char_io.c \ - disk_io.c stage1_5.c fsys_iso9660.c bios.c -iso9660_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \ - -DNO_BLOCK_FILES=1 -iso9660_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \ - -DNO_BLOCK_FILES=1 -iso9660_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For diskless target. -diskless_exec_SOURCES = $(pre_stage2_exec_SOURCES) -diskless_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \ - -DSUPPORT_DISKLESS=1 -diskless_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \ - -DSUPPORT_DISKLESS=1 -diskless_exec_LDFLAGS = $(PRE_STAGE2_LINK) -diskless_exec_LDADD = ../netboot/libdrivers.a - -diskless_size.h: diskless - -rm -f $@ - set dummy `ls -l $^`; \ - echo "#define DISKLESS_SIZE $$6" > $@ - -# For nbloader target. -nbloader_exec_SOURCES = nbloader.S -nbloader_exec_CCASFLAGS = $(STAGE2_COMPILE) -nbloader_exec_LDFLAGS = $(NBLOADER_LINK) - -# XXX: See the comment for start_exec-start.o. -nbloader_exec-nbloader.$(OBJEXT): diskless_size.h - -# For nbgrub target. -nbgrub: nbloader diskless - -rm -f $@ - cat $^ > $@ - -# For pxeloader target. -pxeloader_exec_SOURCES = pxeloader.S -pxeloader_exec_CCASFLAGS = $(STAGE2_COMPILE) -pxeloader_exec_LDFLAGS = $(PXELOADER_LINK) - -# XXX: See the comment for start_exec-start.o. -pxeloader_exec-pxeloader.$(OBJEXT): diskless_size.h - -# For pxegrub target. -pxegrub: pxeloader diskless - -rm -f $@ - cat $^ > $@ - -# General rule for making a raw binary. -SUFFIXES = .exec -.exec: - $(OBJCOPY) -O binary $< $@ diff --git a/stage2/Makefile.in b/stage2/Makefile.in deleted file mode 100644 index d0062bdb8..000000000 --- a/stage2/Makefile.in +++ /dev/null @@ -1,3250 +0,0 @@ -# Makefile.in generated by automake 1.9.4 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - - - - -SOURCES = $(libgrub_a_SOURCES) $(diskless_exec_SOURCES) $(e2fs_stage1_5_exec_SOURCES) $(fat_stage1_5_exec_SOURCES) $(ffs_stage1_5_exec_SOURCES) $(iso9660_stage1_5_exec_SOURCES) $(jfs_stage1_5_exec_SOURCES) $(minix_stage1_5_exec_SOURCES) $(nbloader_exec_SOURCES) $(pre_stage2_exec_SOURCES) $(pxeloader_exec_SOURCES) $(reiserfs_stage1_5_exec_SOURCES) $(start_exec_SOURCES) $(start_eltorito_exec_SOURCES) $(ufs2_stage1_5_exec_SOURCES) $(vstafs_stage1_5_exec_SOURCES) $(xfs_stage1_5_exec_SOURCES) - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -EXTRA_PROGRAMS = nbloader.exec$(EXEEXT) pxeloader.exec$(EXEEXT) \ - diskless.exec$(EXEEXT) -@DISKLESS_SUPPORT_FALSE@noinst_PROGRAMS = pre_stage2.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_FALSE@ start.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_FALSE@ start_eltorito.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_FALSE@ e2fs_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_FALSE@ fat_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_FALSE@ ffs_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_FALSE@ iso9660_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_FALSE@ jfs_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_FALSE@ minix_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_FALSE@ reiserfs_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_FALSE@ ufs2_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_FALSE@ vstafs_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_FALSE@ xfs_stage1_5.exec$(EXEEXT) -@DISKLESS_SUPPORT_TRUE@noinst_PROGRAMS = pre_stage2.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_TRUE@ start.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_TRUE@ start_eltorito.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_TRUE@ e2fs_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_TRUE@ fat_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_TRUE@ ffs_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_TRUE@ iso9660_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_TRUE@ jfs_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_TRUE@ minix_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_TRUE@ reiserfs_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_TRUE@ ufs2_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_TRUE@ vstafs_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_TRUE@ xfs_stage1_5.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_TRUE@ nbloader.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_TRUE@ pxeloader.exec$(EXEEXT) \ -@DISKLESS_SUPPORT_TRUE@ diskless.exec$(EXEEXT) -subdir = stage2 -DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -LIBRARIES = $(noinst_LIBRARIES) -AR = ar -ARFLAGS = cru -libgrub_a_AR = $(AR) $(ARFLAGS) -libgrub_a_LIBADD = -am_libgrub_a_OBJECTS = libgrub_a-boot.$(OBJEXT) \ - libgrub_a-builtins.$(OBJEXT) libgrub_a-char_io.$(OBJEXT) \ - libgrub_a-cmdline.$(OBJEXT) libgrub_a-common.$(OBJEXT) \ - libgrub_a-disk_io.$(OBJEXT) libgrub_a-fsys_ext2fs.$(OBJEXT) \ - libgrub_a-fsys_fat.$(OBJEXT) libgrub_a-fsys_ffs.$(OBJEXT) \ - libgrub_a-fsys_iso9660.$(OBJEXT) libgrub_a-fsys_jfs.$(OBJEXT) \ - libgrub_a-fsys_minix.$(OBJEXT) \ - libgrub_a-fsys_reiserfs.$(OBJEXT) \ - libgrub_a-fsys_ufs2.$(OBJEXT) libgrub_a-fsys_vstafs.$(OBJEXT) \ - libgrub_a-fsys_xfs.$(OBJEXT) libgrub_a-gunzip.$(OBJEXT) \ - libgrub_a-md5.$(OBJEXT) libgrub_a-serial.$(OBJEXT) \ - libgrub_a-stage2.$(OBJEXT) libgrub_a-terminfo.$(OBJEXT) \ - libgrub_a-tparm.$(OBJEXT) -libgrub_a_OBJECTS = $(am_libgrub_a_OBJECTS) -PROGRAMS = $(noinst_PROGRAMS) -am__objects_1 = diskless_exec-asm.$(OBJEXT) \ - diskless_exec-bios.$(OBJEXT) diskless_exec-boot.$(OBJEXT) \ - diskless_exec-builtins.$(OBJEXT) \ - diskless_exec-char_io.$(OBJEXT) \ - diskless_exec-cmdline.$(OBJEXT) diskless_exec-common.$(OBJEXT) \ - diskless_exec-console.$(OBJEXT) \ - diskless_exec-disk_io.$(OBJEXT) \ - diskless_exec-fsys_ext2fs.$(OBJEXT) \ - diskless_exec-fsys_fat.$(OBJEXT) \ - diskless_exec-fsys_ffs.$(OBJEXT) \ - diskless_exec-fsys_iso9660.$(OBJEXT) \ - diskless_exec-fsys_jfs.$(OBJEXT) \ - diskless_exec-fsys_minix.$(OBJEXT) \ - diskless_exec-fsys_reiserfs.$(OBJEXT) \ - diskless_exec-fsys_ufs2.$(OBJEXT) \ - diskless_exec-fsys_vstafs.$(OBJEXT) \ - diskless_exec-fsys_xfs.$(OBJEXT) \ - diskless_exec-gunzip.$(OBJEXT) \ - diskless_exec-hercules.$(OBJEXT) diskless_exec-md5.$(OBJEXT) \ - diskless_exec-serial.$(OBJEXT) \ - diskless_exec-smp-imps.$(OBJEXT) \ - diskless_exec-stage2.$(OBJEXT) \ - diskless_exec-terminfo.$(OBJEXT) diskless_exec-tparm.$(OBJEXT) -am_diskless_exec_OBJECTS = $(am__objects_1) -diskless_exec_OBJECTS = $(am_diskless_exec_OBJECTS) -diskless_exec_DEPENDENCIES = ../netboot/libdrivers.a -am_e2fs_stage1_5_exec_OBJECTS = e2fs_stage1_5_exec-start.$(OBJEXT) \ - e2fs_stage1_5_exec-asm.$(OBJEXT) \ - e2fs_stage1_5_exec-common.$(OBJEXT) \ - e2fs_stage1_5_exec-char_io.$(OBJEXT) \ - e2fs_stage1_5_exec-disk_io.$(OBJEXT) \ - e2fs_stage1_5_exec-stage1_5.$(OBJEXT) \ - e2fs_stage1_5_exec-fsys_ext2fs.$(OBJEXT) \ - e2fs_stage1_5_exec-bios.$(OBJEXT) -e2fs_stage1_5_exec_OBJECTS = $(am_e2fs_stage1_5_exec_OBJECTS) -e2fs_stage1_5_exec_LDADD = $(LDADD) -am_fat_stage1_5_exec_OBJECTS = fat_stage1_5_exec-start.$(OBJEXT) \ - fat_stage1_5_exec-asm.$(OBJEXT) \ - fat_stage1_5_exec-common.$(OBJEXT) \ - fat_stage1_5_exec-char_io.$(OBJEXT) \ - fat_stage1_5_exec-disk_io.$(OBJEXT) \ - fat_stage1_5_exec-stage1_5.$(OBJEXT) \ - fat_stage1_5_exec-fsys_fat.$(OBJEXT) \ - fat_stage1_5_exec-bios.$(OBJEXT) -fat_stage1_5_exec_OBJECTS = $(am_fat_stage1_5_exec_OBJECTS) -fat_stage1_5_exec_LDADD = $(LDADD) -am_ffs_stage1_5_exec_OBJECTS = ffs_stage1_5_exec-start.$(OBJEXT) \ - ffs_stage1_5_exec-asm.$(OBJEXT) \ - ffs_stage1_5_exec-common.$(OBJEXT) \ - ffs_stage1_5_exec-char_io.$(OBJEXT) \ - ffs_stage1_5_exec-disk_io.$(OBJEXT) \ - ffs_stage1_5_exec-stage1_5.$(OBJEXT) \ - ffs_stage1_5_exec-fsys_ffs.$(OBJEXT) \ - ffs_stage1_5_exec-bios.$(OBJEXT) -ffs_stage1_5_exec_OBJECTS = $(am_ffs_stage1_5_exec_OBJECTS) -ffs_stage1_5_exec_LDADD = $(LDADD) -am_iso9660_stage1_5_exec_OBJECTS = \ - iso9660_stage1_5_exec-start_eltorito.$(OBJEXT) \ - iso9660_stage1_5_exec-asm.$(OBJEXT) \ - iso9660_stage1_5_exec-common.$(OBJEXT) \ - iso9660_stage1_5_exec-char_io.$(OBJEXT) \ - iso9660_stage1_5_exec-disk_io.$(OBJEXT) \ - iso9660_stage1_5_exec-stage1_5.$(OBJEXT) \ - iso9660_stage1_5_exec-fsys_iso9660.$(OBJEXT) \ - iso9660_stage1_5_exec-bios.$(OBJEXT) -iso9660_stage1_5_exec_OBJECTS = $(am_iso9660_stage1_5_exec_OBJECTS) -iso9660_stage1_5_exec_LDADD = $(LDADD) -am_jfs_stage1_5_exec_OBJECTS = jfs_stage1_5_exec-start.$(OBJEXT) \ - jfs_stage1_5_exec-asm.$(OBJEXT) \ - jfs_stage1_5_exec-common.$(OBJEXT) \ - jfs_stage1_5_exec-char_io.$(OBJEXT) \ - jfs_stage1_5_exec-disk_io.$(OBJEXT) \ - jfs_stage1_5_exec-stage1_5.$(OBJEXT) \ - jfs_stage1_5_exec-fsys_jfs.$(OBJEXT) \ - jfs_stage1_5_exec-bios.$(OBJEXT) -jfs_stage1_5_exec_OBJECTS = $(am_jfs_stage1_5_exec_OBJECTS) -jfs_stage1_5_exec_LDADD = $(LDADD) -am_minix_stage1_5_exec_OBJECTS = minix_stage1_5_exec-start.$(OBJEXT) \ - minix_stage1_5_exec-asm.$(OBJEXT) \ - minix_stage1_5_exec-common.$(OBJEXT) \ - minix_stage1_5_exec-char_io.$(OBJEXT) \ - minix_stage1_5_exec-disk_io.$(OBJEXT) \ - minix_stage1_5_exec-stage1_5.$(OBJEXT) \ - minix_stage1_5_exec-fsys_minix.$(OBJEXT) \ - minix_stage1_5_exec-bios.$(OBJEXT) -minix_stage1_5_exec_OBJECTS = $(am_minix_stage1_5_exec_OBJECTS) -minix_stage1_5_exec_LDADD = $(LDADD) -am_nbloader_exec_OBJECTS = nbloader_exec-nbloader.$(OBJEXT) -nbloader_exec_OBJECTS = $(am_nbloader_exec_OBJECTS) -nbloader_exec_LDADD = $(LDADD) -am_pre_stage2_exec_OBJECTS = pre_stage2_exec-asm.$(OBJEXT) \ - pre_stage2_exec-bios.$(OBJEXT) pre_stage2_exec-boot.$(OBJEXT) \ - pre_stage2_exec-builtins.$(OBJEXT) \ - pre_stage2_exec-char_io.$(OBJEXT) \ - pre_stage2_exec-cmdline.$(OBJEXT) \ - pre_stage2_exec-common.$(OBJEXT) \ - pre_stage2_exec-console.$(OBJEXT) \ - pre_stage2_exec-disk_io.$(OBJEXT) \ - pre_stage2_exec-fsys_ext2fs.$(OBJEXT) \ - pre_stage2_exec-fsys_fat.$(OBJEXT) \ - pre_stage2_exec-fsys_ffs.$(OBJEXT) \ - pre_stage2_exec-fsys_iso9660.$(OBJEXT) \ - pre_stage2_exec-fsys_jfs.$(OBJEXT) \ - pre_stage2_exec-fsys_minix.$(OBJEXT) \ - pre_stage2_exec-fsys_reiserfs.$(OBJEXT) \ - pre_stage2_exec-fsys_ufs2.$(OBJEXT) \ - pre_stage2_exec-fsys_vstafs.$(OBJEXT) \ - pre_stage2_exec-fsys_xfs.$(OBJEXT) \ - pre_stage2_exec-gunzip.$(OBJEXT) \ - pre_stage2_exec-hercules.$(OBJEXT) \ - pre_stage2_exec-md5.$(OBJEXT) pre_stage2_exec-serial.$(OBJEXT) \ - pre_stage2_exec-smp-imps.$(OBJEXT) \ - pre_stage2_exec-stage2.$(OBJEXT) \ - pre_stage2_exec-terminfo.$(OBJEXT) \ - pre_stage2_exec-tparm.$(OBJEXT) -pre_stage2_exec_OBJECTS = $(am_pre_stage2_exec_OBJECTS) -@NETBOOT_SUPPORT_TRUE@pre_stage2_exec_DEPENDENCIES = \ -@NETBOOT_SUPPORT_TRUE@ ../netboot/libdrivers.a -am_pxeloader_exec_OBJECTS = pxeloader_exec-pxeloader.$(OBJEXT) -pxeloader_exec_OBJECTS = $(am_pxeloader_exec_OBJECTS) -pxeloader_exec_LDADD = $(LDADD) -am_reiserfs_stage1_5_exec_OBJECTS = \ - reiserfs_stage1_5_exec-start.$(OBJEXT) \ - reiserfs_stage1_5_exec-asm.$(OBJEXT) \ - reiserfs_stage1_5_exec-common.$(OBJEXT) \ - reiserfs_stage1_5_exec-char_io.$(OBJEXT) \ - reiserfs_stage1_5_exec-disk_io.$(OBJEXT) \ - reiserfs_stage1_5_exec-stage1_5.$(OBJEXT) \ - reiserfs_stage1_5_exec-fsys_reiserfs.$(OBJEXT) \ - reiserfs_stage1_5_exec-bios.$(OBJEXT) -reiserfs_stage1_5_exec_OBJECTS = $(am_reiserfs_stage1_5_exec_OBJECTS) -reiserfs_stage1_5_exec_LDADD = $(LDADD) -am_start_exec_OBJECTS = start_exec-start.$(OBJEXT) -start_exec_OBJECTS = $(am_start_exec_OBJECTS) -start_exec_LDADD = $(LDADD) -am_start_eltorito_exec_OBJECTS = \ - start_eltorito_exec-start_eltorito.$(OBJEXT) -start_eltorito_exec_OBJECTS = $(am_start_eltorito_exec_OBJECTS) -start_eltorito_exec_LDADD = $(LDADD) -am_ufs2_stage1_5_exec_OBJECTS = ufs2_stage1_5_exec-start.$(OBJEXT) \ - ufs2_stage1_5_exec-asm.$(OBJEXT) \ - ufs2_stage1_5_exec-common.$(OBJEXT) \ - ufs2_stage1_5_exec-char_io.$(OBJEXT) \ - ufs2_stage1_5_exec-disk_io.$(OBJEXT) \ - ufs2_stage1_5_exec-stage1_5.$(OBJEXT) \ - ufs2_stage1_5_exec-fsys_ufs2.$(OBJEXT) \ - ufs2_stage1_5_exec-bios.$(OBJEXT) -ufs2_stage1_5_exec_OBJECTS = $(am_ufs2_stage1_5_exec_OBJECTS) -ufs2_stage1_5_exec_LDADD = $(LDADD) -am_vstafs_stage1_5_exec_OBJECTS = \ - vstafs_stage1_5_exec-start.$(OBJEXT) \ - vstafs_stage1_5_exec-asm.$(OBJEXT) \ - vstafs_stage1_5_exec-common.$(OBJEXT) \ - vstafs_stage1_5_exec-char_io.$(OBJEXT) \ - vstafs_stage1_5_exec-disk_io.$(OBJEXT) \ - vstafs_stage1_5_exec-stage1_5.$(OBJEXT) \ - vstafs_stage1_5_exec-fsys_vstafs.$(OBJEXT) \ - vstafs_stage1_5_exec-bios.$(OBJEXT) -vstafs_stage1_5_exec_OBJECTS = $(am_vstafs_stage1_5_exec_OBJECTS) -vstafs_stage1_5_exec_LDADD = $(LDADD) -am_xfs_stage1_5_exec_OBJECTS = xfs_stage1_5_exec-start.$(OBJEXT) \ - xfs_stage1_5_exec-asm.$(OBJEXT) \ - xfs_stage1_5_exec-common.$(OBJEXT) \ - xfs_stage1_5_exec-char_io.$(OBJEXT) \ - xfs_stage1_5_exec-disk_io.$(OBJEXT) \ - xfs_stage1_5_exec-stage1_5.$(OBJEXT) \ - xfs_stage1_5_exec-fsys_xfs.$(OBJEXT) \ - xfs_stage1_5_exec-bios.$(OBJEXT) -xfs_stage1_5_exec_OBJECTS = $(am_xfs_stage1_5_exec_OBJECTS) -xfs_stage1_5_exec_LDADD = $(LDADD) -SCRIPTS = $(noinst_SCRIPTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libgrub_a_SOURCES) $(diskless_exec_SOURCES) \ - $(e2fs_stage1_5_exec_SOURCES) $(fat_stage1_5_exec_SOURCES) \ - $(ffs_stage1_5_exec_SOURCES) $(iso9660_stage1_5_exec_SOURCES) \ - $(jfs_stage1_5_exec_SOURCES) $(minix_stage1_5_exec_SOURCES) \ - $(nbloader_exec_SOURCES) $(pre_stage2_exec_SOURCES) \ - $(pxeloader_exec_SOURCES) $(reiserfs_stage1_5_exec_SOURCES) \ - $(start_exec_SOURCES) $(start_eltorito_exec_SOURCES) \ - $(ufs2_stage1_5_exec_SOURCES) $(vstafs_stage1_5_exec_SOURCES) \ - $(xfs_stage1_5_exec_SOURCES) -DIST_SOURCES = $(libgrub_a_SOURCES) $(diskless_exec_SOURCES) \ - $(e2fs_stage1_5_exec_SOURCES) $(fat_stage1_5_exec_SOURCES) \ - $(ffs_stage1_5_exec_SOURCES) $(iso9660_stage1_5_exec_SOURCES) \ - $(jfs_stage1_5_exec_SOURCES) $(minix_stage1_5_exec_SOURCES) \ - $(nbloader_exec_SOURCES) $(pre_stage2_exec_SOURCES) \ - $(pxeloader_exec_SOURCES) $(reiserfs_stage1_5_exec_SOURCES) \ - $(start_exec_SOURCES) $(start_eltorito_exec_SOURCES) \ - $(ufs2_stage1_5_exec_SOURCES) $(vstafs_stage1_5_exec_SOURCES) \ - $(xfs_stage1_5_exec_SOURCES) -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(pkglibdir)" -pkglibDATA_INSTALL = $(INSTALL_DATA) -DATA = $(noinst_DATA) $(pkglib_DATA) -HEADERS = $(noinst_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) - -# Stage 2 and Stage 1.5's. -pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ -BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ -CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ -DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FSYS_CFLAGS = @FSYS_CFLAGS@ -GRUB_CFLAGS = @GRUB_CFLAGS@ -GRUB_LIBS = @GRUB_LIBS@ -HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ -HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ -MAKEINFO = @MAKEINFO@ -NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ -NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ -NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ -NET_CFLAGS = @NET_CFLAGS@ -NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ -OBJCOPY = @OBJCOPY@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PERL = @PERL@ -RANLIB = @RANLIB@ -SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ -SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ -SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ -SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STAGE1_CFLAGS = @STAGE1_CFLAGS@ -STAGE2_CFLAGS = @STAGE2_CFLAGS@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ - -# For test target. -TESTS = size_test -noinst_SCRIPTS = $(TESTS) - -# For dist target. -noinst_HEADERS = apic.h defs.h dir.h disk_inode.h disk_inode_ffs.h \ - fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \ - imgact_aout.h iso9660.h jfs.h mb_header.h mb_info.h md5.h \ - nbi.h pc_slice.h serial.h shared.h smp-imps.h term.h \ - terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h - -EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS) - -# For . -INCLUDES = -I$(top_srcdir)/stage1 - -# The library for /sbin/grub. -noinst_LIBRARIES = libgrub.a -libgrub_a_SOURCES = boot.c builtins.c char_io.c cmdline.c common.c \ - disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \ - fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_ufs2.c \ - fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c stage2.c \ - terminfo.c tparm.c - -libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \ - -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \ - -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \ - -DFSYS_UFS2=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \ - -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1 - -@DISKLESS_SUPPORT_FALSE@pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ -@DISKLESS_SUPPORT_FALSE@ ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \ -@DISKLESS_SUPPORT_FALSE@ reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 - -@DISKLESS_SUPPORT_TRUE@pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ -@DISKLESS_SUPPORT_TRUE@ ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \ -@DISKLESS_SUPPORT_TRUE@ reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 \ -@DISKLESS_SUPPORT_TRUE@ nbgrub pxegrub - -@DISKLESS_SUPPORT_FALSE@noinst_DATA = pre_stage2 start start_eltorito -@DISKLESS_SUPPORT_TRUE@noinst_DATA = pre_stage2 start start_eltorito nbloader pxeloader diskless -MOSTLYCLEANFILES = $(noinst_PROGRAMS) -PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200 -START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000 -NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0 -PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 -START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 -@NETBOOT_SUPPORT_FALSE@NETBOOT_FLAGS = -@NETBOOT_SUPPORT_TRUE@NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1 -@SERIAL_SUPPORT_FALSE@SERIAL_FLAGS = -@SERIAL_SUPPORT_TRUE@SERIAL_FLAGS = -DSUPPORT_SERIAL=1 -@HERCULES_SUPPORT_FALSE@HERCULES_FLAGS = -@HERCULES_SUPPORT_TRUE@HERCULES_FLAGS = -DSUPPORT_HERCULES=1 -STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ - $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) - -STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000 -STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1 - -# For stage2 target. -pre_stage2_exec_SOURCES = asm.S bios.c boot.c builtins.c char_io.c \ - cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \ - fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \ - fsys_reiserfs.c fsys_ufs2.c fsys_vstafs.c fsys_xfs.c gunzip.c \ - hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c - -pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) -pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) -pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK) -@NETBOOT_SUPPORT_TRUE@pre_stage2_exec_LDADD = ../netboot/libdrivers.a -@DISKLESS_SUPPORT_FALSE@BUILT_SOURCES = stage2_size.h -@DISKLESS_SUPPORT_TRUE@BUILT_SOURCES = stage2_size.h diskless_size.h -CLEANFILES = $(pkglib_DATA) $(noinst_DATA) $(BUILT_SOURCES) -start_exec_SOURCES = start.S -start_exec_CCASFLAGS = $(STAGE2_COMPILE) -start_exec_LDFLAGS = $(START_LINK) -start_eltorito_exec_SOURCES = start_eltorito.S -start_eltorito_exec_CCASFLAGS = $(STAGE2_COMPILE) -start_eltorito_exec_LDFLAGS = $(START_ELTORITO_LINK) - -# For e2fs_stage1_5 target. -e2fs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ - stage1_5.c fsys_ext2fs.c bios.c - -e2fs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \ - -DNO_BLOCK_FILES=1 - -e2fs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \ - -DNO_BLOCK_FILES=1 - -e2fs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For fat_stage1_5 target. -fat_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ - stage1_5.c fsys_fat.c bios.c - -fat_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \ - -DNO_BLOCK_FILES=1 - -fat_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \ - -DNO_BLOCK_FILES=1 - -fat_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For ffs_stage1_5 target. -ffs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ - stage1_5.c fsys_ffs.c bios.c - -ffs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \ - -DNO_BLOCK_FILES=1 - -ffs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \ - -DNO_BLOCK_FILES=1 - -ffs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For ufs2_stage1_5 target. -ufs2_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ - stage1_5.c fsys_ufs2.c bios.c - -ufs2_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \ - -DNO_BLOCK_FILES=1 - -ufs2_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \ - -DNO_BLOCK_FILES=1 - -ufs2_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For minix_stage1_5 target. -minix_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ - stage1_5.c fsys_minix.c bios.c - -minix_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \ - -DNO_BLOCK_FILES=1 - -minix_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \ - -DNO_BLOCK_FILES=1 - -minix_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For reiserfs_stage1_5 target. -reiserfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ - disk_io.c stage1_5.c fsys_reiserfs.c bios.c - -reiserfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \ - -DNO_BLOCK_FILES=1 - -reiserfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \ - -DNO_BLOCK_FILES=1 - -reiserfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For vstafs_stage1_5 target. -vstafs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ - disk_io.c stage1_5.c fsys_vstafs.c bios.c - -vstafs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \ - -DNO_BLOCK_FILES=1 - -vstafs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \ - -DNO_BLOCK_FILES=1 - -vstafs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For jfs_stage1_5 target. -jfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ - disk_io.c stage1_5.c fsys_jfs.c bios.c - -jfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \ - -DNO_BLOCK_FILES=1 - -jfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \ - -DNO_BLOCK_FILES=1 - -jfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For xfs_stage1_5 target. -xfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ - disk_io.c stage1_5.c fsys_xfs.c bios.c - -xfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \ - -DNO_BLOCK_FILES=1 - -xfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \ - -DNO_BLOCK_FILES=1 - -xfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For iso9660_stage1_5 target. -iso9660_stage1_5_exec_SOURCES = start_eltorito.S asm.S common.c char_io.c \ - disk_io.c stage1_5.c fsys_iso9660.c bios.c - -iso9660_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \ - -DNO_BLOCK_FILES=1 - -iso9660_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \ - -DNO_BLOCK_FILES=1 - -iso9660_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) - -# For diskless target. -diskless_exec_SOURCES = $(pre_stage2_exec_SOURCES) -diskless_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \ - -DSUPPORT_DISKLESS=1 - -diskless_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \ - -DSUPPORT_DISKLESS=1 - -diskless_exec_LDFLAGS = $(PRE_STAGE2_LINK) -diskless_exec_LDADD = ../netboot/libdrivers.a - -# For nbloader target. -nbloader_exec_SOURCES = nbloader.S -nbloader_exec_CCASFLAGS = $(STAGE2_COMPILE) -nbloader_exec_LDFLAGS = $(NBLOADER_LINK) - -# For pxeloader target. -pxeloader_exec_SOURCES = pxeloader.S -pxeloader_exec_CCASFLAGS = $(STAGE2_COMPILE) -pxeloader_exec_LDFLAGS = $(PXELOADER_LINK) - -# General rule for making a raw binary. -SUFFIXES = .exec -all: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) all-am - -.SUFFIXES: -.SUFFIXES: .exec .S .c .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu stage2/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu stage2/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -clean-noinstLIBRARIES: - -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) -libgrub.a: $(libgrub_a_OBJECTS) $(libgrub_a_DEPENDENCIES) - -rm -f libgrub.a - $(libgrub_a_AR) libgrub.a $(libgrub_a_OBJECTS) $(libgrub_a_LIBADD) - $(RANLIB) libgrub.a - -clean-noinstPROGRAMS: - -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) -diskless.exec$(EXEEXT): $(diskless_exec_OBJECTS) $(diskless_exec_DEPENDENCIES) - @rm -f diskless.exec$(EXEEXT) - $(LINK) $(diskless_exec_LDFLAGS) $(diskless_exec_OBJECTS) $(diskless_exec_LDADD) $(LIBS) -e2fs_stage1_5.exec$(EXEEXT): $(e2fs_stage1_5_exec_OBJECTS) $(e2fs_stage1_5_exec_DEPENDENCIES) - @rm -f e2fs_stage1_5.exec$(EXEEXT) - $(LINK) $(e2fs_stage1_5_exec_LDFLAGS) $(e2fs_stage1_5_exec_OBJECTS) $(e2fs_stage1_5_exec_LDADD) $(LIBS) -fat_stage1_5.exec$(EXEEXT): $(fat_stage1_5_exec_OBJECTS) $(fat_stage1_5_exec_DEPENDENCIES) - @rm -f fat_stage1_5.exec$(EXEEXT) - $(LINK) $(fat_stage1_5_exec_LDFLAGS) $(fat_stage1_5_exec_OBJECTS) $(fat_stage1_5_exec_LDADD) $(LIBS) -ffs_stage1_5.exec$(EXEEXT): $(ffs_stage1_5_exec_OBJECTS) $(ffs_stage1_5_exec_DEPENDENCIES) - @rm -f ffs_stage1_5.exec$(EXEEXT) - $(LINK) $(ffs_stage1_5_exec_LDFLAGS) $(ffs_stage1_5_exec_OBJECTS) $(ffs_stage1_5_exec_LDADD) $(LIBS) -iso9660_stage1_5.exec$(EXEEXT): $(iso9660_stage1_5_exec_OBJECTS) $(iso9660_stage1_5_exec_DEPENDENCIES) - @rm -f iso9660_stage1_5.exec$(EXEEXT) - $(LINK) $(iso9660_stage1_5_exec_LDFLAGS) $(iso9660_stage1_5_exec_OBJECTS) $(iso9660_stage1_5_exec_LDADD) $(LIBS) -jfs_stage1_5.exec$(EXEEXT): $(jfs_stage1_5_exec_OBJECTS) $(jfs_stage1_5_exec_DEPENDENCIES) - @rm -f jfs_stage1_5.exec$(EXEEXT) - $(LINK) $(jfs_stage1_5_exec_LDFLAGS) $(jfs_stage1_5_exec_OBJECTS) $(jfs_stage1_5_exec_LDADD) $(LIBS) -minix_stage1_5.exec$(EXEEXT): $(minix_stage1_5_exec_OBJECTS) $(minix_stage1_5_exec_DEPENDENCIES) - @rm -f minix_stage1_5.exec$(EXEEXT) - $(LINK) $(minix_stage1_5_exec_LDFLAGS) $(minix_stage1_5_exec_OBJECTS) $(minix_stage1_5_exec_LDADD) $(LIBS) -nbloader.exec$(EXEEXT): $(nbloader_exec_OBJECTS) $(nbloader_exec_DEPENDENCIES) - @rm -f nbloader.exec$(EXEEXT) - $(LINK) $(nbloader_exec_LDFLAGS) $(nbloader_exec_OBJECTS) $(nbloader_exec_LDADD) $(LIBS) -pre_stage2.exec$(EXEEXT): $(pre_stage2_exec_OBJECTS) $(pre_stage2_exec_DEPENDENCIES) - @rm -f pre_stage2.exec$(EXEEXT) - $(LINK) $(pre_stage2_exec_LDFLAGS) $(pre_stage2_exec_OBJECTS) $(pre_stage2_exec_LDADD) $(LIBS) -pxeloader.exec$(EXEEXT): $(pxeloader_exec_OBJECTS) $(pxeloader_exec_DEPENDENCIES) - @rm -f pxeloader.exec$(EXEEXT) - $(LINK) $(pxeloader_exec_LDFLAGS) $(pxeloader_exec_OBJECTS) $(pxeloader_exec_LDADD) $(LIBS) -reiserfs_stage1_5.exec$(EXEEXT): $(reiserfs_stage1_5_exec_OBJECTS) $(reiserfs_stage1_5_exec_DEPENDENCIES) - @rm -f reiserfs_stage1_5.exec$(EXEEXT) - $(LINK) $(reiserfs_stage1_5_exec_LDFLAGS) $(reiserfs_stage1_5_exec_OBJECTS) $(reiserfs_stage1_5_exec_LDADD) $(LIBS) -start.exec$(EXEEXT): $(start_exec_OBJECTS) $(start_exec_DEPENDENCIES) - @rm -f start.exec$(EXEEXT) - $(LINK) $(start_exec_LDFLAGS) $(start_exec_OBJECTS) $(start_exec_LDADD) $(LIBS) -start_eltorito.exec$(EXEEXT): $(start_eltorito_exec_OBJECTS) $(start_eltorito_exec_DEPENDENCIES) - @rm -f start_eltorito.exec$(EXEEXT) - $(LINK) $(start_eltorito_exec_LDFLAGS) $(start_eltorito_exec_OBJECTS) $(start_eltorito_exec_LDADD) $(LIBS) -ufs2_stage1_5.exec$(EXEEXT): $(ufs2_stage1_5_exec_OBJECTS) $(ufs2_stage1_5_exec_DEPENDENCIES) - @rm -f ufs2_stage1_5.exec$(EXEEXT) - $(LINK) $(ufs2_stage1_5_exec_LDFLAGS) $(ufs2_stage1_5_exec_OBJECTS) $(ufs2_stage1_5_exec_LDADD) $(LIBS) -vstafs_stage1_5.exec$(EXEEXT): $(vstafs_stage1_5_exec_OBJECTS) $(vstafs_stage1_5_exec_DEPENDENCIES) - @rm -f vstafs_stage1_5.exec$(EXEEXT) - $(LINK) $(vstafs_stage1_5_exec_LDFLAGS) $(vstafs_stage1_5_exec_OBJECTS) $(vstafs_stage1_5_exec_LDADD) $(LIBS) -xfs_stage1_5.exec$(EXEEXT): $(xfs_stage1_5_exec_OBJECTS) $(xfs_stage1_5_exec_DEPENDENCIES) - @rm -f xfs_stage1_5.exec$(EXEEXT) - $(LINK) $(xfs_stage1_5_exec_LDFLAGS) $(xfs_stage1_5_exec_OBJECTS) $(xfs_stage1_5_exec_LDADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-bios.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-boot.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-builtins.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-char_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-cmdline.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-console.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-disk_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_ext2fs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_fat.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_ffs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_iso9660.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_jfs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_minix.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_reiserfs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_ufs2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_vstafs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_xfs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-gunzip.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-hercules.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-md5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-serial.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-smp-imps.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-stage2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-terminfo.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-tparm.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-bios.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-char_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-bios.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-char_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-disk_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-stage1_5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-bios.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-char_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-disk_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-bios.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-char_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-bios.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-char_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-disk_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-boot.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-builtins.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-char_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-cmdline.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-disk_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_ext2fs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_fat.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_ffs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_iso9660.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_jfs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_minix.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_reiserfs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_ufs2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_vstafs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_xfs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-gunzip.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-md5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-serial.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-stage2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-terminfo.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-tparm.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-bios.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-char_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-disk_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-stage1_5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-bios.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-boot.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-builtins.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-char_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-cmdline.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-console.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-disk_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_fat.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_ffs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_jfs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_minix.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_xfs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-gunzip.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-hercules.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-md5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-serial.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-smp-imps.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-stage2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-terminfo.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-tparm.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-bios.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-bios.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-char_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-bios.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-char_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-bios.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-char_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-common.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-disk_io.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Po@am__quote@ - -.S.o: - $(CCASCOMPILE) -c $< - -.S.obj: - $(CCASCOMPILE) -c `$(CYGPATH_W) '$<'` - -diskless_exec-asm.o: asm.S - $(CCAS) $(diskless_exec_CCASFLAGS) $(CCASFLAGS) -c -o diskless_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S - -diskless_exec-asm.obj: asm.S - $(CCAS) $(diskless_exec_CCASFLAGS) $(CCASFLAGS) -c -o diskless_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` - -e2fs_stage1_5_exec-start.o: start.S - $(CCAS) $(e2fs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o e2fs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S - -e2fs_stage1_5_exec-start.obj: start.S - $(CCAS) $(e2fs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o e2fs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` - -e2fs_stage1_5_exec-asm.o: asm.S - $(CCAS) $(e2fs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o e2fs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S - -e2fs_stage1_5_exec-asm.obj: asm.S - $(CCAS) $(e2fs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o e2fs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` - -fat_stage1_5_exec-start.o: start.S - $(CCAS) $(fat_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o fat_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S - -fat_stage1_5_exec-start.obj: start.S - $(CCAS) $(fat_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o fat_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` - -fat_stage1_5_exec-asm.o: asm.S - $(CCAS) $(fat_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o fat_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S - -fat_stage1_5_exec-asm.obj: asm.S - $(CCAS) $(fat_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o fat_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` - -ffs_stage1_5_exec-start.o: start.S - $(CCAS) $(ffs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ffs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S - -ffs_stage1_5_exec-start.obj: start.S - $(CCAS) $(ffs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ffs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` - -ffs_stage1_5_exec-asm.o: asm.S - $(CCAS) $(ffs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ffs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S - -ffs_stage1_5_exec-asm.obj: asm.S - $(CCAS) $(ffs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ffs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` - -iso9660_stage1_5_exec-start_eltorito.o: start_eltorito.S - $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-start_eltorito.o `test -f 'start_eltorito.S' || echo '$(srcdir)/'`start_eltorito.S - -iso9660_stage1_5_exec-start_eltorito.obj: start_eltorito.S - $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-start_eltorito.obj `if test -f 'start_eltorito.S'; then $(CYGPATH_W) 'start_eltorito.S'; else $(CYGPATH_W) '$(srcdir)/start_eltorito.S'; fi` - -iso9660_stage1_5_exec-asm.o: asm.S - $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S - -iso9660_stage1_5_exec-asm.obj: asm.S - $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` - -jfs_stage1_5_exec-start.o: start.S - $(CCAS) $(jfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o jfs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S - -jfs_stage1_5_exec-start.obj: start.S - $(CCAS) $(jfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o jfs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` - -jfs_stage1_5_exec-asm.o: asm.S - $(CCAS) $(jfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o jfs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S - -jfs_stage1_5_exec-asm.obj: asm.S - $(CCAS) $(jfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o jfs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` - -minix_stage1_5_exec-start.o: start.S - $(CCAS) $(minix_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o minix_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S - -minix_stage1_5_exec-start.obj: start.S - $(CCAS) $(minix_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o minix_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` - -minix_stage1_5_exec-asm.o: asm.S - $(CCAS) $(minix_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o minix_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S - -minix_stage1_5_exec-asm.obj: asm.S - $(CCAS) $(minix_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o minix_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` - -nbloader_exec-nbloader.o: nbloader.S - $(CCAS) $(nbloader_exec_CCASFLAGS) $(CCASFLAGS) -c -o nbloader_exec-nbloader.o `test -f 'nbloader.S' || echo '$(srcdir)/'`nbloader.S - -nbloader_exec-nbloader.obj: nbloader.S - $(CCAS) $(nbloader_exec_CCASFLAGS) $(CCASFLAGS) -c -o nbloader_exec-nbloader.obj `if test -f 'nbloader.S'; then $(CYGPATH_W) 'nbloader.S'; else $(CYGPATH_W) '$(srcdir)/nbloader.S'; fi` - -pre_stage2_exec-asm.o: asm.S - $(CCAS) $(pre_stage2_exec_CCASFLAGS) $(CCASFLAGS) -c -o pre_stage2_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S - -pre_stage2_exec-asm.obj: asm.S - $(CCAS) $(pre_stage2_exec_CCASFLAGS) $(CCASFLAGS) -c -o pre_stage2_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` - -pxeloader_exec-pxeloader.o: pxeloader.S - $(CCAS) $(pxeloader_exec_CCASFLAGS) $(CCASFLAGS) -c -o pxeloader_exec-pxeloader.o `test -f 'pxeloader.S' || echo '$(srcdir)/'`pxeloader.S - -pxeloader_exec-pxeloader.obj: pxeloader.S - $(CCAS) $(pxeloader_exec_CCASFLAGS) $(CCASFLAGS) -c -o pxeloader_exec-pxeloader.obj `if test -f 'pxeloader.S'; then $(CYGPATH_W) 'pxeloader.S'; else $(CYGPATH_W) '$(srcdir)/pxeloader.S'; fi` - -reiserfs_stage1_5_exec-start.o: start.S - $(CCAS) $(reiserfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o reiserfs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S - -reiserfs_stage1_5_exec-start.obj: start.S - $(CCAS) $(reiserfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o reiserfs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` - -reiserfs_stage1_5_exec-asm.o: asm.S - $(CCAS) $(reiserfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o reiserfs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S - -reiserfs_stage1_5_exec-asm.obj: asm.S - $(CCAS) $(reiserfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o reiserfs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` - -start_exec-start.o: start.S - $(CCAS) $(start_exec_CCASFLAGS) $(CCASFLAGS) -c -o start_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S - -start_exec-start.obj: start.S - $(CCAS) $(start_exec_CCASFLAGS) $(CCASFLAGS) -c -o start_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` - -start_eltorito_exec-start_eltorito.o: start_eltorito.S - $(CCAS) $(start_eltorito_exec_CCASFLAGS) $(CCASFLAGS) -c -o start_eltorito_exec-start_eltorito.o `test -f 'start_eltorito.S' || echo '$(srcdir)/'`start_eltorito.S - -start_eltorito_exec-start_eltorito.obj: start_eltorito.S - $(CCAS) $(start_eltorito_exec_CCASFLAGS) $(CCASFLAGS) -c -o start_eltorito_exec-start_eltorito.obj `if test -f 'start_eltorito.S'; then $(CYGPATH_W) 'start_eltorito.S'; else $(CYGPATH_W) '$(srcdir)/start_eltorito.S'; fi` - -ufs2_stage1_5_exec-start.o: start.S - $(CCAS) $(ufs2_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ufs2_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S - -ufs2_stage1_5_exec-start.obj: start.S - $(CCAS) $(ufs2_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ufs2_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` - -ufs2_stage1_5_exec-asm.o: asm.S - $(CCAS) $(ufs2_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ufs2_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S - -ufs2_stage1_5_exec-asm.obj: asm.S - $(CCAS) $(ufs2_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ufs2_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` - -vstafs_stage1_5_exec-start.o: start.S - $(CCAS) $(vstafs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o vstafs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S - -vstafs_stage1_5_exec-start.obj: start.S - $(CCAS) $(vstafs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o vstafs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` - -vstafs_stage1_5_exec-asm.o: asm.S - $(CCAS) $(vstafs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o vstafs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S - -vstafs_stage1_5_exec-asm.obj: asm.S - $(CCAS) $(vstafs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o vstafs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` - -xfs_stage1_5_exec-start.o: start.S - $(CCAS) $(xfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o xfs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S - -xfs_stage1_5_exec-start.obj: start.S - $(CCAS) $(xfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o xfs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` - -xfs_stage1_5_exec-asm.o: asm.S - $(CCAS) $(xfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o xfs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S - -xfs_stage1_5_exec-asm.obj: asm.S - $(CCAS) $(xfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o xfs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` - -.c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -libgrub_a-boot.o: boot.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-boot.o -MD -MP -MF "$(DEPDIR)/libgrub_a-boot.Tpo" -c -o libgrub_a-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-boot.Tpo" "$(DEPDIR)/libgrub_a-boot.Po"; else rm -f "$(DEPDIR)/libgrub_a-boot.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boot.c' object='libgrub_a-boot.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c - -libgrub_a-boot.obj: boot.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-boot.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-boot.Tpo" -c -o libgrub_a-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-boot.Tpo" "$(DEPDIR)/libgrub_a-boot.Po"; else rm -f "$(DEPDIR)/libgrub_a-boot.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boot.c' object='libgrub_a-boot.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi` - -libgrub_a-builtins.o: builtins.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-builtins.o -MD -MP -MF "$(DEPDIR)/libgrub_a-builtins.Tpo" -c -o libgrub_a-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-builtins.Tpo" "$(DEPDIR)/libgrub_a-builtins.Po"; else rm -f "$(DEPDIR)/libgrub_a-builtins.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='builtins.c' object='libgrub_a-builtins.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c - -libgrub_a-builtins.obj: builtins.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-builtins.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-builtins.Tpo" -c -o libgrub_a-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-builtins.Tpo" "$(DEPDIR)/libgrub_a-builtins.Po"; else rm -f "$(DEPDIR)/libgrub_a-builtins.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='builtins.c' object='libgrub_a-builtins.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi` - -libgrub_a-char_io.o: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-char_io.o -MD -MP -MF "$(DEPDIR)/libgrub_a-char_io.Tpo" -c -o libgrub_a-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-char_io.Tpo" "$(DEPDIR)/libgrub_a-char_io.Po"; else rm -f "$(DEPDIR)/libgrub_a-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='libgrub_a-char_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c - -libgrub_a-char_io.obj: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-char_io.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-char_io.Tpo" -c -o libgrub_a-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-char_io.Tpo" "$(DEPDIR)/libgrub_a-char_io.Po"; else rm -f "$(DEPDIR)/libgrub_a-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='libgrub_a-char_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` - -libgrub_a-cmdline.o: cmdline.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-cmdline.o -MD -MP -MF "$(DEPDIR)/libgrub_a-cmdline.Tpo" -c -o libgrub_a-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-cmdline.Tpo" "$(DEPDIR)/libgrub_a-cmdline.Po"; else rm -f "$(DEPDIR)/libgrub_a-cmdline.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdline.c' object='libgrub_a-cmdline.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c - -libgrub_a-cmdline.obj: cmdline.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-cmdline.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-cmdline.Tpo" -c -o libgrub_a-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-cmdline.Tpo" "$(DEPDIR)/libgrub_a-cmdline.Po"; else rm -f "$(DEPDIR)/libgrub_a-cmdline.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdline.c' object='libgrub_a-cmdline.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi` - -libgrub_a-common.o: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-common.o -MD -MP -MF "$(DEPDIR)/libgrub_a-common.Tpo" -c -o libgrub_a-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-common.Tpo" "$(DEPDIR)/libgrub_a-common.Po"; else rm -f "$(DEPDIR)/libgrub_a-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='libgrub_a-common.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c - -libgrub_a-common.obj: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-common.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-common.Tpo" -c -o libgrub_a-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-common.Tpo" "$(DEPDIR)/libgrub_a-common.Po"; else rm -f "$(DEPDIR)/libgrub_a-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='libgrub_a-common.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` - -libgrub_a-disk_io.o: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-disk_io.o -MD -MP -MF "$(DEPDIR)/libgrub_a-disk_io.Tpo" -c -o libgrub_a-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-disk_io.Tpo" "$(DEPDIR)/libgrub_a-disk_io.Po"; else rm -f "$(DEPDIR)/libgrub_a-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='libgrub_a-disk_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c - -libgrub_a-disk_io.obj: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-disk_io.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-disk_io.Tpo" -c -o libgrub_a-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-disk_io.Tpo" "$(DEPDIR)/libgrub_a-disk_io.Po"; else rm -f "$(DEPDIR)/libgrub_a-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='libgrub_a-disk_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` - -libgrub_a-fsys_ext2fs.o: fsys_ext2fs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ext2fs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo" -c -o libgrub_a-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo" "$(DEPDIR)/libgrub_a-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='libgrub_a-fsys_ext2fs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c - -libgrub_a-fsys_ext2fs.obj: fsys_ext2fs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ext2fs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo" -c -o libgrub_a-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo" "$(DEPDIR)/libgrub_a-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='libgrub_a-fsys_ext2fs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi` - -libgrub_a-fsys_fat.o: fsys_fat.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_fat.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_fat.Tpo" -c -o libgrub_a-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_fat.Tpo" "$(DEPDIR)/libgrub_a-fsys_fat.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_fat.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='libgrub_a-fsys_fat.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c - -libgrub_a-fsys_fat.obj: fsys_fat.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_fat.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_fat.Tpo" -c -o libgrub_a-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_fat.Tpo" "$(DEPDIR)/libgrub_a-fsys_fat.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_fat.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='libgrub_a-fsys_fat.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi` - -libgrub_a-fsys_ffs.o: fsys_ffs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ffs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo" -c -o libgrub_a-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo" "$(DEPDIR)/libgrub_a-fsys_ffs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='libgrub_a-fsys_ffs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c - -libgrub_a-fsys_ffs.obj: fsys_ffs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ffs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo" -c -o libgrub_a-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo" "$(DEPDIR)/libgrub_a-fsys_ffs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='libgrub_a-fsys_ffs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi` - -libgrub_a-fsys_iso9660.o: fsys_iso9660.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_iso9660.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo" -c -o libgrub_a-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo" "$(DEPDIR)/libgrub_a-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='libgrub_a-fsys_iso9660.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c - -libgrub_a-fsys_iso9660.obj: fsys_iso9660.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_iso9660.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo" -c -o libgrub_a-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo" "$(DEPDIR)/libgrub_a-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='libgrub_a-fsys_iso9660.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi` - -libgrub_a-fsys_jfs.o: fsys_jfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_jfs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo" -c -o libgrub_a-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_jfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='libgrub_a-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c - -libgrub_a-fsys_jfs.obj: fsys_jfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_jfs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo" -c -o libgrub_a-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_jfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='libgrub_a-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi` - -libgrub_a-fsys_minix.o: fsys_minix.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_minix.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_minix.Tpo" -c -o libgrub_a-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_minix.Tpo" "$(DEPDIR)/libgrub_a-fsys_minix.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_minix.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='libgrub_a-fsys_minix.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c - -libgrub_a-fsys_minix.obj: fsys_minix.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_minix.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_minix.Tpo" -c -o libgrub_a-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_minix.Tpo" "$(DEPDIR)/libgrub_a-fsys_minix.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_minix.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='libgrub_a-fsys_minix.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi` - -libgrub_a-fsys_reiserfs.o: fsys_reiserfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_reiserfs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo" -c -o libgrub_a-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='libgrub_a-fsys_reiserfs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c - -libgrub_a-fsys_reiserfs.obj: fsys_reiserfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_reiserfs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo" -c -o libgrub_a-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='libgrub_a-fsys_reiserfs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi` - -libgrub_a-fsys_ufs2.o: fsys_ufs2.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ufs2.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo" -c -o libgrub_a-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo" "$(DEPDIR)/libgrub_a-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='libgrub_a-fsys_ufs2.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c - -libgrub_a-fsys_ufs2.obj: fsys_ufs2.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ufs2.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo" -c -o libgrub_a-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo" "$(DEPDIR)/libgrub_a-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='libgrub_a-fsys_ufs2.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi` - -libgrub_a-fsys_vstafs.o: fsys_vstafs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_vstafs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo" -c -o libgrub_a-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo" "$(DEPDIR)/libgrub_a-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='libgrub_a-fsys_vstafs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c - -libgrub_a-fsys_vstafs.obj: fsys_vstafs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_vstafs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo" -c -o libgrub_a-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo" "$(DEPDIR)/libgrub_a-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='libgrub_a-fsys_vstafs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi` - -libgrub_a-fsys_xfs.o: fsys_xfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_xfs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo" -c -o libgrub_a-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_xfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='libgrub_a-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c - -libgrub_a-fsys_xfs.obj: fsys_xfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_xfs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo" -c -o libgrub_a-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_xfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='libgrub_a-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi` - -libgrub_a-gunzip.o: gunzip.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-gunzip.o -MD -MP -MF "$(DEPDIR)/libgrub_a-gunzip.Tpo" -c -o libgrub_a-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-gunzip.Tpo" "$(DEPDIR)/libgrub_a-gunzip.Po"; else rm -f "$(DEPDIR)/libgrub_a-gunzip.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gunzip.c' object='libgrub_a-gunzip.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c - -libgrub_a-gunzip.obj: gunzip.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-gunzip.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-gunzip.Tpo" -c -o libgrub_a-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-gunzip.Tpo" "$(DEPDIR)/libgrub_a-gunzip.Po"; else rm -f "$(DEPDIR)/libgrub_a-gunzip.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gunzip.c' object='libgrub_a-gunzip.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi` - -libgrub_a-md5.o: md5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-md5.o -MD -MP -MF "$(DEPDIR)/libgrub_a-md5.Tpo" -c -o libgrub_a-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-md5.Tpo" "$(DEPDIR)/libgrub_a-md5.Po"; else rm -f "$(DEPDIR)/libgrub_a-md5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='libgrub_a-md5.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c - -libgrub_a-md5.obj: md5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-md5.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-md5.Tpo" -c -o libgrub_a-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-md5.Tpo" "$(DEPDIR)/libgrub_a-md5.Po"; else rm -f "$(DEPDIR)/libgrub_a-md5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='libgrub_a-md5.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi` - -libgrub_a-serial.o: serial.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-serial.o -MD -MP -MF "$(DEPDIR)/libgrub_a-serial.Tpo" -c -o libgrub_a-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-serial.Tpo" "$(DEPDIR)/libgrub_a-serial.Po"; else rm -f "$(DEPDIR)/libgrub_a-serial.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='libgrub_a-serial.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c - -libgrub_a-serial.obj: serial.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-serial.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-serial.Tpo" -c -o libgrub_a-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-serial.Tpo" "$(DEPDIR)/libgrub_a-serial.Po"; else rm -f "$(DEPDIR)/libgrub_a-serial.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='libgrub_a-serial.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi` - -libgrub_a-stage2.o: stage2.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-stage2.o -MD -MP -MF "$(DEPDIR)/libgrub_a-stage2.Tpo" -c -o libgrub_a-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-stage2.Tpo" "$(DEPDIR)/libgrub_a-stage2.Po"; else rm -f "$(DEPDIR)/libgrub_a-stage2.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage2.c' object='libgrub_a-stage2.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c - -libgrub_a-stage2.obj: stage2.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-stage2.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-stage2.Tpo" -c -o libgrub_a-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-stage2.Tpo" "$(DEPDIR)/libgrub_a-stage2.Po"; else rm -f "$(DEPDIR)/libgrub_a-stage2.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage2.c' object='libgrub_a-stage2.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi` - -libgrub_a-terminfo.o: terminfo.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-terminfo.o -MD -MP -MF "$(DEPDIR)/libgrub_a-terminfo.Tpo" -c -o libgrub_a-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-terminfo.Tpo" "$(DEPDIR)/libgrub_a-terminfo.Po"; else rm -f "$(DEPDIR)/libgrub_a-terminfo.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terminfo.c' object='libgrub_a-terminfo.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c - -libgrub_a-terminfo.obj: terminfo.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-terminfo.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-terminfo.Tpo" -c -o libgrub_a-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-terminfo.Tpo" "$(DEPDIR)/libgrub_a-terminfo.Po"; else rm -f "$(DEPDIR)/libgrub_a-terminfo.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terminfo.c' object='libgrub_a-terminfo.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi` - -libgrub_a-tparm.o: tparm.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-tparm.o -MD -MP -MF "$(DEPDIR)/libgrub_a-tparm.Tpo" -c -o libgrub_a-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-tparm.Tpo" "$(DEPDIR)/libgrub_a-tparm.Po"; else rm -f "$(DEPDIR)/libgrub_a-tparm.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tparm.c' object='libgrub_a-tparm.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c - -libgrub_a-tparm.obj: tparm.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-tparm.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-tparm.Tpo" -c -o libgrub_a-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-tparm.Tpo" "$(DEPDIR)/libgrub_a-tparm.Po"; else rm -f "$(DEPDIR)/libgrub_a-tparm.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tparm.c' object='libgrub_a-tparm.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi` - -diskless_exec-bios.o: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-bios.o -MD -MP -MF "$(DEPDIR)/diskless_exec-bios.Tpo" -c -o diskless_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-bios.Tpo" "$(DEPDIR)/diskless_exec-bios.Po"; else rm -f "$(DEPDIR)/diskless_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='diskless_exec-bios.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c - -diskless_exec-bios.obj: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-bios.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-bios.Tpo" -c -o diskless_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-bios.Tpo" "$(DEPDIR)/diskless_exec-bios.Po"; else rm -f "$(DEPDIR)/diskless_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='diskless_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` - -diskless_exec-boot.o: boot.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-boot.o -MD -MP -MF "$(DEPDIR)/diskless_exec-boot.Tpo" -c -o diskless_exec-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-boot.Tpo" "$(DEPDIR)/diskless_exec-boot.Po"; else rm -f "$(DEPDIR)/diskless_exec-boot.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boot.c' object='diskless_exec-boot.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c - -diskless_exec-boot.obj: boot.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-boot.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-boot.Tpo" -c -o diskless_exec-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-boot.Tpo" "$(DEPDIR)/diskless_exec-boot.Po"; else rm -f "$(DEPDIR)/diskless_exec-boot.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boot.c' object='diskless_exec-boot.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi` - -diskless_exec-builtins.o: builtins.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-builtins.o -MD -MP -MF "$(DEPDIR)/diskless_exec-builtins.Tpo" -c -o diskless_exec-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-builtins.Tpo" "$(DEPDIR)/diskless_exec-builtins.Po"; else rm -f "$(DEPDIR)/diskless_exec-builtins.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='builtins.c' object='diskless_exec-builtins.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c - -diskless_exec-builtins.obj: builtins.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-builtins.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-builtins.Tpo" -c -o diskless_exec-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-builtins.Tpo" "$(DEPDIR)/diskless_exec-builtins.Po"; else rm -f "$(DEPDIR)/diskless_exec-builtins.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='builtins.c' object='diskless_exec-builtins.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi` - -diskless_exec-char_io.o: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-char_io.o -MD -MP -MF "$(DEPDIR)/diskless_exec-char_io.Tpo" -c -o diskless_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-char_io.Tpo" "$(DEPDIR)/diskless_exec-char_io.Po"; else rm -f "$(DEPDIR)/diskless_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='diskless_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c - -diskless_exec-char_io.obj: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-char_io.Tpo" -c -o diskless_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-char_io.Tpo" "$(DEPDIR)/diskless_exec-char_io.Po"; else rm -f "$(DEPDIR)/diskless_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='diskless_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` - -diskless_exec-cmdline.o: cmdline.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-cmdline.o -MD -MP -MF "$(DEPDIR)/diskless_exec-cmdline.Tpo" -c -o diskless_exec-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-cmdline.Tpo" "$(DEPDIR)/diskless_exec-cmdline.Po"; else rm -f "$(DEPDIR)/diskless_exec-cmdline.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdline.c' object='diskless_exec-cmdline.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c - -diskless_exec-cmdline.obj: cmdline.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-cmdline.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-cmdline.Tpo" -c -o diskless_exec-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-cmdline.Tpo" "$(DEPDIR)/diskless_exec-cmdline.Po"; else rm -f "$(DEPDIR)/diskless_exec-cmdline.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdline.c' object='diskless_exec-cmdline.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi` - -diskless_exec-common.o: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-common.o -MD -MP -MF "$(DEPDIR)/diskless_exec-common.Tpo" -c -o diskless_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-common.Tpo" "$(DEPDIR)/diskless_exec-common.Po"; else rm -f "$(DEPDIR)/diskless_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='diskless_exec-common.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c - -diskless_exec-common.obj: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-common.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-common.Tpo" -c -o diskless_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-common.Tpo" "$(DEPDIR)/diskless_exec-common.Po"; else rm -f "$(DEPDIR)/diskless_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='diskless_exec-common.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` - -diskless_exec-console.o: console.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-console.o -MD -MP -MF "$(DEPDIR)/diskless_exec-console.Tpo" -c -o diskless_exec-console.o `test -f 'console.c' || echo '$(srcdir)/'`console.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-console.Tpo" "$(DEPDIR)/diskless_exec-console.Po"; else rm -f "$(DEPDIR)/diskless_exec-console.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='console.c' object='diskless_exec-console.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-console.o `test -f 'console.c' || echo '$(srcdir)/'`console.c - -diskless_exec-console.obj: console.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-console.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-console.Tpo" -c -o diskless_exec-console.obj `if test -f 'console.c'; then $(CYGPATH_W) 'console.c'; else $(CYGPATH_W) '$(srcdir)/console.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-console.Tpo" "$(DEPDIR)/diskless_exec-console.Po"; else rm -f "$(DEPDIR)/diskless_exec-console.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='console.c' object='diskless_exec-console.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-console.obj `if test -f 'console.c'; then $(CYGPATH_W) 'console.c'; else $(CYGPATH_W) '$(srcdir)/console.c'; fi` - -diskless_exec-disk_io.o: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/diskless_exec-disk_io.Tpo" -c -o diskless_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-disk_io.Tpo" "$(DEPDIR)/diskless_exec-disk_io.Po"; else rm -f "$(DEPDIR)/diskless_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='diskless_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c - -diskless_exec-disk_io.obj: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-disk_io.Tpo" -c -o diskless_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-disk_io.Tpo" "$(DEPDIR)/diskless_exec-disk_io.Po"; else rm -f "$(DEPDIR)/diskless_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='diskless_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` - -diskless_exec-fsys_ext2fs.o: fsys_ext2fs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ext2fs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo" -c -o diskless_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/diskless_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='diskless_exec-fsys_ext2fs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c - -diskless_exec-fsys_ext2fs.obj: fsys_ext2fs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ext2fs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo" -c -o diskless_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/diskless_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='diskless_exec-fsys_ext2fs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi` - -diskless_exec-fsys_fat.o: fsys_fat.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_fat.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_fat.Tpo" -c -o diskless_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_fat.Tpo" "$(DEPDIR)/diskless_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_fat.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='diskless_exec-fsys_fat.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c - -diskless_exec-fsys_fat.obj: fsys_fat.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_fat.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_fat.Tpo" -c -o diskless_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_fat.Tpo" "$(DEPDIR)/diskless_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_fat.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='diskless_exec-fsys_fat.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi` - -diskless_exec-fsys_ffs.o: fsys_ffs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ffs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo" -c -o diskless_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo" "$(DEPDIR)/diskless_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='diskless_exec-fsys_ffs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c - -diskless_exec-fsys_ffs.obj: fsys_ffs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ffs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo" -c -o diskless_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo" "$(DEPDIR)/diskless_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='diskless_exec-fsys_ffs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi` - -diskless_exec-fsys_iso9660.o: fsys_iso9660.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_iso9660.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo" -c -o diskless_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo" "$(DEPDIR)/diskless_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='diskless_exec-fsys_iso9660.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c - -diskless_exec-fsys_iso9660.obj: fsys_iso9660.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_iso9660.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo" -c -o diskless_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo" "$(DEPDIR)/diskless_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='diskless_exec-fsys_iso9660.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi` - -diskless_exec-fsys_jfs.o: fsys_jfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_jfs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo" -c -o diskless_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='diskless_exec-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c - -diskless_exec-fsys_jfs.obj: fsys_jfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_jfs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo" -c -o diskless_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='diskless_exec-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi` - -diskless_exec-fsys_minix.o: fsys_minix.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_minix.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_minix.Tpo" -c -o diskless_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_minix.Tpo" "$(DEPDIR)/diskless_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_minix.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='diskless_exec-fsys_minix.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c - -diskless_exec-fsys_minix.obj: fsys_minix.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_minix.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_minix.Tpo" -c -o diskless_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_minix.Tpo" "$(DEPDIR)/diskless_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_minix.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='diskless_exec-fsys_minix.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi` - -diskless_exec-fsys_reiserfs.o: fsys_reiserfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_reiserfs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo" -c -o diskless_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='diskless_exec-fsys_reiserfs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c - -diskless_exec-fsys_reiserfs.obj: fsys_reiserfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_reiserfs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo" -c -o diskless_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='diskless_exec-fsys_reiserfs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi` - -diskless_exec-fsys_ufs2.o: fsys_ufs2.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ufs2.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo" -c -o diskless_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo" "$(DEPDIR)/diskless_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='diskless_exec-fsys_ufs2.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c - -diskless_exec-fsys_ufs2.obj: fsys_ufs2.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ufs2.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo" -c -o diskless_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo" "$(DEPDIR)/diskless_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='diskless_exec-fsys_ufs2.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi` - -diskless_exec-fsys_vstafs.o: fsys_vstafs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_vstafs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo" -c -o diskless_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo" "$(DEPDIR)/diskless_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='diskless_exec-fsys_vstafs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c - -diskless_exec-fsys_vstafs.obj: fsys_vstafs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_vstafs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo" -c -o diskless_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo" "$(DEPDIR)/diskless_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='diskless_exec-fsys_vstafs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi` - -diskless_exec-fsys_xfs.o: fsys_xfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_xfs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo" -c -o diskless_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='diskless_exec-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c - -diskless_exec-fsys_xfs.obj: fsys_xfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_xfs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo" -c -o diskless_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='diskless_exec-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi` - -diskless_exec-gunzip.o: gunzip.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-gunzip.o -MD -MP -MF "$(DEPDIR)/diskless_exec-gunzip.Tpo" -c -o diskless_exec-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-gunzip.Tpo" "$(DEPDIR)/diskless_exec-gunzip.Po"; else rm -f "$(DEPDIR)/diskless_exec-gunzip.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gunzip.c' object='diskless_exec-gunzip.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c - -diskless_exec-gunzip.obj: gunzip.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-gunzip.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-gunzip.Tpo" -c -o diskless_exec-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-gunzip.Tpo" "$(DEPDIR)/diskless_exec-gunzip.Po"; else rm -f "$(DEPDIR)/diskless_exec-gunzip.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gunzip.c' object='diskless_exec-gunzip.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi` - -diskless_exec-hercules.o: hercules.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-hercules.o -MD -MP -MF "$(DEPDIR)/diskless_exec-hercules.Tpo" -c -o diskless_exec-hercules.o `test -f 'hercules.c' || echo '$(srcdir)/'`hercules.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-hercules.Tpo" "$(DEPDIR)/diskless_exec-hercules.Po"; else rm -f "$(DEPDIR)/diskless_exec-hercules.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hercules.c' object='diskless_exec-hercules.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-hercules.o `test -f 'hercules.c' || echo '$(srcdir)/'`hercules.c - -diskless_exec-hercules.obj: hercules.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-hercules.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-hercules.Tpo" -c -o diskless_exec-hercules.obj `if test -f 'hercules.c'; then $(CYGPATH_W) 'hercules.c'; else $(CYGPATH_W) '$(srcdir)/hercules.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-hercules.Tpo" "$(DEPDIR)/diskless_exec-hercules.Po"; else rm -f "$(DEPDIR)/diskless_exec-hercules.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hercules.c' object='diskless_exec-hercules.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-hercules.obj `if test -f 'hercules.c'; then $(CYGPATH_W) 'hercules.c'; else $(CYGPATH_W) '$(srcdir)/hercules.c'; fi` - -diskless_exec-md5.o: md5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-md5.o -MD -MP -MF "$(DEPDIR)/diskless_exec-md5.Tpo" -c -o diskless_exec-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-md5.Tpo" "$(DEPDIR)/diskless_exec-md5.Po"; else rm -f "$(DEPDIR)/diskless_exec-md5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='diskless_exec-md5.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c - -diskless_exec-md5.obj: md5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-md5.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-md5.Tpo" -c -o diskless_exec-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-md5.Tpo" "$(DEPDIR)/diskless_exec-md5.Po"; else rm -f "$(DEPDIR)/diskless_exec-md5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='diskless_exec-md5.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi` - -diskless_exec-serial.o: serial.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-serial.o -MD -MP -MF "$(DEPDIR)/diskless_exec-serial.Tpo" -c -o diskless_exec-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-serial.Tpo" "$(DEPDIR)/diskless_exec-serial.Po"; else rm -f "$(DEPDIR)/diskless_exec-serial.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='diskless_exec-serial.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c - -diskless_exec-serial.obj: serial.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-serial.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-serial.Tpo" -c -o diskless_exec-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-serial.Tpo" "$(DEPDIR)/diskless_exec-serial.Po"; else rm -f "$(DEPDIR)/diskless_exec-serial.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='diskless_exec-serial.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi` - -diskless_exec-smp-imps.o: smp-imps.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-smp-imps.o -MD -MP -MF "$(DEPDIR)/diskless_exec-smp-imps.Tpo" -c -o diskless_exec-smp-imps.o `test -f 'smp-imps.c' || echo '$(srcdir)/'`smp-imps.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-smp-imps.Tpo" "$(DEPDIR)/diskless_exec-smp-imps.Po"; else rm -f "$(DEPDIR)/diskless_exec-smp-imps.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smp-imps.c' object='diskless_exec-smp-imps.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-smp-imps.o `test -f 'smp-imps.c' || echo '$(srcdir)/'`smp-imps.c - -diskless_exec-smp-imps.obj: smp-imps.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-smp-imps.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-smp-imps.Tpo" -c -o diskless_exec-smp-imps.obj `if test -f 'smp-imps.c'; then $(CYGPATH_W) 'smp-imps.c'; else $(CYGPATH_W) '$(srcdir)/smp-imps.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-smp-imps.Tpo" "$(DEPDIR)/diskless_exec-smp-imps.Po"; else rm -f "$(DEPDIR)/diskless_exec-smp-imps.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smp-imps.c' object='diskless_exec-smp-imps.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-smp-imps.obj `if test -f 'smp-imps.c'; then $(CYGPATH_W) 'smp-imps.c'; else $(CYGPATH_W) '$(srcdir)/smp-imps.c'; fi` - -diskless_exec-stage2.o: stage2.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-stage2.o -MD -MP -MF "$(DEPDIR)/diskless_exec-stage2.Tpo" -c -o diskless_exec-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-stage2.Tpo" "$(DEPDIR)/diskless_exec-stage2.Po"; else rm -f "$(DEPDIR)/diskless_exec-stage2.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage2.c' object='diskless_exec-stage2.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c - -diskless_exec-stage2.obj: stage2.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-stage2.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-stage2.Tpo" -c -o diskless_exec-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-stage2.Tpo" "$(DEPDIR)/diskless_exec-stage2.Po"; else rm -f "$(DEPDIR)/diskless_exec-stage2.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage2.c' object='diskless_exec-stage2.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi` - -diskless_exec-terminfo.o: terminfo.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-terminfo.o -MD -MP -MF "$(DEPDIR)/diskless_exec-terminfo.Tpo" -c -o diskless_exec-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-terminfo.Tpo" "$(DEPDIR)/diskless_exec-terminfo.Po"; else rm -f "$(DEPDIR)/diskless_exec-terminfo.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terminfo.c' object='diskless_exec-terminfo.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c - -diskless_exec-terminfo.obj: terminfo.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-terminfo.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-terminfo.Tpo" -c -o diskless_exec-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-terminfo.Tpo" "$(DEPDIR)/diskless_exec-terminfo.Po"; else rm -f "$(DEPDIR)/diskless_exec-terminfo.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terminfo.c' object='diskless_exec-terminfo.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi` - -diskless_exec-tparm.o: tparm.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-tparm.o -MD -MP -MF "$(DEPDIR)/diskless_exec-tparm.Tpo" -c -o diskless_exec-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-tparm.Tpo" "$(DEPDIR)/diskless_exec-tparm.Po"; else rm -f "$(DEPDIR)/diskless_exec-tparm.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tparm.c' object='diskless_exec-tparm.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c - -diskless_exec-tparm.obj: tparm.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-tparm.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-tparm.Tpo" -c -o diskless_exec-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-tparm.Tpo" "$(DEPDIR)/diskless_exec-tparm.Po"; else rm -f "$(DEPDIR)/diskless_exec-tparm.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tparm.c' object='diskless_exec-tparm.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi` - -e2fs_stage1_5_exec-common.o: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo" -c -o e2fs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='e2fs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c - -e2fs_stage1_5_exec-common.obj: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo" -c -o e2fs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='e2fs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` - -e2fs_stage1_5_exec-char_io.o: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo" -c -o e2fs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='e2fs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c - -e2fs_stage1_5_exec-char_io.obj: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo" -c -o e2fs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='e2fs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` - -e2fs_stage1_5_exec-disk_io.o: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo" -c -o e2fs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='e2fs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c - -e2fs_stage1_5_exec-disk_io.obj: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo" -c -o e2fs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='e2fs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` - -e2fs_stage1_5_exec-stage1_5.o: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo" -c -o e2fs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='e2fs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c - -e2fs_stage1_5_exec-stage1_5.obj: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo" -c -o e2fs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='e2fs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` - -e2fs_stage1_5_exec-fsys_ext2fs.o: fsys_ext2fs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-fsys_ext2fs.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo" -c -o e2fs_stage1_5_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='e2fs_stage1_5_exec-fsys_ext2fs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c - -e2fs_stage1_5_exec-fsys_ext2fs.obj: fsys_ext2fs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-fsys_ext2fs.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo" -c -o e2fs_stage1_5_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='e2fs_stage1_5_exec-fsys_ext2fs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi` - -e2fs_stage1_5_exec-bios.o: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo" -c -o e2fs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='e2fs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c - -e2fs_stage1_5_exec-bios.obj: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo" -c -o e2fs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='e2fs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` - -fat_stage1_5_exec-common.o: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-common.Tpo" -c -o fat_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-common.Tpo" "$(DEPDIR)/fat_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='fat_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c - -fat_stage1_5_exec-common.obj: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-common.Tpo" -c -o fat_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-common.Tpo" "$(DEPDIR)/fat_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='fat_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` - -fat_stage1_5_exec-char_io.o: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo" -c -o fat_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/fat_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='fat_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c - -fat_stage1_5_exec-char_io.obj: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo" -c -o fat_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/fat_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='fat_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` - -fat_stage1_5_exec-disk_io.o: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo" -c -o fat_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/fat_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='fat_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c - -fat_stage1_5_exec-disk_io.obj: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo" -c -o fat_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/fat_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='fat_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` - -fat_stage1_5_exec-stage1_5.o: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo" -c -o fat_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='fat_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c - -fat_stage1_5_exec-stage1_5.obj: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo" -c -o fat_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='fat_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` - -fat_stage1_5_exec-fsys_fat.o: fsys_fat.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-fsys_fat.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo" -c -o fat_stage1_5_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo" "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='fat_stage1_5_exec-fsys_fat.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c - -fat_stage1_5_exec-fsys_fat.obj: fsys_fat.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-fsys_fat.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo" -c -o fat_stage1_5_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo" "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='fat_stage1_5_exec-fsys_fat.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi` - -fat_stage1_5_exec-bios.o: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo" -c -o fat_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo" "$(DEPDIR)/fat_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='fat_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c - -fat_stage1_5_exec-bios.obj: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo" -c -o fat_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo" "$(DEPDIR)/fat_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='fat_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` - -ffs_stage1_5_exec-common.o: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo" -c -o ffs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='ffs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c - -ffs_stage1_5_exec-common.obj: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo" -c -o ffs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='ffs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` - -ffs_stage1_5_exec-char_io.o: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo" -c -o ffs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='ffs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c - -ffs_stage1_5_exec-char_io.obj: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo" -c -o ffs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='ffs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` - -ffs_stage1_5_exec-disk_io.o: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo" -c -o ffs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='ffs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c - -ffs_stage1_5_exec-disk_io.obj: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo" -c -o ffs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='ffs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` - -ffs_stage1_5_exec-stage1_5.o: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo" -c -o ffs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='ffs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c - -ffs_stage1_5_exec-stage1_5.obj: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo" -c -o ffs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='ffs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` - -ffs_stage1_5_exec-fsys_ffs.o: fsys_ffs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-fsys_ffs.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo" -c -o ffs_stage1_5_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='ffs_stage1_5_exec-fsys_ffs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c - -ffs_stage1_5_exec-fsys_ffs.obj: fsys_ffs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-fsys_ffs.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo" -c -o ffs_stage1_5_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='ffs_stage1_5_exec-fsys_ffs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi` - -ffs_stage1_5_exec-bios.o: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo" -c -o ffs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='ffs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c - -ffs_stage1_5_exec-bios.obj: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo" -c -o ffs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='ffs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` - -iso9660_stage1_5_exec-common.o: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo" -c -o iso9660_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='iso9660_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c - -iso9660_stage1_5_exec-common.obj: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo" -c -o iso9660_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='iso9660_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` - -iso9660_stage1_5_exec-char_io.o: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo" -c -o iso9660_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='iso9660_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c - -iso9660_stage1_5_exec-char_io.obj: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo" -c -o iso9660_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='iso9660_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` - -iso9660_stage1_5_exec-disk_io.o: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo" -c -o iso9660_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='iso9660_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c - -iso9660_stage1_5_exec-disk_io.obj: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo" -c -o iso9660_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='iso9660_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` - -iso9660_stage1_5_exec-stage1_5.o: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo" -c -o iso9660_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='iso9660_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c - -iso9660_stage1_5_exec-stage1_5.obj: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo" -c -o iso9660_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='iso9660_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` - -iso9660_stage1_5_exec-fsys_iso9660.o: fsys_iso9660.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-fsys_iso9660.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo" -c -o iso9660_stage1_5_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='iso9660_stage1_5_exec-fsys_iso9660.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c - -iso9660_stage1_5_exec-fsys_iso9660.obj: fsys_iso9660.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-fsys_iso9660.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo" -c -o iso9660_stage1_5_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='iso9660_stage1_5_exec-fsys_iso9660.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi` - -iso9660_stage1_5_exec-bios.o: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo" -c -o iso9660_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='iso9660_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c - -iso9660_stage1_5_exec-bios.obj: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo" -c -o iso9660_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='iso9660_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` - -jfs_stage1_5_exec-common.o: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo" -c -o jfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='jfs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c - -jfs_stage1_5_exec-common.obj: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo" -c -o jfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='jfs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` - -jfs_stage1_5_exec-char_io.o: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo" -c -o jfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='jfs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c - -jfs_stage1_5_exec-char_io.obj: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo" -c -o jfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='jfs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` - -jfs_stage1_5_exec-disk_io.o: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo" -c -o jfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='jfs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c - -jfs_stage1_5_exec-disk_io.obj: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo" -c -o jfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='jfs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` - -jfs_stage1_5_exec-stage1_5.o: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo" -c -o jfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='jfs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c - -jfs_stage1_5_exec-stage1_5.obj: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo" -c -o jfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='jfs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` - -jfs_stage1_5_exec-fsys_jfs.o: fsys_jfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-fsys_jfs.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo" -c -o jfs_stage1_5_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='jfs_stage1_5_exec-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c - -jfs_stage1_5_exec-fsys_jfs.obj: fsys_jfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-fsys_jfs.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo" -c -o jfs_stage1_5_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='jfs_stage1_5_exec-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi` - -jfs_stage1_5_exec-bios.o: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo" -c -o jfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='jfs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c - -jfs_stage1_5_exec-bios.obj: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo" -c -o jfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='jfs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` - -minix_stage1_5_exec-common.o: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-common.Tpo" -c -o minix_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-common.Tpo" "$(DEPDIR)/minix_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='minix_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c - -minix_stage1_5_exec-common.obj: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-common.Tpo" -c -o minix_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-common.Tpo" "$(DEPDIR)/minix_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='minix_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` - -minix_stage1_5_exec-char_io.o: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo" -c -o minix_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/minix_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='minix_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c - -minix_stage1_5_exec-char_io.obj: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo" -c -o minix_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/minix_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='minix_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` - -minix_stage1_5_exec-disk_io.o: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo" -c -o minix_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/minix_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='minix_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c - -minix_stage1_5_exec-disk_io.obj: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo" -c -o minix_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/minix_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='minix_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` - -minix_stage1_5_exec-stage1_5.o: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo" -c -o minix_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='minix_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c - -minix_stage1_5_exec-stage1_5.obj: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo" -c -o minix_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='minix_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` - -minix_stage1_5_exec-fsys_minix.o: fsys_minix.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-fsys_minix.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo" -c -o minix_stage1_5_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo" "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='minix_stage1_5_exec-fsys_minix.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c - -minix_stage1_5_exec-fsys_minix.obj: fsys_minix.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-fsys_minix.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo" -c -o minix_stage1_5_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo" "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='minix_stage1_5_exec-fsys_minix.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi` - -minix_stage1_5_exec-bios.o: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo" -c -o minix_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo" "$(DEPDIR)/minix_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='minix_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c - -minix_stage1_5_exec-bios.obj: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo" -c -o minix_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo" "$(DEPDIR)/minix_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='minix_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` - -pre_stage2_exec-bios.o: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-bios.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-bios.Tpo" -c -o pre_stage2_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-bios.Tpo" "$(DEPDIR)/pre_stage2_exec-bios.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='pre_stage2_exec-bios.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c - -pre_stage2_exec-bios.obj: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-bios.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-bios.Tpo" -c -o pre_stage2_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-bios.Tpo" "$(DEPDIR)/pre_stage2_exec-bios.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='pre_stage2_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` - -pre_stage2_exec-boot.o: boot.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-boot.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-boot.Tpo" -c -o pre_stage2_exec-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-boot.Tpo" "$(DEPDIR)/pre_stage2_exec-boot.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-boot.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boot.c' object='pre_stage2_exec-boot.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c - -pre_stage2_exec-boot.obj: boot.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-boot.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-boot.Tpo" -c -o pre_stage2_exec-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-boot.Tpo" "$(DEPDIR)/pre_stage2_exec-boot.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-boot.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boot.c' object='pre_stage2_exec-boot.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi` - -pre_stage2_exec-builtins.o: builtins.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-builtins.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-builtins.Tpo" -c -o pre_stage2_exec-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-builtins.Tpo" "$(DEPDIR)/pre_stage2_exec-builtins.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-builtins.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='builtins.c' object='pre_stage2_exec-builtins.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c - -pre_stage2_exec-builtins.obj: builtins.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-builtins.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-builtins.Tpo" -c -o pre_stage2_exec-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-builtins.Tpo" "$(DEPDIR)/pre_stage2_exec-builtins.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-builtins.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='builtins.c' object='pre_stage2_exec-builtins.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi` - -pre_stage2_exec-char_io.o: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-char_io.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-char_io.Tpo" -c -o pre_stage2_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-char_io.Tpo" "$(DEPDIR)/pre_stage2_exec-char_io.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='pre_stage2_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c - -pre_stage2_exec-char_io.obj: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-char_io.Tpo" -c -o pre_stage2_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-char_io.Tpo" "$(DEPDIR)/pre_stage2_exec-char_io.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='pre_stage2_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` - -pre_stage2_exec-cmdline.o: cmdline.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-cmdline.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo" -c -o pre_stage2_exec-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo" "$(DEPDIR)/pre_stage2_exec-cmdline.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdline.c' object='pre_stage2_exec-cmdline.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c - -pre_stage2_exec-cmdline.obj: cmdline.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-cmdline.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo" -c -o pre_stage2_exec-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo" "$(DEPDIR)/pre_stage2_exec-cmdline.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdline.c' object='pre_stage2_exec-cmdline.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi` - -pre_stage2_exec-common.o: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-common.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-common.Tpo" -c -o pre_stage2_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-common.Tpo" "$(DEPDIR)/pre_stage2_exec-common.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='pre_stage2_exec-common.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c - -pre_stage2_exec-common.obj: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-common.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-common.Tpo" -c -o pre_stage2_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-common.Tpo" "$(DEPDIR)/pre_stage2_exec-common.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='pre_stage2_exec-common.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` - -pre_stage2_exec-console.o: console.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-console.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-console.Tpo" -c -o pre_stage2_exec-console.o `test -f 'console.c' || echo '$(srcdir)/'`console.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-console.Tpo" "$(DEPDIR)/pre_stage2_exec-console.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-console.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='console.c' object='pre_stage2_exec-console.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-console.o `test -f 'console.c' || echo '$(srcdir)/'`console.c - -pre_stage2_exec-console.obj: console.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-console.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-console.Tpo" -c -o pre_stage2_exec-console.obj `if test -f 'console.c'; then $(CYGPATH_W) 'console.c'; else $(CYGPATH_W) '$(srcdir)/console.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-console.Tpo" "$(DEPDIR)/pre_stage2_exec-console.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-console.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='console.c' object='pre_stage2_exec-console.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-console.obj `if test -f 'console.c'; then $(CYGPATH_W) 'console.c'; else $(CYGPATH_W) '$(srcdir)/console.c'; fi` - -pre_stage2_exec-disk_io.o: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo" -c -o pre_stage2_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo" "$(DEPDIR)/pre_stage2_exec-disk_io.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='pre_stage2_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c - -pre_stage2_exec-disk_io.obj: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo" -c -o pre_stage2_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo" "$(DEPDIR)/pre_stage2_exec-disk_io.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='pre_stage2_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` - -pre_stage2_exec-fsys_ext2fs.o: fsys_ext2fs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ext2fs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo" -c -o pre_stage2_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='pre_stage2_exec-fsys_ext2fs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c - -pre_stage2_exec-fsys_ext2fs.obj: fsys_ext2fs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ext2fs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo" -c -o pre_stage2_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='pre_stage2_exec-fsys_ext2fs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi` - -pre_stage2_exec-fsys_fat.o: fsys_fat.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_fat.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo" -c -o pre_stage2_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='pre_stage2_exec-fsys_fat.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c - -pre_stage2_exec-fsys_fat.obj: fsys_fat.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_fat.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo" -c -o pre_stage2_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='pre_stage2_exec-fsys_fat.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi` - -pre_stage2_exec-fsys_ffs.o: fsys_ffs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ffs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo" -c -o pre_stage2_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='pre_stage2_exec-fsys_ffs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c - -pre_stage2_exec-fsys_ffs.obj: fsys_ffs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ffs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo" -c -o pre_stage2_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='pre_stage2_exec-fsys_ffs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi` - -pre_stage2_exec-fsys_iso9660.o: fsys_iso9660.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_iso9660.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo" -c -o pre_stage2_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='pre_stage2_exec-fsys_iso9660.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c - -pre_stage2_exec-fsys_iso9660.obj: fsys_iso9660.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_iso9660.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo" -c -o pre_stage2_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='pre_stage2_exec-fsys_iso9660.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi` - -pre_stage2_exec-fsys_jfs.o: fsys_jfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_jfs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo" -c -o pre_stage2_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='pre_stage2_exec-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c - -pre_stage2_exec-fsys_jfs.obj: fsys_jfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_jfs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo" -c -o pre_stage2_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='pre_stage2_exec-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi` - -pre_stage2_exec-fsys_minix.o: fsys_minix.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_minix.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo" -c -o pre_stage2_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='pre_stage2_exec-fsys_minix.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c - -pre_stage2_exec-fsys_minix.obj: fsys_minix.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_minix.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo" -c -o pre_stage2_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='pre_stage2_exec-fsys_minix.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi` - -pre_stage2_exec-fsys_reiserfs.o: fsys_reiserfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_reiserfs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo" -c -o pre_stage2_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='pre_stage2_exec-fsys_reiserfs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c - -pre_stage2_exec-fsys_reiserfs.obj: fsys_reiserfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_reiserfs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo" -c -o pre_stage2_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='pre_stage2_exec-fsys_reiserfs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi` - -pre_stage2_exec-fsys_ufs2.o: fsys_ufs2.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ufs2.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo" -c -o pre_stage2_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='pre_stage2_exec-fsys_ufs2.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c - -pre_stage2_exec-fsys_ufs2.obj: fsys_ufs2.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ufs2.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo" -c -o pre_stage2_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='pre_stage2_exec-fsys_ufs2.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi` - -pre_stage2_exec-fsys_vstafs.o: fsys_vstafs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_vstafs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo" -c -o pre_stage2_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='pre_stage2_exec-fsys_vstafs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c - -pre_stage2_exec-fsys_vstafs.obj: fsys_vstafs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_vstafs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo" -c -o pre_stage2_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='pre_stage2_exec-fsys_vstafs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi` - -pre_stage2_exec-fsys_xfs.o: fsys_xfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_xfs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo" -c -o pre_stage2_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='pre_stage2_exec-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c - -pre_stage2_exec-fsys_xfs.obj: fsys_xfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_xfs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo" -c -o pre_stage2_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='pre_stage2_exec-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi` - -pre_stage2_exec-gunzip.o: gunzip.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-gunzip.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo" -c -o pre_stage2_exec-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo" "$(DEPDIR)/pre_stage2_exec-gunzip.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gunzip.c' object='pre_stage2_exec-gunzip.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c - -pre_stage2_exec-gunzip.obj: gunzip.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-gunzip.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo" -c -o pre_stage2_exec-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo" "$(DEPDIR)/pre_stage2_exec-gunzip.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gunzip.c' object='pre_stage2_exec-gunzip.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi` - -pre_stage2_exec-hercules.o: hercules.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-hercules.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-hercules.Tpo" -c -o pre_stage2_exec-hercules.o `test -f 'hercules.c' || echo '$(srcdir)/'`hercules.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-hercules.Tpo" "$(DEPDIR)/pre_stage2_exec-hercules.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-hercules.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hercules.c' object='pre_stage2_exec-hercules.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-hercules.o `test -f 'hercules.c' || echo '$(srcdir)/'`hercules.c - -pre_stage2_exec-hercules.obj: hercules.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-hercules.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-hercules.Tpo" -c -o pre_stage2_exec-hercules.obj `if test -f 'hercules.c'; then $(CYGPATH_W) 'hercules.c'; else $(CYGPATH_W) '$(srcdir)/hercules.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-hercules.Tpo" "$(DEPDIR)/pre_stage2_exec-hercules.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-hercules.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hercules.c' object='pre_stage2_exec-hercules.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-hercules.obj `if test -f 'hercules.c'; then $(CYGPATH_W) 'hercules.c'; else $(CYGPATH_W) '$(srcdir)/hercules.c'; fi` - -pre_stage2_exec-md5.o: md5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-md5.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-md5.Tpo" -c -o pre_stage2_exec-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-md5.Tpo" "$(DEPDIR)/pre_stage2_exec-md5.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-md5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='pre_stage2_exec-md5.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c - -pre_stage2_exec-md5.obj: md5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-md5.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-md5.Tpo" -c -o pre_stage2_exec-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-md5.Tpo" "$(DEPDIR)/pre_stage2_exec-md5.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-md5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='pre_stage2_exec-md5.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi` - -pre_stage2_exec-serial.o: serial.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-serial.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-serial.Tpo" -c -o pre_stage2_exec-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-serial.Tpo" "$(DEPDIR)/pre_stage2_exec-serial.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-serial.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='pre_stage2_exec-serial.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c - -pre_stage2_exec-serial.obj: serial.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-serial.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-serial.Tpo" -c -o pre_stage2_exec-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-serial.Tpo" "$(DEPDIR)/pre_stage2_exec-serial.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-serial.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='pre_stage2_exec-serial.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi` - -pre_stage2_exec-smp-imps.o: smp-imps.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-smp-imps.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo" -c -o pre_stage2_exec-smp-imps.o `test -f 'smp-imps.c' || echo '$(srcdir)/'`smp-imps.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo" "$(DEPDIR)/pre_stage2_exec-smp-imps.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smp-imps.c' object='pre_stage2_exec-smp-imps.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-smp-imps.o `test -f 'smp-imps.c' || echo '$(srcdir)/'`smp-imps.c - -pre_stage2_exec-smp-imps.obj: smp-imps.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-smp-imps.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo" -c -o pre_stage2_exec-smp-imps.obj `if test -f 'smp-imps.c'; then $(CYGPATH_W) 'smp-imps.c'; else $(CYGPATH_W) '$(srcdir)/smp-imps.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo" "$(DEPDIR)/pre_stage2_exec-smp-imps.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smp-imps.c' object='pre_stage2_exec-smp-imps.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-smp-imps.obj `if test -f 'smp-imps.c'; then $(CYGPATH_W) 'smp-imps.c'; else $(CYGPATH_W) '$(srcdir)/smp-imps.c'; fi` - -pre_stage2_exec-stage2.o: stage2.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-stage2.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-stage2.Tpo" -c -o pre_stage2_exec-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-stage2.Tpo" "$(DEPDIR)/pre_stage2_exec-stage2.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-stage2.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage2.c' object='pre_stage2_exec-stage2.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c - -pre_stage2_exec-stage2.obj: stage2.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-stage2.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-stage2.Tpo" -c -o pre_stage2_exec-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-stage2.Tpo" "$(DEPDIR)/pre_stage2_exec-stage2.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-stage2.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage2.c' object='pre_stage2_exec-stage2.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi` - -pre_stage2_exec-terminfo.o: terminfo.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-terminfo.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo" -c -o pre_stage2_exec-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo" "$(DEPDIR)/pre_stage2_exec-terminfo.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terminfo.c' object='pre_stage2_exec-terminfo.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c - -pre_stage2_exec-terminfo.obj: terminfo.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-terminfo.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo" -c -o pre_stage2_exec-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo" "$(DEPDIR)/pre_stage2_exec-terminfo.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terminfo.c' object='pre_stage2_exec-terminfo.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi` - -pre_stage2_exec-tparm.o: tparm.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-tparm.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-tparm.Tpo" -c -o pre_stage2_exec-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-tparm.Tpo" "$(DEPDIR)/pre_stage2_exec-tparm.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-tparm.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tparm.c' object='pre_stage2_exec-tparm.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c - -pre_stage2_exec-tparm.obj: tparm.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-tparm.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-tparm.Tpo" -c -o pre_stage2_exec-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-tparm.Tpo" "$(DEPDIR)/pre_stage2_exec-tparm.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-tparm.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tparm.c' object='pre_stage2_exec-tparm.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi` - -reiserfs_stage1_5_exec-common.o: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo" -c -o reiserfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='reiserfs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c - -reiserfs_stage1_5_exec-common.obj: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo" -c -o reiserfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='reiserfs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` - -reiserfs_stage1_5_exec-char_io.o: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo" -c -o reiserfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='reiserfs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c - -reiserfs_stage1_5_exec-char_io.obj: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo" -c -o reiserfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='reiserfs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` - -reiserfs_stage1_5_exec-disk_io.o: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo" -c -o reiserfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='reiserfs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c - -reiserfs_stage1_5_exec-disk_io.obj: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo" -c -o reiserfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='reiserfs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` - -reiserfs_stage1_5_exec-stage1_5.o: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo" -c -o reiserfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='reiserfs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c - -reiserfs_stage1_5_exec-stage1_5.obj: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo" -c -o reiserfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='reiserfs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` - -reiserfs_stage1_5_exec-fsys_reiserfs.o: fsys_reiserfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-fsys_reiserfs.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo" -c -o reiserfs_stage1_5_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='reiserfs_stage1_5_exec-fsys_reiserfs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c - -reiserfs_stage1_5_exec-fsys_reiserfs.obj: fsys_reiserfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-fsys_reiserfs.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo" -c -o reiserfs_stage1_5_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='reiserfs_stage1_5_exec-fsys_reiserfs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi` - -reiserfs_stage1_5_exec-bios.o: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo" -c -o reiserfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='reiserfs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c - -reiserfs_stage1_5_exec-bios.obj: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo" -c -o reiserfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='reiserfs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` - -ufs2_stage1_5_exec-common.o: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo" -c -o ufs2_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='ufs2_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c - -ufs2_stage1_5_exec-common.obj: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo" -c -o ufs2_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='ufs2_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` - -ufs2_stage1_5_exec-char_io.o: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo" -c -o ufs2_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='ufs2_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c - -ufs2_stage1_5_exec-char_io.obj: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo" -c -o ufs2_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='ufs2_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` - -ufs2_stage1_5_exec-disk_io.o: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo" -c -o ufs2_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='ufs2_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c - -ufs2_stage1_5_exec-disk_io.obj: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo" -c -o ufs2_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='ufs2_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` - -ufs2_stage1_5_exec-stage1_5.o: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo" -c -o ufs2_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='ufs2_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c - -ufs2_stage1_5_exec-stage1_5.obj: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo" -c -o ufs2_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='ufs2_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` - -ufs2_stage1_5_exec-fsys_ufs2.o: fsys_ufs2.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-fsys_ufs2.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo" -c -o ufs2_stage1_5_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='ufs2_stage1_5_exec-fsys_ufs2.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c - -ufs2_stage1_5_exec-fsys_ufs2.obj: fsys_ufs2.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-fsys_ufs2.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo" -c -o ufs2_stage1_5_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='ufs2_stage1_5_exec-fsys_ufs2.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi` - -ufs2_stage1_5_exec-bios.o: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo" -c -o ufs2_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='ufs2_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c - -ufs2_stage1_5_exec-bios.obj: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo" -c -o ufs2_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='ufs2_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` - -vstafs_stage1_5_exec-common.o: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo" -c -o vstafs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='vstafs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c - -vstafs_stage1_5_exec-common.obj: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo" -c -o vstafs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='vstafs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` - -vstafs_stage1_5_exec-char_io.o: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo" -c -o vstafs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='vstafs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c - -vstafs_stage1_5_exec-char_io.obj: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo" -c -o vstafs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='vstafs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` - -vstafs_stage1_5_exec-disk_io.o: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo" -c -o vstafs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='vstafs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c - -vstafs_stage1_5_exec-disk_io.obj: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo" -c -o vstafs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='vstafs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` - -vstafs_stage1_5_exec-stage1_5.o: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo" -c -o vstafs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='vstafs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c - -vstafs_stage1_5_exec-stage1_5.obj: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo" -c -o vstafs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='vstafs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` - -vstafs_stage1_5_exec-fsys_vstafs.o: fsys_vstafs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-fsys_vstafs.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo" -c -o vstafs_stage1_5_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='vstafs_stage1_5_exec-fsys_vstafs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c - -vstafs_stage1_5_exec-fsys_vstafs.obj: fsys_vstafs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-fsys_vstafs.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo" -c -o vstafs_stage1_5_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='vstafs_stage1_5_exec-fsys_vstafs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi` - -vstafs_stage1_5_exec-bios.o: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo" -c -o vstafs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='vstafs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c - -vstafs_stage1_5_exec-bios.obj: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo" -c -o vstafs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='vstafs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` - -xfs_stage1_5_exec-common.o: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo" -c -o xfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='xfs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c - -xfs_stage1_5_exec-common.obj: common.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo" -c -o xfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='xfs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` - -xfs_stage1_5_exec-char_io.o: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo" -c -o xfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='xfs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c - -xfs_stage1_5_exec-char_io.obj: char_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo" -c -o xfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='xfs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` - -xfs_stage1_5_exec-disk_io.o: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo" -c -o xfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='xfs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c - -xfs_stage1_5_exec-disk_io.obj: disk_io.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo" -c -o xfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='xfs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` - -xfs_stage1_5_exec-stage1_5.o: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo" -c -o xfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='xfs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c - -xfs_stage1_5_exec-stage1_5.obj: stage1_5.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo" -c -o xfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='xfs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` - -xfs_stage1_5_exec-fsys_xfs.o: fsys_xfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-fsys_xfs.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo" -c -o xfs_stage1_5_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='xfs_stage1_5_exec-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c - -xfs_stage1_5_exec-fsys_xfs.obj: fsys_xfs.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-fsys_xfs.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo" -c -o xfs_stage1_5_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='xfs_stage1_5_exec-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi` - -xfs_stage1_5_exec-bios.o: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo" -c -o xfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='xfs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c - -xfs_stage1_5_exec-bios.obj: bios.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo" -c -o xfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='xfs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` -uninstall-info-am: -install-pkglibDATA: $(pkglib_DATA) - @$(NORMAL_INSTALL) - test -z "$(pkglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkglibdir)" - @list='$(pkglib_DATA)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(pkglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkglibdir)/$$f'"; \ - $(pkglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkglibdir)/$$f"; \ - done - -uninstall-pkglibDATA: - @$(NORMAL_UNINSTALL) - @list='$(pkglib_DATA)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ - rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -check-TESTS: $(TESTS) - @failed=0; all=0; xfail=0; xpass=0; skip=0; \ - srcdir=$(srcdir); export srcdir; \ - list='$(TESTS)'; \ - if test -n "$$list"; then \ - for tst in $$list; do \ - if test -f ./$$tst; then dir=./; \ - elif test -f $$tst; then dir=; \ - else dir="$(srcdir)/"; fi; \ - if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ - xpass=`expr $$xpass + 1`; \ - failed=`expr $$failed + 1`; \ - echo "XPASS: $$tst"; \ - ;; \ - *) \ - echo "PASS: $$tst"; \ - ;; \ - esac; \ - elif test $$? -ne 77; then \ - all=`expr $$all + 1`; \ - case " $(XFAIL_TESTS) " in \ - *" $$tst "*) \ - xfail=`expr $$xfail + 1`; \ - echo "XFAIL: $$tst"; \ - ;; \ - *) \ - failed=`expr $$failed + 1`; \ - echo "FAIL: $$tst"; \ - ;; \ - esac; \ - else \ - skip=`expr $$skip + 1`; \ - echo "SKIP: $$tst"; \ - fi; \ - done; \ - if test "$$failed" -eq 0; then \ - if test "$$xfail" -eq 0; then \ - banner="All $$all tests passed"; \ - else \ - banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ - fi; \ - else \ - if test "$$xpass" -eq 0; then \ - banner="$$failed of $$all tests failed"; \ - else \ - banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ - fi; \ - fi; \ - dashes="$$banner"; \ - skipped=""; \ - if test "$$skip" -ne 0; then \ - skipped="($$skip tests were not run)"; \ - test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$skipped"; \ - fi; \ - report=""; \ - if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ - report="Please report to $(PACKAGE_BUGREPORT)"; \ - test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ - dashes="$$report"; \ - fi; \ - dashes=`echo "$$dashes" | sed s/./=/g`; \ - echo "$$dashes"; \ - echo "$$banner"; \ - test -z "$$skipped" || echo "$$skipped"; \ - test -z "$$report" || echo "$$report"; \ - echo "$$dashes"; \ - test "$$failed" -eq 0; \ - else :; fi - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) check-TESTS -check: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) check-am -all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(SCRIPTS) $(DATA) \ - $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(pkglibdir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ - done -install: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) - -clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." - -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -clean: clean-am - -clean-am: clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: install-pkglibDATA - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am uninstall-pkglibDATA - -.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ - clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \ - distclean distclean-compile distclean-generic distclean-tags \ - distdir dvi dvi-am html html-am info info-am install \ - install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ - install-pkglibDATA install-strip installcheck installcheck-am \ - installdirs maintainer-clean maintainer-clean-generic \ - mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ - ps ps-am tags uninstall uninstall-am uninstall-info-am \ - uninstall-pkglibDATA - - -stage2_size.h: pre_stage2 - -rm -f stage2_size.h - set dummy `ls -l pre_stage2`; \ - echo "#define STAGE2_SIZE $$6" > stage2_size.h - -# XXX: automake doesn't provide a way to specify dependencies for object -# files explicitly, so we must write this by a general Makefile scheme. -# If automake change the naming scheme for per-executable objects, this -# will be broken. -start_exec-start.$(OBJEXT): stage2_size.h - -stage2: pre_stage2 start - -rm -f stage2 - cat start pre_stage2 > stage2 - -start_eltorito_exec-start.$(OBJEXT): stage2_size.h - -stage2_eltorito: pre_stage2 start_eltorito - -rm -f stage2_eltorito - cat start_eltorito pre_stage2 > stage2_eltorito - -diskless_size.h: diskless - -rm -f $@ - set dummy `ls -l $^`; \ - echo "#define DISKLESS_SIZE $$6" > $@ - -# XXX: See the comment for start_exec-start.o. -nbloader_exec-nbloader.$(OBJEXT): diskless_size.h - -# For nbgrub target. -nbgrub: nbloader diskless - -rm -f $@ - cat $^ > $@ - -# XXX: See the comment for start_exec-start.o. -pxeloader_exec-pxeloader.$(OBJEXT): diskless_size.h - -# For pxegrub target. -pxegrub: pxeloader diskless - -rm -f $@ - cat $^ > $@ -.exec: - $(OBJCOPY) -O binary $< $@ -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/stage2/apic.h b/stage2/apic.h deleted file mode 100644 index 9241329c7..000000000 --- a/stage2/apic.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * - * - * Author: Erich Boleyn http://www.uruk.org/~erich/ - * - * Header file for Intel Architecture local and I/O APIC definitions. - * - * This file was created from information in the Intel Pentium Pro - * Family Developer's Manual, Volume 3: Operating System Writer's - * Manual, order number 242692-001, which can be ordered from the - * Intel literature center. - */ - -#ifndef _APIC_H -#define _APIC_H - -/* - * APIC Defines. - */ - -#define APIC_BROADCAST_ID 0xFF - -/* - * APIC register definitions - */ - -/* - * Shared defines for I/O and local APIC definitions - */ -/* APIC version register */ -#define APIC_VERSION(x) ((x) & 0xFF) -/* if the APIC version is equal or greater than APIC_VER_NEW, it - is a "new" APIC */ -#define APIC_VER_NEW 0x10 -/* this next one is used in all cases but an old local APIC, which has - 2 entries in it's LVT */ -#define APIC_MAXREDIR(x) (((x) >> 16) & 0xFF) -/* APIC id register */ -#define APIC_OLD_ID(x) ((x) >> 24) -#define APIC_NEW_ID(x) (((x) >> 24) & 0xF) - -#define IOAPIC_REGSEL 0 -#define IOAPIC_RW 0x10 -#define IOAPIC_ID 0 -#define IOAPIC_VER 1 -#define IOAPIC_REDIR 0x10 -#define LAPIC_ID 0x20 -#define LAPIC_VER 0x30 -#define LAPIC_TPR 0x80 -#define LAPIC_APR 0x90 -#define LAPIC_PPR 0xA0 -#define LAPIC_EOI 0xB0 -#define LAPIC_LDR 0xD0 -#define LAPIC_DFR 0xE0 -#define LAPIC_SPIV 0xF0 -#define LAPIC_SPIV_ENABLE_APIC 0x100 -#define LAPIC_ISR 0x100 -#define LAPIC_TMR 0x180 -#define LAPIC_IRR 0x200 -#define LAPIC_ESR 0x280 -#define LAPIC_ICR 0x300 -#define LAPIC_DEST_MASK 0xFFFFFF -#define LAPIC_LVTT 0x320 -#define LAPIC_LVTPC 0x340 -#define LAPIC_LVT0 0x350 -#define LAPIC_LVT1 0x360 -#define LAPIC_LVTE 0x370 -#define LAPIC_TICR 0x380 -#define LAPIC_TCCR 0x390 -#define LAPIC_TDCR 0x3E0 - -#endif /* _APIC_H */ diff --git a/stage2/apm.S b/stage2/apm.S deleted file mode 100644 index abf5e271c..000000000 --- a/stage2/apm.S +++ /dev/null @@ -1,125 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000, 2001 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* This is stolen from arch/i386/boot/setup.S in Linux 2.2.17 */ -/* -! setup.S Copyright (C) 1991, 1992 Linus Torvalds -*/ - -ENTRY(get_apm_info) - pushl %ebp - pushl %ebx - pushl %edi - pushl %esi - - call EXT_C(prot_to_real) - .code16 - - /* APM BIOS installation check */ - movw $0x5300, %ax - xorw %bx, %bx - int $0x15 - /* error -> no APM BIOS */ - jc done_apm_bios - - /* check for "PM" signature */ - cmpw $0x504d, %bx - /* no signature -> no APM BIOS */ - jne done_apm_bios - - /* Is 32 bit supported? */ - andw $0x0002, %cx - /* no ... */ - je done_apm_bios - - /* Disconnect first just in case */ - movw $0x5304, %ax - xorw %bx, %bx - /* ignore return code */ - int $0x15 - - /* 32 bit connect */ - movw $0x5303, %ax - xorl %ebx, %ebx - /* paranoia */ - xorw %cx, %cx - xorw %dx, %dx - xorl %esi, %esi - xorw %di, %di - int $0x15 - /* error */ - jc no_32_apm_bios - - /* BIOS code segment */ - movw %ax, ABS(EXT_C(apm_bios_info)) + 2 - /* BIOS entry point offset */ - movl %ebx, ABS(EXT_C(apm_bios_info)) + 4 - /* BIOS 16 bit code segment */ - movw %cx, ABS(EXT_C(apm_bios_info)) + 8 - /* BIOS data segment */ - movw %dx, ABS(EXT_C(apm_bios_info)) + 10 - /* BIOS code segment length */ - movl %esi, ABS(EXT_C(apm_bios_info)) + 14 - /* BIOS data segment length */ - movw %di, ABS(EXT_C(apm_bios_info)) + 18 - - /* - * Redo the installation check as the 32 bit connect - * modifies the flags returned on some BIOSs - */ - - /* APM BIOS installation check */ - movw $0x5300, %ax - xorw %bx, %bx - /* paranoia */ - xorw %cx, %cx - int $0x15 - /* error -> should not happen, tidy up */ - jc done_apm_bios - - /* check for "PM" signature */ - cmpw $0x504d, %bx - /* no signature -> should not happen, tidy up */ - jne done_apm_bios - - /* record the APM BIOS version */ - movw %ax, ABS(EXT_C(apm_bios_info)) - /* and flags */ - movw %cx, ABS(EXT_C(apm_bios_info)) + 12 - jmp done_apm_bios - -no_32_apm_bios: - /* remove 32 bit support bit */ - andw $0xfffd, ABS(EXT_C(apm_bios_info)) + 12 - -done_apm_bios: - /* Some paranoia here: Always Disconnect from APM */ - movw $0x5304, %ax - xorw %bx, %bx - /* ignore return code */ - int $0x15 - - DATA32 call EXT_C(real_to_prot) - .code32 - - popl %esi - popl %edi - popl %ebx - popl %ebp - ret diff --git a/stage2/asm.S b/stage2/asm.S deleted file mode 100644 index 34b6e7d05..000000000 --- a/stage2/asm.S +++ /dev/null @@ -1,2367 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2002,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - - -/* - * Note: These functions defined in this file may be called from C. - * Be careful of that you must not modify some registers. Quote - * from gcc-2.95.2/gcc/config/i386/i386.h: - - 1 for registers not available across function calls. - These must include the FIXED_REGISTERS and also any - registers that can be used without being saved. - The latter must include the registers where values are returned - and the register where structure-value addresses are passed. - Aside from that, you can include as many other registers as you like. - - ax,dx,cx,bx,si,di,bp,sp,st,st1,st2,st3,st4,st5,st6,st7,arg -{ 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } - */ - -#define ASM_FILE - -#include "shared.h" - -#ifdef STAGE1_5 -# define ABS(x) ((x) - EXT_C(main) + 0x2200) -#else -# define ABS(x) ((x) - EXT_C(main) + 0x8200) -#endif - - .file "asm.S" - - .text - - /* Tell GAS to generate 16-bit instructions so that this code works - in real mode. */ - .code16 - -#ifndef STAGE1_5 - /* - * In stage2, do not link start.S with the rest of the source - * files directly, so define the start symbols here just to - * force ld quiet. These are not referred anyway. - */ - .globl start, _start -start: -_start: -#endif /* ! STAGE1_5 */ - -ENTRY(main) - /* - * Guarantee that "main" is loaded at 0x0:0x8200 in stage2 and - * at 0x0:0x2200 in stage1.5. - */ - ljmp $0, $ABS(codestart) - - /* - * Compatibility version number - * - * These MUST be at byte offset 6 and 7 of the executable - * DO NOT MOVE !!! - */ - . = EXT_C(main) + 0x6 - .byte COMPAT_VERSION_MAJOR, COMPAT_VERSION_MINOR - - /* - * This is a special data area 8 bytes from the beginning. - */ - - . = EXT_C(main) + 0x8 - -VARIABLE(install_partition) - .long 0xFFFFFF -/* This variable is here only because of a historical reason. */ -VARIABLE(saved_entryno) - .long 0 -VARIABLE(stage2_id) - .byte STAGE2_ID -VARIABLE(force_lba) - .byte 0 -VARIABLE(version_string) - .string VERSION -VARIABLE(config_file) -#ifndef STAGE1_5 - .string "/boot/grub/menu.lst" -#else /* STAGE1_5 */ - .long 0xffffffff - .string "/boot/grub/stage2" -#endif /* STAGE1_5 */ - - /* - * Leave some breathing room for the config file name. - */ - - . = EXT_C(main) + 0x70 - -/* the real mode code continues... */ -codestart: - cli /* we're not safe here! */ - - /* set up %ds, %ss, and %es */ - xorw %ax, %ax - movw %ax, %ds - movw %ax, %ss - movw %ax, %es - -#ifndef SUPPORT_DISKLESS - /* - * Save the sector number of the second sector (i.e. this sector) - * in INSTALL_SECOND_SECTOR. See also "stage2/start.S". - */ - ADDR32 movl %ebp, EXT_C(install_second_sector) -#endif - - /* set up the real mode/BIOS stack */ - movl $STACKOFF, %ebp - movl %ebp, %esp - - sti /* we're safe again */ - -#ifndef SUPPORT_DISKLESS - /* save boot drive reference */ - ADDR32 movb %dl, EXT_C(boot_drive) - - /* reset disk system (%ah = 0) */ - int $0x13 -#endif - - /* transition to protected mode */ - DATA32 call EXT_C(real_to_prot) - - /* The ".code32" directive takes GAS out of 16-bit mode. */ - .code32 - - /* clean out the bss */ - - /* set %edi to the bss starting address */ -#if defined(HAVE_USCORE_USCORE_BSS_START_SYMBOL) - movl $__bss_start, %edi -#elif defined(HAVE_USCORE_EDATA_SYMBOL) - movl $_edata, %edi -#elif defined(HAVE_EDATA_SYMBOL) - movl $edata, %edi -#endif - - /* set %ecx to the bss end */ -#if defined(HAVE_END_SYMBOL) - movl $end, %ecx -#elif defined(HAVE_USCORE_END_SYMBOL) - movl $_end, %ecx -#endif - - /* compute the bss length */ - subl %edi, %ecx - - /* zero %al */ - xorb %al, %al - - /* set the direction */ - cld - - /* clean out */ - rep - stosb - - /* - * Call the start of main body of C code, which does some - * of it's own initialization before transferring to "cmain". - */ - call EXT_C(init_bios_info) - - -/* - * This call is special... it never returns... in fact it should simply - * hang at this point! - */ - -ENTRY(stop) - call EXT_C(prot_to_real) - - /* - * This next part is sort of evil. It takes advantage of the - * byte ordering on the x86 to work in either 16-bit or 32-bit - * mode, so think about it before changing it. - */ - -ENTRY(hard_stop) - hlt - jmp EXT_C(hard_stop) - -#ifndef STAGE1_5 -/* - * stop_floppy() - * - * Stops the floppy drive from spinning, so that other software is - * jumped to with a known state. - */ -ENTRY(stop_floppy) - pusha - call EXT_C(prot_to_real) - .code16 - xorb %dl, %dl - int $0x13 - DATA32 call EXT_C(real_to_prot) - .code32 - popa - ret - -/* - * grub_reboot() - * - * Reboot the system. At the moment, rely on BIOS. - */ -ENTRY(grub_reboot) - call EXT_C(prot_to_real) - .code16 - /* cold boot */ - movw $0x0472, %di - movw %ax, (%di) - ljmp $0xFFFF, $0x0000 - .code32 - -/* - * grub_halt(int no_apm) - * - * Halt the system, using APM if possible. If NO_APM is true, don't use - * APM even if it is available. - */ -ENTRY(grub_halt) - /* get the argument */ - movl 4(%esp), %eax - - /* see if zero */ - testl %eax, %eax - jnz EXT_C(stop) - - call EXT_C(prot_to_real) - .code16 - - /* detect APM */ - movw $0x5300, %ax - xorw %bx, %bx - int $0x15 - jc EXT_C(hard_stop) - /* don't check %bx for buggy BIOSes... */ - - /* disconnect APM first */ - movw $0x5304, %ax - xorw %bx, %bx - int $0x15 - - /* connect APM */ - movw $0x5301, %ax - xorw %bx, %bx - int $0x15 - jc EXT_C(hard_stop) - - /* set APM protocol level - 1.1 or bust. (this covers APM 1.2 also) */ - movw $0x530E, %ax - xorw %bx, %bx - movw $0x0101, %cx - int $0x15 - jc EXT_C(hard_stop) - - /* set the power state to off */ - movw $0x5307, %ax - movw $1, %bx - movw $3, %cx - int $0x15 - - /* shouldn't reach here */ - jmp EXT_C(hard_stop) - .code32 - -/* - * track_int13(int drive) - * - * Track the int13 handler to probe I/O address space. - */ -ENTRY(track_int13) - pushl %ebp - movl %esp, %ebp - - pushl %ebx - pushl %edi - - /* copy the original int13 handler segment:offset */ - movl $0x4c, %edi - movl (%edi), %eax - movl %eax, track_int13_addr - - /* replace the int1 handler */ - movl $0x4, %edi - pushl (%edi) - movl $ABS(int1_handler), %eax - movl %eax, (%edi) - - /* read the MBR to call int13 successfully */ - movb 8(%ebp), %dl - - call EXT_C(prot_to_real) - .code16 - - movw $SCRATCHSEG, %ax - movw %ax, %es - xorw %bx, %bx - movw $1, %cx - xorb %dh, %dh - - /* save FLAGS on the stack to emulate int13 */ - pushfw - - /* set the TF flag */ - /* FIXME: this can be simplified not to use AX */ - pushfw - popw %ax - orw $0x100, %ax - pushw %ax - popfw - - movw $0x0201, %ax - - .byte 0x9a /* lcall */ -track_int13_addr: - .word 0 /* offset */ - .word 0 /* segment */ - - /* TF is cleared here automatically */ - - DATA32 call EXT_C(real_to_prot) - .code32 - - /* restore the int1 handler */ - movl $0x4, %edi - popl (%edi) - - popl %edi - popl %ebx - popl %ebp - - ret - - -/* - * Check if the next instruction is I/O, and if this is true, add the - * port into the io map. - * - * Note: Probably this will make the execution of int13 very slow. - * - * Note2: In this implementation, all we can know is I/O-mapped I/O. It - * is impossible to detect memory-mapped I/O. - */ -int1_handler: - .code16 - - pushw %bp - movw %sp, %bp - pushw %ds - pushw %ax - pushw %si - pushw %dx - - /* IP */ - movw 2(%bp), %si - /* CS */ - movw 4(%bp), %ax - movw %ax, %ds - - /* examine the next instruction */ -1: lodsb (%si), %al - /* skip this code if it is a prefix */ - cmpb $0x2E, %al - je 1b - cmpb $0x36, %al - je 1b - cmpb $0x3E, %al - je 1b - cmpb $0x26, %al - je 1b - cmpb $0x64, %al - jl 2f - cmpb $0x67, %al - jle 1b -2: cmpb $0xF0, %al - jl 3f - cmpb $0xF3, %al - jle 1b - -3: /* check if this code is out* or in* */ - - /* ins? or outs? */ - cmpb $0x6C, %al - jl 4f - cmpb $0x6F, %al - jle 5f - -4: /* in? or out? (register operand version) */ - cmpb $0xEC, %al - jl 6f - cmpb $0xEF, %al - jle 5f - -6: /* in? or out? (immediate operand version) */ - cmpb $0xE4, %al - jl 8f - cmpb $0xE7, %al - jg 8f - -7: /* immediate has a port */ - lodsb (%si), %al - movzbw %al, %dx - -5: /* %dx has a port */ - - /* set %ds to zero */ - xorw %ax, %ax - movw %ax, %ds - - /* set %si to the io map */ - movw $ABS(EXT_C(io_map)), %si - - -9: /* check if the io map already has the port */ - lodsw (%si), %ax - /* check if this is the end */ - testw %ax, %ax - jz 1f - /* check if this matches the port */ - cmpw %ax, %dx - jne 9b - /* if so, leave from this handler */ - jmp 8f - -1: /* check for the buffer overrun */ - cmpw $(ABS(EXT_C(io_map)) + (IO_MAP_SIZE + 1) * 2), %si - je 8f - /* add the port into the io map */ - movw %dx, -2(%si) - -8: /* restore registers */ - popw %dx - popw %si - popw %ax - popw %ds - popw %bp - - iret - - .code32 - -ENTRY(io_map) - .space (IO_MAP_SIZE + 1) * 2 - - -/* - * set_int15_handler(void) - * - * Set up int15_handler. - */ -ENTRY(set_int15_handler) - pushl %edi - - /* save the original int15 handler */ - movl $0x54, %edi - movw (%edi), %ax - movw %ax, ABS(int15_offset) - movw 2(%edi), %ax - movw %ax, ABS(int15_segment) - - /* save the new int15 handler */ - movw $ABS(int15_handler), %ax - movw %ax, (%edi) - xorw %ax, %ax - movw %ax, 2(%edi) - - popl %edi - ret - - -/* - * unset_int15_handler(void) - * - * Restore the original int15 handler - */ -ENTRY(unset_int15_handler) - pushl %edi - - /* check if int15_handler is set */ - movl $0x54, %edi - movw $ABS(int15_handler), %ax - cmpw %ax, (%edi) - jne 1f - xorw %ax, %ax - cmpw %ax, 2(%edi) - jne 1f - - /* restore the original */ - movw ABS(int15_offset), %ax - movw %ax, (%edi) - movw ABS(int15_segment), %ax - movw %ax, 2(%edi) - -1: - popl %edi - ret - - -/* - * Translate a key code to another. - * - * Note: This implementation cannot handle more than one length - * scancodes (such as Right Ctrl). - */ - .code16 -int15_handler: - /* if non-carrier, ignore it */ - jnc 1f - /* check if AH=4F */ - cmpb $0x4F, %ah - jne 1f - - /* E0 and E1 are special */ - cmpb $0xE1, %al - je 4f - cmpb $0xE0, %al - /* this flag is actually the machine code (je or jmp) */ -int15_skip_flag: - je 4f - - pushw %bp - movw %sp, %bp - - pushw %bx - pushw %dx - pushw %ds - pushw %si - - /* save bits 0-6 of %al in %dl */ - movw %ax, %dx - andb $0x7f, %dl - /* save the highest bit in %bl */ - movb %al, %bl - xorb %dl, %bl - /* set %ds to 0 */ - xorw %ax, %ax - movw %ax, %ds - /* set %si to the key map */ - movw $ABS(EXT_C(bios_key_map)), %si - - /* find the key code from the key map */ -2: - lodsw - /* check if this is the end */ - testw %ax, %ax - jz 3f - /* check if this matches the key code */ - cmpb %al, %dl - jne 2b - /* if so, perform the mapping */ - movb %ah, %dl -3: - /* restore %ax */ - movw %dx, %ax - orb %bl, %al - /* make sure that CF is set */ - orw $1, 6(%bp) - /* restore other registers */ - popw %si - popw %ds - popw %dx - popw %bx - popw %bp - iret - -4: - /* tricky: jmp (0x74) <-> je (0xeb) */ - xorb $(0x74 ^ 0xeb), ABS(int15_skip_flag) -1: - /* just cascade to the original */ - /* ljmp */ - .byte 0xea -int15_offset: .word 0 -int15_segment: .word 0 - - .code32 - - .align 4 -ENTRY(bios_key_map) - .space (KEY_MAP_SIZE + 1) * 2 - - -/* - * set_int13_handler(map) - * - * Copy MAP to the drive map and set up int13_handler. - */ -ENTRY(set_int13_handler) - pushl %ebp - movl %esp, %ebp - - pushl %edi - pushl %esi - - /* copy MAP to the drive map */ - movl $(DRIVE_MAP_SIZE * 2), %ecx - movl $ABS(drive_map), %edi - movl 8(%ebp), %esi - cld - rep - movsb - - /* save the original int13 handler */ - movl $0x4c, %edi - movw (%edi), %ax - movw %ax, ABS(int13_offset) - movw 2(%edi), %ax - movw %ax, ABS(int13_segment) - - /* decrease the lower memory size and set it to the BIOS memory */ - movl $0x413, %edi - decw (%edi) - xorl %eax, %eax - movw (%edi), %ax - - /* compute the segment */ - shll $6, %eax - - /* save the new int13 handler */ - movl $0x4c, %edi - movw %ax, 2(%edi) - xorw %cx, %cx - movw %cx, (%edi) - - /* copy int13_handler to the reserved area */ - shll $4, %eax - movl %eax, %edi - movl $ABS(int13_handler), %esi - movl $(int13_handler_end - int13_handler), %ecx - rep - movsb - - popl %esi - popl %edi - popl %ebp - ret - - -/* - * Map a drive to another drive. - */ - - .code16 - -int13_handler: - pushw %ax - pushw %bp - movw %sp, %bp - - pushw %si - - /* set %si to the drive map */ - movw $(drive_map - int13_handler), %si - /* find the drive number from the drive map */ - cld -1: - lodsw %cs:(%si), %ax - /* check if this is the end */ - testw %ax, %ax - jz 2f - /* check if this matches the drive number */ - cmpb %al, %dl - jne 1b - /* if so, perform the mapping */ - movb %ah, %dl -2: - /* restore %si */ - popw %si - /* save %ax in the stack */ - pushw %ax - /* simulate the interrupt call */ - pushw 8(%bp) - /* set %ax and %bp to the original values */ - movw 2(%bp), %ax - movw (%bp), %bp - /* lcall */ - .byte 0x9a -int13_offset: .word 0 -int13_segment: .word 0 - /* save flags */ - pushf - /* restore %bp */ - movw %sp, %bp - /* save %ax */ - pushw %ax - /* set the flags in the stack to the value returned by int13 */ - movw (%bp), %ax - movw %ax, 0xc(%bp) - /* check if should map the drive number */ - movw 6(%bp), %ax - cmpw $0x8, %ax - jne 3f - cmpw $0x15, %ax - jne 3f - /* check if the mapping was performed */ - movw 2(%bp), %ax - testw %ax, %ax - jz 3f - /* perform the mapping */ - movb %al, %dl -3: - popw %ax - movw 4(%bp), %bp - addw $8, %sp - iret - - .align 4 -drive_map: .space (DRIVE_MAP_SIZE + 1) * 2 -int13_handler_end: - - .code32 - - -/* - * chain_stage1(segment, offset, part_table_addr) - * - * This starts another stage1 loader, at segment:offset. - */ - -ENTRY(chain_stage1) - /* no need to save anything, just use %esp */ - - /* store %ESI, presuming %ES is 0 */ - movl 0xc(%esp), %esi - - /* store new offset */ - movl 0x8(%esp), %eax - movl %eax, offset - - /* store new segment */ - movw 0x4(%esp), %ax - movw %ax, segment - - /* set up to pass boot drive */ - movb EXT_C(boot_drive), %dl - - call EXT_C(prot_to_real) - .code16 - -#ifdef ABSOLUTE_WITHOUT_ASTERISK - DATA32 ADDR32 ljmp (offset) -#else - DATA32 ADDR32 ljmp *(offset) -#endif - .code32 -#endif /* STAGE1_5 */ - - -#ifdef STAGE1_5 -/* - * chain_stage2(segment, offset, second_sector) - * - * This starts another stage2 loader, at segment:offset. It presumes - * that the other one starts with this same "asm.S" file, and passes - * parameters by writing the embedded install variables. - */ - -ENTRY(chain_stage2) - /* no need to save anything, just use %esp */ - - /* store new offset */ - movl 0x8(%esp), %eax - movl %eax, offset - movl %eax, %ebx - - /* store new segment */ - movw 0x4(%esp), %ax - movw %ax, segment - shll $4, %eax - - /* generate linear address */ - addl %eax, %ebx - - /* set up to pass the partition where stage2 is located in */ - movl EXT_C(current_partition), %eax - movl %eax, (EXT_C(install_partition)-EXT_C(main))(%ebx) - - /* set up to pass the drive where stage2 is located in */ - movb EXT_C(current_drive), %dl - - /* set up to pass the second sector of stage2 */ - movl 0xc(%esp), %ecx - - call EXT_C(prot_to_real) - .code16 - - movl %ecx, %ebp - -#ifdef ABSOLUTE_WITHOUT_ASTERISK - DATA32 ADDR32 ljmp (offset) -#else - DATA32 ADDR32 ljmp *(offset) -#endif - - .code32 -#endif /* STAGE1_5 */ - -/* - * These next two routines, "real_to_prot" and "prot_to_real" are structured - * in a very specific way. Be very careful when changing them. - * - * NOTE: Use of either one messes up %eax and %ebp. - */ - -ENTRY(real_to_prot) - .code16 - cli - - /* load the GDT register */ - DATA32 ADDR32 lgdt gdtdesc - - /* turn on protected mode */ - movl %cr0, %eax - orl $CR0_PE_ON, %eax - movl %eax, %cr0 - - /* jump to relocation, flush prefetch queue, and reload %cs */ - DATA32 ljmp $PROT_MODE_CSEG, $protcseg - - /* - * The ".code32" directive only works in GAS, the GNU assembler! - * This gets out of "16-bit" mode. - */ - .code32 - -protcseg: - /* reload other segment registers */ - movw $PROT_MODE_DSEG, %ax - movw %ax, %ds - movw %ax, %es - movw %ax, %fs - movw %ax, %gs - movw %ax, %ss - - /* put the return address in a known safe location */ - movl (%esp), %eax - movl %eax, STACKOFF - - /* get protected mode stack */ - movl protstack, %eax - movl %eax, %esp - movl %eax, %ebp - - /* get return address onto the right stack */ - movl STACKOFF, %eax - movl %eax, (%esp) - - /* zero %eax */ - xorl %eax, %eax - - /* return on the old (or initialized) stack! */ - ret - - -ENTRY(prot_to_real) - /* just in case, set GDT */ - lgdt gdtdesc - - /* save the protected mode stack */ - movl %esp, %eax - movl %eax, protstack - - /* get the return address */ - movl (%esp), %eax - movl %eax, STACKOFF - - /* set up new stack */ - movl $STACKOFF, %eax - movl %eax, %esp - movl %eax, %ebp - - /* set up segment limits */ - movw $PSEUDO_RM_DSEG, %ax - movw %ax, %ds - movw %ax, %es - movw %ax, %fs - movw %ax, %gs - movw %ax, %ss - - /* this might be an extra step */ - ljmp $PSEUDO_RM_CSEG, $tmpcseg /* jump to a 16 bit segment */ - -tmpcseg: - .code16 - - /* clear the PE bit of CR0 */ - movl %cr0, %eax - andl $CR0_PE_OFF, %eax - movl %eax, %cr0 - - /* flush prefetch queue, reload %cs */ - DATA32 ljmp $0, $realcseg - -realcseg: - /* we are in real mode now - * set up the real mode segment registers : DS, SS, ES - */ - /* zero %eax */ - xorl %eax, %eax - - movw %ax, %ds - movw %ax, %es - movw %ax, %fs - movw %ax, %gs - movw %ax, %ss - - /* restore interrupts */ - sti - - /* return on new stack! */ - DATA32 ret - - .code32 - - -/* - * int biosdisk_int13_extensions (int ax, int drive, void *dap) - * - * Call IBM/MS INT13 Extensions (int 13 %ax=AX) for DRIVE. DAP - * is passed for disk address packet. If an error occurs, return - * non-zero, otherwise zero. - */ - -ENTRY(biosdisk_int13_extensions) - pushl %ebp - movl %esp, %ebp - - pushl %esi - pushl %ebx - - /* compute the address of disk_address_packet */ - movl 0x10(%ebp), %eax - movw %ax, %si - xorw %ax, %ax - shrl $4, %eax - movw %ax, %cx /* save the segment to cx */ - - /* drive */ - movb 0xc(%ebp), %dl - /* ax */ - movw 0x8(%ebp), %bx - /* enter real mode */ - call EXT_C(prot_to_real) - - .code16 - movw %bx, %ax - movw %cx, %ds - int $0x13 /* do the operation */ - movb %ah, %dl /* save return value */ - /* clear the data segment */ - xorw %ax, %ax - movw %ax, %ds - /* back to protected mode */ - DATA32 call EXT_C(real_to_prot) - .code32 - - movb %dl, %al /* return value in %eax */ - - popl %ebx - popl %esi - popl %ebp - - ret - -/* - * int biosdisk_standard (int ah, int drive, int coff, int hoff, int soff, - * int nsec, int segment) - * - * Call standard and old INT13 (int 13 %ah=AH) for DRIVE. Read/write - * NSEC sectors from COFF/HOFF/SOFF into SEGMENT. If an error occurs, - * return non-zero, otherwise zero. - */ - -ENTRY(biosdisk_standard) - pushl %ebp - movl %esp, %ebp - - pushl %ebx - pushl %edi - pushl %esi - - /* set up CHS information */ - movl 0x10(%ebp), %eax - movb %al, %ch - movb 0x18(%ebp), %al - shlb $2, %al - shrw $2, %ax - movb %al, %cl - movb 0x14(%ebp), %dh - /* drive */ - movb 0xc(%ebp), %dl - /* segment */ - movw 0x20(%ebp), %bx - /* save nsec and ah to %di */ - movb 0x8(%ebp), %ah - movb 0x1c(%ebp), %al - movw %ax, %di - /* enter real mode */ - call EXT_C(prot_to_real) - - .code16 - movw %bx, %es - xorw %bx, %bx - movw $3, %si /* attempt at least three times */ - -1: - movw %di, %ax - int $0x13 /* do the operation */ - jnc 2f /* check if successful */ - - movb %ah, %bl /* save return value */ - /* if fail, reset the disk system */ - xorw %ax, %ax - int $0x13 - - decw %si - cmpw $0, %si - je 2f - xorb %bl, %bl - jmp 1b /* retry */ -2: - /* back to protected mode */ - DATA32 call EXT_C(real_to_prot) - .code32 - - movb %bl, %al /* return value in %eax */ - - popl %esi - popl %edi - popl %ebx - popl %ebp - - ret - - -/* - * int check_int13_extensions (int drive) - * - * Check if LBA is supported for DRIVE. If it is supported, then return - * the major version of extensions, otherwise zero. - */ - -ENTRY(check_int13_extensions) - pushl %ebp - movl %esp, %ebp - - pushl %ebx - - /* drive */ - movb 0x8(%ebp), %dl - /* enter real mode */ - call EXT_C(prot_to_real) - - .code16 - movb $0x41, %ah - movw $0x55aa, %bx - int $0x13 /* do the operation */ - - /* check the result */ - jc 1f - cmpw $0xaa55, %bx - jne 1f - - movb %ah, %bl /* save the major version into %bl */ - - /* check if AH=0x42 is supported if FORCE_LBA is zero */ - movb EXT_C(force_lba), %al - testb %al, %al - jnz 2f - andw $1, %cx - jnz 2f - -1: - xorb %bl, %bl -2: - /* back to protected mode */ - DATA32 call EXT_C(real_to_prot) - .code32 - - movb %bl, %al /* return value in %eax */ - - popl %ebx - popl %ebp - - ret - - -/* - * int get_diskinfo_standard (int drive, unsigned long *cylinders, - * unsigned long *heads, unsigned long *sectors) - * - * Return the geometry of DRIVE in CYLINDERS, HEADS and SECTORS. If an - * error occurs, then return non-zero, otherwise zero. - */ - -ENTRY(get_diskinfo_standard) - pushl %ebp - movl %esp, %ebp - - pushl %ebx - pushl %edi - - /* drive */ - movb 0x8(%ebp), %dl - /* enter real mode */ - call EXT_C(prot_to_real) - - .code16 - movb $0x8, %ah - int $0x13 /* do the operation */ - /* check if successful */ - testb %ah, %ah - jnz 1f - /* bogus BIOSes may not return an error number */ - testb $0x3f, %cl /* 0 sectors means no disk */ - jnz 1f /* if non-zero, then succeed */ - /* XXX 0x60 is one of the unused error numbers */ - movb $0x60, %ah -1: - movb %ah, %bl /* save return value in %bl */ - /* back to protected mode */ - DATA32 call EXT_C(real_to_prot) - .code32 - - /* restore %ebp */ - leal 0x8(%esp), %ebp - - /* heads */ - movb %dh, %al - incl %eax /* the number of heads is counted from zero */ - movl 0x10(%ebp), %edi - movl %eax, (%edi) - - /* sectors */ - xorl %eax, %eax - movb %cl, %al - andb $0x3f, %al - movl 0x14(%ebp), %edi - movl %eax, (%edi) - - /* cylinders */ - shrb $6, %cl - movb %cl, %ah - movb %ch, %al - incl %eax /* the number of cylinders is - counted from zero */ - movl 0xc(%ebp), %edi - movl %eax, (%edi) - - xorl %eax, %eax - movb %bl, %al /* return value in %eax */ - - popl %edi - popl %ebx - popl %ebp - - ret - - -#if 0 -/* - * int get_diskinfo_floppy (int drive, unsigned long *cylinders, - * unsigned long *heads, unsigned long *sectors) - * - * Return the geometry of DRIVE in CYLINDERS, HEADS and SECTORS. If an - * error occurs, then return non-zero, otherwise zero. - */ - -ENTRY(get_diskinfo_floppy) - pushl %ebp - movl %esp, %ebp - - pushl %ebx - pushl %esi - - /* drive */ - movb 0x8(%ebp), %dl - /* enter real mode */ - call EXT_C(prot_to_real) - - .code16 - /* init probe value */ - movl $probe_values-1, %esi -1: - xorw %ax, %ax - int $0x13 /* reset floppy controller */ - - incw %si - movb (%si), %cl - cmpb $0, %cl /* probe failed if zero */ - je 2f - - /* perform read */ - movw $SCRATCHSEG, %ax - movw %ax, %es - xorw %bx, %bx - movw $0x0201, %ax - movb $0, %ch - movb $0, %dh - int $0x13 - - /* FIXME: Read from floppy may fail even if the geometry is correct. - So should retry at least three times. */ - jc 1b /* next value */ - - /* succeed */ - jmp 2f - -probe_values: - .byte 36, 18, 15, 9, 0 - -2: - /* back to protected mode */ - DATA32 call EXT_C(real_to_prot) - .code32 - - /* restore %ebp */ - leal 0x8(%esp), %ebp - - /* cylinders */ - movl 0xc(%ebp), %eax - movl $80, %ebx - movl %ebx, (%eax) - /* heads */ - movl 0x10(%ebp), %eax - movl $2, %ebx - movl %ebx, (%eax) - /* sectors */ - movl 0x14(%ebp), %eax - movzbl %cl, %ebx - movl %ebx, (%eax) - - /* return value in %eax */ - xorl %eax, %eax - cmpb $0, %cl - jne 3f - incl %eax /* %eax = 1 (non-zero) */ -3: - popl %esi - popl %ebx - popl %ebp - - ret -#endif - - -/* Source files are splitted, as they have different copyrights. */ -#ifndef STAGE1_5 -# include "setjmp.S" -# include "apm.S" -#endif /* ! STAGE1_5 */ - - - -#ifndef STAGE1_5 -/* get_code_end() : return the address of the end of the code - * This is here so that it can be replaced by asmstub.c. - */ -ENTRY(get_code_end) - /* will be the end of the bss */ -# if defined(HAVE_END_SYMBOL) - movl $end, %eax -# elif defined(HAVE_USCORE_END_SYMBOL) - movl $_end, %eax -# endif - shrl $2, %eax /* Round up to the next word. */ - incl %eax - shll $2, %eax - ret -#endif /* ! STAGE1_5 */ - -/* - * - * get_memsize(i) : return the memory size in KB. i == 0 for conventional - * memory, i == 1 for extended memory - * BIOS call "INT 12H" to get conventional memory size - * BIOS call "INT 15H, AH=88H" to get extended memory size - * Both have the return value in AX. - * - */ - -ENTRY(get_memsize) - push %ebp - push %ebx - - mov 0xc(%esp), %ebx - - call EXT_C(prot_to_real) /* enter real mode */ - .code16 - - cmpb $0x1, %bl - DATA32 je xext - - int $0x12 - DATA32 jmp xdone - -xext: - movb $0x88, %ah - int $0x15 - -xdone: - movw %ax, %bx - - DATA32 call EXT_C(real_to_prot) - .code32 - - movw %bx, %ax - pop %ebx - pop %ebp - ret - - -#ifndef STAGE1_5 - -/* - * - * get_eisamemsize() : return packed EISA memory map, lower 16 bits is - * memory between 1M and 16M in 1K parts, upper 16 bits is - * memory above 16M in 64K parts. If error, return -1. - * BIOS call "INT 15H, AH=E801H" to get EISA memory map, - * AX = memory between 1M and 16M in 1K parts. - * BX = memory above 16M in 64K parts. - * - */ - -ENTRY(get_eisamemsize) - push %ebp - push %ebx - - call EXT_C(prot_to_real) /* enter real mode */ - .code16 - - movw $0xe801, %ax - int $0x15 - - shll $16, %ebx - movw %ax, %bx - - DATA32 call EXT_C(real_to_prot) - .code32 - - movl $0xFFFFFFFF, %eax - cmpb $0x86, %bh - je xnoteisa - - movl %ebx, %eax - -xnoteisa: - pop %ebx - pop %ebp - ret - -/* - * - * get_mmap_entry(addr, cont) : address and old continuation value (zero to - * start), for the Query System Address Map BIOS call. - * - * Sets the first 4-byte int value of "addr" to the size returned by - * the call. If the call fails, sets it to zero. - * - * Returns: new (non-zero) continuation value, 0 if done. - * - * NOTE: Currently hard-coded for a maximum buffer length of 1024. - */ - -ENTRY(get_mmap_entry) - push %ebp - push %ebx - push %edi - push %esi - - /* place address (+4) in ES:DI */ - movl 0x14(%esp), %eax - addl $4, %eax - movl %eax, %edi - andl $0xf, %edi - shrl $4, %eax - movl %eax, %esi - - /* set continuation value */ - movl 0x18(%esp), %ebx - - /* set default maximum buffer size */ - movl $0x14, %ecx - - /* set EDX to 'SMAP' */ - movl $0x534d4150, %edx - - call EXT_C(prot_to_real) /* enter real mode */ - .code16 - - movw %si, %es - movl $0xe820, %eax - int $0x15 - - DATA32 jc xnosmap - - cmpl $0x534d4150, %eax - DATA32 jne xnosmap - - cmpl $0x14, %ecx - DATA32 jl xnosmap - - cmpl $0x400, %ecx - DATA32 jg xnosmap - - DATA32 jmp xsmap - -xnosmap: - movl $0, %ecx - -xsmap: - DATA32 call EXT_C(real_to_prot) - .code32 - - /* write length of buffer (zero if error) into "addr" */ - movl 0x14(%esp), %eax - movl %ecx, (%eax) - - /* set return value to continuation */ - movl %ebx, %eax - - pop %esi - pop %edi - pop %ebx - pop %ebp - ret - -/* - * get_rom_config_table() - * - * Get the linear address of a ROM configuration table. Return zero, - * if fails. - */ - -ENTRY(get_rom_config_table) - pushl %ebp - pushl %ebx - - /* zero %ebx for simplicity */ - xorl %ebx, %ebx - - call EXT_C(prot_to_real) - .code16 - - movw $0xc0, %ax - int $0x15 - - jc no_rom_table - testb %ah, %ah - jnz no_rom_table - - movw %es, %dx - jmp found_rom_table - -no_rom_table: - xorw %dx, %dx - xorw %bx, %bx - -found_rom_table: - DATA32 call EXT_C(real_to_prot) - .code32 - - /* compute the linear address */ - movw %dx, %ax - shll $4, %eax - addl %ebx, %eax - - popl %ebx - popl %ebp - ret - - -/* - * int get_vbe_controller_info (struct vbe_controller *controller_ptr) - * - * Get VBE controller information. - */ - -ENTRY(get_vbe_controller_info) - pushl %ebp - movl %esp, %ebp - - pushl %edi - pushl %ebx - - /* Convert the linear address to segment:offset */ - movl 8(%ebp), %eax - movl %eax, %edi - andl $0x0000000f, %edi - shrl $4, %eax - movl %eax, %ebx - - call EXT_C(prot_to_real) - .code16 - - movw %bx, %es - movw $0x4F00, %ax - int $0x10 - - movw %ax, %bx - DATA32 call EXT_C(real_to_prot) - .code32 - - movzwl %bx, %eax - - popl %ebx - popl %edi - popl %ebp - ret - - -/* - * int get_vbe_mode_info (int mode_number, struct vbe_mode *mode_ptr) - * - * Get VBE mode information. - */ - -ENTRY(get_vbe_mode_info) - pushl %ebp - movl %esp, %ebp - - pushl %edi - pushl %ebx - - /* Convert the linear address to segment:offset */ - movl 0xc(%ebp), %eax - movl %eax, %edi - andl $0x0000000f, %edi - shrl $4, %eax - movl %eax, %ebx - - /* Save the mode number in %cx */ - movl 0x8(%ebp), %ecx - - call EXT_C(prot_to_real) - .code16 - - movw %bx, %es - movw $0x4F01, %ax - int $0x10 - - movw %ax, %bx - DATA32 call EXT_C(real_to_prot) - .code32 - - movzwl %bx, %eax - - popl %ebx - popl %edi - popl %ebp - ret - - -/* - * int set_vbe_mode (int mode_number) - * - * Set VBE mode. Don't support user-specified CRTC information. - */ - -ENTRY(set_vbe_mode) - pushl %ebp - movl %esp, %ebp - - pushl %ebx - - /* Save the mode number in %bx */ - movl 0x8(%ebp), %ebx - /* Clear bit D11 */ - andl $0xF7FF, %ebx - - call EXT_C(prot_to_real) - .code16 - - movw $0x4F02, %ax - int $0x10 - - movw %ax, %bx - DATA32 call EXT_C(real_to_prot) - .code32 - - movzwl %bx, %eax - - popl %ebx - popl %ebp - ret - - -/* - * gateA20(int linear) - * - * Gate address-line 20 for high memory. - * - * This routine is probably overconservative in what it does, but so what? - * - * It also eats any keystrokes in the keyboard buffer. :-( - */ - -ENTRY(gateA20) - /* first, try a BIOS call */ - pushl %ebp - movl 8(%esp), %edx - - call EXT_C(prot_to_real) - - .code16 - movw $0x2400, %ax - testw %dx, %dx - jz 1f - incw %ax -1: stc - int $0x15 - jnc 2f - - /* set non-zero if failed */ - movb $1, %ah - - /* save the status */ -2: movb %ah, %dl - - DATA32 call EXT_C(real_to_prot) - .code32 - - popl %ebp - testb %dl, %dl - jnz 3f - ret - -3: /* use keyboard controller */ - pushl %eax - - call gloop1 - - movb $KC_CMD_WOUT, %al - outb $K_CMD - -gloopint1: - inb $K_STATUS - andb $K_IBUF_FUL, %al - jnz gloopint1 - - movb $KB_OUTPUT_MASK, %al - cmpb $0, 0x8(%esp) - jz gdoit - - orb $KB_A20_ENABLE, %al -gdoit: - outb $K_RDWR - - call gloop1 - - /* output a dummy command (USB keyboard hack) */ - movb $0xff, %al - outb $K_CMD - call gloop1 - - popl %eax - ret - -gloop1: - inb $K_STATUS - andb $K_IBUF_FUL, %al - jnz gloop1 - -gloop2: - inb $K_STATUS - andb $K_OBUF_FUL, %al - jz gloop2ret - inb $K_RDWR - jmp gloop2 - -gloop2ret: - ret - - -ENTRY(patch_code) /* labels start with "pc_" */ - .code16 - - mov %cs, %ax - mov %ax, %ds - mov %ax, %es - mov %ax, %fs - mov %ax, %gs - ADDR32 movl $0, 0 -pc_stop: - hlt - DATA32 jmp pc_stop -ENTRY(patch_code_end) - - .code32 - - -/* - * linux_boot() - * - * Does some funky things (including on the stack!), then jumps to the - * entry point of the Linux setup code. - */ - -VARIABLE(linux_text_len) - .long 0 - -VARIABLE(linux_data_tmp_addr) - .long 0 - -VARIABLE(linux_data_real_addr) - .long 0 - -ENTRY(linux_boot) - /* don't worry about saving anything, we're committed at this point */ - cld /* forward copying */ - - /* copy kernel */ - movl EXT_C(linux_text_len), %ecx - addl $3, %ecx - shrl $2, %ecx - movl $LINUX_BZIMAGE_ADDR, %esi - movl $LINUX_ZIMAGE_ADDR, %edi - - rep - movsl - -ENTRY(big_linux_boot) - movl EXT_C(linux_data_real_addr), %ebx - - /* copy the real mode part */ - movl EXT_C(linux_data_tmp_addr), %esi - movl %ebx, %edi - movl $LINUX_SETUP_MOVE_SIZE, %ecx - cld - rep - movsb - - /* change %ebx to the segment address */ - shrl $4, %ebx - movl %ebx, %eax - addl $0x20, %eax - movl %eax, linux_setup_seg - - /* XXX new stack pointer in safe area for calling functions */ - movl $0x4000, %esp - call EXT_C(stop_floppy) - - /* final setup for linux boot */ - - call EXT_C(prot_to_real) - .code16 - - /* final setup for linux boot */ - cli - movw %bx, %ss - movw $LINUX_SETUP_STACK, %sp - - movw %bx, %ds - movw %bx, %es - movw %bx, %fs - movw %bx, %gs - - /* jump to start */ - /* ljmp */ - .byte 0xea - .word 0 -linux_setup_seg: - .word 0 - .code32 - - -/* - * multi_boot(int start, int mb_info) - * - * This starts a kernel in the manner expected of the multiboot standard. - */ - -ENTRY(multi_boot) - /* no need to save anything */ - call EXT_C(stop_floppy) - - movl $0x2BADB002, %eax - movl 0x8(%esp), %ebx - - /* boot kernel here (absolute address call) */ - call *0x4(%esp) - - /* error */ - call EXT_C(stop) - -#endif /* ! STAGE1_5 */ - -/* - * void console_putchar (int c) - * - * Put the character C on the console. Because GRUB wants to write a - * character with an attribute, this implementation is a bit tricky. - * If C is a control character (CR, LF, BEL, BS), use INT 10, AH = 0Eh - * (TELETYPE OUTPUT). Otherwise, save the original position, put a space, - * save the current position, restore the original position, write the - * character and the attribute, and restore the current position. - * - * The reason why this is so complicated is that there is no easy way to - * get the height of the screen, and the TELETYPE OUPUT BIOS call doesn't - * support setting a background attribute. - */ -ENTRY(console_putchar) - movl 0x4(%esp), %edx - pusha -#ifdef STAGE1_5 - movb $0x07, %bl -#else - movl EXT_C(console_current_color), %ebx -#endif - - call EXT_C(prot_to_real) - .code16 - movb %dl, %al - xorb %bh, %bh - -#ifndef STAGE1_5 - /* use teletype output if control character */ - cmpb $0x7, %al - je 1f - cmpb $0x8, %al - je 1f - cmpb $0xa, %al - je 1f - cmpb $0xd, %al - je 1f - - /* save the character and the attribute on the stack */ - pushw %ax - pushw %bx - - /* get the current position */ - movb $0x3, %ah - int $0x10 - - /* check the column with the width */ - cmpb $79, %dl - jl 2f - - /* print CR and LF, if next write will exceed the width */ - movw $0x0e0d, %ax - int $0x10 - movb $0x0a, %al - int $0x10 - - /* get the current position */ - movb $0x3, %ah - int $0x10 - -2: - /* restore the character and the attribute */ - popw %bx - popw %ax - - /* write the character with the attribute */ - movb $0x9, %ah - movw $1, %cx - int $0x10 - - /* move the cursor forward */ - incb %dl - movb $0x2, %ah - int $0x10 - - jmp 3f -#endif /* ! STAGE1_5 */ - -1: movb $0xe, %ah - int $0x10 - -3: DATA32 call EXT_C(real_to_prot) - .code32 - - popa - ret - - -#ifndef STAGE1_5 - -/* this table is used in translate_keycode below */ -translation_table: - .word KEY_LEFT, 2 - .word KEY_RIGHT, 6 - .word KEY_UP, 16 - .word KEY_DOWN, 14 - .word KEY_HOME, 1 - .word KEY_END, 5 - .word KEY_DC, 4 - .word KEY_BACKSPACE, 8 - .word KEY_PPAGE, 7 - .word KEY_NPAGE, 3 - .word 0 - -/* - * translate_keycode translates the key code %dx to an ascii code. - */ - .code16 - -translate_keycode: - pushw %bx - pushw %si - - movw $ABS(translation_table), %si - -1: lodsw - /* check if this is the end */ - testw %ax, %ax - jz 2f - /* load the ascii code into %ax */ - movw %ax, %bx - lodsw - /* check if this matches the key code */ - cmpw %bx, %dx - jne 1b - /* translate %dx, if successful */ - movw %ax, %dx - -2: popw %si - popw %bx - ret - - .code32 - - -/* - * remap_ascii_char remaps the ascii code %dl to another if the code is - * contained in ASCII_KEY_MAP. - */ - .code16 - -remap_ascii_char: - pushw %si - - movw $ABS(EXT_C(ascii_key_map)), %si -1: - lodsw - /* check if this is the end */ - testw %ax, %ax - jz 2f - /* check if this matches the ascii code */ - cmpb %al, %dl - jne 1b - /* if so, perform the mapping */ - movb %ah, %dl -2: - /* restore %si */ - popw %si - - ret - - .code32 - - .align 4 -ENTRY(ascii_key_map) - .space (KEY_MAP_SIZE + 1) * 2 - - -/* - * int console_getkey (void) - * BIOS call "INT 16H Function 00H" to read character from keyboard - * Call with %ah = 0x0 - * Return: %ah = keyboard scan code - * %al = ASCII character - */ - -ENTRY(console_getkey) - push %ebp - - call EXT_C(prot_to_real) - .code16 - - int $0x16 - - movw %ax, %dx /* real_to_prot uses %eax */ - call translate_keycode - call remap_ascii_char - - DATA32 call EXT_C(real_to_prot) - .code32 - - movw %dx, %ax - - pop %ebp - ret - - -/* - * int console_checkkey (void) - * if there is a character pending, return it; otherwise return -1 - * BIOS call "INT 16H Function 01H" to check whether a character is pending - * Call with %ah = 0x1 - * Return: - * If key waiting to be input: - * %ah = keyboard scan code - * %al = ASCII character - * Zero flag = clear - * else - * Zero flag = set - */ -ENTRY(console_checkkey) - push %ebp - xorl %edx, %edx - - call EXT_C(prot_to_real) /* enter real mode */ - .code16 - - movb $0x1, %ah - int $0x16 - - DATA32 jz notpending - - movw %ax, %dx - call translate_keycode - call remap_ascii_char - DATA32 jmp pending - -notpending: - movl $0xFFFFFFFF, %edx - -pending: - DATA32 call EXT_C(real_to_prot) - .code32 - - mov %edx, %eax - - pop %ebp - ret - - -/* - * int console_getxy (void) - * BIOS call "INT 10H Function 03h" to get cursor position - * Call with %ah = 0x03 - * %bh = page - * Returns %ch = starting scan line - * %cl = ending scan line - * %dh = row (0 is top) - * %dl = column (0 is left) - */ - - -ENTRY(console_getxy) - push %ebp - push %ebx /* save EBX */ - - call EXT_C(prot_to_real) - .code16 - - xorb %bh, %bh /* set page to 0 */ - movb $0x3, %ah - int $0x10 /* get cursor position */ - - DATA32 call EXT_C(real_to_prot) - .code32 - - movb %dl, %ah - movb %dh, %al - - pop %ebx - pop %ebp - ret - - -/* - * void console_gotoxy(int x, int y) - * BIOS call "INT 10H Function 02h" to set cursor position - * Call with %ah = 0x02 - * %bh = page - * %dh = row (0 is top) - * %dl = column (0 is left) - */ - - -ENTRY(console_gotoxy) - push %ebp - push %ebx /* save EBX */ - - movb 0xc(%esp), %dl /* %dl = x */ - movb 0x10(%esp), %dh /* %dh = y */ - - call EXT_C(prot_to_real) - .code16 - - xorb %bh, %bh /* set page to 0 */ - movb $0x2, %ah - int $0x10 /* set cursor position */ - - DATA32 call EXT_C(real_to_prot) - .code32 - - pop %ebx - pop %ebp - ret - - -/* - * void console_cls (void) - * BIOS call "INT 10H Function 09h" to write character and attribute - * Call with %ah = 0x09 - * %al = (character) - * %bh = (page number) - * %bl = (attribute) - * %cx = (number of times) - */ - - -ENTRY(console_cls) - push %ebp - push %ebx /* save EBX */ - - call EXT_C(prot_to_real) - .code16 - - /* move the cursor to the beginning */ - movb $0x02, %ah - xorb %bh, %bh - xorw %dx, %dx - int $0x10 - - /* write spaces to the entire screen */ - movw $0x0920, %ax - movw $0x07, %bx - movw $(80 * 25), %cx - int $0x10 - - /* move back the cursor */ - movb $0x02, %ah - int $0x10 - - DATA32 call EXT_C(real_to_prot) - .code32 - - pop %ebx - pop %ebp - ret - - -/* - * int console_setcursor (int on) - * BIOS call "INT 10H Function 01h" to set cursor type - * Call with %ah = 0x01 - * %ch = cursor starting scanline - * %cl = cursor ending scanline - */ - -console_cursor_state: - .byte 1 -console_cursor_shape: - .word 0 - -ENTRY(console_setcursor) - push %ebp - push %ebx - - /* check if the standard cursor shape has already been saved */ - movw console_cursor_shape, %ax - testw %ax, %ax - jne 1f - - call EXT_C(prot_to_real) - .code16 - - movb $0x03, %ah - xorb %bh, %bh - int $0x10 - - DATA32 call EXT_C(real_to_prot) - .code32 - - movw %cx, console_cursor_shape -1: - /* set %cx to the designated cursor shape */ - movw $0x2000, %cx - movl 0xc(%esp), %ebx - testl %ebx, %ebx - jz 2f - movw console_cursor_shape, %cx -2: - call EXT_C(prot_to_real) - .code16 - - movb $0x1, %ah - int $0x10 - - DATA32 call EXT_C(real_to_prot) - .code32 - - movzbl console_cursor_state, %eax - movb %bl, console_cursor_state - - pop %ebx - pop %ebp - ret - -/* - * getrtsecs() - * if a seconds value can be read, read it and return it (BCD), - * otherwise return 0xFF - * BIOS call "INT 1AH Function 02H" to check whether a character is pending - * Call with %ah = 0x2 - * Return: - * If RT Clock can give correct values - * %ch = hour (BCD) - * %cl = minutes (BCD) - * %dh = seconds (BCD) - * %dl = daylight savings time (00h std, 01h daylight) - * Carry flag = clear - * else - * Carry flag = set - * (this indicates that the clock is updating, or - * that it isn't running) - */ -ENTRY(getrtsecs) - push %ebp - - call EXT_C(prot_to_real) /* enter real mode */ - .code16 - - movb $0x2, %ah - int $0x1a - - DATA32 jnc gottime - movb $0xff, %dh - -gottime: - DATA32 call EXT_C(real_to_prot) - .code32 - - movb %dh, %al - - pop %ebp - ret - - -/* - * currticks() - * return the real time in ticks, of which there are about - * 18-20 per second - */ -ENTRY(currticks) - pushl %ebp - - call EXT_C(prot_to_real) /* enter real mode */ - .code16 - - /* %ax is already zero */ - int $0x1a - - DATA32 call EXT_C(real_to_prot) - .code32 - - movl %ecx, %eax - shll $16, %eax - movw %dx, %ax - - popl %ebp - ret - -#endif /* STAGE1_5 */ - -/* - * This is the area for all of the special variables. - */ - - .p2align 2 /* force 4-byte alignment */ - -protstack: - .long PROTSTACKINIT - -VARIABLE(boot_drive) -#ifdef SUPPORT_DISKLESS - .long NETWORK_DRIVE -#else - .long 0 -#endif - -VARIABLE(install_second_sector) - .long 0 - - /* an address can only be long-jumped to if it is in memory, this - is used by multiple routines */ -offset: - .long 0x8000 -segment: - .word 0 - -VARIABLE(apm_bios_info) - .word 0 /* version */ - .word 0 /* cseg */ - .long 0 /* offset */ - .word 0 /* cseg_16 */ - .word 0 /* dseg_16 */ - .word 0 /* cseg_len */ - .word 0 /* cseg_16_len */ - .word 0 /* dseg_16_len */ - -/* - * This is the Global Descriptor Table - * - * An entry, a "Segment Descriptor", looks like this: - * - * 31 24 19 16 7 0 - * ------------------------------------------------------------ - * | | |B| |A| | | |1|0|E|W|A| | - * | BASE 31..24 |G|/|0|V| LIMIT |P|DPL| TYPE | BASE 23:16 | - * | | |D| |L| 19..16| | |1|1|C|R|A| | - * ------------------------------------------------------------ - * | | | - * | BASE 15..0 | LIMIT 15..0 | - * | | | - * ------------------------------------------------------------ - * - * Note the ordering of the data items is reversed from the above - * description. - */ - - .p2align 2 /* force 4-byte alignment */ -gdt: - .word 0, 0 - .byte 0, 0, 0, 0 - - /* code segment */ - .word 0xFFFF, 0 - .byte 0, 0x9A, 0xCF, 0 - - /* data segment */ - .word 0xFFFF, 0 - .byte 0, 0x92, 0xCF, 0 - - /* 16 bit real mode CS */ - .word 0xFFFF, 0 - .byte 0, 0x9E, 0, 0 - - /* 16 bit real mode DS */ - .word 0xFFFF, 0 - .byte 0, 0x92, 0, 0 - - -/* this is the GDT descriptor */ -gdtdesc: - .word 0x27 /* limit */ - .long gdt /* addr */ diff --git a/stage2/bios.c b/stage2/bios.c deleted file mode 100644 index f3665caf0..000000000 --- a/stage2/bios.c +++ /dev/null @@ -1,317 +0,0 @@ -/* bios.c - implement C part of low-level BIOS disk input and output */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2003,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "shared.h" - - -/* These are defined in asm.S, and never be used elsewhere, so declare the - prototypes here. */ -extern int biosdisk_int13_extensions (int ax, int drive, void *dap); -extern int biosdisk_standard (int ah, int drive, - int coff, int hoff, int soff, - int nsec, int segment); -extern int check_int13_extensions (int drive); -extern int get_diskinfo_standard (int drive, - unsigned long *cylinders, - unsigned long *heads, - unsigned long *sectors); -#if 0 -extern int get_diskinfo_floppy (int drive, - unsigned long *cylinders, - unsigned long *heads, - unsigned long *sectors); -#endif - - -/* Read/write NSEC sectors starting from SECTOR in DRIVE disk with GEOMETRY - from/into SEGMENT segment. If READ is BIOSDISK_READ, then read it, - else if READ is BIOSDISK_WRITE, then write it. If an geometry error - occurs, return BIOSDISK_ERROR_GEOMETRY, and if other error occurs, then - return the error number. Otherwise, return 0. */ -int -biosdisk (int read, int drive, struct geometry *geometry, - unsigned int sector, int nsec, int segment) -{ - int err; - - if (geometry->flags & BIOSDISK_FLAG_LBA_EXTENSION) - { - struct disk_address_packet - { - unsigned char length; - unsigned char reserved; - unsigned short blocks; - unsigned long buffer; - unsigned long long block; - } __attribute__ ((packed)) dap; - - /* XXX: Don't check the geometry by default, because some buggy - BIOSes don't return the number of total sectors correctly, - even if they have working LBA support. Hell. */ -#ifdef NO_BUGGY_BIOS_IN_THE_WORLD - if (sector >= geometry->total_sectors) - return BIOSDISK_ERROR_GEOMETRY; -#endif /* NO_BUGGY_BIOS_IN_THE_WORLD */ - - /* FIXME: sizeof (DAP) must be 0x10. Should assert that the compiler - can't add any padding. */ - dap.length = sizeof (dap); - dap.block = sector; - dap.blocks = nsec; - dap.reserved = 0; - /* This is undocumented part. The address is formated in - SEGMENT:ADDRESS. */ - dap.buffer = segment << 16; - - err = biosdisk_int13_extensions ((read + 0x42) << 8, drive, &dap); - -/* #undef NO_INT13_FALLBACK */ -#ifndef NO_INT13_FALLBACK - if (err) - { - if (geometry->flags & BIOSDISK_FLAG_CDROM) - return err; - - geometry->flags &= ~BIOSDISK_FLAG_LBA_EXTENSION; - geometry->total_sectors = (geometry->cylinders - * geometry->heads - * geometry->sectors); - return biosdisk (read, drive, geometry, sector, nsec, segment); - } -#endif /* ! NO_INT13_FALLBACK */ - - } - else - { - int cylinder_offset, head_offset, sector_offset; - int head; - - /* SECTOR_OFFSET is counted from one, while HEAD_OFFSET and - CYLINDER_OFFSET are counted from zero. */ - sector_offset = sector % geometry->sectors + 1; - head = sector / geometry->sectors; - head_offset = head % geometry->heads; - cylinder_offset = head / geometry->heads; - - if (cylinder_offset >= geometry->cylinders) - return BIOSDISK_ERROR_GEOMETRY; - - err = biosdisk_standard (read + 0x02, drive, - cylinder_offset, head_offset, sector_offset, - nsec, segment); - } - - return err; -} - -/* Check bootable CD-ROM emulation status. */ -static int -get_cdinfo (int drive, struct geometry *geometry) -{ - int err; - struct iso_spec_packet - { - unsigned char size; - unsigned char media_type; - unsigned char drive_no; - unsigned char controller_no; - unsigned long image_lba; - unsigned short device_spec; - unsigned short cache_seg; - unsigned short load_seg; - unsigned short length_sec512; - unsigned char cylinders; - unsigned char sectors; - unsigned char heads; - - unsigned char dummy[16]; - } __attribute__ ((packed)) cdrp; - - grub_memset (&cdrp, 0, sizeof (cdrp)); - cdrp.size = sizeof (cdrp) - sizeof (cdrp.dummy); - err = biosdisk_int13_extensions (0x4B01, drive, &cdrp); - if (! err && cdrp.drive_no == drive) - { - if ((cdrp.media_type & 0x0F) == 0) - { - /* No emulation bootable CD-ROM */ - geometry->flags = BIOSDISK_FLAG_LBA_EXTENSION | BIOSDISK_FLAG_CDROM; - geometry->cylinders = 0; - geometry->heads = 1; - geometry->sectors = 15; - geometry->sector_size = 2048; - geometry->total_sectors = MAXINT; - return 1; - } - else - { - /* Floppy or hard-disk emulation */ - geometry->cylinders - = ((unsigned int) cdrp.cylinders - + (((unsigned int) (cdrp.sectors & 0xC0)) << 2)); - geometry->heads = cdrp.heads; - geometry->sectors = cdrp.sectors & 0x3F; - geometry->sector_size = SECTOR_SIZE; - geometry->total_sectors = (geometry->cylinders - * geometry->heads - * geometry->sectors); - return -1; - } - } - return 0; -} - -/* Return the geometry of DRIVE in GEOMETRY. If an error occurs, return - non-zero, otherwise zero. */ -int -get_diskinfo (int drive, struct geometry *geometry) -{ - int err; - - /* Clear the flags. */ - geometry->flags = 0; - - if (drive & 0x80) - { - /* hard disk or CD-ROM */ - int version; - unsigned long total_sectors = 0; - - version = check_int13_extensions (drive); - - if (drive >= 0x88 || version) - { - /* Possible CD-ROM - check the status. */ - if (get_cdinfo (drive, geometry)) - return 0; - } - - if (version) - { - struct drive_parameters - { - unsigned short size; - unsigned short flags; - unsigned long cylinders; - unsigned long heads; - unsigned long sectors; - unsigned long long total_sectors; - unsigned short bytes_per_sector; - /* ver 2.0 or higher */ - unsigned long EDD_configuration_parameters; - /* ver 3.0 or higher */ - unsigned short signature_dpi; - unsigned char length_dpi; - unsigned char reserved[3]; - unsigned char name_of_host_bus[4]; - unsigned char name_of_interface_type[8]; - unsigned char interface_path[8]; - unsigned char device_path[8]; - unsigned char reserved2; - unsigned char checksum; - - /* XXX: This is necessary, because the BIOS of Thinkpad X20 - writes a garbage to the tail of drive parameters, - regardless of a size specified in a caller. */ - unsigned char dummy[16]; - } __attribute__ ((packed)) drp; - - /* It is safe to clear out DRP. */ - grub_memset (&drp, 0, sizeof (drp)); - - /* PhoenixBIOS 4.0 Revision 6.0 for ZF Micro might understand - the greater buffer size for the "get drive parameters" int - 0x13 call in its own way. Supposedly the BIOS assumes even - bigger space is available and thus corrupts the stack. - This is why we specify the exactly necessary size of 0x42 - bytes. */ - drp.size = sizeof (drp) - sizeof (drp.dummy); - - err = biosdisk_int13_extensions (0x4800, drive, &drp); - if (! err) - { - /* Set the LBA flag. */ - geometry->flags = BIOSDISK_FLAG_LBA_EXTENSION; - - /* I'm not sure if GRUB should check the bit 1 of DRP.FLAGS, - so I omit the check for now. - okuji */ - /* if (drp.flags & (1 << 1)) */ - - /* FIXME: when the 2TB limit becomes critical, we must - change the type of TOTAL_SECTORS to unsigned long - long. */ - if (drp.total_sectors) - total_sectors = drp.total_sectors & ~0L; - else - /* Some buggy BIOSes doesn't return the total sectors - correctly but returns zero. So if it is zero, compute - it by C/H/S returned by the LBA BIOS call. */ - total_sectors = drp.cylinders * drp.heads * drp.sectors; - } - } - - /* Don't pass GEOMETRY directly, but pass each element instead, - so that we can change the structure easily. */ - err = get_diskinfo_standard (drive, - &geometry->cylinders, - &geometry->heads, - &geometry->sectors); - if (err) - return err; - - if (! total_sectors) - { - total_sectors = (geometry->cylinders - * geometry->heads - * geometry->sectors); - } - geometry->total_sectors = total_sectors; - geometry->sector_size = SECTOR_SIZE; - } - else - { - /* floppy disk */ - - /* First, try INT 13 AH=8h call. */ - err = get_diskinfo_standard (drive, - &geometry->cylinders, - &geometry->heads, - &geometry->sectors); - -#if 0 - /* If fails, then try floppy-specific probe routine. */ - if (err) - err = get_diskinfo_floppy (drive, - &geometry->cylinders, - &geometry->heads, - &geometry->sectors); -#endif - - if (err) - return err; - - geometry->total_sectors = (geometry->cylinders - * geometry->heads - * geometry->sectors); - geometry->sector_size = SECTOR_SIZE; - } - - return 0; -} diff --git a/stage2/boot.c b/stage2/boot.c deleted file mode 100644 index 04c77358d..000000000 --- a/stage2/boot.c +++ /dev/null @@ -1,1020 +0,0 @@ -/* boot.c - load and bootstrap a kernel */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2002,2003,2004,2005 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - - -#include "shared.h" - -#include "freebsd.h" -#include "imgact_aout.h" -#include "i386-elf.h" - -static int cur_addr; -entry_func entry_addr; -static struct mod_list mll[99]; -static int linux_mem_size; - -/* - * The next two functions, 'load_image' and 'load_module', are the building - * blocks of the multiboot loader component. They handle essentially all - * of the gory details of loading in a bootable image and the modules. - */ - -kernel_t -load_image (char *kernel, char *arg, kernel_t suggested_type, - unsigned long load_flags) -{ - int len, i, exec_type = 0, align_4k = 1; - entry_func real_entry_addr = 0; - kernel_t type = KERNEL_TYPE_NONE; - unsigned long flags = 0, text_len = 0, data_len = 0, bss_len = 0; - char *str = 0, *str2 = 0; - struct linux_kernel_header *lh; - union - { - struct multiboot_header *mb; - struct exec *aout; - Elf32_Ehdr *elf; - } - pu; - /* presuming that MULTIBOOT_SEARCH is large enough to encompass an - executable header */ - unsigned char buffer[MULTIBOOT_SEARCH]; - - /* sets the header pointer to point to the beginning of the - buffer by default */ - pu.aout = (struct exec *) buffer; - - if (!grub_open (kernel)) - return KERNEL_TYPE_NONE; - - if (!(len = grub_read (buffer, MULTIBOOT_SEARCH)) || len < 32) - { - grub_close (); - - if (!errnum) - errnum = ERR_EXEC_FORMAT; - - return KERNEL_TYPE_NONE; - } - - for (i = 0; i < len; i++) - { - if (MULTIBOOT_FOUND ((int) (buffer + i), len - i)) - { - flags = ((struct multiboot_header *) (buffer + i))->flags; - if (flags & MULTIBOOT_UNSUPPORTED) - { - grub_close (); - errnum = ERR_BOOT_FEATURES; - return KERNEL_TYPE_NONE; - } - type = KERNEL_TYPE_MULTIBOOT; - str2 = "Multiboot"; - break; - } - } - - /* Use BUFFER as a linux kernel header, if the image is Linux zImage - or bzImage. */ - lh = (struct linux_kernel_header *) buffer; - - /* ELF loading supported if multiboot, FreeBSD and NetBSD. */ - if (((type == KERNEL_TYPE_MULTIBOOT && ! (flags & MULTIBOOT_AOUT_KLUDGE)) - || pu.elf->e_ident[EI_OSABI] == ELFOSABI_FREEBSD - || grub_strcmp (pu.elf->e_ident + EI_BRAND, "FreeBSD") == 0 - || suggested_type == KERNEL_TYPE_NETBSD) - && len > sizeof (Elf32_Ehdr) - && BOOTABLE_I386_ELF ((*((Elf32_Ehdr *) buffer)))) - { - if (type == KERNEL_TYPE_MULTIBOOT) - entry_addr = (entry_func) pu.elf->e_entry; - else - entry_addr = (entry_func) (pu.elf->e_entry & 0xFFFFFF); - - if (entry_addr < (entry_func) 0x100000) - errnum = ERR_BELOW_1MB; - - /* don't want to deal with ELF program header at some random - place in the file -- this generally won't happen */ - if (pu.elf->e_phoff == 0 || pu.elf->e_phnum == 0 - || ((pu.elf->e_phoff + (pu.elf->e_phentsize * pu.elf->e_phnum)) - >= len)) - errnum = ERR_EXEC_FORMAT; - str = "elf"; - - if (type == KERNEL_TYPE_NONE) - { - /* At the moment, there is no way to identify a NetBSD ELF - kernel, so rely on the suggested type by the user. */ - if (suggested_type == KERNEL_TYPE_NETBSD) - { - str2 = "NetBSD"; - type = suggested_type; - } - else - { - str2 = "FreeBSD"; - type = KERNEL_TYPE_FREEBSD; - } - } - } - else if (flags & MULTIBOOT_AOUT_KLUDGE) - { - pu.mb = (struct multiboot_header *) (buffer + i); - entry_addr = (entry_func) pu.mb->entry_addr; - cur_addr = pu.mb->load_addr; - /* first offset into file */ - grub_seek (i - (pu.mb->header_addr - cur_addr)); - - /* If the load end address is zero, load the whole contents. */ - if (! pu.mb->load_end_addr) - pu.mb->load_end_addr = cur_addr + filemax; - - text_len = pu.mb->load_end_addr - cur_addr; - data_len = 0; - - /* If the bss end address is zero, assume that there is no bss area. */ - if (! pu.mb->bss_end_addr) - pu.mb->bss_end_addr = pu.mb->load_end_addr; - - bss_len = pu.mb->bss_end_addr - pu.mb->load_end_addr; - - if (pu.mb->header_addr < pu.mb->load_addr - || pu.mb->load_end_addr <= pu.mb->load_addr - || pu.mb->bss_end_addr < pu.mb->load_end_addr - || (pu.mb->header_addr - pu.mb->load_addr) > i) - errnum = ERR_EXEC_FORMAT; - - if (cur_addr < 0x100000) - errnum = ERR_BELOW_1MB; - - pu.aout = (struct exec *) buffer; - exec_type = 2; - str = "kludge"; - } - else if (len > sizeof (struct exec) && !N_BADMAG ((*(pu.aout)))) - { - entry_addr = (entry_func) pu.aout->a_entry; - - if (type == KERNEL_TYPE_NONE) - { - /* - * If it doesn't have a Multiboot header, then presume - * it is either a FreeBSD or NetBSD executable. If so, - * then use a magic number of normal ordering, ZMAGIC to - * determine if it is FreeBSD. - * - * This is all because freebsd and netbsd seem to require - * masking out some address bits... differently for each - * one... plus of course we need to know which booting - * method to use. - */ - entry_addr = (entry_func) ((int) entry_addr & 0xFFFFFF); - - if (buffer[0] == 0xb && buffer[1] == 1) - { - type = KERNEL_TYPE_FREEBSD; - cur_addr = (int) entry_addr; - str2 = "FreeBSD"; - } - else - { - type = KERNEL_TYPE_NETBSD; - cur_addr = (int) entry_addr & 0xF00000; - if (N_GETMAGIC ((*(pu.aout))) != NMAGIC) - align_4k = 0; - str2 = "NetBSD"; - } - } - - /* first offset into file */ - grub_seek (N_TXTOFF (*(pu.aout))); - text_len = pu.aout->a_text; - data_len = pu.aout->a_data; - bss_len = pu.aout->a_bss; - - if (cur_addr < 0x100000) - errnum = ERR_BELOW_1MB; - - exec_type = 1; - str = "a.out"; - } - else if (lh->boot_flag == BOOTSEC_SIGNATURE - && lh->setup_sects <= LINUX_MAX_SETUP_SECTS) - { - int big_linux = 0; - int setup_sects = lh->setup_sects; - - if (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0200) - { - big_linux = (lh->loadflags & LINUX_FLAG_BIG_KERNEL); - lh->type_of_loader = LINUX_BOOT_LOADER_TYPE; - - /* Put the real mode part at as a high location as possible. */ - linux_data_real_addr - = (char *) ((mbi.mem_lower << 10) - LINUX_SETUP_MOVE_SIZE); - /* But it must not exceed the traditional area. */ - if (linux_data_real_addr > (char *) LINUX_OLD_REAL_MODE_ADDR) - linux_data_real_addr = (char *) LINUX_OLD_REAL_MODE_ADDR; - - if (lh->version >= 0x0201) - { - lh->heap_end_ptr = LINUX_HEAP_END_OFFSET; - lh->loadflags |= LINUX_FLAG_CAN_USE_HEAP; - } - - if (lh->version >= 0x0202) - lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_OFFSET; - else - { - lh->cl_magic = LINUX_CL_MAGIC; - lh->cl_offset = LINUX_CL_OFFSET; - lh->setup_move_size = LINUX_SETUP_MOVE_SIZE; - } - } - else - { - /* Your kernel is quite old... */ - lh->cl_magic = LINUX_CL_MAGIC; - lh->cl_offset = LINUX_CL_OFFSET; - - setup_sects = LINUX_DEFAULT_SETUP_SECTS; - - linux_data_real_addr = (char *) LINUX_OLD_REAL_MODE_ADDR; - } - - /* If SETUP_SECTS is not set, set it to the default (4). */ - if (! setup_sects) - setup_sects = LINUX_DEFAULT_SETUP_SECTS; - - data_len = setup_sects << 9; - text_len = filemax - data_len - SECTOR_SIZE; - - linux_data_tmp_addr = (char *) LINUX_BZIMAGE_ADDR + text_len; - - if (! big_linux - && text_len > linux_data_real_addr - (char *) LINUX_ZIMAGE_ADDR) - { - grub_printf (" linux 'zImage' kernel too big, try 'make bzImage'\n"); - errnum = ERR_WONT_FIT; - } - else if (linux_data_real_addr + LINUX_SETUP_MOVE_SIZE - > RAW_ADDR ((char *) (mbi.mem_lower << 10))) - errnum = ERR_WONT_FIT; - else - { - grub_printf (" [Linux-%s, setup=0x%x, size=0x%x]\n", - (big_linux ? "bzImage" : "zImage"), data_len, text_len); - - /* Video mode selection support. What a mess! */ - /* NOTE: Even the word "mess" is not still enough to - represent how wrong and bad the Linux video support is, - but I don't want to hear complaints from Linux fanatics - any more. -okuji */ - { - char *vga; - - /* Find the substring "vga=". */ - vga = grub_strstr (arg, "vga="); - if (vga) - { - char *value = vga + 4; - int vid_mode; - - /* Handle special strings. */ - if (substring ("normal", value) < 1) - vid_mode = LINUX_VID_MODE_NORMAL; - else if (substring ("ext", value) < 1) - vid_mode = LINUX_VID_MODE_EXTENDED; - else if (substring ("ask", value) < 1) - vid_mode = LINUX_VID_MODE_ASK; - else if (safe_parse_maxint (&value, &vid_mode)) - ; - else - { - /* ERRNUM is already set inside the function - safe_parse_maxint. */ - grub_close (); - return KERNEL_TYPE_NONE; - } - - lh->vid_mode = vid_mode; - } - } - - /* Check the mem= option to limit memory used for initrd. */ - { - char *mem; - - mem = grub_strstr (arg, "mem="); - if (mem) - { - char *value = mem + 4; - - safe_parse_maxint (&value, &linux_mem_size); - switch (errnum) - { - case ERR_NUMBER_OVERFLOW: - /* If an overflow occurs, use the maximum address for - initrd instead. This is good, because MAXINT is - greater than LINUX_INITRD_MAX_ADDRESS. */ - linux_mem_size = LINUX_INITRD_MAX_ADDRESS; - errnum = ERR_NONE; - break; - - case ERR_NONE: - { - int shift = 0; - - switch (grub_tolower (*value)) - { - case 'g': - shift += 10; - case 'm': - shift += 10; - case 'k': - shift += 10; - default: - break; - } - - /* Check an overflow. */ - if (linux_mem_size > (MAXINT >> shift)) - linux_mem_size = LINUX_INITRD_MAX_ADDRESS; - else - linux_mem_size <<= shift; - } - break; - - default: - linux_mem_size = 0; - errnum = ERR_NONE; - break; - } - } - else - linux_mem_size = 0; - } - - /* It is possible that DATA_LEN + SECTOR_SIZE is greater than - MULTIBOOT_SEARCH, so the data may have been read partially. */ - if (data_len + SECTOR_SIZE <= MULTIBOOT_SEARCH) - grub_memmove (linux_data_tmp_addr, buffer, - data_len + SECTOR_SIZE); - else - { - grub_memmove (linux_data_tmp_addr, buffer, MULTIBOOT_SEARCH); - grub_read (linux_data_tmp_addr + MULTIBOOT_SEARCH, - data_len + SECTOR_SIZE - MULTIBOOT_SEARCH); - } - - if (lh->header != LINUX_MAGIC_SIGNATURE || - lh->version < 0x0200) - /* Clear the heap space. */ - grub_memset (linux_data_tmp_addr + ((setup_sects + 1) << 9), - 0, - (64 - setup_sects - 1) << 9); - - /* Copy command-line plus memory hack to staging area. - NOTE: Linux has a bug that it doesn't handle multiple spaces - between two options and a space after a "mem=" option isn't - removed correctly so the arguments to init could be like - {"init", "", "", NULL}. This affects some not-very-clever - shells. Thus, the code below does a trick to avoid the bug. - That is, copy "mem=XXX" to the end of the command-line, and - avoid to copy spaces unnecessarily. Hell. */ - { - char *src = skip_to (0, arg); - char *dest = linux_data_tmp_addr + LINUX_CL_OFFSET; - - while (dest < linux_data_tmp_addr + LINUX_CL_END_OFFSET && *src) - *(dest++) = *(src++); - - /* Old Linux kernels have problems determining the amount of - the available memory. To work around this problem, we add - the "mem" option to the kernel command line. This has its - own drawbacks because newer kernels can determine the - memory map more accurately. Boot protocol 2.03, which - appeared in Linux 2.4.18, provides a pointer to the kernel - version string, so we could check it. But since kernel - 2.4.18 and newer are known to detect memory reliably, boot - protocol 2.03 already implies that the kernel is new - enough. The "mem" option is added if neither of the - following conditions is met: - 1) The "mem" option is already present. - 2) The "kernel" command is used with "--no-mem-option". - 3) GNU GRUB is configured not to pass the "mem" option. - 4) The kernel supports boot protocol 2.03 or newer. */ - if (! grub_strstr (arg, "mem=") - && ! (load_flags & KERNEL_LOAD_NO_MEM_OPTION) - && lh->version < 0x0203 /* kernel version < 2.4.18 */ - && dest + 15 < linux_data_tmp_addr + LINUX_CL_END_OFFSET) - { - *dest++ = ' '; - *dest++ = 'm'; - *dest++ = 'e'; - *dest++ = 'm'; - *dest++ = '='; - - dest = convert_to_ascii (dest, 'u', (extended_memory + 0x400)); - *dest++ = 'K'; - } - - *dest = 0; - } - - /* offset into file */ - grub_seek (data_len + SECTOR_SIZE); - - cur_addr = (int) linux_data_tmp_addr + LINUX_SETUP_MOVE_SIZE; - grub_read ((char *) LINUX_BZIMAGE_ADDR, text_len); - - if (errnum == ERR_NONE) - { - grub_close (); - - /* Sanity check. */ - if (suggested_type != KERNEL_TYPE_NONE - && ((big_linux && suggested_type != KERNEL_TYPE_BIG_LINUX) - || (! big_linux && suggested_type != KERNEL_TYPE_LINUX))) - { - errnum = ERR_EXEC_FORMAT; - return KERNEL_TYPE_NONE; - } - - /* Ugly hack. */ - linux_text_len = text_len; - - return big_linux ? KERNEL_TYPE_BIG_LINUX : KERNEL_TYPE_LINUX; - } - } - } - else /* no recognizable format */ - errnum = ERR_EXEC_FORMAT; - - /* return if error */ - if (errnum) - { - grub_close (); - return KERNEL_TYPE_NONE; - } - - /* fill the multiboot info structure */ - mbi.cmdline = (int) arg; - mbi.mods_count = 0; - mbi.mods_addr = 0; - mbi.boot_device = (current_drive << 24) | current_partition; - mbi.flags &= ~(MB_INFO_MODS | MB_INFO_AOUT_SYMS | MB_INFO_ELF_SHDR); - mbi.syms.a.tabsize = 0; - mbi.syms.a.strsize = 0; - mbi.syms.a.addr = 0; - mbi.syms.a.pad = 0; - - printf (" [%s-%s", str2, str); - - str = ""; - - if (exec_type) /* can be loaded like a.out */ - { - if (flags & MULTIBOOT_AOUT_KLUDGE) - str = "-and-data"; - - printf (", loadaddr=0x%x, text%s=0x%x", cur_addr, str, text_len); - - /* read text, then read data */ - if (grub_read ((char *) RAW_ADDR (cur_addr), text_len) == text_len) - { - cur_addr += text_len; - - if (!(flags & MULTIBOOT_AOUT_KLUDGE)) - { - /* we have to align to a 4K boundary */ - if (align_4k) - cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000; - else - printf (", C"); - - printf (", data=0x%x", data_len); - - if ((grub_read ((char *) RAW_ADDR (cur_addr), data_len) - != data_len) - && !errnum) - errnum = ERR_EXEC_FORMAT; - cur_addr += data_len; - } - - if (!errnum) - { - memset ((char *) RAW_ADDR (cur_addr), 0, bss_len); - cur_addr += bss_len; - - printf (", bss=0x%x", bss_len); - } - } - else if (!errnum) - errnum = ERR_EXEC_FORMAT; - - if (!errnum && pu.aout->a_syms - && pu.aout->a_syms < (filemax - filepos)) - { - int symtab_err, orig_addr = cur_addr; - - /* we should align to a 4K boundary here for good measure */ - if (align_4k) - cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000; - - mbi.syms.a.addr = cur_addr; - - *((int *) RAW_ADDR (cur_addr)) = pu.aout->a_syms; - cur_addr += sizeof (int); - - printf (", symtab=0x%x", pu.aout->a_syms); - - if (grub_read ((char *) RAW_ADDR (cur_addr), pu.aout->a_syms) - == pu.aout->a_syms) - { - cur_addr += pu.aout->a_syms; - mbi.syms.a.tabsize = pu.aout->a_syms; - - if (grub_read ((char *) &i, sizeof (int)) == sizeof (int)) - { - *((int *) RAW_ADDR (cur_addr)) = i; - cur_addr += sizeof (int); - - mbi.syms.a.strsize = i; - - i -= sizeof (int); - - printf (", strtab=0x%x", i); - - symtab_err = (grub_read ((char *) RAW_ADDR (cur_addr), i) - != i); - cur_addr += i; - } - else - symtab_err = 1; - } - else - symtab_err = 1; - - if (symtab_err) - { - printf ("(bad)"); - cur_addr = orig_addr; - mbi.syms.a.tabsize = 0; - mbi.syms.a.strsize = 0; - mbi.syms.a.addr = 0; - } - else - mbi.flags |= MB_INFO_AOUT_SYMS; - } - } - else - /* ELF executable */ - { - unsigned loaded = 0, memaddr, memsiz, filesiz; - Elf32_Phdr *phdr; - - /* reset this to zero for now */ - cur_addr = 0; - - /* scan for program segments */ - for (i = 0; i < pu.elf->e_phnum; i++) - { - phdr = (Elf32_Phdr *) - (pu.elf->e_phoff + ((int) buffer) - + (pu.elf->e_phentsize * i)); - if (phdr->p_type == PT_LOAD) - { - /* offset into file */ - grub_seek (phdr->p_offset); - filesiz = phdr->p_filesz; - - if (type == KERNEL_TYPE_FREEBSD || type == KERNEL_TYPE_NETBSD) - memaddr = RAW_ADDR (phdr->p_paddr & 0xFFFFFF); - else - memaddr = RAW_ADDR (phdr->p_paddr); - - memsiz = phdr->p_memsz; - if (memaddr < RAW_ADDR (0x100000)) - errnum = ERR_BELOW_1MB; - - /* If the memory range contains the entry address, get the - physical address here. */ - if (type == KERNEL_TYPE_MULTIBOOT - && (unsigned) entry_addr >= phdr->p_vaddr - && (unsigned) entry_addr < phdr->p_vaddr + memsiz) - real_entry_addr = (entry_func) ((unsigned) entry_addr - + memaddr - phdr->p_vaddr); - - /* make sure we only load what we're supposed to! */ - if (filesiz > memsiz) - filesiz = memsiz; - /* mark memory as used */ - if (cur_addr < memaddr + memsiz) - cur_addr = memaddr + memsiz; - printf (", <0x%x:0x%x:0x%x>", memaddr, filesiz, - memsiz - filesiz); - /* increment number of segments */ - loaded++; - - /* load the segment */ - if (memcheck (memaddr, memsiz) - && grub_read ((char *) memaddr, filesiz) == filesiz) - { - if (memsiz > filesiz) - memset ((char *) (memaddr + filesiz), 0, memsiz - filesiz); - } - else - break; - } - } - - if (! errnum) - { - if (! loaded) - errnum = ERR_EXEC_FORMAT; - else - { - /* Load ELF symbols. */ - Elf32_Shdr *shdr = NULL; - int tab_size, sec_size; - int symtab_err = 0; - - mbi.syms.e.num = pu.elf->e_shnum; - mbi.syms.e.size = pu.elf->e_shentsize; - mbi.syms.e.shndx = pu.elf->e_shstrndx; - - /* We should align to a 4K boundary here for good measure. */ - if (align_4k) - cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000; - - tab_size = pu.elf->e_shentsize * pu.elf->e_shnum; - - grub_seek (pu.elf->e_shoff); - if (grub_read ((char *) RAW_ADDR (cur_addr), tab_size) - == tab_size) - { - mbi.syms.e.addr = cur_addr; - shdr = (Elf32_Shdr *) mbi.syms.e.addr; - cur_addr += tab_size; - - printf (", shtab=0x%x", cur_addr); - - for (i = 0; i < mbi.syms.e.num; i++) - { - /* This section is a loaded section, - so we don't care. */ - if (shdr[i].sh_addr != 0) - continue; - - /* This section is empty, so we don't care. */ - if (shdr[i].sh_size == 0) - continue; - - /* Align the section to a sh_addralign bits boundary. */ - cur_addr = ((cur_addr + shdr[i].sh_addralign) & - - (int) shdr[i].sh_addralign); - - grub_seek (shdr[i].sh_offset); - - sec_size = shdr[i].sh_size; - - if (! (memcheck (cur_addr, sec_size) - && (grub_read ((char *) RAW_ADDR (cur_addr), - sec_size) - == sec_size))) - { - symtab_err = 1; - break; - } - - shdr[i].sh_addr = cur_addr; - cur_addr += sec_size; - } - } - else - symtab_err = 1; - - if (mbi.syms.e.addr < RAW_ADDR(0x10000)) - symtab_err = 1; - - if (symtab_err) - { - printf ("(bad)"); - mbi.syms.e.num = 0; - mbi.syms.e.size = 0; - mbi.syms.e.addr = 0; - mbi.syms.e.shndx = 0; - cur_addr = 0; - } - else - mbi.flags |= MB_INFO_ELF_SHDR; - } - } - } - - if (! errnum) - { - grub_printf (", entry=0x%x]\n", (unsigned) entry_addr); - - /* If the entry address is physically different from that of the ELF - header, correct it here. */ - if (real_entry_addr) - entry_addr = real_entry_addr; - } - else - { - putchar ('\n'); - type = KERNEL_TYPE_NONE; - } - - grub_close (); - - /* Sanity check. */ - if (suggested_type != KERNEL_TYPE_NONE && suggested_type != type) - { - errnum = ERR_EXEC_FORMAT; - return KERNEL_TYPE_NONE; - } - - return type; -} - -int -load_module (char *module, char *arg) -{ - int len; - - /* if we are supposed to load on 4K boundaries */ - cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000; - - if (!grub_open (module)) - return 0; - - len = grub_read ((char *) cur_addr, -1); - if (! len) - { - grub_close (); - return 0; - } - - printf (" [Multiboot-module @ 0x%x, 0x%x bytes]\n", cur_addr, len); - - /* these two simply need to be set if any modules are loaded at all */ - mbi.flags |= MB_INFO_MODS; - mbi.mods_addr = (int) mll; - - mll[mbi.mods_count].cmdline = (int) arg; - mll[mbi.mods_count].mod_start = cur_addr; - cur_addr += len; - mll[mbi.mods_count].mod_end = cur_addr; - mll[mbi.mods_count].pad = 0; - - /* increment number of modules included */ - mbi.mods_count++; - - grub_close (); - return 1; -} - -int -load_initrd (char *initrd) -{ - int len; - unsigned long moveto; - unsigned long max_addr; - struct linux_kernel_header *lh - = (struct linux_kernel_header *) (cur_addr - LINUX_SETUP_MOVE_SIZE); - -#ifndef NO_DECOMPRESSION - no_decompression = 1; -#endif - - if (! grub_open (initrd)) - goto fail; - - len = grub_read ((char *) cur_addr, -1); - if (! len) - { - grub_close (); - goto fail; - } - - if (linux_mem_size) - moveto = linux_mem_size; - else - moveto = (mbi.mem_upper + 0x400) << 10; - - moveto = (moveto - len) & 0xfffff000; - max_addr = (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0203 - ? lh->initrd_addr_max : LINUX_INITRD_MAX_ADDRESS); - if (moveto + len >= max_addr) - moveto = (max_addr - len) & 0xfffff000; - - /* XXX: Linux 2.3.xx has a bug in the memory range check, so avoid - the last page. - XXX: Linux 2.2.xx has a bug in the memory range check, which is - worse than that of Linux 2.3.xx, so avoid the last 64kb. *sigh* */ - moveto -= 0x10000; - memmove ((void *) RAW_ADDR (moveto), (void *) cur_addr, len); - - printf (" [Linux-initrd @ 0x%x, 0x%x bytes]\n", moveto, len); - - /* FIXME: Should check if the kernel supports INITRD. */ - lh->ramdisk_image = RAW_ADDR (moveto); - lh->ramdisk_size = len; - - grub_close (); - - fail: - -#ifndef NO_DECOMPRESSION - no_decompression = 0; -#endif - - return ! errnum; -} - - -#ifdef GRUB_UTIL -/* Dummy function to fake the *BSD boot. */ -static void -bsd_boot_entry (int flags, int bootdev, int sym_start, int sym_end, - int mem_upper, int mem_lower) -{ - stop (); -} -#endif - - -/* - * All "*_boot" commands depend on the images being loaded into memory - * correctly, the variables in this file being set up correctly, and - * the root partition being set in the 'saved_drive' and 'saved_partition' - * variables. - */ - - -void -bsd_boot (kernel_t type, int bootdev, char *arg) -{ - char *str; - int clval = 0, i; - struct bootinfo bi; - -#ifdef GRUB_UTIL - entry_addr = (entry_func) bsd_boot_entry; -#else - stop_floppy (); -#endif - - while (*(++arg) && *arg != ' '); - str = arg; - while (*str) - { - if (*str == '-') - { - while (*str && *str != ' ') - { - if (*str == 'C') - clval |= RB_CDROM; - if (*str == 'a') - clval |= RB_ASKNAME; - if (*str == 'b') - clval |= RB_HALT; - if (*str == 'c') - clval |= RB_CONFIG; - if (*str == 'd') - clval |= RB_KDB; - if (*str == 'D') - clval |= RB_MULTIPLE; - if (*str == 'g') - clval |= RB_GDB; - if (*str == 'h') - clval |= RB_SERIAL; - if (*str == 'm') - clval |= RB_MUTE; - if (*str == 'r') - clval |= RB_DFLTROOT; - if (*str == 's') - clval |= RB_SINGLE; - if (*str == 'v') - clval |= RB_VERBOSE; - str++; - } - continue; - } - str++; - } - - if (type == KERNEL_TYPE_FREEBSD) - { - clval |= RB_BOOTINFO; - - bi.bi_version = BOOTINFO_VERSION; - - *arg = 0; - while ((--arg) > (char *) MB_CMDLINE_BUF && *arg != '/'); - if (*arg == '/') - bi.bi_kernelname = arg + 1; - else - bi.bi_kernelname = 0; - - bi.bi_nfs_diskless = 0; - bi.bi_n_bios_used = 0; /* this field is apparently unused */ - - for (i = 0; i < N_BIOS_GEOM; i++) - { - struct geometry geom; - - /* XXX Should check the return value. */ - get_diskinfo (i + 0x80, &geom); - /* FIXME: If HEADS or SECTORS is greater than 255, then this will - break the geometry information. That is a drawback of BSD - but not of GRUB. */ - bi.bi_bios_geom[i] = (((geom.cylinders - 1) << 16) - + (((geom.heads - 1) & 0xff) << 8) - + (geom.sectors & 0xff)); - } - - bi.bi_size = sizeof (struct bootinfo); - bi.bi_memsizes_valid = 1; - bi.bi_bios_dev = saved_drive; - bi.bi_basemem = mbi.mem_lower; - bi.bi_extmem = extended_memory; - - if (mbi.flags & MB_INFO_AOUT_SYMS) - { - bi.bi_symtab = mbi.syms.a.addr; - bi.bi_esymtab = mbi.syms.a.addr + 4 - + mbi.syms.a.tabsize + mbi.syms.a.strsize; - } -#if 0 - else if (mbi.flags & MB_INFO_ELF_SHDR) - { - /* FIXME: Should check if a symbol table exists and, if exists, - pass the table to BI. */ - } -#endif - else - { - bi.bi_symtab = 0; - bi.bi_esymtab = 0; - } - - /* call entry point */ - (*entry_addr) (clval, bootdev, 0, 0, 0, ((int) (&bi))); - } - else - { - /* - * We now pass the various bootstrap parameters to the loaded - * image via the argument list. - * - * This is the official list: - * - * arg0 = 8 (magic) - * arg1 = boot flags - * arg2 = boot device - * arg3 = start of symbol table (0 if not loaded) - * arg4 = end of symbol table (0 if not loaded) - * arg5 = transfer address from image - * arg6 = transfer address for next image pointer - * arg7 = conventional memory size (640) - * arg8 = extended memory size (8196) - * - * ...in actuality, we just pass the parameters used by the kernel. - */ - - /* call entry point */ - unsigned long end_mark; - - if (mbi.flags & MB_INFO_AOUT_SYMS) - end_mark = (mbi.syms.a.addr + 4 - + mbi.syms.a.tabsize + mbi.syms.a.strsize); - else - /* FIXME: it should be mbi.syms.e.size. */ - end_mark = 0; - - (*entry_addr) (clval, bootdev, 0, end_mark, - extended_memory, mbi.mem_lower); - } -} diff --git a/stage2/builtins.c b/stage2/builtins.c deleted file mode 100644 index 0d92bec28..000000000 --- a/stage2/builtins.c +++ /dev/null @@ -1,4884 +0,0 @@ -/* builtins.c - the GRUB builtin commands */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* Include stdio.h before shared.h, because we can't define - WITHOUT_LIBC_STUBS here. */ -#ifdef GRUB_UTIL -# include -#endif - -#include -#include -#include - -#ifdef SUPPORT_NETBOOT -# define GRUB 1 -# include -#endif - -#ifdef SUPPORT_SERIAL -# include -# include -#endif - -#ifdef GRUB_UTIL -# include -#else /* ! GRUB_UTIL */ -# include -# include -#endif /* ! GRUB_UTIL */ - -#ifdef USE_MD5_PASSWORDS -# include -#endif - -/* The type of kernel loaded. */ -kernel_t kernel_type; -/* The boot device. */ -static int bootdev; -/* True when the debug mode is turned on, and false - when it is turned off. */ -int debug = 0; -/* The default entry. */ -int default_entry = 0; -/* The fallback entry. */ -int fallback_entryno; -int fallback_entries[MAX_FALLBACK_ENTRIES]; -/* The number of current entry. */ -int current_entryno; -/* The address for Multiboot command-line buffer. */ -static char *mb_cmdline; -/* The password. */ -char *password; -/* The password type. */ -password_t password_type; -/* The flag for indicating that the user is authoritative. */ -int auth = 0; -/* The timeout. */ -int grub_timeout = -1; -/* Whether to show the menu or not. */ -int show_menu = 1; -/* The BIOS drive map. */ -static unsigned short bios_drive_map[DRIVE_MAP_SIZE + 1]; - -/* Prototypes for allowing straightfoward calling of builtins functions - inside other functions. */ -static int configfile_func (char *arg, int flags); - -/* Initialize the data for builtins. */ -void -init_builtins (void) -{ - kernel_type = KERNEL_TYPE_NONE; - /* BSD and chainloading evil hacks! */ - bootdev = set_bootdev (0); - mb_cmdline = (char *) MB_CMDLINE_BUF; -} - -/* Initialize the data for the configuration file. */ -void -init_config (void) -{ - default_entry = 0; - password = 0; - fallback_entryno = -1; - fallback_entries[0] = -1; - grub_timeout = -1; -} - -/* Check a password for correctness. Returns 0 if password was - correct, and a value != 0 for error, similarly to strcmp. */ -int -check_password (char *entered, char* expected, password_t type) -{ - switch (type) - { - case PASSWORD_PLAIN: - return strcmp (entered, expected); - -#ifdef USE_MD5_PASSWORDS - case PASSWORD_MD5: - return check_md5_password (entered, expected); -#endif - default: - /* unsupported password type: be secure */ - return 1; - } -} - -/* Print which sector is read when loading a file. */ -static void -disk_read_print_func (int sector, int offset, int length) -{ - grub_printf ("[%d,%d,%d]", sector, offset, length); -} - - -/* blocklist */ -static int -blocklist_func (char *arg, int flags) -{ - char *dummy = (char *) RAW_ADDR (0x100000); - int start_sector; - int num_sectors = 0; - int num_entries = 0; - int last_length = 0; - - auto void disk_read_blocklist_func (int sector, int offset, int length); - - /* Collect contiguous blocks into one entry as many as possible, - and print the blocklist notation on the screen. */ - auto void disk_read_blocklist_func (int sector, int offset, int length) - { - if (num_sectors > 0) - { - if (start_sector + num_sectors == sector - && offset == 0 && last_length == SECTOR_SIZE) - { - num_sectors++; - last_length = length; - return; - } - else - { - if (last_length == SECTOR_SIZE) - grub_printf ("%s%d+%d", num_entries ? "," : "", - start_sector - part_start, num_sectors); - else if (num_sectors > 1) - grub_printf ("%s%d+%d,%d[0-%d]", num_entries ? "," : "", - start_sector - part_start, num_sectors-1, - start_sector + num_sectors-1 - part_start, - last_length); - else - grub_printf ("%s%d[0-%d]", num_entries ? "," : "", - start_sector - part_start, last_length); - num_entries++; - num_sectors = 0; - } - } - - if (offset > 0) - { - grub_printf("%s%d[%d-%d]", num_entries ? "," : "", - sector-part_start, offset, offset+length); - num_entries++; - } - else - { - start_sector = sector; - num_sectors = 1; - last_length = length; - } - } - - /* Open the file. */ - if (! grub_open (arg)) - return 1; - - /* Print the device name. */ - grub_printf ("(%cd%d", - (current_drive & 0x80) ? 'h' : 'f', - current_drive & ~0x80); - - if ((current_partition & 0xFF0000) != 0xFF0000) - grub_printf (",%d", (current_partition >> 16) & 0xFF); - - if ((current_partition & 0x00FF00) != 0x00FF00) - grub_printf (",%c", 'a' + ((current_partition >> 8) & 0xFF)); - - grub_printf (")"); - - /* Read in the whole file to DUMMY. */ - disk_read_hook = disk_read_blocklist_func; - if (! grub_read (dummy, -1)) - goto fail; - - /* The last entry may not be printed yet. Don't check if it is a - * full sector, since it doesn't matter if we read too much. */ - if (num_sectors > 0) - grub_printf ("%s%d+%d", num_entries ? "," : "", - start_sector - part_start, num_sectors); - - grub_printf ("\n"); - - fail: - disk_read_hook = 0; - grub_close (); - return errnum; -} - -static struct builtin builtin_blocklist = -{ - "blocklist", - blocklist_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "blocklist FILE", - "Print the blocklist notation of the file FILE." -}; - -/* boot */ -static int -boot_func (char *arg, int flags) -{ - /* Clear the int15 handler if we can boot the kernel successfully. - This assumes that the boot code never fails only if KERNEL_TYPE is - not KERNEL_TYPE_NONE. Is this assumption is bad? */ - if (kernel_type != KERNEL_TYPE_NONE) - unset_int15_handler (); - -#ifdef SUPPORT_NETBOOT - /* Shut down the networking. */ - cleanup_net (); -#endif - - switch (kernel_type) - { - case KERNEL_TYPE_FREEBSD: - case KERNEL_TYPE_NETBSD: - /* *BSD */ - bsd_boot (kernel_type, bootdev, (char *) mbi.cmdline); - break; - - case KERNEL_TYPE_LINUX: - /* Linux */ - linux_boot (); - break; - - case KERNEL_TYPE_BIG_LINUX: - /* Big Linux */ - big_linux_boot (); - break; - - case KERNEL_TYPE_CHAINLOADER: - /* Chainloader */ - - /* Check if we should set the int13 handler. */ - if (bios_drive_map[0] != 0) - { - int i; - - /* Search for SAVED_DRIVE. */ - for (i = 0; i < DRIVE_MAP_SIZE; i++) - { - if (! bios_drive_map[i]) - break; - else if ((bios_drive_map[i] & 0xFF) == saved_drive) - { - /* Exchage SAVED_DRIVE with the mapped drive. */ - saved_drive = (bios_drive_map[i] >> 8) & 0xFF; - break; - } - } - - /* Set the handler. This is somewhat dangerous. */ - set_int13_handler (bios_drive_map); - } - - gateA20 (0); - boot_drive = saved_drive; - chain_stage1 (0, BOOTSEC_LOCATION, boot_part_addr); - break; - - case KERNEL_TYPE_MULTIBOOT: - /* Multiboot */ - multi_boot ((int) entry_addr, (int) &mbi); - break; - - default: - errnum = ERR_BOOT_COMMAND; - return 1; - } - - return 0; -} - -static struct builtin builtin_boot = -{ - "boot", - boot_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "boot", - "Boot the OS/chain-loader which has been loaded." -}; - - -#ifdef SUPPORT_NETBOOT -/* bootp */ -static int -bootp_func (char *arg, int flags) -{ - int with_configfile = 0; - - if (grub_memcmp (arg, "--with-configfile", sizeof ("--with-configfile") - 1) - == 0) - { - with_configfile = 1; - arg = skip_to (0, arg); - } - - if (! bootp ()) - { - if (errnum == ERR_NONE) - errnum = ERR_DEV_VALUES; - - return 1; - } - - /* Notify the configuration. */ - print_network_configuration (); - - /* XXX: this can cause an endless loop, but there is no easy way to - detect such a loop unfortunately. */ - if (with_configfile) - configfile_func (config_file, flags); - - return 0; -} - -static struct builtin builtin_bootp = -{ - "bootp", - bootp_func, - BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, - "bootp [--with-configfile]", - "Initialize a network device via BOOTP. If the option `--with-configfile'" - " is given, try to load a configuration file specified by the 150 vendor" - " tag." -}; -#endif /* SUPPORT_NETBOOT */ - - -/* cat */ -static int -cat_func (char *arg, int flags) -{ - char c; - - if (! grub_open (arg)) - return 1; - - while (grub_read (&c, 1)) - { - /* Because running "cat" with a binary file can confuse the terminal, - print only some characters as they are. */ - if (grub_isspace (c) || (c >= ' ' && c <= '~')) - grub_putchar (c); - else - grub_putchar ('?'); - } - - grub_close (); - return 0; -} - -static struct builtin builtin_cat = -{ - "cat", - cat_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "cat FILE", - "Print the contents of the file FILE." -}; - - -/* chainloader */ -static int -chainloader_func (char *arg, int flags) -{ - int force = 0; - char *file = arg; - - /* If the option `--force' is specified? */ - if (substring ("--force", arg) <= 0) - { - force = 1; - file = skip_to (0, arg); - } - - /* Open the file. */ - if (! grub_open (file)) - { - kernel_type = KERNEL_TYPE_NONE; - return 1; - } - - /* Read the first block. */ - if (grub_read ((char *) BOOTSEC_LOCATION, SECTOR_SIZE) != SECTOR_SIZE) - { - grub_close (); - kernel_type = KERNEL_TYPE_NONE; - - /* This below happens, if a file whose size is less than 512 bytes - is loaded. */ - if (errnum == ERR_NONE) - errnum = ERR_EXEC_FORMAT; - - return 1; - } - - /* If not loading it forcibly, check for the signature. */ - if (! force - && (*((unsigned short *) (BOOTSEC_LOCATION + BOOTSEC_SIG_OFFSET)) - != BOOTSEC_SIGNATURE)) - { - grub_close (); - errnum = ERR_EXEC_FORMAT; - kernel_type = KERNEL_TYPE_NONE; - return 1; - } - - grub_close (); - kernel_type = KERNEL_TYPE_CHAINLOADER; - - /* XXX: Windows evil hack. For now, only the first five letters are - checked. */ - if (IS_PC_SLICE_TYPE_FAT (current_slice) - && ! grub_memcmp ((char *) BOOTSEC_LOCATION + BOOTSEC_BPB_SYSTEM_ID, - "MSWIN", 5)) - *((unsigned long *) (BOOTSEC_LOCATION + BOOTSEC_BPB_HIDDEN_SECTORS)) - = part_start; - - errnum = ERR_NONE; - - return 0; -} - -static struct builtin builtin_chainloader = -{ - "chainloader", - chainloader_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "chainloader [--force] FILE", - "Load the chain-loader FILE. If --force is specified, then load it" - " forcibly, whether the boot loader signature is present or not." -}; - - -/* This function could be used to debug new filesystem code. Put a file - in the new filesystem and the same file in a well-tested filesystem. - Then, run "cmp" with the files. If no output is obtained, probably - the code is good, otherwise investigate what's wrong... */ -/* cmp FILE1 FILE2 */ -static int -cmp_func (char *arg, int flags) -{ - /* The filenames. */ - char *file1, *file2; - /* The addresses. */ - char *addr1, *addr2; - int i; - /* The size of the file. */ - int size; - - /* Get the filenames from ARG. */ - file1 = arg; - file2 = skip_to (0, arg); - if (! *file1 || ! *file2) - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - /* Terminate the filenames for convenience. */ - nul_terminate (file1); - nul_terminate (file2); - - /* Read the whole data from FILE1. */ - addr1 = (char *) RAW_ADDR (0x100000); - if (! grub_open (file1)) - return 1; - - /* Get the size. */ - size = filemax; - if (grub_read (addr1, -1) != size) - { - grub_close (); - return 1; - } - - grub_close (); - - /* Read the whole data from FILE2. */ - addr2 = addr1 + size; - if (! grub_open (file2)) - return 1; - - /* Check if the size of FILE2 is equal to the one of FILE2. */ - if (size != filemax) - { - grub_printf ("Differ in size: 0x%x [%s], 0x%x [%s]\n", - size, file1, filemax, file2); - grub_close (); - return 0; - } - - if (! grub_read (addr2, -1)) - { - grub_close (); - return 1; - } - - grub_close (); - - /* Now compare ADDR1 with ADDR2. */ - for (i = 0; i < size; i++) - { - if (addr1[i] != addr2[i]) - grub_printf ("Differ at the offset %d: 0x%x [%s], 0x%x [%s]\n", - i, (unsigned) addr1[i], file1, - (unsigned) addr2[i], file2); - } - - return 0; -} - -static struct builtin builtin_cmp = -{ - "cmp", - cmp_func, - BUILTIN_CMDLINE, - "cmp FILE1 FILE2", - "Compare the file FILE1 with the FILE2 and inform the different values" - " if any." -}; - - -/* color */ -/* Set new colors used for the menu interface. Support two methods to - specify a color name: a direct integer representation and a symbolic - color name. An example of the latter is "blink-light-gray/blue". */ -static int -color_func (char *arg, int flags) -{ - char *normal; - char *highlight; - int new_normal_color; - int new_highlight_color; - static char *color_list[16] = - { - "black", - "blue", - "green", - "cyan", - "red", - "magenta", - "brown", - "light-gray", - "dark-gray", - "light-blue", - "light-green", - "light-cyan", - "light-red", - "light-magenta", - "yellow", - "white" - }; - - auto int color_number (char *str); - - /* Convert the color name STR into the magical number. */ - auto int color_number (char *str) - { - char *ptr; - int i; - int color = 0; - - /* Find the separator. */ - for (ptr = str; *ptr && *ptr != '/'; ptr++) - ; - - /* If not found, return -1. */ - if (! *ptr) - return -1; - - /* Terminate the string STR. */ - *ptr++ = 0; - - /* If STR contains the prefix "blink-", then set the `blink' bit - in COLOR. */ - if (substring ("blink-", str) <= 0) - { - color = 0x80; - str += 6; - } - - /* Search for the color name. */ - for (i = 0; i < 16; i++) - if (grub_strcmp (color_list[i], str) == 0) - { - color |= i; - break; - } - - if (i == 16) - return -1; - - str = ptr; - nul_terminate (str); - - /* Search for the color name. */ - for (i = 0; i < 8; i++) - if (grub_strcmp (color_list[i], str) == 0) - { - color |= i << 4; - break; - } - - if (i == 8) - return -1; - - return color; - } - - normal = arg; - highlight = skip_to (0, arg); - - new_normal_color = color_number (normal); - if (new_normal_color < 0 && ! safe_parse_maxint (&normal, &new_normal_color)) - return 1; - - /* The second argument is optional, so set highlight_color - to inverted NORMAL_COLOR. */ - if (! *highlight) - new_highlight_color = ((new_normal_color >> 4) - | ((new_normal_color & 0xf) << 4)); - else - { - new_highlight_color = color_number (highlight); - if (new_highlight_color < 0 - && ! safe_parse_maxint (&highlight, &new_highlight_color)) - return 1; - } - - if (current_term->setcolor) - current_term->setcolor (new_normal_color, new_highlight_color); - - return 0; -} - -static struct builtin builtin_color = -{ - "color", - color_func, - BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, - "color NORMAL [HIGHLIGHT]", - "Change the menu colors. The color NORMAL is used for most" - " lines in the menu, and the color HIGHLIGHT is used to highlight the" - " line where the cursor points. If you omit HIGHLIGHT, then the" - " inverted color of NORMAL is used for the highlighted line." - " The format of a color is \"FG/BG\". FG and BG are symbolic color names." - " A symbolic color name must be one of these: black, blue, green," - " cyan, red, magenta, brown, light-gray, dark-gray, light-blue," - " light-green, light-cyan, light-red, light-magenta, yellow and white." - " But only the first eight names can be used for BG. You can prefix" - " \"blink-\" to FG if you want a blinking foreground color." -}; - - -/* configfile */ -static int -configfile_func (char *arg, int flags) -{ - char *new_config = config_file; - - /* Check if the file ARG is present. */ - if (! grub_open (arg)) - return 1; - - grub_close (); - - /* Copy ARG to CONFIG_FILE. */ - while ((*new_config++ = *arg++) != 0) - ; - -#ifdef GRUB_UTIL - /* Force to load the configuration file. */ - use_config_file = 1; -#endif - - /* Make sure that the user will not be authoritative. */ - auth = 0; - - /* Restart cmain. */ - grub_longjmp (restart_env, 0); - - /* Never reach here. */ - return 0; -} - -static struct builtin builtin_configfile = -{ - "configfile", - configfile_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "configfile FILE", - "Load FILE as the configuration file." -}; - - -/* debug */ -static int -debug_func (char *arg, int flags) -{ - if (debug) - { - debug = 0; - grub_printf (" Debug mode is turned off\n"); - } - else - { - debug = 1; - grub_printf (" Debug mode is turned on\n"); - } - - return 0; -} - -static struct builtin builtin_debug = -{ - "debug", - debug_func, - BUILTIN_CMDLINE, - "debug", - "Turn on/off the debug mode." -}; - - -/* default */ -static int -default_func (char *arg, int flags) -{ -#ifndef SUPPORT_DISKLESS - if (grub_strcmp (arg, "saved") == 0) - { - default_entry = saved_entryno; - return 0; - } -#endif /* SUPPORT_DISKLESS */ - - if (! safe_parse_maxint (&arg, &default_entry)) - return 1; - - return 0; -} - -static struct builtin builtin_default = -{ - "default", - default_func, - BUILTIN_MENU, -#if 0 - "default [NUM | `saved']", - "Set the default entry to entry number NUM (if not specified, it is" - " 0, the first entry) or the entry number saved by savedefault." -#endif -}; - - -#ifdef GRUB_UTIL -/* device */ -static int -device_func (char *arg, int flags) -{ - char *drive = arg; - char *device; - - /* Get the drive number from DRIVE. */ - if (! set_device (drive)) - return 1; - - /* Get the device argument. */ - device = skip_to (0, drive); - - /* Terminate DEVICE. */ - nul_terminate (device); - - if (! *device || ! check_device (device)) - { - errnum = ERR_FILE_NOT_FOUND; - return 1; - } - - assign_device_name (current_drive, device); - - return 0; -} - -static struct builtin builtin_device = -{ - "device", - device_func, - BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "device DRIVE DEVICE", - "Specify DEVICE as the actual drive for a BIOS drive DRIVE. This command" - " can be used only in the grub shell." -}; -#endif /* GRUB_UTIL */ - - -#ifdef SUPPORT_NETBOOT -/* dhcp */ -static int -dhcp_func (char *arg, int flags) -{ - /* For now, this is an alias for bootp. */ - return bootp_func (arg, flags); -} - -static struct builtin builtin_dhcp = -{ - "dhcp", - dhcp_func, - BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, - "dhcp", - "Initialize a network device via DHCP." -}; -#endif /* SUPPORT_NETBOOT */ - - -/* displayapm */ -static int -displayapm_func (char *arg, int flags) -{ - if (mbi.flags & MB_INFO_APM_TABLE) - { - grub_printf ("APM BIOS information:\n" - " Version: 0x%x\n" - " 32-bit CS: 0x%x\n" - " Offset: 0x%x\n" - " 16-bit CS: 0x%x\n" - " 16-bit DS: 0x%x\n" - " 32-bit CS length: 0x%x\n" - " 16-bit CS length: 0x%x\n" - " 16-bit DS length: 0x%x\n", - (unsigned) apm_bios_info.version, - (unsigned) apm_bios_info.cseg, - apm_bios_info.offset, - (unsigned) apm_bios_info.cseg_16, - (unsigned) apm_bios_info.dseg_16, - (unsigned) apm_bios_info.cseg_len, - (unsigned) apm_bios_info.cseg_16_len, - (unsigned) apm_bios_info.dseg_16_len); - } - else - { - grub_printf ("No APM BIOS found or probe failed\n"); - } - - return 0; -} - -static struct builtin builtin_displayapm = -{ - "displayapm", - displayapm_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "displayapm", - "Display APM BIOS information." -}; - - -/* displaymem */ -static int -displaymem_func (char *arg, int flags) -{ - if (get_eisamemsize () != -1) - grub_printf (" EISA Memory BIOS Interface is present\n"); - if (get_mmap_entry ((void *) SCRATCHADDR, 0) != 0 - || *((int *) SCRATCHADDR) != 0) - grub_printf (" Address Map BIOS Interface is present\n"); - - grub_printf (" Lower memory: %uK, " - "Upper memory (to first chipset hole): %uK\n", - mbi.mem_lower, mbi.mem_upper); - - if (mbi.flags & MB_INFO_MEM_MAP) - { - struct AddrRangeDesc *map = (struct AddrRangeDesc *) mbi.mmap_addr; - int end_addr = mbi.mmap_addr + mbi.mmap_length; - - grub_printf (" [Address Range Descriptor entries " - "immediately follow (values are 64-bit)]\n"); - while (end_addr > (int) map) - { - char *str; - - if (map->Type == MB_ARD_MEMORY) - str = "Usable RAM"; - else - str = "Reserved"; - grub_printf (" %s: Base Address: 0x%x X 4GB + 0x%x,\n" - " Length: 0x%x X 4GB + 0x%x bytes\n", - str, - (unsigned long) (map->BaseAddr >> 32), - (unsigned long) (map->BaseAddr & 0xFFFFFFFF), - (unsigned long) (map->Length >> 32), - (unsigned long) (map->Length & 0xFFFFFFFF)); - - map = ((struct AddrRangeDesc *) (((int) map) + 4 + map->size)); - } - } - - return 0; -} - -static struct builtin builtin_displaymem = -{ - "displaymem", - displaymem_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "displaymem", - "Display what GRUB thinks the system address space map of the" - " machine is, including all regions of physical RAM installed." -}; - - -/* dump FROM TO */ -#ifdef GRUB_UTIL -static int -dump_func (char *arg, int flags) -{ - char *from, *to; - FILE *fp; - char c; - - from = arg; - to = skip_to (0, arg); - if (! *from || ! *to) - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - nul_terminate (from); - nul_terminate (to); - - if (! grub_open (from)) - return 1; - - fp = fopen (to, "w"); - if (! fp) - { - errnum = ERR_WRITE; - return 1; - } - - while (grub_read (&c, 1)) - if (fputc (c, fp) == EOF) - { - errnum = ERR_WRITE; - fclose (fp); - return 1; - } - - if (fclose (fp) == EOF) - { - errnum = ERR_WRITE; - return 1; - } - - grub_close (); - return 0; -} - -static struct builtin builtin_dump = - { - "dump", - dump_func, - BUILTIN_CMDLINE, - "dump FROM TO", - "Dump the contents of the file FROM to the file TO. FROM must be" - " a GRUB file and TO must be an OS file." - }; -#endif /* GRUB_UTIL */ - - -static char embed_info[32]; -/* embed */ -/* Embed a Stage 1.5 in the first cylinder after MBR or in the - bootloader block in a FFS. */ -static int -embed_func (char *arg, int flags) -{ - char *stage1_5; - char *device; - char *stage1_5_buffer = (char *) RAW_ADDR (0x100000); - int len, size; - int sector; - - stage1_5 = arg; - device = skip_to (0, stage1_5); - - /* Open a Stage 1.5. */ - if (! grub_open (stage1_5)) - return 1; - - /* Read the whole of the Stage 1.5. */ - len = grub_read (stage1_5_buffer, -1); - grub_close (); - - if (errnum) - return 1; - - size = (len + SECTOR_SIZE - 1) / SECTOR_SIZE; - - /* Get the device where the Stage 1.5 will be embedded. */ - set_device (device); - if (errnum) - return 1; - - if (current_partition == 0xFFFFFF) - { - /* Embed it after the MBR. */ - - char mbr[SECTOR_SIZE]; - char ezbios_check[2*SECTOR_SIZE]; - int i; - - /* Open the partition. */ - if (! open_partition ()) - return 1; - - /* No floppy has MBR. */ - if (! (current_drive & 0x80)) - { - errnum = ERR_DEV_VALUES; - return 1; - } - - /* Read the MBR of CURRENT_DRIVE. */ - if (! rawread (current_drive, PC_MBR_SECTOR, 0, SECTOR_SIZE, mbr)) - return 1; - - /* Sanity check. */ - if (! PC_MBR_CHECK_SIG (mbr)) - { - errnum = ERR_BAD_PART_TABLE; - return 1; - } - - /* Check if the disk can store the Stage 1.5. */ - for (i = 0; i < 4; i++) - if (PC_SLICE_TYPE (mbr, i) && PC_SLICE_START (mbr, i) - 1 < size) - { - errnum = ERR_NO_DISK_SPACE; - return 1; - } - - /* Check for EZ-BIOS signature. It should be in the third - * sector, but due to remapping it can appear in the second, so - * load and check both. - */ - if (! rawread (current_drive, 1, 0, 2 * SECTOR_SIZE, ezbios_check)) - return 1; - - if (! memcmp (ezbios_check + 3, "AERMH", 5) - || ! memcmp (ezbios_check + 512 + 3, "AERMH", 5)) - { - /* The space after the MBR is used by EZ-BIOS which we must - * not overwrite. - */ - errnum = ERR_NO_DISK_SPACE; - return 1; - } - - sector = 1; - } - else - { - /* Embed it in the bootloader block in the filesystem. */ - int start_sector; - - /* Open the partition. */ - if (! open_device ()) - return 1; - - /* Check if the current slice supports embedding. */ - if (fsys_table[fsys_type].embed_func == 0 - || ! fsys_table[fsys_type].embed_func (&start_sector, size)) - { - errnum = ERR_DEV_VALUES; - return 1; - } - - sector = part_start + start_sector; - } - - /* Clear the cache. */ - buf_track = -1; - - /* Now perform the embedding. */ - if (! devwrite (sector - part_start, size, stage1_5_buffer)) - return 1; - - grub_printf (" %d sectors are embedded.\n", size); - grub_sprintf (embed_info, "%d+%d", sector - part_start, size); - return 0; -} - -static struct builtin builtin_embed = -{ - "embed", - embed_func, - BUILTIN_CMDLINE, - "embed STAGE1_5 DEVICE", - "Embed the Stage 1.5 STAGE1_5 in the sectors after MBR if DEVICE" - " is a drive, or in the \"bootloader\" area if DEVICE is a FFS partition." - " Print the number of sectors which STAGE1_5 occupies if successful." -}; - - -/* fallback */ -static int -fallback_func (char *arg, int flags) -{ - int i = 0; - - while (*arg) - { - int entry; - int j; - - if (! safe_parse_maxint (&arg, &entry)) - return 1; - - /* Remove duplications to prevent infinite looping. */ - for (j = 0; j < i; j++) - if (entry == fallback_entries[j]) - break; - if (j != i) - continue; - - fallback_entries[i++] = entry; - if (i == MAX_FALLBACK_ENTRIES) - break; - - arg = skip_to (0, arg); - } - - if (i < MAX_FALLBACK_ENTRIES) - fallback_entries[i] = -1; - - fallback_entryno = (i == 0) ? -1 : 0; - - return 0; -} - -static struct builtin builtin_fallback = -{ - "fallback", - fallback_func, - BUILTIN_MENU, -#if 0 - "fallback NUM...", - "Go into unattended boot mode: if the default boot entry has any" - " errors, instead of waiting for the user to do anything, it" - " immediately starts over using the NUM entry (same numbering as the" - " `default' command). This obviously won't help if the machine" - " was rebooted by a kernel that GRUB loaded." -#endif -}; - - -/* find */ -/* Search for the filename ARG in all of partitions. */ -static int -find_func (char *arg, int flags) -{ - char *filename = arg; - unsigned long drive; - unsigned long tmp_drive = saved_drive; - unsigned long tmp_partition = saved_partition; - int got_file = 0; - - /* Floppies. */ - for (drive = 0; drive < 8; drive++) - { - current_drive = drive; - current_partition = 0xFFFFFF; - - if (open_device ()) - { - saved_drive = current_drive; - saved_partition = current_partition; - if (grub_open (filename)) - { - grub_close (); - grub_printf (" (fd%d)\n", drive); - got_file = 1; - } - } - - errnum = ERR_NONE; - } - - /* Hard disks. */ - for (drive = 0x80; drive < 0x88; drive++) - { - unsigned long part = 0xFFFFFF; - unsigned long start, len, offset, ext_offset; - int type, entry; - char buf[SECTOR_SIZE]; - - current_drive = drive; - while (next_partition (drive, 0xFFFFFF, &part, &type, - &start, &len, &offset, &entry, - &ext_offset, buf)) - { - if (type != PC_SLICE_TYPE_NONE - && ! IS_PC_SLICE_TYPE_BSD (type) - && ! IS_PC_SLICE_TYPE_EXTENDED (type)) - { - current_partition = part; - if (open_device ()) - { - saved_drive = current_drive; - saved_partition = current_partition; - if (grub_open (filename)) - { - int bsd_part = (part >> 8) & 0xFF; - int pc_slice = part >> 16; - - grub_close (); - - if (bsd_part == 0xFF) - grub_printf (" (hd%d,%d)\n", - drive - 0x80, pc_slice); - else - grub_printf (" (hd%d,%d,%c)\n", - drive - 0x80, pc_slice, bsd_part + 'a'); - - got_file = 1; - } - } - } - - /* We want to ignore any error here. */ - errnum = ERR_NONE; - } - - /* next_partition always sets ERRNUM in the last call, so clear - it. */ - errnum = ERR_NONE; - } - - saved_drive = tmp_drive; - saved_partition = tmp_partition; - - if (got_file) - { - errnum = ERR_NONE; - return 0; - } - - errnum = ERR_FILE_NOT_FOUND; - return 1; -} - -static struct builtin builtin_find = -{ - "find", - find_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "find FILENAME", - "Search for the filename FILENAME in all of partitions and print the list of" - " the devices which contain the file." -}; - - -/* fstest */ -static int -fstest_func (char *arg, int flags) -{ - if (disk_read_hook) - { - disk_read_hook = NULL; - printf (" Filesystem tracing is now off\n"); - } - else - { - disk_read_hook = disk_read_print_func; - printf (" Filesystem tracing is now on\n"); - } - - return 0; -} - -static struct builtin builtin_fstest = -{ - "fstest", - fstest_func, - BUILTIN_CMDLINE, - "fstest", - "Toggle filesystem test mode." -}; - - -/* geometry */ -static int -geometry_func (char *arg, int flags) -{ - struct geometry geom; - char *msg; - char *device = arg; -#ifdef GRUB_UTIL - char *ptr; -#endif - - /* Get the device number. */ - set_device (device); - if (errnum) - return 1; - - /* Check for the geometry. */ - if (get_diskinfo (current_drive, &geom)) - { - errnum = ERR_NO_DISK; - return 1; - } - - /* Attempt to read the first sector, because some BIOSes turns out not - to support LBA even though they set the bit 0 in the support - bitmap, only after reading something actually. */ - if (biosdisk (BIOSDISK_READ, current_drive, &geom, 0, 1, SCRATCHSEG)) - { - errnum = ERR_READ; - return 1; - } - -#ifdef GRUB_UTIL - ptr = skip_to (0, device); - if (*ptr) - { - char *cylinder, *head, *sector, *total_sector; - int num_cylinder, num_head, num_sector, num_total_sector; - - cylinder = ptr; - head = skip_to (0, cylinder); - sector = skip_to (0, head); - total_sector = skip_to (0, sector); - if (! safe_parse_maxint (&cylinder, &num_cylinder) - || ! safe_parse_maxint (&head, &num_head) - || ! safe_parse_maxint (§or, &num_sector)) - return 1; - - disks[current_drive].cylinders = num_cylinder; - disks[current_drive].heads = num_head; - disks[current_drive].sectors = num_sector; - - if (safe_parse_maxint (&total_sector, &num_total_sector)) - disks[current_drive].total_sectors = num_total_sector; - else - disks[current_drive].total_sectors - = num_cylinder * num_head * num_sector; - errnum = 0; - - geom = disks[current_drive]; - buf_drive = -1; - } -#endif /* GRUB_UTIL */ - -#ifdef GRUB_UTIL - msg = device_map[current_drive]; -#else - if (geom.flags & BIOSDISK_FLAG_LBA_EXTENSION) - msg = "LBA"; - else - msg = "CHS"; -#endif - - grub_printf ("drive 0x%x: C/H/S = %d/%d/%d, " - "The number of sectors = %d, %s\n", - current_drive, - geom.cylinders, geom.heads, geom.sectors, - geom.total_sectors, msg); - real_open_partition (1); - - return 0; -} - -static struct builtin builtin_geometry = -{ - "geometry", - geometry_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "geometry DRIVE [CYLINDER HEAD SECTOR [TOTAL_SECTOR]]", - "Print the information for a drive DRIVE. In the grub shell, you can" - " set the geometry of the drive arbitrarily. The number of the cylinders," - " the one of the heads, the one of the sectors and the one of the total" - " sectors are set to CYLINDER, HEAD, SECTOR and TOTAL_SECTOR," - " respectively. If you omit TOTAL_SECTOR, then it will be calculated based" - " on the C/H/S values automatically." -}; - - -/* halt */ -static int -halt_func (char *arg, int flags) -{ - int no_apm; - - no_apm = (grub_memcmp (arg, "--no-apm", 8) == 0); - grub_halt (no_apm); - - /* Never reach here. */ - return 1; -} - -static struct builtin builtin_halt = -{ - "halt", - halt_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "halt [--no-apm]", - "Halt your system. If APM is avaiable on it, turn off the power using" - " the APM BIOS, unless you specify the option `--no-apm'." -}; - - -/* help */ -#define MAX_SHORT_DOC_LEN 39 -#define MAX_LONG_DOC_LEN 66 - -static int -help_func (char *arg, int flags) -{ - int all = 0; - - if (grub_memcmp (arg, "--all", sizeof ("--all") - 1) == 0) - { - all = 1; - arg = skip_to (0, arg); - } - - if (! *arg) - { - /* Invoked with no argument. Print the list of the short docs. */ - struct builtin **builtin; - int left = 1; - - for (builtin = builtin_table; *builtin != 0; builtin++) - { - int len; - int i; - - /* If this cannot be used in the command-line interface, - skip this. */ - if (! ((*builtin)->flags & BUILTIN_CMDLINE)) - continue; - - /* If this doesn't need to be listed automatically and "--all" - is not specified, skip this. */ - if (! all && ! ((*builtin)->flags & BUILTIN_HELP_LIST)) - continue; - - len = grub_strlen ((*builtin)->short_doc); - /* If the length of SHORT_DOC is too long, truncate it. */ - if (len > MAX_SHORT_DOC_LEN - 1) - len = MAX_SHORT_DOC_LEN - 1; - - for (i = 0; i < len; i++) - grub_putchar ((*builtin)->short_doc[i]); - - for (; i < MAX_SHORT_DOC_LEN; i++) - grub_putchar (' '); - - if (! left) - grub_putchar ('\n'); - - left = ! left; - } - - /* If the last entry was at the left column, no newline was printed - at the end. */ - if (! left) - grub_putchar ('\n'); - } - else - { - /* Invoked with one or more patterns. */ - do - { - struct builtin **builtin; - char *next_arg; - - /* Get the next argument. */ - next_arg = skip_to (0, arg); - - /* Terminate ARG. */ - nul_terminate (arg); - - for (builtin = builtin_table; *builtin; builtin++) - { - /* Skip this if this is only for the configuration file. */ - if (! ((*builtin)->flags & BUILTIN_CMDLINE)) - continue; - - if (substring (arg, (*builtin)->name) < 1) - { - char *doc = (*builtin)->long_doc; - - /* At first, print the name and the short doc. */ - grub_printf ("%s: %s\n", - (*builtin)->name, (*builtin)->short_doc); - - /* Print the long doc. */ - while (*doc) - { - int len = grub_strlen (doc); - int i; - - /* If LEN is too long, fold DOC. */ - if (len > MAX_LONG_DOC_LEN) - { - /* Fold this line at the position of a space. */ - for (len = MAX_LONG_DOC_LEN; len > 0; len--) - if (doc[len - 1] == ' ') - break; - } - - grub_printf (" "); - for (i = 0; i < len; i++) - grub_putchar (*doc++); - grub_putchar ('\n'); - } - } - } - - arg = next_arg; - } - while (*arg); - } - - return 0; -} - -static struct builtin builtin_help = -{ - "help", - help_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "help [--all] [PATTERN ...]", - "Display helpful information about builtin commands. Not all commands" - " aren't shown without the option `--all'." -}; - - -/* hiddenmenu */ -static int -hiddenmenu_func (char *arg, int flags) -{ - show_menu = 0; - return 0; -} - -static struct builtin builtin_hiddenmenu = -{ - "hiddenmenu", - hiddenmenu_func, - BUILTIN_MENU, -#if 0 - "hiddenmenu", - "Hide the menu." -#endif -}; - - -/* hide */ -static int -hide_func (char *arg, int flags) -{ - if (! set_device (arg)) - return 1; - - if (! set_partition_hidden_flag (1)) - return 1; - - return 0; -} - -static struct builtin builtin_hide = -{ - "hide", - hide_func, - BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, - "hide PARTITION", - "Hide PARTITION by setting the \"hidden\" bit in" - " its partition type code." -}; - - -#ifdef SUPPORT_NETBOOT -/* ifconfig */ -static int -ifconfig_func (char *arg, int flags) -{ - char *svr = 0, *ip = 0, *gw = 0, *sm = 0; - - if (! eth_probe ()) - { - grub_printf ("No ethernet card found.\n"); - errnum = ERR_DEV_VALUES; - return 1; - } - - while (*arg) - { - if (! grub_memcmp ("--server=", arg, sizeof ("--server=") - 1)) - svr = arg + sizeof("--server=") - 1; - else if (! grub_memcmp ("--address=", arg, sizeof ("--address=") - 1)) - ip = arg + sizeof ("--address=") - 1; - else if (! grub_memcmp ("--gateway=", arg, sizeof ("--gateway=") - 1)) - gw = arg + sizeof ("--gateway=") - 1; - else if (! grub_memcmp ("--mask=", arg, sizeof("--mask=") - 1)) - sm = arg + sizeof ("--mask=") - 1; - else - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - arg = skip_to (0, arg); - } - - if (! ifconfig (ip, sm, gw, svr)) - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - print_network_configuration (); - return 0; -} - -static struct builtin builtin_ifconfig = -{ - "ifconfig", - ifconfig_func, - BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, - "ifconfig [--address=IP] [--gateway=IP] [--mask=MASK] [--server=IP]", - "Configure the IP address, the netmask, the gateway and the server" - " address or print current network configuration." -}; -#endif /* SUPPORT_NETBOOT */ - - -/* impsprobe */ -static int -impsprobe_func (char *arg, int flags) -{ -#ifdef GRUB_UTIL - /* In the grub shell, we cannot probe IMPS. */ - errnum = ERR_UNRECOGNIZED; - return 1; -#else /* ! GRUB_UTIL */ - if (!imps_probe ()) - printf (" No MPS information found or probe failed\n"); - - return 0; -#endif /* ! GRUB_UTIL */ -} - -static struct builtin builtin_impsprobe = -{ - "impsprobe", - impsprobe_func, - BUILTIN_CMDLINE, - "impsprobe", - "Probe the Intel Multiprocessor Specification 1.1 or 1.4" - " configuration table and boot the various CPUs which are found into" - " a tight loop." -}; - - -/* initrd */ -static int -initrd_func (char *arg, int flags) -{ - switch (kernel_type) - { - case KERNEL_TYPE_LINUX: - case KERNEL_TYPE_BIG_LINUX: - if (! load_initrd (arg)) - return 1; - break; - - default: - errnum = ERR_NEED_LX_KERNEL; - return 1; - } - - return 0; -} - -static struct builtin builtin_initrd = -{ - "initrd", - initrd_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "initrd FILE [ARG ...]", - "Load an initial ramdisk FILE for a Linux format boot image and set the" - " appropriate parameters in the Linux setup area in memory." -}; - - -/* install */ -static int -install_func (char *arg, int flags) -{ - char *stage1_file, *dest_dev, *file, *addr; - char *stage1_buffer = (char *) RAW_ADDR (0x100000); - char *stage2_buffer = stage1_buffer + SECTOR_SIZE; - char *old_sect = stage2_buffer + SECTOR_SIZE; - char *stage2_first_buffer = old_sect + SECTOR_SIZE; - char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE; - /* XXX: Probably SECTOR_SIZE is reasonable. */ - char *config_filename = stage2_second_buffer + SECTOR_SIZE; - char *dummy = config_filename + SECTOR_SIZE; - int new_drive = GRUB_INVALID_DRIVE; - int dest_drive, dest_partition, dest_sector; - int src_drive, src_partition, src_part_start; - int i; - struct geometry dest_geom, src_geom; - int saved_sector; - int stage2_first_sector, stage2_second_sector; - char *ptr; - int installaddr, installlist; - /* Point to the location of the name of a configuration file in Stage 2. */ - char *config_file_location; - /* If FILE is a Stage 1.5? */ - int is_stage1_5 = 0; - /* Must call grub_close? */ - int is_open = 0; - /* If LBA is forced? */ - int is_force_lba = 0; - /* Was the last sector full? */ - int last_length = SECTOR_SIZE; - -#ifdef GRUB_UTIL - /* If the Stage 2 is in a partition mounted by an OS, this will store - the filename under the OS. */ - char *stage2_os_file = 0; -#endif /* GRUB_UTIL */ - - auto void disk_read_savesect_func (int sector, int offset, int length); - auto void disk_read_blocklist_func (int sector, int offset, int length); - - /* Save the first sector of Stage2 in STAGE2_SECT. */ - auto void disk_read_savesect_func (int sector, int offset, int length) - { - if (debug) - printf ("[%d]", sector); - - /* ReiserFS has files which sometimes contain data not aligned - on sector boundaries. Returning an error is better than - silently failing. */ - if (offset != 0 || length != SECTOR_SIZE) - errnum = ERR_UNALIGNED; - - saved_sector = sector; - } - - /* Write SECTOR to INSTALLLIST, and update INSTALLADDR and - INSTALLSECT. */ - auto void disk_read_blocklist_func (int sector, int offset, int length) - { - if (debug) - printf("[%d]", sector); - - if (offset != 0 || last_length != SECTOR_SIZE) - { - /* We found a non-sector-aligned data block. */ - errnum = ERR_UNALIGNED; - return; - } - - last_length = length; - - if (*((unsigned long *) (installlist - 4)) - + *((unsigned short *) installlist) != sector - || installlist == (int) stage2_first_buffer + SECTOR_SIZE + 4) - { - installlist -= 8; - - if (*((unsigned long *) (installlist - 8))) - errnum = ERR_WONT_FIT; - else - { - *((unsigned short *) (installlist + 2)) = (installaddr >> 4); - *((unsigned long *) (installlist - 4)) = sector; - } - } - - *((unsigned short *) installlist) += 1; - installaddr += 512; - } - - /* First, check the GNU-style long option. */ - while (1) - { - if (grub_memcmp ("--force-lba", arg, sizeof ("--force-lba") - 1) == 0) - { - is_force_lba = 1; - arg = skip_to (0, arg); - } -#ifdef GRUB_UTIL - else if (grub_memcmp ("--stage2=", arg, sizeof ("--stage2=") - 1) == 0) - { - stage2_os_file = arg + sizeof ("--stage2=") - 1; - arg = skip_to (0, arg); - nul_terminate (stage2_os_file); - } -#endif /* GRUB_UTIL */ - else - break; - } - - stage1_file = arg; - dest_dev = skip_to (0, stage1_file); - if (*dest_dev == 'd') - { - new_drive = 0; - dest_dev = skip_to (0, dest_dev); - } - file = skip_to (0, dest_dev); - addr = skip_to (0, file); - - /* Get the installation address. */ - if (! safe_parse_maxint (&addr, &installaddr)) - { - /* ADDR is not specified. */ - installaddr = 0; - ptr = addr; - errnum = 0; - } - else - ptr = skip_to (0, addr); - -#ifndef NO_DECOMPRESSION - /* Do not decompress Stage 1 or Stage 2. */ - no_decompression = 1; -#endif - - /* Read Stage 1. */ - is_open = grub_open (stage1_file); - if (! is_open - || ! grub_read (stage1_buffer, SECTOR_SIZE) == SECTOR_SIZE) - goto fail; - - /* Read the old sector from DEST_DEV. */ - if (! set_device (dest_dev) - || ! open_partition () - || ! devread (0, 0, SECTOR_SIZE, old_sect)) - goto fail; - - /* Store the information for the destination device. */ - dest_drive = current_drive; - dest_partition = current_partition; - dest_geom = buf_geom; - dest_sector = part_start; - - /* Copy the possible DOS BPB, 59 bytes at byte offset 3. */ - grub_memmove (stage1_buffer + BOOTSEC_BPB_OFFSET, - old_sect + BOOTSEC_BPB_OFFSET, - BOOTSEC_BPB_LENGTH); - - /* If for a hard disk, copy the possible MBR/extended part table. */ - if (dest_drive & 0x80) - grub_memmove (stage1_buffer + STAGE1_WINDOWS_NT_MAGIC, - old_sect + STAGE1_WINDOWS_NT_MAGIC, - STAGE1_PARTEND - STAGE1_WINDOWS_NT_MAGIC); - - /* Check for the version and the signature of Stage 1. */ - if (*((short *)(stage1_buffer + STAGE1_VER_MAJ_OFFS)) != COMPAT_VERSION - || (*((unsigned short *) (stage1_buffer + BOOTSEC_SIG_OFFSET)) - != BOOTSEC_SIGNATURE)) - { - errnum = ERR_BAD_VERSION; - goto fail; - } - - /* This below is not true any longer. But should we leave this alone? */ - - /* If DEST_DRIVE is a floppy, Stage 2 must have the iteration probe - routine. */ - if (! (dest_drive & 0x80) - && (*((unsigned char *) (stage1_buffer + BOOTSEC_PART_OFFSET)) == 0x80 - || stage1_buffer[BOOTSEC_PART_OFFSET] == 0)) - { - errnum = ERR_BAD_VERSION; - goto fail; - } - - grub_close (); - - /* Open Stage 2. */ - is_open = grub_open (file); - if (! is_open) - goto fail; - - src_drive = current_drive; - src_partition = current_partition; - src_part_start = part_start; - src_geom = buf_geom; - - if (! new_drive) - new_drive = src_drive; - else if (src_drive != dest_drive) - grub_printf ("Warning: the option `d' was not used, but the Stage 1 will" - " be installed on a\ndifferent drive than the drive where" - " the Stage 2 resides.\n"); - - /* Set the boot drive. */ - *((unsigned char *) (stage1_buffer + STAGE1_BOOT_DRIVE)) = new_drive; - - /* Set the "force LBA" flag. */ - *((unsigned char *) (stage1_buffer + STAGE1_FORCE_LBA)) = is_force_lba; - - /* If DEST_DRIVE is a hard disk, enable the workaround, which is - for buggy BIOSes which don't pass boot drive correctly. Instead, - they pass 0x00 or 0x01 even when booted from 0x80. */ - if (dest_drive & BIOS_FLAG_FIXED_DISK) - /* Replace the jmp (2 bytes) with double nop's. */ - *((unsigned short *) (stage1_buffer + STAGE1_BOOT_DRIVE_CHECK)) - = 0x9090; - - /* Read the first sector of Stage 2. */ - disk_read_hook = disk_read_savesect_func; - if (grub_read (stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE) - goto fail; - - stage2_first_sector = saved_sector; - - /* Read the second sector of Stage 2. */ - if (grub_read (stage2_second_buffer, SECTOR_SIZE) != SECTOR_SIZE) - goto fail; - - stage2_second_sector = saved_sector; - - /* Check for the version of Stage 2. */ - if (*((short *) (stage2_second_buffer + STAGE2_VER_MAJ_OFFS)) - != COMPAT_VERSION) - { - errnum = ERR_BAD_VERSION; - goto fail; - } - - /* Check for the Stage 2 id. */ - if (stage2_second_buffer[STAGE2_STAGE2_ID] != STAGE2_ID_STAGE2) - is_stage1_5 = 1; - - /* If INSTALLADDR is not specified explicitly in the command-line, - determine it by the Stage 2 id. */ - if (! installaddr) - { - if (! is_stage1_5) - /* Stage 2. */ - installaddr = 0x8000; - else - /* Stage 1.5. */ - installaddr = 0x2000; - } - - *((unsigned long *) (stage1_buffer + STAGE1_STAGE2_SECTOR)) - = stage2_first_sector; - *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_ADDRESS)) - = installaddr; - *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_SEGMENT)) - = installaddr >> 4; - - i = (int) stage2_first_buffer + SECTOR_SIZE - 4; - while (*((unsigned long *) i)) - { - if (i < (int) stage2_first_buffer - || (*((int *) (i - 4)) & 0x80000000) - || *((unsigned short *) i) >= 0xA00 - || *((short *) (i + 2)) == 0) - { - errnum = ERR_BAD_VERSION; - goto fail; - } - - *((int *) i) = 0; - *((int *) (i - 4)) = 0; - i -= 8; - } - - installlist = (int) stage2_first_buffer + SECTOR_SIZE + 4; - installaddr += SECTOR_SIZE; - - /* Read the whole of Stage2 except for the first sector. */ - grub_seek (SECTOR_SIZE); - - disk_read_hook = disk_read_blocklist_func; - if (! grub_read (dummy, -1)) - goto fail; - - disk_read_hook = 0; - - /* Find a string for the configuration filename. */ - config_file_location = stage2_second_buffer + STAGE2_VER_STR_OFFS; - while (*(config_file_location++)) - ; - - /* Set the "force LBA" flag for Stage2. */ - *((unsigned char *) (stage2_second_buffer + STAGE2_FORCE_LBA)) - = is_force_lba; - - if (*ptr == 'p') - { - *((long *) (stage2_second_buffer + STAGE2_INSTALLPART)) - = src_partition; - if (is_stage1_5) - { - /* Reset the device information in FILE if it is a Stage 1.5. */ - unsigned long device = 0xFFFFFFFF; - - grub_memmove (config_file_location, (char *) &device, - sizeof (device)); - } - - ptr = skip_to (0, ptr); - } - - if (*ptr) - { - grub_strcpy (config_filename, ptr); - nul_terminate (config_filename); - - if (! is_stage1_5) - /* If it is a Stage 2, just copy PTR to CONFIG_FILE_LOCATION. */ - grub_strcpy (config_file_location, ptr); - else - { - char *real_config; - unsigned long device; - - /* Translate the external device syntax to the internal device - syntax. */ - if (! (real_config = set_device (ptr))) - { - /* The Stage 2 PTR does not contain the device name, so - use the root device instead. */ - errnum = ERR_NONE; - current_drive = saved_drive; - current_partition = saved_partition; - real_config = ptr; - } - - if (current_drive == src_drive) - { - /* If the drive where the Stage 2 resides is the same as - the one where the Stage 1.5 resides, do not embed the - drive number. */ - current_drive = GRUB_INVALID_DRIVE; - } - - device = (current_drive << 24) | current_partition; - grub_memmove (config_file_location, (char *) &device, - sizeof (device)); - grub_strcpy (config_file_location + sizeof (device), - real_config); - } - - /* If a Stage 1.5 is used, then we need to modify the Stage2. */ - if (is_stage1_5) - { - char *real_config_filename = skip_to (0, ptr); - - is_open = grub_open (config_filename); - if (! is_open) - goto fail; - - /* Skip the first sector. */ - grub_seek (SECTOR_SIZE); - - disk_read_hook = disk_read_savesect_func; - if (grub_read (stage2_buffer, SECTOR_SIZE) != SECTOR_SIZE) - goto fail; - - disk_read_hook = 0; - grub_close (); - is_open = 0; - - /* Sanity check. */ - if (*(stage2_buffer + STAGE2_STAGE2_ID) != STAGE2_ID_STAGE2) - { - errnum = ERR_BAD_VERSION; - goto fail; - } - - /* Set the "force LBA" flag for Stage2. */ - *(stage2_buffer + STAGE2_FORCE_LBA) = is_force_lba; - - /* If REAL_CONFIG_FILENAME is specified, copy it to the Stage2. */ - if (*real_config_filename) - { - /* Specified */ - char *location; - - /* Find a string for the configuration filename. */ - location = stage2_buffer + STAGE2_VER_STR_OFFS; - while (*(location++)) - ; - - /* Copy the name. */ - grub_strcpy (location, real_config_filename); - } - - /* Write it to the disk. */ - buf_track = -1; - -#ifdef GRUB_UTIL - /* In the grub shell, access the Stage 2 via the OS filesystem - service, if possible. */ - if (stage2_os_file) - { - FILE *fp; - - fp = fopen (stage2_os_file, "r+"); - if (! fp) - { - errnum = ERR_FILE_NOT_FOUND; - goto fail; - } - - if (fseek (fp, SECTOR_SIZE, SEEK_SET) != 0) - { - fclose (fp); - errnum = ERR_BAD_VERSION; - goto fail; - } - - if (fwrite (stage2_buffer, 1, SECTOR_SIZE, fp) - != SECTOR_SIZE) - { - fclose (fp); - errnum = ERR_WRITE; - goto fail; - } - - fclose (fp); - } - else -#endif /* GRUB_UTIL */ - { - if (! devwrite (saved_sector - part_start, 1, stage2_buffer)) - goto fail; - } - } - } - - /* Clear the cache. */ - buf_track = -1; - - /* Write the modified sectors of Stage2 to the disk. */ -#ifdef GRUB_UTIL - if (! is_stage1_5 && stage2_os_file) - { - FILE *fp; - - fp = fopen (stage2_os_file, "r+"); - if (! fp) - { - errnum = ERR_FILE_NOT_FOUND; - goto fail; - } - - if (fwrite (stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) - { - fclose (fp); - errnum = ERR_WRITE; - goto fail; - } - - if (fwrite (stage2_second_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) - { - fclose (fp); - errnum = ERR_WRITE; - goto fail; - } - - fclose (fp); - } - else -#endif /* GRUB_UTIL */ - { - /* The first. */ - current_drive = src_drive; - current_partition = src_partition; - - if (! open_partition ()) - goto fail; - - if (! devwrite (stage2_first_sector - src_part_start, 1, - stage2_first_buffer)) - goto fail; - - if (! devwrite (stage2_second_sector - src_part_start, 1, - stage2_second_buffer)) - goto fail; - } - - /* Write the modified sector of Stage 1 to the disk. */ - current_drive = dest_drive; - current_partition = dest_partition; - if (! open_partition ()) - goto fail; - - devwrite (0, 1, stage1_buffer); - - fail: - if (is_open) - grub_close (); - - disk_read_hook = 0; - -#ifndef NO_DECOMPRESSION - no_decompression = 0; -#endif - - return errnum; -} - -static struct builtin builtin_install = -{ - "install", - install_func, - BUILTIN_CMDLINE, - "install [--stage2=STAGE2_FILE] [--force-lba] STAGE1 [d] DEVICE STAGE2 [ADDR] [p] [CONFIG_FILE] [REAL_CONFIG_FILE]", - "Install STAGE1 on DEVICE, and install a blocklist for loading STAGE2" - " as a Stage 2. If the option `d' is present, the Stage 1 will always" - " look for the disk where STAGE2 was installed, rather than using" - " the booting drive. The Stage 2 will be loaded at address ADDR, which" - " will be determined automatically if you don't specify it. If" - " the option `p' or CONFIG_FILE is present, then the first block" - " of Stage 2 is patched with new values of the partition and name" - " of the configuration file used by the true Stage 2 (for a Stage 1.5," - " this is the name of the true Stage 2) at boot time. If STAGE2 is a Stage" - " 1.5 and REAL_CONFIG_FILE is present, then the Stage 2 CONFIG_FILE is" - " patched with the configuration filename REAL_CONFIG_FILE." - " If the option `--force-lba' is specified, disable some sanity checks" - " for LBA mode. If the option `--stage2' is specified, rewrite the Stage" - " 2 via your OS's filesystem instead of the raw device." -}; - - -/* ioprobe */ -static int -ioprobe_func (char *arg, int flags) -{ -#ifdef GRUB_UTIL - - errnum = ERR_UNRECOGNIZED; - return 1; - -#else /* ! GRUB_UTIL */ - - unsigned short *port; - - /* Get the drive number. */ - set_device (arg); - if (errnum) - return 1; - - /* Clean out IO_MAP. */ - grub_memset ((char *) io_map, 0, IO_MAP_SIZE * sizeof (unsigned short)); - - /* Track the int13 handler. */ - track_int13 (current_drive); - - /* Print out the result. */ - for (port = io_map; *port != 0; port++) - grub_printf (" 0x%x", (unsigned int) *port); - - return 0; - -#endif /* ! GRUB_UTIL */ -} - -static struct builtin builtin_ioprobe = -{ - "ioprobe", - ioprobe_func, - BUILTIN_CMDLINE, - "ioprobe DRIVE", - "Probe I/O ports used for the drive DRIVE." -}; - - -/* kernel */ -static int -kernel_func (char *arg, int flags) -{ - int len; - kernel_t suggested_type = KERNEL_TYPE_NONE; - unsigned long load_flags = 0; - -#ifndef AUTO_LINUX_MEM_OPT - load_flags |= KERNEL_LOAD_NO_MEM_OPTION; -#endif - - /* Deal with GNU-style long options. */ - while (1) - { - /* If the option `--type=TYPE' is specified, convert the string to - a kernel type. */ - if (grub_memcmp (arg, "--type=", 7) == 0) - { - arg += 7; - - if (grub_memcmp (arg, "netbsd", 6) == 0) - suggested_type = KERNEL_TYPE_NETBSD; - else if (grub_memcmp (arg, "freebsd", 7) == 0) - suggested_type = KERNEL_TYPE_FREEBSD; - else if (grub_memcmp (arg, "openbsd", 7) == 0) - /* XXX: For now, OpenBSD is identical to NetBSD, from GRUB's - point of view. */ - suggested_type = KERNEL_TYPE_NETBSD; - else if (grub_memcmp (arg, "linux", 5) == 0) - suggested_type = KERNEL_TYPE_LINUX; - else if (grub_memcmp (arg, "biglinux", 8) == 0) - suggested_type = KERNEL_TYPE_BIG_LINUX; - else if (grub_memcmp (arg, "multiboot", 9) == 0) - suggested_type = KERNEL_TYPE_MULTIBOOT; - else - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - } - /* If the `--no-mem-option' is specified, don't pass a Linux's mem - option automatically. If the kernel is another type, this flag - has no effect. */ - else if (grub_memcmp (arg, "--no-mem-option", 15) == 0) - load_flags |= KERNEL_LOAD_NO_MEM_OPTION; - else - break; - - /* Try the next. */ - arg = skip_to (0, arg); - } - - len = grub_strlen (arg); - - /* Reset MB_CMDLINE. */ - mb_cmdline = (char *) MB_CMDLINE_BUF; - if (len + 1 > MB_CMDLINE_BUFLEN) - { - errnum = ERR_WONT_FIT; - return 1; - } - - /* Copy the command-line to MB_CMDLINE. */ - grub_memmove (mb_cmdline, arg, len + 1); - kernel_type = load_image (arg, mb_cmdline, suggested_type, load_flags); - if (kernel_type == KERNEL_TYPE_NONE) - return 1; - - mb_cmdline += len + 1; - return 0; -} - -static struct builtin builtin_kernel = -{ - "kernel", - kernel_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "kernel [--no-mem-option] [--type=TYPE] FILE [ARG ...]", - "Attempt to load the primary boot image from FILE. The rest of the" - " line is passed verbatim as the \"kernel command line\". Any modules" - " must be reloaded after using this command. The option --type is used" - " to suggest what type of kernel to be loaded. TYPE must be either of" - " \"netbsd\", \"freebsd\", \"openbsd\", \"linux\", \"biglinux\" and" - " \"multiboot\". The option --no-mem-option tells GRUB not to pass a" - " Linux's mem option automatically." -}; - - -/* lock */ -static int -lock_func (char *arg, int flags) -{ - if (! auth && password) - { - errnum = ERR_PRIVILEGED; - return 1; - } - - return 0; -} - -static struct builtin builtin_lock = -{ - "lock", - lock_func, - BUILTIN_CMDLINE, - "lock", - "Break a command execution unless the user is authenticated." -}; - - -/* makeactive */ -static int -makeactive_func (char *arg, int flags) -{ - if (! make_saved_active ()) - return 1; - - return 0; -} - -static struct builtin builtin_makeactive = -{ - "makeactive", - makeactive_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "makeactive", - "Set the active partition on the root disk to GRUB's root device." - " This command is limited to _primary_ PC partitions on a hard disk." -}; - - -/* map */ -/* Map FROM_DRIVE to TO_DRIVE. */ -static int -map_func (char *arg, int flags) -{ - char *to_drive; - char *from_drive; - unsigned long to, from; - int i; - - to_drive = arg; - from_drive = skip_to (0, arg); - - /* Get the drive number for TO_DRIVE. */ - set_device (to_drive); - if (errnum) - return 1; - to = current_drive; - - /* Get the drive number for FROM_DRIVE. */ - set_device (from_drive); - if (errnum) - return 1; - from = current_drive; - - /* Search for an empty slot in BIOS_DRIVE_MAP. */ - for (i = 0; i < DRIVE_MAP_SIZE; i++) - { - /* Perhaps the user wants to override the map. */ - if ((bios_drive_map[i] & 0xff) == from) - break; - - if (! bios_drive_map[i]) - break; - } - - if (i == DRIVE_MAP_SIZE) - { - errnum = ERR_WONT_FIT; - return 1; - } - - if (to == from) - /* If TO is equal to FROM, delete the entry. */ - grub_memmove ((char *) &bios_drive_map[i], (char *) &bios_drive_map[i + 1], - sizeof (unsigned short) * (DRIVE_MAP_SIZE - i)); - else - bios_drive_map[i] = from | (to << 8); - - return 0; -} - -static struct builtin builtin_map = -{ - "map", - map_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "map TO_DRIVE FROM_DRIVE", - "Map the drive FROM_DRIVE to the drive TO_DRIVE. This is necessary" - " when you chain-load some operating systems, such as DOS, if such an" - " OS resides at a non-first drive." -}; - - -#ifdef USE_MD5_PASSWORDS -/* md5crypt */ -static int -md5crypt_func (char *arg, int flags) -{ - char crypted[36]; - char key[32]; - unsigned int seed; - int i; - const char *const seedchars = - "./0123456789ABCDEFGHIJKLMNOPQRST" - "UVWXYZabcdefghijklmnopqrstuvwxyz"; - - /* First create a salt. */ - - /* The magical prefix. */ - grub_memset (crypted, 0, sizeof (crypted)); - grub_memmove (crypted, "$1$", 3); - - /* Create the length of a salt. */ - seed = currticks (); - - /* Generate a salt. */ - for (i = 0; i < 8 && seed; i++) - { - /* FIXME: This should be more random. */ - crypted[3 + i] = seedchars[seed & 0x3f]; - seed >>= 6; - } - - /* A salt must be terminated with `$', if it is less than 8 chars. */ - crypted[3 + i] = '$'; - -#ifdef DEBUG_MD5CRYPT - grub_printf ("salt = %s\n", crypted); -#endif - - /* Get a password. */ - grub_memset (key, 0, sizeof (key)); - get_cmdline ("Password: ", key, sizeof (key) - 1, '*', 0); - - /* Crypt the key. */ - make_md5_password (key, crypted); - - grub_printf ("Encrypted: %s\n", crypted); - return 0; -} - -static struct builtin builtin_md5crypt = -{ - "md5crypt", - md5crypt_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "md5crypt", - "Generate a password in MD5 format." -}; -#endif /* USE_MD5_PASSWORDS */ - - -/* module */ -static int -module_func (char *arg, int flags) -{ - int len = grub_strlen (arg); - - switch (kernel_type) - { - case KERNEL_TYPE_MULTIBOOT: - if (mb_cmdline + len + 1 > (char *) MB_CMDLINE_BUF + MB_CMDLINE_BUFLEN) - { - errnum = ERR_WONT_FIT; - return 1; - } - grub_memmove (mb_cmdline, arg, len + 1); - if (! load_module (arg, mb_cmdline)) - return 1; - mb_cmdline += len + 1; - break; - - case KERNEL_TYPE_LINUX: - case KERNEL_TYPE_BIG_LINUX: - if (! load_initrd (arg)) - return 1; - break; - - default: - errnum = ERR_NEED_MB_KERNEL; - return 1; - } - - return 0; -} - -static struct builtin builtin_module = -{ - "module", - module_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "module FILE [ARG ...]", - "Load a boot module FILE for a Multiboot format boot image (no" - " interpretation of the file contents is made, so users of this" - " command must know what the kernel in question expects). The" - " rest of the line is passed as the \"module command line\", like" - " the `kernel' command." -}; - - -/* modulenounzip */ -static int -modulenounzip_func (char *arg, int flags) -{ - int ret; - -#ifndef NO_DECOMPRESSION - no_decompression = 1; -#endif - - ret = module_func (arg, flags); - -#ifndef NO_DECOMPRESSION - no_decompression = 0; -#endif - - return ret; -} - -static struct builtin builtin_modulenounzip = -{ - "modulenounzip", - modulenounzip_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "modulenounzip FILE [ARG ...]", - "The same as `module', except that automatic decompression is" - " disabled." -}; - - -/* pager [on|off] */ -static int -pager_func (char *arg, int flags) -{ - /* If ARG is empty, toggle the flag. */ - if (! *arg) - use_pager = ! use_pager; - else if (grub_memcmp (arg, "on", 2) == 0) - use_pager = 1; - else if (grub_memcmp (arg, "off", 3) == 0) - use_pager = 0; - else - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - grub_printf (" Internal pager is now %s\n", use_pager ? "on" : "off"); - return 0; -} - -static struct builtin builtin_pager = -{ - "pager", - pager_func, - BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, - "pager [FLAG]", - "Toggle pager mode with no argument. If FLAG is given and its value" - " is `on', turn on the mode. If FLAG is `off', turn off the mode." -}; - - -/* partnew PART TYPE START LEN */ -static int -partnew_func (char *arg, int flags) -{ - int new_type, new_start, new_len; - int start_cl, start_ch, start_dh; - int end_cl, end_ch, end_dh; - int entry; - char mbr[512]; - - /* Convert a LBA address to a CHS address in the INT 13 format. */ - auto void lba_to_chs (int lba, int *cl, int *ch, int *dh); - void lba_to_chs (int lba, int *cl, int *ch, int *dh) - { - int cylinder, head, sector; - - sector = lba % buf_geom.sectors + 1; - head = (lba / buf_geom.sectors) % buf_geom.heads; - cylinder = lba / (buf_geom.sectors * buf_geom.heads); - - if (cylinder >= buf_geom.cylinders) - cylinder = buf_geom.cylinders - 1; - - *cl = sector | ((cylinder & 0x300) >> 2); - *ch = cylinder & 0xFF; - *dh = head; - } - - /* Get the drive and the partition. */ - if (! set_device (arg)) - return 1; - - /* The drive must be a hard disk. */ - if (! (current_drive & 0x80)) - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - /* The partition must a primary partition. */ - if ((current_partition >> 16) > 3 - || (current_partition & 0xFFFF) != 0xFFFF) - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - entry = current_partition >> 16; - - /* Get the new partition type. */ - arg = skip_to (0, arg); - if (! safe_parse_maxint (&arg, &new_type)) - return 1; - - /* The partition type is unsigned char. */ - if (new_type > 0xFF) - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - /* Get the new partition start. */ - arg = skip_to (0, arg); - if (! safe_parse_maxint (&arg, &new_start)) - return 1; - - /* Get the new partition length. */ - arg = skip_to (0, arg); - if (! safe_parse_maxint (&arg, &new_len)) - return 1; - - /* Read the MBR. */ - if (! rawread (current_drive, 0, 0, SECTOR_SIZE, mbr)) - return 1; - - /* Check if the new partition will fit in the disk. */ - if (new_start + new_len > buf_geom.total_sectors) - { - errnum = ERR_GEOM; - return 1; - } - - /* Store the partition information in the MBR. */ - lba_to_chs (new_start, &start_cl, &start_ch, &start_dh); - lba_to_chs (new_start + new_len - 1, &end_cl, &end_ch, &end_dh); - - PC_SLICE_FLAG (mbr, entry) = 0; - PC_SLICE_HEAD (mbr, entry) = start_dh; - PC_SLICE_SEC (mbr, entry) = start_cl; - PC_SLICE_CYL (mbr, entry) = start_ch; - PC_SLICE_TYPE (mbr, entry) = new_type; - PC_SLICE_EHEAD (mbr, entry) = end_dh; - PC_SLICE_ESEC (mbr, entry) = end_cl; - PC_SLICE_ECYL (mbr, entry) = end_ch; - PC_SLICE_START (mbr, entry) = new_start; - PC_SLICE_LENGTH (mbr, entry) = new_len; - - /* Make sure that the MBR has a valid signature. */ - PC_MBR_SIG (mbr) = PC_MBR_SIGNATURE; - - /* Write back the MBR to the disk. */ - buf_track = -1; - if (! rawwrite (current_drive, 0, mbr)) - return 1; - - return 0; -} - -static struct builtin builtin_partnew = -{ - "partnew", - partnew_func, - BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, - "partnew PART TYPE START LEN", - "Create a primary partition at the starting address START with the" - " length LEN, with the type TYPE. START and LEN are in sector units." -}; - - -/* parttype PART TYPE */ -static int -parttype_func (char *arg, int flags) -{ - int new_type; - unsigned long part = 0xFFFFFF; - unsigned long start, len, offset, ext_offset; - int entry, type; - char mbr[512]; - - /* Get the drive and the partition. */ - if (! set_device (arg)) - return 1; - - /* The drive must be a hard disk. */ - if (! (current_drive & 0x80)) - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - /* The partition must be a PC slice. */ - if ((current_partition >> 16) == 0xFF - || (current_partition & 0xFFFF) != 0xFFFF) - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - /* Get the new partition type. */ - arg = skip_to (0, arg); - if (! safe_parse_maxint (&arg, &new_type)) - return 1; - - /* The partition type is unsigned char. */ - if (new_type > 0xFF) - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - /* Look for the partition. */ - while (next_partition (current_drive, 0xFFFFFF, &part, &type, - &start, &len, &offset, &entry, - &ext_offset, mbr)) - { - if (part == current_partition) - { - /* Found. */ - - /* Set the type to NEW_TYPE. */ - PC_SLICE_TYPE (mbr, entry) = new_type; - - /* Write back the MBR to the disk. */ - buf_track = -1; - if (! rawwrite (current_drive, offset, mbr)) - return 1; - - /* Succeed. */ - return 0; - } - } - - /* The partition was not found. ERRNUM was set by next_partition. */ - return 1; -} - -static struct builtin builtin_parttype = -{ - "parttype", - parttype_func, - BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, - "parttype PART TYPE", - "Change the type of the partition PART to TYPE." -}; - - -/* password */ -static int -password_func (char *arg, int flags) -{ - int len; - password_t type = PASSWORD_PLAIN; - -#ifdef USE_MD5_PASSWORDS - if (grub_memcmp (arg, "--md5", 5) == 0) - { - type = PASSWORD_MD5; - arg = skip_to (0, arg); - } -#endif - if (grub_memcmp (arg, "--", 2) == 0) - { - type = PASSWORD_UNSUPPORTED; - arg = skip_to (0, arg); - } - - if ((flags & (BUILTIN_CMDLINE | BUILTIN_SCRIPT)) != 0) - { - /* Do password check! */ - char entered[32]; - - /* Wipe out any previously entered password */ - entered[0] = 0; - get_cmdline ("Password: ", entered, 31, '*', 0); - - nul_terminate (arg); - if (check_password (entered, arg, type) != 0) - { - errnum = ERR_PRIVILEGED; - return 1; - } - } - else - { - len = grub_strlen (arg); - - /* PASSWORD NUL NUL ... */ - if (len + 2 > PASSWORD_BUFLEN) - { - errnum = ERR_WONT_FIT; - return 1; - } - - /* Copy the password and clear the rest of the buffer. */ - password = (char *) PASSWORD_BUF; - grub_memmove (password, arg, len); - grub_memset (password + len, 0, PASSWORD_BUFLEN - len); - password_type = type; - } - return 0; -} - -static struct builtin builtin_password = -{ - "password", - password_func, - BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_NO_ECHO, - "password [--md5] PASSWD [FILE]", - "If used in the first section of a menu file, disable all" - " interactive editing control (menu entry editor and" - " command line). If the password PASSWD is entered, it loads the" - " FILE as a new config file and restarts the GRUB Stage 2. If you" - " omit the argument FILE, then GRUB just unlocks privileged" - " instructions. You can also use it in the script section, in" - " which case it will ask for the password, before continueing." - " The option --md5 tells GRUB that PASSWD is encrypted with" - " md5crypt." -}; - - -/* pause */ -static int -pause_func (char *arg, int flags) -{ - printf("%s\n", arg); - - /* If ESC is returned, then abort this entry. */ - if (ASCII_CHAR (getkey ()) == 27) - return 1; - - return 0; -} - -static struct builtin builtin_pause = -{ - "pause", - pause_func, - BUILTIN_CMDLINE | BUILTIN_NO_ECHO, - "pause [MESSAGE ...]", - "Print MESSAGE, then wait until a key is pressed." -}; - - -#ifdef GRUB_UTIL -/* quit */ -static int -quit_func (char *arg, int flags) -{ - stop (); - - /* Never reach here. */ - return 0; -} - -static struct builtin builtin_quit = -{ - "quit", - quit_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "quit", - "Exit from the GRUB shell." -}; -#endif /* GRUB_UTIL */ - - -#ifdef SUPPORT_NETBOOT -/* rarp */ -static int -rarp_func (char *arg, int flags) -{ - if (! rarp ()) - { - if (errnum == ERR_NONE) - errnum = ERR_DEV_VALUES; - - return 1; - } - - /* Notify the configuration. */ - print_network_configuration (); - return 0; -} - -static struct builtin builtin_rarp = -{ - "rarp", - rarp_func, - BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, - "rarp", - "Initialize a network device via RARP." -}; -#endif /* SUPPORT_NETBOOT */ - - -static int -read_func (char *arg, int flags) -{ - int addr; - - if (! safe_parse_maxint (&arg, &addr)) - return 1; - - grub_printf ("Address 0x%x: Value 0x%x\n", - addr, *((unsigned *) RAW_ADDR (addr))); - return 0; -} - -static struct builtin builtin_read = -{ - "read", - read_func, - BUILTIN_CMDLINE, - "read ADDR", - "Read a 32-bit value from memory at address ADDR and" - " display it in hex format." -}; - - -/* reboot */ -static int -reboot_func (char *arg, int flags) -{ - grub_reboot (); - - /* Never reach here. */ - return 1; -} - -static struct builtin builtin_reboot = -{ - "reboot", - reboot_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "reboot", - "Reboot your system." -}; - - -/* Print the root device information. */ -static void -print_root_device (void) -{ - if (saved_drive == NETWORK_DRIVE) - { - /* Network drive. */ - grub_printf (" (nd):"); - } - else if (saved_drive & 0x80) - { - /* Hard disk drive. */ - grub_printf (" (hd%d", saved_drive - 0x80); - - if ((saved_partition & 0xFF0000) != 0xFF0000) - grub_printf (",%d", saved_partition >> 16); - - if ((saved_partition & 0x00FF00) != 0x00FF00) - grub_printf (",%c", ((saved_partition >> 8) & 0xFF) + 'a'); - - grub_printf ("):"); - } - else - { - /* Floppy disk drive. */ - grub_printf (" (fd%d):", saved_drive); - } - - /* Print the filesystem information. */ - current_partition = saved_partition; - current_drive = saved_drive; - print_fsys_type (); -} - -static int -real_root_func (char *arg, int attempt_mount) -{ - int hdbias = 0; - char *biasptr; - char *next; - - /* If ARG is empty, just print the current root device. */ - if (! *arg) - { - print_root_device (); - return 0; - } - - /* Call set_device to get the drive and the partition in ARG. */ - next = set_device (arg); - if (! next) - return 1; - - /* Ignore ERR_FSYS_MOUNT. */ - if (attempt_mount) - { - if (! open_device () && errnum != ERR_FSYS_MOUNT) - return 1; - } - else - { - /* This is necessary, because the location of a partition table - must be set appropriately. */ - if (open_partition ()) - { - set_bootdev (0); - if (errnum) - return 1; - } - } - - /* Clear ERRNUM. */ - errnum = 0; - saved_partition = current_partition; - saved_drive = current_drive; - - if (attempt_mount) - { - /* BSD and chainloading evil hacks !! */ - biasptr = skip_to (0, next); - safe_parse_maxint (&biasptr, &hdbias); - errnum = 0; - bootdev = set_bootdev (hdbias); - if (errnum) - return 1; - - /* Print the type of the filesystem. */ - print_fsys_type (); - } - - return 0; -} - -static int -root_func (char *arg, int flags) -{ - return real_root_func (arg, 1); -} - -static struct builtin builtin_root = -{ - "root", - root_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "root [DEVICE [HDBIAS]]", - "Set the current \"root device\" to the device DEVICE, then" - " attempt to mount it to get the partition size (for passing the" - " partition descriptor in `ES:ESI', used by some chain-loaded" - " bootloaders), the BSD drive-type (for booting BSD kernels using" - " their native boot format), and correctly determine " - " the PC partition where a BSD sub-partition is located. The" - " optional HDBIAS parameter is a number to tell a BSD kernel" - " how many BIOS drive numbers are on controllers before the current" - " one. For example, if there is an IDE disk and a SCSI disk, and your" - " FreeBSD root partition is on the SCSI disk, then use a `1' for HDBIAS." -}; - - -/* rootnoverify */ -static int -rootnoverify_func (char *arg, int flags) -{ - return real_root_func (arg, 0); -} - -static struct builtin builtin_rootnoverify = -{ - "rootnoverify", - rootnoverify_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "rootnoverify [DEVICE [HDBIAS]]", - "Similar to `root', but don't attempt to mount the partition. This" - " is useful for when an OS is outside of the area of the disk that" - " GRUB can read, but setting the correct root device is still" - " desired. Note that the items mentioned in `root' which" - " derived from attempting the mount will NOT work correctly." -}; - - -/* savedefault */ -static int -savedefault_func (char *arg, int flags) -{ -#if !defined(SUPPORT_DISKLESS) && !defined(GRUB_UTIL) - unsigned long tmp_drive = saved_drive; - unsigned long tmp_partition = saved_partition; - char *default_file = (char *) DEFAULT_FILE_BUF; - char buf[10]; - char sect[SECTOR_SIZE]; - int entryno; - int sector_count = 0; - int saved_sectors[2]; - int saved_offsets[2]; - int saved_lengths[2]; - - /* Save sector information about at most two sectors. */ - auto void disk_read_savesect_func (int sector, int offset, int length); - void disk_read_savesect_func (int sector, int offset, int length) - { - if (sector_count < 2) - { - saved_sectors[sector_count] = sector; - saved_offsets[sector_count] = offset; - saved_lengths[sector_count] = length; - } - sector_count++; - } - - /* This command is only useful when you boot an entry from the menu - interface. */ - if (! (flags & BUILTIN_SCRIPT)) - { - errnum = ERR_UNRECOGNIZED; - return 1; - } - - /* Determine a saved entry number. */ - if (*arg) - { - if (grub_memcmp (arg, "fallback", sizeof ("fallback") - 1) == 0) - { - int i; - int index = 0; - - for (i = 0; i < MAX_FALLBACK_ENTRIES; i++) - { - if (fallback_entries[i] < 0) - break; - if (fallback_entries[i] == current_entryno) - { - index = i + 1; - break; - } - } - - if (index >= MAX_FALLBACK_ENTRIES || fallback_entries[index] < 0) - { - /* This is the last. */ - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - entryno = fallback_entries[index]; - } - else if (! safe_parse_maxint (&arg, &entryno)) - return 1; - } - else - entryno = current_entryno; - - /* Open the default file. */ - saved_drive = boot_drive; - saved_partition = install_partition; - if (grub_open (default_file)) - { - int len; - - disk_read_hook = disk_read_savesect_func; - len = grub_read (buf, sizeof (buf)); - disk_read_hook = 0; - grub_close (); - - if (len != sizeof (buf)) - { - /* This is too small. Do not modify the file manually, please! */ - errnum = ERR_READ; - goto fail; - } - - if (sector_count > 2) - { - /* Is this possible?! Too fragmented! */ - errnum = ERR_FSYS_CORRUPT; - goto fail; - } - - /* Set up a string to be written. */ - grub_memset (buf, '\n', sizeof (buf)); - grub_sprintf (buf, "%d", entryno); - - if (saved_lengths[0] < sizeof (buf)) - { - /* The file is anchored to another file and the first few bytes - are spanned in two sectors. Uggh... */ - if (! rawread (current_drive, saved_sectors[0], 0, SECTOR_SIZE, - sect)) - goto fail; - grub_memmove (sect + saved_offsets[0], buf, saved_lengths[0]); - if (! rawwrite (current_drive, saved_sectors[0], sect)) - goto fail; - - if (! rawread (current_drive, saved_sectors[1], 0, SECTOR_SIZE, - sect)) - goto fail; - grub_memmove (sect + saved_offsets[1], - buf + saved_lengths[0], - sizeof (buf) - saved_lengths[0]); - if (! rawwrite (current_drive, saved_sectors[1], sect)) - goto fail; - } - else - { - /* This is a simple case. It fits into a single sector. */ - if (! rawread (current_drive, saved_sectors[0], 0, SECTOR_SIZE, - sect)) - goto fail; - grub_memmove (sect + saved_offsets[0], buf, sizeof (buf)); - if (! rawwrite (current_drive, saved_sectors[0], sect)) - goto fail; - } - - /* Clear the cache. */ - buf_track = -1; - } - - fail: - saved_drive = tmp_drive; - saved_partition = tmp_partition; - return errnum; -#else /* ! SUPPORT_DISKLESS && ! GRUB_UTIL */ - errnum = ERR_UNRECOGNIZED; - return 1; -#endif /* ! SUPPORT_DISKLESS && ! GRUB_UTIL */ -} - -static struct builtin builtin_savedefault = -{ - "savedefault", - savedefault_func, - BUILTIN_CMDLINE, - "savedefault [NUM | `fallback']", - "Save the current entry as the default boot entry if no argument is" - " specified. If a number is specified, this number is saved. If" - " `fallback' is used, next fallback entry is saved." -}; - - -#ifdef SUPPORT_SERIAL -/* serial */ -static int -serial_func (char *arg, int flags) -{ - unsigned short port = serial_hw_get_port (0); - unsigned int speed = 9600; - int word_len = UART_8BITS_WORD; - int parity = UART_NO_PARITY; - int stop_bit_len = UART_1_STOP_BIT; - - /* Process GNU-style long options. - FIXME: We should implement a getopt-like function, to avoid - duplications. */ - while (1) - { - if (grub_memcmp (arg, "--unit=", sizeof ("--unit=") - 1) == 0) - { - char *p = arg + sizeof ("--unit=") - 1; - int unit; - - if (! safe_parse_maxint (&p, &unit)) - return 1; - - if (unit < 0 || unit > 3) - { - errnum = ERR_DEV_VALUES; - return 1; - } - - port = serial_hw_get_port (unit); - } - else if (grub_memcmp (arg, "--speed=", sizeof ("--speed=") - 1) == 0) - { - char *p = arg + sizeof ("--speed=") - 1; - int num; - - if (! safe_parse_maxint (&p, &num)) - return 1; - - speed = (unsigned int) num; - } - else if (grub_memcmp (arg, "--port=", sizeof ("--port=") - 1) == 0) - { - char *p = arg + sizeof ("--port=") - 1; - int num; - - if (! safe_parse_maxint (&p, &num)) - return 1; - - port = (unsigned short) num; - } - else if (grub_memcmp (arg, "--word=", sizeof ("--word=") - 1) == 0) - { - char *p = arg + sizeof ("--word=") - 1; - int len; - - if (! safe_parse_maxint (&p, &len)) - return 1; - - switch (len) - { - case 5: word_len = UART_5BITS_WORD; break; - case 6: word_len = UART_6BITS_WORD; break; - case 7: word_len = UART_7BITS_WORD; break; - case 8: word_len = UART_8BITS_WORD; break; - default: - errnum = ERR_BAD_ARGUMENT; - return 1; - } - } - else if (grub_memcmp (arg, "--stop=", sizeof ("--stop=") - 1) == 0) - { - char *p = arg + sizeof ("--stop=") - 1; - int len; - - if (! safe_parse_maxint (&p, &len)) - return 1; - - switch (len) - { - case 1: stop_bit_len = UART_1_STOP_BIT; break; - case 2: stop_bit_len = UART_2_STOP_BITS; break; - default: - errnum = ERR_BAD_ARGUMENT; - return 1; - } - } - else if (grub_memcmp (arg, "--parity=", sizeof ("--parity=") - 1) == 0) - { - char *p = arg + sizeof ("--parity=") - 1; - - if (grub_memcmp (p, "no", sizeof ("no") - 1) == 0) - parity = UART_NO_PARITY; - else if (grub_memcmp (p, "odd", sizeof ("odd") - 1) == 0) - parity = UART_ODD_PARITY; - else if (grub_memcmp (p, "even", sizeof ("even") - 1) == 0) - parity = UART_EVEN_PARITY; - else - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - } -# ifdef GRUB_UTIL - /* In the grub shell, don't use any port number but open a tty - device instead. */ - else if (grub_memcmp (arg, "--device=", sizeof ("--device=") - 1) == 0) - { - char *p = arg + sizeof ("--device=") - 1; - char dev[256]; /* XXX */ - char *q = dev; - - while (*p && ! grub_isspace (*p)) - *q++ = *p++; - - *q = 0; - serial_set_device (dev); - } -# endif /* GRUB_UTIL */ - else - break; - - arg = skip_to (0, arg); - } - - /* Initialize the serial unit. */ - if (! serial_hw_init (port, speed, word_len, parity, stop_bit_len)) - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - return 0; -} - -static struct builtin builtin_serial = -{ - "serial", - serial_func, - BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "serial [--unit=UNIT] [--port=PORT] [--speed=SPEED] [--word=WORD] [--parity=PARITY] [--stop=STOP] [--device=DEV]", - "Initialize a serial device. UNIT is a digit that specifies which serial" - " device is used (e.g. 0 == COM1). If you need to specify the port number," - " set it by --port. SPEED is the DTE-DTE speed. WORD is the word length," - " PARITY is the type of parity, which is one of `no', `odd' and `even'." - " STOP is the length of stop bit(s). The option --device can be used only" - " in the grub shell, which specifies the file name of a tty device. The" - " default values are COM1, 9600, 8N1." -}; -#endif /* SUPPORT_SERIAL */ - - -/* setkey */ -struct keysym -{ - char *unshifted_name; /* the name in unshifted state */ - char *shifted_name; /* the name in shifted state */ - unsigned char unshifted_ascii; /* the ascii code in unshifted state */ - unsigned char shifted_ascii; /* the ascii code in shifted state */ - unsigned char keycode; /* keyboard scancode */ -}; - -/* The table for key symbols. If the "shifted" member of an entry is - NULL, the entry does not have shifted state. */ -static struct keysym keysym_table[] = -{ - {"escape", 0, 0x1b, 0, 0x01}, - {"1", "exclam", '1', '!', 0x02}, - {"2", "at", '2', '@', 0x03}, - {"3", "numbersign", '3', '#', 0x04}, - {"4", "dollar", '4', '$', 0x05}, - {"5", "percent", '5', '%', 0x06}, - {"6", "caret", '6', '^', 0x07}, - {"7", "ampersand", '7', '&', 0x08}, - {"8", "asterisk", '8', '*', 0x09}, - {"9", "parenleft", '9', '(', 0x0a}, - {"0", "parenright", '0', ')', 0x0b}, - {"minus", "underscore", '-', '_', 0x0c}, - {"equal", "plus", '=', '+', 0x0d}, - {"backspace", 0, '\b', 0, 0x0e}, - {"tab", 0, '\t', 0, 0x0f}, - {"q", "Q", 'q', 'Q', 0x10}, - {"w", "W", 'w', 'W', 0x11}, - {"e", "E", 'e', 'E', 0x12}, - {"r", "R", 'r', 'R', 0x13}, - {"t", "T", 't', 'T', 0x14}, - {"y", "Y", 'y', 'Y', 0x15}, - {"u", "U", 'u', 'U', 0x16}, - {"i", "I", 'i', 'I', 0x17}, - {"o", "O", 'o', 'O', 0x18}, - {"p", "P", 'p', 'P', 0x19}, - {"bracketleft", "braceleft", '[', '{', 0x1a}, - {"bracketright", "braceright", ']', '}', 0x1b}, - {"enter", 0, '\n', 0, 0x1c}, - {"control", 0, 0, 0, 0x1d}, - {"a", "A", 'a', 'A', 0x1e}, - {"s", "S", 's', 'S', 0x1f}, - {"d", "D", 'd', 'D', 0x20}, - {"f", "F", 'f', 'F', 0x21}, - {"g", "G", 'g', 'G', 0x22}, - {"h", "H", 'h', 'H', 0x23}, - {"j", "J", 'j', 'J', 0x24}, - {"k", "K", 'k', 'K', 0x25}, - {"l", "L", 'l', 'L', 0x26}, - {"semicolon", "colon", ';', ':', 0x27}, - {"quote", "doublequote", '\'', '"', 0x28}, - {"backquote", "tilde", '`', '~', 0x29}, - {"shift", 0, 0, 0, 0x2a}, - {"backslash", "bar", '\\', '|', 0x2b}, - {"z", "Z", 'z', 'Z', 0x2c}, - {"x", "X", 'x', 'X', 0x2d}, - {"c", "C", 'c', 'C', 0x2e}, - {"v", "V", 'v', 'V', 0x2f}, - {"b", "B", 'b', 'B', 0x30}, - {"n", "N", 'n', 'N', 0x31}, - {"m", "M", 'm', 'M', 0x32}, - {"comma", "less", ',', '<', 0x33}, - {"period", "greater", '.', '>', 0x34}, - {"slash", "question", '/', '?', 0x35}, - {"alt", 0, 0, 0, 0x38}, - {"space", 0, ' ', 0, 0x39}, - {"capslock", 0, 0, 0, 0x3a}, - {"F1", 0, 0, 0, 0x3b}, - {"F2", 0, 0, 0, 0x3c}, - {"F3", 0, 0, 0, 0x3d}, - {"F4", 0, 0, 0, 0x3e}, - {"F5", 0, 0, 0, 0x3f}, - {"F6", 0, 0, 0, 0x40}, - {"F7", 0, 0, 0, 0x41}, - {"F8", 0, 0, 0, 0x42}, - {"F9", 0, 0, 0, 0x43}, - {"F10", 0, 0, 0, 0x44}, - /* Caution: do not add NumLock here! we cannot deal with it properly. */ - {"delete", 0, 0x7f, 0, 0x53} -}; - -static int -setkey_func (char *arg, int flags) -{ - char *to_key, *from_key; - int to_code, from_code; - int map_in_interrupt = 0; - - auto int find_key_code (char *key); - auto int find_ascii_code (char *key); - - auto int find_key_code (char *key) - { - int i; - - for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++) - { - if (keysym_table[i].unshifted_name && - grub_strcmp (key, keysym_table[i].unshifted_name) == 0) - return keysym_table[i].keycode; - else if (keysym_table[i].shifted_name && - grub_strcmp (key, keysym_table[i].shifted_name) == 0) - return keysym_table[i].keycode; - } - - return 0; - } - - auto int find_ascii_code (char *key) - { - int i; - - for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++) - { - if (keysym_table[i].unshifted_name && - grub_strcmp (key, keysym_table[i].unshifted_name) == 0) - return keysym_table[i].unshifted_ascii; - else if (keysym_table[i].shifted_name && - grub_strcmp (key, keysym_table[i].shifted_name) == 0) - return keysym_table[i].shifted_ascii; - } - - return 0; - } - - to_key = arg; - from_key = skip_to (0, to_key); - - if (! *to_key) - { - /* If the user specifies no argument, reset the key mappings. */ - grub_memset (bios_key_map, 0, KEY_MAP_SIZE * sizeof (unsigned short)); - grub_memset (ascii_key_map, 0, KEY_MAP_SIZE * sizeof (unsigned short)); - - return 0; - } - else if (! *from_key) - { - /* The user must specify two arguments or zero argument. */ - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - nul_terminate (to_key); - nul_terminate (from_key); - - to_code = find_ascii_code (to_key); - from_code = find_ascii_code (from_key); - if (! to_code || ! from_code) - { - map_in_interrupt = 1; - to_code = find_key_code (to_key); - from_code = find_key_code (from_key); - if (! to_code || ! from_code) - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - } - - if (map_in_interrupt) - { - int i; - - /* Find an empty slot. */ - for (i = 0; i < KEY_MAP_SIZE; i++) - { - if ((bios_key_map[i] & 0xff) == from_code) - /* Perhaps the user wants to overwrite the map. */ - break; - - if (! bios_key_map[i]) - break; - } - - if (i == KEY_MAP_SIZE) - { - errnum = ERR_WONT_FIT; - return 1; - } - - if (to_code == from_code) - /* If TO is equal to FROM, delete the entry. */ - grub_memmove ((char *) &bios_key_map[i], - (char *) &bios_key_map[i + 1], - sizeof (unsigned short) * (KEY_MAP_SIZE - i)); - else - bios_key_map[i] = (to_code << 8) | from_code; - - /* Ugly but should work. */ - unset_int15_handler (); - set_int15_handler (); - } - else - { - int i; - - /* Find an empty slot. */ - for (i = 0; i < KEY_MAP_SIZE; i++) - { - if ((ascii_key_map[i] & 0xff) == from_code) - /* Perhaps the user wants to overwrite the map. */ - break; - - if (! ascii_key_map[i]) - break; - } - - if (i == KEY_MAP_SIZE) - { - errnum = ERR_WONT_FIT; - return 1; - } - - if (to_code == from_code) - /* If TO is equal to FROM, delete the entry. */ - grub_memmove ((char *) &ascii_key_map[i], - (char *) &ascii_key_map[i + 1], - sizeof (unsigned short) * (KEY_MAP_SIZE - i)); - else - ascii_key_map[i] = (to_code << 8) | from_code; - } - - return 0; -} - -static struct builtin builtin_setkey = -{ - "setkey", - setkey_func, - BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, - "setkey [TO_KEY FROM_KEY]", - "Change the keyboard map. The key FROM_KEY is mapped to the key TO_KEY." - " A key must be an alphabet, a digit, or one of these: escape, exclam," - " at, numbersign, dollar, percent, caret, ampersand, asterisk, parenleft," - " parenright, minus, underscore, equal, plus, backspace, tab, bracketleft," - " braceleft, bracketright, braceright, enter, control, semicolon, colon," - " quote, doublequote, backquote, tilde, shift, backslash, bar, comma," - " less, period, greater, slash, question, alt, space, capslock, FX (X" - " is a digit), and delete. If no argument is specified, reset key" - " mappings." -}; - - -/* setup */ -static int -setup_func (char *arg, int flags) -{ - /* Point to the string of the installed drive/partition. */ - char *install_ptr; - /* Point to the string of the drive/parition where the GRUB images - reside. */ - char *image_ptr; - unsigned long installed_drive, installed_partition; - unsigned long image_drive, image_partition; - unsigned long tmp_drive, tmp_partition; - char stage1[64]; - char stage2[64]; - char config_filename[64]; - char real_config_filename[64]; - char cmd_arg[256]; - char device[16]; - char *buffer = (char *) RAW_ADDR (0x100000); - int is_force_lba = 0; - char *stage2_arg = 0; - char *prefix = 0; - - auto int check_file (char *file); - auto void sprint_device (int drive, int partition); - auto int embed_stage1_5 (char * stage1_5, int drive, int partition); - - /* Check if the file FILE exists like Autoconf. */ - int check_file (char *file) - { - int ret; - - grub_printf (" Checking if \"%s\" exists... ", file); - ret = grub_open (file); - if (ret) - { - grub_close (); - grub_printf ("yes\n"); - } - else - grub_printf ("no\n"); - - return ret; - } - - /* Construct a device name in DEVICE. */ - void sprint_device (int drive, int partition) - { - grub_sprintf (device, "(%cd%d", - (drive & 0x80) ? 'h' : 'f', - drive & ~0x80); - if ((partition & 0xFF0000) != 0xFF0000) - { - char tmp[16]; - grub_sprintf (tmp, ",%d", (partition >> 16) & 0xFF); - grub_strncat (device, tmp, sizeof (device)); - } - if ((partition & 0x00FF00) != 0x00FF00) - { - char tmp[16]; - grub_sprintf (tmp, ",%c", 'a' + ((partition >> 8) & 0xFF)); - grub_strncat (device, tmp, sizeof (device)); - } - grub_strncat (device, ")", sizeof (device)); - } - - int embed_stage1_5 (char *stage1_5, int drive, int partition) - { - /* We install GRUB into the MBR, so try to embed the - Stage 1.5 in the sectors right after the MBR. */ - sprint_device (drive, partition); - grub_sprintf (cmd_arg, "%s %s", stage1_5, device); - - /* Notify what will be run. */ - grub_printf (" Running \"embed %s\"... ", cmd_arg); - - embed_func (cmd_arg, flags); - if (! errnum) - { - /* Construct the blocklist representation. */ - grub_sprintf (buffer, "%s%s", device, embed_info); - grub_printf ("succeeded\n"); - return 1; - } - else - { - grub_printf ("failed (this is not fatal)\n"); - return 0; - } - } - - struct stage1_5_map { - char *fsys; - char *name; - }; - struct stage1_5_map stage1_5_map[] = - { - {"ext2fs", "/e2fs_stage1_5"}, - {"fat", "/fat_stage1_5"}, - {"ufs2", "/ufs2_stage1_5"}, - {"ffs", "/ffs_stage1_5"}, - {"iso9660", "/iso9660_stage1_5"}, - {"jfs", "/jfs_stage1_5"}, - {"minix", "/minix_stage1_5"}, - {"reiserfs", "/reiserfs_stage1_5"}, - {"vstafs", "/vstafs_stage1_5"}, - {"xfs", "/xfs_stage1_5"} - }; - - tmp_drive = saved_drive; - tmp_partition = saved_partition; - - /* Check if the user specifies --force-lba. */ - while (1) - { - if (grub_memcmp ("--force-lba", arg, sizeof ("--force-lba") - 1) == 0) - { - is_force_lba = 1; - arg = skip_to (0, arg); - } - else if (grub_memcmp ("--prefix=", arg, sizeof ("--prefix=") - 1) == 0) - { - prefix = arg + sizeof ("--prefix=") - 1; - arg = skip_to (0, arg); - nul_terminate (prefix); - } -#ifdef GRUB_UTIL - else if (grub_memcmp ("--stage2=", arg, sizeof ("--stage2=") - 1) == 0) - { - stage2_arg = arg; - arg = skip_to (0, arg); - nul_terminate (stage2_arg); - } -#endif /* GRUB_UTIL */ - else - break; - } - - install_ptr = arg; - image_ptr = skip_to (0, install_ptr); - - /* Make sure that INSTALL_PTR is valid. */ - set_device (install_ptr); - if (errnum) - return 1; - - installed_drive = current_drive; - installed_partition = current_partition; - - /* Mount the drive pointed by IMAGE_PTR. */ - if (*image_ptr) - { - /* If the drive/partition where the images reside is specified, - get the drive and the partition. */ - set_device (image_ptr); - if (errnum) - return 1; - } - else - { - /* If omitted, use SAVED_PARTITION and SAVED_DRIVE. */ - current_drive = saved_drive; - current_partition = saved_partition; - } - - image_drive = saved_drive = current_drive; - image_partition = saved_partition = current_partition; - - /* Open it. */ - if (! open_device ()) - goto fail; - - /* Check if stage1 exists. If the user doesn't specify the option - `--prefix', attempt /boot/grub and /grub. */ - /* NOTE: It is dangerous to run this command without `--prefix' in the - grub shell, since that affects `--stage2'. */ - if (! prefix) - { - prefix = "/boot/grub"; - grub_sprintf (stage1, "%s%s", prefix, "/stage1"); - if (! check_file (stage1)) - { - errnum = ERR_NONE; - prefix = "/grub"; - grub_sprintf (stage1, "%s%s", prefix, "/stage1"); - if (! check_file (stage1)) - goto fail; - } - } - else - { - grub_sprintf (stage1, "%s%s", prefix, "/stage1"); - if (! check_file (stage1)) - goto fail; - } - - /* The prefix was determined. */ - grub_sprintf (stage2, "%s%s", prefix, "/stage2"); - grub_sprintf (config_filename, "%s%s", prefix, "/menu.lst"); - *real_config_filename = 0; - - /* Check if stage2 exists. */ - if (! check_file (stage2)) - goto fail; - - { - char *fsys = fsys_table[fsys_type].name; - int i; - int size = sizeof (stage1_5_map) / sizeof (stage1_5_map[0]); - - /* Iterate finding the same filesystem name as FSYS. */ - for (i = 0; i < size; i++) - if (grub_strcmp (fsys, stage1_5_map[i].fsys) == 0) - { - /* OK, check if the Stage 1.5 exists. */ - char stage1_5[64]; - - grub_sprintf (stage1_5, "%s%s", prefix, stage1_5_map[i].name); - if (check_file (stage1_5)) - { - if (embed_stage1_5 (stage1_5, - installed_drive, installed_partition) - || embed_stage1_5 (stage1_5, - image_drive, image_partition)) - { - grub_strcpy (real_config_filename, config_filename); - sprint_device (image_drive, image_partition); - grub_sprintf (config_filename, "%s%s", device, stage2); - grub_strcpy (stage2, buffer); - } - } - errnum = 0; - break; - } - } - - /* Construct a string that is used by the command "install" as its - arguments. */ - sprint_device (installed_drive, installed_partition); - -#if 1 - /* Don't embed a drive number unnecessarily. */ - grub_sprintf (cmd_arg, "%s%s%s%s %s%s %s p %s %s", - is_force_lba? "--force-lba " : "", - stage2_arg? stage2_arg : "", - stage2_arg? " " : "", - stage1, - (installed_drive != image_drive) ? "d " : "", - device, - stage2, - config_filename, - real_config_filename); -#else /* NOT USED */ - /* This code was used, because we belived some BIOSes had a problem - that they didn't pass a booting drive correctly. It turned out, - however, stage1 could trash a booting drive when checking LBA support, - because some BIOSes modified the register %dx in INT 13H, AH=48H. - So it becamed unclear whether GRUB should use a pre-defined booting - drive or not. If the problem still exists, it would be necessary to - switch back to this code. */ - grub_sprintf (cmd_arg, "%s%s%s%s d %s %s p %s %s", - is_force_lba? "--force-lba " : "", - stage2_arg? stage2_arg : "", - stage2_arg? " " : "", - stage1, - device, - stage2, - config_filename, - real_config_filename); -#endif /* NOT USED */ - - /* Notify what will be run. */ - grub_printf (" Running \"install %s\"... ", cmd_arg); - - /* Make sure that SAVED_DRIVE and SAVED_PARTITION are identical - with IMAGE_DRIVE and IMAGE_PARTITION, respectively. */ - saved_drive = image_drive; - saved_partition = image_partition; - - /* Run the command. */ - if (! install_func (cmd_arg, flags)) - grub_printf ("succeeded\nDone.\n"); - else - grub_printf ("failed\n"); - - fail: - saved_drive = tmp_drive; - saved_partition = tmp_partition; - return errnum; -} - -static struct builtin builtin_setup = -{ - "setup", - setup_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "setup [--prefix=DIR] [--stage2=STAGE2_FILE] [--force-lba] INSTALL_DEVICE [IMAGE_DEVICE]", - "Set up the installation of GRUB automatically. This command uses" - " the more flexible command \"install\" in the backend and installs" - " GRUB into the device INSTALL_DEVICE. If IMAGE_DEVICE is specified," - " then find the GRUB images in the device IMAGE_DEVICE, otherwise" - " use the current \"root device\", which can be set by the command" - " \"root\". If you know that your BIOS should support LBA but GRUB" - " doesn't work in LBA mode, specify the option `--force-lba'." - " If you install GRUB under the grub shell and you cannot unmount the" - " partition where GRUB images reside, specify the option `--stage2'" - " to tell GRUB the file name under your OS." -}; - - -#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) -/* terminal */ -static int -terminal_func (char *arg, int flags) -{ - /* The index of the default terminal in TERM_TABLE. */ - int default_term = -1; - struct term_entry *prev_term = current_term; - int to = -1; - int lines = 0; - int no_message = 0; - unsigned long term_flags = 0; - /* XXX: Assume less than 32 terminals. */ - unsigned long term_bitmap = 0; - - /* Get GNU-style long options. */ - while (1) - { - if (grub_memcmp (arg, "--dumb", sizeof ("--dumb") - 1) == 0) - term_flags |= TERM_DUMB; - else if (grub_memcmp (arg, "--no-echo", sizeof ("--no-echo") - 1) == 0) - /* ``--no-echo'' implies ``--no-edit''. */ - term_flags |= (TERM_NO_ECHO | TERM_NO_EDIT); - else if (grub_memcmp (arg, "--no-edit", sizeof ("--no-edit") - 1) == 0) - term_flags |= TERM_NO_EDIT; - else if (grub_memcmp (arg, "--timeout=", sizeof ("--timeout=") - 1) == 0) - { - char *val = arg + sizeof ("--timeout=") - 1; - - if (! safe_parse_maxint (&val, &to)) - return 1; - } - else if (grub_memcmp (arg, "--lines=", sizeof ("--lines=") - 1) == 0) - { - char *val = arg + sizeof ("--lines=") - 1; - - if (! safe_parse_maxint (&val, &lines)) - return 1; - - /* Probably less than four is meaningless.... */ - if (lines < 4) - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - } - else if (grub_memcmp (arg, "--silent", sizeof ("--silent") - 1) == 0) - no_message = 1; - else - break; - - arg = skip_to (0, arg); - } - - /* If no argument is specified, show current setting. */ - if (! *arg) - { - grub_printf ("%s%s%s%s\n", - current_term->name, - current_term->flags & TERM_DUMB ? " (dumb)" : "", - current_term->flags & TERM_NO_EDIT ? " (no edit)" : "", - current_term->flags & TERM_NO_ECHO ? " (no echo)" : ""); - return 0; - } - - while (*arg) - { - int i; - char *next = skip_to (0, arg); - - nul_terminate (arg); - - for (i = 0; term_table[i].name; i++) - { - if (grub_strcmp (arg, term_table[i].name) == 0) - { - if (term_table[i].flags & TERM_NEED_INIT) - { - errnum = ERR_DEV_NEED_INIT; - return 1; - } - - if (default_term < 0) - default_term = i; - - term_bitmap |= (1 << i); - break; - } - } - - if (! term_table[i].name) - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - arg = next; - } - - /* If multiple terminals are specified, wait until the user pushes any - key on one of the terminals. */ - if (term_bitmap & ~(1 << default_term)) - { - int time1, time2 = -1; - - /* XXX: Disable the pager. */ - count_lines = -1; - - /* Get current time. */ - while ((time1 = getrtsecs ()) == 0xFF) - ; - - /* Wait for a key input. */ - while (to) - { - int i; - - for (i = 0; term_table[i].name; i++) - { - if (term_bitmap & (1 << i)) - { - if (term_table[i].checkkey () >= 0) - { - (void) term_table[i].getkey (); - default_term = i; - - goto end; - } - } - } - - /* Prompt the user, once per sec. */ - if ((time1 = getrtsecs ()) != time2 && time1 != 0xFF) - { - if (! no_message) - { - /* Need to set CURRENT_TERM to each of selected - terminals. */ - for (i = 0; term_table[i].name; i++) - if (term_bitmap & (1 << i)) - { - current_term = term_table + i; - grub_printf ("\rPress any key to continue.\n"); - } - - /* Restore CURRENT_TERM. */ - current_term = prev_term; - } - - time2 = time1; - if (to > 0) - to--; - } - } - } - - end: - current_term = term_table + default_term; - current_term->flags = term_flags; - - if (lines) - max_lines = lines; - else - /* 24 would be a good default value. */ - max_lines = 24; - - /* If the interface is currently the command-line, - restart it to repaint the screen. */ - if (current_term != prev_term && (flags & BUILTIN_CMDLINE)) - grub_longjmp (restart_cmdline_env, 0); - - return 0; -} - -static struct builtin builtin_terminal = -{ - "terminal", - terminal_func, - BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules]", - "Select a terminal. When multiple terminals are specified, wait until" - " you push any key to continue. If both console and serial are specified," - " the terminal to which you input a key first will be selected. If no" - " argument is specified, print current setting. The option --dumb" - " specifies that your terminal is dumb, otherwise, vt100-compatibility" - " is assumed. If you specify --no-echo, input characters won't be echoed." - " If you specify --no-edit, the BASH-like editing feature will be disabled." - " If --timeout is present, this command will wait at most for SECS" - " seconds. The option --lines specifies the maximum number of lines." - " The option --silent is used to suppress messages." -}; -#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */ - - -#ifdef SUPPORT_SERIAL -static int -terminfo_func (char *arg, int flags) -{ - struct terminfo term; - - if (*arg) - { - struct - { - const char *name; - char *var; - } - options[] = - { - {"--name=", term.name}, - {"--cursor-address=", term.cursor_address}, - {"--clear-screen=", term.clear_screen}, - {"--enter-standout-mode=", term.enter_standout_mode}, - {"--exit-standout-mode=", term.exit_standout_mode} - }; - - grub_memset (&term, 0, sizeof (term)); - - while (*arg) - { - int i; - char *next = skip_to (0, arg); - - nul_terminate (arg); - - for (i = 0; i < sizeof (options) / sizeof (options[0]); i++) - { - const char *name = options[i].name; - int len = grub_strlen (name); - - if (! grub_memcmp (arg, name, len)) - { - grub_strcpy (options[i].var, ti_unescape_string (arg + len)); - break; - } - } - - if (i == sizeof (options) / sizeof (options[0])) - { - errnum = ERR_BAD_ARGUMENT; - return errnum; - } - - arg = next; - } - - if (term.name[0] == 0 || term.cursor_address[0] == 0) - { - errnum = ERR_BAD_ARGUMENT; - return errnum; - } - - ti_set_term (&term); - } - else - { - /* No option specifies printing out current settings. */ - ti_get_term (&term); - - grub_printf ("name=%s\n", - ti_escape_string (term.name)); - grub_printf ("cursor_address=%s\n", - ti_escape_string (term.cursor_address)); - grub_printf ("clear_screen=%s\n", - ti_escape_string (term.clear_screen)); - grub_printf ("enter_standout_mode=%s\n", - ti_escape_string (term.enter_standout_mode)); - grub_printf ("exit_standout_mode=%s\n", - ti_escape_string (term.exit_standout_mode)); - } - - return 0; -} - -static struct builtin builtin_terminfo = -{ - "terminfo", - terminfo_func, - BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "terminfo [--name=NAME --cursor-address=SEQ [--clear-screen=SEQ]" - " [--enter-standout-mode=SEQ] [--exit-standout-mode=SEQ]]", - - "Define the capabilities of your terminal. Use this command to" - " define escape sequences, if it is not vt100-compatible." - " You may use \\e for ESC and ^X for a control character." - " If no option is specified, the current settings are printed." -}; -#endif /* SUPPORT_SERIAL */ - - -/* testload */ -static int -testload_func (char *arg, int flags) -{ - int i; - - kernel_type = KERNEL_TYPE_NONE; - - if (! grub_open (arg)) - return 1; - - disk_read_hook = disk_read_print_func; - - /* Perform filesystem test on the specified file. */ - /* Read whole file first. */ - grub_printf ("Whole file: "); - - grub_read ((char *) RAW_ADDR (0x100000), -1); - - /* Now compare two sections of the file read differently. */ - - for (i = 0; i < 0x10ac0; i++) - { - *((unsigned char *) RAW_ADDR (0x200000 + i)) = 0; - *((unsigned char *) RAW_ADDR (0x300000 + i)) = 1; - } - - /* First partial read. */ - grub_printf ("\nPartial read 1: "); - - grub_seek (0); - grub_read ((char *) RAW_ADDR (0x200000), 0x7); - grub_read ((char *) RAW_ADDR (0x200007), 0x100); - grub_read ((char *) RAW_ADDR (0x200107), 0x10); - grub_read ((char *) RAW_ADDR (0x200117), 0x999); - grub_read ((char *) RAW_ADDR (0x200ab0), 0x10); - grub_read ((char *) RAW_ADDR (0x200ac0), 0x10000); - - /* Second partial read. */ - grub_printf ("\nPartial read 2: "); - - grub_seek (0); - grub_read ((char *) RAW_ADDR (0x300000), 0x10000); - grub_read ((char *) RAW_ADDR (0x310000), 0x10); - grub_read ((char *) RAW_ADDR (0x310010), 0x7); - grub_read ((char *) RAW_ADDR (0x310017), 0x10); - grub_read ((char *) RAW_ADDR (0x310027), 0x999); - grub_read ((char *) RAW_ADDR (0x3109c0), 0x100); - - grub_printf ("\nHeader1 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x\n", - *((int *) RAW_ADDR (0x200000)), - *((int *) RAW_ADDR (0x200004)), - *((int *) RAW_ADDR (0x200008)), - *((int *) RAW_ADDR (0x20000c))); - - grub_printf ("Header2 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x\n", - *((int *) RAW_ADDR (0x300000)), - *((int *) RAW_ADDR (0x300004)), - *((int *) RAW_ADDR (0x300008)), - *((int *) RAW_ADDR (0x30000c))); - - for (i = 0; i < 0x10ac0; i++) - if (*((unsigned char *) RAW_ADDR (0x200000 + i)) - != *((unsigned char *) RAW_ADDR (0x300000 + i))) - break; - - grub_printf ("Max is 0x10ac0: i=0x%x, filepos=0x%x\n", i, filepos); - disk_read_hook = 0; - grub_close (); - return 0; -} - -static struct builtin builtin_testload = -{ - "testload", - testload_func, - BUILTIN_CMDLINE, - "testload FILE", - "Read the entire contents of FILE in several different ways and" - " compares them, to test the filesystem code. The output is somewhat" - " cryptic, but if no errors are reported and the final `i=X," - " filepos=Y' reading has X and Y equal, then it is definitely" - " consistent, and very likely works correctly subject to a" - " consistent offset error. If this test succeeds, then a good next" - " step is to try loading a kernel." -}; - - -/* testvbe MODE */ -static int -testvbe_func (char *arg, int flags) -{ - int mode_number; - struct vbe_controller controller; - struct vbe_mode mode; - - if (! *arg) - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - if (! safe_parse_maxint (&arg, &mode_number)) - return 1; - - /* Preset `VBE2'. */ - grub_memmove (controller.signature, "VBE2", 4); - - /* Detect VBE BIOS. */ - if (get_vbe_controller_info (&controller) != 0x004F) - { - grub_printf (" VBE BIOS is not present.\n"); - return 0; - } - - if (controller.version < 0x0200) - { - grub_printf (" VBE version %d.%d is not supported.\n", - (int) (controller.version >> 8), - (int) (controller.version & 0xFF)); - return 0; - } - - if (get_vbe_mode_info (mode_number, &mode) != 0x004F - || (mode.mode_attributes & 0x0091) != 0x0091) - { - grub_printf (" Mode 0x%x is not supported.\n", mode_number); - return 0; - } - - /* Now trip to the graphics mode. */ - if (set_vbe_mode (mode_number | (1 << 14)) != 0x004F) - { - grub_printf (" Switching to Mode 0x%x failed.\n", mode_number); - return 0; - } - - /* Draw something on the screen... */ - { - unsigned char *base_buf = (unsigned char *) mode.phys_base; - int scanline = controller.version >= 0x0300 - ? mode.linear_bytes_per_scanline : mode.bytes_per_scanline; - /* FIXME: this assumes that any depth is a modulo of 8. */ - int bpp = mode.bits_per_pixel / 8; - int width = mode.x_resolution; - int height = mode.y_resolution; - int x, y; - unsigned color = 0; - - /* Iterate drawing on the screen, until the user hits any key. */ - while (checkkey () == -1) - { - for (y = 0; y < height; y++) - { - unsigned char *line_buf = base_buf + scanline * y; - - for (x = 0; x < width; x++) - { - unsigned char *buf = line_buf + bpp * x; - int i; - - for (i = 0; i < bpp; i++, buf++) - *buf = (color >> (i * 8)) & 0xff; - } - - color++; - } - } - - /* Discard the input. */ - getkey (); - } - - /* Back to the default text mode. */ - if (set_vbe_mode (0x03) != 0x004F) - { - /* Why?! */ - grub_reboot (); - } - - return 0; -} - -static struct builtin builtin_testvbe = -{ - "testvbe", - testvbe_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "testvbe MODE", - "Test the VBE mode MODE. Hit any key to return." -}; - - -#ifdef SUPPORT_NETBOOT -/* tftpserver */ -static int -tftpserver_func (char *arg, int flags) -{ - if (! *arg || ! ifconfig (0, 0, 0, arg)) - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - print_network_configuration (); - return 0; -} - -static struct builtin builtin_tftpserver = -{ - "tftpserver", - tftpserver_func, - BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, - "tftpserver IPADDR", - "Override the TFTP server address." -}; -#endif /* SUPPORT_NETBOOT */ - - -/* timeout */ -static int -timeout_func (char *arg, int flags) -{ - if (! safe_parse_maxint (&arg, &grub_timeout)) - return 1; - - return 0; -} - -static struct builtin builtin_timeout = -{ - "timeout", - timeout_func, - BUILTIN_MENU, -#if 0 - "timeout SEC", - "Set a timeout, in SEC seconds, before automatically booting the" - " default entry (normally the first entry defined)." -#endif -}; - - -/* title */ -static int -title_func (char *arg, int flags) -{ - /* This function is not actually used at least currently. */ - return 0; -} - -static struct builtin builtin_title = -{ - "title", - title_func, - BUILTIN_TITLE, -#if 0 - "title [NAME ...]", - "Start a new boot entry, and set its name to the contents of the" - " rest of the line, starting with the first non-space character." -#endif -}; - - -/* unhide */ -static int -unhide_func (char *arg, int flags) -{ - if (! set_device (arg)) - return 1; - - if (! set_partition_hidden_flag (0)) - return 1; - - return 0; -} - -static struct builtin builtin_unhide = -{ - "unhide", - unhide_func, - BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, - "unhide PARTITION", - "Unhide PARTITION by clearing the \"hidden\" bit in its" - " partition type code." -}; - - -/* uppermem */ -static int -uppermem_func (char *arg, int flags) -{ - if (! safe_parse_maxint (&arg, (int *) &mbi.mem_upper)) - return 1; - - mbi.flags &= ~MB_INFO_MEM_MAP; - return 0; -} - -static struct builtin builtin_uppermem = -{ - "uppermem", - uppermem_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "uppermem KBYTES", - "Force GRUB to assume that only KBYTES kilobytes of upper memory are" - " installed. Any system address range maps are discarded." -}; - - -/* vbeprobe */ -static int -vbeprobe_func (char *arg, int flags) -{ - struct vbe_controller controller; - unsigned short *mode_list; - int mode_number = -1; - - auto unsigned long vbe_far_ptr_to_linear (unsigned long); - - unsigned long vbe_far_ptr_to_linear (unsigned long ptr) - { - unsigned short seg = (ptr >> 16); - unsigned short off = (ptr & 0xFFFF); - - return (seg << 4) + off; - } - - if (*arg) - { - if (! safe_parse_maxint (&arg, &mode_number)) - return 1; - } - - /* Set the signature to `VBE2', to obtain VBE 3.0 information. */ - grub_memmove (controller.signature, "VBE2", 4); - - if (get_vbe_controller_info (&controller) != 0x004F) - { - grub_printf (" VBE BIOS is not present.\n"); - return 0; - } - - /* Check the version. */ - if (controller.version < 0x0200) - { - grub_printf (" VBE version %d.%d is not supported.\n", - (int) (controller.version >> 8), - (int) (controller.version & 0xFF)); - return 0; - } - - /* Print some information. */ - grub_printf (" VBE version %d.%d\n", - (int) (controller.version >> 8), - (int) (controller.version & 0xFF)); - - /* Iterate probing modes. */ - for (mode_list - = (unsigned short *) vbe_far_ptr_to_linear (controller.video_mode); - *mode_list != 0xFFFF; - mode_list++) - { - struct vbe_mode mode; - - if (get_vbe_mode_info (*mode_list, &mode) != 0x004F) - continue; - - /* Skip this, if this is not supported or linear frame buffer - mode is not support. */ - if ((mode.mode_attributes & 0x0081) != 0x0081) - continue; - - if (mode_number == -1 || mode_number == *mode_list) - { - char *model; - switch (mode.memory_model) - { - case 0x00: model = "Text"; break; - case 0x01: model = "CGA graphics"; break; - case 0x02: model = "Hercules graphics"; break; - case 0x03: model = "Planar"; break; - case 0x04: model = "Packed pixel"; break; - case 0x05: model = "Non-chain 4, 256 color"; break; - case 0x06: model = "Direct Color"; break; - case 0x07: model = "YUV"; break; - default: model = "Unknown"; break; - } - - grub_printf (" 0x%x: %s, %ux%ux%u\n", - (unsigned) *mode_list, - model, - (unsigned) mode.x_resolution, - (unsigned) mode.y_resolution, - (unsigned) mode.bits_per_pixel); - - if (mode_number != -1) - break; - } - } - - if (mode_number != -1 && mode_number != *mode_list) - grub_printf (" Mode 0x%x is not found or supported.\n", mode_number); - - return 0; -} - -static struct builtin builtin_vbeprobe = -{ - "vbeprobe", - vbeprobe_func, - BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "vbeprobe [MODE]", - "Probe VBE information. If the mode number MODE is specified, show only" - " the information about only the mode." -}; - - -/* The table of builtin commands. Sorted in dictionary order. */ -struct builtin *builtin_table[] = -{ - &builtin_blocklist, - &builtin_boot, -#ifdef SUPPORT_NETBOOT - &builtin_bootp, -#endif /* SUPPORT_NETBOOT */ - &builtin_cat, - &builtin_chainloader, - &builtin_cmp, - &builtin_color, - &builtin_configfile, - &builtin_debug, - &builtin_default, -#ifdef GRUB_UTIL - &builtin_device, -#endif /* GRUB_UTIL */ -#ifdef SUPPORT_NETBOOT - &builtin_dhcp, -#endif /* SUPPORT_NETBOOT */ - &builtin_displayapm, - &builtin_displaymem, -#ifdef GRUB_UTIL - &builtin_dump, -#endif /* GRUB_UTIL */ - &builtin_embed, - &builtin_fallback, - &builtin_find, - &builtin_fstest, - &builtin_geometry, - &builtin_halt, - &builtin_help, - &builtin_hiddenmenu, - &builtin_hide, -#ifdef SUPPORT_NETBOOT - &builtin_ifconfig, -#endif /* SUPPORT_NETBOOT */ - &builtin_impsprobe, - &builtin_initrd, - &builtin_install, - &builtin_ioprobe, - &builtin_kernel, - &builtin_lock, - &builtin_makeactive, - &builtin_map, -#ifdef USE_MD5_PASSWORDS - &builtin_md5crypt, -#endif /* USE_MD5_PASSWORDS */ - &builtin_module, - &builtin_modulenounzip, - &builtin_pager, - &builtin_partnew, - &builtin_parttype, - &builtin_password, - &builtin_pause, -#ifdef GRUB_UTIL - &builtin_quit, -#endif /* GRUB_UTIL */ -#ifdef SUPPORT_NETBOOT - &builtin_rarp, -#endif /* SUPPORT_NETBOOT */ - &builtin_read, - &builtin_reboot, - &builtin_root, - &builtin_rootnoverify, - &builtin_savedefault, -#ifdef SUPPORT_SERIAL - &builtin_serial, -#endif /* SUPPORT_SERIAL */ - &builtin_setkey, - &builtin_setup, -#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) - &builtin_terminal, -#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */ -#ifdef SUPPORT_SERIAL - &builtin_terminfo, -#endif /* SUPPORT_SERIAL */ - &builtin_testload, - &builtin_testvbe, -#ifdef SUPPORT_NETBOOT - &builtin_tftpserver, -#endif /* SUPPORT_NETBOOT */ - &builtin_timeout, - &builtin_title, - &builtin_unhide, - &builtin_uppermem, - &builtin_vbeprobe, - 0 -}; diff --git a/stage2/char_io.c b/stage2/char_io.c deleted file mode 100644 index c86c24066..000000000 --- a/stage2/char_io.c +++ /dev/null @@ -1,1283 +0,0 @@ -/* char_io.c - basic console input and output */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2002,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include - -#ifdef SUPPORT_HERCULES -# include -#endif - -#ifdef SUPPORT_SERIAL -# include -#endif - -#ifndef STAGE1_5 -struct term_entry term_table[] = - { - { - "console", - 0, - console_putchar, - console_checkkey, - console_getkey, - console_getxy, - console_gotoxy, - console_cls, - console_setcolorstate, - console_setcolor, - console_setcursor - }, -#ifdef SUPPORT_SERIAL - { - "serial", - /* A serial device must be initialized. */ - TERM_NEED_INIT, - serial_putchar, - serial_checkkey, - serial_getkey, - serial_getxy, - serial_gotoxy, - serial_cls, - serial_setcolorstate, - 0, - 0 - }, -#endif /* SUPPORT_SERIAL */ -#ifdef SUPPORT_HERCULES - { - "hercules", - 0, - hercules_putchar, - console_checkkey, - console_getkey, - hercules_getxy, - hercules_gotoxy, - hercules_cls, - hercules_setcolorstate, - hercules_setcolor, - hercules_setcursor - }, -#endif /* SUPPORT_HERCULES */ - /* This must be the last entry. */ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } - }; - -/* This must be console. */ -struct term_entry *current_term = term_table; - -int max_lines = 24; -int count_lines = -1; -int use_pager = 1; -#endif - -void -print_error (void) -{ - if (errnum > ERR_NONE && errnum < MAX_ERR_NUM) -#ifndef STAGE1_5 - /* printf("\7\n %s\n", err_list[errnum]); */ - printf ("\nError %u: %s\n", errnum, err_list[errnum]); -#else /* STAGE1_5 */ - printf ("Error %u\n", errnum); -#endif /* STAGE1_5 */ -} - -char * -convert_to_ascii (char *buf, int c,...) -{ - unsigned long num = *((&c) + 1), mult = 10; - char *ptr = buf; - -#ifndef STAGE1_5 - if (c == 'x' || c == 'X') - mult = 16; - - if ((num & 0x80000000uL) && c == 'd') - { - num = (~num) + 1; - *(ptr++) = '-'; - buf++; - } -#endif - - do - { - int dig = num % mult; - *(ptr++) = ((dig > 9) ? dig + 'a' - 10 : '0' + dig); - } - while (num /= mult); - - /* reorder to correct direction!! */ - { - char *ptr1 = ptr - 1; - char *ptr2 = buf; - while (ptr1 > ptr2) - { - int tmp = *ptr1; - *ptr1 = *ptr2; - *ptr2 = tmp; - ptr1--; - ptr2++; - } - } - - return ptr; -} - -void -grub_putstr (const char *str) -{ - while (*str) - grub_putchar (*str++); -} - -void -grub_printf (const char *format,...) -{ - int *dataptr = (int *) &format; - char c, str[16]; - - dataptr++; - - while ((c = *(format++)) != 0) - { - if (c != '%') - grub_putchar (c); - else - switch (c = *(format++)) - { -#ifndef STAGE1_5 - case 'd': - case 'x': - case 'X': -#endif - case 'u': - *convert_to_ascii (str, c, *((unsigned long *) dataptr++)) = 0; - grub_putstr (str); - break; - -#ifndef STAGE1_5 - case 'c': - grub_putchar ((*(dataptr++)) & 0xff); - break; - - case 's': - grub_putstr ((char *) *(dataptr++)); - break; -#endif - } - } -} - -#ifndef STAGE1_5 -int -grub_sprintf (char *buffer, const char *format, ...) -{ - /* XXX hohmuth - ugly hack -- should unify with printf() */ - int *dataptr = (int *) &format; - char c, *ptr, str[16]; - char *bp = buffer; - - dataptr++; - - while ((c = *format++) != 0) - { - if (c != '%') - *bp++ = c; /* putchar(c); */ - else - switch (c = *(format++)) - { - case 'd': case 'u': case 'x': - *convert_to_ascii (str, c, *((unsigned long *) dataptr++)) = 0; - - ptr = str; - - while (*ptr) - *bp++ = *(ptr++); /* putchar(*(ptr++)); */ - break; - - case 'c': *bp++ = (*(dataptr++))&0xff; - /* putchar((*(dataptr++))&0xff); */ - break; - - case 's': - ptr = (char *) (*(dataptr++)); - - while ((c = *ptr++) != 0) - *bp++ = c; /* putchar(c); */ - break; - } - } - - *bp = 0; - return bp - buffer; -} - - -void -init_page (void) -{ - cls (); - - grub_printf ("\n GNU GRUB version %s (%dK lower / %dK upper memory)\n\n", - version_string, mbi.mem_lower, mbi.mem_upper); -} - -/* The number of the history entries. */ -static int num_history = 0; - -/* Get the NOth history. If NO is less than zero or greater than or - equal to NUM_HISTORY, return NULL. Otherwise return a valid string. */ -static char * -get_history (int no) -{ - if (no < 0 || no >= num_history) - return 0; - - return (char *) HISTORY_BUF + MAX_CMDLINE * no; -} - -/* Add CMDLINE to the history buffer. */ -static void -add_history (const char *cmdline, int no) -{ - grub_memmove ((char *) HISTORY_BUF + MAX_CMDLINE * (no + 1), - (char *) HISTORY_BUF + MAX_CMDLINE * no, - MAX_CMDLINE * (num_history - no)); - grub_strcpy ((char *) HISTORY_BUF + MAX_CMDLINE * no, cmdline); - if (num_history < HISTORY_SIZE) - num_history++; -} - -static int -real_get_cmdline (char *prompt, char *cmdline, int maxlen, - int echo_char, int readline) -{ - /* This is a rather complicated function. So explain the concept. - - A command-line consists of ``section''s. A section is a part of the - line which may be displayed on the screen, but a section is never - displayed with another section simultaneously. - - Each section is basically 77 or less characters, but the exception - is the first section, which is 78 or less characters, because the - starting point is special. See below. - - The first section contains a prompt and a command-line (or the - first part of a command-line when it is too long to be fit in the - screen). So, in the first section, the number of command-line - characters displayed is 78 minus the length of the prompt (or - less). If the command-line has more characters, `>' is put at the - position 78 (zero-origin), to inform the user of the hidden - characters. - - Other sections always have `<' at the first position, since there - is absolutely a section before each section. If there is a section - after another section, this section consists of 77 characters and - `>' at the last position. The last section has 77 or less - characters and doesn't have `>'. - - Each section other than the last shares some characters with the - previous section. This region is called ``margin''. If the cursor - is put at the magin which is shared by the first section and the - second, the first section is displayed. Otherwise, a displayed - section is switched to another section, only if the cursor is put - outside that section. */ - - /* XXX: These should be defined in shared.h, but I leave these here, - until this code is freezed. */ -#define CMDLINE_WIDTH 78 -#define CMDLINE_MARGIN 10 - - int xpos, lpos, c, section; - /* The length of PROMPT. */ - int plen; - /* The length of the command-line. */ - int llen; - /* The index for the history. */ - int history = -1; - /* The working buffer for the command-line. */ - char *buf = (char *) CMDLINE_BUF; - /* The kill buffer. */ - char *kill_buf = (char *) KILL_BUF; - - /* Nested function definitions for code simplicity. */ - - /* The forward declarations of nested functions are prefixed - with `auto'. */ - auto void cl_refresh (int full, int len); - auto void cl_backward (int count); - auto void cl_forward (int count); - auto void cl_insert (const char *str); - auto void cl_delete (int count); - auto void cl_init (void); - - /* Move the cursor backward. */ - void cl_backward (int count) - { - lpos -= count; - - /* If the cursor is in the first section, display the first section - instead of the second. */ - if (section == 1 && plen + lpos < CMDLINE_WIDTH) - cl_refresh (1, 0); - else if (xpos - count < 1) - cl_refresh (1, 0); - else - { - xpos -= count; - - if (current_term->flags & TERM_DUMB) - { - int i; - - for (i = 0; i < count; i++) - grub_putchar ('\b'); - } - else - gotoxy (xpos, getxy () & 0xFF); - } - } - - /* Move the cursor forward. */ - void cl_forward (int count) - { - lpos += count; - - /* If the cursor goes outside, scroll the screen to the right. */ - if (xpos + count >= CMDLINE_WIDTH) - cl_refresh (1, 0); - else - { - xpos += count; - - if (current_term->flags & TERM_DUMB) - { - int i; - - for (i = lpos - count; i < lpos; i++) - { - if (! echo_char) - grub_putchar (buf[i]); - else - grub_putchar (echo_char); - } - } - else - gotoxy (xpos, getxy () & 0xFF); - } - } - - /* Refresh the screen. If FULL is true, redraw the full line, otherwise, - only LEN characters from LPOS. */ - void cl_refresh (int full, int len) - { - int i; - int start; - int pos = xpos; - - if (full) - { - /* Recompute the section number. */ - if (lpos + plen < CMDLINE_WIDTH) - section = 0; - else - section = ((lpos + plen - CMDLINE_WIDTH) - / (CMDLINE_WIDTH - 1 - CMDLINE_MARGIN) + 1); - - /* From the start to the end. */ - len = CMDLINE_WIDTH; - pos = 0; - grub_putchar ('\r'); - - /* If SECTION is the first section, print the prompt, otherwise, - print `<'. */ - if (section == 0) - { - grub_printf ("%s", prompt); - len -= plen; - pos += plen; - } - else - { - grub_putchar ('<'); - len--; - pos++; - } - } - - /* Compute the index to start writing BUF and the resulting position - on the screen. */ - if (section == 0) - { - int offset = 0; - - if (! full) - offset = xpos - plen; - - start = 0; - xpos = lpos + plen; - start += offset; - } - else - { - int offset = 0; - - if (! full) - offset = xpos - 1; - - start = ((section - 1) * (CMDLINE_WIDTH - 1 - CMDLINE_MARGIN) - + CMDLINE_WIDTH - plen - CMDLINE_MARGIN); - xpos = lpos + 1 - start; - start += offset; - } - - /* Print BUF. If ECHO_CHAR is not zero, put it instead. */ - for (i = start; i < start + len && i < llen; i++) - { - if (! echo_char) - grub_putchar (buf[i]); - else - grub_putchar (echo_char); - - pos++; - } - - /* Fill up the rest of the line with spaces. */ - for (; i < start + len; i++) - { - grub_putchar (' '); - pos++; - } - - /* If the cursor is at the last position, put `>' or a space, - depending on if there are more characters in BUF. */ - if (pos == CMDLINE_WIDTH) - { - if (start + len < llen) - grub_putchar ('>'); - else - grub_putchar (' '); - - pos++; - } - - /* Back to XPOS. */ - if (current_term->flags & TERM_DUMB) - { - for (i = 0; i < pos - xpos; i++) - grub_putchar ('\b'); - } - else - gotoxy (xpos, getxy () & 0xFF); - } - - /* Initialize the command-line. */ - void cl_init (void) - { - /* Distinguish us from other lines and error messages! */ - grub_putchar ('\n'); - - /* Print full line and set position here. */ - cl_refresh (1, 0); - } - - /* Insert STR to BUF. */ - void cl_insert (const char *str) - { - int l = grub_strlen (str); - - if (llen + l < maxlen) - { - if (lpos == llen) - grub_memmove (buf + lpos, str, l + 1); - else - { - grub_memmove (buf + lpos + l, buf + lpos, llen - lpos + 1); - grub_memmove (buf + lpos, str, l); - } - - llen += l; - lpos += l; - if (xpos + l >= CMDLINE_WIDTH) - cl_refresh (1, 0); - else if (xpos + l + llen - lpos > CMDLINE_WIDTH) - cl_refresh (0, CMDLINE_WIDTH - xpos); - else - cl_refresh (0, l + llen - lpos); - } - } - - /* Delete COUNT characters in BUF. */ - void cl_delete (int count) - { - grub_memmove (buf + lpos, buf + lpos + count, llen - count + 1); - llen -= count; - - if (xpos + llen + count - lpos > CMDLINE_WIDTH) - cl_refresh (0, CMDLINE_WIDTH - xpos); - else - cl_refresh (0, llen + count - lpos); - } - - plen = grub_strlen (prompt); - llen = grub_strlen (cmdline); - - if (maxlen > MAX_CMDLINE) - { - maxlen = MAX_CMDLINE; - if (llen >= MAX_CMDLINE) - { - llen = MAX_CMDLINE - 1; - cmdline[MAX_CMDLINE] = 0; - } - } - lpos = llen; - grub_strcpy (buf, cmdline); - - cl_init (); - - while ((c = ASCII_CHAR (getkey ())) != '\n' && c != '\r') - { - /* If READLINE is non-zero, handle readline-like key bindings. */ - if (readline) - { - switch (c) - { - case 9: /* TAB lists completions */ - { - int i; - /* POS points to the first space after a command. */ - int pos = 0; - int ret; - char *completion_buffer = (char *) COMPLETION_BUF; - int equal_pos = -1; - int is_filename; - - /* Find the first word. */ - while (buf[pos] == ' ') - pos++; - while (buf[pos] && buf[pos] != '=' && buf[pos] != ' ') - pos++; - - is_filename = (lpos > pos); - - /* Find the position of the equal character after a - command, and replace it with a space. */ - for (i = pos; buf[i] && buf[i] != ' '; i++) - if (buf[i] == '=') - { - equal_pos = i; - buf[i] = ' '; - break; - } - - /* Find the position of the first character in this - word. */ - for (i = lpos; i > 0 && buf[i - 1] != ' '; i--) - ; - - /* Invalidate the cache, because the user may exchange - removable disks. */ - buf_drive = -1; - - /* Copy this word to COMPLETION_BUFFER and do the - completion. */ - grub_memmove (completion_buffer, buf + i, lpos - i); - completion_buffer[lpos - i] = 0; - ret = print_completions (is_filename, 1); - errnum = ERR_NONE; - - if (ret >= 0) - { - /* Found, so insert COMPLETION_BUFFER. */ - cl_insert (completion_buffer + lpos - i); - - if (ret > 0) - { - /* There are more than one candidates, so print - the list. */ - grub_putchar ('\n'); - print_completions (is_filename, 0); - errnum = ERR_NONE; - } - } - - /* Restore the command-line. */ - if (equal_pos >= 0) - buf[equal_pos] = '='; - - if (ret) - cl_init (); - } - break; - case 1: /* C-a go to beginning of line */ - cl_backward (lpos); - break; - case 5: /* C-e go to end of line */ - cl_forward (llen - lpos); - break; - case 6: /* C-f forward one character */ - if (lpos < llen) - cl_forward (1); - break; - case 2: /* C-b backward one character */ - if (lpos > 0) - cl_backward (1); - break; - case 21: /* C-u kill to beginning of line */ - if (lpos == 0) - break; - /* Copy the string being deleted to KILL_BUF. */ - grub_memmove (kill_buf, buf, lpos); - kill_buf[lpos] = 0; - { - /* XXX: Not very clever. */ - - int count = lpos; - - cl_backward (lpos); - cl_delete (count); - } - break; - case 11: /* C-k kill to end of line */ - if (lpos == llen) - break; - /* Copy the string being deleted to KILL_BUF. */ - grub_memmove (kill_buf, buf + lpos, llen - lpos + 1); - cl_delete (llen - lpos); - break; - case 25: /* C-y yank the kill buffer */ - cl_insert (kill_buf); - break; - case 16: /* C-p fetch the previous command */ - { - char *p; - - if (history < 0) - /* Save the working buffer. */ - grub_strcpy (cmdline, buf); - else if (grub_strcmp (get_history (history), buf) != 0) - /* If BUF is modified, add it into the history list. */ - add_history (buf, history); - - history++; - p = get_history (history); - if (! p) - { - history--; - break; - } - - grub_strcpy (buf, p); - llen = grub_strlen (buf); - lpos = llen; - cl_refresh (1, 0); - } - break; - case 14: /* C-n fetch the next command */ - { - char *p; - - if (history < 0) - { - break; - } - else if (grub_strcmp (get_history (history), buf) != 0) - /* If BUF is modified, add it into the history list. */ - add_history (buf, history); - - history--; - p = get_history (history); - if (! p) - p = cmdline; - - grub_strcpy (buf, p); - llen = grub_strlen (buf); - lpos = llen; - cl_refresh (1, 0); - } - break; - } - } - - /* ESC, C-d and C-h are always handled. Actually C-d is not - functional if READLINE is zero, as the cursor cannot go - backward, but that's ok. */ - switch (c) - { - case 27: /* ESC immediately return 1 */ - return 1; - case 4: /* C-d delete character under cursor */ - if (lpos == llen) - break; - cl_delete (1); - break; - case 8: /* C-h backspace */ -# ifdef GRUB_UTIL - case 127: /* also backspace */ -# endif - if (lpos > 0) - { - cl_backward (1); - cl_delete (1); - } - break; - default: /* insert printable character into line */ - if (c >= ' ' && c <= '~') - { - char str[2]; - - str[0] = c; - str[1] = 0; - cl_insert (str); - } - } - } - - grub_putchar ('\n'); - - /* If ECHO_CHAR is NUL, remove the leading spaces. */ - lpos = 0; - if (! echo_char) - while (buf[lpos] == ' ') - lpos++; - - /* Copy the working buffer to CMDLINE. */ - grub_memmove (cmdline, buf + lpos, llen - lpos + 1); - - /* If the readline-like feature is turned on and CMDLINE is not - empty, add it into the history list. */ - if (readline && lpos < llen) - add_history (cmdline, 0); - - return 0; -} - -/* Don't use this with a MAXLEN greater than 1600 or so! The problem - is that GET_CMDLINE depends on the everything fitting on the screen - at once. So, the whole screen is about 2000 characters, minus the - PROMPT, and space for error and status lines, etc. MAXLEN must be - at least 1, and PROMPT and CMDLINE must be valid strings (not NULL - or zero-length). - - If ECHO_CHAR is nonzero, echo it instead of the typed character. */ -int -get_cmdline (char *prompt, char *cmdline, int maxlen, - int echo_char, int readline) -{ - int old_cursor; - int ret; - - old_cursor = setcursor (1); - - /* Because it is hard to deal with different conditions simultaneously, - less functional cases are handled here. Assume that TERM_NO_ECHO - implies TERM_NO_EDIT. */ - if (current_term->flags & (TERM_NO_ECHO | TERM_NO_EDIT)) - { - char *p = cmdline; - int c; - - /* Make sure that MAXLEN is not too large. */ - if (maxlen > MAX_CMDLINE) - maxlen = MAX_CMDLINE; - - /* Print only the prompt. The contents of CMDLINE is simply discarded, - even if it is not empty. */ - grub_printf ("%s", prompt); - - /* Gather characters until a newline is gotten. */ - while ((c = ASCII_CHAR (getkey ())) != '\n' && c != '\r') - { - /* Return immediately if ESC is pressed. */ - if (c == 27) - { - setcursor (old_cursor); - return 1; - } - - /* Printable characters are added into CMDLINE. */ - if (c >= ' ' && c <= '~') - { - if (! (current_term->flags & TERM_NO_ECHO)) - grub_putchar (c); - - /* Preceding space characters must be ignored. */ - if (c != ' ' || p != cmdline) - *p++ = c; - } - } - - *p = 0; - - if (! (current_term->flags & TERM_NO_ECHO)) - grub_putchar ('\n'); - - setcursor (old_cursor); - return 0; - } - - /* Complicated features are left to real_get_cmdline. */ - ret = real_get_cmdline (prompt, cmdline, maxlen, echo_char, readline); - setcursor (old_cursor); - return ret; -} - -int -safe_parse_maxint (char **str_ptr, int *myint_ptr) -{ - char *ptr = *str_ptr; - int myint = 0; - int mult = 10, found = 0; - - /* - * Is this a hex number? - */ - if (*ptr == '0' && tolower (*(ptr + 1)) == 'x') - { - ptr += 2; - mult = 16; - } - - while (1) - { - /* A bit tricky. This below makes use of the equivalence: - (A >= B && A <= C) <=> ((A - B) <= (C - B)) - when C > B and A is unsigned. */ - unsigned int digit; - - digit = tolower (*ptr) - '0'; - if (digit > 9) - { - digit -= 'a' - '0'; - if (mult == 10 || digit > 5) - break; - digit += 10; - } - - found = 1; - if (myint > ((MAXINT - digit) / mult)) - { - errnum = ERR_NUMBER_OVERFLOW; - return 0; - } - myint = (myint * mult) + digit; - ptr++; - } - - if (!found) - { - errnum = ERR_NUMBER_PARSING; - return 0; - } - - *str_ptr = ptr; - *myint_ptr = myint; - - return 1; -} -#endif /* STAGE1_5 */ - -#if !defined(STAGE1_5) || defined(FSYS_FAT) -int -grub_tolower (int c) -{ - if (c >= 'A' && c <= 'Z') - return (c + ('a' - 'A')); - - return c; -} -#endif /* ! STAGE1_5 || FSYS_FAT */ - -int -grub_isspace (int c) -{ - switch (c) - { - case ' ': - case '\t': - case '\r': - case '\n': - return 1; - default: - break; - } - - return 0; -} - -#if !defined(STAGE1_5) || defined(FSYS_ISO9660) -int -grub_memcmp (const char *s1, const char *s2, int n) -{ - while (n) - { - if (*s1 < *s2) - return -1; - else if (*s1 > *s2) - return 1; - s1++; - s2++; - n--; - } - - return 0; -} -#endif /* ! STAGE1_5 || FSYS_ISO9660 */ - -#ifndef STAGE1_5 -int -grub_strncat (char *s1, const char *s2, int n) -{ - int i = -1; - - while (++i < n && s1[i] != 0); - - while (i < n && (s1[i++] = *(s2++)) != 0); - - s1[n - 1] = 0; - - if (i >= n) - return 0; - - s1[i] = 0; - - return 1; -} -#endif /* ! STAGE1_5 */ - -/* XXX: This below is an evil hack. Certainly, we should change the - strategy to determine what should be defined and what shouldn't be - defined for each image. For example, it would be better to create - a static library supporting minimal standard C functions and link - each image with the library. Complicated things should be left to - computer, definitely. -okuji */ -#if !defined(STAGE1_5) || defined(FSYS_VSTAFS) -int -grub_strcmp (const char *s1, const char *s2) -{ - while (*s1 || *s2) - { - if (*s1 < *s2) - return -1; - else if (*s1 > *s2) - return 1; - s1 ++; - s2 ++; - } - - return 0; -} -#endif /* ! STAGE1_5 || FSYS_VSTAFS */ - -#ifndef STAGE1_5 -/* Wait for a keypress and return its code. */ -int -getkey (void) -{ - return current_term->getkey (); -} - -/* Check if a key code is available. */ -int -checkkey (void) -{ - return current_term->checkkey (); -} -#endif /* ! STAGE1_5 */ - -/* Display an ASCII character. */ -void -grub_putchar (int c) -{ - if (c == '\n') - grub_putchar ('\r'); -#ifndef STAGE1_5 - else if (c == '\t' && current_term->getxy) - { - int n; - - n = 8 - ((current_term->getxy () >> 8) & 3); - while (n--) - grub_putchar (' '); - - return; - } -#endif /* ! STAGE1_5 */ - -#ifdef STAGE1_5 - - /* In Stage 1.5, only the normal console is supported. */ - console_putchar (c); - -#else /* ! STAGE1_5 */ - - if (c == '\n') - { - /* Internal `more'-like feature. */ - if (count_lines >= 0) - { - count_lines++; - if (count_lines >= max_lines - 2) - { - int tmp; - - /* It's important to disable the feature temporarily, because - the following grub_printf call will print newlines. */ - count_lines = -1; - - if (current_term->setcolorstate) - current_term->setcolorstate (COLOR_STATE_HIGHLIGHT); - - grub_printf ("\n[Hit return to continue]"); - - if (current_term->setcolorstate) - current_term->setcolorstate (COLOR_STATE_NORMAL); - - do - { - tmp = ASCII_CHAR (getkey ()); - } - while (tmp != '\n' && tmp != '\r'); - grub_printf ("\r \r"); - - /* Restart to count lines. */ - count_lines = 0; - return; - } - } - } - - current_term->putchar (c); - -#endif /* ! STAGE1_5 */ -} - -#ifndef STAGE1_5 -void -gotoxy (int x, int y) -{ - current_term->gotoxy (x, y); -} - -int -getxy (void) -{ - return current_term->getxy (); -} - -void -cls (void) -{ - /* If the terminal is dumb, there is no way to clean the terminal. */ - if (current_term->flags & TERM_DUMB) - grub_putchar ('\n'); - else - current_term->cls (); -} - -int -setcursor (int on) -{ - if (current_term->setcursor) - return current_term->setcursor (on); - - return 1; -} -#endif /* ! STAGE1_5 */ - -int -substring (const char *s1, const char *s2) -{ - while (*s1 == *s2) - { - /* The strings match exactly. */ - if (! *(s1++)) - return 0; - s2 ++; - } - - /* S1 is a substring of S2. */ - if (*s1 == 0) - return -1; - - /* S1 isn't a substring. */ - return 1; -} - -#ifndef STAGE1_5 -/* Terminate the string STR with NUL. */ -int -nul_terminate (char *str) -{ - int ch; - - while (*str && ! grub_isspace (*str)) - str++; - - ch = *str; - *str = 0; - return ch; -} - -char * -grub_strstr (const char *s1, const char *s2) -{ - while (*s1) - { - const char *ptr, *tmp; - - ptr = s1; - tmp = s2; - - while (*tmp && *ptr == *tmp) - ptr++, tmp++; - - if (tmp > s2 && ! *tmp) - return (char *) s1; - - s1++; - } - - return 0; -} - -int -grub_strlen (const char *str) -{ - int len = 0; - - while (*str++) - len++; - - return len; -} -#endif /* ! STAGE1_5 */ - -int -memcheck (int addr, int len) -{ -#ifdef GRUB_UTIL - auto int start_addr (void); - auto int end_addr (void); - - auto int start_addr (void) - { - int ret; -# if defined(HAVE_START_SYMBOL) - asm volatile ("movl $start, %0" : "=a" (ret)); -# elif defined(HAVE_USCORE_START_SYMBOL) - asm volatile ("movl $_start, %0" : "=a" (ret)); -# endif - return ret; - } - - auto int end_addr (void) - { - int ret; -# if defined(HAVE_END_SYMBOL) - asm volatile ("movl $end, %0" : "=a" (ret)); -# elif defined(HAVE_USCORE_END_SYMBOL) - asm volatile ("movl $_end, %0" : "=a" (ret)); -# endif - return ret; - } - - if (start_addr () <= addr && end_addr () > addr + len) - return ! errnum; -#endif /* GRUB_UTIL */ - - if ((addr < RAW_ADDR (0x1000)) - || (addr < RAW_ADDR (0x100000) - && RAW_ADDR (mbi.mem_lower * 1024) < (addr + len)) - || (addr >= RAW_ADDR (0x100000) - && RAW_ADDR (mbi.mem_upper * 1024) < ((addr - 0x100000) + len))) - errnum = ERR_WONT_FIT; - - return ! errnum; -} - -void * -grub_memmove (void *to, const void *from, int len) -{ - if (memcheck ((int) to, len)) - { - /* This assembly code is stolen from - linux-2.2.2/include/asm-i386/string.h. This is not very fast - but compact. */ - int d0, d1, d2; - - if (to < from) - { - asm volatile ("cld\n\t" - "rep\n\t" - "movsb" - : "=&c" (d0), "=&S" (d1), "=&D" (d2) - : "0" (len),"1" (from),"2" (to) - : "memory"); - } - else - { - asm volatile ("std\n\t" - "rep\n\t" - "movsb\n\t" - "cld" - : "=&c" (d0), "=&S" (d1), "=&D" (d2) - : "0" (len), - "1" (len - 1 + (const char *) from), - "2" (len - 1 + (char *) to) - : "memory"); - } - } - - return errnum ? NULL : to; -} - -void * -grub_memset (void *start, int c, int len) -{ - char *p = start; - - if (memcheck ((int) start, len)) - { - while (len -- > 0) - *p ++ = c; - } - - return errnum ? NULL : start; -} - -#ifndef STAGE1_5 -char * -grub_strcpy (char *dest, const char *src) -{ - grub_memmove (dest, src, grub_strlen (src) + 1); - return dest; -} -#endif /* ! STAGE1_5 */ - -#ifndef GRUB_UTIL -# undef memcpy -/* GCC emits references to memcpy() for struct copies etc. */ -void *memcpy (void *dest, const void *src, int n) __attribute__ ((alias ("grub_memmove"))); -#endif diff --git a/stage2/cmdline.c b/stage2/cmdline.c deleted file mode 100644 index a6ee3097b..000000000 --- a/stage2/cmdline.c +++ /dev/null @@ -1,257 +0,0 @@ -/* cmdline.c - the device-independent GRUB text command line */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2002,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include - -#ifdef SUPPORT_DISKLESS -# define GRUB 1 -# include -#endif - -grub_jmp_buf restart_cmdline_env; - -/* Find the next word from CMDLINE and return the pointer. If - AFTER_EQUAL is non-zero, assume that the character `=' is treated as - a space. Caution: this assumption is for backward compatibility. */ -char * -skip_to (int after_equal, char *cmdline) -{ - /* Skip until we hit whitespace, or maybe an equal sign. */ - while (*cmdline && *cmdline != ' ' && *cmdline != '\t' && - ! (after_equal && *cmdline == '=')) - cmdline ++; - - /* Skip whitespace, and maybe equal signs. */ - while (*cmdline == ' ' || *cmdline == '\t' || - (after_equal && *cmdline == '=')) - cmdline ++; - - return cmdline; -} - -/* Print a helpful message for the command-line interface. */ -void -print_cmdline_message (int forever) -{ - printf (" [ Minimal BASH-like line editing is supported. For the first word, TAB\n" - " lists possible command completions. Anywhere else TAB lists the possible\n" - " completions of a device/filename.%s ]\n", - (forever ? "" : " ESC at any time exits.")); -} - -/* Find the builtin whose command name is COMMAND and return the - pointer. If not found, return 0. */ -struct builtin * -find_command (char *command) -{ - char *ptr; - char c; - struct builtin **builtin; - - /* Find the first space and terminate the command name. */ - ptr = command; - while (*ptr && *ptr != ' ' && *ptr != '\t' && *ptr != '=') - ptr ++; - - c = *ptr; - *ptr = 0; - - /* Seek out the builtin whose command name is COMMAND. */ - for (builtin = builtin_table; *builtin != 0; builtin++) - { - int ret = grub_strcmp (command, (*builtin)->name); - - if (ret == 0) - { - /* Find the builtin for COMMAND. */ - *ptr = c; - return *builtin; - } - else if (ret < 0) - break; - } - - /* Cannot find COMMAND. */ - errnum = ERR_UNRECOGNIZED; - *ptr = c; - return 0; -} - -/* Initialize the data for the command-line. */ -static void -init_cmdline (void) -{ - /* Initialization. */ - saved_drive = boot_drive; - saved_partition = install_partition; - current_drive = GRUB_INVALID_DRIVE; - errnum = 0; - count_lines = -1; - - /* Restore memory probe state. */ - mbi.mem_upper = saved_mem_upper; - if (mbi.mmap_length) - mbi.flags |= MB_INFO_MEM_MAP; - - /* Initialize the data for the builtin commands. */ - init_builtins (); -} - -/* Enter the command-line interface. HEAP is used for the command-line - buffer. Return only if FOREVER is nonzero and get_cmdline returns - nonzero (ESC is pushed). */ -void -enter_cmdline (char *heap, int forever) -{ - /* Initialize the data and print a message. */ - init_cmdline (); - grub_setjmp (restart_cmdline_env); - init_page (); -#ifdef SUPPORT_DISKLESS - print_network_configuration (); - grub_putchar ('\n'); -#endif - print_cmdline_message (forever); - - while (1) - { - struct builtin *builtin; - char *arg; - - *heap = 0; - print_error (); - errnum = ERR_NONE; - - /* Get the command-line with the minimal BASH-like interface. */ - if (get_cmdline (PACKAGE "> ", heap, 2048, 0, 1)) - return; - - /* If there was no command, grab a new one. */ - if (! heap[0]) - continue; - - /* Find a builtin. */ - builtin = find_command (heap); - if (! builtin) - continue; - - /* If BUILTIN cannot be run in the command-line, skip it. */ - if (! (builtin->flags & BUILTIN_CMDLINE)) - { - errnum = ERR_UNRECOGNIZED; - continue; - } - - /* Invalidate the cache, because the user may exchange removable - disks. */ - buf_drive = -1; - - /* Start to count lines, only if the internal pager is in use. */ - if (use_pager) - count_lines = 0; - - /* Run BUILTIN->FUNC. */ - arg = skip_to (1, heap); - (builtin->func) (arg, BUILTIN_CMDLINE); - - /* Finish the line count. */ - count_lines = -1; - } -} - -/* Run an entry from the script SCRIPT. HEAP is used for the - command-line buffer. If an error occurs, return non-zero, otherwise - return zero. */ -int -run_script (char *script, char *heap) -{ - char *old_entry; - char *cur_entry = script; - - /* Initialize the data. */ - init_cmdline (); - - while (1) - { - struct builtin *builtin; - char *arg; - - print_error (); - - if (errnum) - { - errnum = ERR_NONE; - - /* If a fallback entry is defined, don't prompt a user's - intervention. */ - if (fallback_entryno < 0) - { - grub_printf ("\nPress any key to continue..."); - (void) getkey (); - } - - return 1; - } - - /* Copy the first string in CUR_ENTRY to HEAP. */ - old_entry = cur_entry; - while (*cur_entry++) - ; - - grub_memmove (heap, old_entry, (int) cur_entry - (int) old_entry); - if (! *heap) - { - /* If there is no more command in SCRIPT... */ - - /* If any kernel is not loaded, just exit successfully. */ - if (kernel_type == KERNEL_TYPE_NONE) - return 0; - - /* Otherwise, the command boot is run implicitly. */ - grub_memmove (heap, "boot", 5); - } - - /* Find a builtin. */ - builtin = find_command (heap); - if (! builtin) - { - grub_printf ("%s\n", old_entry); - continue; - } - - if (! (builtin->flags & BUILTIN_NO_ECHO)) - grub_printf ("%s\n", old_entry); - - /* If BUILTIN cannot be run in the command-line, skip it. */ - if (! (builtin->flags & BUILTIN_CMDLINE)) - { - errnum = ERR_UNRECOGNIZED; - continue; - } - - /* Invalidate the cache, because the user may exchange removable - disks. */ - buf_drive = -1; - - /* Run BUILTIN->FUNC. */ - arg = skip_to (1, heap); - (builtin->func) (arg, BUILTIN_SCRIPT); - } -} diff --git a/stage2/common.c b/stage2/common.c deleted file mode 100644 index 09f9e31fd..000000000 --- a/stage2/common.c +++ /dev/null @@ -1,337 +0,0 @@ -/* common.c - miscellaneous shared variables and routines */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2002,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include - -#ifdef SUPPORT_DISKLESS -# define GRUB 1 -# include -#endif - -/* - * Shared BIOS/boot data. - */ - -struct multiboot_info mbi; -unsigned long saved_drive; -unsigned long saved_partition; -unsigned long cdrom_drive; -#ifndef STAGE1_5 -unsigned long saved_mem_upper; - -/* This saves the maximum size of extended memory (in KB). */ -unsigned long extended_memory; -#endif - -/* - * Error code stuff. - */ - -grub_error_t errnum = ERR_NONE; - -#ifndef STAGE1_5 - -char *err_list[] = -{ - [ERR_NONE] = 0, - [ERR_BAD_ARGUMENT] = "Invalid argument", - [ERR_BAD_FILENAME] = - "Filename must be either an absolute pathname or blocklist", - [ERR_BAD_FILETYPE] = "Bad file or directory type", - [ERR_BAD_GZIP_DATA] = "Bad or corrupt data while decompressing file", - [ERR_BAD_GZIP_HEADER] = "Bad or incompatible header in compressed file", - [ERR_BAD_PART_TABLE] = "Partition table invalid or corrupt", - [ERR_BAD_VERSION] = "Mismatched or corrupt version of stage1/stage2", - [ERR_BELOW_1MB] = "Loading below 1MB is not supported", - [ERR_BOOT_COMMAND] = "Kernel must be loaded before booting", - [ERR_BOOT_FAILURE] = "Unknown boot failure", - [ERR_BOOT_FEATURES] = "Unsupported Multiboot features requested", - [ERR_DEV_FORMAT] = "Unrecognized device string", - [ERR_DEV_NEED_INIT] = "Device not initialized yet", - [ERR_DEV_VALUES] = "Invalid device requested", - [ERR_EXEC_FORMAT] = "Invalid or unsupported executable format", - [ERR_FILELENGTH] = - "Filesystem compatibility error, cannot read whole file", - [ERR_FILE_NOT_FOUND] = "File not found", - [ERR_FSYS_CORRUPT] = "Inconsistent filesystem structure", - [ERR_FSYS_MOUNT] = "Cannot mount selected partition", - [ERR_GEOM] = "Selected cylinder exceeds maximum supported by BIOS", - [ERR_NEED_LX_KERNEL] = "Linux kernel must be loaded before initrd", - [ERR_NEED_MB_KERNEL] = "Multiboot kernel must be loaded before modules", - [ERR_NO_DISK] = "Selected disk does not exist", - [ERR_NO_DISK_SPACE] = "No spare sectors on the disk", - [ERR_NO_PART] = "No such partition", - [ERR_NUMBER_OVERFLOW] = "Overflow while parsing number", - [ERR_NUMBER_PARSING] = "Error while parsing number", - [ERR_OUTSIDE_PART] = "Attempt to access block outside partition", - [ERR_PRIVILEGED] = "Must be authenticated", - [ERR_READ] = "Disk read error", - [ERR_SYMLINK_LOOP] = "Too many symbolic links", - [ERR_UNALIGNED] = "File is not sector aligned", - [ERR_UNRECOGNIZED] = "Unrecognized command", - [ERR_WONT_FIT] = "Selected item cannot fit into memory", - [ERR_WRITE] = "Disk write error", -}; - - -/* static for BIOS memory map fakery */ -static struct AddrRangeDesc fakemap[3] = -{ - {20, 0, 0, MB_ARD_MEMORY}, - {20, 0x100000, 0, MB_ARD_MEMORY}, - {20, 0x1000000, 0, MB_ARD_MEMORY} -}; - -/* A big problem is that the memory areas aren't guaranteed to be: - (1) contiguous, (2) sorted in ascending order, or (3) non-overlapping. - Thus this kludge. */ -static unsigned long -mmap_avail_at (unsigned long bottom) -{ - unsigned long long top; - unsigned long addr; - int cont; - - top = bottom; - do - { - for (cont = 0, addr = mbi.mmap_addr; - addr < mbi.mmap_addr + mbi.mmap_length; - addr += *((unsigned long *) addr) + 4) - { - struct AddrRangeDesc *desc = (struct AddrRangeDesc *) addr; - - if (desc->Type == MB_ARD_MEMORY - && desc->BaseAddr <= top - && desc->BaseAddr + desc->Length > top) - { - top = desc->BaseAddr + desc->Length; - cont++; - } - } - } - while (cont); - - /* For now, GRUB assumes 32bits addresses, so... */ - if (top > 0xFFFFFFFF) - top = 0xFFFFFFFF; - - return (unsigned long) top - bottom; -} -#endif /* ! STAGE1_5 */ - -/* This queries for BIOS information. */ -void -init_bios_info (void) -{ -#ifndef STAGE1_5 - unsigned long cont, memtmp, addr; - int drive; -#endif - - /* - * Get information from BIOS on installed RAM. - */ - - mbi.mem_lower = get_memsize (0); - mbi.mem_upper = get_memsize (1); - -#ifndef STAGE1_5 - /* - * We need to call this somewhere before trying to put data - * above 1 MB, since without calling it, address line 20 will be wired - * to 0. Not too desirable. - */ - - gateA20 (1); - - /* Store the size of extended memory in EXTENDED_MEMORY, in order to - tell it to non-Multiboot OSes. */ - extended_memory = mbi.mem_upper; - - /* - * The "mbi.mem_upper" variable only recognizes upper memory in the - * first memory region. If there are multiple memory regions, - * the rest are reported to a Multiboot-compliant OS, but otherwise - * unused by GRUB. - */ - - addr = get_code_end (); - mbi.mmap_addr = addr; - mbi.mmap_length = 0; - cont = 0; - - do - { - cont = get_mmap_entry ((void *) addr, cont); - - /* If the returned buffer's length is zero, quit. */ - if (! *((unsigned long *) addr)) - break; - - mbi.mmap_length += *((unsigned long *) addr) + 4; - addr += *((unsigned long *) addr) + 4; - } - while (cont); - - if (mbi.mmap_length) - { - unsigned long long max_addr; - - /* - * This is to get the lower memory, and upper memory (up to the - * first memory hole), into the "mbi.mem_{lower,upper}" - * elements. This is for OS's that don't care about the memory - * map, but might care about total RAM available. - */ - mbi.mem_lower = mmap_avail_at (0) >> 10; - mbi.mem_upper = mmap_avail_at (0x100000) >> 10; - - /* Find the maximum available address. Ignore any memory holes. */ - for (max_addr = 0, addr = mbi.mmap_addr; - addr < mbi.mmap_addr + mbi.mmap_length; - addr += *((unsigned long *) addr) + 4) - { - struct AddrRangeDesc *desc = (struct AddrRangeDesc *) addr; - - if (desc->Type == MB_ARD_MEMORY && desc->Length > 0 - && desc->BaseAddr + desc->Length > max_addr) - max_addr = desc->BaseAddr + desc->Length; - } - - extended_memory = (max_addr - 0x100000) >> 10; - } - else if ((memtmp = get_eisamemsize ()) != -1) - { - cont = memtmp & ~0xFFFF; - memtmp = memtmp & 0xFFFF; - - if (cont != 0) - extended_memory = (cont >> 10) + 0x3c00; - else - extended_memory = memtmp; - - if (!cont || (memtmp == 0x3c00)) - memtmp += (cont >> 10); - else - { - /* XXX should I do this at all ??? */ - - mbi.mmap_addr = (unsigned long) fakemap; - mbi.mmap_length = sizeof (fakemap); - fakemap[0].Length = (mbi.mem_lower << 10); - fakemap[1].Length = (memtmp << 10); - fakemap[2].Length = cont; - } - - mbi.mem_upper = memtmp; - } - - saved_mem_upper = mbi.mem_upper; - - /* Get the drive info. */ - /* FIXME: This should be postponed until a Multiboot kernel actually - requires it, because this could slow down the start-up - unreasonably. */ - mbi.drives_length = 0; - mbi.drives_addr = addr; - - /* For now, GRUB doesn't probe floppies, since it is trivial to map - floppy drives to BIOS drives. */ - for (drive = 0x80; drive < 0x88; drive++) - { - struct geometry geom; - struct drive_info *info = (struct drive_info *) addr; - unsigned short *port; - - /* Get the geometry. This ensures that the drive is present. */ - if (get_diskinfo (drive, &geom)) - break; - - /* Clean out the I/O map. */ - grub_memset ((char *) io_map, 0, - IO_MAP_SIZE * sizeof (unsigned short)); - - /* Disable to probe I/O ports temporarily, because this doesn't - work with some BIOSes (maybe they are too buggy). */ -#if 0 - /* Track the int13 handler. */ - track_int13 (drive); -#endif - - /* Set the information. */ - info->drive_number = drive; - info->drive_mode = ((geom.flags & BIOSDISK_FLAG_LBA_EXTENSION) - ? MB_DI_LBA_MODE : MB_DI_CHS_MODE); - info->drive_cylinders = geom.cylinders; - info->drive_heads = geom.heads; - info->drive_sectors = geom.sectors; - - addr += sizeof (struct drive_info); - for (port = io_map; *port; port++, addr += sizeof (unsigned short)) - *((unsigned short *) addr) = *port; - - info->size = addr - (unsigned long) info; - mbi.drives_length += info->size; - } - - /* Get the ROM configuration table by INT 15, AH=C0h. */ - mbi.config_table = get_rom_config_table (); - - /* Set the boot loader name. */ - mbi.boot_loader_name = (unsigned long) "GNU GRUB " VERSION; - - /* Get the APM BIOS table. */ - get_apm_info (); - if (apm_bios_info.version) - mbi.apm_table = (unsigned long) &apm_bios_info; - - /* - * Initialize other Multiboot Info flags. - */ - - mbi.flags = (MB_INFO_MEMORY | MB_INFO_CMDLINE | MB_INFO_BOOTDEV - | MB_INFO_DRIVE_INFO | MB_INFO_CONFIG_TABLE - | MB_INFO_BOOT_LOADER_NAME); - - if (apm_bios_info.version) - mbi.flags |= MB_INFO_APM_TABLE; - -#endif /* STAGE1_5 */ - - /* Set boot drive and partition. */ - saved_drive = boot_drive; - saved_partition = install_partition; - - /* Set cdrom drive. */ - { - struct geometry geom; - - /* Get the geometry. */ - if (get_diskinfo (boot_drive, &geom) - || ! (geom.flags & BIOSDISK_FLAG_CDROM)) - cdrom_drive = GRUB_INVALID_DRIVE; - else - cdrom_drive = boot_drive; - } - - /* Start main routine here. */ - cmain (); -} diff --git a/stage2/console.c b/stage2/console.c deleted file mode 100644 index fbe212e0d..000000000 --- a/stage2/console.c +++ /dev/null @@ -1,62 +0,0 @@ -/* term_console.c - console input and output */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2002 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include - -/* These functions are defined in asm.S instead of this file: - console_putchar, console_checkkey, console_getkey, console_getxy, - console_gotoxy, console_cls, and console_nocursor. */ - -int console_current_color = A_NORMAL; -static int console_standard_color = A_NORMAL; -static int console_normal_color = A_NORMAL; -static int console_highlight_color = A_REVERSE; -static color_state console_color_state = COLOR_STATE_STANDARD; - -void -console_setcolorstate (color_state state) -{ - switch (state) { - case COLOR_STATE_STANDARD: - console_current_color = console_standard_color; - break; - case COLOR_STATE_NORMAL: - console_current_color = console_normal_color; - break; - case COLOR_STATE_HIGHLIGHT: - console_current_color = console_highlight_color; - break; - default: - console_current_color = console_standard_color; - break; - } - - console_color_state = state; -} - -void -console_setcolor (int normal_color, int highlight_color) -{ - console_normal_color = normal_color; - console_highlight_color = highlight_color; - - console_setcolorstate (console_color_state); -} diff --git a/stage2/defs.h b/stage2/defs.h deleted file mode 100644 index f2f26831b..000000000 --- a/stage2/defs.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Mach Operating System - * Copyright (c) 1991,1990 Carnegie Mellon University - * All Rights Reserved. - * - * Permission to use, copy, modify and distribute this software and its - * documentation is hereby granted, provided that both the copyright - * notice and this permission notice appear in all copies of the - * software, derivative works or modified versions, and any portions - * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" - * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR - * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * - * Carnegie Mellon requests users of this software to return to - * - * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU - * School of Computer Science - * Carnegie Mellon University - * Pittsburgh PA 15213-3890 - * - * any improvements or extensions that they make and grant Carnegie Mellon - * the rights to redistribute these changes. - */ -/* - * Common definitions for Berkeley Fast File System. - */ - -/* - * Compatibility definitions for disk IO. - */ - -/* - * Disk devices do all IO in 512-byte blocks. - */ -#define DEV_BSIZE 512 - -/* - * Conversion between bytes and disk blocks. - */ -#define btodb(byte_offset) ((byte_offset) >> 9) -#define dbtob(block_number) ((block_number) << 9) - -/* - * Compatibility definitions for old type names. - */ - -typedef unsigned char u_char; /* unsigned char */ -typedef unsigned short u_short; /* unsigned short */ -typedef unsigned int u_int; /* unsigned int */ - -typedef struct _quad_ - { - unsigned int val[2]; /* 2 int values make... */ - } -quad; /* an 8-byte item */ - -typedef unsigned int mach_time_t; /* an unsigned int */ -typedef unsigned int mach_daddr_t; /* an unsigned int */ -typedef unsigned int mach_off_t; /* another unsigned int */ - -typedef unsigned short mach_uid_t; -typedef unsigned short mach_gid_t; -typedef unsigned int mach_ino_t; - -#define NBBY 8 - -/* - * The file system is made out of blocks of at most MAXBSIZE units, - * with smaller units (fragments) only in the last direct block. - * MAXBSIZE primarily determines the size of buffers in the buffer - * pool. It may be made larger without any effect on existing - * file systems; however, making it smaller may make some file - * systems unmountable. - * - * Note that the disk devices are assumed to have DEV_BSIZE "sectors" - * and that fragments must be some multiple of this size. - */ -#define MAXBSIZE 8192 -#define MAXFRAG 8 - -/* - * MAXPATHLEN defines the longest permissible path length - * after expanding symbolic links. - * - * MAXSYMLINKS defines the maximum number of symbolic links - * that may be expanded in a path name. It should be set - * high enough to allow all legitimate uses, but halt infinite - * loops reasonably quickly. - */ - -#define MAXPATHLEN 1024 -#define MAXSYMLINKS 8 diff --git a/stage2/dir.h b/stage2/dir.h deleted file mode 100644 index 287bf6029..000000000 --- a/stage2/dir.h +++ /dev/null @@ -1,147 +0,0 @@ - -/* - * Mach Operating System - * Copyright (c) 1991,1990 Carnegie Mellon University - * All Rights Reserved. - * - * Permission to use, copy, modify and distribute this software and its - * documentation is hereby granted, provided that both the copyright - * notice and this permission notice appear in all copies of the - * software, derivative works or modified versions, and any portions - * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" - * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR - * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * - * Carnegie Mellon requests users of this software to return to - * - * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU - * School of Computer Science - * Carnegie Mellon University - * Pittsburgh PA 15213-3890 - * - * any improvements or extensions that they make and grant Carnegie Mellon - * the rights to redistribute these changes. - */ -/* - * Copyright (c) 1982, 1986, 1989 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by the University of California, Berkeley. The name of the - * University may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * @(#)dir.h 7.6 (Berkeley) 5/9/89 - */ - -#ifndef _BOOT_UFS_DIR_H_ -#define _BOOT_UFS_DIR_H_ - -/* - * A directory consists of some number of blocks of DIRBLKSIZ - * bytes, where DIRBLKSIZ is chosen such that it can be transferred - * to disk in a single atomic operation (e.g. 512 bytes on most machines). - * - * Each DIRBLKSIZ byte block contains some number of directory entry - * structures, which are of variable length. Each directory entry has - * a struct direct at the front of it, containing its inode number, - * the length of the entry, and the length of the name contained in - * the entry. These are followed by the name padded to a 4 byte boundary - * with null bytes. All names are guaranteed null terminated. - * The maximum length of a name in a directory is MAXNAMLEN. - * - * The macro DIRSIZ(dp) gives the amount of space required to represent - * a directory entry. Free space in a directory is represented by - * entries which have dp->d_reclen > DIRSIZ(dp). All DIRBLKSIZ bytes - * in a directory block are claimed by the directory entries. This - * usually results in the last entry in a directory having a large - * dp->d_reclen. When entries are deleted from a directory, the - * space is returned to the previous entry in the same directory - * block by increasing its dp->d_reclen. If the first entry of - * a directory block is free, then its dp->d_ino is set to 0. - * Entries other than the first in a directory do not normally have - * dp->d_ino set to 0. - */ -#define DIRBLKSIZ DEV_BSIZE -#define MAXNAMLEN 255 - -struct direct - { - u_int d_ino; /* inode number of entry */ - u_short d_reclen; /* length of this record */ - u_short d_namlen; /* length of string in d_name */ - char d_name[MAXNAMLEN + 1]; /* name with length <= MAXNAMLEN */ - }; - -/* - * The DIRSIZ macro gives the minimum record length which will hold - * the directory entry. This requires the amount of space in struct direct - * without the d_name field, plus enough space for the name with a terminating - * null byte (dp->d_namlen+1), rounded up to a 4 byte boundary. - */ -#undef DIRSIZ -#define DIRSIZ(dp) \ - ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3)) - -#ifdef KERNEL -/* - * Template for manipulating directories. - * Should use struct direct's, but the name field - * is MAXNAMLEN - 1, and this just won't do. - */ -struct dirtemplate - { - u_int dot_ino; - short dot_reclen; - short dot_namlen; - char dot_name[4]; /* must be multiple of 4 */ - u_int dotdot_ino; - short dotdot_reclen; - short dotdot_namlen; - char dotdot_name[4]; /* ditto */ - }; -#endif - -/* - * The following information should be obtained from - * and is provided solely (and temporarily) for backward compatibility. - */ -#ifndef KERNEL -#define d_fileno d_ino /* compatibility with POSIX */ -#ifndef DEV_BSIZE -#define DEV_BSIZE 512 -#endif -/* - * Definitions for library routines operating on directories. - */ -typedef struct _dirdesc - { - int dd_fd; - int dd_loc; - int dd_size; - char dd_buf[DIRBLKSIZ]; - } -DIR; - -#define dirfd(dirp) ((dirp)->dd_fd) - -#ifndef NULL -#define NULL 0 -#endif -extern DIR *opendir (); -extern struct direct *readdir (); -extern int telldir (); -extern void seekdir (); -#define rewinddir(dirp) seekdir((dirp), (long)0) -extern void closedir (); -#endif /* not KERNEL */ -#endif /* _BOOT_UFS_DIR_H_ */ diff --git a/stage2/disk_inode.h b/stage2/disk_inode.h deleted file mode 100644 index 2103cb86a..000000000 --- a/stage2/disk_inode.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Mach Operating System - * Copyright (c) 1991,1990 Carnegie Mellon University - * All Rights Reserved. - * - * Permission to use, copy, modify and distribute this software and its - * documentation is hereby granted, provided that both the copyright - * notice and this permission notice appear in all copies of the - * software, derivative works or modified versions, and any portions - * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" - * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR - * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * - * Carnegie Mellon requests users of this software to return to - * - * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU - * School of Computer Science - * Carnegie Mellon University - * Pittsburgh PA 15213-3890 - * - * any improvements or extensions that they make and grant Carnegie Mellon - * the rights to redistribute these changes. - */ -/* - * Copyright (c) 1982, 1989 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by the University of California, Berkeley. The name of the - * University may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * @(#)inode.h 7.5 (Berkeley) 7/3/89 - */ - -#ifndef _BOOT_UFS_DISK_INODE_H_ -#define _BOOT_UFS_DISK_INODE_H_ - -/* - * The I node is the focus of all file activity in the BSD Fast File System. - * There is a unique inode allocated for each active file, - * each current directory, each mounted-on file, text file, and the root. - * An inode is 'named' by its dev/inumber pair. (iget/iget.c) - * Data in icommon is read in from permanent inode on volume. - */ - -#define FFS_NDADDR 12 /* direct addresses in inode */ -#define FFS_NIADDR 3 /* indirect addresses in inode */ - -#define FFS_MAX_FASTLINK_SIZE ((FFS_NDADDR + FFS_NIADDR) \ - * sizeof (mach_daddr_t)) - -struct icommon - { - u_short ic_mode; /* 0: mode and type of file */ - short ic_nlink; /* 2: number of links to file */ - mach_uid_t ic_uid; /* 4: owner's user id */ - mach_gid_t ic_gid; /* 6: owner's group id */ - quad ic_size; /* 8: number of bytes in file */ - mach_time_t ic_atime; /* 16: time last accessed */ - int ic_atspare; - mach_time_t ic_mtime; /* 24: time last modified */ - int ic_mtspare; - mach_time_t ic_ctime; /* 32: last time inode changed */ - int ic_ctspare; - union - { - struct - { - mach_daddr_t Mb_db[FFS_NDADDR]; /* 40: disk block addresses */ - mach_daddr_t Mb_ib[FFS_NIADDR]; /* 88: indirect blocks */ - } - ic_Mb; - char ic_Msymlink[FFS_MAX_FASTLINK_SIZE]; - /* 40: symbolic link name */ - } - ic_Mun; -#define ic_db ic_Mun.ic_Mb.Mb_db -#define ic_ib ic_Mun.ic_Mb.Mb_ib -#define ic_symlink ic_Mun.ic_Msymlink - int ic_flags; /* 100: status, currently unused */ - int ic_blocks; /* 104: blocks actually held */ - int ic_gen; /* 108: generation number */ - int ic_spare[4]; /* 112: reserved, currently unused */ - }; - -/* - * Same structure, but on disk. - */ -struct dinode - { - union - { - struct icommon di_com; - char di_char[128]; - } - di_un; - }; -#define di_ic di_un.di_com - -#endif /* _BOOT_UFS_DISK_INODE_H_ */ diff --git a/stage2/disk_inode_ffs.h b/stage2/disk_inode_ffs.h deleted file mode 100644 index 1c8caa158..000000000 --- a/stage2/disk_inode_ffs.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Mach Operating System - * Copyright (c) 1991,1990 Carnegie Mellon University - * All Rights Reserved. - * - * Permission to use, copy, modify and distribute this software and its - * documentation is hereby granted, provided that both the copyright - * notice and this permission notice appear in all copies of the - * software, derivative works or modified versions, and any portions - * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" - * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR - * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * - * Carnegie Mellon requests users of this software to return to - * - * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU - * School of Computer Science - * Carnegie Mellon University - * Pittsburgh PA 15213-3890 - * - * any improvements or extensions that they make and grant Carnegie Mellon - * the rights to redistribute these changes. - */ -/* - * Copyright (c) 1982, 1989 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by the University of California, Berkeley. The name of the - * University may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * @(#)inode.h 7.5 (Berkeley) 7/3/89 - */ - -#ifndef _BOOT_UFS_DISK_INODE_FFS_H_ -#define _BOOT_UFS_DISK_INODE_FFS_H_ - -#define NDADDR FFS_NDADDR -#define NIADDR FFS_NIADDR - -#define MAX_FASTLINK_SIZE FFS_MAX_FASTLINK_SIZE - -#define IC_FASTLINK 0x0001 /* Symbolic link in inode */ - -#define i_mode ic_mode -#define i_nlink ic_nlink -#define i_uid ic_uid -#define i_gid ic_gid -#if defined(BYTE_MSF) && BYTE_MSF -#define i_size ic_size.val[1] -#else /* BYTE_LSF */ -#define i_size ic_size.val[0] -#endif -#define i_db ic_db -#define i_ib ic_ib -#define i_atime ic_atime -#define i_mtime ic_mtime -#define i_ctime ic_ctime -#define i_blocks ic_blocks -#define i_rdev ic_db[0] -#define i_symlink ic_symlink -#define i_flags ic_flags -#define i_gen ic_gen - -/* modes */ -#define IFMT 0xf000 /* type of file */ -#define IFCHR 0x2000 /* character special */ -#define IFDIR 0x4000 /* directory */ -#define IFBLK 0x6000 /* block special */ -#define IFREG 0x8000 /* regular */ -#define IFLNK 0xa000 /* symbolic link */ -#define IFSOCK 0xc000 /* socket */ - - -#define ISUID 0x0800 /* set user id on execution */ -#define ISGID 0x0400 /* set group id on execution */ -#define ISVTX 0x0200 /* save swapped text even after use */ -#define IREAD 0x0100 /* read, write, execute permissions */ -#define IWRITE 0x0080 -#define IEXEC 0x0040 - -#ifdef EEK -#define f_fs u.ffs.ffs_fs -#define i_ic u.ffs.ffs_ic -#define f_nindir u.ffs.ffs_nindir -#define f_blk u.ffs.ffs_blk -#define f_blksize u.ffs.ffs_blksize -#define f_blkno u.ffs.ffs_blkno -#endif /* EEK */ - -#endif /* _BOOT_UFS_DISK_INODE_FFS_H_ */ diff --git a/stage2/disk_io.c b/stage2/disk_io.c deleted file mode 100644 index 800e0fbe1..000000000 --- a/stage2/disk_io.c +++ /dev/null @@ -1,1790 +0,0 @@ -/* disk_io.c - implement abstract BIOS disk input and output */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - - -#include -#include - -#ifdef SUPPORT_NETBOOT -# define GRUB 1 -# include -#endif - -#ifdef GRUB_UTIL -# include -#endif - -/* instrumentation variables */ -void (*disk_read_hook) (int, int, int) = NULL; -void (*disk_read_func) (int, int, int) = NULL; - -#ifndef STAGE1_5 -int print_possibilities; - -static int do_completion; -static int unique; -static char *unique_string; - -#endif - -int fsmax; -struct fsys_entry fsys_table[NUM_FSYS + 1] = -{ - /* TFTP should come first because others don't handle net device. */ -# ifdef FSYS_TFTP - {"tftp", tftp_mount, tftp_read, tftp_dir, tftp_close, 0}, -# endif -# ifdef FSYS_FAT - {"fat", fat_mount, fat_read, fat_dir, 0, 0}, -# endif -# ifdef FSYS_EXT2FS - {"ext2fs", ext2fs_mount, ext2fs_read, ext2fs_dir, 0, 0}, -# endif -# ifdef FSYS_MINIX - {"minix", minix_mount, minix_read, minix_dir, 0, 0}, -# endif -# ifdef FSYS_REISERFS - {"reiserfs", reiserfs_mount, reiserfs_read, reiserfs_dir, 0, reiserfs_embed}, -# endif -# ifdef FSYS_VSTAFS - {"vstafs", vstafs_mount, vstafs_read, vstafs_dir, 0, 0}, -# endif -# ifdef FSYS_JFS - {"jfs", jfs_mount, jfs_read, jfs_dir, 0, jfs_embed}, -# endif -# ifdef FSYS_XFS - {"xfs", xfs_mount, xfs_read, xfs_dir, 0, 0}, -# endif -# ifdef FSYS_UFS2 - {"ufs2", ufs2_mount, ufs2_read, ufs2_dir, 0, ufs2_embed}, -# endif -# ifdef FSYS_ISO9660 - {"iso9660", iso9660_mount, iso9660_read, iso9660_dir, 0, 0}, -# endif - /* XX FFS should come last as it's superblock is commonly crossing tracks - on floppies from track 1 to 2, while others only use 1. */ -# ifdef FSYS_FFS - {"ffs", ffs_mount, ffs_read, ffs_dir, 0, ffs_embed}, -# endif - {0, 0, 0, 0, 0, 0} -}; - - -/* These have the same format as "boot_drive" and "install_partition", but - are meant to be working values. */ -unsigned long current_drive = GRUB_INVALID_DRIVE; -unsigned long current_partition; - -#ifndef STAGE1_5 -/* The register ESI should contain the address of the partition to be - used for loading a chain-loader when chain-loading the loader. */ -unsigned long boot_part_addr = 0; -#endif - -/* - * Global variables describing details of the filesystem - */ - -/* FIXME: BSD evil hack */ -#include "freebsd.h" -int bsd_evil_hack; - -/* filesystem type */ -int fsys_type = NUM_FSYS; -#ifndef NO_BLOCK_FILES -static int block_file = 0; -#endif /* NO_BLOCK_FILES */ - -/* these are the translated numbers for the open partition */ -unsigned long part_start; -unsigned long part_length; - -int current_slice; - -/* disk buffer parameters */ -int buf_drive = -1; -int buf_track; -struct geometry buf_geom; - -/* filesystem common variables */ -int filepos; -int filemax; - -static inline unsigned long -log2 (unsigned long word) -{ - asm volatile ("bsfl %1,%0" - : "=r" (word) - : "r" (word)); - return word; -} - -int -rawread (int drive, unsigned int sector, int byte_offset, int byte_len, char *buf) -{ - int slen, sectors_per_vtrack; - int sector_size_bits = log2 (buf_geom.sector_size); - - if (byte_len <= 0) - return 1; - - while (byte_len > 0 && !errnum) - { - int soff, num_sect, track, size = byte_len; - char *bufaddr; - - /* - * Check track buffer. If it isn't valid or it is from the - * wrong disk, then reset the disk geometry. - */ - if (buf_drive != drive) - { - if (get_diskinfo (drive, &buf_geom)) - { - errnum = ERR_NO_DISK; - return 0; - } - buf_drive = drive; - buf_track = -1; - sector_size_bits = log2 (buf_geom.sector_size); - } - - /* Make sure that SECTOR is valid. */ - if (sector < 0 || sector >= buf_geom.total_sectors) - { - errnum = ERR_GEOM; - return 0; - } - - slen = ((byte_offset + byte_len + buf_geom.sector_size - 1) - >> sector_size_bits); - - /* Eliminate a buffer overflow. */ - if ((buf_geom.sectors << sector_size_bits) > BUFFERLEN) - sectors_per_vtrack = (BUFFERLEN >> sector_size_bits); - else - sectors_per_vtrack = buf_geom.sectors; - - /* Get the first sector of track. */ - soff = sector % sectors_per_vtrack; - track = sector - soff; - num_sect = sectors_per_vtrack - soff; - bufaddr = ((char *) BUFFERADDR - + (soff << sector_size_bits) + byte_offset); - - if (track != buf_track) - { - int bios_err, read_start = track, read_len = sectors_per_vtrack; - - /* - * If there's more than one read in this entire loop, then - * only make the earlier reads for the portion needed. This - * saves filling the buffer with data that won't be used! - */ - if (slen > num_sect) - { - read_start = sector; - read_len = num_sect; - bufaddr = (char *) BUFFERADDR + byte_offset; - } - - bios_err = biosdisk (BIOSDISK_READ, drive, &buf_geom, - read_start, read_len, BUFFERSEG); - if (bios_err) - { - buf_track = -1; - - if (bios_err == BIOSDISK_ERROR_GEOMETRY) - errnum = ERR_GEOM; - else - { - /* - * If there was an error, try to load only the - * required sector(s) rather than failing completely. - */ - if (slen > num_sect - || biosdisk (BIOSDISK_READ, drive, &buf_geom, - sector, slen, BUFFERSEG)) - errnum = ERR_READ; - - bufaddr = (char *) BUFFERADDR + byte_offset; - } - } - else - buf_track = track; - - if ((buf_track == 0 || sector == 0) - && (PC_SLICE_TYPE (BUFFERADDR, 0) == PC_SLICE_TYPE_EZD - || PC_SLICE_TYPE (BUFFERADDR, 1) == PC_SLICE_TYPE_EZD - || PC_SLICE_TYPE (BUFFERADDR, 2) == PC_SLICE_TYPE_EZD - || PC_SLICE_TYPE (BUFFERADDR, 3) == PC_SLICE_TYPE_EZD)) - { - /* This is a EZD disk map sector 0 to sector 1 */ - if (buf_track == 0 || slen >= 2) - { - /* We already read the sector 1, copy it to sector 0 */ - memmove ((char *) BUFFERADDR, - (char *) BUFFERADDR + buf_geom.sector_size, - buf_geom.sector_size); - } - else - { - if (biosdisk (BIOSDISK_READ, drive, &buf_geom, - 1, 1, BUFFERSEG)) - errnum = ERR_READ; - } - } - } - - if (size > ((num_sect << sector_size_bits) - byte_offset)) - size = (num_sect << sector_size_bits) - byte_offset; - - /* - * Instrumentation to tell which sectors were read and used. - */ - if (disk_read_func) - { - unsigned int sector_num = sector; - int length = buf_geom.sector_size - byte_offset; - if (length > size) - length = size; - (*disk_read_func) (sector_num++, byte_offset, length); - length = size - length; - if (length > 0) - { - while (length > buf_geom.sector_size) - { - (*disk_read_func) (sector_num++, 0, buf_geom.sector_size); - length -= buf_geom.sector_size; - } - (*disk_read_func) (sector_num, 0, length); - } - } - - grub_memmove (buf, bufaddr, size); - - buf += size; - byte_len -= size; - sector += num_sect; - byte_offset = 0; - } - - return (!errnum); -} - - -int -devread (unsigned int sector, int byte_offset, int byte_len, char *buf) -{ - /* - * Check partition boundaries - */ - if (sector < 0 - || ((sector + ((byte_offset + byte_len - 1) >> SECTOR_BITS)) - >= part_length)) - { - errnum = ERR_OUTSIDE_PART; - return 0; - } - - /* - * Get the read to the beginning of a partition. - */ - sector += byte_offset >> SECTOR_BITS; - byte_offset &= SECTOR_SIZE - 1; - -#if !defined(STAGE1_5) - if (disk_read_hook && debug) - printf ("<%d, %d, %d>", sector, byte_offset, byte_len); -#endif /* !STAGE1_5 */ - - /* - * Call RAWREAD, which is very similar, but: - * - * -- It takes an extra parameter, the drive number. - * -- It requires that "sector" is relative to the beginning - * of the disk. - * -- It doesn't handle offsets of more than 511 bytes into the - * sector. - */ - return rawread (current_drive, part_start + sector, byte_offset, - byte_len, buf); -} - -#ifndef STAGE1_5 -int -rawwrite (int drive, unsigned int sector, char *buf) -{ - if (sector == 0) - { - if (biosdisk (BIOSDISK_READ, drive, &buf_geom, 0, 1, SCRATCHSEG)) - { - errnum = ERR_WRITE; - return 0; - } - - if (PC_SLICE_TYPE (SCRATCHADDR, 0) == PC_SLICE_TYPE_EZD - || PC_SLICE_TYPE (SCRATCHADDR, 1) == PC_SLICE_TYPE_EZD - || PC_SLICE_TYPE (SCRATCHADDR, 2) == PC_SLICE_TYPE_EZD - || PC_SLICE_TYPE (SCRATCHADDR, 3) == PC_SLICE_TYPE_EZD) - sector = 1; - } - - memmove ((char *) SCRATCHADDR, buf, SECTOR_SIZE); - if (biosdisk (BIOSDISK_WRITE, drive, &buf_geom, - sector, 1, SCRATCHSEG)) - { - errnum = ERR_WRITE; - return 0; - } - - if (sector - sector % buf_geom.sectors == buf_track) - /* Clear the cache. */ - buf_track = -1; - - return 1; -} - -int -devwrite (unsigned int sector, int sector_count, char *buf) -{ -#if defined(GRUB_UTIL) && defined(__linux__) - if (current_partition != 0xFFFFFF - && is_disk_device (device_map, current_drive)) - { - /* If the grub shell is running under Linux and the user wants to - embed a Stage 1.5 into a partition instead of a MBR, use system - calls directly instead of biosdisk, because of the bug in - Linux. *sigh* */ - return write_to_partition (device_map, current_drive, current_partition, - sector, sector_count, buf); - } - else -#endif /* GRUB_UTIL && __linux__ */ - { - int i; - - for (i = 0; i < sector_count; i++) - { - if (! rawwrite (current_drive, part_start + sector + i, - buf + (i << SECTOR_BITS))) - return 0; - - } - return 1; - } -} - -static int -sane_partition (void) -{ - /* network drive */ - if (current_drive == NETWORK_DRIVE) - return 1; - - if (!(current_partition & 0xFF000000uL) - && ((current_drive & 0xFFFFFF7F) < 8 - || current_drive == cdrom_drive) - && (current_partition & 0xFF) == 0xFF - && ((current_partition & 0xFF00) == 0xFF00 - || (current_partition & 0xFF00) < 0x800) - && ((current_partition >> 16) == 0xFF - || (current_drive & 0x80))) - return 1; - - errnum = ERR_DEV_VALUES; - return 0; -} -#endif /* ! STAGE1_5 */ - -static void -attempt_mount (void) -{ -#ifndef STAGE1_5 - for (fsys_type = 0; fsys_type < NUM_FSYS; fsys_type++) - if ((fsys_table[fsys_type].mount_func) ()) - break; - - if (fsys_type == NUM_FSYS && errnum == ERR_NONE) - errnum = ERR_FSYS_MOUNT; -#else - fsys_type = 0; - if ((*(fsys_table[fsys_type].mount_func)) () != 1) - { - fsys_type = NUM_FSYS; - errnum = ERR_FSYS_MOUNT; - } -#endif -} - - -#ifndef STAGE1_5 -/* Turn on the active flag for the partition SAVED_PARTITION in the - drive SAVED_DRIVE. If an error occurs, return zero, otherwise return - non-zero. */ -int -make_saved_active (void) -{ - char mbr[512]; - - if (saved_drive & 0x80) - { - /* Hard disk */ - int part = saved_partition >> 16; - - /* If the partition is not a primary partition, the active flag is - meaningless. (XXX: Really?) */ - if (part > 3) - { - errnum = ERR_DEV_VALUES; - return 0; - } - - /* Read the MBR in the scratch space. */ - if (! rawread (saved_drive, 0, 0, SECTOR_SIZE, mbr)) - return 0; - - /* If the partition is an extended partition, setting the active - flag violates the specification by IBM. */ - if (IS_PC_SLICE_TYPE_EXTENDED (PC_SLICE_TYPE (mbr, part))) - { - errnum = ERR_DEV_VALUES; - return 0; - } - - /* Check if the active flag is disabled. */ - if (PC_SLICE_FLAG (mbr, part) != PC_SLICE_FLAG_BOOTABLE) - { - int i; - - /* Clear all the active flags in this table. */ - for (i = 0; i < 4; i++) - PC_SLICE_FLAG (mbr, i) = 0; - - /* Set the flag. */ - PC_SLICE_FLAG (mbr, part) = PC_SLICE_FLAG_BOOTABLE; - - /* Write back the MBR. */ - if (! rawwrite (saved_drive, 0, mbr)) - return 0; - } - } - else - { - /* If the drive is not a hard disk drive, you shouldn't call this - function. (XXX: Should I just ignore this error?) */ - errnum = ERR_DEV_VALUES; - return 0; - } - - return 1; -} - -/* Hide/Unhide CURRENT_PARTITION. */ -int -set_partition_hidden_flag (int hidden) -{ - unsigned long part = 0xFFFFFF; - unsigned long start, len, offset, ext_offset; - int entry, type; - char mbr[512]; - - /* The drive must be a hard disk. */ - if (! (current_drive & 0x80)) - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - /* The partition must be a PC slice. */ - if ((current_partition >> 16) == 0xFF - || (current_partition & 0xFFFF) != 0xFFFF) - { - errnum = ERR_BAD_ARGUMENT; - return 1; - } - - /* Look for the partition. */ - while (next_partition (current_drive, 0xFFFFFF, &part, &type, - &start, &len, &offset, &entry, - &ext_offset, mbr)) - { - if (part == current_partition) - { - /* Found. */ - if (hidden) - PC_SLICE_TYPE (mbr, entry) |= PC_SLICE_TYPE_HIDDEN_FLAG; - else - PC_SLICE_TYPE (mbr, entry) &= ~PC_SLICE_TYPE_HIDDEN_FLAG; - - /* Write back the MBR to the disk. */ - buf_track = -1; - if (! rawwrite (current_drive, offset, mbr)) - return 1; - - /* Succeed. */ - return 0; - } - } - - return 1; -} - - -static void -check_and_print_mount (void) -{ - attempt_mount (); - if (errnum == ERR_FSYS_MOUNT) - errnum = ERR_NONE; - if (!errnum) - print_fsys_type (); - print_error (); -} -#endif /* STAGE1_5 */ - - -/* Get the information on next partition on the drive DRIVE. - The caller must not modify the contents of the arguments when - iterating this function. The partition representation in GRUB will - be stored in *PARTITION. Likewise, the partition type in *TYPE, the - start sector in *START, the length in *LEN, the offset of the - partition table in *OFFSET, the entry number in the table in *ENTRY, - the offset of the extended partition in *EXT_OFFSET. - BUF is used to store a MBR, the boot sector of a partition, or - a BSD label sector, and it must be at least 512 bytes length. - When calling this function first, *PARTITION must be initialized to - 0xFFFFFF. The return value is zero if fails, otherwise non-zero. */ -int -next_partition (unsigned long drive, unsigned long dest, - unsigned long *partition, int *type, - unsigned long *start, unsigned long *len, - unsigned long *offset, int *entry, - unsigned long *ext_offset, char *buf) -{ - /* Forward declarations. */ - auto int next_bsd_partition (void); - auto int next_pc_slice (void); - - /* Get next BSD partition in current PC slice. */ - int next_bsd_partition (void) - { - int i; - int bsd_part_no = (*partition & 0xFF00) >> 8; - - /* If this is the first time... */ - if (bsd_part_no == 0xFF) - { - /* Check if the BSD label is within current PC slice. */ - if (*len < BSD_LABEL_SECTOR + 1) - { - errnum = ERR_BAD_PART_TABLE; - return 0; - } - - /* Read the BSD label. */ - if (! rawread (drive, *start + BSD_LABEL_SECTOR, - 0, SECTOR_SIZE, buf)) - return 0; - - /* Check if it is valid. */ - if (! BSD_LABEL_CHECK_MAG (buf)) - { - errnum = ERR_BAD_PART_TABLE; - return 0; - } - - bsd_part_no = -1; - } - - /* Search next valid BSD partition. */ - for (i = bsd_part_no + 1; i < BSD_LABEL_NPARTS (buf); i++) - { - if (BSD_PART_TYPE (buf, i)) - { - /* Note that *TYPE and *PARTITION were set - for current PC slice. */ - *type = (BSD_PART_TYPE (buf, i) << 8) | (*type & 0xFF); - *start = BSD_PART_START (buf, i); - *len = BSD_PART_LENGTH (buf, i); - *partition = (*partition & 0xFF00FF) | (i << 8); - -#ifndef STAGE1_5 - /* XXX */ - if ((drive & 0x80) && BSD_LABEL_DTYPE (buf) == DTYPE_SCSI) - bsd_evil_hack = 4; -#endif /* ! STAGE1_5 */ - - return 1; - } - } - - errnum = ERR_NO_PART; - return 0; - } - - /* Get next PC slice. Be careful of that this function may return - an empty PC slice (i.e. a partition whose type is zero) as well. */ - int next_pc_slice (void) - { - int pc_slice_no = (*partition & 0xFF0000) >> 16; - - /* If this is the first time... */ - if (pc_slice_no == 0xFF) - { - *offset = 0; - *ext_offset = 0; - *entry = -1; - pc_slice_no = -1; - } - - /* Read the MBR or the boot sector of the extended partition. */ - if (! rawread (drive, *offset, 0, SECTOR_SIZE, buf)) - return 0; - - /* Check if it is valid. */ - if (! PC_MBR_CHECK_SIG (buf)) - { - errnum = ERR_BAD_PART_TABLE; - return 0; - } - - /* Increase the entry number. */ - (*entry)++; - - /* If this is out of current partition table... */ - if (*entry == PC_SLICE_MAX) - { - int i; - - /* Search the first extended partition in current table. */ - for (i = 0; i < PC_SLICE_MAX; i++) - { - if (IS_PC_SLICE_TYPE_EXTENDED (PC_SLICE_TYPE (buf, i))) - { - /* Found. Set the new offset and the entry number, - and restart this function. */ - *offset = *ext_offset + PC_SLICE_START (buf, i); - if (! *ext_offset) - *ext_offset = *offset; - *entry = -1; - return next_pc_slice (); - } - } - - errnum = ERR_NO_PART; - return 0; - } - - *type = PC_SLICE_TYPE (buf, *entry); - *start = *offset + PC_SLICE_START (buf, *entry); - *len = PC_SLICE_LENGTH (buf, *entry); - - /* The calculation of a PC slice number is complicated, because of - the rather odd definition of extended partitions. Even worse, - there is no guarantee that this is consistent with every - operating systems. Uggh. */ - if (pc_slice_no < PC_SLICE_MAX - || (! IS_PC_SLICE_TYPE_EXTENDED (*type) - && *type != PC_SLICE_TYPE_NONE)) - pc_slice_no++; - - *partition = (pc_slice_no << 16) | 0xFFFF; - return 1; - } - - /* Start the body of this function. */ - -#ifndef STAGE1_5 - if (current_drive == NETWORK_DRIVE) - return 0; -#endif - - /* If previous partition is a BSD partition or a PC slice which - contains BSD partitions... */ - if ((*partition != 0xFFFFFF && IS_PC_SLICE_TYPE_BSD (*type & 0xff)) - || ! (drive & 0x80)) - { - if (*type == PC_SLICE_TYPE_NONE) - *type = PC_SLICE_TYPE_FREEBSD; - - /* Get next BSD partition, if any. */ - if (next_bsd_partition ()) - return 1; - - /* If the destination partition is a BSD partition and current - BSD partition has any error, abort the operation. */ - if ((dest & 0xFF00) != 0xFF00 - && ((dest & 0xFF0000) == 0xFF0000 - || (dest & 0xFF0000) == (*partition & 0xFF0000))) - return 0; - - /* Ignore the error. */ - errnum = ERR_NONE; - } - - return next_pc_slice (); -} - -#ifndef STAGE1_5 -static unsigned long cur_part_offset; -static unsigned long cur_part_addr; -#endif - -/* Open a partition. */ -int -real_open_partition (int flags) -{ - unsigned long dest_partition = current_partition; - unsigned long part_offset; - unsigned long ext_offset; - int entry; - char buf[SECTOR_SIZE]; - int bsd_part, pc_slice; - - /* For simplicity. */ - auto int next (void); - int next (void) - { - int ret = next_partition (current_drive, dest_partition, - ¤t_partition, ¤t_slice, - &part_start, &part_length, - &part_offset, &entry, &ext_offset, buf); - bsd_part = (current_partition >> 8) & 0xFF; - pc_slice = current_partition >> 16; - return ret; - } - -#ifndef STAGE1_5 - /* network drive */ - if (current_drive == NETWORK_DRIVE) - return 1; - - if (! sane_partition ()) - return 0; -#endif - - bsd_evil_hack = 0; - current_slice = 0; - part_start = 0; - - /* Make sure that buf_geom is valid. */ - if (buf_drive != current_drive) - { - if (get_diskinfo (current_drive, &buf_geom)) - { - errnum = ERR_NO_DISK; - return 0; - } - buf_drive = current_drive; - buf_track = -1; - } - part_length = buf_geom.total_sectors; - - /* If this is the whole disk, return here. */ - if (! flags && current_partition == 0xFFFFFF) - return 1; - - if (flags) - dest_partition = 0xFFFFFF; - - /* Initialize CURRENT_PARTITION for next_partition. */ - current_partition = 0xFFFFFF; - - while (next ()) - { -#ifndef STAGE1_5 - loop_start: - - cur_part_offset = part_offset; - cur_part_addr = BOOT_PART_TABLE + (entry << 4); -#endif /* ! STAGE1_5 */ - - /* If this is a valid partition... */ - if (current_slice) - { -#ifndef STAGE1_5 - /* Display partition information. */ - if (flags && ! IS_PC_SLICE_TYPE_EXTENDED (current_slice)) - { - if (! do_completion) - { - if (current_drive & 0x80) - grub_printf (" Partition num: %d, ", - current_partition >> 16); - - if (! IS_PC_SLICE_TYPE_BSD (current_slice)) - check_and_print_mount (); - else - { - int got_part = 0; - int saved_slice = current_slice; - - while (next ()) - { - if (bsd_part == 0xFF) - break; - - if (! got_part) - { - grub_printf ("[BSD sub-partitions immediately follow]\n"); - got_part = 1; - } - - grub_printf (" BSD Partition num: \'%c\', ", - bsd_part + 'a'); - check_and_print_mount (); - } - - if (! got_part) - grub_printf (" No BSD sub-partition found, partition type 0x%x\n", - saved_slice); - - if (errnum) - { - errnum = ERR_NONE; - break; - } - - goto loop_start; - } - } - else - { - if (bsd_part != 0xFF) - { - char str[16]; - - if (! (current_drive & 0x80) - || (dest_partition >> 16) == pc_slice) - grub_sprintf (str, "%c)", bsd_part + 'a'); - else - grub_sprintf (str, "%d,%c)", - pc_slice, bsd_part + 'a'); - print_a_completion (str); - } - else if (! IS_PC_SLICE_TYPE_BSD (current_slice)) - { - char str[8]; - - grub_sprintf (str, "%d)", pc_slice); - print_a_completion (str); - } - } - } - - errnum = ERR_NONE; -#endif /* ! STAGE1_5 */ - - /* Check if this is the destination partition. */ - if (! flags - && (dest_partition == current_partition - || ((dest_partition >> 16) == 0xFF - && ((dest_partition >> 8) & 0xFF) == bsd_part))) - return 1; - } - } - -#ifndef STAGE1_5 - if (flags) - { - if (! (current_drive & 0x80)) - { - current_partition = 0xFFFFFF; - check_and_print_mount (); - } - - errnum = ERR_NONE; - return 1; - } -#endif /* ! STAGE1_5 */ - - return 0; -} - - -int -open_partition (void) -{ - return real_open_partition (0); -} - - -#ifndef STAGE1_5 -/* XX used for device completion in 'set_device' and 'print_completions' */ -static int incomplete, disk_choice; -static enum -{ - PART_UNSPECIFIED = 0, - PART_DISK, - PART_CHOSEN, -} -part_choice; -#endif /* ! STAGE1_5 */ - -char * -set_device (char *device) -{ -#ifdef STAGE1_5 - /* In Stage 1.5, the first 4 bytes of FILENAME has a device number. */ - unsigned long dev = *((unsigned long *) device); - int drive = (dev >> 24) & 0xFF; - int partition = dev & 0xFFFFFF; - - /* If DRIVE is disabled, use SAVED_DRIVE instead. */ - if (drive == GRUB_INVALID_DRIVE) - current_drive = saved_drive; - else - current_drive = drive; - - /* The `partition' part must always have a valid number. */ - current_partition = partition; - - return device + sizeof (unsigned long); - -#else /* ! STAGE1_5 */ - - int result = 0; - - incomplete = 0; - disk_choice = 1; - part_choice = PART_UNSPECIFIED; - current_drive = saved_drive; - current_partition = 0xFFFFFF; - - if (*device == '(' && !*(device + 1)) - /* user has given '(' only, let disk_choice handle what disks we have */ - return device + 1; - - if (*device == '(' && *(++device)) - { - if (*device != ',' && *device != ')') - { - char ch = *device; -#ifdef SUPPORT_NETBOOT - if (*device == 'f' || *device == 'h' - || (*device == 'n' && network_ready) - || (*device == 'c' && cdrom_drive != GRUB_INVALID_DRIVE)) -#else - if (*device == 'f' || *device == 'h' - || (*device == 'c' && cdrom_drive != GRUB_INVALID_DRIVE)) -#endif /* SUPPORT_NETBOOT */ - { - /* user has given '([fhn]', check for resp. add 'd' and - let disk_choice handle what disks we have */ - if (!*(device + 1)) - { - device++; - *device++ = 'd'; - *device = '\0'; - return device; - } - else if (*(device + 1) == 'd' && !*(device + 2)) - return device + 2; - } - - if ((*device == 'f' - || *device == 'h' -#ifdef SUPPORT_NETBOOT - || (*device == 'n' && network_ready) -#endif - || (*device == 'c' && cdrom_drive != GRUB_INVALID_DRIVE)) - && (device += 2, (*(device - 1) != 'd'))) - errnum = ERR_NUMBER_PARSING; - -#ifdef SUPPORT_NETBOOT - if (ch == 'n' && network_ready) - current_drive = NETWORK_DRIVE; - else -#endif /* SUPPORT_NETBOOT */ - { - if (ch == 'c' && cdrom_drive != GRUB_INVALID_DRIVE) - current_drive = cdrom_drive; - else - { - safe_parse_maxint (&device, (int *) ¤t_drive); - - disk_choice = 0; - if (ch == 'h') - current_drive += 0x80; - } - } - } - - if (errnum) - return 0; - - if (*device == ')') - { - part_choice = PART_CHOSEN; - result = 1; - } - else if (*device == ',') - { - /* Either an absolute PC or BSD partition. */ - disk_choice = 0; - part_choice ++; - device++; - - if (*device >= '0' && *device <= '9') - { - part_choice ++; - current_partition = 0; - - if (!(current_drive & 0x80) - || !safe_parse_maxint (&device, (int *) ¤t_partition) - || current_partition > 254) - { - errnum = ERR_DEV_FORMAT; - return 0; - } - - current_partition = (current_partition << 16) + 0xFFFF; - - if (*device == ',') - device++; - - if (*device >= 'a' && *device <= 'h') - { - current_partition = (((*(device++) - 'a') << 8) - | (current_partition & 0xFF00FF)); - } - } - else if (*device >= 'a' && *device <= 'h') - { - part_choice ++; - current_partition = ((*(device++) - 'a') << 8) | 0xFF00FF; - } - - if (*device == ')') - { - if (part_choice == PART_DISK) - { - current_partition = saved_partition; - part_choice ++; - } - - result = 1; - } - } - } - - if (! sane_partition ()) - return 0; - - if (result) - return device + 1; - else - { - if (!*device) - incomplete = 1; - errnum = ERR_DEV_FORMAT; - } - - return 0; - -#endif /* ! STAGE1_5 */ -} - -/* - * This performs a "mount" on the current device, both drive and partition - * number. - */ - -int -open_device (void) -{ - if (open_partition ()) - attempt_mount (); - - if (errnum != ERR_NONE) - return 0; - - return 1; -} - - -#ifndef STAGE1_5 -int -set_bootdev (int hdbias) -{ - int i, j; - - /* Copy the boot partition information to 0x7be-0x7fd for chain-loading. */ - if ((saved_drive & 0x80) && cur_part_addr) - { - if (rawread (saved_drive, cur_part_offset, - 0, SECTOR_SIZE, (char *) SCRATCHADDR)) - { - char *dst, *src; - - /* Need only the partition table. - XXX: We cannot use grub_memmove because BOOT_PART_TABLE - (0x07be) is less than 0x1000. */ - dst = (char *) BOOT_PART_TABLE; - src = (char *) SCRATCHADDR + BOOTSEC_PART_OFFSET; - while (dst < (char *) BOOT_PART_TABLE + BOOTSEC_PART_LENGTH) - *dst++ = *src++; - - /* Set the active flag of the booted partition. */ - for (i = 0; i < 4; i++) - PC_SLICE_FLAG (BOOT_PART_TABLE, i) = 0; - - *((unsigned char *) cur_part_addr) = PC_SLICE_FLAG_BOOTABLE; - boot_part_addr = cur_part_addr; - } - else - return 0; - } - - /* - * Set BSD boot device. - */ - i = (saved_partition >> 16) + 2; - if (saved_partition == 0xFFFFFF) - i = 1; - else if ((saved_partition >> 16) == 0xFF) - i = 0; - - /* FIXME: extremely evil hack!!! */ - j = 2; - if (saved_drive & 0x80) - j = bsd_evil_hack; - - return MAKEBOOTDEV (j, (i >> 4), (i & 0xF), - ((saved_drive - hdbias) & 0x7F), - ((saved_partition >> 8) & 0xFF)); -} -#endif /* STAGE1_5 */ - - -static char * -setup_part (char *filename) -{ -#ifdef STAGE1_5 - - if (! (filename = set_device (filename))) - { - current_drive = GRUB_INVALID_DRIVE; - return 0; - } - -# ifndef NO_BLOCK_FILES - if (*filename != '/') - open_partition (); - else -# endif /* ! NO_BLOCK_FILES */ - open_device (); - -#else /* ! STAGE1_5 */ - - if (*filename == '(') - { - if ((filename = set_device (filename)) == 0) - { - current_drive = GRUB_INVALID_DRIVE; - return 0; - } -# ifndef NO_BLOCK_FILES - if (*filename != '/') - open_partition (); - else -# endif /* ! NO_BLOCK_FILES */ - open_device (); - } - else if (saved_drive != current_drive - || saved_partition != current_partition - || (*filename == '/' && fsys_type == NUM_FSYS) - || buf_drive == -1) - { - current_drive = saved_drive; - current_partition = saved_partition; - /* allow for the error case of "no filesystem" after the partition - is found. This makes block files work fine on no filesystem */ -# ifndef NO_BLOCK_FILES - if (*filename != '/') - open_partition (); - else -# endif /* ! NO_BLOCK_FILES */ - open_device (); - } - -#endif /* ! STAGE1_5 */ - - if (errnum && (*filename == '/' || errnum != ERR_FSYS_MOUNT)) - return 0; - else - errnum = 0; - -#ifndef STAGE1_5 - if (!sane_partition ()) - return 0; -#endif - - return filename; -} - - -#ifndef STAGE1_5 -/* - * This prints the filesystem type or gives relevant information. - */ - -void -print_fsys_type (void) -{ - if (! do_completion) - { - printf (" Filesystem type "); - - if (fsys_type != NUM_FSYS) - printf ("is %s, ", fsys_table[fsys_type].name); - else - printf ("unknown, "); - - if (current_partition == 0xFFFFFF) - printf ("using whole disk\n"); - else - printf ("partition type 0x%x\n", current_slice & 0xFF); - } -} -#endif /* STAGE1_5 */ - -#ifndef STAGE1_5 -/* If DO_COMPLETION is true, just print NAME. Otherwise save the unique - part into UNIQUE_STRING. */ -void -print_a_completion (char *name) -{ - /* If NAME is "." or "..", do not count it. */ - if (grub_strcmp (name, ".") == 0 || grub_strcmp (name, "..") == 0) - return; - - if (do_completion) - { - char *buf = unique_string; - - if (! unique) - while ((*buf++ = *name++)) - ; - else - { - while (*buf && (*buf == *name)) - { - buf++; - name++; - } - /* mismatch, strip it. */ - *buf = '\0'; - } - } - else - grub_printf (" %s", name); - - unique++; -} - -/* - * This lists the possible completions of a device string, filename, or - * any sane combination of the two. - */ - -int -print_completions (int is_filename, int is_completion) -{ - char *buf = (char *) COMPLETION_BUF; - char *ptr = buf; - - unique_string = (char *) UNIQUE_BUF; - *unique_string = 0; - unique = 0; - do_completion = is_completion; - - if (! is_filename) - { - /* Print the completions of builtin commands. */ - struct builtin **builtin; - - if (! is_completion) - grub_printf (" Possible commands are:"); - - for (builtin = builtin_table; (*builtin); builtin++) - { - /* If *BUILTIN cannot be run in the command-line, skip it. */ - if (! ((*builtin)->flags & BUILTIN_CMDLINE)) - continue; - - if (substring (buf, (*builtin)->name) <= 0) - print_a_completion ((*builtin)->name); - } - - if (is_completion && *unique_string) - { - if (unique == 1) - { - char *u = unique_string + grub_strlen (unique_string); - - *u++ = ' '; - *u = 0; - } - - grub_strcpy (buf, unique_string); - } - - if (! is_completion) - grub_putchar ('\n'); - - print_error (); - do_completion = 0; - if (errnum) - return -1; - else - return unique - 1; - } - - if (*buf == '/' || (ptr = set_device (buf)) || incomplete) - { - errnum = 0; - - if (*buf == '(' && (incomplete || ! *ptr)) - { - if (! part_choice) - { - /* disk completions */ - int disk_no, i, j; - struct geometry geom; - - if (! is_completion) - grub_printf (" Possible disks are: "); - - if (!ptr - || *(ptr-1) != 'd' -#ifdef SUPPORT_NETBOOT - || *(ptr-2) != 'n' -#endif /* SUPPORT_NETBOOT */ - || *(ptr-2) != 'c') - { - for (i = (ptr && (*(ptr-1) == 'd' && *(ptr-2) == 'h') ? 1:0); - i < (ptr && (*(ptr-1) == 'd' && *(ptr-2) == 'f') ? 1:2); - i++) - { - for (j = 0; j < 8; j++) - { - disk_no = (i * 0x80) + j; - if ((disk_choice || disk_no == current_drive) - && ! get_diskinfo (disk_no, &geom)) - { - char dev_name[8]; - - grub_sprintf (dev_name, "%cd%d", i ? 'h':'f', j); - print_a_completion (dev_name); - } - } - } - } - - if (cdrom_drive != GRUB_INVALID_DRIVE - && (disk_choice || cdrom_drive == current_drive) - && (!ptr - || *(ptr-1) == '(' - || (*(ptr-1) == 'd' && *(ptr-2) == 'c'))) - print_a_completion ("cd"); - -# ifdef SUPPORT_NETBOOT - if (network_ready - && (disk_choice || NETWORK_DRIVE == current_drive) - && (!ptr - || *(ptr-1) == '(' - || (*(ptr-1) == 'd' && *(ptr-2) == 'n'))) - print_a_completion ("nd"); -# endif /* SUPPORT_NETBOOT */ - - if (is_completion && *unique_string) - { - ptr = buf; - while (*ptr != '(') - ptr--; - ptr++; - grub_strcpy (ptr, unique_string); - if (unique == 1) - { - ptr += grub_strlen (ptr); - if (*unique_string == 'h') - { - *ptr++ = ','; - *ptr = 0; - } - else - { - *ptr++ = ')'; - *ptr = 0; - } - } - } - - if (! is_completion) - grub_putchar ('\n'); - } - else - { - /* partition completions */ - if (part_choice == PART_CHOSEN - && open_partition () - && ! IS_PC_SLICE_TYPE_BSD (current_slice)) - { - unique = 1; - ptr = buf + grub_strlen (buf); - if (*(ptr - 1) != ')') - { - *ptr++ = ')'; - *ptr = 0; - } - } - else - { - if (! is_completion) - grub_printf (" Possible partitions are:\n"); - real_open_partition (1); - - if (is_completion && *unique_string) - { - ptr = buf; - while (*ptr++ != ',') - ; - grub_strcpy (ptr, unique_string); - } - } - } - } - else if (ptr && *ptr == '/') - { - /* filename completions */ - if (! is_completion) - grub_printf (" Possible files are:"); - - dir (buf); - - if (is_completion && *unique_string) - { - ptr += grub_strlen (ptr); - while (*ptr != '/') - ptr--; - ptr++; - - grub_strcpy (ptr, unique_string); - - if (unique == 1) - { - ptr += grub_strlen (unique_string); - - /* Check if the file UNIQUE_STRING is a directory. */ - *ptr = '/'; - *(ptr + 1) = 0; - - dir (buf); - - /* Restore the original unique value. */ - unique = 1; - - if (errnum) - { - /* Regular file */ - errnum = 0; - *ptr = ' '; - *(ptr + 1) = 0; - } - } - } - - if (! is_completion) - grub_putchar ('\n'); - } - else - errnum = ERR_BAD_FILENAME; - } - - print_error (); - do_completion = 0; - if (errnum) - return -1; - else - return unique - 1; -} -#endif /* STAGE1_5 */ - - -/* - * This is the generic file open function. - */ - -int -grub_open (char *filename) -{ -#ifndef NO_DECOMPRESSION - compressed_file = 0; -#endif /* NO_DECOMPRESSION */ - - /* if any "dir" function uses/sets filepos, it must - set it to zero before returning if opening a file! */ - filepos = 0; - - if (!(filename = setup_part (filename))) - return 0; - -#ifndef NO_BLOCK_FILES - block_file = 0; -#endif /* NO_BLOCK_FILES */ - - /* This accounts for partial filesystem implementations. */ - fsmax = MAXINT; - - if (*filename != '/') - { -#ifndef NO_BLOCK_FILES - char *ptr = filename; - int tmp, list_addr = BLK_BLKLIST_START; - filemax = 0; - - while (list_addr < BLK_MAX_ADDR) - { - tmp = 0; - safe_parse_maxint (&ptr, &tmp); - errnum = 0; - - if (*ptr != '+') - { - if ((*ptr && *ptr != '/' && !isspace (*ptr)) - || tmp == 0 || tmp > filemax) - errnum = ERR_BAD_FILENAME; - else - filemax = tmp; - - break; - } - - /* since we use the same filesystem buffer, mark it to - be remounted */ - fsys_type = NUM_FSYS; - - BLK_BLKSTART (list_addr) = tmp; - ptr++; - - if (!safe_parse_maxint (&ptr, &tmp) - || tmp == 0 - || (*ptr && *ptr != ',' && *ptr != '/' && !isspace (*ptr))) - { - errnum = ERR_BAD_FILENAME; - break; - } - - BLK_BLKLENGTH (list_addr) = tmp; - - filemax += (tmp * SECTOR_SIZE); - list_addr += BLK_BLKLIST_INC_VAL; - - if (*ptr != ',') - break; - - ptr++; - } - - if (list_addr < BLK_MAX_ADDR && ptr != filename && !errnum) - { - block_file = 1; - BLK_CUR_FILEPOS = 0; - BLK_CUR_BLKLIST = BLK_BLKLIST_START; - BLK_CUR_BLKNUM = 0; - -#ifndef NO_DECOMPRESSION - return gunzip_test_header (); -#else /* NO_DECOMPRESSION */ - return 1; -#endif /* NO_DECOMPRESSION */ - } -#else /* NO_BLOCK_FILES */ - errnum = ERR_BAD_FILENAME; -#endif /* NO_BLOCK_FILES */ - } - - if (!errnum && fsys_type == NUM_FSYS) - errnum = ERR_FSYS_MOUNT; - -# ifndef STAGE1_5 - /* set "dir" function to open a file */ - print_possibilities = 0; -# endif - - if (!errnum && (*(fsys_table[fsys_type].dir_func)) (filename)) - { -#ifndef NO_DECOMPRESSION - return gunzip_test_header (); -#else /* NO_DECOMPRESSION */ - return 1; -#endif /* NO_DECOMPRESSION */ - } - - return 0; -} - - -int -grub_read (char *buf, int len) -{ - /* Make sure "filepos" is a sane value */ - if ((filepos < 0) || (filepos > filemax)) - filepos = filemax; - - /* Make sure "len" is a sane value */ - if ((len < 0) || (len > (filemax - filepos))) - len = filemax - filepos; - - /* if target file position is past the end of - the supported/configured filesize, then - there is an error */ - if (filepos + len > fsmax) - { - errnum = ERR_FILELENGTH; - return 0; - } - -#ifndef NO_DECOMPRESSION - if (compressed_file) - return gunzip_read (buf, len); -#endif /* NO_DECOMPRESSION */ - -#ifndef NO_BLOCK_FILES - if (block_file) - { - int size, off, ret = 0; - - while (len && !errnum) - { - /* we may need to look for the right block in the list(s) */ - if (filepos < BLK_CUR_FILEPOS) - { - BLK_CUR_FILEPOS = 0; - BLK_CUR_BLKLIST = BLK_BLKLIST_START; - BLK_CUR_BLKNUM = 0; - } - - /* run BLK_CUR_FILEPOS up to filepos */ - while (filepos > BLK_CUR_FILEPOS) - { - if ((filepos - (BLK_CUR_FILEPOS & ~(SECTOR_SIZE - 1))) - >= SECTOR_SIZE) - { - BLK_CUR_FILEPOS += SECTOR_SIZE; - BLK_CUR_BLKNUM++; - - if (BLK_CUR_BLKNUM >= BLK_BLKLENGTH (BLK_CUR_BLKLIST)) - { - BLK_CUR_BLKLIST += BLK_BLKLIST_INC_VAL; - BLK_CUR_BLKNUM = 0; - } - } - else - BLK_CUR_FILEPOS = filepos; - } - - off = filepos & (SECTOR_SIZE - 1); - size = ((BLK_BLKLENGTH (BLK_CUR_BLKLIST) - BLK_CUR_BLKNUM) - * SECTOR_SIZE) - off; - if (size > len) - size = len; - - disk_read_func = disk_read_hook; - - /* read current block and put it in the right place in memory */ - devread (BLK_BLKSTART (BLK_CUR_BLKLIST) + BLK_CUR_BLKNUM, - off, size, buf); - - disk_read_func = NULL; - - len -= size; - filepos += size; - ret += size; - buf += size; - } - - if (errnum) - ret = 0; - - return ret; - } -#endif /* NO_BLOCK_FILES */ - - if (fsys_type == NUM_FSYS) - { - errnum = ERR_FSYS_MOUNT; - return 0; - } - - return (*(fsys_table[fsys_type].read_func)) (buf, len); -} - -#ifndef STAGE1_5 -/* Reposition a file offset. */ -int -grub_seek (int offset) -{ - if (offset > filemax || offset < 0) - return -1; - - filepos = offset; - return offset; -} - -int -dir (char *dirname) -{ -#ifndef NO_DECOMPRESSION - compressed_file = 0; -#endif /* NO_DECOMPRESSION */ - - if (!(dirname = setup_part (dirname))) - return 0; - - if (*dirname != '/') - errnum = ERR_BAD_FILENAME; - - if (fsys_type == NUM_FSYS) - errnum = ERR_FSYS_MOUNT; - - if (errnum) - return 0; - - /* set "dir" function to list completions */ - print_possibilities = 1; - - return (*(fsys_table[fsys_type].dir_func)) (dirname); -} -#endif /* STAGE1_5 */ - -void -grub_close (void) -{ -#ifndef NO_BLOCK_FILES - if (block_file) - return; -#endif /* NO_BLOCK_FILES */ - - if (fsys_table[fsys_type].close_func != 0) - (*(fsys_table[fsys_type].close_func)) (); -} diff --git a/stage2/fat.h b/stage2/fat.h deleted file mode 100644 index 7fed6bacb..000000000 --- a/stage2/fat.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2001 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - - -/* - * Defines for the FAT BIOS Parameter Block (embedded in the first block - * of the partition. - */ - -typedef __signed__ char __s8; -typedef unsigned char __u8; -typedef __signed__ short __s16; -typedef unsigned short __u16; -typedef __signed__ int __s32; -typedef unsigned int __u32; - -/* Note that some shorts are not aligned, and must therefore - * be declared as array of two bytes. - */ -struct fat_bpb { - __s8 ignored[3]; /* Boot strap short or near jump */ - __s8 system_id[8]; /* Name - can be used to special case - partition manager volumes */ - __u8 bytes_per_sect[2]; /* bytes per logical sector */ - __u8 sects_per_clust;/* sectors/cluster */ - __u8 reserved_sects[2]; /* reserved sectors */ - __u8 num_fats; /* number of FATs */ - __u8 dir_entries[2]; /* root directory entries */ - __u8 short_sectors[2]; /* number of sectors */ - __u8 media; /* media code (unused) */ - __u16 fat_length; /* sectors/FAT */ - __u16 secs_track; /* sectors per track */ - __u16 heads; /* number of heads */ - __u32 hidden; /* hidden sectors (unused) */ - __u32 long_sectors; /* number of sectors (if short_sectors == 0) */ - - /* The following fields are only used by FAT32 */ - __u32 fat32_length; /* sectors/FAT */ - __u16 flags; /* bit 8: fat mirroring, low 4: active fat */ - __u8 version[2]; /* major, minor filesystem version */ - __u32 root_cluster; /* first cluster in root directory */ - __u16 info_sector; /* filesystem info sector */ - __u16 backup_boot; /* backup boot sector */ - __u16 reserved2[6]; /* Unused */ -}; - -#define FAT_CVT_U16(bytarr) (* (__u16*)(bytarr)) - -/* - * Defines how to differentiate a 12-bit and 16-bit FAT. - */ - -#define FAT_MAX_12BIT_CLUST 4087 /* 4085 + 2 */ - -/* - * Defines for the file "attribute" byte - */ - -#define FAT_ATTRIB_OK_MASK 0x37 -#define FAT_ATTRIB_NOT_OK_MASK 0xC8 -#define FAT_ATTRIB_DIR 0x10 -#define FAT_ATTRIB_LONGNAME 0x0F - -/* - * Defines for FAT directory entries - */ - -#define FAT_DIRENTRY_LENGTH 32 - -#define FAT_DIRENTRY_ATTRIB(entry) \ - (*((unsigned char *) (entry+11))) -#define FAT_DIRENTRY_VALID(entry) \ - ( ((*((unsigned char *) entry)) != 0) \ - && ((*((unsigned char *) entry)) != 0xE5) \ - && !(FAT_DIRENTRY_ATTRIB(entry) & FAT_ATTRIB_NOT_OK_MASK) ) -#define FAT_DIRENTRY_FIRST_CLUSTER(entry) \ - ((*((unsigned short *) (entry+26)))+(*((unsigned short *) (entry+20)) << 16)) -#define FAT_DIRENTRY_FILELENGTH(entry) \ - (*((unsigned long *) (entry+28))) - -#define FAT_LONGDIR_ID(entry) \ - (*((unsigned char *) (entry))) -#define FAT_LONGDIR_ALIASCHECKSUM(entry) \ - (*((unsigned char *) (entry+13))) diff --git a/stage2/filesys.h b/stage2/filesys.h deleted file mode 100644 index bbad8b924..000000000 --- a/stage2/filesys.h +++ /dev/null @@ -1,165 +0,0 @@ -/* filesys.h - abstract filesystem interface */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "pc_slice.h" - -#ifdef FSYS_FFS -#define FSYS_FFS_NUM 1 -int ffs_mount (void); -int ffs_read (char *buf, int len); -int ffs_dir (char *dirname); -int ffs_embed (int *start_sector, int needed_sectors); -#else -#define FSYS_FFS_NUM 0 -#endif - -#ifdef FSYS_UFS2 -#define FSYS_UFS2_NUM 1 -int ufs2_mount (void); -int ufs2_read (char *buf, int len); -int ufs2_dir (char *dirname); -int ufs2_embed (int *start_sector, int needed_sectors); -#else -#define FSYS_UFS2_NUM 0 -#endif - -#ifdef FSYS_FAT -#define FSYS_FAT_NUM 1 -int fat_mount (void); -int fat_read (char *buf, int len); -int fat_dir (char *dirname); -#else -#define FSYS_FAT_NUM 0 -#endif - -#ifdef FSYS_EXT2FS -#define FSYS_EXT2FS_NUM 1 -int ext2fs_mount (void); -int ext2fs_read (char *buf, int len); -int ext2fs_dir (char *dirname); -#else -#define FSYS_EXT2FS_NUM 0 -#endif - -#ifdef FSYS_MINIX -#define FSYS_MINIX_NUM 1 -int minix_mount (void); -int minix_read (char *buf, int len); -int minix_dir (char *dirname); -#else -#define FSYS_MINIX_NUM 0 -#endif - -#ifdef FSYS_REISERFS -#define FSYS_REISERFS_NUM 1 -int reiserfs_mount (void); -int reiserfs_read (char *buf, int len); -int reiserfs_dir (char *dirname); -int reiserfs_embed (int *start_sector, int needed_sectors); -#else -#define FSYS_REISERFS_NUM 0 -#endif - -#ifdef FSYS_VSTAFS -#define FSYS_VSTAFS_NUM 1 -int vstafs_mount (void); -int vstafs_read (char *buf, int len); -int vstafs_dir (char *dirname); -#else -#define FSYS_VSTAFS_NUM 0 -#endif - -#ifdef FSYS_JFS -#define FSYS_JFS_NUM 1 -int jfs_mount (void); -int jfs_read (char *buf, int len); -int jfs_dir (char *dirname); -int jfs_embed (int *start_sector, int needed_sectors); -#else -#define FSYS_JFS_NUM 0 -#endif - -#ifdef FSYS_XFS -#define FSYS_XFS_NUM 1 -int xfs_mount (void); -int xfs_read (char *buf, int len); -int xfs_dir (char *dirname); -#else -#define FSYS_XFS_NUM 0 -#endif - -#ifdef FSYS_TFTP -#define FSYS_TFTP_NUM 1 -int tftp_mount (void); -int tftp_read (char *buf, int len); -int tftp_dir (char *dirname); -void tftp_close (void); -#else -#define FSYS_TFTP_NUM 0 -#endif - -#ifdef FSYS_ISO9660 -#define FSYS_ISO9660_NUM 1 -int iso9660_mount (void); -int iso9660_read (char *buf, int len); -int iso9660_dir (char *dirname); -#else -#define FSYS_ISO9660_NUM 0 -#endif - -#ifndef NUM_FSYS -#define NUM_FSYS \ - (FSYS_FFS_NUM + FSYS_FAT_NUM + FSYS_EXT2FS_NUM + FSYS_MINIX_NUM \ - + FSYS_REISERFS_NUM + FSYS_VSTAFS_NUM + FSYS_JFS_NUM + FSYS_XFS_NUM \ - + FSYS_TFTP_NUM + FSYS_ISO9660_NUM + FSYS_UFS2_NUM) -#endif - -/* defines for the block filesystem info area */ -#ifndef NO_BLOCK_FILES -#define BLK_CUR_FILEPOS (*((int*)FSYS_BUF)) -#define BLK_CUR_BLKLIST (*((int*)(FSYS_BUF+4))) -#define BLK_CUR_BLKNUM (*((int*)(FSYS_BUF+8))) -#define BLK_MAX_ADDR (FSYS_BUF+0x7FF9) -#define BLK_BLKSTART(l) (*((int*)l)) -#define BLK_BLKLENGTH(l) (*((int*)(l+4))) -#define BLK_BLKLIST_START (FSYS_BUF+12) -#define BLK_BLKLIST_INC_VAL 8 -#endif /* NO_BLOCK_FILES */ - -/* this next part is pretty ugly, but it keeps it in one place! */ - -struct fsys_entry -{ - char *name; - int (*mount_func) (void); - int (*read_func) (char *buf, int len); - int (*dir_func) (char *dirname); - void (*close_func) (void); - int (*embed_func) (int *start_sector, int needed_sectors); -}; - -#ifdef STAGE1_5 -# define print_possibilities 0 -#else -extern int print_possibilities; -#endif - -extern int fsmax; -extern struct fsys_entry fsys_table[NUM_FSYS + 1]; diff --git a/stage2/freebsd.h b/stage2/freebsd.h deleted file mode 100644 index ffbf602b5..000000000 --- a/stage2/freebsd.h +++ /dev/null @@ -1,95 +0,0 @@ - -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2001 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* command-line parameter defines */ -#define RB_ASKNAME 0x01 /* ask for file name to reboot from */ -#define RB_SINGLE 0x02 /* reboot to single user only */ -#define RB_NOSYNC 0x04 /* dont sync before reboot */ -#define RB_HALT 0x08 /* don't reboot, just halt */ -#define RB_INITNAME 0x10 /* name given for /etc/init (unused) */ -#define RB_DFLTROOT 0x20 /* use compiled-in rootdev */ -#define RB_KDB 0x40 /* give control to kernel debugger */ -#define RB_RDONLY 0x80 /* mount root fs read-only */ -#define RB_DUMP 0x100 /* dump kernel memory before reboot */ -#define RB_MINIROOT 0x200 /* mini-root present in memory at boot time */ -#define RB_CONFIG 0x400 /* invoke user configuration routing */ -#define RB_VERBOSE 0x800 /* print all potentially useful info */ -#define RB_SERIAL 0x1000 /* user serial port as console */ -#define RB_CDROM 0x2000 /* use cdrom as root */ -#define RB_GDB 0x8000 /* use GDB remote debugger instead of DDB */ -#define RB_MUTE 0x10000 /* Come up with the console muted */ -#define RB_MULTIPLE 0x20000000 /* Use multiple consoles */ - -#define RB_BOOTINFO 0x80000000 /* have `struct bootinfo *' arg */ - -/* - * Constants for converting boot-style device number to type, - * adaptor (uba, mba, etc), unit number and partition number. - * Type (== major device number) is in the low byte - * for backward compatibility. Except for that of the "magic - * number", each mask applies to the shifted value. - * Format: - * (4) (4) (4) (4) (8) (8) - * -------------------------------- - * |MA | AD| CT| UN| PART | TYPE | - * -------------------------------- - */ -#define B_ADAPTORSHIFT 24 -#define B_CONTROLLERSHIFT 20 -#define B_UNITSHIFT 16 -#define B_PARTITIONSHIFT 8 -#define B_TYPESHIFT 0 - -#define B_DEVMAGIC ((unsigned long)0xa0000000) - -#define MAKEBOOTDEV(type, adaptor, controller, unit, partition) \ - (((type) << B_TYPESHIFT) | ((adaptor) << B_ADAPTORSHIFT) | \ - ((controller) << B_CONTROLLERSHIFT) | ((unit) << B_UNITSHIFT) | \ - ((partition) << B_PARTITIONSHIFT) | B_DEVMAGIC) - - -/* Only change the version number if you break compatibility. */ -#define BOOTINFO_VERSION 1 - -#define N_BIOS_GEOM 8 - -/* - * A zero bootinfo field often means that there is no info available. - * Flags are used to indicate the validity of fields where zero is a - * normal value. - */ -struct bootinfo - { - unsigned int bi_version; - unsigned char *bi_kernelname; - struct nfs_diskless *bi_nfs_diskless; - /* End of fields that are always present. */ -#define bi_endcommon bi_n_bios_used - unsigned int bi_n_bios_used; - unsigned long bi_bios_geom[N_BIOS_GEOM]; - unsigned int bi_size; - unsigned char bi_memsizes_valid; - unsigned char bi_bios_dev; - unsigned char bi_pad[2]; - unsigned long bi_basemem; - unsigned long bi_extmem; - unsigned long bi_symtab; - unsigned long bi_esymtab; - }; diff --git a/stage2/fs.h b/stage2/fs.h deleted file mode 100644 index 8ed4fe041..000000000 --- a/stage2/fs.h +++ /dev/null @@ -1,457 +0,0 @@ -/* - * Mach Operating System - * Copyright (c) 1991,1990 Carnegie Mellon University - * All Rights Reserved. - * - * Permission to use, copy, modify and distribute this software and its - * documentation is hereby granted, provided that both the copyright - * notice and this permission notice appear in all copies of the - * software, derivative works or modified versions, and any portions - * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" - * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR - * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * - * Carnegie Mellon requests users of this software to return to - * - * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU - * School of Computer Science - * Carnegie Mellon University - * Pittsburgh PA 15213-3890 - * - * any improvements or extensions that they make and grant Carnegie Mellon - * the rights to redistribute these changes. - */ -/* - * Copyright (c) 1982, 1986 Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by the University of California, Berkeley. The name of the - * University may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * @(#)fs.h 7.7 (Berkeley) 5/9/89 - */ - -/* - * Each disk drive contains some number of file systems. - * A file system consists of a number of cylinder groups. - * Each cylinder group has inodes and data. - * - * A file system is described by its super-block, which in turn - * describes the cylinder groups. The super-block is critical - * data and is replicated in each cylinder group to protect against - * catastrophic loss. This is done at `newfs' time and the critical - * super-block data does not change, so the copies need not be - * referenced further unless disaster strikes. - * - * For file system fs, the offsets of the various blocks of interest - * are given in the super block as: - * [fs->fs_sblkno] Super-block - * [fs->fs_cblkno] Cylinder group block - * [fs->fs_iblkno] Inode blocks - * [fs->fs_dblkno] Data blocks - * The beginning of cylinder group cg in fs, is given by - * the ``cgbase(fs, cg)'' macro. - * - * The first boot and super blocks are given in absolute disk addresses. - * The byte-offset forms are preferred, as they don't imply a sector size. - */ -#define BBSIZE 8192 -#define SBSIZE 8192 -#define BBOFF ((mach_off_t)(0)) -#define SBOFF ((mach_off_t)(BBOFF + BBSIZE)) -#define BBLOCK ((mach_daddr_t)(0)) -#define SBLOCK ((mach_daddr_t)(BBLOCK + BBSIZE / DEV_BSIZE)) - -/* - * Addresses stored in inodes are capable of addressing fragments - * of `blocks'. File system blocks of at most size MAXBSIZE can - * be optionally broken into 2, 4, or 8 pieces, each of which is - * addressible; these pieces may be DEV_BSIZE, or some multiple of - * a DEV_BSIZE unit. - * - * Large files consist of exclusively large data blocks. To avoid - * undue wasted disk space, the last data block of a small file may be - * allocated as only as many fragments of a large block as are - * necessary. The file system format retains only a single pointer - * to such a fragment, which is a piece of a single large block that - * has been divided. The size of such a fragment is determinable from - * information in the inode, using the ``blksize(fs, ip, lbn)'' macro. - * - * The file system records space availability at the fragment level; - * to determine block availability, aligned fragments are examined. - * - * The root inode is the root of the file system. - * Inode 0 can't be used for normal purposes and - * historically bad blocks were linked to inode 1, - * thus the root inode is 2. (inode 1 is no longer used for - * this purpose, however numerous dump tapes make this - * assumption, so we are stuck with it) - */ -#define ROOTINO ((mach_ino_t)2) /* i number of all roots */ - -/* - * MINBSIZE is the smallest allowable block size. - * In order to insure that it is possible to create files of size - * 2^32 with only two levels of indirection, MINBSIZE is set to 4096. - * MINBSIZE must be big enough to hold a cylinder group block, - * thus changes to (struct cg) must keep its size within MINBSIZE. - * Note that super blocks are always of size SBSIZE, - * and that both SBSIZE and MAXBSIZE must be >= MINBSIZE. - */ -#define MINBSIZE 4096 - -/* - * The path name on which the file system is mounted is maintained - * in fs_fsmnt. MAXMNTLEN defines the amount of space allocated in - * the super block for this name. - * The limit on the amount of summary information per file system - * is defined by MAXCSBUFS. It is currently parameterized for a - * maximum of two million cylinders. - */ -#define MAXMNTLEN 512 -#define MAXCSBUFS 32 - -/* - * Per cylinder group information; summarized in blocks allocated - * from first cylinder group data blocks. These blocks have to be - * read in from fs_csaddr (size fs_cssize) in addition to the - * super block. - * - * N.B. sizeof(struct csum) must be a power of two in order for - * the ``fs_cs'' macro to work (see below). - */ -struct csum - { - int cs_ndir; /* number of directories */ - int cs_nbfree; /* number of free blocks */ - int cs_nifree; /* number of free inodes */ - int cs_nffree; /* number of free frags */ - }; - -/* - * Super block for a file system. - */ -#define FS_MAGIC 0x011954 -struct fs - { - int xxx1; /* struct fs *fs_link; */ - int xxx2; /* struct fs *fs_rlink; */ - mach_daddr_t fs_sblkno; /* addr of super-block in filesys */ - mach_daddr_t fs_cblkno; /* offset of cyl-block in filesys */ - mach_daddr_t fs_iblkno; /* offset of inode-blocks in filesys */ - mach_daddr_t fs_dblkno; /* offset of first data after cg */ - int fs_cgoffset; /* cylinder group offset in cylinder */ - int fs_cgmask; /* used to calc mod fs_ntrak */ - mach_time_t fs_time; /* last time written */ - int fs_size; /* number of blocks in fs */ - int fs_dsize; /* number of data blocks in fs */ - int fs_ncg; /* number of cylinder groups */ - int fs_bsize; /* size of basic blocks in fs */ - int fs_fsize; /* size of frag blocks in fs */ - int fs_frag; /* number of frags in a block in fs */ -/* these are configuration parameters */ - int fs_minfree; /* minimum percentage of free blocks */ - int fs_rotdelay; /* num of ms for optimal next block */ - int fs_rps; /* disk revolutions per second */ -/* these fields can be computed from the others */ - int fs_bmask; /* ``blkoff'' calc of blk offsets */ - int fs_fmask; /* ``fragoff'' calc of frag offsets */ - int fs_bshift; /* ``lblkno'' calc of logical blkno */ - int fs_fshift; /* ``numfrags'' calc number of frags */ -/* these are configuration parameters */ - int fs_maxcontig; /* max number of contiguous blks */ - int fs_maxbpg; /* max number of blks per cyl group */ -/* these fields can be computed from the others */ - int fs_fragshift; /* block to frag shift */ - int fs_fsbtodb; /* fsbtodb and dbtofsb shift constant */ - int fs_sbsize; /* actual size of super block */ - int fs_csmask; /* csum block offset */ - int fs_csshift; /* csum block number */ - int fs_nindir; /* value of NINDIR */ - int fs_inopb; /* value of INOPB */ - int fs_nspf; /* value of NSPF */ -/* yet another configuration parameter */ - int fs_optim; /* optimization preference, see below */ -/* these fields are derived from the hardware */ - int fs_npsect; /* # sectors/track including spares */ - int fs_interleave; /* hardware sector interleave */ - int fs_trackskew; /* sector 0 skew, per track */ - int fs_headswitch; /* head switch time, usec */ - int fs_trkseek; /* track-to-track seek, usec */ -/* sizes determined by number of cylinder groups and their sizes */ - mach_daddr_t fs_csaddr; /* blk addr of cyl grp summary area */ - int fs_cssize; /* size of cyl grp summary area */ - int fs_cgsize; /* cylinder group size */ -/* these fields are derived from the hardware */ - int fs_ntrak; /* tracks per cylinder */ - int fs_nsect; /* sectors per track */ - int fs_spc; /* sectors per cylinder */ -/* this comes from the disk driver partitioning */ - int fs_ncyl; /* cylinders in file system */ -/* these fields can be computed from the others */ - int fs_cpg; /* cylinders per group */ - int fs_ipg; /* inodes per group */ - int fs_fpg; /* blocks per group * fs_frag */ -/* this data must be re-computed after crashes */ - struct csum fs_cstotal; /* cylinder summary information */ -/* these fields are cleared at mount time */ - char fs_fmod; /* super block modified flag */ - char fs_clean; /* file system is clean flag */ - char fs_ronly; /* mounted read-only flag */ - char fs_flags; /* currently unused flag */ - char fs_fsmnt[MAXMNTLEN]; /* name mounted on */ -/* these fields retain the current block allocation info */ - int fs_cgrotor; /* last cg searched */ -#if 1 - int was_fs_csp[MAXCSBUFS]; -#else - struct csum *fs_csp[MAXCSBUFS]; /* list of fs_cs info buffers */ -#endif - int fs_cpc; /* cyl per cycle in postbl */ - short fs_opostbl[16][8]; /* old rotation block list head */ - long fs_sparecon[50]; /* reserved for future constants */ - long fs_contigsumsize; /* size of cluster summary array */ - long fs_maxsymlinklen; /* max length of an internal symlink */ - long fs_inodefmt; /* format of on-disk inodes */ - quad fs_maxfilesize; /* maximum representable file size */ - quad fs_qbmask; /* ~fs_bmask - for use with quad size */ - quad fs_qfmask; /* ~fs_fmask - for use with quad size */ - long fs_state; /* validate fs_clean field */ - int fs_postblformat; /* format of positional layout tables */ - int fs_nrpos; /* number of rotaional positions */ - int fs_postbloff; /* (short) rotation block list head */ - int fs_rotbloff; /* (u_char) blocks for each rotation */ - int fs_magic; /* magic number */ - u_char fs_space[1]; /* list of blocks for each rotation */ -/* actually longer */ - }; -/* - * Preference for optimization. - */ -#define FS_OPTTIME 0 /* minimize allocation time */ -#define FS_OPTSPACE 1 /* minimize disk fragmentation */ - -/* - * Rotational layout table format types - */ -#define FS_42POSTBLFMT -1 /* 4.2BSD rotational table format */ -#define FS_DYNAMICPOSTBLFMT 1 /* dynamic rotational table format */ -/* - * Macros for access to superblock array structures - */ -#define fs_postbl(fs, cylno) \ - (((fs)->fs_postblformat == FS_42POSTBLFMT) \ - ? ((fs)->fs_opostbl[cylno]) \ - : ((short *)((char *)(fs) + (fs)->fs_postbloff) + (cylno) * (fs)->fs_nrpos)) -#define fs_rotbl(fs) \ - (((fs)->fs_postblformat == FS_42POSTBLFMT) \ - ? ((fs)->fs_space) \ - : ((u_char *)((char *)(fs) + (fs)->fs_rotbloff))) - -/* - * Convert cylinder group to base address of its global summary info. - * - * N.B. This macro assumes that sizeof(struct csum) is a power of two. - */ -#define fs_cs(fs, indx) \ - fs_csp[(indx) >> (fs)->fs_csshift][(indx) & ~(fs)->fs_csmask] - -/* - * Cylinder group block for a file system. - */ -#define CG_MAGIC 0x090255 -struct cg - { - int xxx1; /* struct cg *cg_link; */ - int cg_magic; /* magic number */ - mach_time_t cg_time; /* time last written */ - int cg_cgx; /* we are the cgx'th cylinder group */ - short cg_ncyl; /* number of cyl's this cg */ - short cg_niblk; /* number of inode blocks this cg */ - int cg_ndblk; /* number of data blocks this cg */ - struct csum cg_cs; /* cylinder summary information */ - int cg_rotor; /* position of last used block */ - int cg_frotor; /* position of last used frag */ - int cg_irotor; /* position of last used inode */ - int cg_frsum[MAXFRAG]; /* counts of available frags */ - int cg_btotoff; /* (long) block totals per cylinder */ - int cg_boff; /* (short) free block positions */ - int cg_iusedoff; /* (char) used inode map */ - int cg_freeoff; /* (u_char) free block map */ - int cg_nextfreeoff; /* (u_char) next available space */ - int cg_sparecon[16]; /* reserved for future use */ - u_char cg_space[1]; /* space for cylinder group maps */ -/* actually longer */ - }; -/* - * Macros for access to cylinder group array structures - */ -#define cg_blktot(cgp) \ - (((cgp)->cg_magic != CG_MAGIC) \ - ? (((struct ocg *)(cgp))->cg_btot) \ - : ((int *)((char *)(cgp) + (cgp)->cg_btotoff))) -#define cg_blks(fs, cgp, cylno) \ - (((cgp)->cg_magic != CG_MAGIC) \ - ? (((struct ocg *)(cgp))->cg_b[cylno]) \ - : ((short *)((char *)(cgp) + (cgp)->cg_boff) + (cylno) * (fs)->fs_nrpos)) -#define cg_inosused(cgp) \ - (((cgp)->cg_magic != CG_MAGIC) \ - ? (((struct ocg *)(cgp))->cg_iused) \ - : ((char *)((char *)(cgp) + (cgp)->cg_iusedoff))) -#define cg_blksfree(cgp) \ - (((cgp)->cg_magic != CG_MAGIC) \ - ? (((struct ocg *)(cgp))->cg_free) \ - : ((u_char *)((char *)(cgp) + (cgp)->cg_freeoff))) -#define cg_chkmagic(cgp) \ - ((cgp)->cg_magic == CG_MAGIC || ((struct ocg *)(cgp))->cg_magic == CG_MAGIC) - -/* - * The following structure is defined - * for compatibility with old file systems. - */ -struct ocg - { - int xxx1; /* struct ocg *cg_link; */ - int xxx2; /* struct ocg *cg_rlink; */ - mach_time_t cg_time; /* time last written */ - int cg_cgx; /* we are the cgx'th cylinder group */ - short cg_ncyl; /* number of cyl's this cg */ - short cg_niblk; /* number of inode blocks this cg */ - int cg_ndblk; /* number of data blocks this cg */ - struct csum cg_cs; /* cylinder summary information */ - int cg_rotor; /* position of last used block */ - int cg_frotor; /* position of last used frag */ - int cg_irotor; /* position of last used inode */ - int cg_frsum[8]; /* counts of available frags */ - int cg_btot[32]; /* block totals per cylinder */ - short cg_b[32][8]; /* positions of free blocks */ - char cg_iused[256]; /* used inode map */ - int cg_magic; /* magic number */ - u_char cg_free[1]; /* free block map */ -/* actually longer */ - }; - -/* - * Turn file system block numbers into disk block addresses. - * This maps file system blocks to device size blocks. - */ -#define fsbtodb(fs, b) ((b) << (fs)->fs_fsbtodb) -#define dbtofsb(fs, b) ((b) >> (fs)->fs_fsbtodb) - -/* - * Cylinder group macros to locate things in cylinder groups. - * They calc file system addresses of cylinder group data structures. - */ -#define cgbase(fs, c) ((mach_daddr_t)((fs)->fs_fpg * (c))) -#define cgstart(fs, c) \ - (cgbase(fs, c) + (fs)->fs_cgoffset * ((c) & ~((fs)->fs_cgmask))) -#define cgsblock(fs, c) (cgstart(fs, c) + (fs)->fs_sblkno) /* super blk */ -#define cgtod(fs, c) (cgstart(fs, c) + (fs)->fs_cblkno) /* cg block */ -#define cgimin(fs, c) (cgstart(fs, c) + (fs)->fs_iblkno) /* inode blk */ -#define cgdmin(fs, c) (cgstart(fs, c) + (fs)->fs_dblkno) /* 1st data */ - -/* - * Macros for handling inode numbers: - * inode number to file system block offset. - * inode number to cylinder group number. - * inode number to file system block address. - */ -#define itoo(fs, x) ((x) % INOPB(fs)) -#define itog(fs, x) ((x) / (fs)->fs_ipg) -#define itod(fs, x) \ - ((mach_daddr_t)(cgimin(fs, itog(fs, x)) + \ - (blkstofrags((fs), (((x) % (fs)->fs_ipg) / INOPB(fs)))))) - -/* - * Give cylinder group number for a file system block. - * Give cylinder group block number for a file system block. - */ -#define dtog(fs, d) ((d) / (fs)->fs_fpg) -#define dtogd(fs, d) ((d) % (fs)->fs_fpg) - -/* - * Extract the bits for a block from a map. - * Compute the cylinder and rotational position of a cyl block addr. - */ -#define blkmap(fs, map, loc) \ - (((map)[(loc) / NBBY] >> ((loc) % NBBY)) & (0xff >> (NBBY - (fs)->fs_frag))) -#define cbtocylno(fs, bno) \ - ((bno) * NSPF(fs) / (fs)->fs_spc) -#define cbtorpos(fs, bno) \ - (((bno) * NSPF(fs) % (fs)->fs_spc / (fs)->fs_nsect * (fs)->fs_trackskew + \ - (bno) * NSPF(fs) % (fs)->fs_spc % (fs)->fs_nsect * (fs)->fs_interleave) % \ - (fs)->fs_nsect * (fs)->fs_nrpos / (fs)->fs_npsect) - -/* - * The following macros optimize certain frequently calculated - * quantities by using shifts and masks in place of divisions - * modulos and multiplications. - */ -#define blkoff(fs, loc) /* calculates (loc % fs->fs_bsize) */ \ - ((loc) & ~(fs)->fs_bmask) -#define fragoff(fs, loc) /* calculates (loc % fs->fs_fsize) */ \ - ((loc) & ~(fs)->fs_fmask) -#define lblkno(fs, loc) /* calculates (loc / fs->fs_bsize) */ \ - ((loc) >> (fs)->fs_bshift) -#define numfrags(fs, loc) /* calculates (loc / fs->fs_fsize) */ \ - ((loc) >> (fs)->fs_fshift) -#define blkroundup(fs, size) /* calculates roundup(size, fs->fs_bsize) */ \ - (((size) + (fs)->fs_bsize - 1) & (fs)->fs_bmask) -#define fragroundup(fs, size) /* calculates roundup(size, fs->fs_fsize) */ \ - (((size) + (fs)->fs_fsize - 1) & (fs)->fs_fmask) -#define fragstoblks(fs, frags) /* calculates (frags / fs->fs_frag) */ \ - ((frags) >> (fs)->fs_fragshift) -#define blkstofrags(fs, blks) /* calculates (blks * fs->fs_frag) */ \ - ((blks) << (fs)->fs_fragshift) -#define fragnum(fs, fsb) /* calculates (fsb % fs->fs_frag) */ \ - ((fsb) & ((fs)->fs_frag - 1)) -#define blknum(fs, fsb) /* calculates rounddown(fsb, fs->fs_frag) */ \ - ((fsb) &~ ((fs)->fs_frag - 1)) - -/* - * Determine the number of available frags given a - * percentage to hold in reserve - */ -#define freespace(fs, percentreserved) \ - (blkstofrags((fs), (fs)->fs_cstotal.cs_nbfree) + \ - (fs)->fs_cstotal.cs_nffree - ((fs)->fs_dsize * (percentreserved) / 100)) - -/* - * Determining the size of a file block in the file system. - */ -#define blksize(fs, ip, lbn) \ - (((lbn) >= NDADDR || (ip)->i_size >= ((lbn) + 1) << (fs)->fs_bshift) \ - ? (fs)->fs_bsize \ - : (fragroundup(fs, blkoff(fs, (ip)->i_size)))) -#define dblksize(fs, dip, lbn) \ - (((lbn) >= NDADDR || (dip)->di_size >= ((lbn) + 1) << (fs)->fs_bshift) \ - ? (fs)->fs_bsize \ - : (fragroundup(fs, blkoff(fs, (dip)->di_size)))) - -/* - * Number of disk sectors per block; assumes DEV_BSIZE byte sector size. - */ -#define NSPB(fs) ((fs)->fs_nspf << (fs)->fs_fragshift) -#define NSPF(fs) ((fs)->fs_nspf) - -/* - * INOPB is the number of inodes in a secondary storage block. - */ -#define INOPB(fs) ((fs)->fs_inopb) -#define INOPF(fs) ((fs)->fs_inopb >> (fs)->fs_fragshift) - -/* - * NINDIR is the number of indirects in a file system block. - */ -#define NINDIR(fs) ((fs)->fs_nindir) diff --git a/stage2/fsys_ext2fs.c b/stage2/fsys_ext2fs.c deleted file mode 100644 index 560048f4c..000000000 --- a/stage2/fsys_ext2fs.c +++ /dev/null @@ -1,789 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999, 2001, 2003 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifdef FSYS_EXT2FS - -#include "shared.h" -#include "filesys.h" - -static int mapblock1, mapblock2; - -/* sizes are always in bytes, BLOCK values are always in DEV_BSIZE (sectors) */ -#define DEV_BSIZE 512 - -/* include/linux/fs.h */ -#define BLOCK_SIZE 1024 /* initial block size for superblock read */ -/* made up, defaults to 1 but can be passed via mount_opts */ -#define WHICH_SUPER 1 -/* kind of from fs/ext2/super.c */ -#define SBLOCK (WHICH_SUPER * BLOCK_SIZE / DEV_BSIZE) /* = 2 */ - -/* include/asm-i386/types.h */ -typedef __signed__ char __s8; -typedef unsigned char __u8; -typedef __signed__ short __s16; -typedef unsigned short __u16; -typedef __signed__ int __s32; -typedef unsigned int __u32; - -/* - * Constants relative to the data blocks, from ext2_fs.h - */ -#define EXT2_NDIR_BLOCKS 12 -#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS -#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1) -#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1) -#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1) - -/* include/linux/ext2_fs.h */ -struct ext2_super_block - { - __u32 s_inodes_count; /* Inodes count */ - __u32 s_blocks_count; /* Blocks count */ - __u32 s_r_blocks_count; /* Reserved blocks count */ - __u32 s_free_blocks_count; /* Free blocks count */ - __u32 s_free_inodes_count; /* Free inodes count */ - __u32 s_first_data_block; /* First Data Block */ - __u32 s_log_block_size; /* Block size */ - __s32 s_log_frag_size; /* Fragment size */ - __u32 s_blocks_per_group; /* # Blocks per group */ - __u32 s_frags_per_group; /* # Fragments per group */ - __u32 s_inodes_per_group; /* # Inodes per group */ - __u32 s_mtime; /* Mount time */ - __u32 s_wtime; /* Write time */ - __u16 s_mnt_count; /* Mount count */ - __s16 s_max_mnt_count; /* Maximal mount count */ - __u16 s_magic; /* Magic signature */ - __u16 s_state; /* File system state */ - __u16 s_errors; /* Behaviour when detecting errors */ - __u16 s_pad; - __u32 s_lastcheck; /* time of last check */ - __u32 s_checkinterval; /* max. time between checks */ - __u32 s_creator_os; /* OS */ - __u32 s_rev_level; /* Revision level */ - __u16 s_def_resuid; /* Default uid for reserved blocks */ - __u16 s_def_resgid; /* Default gid for reserved blocks */ - __u32 s_reserved[235]; /* Padding to the end of the block */ - }; - -struct ext2_group_desc - { - __u32 bg_block_bitmap; /* Blocks bitmap block */ - __u32 bg_inode_bitmap; /* Inodes bitmap block */ - __u32 bg_inode_table; /* Inodes table block */ - __u16 bg_free_blocks_count; /* Free blocks count */ - __u16 bg_free_inodes_count; /* Free inodes count */ - __u16 bg_used_dirs_count; /* Directories count */ - __u16 bg_pad; - __u32 bg_reserved[3]; - }; - -struct ext2_inode - { - __u16 i_mode; /* File mode */ - __u16 i_uid; /* Owner Uid */ - __u32 i_size; /* 4: Size in bytes */ - __u32 i_atime; /* Access time */ - __u32 i_ctime; /* 12: Creation time */ - __u32 i_mtime; /* Modification time */ - __u32 i_dtime; /* 20: Deletion Time */ - __u16 i_gid; /* Group Id */ - __u16 i_links_count; /* 24: Links count */ - __u32 i_blocks; /* Blocks count */ - __u32 i_flags; /* 32: File flags */ - union - { - struct - { - __u32 l_i_reserved1; - } - linux1; - struct - { - __u32 h_i_translator; - } - hurd1; - struct - { - __u32 m_i_reserved1; - } - masix1; - } - osd1; /* OS dependent 1 */ - __u32 i_block[EXT2_N_BLOCKS]; /* 40: Pointers to blocks */ - __u32 i_version; /* File version (for NFS) */ - __u32 i_file_acl; /* File ACL */ - __u32 i_dir_acl; /* Directory ACL */ - __u32 i_faddr; /* Fragment address */ - union - { - struct - { - __u8 l_i_frag; /* Fragment number */ - __u8 l_i_fsize; /* Fragment size */ - __u16 i_pad1; - __u32 l_i_reserved2[2]; - } - linux2; - struct - { - __u8 h_i_frag; /* Fragment number */ - __u8 h_i_fsize; /* Fragment size */ - __u16 h_i_mode_high; - __u16 h_i_uid_high; - __u16 h_i_gid_high; - __u32 h_i_author; - } - hurd2; - struct - { - __u8 m_i_frag; /* Fragment number */ - __u8 m_i_fsize; /* Fragment size */ - __u16 m_pad1; - __u32 m_i_reserved2[2]; - } - masix2; - } - osd2; /* OS dependent 2 */ - }; - -/* linux/limits.h */ -#define NAME_MAX 255 /* # chars in a file name */ - -/* linux/posix_type.h */ -typedef long linux_off_t; - -/* linux/ext2fs.h */ -#define EXT2_NAME_LEN 255 -struct ext2_dir_entry - { - __u32 inode; /* Inode number */ - __u16 rec_len; /* Directory entry length */ - __u8 name_len; /* Name length */ - __u8 file_type; - char name[EXT2_NAME_LEN]; /* File name */ - }; - -/* linux/ext2fs.h */ -/* - * EXT2_DIR_PAD defines the directory entries boundaries - * - * NOTE: It must be a multiple of 4 - */ -#define EXT2_DIR_PAD 4 -#define EXT2_DIR_ROUND (EXT2_DIR_PAD - 1) -#define EXT2_DIR_REC_LEN(name_len) (((name_len) + 8 + EXT2_DIR_ROUND) & \ - ~EXT2_DIR_ROUND) - - -/* ext2/super.c */ -#define log2(n) ffz(~(n)) - -#define EXT2_SUPER_MAGIC 0xEF53 /* include/linux/ext2_fs.h */ -#define EXT2_ROOT_INO 2 /* include/linux/ext2_fs.h */ -#define PATH_MAX 1024 /* include/linux/limits.h */ -#define MAX_LINK_COUNT 5 /* number of symbolic links to follow */ - -/* made up, these are pointers into FSYS_BUF */ -/* read once, always stays there: */ -#define SUPERBLOCK \ - ((struct ext2_super_block *)(FSYS_BUF)) -#define GROUP_DESC \ - ((struct ext2_group_desc *) \ - ((int)SUPERBLOCK + sizeof(struct ext2_super_block))) -#define INODE \ - ((struct ext2_inode *)((int)GROUP_DESC + EXT2_BLOCK_SIZE(SUPERBLOCK))) -#define DATABLOCK1 \ - ((int)((int)INODE + sizeof(struct ext2_inode))) -#define DATABLOCK2 \ - ((int)((int)DATABLOCK1 + EXT2_BLOCK_SIZE(SUPERBLOCK))) - -/* linux/ext2_fs.h */ -#define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (__u32)) -#define EXT2_ADDR_PER_BLOCK_BITS(s) (log2(EXT2_ADDR_PER_BLOCK(s))) - -/* linux/ext2_fs.h */ -#define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10) -/* kind of from ext2/super.c */ -#define EXT2_BLOCK_SIZE(s) (1 << EXT2_BLOCK_SIZE_BITS(s)) -/* linux/ext2fs.h */ -#define EXT2_DESC_PER_BLOCK(s) \ - (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc)) -/* linux/stat.h */ -#define S_IFMT 00170000 -#define S_IFLNK 0120000 -#define S_IFREG 0100000 -#define S_IFDIR 0040000 -#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) -#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) -#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) - -/* include/asm-i386/bitops.h */ -/* - * ffz = Find First Zero in word. Undefined if no zero exists, - * so code should check against ~0UL first.. - */ -static __inline__ unsigned long -ffz (unsigned long word) -{ - __asm__ ("bsfl %1,%0" -: "=r" (word) -: "r" (~word)); - return word; -} - -/* check filesystem types and read superblock into memory buffer */ -int -ext2fs_mount (void) -{ - int retval = 1; - - if ((((current_drive & 0x80) || (current_slice != 0)) - && (current_slice != PC_SLICE_TYPE_EXT2FS) - && (current_slice != PC_SLICE_TYPE_LINUX_RAID) - && (! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_EXT2FS)) - && (! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_OTHER))) - || part_length < (SBLOCK + (sizeof (struct ext2_super_block) / DEV_BSIZE)) - || !devread (SBLOCK, 0, sizeof (struct ext2_super_block), - (char *) SUPERBLOCK) - || SUPERBLOCK->s_magic != EXT2_SUPER_MAGIC) - retval = 0; - - return retval; -} - -/* Takes a file system block number and reads it into BUFFER. */ -static int -ext2_rdfsb (int fsblock, int buffer) -{ -#ifdef E2DEBUG - printf ("fsblock %d buffer %d\n", fsblock, buffer); -#endif /* E2DEBUG */ - return devread (fsblock * (EXT2_BLOCK_SIZE (SUPERBLOCK) / DEV_BSIZE), 0, - EXT2_BLOCK_SIZE (SUPERBLOCK), (char *) buffer); -} - -/* from - ext2/inode.c:ext2_bmap() -*/ -/* Maps LOGICAL_BLOCK (the file offset divided by the blocksize) into - a physical block (the location in the file system) via an inode. */ -static int -ext2fs_block_map (int logical_block) -{ - -#ifdef E2DEBUG - unsigned char *i; - for (i = (unsigned char *) INODE; - i < ((unsigned char *) INODE + sizeof (struct ext2_inode)); - i++) - { - printf ("%c", "0123456789abcdef"[*i >> 4]); - printf ("%c", "0123456789abcdef"[*i % 16]); - if (!((i + 1 - (unsigned char *) INODE) % 16)) - { - printf ("\n"); - } - else - { - printf (" "); - } - } - printf ("logical block %d\n", logical_block); -#endif /* E2DEBUG */ - - /* if it is directly pointed to by the inode, return that physical addr */ - if (logical_block < EXT2_NDIR_BLOCKS) - { -#ifdef E2DEBUG - printf ("returning %d\n", (unsigned char *) (INODE->i_block[logical_block])); - printf ("returning %d\n", INODE->i_block[logical_block]); -#endif /* E2DEBUG */ - return INODE->i_block[logical_block]; - } - /* else */ - logical_block -= EXT2_NDIR_BLOCKS; - /* try the indirect block */ - if (logical_block < EXT2_ADDR_PER_BLOCK (SUPERBLOCK)) - { - if (mapblock1 != 1 - && !ext2_rdfsb (INODE->i_block[EXT2_IND_BLOCK], DATABLOCK1)) - { - errnum = ERR_FSYS_CORRUPT; - return -1; - } - mapblock1 = 1; - return ((__u32 *) DATABLOCK1)[logical_block]; - } - /* else */ - logical_block -= EXT2_ADDR_PER_BLOCK (SUPERBLOCK); - /* now try the double indirect block */ - if (logical_block < (1 << (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK) * 2))) - { - int bnum; - if (mapblock1 != 2 - && !ext2_rdfsb (INODE->i_block[EXT2_DIND_BLOCK], DATABLOCK1)) - { - errnum = ERR_FSYS_CORRUPT; - return -1; - } - mapblock1 = 2; - if ((bnum = (((__u32 *) DATABLOCK1) - [logical_block >> EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK)])) - != mapblock2 - && !ext2_rdfsb (bnum, DATABLOCK2)) - { - errnum = ERR_FSYS_CORRUPT; - return -1; - } - mapblock2 = bnum; - return ((__u32 *) DATABLOCK2) - [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)]; - } - /* else */ - mapblock2 = -1; - logical_block -= (1 << (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK) * 2)); - if (mapblock1 != 3 - && !ext2_rdfsb (INODE->i_block[EXT2_TIND_BLOCK], DATABLOCK1)) - { - errnum = ERR_FSYS_CORRUPT; - return -1; - } - mapblock1 = 3; - if (!ext2_rdfsb (((__u32 *) DATABLOCK1) - [logical_block >> (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK) - * 2)], - DATABLOCK2)) - { - errnum = ERR_FSYS_CORRUPT; - return -1; - } - if (!ext2_rdfsb (((__u32 *) DATABLOCK2) - [(logical_block >> EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK)) - & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)], - DATABLOCK2)) - { - errnum = ERR_FSYS_CORRUPT; - return -1; - } - return ((__u32 *) DATABLOCK2) - [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)]; -} - -/* preconditions: all preconds of ext2fs_block_map */ -int -ext2fs_read (char *buf, int len) -{ - int logical_block; - int offset; - int map; - int ret = 0; - int size = 0; - -#ifdef E2DEBUG - static char hexdigit[] = "0123456789abcdef"; - unsigned char *i; - for (i = (unsigned char *) INODE; - i < ((unsigned char *) INODE + sizeof (struct ext2_inode)); - i++) - { - printf ("%c", hexdigit[*i >> 4]); - printf ("%c", hexdigit[*i % 16]); - if (!((i + 1 - (unsigned char *) INODE) % 16)) - { - printf ("\n"); - } - else - { - printf (" "); - } - } -#endif /* E2DEBUG */ - while (len > 0) - { - /* find the (logical) block component of our location */ - logical_block = filepos >> EXT2_BLOCK_SIZE_BITS (SUPERBLOCK); - offset = filepos & (EXT2_BLOCK_SIZE (SUPERBLOCK) - 1); - map = ext2fs_block_map (logical_block); -#ifdef E2DEBUG - printf ("map=%d\n", map); -#endif /* E2DEBUG */ - if (map < 0) - break; - - size = EXT2_BLOCK_SIZE (SUPERBLOCK); - size -= offset; - if (size > len) - size = len; - - if (map == 0) { - memset ((char *) buf, 0, size); - } else { - disk_read_func = disk_read_hook; - - devread (map * (EXT2_BLOCK_SIZE (SUPERBLOCK) / DEV_BSIZE), - offset, size, buf); - - disk_read_func = NULL; - } - - buf += size; - len -= size; - filepos += size; - ret += size; - } - - if (errnum) - ret = 0; - - return ret; -} - - -/* Based on: - def_blk_fops points to - blkdev_open, which calls (I think): - sys_open() - do_open() - open_namei() - dir_namei() which accesses current->fs->root - fs->root was set during original mount: - (something)... which calls (I think): - ext2_read_super() - iget() - __iget() - read_inode() - ext2_read_inode() - uses desc_per_block_bits, which is set in ext2_read_super() - also uses group descriptors loaded during ext2_read_super() - lookup() - ext2_lookup() - ext2_find_entry() - ext2_getblk() - -*/ - -static inline -int ext2_is_fast_symlink (void) -{ - int ea_blocks; - ea_blocks = INODE->i_file_acl ? EXT2_BLOCK_SIZE (SUPERBLOCK) / DEV_BSIZE : 0; - return INODE->i_blocks == ea_blocks; -} - -/* preconditions: ext2fs_mount already executed, therefore supblk in buffer - * known as SUPERBLOCK - * returns: 0 if error, nonzero iff we were able to find the file successfully - * postconditions: on a nonzero return, buffer known as INODE contains the - * inode of the file we were trying to look up - * side effects: messes up GROUP_DESC buffer area - */ -int -ext2fs_dir (char *dirname) -{ - int current_ino = EXT2_ROOT_INO; /* start at the root */ - int updir_ino = current_ino; /* the parent of the current directory */ - int group_id; /* which group the inode is in */ - int group_desc; /* fs pointer to that group */ - int desc; /* index within that group */ - int ino_blk; /* fs pointer of the inode's information */ - int str_chk = 0; /* used to hold the results of a string compare */ - struct ext2_group_desc *gdp; - struct ext2_inode *raw_inode; /* inode info corresponding to current_ino */ - - char linkbuf[PATH_MAX]; /* buffer for following symbolic links */ - int link_count = 0; - - char *rest; - char ch; /* temp char holder */ - - int off; /* offset within block of directory entry (off mod blocksize) */ - int loc; /* location within a directory */ - int blk; /* which data blk within dir entry (off div blocksize) */ - long map; /* fs pointer of a particular block from dir entry */ - struct ext2_dir_entry *dp; /* pointer to directory entry */ -#ifdef E2DEBUG - unsigned char *i; -#endif /* E2DEBUG */ - - /* loop invariants: - current_ino = inode to lookup - dirname = pointer to filename component we are cur looking up within - the directory known pointed to by current_ino (if any) - */ - - while (1) - { -#ifdef E2DEBUG - printf ("inode %d\n", current_ino); - printf ("dirname=%s\n", dirname); -#endif /* E2DEBUG */ - - /* look up an inode */ - group_id = (current_ino - 1) / (SUPERBLOCK->s_inodes_per_group); - group_desc = group_id >> log2 (EXT2_DESC_PER_BLOCK (SUPERBLOCK)); - desc = group_id & (EXT2_DESC_PER_BLOCK (SUPERBLOCK) - 1); -#ifdef E2DEBUG - printf ("ipg=%d, dpb=%d\n", SUPERBLOCK->s_inodes_per_group, - EXT2_DESC_PER_BLOCK (SUPERBLOCK)); - printf ("group_id=%d group_desc=%d desc=%d\n", group_id, group_desc, desc); -#endif /* E2DEBUG */ - if (!ext2_rdfsb ( - (WHICH_SUPER + group_desc + SUPERBLOCK->s_first_data_block), - (int) GROUP_DESC)) - { - return 0; - } - gdp = GROUP_DESC; - ino_blk = gdp[desc].bg_inode_table + - (((current_ino - 1) % (SUPERBLOCK->s_inodes_per_group)) - >> log2 (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode))); -#ifdef E2DEBUG - printf ("inode table fsblock=%d\n", ino_blk); -#endif /* E2DEBUG */ - if (!ext2_rdfsb (ino_blk, (int) INODE)) - { - return 0; - } - - /* reset indirect blocks! */ - mapblock2 = mapblock1 = -1; - - raw_inode = INODE + - ((current_ino - 1) - & (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode) - 1)); -#ifdef E2DEBUG - printf ("ipb=%d, sizeof(inode)=%d\n", - (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)), - sizeof (struct ext2_inode)); - printf ("inode=%x, raw_inode=%x\n", INODE, raw_inode); - printf ("offset into inode table block=%d\n", (int) raw_inode - (int) INODE); - for (i = (unsigned char *) INODE; i <= (unsigned char *) raw_inode; - i++) - { - printf ("%c", "0123456789abcdef"[*i >> 4]); - printf ("%c", "0123456789abcdef"[*i % 16]); - if (!((i + 1 - (unsigned char *) INODE) % 16)) - { - printf ("\n"); - } - else - { - printf (" "); - } - } - printf ("first word=%x\n", *((int *) raw_inode)); -#endif /* E2DEBUG */ - - /* copy inode to fixed location */ - memmove ((void *) INODE, (void *) raw_inode, sizeof (struct ext2_inode)); - -#ifdef E2DEBUG - printf ("first word=%x\n", *((int *) INODE)); -#endif /* E2DEBUG */ - - /* If we've got a symbolic link, then chase it. */ - if (S_ISLNK (INODE->i_mode)) - { - int len; - if (++link_count > MAX_LINK_COUNT) - { - errnum = ERR_SYMLINK_LOOP; - return 0; - } - - /* Find out how long our remaining name is. */ - len = 0; - while (dirname[len] && !isspace (dirname[len])) - len++; - - /* Get the symlink size. */ - filemax = (INODE->i_size); - if (filemax + len > sizeof (linkbuf) - 2) - { - errnum = ERR_FILELENGTH; - return 0; - } - - if (len) - { - /* Copy the remaining name to the end of the symlink data. - Note that DIRNAME and LINKBUF may overlap! */ - memmove (linkbuf + filemax, dirname, len); - } - linkbuf[filemax + len] = '\0'; - - /* Read the symlink data. */ - if (! ext2_is_fast_symlink ()) - { - /* Read the necessary blocks, and reset the file pointer. */ - len = grub_read (linkbuf, filemax); - filepos = 0; - if (!len) - return 0; - } - else - { - /* Copy the data directly from the inode. */ - len = filemax; - memmove (linkbuf, (char *) INODE->i_block, len); - } - -#ifdef E2DEBUG - printf ("symlink=%s\n", linkbuf); -#endif - - dirname = linkbuf; - if (*dirname == '/') - { - /* It's an absolute link, so look it up in root. */ - current_ino = EXT2_ROOT_INO; - updir_ino = current_ino; - } - else - { - /* Relative, so look it up in our parent directory. */ - current_ino = updir_ino; - } - - /* Try again using the new name. */ - continue; - } - - /* if end of filename, INODE points to the file's inode */ - if (!*dirname || isspace (*dirname)) - { - if (!S_ISREG (INODE->i_mode)) - { - errnum = ERR_BAD_FILETYPE; - return 0; - } - - filemax = (INODE->i_size); - return 1; - } - - /* else we have to traverse a directory */ - updir_ino = current_ino; - - /* skip over slashes */ - while (*dirname == '/') - dirname++; - - /* if this isn't a directory of sufficient size to hold our file, abort */ - if (!(INODE->i_size) || !S_ISDIR (INODE->i_mode)) - { - errnum = ERR_BAD_FILETYPE; - return 0; - } - - /* skip to next slash or end of filename (space) */ - for (rest = dirname; (ch = *rest) && !isspace (ch) && ch != '/'; - rest++); - - /* look through this directory and find the next filename component */ - /* invariant: rest points to slash after the next filename component */ - *rest = 0; - loc = 0; - - do - { - -#ifdef E2DEBUG - printf ("dirname=%s, rest=%s, loc=%d\n", dirname, rest, loc); -#endif /* E2DEBUG */ - - /* if our location/byte offset into the directory exceeds the size, - give up */ - if (loc >= INODE->i_size) - { - if (print_possibilities < 0) - { -# if 0 - putchar ('\n'); -# endif - } - else - { - errnum = ERR_FILE_NOT_FOUND; - *rest = ch; - } - return (print_possibilities < 0); - } - - /* else, find the (logical) block component of our location */ - blk = loc >> EXT2_BLOCK_SIZE_BITS (SUPERBLOCK); - - /* we know which logical block of the directory entry we are looking - for, now we have to translate that to the physical (fs) block on - the disk */ - map = ext2fs_block_map (blk); -#ifdef E2DEBUG - printf ("fs block=%d\n", map); -#endif /* E2DEBUG */ - mapblock2 = -1; - if ((map < 0) || !ext2_rdfsb (map, DATABLOCK2)) - { - errnum = ERR_FSYS_CORRUPT; - *rest = ch; - return 0; - } - off = loc & (EXT2_BLOCK_SIZE (SUPERBLOCK) - 1); - dp = (struct ext2_dir_entry *) (DATABLOCK2 + off); - /* advance loc prematurely to next on-disk directory entry */ - loc += dp->rec_len; - - /* NOTE: ext2fs filenames are NOT null-terminated */ - -#ifdef E2DEBUG - printf ("directory entry ino=%d\n", dp->inode); - if (dp->inode) - printf ("entry=%s\n", dp->name); -#endif /* E2DEBUG */ - - if (dp->inode) - { - int saved_c = dp->name[dp->name_len]; - - dp->name[dp->name_len] = 0; - str_chk = substring (dirname, dp->name); - -# ifndef STAGE1_5 - if (print_possibilities && ch != '/' - && (!*dirname || str_chk <= 0)) - { - if (print_possibilities > 0) - print_possibilities = -print_possibilities; - print_a_completion (dp->name); - } -# endif - - dp->name[dp->name_len] = saved_c; - } - - } - while (!dp->inode || (str_chk || (print_possibilities && ch != '/'))); - - current_ino = dp->inode; - *(dirname = rest) = ch; - } - /* never get here */ -} - -#endif /* FSYS_EXT2_FS */ diff --git a/stage2/fsys_fat.c b/stage2/fsys_fat.c deleted file mode 100644 index f40e658d9..000000000 --- a/stage2/fsys_fat.c +++ /dev/null @@ -1,488 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000,2001,2005 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifdef FSYS_FAT - -#include "shared.h" -#include "filesys.h" -#include "fat.h" - -struct fat_superblock -{ - int fat_offset; - int fat_length; - int fat_size; - int root_offset; - int root_max; - int data_offset; - - int num_sectors; - int num_clust; - int clust_eof_marker; - int sects_per_clust; - int sectsize_bits; - int clustsize_bits; - int root_cluster; - - int cached_fat; - int file_cluster; - int current_cluster_num; - int current_cluster; -}; - -/* pointer(s) into filesystem info buffer for DOS stuff */ -#define FAT_SUPER ( (struct fat_superblock *) \ - ( FSYS_BUF + 32256) )/* 512 bytes long */ -#define FAT_BUF ( FSYS_BUF + 30208 ) /* 4 sector FAT buffer */ -#define NAME_BUF ( FSYS_BUF + 29184 ) /* Filename buffer (833 bytes) */ - -#define FAT_CACHE_SIZE 2048 - -static __inline__ unsigned long -log2 (unsigned long word) -{ - __asm__ ("bsfl %1,%0" - : "=r" (word) - : "r" (word)); - return word; -} - -int -fat_mount (void) -{ - struct fat_bpb bpb; - __u32 magic, first_fat; - - /* Check partition type for harddisk */ - if (((current_drive & 0x80) || (current_slice != 0)) - && ! IS_PC_SLICE_TYPE_FAT (current_slice) - && (! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_MSDOS))) - return 0; - - /* Read bpb */ - if (! devread (0, 0, sizeof (bpb), (char *) &bpb)) - return 0; - - /* Check if the number of sectors per cluster is zero here, to avoid - zero division. */ - if (bpb.sects_per_clust == 0) - return 0; - - FAT_SUPER->sectsize_bits = log2 (FAT_CVT_U16 (bpb.bytes_per_sect)); - FAT_SUPER->clustsize_bits - = FAT_SUPER->sectsize_bits + log2 (bpb.sects_per_clust); - - /* Fill in info about super block */ - FAT_SUPER->num_sectors = FAT_CVT_U16 (bpb.short_sectors) - ? FAT_CVT_U16 (bpb.short_sectors) : bpb.long_sectors; - - /* FAT offset and length */ - FAT_SUPER->fat_offset = FAT_CVT_U16 (bpb.reserved_sects); - FAT_SUPER->fat_length = - bpb.fat_length ? bpb.fat_length : bpb.fat32_length; - - /* Rootdir offset and length for FAT12/16 */ - FAT_SUPER->root_offset = - FAT_SUPER->fat_offset + bpb.num_fats * FAT_SUPER->fat_length; - FAT_SUPER->root_max = FAT_DIRENTRY_LENGTH * FAT_CVT_U16(bpb.dir_entries); - - /* Data offset and number of clusters */ - FAT_SUPER->data_offset = - FAT_SUPER->root_offset - + ((FAT_SUPER->root_max - 1) >> FAT_SUPER->sectsize_bits) + 1; - FAT_SUPER->num_clust = - 2 + ((FAT_SUPER->num_sectors - FAT_SUPER->data_offset) - / bpb.sects_per_clust); - FAT_SUPER->sects_per_clust = bpb.sects_per_clust; - - if (!bpb.fat_length) - { - /* This is a FAT32 */ - if (FAT_CVT_U16(bpb.dir_entries)) - return 0; - - if (bpb.flags & 0x0080) - { - /* FAT mirroring is disabled, get active FAT */ - int active_fat = bpb.flags & 0x000f; - if (active_fat >= bpb.num_fats) - return 0; - FAT_SUPER->fat_offset += active_fat * FAT_SUPER->fat_length; - } - - FAT_SUPER->fat_size = 8; - FAT_SUPER->root_cluster = bpb.root_cluster; - - /* Yes the following is correct. FAT32 should be called FAT28 :) */ - FAT_SUPER->clust_eof_marker = 0xffffff8; - } - else - { - if (!FAT_SUPER->root_max) - return 0; - - FAT_SUPER->root_cluster = -1; - if (FAT_SUPER->num_clust > FAT_MAX_12BIT_CLUST) - { - FAT_SUPER->fat_size = 4; - FAT_SUPER->clust_eof_marker = 0xfff8; - } - else - { - FAT_SUPER->fat_size = 3; - FAT_SUPER->clust_eof_marker = 0xff8; - } - } - - /* Now do some sanity checks */ - - if (FAT_CVT_U16(bpb.bytes_per_sect) != (1 << FAT_SUPER->sectsize_bits) - || FAT_CVT_U16(bpb.bytes_per_sect) != SECTOR_SIZE - || bpb.sects_per_clust != (1 << (FAT_SUPER->clustsize_bits - - FAT_SUPER->sectsize_bits)) - || FAT_SUPER->num_clust <= 2 - || (FAT_SUPER->fat_size * FAT_SUPER->num_clust / (2 * SECTOR_SIZE) - > FAT_SUPER->fat_length)) - return 0; - - /* kbs: Media check on first FAT entry [ported from PUPA] */ - - if (!devread(FAT_SUPER->fat_offset, 0, - sizeof(first_fat), (char *)&first_fat)) - return 0; - - if (FAT_SUPER->fat_size == 8) - { - first_fat &= 0x0fffffff; - magic = 0x0fffff00; - } - else if (FAT_SUPER->fat_size == 4) - { - first_fat &= 0x0000ffff; - magic = 0xff00; - } - else - { - first_fat &= 0x00000fff; - magic = 0x0f00; - } - - /* Ignore the 3rd bit, because some BIOSes assigns 0xF0 to the media - descriptor, even if it is a so-called superfloppy (e.g. an USB key). - The check may be too strict for this kind of stupid BIOSes, as - they overwrite the media descriptor. */ - if ((first_fat | 0x8) != (magic | bpb.media | 0x8)) - return 0; - - FAT_SUPER->cached_fat = - 2 * FAT_CACHE_SIZE; - return 1; -} - -int -fat_read (char *buf, int len) -{ - int logical_clust; - int offset; - int ret = 0; - int size; - - if (FAT_SUPER->file_cluster < 0) - { - /* root directory for fat16 */ - size = FAT_SUPER->root_max - filepos; - if (size > len) - size = len; - if (!devread(FAT_SUPER->root_offset, filepos, size, buf)) - return 0; - filepos += size; - return size; - } - - logical_clust = filepos >> FAT_SUPER->clustsize_bits; - offset = (filepos & ((1 << FAT_SUPER->clustsize_bits) - 1)); - if (logical_clust < FAT_SUPER->current_cluster_num) - { - FAT_SUPER->current_cluster_num = 0; - FAT_SUPER->current_cluster = FAT_SUPER->file_cluster; - } - - while (len > 0) - { - int sector; - while (logical_clust > FAT_SUPER->current_cluster_num) - { - /* calculate next cluster */ - int fat_entry = - FAT_SUPER->current_cluster * FAT_SUPER->fat_size; - int next_cluster; - int cached_pos = (fat_entry - FAT_SUPER->cached_fat); - - if (cached_pos < 0 || - (cached_pos + FAT_SUPER->fat_size) > 2*FAT_CACHE_SIZE) - { - FAT_SUPER->cached_fat = (fat_entry & ~(2*SECTOR_SIZE - 1)); - cached_pos = (fat_entry - FAT_SUPER->cached_fat); - sector = FAT_SUPER->fat_offset - + FAT_SUPER->cached_fat / (2*SECTOR_SIZE); - if (!devread (sector, 0, FAT_CACHE_SIZE, (char*) FAT_BUF)) - return 0; - } - next_cluster = * (unsigned long *) (FAT_BUF + (cached_pos >> 1)); - if (FAT_SUPER->fat_size == 3) - { - if (cached_pos & 1) - next_cluster >>= 4; - next_cluster &= 0xFFF; - } - else if (FAT_SUPER->fat_size == 4) - next_cluster &= 0xFFFF; - - if (next_cluster >= FAT_SUPER->clust_eof_marker) - return ret; - if (next_cluster < 2 || next_cluster >= FAT_SUPER->num_clust) - { - errnum = ERR_FSYS_CORRUPT; - return 0; - } - - FAT_SUPER->current_cluster = next_cluster; - FAT_SUPER->current_cluster_num++; - } - - sector = FAT_SUPER->data_offset + - ((FAT_SUPER->current_cluster - 2) << (FAT_SUPER->clustsize_bits - - FAT_SUPER->sectsize_bits)); - size = (1 << FAT_SUPER->clustsize_bits) - offset; - if (size > len) - size = len; - - disk_read_func = disk_read_hook; - - devread(sector, offset, size, buf); - - disk_read_func = NULL; - - len -= size; - buf += size; - ret += size; - filepos += size; - logical_clust++; - offset = 0; - } - return errnum ? 0 : ret; -} - -int -fat_dir (char *dirname) -{ - char *rest, ch, dir_buf[FAT_DIRENTRY_LENGTH]; - char *filename = (char *) NAME_BUF; - int attrib = FAT_ATTRIB_DIR; -#ifndef STAGE1_5 - int do_possibilities = 0; -#endif - - /* XXX I18N: - * the positions 2,4,6 etc are high bytes of a 16 bit unicode char - */ - static unsigned char longdir_pos[] = - { 1, 3, 5, 7, 9, 14, 16, 18, 20, 22, 24, 28, 30 }; - int slot = -2; - int alias_checksum = -1; - - FAT_SUPER->file_cluster = FAT_SUPER->root_cluster; - filepos = 0; - FAT_SUPER->current_cluster_num = MAXINT; - - /* main loop to find desired directory entry */ - loop: - - /* if we have a real file (and we're not just printing possibilities), - then this is where we want to exit */ - - if (!*dirname || isspace (*dirname)) - { - if (attrib & FAT_ATTRIB_DIR) - { - errnum = ERR_BAD_FILETYPE; - return 0; - } - - return 1; - } - - /* continue with the file/directory name interpretation */ - - while (*dirname == '/') - dirname++; - - if (!(attrib & FAT_ATTRIB_DIR)) - { - errnum = ERR_BAD_FILETYPE; - return 0; - } - /* Directories don't have a file size */ - filemax = MAXINT; - - for (rest = dirname; (ch = *rest) && !isspace (ch) && ch != '/'; rest++); - - *rest = 0; - -# ifndef STAGE1_5 - if (print_possibilities && ch != '/') - do_possibilities = 1; -# endif - - while (1) - { - if (fat_read (dir_buf, FAT_DIRENTRY_LENGTH) != FAT_DIRENTRY_LENGTH - || dir_buf[0] == 0) - { - if (!errnum) - { -# ifndef STAGE1_5 - if (print_possibilities < 0) - { -#if 0 - putchar ('\n'); -#endif - return 1; - } -# endif /* STAGE1_5 */ - - errnum = ERR_FILE_NOT_FOUND; - *rest = ch; - } - - return 0; - } - - if (FAT_DIRENTRY_ATTRIB (dir_buf) == FAT_ATTRIB_LONGNAME) - { - /* This is a long filename. The filename is build from back - * to front and may span multiple entries. To bind these - * entries together they all contain the same checksum over - * the short alias. - * - * The id field tells if this is the first entry (the last - * part) of the long filename, and also at which offset this - * belongs. - * - * We just write the part of the long filename this entry - * describes and continue with the next dir entry. - */ - int i, offset; - unsigned char id = FAT_LONGDIR_ID(dir_buf); - - if ((id & 0x40)) - { - id &= 0x3f; - slot = id; - filename[slot * 13] = 0; - alias_checksum = FAT_LONGDIR_ALIASCHECKSUM(dir_buf); - } - - if (id != slot || slot == 0 - || alias_checksum != FAT_LONGDIR_ALIASCHECKSUM(dir_buf)) - { - alias_checksum = -1; - continue; - } - - slot--; - offset = slot * 13; - - for (i=0; i < 13; i++) - filename[offset+i] = dir_buf[longdir_pos[i]]; - continue; - } - - if (!FAT_DIRENTRY_VALID (dir_buf)) - continue; - - if (alias_checksum != -1 && slot == 0) - { - int i; - unsigned char sum; - - slot = -2; - for (sum = 0, i = 0; i< 11; i++) - sum = ((sum >> 1) | (sum << 7)) + dir_buf[i]; - - if (sum == alias_checksum) - { -# ifndef STAGE1_5 - if (do_possibilities) - goto print_filename; -# endif /* STAGE1_5 */ - - if (substring (dirname, filename) == 0) - break; - } - } - - /* XXX convert to 8.3 filename format here */ - { - int i, j, c; - - for (i = 0; i < 8 && (c = filename[i] = tolower (dir_buf[i])) - && !isspace (c); i++); - - filename[i++] = '.'; - - for (j = 0; j < 3 && (c = filename[i + j] = tolower (dir_buf[8 + j])) - && !isspace (c); j++); - - if (j == 0) - i--; - - filename[i + j] = 0; - } - -# ifndef STAGE1_5 - if (do_possibilities) - { - print_filename: - if (substring (dirname, filename) <= 0) - { - if (print_possibilities > 0) - print_possibilities = -print_possibilities; - print_a_completion (filename); - } - continue; - } -# endif /* STAGE1_5 */ - - if (substring (dirname, filename) == 0) - break; - } - - *(dirname = rest) = ch; - - attrib = FAT_DIRENTRY_ATTRIB (dir_buf); - filemax = FAT_DIRENTRY_FILELENGTH (dir_buf); - filepos = 0; - FAT_SUPER->file_cluster = FAT_DIRENTRY_FIRST_CLUSTER (dir_buf); - FAT_SUPER->current_cluster_num = MAXINT; - - /* go back to main loop at top of function */ - goto loop; -} - -#endif /* FSYS_FAT */ diff --git a/stage2/fsys_ffs.c b/stage2/fsys_ffs.c deleted file mode 100644 index 6e2300fcf..000000000 --- a/stage2/fsys_ffs.c +++ /dev/null @@ -1,310 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000, 2001 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* - * Elements of this file were originally from the FreeBSD "biosboot" - * bootloader file "disk.c" dated 4/12/95. - * - * The license and header comments from that file are included here. - */ - -/* - * Mach Operating System - * Copyright (c) 1992, 1991 Carnegie Mellon University - * All Rights Reserved. - * - * Permission to use, copy, modify and distribute this software and its - * documentation is hereby granted, provided that both the copyright - * notice and this permission notice appear in all copies of the - * software, derivative works or modified versions, and any portions - * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" - * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR - * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * - * Carnegie Mellon requests users of this software to return to - * - * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU - * School of Computer Science - * Carnegie Mellon University - * Pittsburgh PA 15213-3890 - * - * any improvements or extensions that they make and grant Carnegie Mellon - * the rights to redistribute these changes. - * - * from: Mach, Revision 2.2 92/04/04 11:35:49 rpd - * $Id$ - */ - -#ifdef FSYS_FFS - -#include "shared.h" - -#include "filesys.h" - -#include "defs.h" -#include "disk_inode.h" -#include "disk_inode_ffs.h" -#include "dir.h" -#include "fs.h" - -/* used for filesystem map blocks */ -static int mapblock; -static int mapblock_offset; -static int mapblock_bsize; - -/* pointer to superblock */ -#define SUPERBLOCK ((struct fs *) ( FSYS_BUF + 8192 )) -#define INODE ((struct icommon *) ( FSYS_BUF + 16384 )) -#define MAPBUF ( FSYS_BUF + 24576 ) -#define MAPBUF_LEN 8192 - - -int -ffs_mount (void) -{ - int retval = 1; - - if ((((current_drive & 0x80) || (current_slice != 0)) - && ! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_BSDFFS)) - || part_length < (SBLOCK + (SBSIZE / DEV_BSIZE)) - || !devread (SBLOCK, 0, SBSIZE, (char *) SUPERBLOCK) - || SUPERBLOCK->fs_magic != FS_MAGIC) - retval = 0; - - mapblock = -1; - mapblock_offset = -1; - - return retval; -} - -static int -block_map (int file_block) -{ - int bnum, offset, bsize; - - if (file_block < NDADDR) - return (INODE->i_db[file_block]); - - /* If the blockmap loaded does not include FILE_BLOCK, - load a new blockmap. */ - if ((bnum = fsbtodb (SUPERBLOCK, INODE->i_ib[0])) != mapblock - || (mapblock_offset <= bnum && bnum <= mapblock_offset + mapblock_bsize)) - { - if (MAPBUF_LEN < SUPERBLOCK->fs_bsize) - { - offset = ((file_block - NDADDR) % NINDIR (SUPERBLOCK)); - bsize = MAPBUF_LEN; - - if (offset + MAPBUF_LEN > SUPERBLOCK->fs_bsize) - offset = (SUPERBLOCK->fs_bsize - MAPBUF_LEN) / sizeof (int); - } - else - { - bsize = SUPERBLOCK->fs_bsize; - offset = 0; - } - - if (! devread (bnum, offset * sizeof (int), bsize, (char *) MAPBUF)) - { - mapblock = -1; - mapblock_bsize = -1; - mapblock_offset = -1; - errnum = ERR_FSYS_CORRUPT; - return -1; - } - - mapblock = bnum; - mapblock_bsize = bsize; - mapblock_offset = offset; - } - - return (((int *) MAPBUF)[((file_block - NDADDR) % NINDIR (SUPERBLOCK)) - - mapblock_offset]); -} - - -int -ffs_read (char *buf, int len) -{ - int logno, off, size, map, ret = 0; - - while (len && !errnum) - { - off = blkoff (SUPERBLOCK, filepos); - logno = lblkno (SUPERBLOCK, filepos); - size = blksize (SUPERBLOCK, INODE, logno); - - if ((map = block_map (logno)) < 0) - break; - - size -= off; - - if (size > len) - size = len; - - disk_read_func = disk_read_hook; - - devread (fsbtodb (SUPERBLOCK, map), off, size, buf); - - disk_read_func = NULL; - - buf += size; - len -= size; - filepos += size; - ret += size; - } - - if (errnum) - ret = 0; - - return ret; -} - - -int -ffs_dir (char *dirname) -{ - char *rest, ch; - int block, off, loc, map, ino = ROOTINO; - struct direct *dp; - -/* main loop to find destination inode */ -loop: - - /* load current inode (defaults to the root inode) */ - - if (!devread (fsbtodb (SUPERBLOCK, itod (SUPERBLOCK, ino)), - ino % (SUPERBLOCK->fs_inopb) * sizeof (struct dinode), - sizeof (struct dinode), (char *) INODE)) - return 0; /* XXX what return value? */ - - /* if we have a real file (and we're not just printing possibilities), - then this is where we want to exit */ - - if (!*dirname || isspace (*dirname)) - { - if ((INODE->i_mode & IFMT) != IFREG) - { - errnum = ERR_BAD_FILETYPE; - return 0; - } - - filemax = INODE->i_size; - - /* incomplete implementation requires this! */ - fsmax = (NDADDR + NINDIR (SUPERBLOCK)) * SUPERBLOCK->fs_bsize; - return 1; - } - - /* continue with file/directory name interpretation */ - - while (*dirname == '/') - dirname++; - - if (!(INODE->i_size) || ((INODE->i_mode & IFMT) != IFDIR)) - { - errnum = ERR_BAD_FILETYPE; - return 0; - } - - for (rest = dirname; (ch = *rest) && !isspace (ch) && ch != '/'; rest++); - - *rest = 0; - loc = 0; - - /* loop for reading a the entries in a directory */ - - do - { - if (loc >= INODE->i_size) - { -#if 0 - putchar ('\n'); -#endif - - if (print_possibilities < 0) - return 1; - - errnum = ERR_FILE_NOT_FOUND; - *rest = ch; - return 0; - } - - if (!(off = blkoff (SUPERBLOCK, loc))) - { - block = lblkno (SUPERBLOCK, loc); - - if ((map = block_map (block)) < 0 - || !devread (fsbtodb (SUPERBLOCK, map), 0, - blksize (SUPERBLOCK, INODE, block), - (char *) FSYS_BUF)) - { - errnum = ERR_FSYS_CORRUPT; - *rest = ch; - return 0; - } - } - - dp = (struct direct *) (FSYS_BUF + off); - loc += dp->d_reclen; - -#ifndef STAGE1_5 - if (dp->d_ino && print_possibilities && ch != '/' - && (!*dirname || substring (dirname, dp->d_name) <= 0)) - { - if (print_possibilities > 0) - print_possibilities = -print_possibilities; - - print_a_completion (dp->d_name); - } -#endif /* STAGE1_5 */ - } - while (!dp->d_ino || (substring (dirname, dp->d_name) != 0 - || (print_possibilities && ch != '/'))); - - /* only get here if we have a matching directory entry */ - - ino = dp->d_ino; - *(dirname = rest) = ch; - - /* go back to main loop at top of function */ - goto loop; -} - -int -ffs_embed (int *start_sector, int needed_sectors) -{ - /* XXX: I don't know if this is really correct. Someone who is - familiar with BSD should check for this. */ - if (needed_sectors > 14) - return 0; - - *start_sector = 1; -#if 1 - /* FIXME: Disable the embedding in FFS until someone checks if - the code above is correct. */ - return 0; -#else - return 1; -#endif -} - -#endif /* FSYS_FFS */ diff --git a/stage2/fsys_iso9660.c b/stage2/fsys_iso9660.c deleted file mode 100644 index 90e4aa859..000000000 --- a/stage2/fsys_iso9660.c +++ /dev/null @@ -1,442 +0,0 @@ -/* - * ISO 9660 filesystem backend for GRUB (GRand Unified Bootloader) - * including Rock Ridge Extensions support - * - * Copyright (C) 1998, 1999 Kousuke Takai - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ -/* - * References: - * linux/fs/isofs/rock.[ch] - * mkisofs-1.11.1/diag/isoinfo.c - * mkisofs-1.11.1/iso9660.h - * (all are written by Eric Youngdale) - * - * Modifications by: - * Leonid Lisovskiy 2003 - */ - -#ifdef FSYS_ISO9660 - -#include "shared.h" -#include "filesys.h" -#include "iso9660.h" - -/* iso9660 super-block data in memory */ -struct iso_sb_info { - unsigned long vol_sector; - -}; - -/* iso fs inode data in memory */ -struct iso_inode_info { - unsigned long file_start; -}; - -#define ISO_SUPER \ - ((struct iso_sb_info *)(FSYS_BUF)) -#define INODE \ - ((struct iso_inode_info *)(FSYS_BUF+sizeof(struct iso_sb_info))) -#define PRIMDESC ((struct iso_primary_descriptor *)(FSYS_BUF + 2048)) -#define DIRREC ((struct iso_directory_record *)(FSYS_BUF + 4096)) -#define RRCONT_BUF ((unsigned char *)(FSYS_BUF + 6144)) -#define NAME_BUF ((unsigned char *)(FSYS_BUF + 8192)) - - -static inline unsigned long -log2 (unsigned long word) -{ - asm volatile ("bsfl %1,%0" - : "=r" (word) - : "r" (word)); - return word; -} - -static int -iso9660_devread (int sector, int byte_offset, int byte_len, char *buf) -{ - unsigned short sector_size_lg2 = log2(buf_geom.sector_size); - - /* - * We have to use own devread() function since BIOS return wrong geometry - */ - if (sector < 0) - { - errnum = ERR_OUTSIDE_PART; - return 0; - } - if (byte_len <= 0) - return 1; - - sector += (byte_offset >> sector_size_lg2); - byte_offset &= (buf_geom.sector_size - 1); - asm volatile ("shl%L0 %1,%0" - : "=r"(sector) - : "Ic"((int8_t)(ISO_SECTOR_BITS - sector_size_lg2)), - "0"(sector)); - -#if !defined(STAGE1_5) - if (disk_read_hook && debug) - printf ("<%d, %d, %d>", sector, byte_offset, byte_len); -#endif /* !STAGE1_5 */ - - return rawread(current_drive, part_start + sector, byte_offset, byte_len, buf); -} - -int -iso9660_mount (void) -{ - unsigned int sector; - - /* - * Because there is no defined slice type ID for ISO-9660 filesystem, - * this test will pass only either (1) if entire disk is used, or - * (2) if current partition is BSD style sub-partition whose ID is - * ISO-9660. - */ - if ((current_partition != 0xFFFFFF) - && !IS_PC_SLICE_TYPE_BSD_WITH_FS(current_slice, FS_ISO9660)) - return 0; - - /* - * Currently, only FIRST session of MultiSession disks are supported !!! - */ - for (sector = 16 ; sector < 32 ; sector++) - { - if (!iso9660_devread(sector, 0, sizeof(*PRIMDESC), (char *)PRIMDESC)) - break; - /* check ISO_VD_PRIMARY and ISO_STANDARD_ID */ - if (PRIMDESC->type.l == ISO_VD_PRIMARY - && !memcmp(PRIMDESC->id, ISO_STANDARD_ID, sizeof(PRIMDESC->id))) - { - ISO_SUPER->vol_sector = sector; - INODE->file_start = 0; - fsmax = PRIMDESC->volume_space_size.l; - return 1; - } - } - - return 0; -} - -int -iso9660_dir (char *dirname) -{ - struct iso_directory_record *idr; - RR_ptr_t rr_ptr; - struct rock_ridge *ce_ptr; - unsigned int pathlen; - int size; - unsigned int extent; - unsigned char file_type; - unsigned int rr_len; - unsigned char rr_flag; - - idr = &PRIMDESC->root_directory_record; - INODE->file_start = 0; - - do - { - while (*dirname == '/') /* skip leading slashes */ - dirname++; - /* pathlen = strcspn(dirname, "/\n\t "); */ - for (pathlen = 0 ; - dirname[pathlen] - && !isspace(dirname[pathlen]) && dirname[pathlen] != '/' ; - pathlen++) - ; - - size = idr->size.l; - extent = idr->extent.l; - - while (size > 0) - { - if (!iso9660_devread(extent, 0, ISO_SECTOR_SIZE, (char *)DIRREC)) - { - errnum = ERR_FSYS_CORRUPT; - return 0; - } - extent++; - - idr = (struct iso_directory_record *)DIRREC; - for (; idr->length.l > 0; - idr = (struct iso_directory_record *)((char *)idr + idr->length.l) ) - { - const char *name = idr->name; - unsigned int name_len = idr->name_len.l; - - file_type = (idr->flags.l & 2) ? ISO_DIRECTORY : ISO_REGULAR; - if (name_len == 1) - { - if ((name[0] == 0) || /* self */ - (name[0] == 1)) /* parent */ - continue; - } - if (name_len > 2 && CHECK2(name + name_len - 2, ';', '1')) - { - name_len -= 2; /* truncate trailing file version */ - if (name_len > 1 && name[name_len - 1] == '.') - name_len--; /* truncate trailing dot */ - } - - /* - * Parse Rock-Ridge extension - */ - rr_len = (idr->length.l - idr->name_len.l - - sizeof(struct iso_directory_record) - + sizeof(idr->name)); - rr_ptr.ptr = ((unsigned char *)idr + idr->name_len.l - + sizeof(struct iso_directory_record) - - sizeof(idr->name)); - if (rr_ptr.i & 1) - rr_ptr.i++, rr_len--; - ce_ptr = NULL; - rr_flag = RR_FLAG_NM | RR_FLAG_PX /*| RR_FLAG_SL*/; - - while (rr_len >= 4) - { - if (rr_ptr.rr->version != 1) - { -#ifndef STAGE1_5 - if (debug) - printf( - "Non-supported version (%d) RockRidge chunk " - "`%c%c'\n", rr_ptr.rr->version, - rr_ptr.rr->signature & 0xFF, - rr_ptr.rr->signature >> 8); -#endif - } - else - { - switch (rr_ptr.rr->signature) - { - case RRMAGIC('R', 'R'): - if ( rr_ptr.rr->len >= (4+sizeof(struct RR))) - rr_flag &= rr_ptr.rr->u.rr.flags.l; - break; - case RRMAGIC('N', 'M'): - name = rr_ptr.rr->u.nm.name; - name_len = rr_ptr.rr->len - (4+sizeof(struct NM)); - rr_flag &= ~RR_FLAG_NM; - break; - case RRMAGIC('P', 'X'): - if (rr_ptr.rr->len >= (4+sizeof(struct PX))) - { - file_type = ((rr_ptr.rr->u.px.mode.l & POSIX_S_IFMT) - == POSIX_S_IFREG - ? ISO_REGULAR - : ((rr_ptr.rr->u.px.mode.l & POSIX_S_IFMT) - == POSIX_S_IFDIR - ? ISO_DIRECTORY : ISO_OTHER)); - rr_flag &= ~RR_FLAG_PX; - } - break; - case RRMAGIC('C', 'E'): - if (rr_ptr.rr->len >= (4+sizeof(struct CE))) - ce_ptr = rr_ptr.rr; - break; -#if 0 // RockRidge symlinks are not supported yet - case RRMAGIC('S', 'L'): - { - int slen; - unsigned char rootflag, prevflag; - char *rpnt = NAME_BUF+1024; - struct SL_component *slp; - - slen = rr_ptr.rr->len - (4+1); - slp = &rr_ptr.rr->u.sl.link; - while (slen > 1) - { - rootflag = 0; - switch (slp->flags.l) - { - case 0: - memcpy(rpnt, slp->text, slp->len); - rpnt += slp->len; - break; - case 4: - *rpnt++ = '.'; - /* fallthru */ - case 2: - *rpnt++ = '.'; - break; - case 8: - rootflag = 1; - *rpnt++ = '/'; - break; - default: - printf("Symlink component flag not implemented (%d)\n", - slp->flags.l); - slen = 0; - break; - } - slen -= slp->len + 2; - prevflag = slp->flags.l; - slp = (struct SL_component *) ((char *) slp + slp->len + 2); - - if (slen < 2) - { - /* - * If there is another SL record, and this component - * record isn't continued, then add a slash. - */ - if ((!rootflag) && (rr_ptr.rr->u.sl.flags.l & 1) && !(prevflag & 1)) - *rpnt++='/'; - break; - } - - /* - * If this component record isn't continued, then append a '/'. - */ - if (!rootflag && !(prevflag & 1)) - *rpnt++ = '/'; - } - *rpnt++ = '\0'; - grub_putstr(NAME_BUF+1024);// debug print! - } - rr_flag &= ~RR_FLAG_SL; - break; -#endif - default: - break; - } - } - if (!rr_flag) - /* - * There is no more extension we expects... - */ - break; - - rr_len -= rr_ptr.rr->len; - rr_ptr.ptr += rr_ptr.rr->len; - if (rr_len < 4 && ce_ptr != NULL) - { - /* preserve name before loading new extent. */ - if( RRCONT_BUF <= (unsigned char *)name - && (unsigned char *)name < RRCONT_BUF + ISO_SECTOR_SIZE ) - { - memcpy(NAME_BUF, name, name_len); - name = NAME_BUF; - } - rr_ptr.ptr = RRCONT_BUF + ce_ptr->u.ce.offset.l; - rr_len = ce_ptr->u.ce.size.l; - if (!iso9660_devread(ce_ptr->u.ce.extent.l, 0, ISO_SECTOR_SIZE, RRCONT_BUF)) - { - errnum = 0; /* this is not fatal. */ - break; - } - ce_ptr = NULL; - } - } /* rr_len >= 4 */ - - filemax = MAXINT; - if (name_len >= pathlen - && !memcmp(name, dirname, pathlen)) - { - if (dirname[pathlen] == '/' || !print_possibilities) - { - /* - * DIRNAME is directory component of pathname, - * or we are to open a file. - */ - if (pathlen == name_len) - { - if (dirname[pathlen] == '/') - { - if (file_type != ISO_DIRECTORY) - { - errnum = ERR_BAD_FILETYPE; - return 0; - } - goto next_dir_level; - } - if (file_type != ISO_REGULAR) - { - errnum = ERR_BAD_FILETYPE; - return 0; - } - INODE->file_start = idr->extent.l; - filepos = 0; - filemax = idr->size.l; - return 1; - } - } - else /* Completion */ - { -#ifndef STAGE1_5 - if (print_possibilities > 0) - print_possibilities = -print_possibilities; - memcpy(NAME_BUF, name, name_len); - NAME_BUF[name_len] = '\0'; - print_a_completion (NAME_BUF); -#endif - } - } - } /* for */ - - size -= ISO_SECTOR_SIZE; - } /* size>0 */ - - if (dirname[pathlen] == '/' || print_possibilities >= 0) - { - errnum = ERR_FILE_NOT_FOUND; - return 0; - } - - next_dir_level: - dirname += pathlen; - - } while (*dirname == '/'); - - return 1; -} - -int -iso9660_read (char *buf, int len) -{ - int sector, blkoffset, size, ret; - - if (INODE->file_start == 0) - return 0; - - ret = 0; - blkoffset = filepos & (ISO_SECTOR_SIZE - 1); - sector = filepos >> ISO_SECTOR_BITS; - while (len > 0) - { - size = ISO_SECTOR_SIZE - blkoffset; - if (size > len) - size = len; - - disk_read_func = disk_read_hook; - - if (!iso9660_devread(INODE->file_start + sector, blkoffset, size, buf)) - return 0; - - disk_read_func = NULL; - - len -= size; - buf += size; - ret += size; - filepos += size; - sector++; - blkoffset = 0; - } - - return ret; -} - -#endif /* FSYS_ISO9660 */ diff --git a/stage2/fsys_jfs.c b/stage2/fsys_jfs.c deleted file mode 100644 index 307f83633..000000000 --- a/stage2/fsys_jfs.c +++ /dev/null @@ -1,403 +0,0 @@ -/* fsys_jfs.c - an implementation for the IBM JFS file system */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2001,2002 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifdef FSYS_JFS - -#include "shared.h" -#include "filesys.h" -#include "jfs.h" - -#define MAX_LINK_COUNT 8 - -#define DTTYPE_INLINE 0 -#define DTTYPE_PAGE 1 - -struct jfs_info -{ - int bsize; - int l2bsize; - int bdlog; - int xindex; - int xlastindex; - int sindex; - int slastindex; - int de_index; - int dttype; - xad_t *xad; - ldtentry_t *de; -}; - -static struct jfs_info jfs; - -#define xtpage ((xtpage_t *)FSYS_BUF) -#define dtpage ((dtpage_t *)((char *)FSYS_BUF + 4096)) -#define fileset ((dinode_t *)((char *)FSYS_BUF + 8192)) -#define inode ((dinode_t *)((char *)FSYS_BUF + 8192 + sizeof(dinode_t))) -#define dtroot ((dtroot_t *)(&inode->di_btroot)) - -static ldtentry_t de_always[2] = { - {1, -1, 2, {'.', '.'}}, - {1, -1, 1, {'.'}} -}; - -static int -isinxt (s64 key, s64 offset, s64 len) -{ - return (key >= offset) ? (key < offset + len ? 1 : 0) : 0; -} - -static xad_t * -first_extent (dinode_t *di) -{ - xtpage_t *xtp; - - jfs.xindex = 2; - xtp = (xtpage_t *)&di->di_btroot; - jfs.xad = &xtp->xad[2]; - if (xtp->header.flag & BT_LEAF) { - jfs.xlastindex = xtp->header.nextindex; - } else { - do { - devread (addressXAD (jfs.xad) << jfs.bdlog, 0, - sizeof(xtpage_t), (char *)xtpage); - jfs.xad = &xtpage->xad[2]; - } while (!(xtpage->header.flag & BT_LEAF)); - jfs.xlastindex = xtpage->header.nextindex; - } - - return jfs.xad; -} - -static xad_t * -next_extent (void) -{ - if (++jfs.xindex < jfs.xlastindex) { - } else if (xtpage->header.next) { - devread (xtpage->header.next << jfs.bdlog, 0, - sizeof(xtpage_t), (char *)xtpage); - jfs.xlastindex = xtpage->header.nextindex; - jfs.xindex = XTENTRYSTART; - jfs.xad = &xtpage->xad[XTENTRYSTART]; - } else { - return NULL; - } - return ++jfs.xad; -} - - -static void -di_read (u32 inum, dinode_t *di) -{ - s64 key; - u32 xd, ioffset; - s64 offset; - xad_t *xad; - pxd_t pxd; - - key = (((inum >> L2INOSPERIAG) << L2INOSPERIAG) + 4096) >> jfs.l2bsize; - xd = (inum & (INOSPERIAG - 1)) >> L2INOSPEREXT; - ioffset = ((inum & (INOSPERIAG - 1)) & (INOSPEREXT - 1)) << L2DISIZE; - xad = first_extent (fileset); - do { - offset = offsetXAD (xad); - if (isinxt (key, offset, lengthXAD (xad))) { - devread ((addressXAD (xad) + key - offset) << jfs.bdlog, - 3072 + xd*sizeof(pxd_t), sizeof(pxd_t), (char *)&pxd); - devread (addressPXD (&pxd) << jfs.bdlog, - ioffset, DISIZE, (char *)di); - break; - } - } while ((xad = next_extent ())); -} - -static ldtentry_t * -next_dentry (void) -{ - ldtentry_t *de; - s8 *stbl; - - if (jfs.dttype == DTTYPE_INLINE) { - if (jfs.sindex < jfs.slastindex) { - return (ldtentry_t *)&dtroot->slot[(int)dtroot->header.stbl[jfs.sindex++]]; - } - } else { - de = (ldtentry_t *)dtpage->slot; - stbl = (s8 *)&de[(int)dtpage->header.stblindex]; - if (jfs.sindex < jfs.slastindex) { - return &de[(int)stbl[jfs.sindex++]]; - } else if (dtpage->header.next) { - devread (dtpage->header.next << jfs.bdlog, 0, - sizeof(dtpage_t), (char *)dtpage); - jfs.slastindex = dtpage->header.nextindex; - jfs.sindex = 1; - return &de[(int)((s8 *)&de[(int)dtpage->header.stblindex])[0]]; - } - } - - return (jfs.de_index < 2) ? &de_always[jfs.de_index++] : NULL; -} - -static ldtentry_t * -first_dentry (void) -{ - dtroot_t *dtr; - pxd_t *xd; - idtentry_t *de; - - dtr = (dtroot_t *)&inode->di_btroot; - jfs.sindex = 0; - jfs.de_index = 0; - - de_always[0].inumber = inode->di_parent; - de_always[1].inumber = inode->di_number; - if (dtr->header.flag & BT_LEAF) { - jfs.dttype = DTTYPE_INLINE; - jfs.slastindex = dtr->header.nextindex; - } else { - de = (idtentry_t *)dtpage->slot; - jfs.dttype = DTTYPE_PAGE; - xd = &((idtentry_t *)dtr->slot)[(int)dtr->header.stbl[0]].xd; - for (;;) { - devread (addressPXD (xd) << jfs.bdlog, 0, - sizeof(dtpage_t), (char *)dtpage); - if (dtpage->header.flag & BT_LEAF) - break; - xd = &de[(int)((s8 *)&de[(int)dtpage->header.stblindex])[0]].xd; - } - jfs.slastindex = dtpage->header.nextindex; - } - - return next_dentry (); -} - - -static dtslot_t * -next_dslot (int next) -{ - return (jfs.dttype == DTTYPE_INLINE) - ? (dtslot_t *)&dtroot->slot[next] - : &((dtslot_t *)dtpage->slot)[next]; -} - -static void -uni2ansi (UniChar *uni, char *ansi, int len) -{ - for (; len; len--, uni++) - *ansi++ = (*uni & 0xff80) ? '?' : *(char *)uni; -} - -int -jfs_mount (void) -{ - struct jfs_superblock super; - - if (part_length < MINJFS >> SECTOR_BITS - || !devread (SUPER1_OFF >> SECTOR_BITS, 0, - sizeof(struct jfs_superblock), (char *)&super) - || (super.s_magic != JFS_MAGIC) - || !devread ((AITBL_OFF >> SECTOR_BITS) + FILESYSTEM_I, - 0, DISIZE, (char*)fileset)) { - return 0; - } - - jfs.bsize = super.s_bsize; - jfs.l2bsize = super.s_l2bsize; - jfs.bdlog = jfs.l2bsize - SECTOR_BITS; - - return 1; -} - -int -jfs_read (char *buf, int len) -{ - xad_t *xad; - s64 endofprev, endofcur; - s64 offset, xadlen; - int toread, startpos, endpos; - - startpos = filepos; - endpos = filepos + len; - endofprev = (1ULL << 62) - 1; - xad = first_extent (inode); - do { - offset = offsetXAD (xad); - xadlen = lengthXAD (xad); - if (isinxt (filepos >> jfs.l2bsize, offset, xadlen)) { - endofcur = (offset + xadlen) << jfs.l2bsize; - toread = (endofcur >= endpos) - ? len : (endofcur - filepos); - - disk_read_func = disk_read_hook; - devread (addressXAD (xad) << jfs.bdlog, - filepos - (offset << jfs.l2bsize), toread, buf); - disk_read_func = NULL; - - buf += toread; - len -= toread; - filepos += toread; - } else if (offset > endofprev) { - toread = ((offset << jfs.l2bsize) >= endpos) - ? len : ((offset - endofprev) << jfs.l2bsize); - len -= toread; - filepos += toread; - for (; toread; toread--) { - *buf++ = 0; - } - continue; - } - endofprev = offset + xadlen; - xad = next_extent (); - } while (len > 0 && xad); - - return filepos - startpos; -} - -int -jfs_dir (char *dirname) -{ - char *ptr, *rest, ch; - ldtentry_t *de; - dtslot_t *ds; - u32 inum, parent_inum; - s64 di_size; - u32 di_mode; - int namlen, cmp, n, link_count; - char namebuf[JFS_NAME_MAX + 1], linkbuf[JFS_PATH_MAX]; - - parent_inum = inum = ROOT_I; - link_count = 0; - for (;;) { - di_read (inum, inode); - di_size = inode->di_size; - di_mode = inode->di_mode; - - if ((di_mode & IFMT) == IFLNK) { - if (++link_count > MAX_LINK_COUNT) { - errnum = ERR_SYMLINK_LOOP; - return 0; - } - if (di_size < (di_mode & INLINEEA ? 256 : 128)) { - grub_memmove (linkbuf, inode->di_fastsymlink, di_size); - n = di_size; - } else if (di_size < JFS_PATH_MAX - 1) { - filepos = 0; - filemax = di_size; - n = jfs_read (linkbuf, filemax); - } else { - errnum = ERR_FILELENGTH; - return 0; - } - - inum = (linkbuf[0] == '/') ? ROOT_I : parent_inum; - while (n < (JFS_PATH_MAX - 1) && (linkbuf[n++] = *dirname++)); - linkbuf[n] = 0; - dirname = linkbuf; - continue; - } - - if (!*dirname || isspace (*dirname)) { - if ((di_mode & IFMT) != IFREG) { - errnum = ERR_BAD_FILETYPE; - return 0; - } - filepos = 0; - filemax = di_size; - return 1; - } - - if ((di_mode & IFMT) != IFDIR) { - errnum = ERR_BAD_FILETYPE; - return 0; - } - - for (; *dirname == '/'; dirname++); - - for (rest = dirname; (ch = *rest) && !isspace (ch) && ch != '/'; rest++); - *rest = 0; - - de = first_dentry (); - for (;;) { - namlen = de->namlen; - if (de->next == -1) { - uni2ansi (de->name, namebuf, namlen); - namebuf[namlen] = 0; - } else { - uni2ansi (de->name, namebuf, DTLHDRDATALEN); - ptr = namebuf; - ptr += DTLHDRDATALEN; - namlen -= DTLHDRDATALEN; - ds = next_dslot (de->next); - while (ds->next != -1) { - uni2ansi (ds->name, ptr, DTSLOTDATALEN); - ptr += DTSLOTDATALEN; - namlen -= DTSLOTDATALEN; - ds = next_dslot (ds->next); - } - uni2ansi (ds->name, ptr, namlen); - ptr += namlen; - *ptr = 0; - } - - cmp = (!*dirname) ? -1 : substring (dirname, namebuf); -#ifndef STAGE1_5 - if (print_possibilities && ch != '/' - && cmp <= 0) { - if (print_possibilities > 0) - print_possibilities = -print_possibilities; - print_a_completion (namebuf); - } else -#endif - if (cmp == 0) { - parent_inum = inum; - inum = de->inumber; - *(dirname = rest) = ch; - break; - } - de = next_dentry (); - if (de == NULL) { - if (print_possibilities < 0) - return 1; - - errnum = ERR_FILE_NOT_FOUND; - *rest = ch; - return 0; - } - } - } -} - -int -jfs_embed (int *start_sector, int needed_sectors) -{ - struct jfs_superblock super; - - if (needed_sectors > 63 - || !devread (SUPER1_OFF >> SECTOR_BITS, 0, - sizeof (struct jfs_superblock), - (char *)&super) - || (super.s_magic != JFS_MAGIC)) { - return 0; - } - - *start_sector = 1; - return 1; -} - -#endif /* FSYS_JFS */ diff --git a/stage2/fsys_minix.c b/stage2/fsys_minix.c deleted file mode 100644 index 5c76796a2..000000000 --- a/stage2/fsys_minix.c +++ /dev/null @@ -1,534 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2002 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* Restrictions: - This is MINIX V1 only (yet) - Disk creation is like: - mkfs.minix -c DEVICE -*/ - -#ifdef FSYS_MINIX - -#include "shared.h" -#include "filesys.h" - -/* #define DEBUG_MINIX */ - -/* indirect blocks */ -static int mapblock1, mapblock2, namelen; - -/* sizes are always in bytes, BLOCK values are always in DEV_BSIZE (sectors) */ -#define DEV_BSIZE 512 - -/* include/linux/fs.h */ -#define BLOCK_SIZE_BITS 10 -#define BLOCK_SIZE (1<. Oh well. */ -#define MINIX_LINK_MAX 250 -#define MINIX2_LINK_MAX 65530 - -#define MINIX_I_MAP_SLOTS 8 -#define MINIX_Z_MAP_SLOTS 64 -#define MINIX_SUPER_MAGIC 0x137F /* original minix fs */ -#define MINIX_SUPER_MAGIC2 0x138F /* minix fs, 30 char names */ -#define MINIX2_SUPER_MAGIC 0x2468 /* minix V2 fs */ -#define MINIX2_SUPER_MAGIC2 0x2478 /* minix V2 fs, 30 char names */ -#define MINIX_VALID_FS 0x0001 /* Clean fs. */ -#define MINIX_ERROR_FS 0x0002 /* fs has errors. */ - -#define MINIX_INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct minix_inode))) -#define MINIX2_INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct minix2_inode))) - -#define MINIX_V1 0x0001 /* original minix fs */ -#define MINIX_V2 0x0002 /* minix V2 fs */ - -/* originally this is : -#define INODE_VERSION(inode) inode->i_sb->u.minix_sb.s_version - here we have */ -#define INODE_VERSION(inode) (SUPERBLOCK->s_version) - -/* - * This is the original minix inode layout on disk. - * Note the 8-bit gid and atime and ctime. - */ -struct minix_inode { - __u16 i_mode; - __u16 i_uid; - __u32 i_size; - __u32 i_time; - __u8 i_gid; - __u8 i_nlinks; - __u16 i_zone[9]; -}; - -/* - * The new minix inode has all the time entries, as well as - * long block numbers and a third indirect block (7+1+1+1 - * instead of 7+1+1). Also, some previously 8-bit values are - * now 16-bit. The inode is now 64 bytes instead of 32. - */ -struct minix2_inode { - __u16 i_mode; - __u16 i_nlinks; - __u16 i_uid; - __u16 i_gid; - __u32 i_size; - __u32 i_atime; - __u32 i_mtime; - __u32 i_ctime; - __u32 i_zone[10]; -}; - -/* - * minix super-block data on disk - */ -struct minix_super_block { - __u16 s_ninodes; - __u16 s_nzones; - __u16 s_imap_blocks; - __u16 s_zmap_blocks; - __u16 s_firstdatazone; - __u16 s_log_zone_size; - __u32 s_max_size; - __u16 s_magic; - __u16 s_state; - __u32 s_zones; -}; - -struct minix_dir_entry { - __u16 inode; - char name[0]; -}; - -/* made up, these are pointers into FSYS_BUF */ -/* read once, always stays there: */ -#define SUPERBLOCK \ - ((struct minix_super_block *)(FSYS_BUF)) -#define INODE \ - ((struct minix_inode *)((int) SUPERBLOCK + BLOCK_SIZE)) -#define DATABLOCK1 \ - ((int)((int)INODE + sizeof(struct minix_inode))) -#define DATABLOCK2 \ - ((int)((int)DATABLOCK1 + BLOCK_SIZE)) - -/* linux/stat.h */ -#define S_IFMT 00170000 -#define S_IFLNK 0120000 -#define S_IFREG 0100000 -#define S_IFDIR 0040000 -#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) -#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) -#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) - -#define PATH_MAX 1024 /* include/linux/limits.h */ -#define MAX_LINK_COUNT 5 /* number of symbolic links to follow */ - -/* check filesystem types and read superblock into memory buffer */ -int -minix_mount (void) -{ - if (((current_drive & 0x80) || current_slice != 0) - && ! IS_PC_SLICE_TYPE_MINIX (current_slice) - && ! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_OTHER)) - return 0; /* The partition is not of MINIX type */ - - if (part_length < (SBLOCK + - (sizeof (struct minix_super_block) / DEV_BSIZE))) - return 0; /* The partition is too short */ - - if (!devread (SBLOCK, 0, sizeof (struct minix_super_block), - (char *) SUPERBLOCK)) - return 0; /* Cannot read superblock */ - - switch (SUPERBLOCK->s_magic) - { - case MINIX_SUPER_MAGIC: - namelen = 14; - break; - case MINIX_SUPER_MAGIC2: - namelen = 30; - break; - default: - return 0; /* Unsupported type */ - } - - return 1; -} - -/* Takes a file system block number and reads it into BUFFER. */ -static int -minix_rdfsb (int fsblock, int buffer) -{ - return devread (fsblock * (BLOCK_SIZE / DEV_BSIZE), 0, - BLOCK_SIZE, (char *) buffer); -} - -/* Maps LOGICAL_BLOCK (the file offset divided by the blocksize) into - a physical block (the location in the file system) via an inode. */ -static int -minix_block_map (int logical_block) -{ - int i; - - if (logical_block < 7) - return INODE->i_zone[logical_block]; - - logical_block -= 7; - if (logical_block < 512) - { - i = INODE->i_zone[7]; - - if (!i || ((mapblock1 != 1) - && !minix_rdfsb (i, DATABLOCK1))) - { - errnum = ERR_FSYS_CORRUPT; - return -1; - } - mapblock1 = 1; - return ((__u16 *) DATABLOCK1) [logical_block]; - } - - logical_block -= 512; - i = INODE->i_zone[8]; - if (!i || ((mapblock1 != 2) - && !minix_rdfsb (i, DATABLOCK1))) - { - errnum = ERR_FSYS_CORRUPT; - return -1; - } - mapblock1 = 2; - i = ((__u16 *) DATABLOCK1)[logical_block >> 9]; - if (!i || ((mapblock2 != i) - && !minix_rdfsb (i, DATABLOCK2))) - { - errnum = ERR_FSYS_CORRUPT; - return -1; - } - mapblock2 = i; - return ((__u16 *) DATABLOCK2)[logical_block & 511]; -} - -/* read from INODE into BUF */ -int -minix_read (char *buf, int len) -{ - int logical_block; - int offset; - int map; - int ret = 0; - int size = 0; - - while (len > 0) - { - /* find the (logical) block component of our location */ - logical_block = filepos >> BLOCK_SIZE_BITS; - offset = filepos & (BLOCK_SIZE - 1); - map = minix_block_map (logical_block); -#ifdef DEBUG_MINIX - printf ("map=%d\n", map); -#endif - if (map < 0) - break; - - size = BLOCK_SIZE; - size -= offset; - if (size > len) - size = len; - - disk_read_func = disk_read_hook; - - devread (map * (BLOCK_SIZE / DEV_BSIZE), - offset, size, buf); - - disk_read_func = NULL; - - buf += size; - len -= size; - filepos += size; - ret += size; - } - - if (errnum) - ret = 0; - - return ret; -} - -/* preconditions: minix_mount already executed, therefore supblk in buffer - known as SUPERBLOCK - returns: 0 if error, nonzero iff we were able to find the file successfully - postconditions: on a nonzero return, buffer known as INODE contains the - inode of the file we were trying to look up - side effects: none yet */ -int -minix_dir (char *dirname) -{ - int current_ino = MINIX_ROOT_INO; /* start at the root */ - int updir_ino = current_ino; /* the parent of the current directory */ - int ino_blk; /* fs pointer of the inode's info */ - - int str_chk = 0; /* used ot hold the results of a string - compare */ - - struct minix_inode * raw_inode; /* inode info for current_ino */ - - char linkbuf[PATH_MAX]; /* buffer for following sym-links */ - int link_count = 0; - - char * rest; - char ch; - - int off; /* offset within block of directory - entry */ - int loc; /* location within a directory */ - int blk; /* which data blk within dir entry */ - long map; /* fs pointer of a particular block from - dir entry */ - struct minix_dir_entry * dp; /* pointer to directory entry */ - - /* loop invariants: - current_ino = inode to lookup - dirname = pointer to filename component we are cur looking up within - the directory known pointed to by current_ino (if any) */ - -#ifdef DEBUG_MINIX - printf ("\n"); -#endif - - while (1) - { -#ifdef DEBUG_MINIX - printf ("inode %d, dirname %s\n", current_ino, dirname); -#endif - - ino_blk = (2 + SUPERBLOCK->s_imap_blocks + SUPERBLOCK->s_zmap_blocks - + (current_ino - 1) / MINIX_INODES_PER_BLOCK); - if (! minix_rdfsb (ino_blk, (int) INODE)) - return 0; - - /* reset indirect blocks! */ - mapblock2 = mapblock1 = -1; - - raw_inode = INODE + ((current_ino - 1) % MINIX_INODES_PER_BLOCK); - - /* copy inode to fixed location */ - memmove ((void *) INODE, (void *) raw_inode, - sizeof (struct minix_inode)); - - /* If we've got a symbolic link, then chase it. */ - if (S_ISLNK (INODE->i_mode)) - { - int len; - - if (++link_count > MAX_LINK_COUNT) - { - errnum = ERR_SYMLINK_LOOP; - return 0; - } -#ifdef DEBUG_MINIX - printf ("S_ISLNK (%s)\n", dirname); -#endif - - /* Find out how long our remaining name is. */ - len = 0; - while (dirname[len] && !isspace (dirname[len])) - len++; - - /* Get the symlink size. */ - filemax = (INODE->i_size); - if (filemax + len > sizeof (linkbuf) - 2) - { - errnum = ERR_FILELENGTH; - return 0; - } - - if (len) - { - /* Copy the remaining name to the end of the symlink data. - Note that DIRNAME and LINKBUF may overlap! */ - memmove (linkbuf + filemax, dirname, len); - } - linkbuf[filemax + len] = '\0'; - - /* Read the necessary blocks, and reset the file pointer. */ - len = grub_read (linkbuf, filemax); - filepos = 0; - if (!len) - return 0; - -#ifdef DEBUG_MINIX - printf ("symlink=%s\n", linkbuf); -#endif - - dirname = linkbuf; - if (*dirname == '/') - { - /* It's an absolute link, so look it up in root. */ - current_ino = MINIX_ROOT_INO; - updir_ino = current_ino; - } - else - { - /* Relative, so look it up in our parent directory. */ - current_ino = updir_ino; - } - - /* Try again using the new name. */ - continue; - } - - /* If end of filename, INODE points to the file's inode */ - if (!*dirname || isspace (*dirname)) - { - if (!S_ISREG (INODE->i_mode)) - { - errnum = ERR_BAD_FILETYPE; - return 0; - } - - filemax = (INODE->i_size); - return 1; - } - - /* else we have to traverse a directory */ - updir_ino = current_ino; - - /* skip over slashes */ - while (*dirname == '/') - dirname++; - - /* if this isn't a directory of sufficient size to hold our file, - abort */ - if (!(INODE->i_size) || !S_ISDIR (INODE->i_mode)) - { - errnum = ERR_BAD_FILETYPE; - return 0; - } - - /* skip to next slash or end of filename (space) */ - for (rest = dirname; (ch = *rest) && !isspace (ch) && ch != '/'; - rest++); - - /* look through this directory and find the next filename component */ - /* invariant: rest points to slash after the next filename component */ - *rest = 0; - loc = 0; - - do - { -#ifdef DEBUG_MINIX - printf ("dirname=`%s', rest=`%s', loc=%d\n", dirname, rest, loc); -#endif - - /* if our location/byte offset into the directory exceeds the size, - give up */ - if (loc >= INODE->i_size) - { - if (print_possibilities < 0) - { -#if 0 - putchar ('\n'); -#endif - } - else - { - errnum = ERR_FILE_NOT_FOUND; - *rest = ch; - } - return (print_possibilities < 0); - } - - /* else, find the (logical) block component of our location */ - blk = loc >> BLOCK_SIZE_BITS; - - /* we know which logical block of the directory entry we are looking - for, now we have to translate that to the physical (fs) block on - the disk */ - map = minix_block_map (blk); -#ifdef DEBUG_MINIX - printf ("fs block=%d\n", map); -#endif - mapblock2 = -1; - if ((map < 0) || !minix_rdfsb (map, DATABLOCK2)) - { - errnum = ERR_FSYS_CORRUPT; - *rest = ch; - return 0; - } - off = loc & (BLOCK_SIZE - 1); - dp = (struct minix_dir_entry *) (DATABLOCK2 + off); - /* advance loc prematurely to next on-disk directory entry */ - loc += sizeof (dp->inode) + namelen; - - /* NOTE: minix filenames are NULL terminated if < NAMELEN - else exact */ - -#ifdef DEBUG_MINIX - printf ("directory entry ino=%d\n", dp->inode); - if (dp->inode) - printf ("entry=%s\n", dp->name); -#endif - - if (dp->inode) - { - int saved_c = dp->name[namelen]; - - dp->name[namelen] = 0; - str_chk = substring (dirname, dp->name); - -# ifndef STAGE1_5 - if (print_possibilities && ch != '/' - && (!*dirname || str_chk <= 0)) - { - if (print_possibilities > 0) - print_possibilities = -print_possibilities; - print_a_completion (dp->name); - } -# endif - - dp->name[namelen] = saved_c; - } - - } - while (!dp->inode || (str_chk || (print_possibilities && ch != '/'))); - - current_ino = dp->inode; - *(dirname = rest) = ch; - } - /* never get here */ -} - -#endif /* FSYS_MINIX */ diff --git a/stage2/fsys_reiserfs.c b/stage2/fsys_reiserfs.c deleted file mode 100644 index 93ec5f857..000000000 --- a/stage2/fsys_reiserfs.c +++ /dev/null @@ -1,1238 +0,0 @@ -/* fsys_reiserfs.c - an implementation for the ReiserFS filesystem */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000, 2001 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifdef FSYS_REISERFS -#include "shared.h" -#include "filesys.h" - -#undef REISERDEBUG - -/* Some parts of this code (mainly the structures and defines) are - * from the original reiser fs code, as found in the linux kernel. - */ - -/* include/asm-i386/types.h */ -typedef __signed__ char __s8; -typedef unsigned char __u8; -typedef __signed__ short __s16; -typedef unsigned short __u16; -typedef __signed__ int __s32; -typedef unsigned int __u32; -typedef unsigned long long __u64; - -/* linux/posix_type.h */ -typedef long linux_off_t; - -/* linux/little_endian.h */ -#define __cpu_to_le64(x) ((__u64) (x)) -#define __le64_to_cpu(x) ((__u64) (x)) -#define __cpu_to_le32(x) ((__u32) (x)) -#define __le32_to_cpu(x) ((__u32) (x)) -#define __cpu_to_le16(x) ((__u16) (x)) -#define __le16_to_cpu(x) ((__u16) (x)) - -/* include/linux/reiser_fs.h */ -/* This is the new super block of a journaling reiserfs system */ -struct reiserfs_super_block -{ - __u32 s_block_count; /* blocks count */ - __u32 s_free_blocks; /* free blocks count */ - __u32 s_root_block; /* root block number */ - __u32 s_journal_block; /* journal block number */ - __u32 s_journal_dev; /* journal device number */ - __u32 s_journal_size; /* size of the journal on FS creation. used to make sure they don't overflow it */ - __u32 s_journal_trans_max; /* max number of blocks in a transaction. */ - __u32 s_journal_magic; /* random value made on fs creation */ - __u32 s_journal_max_batch; /* max number of blocks to batch into a trans */ - __u32 s_journal_max_commit_age; /* in seconds, how old can an async commit be */ - __u32 s_journal_max_trans_age; /* in seconds, how old can a transaction be */ - __u16 s_blocksize; /* block size */ - __u16 s_oid_maxsize; /* max size of object id array */ - __u16 s_oid_cursize; /* current size of object id array */ - __u16 s_state; /* valid or error */ - char s_magic[16]; /* reiserfs magic string indicates that file system is reiserfs */ - __u16 s_tree_height; /* height of disk tree */ - __u16 s_bmap_nr; /* amount of bitmap blocks needed to address each block of file system */ - __u16 s_version; - char s_unused[128]; /* zero filled by mkreiserfs */ -}; - -#define REISERFS_MAX_SUPPORTED_VERSION 2 -#define REISERFS_SUPER_MAGIC_STRING "ReIsErFs" -#define REISER2FS_SUPER_MAGIC_STRING "ReIsEr2Fs" -#define REISER3FS_SUPER_MAGIC_STRING "ReIsEr3Fs" - -#define MAX_HEIGHT 7 - -/* must be correct to keep the desc and commit structs at 4k */ -#define JOURNAL_TRANS_HALF 1018 - -/* first block written in a commit. */ -struct reiserfs_journal_desc { - __u32 j_trans_id; /* id of commit */ - __u32 j_len; /* length of commit. len +1 is the commit block */ - __u32 j_mount_id; /* mount id of this trans*/ - __u32 j_realblock[JOURNAL_TRANS_HALF]; /* real locations for the first blocks */ - char j_magic[12]; -}; - -/* last block written in a commit */ -struct reiserfs_journal_commit { - __u32 j_trans_id; /* must match j_trans_id from the desc block */ - __u32 j_len; /* ditto */ - __u32 j_realblock[JOURNAL_TRANS_HALF]; /* real locations for the last blocks */ - char j_digest[16]; /* md5 sum of all the blocks involved, including desc and commit. not used, kill it */ -}; - -/* this header block gets written whenever a transaction is considered - fully flushed, and is more recent than the last fully flushed - transaction. - fully flushed means all the log blocks and all the real blocks are - on disk, and this transaction does not need to be replayed. -*/ -struct reiserfs_journal_header { - /* id of last fully flushed transaction */ - __u32 j_last_flush_trans_id; - /* offset in the log of where to start replay after a crash */ - __u32 j_first_unflushed_offset; - /* mount id to detect very old transactions */ - __u32 j_mount_id; -}; - -/* magic string to find desc blocks in the journal */ -#define JOURNAL_DESC_MAGIC "ReIsErLB" - - -/* - * directories use this key as well as old files - */ -struct offset_v1 -{ - /* - * for regular files this is the offset to the first byte of the - * body, contained in the object-item, as measured from the start of - * the entire body of the object. - * - * for directory entries, k_offset consists of hash derived from - * hashing the name and using few bits (23 or more) of the resulting - * hash, and generation number that allows distinguishing names with - * hash collisions. If number of collisions overflows generation - * number, we return EEXIST. High order bit is 0 always - */ - __u32 k_offset; - __u32 k_uniqueness; -}; - -struct offset_v2 -{ - /* - * for regular files this is the offset to the first byte of the - * body, contained in the object-item, as measured from the start of - * the entire body of the object. - * - * for directory entries, k_offset consists of hash derived from - * hashing the name and using few bits (23 or more) of the resulting - * hash, and generation number that allows distinguishing names with - * hash collisions. If number of collisions overflows generation - * number, we return EEXIST. High order bit is 0 always - */ - __u64 k_offset:60; - __u64 k_type: 4; -}; - - -struct key -{ - /* packing locality: by default parent directory object id */ - __u32 k_dir_id; - /* object identifier */ - __u32 k_objectid; - /* the offset and node type (old and new form) */ - union - { - struct offset_v1 v1; - struct offset_v2 v2; - } - u; -}; - -#define KEY_SIZE (sizeof (struct key)) - -/* Header of a disk block. More precisely, header of a formatted leaf - or internal node, and not the header of an unformatted node. */ -struct block_head -{ - __u16 blk_level; /* Level of a block in the tree. */ - __u16 blk_nr_item; /* Number of keys/items in a block. */ - __u16 blk_free_space; /* Block free space in bytes. */ - struct key blk_right_delim_key; /* Right delimiting key for this block (supported for leaf level nodes - only) */ -}; -#define BLKH_SIZE (sizeof (struct block_head)) -#define DISK_LEAF_NODE_LEVEL 1 /* Leaf node level. */ - -struct item_head -{ - struct key ih_key; /* Everything in the tree is found by searching for it based on its key.*/ - - union - { - __u16 ih_free_space; /* The free space in the last unformatted node of an indirect item if this - is an indirect item. This equals 0xFFFF iff this is a direct item or - stat data item. Note that the key, not this field, is used to determine - the item type, and thus which field this union contains. */ - __u16 ih_entry_count; /* Iff this is a directory item, this field equals the number of directory - entries in the directory item. */ - } - u; - __u16 ih_item_len; /* total size of the item body */ - __u16 ih_item_location; /* an offset to the item body within the block */ - __u16 ih_version; /* ITEM_VERSION_1 for all old items, - ITEM_VERSION_2 for new ones. - Highest bit is set by fsck - temporary, cleaned after all done */ -}; -/* size of item header */ -#define IH_SIZE (sizeof (struct item_head)) - -#define ITEM_VERSION_1 0 -#define ITEM_VERSION_2 1 -#define IH_KEY_OFFSET(ih) ((ih)->ih_version == ITEM_VERSION_1 \ - ? (ih)->ih_key.u.v1.k_offset \ - : (ih)->ih_key.u.v2.k_offset) - -#define IH_KEY_ISTYPE(ih, type) ((ih)->ih_version == ITEM_VERSION_1 \ - ? (ih)->ih_key.u.v1.k_uniqueness == V1_##type \ - : (ih)->ih_key.u.v2.k_type == V2_##type) - -struct disk_child -{ - unsigned long dc_block_number; /* Disk child's block number. */ - unsigned short dc_size; /* Disk child's used space. */ -}; - -#define DC_SIZE (sizeof (struct disk_child)) - -/* Stat Data on disk. - * - * Note that reiserfs has two different forms of stat data. Luckily - * the fields needed by grub are at the same position. - */ -struct stat_data -{ - __u16 sd_mode; /* file type, permissions */ - __u16 sd_notused1[3]; /* fields not needed by reiserfs */ - __u32 sd_size; /* file size */ - __u32 sd_size_hi; /* file size high 32 bits (since version 2) */ -}; - -struct reiserfs_de_head -{ - __u32 deh_offset; /* third component of the directory entry key */ - __u32 deh_dir_id; /* objectid of the parent directory of the - object, that is referenced by directory entry */ - __u32 deh_objectid;/* objectid of the object, that is referenced by - directory entry */ - __u16 deh_location;/* offset of name in the whole item */ - __u16 deh_state; /* whether 1) entry contains stat data (for - future), and 2) whether entry is hidden - (unlinked) */ -}; - -#define DEH_SIZE (sizeof (struct reiserfs_de_head)) - -#define DEH_Statdata (1 << 0) /* not used now */ -#define DEH_Visible (1 << 2) - -#define SD_OFFSET 0 -#define SD_UNIQUENESS 0 -#define DOT_OFFSET 1 -#define DOT_DOT_OFFSET 2 -#define DIRENTRY_UNIQUENESS 500 - -#define V1_TYPE_STAT_DATA 0x0 -#define V1_TYPE_DIRECT 0xffffffff -#define V1_TYPE_INDIRECT 0xfffffffe -#define V1_TYPE_DIRECTORY_MAX 0xfffffffd -#define V2_TYPE_STAT_DATA 0 -#define V2_TYPE_INDIRECT 1 -#define V2_TYPE_DIRECT 2 -#define V2_TYPE_DIRENTRY 3 - -#define REISERFS_ROOT_OBJECTID 2 -#define REISERFS_ROOT_PARENT_OBJECTID 1 -#define REISERFS_DISK_OFFSET_IN_BYTES (64 * 1024) -/* the spot for the super in versions 3.5 - 3.5.11 (inclusive) */ -#define REISERFS_OLD_DISK_OFFSET_IN_BYTES (8 * 1024) -#define REISERFS_OLD_BLOCKSIZE 4096 - -#define S_ISREG(mode) (((mode) & 0170000) == 0100000) -#define S_ISDIR(mode) (((mode) & 0170000) == 0040000) -#define S_ISLNK(mode) (((mode) & 0170000) == 0120000) - -#define PATH_MAX 1024 /* include/linux/limits.h */ -#define MAX_LINK_COUNT 5 /* number of symbolic links to follow */ - -/* The size of the node cache */ -#define FSYSREISER_CACHE_SIZE 24*1024 -#define FSYSREISER_MIN_BLOCKSIZE SECTOR_SIZE -#define FSYSREISER_MAX_BLOCKSIZE FSYSREISER_CACHE_SIZE / 3 - -/* Info about currently opened file */ -struct fsys_reiser_fileinfo -{ - __u32 k_dir_id; - __u32 k_objectid; -}; - -/* In memory info about the currently mounted filesystem */ -struct fsys_reiser_info -{ - /* The last read item head */ - struct item_head *current_ih; - /* The last read item */ - char *current_item; - /* The information for the currently opened file */ - struct fsys_reiser_fileinfo fileinfo; - /* The start of the journal */ - __u32 journal_block; - /* The size of the journal */ - __u32 journal_block_count; - /* The first valid descriptor block in journal - (relative to journal_block) */ - __u32 journal_first_desc; - - /* The ReiserFS version. */ - __u16 version; - /* The current depth of the reiser tree. */ - __u16 tree_depth; - /* SECTOR_SIZE << blocksize_shift == blocksize. */ - __u8 blocksize_shift; - /* 1 << full_blocksize_shift == blocksize. */ - __u8 fullblocksize_shift; - /* The reiserfs block size (must be a power of 2) */ - __u16 blocksize; - /* The number of cached tree nodes */ - __u16 cached_slots; - /* The number of valid transactions in journal */ - __u16 journal_transactions; - - unsigned int blocks[MAX_HEIGHT]; - unsigned int next_key_nr[MAX_HEIGHT]; -}; - -/* The cached s+tree blocks in FSYS_BUF, see below - * for a more detailed description. - */ -#define ROOT ((char *) ((int) FSYS_BUF)) -#define CACHE(i) (ROOT + ((i) << INFO->fullblocksize_shift)) -#define LEAF CACHE (DISK_LEAF_NODE_LEVEL) - -#define BLOCKHEAD(cache) ((struct block_head *) cache) -#define ITEMHEAD ((struct item_head *) ((int) LEAF + BLKH_SIZE)) -#define KEY(cache) ((struct key *) ((int) cache + BLKH_SIZE)) -#define DC(cache) ((struct disk_child *) \ - ((int) cache + BLKH_SIZE + KEY_SIZE * nr_item)) -/* The fsys_reiser_info block. - */ -#define INFO \ - ((struct fsys_reiser_info *) ((int) FSYS_BUF + FSYSREISER_CACHE_SIZE)) -/* - * The journal cache. For each transaction it contains the number of - * blocks followed by the real block numbers of this transaction. - * - * If the block numbers of some transaction won't fit in this space, - * this list is stopped with a 0xffffffff marker and the remaining - * uncommitted transactions aren't cached. - */ -#define JOURNAL_START ((__u32 *) (INFO + 1)) -#define JOURNAL_END ((__u32 *) (FSYS_BUF + FSYS_BUFLEN)) - - -static __inline__ unsigned long -log2 (unsigned long word) -{ - __asm__ ("bsfl %1,%0" - : "=r" (word) - : "r" (word)); - return word; -} - -static __inline__ int -is_power_of_two (unsigned long word) -{ - return (word & -word) == word; -} - -static int -journal_read (int block, int len, char *buffer) -{ - return devread ((INFO->journal_block + block) << INFO->blocksize_shift, - 0, len, buffer); -} - -/* Read a block from ReiserFS file system, taking the journal into - * account. If the block nr is in the journal, the block from the - * journal taken. - */ -static int -block_read (int blockNr, int start, int len, char *buffer) -{ - int transactions = INFO->journal_transactions; - int desc_block = INFO->journal_first_desc; - int journal_mask = INFO->journal_block_count - 1; - int translatedNr = blockNr; - __u32 *journal_table = JOURNAL_START; - while (transactions-- > 0) - { - int i = 0; - int j_len; - if (*journal_table != 0xffffffff) - { - /* Search for the blockNr in cached journal */ - j_len = *journal_table++; - while (i++ < j_len) - { - if (*journal_table++ == blockNr) - { - journal_table += j_len - i; - goto found; - } - } - } - else - { - /* This is the end of cached journal marker. The remaining - * transactions are still on disk. - */ - struct reiserfs_journal_desc desc; - struct reiserfs_journal_commit commit; - - if (! journal_read (desc_block, sizeof (desc), (char *) &desc)) - return 0; - - j_len = desc.j_len; - while (i < j_len && i < JOURNAL_TRANS_HALF) - if (desc.j_realblock[i++] == blockNr) - goto found; - - if (j_len >= JOURNAL_TRANS_HALF) - { - int commit_block = (desc_block + 1 + j_len) & journal_mask; - if (! journal_read (commit_block, - sizeof (commit), (char *) &commit)) - return 0; - while (i < j_len) - if (commit.j_realblock[i++ - JOURNAL_TRANS_HALF] == blockNr) - goto found; - } - } - goto not_found; - - found: - translatedNr = INFO->journal_block + ((desc_block + i) & journal_mask); -#ifdef REISERDEBUG - printf ("block_read: block %d is mapped to journal block %d.\n", - blockNr, translatedNr - INFO->journal_block); -#endif - /* We must continue the search, as this block may be overwritten - * in later transactions. - */ - not_found: - desc_block = (desc_block + 2 + j_len) & journal_mask; - } - return devread (translatedNr << INFO->blocksize_shift, start, len, buffer); -} - -/* Init the journal data structure. We try to cache as much as - * possible in the JOURNAL_START-JOURNAL_END space, but if it is full - * we can still read the rest from the disk on demand. - * - * The first number of valid transactions and the descriptor block of the - * first valid transaction are held in INFO. The transactions are all - * adjacent, but we must take care of the journal wrap around. - */ -static int -journal_init (void) -{ - unsigned int block_count = INFO->journal_block_count; - unsigned int desc_block; - unsigned int commit_block; - unsigned int next_trans_id; - struct reiserfs_journal_header header; - struct reiserfs_journal_desc desc; - struct reiserfs_journal_commit commit; - __u32 *journal_table = JOURNAL_START; - - journal_read (block_count, sizeof (header), (char *) &header); - desc_block = header.j_first_unflushed_offset; - if (desc_block >= block_count) - return 0; - - INFO->journal_first_desc = desc_block; - next_trans_id = header.j_last_flush_trans_id + 1; - -#ifdef REISERDEBUG - printf ("journal_init: last flushed %d\n", - header.j_last_flush_trans_id); -#endif - - while (1) - { - journal_read (desc_block, sizeof (desc), (char *) &desc); - if (substring (JOURNAL_DESC_MAGIC, desc.j_magic) > 0 - || desc.j_trans_id != next_trans_id - || desc.j_mount_id != header.j_mount_id) - /* no more valid transactions */ - break; - - commit_block = (desc_block + desc.j_len + 1) & (block_count - 1); - journal_read (commit_block, sizeof (commit), (char *) &commit); - if (desc.j_trans_id != commit.j_trans_id - || desc.j_len != commit.j_len) - /* no more valid transactions */ - break; - -#ifdef REISERDEBUG - printf ("Found valid transaction %d/%d at %d.\n", - desc.j_trans_id, desc.j_mount_id, desc_block); -#endif - - next_trans_id++; - if (journal_table < JOURNAL_END) - { - if ((journal_table + 1 + desc.j_len) >= JOURNAL_END) - { - /* The table is almost full; mark the end of the cached - * journal.*/ - *journal_table = 0xffffffff; - journal_table = JOURNAL_END; - } - else - { - int i; - /* Cache the length and the realblock numbers in the table. - * The block number of descriptor can easily be computed. - * and need not to be stored here. - */ - *journal_table++ = desc.j_len; - for (i = 0; i < desc.j_len && i < JOURNAL_TRANS_HALF; i++) - { - *journal_table++ = desc.j_realblock[i]; -#ifdef REISERDEBUG - printf ("block %d is in journal %d.\n", - desc.j_realblock[i], desc_block); -#endif - } - for ( ; i < desc.j_len; i++) - { - *journal_table++ = commit.j_realblock[i-JOURNAL_TRANS_HALF]; -#ifdef REISERDEBUG - printf ("block %d is in journal %d.\n", - commit.j_realblock[i-JOURNAL_TRANS_HALF], - desc_block); -#endif - } - } - } - desc_block = (commit_block + 1) & (block_count - 1); - } -#ifdef REISERDEBUG - printf ("Transaction %d/%d at %d isn't valid.\n", - desc.j_trans_id, desc.j_mount_id, desc_block); -#endif - - INFO->journal_transactions - = next_trans_id - header.j_last_flush_trans_id - 1; - return errnum == 0; -} - -/* check filesystem types and read superblock into memory buffer */ -int -reiserfs_mount (void) -{ - struct reiserfs_super_block super; - int superblock = REISERFS_DISK_OFFSET_IN_BYTES >> SECTOR_BITS; - - if (part_length < superblock + (sizeof (super) >> SECTOR_BITS) - || ! devread (superblock, 0, sizeof (struct reiserfs_super_block), - (char *) &super) - || (substring (REISER3FS_SUPER_MAGIC_STRING, super.s_magic) > 0 - && substring (REISER2FS_SUPER_MAGIC_STRING, super.s_magic) > 0 - && substring (REISERFS_SUPER_MAGIC_STRING, super.s_magic) > 0) - || (/* check that this is not a copy inside the journal log */ - super.s_journal_block * super.s_blocksize - <= REISERFS_DISK_OFFSET_IN_BYTES)) - { - /* Try old super block position */ - superblock = REISERFS_OLD_DISK_OFFSET_IN_BYTES >> SECTOR_BITS; - if (part_length < superblock + (sizeof (super) >> SECTOR_BITS) - || ! devread (superblock, 0, sizeof (struct reiserfs_super_block), - (char *) &super)) - return 0; - - if (substring (REISER3FS_SUPER_MAGIC_STRING, super.s_magic) > 0 - && substring (REISER2FS_SUPER_MAGIC_STRING, super.s_magic) > 0 - && substring (REISERFS_SUPER_MAGIC_STRING, super.s_magic) > 0) - { - /* pre journaling super block ? */ - if (substring (REISERFS_SUPER_MAGIC_STRING, - (char*) ((int) &super + 20)) > 0) - return 0; - - super.s_blocksize = REISERFS_OLD_BLOCKSIZE; - super.s_journal_block = 0; - super.s_version = 0; - } - } - - /* check the version number. */ - if (super.s_version > REISERFS_MAX_SUPPORTED_VERSION) - return 0; - - INFO->version = super.s_version; - INFO->blocksize = super.s_blocksize; - INFO->fullblocksize_shift = log2 (super.s_blocksize); - INFO->blocksize_shift = INFO->fullblocksize_shift - SECTOR_BITS; - INFO->cached_slots = - (FSYSREISER_CACHE_SIZE >> INFO->fullblocksize_shift) - 1; - -#ifdef REISERDEBUG - printf ("reiserfs_mount: version=%d, blocksize=%d\n", - INFO->version, INFO->blocksize); -#endif /* REISERDEBUG */ - - /* Clear node cache. */ - memset (INFO->blocks, 0, sizeof (INFO->blocks)); - - if (super.s_blocksize < FSYSREISER_MIN_BLOCKSIZE - || super.s_blocksize > FSYSREISER_MAX_BLOCKSIZE - || (SECTOR_SIZE << INFO->blocksize_shift) != super.s_blocksize) - return 0; - - /* Initialize journal code. If something fails we end with zero - * journal_transactions, so we don't access the journal at all. - */ - INFO->journal_transactions = 0; - if (super.s_journal_block != 0 && super.s_journal_dev == 0) - { - INFO->journal_block = super.s_journal_block; - INFO->journal_block_count = super.s_journal_size; - if (is_power_of_two (INFO->journal_block_count)) - journal_init (); - - /* Read in super block again, maybe it is in the journal */ - block_read (superblock >> INFO->blocksize_shift, - 0, sizeof (struct reiserfs_super_block), (char *) &super); - } - - if (! block_read (super.s_root_block, 0, INFO->blocksize, (char*) ROOT)) - return 0; - - INFO->tree_depth = BLOCKHEAD (ROOT)->blk_level; - -#ifdef REISERDEBUG - printf ("root read_in: block=%d, depth=%d\n", - super.s_root_block, INFO->tree_depth); -#endif /* REISERDEBUG */ - - if (INFO->tree_depth >= MAX_HEIGHT) - return 0; - if (INFO->tree_depth == DISK_LEAF_NODE_LEVEL) - { - /* There is only one node in the whole filesystem, - * which is simultanously leaf and root */ - memcpy (LEAF, ROOT, INFO->blocksize); - } - return 1; -} - -/***************** TREE ACCESSING METHODS *****************************/ - -/* I assume you are familiar with the ReiserFS tree, if not go to - * http://www.namesys.com/content_table.html - * - * My tree node cache is organized as following - * 0 ROOT node - * 1 LEAF node (if the ROOT is also a LEAF it is copied here - * 2-n other nodes on current path from bottom to top. - * if there is not enough space in the cache, the top most are - * omitted. - * - * I have only two methods to find a key in the tree: - * search_stat(dir_id, objectid) searches for the stat entry (always - * the first entry) of an object. - * next_key() gets the next key in tree order. - * - * This means, that I can only sequential reads of files are - * efficient, but this really doesn't hurt for grub. - */ - -/* Read in the node at the current path and depth into the node cache. - * You must set INFO->blocks[depth] before. - */ -static char * -read_tree_node (unsigned int blockNr, int depth) -{ - char* cache = CACHE(depth); - int num_cached = INFO->cached_slots; - if (depth < num_cached) - { - /* This is the cached part of the path. Check if same block is - * needed. - */ - if (blockNr == INFO->blocks[depth]) - return cache; - } - else - cache = CACHE(num_cached); - -#ifdef REISERDEBUG - printf (" next read_in: block=%d (depth=%d)\n", - blockNr, depth); -#endif /* REISERDEBUG */ - if (! block_read (blockNr, 0, INFO->blocksize, cache)) - return 0; - /* Make sure it has the right node level */ - if (BLOCKHEAD (cache)->blk_level != depth) - { - errnum = ERR_FSYS_CORRUPT; - return 0; - } - - INFO->blocks[depth] = blockNr; - return cache; -} - -/* Get the next key, i.e. the key following the last retrieved key in - * tree order. INFO->current_ih and - * INFO->current_info are adapted accordingly. */ -static int -next_key (void) -{ - int depth; - struct item_head *ih = INFO->current_ih + 1; - char *cache; - -#ifdef REISERDEBUG - printf ("next_key:\n old ih: key %d:%d:%d:%d version:%d\n", - INFO->current_ih->ih_key.k_dir_id, - INFO->current_ih->ih_key.k_objectid, - INFO->current_ih->ih_key.u.v1.k_offset, - INFO->current_ih->ih_key.u.v1.k_uniqueness, - INFO->current_ih->ih_version); -#endif /* REISERDEBUG */ - - if (ih == &ITEMHEAD[BLOCKHEAD (LEAF)->blk_nr_item]) - { - depth = DISK_LEAF_NODE_LEVEL; - /* The last item, was the last in the leaf node. - * Read in the next block - */ - do - { - if (depth == INFO->tree_depth) - { - /* There are no more keys at all. - * Return a dummy item with MAX_KEY */ - ih = (struct item_head *) &BLOCKHEAD (LEAF)->blk_right_delim_key; - goto found; - } - depth++; -#ifdef REISERDEBUG - printf (" depth=%d, i=%d\n", depth, INFO->next_key_nr[depth]); -#endif /* REISERDEBUG */ - } - while (INFO->next_key_nr[depth] == 0); - - if (depth == INFO->tree_depth) - cache = ROOT; - else if (depth <= INFO->cached_slots) - cache = CACHE (depth); - else - { - cache = read_tree_node (INFO->blocks[depth], depth); - if (! cache) - return 0; - } - - do - { - int nr_item = BLOCKHEAD (cache)->blk_nr_item; - int key_nr = INFO->next_key_nr[depth]++; -#ifdef REISERDEBUG - printf (" depth=%d, i=%d/%d\n", depth, key_nr, nr_item); -#endif /* REISERDEBUG */ - if (key_nr == nr_item) - /* This is the last item in this block, set the next_key_nr to 0 */ - INFO->next_key_nr[depth] = 0; - - cache = read_tree_node (DC (cache)[key_nr].dc_block_number, --depth); - if (! cache) - return 0; - } - while (depth > DISK_LEAF_NODE_LEVEL); - - ih = ITEMHEAD; - } - found: - INFO->current_ih = ih; - INFO->current_item = &LEAF[ih->ih_item_location]; -#ifdef REISERDEBUG - printf (" new ih: key %d:%d:%d:%d version:%d\n", - INFO->current_ih->ih_key.k_dir_id, - INFO->current_ih->ih_key.k_objectid, - INFO->current_ih->ih_key.u.v1.k_offset, - INFO->current_ih->ih_key.u.v1.k_uniqueness, - INFO->current_ih->ih_version); -#endif /* REISERDEBUG */ - return 1; -} - -/* preconditions: reiserfs_mount already executed, therefore - * INFO block is valid - * returns: 0 if error (errnum is set), - * nonzero iff we were able to find the key successfully. - * postconditions: on a nonzero return, the current_ih and - * current_item fields describe the key that equals the - * searched key. INFO->next_key contains the next key after - * the searched key. - * side effects: messes around with the cache. - */ -static int -search_stat (__u32 dir_id, __u32 objectid) -{ - char *cache; - int depth; - int nr_item; - int i; - struct item_head *ih; -#ifdef REISERDEBUG - printf ("search_stat:\n key %d:%d:0:0\n", dir_id, objectid); -#endif /* REISERDEBUG */ - - depth = INFO->tree_depth; - cache = ROOT; - - while (depth > DISK_LEAF_NODE_LEVEL) - { - struct key *key; - nr_item = BLOCKHEAD (cache)->blk_nr_item; - - key = KEY (cache); - - for (i = 0; i < nr_item; i++) - { - if (key->k_dir_id > dir_id - || (key->k_dir_id == dir_id - && (key->k_objectid > objectid - || (key->k_objectid == objectid - && (key->u.v1.k_offset - | key->u.v1.k_uniqueness) > 0)))) - break; - key++; - } - -#ifdef REISERDEBUG - printf (" depth=%d, i=%d/%d\n", depth, i, nr_item); -#endif /* REISERDEBUG */ - INFO->next_key_nr[depth] = (i == nr_item) ? 0 : i+1; - cache = read_tree_node (DC (cache)[i].dc_block_number, --depth); - if (! cache) - return 0; - } - - /* cache == LEAF */ - nr_item = BLOCKHEAD (LEAF)->blk_nr_item; - ih = ITEMHEAD; - for (i = 0; i < nr_item; i++) - { - if (ih->ih_key.k_dir_id == dir_id - && ih->ih_key.k_objectid == objectid - && ih->ih_key.u.v1.k_offset == 0 - && ih->ih_key.u.v1.k_uniqueness == 0) - { -#ifdef REISERDEBUG - printf (" depth=%d, i=%d/%d\n", depth, i, nr_item); -#endif /* REISERDEBUG */ - INFO->current_ih = ih; - INFO->current_item = &LEAF[ih->ih_item_location]; - return 1; - } - ih++; - } - errnum = ERR_FSYS_CORRUPT; - return 0; -} - -int -reiserfs_read (char *buf, int len) -{ - unsigned int blocksize; - unsigned int offset; - unsigned int to_read; - char *prev_buf = buf; - -#ifdef REISERDEBUG - printf ("reiserfs_read: filepos=%d len=%d, offset=%x:%x\n", - filepos, len, (__u64) IH_KEY_OFFSET (INFO->current_ih) - 1); -#endif /* REISERDEBUG */ - - if (INFO->current_ih->ih_key.k_objectid != INFO->fileinfo.k_objectid - || IH_KEY_OFFSET (INFO->current_ih) > filepos + 1) - { - search_stat (INFO->fileinfo.k_dir_id, INFO->fileinfo.k_objectid); - goto get_next_key; - } - - while (! errnum) - { - if (INFO->current_ih->ih_key.k_objectid != INFO->fileinfo.k_objectid) - break; - - offset = filepos - IH_KEY_OFFSET (INFO->current_ih) + 1; - blocksize = INFO->current_ih->ih_item_len; - -#ifdef REISERDEBUG - printf (" loop: filepos=%d len=%d, offset=%d blocksize=%d\n", - filepos, len, offset, blocksize); -#endif /* REISERDEBUG */ - - if (IH_KEY_ISTYPE(INFO->current_ih, TYPE_DIRECT) - && offset < blocksize) - { -#ifdef REISERDEBUG - printf ("direct_read: offset=%d, blocksize=%d\n", - offset, blocksize); -#endif /* REISERDEBUG */ - to_read = blocksize - offset; - if (to_read > len) - to_read = len; - - if (disk_read_hook != NULL) - { - disk_read_func = disk_read_hook; - - block_read (INFO->blocks[DISK_LEAF_NODE_LEVEL], - (INFO->current_item - LEAF + offset), to_read, buf); - - disk_read_func = NULL; - } - else - memcpy (buf, INFO->current_item + offset, to_read); - goto update_buf_len; - } - else if (IH_KEY_ISTYPE(INFO->current_ih, TYPE_INDIRECT)) - { - blocksize = (blocksize >> 2) << INFO->fullblocksize_shift; -#ifdef REISERDEBUG - printf ("indirect_read: offset=%d, blocksize=%d\n", - offset, blocksize); -#endif /* REISERDEBUG */ - - while (offset < blocksize) - { - __u32 blocknr = ((__u32 *) INFO->current_item) - [offset >> INFO->fullblocksize_shift]; - int blk_offset = offset & (INFO->blocksize-1); - - to_read = INFO->blocksize - blk_offset; - if (to_read > len) - to_read = len; - - disk_read_func = disk_read_hook; - - /* Journal is only for meta data. Data blocks can be read - * directly without using block_read - */ - devread (blocknr << INFO->blocksize_shift, - blk_offset, to_read, buf); - - disk_read_func = NULL; - update_buf_len: - len -= to_read; - buf += to_read; - offset += to_read; - filepos += to_read; - if (len == 0) - goto done; - } - } - get_next_key: - next_key (); - } - done: - return errnum ? 0 : buf - prev_buf; -} - - -/* preconditions: reiserfs_mount already executed, therefore - * INFO block is valid - * returns: 0 if error, nonzero iff we were able to find the file successfully - * postconditions: on a nonzero return, INFO->fileinfo contains the info - * of the file we were trying to look up, filepos is 0 and filemax is - * the size of the file. - */ -int -reiserfs_dir (char *dirname) -{ - struct reiserfs_de_head *de_head; - char *rest, ch; - __u32 dir_id, objectid, parent_dir_id = 0, parent_objectid = 0; -#ifndef STAGE1_5 - int do_possibilities = 0; -#endif /* ! STAGE1_5 */ - char linkbuf[PATH_MAX]; /* buffer for following symbolic links */ - int link_count = 0; - int mode; - - dir_id = REISERFS_ROOT_PARENT_OBJECTID; - objectid = REISERFS_ROOT_OBJECTID; - - while (1) - { -#ifdef REISERDEBUG - printf ("dirname=%s\n", dirname); -#endif /* REISERDEBUG */ - - /* Search for the stat info first. */ - if (! search_stat (dir_id, objectid)) - return 0; - -#ifdef REISERDEBUG - printf ("sd_mode=%x sd_size=%d\n", - ((struct stat_data *) INFO->current_item)->sd_mode, - ((struct stat_data *) INFO->current_item)->sd_size); -#endif /* REISERDEBUG */ - - mode = ((struct stat_data *) INFO->current_item)->sd_mode; - - /* If we've got a symbolic link, then chase it. */ - if (S_ISLNK (mode)) - { - int len; - if (++link_count > MAX_LINK_COUNT) - { - errnum = ERR_SYMLINK_LOOP; - return 0; - } - - /* Get the symlink size. */ - filemax = ((struct stat_data *) INFO->current_item)->sd_size; - - /* Find out how long our remaining name is. */ - len = 0; - while (dirname[len] && !isspace (dirname[len])) - len++; - - if (filemax + len > sizeof (linkbuf) - 1) - { - errnum = ERR_FILELENGTH; - return 0; - } - - /* Copy the remaining name to the end of the symlink data. - Note that DIRNAME and LINKBUF may overlap! */ - grub_memmove (linkbuf + filemax, dirname, len+1); - - INFO->fileinfo.k_dir_id = dir_id; - INFO->fileinfo.k_objectid = objectid; - filepos = 0; - if (! next_key () - || reiserfs_read (linkbuf, filemax) != filemax) - { - if (! errnum) - errnum = ERR_FSYS_CORRUPT; - return 0; - } - -#ifdef REISERDEBUG - printf ("symlink=%s\n", linkbuf); -#endif /* REISERDEBUG */ - - dirname = linkbuf; - if (*dirname == '/') - { - /* It's an absolute link, so look it up in root. */ - dir_id = REISERFS_ROOT_PARENT_OBJECTID; - objectid = REISERFS_ROOT_OBJECTID; - } - else - { - /* Relative, so look it up in our parent directory. */ - dir_id = parent_dir_id; - objectid = parent_objectid; - } - - /* Now lookup the new name. */ - continue; - } - - /* if we have a real file (and we're not just printing possibilities), - then this is where we want to exit */ - - if (! *dirname || isspace (*dirname)) - { - if (! S_ISREG (mode)) - { - errnum = ERR_BAD_FILETYPE; - return 0; - } - - filepos = 0; - filemax = ((struct stat_data *) INFO->current_item)->sd_size; - - /* If this is a new stat data and size is > 4GB set filemax to - * maximum - */ - if (INFO->current_ih->ih_version == ITEM_VERSION_2 - && ((struct stat_data *) INFO->current_item)->sd_size_hi > 0) - filemax = 0xffffffff; - - INFO->fileinfo.k_dir_id = dir_id; - INFO->fileinfo.k_objectid = objectid; - return next_key (); - } - - /* continue with the file/directory name interpretation */ - while (*dirname == '/') - dirname++; - if (! S_ISDIR (mode)) - { - errnum = ERR_BAD_FILETYPE; - return 0; - } - for (rest = dirname; (ch = *rest) && ! isspace (ch) && ch != '/'; rest++); - *rest = 0; - -# ifndef STAGE1_5 - if (print_possibilities && ch != '/') - do_possibilities = 1; -# endif /* ! STAGE1_5 */ - - while (1) - { - char *name_end; - int num_entries; - - if (! next_key ()) - return 0; -#ifdef REISERDEBUG - printf ("ih: key %d:%d:%d:%d version:%d\n", - INFO->current_ih->ih_key.k_dir_id, - INFO->current_ih->ih_key.k_objectid, - INFO->current_ih->ih_key.u.v1.k_offset, - INFO->current_ih->ih_key.u.v1.k_uniqueness, - INFO->current_ih->ih_version); -#endif /* REISERDEBUG */ - - if (INFO->current_ih->ih_key.k_objectid != objectid) - break; - - name_end = INFO->current_item + INFO->current_ih->ih_item_len; - de_head = (struct reiserfs_de_head *) INFO->current_item; - num_entries = INFO->current_ih->u.ih_entry_count; - while (num_entries > 0) - { - char *filename = INFO->current_item + de_head->deh_location; - char tmp = *name_end; - if ((de_head->deh_state & DEH_Visible)) - { - int cmp; - /* Directory names in ReiserFS are not null - * terminated. We write a temporary 0 behind it. - * NOTE: that this may overwrite the first block in - * the tree cache. That doesn't hurt as long as we - * don't call next_key () in between. - */ - *name_end = 0; - cmp = substring (dirname, filename); - *name_end = tmp; -# ifndef STAGE1_5 - if (do_possibilities) - { - if (cmp <= 0) - { - if (print_possibilities > 0) - print_possibilities = -print_possibilities; - *name_end = 0; - print_a_completion (filename); - *name_end = tmp; - } - } - else -# endif /* ! STAGE1_5 */ - if (cmp == 0) - goto found; - } - /* The beginning of this name marks the end of the next name. - */ - name_end = filename; - de_head++; - num_entries--; - } - } - -# ifndef STAGE1_5 - if (print_possibilities < 0) - return 1; -# endif /* ! STAGE1_5 */ - - errnum = ERR_FILE_NOT_FOUND; - *rest = ch; - return 0; - - found: - - *rest = ch; - dirname = rest; - - parent_dir_id = dir_id; - parent_objectid = objectid; - dir_id = de_head->deh_dir_id; - objectid = de_head->deh_objectid; - } -} - -int -reiserfs_embed (int *start_sector, int needed_sectors) -{ - struct reiserfs_super_block super; - int num_sectors; - - if (! devread (REISERFS_DISK_OFFSET_IN_BYTES >> SECTOR_BITS, 0, - sizeof (struct reiserfs_super_block), (char *) &super)) - return 0; - - *start_sector = 1; /* reserve first sector for stage1 */ - if ((substring (REISERFS_SUPER_MAGIC_STRING, super.s_magic) <= 0 - || substring (REISER2FS_SUPER_MAGIC_STRING, super.s_magic) <= 0 - || substring (REISER3FS_SUPER_MAGIC_STRING, super.s_magic) <= 0) - && (/* check that this is not a super block copy inside - * the journal log */ - super.s_journal_block * super.s_blocksize - > REISERFS_DISK_OFFSET_IN_BYTES)) - num_sectors = (REISERFS_DISK_OFFSET_IN_BYTES >> SECTOR_BITS) - 1; - else - num_sectors = (REISERFS_OLD_DISK_OFFSET_IN_BYTES >> SECTOR_BITS) - 1; - - return (needed_sectors <= num_sectors); -} -#endif /* FSYS_REISERFS */ diff --git a/stage2/fsys_ufs2.c b/stage2/fsys_ufs2.c deleted file mode 100644 index 3b6431333..000000000 --- a/stage2/fsys_ufs2.c +++ /dev/null @@ -1,331 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000, 2001 Free Software Foundation, Inc. - * Copyright (c) 2004 Valery Hromov - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* - * Elements of this file were originally from the FreeBSD "biosboot" - * bootloader file "disk.c" dated 4/12/95. - * - * The license and header comments from that file are included here. - */ - -/* - * Mach Operating System - * Copyright (c) 1992, 1991 Carnegie Mellon University - * All Rights Reserved. - * - * Permission to use, copy, modify and distribute this software and its - * documentation is hereby granted, provided that both the copyright - * notice and this permission notice appear in all copies of the - * software, derivative works or modified versions, and any portions - * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" - * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR - * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * - * Carnegie Mellon requests users of this software to return to - * - * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU - * School of Computer Science - * Carnegie Mellon University - * Pittsburgh PA 15213-3890 - * - * any improvements or extensions that they make and grant Carnegie Mellon - * the rights to redistribute these changes. - * - * from: Mach, Revision 2.2 92/04/04 11:35:49 rpd - * $Id$ - */ - -#ifdef FSYS_UFS2 - -#include "shared.h" -#include "filesys.h" - -#include "ufs2.h" - -/* used for filesystem map blocks */ -static int mapblock; -static int mapblock_offset; -static int mapblock_bsize; - -static int sblock_try[] = SBLOCKSEARCH; -static ufs2_daddr_t sblockloc; -static int type; - -/* pointer to superblock */ -#define SUPERBLOCK ((struct fs *) ( FSYS_BUF + 8192 )) - -#define INODE_UFS2 ((struct ufs2_dinode *) ( FSYS_BUF + 16384 )) - -#define MAPBUF ( FSYS_BUF + 24576 ) -#define MAPBUF_LEN 8192 - -int -ufs2_mount (void) -{ - int retval = 0; - int i; - - sblockloc = -1; - type = 0; - - if (! (((current_drive & 0x80) || (current_slice != 0)) - && ! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_BSDFFS))) - { - for (i = 0; sblock_try[i] != -1; ++i) - { - if (! (part_length < (sblock_try[i] + (SBLOCKSIZE / DEV_BSIZE)) - || ! devread (0, sblock_try[i], SBLOCKSIZE, (char *) SUPERBLOCK))) - { - if (SUPERBLOCK->fs_magic == FS_UFS2_MAGIC /* && - (SUPERBLOCK->fs_sblockloc == sblockloc || - (SUPERBLOCK->fs_old_flags & FS_FLAGS_UPDATED) == 0)*/) - { - type = 2; - } - else - { - continue; - } - - retval = 1; - sblockloc = sblock_try[i]; - break; - } - } - } - - mapblock = -1; - mapblock_offset = -1; - - return retval; -} - -static grub_int64_t -block_map (int file_block) -{ - int bnum, offset, bsize; - - if (file_block < NDADDR) - return (INODE_UFS2->di_db[file_block]); - - /* If the blockmap loaded does not include FILE_BLOCK, - load a new blockmap. */ - - if ((bnum = fsbtodb (SUPERBLOCK, INODE_UFS2->di_ib[0])) != mapblock - || (mapblock_offset <= bnum && bnum <= mapblock_offset + mapblock_bsize)) - { - if (MAPBUF_LEN < SUPERBLOCK->fs_bsize) - { - offset = ((file_block - NDADDR) % NINDIR (SUPERBLOCK)); - bsize = MAPBUF_LEN; - - if (offset + MAPBUF_LEN > SUPERBLOCK->fs_bsize) - offset = (SUPERBLOCK->fs_bsize - MAPBUF_LEN) / sizeof (int); - } - else - { - bsize = SUPERBLOCK->fs_bsize; - offset = 0; - } - - if (! devread (bnum, offset * sizeof (int), bsize, (char *) MAPBUF)) - { - mapblock = -1; - mapblock_bsize = -1; - mapblock_offset = -1; - errnum = ERR_FSYS_CORRUPT; - return -1; - } - - mapblock = bnum; - mapblock_bsize = bsize; - mapblock_offset = offset; - } - - return (((grub_int64_t *) MAPBUF)[((file_block - NDADDR) % NINDIR (SUPERBLOCK)) - - mapblock_offset]); -} - -int -ufs2_read (char *buf, int len) -{ - int logno, off, size, ret = 0; - grub_int64_t map; - - while (len && !errnum) - { - off = blkoff (SUPERBLOCK, filepos); - logno = lblkno (SUPERBLOCK, filepos); - size = blksize (SUPERBLOCK, INODE_UFS2, logno); - - if ((map = block_map (logno)) < 0) - break; - - size -= off; - - if (size > len) - size = len; - - disk_read_func = disk_read_hook; - - devread (fsbtodb (SUPERBLOCK, map), off, size, buf); - - disk_read_func = NULL; - - buf += size; - len -= size; - filepos += size; - ret += size; - } - - if (errnum) - ret = 0; - - return ret; -} - -int -ufs2_dir (char *dirname) -{ - char *rest, ch; - int block, off, loc, ino = ROOTINO; - grub_int64_t map; - struct direct *dp; - -/* main loop to find destination inode */ -loop: - - /* load current inode (defaults to the root inode) */ - - if (!devread (fsbtodb (SUPERBLOCK, ino_to_fsba (SUPERBLOCK, ino)), - ino % (SUPERBLOCK->fs_inopb) * sizeof (struct ufs2_dinode), - sizeof (struct ufs2_dinode), (char *) INODE_UFS2)) - return 0; /* XXX what return value? */ - - /* if we have a real file (and we're not just printing possibilities), - then this is where we want to exit */ - - if (!*dirname || isspace (*dirname)) - { - if ((INODE_UFS2->di_mode & IFMT) != IFREG) - { - errnum = ERR_BAD_FILETYPE; - return 0; - } - - filemax = INODE_UFS2->di_size; - - /* incomplete implementation requires this! */ - fsmax = (NDADDR + NINDIR (SUPERBLOCK)) * SUPERBLOCK->fs_bsize; - return 1; - } - - /* continue with file/directory name interpretation */ - - while (*dirname == '/') - dirname++; - - if (!(INODE_UFS2->di_size) || ((INODE_UFS2->di_mode & IFMT) != IFDIR)) - { - errnum = ERR_BAD_FILETYPE; - return 0; - } - - for (rest = dirname; (ch = *rest) && !isspace (ch) && ch != '/'; rest++); - - *rest = 0; - loc = 0; - - /* loop for reading a the entries in a directory */ - - do - { - if (loc >= INODE_UFS2->di_size) - { - if (print_possibilities < 0) - return 1; - - errnum = ERR_FILE_NOT_FOUND; - *rest = ch; - return 0; - } - - if (!(off = blkoff (SUPERBLOCK, loc))) - { - block = lblkno (SUPERBLOCK, loc); - - if ((map = block_map (block)) < 0 - || !devread (fsbtodb (SUPERBLOCK, map), 0, - blksize (SUPERBLOCK, INODE_UFS2, block), - (char *) FSYS_BUF)) - { - errnum = ERR_FSYS_CORRUPT; - *rest = ch; - return 0; - } - } - - dp = (struct direct *) (FSYS_BUF + off); - loc += dp->d_reclen; - -#ifndef STAGE1_5 - if (dp->d_ino && print_possibilities && ch != '/' - && (!*dirname || substring (dirname, dp->d_name) <= 0)) - { - if (print_possibilities > 0) - print_possibilities = -print_possibilities; - - print_a_completion (dp->d_name); - } -#endif /* STAGE1_5 */ - } - while (!dp->d_ino || (substring (dirname, dp->d_name) != 0 - || (print_possibilities && ch != '/'))); - - /* only get here if we have a matching directory entry */ - - ino = dp->d_ino; - *(dirname = rest) = ch; - - /* go back to main loop at top of function */ - goto loop; -} - -int -ufs2_embed (int *start_sector, int needed_sectors) -{ - /* XXX: I don't know if this is really correct. Someone who is - familiar with BSD should check for this. */ - if (needed_sectors > 14) - return 0; - - *start_sector = 1; -#if 1 - /* FIXME: Disable the embedding in FFS until someone checks if - the code above is correct. */ - return 0; -#else - return 1; -#endif -} - -#endif /* FSYS_UFS2 */ diff --git a/stage2/fsys_vstafs.c b/stage2/fsys_vstafs.c deleted file mode 100644 index a1167172b..000000000 --- a/stage2/fsys_vstafs.c +++ /dev/null @@ -1,252 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2001 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifdef FSYS_VSTAFS - -#include "shared.h" -#include "filesys.h" -#include "vstafs.h" - - -static void get_file_info (int sector); -static struct dir_entry *vstafs_readdir (long sector); -static struct dir_entry *vstafs_nextdir (void); - - -#define FIRST_SECTOR ((struct first_sector *) FSYS_BUF) -#define FILE_INFO ((struct fs_file *) (int) FIRST_SECTOR + 8192) -#define DIRECTORY_BUF ((struct dir_entry *) (int) FILE_INFO + 512) - -#define ROOT_SECTOR 1 - -/* - * In f_sector we store the sector number in which the information about - * the found file is. - */ -extern int filepos; -static int f_sector; - -int -vstafs_mount (void) -{ - int retval = 1; - - if( (((current_drive & 0x80) || (current_slice != 0)) - && current_slice != PC_SLICE_TYPE_VSTAFS) - || ! devread (0, 0, BLOCK_SIZE, (char *) FSYS_BUF) - || FIRST_SECTOR->fs_magic != 0xDEADFACE) - retval = 0; - - return retval; -} - -static void -get_file_info (int sector) -{ - devread (sector, 0, BLOCK_SIZE, (char *) FILE_INFO); -} - -static int curr_ext, current_direntry, current_blockpos; -static struct alloc *a; - -static struct dir_entry * -vstafs_readdir (long sector) -{ - /* - * Get some information from the current directory - */ - get_file_info (sector); - if (FILE_INFO->type != 2) - { - errnum = ERR_FILE_NOT_FOUND; - return 0; - } - - a = FILE_INFO->blocks; - curr_ext = 0; - devread (a[curr_ext].a_start, 0, 512, (char *) DIRECTORY_BUF); - current_direntry = 11; - current_blockpos = 0; - - return &DIRECTORY_BUF[10]; -} - -static struct dir_entry * -vstafs_nextdir (void) -{ - if (current_direntry > 15) - { - current_direntry = 0; - if (++current_blockpos > (a[curr_ext].a_len - 1)) - { - current_blockpos = 0; - curr_ext++; - } - - if (curr_ext < FILE_INFO->extents) - { - devread (a[curr_ext].a_start + current_blockpos, 0, - 512, (char *) DIRECTORY_BUF); - } - else - { - /* errnum =ERR_FILE_NOT_FOUND; */ - return 0; - } - } - - return &DIRECTORY_BUF[current_direntry++]; -} - -int -vstafs_dir (char *dirname) -{ - char *fn, ch; - struct dir_entry *d; - /* int l, i, s; */ - - /* - * Read in the entries of the current directory. - */ - f_sector = ROOT_SECTOR; - do - { - if (! (d = vstafs_readdir (f_sector))) - { - return 0; - } - - /* - * Find the file in the path - */ - while (*dirname == '/') dirname++; - fn = dirname; - while ((ch = *fn) && ch != '/' && ! isspace (ch)) fn++; - *fn = 0; - - do - { - if (d->name[0] == 0 || d->name[0] & 0x80) - continue; - -#ifndef STAGE1_5 - if (print_possibilities && ch != '/' - && (! *dirname || strcmp (dirname, d->name) <= 0)) - { - if (print_possibilities > 0) - print_possibilities = -print_possibilities; - - printf (" %s", d->name); - } -#endif - if (! grub_strcmp (dirname, d->name)) - { - f_sector = d->start; - get_file_info (f_sector); - filemax = FILE_INFO->len; - break; - } - } - while ((d =vstafs_nextdir ())); - - *(dirname = fn) = ch; - if (! d) - { - if (print_possibilities < 0) - { - putchar ('\n'); - return 1; - } - - errnum = ERR_FILE_NOT_FOUND; - return 0; - } - } - while (*dirname && ! isspace (ch)); - - return 1; -} - -int -vstafs_read (char *addr, int len) -{ - struct alloc *a; - int size, ret = 0, offset, curr_len = 0; - int curr_ext; - char extent; - int ext_size; - char *curr_pos; - - get_file_info (f_sector); - size = FILE_INFO->len-VSTAFS_START_DATA; - a = FILE_INFO->blocks; - - if (filepos > 0) - { - if (filepos < a[0].a_len * 512 - VSTAFS_START_DATA) - { - offset = filepos + VSTAFS_START_DATA; - extent = 0; - curr_len = a[0].a_len * 512 - offset - filepos; - } - else - { - ext_size = a[0].a_len * 512 - VSTAFS_START_DATA; - offset = filepos - ext_size; - extent = 1; - do - { - curr_len -= ext_size; - offset -= ext_size; - ext_size = a[extent+1].a_len * 512; - } - while (extent < FILE_INFO->extents && offset>ext_size); - } - } - else - { - offset = VSTAFS_START_DATA; - extent = 0; - curr_len = a[0].a_len * 512 - offset; - } - - curr_pos = addr; - if (curr_len > len) - curr_len = len; - - for (curr_ext=extent; - curr_ext < FILE_INFO->extents; - curr_len = a[curr_ext].a_len * 512, curr_pos += curr_len, curr_ext++) - { - ret += curr_len; - size -= curr_len; - if (size < 0) - { - ret += size; - curr_len += size; - } - - devread (a[curr_ext].a_start,offset, curr_len, curr_pos); - offset = 0; - } - - return ret; -} - -#endif /* FSYS_VSTAFS */ diff --git a/stage2/fsys_xfs.c b/stage2/fsys_xfs.c deleted file mode 100644 index 76c4c13b5..000000000 --- a/stage2/fsys_xfs.c +++ /dev/null @@ -1,624 +0,0 @@ -/* fsys_xfs.c - an implementation for the SGI XFS file system */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2001,2002,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifdef FSYS_XFS - -#include "shared.h" -#include "filesys.h" -#include "xfs.h" - -#define MAX_LINK_COUNT 8 - -typedef struct xad { - xfs_fileoff_t offset; - xfs_fsblock_t start; - xfs_filblks_t len; -} xad_t; - -struct xfs_info { - int bsize; - int dirbsize; - int isize; - unsigned int agblocks; - int bdlog; - int blklog; - int inopblog; - int agblklog; - int agnolog; - unsigned int nextents; - xfs_daddr_t next; - xfs_daddr_t daddr; - xfs_dablk_t forw; - xfs_dablk_t dablk; - xfs_bmbt_rec_32_t *xt; - xfs_bmbt_ptr_t ptr0; - int btnode_ptr0_off; - int i8param; - int dirpos; - int dirmax; - int blkoff; - int fpos; - xfs_ino_t rootino; -}; - -static struct xfs_info xfs; - -#define dirbuf ((char *)FSYS_BUF) -#define filebuf ((char *)FSYS_BUF + 4096) -#define inode ((xfs_dinode_t *)((char *)FSYS_BUF + 8192)) -#define icore (inode->di_core) - -#define mask32lo(n) (((xfs_uint32_t)1 << (n)) - 1) - -#define XFS_INO_MASK(k) ((xfs_uint32_t)((1ULL << (k)) - 1)) -#define XFS_INO_OFFSET_BITS xfs.inopblog -#define XFS_INO_AGBNO_BITS xfs.agblklog -#define XFS_INO_AGINO_BITS (xfs.agblklog + xfs.inopblog) -#define XFS_INO_AGNO_BITS xfs.agnolog - -static inline xfs_agblock_t -agino2agbno (xfs_agino_t agino) -{ - return agino >> XFS_INO_OFFSET_BITS; -} - -static inline xfs_agnumber_t -ino2agno (xfs_ino_t ino) -{ - return ino >> XFS_INO_AGINO_BITS; -} - -static inline xfs_agino_t -ino2agino (xfs_ino_t ino) -{ - return ino & XFS_INO_MASK(XFS_INO_AGINO_BITS); -} - -static inline int -ino2offset (xfs_ino_t ino) -{ - return ino & XFS_INO_MASK(XFS_INO_OFFSET_BITS); -} - -static inline __const__ xfs_uint16_t -le16 (xfs_uint16_t x) -{ - __asm__("xchgb %b0,%h0" \ - : "=q" (x) \ - : "0" (x)); \ - return x; -} - -static inline __const__ xfs_uint32_t -le32 (xfs_uint32_t x) -{ -#if 0 - /* 386 doesn't have bswap. */ - __asm__("bswap %0" : "=r" (x) : "0" (x)); -#else - /* This is slower but this works on all x86 architectures. */ - __asm__("xchgb %b0, %h0" \ - "\n\troll $16, %0" \ - "\n\txchgb %b0, %h0" \ - : "=q" (x) : "0" (x)); -#endif - return x; -} - -static inline __const__ xfs_uint64_t -le64 (xfs_uint64_t x) -{ - xfs_uint32_t h = x >> 32; - xfs_uint32_t l = x & ((1ULL<<32)-1); - return (((xfs_uint64_t)le32(l)) << 32) | ((xfs_uint64_t)(le32(h))); -} - - -static xfs_fsblock_t -xt_start (xfs_bmbt_rec_32_t *r) -{ - return (((xfs_fsblock_t)(le32 (r->l1) & mask32lo(9))) << 43) | - (((xfs_fsblock_t)le32 (r->l2)) << 11) | - (((xfs_fsblock_t)le32 (r->l3)) >> 21); -} - -static xfs_fileoff_t -xt_offset (xfs_bmbt_rec_32_t *r) -{ - return (((xfs_fileoff_t)le32 (r->l0) & - mask32lo(31)) << 23) | - (((xfs_fileoff_t)le32 (r->l1)) >> 9); -} - -static xfs_filblks_t -xt_len (xfs_bmbt_rec_32_t *r) -{ - return le32(r->l3) & mask32lo(21); -} - -static inline int -xfs_highbit32(xfs_uint32_t v) -{ - int i; - - if (--v) { - for (i = 0; i < 31; i++, v >>= 1) { - if (v == 0) - return i; - } - } - return 0; -} - -static int -isinxt (xfs_fileoff_t key, xfs_fileoff_t offset, xfs_filblks_t len) -{ - return (key >= offset) ? (key < offset + len ? 1 : 0) : 0; -} - -static xfs_daddr_t -agb2daddr (xfs_agnumber_t agno, xfs_agblock_t agbno) -{ - return ((xfs_fsblock_t)agno*xfs.agblocks + agbno) << xfs.bdlog; -} - -static xfs_daddr_t -fsb2daddr (xfs_fsblock_t fsbno) -{ - return agb2daddr ((xfs_agnumber_t)(fsbno >> xfs.agblklog), - (xfs_agblock_t)(fsbno & mask32lo(xfs.agblklog))); -} - -#undef offsetof -#define offsetof(t,m) ((int)&(((t *)0)->m)) - -static inline int -btroot_maxrecs (void) -{ - int tmp = icore.di_forkoff ? (icore.di_forkoff << 3) : xfs.isize; - - return (tmp - sizeof(xfs_bmdr_block_t) - offsetof(xfs_dinode_t, di_u)) / - (sizeof (xfs_bmbt_key_t) + sizeof (xfs_bmbt_ptr_t)); -} - -static int -di_read (xfs_ino_t ino) -{ - xfs_agino_t agino; - xfs_agnumber_t agno; - xfs_agblock_t agbno; - xfs_daddr_t daddr; - int offset; - - agno = ino2agno (ino); - agino = ino2agino (ino); - agbno = agino2agbno (agino); - offset = ino2offset (ino); - daddr = agb2daddr (agno, agbno); - - devread (daddr, offset*xfs.isize, xfs.isize, (char *)inode); - - xfs.ptr0 = *(xfs_bmbt_ptr_t *) - (inode->di_u.di_c + sizeof(xfs_bmdr_block_t) - + btroot_maxrecs ()*sizeof(xfs_bmbt_key_t)); - - return 1; -} - -static void -init_extents (void) -{ - xfs_bmbt_ptr_t ptr0; - xfs_btree_lblock_t h; - - switch (icore.di_format) { - case XFS_DINODE_FMT_EXTENTS: - xfs.xt = inode->di_u.di_bmx; - xfs.nextents = le32 (icore.di_nextents); - break; - case XFS_DINODE_FMT_BTREE: - ptr0 = xfs.ptr0; - for (;;) { - xfs.daddr = fsb2daddr (le64(ptr0)); - devread (xfs.daddr, 0, - sizeof(xfs_btree_lblock_t), (char *)&h); - if (!h.bb_level) { - xfs.nextents = le16(h.bb_numrecs); - xfs.next = fsb2daddr (le64(h.bb_rightsib)); - xfs.fpos = sizeof(xfs_btree_block_t); - return; - } - devread (xfs.daddr, xfs.btnode_ptr0_off, - sizeof(xfs_bmbt_ptr_t), (char *)&ptr0); - } - } -} - -static xad_t * -next_extent (void) -{ - static xad_t xad; - - switch (icore.di_format) { - case XFS_DINODE_FMT_EXTENTS: - if (xfs.nextents == 0) - return NULL; - break; - case XFS_DINODE_FMT_BTREE: - if (xfs.nextents == 0) { - xfs_btree_lblock_t h; - if (xfs.next == 0) - return NULL; - xfs.daddr = xfs.next; - devread (xfs.daddr, 0, sizeof(xfs_btree_lblock_t), (char *)&h); - xfs.nextents = le16(h.bb_numrecs); - xfs.next = fsb2daddr (le64(h.bb_rightsib)); - xfs.fpos = sizeof(xfs_btree_block_t); - } - /* Yeah, I know that's slow, but I really don't care */ - devread (xfs.daddr, xfs.fpos, sizeof(xfs_bmbt_rec_t), filebuf); - xfs.xt = (xfs_bmbt_rec_32_t *)filebuf; - xfs.fpos += sizeof(xfs_bmbt_rec_32_t); - } - xad.offset = xt_offset (xfs.xt); - xad.start = xt_start (xfs.xt); - xad.len = xt_len (xfs.xt); - ++xfs.xt; - --xfs.nextents; - - return &xad; -} - -/* - * Name lies - the function reads only first 100 bytes - */ -static void -xfs_dabread (void) -{ - xad_t *xad; - xfs_fileoff_t offset;; - - init_extents (); - while ((xad = next_extent ())) { - offset = xad->offset; - if (isinxt (xfs.dablk, offset, xad->len)) { - devread (fsb2daddr (xad->start + xfs.dablk - offset), - 0, 100, dirbuf); - break; - } - } -} - -static inline xfs_ino_t -sf_ino (char *sfe, int namelen) -{ - void *p = sfe + namelen + 3; - - return (xfs.i8param == 0) - ? le64(*(xfs_ino_t *)p) : le32(*(xfs_uint32_t *)p); -} - -static inline xfs_ino_t -sf_parent_ino (void) -{ - return (xfs.i8param == 0) - ? le64(*(xfs_ino_t *)(&inode->di_u.di_dir2sf.hdr.parent)) - : le32(*(xfs_uint32_t *)(&inode->di_u.di_dir2sf.hdr.parent)); -} - -static inline int -roundup8 (int n) -{ - return ((n+7)&~7); -} - -static char * -next_dentry (xfs_ino_t *ino) -{ - int namelen = 1; - int toread; - static char usual[2][3] = {".", ".."}; - static xfs_dir2_sf_entry_t *sfe; - char *name = usual[0]; - - if (xfs.dirpos >= xfs.dirmax) { - if (xfs.forw == 0) - return NULL; - xfs.dablk = xfs.forw; - xfs_dabread (); -#define h ((xfs_dir2_leaf_hdr_t *)dirbuf) - xfs.dirmax = le16 (h->count) - le16 (h->stale); - xfs.forw = le32 (h->info.forw); -#undef h - xfs.dirpos = 0; - } - - switch (icore.di_format) { - case XFS_DINODE_FMT_LOCAL: - switch (xfs.dirpos) { - case -2: - *ino = 0; - break; - case -1: - *ino = sf_parent_ino (); - ++name; - ++namelen; - sfe = (xfs_dir2_sf_entry_t *) - (inode->di_u.di_c - + sizeof(xfs_dir2_sf_hdr_t) - - xfs.i8param); - break; - default: - namelen = sfe->namelen; - *ino = sf_ino ((char *)sfe, namelen); - name = sfe->name; - sfe = (xfs_dir2_sf_entry_t *) - ((char *)sfe + namelen + 11 - xfs.i8param); - } - break; - case XFS_DINODE_FMT_BTREE: - case XFS_DINODE_FMT_EXTENTS: -#define dau ((xfs_dir2_data_union_t *)dirbuf) - for (;;) { - if (xfs.blkoff >= xfs.dirbsize) { - xfs.blkoff = sizeof(xfs_dir2_data_hdr_t); - filepos &= ~(xfs.dirbsize - 1); - filepos |= xfs.blkoff; - } - xfs_read (dirbuf, 4); - xfs.blkoff += 4; - if (dau->unused.freetag == XFS_DIR2_DATA_FREE_TAG) { - toread = roundup8 (le16(dau->unused.length)) - 4; - xfs.blkoff += toread; - filepos += toread; - continue; - } - break; - } - xfs_read ((char *)dirbuf + 4, 5); - *ino = le64 (dau->entry.inumber); - namelen = dau->entry.namelen; -#undef dau - toread = roundup8 (namelen + 11) - 9; - xfs_read (dirbuf, toread); - name = (char *)dirbuf; - xfs.blkoff += toread + 5; - } - ++xfs.dirpos; - name[namelen] = 0; - - return name; -} - -static char * -first_dentry (xfs_ino_t *ino) -{ - xfs.forw = 0; - switch (icore.di_format) { - case XFS_DINODE_FMT_LOCAL: - xfs.dirmax = inode->di_u.di_dir2sf.hdr.count; - xfs.i8param = inode->di_u.di_dir2sf.hdr.i8count ? 0 : 4; - xfs.dirpos = -2; - break; - case XFS_DINODE_FMT_EXTENTS: - case XFS_DINODE_FMT_BTREE: - filepos = 0; - xfs_read (dirbuf, sizeof(xfs_dir2_data_hdr_t)); - if (((xfs_dir2_data_hdr_t *)dirbuf)->magic == le32(XFS_DIR2_BLOCK_MAGIC)) { -#define tail ((xfs_dir2_block_tail_t *)dirbuf) - filepos = xfs.dirbsize - sizeof(*tail); - xfs_read (dirbuf, sizeof(*tail)); - xfs.dirmax = le32 (tail->count) - le32 (tail->stale); -#undef tail - } else { - xfs.dablk = (1ULL << 35) >> xfs.blklog; -#define h ((xfs_dir2_leaf_hdr_t *)dirbuf) -#define n ((xfs_da_intnode_t *)dirbuf) - for (;;) { - xfs_dabread (); - if ((n->hdr.info.magic == le16(XFS_DIR2_LEAFN_MAGIC)) - || (n->hdr.info.magic == le16(XFS_DIR2_LEAF1_MAGIC))) { - xfs.dirmax = le16 (h->count) - le16 (h->stale); - xfs.forw = le32 (h->info.forw); - break; - } - xfs.dablk = le32 (n->btree[0].before); - } -#undef n -#undef h - } - xfs.blkoff = sizeof(xfs_dir2_data_hdr_t); - filepos = xfs.blkoff; - xfs.dirpos = 0; - } - return next_dentry (ino); -} - -int -xfs_mount (void) -{ - xfs_sb_t super; - - if (!devread (0, 0, sizeof(super), (char *)&super) - || (le32(super.sb_magicnum) != XFS_SB_MAGIC) - || ((le16(super.sb_versionnum) - & XFS_SB_VERSION_NUMBITS) != XFS_SB_VERSION_4) ) { - return 0; - } - - xfs.bsize = le32 (super.sb_blocksize); - xfs.blklog = super.sb_blocklog; - xfs.bdlog = xfs.blklog - SECTOR_BITS; - xfs.rootino = le64 (super.sb_rootino); - xfs.isize = le16 (super.sb_inodesize); - xfs.agblocks = le32 (super.sb_agblocks); - xfs.dirbsize = xfs.bsize << super.sb_dirblklog; - - xfs.inopblog = super.sb_inopblog; - xfs.agblklog = super.sb_agblklog; - xfs.agnolog = xfs_highbit32 (le32(super.sb_agcount)); - - xfs.btnode_ptr0_off = - ((xfs.bsize - sizeof(xfs_btree_block_t)) / - (sizeof (xfs_bmbt_key_t) + sizeof (xfs_bmbt_ptr_t))) - * sizeof(xfs_bmbt_key_t) + sizeof(xfs_btree_block_t); - - return 1; -} - -int -xfs_read (char *buf, int len) -{ - xad_t *xad; - xfs_fileoff_t endofprev, endofcur, offset; - xfs_filblks_t xadlen; - int toread, startpos, endpos; - - if (icore.di_format == XFS_DINODE_FMT_LOCAL) { - grub_memmove (buf, inode->di_u.di_c + filepos, len); - filepos += len; - return len; - } - - startpos = filepos; - endpos = filepos + len; - endofprev = (xfs_fileoff_t)-1; - init_extents (); - while (len > 0 && (xad = next_extent ())) { - offset = xad->offset; - xadlen = xad->len; - if (isinxt (filepos >> xfs.blklog, offset, xadlen)) { - endofcur = (offset + xadlen) << xfs.blklog; - toread = (endofcur >= endpos) - ? len : (endofcur - filepos); - - disk_read_func = disk_read_hook; - devread (fsb2daddr (xad->start), - filepos - (offset << xfs.blklog), toread, buf); - disk_read_func = NULL; - - buf += toread; - len -= toread; - filepos += toread; - } else if (offset > endofprev) { - toread = ((offset << xfs.blklog) >= endpos) - ? len : ((offset - endofprev) << xfs.blklog); - len -= toread; - filepos += toread; - for (; toread; toread--) { - *buf++ = 0; - } - continue; - } - endofprev = offset + xadlen; - } - - return filepos - startpos; -} - -int -xfs_dir (char *dirname) -{ - xfs_ino_t ino, parent_ino, new_ino; - xfs_fsize_t di_size; - int di_mode; - int cmp, n, link_count; - char linkbuf[xfs.bsize]; - char *rest, *name, ch; - - parent_ino = ino = xfs.rootino; - link_count = 0; - for (;;) { - di_read (ino); - di_size = le64 (icore.di_size); - di_mode = le16 (icore.di_mode); - - if ((di_mode & IFMT) == IFLNK) { - if (++link_count > MAX_LINK_COUNT) { - errnum = ERR_SYMLINK_LOOP; - return 0; - } - if (di_size < xfs.bsize - 1) { - filepos = 0; - filemax = di_size; - n = xfs_read (linkbuf, filemax); - } else { - errnum = ERR_FILELENGTH; - return 0; - } - - ino = (linkbuf[0] == '/') ? xfs.rootino : parent_ino; - while (n < (xfs.bsize - 1) && (linkbuf[n++] = *dirname++)); - linkbuf[n] = 0; - dirname = linkbuf; - continue; - } - - if (!*dirname || isspace (*dirname)) { - if ((di_mode & IFMT) != IFREG) { - errnum = ERR_BAD_FILETYPE; - return 0; - } - filepos = 0; - filemax = di_size; - return 1; - } - - if ((di_mode & IFMT) != IFDIR) { - errnum = ERR_BAD_FILETYPE; - return 0; - } - - for (; *dirname == '/'; dirname++); - - for (rest = dirname; (ch = *rest) && !isspace (ch) && ch != '/'; rest++); - *rest = 0; - - name = first_dentry (&new_ino); - for (;;) { - cmp = (!*dirname) ? -1 : substring (dirname, name); -#ifndef STAGE1_5 - if (print_possibilities && ch != '/' && cmp <= 0) { - if (print_possibilities > 0) - print_possibilities = -print_possibilities; - print_a_completion (name); - } else -#endif - if (cmp == 0) { - parent_ino = ino; - if (new_ino) - ino = new_ino; - *(dirname = rest) = ch; - break; - } - name = next_dentry (&new_ino); - if (name == NULL) { - if (print_possibilities < 0) - return 1; - - errnum = ERR_FILE_NOT_FOUND; - *rest = ch; - return 0; - } - } - } -} - -#endif /* FSYS_XFS */ diff --git a/stage2/gunzip.c b/stage2/gunzip.c deleted file mode 100644 index 883508922..000000000 --- a/stage2/gunzip.c +++ /dev/null @@ -1,1235 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* - * Most of this file was originally the source file "inflate.c", written - * by Mark Adler. It has been very heavily modified. In particular, the - * original would run through the whole file at once, and this version can - * be stopped and restarted on any boundary during the decompression process. - * - * The license and header comments that file are included here. - */ - -/* inflate.c -- Not copyrighted 1992 by Mark Adler - version c10p1, 10 January 1993 */ - -/* You can do whatever you like with this source file, though I would - prefer that if you modify it and redistribute it that you include - comments to that effect with your name and the date. Thank you. - */ - -/* - Inflate deflated (PKZIP's method 8 compressed) data. The compression - method searches for as much of the current string of bytes (up to a - length of 258) in the previous 32K bytes. If it doesn't find any - matches (of at least length 3), it codes the next byte. Otherwise, it - codes the length of the matched string and its distance backwards from - the current position. There is a single Huffman code that codes both - single bytes (called "literals") and match lengths. A second Huffman - code codes the distance information, which follows a length code. Each - length or distance code actually represents a base value and a number - of "extra" (sometimes zero) bits to get to add to the base value. At - the end of each deflated block is a special end-of-block (EOB) literal/ - length code. The decoding process is basically: get a literal/length - code; if EOB then done; if a literal, emit the decoded byte; if a - length then get the distance and emit the referred-to bytes from the - sliding window of previously emitted data. - - There are (currently) three kinds of inflate blocks: stored, fixed, and - dynamic. The compressor deals with some chunk of data at a time, and - decides which method to use on a chunk-by-chunk basis. A chunk might - typically be 32K or 64K. If the chunk is uncompressible, then the - "stored" method is used. In this case, the bytes are simply stored as - is, eight bits per byte, with none of the above coding. The bytes are - preceded by a count, since there is no longer an EOB code. - - If the data is compressible, then either the fixed or dynamic methods - are used. In the dynamic method, the compressed data is preceded by - an encoding of the literal/length and distance Huffman codes that are - to be used to decode this block. The representation is itself Huffman - coded, and so is preceded by a description of that code. These code - descriptions take up a little space, and so for small blocks, there is - a predefined set of codes, called the fixed codes. The fixed method is - used if the block codes up smaller that way (usually for quite small - chunks), otherwise the dynamic method is used. In the latter case, the - codes are customized to the probabilities in the current block, and so - can code it much better than the pre-determined fixed codes. - - The Huffman codes themselves are decoded using a mutli-level table - lookup, in order to maximize the speed of decoding plus the speed of - building the decoding tables. See the comments below that precede the - lbits and dbits tuning parameters. - */ - - -/* - Notes beyond the 1.93a appnote.txt: - - 1. Distance pointers never point before the beginning of the output - stream. - 2. Distance pointers can point back across blocks, up to 32k away. - 3. There is an implied maximum of 7 bits for the bit length table and - 15 bits for the actual data. - 4. If only one code exists, then it is encoded using one bit. (Zero - would be more efficient, but perhaps a little confusing.) If two - codes exist, they are coded using one bit each (0 and 1). - 5. There is no way of sending zero distance codes--a dummy must be - sent if there are none. (History: a pre 2.0 version of PKZIP would - store blocks with no distance codes, but this was discovered to be - too harsh a criterion.) Valid only for 1.93a. 2.04c does allow - zero distance codes, which is sent as one code of zero bits in - length. - 6. There are up to 286 literal/length codes. Code 256 represents the - end-of-block. Note however that the static length tree defines - 288 codes just to fill out the Huffman codes. Codes 286 and 287 - cannot be used though, since there is no length base or extra bits - defined for them. Similarly, there are up to 30 distance codes. - However, static trees define 32 codes (all 5 bits) to fill out the - Huffman codes, but the last two had better not show up in the data. - 7. Unzip can check dynamic Huffman blocks for complete code sets. - The exception is that a single code would not be complete (see #4). - 8. The five bits following the block type is really the number of - literal codes sent minus 257. - 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits - (1+6+6). Therefore, to output three times the length, you output - three codes (1+1+1), whereas to output four times the same length, - you only need two codes (1+3). Hmm. - 10. In the tree reconstruction algorithm, Code = Code + Increment - only if BitLength(i) is not zero. (Pretty obvious.) - 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19) - 12. Note: length code 284 can represent 227-258, but length code 285 - really is 258. The last length deserves its own, short code - since it gets used a lot in very redundant files. The length - 258 is special since 258 - 3 (the min match length) is 255. - 13. The literal/length and distance code bit lengths are read as a - single stream of lengths. It is possible (and advantageous) for - a repeat code (16, 17, or 18) to go across the boundary between - the two sets of lengths. - */ - -#ifndef NO_DECOMPRESSION - -#include "shared.h" - -#include "filesys.h" - -/* so we can disable decompression */ -int no_decompression = 0; - -/* used to tell if "read" should be redirected to "gunzip_read" */ -int compressed_file; - -/* internal variables only */ -static int gzip_data_offset; -static int gzip_filepos; -static int gzip_filemax; -static int gzip_fsmax; -static int saved_filepos; -static unsigned long gzip_crc; - -/* internal extra variables for use of inflate code */ -static int block_type; -static int block_len; -static int last_block; -static int code_state; - - -/* Function prototypes */ -static void initialize_tables (void); - -/* - * Linear allocator. - */ - -static unsigned long linalloc_topaddr; - -static void * -linalloc (int size) -{ - linalloc_topaddr = (linalloc_topaddr - size) & ~3; - return (void *) linalloc_topaddr; -} - -static void -reset_linalloc (void) -{ - linalloc_topaddr = RAW_ADDR ((mbi.mem_upper << 10) + 0x100000); -} - - -/* internal variable swap function */ -static void -gunzip_swap_values (void) -{ - register int itmp; - - /* swap filepos */ - itmp = filepos; - filepos = gzip_filepos; - gzip_filepos = itmp; - - /* swap filemax */ - itmp = filemax; - filemax = gzip_filemax; - gzip_filemax = itmp; - - /* swap fsmax */ - itmp = fsmax; - fsmax = gzip_fsmax; - gzip_fsmax = itmp; -} - - -/* internal function for eating variable-length header fields */ -static int -bad_field (int len) -{ - char ch = 1; - int not_retval = 1; - - do - { - if (len >= 0) - { - if (!(len--)) - break; - } - else - { - if (!ch) - break; - } - } - while ((not_retval = grub_read (&ch, 1)) == 1); - - return (!not_retval); -} - - -/* Little-Endian defines for the 2-byte magic number for gzip files */ -#define GZIP_HDR_LE 0x8B1F -#define OLD_GZIP_HDR_LE 0x9E1F - -/* Compression methods (see algorithm.doc) */ -#define STORED 0 -#define COMPRESSED 1 -#define PACKED 2 -#define LZHED 3 -/* methods 4 to 7 reserved */ -#define DEFLATED 8 -#define MAX_METHODS 9 - -/* gzip flag byte */ -#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ -#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */ -#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ -#define ORIG_NAME 0x08 /* bit 3 set: original file name present */ -#define COMMENT 0x10 /* bit 4 set: file comment present */ -#define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */ -#define RESERVED 0xC0 /* bit 6,7: reserved */ - -#define UNSUPP_FLAGS (CONTINUATION|ENCRYPTED|RESERVED) - -/* inflate block codes */ -#define INFLATE_STORED 0 -#define INFLATE_FIXED 1 -#define INFLATE_DYNAMIC 2 - -typedef unsigned char uch; -typedef unsigned short ush; -typedef unsigned long ulg; - -/* - * Window Size - * - * This must be a power of two, and at least 32K for zip's deflate method - */ - -#define WSIZE 0x8000 - - -int -gunzip_test_header (void) -{ - unsigned char buf[10]; - - /* "compressed_file" is already reset to zero by this point */ - - /* - * This checks if the file is gzipped. If a problem occurs here - * (other than a real error with the disk) then we don't think it - * is a compressed file, and simply mark it as such. - */ - if (no_decompression - || grub_read (buf, 10) != 10 - || ((*((unsigned short *) buf) != GZIP_HDR_LE) - && (*((unsigned short *) buf) != OLD_GZIP_HDR_LE))) - { - filepos = 0; - return ! errnum; - } - - /* - * This does consistency checking on the header data. If a - * problem occurs from here on, then we have corrupt or otherwise - * bad data, and the error should be reported to the user. - */ - if (buf[2] != DEFLATED - || (buf[3] & UNSUPP_FLAGS) - || ((buf[3] & EXTRA_FIELD) - && (grub_read (buf, 2) != 2 - || bad_field (*((unsigned short *) buf)))) - || ((buf[3] & ORIG_NAME) && bad_field (-1)) - || ((buf[3] & COMMENT) && bad_field (-1))) - { - if (! errnum) - errnum = ERR_BAD_GZIP_HEADER; - - return 0; - } - - gzip_data_offset = filepos; - - filepos = filemax - 8; - - if (grub_read (buf, 8) != 8) - { - if (! errnum) - errnum = ERR_BAD_GZIP_HEADER; - - return 0; - } - - gzip_crc = *((unsigned long *) buf); - gzip_fsmax = gzip_filemax = *((unsigned long *) (buf + 4)); - - initialize_tables (); - - compressed_file = 1; - gunzip_swap_values (); - /* - * Now "gzip_*" values refer to the compressed data. - */ - - filepos = 0; - - return 1; -} - - -/* Huffman code lookup table entry--this entry is four bytes for machines - that have 16-bit pointers (e.g. PC's in the small or medium model). - Valid extra bits are 0..13. e == 15 is EOB (end of block), e == 16 - means that v is a literal, 16 < e < 32 means that v is a pointer to - the next table, which codes e - 16 bits, and lastly e == 99 indicates - an unused code. If a code with e == 99 is looked up, this implies an - error in the data. */ -struct huft -{ - uch e; /* number of extra bits or operation */ - uch b; /* number of bits in this code or subcode */ - union - { - ush n; /* literal, length base, or distance base */ - struct huft *t; /* pointer to next level of table */ - } - v; -}; - - -/* The inflate algorithm uses a sliding 32K byte window on the uncompressed - stream to find repeated byte strings. This is implemented here as a - circular buffer. The index is updated simply by incrementing and then - and'ing with 0x7fff (32K-1). */ -/* It is left to other modules to supply the 32K area. It is assumed - to be usable as if it were declared "uch slide[32768];" or as just - "uch *slide;" and then malloc'ed in the latter case. The definition - must be in unzip.h, included above. */ - - -/* sliding window in uncompressed data */ -static uch slide[WSIZE]; - -/* current position in slide */ -static unsigned wp; - - -/* Tables for deflate from PKZIP's appnote.txt. */ -static unsigned bitorder[] = -{ /* Order of the bit length code lengths */ - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; -static ush cplens[] = -{ /* Copy lengths for literal codes 257..285 */ - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, - 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; - /* note: see note #13 above about the 258 in this list. */ -static ush cplext[] = -{ /* Extra bits for literal codes 257..285 */ - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, - 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99}; /* 99==invalid */ -static ush cpdist[] = -{ /* Copy offsets for distance codes 0..29 */ - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, - 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, - 8193, 12289, 16385, 24577}; -static ush cpdext[] = -{ /* Extra bits for distance codes */ - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, - 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, - 12, 12, 13, 13}; - - -/* - Huffman code decoding is performed using a multi-level table lookup. - The fastest way to decode is to simply build a lookup table whose - size is determined by the longest code. However, the time it takes - to build this table can also be a factor if the data being decoded - is not very long. The most common codes are necessarily the - shortest codes, so those codes dominate the decoding time, and hence - the speed. The idea is you can have a shorter table that decodes the - shorter, more probable codes, and then point to subsidiary tables for - the longer codes. The time it costs to decode the longer codes is - then traded against the time it takes to make longer tables. - - This results of this trade are in the variables lbits and dbits - below. lbits is the number of bits the first level table for literal/ - length codes can decode in one step, and dbits is the same thing for - the distance codes. Subsequent tables are also less than or equal to - those sizes. These values may be adjusted either when all of the - codes are shorter than that, in which case the longest code length in - bits is used, or when the shortest code is *longer* than the requested - table size, in which case the length of the shortest code in bits is - used. - - There are two different values for the two tables, since they code a - different number of possibilities each. The literal/length table - codes 286 possible values, or in a flat code, a little over eight - bits. The distance table codes 30 possible values, or a little less - than five bits, flat. The optimum values for speed end up being - about one bit more than those, so lbits is 8+1 and dbits is 5+1. - The optimum values may differ though from machine to machine, and - possibly even between compilers. Your mileage may vary. - */ - - -static int lbits = 9; /* bits in base literal/length lookup table */ -static int dbits = 6; /* bits in base distance lookup table */ - - -/* If BMAX needs to be larger than 16, then h and x[] should be ulg. */ -#define BMAX 16 /* maximum bit length of any code (16 for explode) */ -#define N_MAX 288 /* maximum number of codes in any set */ - - -static unsigned hufts; /* track memory usage */ - - -/* Macros for inflate() bit peeking and grabbing. - The usage is: - - NEEDBITS(j) - x = b & mask_bits[j]; - DUMPBITS(j) - - where NEEDBITS makes sure that b has at least j bits in it, and - DUMPBITS removes the bits from b. The macros use the variable k - for the number of bits in b. Normally, b and k are register - variables for speed, and are initialized at the beginning of a - routine that uses these macros from a global bit buffer and count. - - If we assume that EOB will be the longest code, then we will never - ask for bits with NEEDBITS that are beyond the end of the stream. - So, NEEDBITS should not read any more bytes than are needed to - meet the request. Then no bytes need to be "returned" to the buffer - at the end of the last block. - - However, this assumption is not true for fixed blocks--the EOB code - is 7 bits, but the other literal/length codes can be 8 or 9 bits. - (The EOB code is shorter than other codes because fixed blocks are - generally short. So, while a block always has an EOB, many other - literal/length codes have a significantly lower probability of - showing up at all.) However, by making the first table have a - lookup of seven bits, the EOB code will be found in that first - lookup, and so will not require that too many bits be pulled from - the stream. - */ - -static ulg bb; /* bit buffer */ -static unsigned bk; /* bits in bit buffer */ - -static ush mask_bits[] = -{ - 0x0000, - 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, - 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff -}; - -#define NEEDBITS(n) do {while(k<(n)){b|=((ulg)get_byte())<>=(n);k-=(n);} while (0) - -#define INBUFSIZ 0x2000 - -static uch inbuf[INBUFSIZ]; -static int bufloc; - -static int -get_byte (void) -{ - if (filepos == gzip_data_offset || bufloc == INBUFSIZ) - { - bufloc = 0; - grub_read (inbuf, INBUFSIZ); - } - - return inbuf[bufloc++]; -} - -/* decompression global pointers */ -static struct huft *tl; /* literal/length code table */ -static struct huft *td; /* distance code table */ -static int bl; /* lookup bits for tl */ -static int bd; /* lookup bits for td */ - - -/* more function prototypes */ -static int huft_build (unsigned *, unsigned, unsigned, ush *, ush *, - struct huft **, int *); -static int inflate_codes_in_window (void); - - -/* Given a list of code lengths and a maximum table size, make a set of - tables to decode that set of codes. Return zero on success, one if - the given code set is incomplete (the tables are still built in this - case), two if the input is invalid (all zero length codes or an - oversubscribed set of lengths), and three if not enough memory. */ - -static int -huft_build (unsigned *b, /* code lengths in bits (all assumed <= BMAX) */ - unsigned n, /* number of codes (assumed <= N_MAX) */ - unsigned s, /* number of simple-valued codes (0..s-1) */ - ush * d, /* list of base values for non-simple codes */ - ush * e, /* list of extra bits for non-simple codes */ - struct huft **t, /* result: starting table */ - int *m) /* maximum lookup bits, returns actual */ -{ - unsigned a; /* counter for codes of length k */ - unsigned c[BMAX + 1]; /* bit length count table */ - unsigned f; /* i repeats in table every f entries */ - int g; /* maximum code length */ - int h; /* table level */ - register unsigned i; /* counter, current code */ - register unsigned j; /* counter */ - register int k; /* number of bits in current code */ - int l; /* bits per table (returned in m) */ - register unsigned *p; /* pointer into c[], b[], or v[] */ - register struct huft *q; /* points to current table */ - struct huft r; /* table entry for structure assignment */ - struct huft *u[BMAX]; /* table stack */ - unsigned v[N_MAX]; /* values in order of bit length */ - register int w; /* bits before this table == (l * h) */ - unsigned x[BMAX + 1]; /* bit offsets, then code stack */ - unsigned *xp; /* pointer into x */ - int y; /* number of dummy codes added */ - unsigned z; /* number of entries in current table */ - - /* Generate counts for each bit length */ - memset ((char *) c, 0, sizeof (c)); - p = b; - i = n; - do - { - c[*p]++; /* assume all entries <= BMAX */ - p++; /* Can't combine with above line (Solaris bug) */ - } - while (--i); - if (c[0] == n) /* null input--all zero length codes */ - { - *t = (struct huft *) NULL; - *m = 0; - return 0; - } - - /* Find minimum and maximum length, bound *m by those */ - l = *m; - for (j = 1; j <= BMAX; j++) - if (c[j]) - break; - k = j; /* minimum code length */ - if ((unsigned) l < j) - l = j; - for (i = BMAX; i; i--) - if (c[i]) - break; - g = i; /* maximum code length */ - if ((unsigned) l > i) - l = i; - *m = l; - - /* Adjust last length count to fill out codes, if needed */ - for (y = 1 << j; j < i; j++, y <<= 1) - if ((y -= c[j]) < 0) - return 2; /* bad input: more codes than bits */ - if ((y -= c[i]) < 0) - return 2; - c[i] += y; - - /* Generate starting offsets into the value table for each length */ - x[1] = j = 0; - p = c + 1; - xp = x + 2; - while (--i) - { /* note that i == g from above */ - *xp++ = (j += *p++); - } - - /* Make a table of values in order of bit lengths */ - p = b; - i = 0; - do - { - if ((j = *p++) != 0) - v[x[j]++] = i; - } - while (++i < n); - - /* Generate the Huffman codes and for each, make the table entries */ - x[0] = i = 0; /* first Huffman code is zero */ - p = v; /* grab values in bit order */ - h = -1; /* no tables yet--level -1 */ - w = -l; /* bits decoded == (l * h) */ - u[0] = (struct huft *) NULL; /* just to keep compilers happy */ - q = (struct huft *) NULL; /* ditto */ - z = 0; /* ditto */ - - /* go through the bit lengths (k already is bits in shortest code) */ - for (; k <= g; k++) - { - a = c[k]; - while (a--) - { - /* here i is the Huffman code of length k bits for value *p */ - /* make tables up to required level */ - while (k > w + l) - { - h++; - w += l; /* previous table always l bits */ - - /* compute minimum size table less than or equal to l bits */ - z = (z = g - w) > (unsigned) l ? l : z; /* upper limit on table size */ - if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */ - { /* too few codes for k-w bit table */ - f -= a + 1; /* deduct codes from patterns left */ - xp = c + k; - while (++j < z) /* try smaller tables up to z bits */ - { - if ((f <<= 1) <= *++xp) - break; /* enough codes to use up j bits */ - f -= *xp; /* else deduct codes from patterns */ - } - } - z = 1 << j; /* table entries for j-bit table */ - - /* allocate and link in new table */ - q = (struct huft *) linalloc ((z + 1) * sizeof (struct huft)); - - hufts += z + 1; /* track memory usage */ - *t = q + 1; /* link to list for huft_free() */ - *(t = &(q->v.t)) = (struct huft *) NULL; - u[h] = ++q; /* table starts after link */ - - /* connect to last table, if there is one */ - if (h) - { - x[h] = i; /* save pattern for backing up */ - r.b = (uch) l; /* bits to dump before this table */ - r.e = (uch) (16 + j); /* bits in this table */ - r.v.t = q; /* pointer to this table */ - j = i >> (w - l); /* (get around Turbo C bug) */ - u[h - 1][j] = r; /* connect to last table */ - } - } - - /* set up table entry in r */ - r.b = (uch) (k - w); - if (p >= v + n) - r.e = 99; /* out of values--invalid code */ - else if (*p < s) - { - r.e = (uch) (*p < 256 ? 16 : 15); /* 256 is end-of-block code */ - r.v.n = (ush) (*p); /* simple code is just the value */ - p++; /* one compiler does not like *p++ */ - } - else - { - r.e = (uch) e[*p - s]; /* non-simple--look up in lists */ - r.v.n = d[*p++ - s]; - } - - /* fill code-like entries with r */ - f = 1 << (k - w); - for (j = i >> w; j < z; j += f) - q[j] = r; - - /* backwards increment the k-bit code i */ - for (j = 1 << (k - 1); i & j; j >>= 1) - i ^= j; - i ^= j; - - /* backup over finished tables */ - while ((i & ((1 << w) - 1)) != x[h]) - { - h--; /* don't need to update q */ - w -= l; - } - } - } - - /* Return true (1) if we were given an incomplete table */ - return y != 0 && g != 1; -} - - -/* - * inflate (decompress) the codes in a deflated (compressed) block. - * Return an error code or zero if it all goes ok. - */ - -static unsigned inflate_n, inflate_d; - -static int -inflate_codes_in_window (void) -{ - register unsigned e; /* table entry flag/number of extra bits */ - unsigned n, d; /* length and index for copy */ - unsigned w; /* current window position */ - struct huft *t; /* pointer to table entry */ - unsigned ml, md; /* masks for bl and bd bits */ - register ulg b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - - /* make local copies of globals */ - d = inflate_d; - n = inflate_n; - b = bb; /* initialize bit buffer */ - k = bk; - w = wp; /* initialize window position */ - - /* inflate the coded data */ - ml = mask_bits[bl]; /* precompute masks for speed */ - md = mask_bits[bd]; - for (;;) /* do until end of block */ - { - if (!code_state) - { - NEEDBITS ((unsigned) bl); - if ((e = (t = tl + ((unsigned) b & ml))->e) > 16) - do - { - if (e == 99) - { - errnum = ERR_BAD_GZIP_DATA; - return 0; - } - DUMPBITS (t->b); - e -= 16; - NEEDBITS (e); - } - while ((e = (t = t->v.t + ((unsigned) b & mask_bits[e]))->e) > 16); - DUMPBITS (t->b); - - if (e == 16) /* then it's a literal */ - { - slide[w++] = (uch) t->v.n; - if (w == WSIZE) - break; - } - else - /* it's an EOB or a length */ - { - /* exit if end of block */ - if (e == 15) - { - block_len = 0; - break; - } - - /* get length of block to copy */ - NEEDBITS (e); - n = t->v.n + ((unsigned) b & mask_bits[e]); - DUMPBITS (e); - - /* decode distance of block to copy */ - NEEDBITS ((unsigned) bd); - if ((e = (t = td + ((unsigned) b & md))->e) > 16) - do - { - if (e == 99) - { - errnum = ERR_BAD_GZIP_DATA; - return 0; - } - DUMPBITS (t->b); - e -= 16; - NEEDBITS (e); - } - while ((e = (t = t->v.t + ((unsigned) b & mask_bits[e]))->e) - > 16); - DUMPBITS (t->b); - NEEDBITS (e); - d = w - t->v.n - ((unsigned) b & mask_bits[e]); - DUMPBITS (e); - code_state++; - } - } - - if (code_state) - { - /* do the copy */ - do - { - n -= (e = (e = WSIZE - ((d &= WSIZE - 1) > w ? d : w)) > n ? n - : e); - if (w - d >= e) - { - memmove (slide + w, slide + d, e); - w += e; - d += e; - } - else - /* purposefully use the overlap for extra copies here!! */ - { - while (e--) - slide[w++] = slide[d++]; - } - if (w == WSIZE) - break; - } - while (n); - - if (!n) - code_state--; - - /* did we break from the loop too soon? */ - if (w == WSIZE) - break; - } - } - - /* restore the globals from the locals */ - inflate_d = d; - inflate_n = n; - wp = w; /* restore global window pointer */ - bb = b; /* restore global bit buffer */ - bk = k; - - return !block_len; -} - - -/* get header for an inflated type 0 (stored) block. */ - -static void -init_stored_block (void) -{ - register ulg b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - - /* make local copies of globals */ - b = bb; /* initialize bit buffer */ - k = bk; - - /* go to byte boundary */ - DUMPBITS (k & 7); - - /* get the length and its complement */ - NEEDBITS (16); - block_len = ((unsigned) b & 0xffff); - DUMPBITS (16); - NEEDBITS (16); - if (block_len != (unsigned) ((~b) & 0xffff)) - errnum = ERR_BAD_GZIP_DATA; - DUMPBITS (16); - - /* restore global variables */ - bb = b; - bk = k; -} - - -/* get header for an inflated type 1 (fixed Huffman codes) block. We should - either replace this with a custom decoder, or at least precompute the - Huffman tables. */ - -static void -init_fixed_block () -{ - int i; /* temporary variable */ - unsigned l[288]; /* length list for huft_build */ - - /* set up literal table */ - for (i = 0; i < 144; i++) - l[i] = 8; - for (; i < 256; i++) - l[i] = 9; - for (; i < 280; i++) - l[i] = 7; - for (; i < 288; i++) /* make a complete, but wrong code set */ - l[i] = 8; - bl = 7; - if ((i = huft_build (l, 288, 257, cplens, cplext, &tl, &bl)) != 0) - { - errnum = ERR_BAD_GZIP_DATA; - return; - } - - /* set up distance table */ - for (i = 0; i < 30; i++) /* make an incomplete code set */ - l[i] = 5; - bd = 5; - if ((i = huft_build (l, 30, 0, cpdist, cpdext, &td, &bd)) > 1) - { - errnum = ERR_BAD_GZIP_DATA; - return; - } - - /* indicate we're now working on a block */ - code_state = 0; - block_len++; -} - - -/* get header for an inflated type 2 (dynamic Huffman codes) block. */ - -static void -init_dynamic_block (void) -{ - int i; /* temporary variables */ - unsigned j; - unsigned l; /* last length */ - unsigned m; /* mask for bit lengths table */ - unsigned n; /* number of lengths to get */ - unsigned nb; /* number of bit length codes */ - unsigned nl; /* number of literal/length codes */ - unsigned nd; /* number of distance codes */ - unsigned ll[286 + 30]; /* literal/length and distance code lengths */ - register ulg b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - - /* make local bit buffer */ - b = bb; - k = bk; - - /* read in table lengths */ - NEEDBITS (5); - nl = 257 + ((unsigned) b & 0x1f); /* number of literal/length codes */ - DUMPBITS (5); - NEEDBITS (5); - nd = 1 + ((unsigned) b & 0x1f); /* number of distance codes */ - DUMPBITS (5); - NEEDBITS (4); - nb = 4 + ((unsigned) b & 0xf); /* number of bit length codes */ - DUMPBITS (4); - if (nl > 286 || nd > 30) - { - errnum = ERR_BAD_GZIP_DATA; - return; - } - - /* read in bit-length-code lengths */ - for (j = 0; j < nb; j++) - { - NEEDBITS (3); - ll[bitorder[j]] = (unsigned) b & 7; - DUMPBITS (3); - } - for (; j < 19; j++) - ll[bitorder[j]] = 0; - - /* build decoding table for trees--single level, 7 bit lookup */ - bl = 7; - if ((i = huft_build (ll, 19, 19, NULL, NULL, &tl, &bl)) != 0) - { - errnum = ERR_BAD_GZIP_DATA; - return; - } - - /* read in literal and distance code lengths */ - n = nl + nd; - m = mask_bits[bl]; - i = l = 0; - while ((unsigned) i < n) - { - NEEDBITS ((unsigned) bl); - j = (td = tl + ((unsigned) b & m))->b; - DUMPBITS (j); - j = td->v.n; - if (j < 16) /* length of code in bits (0..15) */ - ll[i++] = l = j; /* save last length in l */ - else if (j == 16) /* repeat last length 3 to 6 times */ - { - NEEDBITS (2); - j = 3 + ((unsigned) b & 3); - DUMPBITS (2); - if ((unsigned) i + j > n) - { - errnum = ERR_BAD_GZIP_DATA; - return; - } - while (j--) - ll[i++] = l; - } - else if (j == 17) /* 3 to 10 zero length codes */ - { - NEEDBITS (3); - j = 3 + ((unsigned) b & 7); - DUMPBITS (3); - if ((unsigned) i + j > n) - { - errnum = ERR_BAD_GZIP_DATA; - return; - } - while (j--) - ll[i++] = 0; - l = 0; - } - else - /* j == 18: 11 to 138 zero length codes */ - { - NEEDBITS (7); - j = 11 + ((unsigned) b & 0x7f); - DUMPBITS (7); - if ((unsigned) i + j > n) - { - errnum = ERR_BAD_GZIP_DATA; - return; - } - while (j--) - ll[i++] = 0; - l = 0; - } - } - - /* free decoding table for trees */ - reset_linalloc (); - - /* restore the global bit buffer */ - bb = b; - bk = k; - - /* build the decoding tables for literal/length and distance codes */ - bl = lbits; - if ((i = huft_build (ll, nl, 257, cplens, cplext, &tl, &bl)) != 0) - { -#if 0 - if (i == 1) - printf ("gunzip: incomplete literal tree\n"); -#endif - - errnum = ERR_BAD_GZIP_DATA; - return; - } - bd = dbits; - if ((i = huft_build (ll + nl, nd, 0, cpdist, cpdext, &td, &bd)) != 0) - { -#if 0 - if (i == 1) - printf ("gunzip: incomplete distance tree\n"); -#endif - - errnum = ERR_BAD_GZIP_DATA; - return; - } - - /* indicate we're now working on a block */ - code_state = 0; - block_len++; -} - - -static void -get_new_block (void) -{ - register ulg b; /* bit buffer */ - register unsigned k; /* number of bits in bit buffer */ - - hufts = 0; - - /* make local bit buffer */ - b = bb; - k = bk; - - /* read in last block bit */ - NEEDBITS (1); - last_block = (int) b & 1; - DUMPBITS (1); - - /* read in block type */ - NEEDBITS (2); - block_type = (unsigned) b & 3; - DUMPBITS (2); - - /* restore the global bit buffer */ - bb = b; - bk = k; - - if (block_type == INFLATE_STORED) - init_stored_block (); - if (block_type == INFLATE_FIXED) - init_fixed_block (); - if (block_type == INFLATE_DYNAMIC) - init_dynamic_block (); -} - - -static void -inflate_window (void) -{ - /* initialize window */ - wp = 0; - - /* - * Main decompression loop. - */ - - while (wp < WSIZE && !errnum) - { - if (!block_len) - { - if (last_block) - break; - - get_new_block (); - } - - if (block_type > INFLATE_DYNAMIC) - errnum = ERR_BAD_GZIP_DATA; - - if (errnum) - return; - - /* - * Expand stored block here. - */ - if (block_type == INFLATE_STORED) - { - int w = wp; - - /* - * This is basically a glorified pass-through - */ - - while (block_len && w < WSIZE && !errnum) - { - slide[w++] = get_byte (); - block_len--; - } - - wp = w; - - continue; - } - - /* - * Expand other kind of block. - */ - - if (inflate_codes_in_window ()) - reset_linalloc (); - } - - saved_filepos += WSIZE; - - /* XXX do CRC calculation here! */ -} - - -static void -initialize_tables (void) -{ - saved_filepos = 0; - filepos = gzip_data_offset; - - /* initialize window, bit buffer */ - bk = 0; - bb = 0; - - /* reset partial decompression code */ - last_block = 0; - block_len = 0; - - /* reset memory allocation stuff */ - reset_linalloc (); -} - - -int -gunzip_read (char *buf, int len) -{ - int ret = 0; - - compressed_file = 0; - gunzip_swap_values (); - /* - * Now "gzip_*" values refer to the uncompressed data. - */ - - /* do we reset decompression to the beginning of the file? */ - if (saved_filepos > gzip_filepos + WSIZE) - initialize_tables (); - - /* - * This loop operates upon uncompressed data only. The only - * special thing it does is to make sure the decompression - * window is within the range of data it needs. - */ - - while (len > 0 && !errnum) - { - register int size; - register char *srcaddr; - - while (gzip_filepos >= saved_filepos) - inflate_window (); - - srcaddr = (char *) ((gzip_filepos & (WSIZE - 1)) + slide); - size = saved_filepos - gzip_filepos; - if (size > len) - size = len; - - memmove (buf, srcaddr, size); - - buf += size; - len -= size; - gzip_filepos += size; - ret += size; - } - - compressed_file = 1; - gunzip_swap_values (); - /* - * Now "gzip_*" values refer to the compressed data. - */ - - if (errnum) - ret = 0; - - return ret; -} - -#endif /* ! NO_DECOMPRESSION */ diff --git a/stage2/hercules.c b/stage2/hercules.c deleted file mode 100644 index 4c0280baf..000000000 --- a/stage2/hercules.c +++ /dev/null @@ -1,186 +0,0 @@ -/* hercules.c - hercules console interface */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2001,2002 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifdef SUPPORT_HERCULES - -#include -#include -#include - -/* The position of the cursor. */ -static int herc_x; -static int herc_y; - -static int herc_standard_color = A_NORMAL; -static int herc_normal_color = A_NORMAL; -static int herc_highlight_color = A_REVERSE; -static int herc_current_color = A_NORMAL; -static color_state herc_color_state = COLOR_STATE_STANDARD; -static int herc_cursor_state = 1; - -/* Write a byte to a port. */ -static inline void -outb (unsigned short port, unsigned char value) -{ - asm volatile ("outb %b0, %w1" : : "a" (value), "Nd" (port)); -} - -static void -herc_set_cursor (void) -{ - unsigned offset = herc_y * HERCULES_WIDTH + herc_x; - - outb (HERCULES_INDEX_REG, 0x0f); - outb (0x80, 0); - outb (HERCULES_DATA_REG, offset & 0xFF); - outb (0x80, 0); - - outb (HERCULES_INDEX_REG, 0x0e); - outb (0x80, 0); - outb (HERCULES_DATA_REG, offset >> 8); - outb (0x80, 0); -} - -void -hercules_putchar (int c) -{ - switch (c) - { - case '\b': - if (herc_x > 0) - herc_x--; - break; - - case '\n': - herc_y++; - break; - - case '\r': - herc_x = 0; - break; - - case '\a': - break; - - default: - { - volatile unsigned short *video - = (unsigned short *) HERCULES_VIDEO_ADDR; - - video[herc_y * HERCULES_WIDTH + herc_x] - = (herc_current_color << 8) | c; - herc_x++; - if (herc_x >= HERCULES_WIDTH) - { - herc_x = 0; - herc_y++; - } - } - break; - } - - if (herc_y >= HERCULES_HEIGHT) - { - volatile unsigned long *video = (unsigned long *) HERCULES_VIDEO_ADDR; - int i; - - herc_y = HERCULES_HEIGHT - 1; - grub_memmove ((char *) HERCULES_VIDEO_ADDR, - (char *) HERCULES_VIDEO_ADDR + HERCULES_WIDTH * 2, - HERCULES_WIDTH * (HERCULES_HEIGHT - 1) * 2); - for (i = HERCULES_WIDTH * (HERCULES_HEIGHT - 1) / 2; - i < HERCULES_WIDTH * HERCULES_HEIGHT / 2; - i++) - video[i] = 0x07200720; - } -} - -void -hercules_cls (void) -{ - int i; - volatile unsigned long *video = (unsigned long *) HERCULES_VIDEO_ADDR; - - for (i = 0; i < HERCULES_WIDTH * HERCULES_HEIGHT / 2; i++) - video[i] = 0x07200720; - - herc_x = herc_y = 0; - herc_set_cursor (); -} - -int -hercules_getxy (void) -{ - return (herc_x << 8) | herc_y; -} - -void -hercules_gotoxy (int x, int y) -{ - herc_x = x; - herc_y = y; - herc_set_cursor (); -} - -void -hercules_setcolorstate (color_state state) -{ - switch (state) { - case COLOR_STATE_STANDARD: - herc_current_color = herc_standard_color; - break; - case COLOR_STATE_NORMAL: - herc_current_color = herc_normal_color; - break; - case COLOR_STATE_HIGHLIGHT: - herc_current_color = herc_highlight_color; - break; - default: - herc_current_color = herc_standard_color; - break; - } - - herc_color_state = state; -} - -void -hercules_setcolor (int normal_color, int highlight_color) -{ - herc_normal_color = normal_color; - herc_highlight_color = highlight_color; - - hercules_setcolorstate (herc_color_state); -} - -int -hercules_setcursor (int on) -{ - int old_state = herc_cursor_state; - - outb (HERCULES_INDEX_REG, 0x0a); - outb (0x80, 0); - outb (HERCULES_DATA_REG, on ? 0 : (1 << 5)); - outb (0x80, 0); - herc_cursor_state = on; - - return old_state; -} - -#endif /* SUPPORT_HERCULES */ diff --git a/stage2/hercules.h b/stage2/hercules.h deleted file mode 100644 index aaf794fa1..000000000 --- a/stage2/hercules.h +++ /dev/null @@ -1,31 +0,0 @@ -/* hercules.h - hercules console interface */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2001 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef GRUB_HERCULES_HEADER -#define GRUB_HERCULES_HEADER 1 - -/* Macros. */ -#define HERCULES_VIDEO_ADDR RAW_ADDR (0xB0000) -#define HERCULES_WIDTH 80 -#define HERCULES_HEIGHT 25 -#define HERCULES_INDEX_REG 0x3b4 -#define HERCULES_DATA_REG 0x3b5 - -#endif /* ! GRUB_HERCULES_HEADER */ diff --git a/stage2/i386-elf.h b/stage2/i386-elf.h deleted file mode 100644 index 7162e3de8..000000000 --- a/stage2/i386-elf.h +++ /dev/null @@ -1,237 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2001,2002 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* 32-bit data types */ - -typedef unsigned long Elf32_Addr; -typedef unsigned short Elf32_Half; -typedef unsigned long Elf32_Off; -typedef signed long Elf32_Sword; -typedef unsigned long Elf32_Word; -/* "unsigned char" already exists */ - -/* ELF header */ -typedef struct -{ - -#define EI_NIDENT 16 - - /* first four characters are defined below */ -#define EI_MAG0 0 -#define ELFMAG0 0x7f -#define EI_MAG1 1 -#define ELFMAG1 'E' -#define EI_MAG2 2 -#define ELFMAG2 'L' -#define EI_MAG3 3 -#define ELFMAG3 'F' - -#define EI_CLASS 4 /* data sizes */ -#define ELFCLASS32 1 /* i386 -- up to 32-bit data sizes present */ - -#define EI_DATA 5 /* data type and ordering */ -#define ELFDATA2LSB 1 /* i386 -- LSB 2's complement */ - -#define EI_VERSION 6 /* version number. "e_version" must be the same */ -#define EV_CURRENT 1 /* current version number */ - -#define EI_OSABI 7 /* operating system/ABI indication */ -#define ELFOSABI_FREEBSD 9 - -#define EI_ABIVERSION 8 /* ABI version */ - -#define EI_PAD 9 /* from here in is just padding */ - -#define EI_BRAND 8 /* start of OS branding (This is - obviously illegal against the ELF - standard.) */ - - unsigned char e_ident[EI_NIDENT]; /* basic identification block */ - -#define ET_EXEC 2 /* we only care about executable types */ - Elf32_Half e_type; /* file types */ - -#define EM_386 3 /* i386 -- obviously use this one */ - Elf32_Half e_machine; /* machine types */ - Elf32_Word e_version; /* use same as "EI_VERSION" above */ - Elf32_Addr e_entry; /* entry point of the program */ - Elf32_Off e_phoff; /* program header table file offset */ - Elf32_Off e_shoff; /* section header table file offset */ - Elf32_Word e_flags; /* flags */ - Elf32_Half e_ehsize; /* elf header size in bytes */ - Elf32_Half e_phentsize; /* program header entry size */ - Elf32_Half e_phnum; /* number of entries in program header */ - Elf32_Half e_shentsize; /* section header entry size */ - Elf32_Half e_shnum; /* number of entries in section header */ - -#define SHN_UNDEF 0 -#define SHN_LORESERVE 0xff00 -#define SHN_LOPROC 0xff00 -#define SHN_HIPROC 0xff1f -#define SHN_ABS 0xfff1 -#define SHN_COMMON 0xfff2 -#define SHN_HIRESERVE 0xffff - Elf32_Half e_shstrndx; /* section header table index */ -} -Elf32_Ehdr; - - -#define BOOTABLE_I386_ELF(h) \ - ((h.e_ident[EI_MAG0] == ELFMAG0) & (h.e_ident[EI_MAG1] == ELFMAG1) \ - & (h.e_ident[EI_MAG2] == ELFMAG2) & (h.e_ident[EI_MAG3] == ELFMAG3) \ - & (h.e_ident[EI_CLASS] == ELFCLASS32) & (h.e_ident[EI_DATA] == ELFDATA2LSB) \ - & (h.e_ident[EI_VERSION] == EV_CURRENT) & (h.e_type == ET_EXEC) \ - & (h.e_machine == EM_386) & (h.e_version == EV_CURRENT)) - -/* section table - ? */ -typedef struct -{ - Elf32_Word sh_name; /* Section name (string tbl index) */ - Elf32_Word sh_type; /* Section type */ - Elf32_Word sh_flags; /* Section flags */ - Elf32_Addr sh_addr; /* Section virtual addr at execution */ - Elf32_Off sh_offset; /* Section file offset */ - Elf32_Word sh_size; /* Section size in bytes */ - Elf32_Word sh_link; /* Link to another section */ - Elf32_Word sh_info; /* Additional section information */ - Elf32_Word sh_addralign; /* Section alignment */ - Elf32_Word sh_entsize; /* Entry size if section holds table */ -} -Elf32_Shdr; - -/* symbol table - page 4-25, figure 4-15 */ -typedef struct -{ - Elf32_Word st_name; - Elf32_Addr st_value; - Elf32_Word st_size; - unsigned char st_info; - unsigned char st_other; - Elf32_Half st_shndx; -} -Elf32_Sym; - -/* symbol type and binding attributes - page 4-26 */ - -#define ELF32_ST_BIND(i) ((i) >> 4) -#define ELF32_ST_TYPE(i) ((i) & 0xf) -#define ELF32_ST_INFO(b,t) (((b)<<4)+((t)&0xf)) - -/* symbol binding - page 4-26, figure 4-16 */ - -#define STB_LOCAL 0 -#define STB_GLOBAL 1 -#define STB_WEAK 2 -#define STB_LOPROC 13 -#define STB_HIPROC 15 - -/* symbol types - page 4-28, figure 4-17 */ - -#define STT_NOTYPE 0 -#define STT_OBJECT 1 -#define STT_FUNC 2 -#define STT_SECTION 3 -#define STT_FILE 4 -#define STT_LOPROC 13 -#define STT_HIPROC 15 - - -/* Macros to split/combine relocation type and symbol page 4-32 */ - -#define ELF32_R_SYM(__i) ((__i)>>8) -#define ELF32_R_TYPE(__i) ((unsigned char) (__i)) -#define ELF32_R_INFO(__s, __t) (((__s)<<8) + (unsigned char) (__t)) - - -/* program header - page 5-2, figure 5-1 */ - -typedef struct -{ - Elf32_Word p_type; - Elf32_Off p_offset; - Elf32_Addr p_vaddr; - Elf32_Addr p_paddr; - Elf32_Word p_filesz; - Elf32_Word p_memsz; - Elf32_Word p_flags; - Elf32_Word p_align; -} -Elf32_Phdr; - -/* segment types - page 5-3, figure 5-2 */ - -#define PT_NULL 0 -#define PT_LOAD 1 -#define PT_DYNAMIC 2 -#define PT_INTERP 3 -#define PT_NOTE 4 -#define PT_SHLIB 5 -#define PT_PHDR 6 - -#define PT_LOPROC 0x70000000 -#define PT_HIPROC 0x7fffffff - -/* segment permissions - page 5-6 */ - -#define PF_X 0x1 -#define PF_W 0x2 -#define PF_R 0x4 -#define PF_MASKPROC 0xf0000000 - - -/* dynamic structure - page 5-15, figure 5-9 */ - -typedef struct -{ - Elf32_Sword d_tag; - union - { - Elf32_Word d_val; - Elf32_Addr d_ptr; - } - d_un; -} -Elf32_Dyn; - -/* Dynamic array tags - page 5-16, figure 5-10. */ - -#define DT_NULL 0 -#define DT_NEEDED 1 -#define DT_PLTRELSZ 2 -#define DT_PLTGOT 3 -#define DT_HASH 4 -#define DT_STRTAB 5 -#define DT_SYMTAB 6 -#define DT_RELA 7 -#define DT_RELASZ 8 -#define DT_RELAENT 9 -#define DT_STRSZ 10 -#define DT_SYMENT 11 -#define DT_INIT 12 -#define DT_FINI 13 -#define DT_SONAME 14 -#define DT_RPATH 15 -#define DT_SYMBOLIC 16 -#define DT_REL 17 -#define DT_RELSZ 18 -#define DT_RELENT 19 -#define DT_PLTREL 20 -#define DT_DEBUG 21 -#define DT_TEXTREL 22 -#define DT_JMPREL 23 diff --git a/stage2/imgact_aout.h b/stage2/imgact_aout.h deleted file mode 100644 index eb83b7ddb..000000000 --- a/stage2/imgact_aout.h +++ /dev/null @@ -1,158 +0,0 @@ - -/*- - * Copyright (c) 1992, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * from: @(#)exec.h 8.1 (Berkeley) 6/11/93 - * $Id$ - */ -/* - * 11/23/95 - Kludge to get "ntohl" null macro added. -- ESB - * - and for __LDPGSZ - */ - -#ifndef _IMGACT_AOUT_H_ -#define _IMGACT_AOUT_H_ - -/* XXX ESB */ -#define ntohl(x) ((x << 24) | ((x & 0xFF00) << 8) \ - | ((x >> 8) & 0xFF00) | (x >> 24)) -#define htonl(x) ntohl(x) -#define __LDPGSZ 0x1000 - -#define N_GETMAGIC(ex) \ - ( (ex).a_midmag & 0xffff ) -#define N_GETMID(ex) \ - ( (N_GETMAGIC_NET(ex) == ZMAGIC) ? N_GETMID_NET(ex) : \ - ((ex).a_midmag >> 16) & 0x03ff ) -#define N_GETFLAG(ex) \ - ( (N_GETMAGIC_NET(ex) == ZMAGIC) ? N_GETFLAG_NET(ex) : \ - ((ex).a_midmag >> 26) & 0x3f ) -#define N_SETMAGIC(ex,mag,mid,flag) \ - ( (ex).a_midmag = (((flag) & 0x3f) <<26) | (((mid) & 0x03ff) << 16) | \ - ((mag) & 0xffff) ) - -#define N_GETMAGIC_NET(ex) \ - (ntohl((ex).a_midmag) & 0xffff) -#define N_GETMID_NET(ex) \ - ((ntohl((ex).a_midmag) >> 16) & 0x03ff) -#define N_GETFLAG_NET(ex) \ - ((ntohl((ex).a_midmag) >> 26) & 0x3f) -#define N_SETMAGIC_NET(ex,mag,mid,flag) \ - ( (ex).a_midmag = htonl( (((flag)&0x3f)<<26) | (((mid)&0x03ff)<<16) | \ - (((mag)&0xffff)) ) ) - -#define N_ALIGN(ex,x) \ - (N_GETMAGIC(ex) == ZMAGIC || N_GETMAGIC(ex) == QMAGIC || \ - N_GETMAGIC_NET(ex) == ZMAGIC || N_GETMAGIC_NET(ex) == QMAGIC ? \ - ((x) + __LDPGSZ - 1) & ~(unsigned long)(__LDPGSZ - 1) : (x)) - -/* Valid magic number check. */ -#define N_BADMAG(ex) \ - (N_GETMAGIC(ex) != OMAGIC && N_GETMAGIC(ex) != NMAGIC && \ - N_GETMAGIC(ex) != ZMAGIC && N_GETMAGIC(ex) != QMAGIC && \ - N_GETMAGIC_NET(ex) != OMAGIC && N_GETMAGIC_NET(ex) != NMAGIC && \ - N_GETMAGIC_NET(ex) != ZMAGIC && N_GETMAGIC_NET(ex) != QMAGIC) - - -/* Address of the bottom of the text segment. */ -#define N_TXTADDR(ex) \ - ((N_GETMAGIC(ex) == OMAGIC || N_GETMAGIC(ex) == NMAGIC || \ - N_GETMAGIC(ex) == ZMAGIC) ? 0 : __LDPGSZ) - -/* Address of the bottom of the data segment. */ -#define N_DATADDR(ex) \ - N_ALIGN(ex, N_TXTADDR(ex) + (ex).a_text) - -/* Text segment offset. */ -#define N_TXTOFF(ex) \ - (N_GETMAGIC(ex) == ZMAGIC ? __LDPGSZ : (N_GETMAGIC(ex) == QMAGIC || \ - N_GETMAGIC_NET(ex) == ZMAGIC) ? 0 : sizeof(struct exec)) - -/* Data segment offset. */ -#define N_DATOFF(ex) \ - N_ALIGN(ex, N_TXTOFF(ex) + (ex).a_text) - -/* Relocation table offset. */ -#define N_RELOFF(ex) \ - N_ALIGN(ex, N_DATOFF(ex) + (ex).a_data) - -/* Symbol table offset. */ -#define N_SYMOFF(ex) \ - (N_RELOFF(ex) + (ex).a_trsize + (ex).a_drsize) - -/* String table offset. */ -#define N_STROFF(ex) (N_SYMOFF(ex) + (ex).a_syms) - -/* - * Header prepended to each a.out file. - * only manipulate the a_midmag field via the - * N_SETMAGIC/N_GET{MAGIC,MID,FLAG} macros in a.out.h - */ - -struct exec - { - unsigned long a_midmag; /* htonl(flags<<26 | mid<<16 | magic) */ - unsigned long a_text; /* text segment size */ - unsigned long a_data; /* initialized data size */ - unsigned long a_bss; /* uninitialized data size */ - unsigned long a_syms; /* symbol table size */ - unsigned long a_entry; /* entry point */ - unsigned long a_trsize; /* text relocation size */ - unsigned long a_drsize; /* data relocation size */ - }; -#define a_magic a_midmag /* XXX Hack to work with current kern_execve.c */ - -/* a_magic */ -#define OMAGIC 0x107 /* 0407 old impure format */ -#define NMAGIC 0x108 /* 0410 read-only text */ -#define ZMAGIC 0x10b /* 0413 demand load format */ -#define QMAGIC 0xcc /* 0314 "compact" demand load format */ - -/* a_mid */ -#define MID_ZERO 0 /* unknown - implementation dependent */ -#define MID_SUN010 1 /* sun 68010/68020 binary */ -#define MID_SUN020 2 /* sun 68020-only binary */ -#define MID_I386 134 /* i386 BSD binary */ -#define MID_SPARC 138 /* sparc */ -#define MID_HP200 200 /* hp200 (68010) BSD binary */ -#define MID_HP300 300 /* hp300 (68020+68881) BSD binary */ -#define MID_HPUX 0x20C /* hp200/300 HP-UX binary */ -#define MID_HPUX800 0x20B /* hp800 HP-UX binary */ - -/* - * a_flags - */ -#define EX_PIC 0x10 /* contains position independant code */ -#define EX_DYNAMIC 0x20 /* contains run-time link-edit info */ -#define EX_DPMASK 0x30 /* mask for the above */ - -#endif /* !_IMGACT_AOUT_H_ */ diff --git a/stage2/iso9660.h b/stage2/iso9660.h deleted file mode 100644 index c311ecf9c..000000000 --- a/stage2/iso9660.h +++ /dev/null @@ -1,206 +0,0 @@ -/* - * ISO 9660 filesystem backend for GRUB (GRand Unified Bootloader) - * including Rock Ridge Extensions support - * - * Copyright (C) 1998, 1999 Kousuke Takai - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ -/* - * References: - * linux/fs/isofs/rock.[ch] - * mkisofs-1.11.1/diag/isoinfo.c - * mkisofs-1.11.1/iso9660.h - * (all are written by Eric Youngdale) - */ - -#ifndef _ISO9660_H_ -#define _ISO9660_H_ - -#define ISO_SECTOR_BITS (11) -#define ISO_SECTOR_SIZE (1<= file system block size >= PBSIZE >= DISIZE - */ -#define PBSIZE 512 /* physical block size (in byte) */ -#define DISIZE 512 /* on-disk inode size (in byte) */ -#define L2DISIZE 9 -#define INOSPERIAG 4096 /* number of disk inodes per iag */ -#define L2INOSPERIAG 12 -#define INOSPEREXT 32 /* number of disk inode per extent */ -#define L2INOSPEREXT 5 - -/* Minimum number of bytes supported for a JFS partition */ -#define MINJFS (0x1000000) - -/* - * fixed byte offset address - */ -#define SUPER1_OFF 0x8000 /* primary superblock */ - -#define AITBL_OFF (SUPER1_OFF + PSIZE + (PSIZE << 1)) - -/* - * fixed reserved inode number - */ -/* aggregate inode */ -#define AGGREGATE_I 1 /* aggregate inode map inode */ -#define FILESYSTEM_I 16 /* 1st/only fileset inode in ait: - * fileset inode map inode - */ - -/* per fileset inode */ -#define ROOT_I 2 /* fileset root inode */ - -/* - * directory configuration - */ -#define JFS_NAME_MAX 255 -#define JFS_PATH_MAX PSIZE - -typedef unsigned char u8; -typedef char s8; -typedef unsigned short u16; -typedef short s16; -typedef unsigned int u32; -typedef int s32; -typedef unsigned long long u64; -typedef long long s64; - -typedef u16 UniChar; - -/* these from jfs_btree.h */ - -/* btpaget_t flag */ -#define BT_TYPE 0x07 /* B+-tree index */ -#define BT_ROOT 0x01 /* root page */ -#define BT_LEAF 0x02 /* leaf page */ -#define BT_INTERNAL 0x04 /* internal page */ -#define BT_RIGHTMOST 0x10 /* rightmost page */ -#define BT_LEFTMOST 0x20 /* leftmost page */ - -/* those are from jfs_types.h */ - -struct timestruc_t { - u32 tv_sec; - u32 tv_nsec; -}; - -/* - * physical xd (pxd) - */ -typedef struct { - unsigned len:24; - unsigned addr1:8; - u32 addr2; -} pxd_t; - -/* xd_t field extraction */ -#define lengthPXD(pxd) ((pxd)->len) -#define addressPXD(pxd) (((s64)((pxd)->addr1)) << 32 | ((pxd)->addr2)) - -/* - * data extent descriptor (dxd) - */ -typedef struct { - unsigned flag:8; /* 1: flags */ - unsigned rsrvd:24; /* 3: */ - u32 size; /* 4: size in byte */ - unsigned len:24; /* 3: length in unit of fsblksize */ - unsigned addr1:8; /* 1: address in unit of fsblksize */ - u32 addr2; /* 4: address in unit of fsblksize */ -} dxd_t; /* - 16 - */ - -/* - * DASD limit information - stored in directory inode - */ -typedef struct dasd { - u8 thresh; /* Alert Threshold (in percent) */ - u8 delta; /* Alert Threshold delta (in percent) */ - u8 rsrvd1; - u8 limit_hi; /* DASD limit (in logical blocks) */ - u32 limit_lo; /* DASD limit (in logical blocks) */ - u8 rsrvd2[3]; - u8 used_hi; /* DASD usage (in logical blocks) */ - u32 used_lo; /* DASD usage (in logical blocks) */ -} dasd_t; - - -/* from jfs_superblock.h */ - -#define JFS_MAGIC 0x3153464A /* "JFS1" */ - -struct jfs_superblock -{ - u32 s_magic; /* 4: magic number */ - u32 s_version; /* 4: version number */ - - s64 s_size; /* 8: aggregate size in hardware/LVM blocks; - * VFS: number of blocks - */ - s32 s_bsize; /* 4: aggregate block size in bytes; - * VFS: fragment size - */ - s16 s_l2bsize; /* 2: log2 of s_bsize */ - s16 s_l2bfactor; /* 2: log2(s_bsize/hardware block size) */ - s32 s_pbsize; /* 4: hardware/LVM block size in bytes */ - s16 s_l2pbsize; /* 2: log2 of s_pbsize */ - s16 pad; /* 2: padding necessary for alignment */ - - u32 s_agsize; /* 4: allocation group size in aggr. blocks */ - - u32 s_flag; /* 4: aggregate attributes: - * see jfs_filsys.h - */ - u32 s_state; /* 4: mount/unmount/recovery state: - * see jfs_filsys.h - */ - s32 s_compress; /* 4: > 0 if data compression */ - - pxd_t s_ait2; /* 8: first extent of secondary - * aggregate inode table - */ - - pxd_t s_aim2; /* 8: first extent of secondary - * aggregate inode map - */ - u32 s_logdev; /* 4: device address of log */ - s32 s_logserial; /* 4: log serial number at aggregate mount */ - pxd_t s_logpxd; /* 8: inline log extent */ - - pxd_t s_fsckpxd; /* 8: inline fsck work space extent */ - - struct timestruc_t s_time; /* 8: time last updated */ - - s32 s_fsckloglen; /* 4: Number of filesystem blocks reserved for - * the fsck service log. - * N.B. These blocks are divided among the - * versions kept. This is not a per - * version size. - * N.B. These blocks are included in the - * length field of s_fsckpxd. - */ - s8 s_fscklog; /* 1: which fsck service log is most recent - * 0 => no service log data yet - * 1 => the first one - * 2 => the 2nd one - */ - char s_fpack[11]; /* 11: file system volume name - * N.B. This must be 11 bytes to - * conform with the OS/2 BootSector - * requirements - */ - - /* extendfs() parameter under s_state & FM_EXTENDFS */ - s64 s_xsize; /* 8: extendfs s_size */ - pxd_t s_xfsckpxd; /* 8: extendfs fsckpxd */ - pxd_t s_xlogpxd; /* 8: extendfs logpxd */ - /* - 128 byte boundary - */ - - /* - * DFS VFS support (preliminary) - */ - char s_attach; /* 1: VFS: flag: set when aggregate is attached - */ - u8 rsrvd4[7]; /* 7: reserved - set to 0 */ - - u64 totalUsable; /* 8: VFS: total of 1K blocks which are - * available to "normal" (non-root) users. - */ - u64 minFree; /* 8: VFS: # of 1K blocks held in reserve for - * exclusive use of root. This value can be 0, - * and if it is then totalUsable will be equal - * to # of blocks in aggregate. I believe this - * means that minFree + totalUsable = # blocks. - * In that case, we don't need to store both - * totalUsable and minFree since we can compute - * one from the other. I would guess minFree - * would be the one we should store, and - * totalUsable would be the one we should - * compute. (Just a guess...) - */ - - u64 realFree; /* 8: VFS: # of free 1K blocks can be used by - * "normal" users. It may be this is something - * we should compute when asked for instead of - * storing in the superblock. I don't know how - * often this information is needed. - */ - /* - * graffiti area - */ -}; - -/* from jfs_dtree.h */ - -/* - * entry segment/slot - * - * an entry consists of type dependent head/only segment/slot and - * additional segments/slots linked vi next field; - * N.B. last/only segment of entry is terminated by next = -1; - */ -/* - * directory page slot - */ -typedef struct { - s8 next; /* 1: */ - s8 cnt; /* 1: */ - UniChar name[15]; /* 30: */ -} dtslot_t; /* (32) */ - -#define DTSLOTDATALEN 15 - -/* - * internal node entry head/only segment - */ -typedef struct { - pxd_t xd; /* 8: child extent descriptor */ - - s8 next; /* 1: */ - u8 namlen; /* 1: */ - UniChar name[11]; /* 22: 2-byte aligned */ -} idtentry_t; /* (32) */ - -/* - * leaf node entry head/only segment - * - * For legacy filesystems, name contains 13 unichars -- no index field - */ -typedef struct { - u32 inumber; /* 4: 4-byte aligned */ - s8 next; /* 1: */ - u8 namlen; /* 1: */ - UniChar name[11]; /* 22: 2-byte aligned */ - u32 index; /* 4: index into dir_table */ -} ldtentry_t; /* (32) */ - -#define DTLHDRDATALEN 11 - -/* - * dir_table used for directory traversal during readdir -*/ - -/* - * Maximum entry in inline directory table - */ - -typedef struct dir_table_slot { - u8 rsrvd; /* 1: */ - u8 flag; /* 1: 0 if free */ - u8 slot; /* 1: slot within leaf page of entry */ - u8 addr1; /* 1: upper 8 bits of leaf page address */ - u32 addr2; /* 4: lower 32 bits of leaf page address -OR- - index of next entry when this entry was deleted */ -} dir_table_slot_t; /* (8) */ - -/* - * directory root page (in-line in on-disk inode): - * - * cf. dtpage_t below. - */ -typedef union { - struct { - dasd_t DASD; /* 16: DASD limit/usage info F226941 */ - - u8 flag; /* 1: */ - s8 nextindex; /* 1: next free entry in stbl */ - s8 freecnt; /* 1: free count */ - s8 freelist; /* 1: freelist header */ - - u32 idotdot; /* 4: parent inode number */ - - s8 stbl[8]; /* 8: sorted entry index table */ - } header; /* (32) */ - - dtslot_t slot[9]; -} dtroot_t; - -/* - * directory regular page: - * - * entry slot array of 32 byte slot - * - * sorted entry slot index table (stbl): - * contiguous slots at slot specified by stblindex, - * 1-byte per entry - * 512 byte block: 16 entry tbl (1 slot) - * 1024 byte block: 32 entry tbl (1 slot) - * 2048 byte block: 64 entry tbl (2 slot) - * 4096 byte block: 128 entry tbl (4 slot) - * - * data area: - * 512 byte block: 16 - 2 = 14 slot - * 1024 byte block: 32 - 2 = 30 slot - * 2048 byte block: 64 - 3 = 61 slot - * 4096 byte block: 128 - 5 = 123 slot - * - * N.B. index is 0-based; index fields refer to slot index - * except nextindex which refers to entry index in stbl; - * end of entry stot list or freelist is marked with -1. - */ -typedef union { - struct { - s64 next; /* 8: next sibling */ - s64 prev; /* 8: previous sibling */ - - u8 flag; /* 1: */ - s8 nextindex; /* 1: next entry index in stbl */ - s8 freecnt; /* 1: */ - s8 freelist; /* 1: slot index of head of freelist */ - - u8 maxslot; /* 1: number of slots in page slot[] */ - s8 stblindex; /* 1: slot index of start of stbl */ - u8 rsrvd[2]; /* 2: */ - - pxd_t self; /* 8: self pxd */ - } header; /* (32) */ - - dtslot_t slot[128]; -} dtpage_t; - -/* from jfs_xtree.h */ - -/* - * extent allocation descriptor (xad) - */ -typedef struct xad { - unsigned flag:8; /* 1: flag */ - unsigned rsvrd:16; /* 2: reserved */ - unsigned off1:8; /* 1: offset in unit of fsblksize */ - u32 off2; /* 4: offset in unit of fsblksize */ - unsigned len:24; /* 3: length in unit of fsblksize */ - unsigned addr1:8; /* 1: address in unit of fsblksize */ - u32 addr2; /* 4: address in unit of fsblksize */ -} xad_t; /* (16) */ - -/* xad_t field extraction */ -#define offsetXAD(xad) (((s64)((xad)->off1)) << 32 | ((xad)->off2)) -#define addressXAD(xad) (((s64)((xad)->addr1)) << 32 | ((xad)->addr2)) -#define lengthXAD(xad) ((xad)->len) - -/* possible values for maxentry */ -#define XTPAGEMAXSLOT 256 -#define XTENTRYSTART 2 - -/* - * xtree page: - */ -typedef union { - struct xtheader { - s64 next; /* 8: */ - s64 prev; /* 8: */ - - u8 flag; /* 1: */ - u8 rsrvd1; /* 1: */ - s16 nextindex; /* 2: next index = number of entries */ - s16 maxentry; /* 2: max number of entries */ - s16 rsrvd2; /* 2: */ - - pxd_t self; /* 8: self */ - } header; /* (32) */ - - xad_t xad[XTPAGEMAXSLOT]; /* 16 * maxentry: xad array */ -} xtpage_t; - -/* from jfs_dinode.h */ - -struct dinode { - /* - * I. base area (128 bytes) - * ------------------------ - * - * define generic/POSIX attributes - */ - u32 di_inostamp; /* 4: stamp to show inode belongs to fileset */ - s32 di_fileset; /* 4: fileset number */ - u32 di_number; /* 4: inode number, aka file serial number */ - u32 di_gen; /* 4: inode generation number */ - - pxd_t di_ixpxd; /* 8: inode extent descriptor */ - - s64 di_size; /* 8: size */ - s64 di_nblocks; /* 8: number of blocks allocated */ - - u32 di_nlink; /* 4: number of links to the object */ - - u32 di_uid; /* 4: user id of owner */ - u32 di_gid; /* 4: group id of owner */ - - u32 di_mode; /* 4: attribute, format and permission */ - - struct timestruc_t di_atime; /* 8: time last data accessed */ - struct timestruc_t di_ctime; /* 8: time last status changed */ - struct timestruc_t di_mtime; /* 8: time last data modified */ - struct timestruc_t di_otime; /* 8: time created */ - - dxd_t di_acl; /* 16: acl descriptor */ - - dxd_t di_ea; /* 16: ea descriptor */ - - s32 di_next_index; /* 4: Next available dir_table index */ - - s32 di_acltype; /* 4: Type of ACL */ - - /* - * Extension Areas. - * - * Historically, the inode was partitioned into 4 128-byte areas, - * the last 3 being defined as unions which could have multiple - * uses. The first 96 bytes had been completely unused until - * an index table was added to the directory. It is now more - * useful to describe the last 3/4 of the inode as a single - * union. We would probably be better off redesigning the - * entire structure from scratch, but we don't want to break - * commonality with OS/2's JFS at this time. - */ - union { - struct { - /* - * This table contains the information needed to - * find a directory entry from a 32-bit index. - * If the index is small enough, the table is inline, - * otherwise, an x-tree root overlays this table - */ - dir_table_slot_t _table[12]; /* 96: inline */ - - dtroot_t _dtroot; /* 288: dtree root */ - } _dir; /* (384) */ -#define di_dirtable u._dir._table -#define di_dtroot u._dir._dtroot -#define di_parent di_dtroot.header.idotdot -#define di_DASD di_dtroot.header.DASD - - struct { - union { - u8 _data[96]; /* 96: unused */ - struct { - void *_imap; /* 4: unused */ - u32 _gengen; /* 4: generator */ - } _imap; - } _u1; /* 96: */ -#define di_gengen u._file._u1._imap._gengen - - union { - xtpage_t _xtroot; - struct { - u8 unused[16]; /* 16: */ - dxd_t _dxd; /* 16: */ - union { - u32 _rdev; /* 4: */ - u8 _fastsymlink[128]; - } _u; - u8 _inlineea[128]; - } _special; - } _u2; - } _file; -#define di_xtroot u._file._u2._xtroot -#define di_dxd u._file._u2._special._dxd -#define di_btroot di_xtroot -#define di_inlinedata u._file._u2._special._u -#define di_rdev u._file._u2._special._u._rdev -#define di_fastsymlink u._file._u2._special._u._fastsymlink -#define di_inlineea u._file._u2._special._inlineea - } u; -}; - -typedef struct dinode dinode_t; - -/* di_mode */ -#define IFMT 0xF000 /* S_IFMT - mask of file type */ -#define IFDIR 0x4000 /* S_IFDIR - directory */ -#define IFREG 0x8000 /* S_IFREG - regular file */ -#define IFLNK 0xA000 /* S_IFLNK - symbolic link */ - -/* extended mode bits (on-disk inode di_mode) */ -#define INLINEEA 0x00040000 /* inline EA area free */ - -/* from jfs_imap.h */ - -#define EXTSPERIAG 128 /* number of disk inode extent per iag */ -#define SMAPSZ 4 /* number of words per summary map */ -#define MAXAG 128 /* maximum number of allocation groups */ - -/* - * inode allocation map: - * - * inode allocation map consists of - * . the inode map control page and - * . inode allocation group pages (per 4096 inodes) - * which are addressed by standard JFS xtree. - */ -/* - * inode allocation group page (per 4096 inodes of an AG) - */ -typedef struct { - s64 agstart; /* 8: starting block of ag */ - s32 iagnum; /* 4: inode allocation group number */ - s32 inofreefwd; /* 4: ag inode free list forward */ - s32 inofreeback; /* 4: ag inode free list back */ - s32 extfreefwd; /* 4: ag inode extent free list forward */ - s32 extfreeback; /* 4: ag inode extent free list back */ - s32 iagfree; /* 4: iag free list */ - - /* summary map: 1 bit per inode extent */ - s32 inosmap[SMAPSZ]; /* 16: sum map of mapwords w/ free inodes; - * note: this indicates free and backed - * inodes, if the extent is not backed the - * value will be 1. if the extent is - * backed but all inodes are being used the - * value will be 1. if the extent is - * backed but at least one of the inodes is - * free the value will be 0. - */ - s32 extsmap[SMAPSZ]; /* 16: sum map of mapwords w/ free extents */ - s32 nfreeinos; /* 4: number of free inodes */ - s32 nfreeexts; /* 4: number of free extents */ - /* (72) */ - u8 pad[1976]; /* 1976: pad to 2048 bytes */ - /* allocation bit map: 1 bit per inode (0 - free, 1 - allocated) */ - u32 wmap[EXTSPERIAG]; /* 512: working allocation map */ - u32 pmap[EXTSPERIAG]; /* 512: persistent allocation map */ - pxd_t inoext[EXTSPERIAG]; /* 1024: inode extent addresses */ -} iag_t; /* (4096) */ - -#endif /* _JFS_H_ */ diff --git a/stage2/mb_header.h b/stage2/mb_header.h deleted file mode 100644 index 21934574f..000000000 --- a/stage2/mb_header.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* - * MultiBoot Header description - */ - -struct multiboot_header -{ - /* Must be MULTIBOOT_MAGIC - see below. */ - unsigned magic; - - /* Feature flags - see below. */ - unsigned flags; - - /* - * Checksum - * - * The above fields plus this one must equal 0 mod 2^32. - */ - unsigned checksum; - - /* These are only valid if MULTIBOOT_AOUT_KLUDGE is set. */ - unsigned header_addr; - unsigned load_addr; - unsigned load_end_addr; - unsigned bss_end_addr; - unsigned entry_addr; - - /* These are only valid if MULTIBOOT_VIDEO_MODE is set. */ - unsigned mode_type; - unsigned width; - unsigned height; - unsigned depth; -}; - -/* - * The entire multiboot_header must be contained - * within the first MULTIBOOT_SEARCH bytes of the kernel image. - */ -#define MULTIBOOT_SEARCH 8192 -#define MULTIBOOT_FOUND(addr, len) \ - (! ((addr) & 0x3) \ - && (len) >= 12 \ - && *((int *) (addr)) == MULTIBOOT_MAGIC \ - && ! (*((unsigned *) (addr)) + *((unsigned *) (addr + 4)) \ - + *((unsigned *) (addr + 8))) \ - && (! (MULTIBOOT_AOUT_KLUDGE & *((int *) (addr + 4))) || (len) >= 32) \ - && (! (MULTIBOOT_VIDEO_MODE & *((int *) (addr + 4))) || (len) >= 48)) - -/* Magic value identifying the multiboot_header. */ -#define MULTIBOOT_MAGIC 0x1BADB002 - -/* - * Features flags for 'flags'. - * If a boot loader sees a flag in MULTIBOOT_MUSTKNOW set - * and it doesn't understand it, it must fail. - */ -#define MULTIBOOT_MUSTKNOW 0x0000FFFF - -/* currently unsupported flags... this is a kind of version number. */ -#define MULTIBOOT_UNSUPPORTED 0x0000FFF8 - -/* Align all boot modules on i386 page (4KB) boundaries. */ -#define MULTIBOOT_PAGE_ALIGN 0x00000001 - -/* Must pass memory information to OS. */ -#define MULTIBOOT_MEMORY_INFO 0x00000002 - -/* Must pass video information to OS. */ -#define MULTIBOOT_VIDEO_MODE 0x00000004 - -/* This flag indicates the use of the address fields in the header. */ -#define MULTIBOOT_AOUT_KLUDGE 0x00010000 diff --git a/stage2/mb_info.h b/stage2/mb_info.h deleted file mode 100644 index 1e1e63bae..000000000 --- a/stage2/mb_info.h +++ /dev/null @@ -1,217 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000,2003 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* - * The structure type "mod_list" is used by the "multiboot_info" structure. - */ - -struct mod_list -{ - /* the memory used goes from bytes 'mod_start' to 'mod_end-1' inclusive */ - unsigned long mod_start; - unsigned long mod_end; - - /* Module command line */ - unsigned long cmdline; - - /* padding to take it to 16 bytes (must be zero) */ - unsigned long pad; -}; - - -/* - * INT-15, AX=E820 style "AddressRangeDescriptor" - * ...with a "size" parameter on the front which is the structure size - 4, - * pointing to the next one, up until the full buffer length of the memory - * map has been reached. - */ - -struct AddrRangeDesc -{ - unsigned long size; - unsigned long long BaseAddr; - unsigned long long Length; - unsigned long Type; - - /* unspecified optional padding... */ -} __attribute__ ((packed)); - -/* usable memory "Type", all others are reserved. */ -#define MB_ARD_MEMORY 1 - - -/* Drive Info structure. */ -struct drive_info -{ - /* The size of this structure. */ - unsigned long size; - - /* The BIOS drive number. */ - unsigned char drive_number; - - /* The access mode (see below). */ - unsigned char drive_mode; - - /* The BIOS geometry. */ - unsigned short drive_cylinders; - unsigned char drive_heads; - unsigned char drive_sectors; - - /* The array of I/O ports used for the drive. */ - unsigned short drive_ports[0]; -}; - -/* Drive Mode. */ -#define MB_DI_CHS_MODE 0 -#define MB_DI_LBA_MODE 1 - - -/* APM BIOS info. */ -struct apm_info -{ - unsigned short version; - unsigned short cseg; - unsigned long offset; - unsigned short cseg_16; - unsigned short dseg_16; - unsigned short cseg_len; - unsigned short cseg_16_len; - unsigned short dseg_16_len; -}; - - -/* - * MultiBoot Info description - * - * This is the struct passed to the boot image. This is done by placing - * its address in the EAX register. - */ - -struct multiboot_info -{ - /* MultiBoot info version number */ - unsigned long flags; - - /* Available memory from BIOS */ - unsigned long mem_lower; - unsigned long mem_upper; - - /* "root" partition */ - unsigned long boot_device; - - /* Kernel command line */ - unsigned long cmdline; - - /* Boot-Module list */ - unsigned long mods_count; - unsigned long mods_addr; - - union - { - struct - { - /* (a.out) Kernel symbol table info */ - unsigned long tabsize; - unsigned long strsize; - unsigned long addr; - unsigned long pad; - } - a; - - struct - { - /* (ELF) Kernel section header table */ - unsigned long num; - unsigned long size; - unsigned long addr; - unsigned long shndx; - } - e; - } - syms; - - /* Memory Mapping buffer */ - unsigned long mmap_length; - unsigned long mmap_addr; - - /* Drive Info buffer */ - unsigned long drives_length; - unsigned long drives_addr; - - /* ROM configuration table */ - unsigned long config_table; - - /* Boot Loader Name */ - unsigned long boot_loader_name; - - /* APM table */ - unsigned long apm_table; - - /* Video */ - unsigned long vbe_control_info; - unsigned long vbe_mode_info; - unsigned short vbe_mode; - unsigned short vbe_interface_seg; - unsigned short vbe_interface_off; - unsigned short vbe_interface_len; -}; - -/* - * Flags to be set in the 'flags' parameter above - */ - -/* is there basic lower/upper memory information? */ -#define MB_INFO_MEMORY 0x00000001 -/* is there a boot device set? */ -#define MB_INFO_BOOTDEV 0x00000002 -/* is the command-line defined? */ -#define MB_INFO_CMDLINE 0x00000004 -/* are there modules to do something with? */ -#define MB_INFO_MODS 0x00000008 - -/* These next two are mutually exclusive */ - -/* is there a symbol table loaded? */ -#define MB_INFO_AOUT_SYMS 0x00000010 -/* is there an ELF section header table? */ -#define MB_INFO_ELF_SHDR 0x00000020 - -/* is there a full memory map? */ -#define MB_INFO_MEM_MAP 0x00000040 - -/* Is there drive info? */ -#define MB_INFO_DRIVE_INFO 0x00000080 - -/* Is there a config table? */ -#define MB_INFO_CONFIG_TABLE 0x00000100 - -/* Is there a boot loader name? */ -#define MB_INFO_BOOT_LOADER_NAME 0x00000200 - -/* Is there a APM table? */ -#define MB_INFO_APM_TABLE 0x00000400 - -/* Is there video information? */ -#define MB_INFO_VIDEO_INFO 0x00000800 - -/* - * The following value must be present in the EAX register. - */ - -#define MULTIBOOT_VALID 0x2BADB002 diff --git a/stage2/md5.c b/stage2/md5.c deleted file mode 100644 index 21205bad7..000000000 --- a/stage2/md5.c +++ /dev/null @@ -1,383 +0,0 @@ -/* md5.c - an implementation of the MD5 algorithm and MD5 crypt */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000, 2001 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* See RFC 1321 for a description of the MD5 algorithm. - */ - -#include -#ifndef TEST -# include -#endif - -#ifdef TEST -# include -# define USE_MD5_PASSWORDS -# define USE_MD5 -#endif - -#ifdef USE_MD5_PASSWORDS -# define USE_MD5 -#endif - -#ifdef USE_MD5 - -#define cpu_to_le32(x) (x) -#define le32_to_cpu(x) cpu_to_le32(x) -typedef unsigned int UINT4; - -/* F, G, H and I are basic MD5 functions. - */ -#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) -#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) -#define I(x, y, z) ((y) ^ ((x) | (~z))) - -/* ROTATE_LEFT rotates x left n bits. - */ -#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x >> (32 - (n))))) - -static UINT4 initstate[4] = -{ - 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476 -}; - -static char s1[4] = { 7, 12, 17, 22 }; -static char s2[4] = { 5, 9, 14, 20 }; -static char s3[4] = { 4, 11, 16, 23 }; -static char s4[4] = { 6, 10, 15, 21 }; - -static UINT4 T[64] = -{ - 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, - 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, - 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, - 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, - 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, - 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8, - 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, - 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a, - 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, - 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, - 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05, - 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, - 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, - 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, - 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, - 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391 -}; - -static const char *b64t = -"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - -static UINT4 state[4]; -static unsigned int length; -static unsigned char buffer[64]; - -static void -md5_transform (const unsigned char block[64]) -{ - int i, j; - UINT4 a,b,c,d,tmp; - const UINT4 *x = (UINT4 *) block; - - a = state[0]; - b = state[1]; - c = state[2]; - d = state[3]; - - /* Round 1 */ - for (i = 0; i < 16; i++) - { - tmp = a + F (b, c, d) + le32_to_cpu (x[i]) + T[i]; - tmp = ROTATE_LEFT (tmp, s1[i & 3]); - tmp += b; - a = d; d = c; c = b; b = tmp; - } - /* Round 2 */ - for (i = 0, j = 1; i < 16; i++, j += 5) - { - tmp = a + G (b, c, d) + le32_to_cpu (x[j & 15]) + T[i+16]; - tmp = ROTATE_LEFT (tmp, s2[i & 3]); - tmp += b; - a = d; d = c; c = b; b = tmp; - } - /* Round 3 */ - for (i = 0, j = 5; i < 16; i++, j += 3) - { - tmp = a + H (b, c, d) + le32_to_cpu (x[j & 15]) + T[i+32]; - tmp = ROTATE_LEFT (tmp, s3[i & 3]); - tmp += b; - a = d; d = c; c = b; b = tmp; - } - /* Round 4 */ - for (i = 0, j = 0; i < 16; i++, j += 7) - { - tmp = a + I (b, c, d) + le32_to_cpu (x[j & 15]) + T[i+48]; - tmp = ROTATE_LEFT (tmp, s4[i & 3]); - tmp += b; - a = d; d = c; c = b; b = tmp; - } - - state[0] += a; - state[1] += b; - state[2] += c; - state[3] += d; -} - -static void -md5_init(void) -{ - memcpy ((char *) state, (char *) initstate, sizeof (initstate)); - length = 0; -} - -static void -md5_update (const char *input, int inputlen) -{ - int buflen = length & 63; - length += inputlen; - if (buflen + inputlen < 64) - { - memcpy (buffer + buflen, input, inputlen); - buflen += inputlen; - return; - } - - memcpy (buffer + buflen, input, 64 - buflen); - md5_transform (buffer); - input += 64 - buflen; - inputlen -= 64 - buflen; - while (inputlen >= 64) - { - md5_transform (input); - input += 64; - inputlen -= 64; - } - memcpy (buffer, input, inputlen); - buflen = inputlen; -} - -static unsigned char * -md5_final() -{ - int i, buflen = length & 63; - - buffer[buflen++] = 0x80; - memset (buffer+buflen, 0, 64 - buflen); - if (buflen > 56) - { - md5_transform (buffer); - memset (buffer, 0, 64); - buflen = 0; - } - - *(UINT4 *) (buffer + 56) = cpu_to_le32 (8 * length); - *(UINT4 *) (buffer + 60) = 0; - md5_transform (buffer); - - for (i = 0; i < 4; i++) - state[i] = cpu_to_le32 (state[i]); - return (unsigned char *) state; -} - -#ifdef USE_MD5_PASSWORDS -/* If CHECK is true, check a password for correctness. Returns 0 - if password was correct, and a value != 0 for error, similarly - to strcmp. - If CHECK is false, crypt KEY and save the result in CRYPTED. - CRYPTED must have a salt. */ -int -md5_password (const char *key, char *crypted, int check) -{ - int keylen = strlen (key); - char *salt = crypted + 3; /* skip $1$ header */ - char *p; - int saltlen; - int i, n; - unsigned char alt_result[16]; - unsigned char *digest; - - if (check) - { - /* If our crypted password isn't 3 chars, then it can't be md5 - crypted. So, they don't match. */ - if (strlen(crypted) <= 3) - return 1; - - saltlen = strstr (salt, "$") - salt; - } - else - { - char *end = strstr (salt, "$"); - if (end && end - salt < 8) - saltlen = end - salt; - else - saltlen = 8; - - salt[saltlen] = '$'; - } - - md5_init (); - md5_update (key, keylen); - md5_update (salt, saltlen); - md5_update (key, keylen); - digest = md5_final (); - memcpy (alt_result, digest, 16); - - memcpy ((char *) state, (char *) initstate, sizeof (initstate)); - length = 0; - md5_update (key, keylen); - md5_update (crypted, 3 + saltlen); /* include the $1$ header */ - for (i = keylen; i > 16; i -= 16) - md5_update (alt_result, 16); - md5_update (alt_result, i); - - for (i = keylen; i > 0; i >>= 1) - md5_update (key + ((i & 1) ? keylen : 0), 1); - digest = md5_final (); - - for (i = 0; i < 1000; i++) - { - memcpy (alt_result, digest, 16); - - memcpy ((char *) state, (char *) initstate, sizeof (initstate)); - length = 0; - if ((i & 1) != 0) - md5_update (key, keylen); - else - md5_update (alt_result, 16); - - if (i % 3 != 0) - md5_update (salt, saltlen); - - if (i % 7 != 0) - md5_update (key, keylen); - - if ((i & 1) != 0) - md5_update (alt_result, 16); - else - md5_update (key, keylen); - digest = md5_final (); - } - - p = salt + saltlen + 1; - for (i = 0; i < 5; i++) - { - unsigned int w = - digest[i == 4 ? 5 : 12+i] | (digest[6+i] << 8) | (digest[i] << 16); - for (n = 4; n-- > 0;) - { - if (check) - { - if (*p++ != b64t[w & 0x3f]) - return 1; - } - else - { - *p++ = b64t[w & 0x3f]; - } - - w >>= 6; - } - } - { - unsigned int w = digest[11]; - for (n = 2; n-- > 0;) - { - if (check) - { - if (*p++ != b64t[w & 0x3f]) - return 1; - } - else - { - *p++ = b64t[w & 0x3f]; - } - - w >>= 6; - } - } - - if (! check) - *p = '\0'; - - return *p; -} -#endif - -#ifdef TEST -static char * -md5 (const char *input) -{ - memcpy ((char *) state, (char *) initstate, sizeof (initstate)); - length = 0; - md5_update (input, strlen (input)); - return md5_final (); -} - -static void -test (char *buffer, char *expected) -{ - char result[16 * 3 +1]; - unsigned char* digest = md5 (buffer); - int i; - - for (i=0; i < 16; i++) - sprintf (result+2*i, "%02x", digest[i]); - - if (strcmp (result, expected)) - printf ("MD5(%s) failed: %s\n", buffer, result); - else - printf ("MD5(%s) OK\n", buffer); -} - -int -main (void) -{ - test ("", "d41d8cd98f00b204e9800998ecf8427e"); - test ("a", "0cc175b9c0f1b6a831c399e269772661"); - test ("abc", "900150983cd24fb0d6963f7d28e17f72"); - test ("message digest", "f96b697d7cb7938d525a2f31aaf161d0"); - test ("abcdefghijklmnopqrstuvwxyz", "c3fcd3d76192e4007dfb496cca67e13b"); - test ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", - "d174ab98d277d9f5a5611c2c9f419d9f"); - test ("12345678901234567890123456789012345678901234567890123456789012345678901234567890", - "57edf4a22be3c955ac49da2e2107b67a"); - test ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz3456", - "6831fa90115bb9a54fbcd4f9fee0b5c4"); - test ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz345", - "bc40505cc94a43b7ff3e2ac027325233"); - test ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz34567", - "fa94b73a6f072a0239b52acacfbcf9fa"); - test ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz345678901234", - "bd201eae17f29568927414fa326f1267"); - test ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz34567890123", - "80063db1e6b70a2e91eac903f0e46b85"); - - if (check_md5_password ("Hello world!", - "$1$saltstri$YMyguxXMBpd2TEZ.vS/3q1")) - printf ("Password differs\n"); - else - printf ("Password OK\n"); - return 0; -} -#endif - -#endif diff --git a/stage2/md5.h b/stage2/md5.h deleted file mode 100644 index c1dbd0607..000000000 --- a/stage2/md5.h +++ /dev/null @@ -1,30 +0,0 @@ -/* md5.h - an implementation of the MD5 algorithm and MD5 crypt */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* If CHECK is true, check a password for correctness. Returns 0 - if password was correct, and a value != 0 for error, similarly - to strcmp. - If CHECK is false, crypt KEY and save the result in CRYPTED. - CRYPTED must have a salt. */ -extern int md5_password (const char *key, char *crypted, int check); - -/* For convenience. */ -#define check_md5_password(key,crypted) md5_password((key), (crypted), 1) -#define make_md5_password(key,crypted) md5_password((key), (crypted), 0) diff --git a/stage2/nbi.h b/stage2/nbi.h deleted file mode 100644 index 3f70e21ca..000000000 --- a/stage2/nbi.h +++ /dev/null @@ -1,33 +0,0 @@ -/* nbi.h - definitions for Net Boot Image */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef GRUB_NBI_HEADER -#define GRUB_NBI_HEADER - -#define NBI_MAGIC 0x1B031336 -#define NBI_DEST_ADDR 0x10000 -#define NBI_DEST_SEG 0x1000 -#define NBI_DEST_OFF 0x0000 -#define RELOCATED_ADDR 0x8000 -#define RELOCATED_SEG 0x0800 -#define RELOCATED_OFF 0x0000 -#define STAGE2_START_ADDR 0x8200 - -#endif /* ! GRUB_NBI_HEADER */ diff --git a/stage2/nbloader.S b/stage2/nbloader.S deleted file mode 100644 index 57ad93655..000000000 --- a/stage2/nbloader.S +++ /dev/null @@ -1,121 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include - - .file "nbloader.S" - .text - .code16 - - /* Just a dummy entry */ -.globl _start; _start: - - /* - * netboot image header - */ - - .long NBI_MAGIC - .long 0x00000004 - /* load address of the first block */ - .word NBI_DEST_OFF - .word NBI_DEST_SEG - /* start addr of the relocation code */ - .word NBI_DEST_OFF + (relocate - _start) - .word NBI_DEST_SEG - - .long 0x04000004 - .long NBI_DEST_ADDR + 0x0200 - .long DISKLESS_SIZE - .long DISKLESS_SIZE - -relocate: - /* - * This code is for now located at 0x10000. - * Relocate the code in two steps: - * 1. Copy the first 32k to 0x8000 and jump to the relocated area. - * 2. Copy the rest to 0x10000 (0x8000 + 32k). - */ - - /* Copy the first 32k */ - movw $NBI_DEST_SEG, %ax - movw %ax, %ds - movw $RELOCATED_SEG, %ax - movw %ax, %es - xorw %si, %si - xorw %di, %di - /* Always copy 32k bytes */ - movw $0x4000, %cx - - cld - rep - movsw - - /* Jump to the relocated address */ - ljmp $0, $(RELOCATED_ADDR + copy_rest - _start) - - /* Copy the rest */ -copy_rest: - /* Set %edx to the number of bytes */ - movl $(DISKLESS_SIZE + 0x200 - 0x8000), %edx - -copy_loop: - /* Check the rest */ - orl %edx, %edx - jz boot_stage2 - - /* Copy by 32k, as that is easy to implement */ - movl $0x8000, %ecx - cmpl %ecx, %edx - jg copy - movl %edx, %ecx - -copy: - /* Update the number of rest bytes */ - subl %ecx, %edx - - /* Add 0x0800 (32k >> 4) into %es and %ds */ - movw %es, %ax - addw $0x0800, %ax - movw %ax, %es - movw %ds, %ax - addw $0x800, %ax - movw %ax, %ds - - /* Zero the offsets */ - xorw %si, %si - xorw %di, %di - - /* Use word-size copy */ - addw $1, %cx - shrw $1, %cx - - /* The direction is already correct */ - rep - movsw - - jmp copy_loop - - /* Jump to the stage2 */ -boot_stage2: - ljmp $0, $STAGE2_START_ADDR - - /* This ensures that the length of this image will be 1 sector */ - . = _start + 0x200 - 1 - .byte 0 diff --git a/stage2/pc_slice.h b/stage2/pc_slice.h deleted file mode 100644 index a38d97f46..000000000 --- a/stage2/pc_slice.h +++ /dev/null @@ -1,251 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2003 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef _PC_SLICE_H -#define _PC_SLICE_H - -/* - * These define the basic PC MBR sector characteristics - */ - -#define PC_MBR_SECTOR 0 - -#define PC_MBR_SIG_OFFSET 510 -#define PC_MBR_SIGNATURE 0xaa55 - -#define PC_SLICE_OFFSET 446 -#define PC_SLICE_MAX 4 - - -/* - * Defines to guarantee structural alignment. - */ - -#define PC_MBR_CHECK_SIG(mbr_ptr) \ - ( *( (unsigned short *) (((int) mbr_ptr) + PC_MBR_SIG_OFFSET) ) \ - == PC_MBR_SIGNATURE ) - -#define PC_MBR_SIG(mbr_ptr) \ - ( *( (unsigned short *) (((int) mbr_ptr) + PC_MBR_SIG_OFFSET) ) ) - -#define PC_SLICE_FLAG(mbr_ptr, part) \ - ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET \ - + (part << 4)) ) ) - -#define PC_SLICE_HEAD(mbr_ptr, part) \ - ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 1 \ - + (part << 4)) ) ) - -#define PC_SLICE_SEC(mbr_ptr, part) \ - ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 2 \ - + (part << 4)) ) ) - -#define PC_SLICE_CYL(mbr_ptr, part) \ - ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 3 \ - + (part << 4)) ) ) - -#define PC_SLICE_TYPE(mbr_ptr, part) \ - ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 4 \ - + (part << 4)) ) ) - -#define PC_SLICE_EHEAD(mbr_ptr, part) \ - ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 5 \ - + (part << 4)) ) ) - -#define PC_SLICE_ESEC(mbr_ptr, part) \ - ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 6 \ - + (part << 4)) ) ) - -#define PC_SLICE_ECYL(mbr_ptr, part) \ - ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 7 \ - + (part << 4)) ) ) - -#define PC_SLICE_START(mbr_ptr, part) \ - ( *( (unsigned long *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 8 \ - + (part << 4)) ) ) - -#define PC_SLICE_LENGTH(mbr_ptr, part) \ - ( *( (unsigned long *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 12 \ - + (part << 4)) ) ) - - -/* - * PC flag types are defined here. - */ - -#define PC_SLICE_FLAG_NONE 0 -#define PC_SLICE_FLAG_BOOTABLE 0x80 - -/* - * Known PC partition types are defined here. - */ - -/* This is not a flag actually, but used as if it were a flag. */ -#define PC_SLICE_TYPE_HIDDEN_FLAG 0x10 - -#define PC_SLICE_TYPE_NONE 0 -#define PC_SLICE_TYPE_FAT12 1 -#define PC_SLICE_TYPE_FAT16_LT32M 4 -#define PC_SLICE_TYPE_EXTENDED 5 -#define PC_SLICE_TYPE_FAT16_GT32M 6 -#define PC_SLICE_TYPE_FAT32 0xb -#define PC_SLICE_TYPE_FAT32_LBA 0xc -#define PC_SLICE_TYPE_FAT16_LBA 0xe -#define PC_SLICE_TYPE_WIN95_EXTENDED 0xf -#define PC_SLICE_TYPE_EZD 0x55 -#define PC_SLICE_TYPE_MINIX 0x80 -#define PC_SLICE_TYPE_LINUX_MINIX 0x81 -#define PC_SLICE_TYPE_EXT2FS 0x83 -#define PC_SLICE_TYPE_LINUX_EXTENDED 0x85 -#define PC_SLICE_TYPE_VSTAFS 0x9e -#define PC_SLICE_TYPE_DELL_UTIL 0xde -#define PC_SLICE_TYPE_LINUX_RAID 0xfd - - -/* For convinience. */ -/* Check if TYPE is a FAT partition type. Clear the hidden flag before - the check, to allow the user to mount a hidden partition in GRUB. */ -#define IS_PC_SLICE_TYPE_FAT(type) \ - ({ int _type = (type) & ~PC_SLICE_TYPE_HIDDEN_FLAG; \ - _type == PC_SLICE_TYPE_FAT12 \ - || _type == PC_SLICE_TYPE_FAT16_LT32M \ - || _type == PC_SLICE_TYPE_FAT16_GT32M \ - || _type == PC_SLICE_TYPE_FAT16_LBA \ - || _type == PC_SLICE_TYPE_FAT32 \ - || _type == PC_SLICE_TYPE_FAT32_LBA \ - || _type == PC_SLICE_TYPE_DELL_UTIL; }) - -#define IS_PC_SLICE_TYPE_EXTENDED(type) \ - (((type) == PC_SLICE_TYPE_EXTENDED) \ - || ((type) == PC_SLICE_TYPE_WIN95_EXTENDED) \ - || ((type) == PC_SLICE_TYPE_LINUX_EXTENDED)) - -#define IS_PC_SLICE_TYPE_MINIX(type) \ - (((type) == PC_SLICE_TYPE_MINIX) \ - || ((type) == PC_SLICE_TYPE_LINUX_MINIX)) - -/* these ones are special, as they use their own partitioning scheme - to subdivide the PC partitions from there. */ -#define PC_SLICE_TYPE_FREEBSD 0xa5 -#define PC_SLICE_TYPE_OPENBSD 0xa6 -#define PC_SLICE_TYPE_NETBSD 0xa9 - -/* For convenience. */ -#define IS_PC_SLICE_TYPE_BSD_WITH_FS(type,fs) \ - ((type) == (PC_SLICE_TYPE_FREEBSD | ((fs) << 8)) \ - || (type) == (PC_SLICE_TYPE_OPENBSD | ((fs) << 8)) \ - || (type) == (PC_SLICE_TYPE_NETBSD | (fs) << 8)) - -#define IS_PC_SLICE_TYPE_BSD(type) IS_PC_SLICE_TYPE_BSD_WITH_FS(type,0) - -/* - * *BSD-style disklabel & partition definitions. - * - * This is a subdivided slice of type 'PC_SLICE_TYPE_BSD', so all of - * these, except where noted, are relative to the slice in question. - */ - -#define BSD_LABEL_SECTOR 1 -#define BSD_LABEL_MAGIC 0x82564557 - -#define BSD_LABEL_MAG_OFFSET 0 -#define BSD_LABEL_MAG2_OFFSET 132 -#define BSD_LABEL_NPARTS_OFFSET 138 -#define BSD_LABEL_NPARTS_MAX 8 - -#define BSD_PART_OFFSET 148 - - -/* - * Defines to guarantee structural alignment. - */ - -#define BSD_LABEL_CHECK_MAG(l_ptr) \ - ( *( (unsigned long *) (((int) l_ptr) + BSD_LABEL_MAG_OFFSET) ) \ - == ( (unsigned long) BSD_LABEL_MAGIC ) ) - -#define BSD_LABEL_MAG(l_ptr) \ - ( *( (unsigned long *) (((int) l_ptr) + BSD_LABEL_MAG_OFFSET) ) ) - -#define BSD_LABEL_DTYPE(l_ptr) \ - ( *( (unsigned short *) (((int) l_ptr) + BSD_LABEL_MAG_OFFSET + 4) ) ) - -#define BSD_LABEL_NPARTS(l_ptr) \ - ( *( (unsigned short *) (((int) l_ptr) + BSD_LABEL_NPARTS_OFFSET) ) ) - -#define BSD_PART_LENGTH(l_ptr, part) \ - ( *( (unsigned long *) (((int) l_ptr) + BSD_PART_OFFSET \ - + (part << 4)) ) ) - -#define BSD_PART_START(l_ptr, part) \ - ( *( (unsigned long *) (((int) l_ptr) + BSD_PART_OFFSET + 4 \ - + (part << 4)) ) ) - -#define BSD_PART_FRAG_SIZE(l_ptr, part) \ - ( *( (unsigned long *) (((int) l_ptr) + BSD_PART_OFFSET + 8 \ - + (part << 4)) ) ) - -#define BSD_PART_TYPE(l_ptr, part) \ - ( *( (unsigned char *) (((int) l_ptr) + BSD_PART_OFFSET + 12 \ - + (part << 4)) ) ) - -#define BSD_PART_FRAGS_PER_BLOCK(l_ptr, part) \ - ( *( (unsigned char *) (((int) l_ptr) + BSD_PART_OFFSET + 13 \ - + (part << 4)) ) ) - -#define BSD_PART_EXTRA(l_ptr, part) \ - ( *( (unsigned short *) (((int) l_ptr) + BSD_PART_OFFSET + 14 \ - + (part << 4)) ) ) - - -/* possible values for the "DISKTYPE"... all essentially irrelevant - except for DTYPE_SCSI */ -#define DTYPE_SMD 1 /* SMD, XSMD; VAX hp/up */ -#define DTYPE_MSCP 2 /* MSCP */ -#define DTYPE_DEC 3 /* other DEC (rk, rl) */ -#define DTYPE_SCSI 4 /* SCSI */ -#define DTYPE_ESDI 5 /* ESDI interface */ -#define DTYPE_ST506 6 /* ST506 etc. */ -#define DTYPE_HPIB 7 /* CS/80 on HP-IB */ -#define DTYPE_HPFL 8 /* HP Fiber-link */ -#define DTYPE_FLOPPY 10 /* floppy */ - - -/* possible values for the *BSD-style partition type */ -#define FS_UNUSED 0 /* unused */ -#define FS_SWAP 1 /* swap */ -#define FS_V6 2 /* Sixth Edition */ -#define FS_V7 3 /* Seventh Edition */ -#define FS_SYSV 4 /* System V */ -#define FS_V71K 5 /* V7 with 1K blocks (4.1, 2.9) */ -#define FS_V8 6 /* Eighth Edition, 4K blocks */ -#define FS_BSDFFS 7 /* 4.2BSD fast file system */ -#define FS_MSDOS 8 /* MSDOS file system */ -#define FS_BSDLFS 9 /* 4.4BSD log-structured file system */ -#define FS_OTHER 10 /* in use, but unknown/unsupported */ -#define FS_HPFS 11 /* OS/2 high-performance file system */ -#define FS_ISO9660 12 /* ISO 9660, normally CD-ROM */ -#define FS_BOOT 13 /* partition contains bootstrap */ -#define FS_ADOS 14 /* AmigaDOS fast file system */ -#define FS_HFS 15 /* Macintosh HFS */ -#define FS_FILECORE 16 /* Acorn Filecore Filing System */ -#define FS_EXT2FS 17 /* Linux Extended 2 file system */ - - -#endif /* _PC_SLICE_H */ diff --git a/stage2/pxeloader.S b/stage2/pxeloader.S deleted file mode 100644 index 80e95fe7e..000000000 --- a/stage2/pxeloader.S +++ /dev/null @@ -1,36 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - - .file "pxeloader.S" - .text - - /* Start with the prehistoric environment... */ - .code16 - - /* Let's go */ -.globl _start; _start: - - /* Jump to the real world */ - ljmp $0, $0x8200 - - /* This region is a junk. Do you say that this is wasteful? - But I like that the memory layout of the body is consistent - among different stage2s rather than scamping just for 1.5KB. */ - . = _start + 0x8200 - 0x7C00 - 1 - .byte 0 diff --git a/stage2/serial.c b/stage2/serial.c deleted file mode 100644 index 16c376fa7..000000000 --- a/stage2/serial.c +++ /dev/null @@ -1,434 +0,0 @@ -/* serial.c - serial device interface */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifdef SUPPORT_SERIAL - -#include -#include -#include -#include - -/* An input buffer. */ -static char input_buf[8]; -static int npending = 0; - -static int serial_x; -static int serial_y; - -static int keep_track = 1; - - -/* Hardware-dependent definitions. */ - -#ifndef GRUB_UTIL -/* The structure for speed vs. divisor. */ -struct divisor -{ - int speed; - unsigned short div; -}; - -/* Store the port number of a serial unit. */ -static unsigned short serial_hw_port = 0; - -/* The table which lists common configurations. */ -static struct divisor divisor_tab[] = - { - { 2400, 0x0030 }, - { 4800, 0x0018 }, - { 9600, 0x000C }, - { 19200, 0x0006 }, - { 38400, 0x0003 }, - { 57600, 0x0002 }, - { 115200, 0x0001 } - }; - -/* Read a byte from a port. */ -static inline unsigned char -inb (unsigned short port) -{ - unsigned char value; - - asm volatile ("inb %w1, %0" : "=a" (value) : "Nd" (port)); - asm volatile ("outb %%al, $0x80" : : ); - - return value; -} - -/* Write a byte to a port. */ -static inline void -outb (unsigned short port, unsigned char value) -{ - asm volatile ("outb %b0, %w1" : : "a" (value), "Nd" (port)); - asm volatile ("outb %%al, $0x80" : : ); -} - -/* Fetch a key. */ -int -serial_hw_fetch (void) -{ - if (inb (serial_hw_port + UART_LSR) & UART_DATA_READY) - return inb (serial_hw_port + UART_RX); - - return -1; -} - -/* Put a chararacter. */ -void -serial_hw_put (int c) -{ - int timeout = 100000; - - /* Wait until the transmitter holding register is empty. */ - while ((inb (serial_hw_port + UART_LSR) & UART_EMPTY_TRANSMITTER) == 0) - { - if (--timeout == 0) - /* There is something wrong. But what can I do? */ - return; - } - - outb (serial_hw_port + UART_TX, c); -} - -void -serial_hw_delay (void) -{ - outb (0x80, 0); -} - -/* Return the port number for the UNITth serial device. */ -unsigned short -serial_hw_get_port (int unit) -{ - /* The BIOS data area. */ - const unsigned short *addr = (const unsigned short *) 0x0400; - - return addr[unit]; -} - -/* Initialize a serial device. PORT is the port number for a serial device. - SPEED is a DTE-DTE speed which must be one of these: 2400, 4800, 9600, - 19200, 38400, 57600 and 115200. WORD_LEN is the word length to be used - for the device. Likewise, PARITY is the type of the parity and - STOP_BIT_LEN is the length of the stop bit. The possible values for - WORD_LEN, PARITY and STOP_BIT_LEN are defined in the header file as - macros. */ -int -serial_hw_init (unsigned short port, unsigned int speed, - int word_len, int parity, int stop_bit_len) -{ - int i; - unsigned short div = 0; - unsigned char status = 0; - - /* Turn off the interrupt. */ - outb (port + UART_IER, 0); - - /* Set DLAB. */ - outb (port + UART_LCR, UART_DLAB); - - /* Set the baud rate. */ - for (i = 0; i < sizeof (divisor_tab) / sizeof (divisor_tab[0]); i++) - if (divisor_tab[i].speed == speed) - { - div = divisor_tab[i].div; - break; - } - - if (div == 0) - return 0; - - outb (port + UART_DLL, div & 0xFF); - outb (port + UART_DLH, div >> 8); - - /* Set the line status. */ - status |= parity | word_len | stop_bit_len; - outb (port + UART_LCR, status); - - /* Enable the FIFO. */ - outb (port + UART_FCR, UART_ENABLE_FIFO); - - /* Turn on DTR, RTS, and OUT2. */ - outb (port + UART_MCR, UART_ENABLE_MODEM); - - /* Store the port number. */ - serial_hw_port = port; - - /* Drain the input buffer. */ - while (serial_checkkey () != -1) - (void) serial_getkey (); - - /* Get rid of TERM_NEED_INIT from the serial terminal. */ - for (i = 0; term_table[i].name; i++) - if (grub_strcmp (term_table[i].name, "serial") == 0) - { - term_table[i].flags &= ~TERM_NEED_INIT; - break; - } - - /* FIXME: should check if the serial terminal was found. */ - - return 1; -} -#endif /* ! GRUB_UTIL */ - - -/* Generic definitions. */ - -static void -serial_translate_key_sequence (void) -{ - const struct - { - char key; - char ascii; - } - three_code_table[] = - { - {'A', 16}, - {'B', 14}, - {'C', 6}, - {'D', 2}, - {'F', 5}, - {'H', 1}, - {'4', 4} - }; - - const struct - { - short key; - char ascii; - } - four_code_table[] = - { - {('1' | ('~' << 8)), 1}, - {('3' | ('~' << 8)), 4}, - {('5' | ('~' << 8)), 7}, - {('6' | ('~' << 8)), 3}, - }; - - /* The buffer must start with ``ESC [''. */ - if (*((unsigned short *) input_buf) != ('\e' | ('[' << 8))) - return; - - if (npending >= 3) - { - int i; - - for (i = 0; - i < sizeof (three_code_table) / sizeof (three_code_table[0]); - i++) - if (three_code_table[i].key == input_buf[2]) - { - input_buf[0] = three_code_table[i].ascii; - npending -= 2; - grub_memmove (input_buf + 1, input_buf + 3, npending - 1); - return; - } - } - - if (npending >= 4) - { - int i; - short key = *((short *) (input_buf + 2)); - - for (i = 0; - i < sizeof (four_code_table) / sizeof (four_code_table[0]); - i++) - if (four_code_table[i].key == key) - { - input_buf[0] = four_code_table[i].ascii; - npending -= 3; - grub_memmove (input_buf + 1, input_buf + 4, npending - 1); - return; - } - } -} - -static -int fill_input_buf (int nowait) -{ - int i; - - for (i = 0; i < 10000 && npending < sizeof (input_buf); i++) - { - int c; - - c = serial_hw_fetch (); - if (c >= 0) - { - input_buf[npending++] = c; - - /* Reset the counter to zero, to wait for the same interval. */ - i = 0; - } - - if (nowait) - break; - } - - /* Translate some key sequences. */ - serial_translate_key_sequence (); - - return npending; -} - -/* The serial version of getkey. */ -int -serial_getkey (void) -{ - int c; - - while (! fill_input_buf (0)) - ; - - c = input_buf[0]; - npending--; - grub_memmove (input_buf, input_buf + 1, npending); - - return c; -} - -/* The serial version of checkkey. */ -int -serial_checkkey (void) -{ - if (fill_input_buf (1)) - return input_buf[0]; - - return -1; -} - -/* The serial version of grub_putchar. */ -void -serial_putchar (int c) -{ - /* Keep track of the cursor. */ - if (keep_track) - { - /* The serial terminal doesn't have VGA fonts. */ - switch (c) - { - case DISP_UL: - c = ACS_ULCORNER; - break; - case DISP_UR: - c = ACS_URCORNER; - break; - case DISP_LL: - c = ACS_LLCORNER; - break; - case DISP_LR: - c = ACS_LRCORNER; - break; - case DISP_HORIZ: - c = ACS_HLINE; - break; - case DISP_VERT: - c = ACS_VLINE; - break; - case DISP_LEFT: - c = ACS_LARROW; - break; - case DISP_RIGHT: - c = ACS_RARROW; - break; - case DISP_UP: - c = ACS_UARROW; - break; - case DISP_DOWN: - c = ACS_DARROW; - break; - default: - break; - } - - switch (c) - { - case '\r': - serial_x = 0; - break; - - case '\n': - serial_y++; - break; - - case '\b': - case 127: - if (serial_x > 0) - serial_x--; - break; - - case '\a': - break; - - default: - if (serial_x >= 79) - { - serial_putchar ('\r'); - serial_putchar ('\n'); - } - serial_x++; - break; - } - } - - serial_hw_put (c); -} - -int -serial_getxy (void) -{ - return (serial_x << 8) | serial_y; -} - -void -serial_gotoxy (int x, int y) -{ - keep_track = 0; - ti_cursor_address (x, y); - keep_track = 1; - - serial_x = x; - serial_y = y; -} - -void -serial_cls (void) -{ - keep_track = 0; - ti_clear_screen (); - keep_track = 1; - - serial_x = serial_y = 0; -} - -void -serial_setcolorstate (color_state state) -{ - keep_track = 0; - if (state == COLOR_STATE_HIGHLIGHT) - ti_enter_standout_mode (); - else - ti_exit_standout_mode (); - keep_track = 1; -} - -#endif /* SUPPORT_SERIAL */ diff --git a/stage2/serial.h b/stage2/serial.h deleted file mode 100644 index 76c222720..000000000 --- a/stage2/serial.h +++ /dev/null @@ -1,93 +0,0 @@ -/* serial.h - serial device interface */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef GRUB_SERIAL_HEADER -#define GRUB_SERIAL_HEADER 1 - -/* Macros. */ - -/* The offsets of UART registers. */ -#define UART_TX 0 -#define UART_RX 0 -#define UART_DLL 0 -#define UART_IER 1 -#define UART_DLH 1 -#define UART_IIR 2 -#define UART_FCR 2 -#define UART_LCR 3 -#define UART_MCR 4 -#define UART_LSR 5 -#define UART_MSR 6 -#define UART_SR 7 - -/* For LSR bits. */ -#define UART_DATA_READY 0x01 -#define UART_EMPTY_TRANSMITTER 0x20 - -/* The type of parity. */ -#define UART_NO_PARITY 0x00 -#define UART_ODD_PARITY 0x08 -#define UART_EVEN_PARITY 0x18 - -/* The type of word length. */ -#define UART_5BITS_WORD 0x00 -#define UART_6BITS_WORD 0x01 -#define UART_7BITS_WORD 0x02 -#define UART_8BITS_WORD 0x03 - -/* The type of the length of stop bit. */ -#define UART_1_STOP_BIT 0x00 -#define UART_2_STOP_BITS 0x04 - -/* the switch of DLAB. */ -#define UART_DLAB 0x80 - -/* Enable the FIFO. */ -#define UART_ENABLE_FIFO 0xC7 - -/* Turn on DTR, RTS, and OUT2. */ -#define UART_ENABLE_MODEM 0x0B - - -/* Function prototypes. */ - -/* Fetch a key. */ -int serial_hw_fetch (void); - -/* Put a character. */ -void serial_hw_put (int c); - -/* Insert a delay. */ -void serial_hw_delay (void); - -/* Return the port number for the UNITth serial device. */ -unsigned short serial_hw_get_port (int unit); - -/* Initialize a serial device. */ -int serial_hw_init (unsigned short port, unsigned int speed, - int word_len, int parity, int stop_bit_len); - -#ifdef GRUB_UTIL -/* Set the file name of a serial device (or a pty device). This is a - function specific to the grub shell. */ -void serial_set_device (const char *device); -#endif /* GRUB_UTIL */ - -#endif /* ! GRUB_SERIAL_HEADER */ diff --git a/stage2/setjmp.S b/stage2/setjmp.S deleted file mode 100644 index 59161fef0..000000000 --- a/stage2/setjmp.S +++ /dev/null @@ -1,81 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* This is stolen from libc/x86/setjmp.S in the OSKit */ -/* - * Mach Operating System - * Copyright (c) 1991,1990,1989 Carnegie Mellon University - * All Rights Reserved. - * - * Permission to use, copy, modify and distribute this software and its - * documentation is hereby granted, provided that both the copyright - * notice and this permission notice appear in all copies of the - * software, derivative works or modified versions, and any portions - * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" - * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR - * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * - * Carnegie Mellon requests users of this software to return to - * - * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU - * School of Computer Science - * Carnegie Mellon University - * Pittsburgh PA 15213-3890 - * - * any improvements or extensions that they make and grant Carnegie Mellon - * the rights to redistribute these changes. - */ -/* - * C library -- _setjmp, _longjmp - * - * _longjmp(a,v) - * will generate a "return(v)" from - * the last call to - * _setjmp(a) - * by restoring registers from the stack, - * The previous signal state is NOT restored. - * - */ - -ENTRY(grub_setjmp) - movl 4(%esp), %ecx /* fetch buffer */ - movl %ebx, 0(%ecx) - movl %esi, 4(%ecx) - movl %edi, 8(%ecx) - movl %ebp, 12(%ecx) /* save frame pointer of caller */ - popl %edx - movl %esp, 16(%ecx) /* save stack pointer of caller */ - movl %edx, 20(%ecx) /* save pc of caller */ - xorl %eax, %eax - jmp *%edx - -ENTRY(grub_longjmp) - movl 8(%esp), %eax /* return(v) */ - movl 4(%esp), %ecx /* fetch buffer */ - movl 0(%ecx), %ebx - movl 4(%ecx), %esi - movl 8(%ecx), %edi - movl 12(%ecx), %ebp - movl 16(%ecx), %esp - orl %eax, %eax - jnz 0f - incl %eax -0: jmp *20(%ecx) /* done, return.... */ diff --git a/stage2/shared.h b/stage2/shared.h deleted file mode 100644 index 2db6cc662..000000000 --- a/stage2/shared.h +++ /dev/null @@ -1,1000 +0,0 @@ -/* shared.h - definitions used in all GRUB-specific code */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* - * Generic defines to use anywhere - */ - -#ifndef GRUB_SHARED_HEADER -#define GRUB_SHARED_HEADER 1 - -#include - -/* Add an underscore to a C symbol in assembler code if needed. */ -#ifdef HAVE_ASM_USCORE -# define EXT_C(sym) _ ## sym -#else -# define EXT_C(sym) sym -#endif - -/* Maybe redirect memory requests through grub_scratch_mem. */ -#ifdef GRUB_UTIL -extern char *grub_scratch_mem; -# define RAW_ADDR(x) ((x) + (int) grub_scratch_mem) -# define RAW_SEG(x) (RAW_ADDR ((x) << 4) >> 4) -#else -# define RAW_ADDR(x) (x) -# define RAW_SEG(x) (x) -#endif - -/* - * Integer sizes - */ - -#define MAXINT 0x7FFFFFFF - -/* Maximum command line size. Before you blindly increase this value, - see the comment in char_io.c (get_cmdline). */ -#define MAX_CMDLINE 1600 -#define NEW_HEAPSIZE 1500 - -/* 512-byte scratch area */ -#define SCRATCHADDR RAW_ADDR (0x77e00) -#define SCRATCHSEG RAW_SEG (0x77e0) - -/* - * This is the location of the raw device buffer. It is 31.5K - * in size. - */ - -#define BUFFERLEN 0x7e00 -#define BUFFERADDR RAW_ADDR (0x70000) -#define BUFFERSEG RAW_SEG (0x7000) - -#define BOOT_PART_TABLE RAW_ADDR (0x07be) - -/* - * BIOS disk defines - */ -#define BIOSDISK_READ 0x0 -#define BIOSDISK_WRITE 0x1 -#define BIOSDISK_ERROR_GEOMETRY 0x100 -#define BIOSDISK_FLAG_LBA_EXTENSION 0x1 -#define BIOSDISK_FLAG_CDROM 0x2 - -/* - * This is the filesystem (not raw device) buffer. - * It is 32K in size, do not overrun! - */ - -#define FSYS_BUFLEN 0x8000 -#define FSYS_BUF RAW_ADDR (0x68000) - -/* Command-line buffer for Multiboot kernels and modules. This area - includes the area into which Stage 1.5 and Stage 1 are loaded, but - that's no problem. */ -#define MB_CMDLINE_BUF RAW_ADDR (0x2000) -#define MB_CMDLINE_BUFLEN 0x6000 - -/* The buffer for the password. */ -#define PASSWORD_BUF RAW_ADDR (0x78000) -#define PASSWORD_BUFLEN 0x200 - -/* THe buffer for the filename of "/boot/grub/default". */ -#define DEFAULT_FILE_BUF (PASSWORD_BUF + PASSWORD_BUFLEN) -#define DEFAULT_FILE_BUFLEN 0x60 - -/* The buffer for the command-line. */ -#define CMDLINE_BUF (DEFAULT_FILE_BUF + DEFAULT_FILE_BUFLEN) -#define CMDLINE_BUFLEN MAX_CMDLINE - -/* The kill buffer for the command-line. */ -#define KILL_BUF (CMDLINE_BUF + CMDLINE_BUFLEN) -#define KILL_BUFLEN MAX_CMDLINE - -/* The history buffer for the command-line. */ -#define HISTORY_BUF (KILL_BUF + KILL_BUFLEN) -#define HISTORY_SIZE 5 -#define HISTORY_BUFLEN (MAX_CMDLINE * HISTORY_SIZE) - -/* The buffer for the completion. */ -#define COMPLETION_BUF (HISTORY_BUF + HISTORY_BUFLEN) -#define COMPLETION_BUFLEN MAX_CMDLINE - -/* The buffer for the unique string. */ -#define UNIQUE_BUF (COMPLETION_BUF + COMPLETION_BUFLEN) -#define UNIQUE_BUFLEN MAX_CMDLINE - -/* The buffer for the menu entries. */ -#define MENU_BUF (UNIQUE_BUF + UNIQUE_BUFLEN) -#define MENU_BUFLEN (0x8000 + PASSWORD_BUF - MENU_BUF) - -/* The size of the drive map. */ -#define DRIVE_MAP_SIZE 8 - -/* The size of the key map. */ -#define KEY_MAP_SIZE 128 - -/* The size of the io map. */ -#define IO_MAP_SIZE 128 - -/* - * Linux setup parameters - */ - -#define LINUX_MAGIC_SIGNATURE 0x53726448 /* "HdrS" */ -#define LINUX_DEFAULT_SETUP_SECTS 4 -#define LINUX_FLAG_CAN_USE_HEAP 0x80 -#define LINUX_INITRD_MAX_ADDRESS 0x38000000 -#define LINUX_MAX_SETUP_SECTS 64 -#define LINUX_BOOT_LOADER_TYPE 0x71 -#define LINUX_HEAP_END_OFFSET (0x9000 - 0x200) - -#define LINUX_BZIMAGE_ADDR RAW_ADDR (0x100000) -#define LINUX_ZIMAGE_ADDR RAW_ADDR (0x10000) -#define LINUX_OLD_REAL_MODE_ADDR RAW_ADDR (0x90000) -#define LINUX_SETUP_STACK 0x9000 - -#define LINUX_FLAG_BIG_KERNEL 0x1 - -/* Linux's video mode selection support. Actually I hate it! */ -#define LINUX_VID_MODE_NORMAL 0xFFFF -#define LINUX_VID_MODE_EXTENDED 0xFFFE -#define LINUX_VID_MODE_ASK 0xFFFD - -#define LINUX_CL_OFFSET 0x9000 -#define LINUX_CL_END_OFFSET 0x90FF -#define LINUX_SETUP_MOVE_SIZE 0x9100 -#define LINUX_CL_MAGIC 0xA33F - -/* - * General disk stuff - */ - -#define SECTOR_SIZE 0x200 -#define SECTOR_BITS 9 -#define BIOS_FLAG_FIXED_DISK 0x80 - -#define BOOTSEC_LOCATION RAW_ADDR (0x7C00) -#define BOOTSEC_SIGNATURE 0xAA55 -#define BOOTSEC_BPB_OFFSET 0x3 -#define BOOTSEC_BPB_LENGTH 0x3B -#define BOOTSEC_BPB_SYSTEM_ID 0x3 -#define BOOTSEC_BPB_HIDDEN_SECTORS 0x1C -#define BOOTSEC_PART_OFFSET 0x1BE -#define BOOTSEC_PART_LENGTH 0x40 -#define BOOTSEC_SIG_OFFSET 0x1FE -#define BOOTSEC_LISTSIZE 8 - -/* Not bad, perhaps. */ -#define NETWORK_DRIVE 0x20 - -/* - * GRUB specific information - * (in LSB order) - */ - -#include - -#define STAGE2_VER_MAJ_OFFS 0x6 -#define STAGE2_INSTALLPART 0x8 -#define STAGE2_SAVED_ENTRYNO 0xc -#define STAGE2_STAGE2_ID 0x10 -#define STAGE2_FORCE_LBA 0x11 -#define STAGE2_VER_STR_OFFS 0x12 - -/* Stage 2 identifiers */ -#define STAGE2_ID_STAGE2 0 -#define STAGE2_ID_FFS_STAGE1_5 1 -#define STAGE2_ID_E2FS_STAGE1_5 2 -#define STAGE2_ID_FAT_STAGE1_5 3 -#define STAGE2_ID_MINIX_STAGE1_5 4 -#define STAGE2_ID_REISERFS_STAGE1_5 5 -#define STAGE2_ID_VSTAFS_STAGE1_5 6 -#define STAGE2_ID_JFS_STAGE1_5 7 -#define STAGE2_ID_XFS_STAGE1_5 8 -#define STAGE2_ID_ISO9660_STAGE1_5 9 -#define STAGE2_ID_UFS2_STAGE1_5 10 - -#ifndef STAGE1_5 -# define STAGE2_ID STAGE2_ID_STAGE2 -#else -# if defined(FSYS_FFS) -# define STAGE2_ID STAGE2_ID_FFS_STAGE1_5 -# elif defined(FSYS_EXT2FS) -# define STAGE2_ID STAGE2_ID_E2FS_STAGE1_5 -# elif defined(FSYS_FAT) -# define STAGE2_ID STAGE2_ID_FAT_STAGE1_5 -# elif defined(FSYS_MINIX) -# define STAGE2_ID STAGE2_ID_MINIX_STAGE1_5 -# elif defined(FSYS_REISERFS) -# define STAGE2_ID STAGE2_ID_REISERFS_STAGE1_5 -# elif defined(FSYS_VSTAFS) -# define STAGE2_ID STAGE2_ID_VSTAFS_STAGE1_5 -# elif defined(FSYS_JFS) -# define STAGE2_ID STAGE2_ID_JFS_STAGE1_5 -# elif defined(FSYS_XFS) -# define STAGE2_ID STAGE2_ID_XFS_STAGE1_5 -# elif defined(FSYS_ISO9660) -# define STAGE2_ID STAGE2_ID_ISO9660_STAGE1_5 -# elif defined(FSYS_UFS2) -# define STAGE2_ID STAGE2_ID_UFS2_STAGE1_5 -# else -# error "unknown Stage 2" -# endif -#endif - -/* - * defines for use when switching between real and protected mode - */ - -#define CR0_PE_ON 0x1 -#define CR0_PE_OFF 0xfffffffe -#define PROT_MODE_CSEG 0x8 -#define PROT_MODE_DSEG 0x10 -#define PSEUDO_RM_CSEG 0x18 -#define PSEUDO_RM_DSEG 0x20 -#define STACKOFF (0x2000 - 0x10) -#define PROTSTACKINIT (FSYS_BUF - 0x10) - - -/* - * Assembly code defines - * - * "EXT_C" is assumed to be defined in the Makefile by the configure - * command. - */ - -#define ENTRY(x) .globl EXT_C(x) ; EXT_C(x): -#define VARIABLE(x) ENTRY(x) - - -#define K_RDWR 0x60 /* keyboard data & cmds (read/write) */ -#define K_STATUS 0x64 /* keyboard status */ -#define K_CMD 0x64 /* keybd ctlr command (write-only) */ - -#define K_OBUF_FUL 0x01 /* output buffer full */ -#define K_IBUF_FUL 0x02 /* input buffer full */ - -#define KC_CMD_WIN 0xd0 /* read output port */ -#define KC_CMD_WOUT 0xd1 /* write output port */ -#define KB_OUTPUT_MASK 0xdd /* enable output buffer full interrupt - enable data line - enable clock line */ -#define KB_A20_ENABLE 0x02 - -/* Codes for getchar. */ -#define ASCII_CHAR(x) ((x) & 0xFF) -#if !defined(GRUB_UTIL) || !defined(HAVE_LIBCURSES) -# define KEY_LEFT 0x4B00 -# define KEY_RIGHT 0x4D00 -# define KEY_UP 0x4800 -# define KEY_DOWN 0x5000 -# define KEY_IC 0x5200 /* insert char */ -# define KEY_DC 0x5300 /* delete char */ -# define KEY_BACKSPACE 0x0008 -# define KEY_HOME 0x4700 -# define KEY_END 0x4F00 -# define KEY_NPAGE 0x5100 -# define KEY_PPAGE 0x4900 -# define A_NORMAL 0x7 -# define A_REVERSE 0x70 -#elif defined(HAVE_NCURSES_CURSES_H) -# include -#elif defined(HAVE_NCURSES_H) -# include -#elif defined(HAVE_CURSES_H) -# include -#endif - -/* In old BSD curses, A_NORMAL and A_REVERSE are not defined, so we - define them here if they are undefined. */ -#ifndef A_NORMAL -# define A_NORMAL 0 -#endif /* ! A_NORMAL */ -#ifndef A_REVERSE -# ifdef A_STANDOUT -# define A_REVERSE A_STANDOUT -# else /* ! A_STANDOUT */ -# define A_REVERSE 0 -# endif /* ! A_STANDOUT */ -#endif /* ! A_REVERSE */ - -/* Define ACS_* ourselves, since the definitions are not consistent among - various curses implementations. */ -#undef ACS_ULCORNER -#undef ACS_URCORNER -#undef ACS_LLCORNER -#undef ACS_LRCORNER -#undef ACS_HLINE -#undef ACS_VLINE -#undef ACS_LARROW -#undef ACS_RARROW -#undef ACS_UARROW -#undef ACS_DARROW - -#define ACS_ULCORNER '+' -#define ACS_URCORNER '+' -#define ACS_LLCORNER '+' -#define ACS_LRCORNER '+' -#define ACS_HLINE '-' -#define ACS_VLINE '|' -#define ACS_LARROW '<' -#define ACS_RARROW '>' -#define ACS_UARROW '^' -#define ACS_DARROW 'v' - -/* Special graphics characters for IBM displays. */ -#define DISP_UL 218 -#define DISP_UR 191 -#define DISP_LL 192 -#define DISP_LR 217 -#define DISP_HORIZ 196 -#define DISP_VERT 179 -#define DISP_LEFT 0x1b -#define DISP_RIGHT 0x1a -#define DISP_UP 0x18 -#define DISP_DOWN 0x19 - -/* Remap some libc-API-compatible function names so that we prevent - circularararity. */ -#ifndef WITHOUT_LIBC_STUBS -#define memmove grub_memmove -#define memcpy grub_memmove /* we don't need a separate memcpy */ -#define memset grub_memset -#define isspace grub_isspace -#define printf grub_printf -#define sprintf grub_sprintf -#undef putchar -#define putchar grub_putchar -#define strncat grub_strncat -#define strstr grub_strstr -#define memcmp grub_memcmp -#define strcmp grub_strcmp -#define tolower grub_tolower -#define strlen grub_strlen -#define strcpy grub_strcpy -#endif /* WITHOUT_LIBC_STUBS */ - - -#ifndef ASM_FILE -/* - * Below this should be ONLY defines and other constructs for C code. - */ - -/* multiboot stuff */ - -#include "mb_header.h" -#include "mb_info.h" - -/* For the Linux/i386 boot protocol version 2.03. */ -struct linux_kernel_header -{ - char code1[0x0020]; - unsigned short cl_magic; /* Magic number 0xA33F */ - unsigned short cl_offset; /* The offset of command line */ - char code2[0x01F1 - 0x0020 - 2 - 2]; - unsigned char setup_sects; /* The size of the setup in sectors */ - unsigned short root_flags; /* If the root is mounted readonly */ - unsigned short syssize; /* obsolete */ - unsigned short swap_dev; /* obsolete */ - unsigned short ram_size; /* obsolete */ - unsigned short vid_mode; /* Video mode control */ - unsigned short root_dev; /* Default root device number */ - unsigned short boot_flag; /* 0xAA55 magic number */ - unsigned short jump; /* Jump instruction */ - unsigned long header; /* Magic signature "HdrS" */ - unsigned short version; /* Boot protocol version supported */ - unsigned long realmode_swtch; /* Boot loader hook */ - unsigned long start_sys; /* Points to kernel version string */ - unsigned char type_of_loader; /* Boot loader identifier */ - unsigned char loadflags; /* Boot protocol option flags */ - unsigned short setup_move_size; /* Move to high memory size */ - unsigned long code32_start; /* Boot loader hook */ - unsigned long ramdisk_image; /* initrd load address */ - unsigned long ramdisk_size; /* initrd size */ - unsigned long bootsect_kludge; /* obsolete */ - unsigned short heap_end_ptr; /* Free memory after setup end */ - unsigned short pad1; /* Unused */ - char *cmd_line_ptr; /* Points to the kernel command line */ - unsigned long initrd_addr_max; /* The highest address of initrd */ -} __attribute__ ((packed)); - -/* Memory map address range descriptor used by GET_MMAP_ENTRY. */ -struct mmar_desc -{ - unsigned long desc_len; /* Size of this descriptor. */ - unsigned long long addr; /* Base address. */ - unsigned long long length; /* Length in bytes. */ - unsigned long type; /* Type of address range. */ -} __attribute__ ((packed)); - -/* VBE controller information. */ -struct vbe_controller -{ - unsigned char signature[4]; - unsigned short version; - unsigned long oem_string; - unsigned long capabilities; - unsigned long video_mode; - unsigned short total_memory; - unsigned short oem_software_rev; - unsigned long oem_vendor_name; - unsigned long oem_product_name; - unsigned long oem_product_rev; - unsigned char reserved[222]; - unsigned char oem_data[256]; -} __attribute__ ((packed)); - -/* VBE mode information. */ -struct vbe_mode -{ - unsigned short mode_attributes; - unsigned char win_a_attributes; - unsigned char win_b_attributes; - unsigned short win_granularity; - unsigned short win_size; - unsigned short win_a_segment; - unsigned short win_b_segment; - unsigned long win_func; - unsigned short bytes_per_scanline; - - /* >=1.2 */ - unsigned short x_resolution; - unsigned short y_resolution; - unsigned char x_char_size; - unsigned char y_char_size; - unsigned char number_of_planes; - unsigned char bits_per_pixel; - unsigned char number_of_banks; - unsigned char memory_model; - unsigned char bank_size; - unsigned char number_of_image_pages; - unsigned char reserved0; - - /* direct color */ - unsigned char red_mask_size; - unsigned char red_field_position; - unsigned char green_mask_size; - unsigned char green_field_position; - unsigned char blue_mask_size; - unsigned char blue_field_position; - unsigned char reserved_mask_size; - unsigned char reserved_field_position; - unsigned char direct_color_mode_info; - - /* >=2.0 */ - unsigned long phys_base; - unsigned long reserved1; - unsigned short reversed2; - - /* >=3.0 */ - unsigned short linear_bytes_per_scanline; - unsigned char banked_number_of_image_pages; - unsigned char linear_number_of_image_pages; - unsigned char linear_red_mask_size; - unsigned char linear_red_field_position; - unsigned char linear_green_mask_size; - unsigned char linear_green_field_position; - unsigned char linear_blue_mask_size; - unsigned char linear_blue_field_position; - unsigned char linear_reserved_mask_size; - unsigned char linear_reserved_field_position; - unsigned long max_pixel_clock; - - /* Reserved field to make structure to be 256 bytes long, VESA BIOS - Extension 3.0 Specification says to reserve 189 bytes here but - that doesn't make structure to be 256 bytes. So additional one is - added here. */ - unsigned char reserved3[189 + 1]; -} __attribute__ ((packed)); - - -#undef NULL -#define NULL ((void *) 0) - -/* Error codes (descriptions are in common.c) */ -typedef enum -{ - ERR_NONE = 0, - ERR_BAD_FILENAME, - ERR_BAD_FILETYPE, - ERR_BAD_GZIP_DATA, - ERR_BAD_GZIP_HEADER, - ERR_BAD_PART_TABLE, - ERR_BAD_VERSION, - ERR_BELOW_1MB, - ERR_BOOT_COMMAND, - ERR_BOOT_FAILURE, - ERR_BOOT_FEATURES, - ERR_DEV_FORMAT, - ERR_DEV_VALUES, - ERR_EXEC_FORMAT, - ERR_FILELENGTH, - ERR_FILE_NOT_FOUND, - ERR_FSYS_CORRUPT, - ERR_FSYS_MOUNT, - ERR_GEOM, - ERR_NEED_LX_KERNEL, - ERR_NEED_MB_KERNEL, - ERR_NO_DISK, - ERR_NO_PART, - ERR_NUMBER_PARSING, - ERR_OUTSIDE_PART, - ERR_READ, - ERR_SYMLINK_LOOP, - ERR_UNRECOGNIZED, - ERR_WONT_FIT, - ERR_WRITE, - ERR_BAD_ARGUMENT, - ERR_UNALIGNED, - ERR_PRIVILEGED, - ERR_DEV_NEED_INIT, - ERR_NO_DISK_SPACE, - ERR_NUMBER_OVERFLOW, - - MAX_ERR_NUM -} grub_error_t; - -extern unsigned long install_partition; -extern unsigned long boot_drive; -extern unsigned long install_second_sector; -extern struct apm_info apm_bios_info; -extern unsigned long boot_part_addr; -extern int saved_entryno; -extern unsigned char force_lba; -extern char version_string[]; -extern char config_file[]; -extern unsigned long linux_text_len; -extern char *linux_data_tmp_addr; -extern char *linux_data_real_addr; - -#ifdef GRUB_UTIL -/* If not using config file, this variable is set to zero, - otherwise non-zero. */ -extern int use_config_file; -/* If using the preset menu, this variable is set to non-zero, - otherwise zero. */ -extern int use_preset_menu; -/* If not using curses, this variable is set to zero, otherwise non-zero. */ -extern int use_curses; -/* The flag for verbose messages. */ -extern int verbose; -/* The flag for read-only. */ -extern int read_only; -/* The number of floppies to be probed. */ -extern int floppy_disks; -/* The map between BIOS drives and UNIX device file names. */ -extern char **device_map; -/* The filename which stores the information about a device map. */ -extern char *device_map_file; -/* The array of geometries. */ -extern struct geometry *disks; -/* Assign DRIVE to a device name DEVICE. */ -extern void assign_device_name (int drive, const char *device); -#endif - -#ifndef STAGE1_5 -/* GUI interface variables. */ -# define MAX_FALLBACK_ENTRIES 8 -extern int fallback_entries[MAX_FALLBACK_ENTRIES]; -extern int fallback_entryno; -extern int default_entry; -extern int current_entryno; - -/* The constants for password types. */ -typedef enum -{ - PASSWORD_PLAIN, - PASSWORD_MD5, - PASSWORD_UNSUPPORTED -} -password_t; - -extern char *password; -extern password_t password_type; -extern int auth; -extern char commands[]; - -/* For `more'-like feature. */ -extern int max_lines; -extern int count_lines; -extern int use_pager; -#endif - -#ifndef NO_DECOMPRESSION -extern int no_decompression; -extern int compressed_file; -#endif - -/* instrumentation variables */ -extern void (*disk_read_hook) (int, int, int); -extern void (*disk_read_func) (int, int, int); - -#ifndef STAGE1_5 -/* The flag for debug mode. */ -extern int debug; -#endif /* STAGE1_5 */ - -extern unsigned long current_drive; -extern unsigned long current_partition; - -extern int fsys_type; - -/* The information for a disk geometry. The CHS information is only for - DOS/Partition table compatibility, and the real number of sectors is - stored in TOTAL_SECTORS. */ -struct geometry -{ - /* The number of cylinders */ - unsigned long cylinders; - /* The number of heads */ - unsigned long heads; - /* The number of sectors */ - unsigned long sectors; - /* The total number of sectors */ - unsigned long total_sectors; - /* Device sector size */ - unsigned long sector_size; - /* Flags */ - unsigned long flags; -}; - -extern unsigned long part_start; -extern unsigned long part_length; - -extern int current_slice; - -extern int buf_drive; -extern int buf_track; -extern struct geometry buf_geom; - -/* these are the current file position and maximum file position */ -extern int filepos; -extern int filemax; - -/* - * Common BIOS/boot data. - */ - -extern struct multiboot_info mbi; -extern unsigned long saved_drive; -extern unsigned long saved_partition; -extern unsigned long cdrom_drive; -#ifndef STAGE1_5 -extern unsigned long saved_mem_upper; -extern unsigned long extended_memory; -#endif - -/* - * Error variables. - */ - -extern grub_error_t errnum; -extern char *err_list[]; - -/* Simplify declaration of entry_addr. */ -typedef void (*entry_func) (int, int, int, int, int, int) - __attribute__ ((noreturn)); - -extern entry_func entry_addr; - -/* Enter the stage1.5/stage2 C code after the stack is set up. */ -void cmain (void); - -/* Halt the processor (called after an unrecoverable error). */ -void stop (void) __attribute__ ((noreturn)); - -/* Reboot the system. */ -void grub_reboot (void) __attribute__ ((noreturn)); - -/* Halt the system, using APM if possible. If NO_APM is true, don't use - APM even if it is available. */ -void grub_halt (int no_apm) __attribute__ ((noreturn)); - -/* Copy MAP to the drive map and set up int13_handler. */ -void set_int13_handler (unsigned short *map); - -/* Set up int15_handler. */ -void set_int15_handler (void); - -/* Restore the original int15 handler. */ -void unset_int15_handler (void); - -/* Track the int13 handler to probe I/O address space. */ -void track_int13 (int drive); - -/* The key map. */ -extern unsigned short bios_key_map[]; -extern unsigned short ascii_key_map[]; -extern unsigned short io_map[]; - -/* calls for direct boot-loader chaining */ -void chain_stage1 (unsigned long segment, unsigned long offset, - unsigned long part_table_addr) - __attribute__ ((noreturn)); -void chain_stage2 (unsigned long segment, unsigned long offset, - int second_sector) - __attribute__ ((noreturn)); - -/* do some funky stuff, then boot linux */ -void linux_boot (void) __attribute__ ((noreturn)); - -/* do some funky stuff, then boot bzImage linux */ -void big_linux_boot (void) __attribute__ ((noreturn)); - -/* booting a multiboot executable */ -void multi_boot (int start, int mb_info) __attribute__ ((noreturn)); - -/* If LINEAR is nonzero, then set the Intel processor to linear mode. - Otherwise, bit 20 of all memory accesses is always forced to zero, - causing a wraparound effect for bugwards compatibility with the - 8086 CPU. */ -void gateA20 (int linear); - -/* memory probe routines */ -int get_memsize (int type); -int get_eisamemsize (void); - -/* Fetch the next entry in the memory map and return the continuation - value. DESC is a pointer to the descriptor buffer, and CONT is the - previous continuation value (0 to get the first entry in the - map). */ -int get_mmap_entry (struct mmar_desc *desc, int cont); - -/* Get the linear address of a ROM configuration table. Return zero, - if fails. */ -unsigned long get_rom_config_table (void); - -/* Get APM BIOS information. */ -void get_apm_info (void); - -/* Get VBE controller information. */ -int get_vbe_controller_info (struct vbe_controller *controller); - -/* Get VBE mode information. */ -int get_vbe_mode_info (int mode_number, struct vbe_mode *mode); - -/* Set VBE mode. */ -int set_vbe_mode (int mode_number); - -/* Return the data area immediately following our code. */ -int get_code_end (void); - -/* low-level timing info */ -int getrtsecs (void); -int currticks (void); - -/* Clear the screen. */ -void cls (void); - -/* Turn on/off cursor. */ -int setcursor (int on); - -/* Get the current cursor position (where 0,0 is the top left hand - corner of the screen). Returns packed values, (RET >> 8) is x, - (RET & 0xff) is y. */ -int getxy (void); - -/* Set the cursor position. */ -void gotoxy (int x, int y); - -/* Displays an ASCII character. IBM displays will translate some - characters to special graphical ones (see the DISP_* constants). */ -void grub_putchar (int c); - -/* Wait for a keypress, and return its packed BIOS/ASCII key code. - Use ASCII_CHAR(ret) to extract the ASCII code. */ -int getkey (void); - -/* Like GETKEY, but doesn't block, and returns -1 if no keystroke is - available. */ -int checkkey (void); - -/* Low-level disk I/O */ -int get_diskinfo (int drive, struct geometry *geometry); -int biosdisk (int subfunc, int drive, struct geometry *geometry, - unsigned int sector, int nsec, int segment); -void stop_floppy (void); - -/* Command-line interface functions. */ -#ifndef STAGE1_5 - -/* The flags for the builtins. */ -#define BUILTIN_CMDLINE 0x1 /* Run in the command-line. */ -#define BUILTIN_MENU 0x2 /* Run in the menu. */ -#define BUILTIN_TITLE 0x4 /* Only for the command title. */ -#define BUILTIN_SCRIPT 0x8 /* Run in the script. */ -#define BUILTIN_NO_ECHO 0x10 /* Don't print command on booting. */ -#define BUILTIN_HELP_LIST 0x20 /* Show help in listing. */ - -/* The table for a builtin. */ -struct builtin -{ - /* The command name. */ - char *name; - /* The callback function. */ - int (*func) (char *, int); - /* The combination of the flags defined above. */ - int flags; - /* The short version of the documentation. */ - char *short_doc; - /* The long version of the documentation. */ - char *long_doc; -}; - -/* All the builtins are registered in this. */ -extern struct builtin *builtin_table[]; - -/* The constants for kernel types. */ -typedef enum -{ - KERNEL_TYPE_NONE, /* None is loaded. */ - KERNEL_TYPE_MULTIBOOT, /* Multiboot. */ - KERNEL_TYPE_LINUX, /* Linux. */ - KERNEL_TYPE_BIG_LINUX, /* Big Linux. */ - KERNEL_TYPE_FREEBSD, /* FreeBSD. */ - KERNEL_TYPE_NETBSD, /* NetBSD. */ - KERNEL_TYPE_CHAINLOADER /* Chainloader. */ -} -kernel_t; - -extern kernel_t kernel_type; -extern int show_menu; -extern int grub_timeout; - -void init_builtins (void); -void init_config (void); -char *skip_to (int after_equal, char *cmdline); -struct builtin *find_command (char *command); -void print_cmdline_message (int forever); -void enter_cmdline (char *heap, int forever); -int run_script (char *script, char *heap); -#endif - -/* C library replacement functions with identical semantics. */ -void grub_printf (const char *format,...); -int grub_sprintf (char *buffer, const char *format, ...); -int grub_tolower (int c); -int grub_isspace (int c); -int grub_strncat (char *s1, const char *s2, int n); -void *grub_memmove (void *to, const void *from, int len); -void *grub_memset (void *start, int c, int len); -int grub_strncat (char *s1, const char *s2, int n); -char *grub_strstr (const char *s1, const char *s2); -int grub_memcmp (const char *s1, const char *s2, int n); -int grub_strcmp (const char *s1, const char *s2); -int grub_strlen (const char *str); -char *grub_strcpy (char *dest, const char *src); - -#ifndef GRUB_UTIL -typedef unsigned long grub_jmp_buf[6]; -#else -/* In the grub shell, use the libc jmp_buf instead. */ -# include -# define grub_jmp_buf jmp_buf -#endif - -#ifdef GRUB_UTIL -# define grub_setjmp setjmp -# define grub_longjmp longjmp -#else /* ! GRUB_UTIL */ -int grub_setjmp (grub_jmp_buf env); -void grub_longjmp (grub_jmp_buf env, int val); -#endif /* ! GRUB_UTIL */ - -/* The environment for restarting Stage 2. */ -extern grub_jmp_buf restart_env; -/* The environment for restarting the command-line interface. */ -extern grub_jmp_buf restart_cmdline_env; - -/* misc */ -void init_page (void); -void print_error (void); -char *convert_to_ascii (char *buf, int c, ...); -int get_cmdline (char *prompt, char *cmdline, int maxlen, - int echo_char, int history); -int substring (const char *s1, const char *s2); -int nul_terminate (char *str); -int get_based_digit (int c, int base); -int safe_parse_maxint (char **str_ptr, int *myint_ptr); -int memcheck (int start, int len); -void grub_putstr (const char *str); - -#ifndef NO_DECOMPRESSION -/* Compression support. */ -int gunzip_test_header (void); -int gunzip_read (char *buf, int len); -#endif /* NO_DECOMPRESSION */ - -int rawread (int drive, unsigned int sector, int byte_offset, int byte_len, char *buf); -int devread (unsigned int sector, int byte_offset, int byte_len, char *buf); -int rawwrite (int drive, unsigned int sector, char *buf); -int devwrite (unsigned int sector, int sector_len, char *buf); - -/* Parse a device string and initialize the global parameters. */ -char *set_device (char *device); -int open_device (void); -int real_open_partition (int flags); -int open_partition (void); -int next_partition (unsigned long drive, unsigned long dest, - unsigned long *partition, int *type, - unsigned long *start, unsigned long *len, - unsigned long *offset, int *entry, - unsigned long *ext_offset, char *buf); - -/* Sets device to the one represented by the SAVED_* parameters. */ -int make_saved_active (void); - -/* Set or clear the current root partition's hidden flag. */ -int set_partition_hidden_flag (int hidden); - -/* Open a file or directory on the active device, using GRUB's - internal filesystem support. */ -int grub_open (char *filename); - -/* Read LEN bytes into BUF from the file that was opened with - GRUB_OPEN. If LEN is -1, read all the remaining data in the file. */ -int grub_read (char *buf, int len); - -/* Reposition a file offset. */ -int grub_seek (int offset); - -/* Close a file. */ -void grub_close (void); - -/* List the contents of the directory that was opened with GRUB_OPEN, - printing all completions. */ -int dir (char *dirname); - -int set_bootdev (int hdbias); - -/* Display statistics on the current active device. */ -void print_fsys_type (void); - -/* Display device and filename completions. */ -void print_a_completion (char *filename); -int print_completions (int is_filename, int is_completion); - -/* Copies the current partition data to the desired address. */ -void copy_current_part_entry (char *buf); - -#ifndef STAGE1_5 -void bsd_boot (kernel_t type, int bootdev, char *arg) - __attribute__ ((noreturn)); - -/* Define flags for load_image here. */ -/* Don't pass a Linux's mem option automatically. */ -#define KERNEL_LOAD_NO_MEM_OPTION (1 << 0) - -kernel_t load_image (char *kernel, char *arg, kernel_t suggested_type, - unsigned long load_flags); - -int load_module (char *module, char *arg); -int load_initrd (char *initrd); - -int check_password(char *entered, char* expected, password_t type); -#endif - -void init_bios_info (void); - -#endif /* ASM_FILE */ - -#endif /* ! GRUB_SHARED_HEADER */ diff --git a/stage2/size_test b/stage2/size_test deleted file mode 100644 index f2b8c945c..000000000 --- a/stage2/size_test +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/sh - -# Check the sizes of Stage 2 and Stage 1.5's. -# Copyright (C) 1999,2004 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -# Written by OKUJI Yoshinori - - -# This function checks if the size of the first argument (filename) is -# greater than the second argument (limit). If so, then exit with the -# status 1, otherwise do nothing. -check () -{ - file=$1 - limit=$2 - set dummy `ls -l $file` - size=$6 - if test $size -gt $limit; then - echo "$file is too big ($size > $limit)." - exit 1 - fi -} - -# The bootloader area of a FFS partition is 14 sectors. -check ffs_stage1_5 7168 - -check ufs2_stage1_5 7168 - -# Stage 1.5 can be installed in the sectors immediately after MBR in the -# first cylinder, so the size is (63 - 1) sectors. -check fat_stage1_5 31744 - -# Likewise. -check e2fs_stage1_5 31744 - -# Likewise. -check minix_stage1_5 31744 - -# Success. -exit 0 diff --git a/stage2/smp-imps.c b/stage2/smp-imps.c deleted file mode 100644 index a44d7867f..000000000 --- a/stage2/smp-imps.c +++ /dev/null @@ -1,756 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2005 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* - * - * - * Author: Erich Boleyn http://www.uruk.org/~erich/ - * - * Source file implementing Intel MultiProcessor Specification (MPS) - * version 1.1 and 1.4 SMP hardware control for Intel Architecture CPUs, - * with hooks for running correctly on a standard PC without the hardware. - * - * This file was created from information in the Intel MPS version 1.4 - * document, order number 242016-004, which can be ordered from the - * Intel literature center. - * - * General limitations of this code: - * - * (1) : This code has never been tested on an MPS-compatible system with - * 486 CPUs, but is expected to work. - * (2) : Presumes "int", "long", and "unsigned" are 32 bits in size, and - * that 32-bit pointers and memory addressing is used uniformly. - */ - -#define _SMP_IMPS_C - - -/* - * XXXXX The following absolutely must be defined!!! - * - * The "KERNEL_PRINT" could be made a null macro with no danger, of - * course, but pretty much nothing would work without the other - * ones defined. - */ - -#if 0 -#define KERNEL_PRINT(x) /* some kind of print function */ -#define CMOS_WRITE_BYTE(x,y) /* write unsigned char "y" at CMOS loc "x" */ -#define CMOS_READ_BYTE(x) /* read unsigned char at CMOS loc "x" */ -#define PHYS_TO_VIRTUAL(x) /* convert physical address "x" to virtual */ -#define VIRTUAL_TO_PHYS(x) /* convert virtual address "x" to physical */ -#endif - - -/* - * This is the Intel MultiProcessor Spec debugging/display code. - */ - -#define IMPS_DEBUG -#define KERNEL_PRINT(x) printf x -#define CMOS_WRITE_BYTE(x, y) cmos_write_byte(x, y) -#define CMOS_READ_BYTE(x) cmos_read_byte(x) -#define PHYS_TO_VIRTUAL(x) (x) -#define VIRTUAL_TO_PHYS(x) (x) - -static inline unsigned char -inb (unsigned short port) -{ - unsigned char data; - - __asm __volatile ("inb %1,%0" :"=a" (data):"d" (port)); - return data; -} - -static inline void -outb (unsigned short port, unsigned char val) -{ - __asm __volatile ("outb %0,%1"::"a" (val), "d" (port)); -} - - -static inline void -cmos_write_byte (int loc, int val) -{ - outb (0x70, loc); - outb (0x71, val); -} - -static inline unsigned -cmos_read_byte (int loc) -{ - outb (0x70, loc); - return inb (0x71); -} - - -/* - * Includes here - */ - -#include "shared.h" -#include "apic.h" -#include "smp-imps.h" - - -/* - * Defines that are here so as not to be in the global header file. - */ -#define EBDA_SEG_ADDR 0x40E -#define BIOS_RESET_VECTOR 0x467 -#define LAPIC_ADDR_DEFAULT 0xFEE00000uL -#define IOAPIC_ADDR_DEFAULT 0xFEC00000uL -#define CMOS_RESET_CODE 0xF -#define CMOS_RESET_JUMP 0xa -#define CMOS_BASE_MEMORY 0x15 - - -/* - * Static defines here for SMP use. - */ - -#define DEF_ENTRIES 23 - -static int lapic_dummy = 0; -static struct - { - imps_processor proc[2]; - imps_bus bus[2]; - imps_ioapic ioapic; - imps_interrupt intin[16]; - imps_interrupt lintin[2]; - } -defconfig = -{ - { - { - IMPS_BCT_PROCESSOR, 0, 0, 0, 0, 0 - } - , - { - IMPS_BCT_PROCESSOR, 1, 0, 0, 0, 0 - } - } - , - { - { - IMPS_BCT_BUS, 0, - { - 'E', 'I', 'S', 'A', ' ', ' ' - } - } - , - { - 255, 1, - { - 'P', 'C', 'I', ' ', ' ', ' ' - } - } - } - , - { - IMPS_BCT_IOAPIC, 0, 0, IMPS_FLAG_ENABLED, IOAPIC_ADDR_DEFAULT - } - , - { - { - IMPS_BCT_IO_INTERRUPT, IMPS_INT_EXTINT, 0, 0, 0, 0xFF, 0 - } - , - { - IMPS_BCT_IO_INTERRUPT, IMPS_INT_INT, 0, 0, 1, 0xFF, 1 - } - , - { - IMPS_BCT_IO_INTERRUPT, IMPS_INT_INT, 0, 0, 0, 0xFF, 2 - } - , - { - IMPS_BCT_IO_INTERRUPT, IMPS_INT_INT, 0, 0, 3, 0xFF, 3 - } - , - { - IMPS_BCT_IO_INTERRUPT, IMPS_INT_INT, 0, 0, 4, 0xFF, 4 - } - , - { - IMPS_BCT_IO_INTERRUPT, IMPS_INT_INT, 0, 0, 5, 0xFF, 5 - } - , - { - IMPS_BCT_IO_INTERRUPT, IMPS_INT_INT, 0, 0, 6, 0xFF, 6 - } - , - { - IMPS_BCT_IO_INTERRUPT, IMPS_INT_INT, 0, 0, 7, 0xFF, 7 - } - , - { - IMPS_BCT_IO_INTERRUPT, IMPS_INT_INT, 0, 0, 8, 0xFF, 8 - } - , - { - IMPS_BCT_IO_INTERRUPT, IMPS_INT_INT, 0, 0, 9, 0xFF, 9 - } - , - { - IMPS_BCT_IO_INTERRUPT, IMPS_INT_INT, 0, 0, 10, 0xFF, 10 - } - , - { - IMPS_BCT_IO_INTERRUPT, IMPS_INT_INT, 0, 0, 11, 0xFF, 11 - } - , - { - IMPS_BCT_IO_INTERRUPT, IMPS_INT_INT, 0, 0, 12, 0xFF, 12 - } - , - { - IMPS_BCT_IO_INTERRUPT, IMPS_INT_INT, 0, 0, 13, 0xFF, 13 - } - , - { - IMPS_BCT_IO_INTERRUPT, IMPS_INT_INT, 0, 0, 14, 0xFF, 14 - } - , - { - IMPS_BCT_IO_INTERRUPT, IMPS_INT_INT, 0, 0, 15, 0xFF, 15 - } - } - , - { - { - IMPS_BCT_LOCAL_INTERRUPT, IMPS_INT_EXTINT, 0, 0, 15, 0xFF, 0 - } - , - { - IMPS_BCT_LOCAL_INTERRUPT, IMPS_INT_NMI, 0, 0, 15, 0xFF, 1 - } - } -}; - -/* - * Exported globals here. - */ - -/* - * "imps_any_new_apics" is non-zero if any of the APICS (local or I/O) - * are *not* an 82489DX. This is useful to determine if more than 15 - * CPUs can be supported (true if zero). - */ -static int imps_any_new_apics = 0; -#if 0 -volatile int imps_release_cpus = 0; -#endif -/* - * "imps_enabled" is non-zero if the probe sequence found IMPS - * information and was successful. - */ -static int imps_enabled = 0; -/* - * This represents the number of CPUs found. - */ -static int imps_num_cpus = 1; -/* - * This contains the local APIC hardware address. - */ -static unsigned imps_lapic_addr = ((unsigned) (&lapic_dummy)) - LAPIC_ID; -/* - * These map from virtual cpu numbers to APIC id's and back. - */ -static unsigned char imps_cpu_apic_map[IMPS_MAX_CPUS]; -static unsigned char imps_apic_cpu_map[IMPS_MAX_CPUS]; - - -/* - * MPS checksum function - * - * Function finished. - */ - -static int -get_checksum (unsigned start, int length) -{ - unsigned sum = 0; - - while (length-- > 0) - { - sum += *((unsigned char *) (start++)); - } - - return (sum & 0xFF); -} - - -/* - * Primary function for booting individual CPUs. - * - * This must be modified to perform whatever OS-specific initialization - * that is required. - */ - -static int -boot_cpu (imps_processor * proc) -{ - unsigned bootaddr, accept_status; - unsigned bios_reset_vector = PHYS_TO_VIRTUAL (BIOS_RESET_VECTOR); - - /* %%%%% ESB */ - extern char patch_code[]; - bootaddr = 256 * 1024; - memmove ((char *) bootaddr, patch_code, 32); - - /* - * Generic CPU startup sequence starts here. - */ - - /* set BIOS reset vector */ - CMOS_WRITE_BYTE (CMOS_RESET_CODE, CMOS_RESET_JUMP); - *((volatile unsigned *) bios_reset_vector) = bootaddr << 12; - - /* clear the error register */ - if (proc->apic_ver & 0x10) - { - IMPS_LAPIC_WRITE (LAPIC_ESR, 0); - accept_status = IMPS_LAPIC_READ (LAPIC_ESR); - } - -#if 0 - /* assert INIT IPI */ - cfg = IMPS_LAPIC_READ (LAPIC_ICR + 1); - cfg &= LAPIC_DEST_MASK; - IMPS_LAPIC_WRITE (LAPIC_ICR + 1, cfg); - cfg = IMPS_LAPIC_READ (LAPIC_ACR); - cfg &=; - - /* %%%%% ESB finish adding startup sequence */ -#endif - - /* clean up BIOS reset vector */ - CMOS_WRITE_BYTE (CMOS_RESET_CODE, 0); - *((volatile unsigned *) bios_reset_vector) = 0; - - /* - * Generic CPU startup sequence ends here. - */ - - KERNEL_PRINT (("\n")); - - return 1; - - /* XXXXX add OS-specific initialization here! */ -} - - -/* - * read bios stuff and fill tables - */ - -static void -add_processor (imps_processor * proc) -{ - int apicid = proc->apic_id; - - KERNEL_PRINT ((" Processor [APIC id %d ver %d]: ", - apicid, proc->apic_ver)); - if (!(proc->flags & IMPS_FLAG_ENABLED)) - { - KERNEL_PRINT (("DISABLED\n")); - return; - } - if (proc->apic_ver > 0xF) - { - imps_any_new_apics = 1; - } - if (proc->flags & (IMPS_CPUFLAG_BOOT)) - { - KERNEL_PRINT (("#0 Bootstrap Processor (BSP)\n")); - return; - } - imps_cpu_apic_map[imps_num_cpus] = apicid; - imps_apic_cpu_map[apicid] = imps_num_cpus; - if (boot_cpu (proc)) - { - - /* XXXXX add OS-specific setup for secondary CPUs here */ - - imps_num_cpus++; - } -} - - -static void -add_bus (imps_bus * bus) -{ - char str[8]; - - memmove (str, bus->bus_type, 6); - str[6] = 0; - KERNEL_PRINT ((" Bus id %d is %s\n", bus->id, str)); - - /* XXXXX add OS-specific code here */ -} - - -static void -add_ioapic (imps_ioapic * ioapic) -{ - KERNEL_PRINT ((" I/O APIC id %d ver %d, address: 0x%x ", - ioapic->id, ioapic->ver, ioapic->addr)); - if (!(ioapic->flags & IMPS_FLAG_ENABLED)) - { - KERNEL_PRINT (("DISABLED\n")); - return; - } - KERNEL_PRINT (("\n")); - - /* XXXXX add OS-specific code here */ -} - - -static void -imps_read_config_table (unsigned start, int count) -{ - while (count-- > 0) - { - switch (*((unsigned char *) start)) - { - case IMPS_BCT_PROCESSOR: - add_processor ((imps_processor *) start); - start += 12; /* 20 total */ - break; - case IMPS_BCT_BUS: - add_bus ((imps_bus *) start); - break; - case IMPS_BCT_IOAPIC: - add_ioapic ((imps_ioapic *) start); - break; -#if 0 /* XXXXX uncomment this if "add_io_interrupt" is implemented */ - case IMPS_BCT_IO_INTERRUPT: - add_io_interrupt ((imps_interrupt *) start); - break; -#endif -#if 0 /* XXXXX uncomment this if "add_local_interrupt" is implemented */ - case IMPS_BCT_LOCAL_INTERRUPT: - add_local_interupt ((imps_interrupt *) start); - break; -#endif - default: - break; - } - start += 8; - } -} - - -static int -imps_bad_bios (imps_fps * fps_ptr) -{ - int sum; - imps_cth *local_cth_ptr - = (imps_cth *) PHYS_TO_VIRTUAL (fps_ptr->cth_ptr); - - if (fps_ptr->feature_info[0] > IMPS_FPS_DEFAULT_MAX) - { - KERNEL_PRINT ((" Invalid MP System Configuration type %d\n", - fps_ptr->feature_info[0])); - return 1; - } - - if (fps_ptr->cth_ptr) - { - sum = get_checksum ((unsigned) local_cth_ptr, - local_cth_ptr->base_length); - if (local_cth_ptr->sig != IMPS_CTH_SIGNATURE || sum) - { - KERNEL_PRINT - ((" Bad MP Config Table sig 0x%x and/or checksum 0x%x\n", - (unsigned) (fps_ptr->cth_ptr), sum)); - return 1; - } - if (local_cth_ptr->spec_rev != fps_ptr->spec_rev) - { - KERNEL_PRINT ((" Bad MP Config Table sub-revision # %d\n", local_cth_ptr->spec_rev)); - return 1; - } - if (local_cth_ptr->extended_length) - { - sum = (get_checksum (((unsigned) local_cth_ptr) - + local_cth_ptr->base_length, - local_cth_ptr->extended_length) - + local_cth_ptr->extended_checksum) & 0xFF; - if (sum) - { - KERNEL_PRINT - ((" Bad Extended MP Config Table checksum 0x%x\n", sum)); - return 1; - } - } - } - else if (!fps_ptr->feature_info[0]) - { - KERNEL_PRINT ((" Missing configuration information\n")); - return 1; - } - - return 0; -} - - -static void -imps_read_bios (imps_fps * fps_ptr) -{ - int apicid; - unsigned cth_start, cth_count; - imps_cth *local_cth_ptr - = (imps_cth *) PHYS_TO_VIRTUAL (fps_ptr->cth_ptr); - char *str_ptr; - - KERNEL_PRINT (("Intel MultiProcessor Spec 1.%d BIOS support detected\n", - fps_ptr->spec_rev)); - - /* - * Do all checking of errors which would definitely - * lead to failure of the SMP boot here. - */ - - if (imps_bad_bios (fps_ptr)) - { - KERNEL_PRINT ((" Disabling MPS support\n")); - return; - } - - if (fps_ptr->feature_info[1] & IMPS_FPS_IMCRP_BIT) - { - str_ptr = "IMCR and PIC"; - } - else - { - str_ptr = "Virtual Wire"; - } - if (fps_ptr->cth_ptr) - { - imps_lapic_addr = local_cth_ptr->lapic_addr; - } - else - { - imps_lapic_addr = LAPIC_ADDR_DEFAULT; - } - KERNEL_PRINT - ((" APIC config: \"%s mode\" Local APIC address: 0x%x\n", - str_ptr, imps_lapic_addr)); - imps_lapic_addr = PHYS_TO_VIRTUAL (imps_lapic_addr); - - /* - * Setup primary CPU. - */ - apicid = IMPS_LAPIC_READ (LAPIC_SPIV); - IMPS_LAPIC_WRITE (LAPIC_SPIV, apicid | LAPIC_SPIV_ENABLE_APIC); - imps_any_new_apics = IMPS_LAPIC_READ (LAPIC_VER) & 0xF0; - apicid = IMPS_APIC_ID (IMPS_LAPIC_READ (LAPIC_ID)); - imps_cpu_apic_map[0] = apicid; - imps_apic_cpu_map[apicid] = 0; - - if (fps_ptr->cth_ptr) - { - char str1[16], str2[16]; - memcpy (str1, local_cth_ptr->oem_id, 8); - str1[8] = 0; - memcpy (str2, local_cth_ptr->prod_id, 12); - str2[12] = 0; - KERNEL_PRINT ((" OEM id: %s Product id: %s\n", str1, str2)); - cth_start = ((unsigned) local_cth_ptr) + sizeof (imps_cth); - cth_count = local_cth_ptr->entry_count; - } - else - { - *((volatile unsigned *) IOAPIC_ADDR_DEFAULT) = IOAPIC_ID; - defconfig.ioapic.id - = IMPS_APIC_ID (*((volatile unsigned *) - (IOAPIC_ADDR_DEFAULT + IOAPIC_RW))); - *((volatile unsigned *) IOAPIC_ADDR_DEFAULT) = IOAPIC_VER; - defconfig.ioapic.ver - = APIC_VERSION (*((volatile unsigned *) - (IOAPIC_ADDR_DEFAULT + IOAPIC_RW))); - defconfig.proc[apicid].flags - = IMPS_FLAG_ENABLED | IMPS_CPUFLAG_BOOT; - defconfig.proc[!apicid].flags = IMPS_FLAG_ENABLED; - imps_num_cpus = 2; - if (fps_ptr->feature_info[0] == 1 - || fps_ptr->feature_info[0] == 5) - { - memcpy (defconfig.bus[0].bus_type, "ISA ", 6); - } - if (fps_ptr->feature_info[0] == 4 - || fps_ptr->feature_info[0] == 7) - { - memcpy (defconfig.bus[0].bus_type, "MCA ", 6); - } - if (fps_ptr->feature_info[0] > 4) - { - defconfig.proc[0].apic_ver = 0x10; - defconfig.proc[1].apic_ver = 0x10; - defconfig.bus[1].type = IMPS_BCT_BUS; - } - if (fps_ptr->feature_info[0] == 2) - { - defconfig.intin[2].type = 255; - defconfig.intin[13].type = 255; - } - if (fps_ptr->feature_info[0] == 7) - { - defconfig.intin[0].type = 255; - } - cth_start = (unsigned) &defconfig; - cth_count = DEF_ENTRIES; - } - imps_read_config_table (cth_start, cth_count); - - /* %%%%% ESB read extended entries here */ - - imps_enabled = 1; -} - - -/* - * Given a region to check, this actually looks for the "MP Floating - * Pointer Structure". The return value indicates if the correct - * signature and checksum for a floating pointer structure of the - * appropriate spec revision was found. If so, then do not search - * further. - * - * NOTE: The memory scan will always be in the bottom 1 MB. - * - * This function presumes that "start" will always be aligned to a 16-bit - * boundary. - * - * Function finished. - */ - -static int -imps_scan (unsigned start, unsigned length) -{ - IMPS_DEBUG_PRINT (("Scanning from 0x%x for %d bytes\n", - start, length)); - - while (length > 0) - { - imps_fps *fps_ptr = (imps_fps *) PHYS_TO_VIRTUAL (start); - - if (fps_ptr->sig == IMPS_FPS_SIGNATURE - && fps_ptr->length == 1 - && (fps_ptr->spec_rev == 1 || fps_ptr->spec_rev == 4) - && !get_checksum (start, 16)) - { - IMPS_DEBUG_PRINT (("Found MP Floating Structure Pointer at %x\n", start)); - imps_read_bios (fps_ptr); - return 1; - } - - length -= 16; - start += 16; - } - - return 0; -} - - -/* - * This is the primary function for probing for MPS compatible hardware - * and BIOS information. Call this during the early stages of OS startup, - * before memory can be messed up. - * - * The probe looks for the "MP Floating Pointer Structure" at locations - * listed at the top of page 4-2 of the spec. - * - * Environment requirements from the OS to run: - * - * (1) : A non-linear virtual to physical memory mapping is probably OK, - * as (I think) the structures all fall within page boundaries, - * but a linear mapping is recommended. Currently assumes that - * the mapping will remain identical over time (which should be - * OK since it only accesses memory which shouldn't be munged - * by the OS anyway). - * (2) : The OS only consumes memory which the BIOS says is OK to use, - * and not any of the BIOS standard areas (the areas 0x400 to - * 0x600, the EBDA, 0xE0000 to 0xFFFFF, and unreported physical - * RAM). Sometimes a small amount of physical RAM is not - * reported by the BIOS, to be used to store MPS and other - * information. - * (3) : It must be possible to read the CMOS. - * (4) : There must be between 512K and 640K of lower memory (this is a - * sanity check). - * - * Function finished. - */ - -int -imps_probe (void) -{ - /* - * Determine possible address of the EBDA - */ - unsigned ebda_addr = *((unsigned short *) - PHYS_TO_VIRTUAL (EBDA_SEG_ADDR)) << 4; - - /* - * Determine amount of installed lower memory (not *available* - * lower memory). - * - * NOTE: This should work reliably as long as we verify the - * machine is at least a system that could possibly have - * MPS compatibility to begin with. - */ - unsigned mem_lower = ((CMOS_READ_BYTE (CMOS_BASE_MEMORY + 1) << 8) - | CMOS_READ_BYTE (CMOS_BASE_MEMORY)) << 10; - -#ifdef IMPS_DEBUG - imps_enabled = 0; - imps_num_cpus = 1; -#endif - - /* - * Sanity check : if this isn't reasonable, it is almost impossibly - * unlikely to be an MPS compatible machine, so return failure. - */ - if (mem_lower < 512 * 1024 || mem_lower > 640 * 1024) - { - return 0; - } - - if (ebda_addr > mem_lower - 1024 - || ebda_addr + *((unsigned char *) PHYS_TO_VIRTUAL (ebda_addr)) - * 1024 > mem_lower) - { - ebda_addr = 0; - } - - if (((ebda_addr && imps_scan (ebda_addr, 1024)) - || (!ebda_addr && imps_scan (mem_lower - 1024, 1024)) - || imps_scan (0xF0000, 0x10000)) && imps_enabled) - { - return 1; - } - - /* - * If no BIOS info on MPS hardware is found, then return failure. - */ - - return 0; -} diff --git a/stage2/smp-imps.h b/stage2/smp-imps.h deleted file mode 100644 index c0fdce346..000000000 --- a/stage2/smp-imps.h +++ /dev/null @@ -1,208 +0,0 @@ -/* - * - * - * Author: Erich Boleyn http://www.uruk.org/~erich/ - * - * Header file implementing Intel MultiProcessor Specification (MPS) - * version 1.1 and 1.4 SMP hardware control for Intel Architecture CPUs, - * with hooks for running correctly on a standard PC without the hardware. - * - * This file was created from information in the Intel MPS version 1.4 - * document, order number 242016-004, which can be ordered from the - * Intel literature center. - */ - -#ifndef _SMP_IMPS_H -#define _SMP_IMPS_H - -/* make sure "apic.h" is included */ -#ifndef _APIC_H -#error Must include "apic.h" before "smp-imps.h" -#endif /* !_APIC_H */ - -/* - * Defines used. - */ - -#ifdef IMPS_DEBUG -#define IMPS_DEBUG_PRINT(x) KERNEL_PRINT(x) -#else /* !IMPS_DEBUG */ -#define IMPS_DEBUG_PRINT(x) -#endif /* !IMPS_DEBUG */ - -#define IMPS_MAX_CPUS APIC_BROADCAST_ID - -/* - * Defines representing limitations on values usable in different - * situations. This mostly depends on whether the APICs are old - * (82489DX) or new (SIO or Pentium/Pentium Pro integrated APICs). - * - * NOTE: It appears that the APICs must either be all old or all new, - * or broadcasts won't work right. - * NOTE #2: Given that, the maximum ID which can be sent to predictably - * is 14 for new APICs and 254 for old APICs. So, this all implies that - * a maximum of 15 processors is supported with the new APICs, and a - * maximum of 255 processors with the old APICs. - */ - -#define IMPS_APIC_ID(x) \ - ( imps_any_new_apics ? APIC_NEW_ID(x) : APIC_OLD_ID(x) ) - -/* - * This is the value that must be in the "sig" member of the MP - * Floating Pointer Structure. - */ -#define IMPS_FPS_SIGNATURE ('_' | ('M'<<8) | ('P'<<16) | ('_'<<24)) -#define IMPS_FPS_IMCRP_BIT 0x80 -#define IMPS_FPS_DEFAULT_MAX 7 - -/* - * This is the value that must be in the "sig" member of the MP - * Configuration Table Header. - */ -#define IMPS_CTH_SIGNATURE ('P' | ('C'<<8) | ('M'<<16) | ('P'<<24)) - -/* - * These are the "type" values for Base MP Configuration Table entries. - */ -#define IMPS_FLAG_ENABLED 1 -#define IMPS_BCT_PROCESSOR 0 -#define IMPS_CPUFLAG_BOOT 2 -#define IMPS_BCT_BUS 1 -#define IMPS_BCT_IOAPIC 2 -#define IMPS_BCT_IO_INTERRUPT 3 -#define IMPS_BCT_LOCAL_INTERRUPT 4 -#define IMPS_INT_INT 0 -#define IMPS_INT_NMI 1 -#define IMPS_INT_SMI 2 -#define IMPS_INT_EXTINT 3 - - -/* - * Typedefs and data item definitions done here. - */ - -typedef struct imps_fps imps_fps; /* MP floating pointer structure */ -typedef struct imps_cth imps_cth; /* MP configuration table header */ -typedef struct imps_processor imps_processor; -typedef struct imps_bus imps_bus; -typedef struct imps_ioapic imps_ioapic; -typedef struct imps_interrupt imps_interrupt; - - -/* - * Data structures defined here - */ - -/* - * MP Floating Pointer Structure (fps) - * - * Look at page 4-3 of the MP spec for the starting definitions of - * this structure. - */ -struct imps_fps - { - unsigned sig; - imps_cth *cth_ptr; - unsigned char length; - unsigned char spec_rev; - unsigned char checksum; - unsigned char feature_info[5]; - }; - -/* - * MP Configuration Table Header (cth) - * - * Look at page 4-5 of the MP spec for the starting definitions of - * this structure. - */ -struct imps_cth - { - unsigned sig; - unsigned short base_length; - unsigned char spec_rev; - unsigned char checksum; - char oem_id[8]; - char prod_id[12]; - unsigned oem_table_ptr; - unsigned short oem_table_size; - unsigned short entry_count; - unsigned lapic_addr; - unsigned short extended_length; - unsigned char extended_checksum; - char reserved[1]; - }; - -/* - * Base MP Configuration Table Types. They are sorted according to - * type (i.e. all of type 0 come first, etc.). Look on page 4-6 for - * the start of the descriptions. - */ - -struct imps_processor - { - unsigned char type; /* must be 0 */ - unsigned char apic_id; - unsigned char apic_ver; - unsigned char flags; - unsigned signature; - unsigned features; - char reserved[8]; - }; - -struct imps_bus - { - unsigned char type; /* must be 1 */ - unsigned char id; - char bus_type[6]; - }; - -struct imps_ioapic - { - unsigned char type; /* must be 2 */ - unsigned char id; - unsigned char ver; - unsigned char flags; - unsigned addr; - }; - -struct imps_interrupt - { - unsigned char type; /* must be 3 or 4 */ - unsigned char int_type; - unsigned short flags; - unsigned char source_bus_id; - unsigned char source_bus_irq; - unsigned char dest_apic_id; - unsigned char dest_apic_intin; - }; - - -/* - * Exported globals here. - */ - -/* - * This is the primary function for probing for Intel MPS 1.1/1.4 - * compatible hardware and BIOS information. While probing the CPUs - * information returned from the BIOS, this also starts up each CPU - * and gets it ready for use. - * - * Call this during the early stages of OS startup, before memory can - * be messed up. - * - * Returns 1 if IMPS information was found and is valid, else 0. - */ - -int imps_probe (void); - - -/* - * Defines that use variables - */ - -#define IMPS_LAPIC_READ(x) (*((volatile unsigned *) (imps_lapic_addr+(x)))) -#define IMPS_LAPIC_WRITE(x, y) \ - (*((volatile unsigned *) (imps_lapic_addr+(x))) = (y)) - -#endif /* !_SMP_IMPS_H */ diff --git a/stage2/stage1_5.c b/stage2/stage1_5.c deleted file mode 100644 index 5c45d4cef..000000000 --- a/stage2/stage1_5.c +++ /dev/null @@ -1,69 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2001,2002 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "shared.h" - -static int saved_sector = -1; - -static void -disk_read_savesect_func (int sector, int offset, int length) -{ - saved_sector = sector; -} - -void -cmain (void) -{ - grub_printf ("\n\nGRUB loading, please wait...\n"); - - /* - * Here load the true second-stage boot-loader. - */ - - if (grub_open (config_file)) - { - int ret; - - disk_read_hook = disk_read_savesect_func; - grub_read ((char *) 0x8000, SECTOR_SIZE * 2); - disk_read_hook = NULL; - - /* Sanity check: catch an internal error. */ - if (saved_sector == -1) - { - grub_printf ("internal error: the second sector of Stage 2 is unknown."); - stop (); - } - - ret = grub_read ((char *) 0x8000 + SECTOR_SIZE * 2, -1); - - grub_close (); - - if (ret) - chain_stage2 (0, 0x8200, saved_sector); - } - - /* - * If not, then print error message and die. - */ - - print_error (); - - stop (); -} diff --git a/stage2/stage2.c b/stage2/stage2.c deleted file mode 100644 index 040c22dd6..000000000 --- a/stage2/stage2.c +++ /dev/null @@ -1,1071 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000,2001,2002,2004,2005 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include - -grub_jmp_buf restart_env; - -#if defined(PRESET_MENU_STRING) || defined(SUPPORT_DISKLESS) - -# if defined(PRESET_MENU_STRING) -static const char *preset_menu = PRESET_MENU_STRING; -# elif defined(SUPPORT_DISKLESS) -/* Execute the command "bootp" automatically. */ -static const char *preset_menu = "bootp\n"; -# endif /* SUPPORT_DISKLESS */ - -static int preset_menu_offset; - -static int -open_preset_menu (void) -{ -#ifdef GRUB_UTIL - /* Unless the user explicitly requests to use the preset menu, - always opening the preset menu fails in the grub shell. */ - if (! use_preset_menu) - return 0; -#endif /* GRUB_UTIL */ - - preset_menu_offset = 0; - return preset_menu != 0; -} - -static int -read_from_preset_menu (char *buf, int maxlen) -{ - int len = grub_strlen (preset_menu + preset_menu_offset); - - if (len > maxlen) - len = maxlen; - - grub_memmove (buf, preset_menu + preset_menu_offset, len); - preset_menu_offset += len; - - return len; -} - -static void -close_preset_menu (void) -{ - /* Disable the preset menu. */ - preset_menu = 0; -} - -#else /* ! PRESET_MENU_STRING && ! SUPPORT_DISKLESS */ - -#define open_preset_menu() 0 -#define read_from_preset_menu(buf, maxlen) 0 -#define close_preset_menu() - -#endif /* ! PRESET_MENU_STRING && ! SUPPORT_DISKLESS */ - -static char * -get_entry (char *list, int num, int nested) -{ - int i; - - for (i = 0; i < num; i++) - { - do - { - while (*(list++)); - } - while (nested && *(list++)); - } - - return list; -} - -/* Print an entry in a line of the menu box. */ -static void -print_entry (int y, int highlight, char *entry) -{ - int x; - - if (current_term->setcolorstate) - current_term->setcolorstate (COLOR_STATE_NORMAL); - - if (highlight && current_term->setcolorstate) - current_term->setcolorstate (COLOR_STATE_HIGHLIGHT); - - gotoxy (2, y); - grub_putchar (' '); - for (x = 3; x < 75; x++) - { - if (*entry && x <= 72) - { - if (x == 72) - grub_putchar (DISP_RIGHT); - else - grub_putchar (*entry++); - } - else - grub_putchar (' '); - } - gotoxy (74, y); - - if (current_term->setcolorstate) - current_term->setcolorstate (COLOR_STATE_STANDARD); -} - -/* Print entries in the menu box. */ -static void -print_entries (int y, int size, int first, int entryno, char *menu_entries) -{ - int i; - - gotoxy (77, y + 1); - - if (first) - grub_putchar (DISP_UP); - else - grub_putchar (' '); - - menu_entries = get_entry (menu_entries, first, 0); - - for (i = 0; i < size; i++) - { - print_entry (y + i + 1, entryno == i, menu_entries); - - while (*menu_entries) - menu_entries++; - - if (*(menu_entries - 1)) - menu_entries++; - } - - gotoxy (77, y + size); - - if (*menu_entries) - grub_putchar (DISP_DOWN); - else - grub_putchar (' '); - - gotoxy (74, y + entryno + 1); -} - -static void -print_entries_raw (int size, int first, char *menu_entries) -{ - int i; - -#define LINE_LENGTH 67 - - for (i = 0; i < LINE_LENGTH; i++) - grub_putchar ('-'); - grub_putchar ('\n'); - - for (i = first; i < size; i++) - { - /* grub's printf can't %02d so ... */ - if (i < 10) - grub_putchar (' '); - grub_printf ("%d: %s\n", i, get_entry (menu_entries, i, 0)); - } - - for (i = 0; i < LINE_LENGTH; i++) - grub_putchar ('-'); - grub_putchar ('\n'); - -#undef LINE_LENGTH -} - - -static void -print_border (int y, int size) -{ - int i; - - if (current_term->setcolorstate) - current_term->setcolorstate (COLOR_STATE_NORMAL); - - gotoxy (1, y); - - grub_putchar (DISP_UL); - for (i = 0; i < 73; i++) - grub_putchar (DISP_HORIZ); - grub_putchar (DISP_UR); - - i = 1; - while (1) - { - gotoxy (1, y + i); - - if (i > size) - break; - - grub_putchar (DISP_VERT); - gotoxy (75, y + i); - grub_putchar (DISP_VERT); - - i++; - } - - grub_putchar (DISP_LL); - for (i = 0; i < 73; i++) - grub_putchar (DISP_HORIZ); - grub_putchar (DISP_LR); - - if (current_term->setcolorstate) - current_term->setcolorstate (COLOR_STATE_STANDARD); -} - -static void -run_menu (char *menu_entries, char *config_entries, int num_entries, - char *heap, int entryno) -{ - int c, time1, time2 = -1, first_entry = 0; - char *cur_entry = 0; - - /* - * Main loop for menu UI. - */ - -restart: - /* Dumb terminal always use all entries for display - invariant for TERM_DUMB: first_entry == 0 */ - if (! (current_term->flags & TERM_DUMB)) - { - while (entryno > 11) - { - first_entry++; - entryno--; - } - } - - /* If the timeout was expired or wasn't set, force to show the menu - interface. */ - if (grub_timeout < 0) - show_menu = 1; - - /* If SHOW_MENU is false, don't display the menu until ESC is pressed. */ - if (! show_menu) - { - /* Get current time. */ - while ((time1 = getrtsecs ()) == 0xFF) - ; - - while (1) - { - /* Check if ESC is pressed. */ - if (checkkey () != -1 && ASCII_CHAR (getkey ()) == '\e') - { - grub_timeout = -1; - show_menu = 1; - break; - } - - /* If GRUB_TIMEOUT is expired, boot the default entry. */ - if (grub_timeout >=0 - && (time1 = getrtsecs ()) != time2 - && time1 != 0xFF) - { - if (grub_timeout <= 0) - { - grub_timeout = -1; - goto boot_entry; - } - - time2 = time1; - grub_timeout--; - - /* Print a message. */ - grub_printf ("\rPress `ESC' to enter the menu... %d ", - grub_timeout); - } - } - } - - /* Only display the menu if the user wants to see it. */ - if (show_menu) - { - init_page (); - setcursor (0); - - if (current_term->flags & TERM_DUMB) - print_entries_raw (num_entries, first_entry, menu_entries); - else - print_border (3, 12); - - grub_printf ("\n\ - Use the %c and %c keys to select which entry is highlighted.\n", - DISP_UP, DISP_DOWN); - - if (! auth && password) - { - printf ("\ - Press enter to boot the selected OS or \'p\' to enter a\n\ - password to unlock the next set of features."); - } - else - { - if (config_entries) - printf ("\ - Press enter to boot the selected OS, \'e\' to edit the\n\ - commands before booting, or \'c\' for a command-line."); - else - printf ("\ - Press \'b\' to boot, \'e\' to edit the selected command in the\n\ - boot sequence, \'c\' for a command-line, \'o\' to open a new line\n\ - after (\'O\' for before) the selected line, \'d\' to remove the\n\ - selected line, or escape to go back to the main menu."); - } - - if (current_term->flags & TERM_DUMB) - grub_printf ("\n\nThe selected entry is %d ", entryno); - else - print_entries (3, 12, first_entry, entryno, menu_entries); - } - - /* XX using RT clock now, need to initialize value */ - while ((time1 = getrtsecs()) == 0xFF); - - while (1) - { - /* Initialize to NULL just in case... */ - cur_entry = NULL; - - if (grub_timeout >= 0 && (time1 = getrtsecs()) != time2 && time1 != 0xFF) - { - if (grub_timeout <= 0) - { - grub_timeout = -1; - break; - } - - /* else not booting yet! */ - time2 = time1; - - if (current_term->flags & TERM_DUMB) - grub_printf ("\r Entry %d will be booted automatically in %d seconds. ", - entryno, grub_timeout); - else - { - gotoxy (3, 22); - grub_printf ("The highlighted entry will be booted automatically in %d seconds. ", - grub_timeout); - gotoxy (74, 4 + entryno); - } - - grub_timeout--; - } - - /* Check for a keypress, however if TIMEOUT has been expired - (GRUB_TIMEOUT == -1) relax in GETKEY even if no key has been - pressed. - This avoids polling (relevant in the grub-shell and later on - in grub if interrupt driven I/O is done). */ - if (checkkey () >= 0 || grub_timeout < 0) - { - /* Key was pressed, show which entry is selected before GETKEY, - since we're comming in here also on GRUB_TIMEOUT == -1 and - hang in GETKEY */ - if (current_term->flags & TERM_DUMB) - grub_printf ("\r Highlighted entry is %d: ", entryno); - - c = ASCII_CHAR (getkey ()); - - if (grub_timeout >= 0) - { - if (current_term->flags & TERM_DUMB) - grub_putchar ('\r'); - else - gotoxy (3, 22); - printf (" "); - grub_timeout = -1; - fallback_entryno = -1; - if (! (current_term->flags & TERM_DUMB)) - gotoxy (74, 4 + entryno); - } - - /* We told them above (at least in SUPPORT_SERIAL) to use - '^' or 'v' so accept these keys. */ - if (c == 16 || c == '^') - { - if (current_term->flags & TERM_DUMB) - { - if (entryno > 0) - entryno--; - } - else - { - if (entryno > 0) - { - print_entry (4 + entryno, 0, - get_entry (menu_entries, - first_entry + entryno, - 0)); - entryno--; - print_entry (4 + entryno, 1, - get_entry (menu_entries, - first_entry + entryno, - 0)); - } - else if (first_entry > 0) - { - first_entry--; - print_entries (3, 12, first_entry, entryno, - menu_entries); - } - } - } - else if ((c == 14 || c == 'v') - && first_entry + entryno + 1 < num_entries) - { - if (current_term->flags & TERM_DUMB) - entryno++; - else - { - if (entryno < 11) - { - print_entry (4 + entryno, 0, - get_entry (menu_entries, - first_entry + entryno, - 0)); - entryno++; - print_entry (4 + entryno, 1, - get_entry (menu_entries, - first_entry + entryno, - 0)); - } - else if (num_entries > 12 + first_entry) - { - first_entry++; - print_entries (3, 12, first_entry, entryno, menu_entries); - } - } - } - else if (c == 7) - { - /* Page Up */ - first_entry -= 12; - if (first_entry < 0) - { - entryno += first_entry; - first_entry = 0; - if (entryno < 0) - entryno = 0; - } - print_entries (3, 12, first_entry, entryno, menu_entries); - } - else if (c == 3) - { - /* Page Down */ - first_entry += 12; - if (first_entry + entryno + 1 >= num_entries) - { - first_entry = num_entries - 12; - if (first_entry < 0) - first_entry = 0; - entryno = num_entries - first_entry - 1; - } - print_entries (3, 12, first_entry, entryno, menu_entries); - } - - if (config_entries) - { - if ((c == '\n') || (c == '\r') || (c == 6)) - break; - } - else - { - if ((c == 'd') || (c == 'o') || (c == 'O')) - { - if (! (current_term->flags & TERM_DUMB)) - print_entry (4 + entryno, 0, - get_entry (menu_entries, - first_entry + entryno, - 0)); - - /* insert after is almost exactly like insert before */ - if (c == 'o') - { - /* But `o' differs from `O', since it may causes - the menu screen to scroll up. */ - if (entryno < 11 || (current_term->flags & TERM_DUMB)) - entryno++; - else - first_entry++; - - c = 'O'; - } - - cur_entry = get_entry (menu_entries, - first_entry + entryno, - 0); - - if (c == 'O') - { - grub_memmove (cur_entry + 2, cur_entry, - ((int) heap) - ((int) cur_entry)); - - cur_entry[0] = ' '; - cur_entry[1] = 0; - - heap += 2; - - num_entries++; - } - else if (num_entries > 0) - { - char *ptr = get_entry(menu_entries, - first_entry + entryno + 1, - 0); - - grub_memmove (cur_entry, ptr, - ((int) heap) - ((int) ptr)); - heap -= (((int) ptr) - ((int) cur_entry)); - - num_entries--; - - if (entryno >= num_entries) - entryno--; - if (first_entry && num_entries < 12 + first_entry) - first_entry--; - } - - if (current_term->flags & TERM_DUMB) - { - grub_printf ("\n\n"); - print_entries_raw (num_entries, first_entry, - menu_entries); - grub_printf ("\n"); - } - else - print_entries (3, 12, first_entry, entryno, menu_entries); - } - - cur_entry = menu_entries; - if (c == 27) - return; - if (c == 'b') - break; - } - - if (! auth && password) - { - if (c == 'p') - { - /* Do password check here! */ - char entered[32]; - char *pptr = password; - - if (current_term->flags & TERM_DUMB) - grub_printf ("\r "); - else - gotoxy (1, 21); - - /* Wipe out the previously entered password */ - grub_memset (entered, 0, sizeof (entered)); - get_cmdline (" Password: ", entered, 31, '*', 0); - - while (! isspace (*pptr) && *pptr) - pptr++; - - /* Make sure that PASSWORD is NUL-terminated. */ - *pptr++ = 0; - - if (! check_password (entered, password, password_type)) - { - char *new_file = config_file; - while (isspace (*pptr)) - pptr++; - - /* If *PPTR is NUL, then allow the user to use - privileged instructions, otherwise, load - another configuration file. */ - if (*pptr != 0) - { - while ((*(new_file++) = *(pptr++)) != 0) - ; - - /* Make sure that the user will not have - authority in the next configuration. */ - auth = 0; - return; - } - else - { - /* Now the user is superhuman. */ - auth = 1; - goto restart; - } - } - else - { - grub_printf ("Failed!\n Press any key to continue..."); - getkey (); - goto restart; - } - } - } - else - { - if (c == 'e') - { - int new_num_entries = 0, i = 0; - char *new_heap; - - if (config_entries) - { - new_heap = heap; - cur_entry = get_entry (config_entries, - first_entry + entryno, - 1); - } - else - { - /* safe area! */ - new_heap = heap + NEW_HEAPSIZE + 1; - cur_entry = get_entry (menu_entries, - first_entry + entryno, - 0); - } - - do - { - while ((*(new_heap++) = cur_entry[i++]) != 0); - new_num_entries++; - } - while (config_entries && cur_entry[i]); - - /* this only needs to be done if config_entries is non-NULL, - but it doesn't hurt to do it always */ - *(new_heap++) = 0; - - if (config_entries) - { - current_entryno = first_entry + entryno; - run_menu (heap, NULL, new_num_entries, new_heap, 0); - } - else - { - cls (); - print_cmdline_message (0); - - new_heap = heap + NEW_HEAPSIZE + 1; - - saved_drive = boot_drive; - saved_partition = install_partition; - current_drive = GRUB_INVALID_DRIVE; - - if (! get_cmdline (PACKAGE " edit> ", new_heap, - NEW_HEAPSIZE + 1, 0, 1)) - { - int j = 0; - - /* get length of new command */ - while (new_heap[j++]) - ; - - if (j < 2) - { - j = 2; - new_heap[0] = ' '; - new_heap[1] = 0; - } - - /* align rest of commands properly */ - grub_memmove (cur_entry + j, cur_entry + i, - (int) heap - ((int) cur_entry + i)); - - /* copy command to correct area */ - grub_memmove (cur_entry, new_heap, j); - - heap += (j - i); - } - } - - goto restart; - } - if (c == 'c') - { - enter_cmdline (heap, 0); - goto restart; - } -#ifdef GRUB_UTIL - if (c == 'q') - { - /* The same as ``quit''. */ - stop (); - } -#endif - } - } - } - - /* Attempt to boot an entry. */ - - boot_entry: - - cls (); - setcursor (1); - - while (1) - { - if (config_entries) - printf (" Booting \'%s\'\n\n", - get_entry (menu_entries, first_entry + entryno, 0)); - else - printf (" Booting command-list\n\n"); - - if (! cur_entry) - cur_entry = get_entry (config_entries, first_entry + entryno, 1); - - /* Set CURRENT_ENTRYNO for the command "savedefault". */ - if (config_entries) - current_entryno = first_entry + entryno; - - if (run_script (cur_entry, heap)) - { - if (fallback_entryno >= 0) - { - cur_entry = NULL; - first_entry = 0; - entryno = fallback_entries[fallback_entryno]; - fallback_entryno++; - if (fallback_entryno >= MAX_FALLBACK_ENTRIES - || fallback_entries[fallback_entryno] < 0) - fallback_entryno = -1; - } - else - break; - } - else - break; - } - - show_menu = 1; - goto restart; -} - - -static int -get_line_from_config (char *cmdline, int maxlen, int read_from_file) -{ - int pos = 0, literal = 0, comment = 0; - char c; /* since we're loading it a byte at a time! */ - - while (1) - { - if (read_from_file) - { - if (! grub_read (&c, 1)) - break; - } - else - { - if (! read_from_preset_menu (&c, 1)) - break; - } - - /* Skip all carriage returns. */ - if (c == '\r') - continue; - - /* Replace tabs with spaces. */ - if (c == '\t') - c = ' '; - - /* The previous is a backslash, then... */ - if (literal) - { - /* If it is a newline, replace it with a space and continue. */ - if (c == '\n') - { - c = ' '; - - /* Go back to overwrite a backslash. */ - if (pos > 0) - pos--; - } - - literal = 0; - } - - /* translate characters first! */ - if (c == '\\' && ! literal) - literal = 1; - - if (comment) - { - if (c == '\n') - comment = 0; - } - else if (! pos) - { - if (c == '#') - comment = 1; - else if ((c != ' ') && (c != '\n')) - cmdline[pos++] = c; - } - else - { - if (c == '\n') - break; - - if (pos < maxlen) - cmdline[pos++] = c; - } - } - - cmdline[pos] = 0; - - return pos; -} - - -/* This is the starting function in C. */ -void -cmain (void) -{ - int config_len, menu_len, num_entries; - char *config_entries, *menu_entries; - char *kill_buf = (char *) KILL_BUF; - - auto void reset (void); - void reset (void) - { - count_lines = -1; - config_len = 0; - menu_len = 0; - num_entries = 0; - config_entries = (char *) mbi.drives_addr + mbi.drives_length; - menu_entries = (char *) MENU_BUF; - init_config (); - } - - /* Initialize the environment for restarting Stage 2. */ - grub_setjmp (restart_env); - - /* Initialize the kill buffer. */ - *kill_buf = 0; - - /* Never return. */ - for (;;) - { - int is_opened, is_preset; - - reset (); - - /* Here load the configuration file. */ - -#ifdef GRUB_UTIL - if (use_config_file) -#endif /* GRUB_UTIL */ - { - char *default_file = (char *) DEFAULT_FILE_BUF; - int i; - - /* Get a saved default entry if possible. */ - saved_entryno = 0; - *default_file = 0; - grub_strncat (default_file, config_file, DEFAULT_FILE_BUFLEN); - for (i = grub_strlen(default_file); i >= 0; i--) - if (default_file[i] == '/') - { - i++; - break; - } - default_file[i] = 0; - grub_strncat (default_file + i, "default", DEFAULT_FILE_BUFLEN - i); - if (grub_open (default_file)) - { - char buf[10]; /* This is good enough. */ - char *p = buf; - int len; - - len = grub_read (buf, sizeof (buf)); - if (len > 0) - { - buf[sizeof (buf) - 1] = 0; - safe_parse_maxint (&p, &saved_entryno); - } - - grub_close (); - } - errnum = ERR_NONE; - - do - { - /* STATE 0: Before any title command. - STATE 1: In a title command. - STATE >1: In a entry after a title command. */ - int state = 0, prev_config_len = 0, prev_menu_len = 0; - char *cmdline; - - /* Try the preset menu first. This will succeed at most once, - because close_preset_menu disables the preset menu. */ - is_opened = is_preset = open_preset_menu (); - if (! is_opened) - { - is_opened = grub_open (config_file); - errnum = ERR_NONE; - } - - if (! is_opened) - break; - - /* This is necessary, because the menu must be overrided. */ - reset (); - - cmdline = (char *) CMDLINE_BUF; - while (get_line_from_config (cmdline, NEW_HEAPSIZE, - ! is_preset)) - { - struct builtin *builtin; - - /* Get the pointer to the builtin structure. */ - builtin = find_command (cmdline); - errnum = 0; - if (! builtin) - /* Unknown command. Just skip now. */ - continue; - - if (builtin->flags & BUILTIN_TITLE) - { - char *ptr; - - /* the command "title" is specially treated. */ - if (state > 1) - { - /* The next title is found. */ - num_entries++; - config_entries[config_len++] = 0; - prev_menu_len = menu_len; - prev_config_len = config_len; - } - else - { - /* The first title is found. */ - menu_len = prev_menu_len; - config_len = prev_config_len; - } - - /* Reset the state. */ - state = 1; - - /* Copy title into menu area. */ - ptr = skip_to (1, cmdline); - while ((menu_entries[menu_len++] = *(ptr++)) != 0) - ; - } - else if (! state) - { - /* Run a command found is possible. */ - if (builtin->flags & BUILTIN_MENU) - { - char *arg = skip_to (1, cmdline); - (builtin->func) (arg, BUILTIN_MENU); - errnum = 0; - } - else - /* Ignored. */ - continue; - } - else - { - char *ptr = cmdline; - - state++; - /* Copy config file data to config area. */ - while ((config_entries[config_len++] = *ptr++) != 0) - ; - } - } - - if (state > 1) - { - /* Finish the last entry. */ - num_entries++; - config_entries[config_len++] = 0; - } - else - { - menu_len = prev_menu_len; - config_len = prev_config_len; - } - - menu_entries[menu_len++] = 0; - config_entries[config_len++] = 0; - grub_memmove (config_entries + config_len, menu_entries, - menu_len); - menu_entries = config_entries + config_len; - - /* Make sure that all fallback entries are valid. */ - if (fallback_entryno >= 0) - { - for (i = 0; i < MAX_FALLBACK_ENTRIES; i++) - { - if (fallback_entries[i] < 0) - break; - if (fallback_entries[i] >= num_entries) - { - grub_memmove (fallback_entries + i, - fallback_entries + i + 1, - ((MAX_FALLBACK_ENTRIES - i - 1) - * sizeof (int))); - i--; - } - } - - if (fallback_entries[0] < 0) - fallback_entryno = -1; - } - /* Check if the default entry is present. Otherwise reset - it to fallback if fallback is valid, or to DEFAULT_ENTRY - if not. */ - if (default_entry >= num_entries) - { - if (fallback_entryno >= 0) - { - default_entry = fallback_entries[0]; - fallback_entryno++; - if (fallback_entryno >= MAX_FALLBACK_ENTRIES - || fallback_entries[fallback_entryno] < 0) - fallback_entryno = -1; - } - else - default_entry = 0; - } - - if (is_preset) - close_preset_menu (); - else - grub_close (); - } - while (is_preset); - } - - if (! num_entries) - { - /* If no acceptable config file, goto command-line, starting - heap from where the config entries would have been stored - if there were any. */ - enter_cmdline (config_entries, 1); - } - else - { - /* Run menu interface. */ - run_menu (menu_entries, config_entries, num_entries, - menu_entries + menu_len, default_entry); - } - } -} diff --git a/stage2/start.S b/stage2/start.S deleted file mode 100644 index 9a7d5048f..000000000 --- a/stage2/start.S +++ /dev/null @@ -1,409 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1999,2000,2001 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#define ASM_FILE -#include - -#ifndef STAGE1_5 -#include -#endif - -/* - * defines for the code go here - */ - - /* Absolute addresses - This makes the assembler generate the address without support - from the linker. (ELF can't relocate 16-bit addresses!) */ -#ifdef STAGE1_5 -# define ABS(x) (x-_start+0x2000) -#else -# define ABS(x) (x-_start+0x8000) -#endif /* STAGE1_5 */ - - /* Print message string */ -#define MSG(x) movw $ABS(x), %si; call message - - .file "start.S" - - .text - - /* Tell GAS to generate 16-bit instructions so that this code works - in real mode. */ - .code16 - - .globl start, _start -start: -_start: - /* - * _start is loaded at 0x8000 and is jumped to with - * CS:IP 0:0x8000 in stage2. - */ - - /* - * we continue to use the stack for stage1 and assume that - * some registers are set to correct values. See stage1.S - * for more information. - */ - - /* save drive reference first thing! */ - pushw %dx - - /* print a notification message on the screen */ - pushw %si - MSG(notification_string) - popw %si - - /* this sets up for the first run through "bootloop" */ - movw $ABS(firstlist - BOOTSEC_LISTSIZE), %di - - /* save the sector number of the second sector in %ebp */ - movl (%di), %ebp - - /* this is the loop for reading the secondary boot-loader in */ -bootloop: - - /* check the number of sectors to read */ - cmpw $0, 4(%di) - - /* if zero, go to the start function */ - je bootit - -setup_sectors: - /* check if we use LBA or CHS */ - cmpb $0, -1(%si) - - /* jump to chs_mode if zero */ - je chs_mode - -lba_mode: - /* load logical sector start */ - movl (%di), %ebx - - /* the maximum is limited to 0x7f because of Phoenix EDD */ - xorl %eax, %eax - movb $0x7f, %al - - /* how many do we really want to read? */ - cmpw %ax, 4(%di) /* compare against total number of sectors */ - - /* which is greater? */ - jg 1f - - /* if less than, set to total */ - movw 4(%di), %ax - -1: - /* subtract from total */ - subw %ax, 4(%di) - - /* add into logical sector start */ - addl %eax, (%di) - - /* set up disk address packet */ - - /* the size and the reserved byte */ - movw $0x0010, (%si) - - /* the number of sectors */ - movw %ax, 2(%si) - - /* the absolute address (low 32 bits) */ - movl %ebx, 8(%si) - - /* the segment of buffer address */ - movw $BUFFERSEG, 6(%si) - - /* save %ax from destruction! */ - pushw %ax - - /* zero %eax */ - xorl %eax, %eax - - /* the offset of buffer address */ - movw %ax, 4(%si) - - /* the absolute address (high 32 bits) */ - movl %eax, 12(%si) - - -/* - * BIOS call "INT 0x13 Function 0x42" to read sectors from disk into memory - * Call with %ah = 0x42 - * %dl = drive number - * %ds:%si = segment:offset of disk address packet - * Return: - * %al = 0x0 on success; err code on failure - */ - - movb $0x42, %ah - int $0x13 - - jc read_error - - movw $BUFFERSEG, %bx - jmp copy_buffer - -chs_mode: - /* load logical sector start (bottom half) */ - movl (%di), %eax - - /* zero %edx */ - xorl %edx, %edx - - /* divide by number of sectors */ - divl (%si) - - /* save sector start */ - movb %dl, 10(%si) - - xorl %edx, %edx /* zero %edx */ - divl 4(%si) /* divide by number of heads */ - - /* save head start */ - movb %dl, 11(%si) - - /* save cylinder start */ - movw %ax, 12(%si) - - /* do we need too many cylinders? */ - cmpw 8(%si), %ax - jge geometry_error - - /* determine the maximum sector length of this read */ - movw (%si), %ax /* get number of sectors per track/head */ - - /* subtract sector start */ - subb 10(%si), %al - - /* how many do we really want to read? */ - cmpw %ax, 4(%di) /* compare against total number of sectors */ - - - /* which is greater? */ - jg 2f - - /* if less than, set to total */ - movw 4(%di), %ax - -2: - /* subtract from total */ - subw %ax, 4(%di) - - /* add into logical sector start */ - addl %eax, (%di) - -/* - * This is the loop for taking care of BIOS geometry translation (ugh!) - */ - - /* get high bits of cylinder */ - movb 13(%si), %dl - - shlb $6, %dl /* shift left by 6 bits */ - movb 10(%si), %cl /* get sector */ - - incb %cl /* normalize sector (sectors go - from 1-N, not 0-(N-1) ) */ - orb %dl, %cl /* composite together */ - movb 12(%si), %ch /* sector+hcyl in cl, cylinder in ch */ - - /* restore %dx */ - popw %dx - pushw %dx - - /* head number */ - movb 11(%si), %dh - - pushw %ax /* save %ax from destruction! */ - -/* - * BIOS call "INT 0x13 Function 0x2" to read sectors from disk into memory - * Call with %ah = 0x2 - * %al = number of sectors - * %ch = cylinder - * %cl = sector (bits 6-7 are high bits of "cylinder") - * %dh = head - * %dl = drive (0x80 for hard disk, 0x0 for floppy disk) - * %es:%bx = segment:offset of buffer - * Return: - * %al = 0x0 on success; err code on failure - */ - - movw $BUFFERSEG, %bx - movw %bx, %es /* load %es segment with disk buffer */ - - xorw %bx, %bx /* %bx = 0, put it at 0 in the segment */ - movb $0x2, %ah /* function 2 */ - int $0x13 - - jc read_error - - /* save source segment */ - movw %es, %bx - -copy_buffer: - - /* load addresses for copy from disk buffer to destination */ - movw 6(%di), %es /* load destination segment */ - - /* restore %ax */ - popw %ax - - /* determine the next possible destination address (presuming - 512 byte sectors!) */ - shlw $5, %ax /* shift %ax five bits to the left */ - addw %ax, 6(%di) /* add the corrected value to the destination - address for next time */ - - /* save addressing regs */ - pusha - pushw %ds - - /* get the copy length */ - shlw $4, %ax - movw %ax, %cx - - xorw %di, %di /* zero offset of destination addresses */ - xorw %si, %si /* zero offset of source addresses */ - movw %bx, %ds /* restore the source segment */ - - cld /* sets the copy direction to forward */ - - /* perform copy */ - rep /* sets a repeat */ - movsb /* this runs the actual copy */ - - /* restore addressing regs and print a dot with correct DS - (MSG modifies SI, which is saved, and unused AX and BX) */ - popw %ds - MSG(notification_step) - popa - - /* check if finished with this dataset */ - cmpw $0, 4(%di) - jne setup_sectors - - /* update position to load from */ - subw $BOOTSEC_LISTSIZE, %di - - /* jump to bootloop */ - jmp bootloop - -/* END OF MAIN LOOP */ - -bootit: - /* print a newline */ - MSG(notification_done) - popw %dx /* this makes sure %dl is our "boot" drive */ -#ifdef STAGE1_5 - ljmp $0, $0x2200 -#else /* ! STAGE1_5 */ - ljmp $0, $0x8200 -#endif /* ! STAGE1_5 */ - - -/* - * BIOS Geometry translation error (past the end of the disk geometry!). - */ -geometry_error: - MSG(geometry_error_string) - jmp general_error - -/* - * Read error on the disk. - */ -read_error: - MSG(read_error_string) - -general_error: - MSG(general_error_string) - -/* go here when you need to stop the machine hard after an error condition */ -stop: jmp stop - -#ifdef STAGE1_5 -notification_string: .string "Loading stage1.5" -#else -notification_string: .string "Loading stage2" -#endif - -notification_step: .string "." -notification_done: .string "\r\n" - -geometry_error_string: .string "Geom" -read_error_string: .string "Read" -general_error_string: .string " Error" - -/* - * message: write the string pointed to by %si - * - * WARNING: trashes %si, %ax, and %bx - */ - - /* - * Use BIOS "int 10H Function 0Eh" to write character in teletype mode - * %ah = 0xe %al = character - * %bh = page %bl = foreground color (graphics modes) - */ -1: - movw $0x0001, %bx - movb $0xe, %ah - int $0x10 /* display a byte */ - - incw %si -message: - movb (%si), %al - cmpb $0, %al - jne 1b /* if not end of string, jmp to display */ - ret -lastlist: - -/* - * This area is an empty space between the main body of code below which - * grows up (fixed after compilation, but between releases it may change - * in size easily), and the lists of sectors to read, which grows down - * from a fixed top location. - */ - - .word 0 - .word 0 - - . = _start + 0x200 - BOOTSEC_LISTSIZE - - /* fill the first data listing with the default */ -blocklist_default_start: - .long 2 /* this is the sector start parameter, in logical - sectors from the start of the disk, sector 0 */ -blocklist_default_len: - /* this is the number of sectors to read */ -#ifdef STAGE1_5 - .word 0 /* the command "install" will fill this up */ -#else - .word (STAGE2_SIZE + 511) >> 9 -#endif -blocklist_default_seg: -#ifdef STAGE1_5 - .word 0x220 -#else - .word 0x820 /* this is the segment of the starting address - to load the data into */ -#endif - -firstlist: /* this label has to be after the list data!!! */ diff --git a/stage2/start_eltorito.S b/stage2/start_eltorito.S deleted file mode 100644 index 99a710997..000000000 --- a/stage2/start_eltorito.S +++ /dev/null @@ -1,326 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 1994-2002 H. Peter Anvin - * Copyright (C) 1999,2000,2001,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -/* - Most of this file was originally "isolinux.asm" from SYSLINUX package. - It has been very heavily modified. -*/ - -#define ASM_FILE -#include "stage1.h" -#include "shared.h" -#include "iso9660.h" - -#ifndef STAGE1_5 -#include "stage2_size.h" -#endif - - - /* Absolute addresses - This makes the assembler generate the address without support - from the linker. (ELF can't relocate 16-bit addresses!) */ -#define ABS(x) (x-_start+BOOTSEC_LOCATION) - -#ifdef STAGE1_5 -# define STAGE_ADDR 0x2000 -#else -# define STAGE_ADDR 0x8000 -#endif /* STAGE1_5 */ - - /* Print message string */ -#define MSG(x) mov $ABS(x), %si; call message; - - .file "start_eltorito.S" - - .text - - /* Tell GAS to generate 16-bit instructions so that this code works - in real mode. */ - .code16 - - .globl start, _start - -/* - * Primary entry point. Because BIOSes are buggy, we only load the first - * CD-ROM sector (2K) of the file, so the number one priority is actually - * loading the rest. - */ -start: -_start: - cli - ljmp $0, $ABS(real_start) - - . = _start + 8 /* Pad to file offset 8 */ - - /* This table gets filled in by mkisofs using the - -boot-info-table option */ -bi_pvd: .long 0xDEADBEEF /* LBA of primary volume descript */ -bi_file: .long 0xDEADBEEF /* LBA of boot file */ -bi_length: .long 0xDEADBEEF /* Length of boot file */ -bi_csum: .long 0xDEADBEEF /* Checksum of boot file */ -bi_reserved: .space (10*4) /* Reserved */ - -real_start: - xor %ax, %ax - mov %ax, %ss - mov %ax, %ds - mov %ax, %es - mov %ax, %fs - mov %ax, %gs - mov $STAGE1_STACKSEG, %sp /* set up the REAL stack */ - sti - cld - - /* save drive reference first thing! */ - mov %dl, ABS(BootDrive) - - /* print a notification message on the screen */ - MSG(notification_string) - -load_image: - /* Set up boot file sector, size, load address */ - mov ABS(bi_length), %eax - add $(ISO_SECTOR_SIZE-1), %eax - shr $ISO_SECTOR_BITS, %eax /* dwords->sectors */ - mov %ax, %bp /* boot file sectors */ - mov $(STAGE_ADDR >> 4), %bx - mov %bx, %es - xor %bx, %bx - mov ABS(bi_file), %eax - call getlinsec - mov %ds, %ax - mov %ax, %es - - MSG(notification_done) -bootit: - /* save the sector number of the second sector in %ebp */ - mov $ABS(firstlist - BOOTSEC_LISTSIZE), %si - mov (%si), %ebp - mov ABS(BootDrive), %dl /* this makes sure %dl is our "boot" drive */ - ljmp $0, $(STAGE_ADDR+SECTOR_SIZE) /* jump to main() in asm.S */ - -/* go here when you need to stop the machine hard after an error condition */ -stop: jmp stop - - -/* - * Get linear sectors - EBIOS LBA addressing, 2048-byte sectors. - * - * Note that we can't always do this as a single request, because at least - * Phoenix BIOSes has a 127-sector limit. To be on the safe side, stick - * to 16 sectors (32K) per request. - * - * Input: - * EAX - Linear sector number - * ES:BX - Target buffer - * BP - Sector count - */ -getlinsec: - mov $ABS(dapa), %si /* Load up the DAPA */ - mov %bx, 4(%si) - mov %es, %bx - mov %bx, 6(%si) - mov %eax, 8(%si) -1: - push %bp - push %si - cmp ABS(MaxTransfer), %bp - jbe 2f - mov ABS(MaxTransfer), %bp -2: - mov %bp, 2(%si) - mov ABS(BootDrive), %dl - mov $0x42, %ah /* Extended Read */ - call xint13 - pop %si - pop %bp - movzwl 2(%si), %eax /* Sectors we read */ - add %eax, 8(%si) /* Advance sector pointer */ - sub %ax, %bp /* Sectors left */ - shl $(ISO_SECTOR_BITS-4), %ax /* 2048-byte sectors -> segment */ - add %ax, 6(%si) /* Advance buffer pointer */ - - pushal - MSG(notification_step) - popal - cmp $0, %bp - ja 1b - mov 8(%si), %eax /* Return next sector */ - ret - -/* - * INT 13h with retry - */ -xint13: - movb $6, ABS(RetryCount) - pushal -.try: - int $0x13 - jc 1f - add $(8*4), %sp /* Clean up stack */ - ret -1: - mov %ah, %dl /* Save error code */ - decb ABS(RetryCount) - jz .real_error - mov ABS(RetryCount), %al - mov ABS(dapa+2), %ah /* Sector transfer count */ - cmp $2, %al /* Only 2 attempts left */ - ja 2f - mov $1, %ah /* Drop transfer size to 1 */ - jmp .setmaxtr -2: - cmp $3, %al - ja 3f /* First time, just try again */ - shr $1, %ah /* Otherwise, try to reduce */ - adc $0, %ah /* the max transfer size, but not */ -.setmaxtr: - mov %ah, ABS(MaxTransfer) - mov %ah, ABS(dapa+2) -3: - popal - jmp .try - -.real_error: - MSG(read_error_string) - mov %dl, %al - call printhex2 - popal - jmp stop - - - -/* - * message: write the string pointed to by %si - * - * WARNING: trashes %si, %ax, and %bx - */ - - /* - * Use BIOS "int 10H Function 0Eh" to write character in teletype mode - * %ah = 0xe %al = character - * %bh = page %bl = foreground color (graphics modes) - */ -1: - mov $0x0001, %bx - mov $0x0E, %ah - int $0x10 /* display a byte */ - -message: - lodsb - or %al, %al - jne 1b /* if not end of string, jmp to display */ - ret - -/* - * printhex[248]: Write a hex number in (AL, AX, EAX) to the console - */ -printhex2: - pushal - rol $24, %eax - mov $2, %cx - jmp 1f -printhex4: - pushal - rol $16, %eax - mov $4, %cx - jmp 1f -printhex8: - pushal - mov $8, %cx -1: - rol $4, %eax - push %eax - and $0x0F, %al - cmp $10, %al - jae .high -.low: add $('0'), %al - jmp 2f -.high: add $('A'-10), %al -2: - mov $0x0001, %bx - mov $0x0E, %ah - int $0x10 /* display a char */ - pop %eax - loop 1b - popal - ret - -/**************************************************************************/ -#ifdef STAGE1_5 -notification_string: .string "Loading stage1.5 " -#else -notification_string: .string "Loading stage2 " -#endif - -notification_step: .string "." -notification_done: .string "\r\n" - -read_error_string: .string "Read error 0x" - -/* - * EBIOS disk address packet - */ - .align 8 -dapa: .byte 16 /* Packet size */ - .byte 0 /* reserved */ - .word 0 /* +2 Block count */ - .word 0 /* +4 Offset of buffer */ - .word 0 /* +6 Segment of buffer */ - .long 0 /* +8 LBA (LSW) */ - .long 0 /* +C LBA (MSW) */ - -VARIABLE(BootDrive) - .byte 0xFF -VARIABLE(MaxTransfer) - .word 16 /* Max sectors per transfer (32Kb) */ -VARIABLE(RetryCount) - .byte 0 - - -/* - * This area is an empty space between the main body of code below which - * grows up (fixed after compilation, but between releases it may change - * in size easily), and the lists of sectors to read, which grows down - * from a fixed top location. - */ - - .word 0 - .word 0 - - . = _start + SECTOR_SIZE - BOOTSEC_LISTSIZE - - /* fill the first data listing with the default */ -blocklist_default_start:/* this is the sector start parameter, in logical - sectors from the start of the disk, sector 0 */ - .long 0 - -blocklist_default_len: /* this is the number of sectors to read */ -#ifdef STAGE1_5 - .word 0 -#else - .word (STAGE2_SIZE + ISO_SECTOR_SIZE - 1) >> ISO_SECTOR_BITS -#endif -blocklist_default_seg: /* this is the segment of the starting address - to load the data into */ - .word (STAGE_ADDR + SECTOR_SIZE) >> 4 - -firstlist: /* this label has to be after the list data!!! */ diff --git a/stage2/term.h b/stage2/term.h deleted file mode 100644 index 8261c7c61..000000000 --- a/stage2/term.h +++ /dev/null @@ -1,127 +0,0 @@ -/* term.h - definitions for terminal handling */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2002 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef GRUB_TERM_HEADER -#define GRUB_TERM_HEADER 1 - -/* These are used to represent the various color states we use */ -typedef enum -{ - /* represents the color used to display all text that does not use the user - * defined colors below - */ - COLOR_STATE_STANDARD, - /* represents the user defined colors for normal text */ - COLOR_STATE_NORMAL, - /* represents the user defined colors for highlighted text */ - COLOR_STATE_HIGHLIGHT -} color_state; - -#ifndef STAGE1_5 - -/* Flags for representing the capabilities of a terminal. */ -/* Some notes about the flags: - - These flags are used by higher-level functions but not terminals - themselves. - - If a terminal is dumb, you may assume that only putchar, getkey and - checkkey are called. - - Some fancy features (nocursor, setcolor, and highlight) can be set to - NULL. */ - -/* Set when input characters shouldn't be echoed back. */ -#define TERM_NO_ECHO (1 << 0) -/* Set when the editing feature should be disabled. */ -#define TERM_NO_EDIT (1 << 1) -/* Set when the terminal cannot do fancy things. */ -#define TERM_DUMB (1 << 2) -/* Set when the terminal needs to be initialized. */ -#define TERM_NEED_INIT (1 << 16) - -struct term_entry -{ - /* The name of a terminal. */ - const char *name; - /* The feature flags defined above. */ - unsigned long flags; - /* Put a character. */ - void (*putchar) (int c); - /* Check if any input character is available. */ - int (*checkkey) (void); - /* Get a character. */ - int (*getkey) (void); - /* Get the cursor position. The return value is ((X << 8) | Y). */ - int (*getxy) (void); - /* Go to the position (X, Y). */ - void (*gotoxy) (int x, int y); - /* Clear the screen. */ - void (*cls) (void); - /* Set the current color to be used */ - void (*setcolorstate) (color_state state); - /* Set the normal color and the highlight color. The format of each - color is VGA's. */ - void (*setcolor) (int normal_color, int highlight_color); - /* Turn on/off the cursor. */ - int (*setcursor) (int on); -}; - -/* This lists up available terminals. */ -extern struct term_entry term_table[]; -/* This points to the current terminal. This is useful, because only - a single terminal is enabled normally. */ -extern struct term_entry *current_term; - -#endif /* ! STAGE1_5 */ - -/* The console stuff. */ -extern int console_current_color; -void console_putchar (int c); - -#ifndef STAGE1_5 -int console_checkkey (void); -int console_getkey (void); -int console_getxy (void); -void console_gotoxy (int x, int y); -void console_cls (void); -void console_setcolorstate (color_state state); -void console_setcolor (int normal_color, int highlight_color); -int console_setcursor (int on); -#endif - -#ifdef SUPPORT_SERIAL -void serial_putchar (int c); -int serial_checkkey (void); -int serial_getkey (void); -int serial_getxy (void); -void serial_gotoxy (int x, int y); -void serial_cls (void); -void serial_setcolorstate (color_state state); -#endif - -#ifdef SUPPORT_HERCULES -void hercules_putchar (int c); -int hercules_getxy (void); -void hercules_gotoxy (int x, int y); -void hercules_cls (void); -void hercules_setcolorstate (color_state state); -void hercules_setcolor (int normal_color, int highlight_color); -int hercules_setcursor (int on); -#endif - -#endif /* ! GRUB_TERM_HEADER */ diff --git a/stage2/terminfo.c b/stage2/terminfo.c deleted file mode 100644 index c1c1575fc..000000000 --- a/stage2/terminfo.c +++ /dev/null @@ -1,258 +0,0 @@ -/* terminfo.c - read a terminfo entry from the command line */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2002,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * ###################################################################### - * - * This file contains various functions dealing with different - * terminal capabilities. It knows the difference between a vt52 and vt100 - * terminal (and much more) and is mainly used the terminal emulation - * in the serial driver. - */ - -#include -#include "terminfo.h" -#include "tparm.h" -#include "serial.h" - -/* Current terminal capabilities. Default is "vt100". */ -struct terminfo term = - { - .name = "vt100", - .cursor_address = "\e[%i%p1%d;%p2%dH", - .clear_screen = "\e[H\e[J", - .enter_standout_mode = "\e[7m", - .exit_standout_mode = "\e[m" - }; - -/* A number of escape sequences are provided in the string valued - capabilities for easy encoding of characters there. Both \E and \e - map to an ESCAPE character, ^x maps to a control-x for any - appropriate x, and the sequences \n \l \r \t \b \f \s give a - newline, line-feed, return, tab, backspace, form-feed, and space. - Other escapes include \^ for ^, \\ for \, \, for comma, \: for :, - and \0 for null. (\0 will produce \200, which does not terminate a - string but behaves as a null character on most terminals, provid­ - ing CS7 is specified. See stty(1).) Finally, characters may be - given as three octal digits after a \. */ - -char * -ti_unescape_memory (const char *in, const char *end) -{ - static char out_buffer[256]; - char c; - char *out; - - out = out_buffer; - do - { - c = *(in++); - switch (c) - { - case '^': - if (*in >= 'A' && *in <= 'Z') - { - *out = (*in) - 'A'; - in++; - } - else - { - *out = '^'; - } - break; - case '\\': - c = *(in++); - if (c >= '0' && c <= '9') - { - // octal number - int n = 0; - do - { - n = (n << 4) | (c - '0'); - c = *(in++); - } - while (c >= '0' && c <= '9'); - - *out++ = (char)(n & 0xff); - - // redo last character - in--; - - break; - } - - switch (c) - { - case 'e': - case 'E': - *out++ = '\e'; - break; - case 'n': - *out++ = '\n'; - break; - case 'r': - *out++ = '\r'; - break; - case 't': - *out++ = '\t'; - break; - case 'b': - *out++ = '\b'; - break; - case 'f': - *out++ = '\f'; - break; - case 's': - *out++ = ' '; - break; - case '\\': - *out++ = '\\'; - break; - case '^': - *out++ = '^'; - break; - case ',': - *out++ = ','; - break; - case ':': - *out++ = ':'; - break; - case '0': - *out++ = '\200'; - break; - } - break; - default: - *out++ = c; - break; - } - } - while (in <= end); - - return out_buffer; -} - -char * -ti_unescape_string (const char *in) -{ - return ti_unescape_memory (in, in + grub_strlen (in)); -} - -/* convert a memory region containing binary character into an external - * ascii representation. The binary characters will be replaced by an - * "ecsape notation". E.g. "033" will become "\e". */ -char * -ti_escape_memory (const char *in, const char *end) -{ - static char out_buffer[256]; - char c; - char *out; - - out = out_buffer; - do - { - c = *(in++); - switch (c) - { - case '\e': - *out++ = '\\'; *out++ = 'e'; break; - case ' ': - *out++ = '\\'; *out++ = 's'; break; - case '\\': - *out++ = '\\'; *out++ = '\\'; break; - case '0' ... '9': - case 'a' ... 'z': - case 'A' ... 'Z': - case '%': - case '+': - case '-': - case '*': - case '/': - case ';': - case ':': - case '{': - case '}': - case '[': - case ']': - *out++ = c; break; - case 0 ... 25: - *out++ = '^'; *out++ = 'A' + c; break; - default: - *out++ = '\\'; - *out++ = ((c >> 8) & 7) + '0'; - *out++ = ((c >> 4) & 7) + '0'; - *out++ = ((c >> 0) & 7) + '0'; - break; - } - } - while (in < end); - - *out++ = 0; - - return out_buffer; -} - -/* convert a string containing binary character into an external ascii - * representation. */ -char * -ti_escape_string (const char *in) -{ - return ti_escape_memory (in, in + grub_strlen (in)); -} - -/* move the cursor to the given position starting with "0". */ -void -ti_cursor_address (int x, int y) -{ - grub_putstr (grub_tparm (term.cursor_address, y, x)); -} - -/* clear the screen. */ -void -ti_clear_screen (void) -{ - grub_putstr (grub_tparm (term.clear_screen)); -} - -/* enter reverse video */ -void -ti_enter_standout_mode (void) -{ - grub_putstr (grub_tparm (term.enter_standout_mode)); -} - -/* exit reverse video */ -void -ti_exit_standout_mode (void) -{ - grub_putstr (grub_tparm (term.exit_standout_mode)); -} - -/* set the current terminal emulation to use */ -void -ti_set_term (const struct terminfo *new) -{ - grub_memmove (&term, new, sizeof (struct terminfo)); -} - -/* get the current terminal emulation */ -void -ti_get_term(struct terminfo *copy) -{ - grub_memmove (copy, &term, sizeof (struct terminfo)); -} diff --git a/stage2/terminfo.h b/stage2/terminfo.h deleted file mode 100644 index 2e59761ea..000000000 --- a/stage2/terminfo.h +++ /dev/null @@ -1,51 +0,0 @@ -/* terminfo.h - read a terminfo entry from the command line */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2002,2003,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef GRUB_TERMCAP_HEADER -#define GRUB_TERMCAP_HEADER 1 - -#define TERMINFO_LEN 40 - -typedef struct terminfo -{ - char name[TERMINFO_LEN]; - char cursor_address[TERMINFO_LEN]; - char clear_screen[TERMINFO_LEN]; - char enter_standout_mode[TERMINFO_LEN]; - char exit_standout_mode[TERMINFO_LEN]; -} -terminfo; - - -/* Function prototypes. */ -char *ti_escape_memory (const char *in, const char *end); -char *ti_escape_string (const char *in); -char *ti_unescape_memory (const char *in, const char *end); -char *ti_unescape_string (const char *in); - -void ti_set_term (const struct terminfo *new); -void ti_get_term (struct terminfo *copy); - -void ti_cursor_address (int x, int y); -void ti_clear_screen (void); -void ti_enter_standout_mode (void); -void ti_exit_standout_mode (void); - -#endif /* ! GRUB_TERMCAP_HEADER */ diff --git a/stage2/tparm.c b/stage2/tparm.c deleted file mode 100644 index bd95df8f9..000000000 --- a/stage2/tparm.c +++ /dev/null @@ -1,726 +0,0 @@ -/**************************************************************************** - * Copyright (c) 1998,2000,2002 Free Software Foundation, Inc. * - * * - * Permission is hereby granted, free of charge, to any person obtaining a * - * copy of this software and associated documentation files (the * - * "Software"), to deal in the Software without restriction, including * - * without limitation the rights to use, copy, modify, merge, publish, * - * distribute, distribute with modifications, sublicense, and/or sell * - * copies of the Software, and to permit persons to whom the Software is * - * furnished to do so, subject to the following conditions: * - * * - * The above copyright notice and this permission notice shall be included * - * in all copies or substantial portions of the Software. * - * * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * - * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * - * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * - * * - * Except as contained in this notice, the name(s) of the above copyright * - * holders shall not be used in advertising or otherwise to promote the * - * sale, use or other dealings in this Software without prior written * - * authorization. * - ****************************************************************************/ - -/********************************************************************** - * This code is a modification of lib_tparm.c found in ncurses-5.2. The - * modification are for use in grub by replacing all libc function through - * special grub functions. This also meant to delete all dynamic memory - * allocation and replace it by a number of fixed buffers. - * - * Modifications by Tilmann Bubeck 2002 - **********************************************************************/ - -/**************************************************************************** - * Author: Zeyd M. Ben-Halim 1992,1995 * - * and: Eric S. Raymond * - ****************************************************************************/ - -/* - * tparm.c - * - */ - -#include "shared.h" - -#include "tparm.h" - -/* - * Common/troublesome character definitions - */ -typedef char grub_bool; -#define isdigit(c) ((c) >= '0' && (c) <= '9') -#ifndef FALSE -# define FALSE (0) -#endif -#ifndef TRUE -# define TRUE (!FALSE) -#endif -#define MAX_FORMAT_LEN 256 -#define max(a,b) ((a) > (b) ? (a) : (b)) - -//MODULE_ID("$Id$") - -/* - * char * - * tparm(string, ...) - * - * Substitute the given parameters into the given string by the following - * rules (taken from terminfo(5)): - * - * Cursor addressing and other strings requiring parame- - * ters in the terminal are described by a parameterized string - * capability, with like escapes %x in it. For example, to - * address the cursor, the cup capability is given, using two - * parameters: the row and column to address to. (Rows and - * columns are numbered from zero and refer to the physical - * screen visible to the user, not to any unseen memory.) If - * the terminal has memory relative cursor addressing, that can - * be indicated by - * - * The parameter mechanism uses a stack and special % - * codes to manipulate it. Typically a sequence will push one - * of the parameters onto the stack and then print it in some - * format. Often more complex operations are necessary. - * - * The % encodings have the following meanings: - * - * %% outputs `%' - * %c print pop() like %c in printf() - * %s print pop() like %s in printf() - * %[[:]flags][width[.precision]][doxXs] - * as in printf, flags are [-+#] and space - * The ':' is used to avoid making %+ or %- - * patterns (see below). - * - * %p[1-9] push ith parm - * %P[a-z] set dynamic variable [a-z] to pop() - * %g[a-z] get dynamic variable [a-z] and push it - * %P[A-Z] set static variable [A-Z] to pop() - * %g[A-Z] get static variable [A-Z] and push it - * %l push strlen(pop) - * %'c' push char constant c - * %{nn} push integer constant nn - * - * %+ %- %* %/ %m - * arithmetic (%m is mod): push(pop() op pop()) - * %& %| %^ bit operations: push(pop() op pop()) - * %= %> %< logical operations: push(pop() op pop()) - * %A %O logical and & or operations for conditionals - * %! %~ unary operations push(op pop()) - * %i add 1 to first two parms (for ANSI terminals) - * - * %? expr %t thenpart %e elsepart %; - * if-then-else, %e elsepart is optional. - * else-if's are possible ala Algol 68: - * %? c1 %t b1 %e c2 %t b2 %e c3 %t b3 %e c4 %t b4 %e b5 %; - * - * For those of the above operators which are binary and not commutative, - * the stack works in the usual way, with - * %gx %gy %m - * resulting in x mod y, not the reverse. - */ - -#define STACKSIZE 20 - -typedef struct { - union { - unsigned int num; - char *str; - } data; - grub_bool num_type; -} stack_frame; - -static stack_frame stack[STACKSIZE]; -static int stack_ptr; - -static char out_buff[256]; -static int out_size = 256; -static int out_used; - -static inline void -get_space(int need) -{ - need += out_used; - if (need > out_size) { - // FIX ME! buffer full, what now? - ; - } -} - -static inline void -save_text(const char *fmt, const char *s, int len) -{ - int s_len = grub_strlen(s); - if (len > (int) s_len) - s_len = len; - - get_space(s_len + 1); - - (void) grub_sprintf(out_buff + out_used, fmt, s); - out_used += grub_strlen(out_buff + out_used); -} - -static inline void -save_number(const char *fmt, int number, int len) -{ - if (len < 30) - len = 30; /* actually log10(MAX_INT)+1 */ - - get_space(len + 1); - - (void) grub_sprintf(out_buff + out_used, fmt, number); - out_used += grub_strlen(out_buff + out_used); -} - -static inline void -save_char(int c) -{ - if (c == 0) - c = 0200; - get_space(1); - out_buff[out_used++] = c; -} - -static inline void -npush(int x) -{ - if (stack_ptr < STACKSIZE) { - stack[stack_ptr].num_type = TRUE; - stack[stack_ptr].data.num = x; - stack_ptr++; - } -} - -static inline int -npop(void) -{ - int result = 0; - if (stack_ptr > 0) { - stack_ptr--; - if (stack[stack_ptr].num_type) - result = stack[stack_ptr].data.num; - } - return result; -} - -static inline void -spush(char *x) -{ - if (stack_ptr < STACKSIZE) { - stack[stack_ptr].num_type = FALSE; - stack[stack_ptr].data.str = x; - stack_ptr++; - } -} - -static inline char * -spop(void) -{ - static char dummy[] = ""; /* avoid const-cast */ - char *result = dummy; - if (stack_ptr > 0) { - stack_ptr--; - if (!stack[stack_ptr].num_type && stack[stack_ptr].data.str != 0) - result = stack[stack_ptr].data.str; - } - return result; -} - -static inline const char * -parse_format(const char *s, char *format, int *len) -{ - grub_bool done = FALSE; - grub_bool allowminus = FALSE; - grub_bool dot = FALSE; - grub_bool err = FALSE; - char *fmt = format; - int prec = 0; - int width = 0; - int value = 0; - - *len = 0; - *format++ = '%'; - while (*s != '\0' && !done) { - switch (*s) { - case 'c': /* FALLTHRU */ - case 'd': /* FALLTHRU */ - case 'o': /* FALLTHRU */ - case 'x': /* FALLTHRU */ - case 'X': /* FALLTHRU */ - case 's': - *format++ = *s; - done = TRUE; - break; - case '.': - *format++ = *s++; - if (dot) { - err = TRUE; - } else { - dot = TRUE; - prec = value; - } - value = 0; - break; - case '#': - *format++ = *s++; - break; - case ' ': - *format++ = *s++; - break; - case ':': - s++; - allowminus = TRUE; - break; - case '-': - if (allowminus) { - *format++ = *s++; - } else { - done = TRUE; - } - break; - default: - if (isdigit(*s)) { - value = (value * 10) + (*s - '0'); - if (value > 10000) - err = TRUE; - *format++ = *s++; - } else { - done = TRUE; - } - } - } - - /* - * If we found an error, ignore (and remove) the flags. - */ - if (err) { - prec = width = value = 0; - format = fmt; - *format++ = '%'; - *format++ = *s; - } - - if (dot) - width = value; - else - prec = value; - - *format = '\0'; - /* return maximum string length in print */ - *len = (prec > width) ? prec : width; - return s; -} - -#define isUPPER(c) ((c) >= 'A' && (c) <= 'Z') -#define isLOWER(c) ((c) >= 'a' && (c) <= 'z') - -static inline char * -tparam_internal(const char *string, int *dataptr) -{ -#define NUM_VARS 26 - char *p_is_s[9]; - int param[9]; - int lastpop; - int popcount; - int number; - int len; - int level; - int x, y; - int i; - int len2; - register const char *cp; - static int len_fmt = MAX_FORMAT_LEN; - static char dummy[] = ""; - static char format[MAX_FORMAT_LEN]; - static int dynamic_var[NUM_VARS]; - static int static_vars[NUM_VARS]; - - out_used = 0; - if (string == NULL) - return NULL; - - if ((len2 = grub_strlen(string)) > len_fmt) { - return NULL; - } - - /* - * Find the highest parameter-number referred to in the format string. - * Use this value to limit the number of arguments copied from the - * variable-length argument list. - */ - - number = 0; - lastpop = -1; - popcount = 0; - grub_memset(p_is_s, 0, sizeof(p_is_s)); - - /* - * Analyze the string to see how many parameters we need from the varargs - * list, and what their types are. We will only accept string parameters - * if they appear as a %l or %s format following an explicit parameter - * reference (e.g., %p2%s). All other parameters are numbers. - * - * 'number' counts coarsely the number of pop's we see in the string, and - * 'popcount' shows the highest parameter number in the string. We would - * like to simply use the latter count, but if we are reading termcap - * strings, there may be cases that we cannot see the explicit parameter - * numbers. - */ - for (cp = string; (cp - string) < (int) len2;) { - if (*cp == '%') { - cp++; - cp = parse_format(cp, format, &len); - switch (*cp) { - default: - break; - - case 'd': /* FALLTHRU */ - case 'o': /* FALLTHRU */ - case 'x': /* FALLTHRU */ - case 'X': /* FALLTHRU */ - case 'c': /* FALLTHRU */ - number++; - lastpop = -1; - break; - - case 'l': - case 's': - if (lastpop > 0) - p_is_s[lastpop - 1] = dummy; - ++number; - break; - - case 'p': - cp++; - i = (*cp - '0'); - if (i >= 0 && i <= 9) { - lastpop = i; - if (lastpop > popcount) - popcount = lastpop; - } - break; - - case 'P': - case 'g': - cp++; - break; - - case '\'': - cp += 2; - lastpop = -1; - break; - - case '{': - cp++; - while (*cp >= '0' && *cp <= '9') { - cp++; - } - break; - - case '+': - case '-': - case '*': - case '/': - case 'm': - case 'A': - case 'O': - case '&': - case '|': - case '^': - case '=': - case '<': - case '>': - case '!': - case '~': - lastpop = -1; - number += 2; - break; - - case 'i': - lastpop = -1; - if (popcount < 2) - popcount = 2; - break; - } - } - if (*cp != '\0') - cp++; - } - - if (number > 9) - number = 9; - for (i = 0; i < max(popcount, number); i++) { - /* - * A few caps (such as plab_norm) have string-valued parms. - * We'll have to assume that the caller knows the difference, since - * a char* and an int may not be the same size on the stack. - */ - if (p_is_s[i] != 0) { - p_is_s[i] = (char *)(*(dataptr++)); - } else { - param[i] = (int)(*(dataptr++)); - } - } - - /* - * This is a termcap compatibility hack. If there are no explicit pop - * operations in the string, load the stack in such a way that - * successive pops will grab successive parameters. That will make - * the expansion of (for example) \E[%d;%dH work correctly in termcap - * style, which means tparam() will expand termcap strings OK. - */ - stack_ptr = 0; - if (popcount == 0) { - popcount = number; - for (i = number - 1; i >= 0; i--) - npush(param[i]); - } - - while (*string) { - /* skip delay timings */ - if (*string == '$' && *(string + 1) == '<') { - while( *string && *string != '>') - string++; - if ( *string == '>' ) string++; - } else if ( *string == '%') { - string++; - string = parse_format(string, format, &len); - switch (*string) { - default: - break; - case '%': - save_char('%'); - break; - - case 'd': /* FALLTHRU */ - case 'o': /* FALLTHRU */ - case 'x': /* FALLTHRU */ - case 'X': /* FALLTHRU */ - case 'c': /* FALLTHRU */ - save_number(format, npop(), len); - break; - - case 'l': - save_number("%d", strlen(spop()), 0); - break; - - case 's': - save_text(format, spop(), len); - break; - - case 'p': - string++; - i = (*string - '1'); - if (i >= 0 && i < 9) { - if (p_is_s[i]) - spush(p_is_s[i]); - else - npush(param[i]); - } - break; - - case 'P': - string++; - if (isUPPER(*string)) { - i = (*string - 'A'); - static_vars[i] = npop(); - } else if (isLOWER(*string)) { - i = (*string - 'a'); - dynamic_var[i] = npop(); - } - break; - - case 'g': - string++; - if (isUPPER(*string)) { - i = (*string - 'A'); - npush(static_vars[i]); - } else if (isLOWER(*string)) { - i = (*string - 'a'); - npush(dynamic_var[i]); - } - break; - - case '\'': - string++; - npush(*string); - string++; - break; - - case '{': - number = 0; - string++; - while (*string >= '0' && *string <= '9') { - number = number * 10 + *string - '0'; - string++; - } - npush(number); - break; - - case '+': - npush(npop() + npop()); - break; - - case '-': - y = npop(); - x = npop(); - npush(x - y); - break; - - case '*': - npush(npop() * npop()); - break; - - case '/': - y = npop(); - x = npop(); - npush(y ? (x / y) : 0); - break; - - case 'm': - y = npop(); - x = npop(); - npush(y ? (x % y) : 0); - break; - - case 'A': - npush(npop() && npop()); - break; - - case 'O': - npush(npop() || npop()); - break; - - case '&': - npush(npop() & npop()); - break; - - case '|': - npush(npop() | npop()); - break; - - case '^': - npush(npop() ^ npop()); - break; - - case '=': - y = npop(); - x = npop(); - npush(x == y); - break; - - case '<': - y = npop(); - x = npop(); - npush(x < y); - break; - - case '>': - y = npop(); - x = npop(); - npush(x > y); - break; - - case '!': - npush(!npop()); - break; - - case '~': - npush(~npop()); - break; - - case 'i': - if (p_is_s[0] == 0) - param[0]++; - if (p_is_s[1] == 0) - param[1]++; - break; - - case '?': - break; - - case 't': - x = npop(); - if (!x) { - /* scan forward for %e or %; at level zero */ - string++; - level = 0; - while (*string) { - if (*string == '%') { - string++; - if (*string == '?') - level++; - else if (*string == ';') { - if (level > 0) - level--; - else - break; - } else if (*string == 'e' && level == 0) - break; - } - - if (*string) - string++; - } - } - break; - - case 'e': - /* scan forward for a %; at level zero */ - string++; - level = 0; - while (*string) { - if (*string == '%') { - string++; - if (*string == '?') - level++; - else if (*string == ';') { - if (level > 0) - level--; - else - break; - } - } - - if (*string) - string++; - } - break; - - case ';': - break; - - } /* endswitch (*string) */ - } else { /* endelse (*string == '%') */ - save_char(*string); - } - - if (*string == '\0') - break; - - string++; - } /* endwhile (*string) */ - - get_space(1); - out_buff[out_used] = '\0'; - - return (out_buff); -} - -char * -grub_tparm(const char *string,...) -{ - char *result; - int *dataptr = (int *) &string; - - dataptr++; - - result = tparam_internal(string, dataptr); - - return result; -} diff --git a/stage2/tparm.h b/stage2/tparm.h deleted file mode 100644 index e2c1b68e6..000000000 --- a/stage2/tparm.h +++ /dev/null @@ -1,28 +0,0 @@ -/* tparm.h - parameter formatting of terminfo */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2002 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef GRUB_TPARM_HEADER -#define GRUB_TPARM_HEADER 1 - - -/* Function prototypes. */ -char *grub_tparm (const char *string, ...); - -#endif /* ! GRUB_TERMCAP_HEADER */ diff --git a/stage2/ufs2.h b/stage2/ufs2.h deleted file mode 100644 index ba2ef30a9..000000000 --- a/stage2/ufs2.h +++ /dev/null @@ -1,439 +0,0 @@ -/* - * Copyright (C) 2004 Free Software Foundation, Inc. - * Copyright (c) 2002 Networks Associates Technology, Inc. - * All rights reserved. - * - * This software was developed for the FreeBSD Project by Marshall - * Kirk McKusick and Network Associates Laboratories, the Security - * Research Division of Network Associates, Inc. under DARPA/SPAWAR - * contract N66001-01-C-8035 ("CBOSS"), as part of the DARPA CHATS - * research program - * - * Copyright (c) 1982, 1989, 1993 - * The Regents of the University of California. All rights reserved. - * (c) UNIX System Laboratories, Inc. - * All or some portions of this file are derived from material licensed - * to the University of California by American Telephone and Telegraph - * Co. or Unix System Laboratories, Inc. and are reproduced herein with - * the permission of UNIX System Laboratories, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The names of the authors may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)dinode.h 8.3 (Berkeley) 1/21/94 - * $FreeBSD: src/sys/ufs/ufs/dinode.h,v 1.11 2002/07/16 22:36:00 mckusick Exp $ - */ - -#ifndef _GRUB_UFS2_H_ -#define _GRUB_UFS2_H_ - -typedef signed char grub_int8_t; -typedef signed short grub_int16_t; -typedef signed int grub_int32_t; -typedef signed long long int grub_int64_t; -typedef unsigned char grub_uint8_t; -typedef unsigned short grub_uint16_t; -typedef unsigned int grub_uint32_t; -typedef unsigned long long int grub_uint64_t; - -typedef grub_uint8_t grub_u_char; -typedef grub_uint32_t grub_u_int; - -typedef grub_uint8_t grub_u_int8_t; -typedef grub_uint16_t grub_u_int16_t; -typedef grub_uint32_t grub_u_int32_t; -typedef grub_uint64_t grub_u_int64_t; - -#define i_size di_size - - -#define DEV_BSIZE 512 - -/* - * The root inode is the root of the filesystem. Inode 0 can't be used for - * normal purposes and historically bad blocks were linked to inode 1, thus - * the root inode is 2. (Inode 1 is no longer used for this purpose, however - * numerous dump tapes make this assumption, so we are stuck with it). - */ -#define ROOTINO ((grub_ino_t)2) - -/* - * The size of physical and logical block numbers and time fields in UFS. - */ -typedef grub_int32_t ufs1_daddr_t; -typedef grub_int64_t ufs2_daddr_t; -typedef grub_int64_t ufs_lbn_t; -typedef grub_int64_t ufs_time_t; - -/* inode number */ -typedef grub_uint32_t grub_ino_t; - -/* File permissions. */ -#define IEXEC 0000100 /* Executable. */ -#define IWRITE 0000200 /* Writeable. */ -#define IREAD 0000400 /* Readable. */ -#define ISVTX 0001000 /* Sticky bit. */ -#define ISGID 0002000 /* Set-gid. */ -#define ISUID 0004000 /* Set-uid. */ - -/* File types. */ -#define IFMT 0170000 /* Mask of file type. */ -#define IFIFO 0010000 /* Named pipe (fifo). */ -#define IFCHR 0020000 /* Character device. */ -#define IFDIR 0040000 /* Directory file. */ -#define IFBLK 0060000 /* Block device. */ -#define IFREG 0100000 /* Regular file. */ -#define IFLNK 0120000 /* Symbolic link. */ -#define IFSOCK 0140000 /* UNIX domain socket. */ -#define IFWHT 0160000 /* Whiteout. */ - -/* - * A dinode contains all the meta-data associated with a UFS2 file. - * This structure defines the on-disk format of a dinode. Since - * this structure describes an on-disk structure, all its fields - * are defined by types with precise widths. - */ - -#define NXADDR 2 /* External addresses in inode. */ -#define NDADDR 12 /* Direct addresses in inode. */ -#define NIADDR 3 /* Indirect addresses in inode. */ - -struct ufs1_dinode { - grub_u_int16_t di_mode; /* 0: IFMT, permissions; see below. */ - grub_int16_t di_nlink; /* 2: File link count. */ - union { - grub_u_int16_t oldids[2]; /* 4: Ffs: old user and group ids. */ - } di_u; - grub_u_int64_t di_size; /* 8: File byte count. */ - grub_int32_t di_atime; /* 16: Last access time. */ - grub_int32_t di_atimensec; /* 20: Last access time. */ - grub_int32_t di_mtime; /* 24: Last modified time. */ - grub_int32_t di_mtimensec; /* 28: Last modified time. */ - grub_int32_t di_ctime; /* 32: Last inode change time. */ - grub_int32_t di_ctimensec; /* 36: Last inode change time. */ - ufs1_daddr_t di_db[NDADDR]; /* 40: Direct disk blocks. */ - ufs1_daddr_t di_ib[NIADDR]; /* 88: Indirect disk blocks. */ - grub_u_int32_t di_flags; /* 100: Status flags (chflags). */ - grub_int32_t di_blocks; /* 104: Blocks actually held. */ - grub_int32_t di_gen; /* 108: Generation number. */ - grub_u_int32_t di_uid; /* 112: File owner. */ - grub_u_int32_t di_gid; /* 116: File group. */ - grub_int32_t di_spare[2]; /* 120: Reserved; currently unused */ -}; - -struct ufs2_dinode { - grub_u_int16_t di_mode; /* 0: IFMT, permissions; see below. */ - grub_int16_t di_nlink; /* 2: File link count. */ - grub_u_int32_t di_uid; /* 4: File owner. */ - grub_u_int32_t di_gid; /* 8: File group. */ - grub_u_int32_t di_blksize; /* 12: Inode blocksize. */ - grub_u_int64_t di_size; /* 16: File byte count. */ - grub_u_int64_t di_blocks; /* 24: Bytes actually held. */ - ufs_time_t di_atime; /* 32: Last access time. */ - ufs_time_t di_mtime; /* 40: Last modified time. */ - ufs_time_t di_ctime; /* 48: Last inode change time. */ - ufs_time_t di_birthtime; /* 56: Inode creation time. */ - grub_int32_t di_mtimensec; /* 64: Last modified time. */ - grub_int32_t di_atimensec; /* 68: Last access time. */ - grub_int32_t di_ctimensec; /* 72: Last inode change time. */ - grub_int32_t di_birthnsec; /* 76: Inode creation time. */ - grub_int32_t di_gen; /* 80: Generation number. */ - grub_u_int32_t di_kernflags; /* 84: Kernel flags. */ - grub_u_int32_t di_flags; /* 88: Status flags (chflags). */ - grub_int32_t di_extsize; /* 92: External attributes block. */ - ufs2_daddr_t di_extb[NXADDR];/* 96: External attributes block. */ - ufs2_daddr_t di_db[NDADDR]; /* 112: Direct disk blocks. */ - ufs2_daddr_t di_ib[NIADDR]; /* 208: Indirect disk blocks. */ - grub_int64_t di_spare[3]; /* 232: Reserved; currently unused */ -}; - -#define MAXNAMLEN 255 - -struct direct { - grub_u_int32_t d_ino; /* inode number of entry */ - grub_u_int16_t d_reclen; /* length of this record */ - grub_u_int8_t d_type; /* file type, see below */ - grub_u_int8_t d_namlen; /* length of string in d_name */ - char d_name[MAXNAMLEN + 1];/* name with length <= MAXNAMLEN */ -}; - -/* - * File types - */ -#define DT_UNKNOWN 0 -#define DT_FIFO 1 -#define DT_CHR 2 -#define DT_DIR 4 -#define DT_BLK 6 -#define DT_REG 8 -#define DT_LNK 10 -#define DT_SOCK 12 -#define DT_WHT 14 - -/* - * Superblock offsets - */ -#define SBLOCK_FLOPPY 0 -#define SBLOCK_UFS1 8192 -#define SBLOCK_UFS2 65536 -#define SBLOCK_PIGGY 262144 -#define SBLOCKSIZE 8192 -#define SBLOCKSEARCH \ - { SBLOCK_UFS2, SBLOCK_UFS1, SBLOCK_FLOPPY, SBLOCK_PIGGY, -1 } - -#define MAXMNTLEN 512 - -#define NOCSPTRS ((128 / sizeof(void *)) - 4) - -/* - * The maximum number of snapshot nodes that can be associated - * with each filesystem. This limit affects only the number of - * snapshot files that can be recorded within the superblock so - * that they can be found when the filesystem is mounted. However, - * maintaining too many will slow the filesystem performance, so - * having this limit is a good idea. - */ -#define FSMAXSNAP 20 - -/* - * Per cylinder group information; summarized in blocks allocated - * from first cylinder group data blocks. These blocks have to be - * read in from fs_csaddr (size fs_cssize) in addition to the - * super block. - */ -struct csum { - grub_int32_t cs_ndir; /* number of directories */ - grub_int32_t cs_nbfree; /* number of free blocks */ - grub_int32_t cs_nifree; /* number of free inodes */ - grub_int32_t cs_nffree; /* number of free frags */ -}; - -struct csum_total { - grub_int64_t cs_ndir; /* number of directories */ - grub_int64_t cs_nbfree; /* number of free blocks */ - grub_int64_t cs_nifree; /* number of free inodes */ - grub_int64_t cs_nffree; /* number of free frags */ - grub_int64_t cs_numclusters; /* number of free clusters */ - grub_int64_t cs_spare[3]; /* future expansion */ -}; - -/* - * Super block for an FFS filesystem. - */ -struct fs { - grub_int32_t fs_firstfield; /* historic filesystem linked list, */ - grub_int32_t fs_unused_1; /* used for incore super blocks */ - grub_int32_t fs_sblkno; /* offset of super-block in filesys */ - grub_int32_t fs_cblkno; /* offset of cyl-block in filesys */ - grub_int32_t fs_iblkno; /* offset of inode-blocks in filesys */ - grub_int32_t fs_dblkno; /* offset of first data after cg */ - grub_int32_t fs_old_cgoffset; /* cylinder group offset in cylinder */ - grub_int32_t fs_old_cgmask; /* used to calc mod fs_ntrak */ - grub_int32_t fs_old_time; /* last time written */ - grub_int32_t fs_old_size; /* number of blocks in fs */ - grub_int32_t fs_old_dsize; /* number of data blocks in fs */ - grub_int32_t fs_ncg; /* number of cylinder groups */ - grub_int32_t fs_bsize; /* size of basic blocks in fs */ - grub_int32_t fs_fsize; /* size of frag blocks in fs */ - grub_int32_t fs_frag; /* number of frags in a block in fs */ -/* these are configuration parameters */ - grub_int32_t fs_minfree; /* minimum percentage of free blocks */ - grub_int32_t fs_old_rotdelay; /* num of ms for optimal next block */ - grub_int32_t fs_old_rps; /* disk revolutions per second */ -/* these fields can be computed from the others */ - grub_int32_t fs_bmask; /* ``blkoff'' calc of blk offsets */ - grub_int32_t fs_fmask; /* ``fragoff'' calc of frag offsets */ - grub_int32_t fs_bshift; /* ``lblkno'' calc of logical blkno */ - grub_int32_t fs_fshift; /* ``numfrags'' calc number of frags */ -/* these are configuration parameters */ - grub_int32_t fs_maxcontig; /* max number of contiguous blks */ - grub_int32_t fs_maxbpg; /* max number of blks per cyl group */ -/* these fields can be computed from the others */ - grub_int32_t fs_fragshift; /* block to frag shift */ - grub_int32_t fs_fsbtodb; /* fsbtodb and dbtofsb shift constant */ - grub_int32_t fs_sbsize; /* actual size of super block */ - grub_int32_t fs_spare1[2]; /* old fs_csmask */ - /* old fs_csshift */ - grub_int32_t fs_nindir; /* value of NINDIR */ - grub_int32_t fs_inopb; /* value of INOPB */ - grub_int32_t fs_old_nspf; /* value of NSPF */ -/* yet another configuration parameter */ - grub_int32_t fs_optim; /* optimization preference, see below */ - grub_int32_t fs_old_npsect; /* # sectors/track including spares */ - grub_int32_t fs_old_interleave; /* hardware sector interleave */ - grub_int32_t fs_old_trackskew; /* sector 0 skew, per track */ - grub_int32_t fs_id[2]; /* unique filesystem id */ -/* sizes determined by number of cylinder groups and their sizes */ - grub_int32_t fs_old_csaddr; /* blk addr of cyl grp summary area */ - grub_int32_t fs_cssize; /* size of cyl grp summary area */ - grub_int32_t fs_cgsize; /* cylinder group size */ - grub_int32_t fs_spare2; /* old fs_ntrak */ - grub_int32_t fs_old_nsect; /* sectors per track */ - grub_int32_t fs_old_spc; /* sectors per cylinder */ - grub_int32_t fs_old_ncyl; /* cylinders in filesystem */ - grub_int32_t fs_old_cpg; /* cylinders per group */ - grub_int32_t fs_ipg; /* inodes per group */ - grub_int32_t fs_fpg; /* blocks per group * fs_frag */ -/* this data must be re-computed after crashes */ - struct csum fs_old_cstotal; /* cylinder summary information */ -/* these fields are cleared at mount time */ - grub_int8_t fs_fmod; /* super block modified flag */ - grub_int8_t fs_clean; /* filesystem is clean flag */ - grub_int8_t fs_ronly; /* mounted read-only flag */ - grub_int8_t fs_old_flags; /* old FS_ flags */ - grub_u_char fs_fsmnt[MAXMNTLEN]; /* name mounted on */ -/* these fields retain the current block allocation info */ - grub_int32_t fs_cgrotor; /* last cg searched */ - void *fs_ocsp[NOCSPTRS]; /* padding; was list of fs_cs buffers */ - grub_u_int8_t *fs_contigdirs; /* # of contiguously allocated dirs */ - struct csum *fs_csp; /* cg summary info buffer for fs_cs */ - grub_int32_t *fs_maxcluster; /* max cluster in each cyl group */ - grub_u_int *fs_active; /* used by snapshots to track fs */ - grub_int32_t fs_old_cpc; /* cyl per cycle in postbl */ - grub_int32_t fs_maxbsize; /* maximum blocking factor permitted */ - grub_int64_t fs_sparecon64[17]; /* old rotation block list head */ - grub_int64_t fs_sblockloc; /* byte offset of standard superblock */ - struct csum_total fs_cstotal; /* cylinder summary information */ - ufs_time_t fs_time; /* last time written */ - grub_int64_t fs_size; /* number of blocks in fs */ - grub_int64_t fs_dsize; /* number of data blocks in fs */ - ufs2_daddr_t fs_csaddr; /* blk addr of cyl grp summary area */ - grub_int64_t fs_pendingblocks; /* blocks in process of being freed */ - grub_int32_t fs_pendinginodes; /* inodes in process of being freed */ - grub_int32_t fs_snapinum[FSMAXSNAP];/* list of snapshot inode numbers */ - grub_int32_t fs_avgfilesize; /* expected average file size */ - grub_int32_t fs_avgfpdir; /* expected # of files per directory */ - grub_int32_t fs_save_cgsize; /* save real cg size to use fs_bsize */ - grub_int32_t fs_sparecon32[26]; /* reserved for future constants */ - grub_int32_t fs_flags; /* see FS_ flags below */ - grub_int32_t fs_contigsumsize; /* size of cluster summary array */ - grub_int32_t fs_maxsymlinklen; /* max length of an internal symlink */ - grub_int32_t fs_old_inodefmt; /* format of on-disk inodes */ - grub_u_int64_t fs_maxfilesize; /* maximum representable file size */ - grub_int64_t fs_qbmask; /* ~fs_bmask for use with 64-bit size */ - grub_int64_t fs_qfmask; /* ~fs_fmask for use with 64-bit size */ - grub_int32_t fs_state; /* validate fs_clean field */ - grub_int32_t fs_old_postblformat; /* format of positional layout tables */ - grub_int32_t fs_old_nrpos; /* number of rotational positions */ - grub_int32_t fs_spare5[2]; /* old fs_postbloff */ - /* old fs_rotbloff */ - grub_int32_t fs_magic; /* magic number */ -}; - -/* - * Filesystem identification - */ -#define FS_UFS1_MAGIC 0x011954 /* UFS1 fast filesystem magic number */ -#define FS_UFS2_MAGIC 0x19540119 /* UFS2 fast filesystem magic number */ - -/* - * Turn filesystem block numbers into disk block addresses. - * This maps filesystem blocks to device size blocks. - */ -#define fsbtodb(fs, b) ((b) << (fs)->fs_fsbtodb) -#define dbtofsb(fs, b) ((b) >> (fs)->fs_fsbtodb) - -/* - * Cylinder group macros to locate things in cylinder groups. - * They calc filesystem addresses of cylinder group data structures. - */ -#define cgbase(fs, c) ((ufs2_daddr_t)((fs)->fs_fpg * (c))) -#define cgimin(fs, c) (cgstart(fs, c) + (fs)->fs_iblkno) /* inode blk */ -#define cgstart(fs, c) \ - ((fs)->fs_magic == FS_UFS2_MAGIC ? cgbase(fs, c) : \ - (cgbase(fs, c) + (fs)->fs_old_cgoffset * ((c) & ~((fs)->fs_old_cgmask)))) - -/* - * Macros for handling inode numbers: - * inode number to filesystem block offset. - * inode number to cylinder group number. - * inode number to filesystem block address. - */ -#define ino_to_cg(fs, x) ((x) / (fs)->fs_ipg) -#define ino_to_fsba(fs, x) \ - ((ufs2_daddr_t)(cgimin(fs, ino_to_cg(fs, x)) + \ - (blkstofrags((fs), (((x) % (fs)->fs_ipg) / INOPB(fs)))))) -#define ino_to_fsbo(fs, x) ((x) % INOPB(fs)) - -/* - * The following macros optimize certain frequently calculated - * quantities by using shifts and masks in place of divisions - * modulos and multiplications. - */ -#define blkoff(fs, loc) /* calculates (loc % fs->fs_bsize) */ \ - ((loc) & (fs)->fs_qbmask) - -/* Use this only when `blk' is known to be small, e.g., < NDADDR. */ -#define smalllblktosize(fs, blk) /* calculates (blk * fs->fs_bsize) */ \ - ((blk) << (fs)->fs_bshift) - - -#define lblkno(fs, loc) /* calculates (loc / fs->fs_bsize) */ \ - ((loc) >> (fs)->fs_bshift) - -#define fragroundup(fs, size) /* calculates roundup(size, fs->fs_fsize) */ \ - (((size) + (fs)->fs_qfmask) & (fs)->fs_fmask) - -#define fragstoblks(fs, frags) /* calculates (frags / fs->fs_frag) */ \ - ((frags) >> (fs)->fs_fragshift) -#define blkstofrags(fs, blks) /* calculates (blks * fs->fs_frag) */ \ - ((blks) << (fs)->fs_fragshift) -#define fragnum(fs, fsb) /* calculates (fsb % fs->fs_frag) */ \ - ((fsb) & ((fs)->fs_frag - 1)) -#define blknum(fs, fsb) /* calculates rounddown(fsb, fs->fs_frag) */ \ - ((fsb) &~ ((fs)->fs_frag - 1)) - -/* - * Determining the size of a file block in the filesystem. - */ -#define blksize(fs, ip, lbn) \ - (((lbn) >= NDADDR || (ip)->i_size >= smalllblktosize(fs, (lbn) + 1)) \ - ? (fs)->fs_bsize \ - : (fragroundup(fs, blkoff(fs, (ip)->i_size)))) -#define sblksize(fs, size, lbn) \ - (((lbn) >= NDADDR || (size) >= ((lbn) + 1) << (fs)->fs_bshift) \ - ? (fs)->fs_bsize \ - : (fragroundup(fs, blkoff(fs, (size))))) - - -/* - * Number of inodes in a secondary storage block/fragment. - */ -#define INOPB(fs) ((fs)->fs_inopb) -#define INOPF(fs) ((fs)->fs_inopb >> (fs)->fs_fragshift) - -/* - * Number of indirects in a filesystem block. - */ -#define NINDIR(fs) ((fs)->fs_nindir) - -#define FS_UNCLEAN 0x01 /* filesystem not clean at mount */ -#define FS_DOSOFTDEP 0x02 /* filesystem using soft dependencies */ -#define FS_NEEDSFSCK 0x04 /* filesystem needs sync fsck before mount */ -#define FS_INDEXDIRS 0x08 /* kernel supports indexed directories */ -#define FS_ACLS 0x10 /* file system has ACLs enabled */ -#define FS_MULTILABEL 0x20 /* file system is MAC multi-label */ -#define FS_FLAGS_UPDATED 0x80 /* flags have been moved to new location */ - -#endif /* _GRUB_UFS2_H_ */ diff --git a/stage2/vstafs.h b/stage2/vstafs.h deleted file mode 100644 index cc7820cbc..000000000 --- a/stage2/vstafs.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2001 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - - -#ifndef VSTAFS_H -#define VSTAFS_H 1 - - -#define LINE 16 -#define BLOCK_SIZE 512 -#define VSTAFS_START_DATA 320 - -struct bootrecord -{ - unsigned char flag; - unsigned char s_sector; - unsigned char s_head; - unsigned char s_cylinder; - unsigned char p_type; - unsigned char e_sector; - unsigned char e_head; - unsigned char e_cylinder; - unsigned long start_lba; - unsigned long nr_sector_lba; -}; - -struct alloc -{ - unsigned long a_start; - unsigned long a_len; -}; - -struct first_sector -{ - unsigned long fs_magic; - unsigned long fs_size; - unsigned long fs_extsize; - unsigned long fs_free; - struct alloc fs_freesecs[0]; -}; - -struct prot -{ - unsigned char len; - unsigned char pdefault; - unsigned char id[7]; - unsigned char bits[7]; -}; - -struct fs_file -{ - unsigned long prev; - unsigned long rev; - unsigned long len; - unsigned short type; - unsigned short nlink; - struct prot pprot; - unsigned int owner; - unsigned int extents; - struct alloc blocks[32]; - long fs_ctime, fs_mtime; /* it is not lon but time_t */ - char pad[16]; - char data[0]; -}; - -struct dir_entry -{ - char name[28]; - unsigned long start; -}; - -#endif /* ! VSTAFS_H */ diff --git a/stage2/xfs.h b/stage2/xfs.h deleted file mode 100644 index 02f8dcd1a..000000000 --- a/stage2/xfs.h +++ /dev/null @@ -1,544 +0,0 @@ -/* xfs.h - an extraction from xfsprogs-1.3.5/include/xfs* into one file */ -/* - * GRUB -- GRand Unified Bootloader - * Copyright (C) 2000 Silicon Graphics, Inc. All Rights Reserved. - * Copyright (C) 2001,2004 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it would be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * Further, this software is distributed without any warranty that it is - * free of the rightful claim of any third person regarding infringement - * or the like. Any license provided herein, whether implied or - * otherwise, applies only to this software file. Patent licenses, if - * any, provided herein do not apply to combinations of this program with - * other software, or any other product whatsoever. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write the Free Software Foundation, Inc., 59 - * Temple Place - Suite 330, Boston MA 02111-1307, USA. - * - * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, - * Mountain View, CA 94043, or: - * - * http://www.sgi.com - * - * For further information regarding this notice, see: - * - * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ - */ - -typedef signed char xfs_int8_t; -typedef unsigned char xfs_uint8_t; -typedef short xfs_int16_t; -typedef unsigned short xfs_uint16_t; -typedef int xfs_int32_t; -typedef unsigned int xfs_uint32_t; -typedef long long xfs_int64_t; -typedef unsigned long long xfs_uint64_t; - -typedef xfs_uint64_t xfs_ino_t; -typedef xfs_uint32_t xfs_agino_t; -typedef xfs_int64_t xfs_daddr_t; -typedef xfs_int64_t xfs_off_t; -typedef xfs_uint8_t uuid_t[16]; - - -/* those are from xfs_types.h */ - -typedef xfs_uint32_t xfs_agblock_t; /* blockno in alloc. group */ -typedef xfs_uint32_t xfs_extlen_t; /* extent length in blocks */ -typedef xfs_uint32_t xfs_agnumber_t; /* allocation group number */ -typedef xfs_int32_t xfs_extnum_t; /* # of extents in a file */ -typedef xfs_int16_t xfs_aextnum_t; /* # extents in an attribute fork */ -typedef xfs_int64_t xfs_fsize_t; /* bytes in a file */ - -typedef xfs_uint32_t xfs_dablk_t; /* dir/attr block number (in file) */ -typedef xfs_uint32_t xfs_dahash_t; /* dir/attr hash value */ - -/* - * Disk based types: - */ -typedef xfs_uint64_t xfs_dfsbno_t; /* blockno in filesystem (agno|agbno) */ -typedef xfs_uint64_t xfs_drfsbno_t; /* blockno in filesystem (raw) */ -typedef xfs_uint64_t xfs_drtbno_t; /* extent (block) in realtime area */ -typedef xfs_uint64_t xfs_dfiloff_t; /* block number in a file */ - -typedef xfs_uint64_t xfs_fsblock_t; /* blockno in filesystem (agno|agbno) */ -typedef xfs_uint64_t xfs_fileoff_t; /* block number in a file */ -typedef xfs_uint64_t xfs_filblks_t; /* number of blocks in a file */ - - -/* those are from xfs_sb.h */ - -#define XFS_SB_MAGIC 0x58465342 /* 'XFSB'*/ -#define XFS_SB_VERSION_4 4 /* 6.2+ - bitmask version */ -#define XFS_SB_VERSION_NUMBITS 0x000f - -typedef struct xfs_sb -{ - xfs_uint32_t sb_magicnum; /* magic number == XFS_SB_MAGIC */ - xfs_uint32_t sb_blocksize; /* logical block size, bytes */ - xfs_drfsbno_t sb_dblocks; /* number of data blocks */ - xfs_drfsbno_t sb_rblocks; /* number of realtime blocks */ - xfs_drtbno_t sb_rextents; /* number of realtime extents */ - uuid_t sb_uuid; /* file system unique id */ - xfs_dfsbno_t sb_logstart; /* starting block of log if internal */ - xfs_ino_t sb_rootino; /* root inode number */ - xfs_ino_t sb_rbmino; /* bitmap inode for realtime extents */ - xfs_ino_t sb_rsumino; /* summary inode for rt bitmap */ - xfs_agblock_t sb_rextsize; /* realtime extent size, blocks */ - xfs_agblock_t sb_agblocks; /* size of an allocation group */ - xfs_agnumber_t sb_agcount; /* number of allocation groups */ - xfs_extlen_t sb_rbmblocks; /* number of rt bitmap blocks */ - xfs_extlen_t sb_logblocks; /* number of log blocks */ - xfs_uint16_t sb_versionnum; /* header version == XFS_SB_VERSION */ - xfs_uint16_t sb_sectsize; /* volume sector size, bytes */ - xfs_uint16_t sb_inodesize; /* inode size, bytes */ - xfs_uint16_t sb_inopblock; /* inodes per block */ - char sb_fname[12]; /* file system name */ - xfs_uint8_t sb_blocklog; /* log2 of sb_blocksize */ - xfs_uint8_t sb_sectlog; /* log2 of sb_sectsize */ - xfs_uint8_t sb_inodelog; /* log2 of sb_inodesize */ - xfs_uint8_t sb_inopblog; /* log2 of sb_inopblock */ - xfs_uint8_t sb_agblklog; /* log2 of sb_agblocks (rounded up) */ - xfs_uint8_t sb_rextslog; /* log2 of sb_rextents */ - xfs_uint8_t sb_inprogress; /* mkfs is in progress, don't mount */ - xfs_uint8_t sb_imax_pct; /* max % of fs for inode space */ - /* statistics */ - /* - * These fields must remain contiguous. If you really - * want to change their layout, make sure you fix the - * code in xfs_trans_apply_sb_deltas(). - */ - xfs_uint64_t sb_icount; /* allocated inodes */ - xfs_uint64_t sb_ifree; /* free inodes */ - xfs_uint64_t sb_fdblocks; /* free data blocks */ - xfs_uint64_t sb_frextents; /* free realtime extents */ - /* - * End contiguous fields. - */ - xfs_ino_t sb_uquotino; /* user quota inode */ - xfs_ino_t sb_gquotino; /* group quota inode */ - xfs_uint16_t sb_qflags; /* quota flags */ - xfs_uint8_t sb_flags; /* misc. flags */ - xfs_uint8_t sb_shared_vn; /* shared version number */ - xfs_extlen_t sb_inoalignmt; /* inode chunk alignment, fsblocks */ - xfs_uint32_t sb_unit; /* stripe or raid unit */ - xfs_uint32_t sb_width; /* stripe or raid width */ - xfs_uint8_t sb_dirblklog; /* log2 of dir block size (fsbs) */ - xfs_uint8_t sb_dummy[7]; /* padding */ -} xfs_sb_t; - - -/* those are from xfs_btree.h */ - -/* - * Long form header: bmap btrees. - */ -typedef struct xfs_btree_lblock -{ - xfs_uint32_t bb_magic; /* magic number for block type */ - xfs_uint16_t bb_level; /* 0 is a leaf */ - xfs_uint16_t bb_numrecs; /* current # of data records */ - xfs_dfsbno_t bb_leftsib; /* left sibling block or NULLDFSBNO */ - xfs_dfsbno_t bb_rightsib; /* right sibling block or NULLDFSBNO */ -} xfs_btree_lblock_t; - -/* - * Combined header and structure, used by common code. - */ -typedef struct xfs_btree_hdr -{ - xfs_uint32_t bb_magic; /* magic number for block type */ - xfs_uint16_t bb_level; /* 0 is a leaf */ - xfs_uint16_t bb_numrecs; /* current # of data records */ -} xfs_btree_hdr_t; - -typedef struct xfs_btree_block -{ - xfs_btree_hdr_t bb_h; /* header */ - union { - struct { - xfs_agblock_t bb_leftsib; - xfs_agblock_t bb_rightsib; - } s; /* short form pointers */ - struct { - xfs_dfsbno_t bb_leftsib; - xfs_dfsbno_t bb_rightsib; - } l; /* long form pointers */ - } bb_u; /* rest */ -} xfs_btree_block_t; - -/* those are from xfs_bmap_btree.h */ - -/* - * Bmap root header, on-disk form only. - */ -typedef struct xfs_bmdr_block -{ - xfs_uint16_t bb_level; /* 0 is a leaf */ - xfs_uint16_t bb_numrecs; /* current # of data records */ -} xfs_bmdr_block_t; - -/* - * Bmap btree record and extent descriptor. - * For 32-bit kernels, - * l0:31 is an extent flag (value 1 indicates non-normal). - * l0:0-30 and l1:9-31 are startoff. - * l1:0-8, l2:0-31, and l3:21-31 are startblock. - * l3:0-20 are blockcount. - * For 64-bit kernels, - * l0:63 is an extent flag (value 1 indicates non-normal). - * l0:9-62 are startoff. - * l0:0-8 and l1:21-63 are startblock. - * l1:0-20 are blockcount. - */ - -#define BMBT_USE_64 1 - -typedef struct xfs_bmbt_rec_32 -{ - xfs_uint32_t l0, l1, l2, l3; -} xfs_bmbt_rec_32_t; -typedef struct xfs_bmbt_rec_64 -{ - xfs_uint64_t l0, l1; -} xfs_bmbt_rec_64_t; - -#if BMBT_USE_64 -typedef xfs_uint64_t xfs_bmbt_rec_base_t; /* use this for casts */ -typedef xfs_bmbt_rec_64_t xfs_bmbt_rec_t, xfs_bmdr_rec_t; -#else /* !BMBT_USE_64 */ -typedef xfs_uint32_t xfs_bmbt_rec_base_t; /* use this for casts */ -typedef xfs_bmbt_rec_32_t xfs_bmbt_rec_t, xfs_bmdr_rec_t; -#endif /* BMBT_USE_64 */ - -/* - * Key structure for non-leaf levels of the tree. - */ -typedef struct xfs_bmbt_key -{ - xfs_dfiloff_t br_startoff; /* starting file offset */ -} xfs_bmbt_key_t, xfs_bmdr_key_t; - -typedef xfs_dfsbno_t xfs_bmbt_ptr_t, xfs_bmdr_ptr_t; /* btree pointer type */ - /* btree block header type */ -typedef struct xfs_btree_lblock xfs_bmbt_block_t; - - -/* those are from xfs_dir2.h */ -/* - * Directory version 2. - * There are 4 possible formats: - * shortform - * single block - data with embedded leaf at the end - * multiple data blocks, single leaf+freeindex block - * data blocks, node&leaf blocks (btree), freeindex blocks - * - * The shortform format is in xfs_dir2_sf.h. - * The single block format is in xfs_dir2_block.h. - * The data block format is in xfs_dir2_data.h. - * The leaf and freeindex block formats are in xfs_dir2_leaf.h. - * Node blocks are the same as the other version, in xfs_da_btree.h. - */ - -/* - * Byte offset in data block and shortform entry. - */ -typedef xfs_uint16_t xfs_dir2_data_off_t; - -/* - * Byte offset in a directory. - */ -typedef xfs_off_t xfs_dir2_off_t; - -/* those are from xfs_da_btree.h */ -/*======================================================================== - * Directory Structure when greater than XFS_LBSIZE(mp) bytes. - *========================================================================*/ - -/* - * This structure is common to both leaf nodes and non-leaf nodes in the Btree. - * - * Is is used to manage a doubly linked list of all blocks at the same - * level in the Btree, and to identify which type of block this is. - */ -#define XFS_DIR2_LEAF1_MAGIC 0xd2f1 /* magic number: v2 dirlf single blks */ -#define XFS_DIR2_LEAFN_MAGIC 0xd2ff /* magic number: v2 dirlf multi blks */ - -typedef struct xfs_da_blkinfo { - xfs_dablk_t forw; /* previous block in list */ - xfs_dablk_t back; /* following block in list */ - xfs_uint16_t magic; /* validity check on block */ - xfs_uint16_t pad; /* unused */ -} xfs_da_blkinfo_t; - -/* - * This is the structure of the root and intermediate nodes in the Btree. - * The leaf nodes are defined above. - * - * Entries are not packed. - * - * Since we have duplicate keys, use a binary search but always follow - * all match in the block, not just the first match found. - */ - -typedef struct xfs_da_intnode { - struct xfs_da_node_hdr { /* constant-structure header block */ - xfs_da_blkinfo_t info; /* block type, links, etc. */ - xfs_uint16_t count; /* count of active entries */ - xfs_uint16_t level; /* level above leaves (leaf == 0) */ - } hdr; - struct xfs_da_node_entry { - xfs_dahash_t hashval; /* hash value for this descendant */ - xfs_dablk_t before; /* Btree block before this key */ - } btree[1]; /* variable sized array of keys */ -} xfs_da_intnode_t; - - -/* those are from xfs_dir2_data.h */ -/* - * Directory format 2, data block structures. - */ - -/* - * Constants. - */ -#define XFS_DIR2_DATA_FREE_TAG 0xffff -#define XFS_DIR2_DATA_FD_COUNT 3 - -/* - * Structures. - */ - -/* - * Describe a free area in the data block. - * The freespace will be formatted as a xfs_dir2_data_unused_t. - */ -typedef struct xfs_dir2_data_free { - xfs_dir2_data_off_t offset; /* start of freespace */ - xfs_dir2_data_off_t length; /* length of freespace */ -} xfs_dir2_data_free_t; - -/* - * Header for the data blocks. - * Always at the beginning of a directory-sized block. - * The code knows that XFS_DIR2_DATA_FD_COUNT is 3. - */ -typedef struct xfs_dir2_data_hdr { - xfs_uint32_t magic; /* XFS_DIR2_DATA_MAGIC */ - /* or XFS_DIR2_BLOCK_MAGIC */ - xfs_dir2_data_free_t bestfree[XFS_DIR2_DATA_FD_COUNT]; -} xfs_dir2_data_hdr_t; - -/* - * Active entry in a data block. Aligned to 8 bytes. - * Tag appears as the last 2 bytes. - */ -typedef struct xfs_dir2_data_entry { - xfs_ino_t inumber; /* inode number */ - xfs_uint8_t namelen; /* name length */ - xfs_uint8_t name[1]; /* name bytes, no null */ - /* variable offset */ - xfs_dir2_data_off_t tag; /* starting offset of us */ -} xfs_dir2_data_entry_t; - -/* - * Unused entry in a data block. Aligned to 8 bytes. - * Tag appears as the last 2 bytes. - */ -typedef struct xfs_dir2_data_unused { - xfs_uint16_t freetag; /* XFS_DIR2_DATA_FREE_TAG */ - xfs_dir2_data_off_t length; /* total free length */ - /* variable offset */ - xfs_dir2_data_off_t tag; /* starting offset of us */ -} xfs_dir2_data_unused_t; - -typedef union { - xfs_dir2_data_entry_t entry; - xfs_dir2_data_unused_t unused; -} xfs_dir2_data_union_t; - - -/* those are from xfs_dir2_leaf.h */ -/* - * Directory version 2, leaf block structures. - */ - -/* - * Leaf block header. - */ -typedef struct xfs_dir2_leaf_hdr { - xfs_da_blkinfo_t info; /* header for da routines */ - xfs_uint16_t count; /* count of entries */ - xfs_uint16_t stale; /* count of stale entries */ -} xfs_dir2_leaf_hdr_t; - - -/* those are from xfs_dir2_block.h */ -/* - * xfs_dir2_block.h - * Directory version 2, single block format structures - */ - -/* - * The single block format is as follows: - * xfs_dir2_data_hdr_t structure - * xfs_dir2_data_entry_t and xfs_dir2_data_unused_t structures - * xfs_dir2_leaf_entry_t structures - * xfs_dir2_block_tail_t structure - */ - -#define XFS_DIR2_BLOCK_MAGIC 0x58443242 /* XD2B: for one block dirs */ - -typedef struct xfs_dir2_block_tail { - xfs_uint32_t count; /* count of leaf entries */ - xfs_uint32_t stale; /* count of stale lf entries */ -} xfs_dir2_block_tail_t; - - -/* those are from xfs_dir2_sf.h */ - -/* - * Directory layout when stored internal to an inode. - * - * Small directories are packed as tightly as possible so as to - * fit into the literal area of the inode. - */ - -/* - * Inode number stored as 8 8-bit values. - */ -typedef struct { xfs_uint8_t i[8]; } xfs_dir2_ino8_t; - -/* - * Inode number stored as 4 8-bit values. - * Works a lot of the time, when all the inode numbers in a directory - * fit in 32 bits. - */ -typedef struct { xfs_uint8_t i[4]; } xfs_dir2_ino4_t; - -typedef union { - xfs_dir2_ino8_t i8; - xfs_dir2_ino4_t i4; -} xfs_dir2_inou_t; - -/* - * Normalized offset (in a data block) of the entry, really xfs_dir2_data_off_t. - * Only need 16 bits, this is the byte offset into the single block form. - */ -typedef struct { xfs_uint8_t i[2]; } xfs_dir2_sf_off_t; - -/* - * The parent directory has a dedicated field, and the self-pointer must - * be calculated on the fly. - * - * Entries are packed toward the top as tightly as possible. The header - * and the elements must be bcopy()'d out into a work area to get correct - * alignment for the inode number fields. - */ -typedef struct xfs_dir2_sf_hdr { - xfs_uint8_t count; /* count of entries */ - xfs_uint8_t i8count; /* count of 8-byte inode #s */ - xfs_dir2_inou_t parent; /* parent dir inode number */ -} xfs_dir2_sf_hdr_t; - -typedef struct xfs_dir2_sf_entry { - xfs_uint8_t namelen; /* actual name length */ - xfs_dir2_sf_off_t offset; /* saved offset */ - xfs_uint8_t name[1]; /* name, variable size */ - xfs_dir2_inou_t inumber; /* inode number, var. offset */ -} xfs_dir2_sf_entry_t; - -typedef struct xfs_dir2_sf { - xfs_dir2_sf_hdr_t hdr; /* shortform header */ - xfs_dir2_sf_entry_t list[1]; /* shortform entries */ -} xfs_dir2_sf_t; - -/* those are from xfs_dinode.h */ - -#define XFS_DINODE_VERSION_1 1 -#define XFS_DINODE_VERSION_2 2 -#define XFS_DINODE_MAGIC 0x494e /* 'IN' */ - -/* - * Disk inode structure. - * This is just the header; the inode is expanded to fill a variable size - * with the last field expanding. It is split into the core and "other" - * because we only need the core part in the in-core inode. - */ -typedef struct xfs_timestamp { - xfs_int32_t t_sec; /* timestamp seconds */ - xfs_int32_t t_nsec; /* timestamp nanoseconds */ -} xfs_timestamp_t; - -/* - * Note: Coordinate changes to this structure with the XFS_DI_* #defines - * below and the offsets table in xfs_ialloc_log_di(). - */ -typedef struct xfs_dinode_core -{ - xfs_uint16_t di_magic; /* inode magic # = XFS_DINODE_MAGIC */ - xfs_uint16_t di_mode; /* mode and type of file */ - xfs_int8_t di_version; /* inode version */ - xfs_int8_t di_format; /* format of di_c data */ - xfs_uint16_t di_onlink; /* old number of links to file */ - xfs_uint32_t di_uid; /* owner's user id */ - xfs_uint32_t di_gid; /* owner's group id */ - xfs_uint32_t di_nlink; /* number of links to file */ - xfs_uint16_t di_projid; /* owner's project id */ - xfs_uint8_t di_pad[10]; /* unused, zeroed space */ - xfs_timestamp_t di_atime; /* time last accessed */ - xfs_timestamp_t di_mtime; /* time last modified */ - xfs_timestamp_t di_ctime; /* time created/inode modified */ - xfs_fsize_t di_size; /* number of bytes in file */ - xfs_drfsbno_t di_nblocks; /* # of direct & btree blocks used */ - xfs_extlen_t di_extsize; /* basic/minimum extent size for file */ - xfs_extnum_t di_nextents; /* number of extents in data fork */ - xfs_aextnum_t di_anextents; /* number of extents in attribute fork*/ - xfs_uint8_t di_forkoff; /* attr fork offs, <<3 for 64b align */ - xfs_int8_t di_aformat; /* format of attr fork's data */ - xfs_uint32_t di_dmevmask; /* DMIG event mask */ - xfs_uint16_t di_dmstate; /* DMIG state info */ - xfs_uint16_t di_flags; /* random flags, XFS_DIFLAG_... */ - xfs_uint32_t di_gen; /* generation number */ -} xfs_dinode_core_t; - -typedef struct xfs_dinode -{ - xfs_dinode_core_t di_core; - xfs_agino_t di_next_unlinked;/* agi unlinked list ptr */ - union { - xfs_bmdr_block_t di_bmbt; /* btree root block */ - xfs_bmbt_rec_32_t di_bmx[1]; /* extent list */ - xfs_dir2_sf_t di_dir2sf; /* shortform directory v2 */ - char di_c[1]; /* local contents */ - } di_u; -} xfs_dinode_t; - -/* - * Values for di_format - */ -typedef enum xfs_dinode_fmt -{ - XFS_DINODE_FMT_DEV, /* CHR, BLK: di_dev */ - XFS_DINODE_FMT_LOCAL, /* DIR, REG: di_c */ - /* LNK: di_symlink */ - XFS_DINODE_FMT_EXTENTS, /* DIR, REG, LNK: di_bmx */ - XFS_DINODE_FMT_BTREE, /* DIR, REG, LNK: di_bmbt */ - XFS_DINODE_FMT_UUID /* MNT: di_uuid */ -} xfs_dinode_fmt_t; - -/* - * File types (mode field) - */ -#define IFMT 0170000 /* type of file */ -#define IFDIR 0040000 /* directory */ -#define IFREG 0100000 /* regular */ -#define IFLNK 0120000 /* symbolic link */ diff --git a/stamp-h.in b/stamp-h.in deleted file mode 100644 index 9788f7023..000000000 --- a/stamp-h.in +++ /dev/null @@ -1 +0,0 @@ -timestamp diff --git a/util/.cvsignore b/util/.cvsignore deleted file mode 100644 index eab7008e6..000000000 --- a/util/.cvsignore +++ /dev/null @@ -1,8 +0,0 @@ -.deps -Makefile -grub-image -grub-install -grub-md5-crypt -grub-set-default -grub-terminfo -mbchk diff --git a/util/Makefile.am b/util/Makefile.am deleted file mode 100644 index 2e0471135..000000000 --- a/util/Makefile.am +++ /dev/null @@ -1,12 +0,0 @@ -bin_PROGRAMS = mbchk -sbin_SCRIPTS = grub-install grub-md5-crypt grub-terminfo \ - grub-set-default -noinst_SCRIPTS = grub-image mkbimage - -EXTRA_DIST = mkbimage - -# XXX: Need to search for a header file in docs, because of multiboot.h. -AM_CFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir)/docs - -mbchk_SOURCES = mbchk.c -mbchk_LDADD = ../lib/libcommon.a diff --git a/util/Makefile.in b/util/Makefile.in deleted file mode 100644 index e700cf774..000000000 --- a/util/Makefile.in +++ /dev/null @@ -1,478 +0,0 @@ -# Makefile.in generated by automake 1.9.4 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -SOURCES = $(mbchk_SOURCES) - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -bin_PROGRAMS = mbchk$(EXEEXT) -subdir = util -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/grub-image.in $(srcdir)/grub-install.in \ - $(srcdir)/grub-md5-crypt.in $(srcdir)/grub-set-default.in \ - $(srcdir)/grub-terminfo.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = grub-image grub-install grub-md5-crypt \ - grub-terminfo grub-set-default -am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" -binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) -PROGRAMS = $(bin_PROGRAMS) -am_mbchk_OBJECTS = mbchk.$(OBJEXT) -mbchk_OBJECTS = $(am_mbchk_OBJECTS) -mbchk_DEPENDENCIES = ../lib/libcommon.a -sbinSCRIPT_INSTALL = $(INSTALL_SCRIPT) -SCRIPTS = $(noinst_SCRIPTS) $(sbin_SCRIPTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(mbchk_SOURCES) -DIST_SOURCES = $(mbchk_SOURCES) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ -BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ -CC = @CC@ -CCAS = @CCAS@ -CCASFLAGS = @CCASFLAGS@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ -DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FSYS_CFLAGS = @FSYS_CFLAGS@ -GRUB_CFLAGS = @GRUB_CFLAGS@ -GRUB_LIBS = @GRUB_LIBS@ -HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ -HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ -MAKEINFO = @MAKEINFO@ -NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ -NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ -NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ -NET_CFLAGS = @NET_CFLAGS@ -NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ -OBJCOPY = @OBJCOPY@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PERL = @PERL@ -RANLIB = @RANLIB@ -SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ -SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ -SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ -SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STAGE1_CFLAGS = @STAGE1_CFLAGS@ -STAGE2_CFLAGS = @STAGE2_CFLAGS@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -sbin_SCRIPTS = grub-install grub-md5-crypt grub-terminfo \ - grub-set-default - -noinst_SCRIPTS = grub-image mkbimage -EXTRA_DIST = mkbimage - -# XXX: Need to search for a header file in docs, because of multiboot.h. -AM_CFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir)/docs -mbchk_SOURCES = mbchk.c -mbchk_LDADD = ../lib/libcommon.a -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .o .obj -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu util/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu util/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -grub-image: $(top_builddir)/config.status $(srcdir)/grub-image.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -grub-install: $(top_builddir)/config.status $(srcdir)/grub-install.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -grub-md5-crypt: $(top_builddir)/config.status $(srcdir)/grub-md5-crypt.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -grub-terminfo: $(top_builddir)/config.status $(srcdir)/grub-terminfo.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -grub-set-default: $(top_builddir)/config.status $(srcdir)/grub-set-default.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -install-binPROGRAMS: $(bin_PROGRAMS) - @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - if test -f $$p \ - ; then \ - f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ - $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ - else :; fi; \ - done - -uninstall-binPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ - rm -f "$(DESTDIR)$(bindir)/$$f"; \ - done - -clean-binPROGRAMS: - -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) -mbchk$(EXEEXT): $(mbchk_OBJECTS) $(mbchk_DEPENDENCIES) - @rm -f mbchk$(EXEEXT) - $(LINK) $(mbchk_LDFLAGS) $(mbchk_OBJECTS) $(mbchk_LDADD) $(LIBS) -install-sbinSCRIPTS: $(sbin_SCRIPTS) - @$(NORMAL_INSTALL) - test -z "$(sbindir)" || $(mkdir_p) "$(DESTDIR)$(sbindir)" - @list='$(sbin_SCRIPTS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - if test -f $$d$$p; then \ - f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ - echo " $(sbinSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(sbindir)/$$f'"; \ - $(sbinSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(sbindir)/$$f"; \ - else :; fi; \ - done - -uninstall-sbinSCRIPTS: - @$(NORMAL_UNINSTALL) - @list='$(sbin_SCRIPTS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ - echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \ - rm -f "$(DESTDIR)$(sbindir)/$$f"; \ - done - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbchk.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` -uninstall-info-am: - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(PROGRAMS) $(SCRIPTS) -installdirs: - for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-binPROGRAMS clean-generic mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-exec-am: install-binPROGRAMS install-sbinSCRIPTS - -install-info: install-info-am - -install-man: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-binPROGRAMS uninstall-info-am \ - uninstall-sbinSCRIPTS - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ - clean-generic ctags distclean distclean-compile \ - distclean-generic distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-exec install-exec-am \ - install-info install-info-am install-man install-sbinSCRIPTS \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-binPROGRAMS \ - uninstall-info-am uninstall-sbinSCRIPTS - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/util/grub-image.in b/util/grub-image.in deleted file mode 100644 index ea632505f..000000000 --- a/util/grub-image.in +++ /dev/null @@ -1,138 +0,0 @@ -#! /bin/sh -# grub-image - Create a GRUB boot filesystem image and tarball -# Gordon Matzigkeit , 2000-07-25 -# -# Copyright (C) 2000, 2002 Free Software Foundation, Inc. -# -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -prefix=@prefix@ -exec_prefix=@exec_prefix@ -sbindir=@sbindir@ -libdir=@libdir@ -PACKAGE=@PACKAGE@ -host_cpu=@host_cpu@ -host_os=@host_os@ -host_vendor=@host_vendor@ -context=${host_cpu}-${host_vendor} -pkglibdir=${libdir}/${PACKAGE}/${context} - -mke2fs=`which mke2fs` - -progname=`echo "$0" | sed 's%^.*/%%'` -thisdir=`echo "$0" | sed 's%/[^/]*$%%'` -test "X$thisdir" = "X$0" && thisdir=. - -# See if we were invoked from within the build directory, and if so, -# use the built files rather than the installed ones. -if test -f $thisdir/../stage2/stage2; then - grub_shell="$thisdir/../grub/grub" - stage1dir="$thisdir/../stage1" - stage2dir="$thisdir/../stage2" -else - grub_shell=${sbindir}/grub - stage1dir="$pkglibdir" - stage2dir="$pkglibdir" -fi - -# Exit on any error. -set -e - -# Get GRUB's version from the Grub shell, since we use the -# installed files. -VERSION=`$grub_shell --version | sed -e 's/^.* \([0-9.]*\).*$/\1/'` -test "X$VERSION" != X - -bootdir=${PACKAGE}-${VERSION}-${context} -image=$bootdir.ext2fs - -# Create the tarball. -if test ! -f $bootdir.tar.gz; then - echo "# Creating \`$bootdir.tar.gz'" - mkdir -p $bootdir/boot/grub - cp -p $stage1dir/stage1 $stage2dir/*_stage1_5 $stage2dir/stage2 \ - $bootdir/boot/grub - test ! -f menu.lst || cp -p menu.lst $bootdir/boot/grub - trap "rm -f $bootdir.tar.gz" 0 - GZIP=-9 tar -zcf $bootdir.tar.gz $bootdir - trap '' 0 - rm -rf $bootdir -fi - -# Create a new filesystem image of the specified size. -if test ! -f $image; then - tarsize=`zcat $bootdir.tar.gz | wc -c` - - # Add about 30% (20% overhead plus 10% breathing room), and convert - # to kilobytes. This factor was determined empirically. - SIZE=`expr $tarsize \* 130 / 100 / 1024`k - echo "# Creating $SIZE disk image \`$image'" - trap "rm -f $image" 0 - dd if=/dev/zero of=$image bs=$SIZE count=1 >/dev/null - $mke2fs -F $image - trap '' 0 -fi - - -# Attempt to mount the image. -echo "# Mounting \`$image'" -test -d $bootdir || mkdir $bootdir -case "$host_os" in -gnu*) - settrans -a $bootdir /hurd/ext2fs $image - umount="settrans -a $bootdir" - ;; - -linux*) - # This requires running as root, and using the loop device. - i=0 - while test -e /dev/loop$i; do - if /sbin/losetup /dev/loop$i $image; then - break - fi - i=`expr $i + 1` - done - - # Silly losetup doesn't report an error! - mount /dev/loop$i $bootdir - umount="umount $bootdir && /sbin/losetup -d /dev/loop$i && trap '' 0" - ;; - -*) - echo "$progname: Mounting \`$image' under \`$host_os' is not supported" 1>&2 - exit 1 - ;; -esac -trap "$umount" 0 - -# Extract our tarball into the image, then unmount it. -echo "# Copying files into \`$image':" -tar -zxvf $bootdir.tar.gz - -echo "# \`$image' usage:" -df $bootdir -eval $umount -rmdir $bootdir || : - -# Use the GRUB shell to properly set up GRUB on the image. -echo "# Installing GRUB in \`$image'" -cat <. -EOF -} - -# Usage: convert os_device -# Convert an OS device to the corresponding GRUB drive. -# This part is OS-specific. -convert () { - # First, check if the device file exists. - if test -e "$1"; then - : - else - echo "$1: Not found or not a block device." 1>&2 - exit 1 - fi - - # Break the device name into the disk part and the partition part. - case "$host_os" in - linux*) - tmp_disk=`echo "$1" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \ - -e 's%\(d[0-9]*\)p[0-9]*$%\1%' \ - -e 's%\(fd[0-9]*\)$%\1%' \ - -e 's%/part[0-9]*$%/disc%' \ - -e 's%\(c[0-7]d[0-9]*\).*$%\1%'` - tmp_part=`echo "$1" | sed -e 's%.*/[sh]d[a-z]\([0-9]*\)$%\1%' \ - -e 's%.*d[0-9]*p%%' \ - -e 's%.*/fd[0-9]*$%%' \ - -e 's%.*/floppy/[0-9]*$%%' \ - -e 's%.*/\(disc\|part\([0-9]*\)\)$%\2%' \ - -e 's%.*c[0-7]d[0-9]*p%%'` - ;; - gnu*) - tmp_disk=`echo "$1" | sed 's%\([sh]d[0-9]*\).*%\1%'` - tmp_part=`echo "$1" | sed "s%$tmp_disk%%"` ;; - freebsd* | kfreebsd*-gnu) - tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([saw]d[0-9]*\).*$%\1%' \ - | sed 's%r\{0,1\}\(da[0-9]*\).*$%\1%'` - tmp_part=`echo "$1" \ - | sed "s%.*/r\{0,1\}[saw]d[0-9]\(s[0-9]*[a-h]\)%\1%" \ - | sed "s%.*/r\{0,1\}da[0-9]\(s[0-9]*[a-h]\)%\1%"` - ;; - netbsd* | knetbsd*-gnu) - tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([sw]d[0-9]*\).*$%r\1d%' \ - | sed 's%r\{0,1\}\(fd[0-9]*\).*$%r\1a%'` - tmp_part=`echo "$1" \ - | sed "s%.*/r\{0,1\}[sw]d[0-9]\([abe-p]\)%\1%"` - ;; - *) - echo "grub-install does not support your OS yet." 1>&2 - exit 1 ;; - esac - - # Get the drive name. - tmp_drive=`grep -v '^#' $device_map | grep "$tmp_disk *$" \ - | sed 's%.*\(([hf]d[0-9][a-g0-9,]*)\).*%\1%'` - - # If not found, print an error message and exit. - if test "x$tmp_drive" = x; then - echo "$1 does not have any corresponding BIOS drive." 1>&2 - exit 1 - fi - - if test "x$tmp_part" != x; then - # If a partition is specified, we need to translate it into the - # GRUB's syntax. - case "$host_os" in - linux*) - echo "$tmp_drive" | sed "s%)$%,`expr $tmp_part - 1`)%" ;; - gnu*) - if echo $tmp_part | grep "^s" >/dev/null; then - tmp_pc_slice=`echo $tmp_part \ - | sed "s%s\([0-9]*\)[a-g]*$%\1%"` - tmp_drive=`echo "$tmp_drive" \ - | sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"` - fi - if echo $tmp_part | grep "[a-g]$" >/dev/null; then - tmp_bsd_partition=`echo "$tmp_part" \ - | sed "s%[^a-g]*\([a-g]\)$%\1%"` - tmp_drive=`echo "$tmp_drive" \ - | sed "s%)%,$tmp_bsd_partition)%"` - fi - echo "$tmp_drive" ;; - freebsd* | kfreebsd*-gnu) - if echo $tmp_part | grep "^s" >/dev/null; then - tmp_pc_slice=`echo $tmp_part \ - | sed "s%s\([0-9]*\)[a-h]*$%\1%"` - tmp_drive=`echo "$tmp_drive" \ - | sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"` - fi - if echo $tmp_part | grep "[a-h]$" >/dev/null; then - tmp_bsd_partition=`echo "$tmp_part" \ - | sed "s%s\{0,1\}[0-9]*\([a-h]\)$%\1%"` - tmp_drive=`echo "$tmp_drive" \ - | sed "s%)%,$tmp_bsd_partition)%"` - fi - echo "$tmp_drive" ;; - netbsd* | knetbsd*-gnu) - if echo $tmp_part | grep "^[abe-p]$" >/dev/null; then - tmp_bsd_partition=`echo "$tmp_part" \ - | sed "s%\([a-p]\)$%\1%"` - tmp_drive=`echo "$tmp_drive" \ - | sed "s%)%,$tmp_bsd_partition)%"` - fi - echo "$tmp_drive" ;; - esac - else - # If no partition is specified, just print the drive name. - echo "$tmp_drive" - fi -} - -# Usage: resolve_symlink file -# Find the real file/device that file points at -resolve_symlink () { - tmp_fname=$1 - # Resolve symlinks - while test -L $tmp_fname; do - tmp_new_fname=`ls -al $tmp_fname | sed -n 's%.*-> \(.*\)%\1%p'` - if test -z "$tmp_new_fname"; then - echo "Unrecognized ls output" 2>&1 - exit 1 - fi - - # Convert relative symlinks - case $tmp_new_fname in - /*) tmp_fname="$tmp_new_fname" - ;; - *) tmp_fname="`echo $tmp_fname | sed 's%/[^/]*$%%'`/$tmp_new_fname" - ;; - esac - done - echo "$tmp_fname" -} - -# Usage: find_device file -# Find block device on which the file resides. -find_device () { - # For now, this uses the program `df' to get the device name, but is - # this really portable? - tmp_fname=`df $1/ | sed -n 's%.*\(/dev/[^ ]*\).*%\1%p'` - - if test -z "$tmp_fname"; then - echo "Could not find device for $1" 2>&1 - exit 1 - fi - - tmp_fname=`resolve_symlink $tmp_fname` - - echo "$tmp_fname" -} - -# Check the arguments. -for option in "$@"; do - case "$option" in - -h | --help) - usage - exit 0 ;; - -v | --version) - echo "grub-install (GNU GRUB ${VERSION})" - exit 0 ;; - --root-directory=*) - rootdir=`echo "$option" | sed 's/--root-directory=//'` ;; - --grub-shell=*) - grub_shell=`echo "$option" | sed 's/--grub-shell=//'` ;; - --no-floppy) - no_floppy="--no-floppy" ;; - --force-lba) - force_lba="--force-lba" ;; - --recheck) - recheck=yes ;; - # This is an undocumented feature... - --debug) - debug=yes ;; - -*) - echo "Unrecognized option \`$option'" 1>&2 - usage - exit 1 - ;; - *) - if test "x$install_device" != x; then - echo "More than one install_devices?" 1>&2 - usage - exit 1 - fi - install_device="${option}" ;; - esac -done - -if test "x$install_device" = x; then - echo "install_device not specified." 1>&2 - usage - exit 1 -fi - -# If the debugging feature is enabled, print commands. -if test $debug = yes; then - set -x -fi - -# Initialize these directories here, since ROOTDIR was initialized. -case "$host_os" in -netbsd* | openbsd*) - # Because /boot is used for the boot block in NetBSD and OpenBSD, use /grub - # instead of /boot/grub. - grub_prefix=/grub - bootdir=${rootdir} - ;; -*) - # Use /boot/grub by default. - bootdir=${rootdir}/boot - ;; -esac - -grubdir=${bootdir}/grub -device_map=${grubdir}/device.map - -# Check if GRUB is installed. -# This is necessary, because the user can specify "grub --read-only". -set $grub_shell dummy -if test -f "$1"; then - : -else - echo "$1: Not found." 1>&2 - exit 1 -fi - -if test -f "$pkglibdir/stage1"; then - : -else - echo "${pkglibdir}/stage1: Not found." 1>&2 - exit 1 -fi - -if test -f "$pkglibdir/stage2"; then - : -else - echo "${pkglibdir}/stage2: Not found." 1>&2 - exit 1 -fi - -# Don't check for *stage1_5, because it is not fatal even if any -# Stage 1.5 does not exist. - -# Create the GRUB directory if it is not present. -test -d "$bootdir" || mkdir "$bootdir" || exit 1 -test -d "$grubdir" || mkdir "$grubdir" || exit 1 - -# If --recheck is specified, remove the device map, if present. -if test $recheck = yes; then - rm -f $device_map -fi - -# Create the device map file if it is not present. -if test -f "$device_map"; then - : -else - # Create a safe temporary file. - test -n "$mklog" && log_file=`$mklog` - - $grub_shell --batch $no_floppy --device-map=$device_map <$log_file -quit -EOF - if grep "Error [0-9]*: " $log_file >/dev/null; then - cat $log_file 1>&2 - exit 1 - fi - - rm -f $log_file -fi - -# Make sure that there is no duplicated entry. -tmp=`sed -n '/^([fh]d[0-9]*)/s/\(^(.*)\).*/\1/p' $device_map \ - | sort | uniq -d | sed -n 1p` -if test -n "$tmp"; then - echo "The drive $tmp is defined multiple times in the device map $device_map" 1>&2 - exit 1 -fi - -# Check for INSTALL_DEVICE. -case "$install_device" in -/dev/*) - install_device=`resolve_symlink "$install_device"` - install_drive=`convert "$install_device"` - # I don't know why, but some shells wouldn't die if exit is - # called in a function. - if test "x$install_drive" = x; then - exit 1 - fi ;; -\([hf]d[0-9]*\)) - install_drive="$install_device" ;; -[hf]d[0-9]*) - # The GRUB format with no parenthesis. - install_drive="($install_device)" ;; -*) - echo "Format of install_device not recognized." 1>&2 - usage - exit 1 ;; -esac - -# Get the root drive. -root_device=`find_device ${rootdir}` -bootdir_device=`find_device ${bootdir}` - -# Check if the boot directory is in the same device as the root directory. -if test "x$root_device" != "x$bootdir_device"; then - # Perhaps the user has a separate boot partition. - root_device=$bootdir_device - grub_prefix="/grub" -fi - -# Convert the root device to a GRUB drive. -root_drive=`convert "$root_device"` -if test "x$root_drive" = x; then - exit 1 -fi - -# Check if the root directory exists in the same device as the grub -# directory. -grubdir_device=`find_device ${grubdir}` - -if test "x$grubdir_device" != "x$root_device"; then - # For now, cannot deal with this situation. - cat <&2 -You must set the root directory by the option --root-directory, because -$grubdir does not exist in the root device $root_device. -EOF - exit 1 -fi - -# Copy the GRUB images to the GRUB directory. -for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do - rm -f $file || exit 1 -done -for file in \ - ${pkglibdir}/stage1 ${pkglibdir}/stage2 ${pkglibdir}/*stage1_5; do - cp -f $file ${grubdir} || exit 1 -done - -# Make a default file. -${grub_set_default} --root-directory=${rootdir} default - -# Make sure that GRUB reads the same images as the host OS. -test -n "$mkimg" && img_file=`$mkimg` -test -n "$mklog" && log_file=`$mklog` - -for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do - count=5 - tmp=`echo $file | sed "s|^${grubdir}|${grub_prefix}|"` - while test $count -gt 0; do - $grub_shell --batch $no_floppy --device-map=$device_map <$log_file -dump ${root_drive}${tmp} ${img_file} -quit -EOF - if grep "Error [0-9]*: " $log_file >/dev/null; then - : - elif cmp $file $img_file >/dev/null; then - break - fi - sleep 1 - count=`expr $count - 1` - done - if test $count -eq 0; then - echo "The file $file not read correctly." 1>&2 - exit 1 - fi -done - -rm -f $img_file -rm -f $log_file - -# Create a safe temporary file. -test -n "$mklog" && log_file=`$mklog` - -# Now perform the installation. -$grub_shell --batch $no_floppy --device-map=$device_map <$log_file -root $root_drive -setup $force_lba --stage2=$grubdir/stage2 --prefix=$grub_prefix $install_drive -quit -EOF - -if grep "Error [0-9]*: " $log_file >/dev/null || test $debug = yes; then - cat $log_file 1>&2 - exit 1 -fi - -rm -f $log_file - -# Prompt the user to check if the device map is correct. -echo "Installation finished. No error reported." -echo "This is the contents of the device map $device_map." -echo "Check if this is correct or not. If any of the lines is incorrect," -echo "fix it and re-run the script \`grub-install'." -echo - -cat $device_map - -# Bye. -exit 0 diff --git a/util/grub-md5-crypt.in b/util/grub-md5-crypt.in deleted file mode 100644 index c030c8793..000000000 --- a/util/grub-md5-crypt.in +++ /dev/null @@ -1,99 +0,0 @@ -#! /bin/sh - -# Encrypt a password in MD5 format -# Copyright (C) 2000,2002 Free Software Foundation, Inc. -# -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -# Replaced by the configure script. -prefix=@prefix@ -exec_prefix=@exec_prefix@ -sbindir=@sbindir@ - -# Initialize some variables. -grub_shell=${sbindir}/grub -progname="grub-md5-crypt" - -# Check the arguments. -for option in "$@"; do - case "$option" in - -h | --help) - cat <. -EOF - exit 0 - ;; - - -v | --version) - echo "$progname (GNU GRUB ${VERSION})" - exit 0 - ;; - - --grub-shell=*) - grub_shell=`echo "$option" | sed 's/--grub-shell=//'` - ;; - - *) - echo "$progname: unrecognized option \`$option'" - echo "Usage: $progname [OPTION]" - echo "Try \`$progname --help' for more information." - exit 1 - ;; - esac -done - -# Suppress echo backs. I don't know if this is really portable. -okuji -stty -echo - -# Prompt to enter a password. -echo -n "Password: " -read -r password -echo - -# One more time. -echo -n "Retype password: " -read -r password2 -echo - -# Resume echo backs. -stty echo - -if test "x$password" = x; then - echo "Empty password is not permitted." - exit 1 -fi - -if test "x$password" != "x$password2"; then - echo "Sorry, passwords do not match." - exit 1 -fi - -# Run the grub shell. -$grub_shell --batch --device-map=/dev/null <. -EOF -} - -# Check the arguments. -for option in "$@"; do - case "$option" in - -h | --help) - usage - exit 0 ;; - -v | --version) - echo "grub-set-default (GNU GRUB ${VERSION})" - exit 0 ;; - --root-directory=*) - rootdir=`echo "$option" | sed 's/--root-directory=//'` ;; - -*) - echo "Unrecognized option \`$option'" 1>&2 - usage - exit 1 - ;; - *) - if test "x$entry" != x; then - echo "More than one entries?" 1>&2 - usage - exit 1 - fi - # We don't care about what the user specified actually. - entry="${option}" ;; - esac -done - -if test "x$entry" = x; then - echo "entry not specified." 1>&2 - usage - exit 1 -fi - -# Determine the GRUB directory. This is different among OSes. -grubdir=${rootdir}/boot/grub -if test -d ${grubdir}; then - : -else - grubdir=${rootdir}/grub - if test -d ${grubdir}; then - : - else - echo "No GRUB directory found under ${rootdir}/" 1>&2 - exit 1 - fi -fi - -file=${grubdir}/default -if test -f ${file}; then - chmod 0600 ${file} - rm -f ${file} -fi -cat < $file -$entry -# -# -# -# -# -# -# -# -# -# -# WARNING: If you want to edit this file directly, do not remove any line -# from this file, including this warning. Using \`grub-set-default\' is -# strongly recommended. -EOF - -# Bye. -exit 0 diff --git a/util/grub-terminfo.in b/util/grub-terminfo.in deleted file mode 100644 index e41b41836..000000000 --- a/util/grub-terminfo.in +++ /dev/null @@ -1,95 +0,0 @@ -#! /bin/sh -# Generate a terminfo command from a terminfo name. -# -# Copyright (C) 2002 Free Software Foundation, Inc. -# -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -VERSION=@VERSION@ - -usage () { - cat <. -EOF -} - -error () { - echo "grub-terminfo: error: $1" 1>&2 -} - -termname= - -for option in "$@"; do - case "$option" in - -h | --help) - usage - exit 0 ;; - -v | --version) - echo "grub-terminfo (GNU GRUB ${VERSION})" - exit 0 ;; - -*) - error "Unrecognized option \`$option'" - usage - exit 1 ;; - *) - if test "x$termname" != x; then - error "More than one terminfo names?" - usage - exit 1 - fi - termname="$option" ;; - esac -done - -if test "x$termname" = x; then - error "termname not specified" - usage - exit 1 -fi - -get_seq () { - infocmp -L -1 -g $termname | sed -n -e "/$1/s/^[^=]*=\\(.*\\),\$/\\1/p" -} - -cursor_address="`get_seq cursor_address`" -if test "x$cursor_address" = x; then - error "cursor_address not found" - exit 1 -fi -cursor_address="--cursor-address=$cursor_address" - -clear_screen="`get_seq clear_screen`" -if test "x$clear_screen" != x; then - clear_screen="--clear-screen=$clear_screen" -fi - -enter_standout_mode="`get_seq enter_standout_mode`" -if test "x$enter_standout_mode" != x; then - enter_standout_mode="--enter-standout-mode=$enter_standout_mode" -fi - -exit_standout_mode="`get_seq exit_standout_mode`" -if test "x$exit_standout_mode" != x; then - exit_standout_mode="--exit-standout-mode=$exit_standout_mode" -fi - -echo "terminfo --name=$termname" $cursor_address $clear_screen \ - $enter_standout_mode $exit_standout_mode diff --git a/util/mbchk.c b/util/mbchk.c deleted file mode 100644 index fd7185827..000000000 --- a/util/mbchk.c +++ /dev/null @@ -1,244 +0,0 @@ -/* mbchk - a simple checker for the format of a Multiboot kernel */ -/* - * Copyright (C) 1999,2001,2002 Free Software Foundation, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include - -#include -#include -#include -#include - -static int quiet = 0; -static char *optstring = "hvq"; -static struct option longopts[] = -{ - {"help", no_argument, 0, 'h'}, - {"version", no_argument, 0, 'v'}, - {"quiet", no_argument, 0, 'q'}, - {0} -}; - -static void -usage (int status) -{ - if (status) - fprintf (stderr, "Try ``mbchk --help'' for more information.\n"); - else - printf ("Usage: mbchk [OPTION]... [FILE]...\n" - "Check if the format of FILE complies with the Multiboot Specification.\n" - "\n" - "-q, --quiet suppress all normal output\n" - "-h, --help display this help and exit\n" - "-v, --version output version information and exit.\n" - "\n" - "Report bugs to .\n"); - - exit (status); -} - -static int -check_multiboot (const char *filename, FILE *fp) -{ - multiboot_header_t *mbh = 0; - int i; - char buf[8192]; - - if (fread (buf, 1, 8192, fp) < 0) - { - fprintf (stderr, "%s: Read error.\n", filename); - return 0; - } - - for (i = 0; i < 8192 - sizeof (multiboot_header_t); i++) - { - unsigned long magic = *((unsigned long *) (buf + i)); - - if (magic == MULTIBOOT_HEADER_MAGIC) - { - mbh = (multiboot_header_t *) (buf + i); - break; - } - } - - if (! mbh) - { - fprintf (stderr, "%s: No Multiboot header.\n", filename); - return 0; - } - - if (! quiet) - printf ("%s: The Multiboot header is found at the offset %d.\n", - filename, i); - - /* Check for the checksum. */ - if (mbh->magic + mbh->flags + mbh->checksum != 0) - { - fprintf (stderr, - "%s: Bad checksum (0x%lx).\n", - filename, mbh->checksum); - return 0; - } - - /* Reserved flags must be zero. */ - if (mbh->flags & ~0x00010003) - { - fprintf (stderr, - "%s: Non-zero is found in reserved flags (0x%lx).\n", - filename, mbh->flags); - return 0; - } - - if (! quiet) - { - printf ("%s: Page alignment is turned %s.\n", - filename, (mbh->flags & 0x1)? "on" : "off"); - printf ("%s: Memory information is turned %s.\n", - filename, (mbh->flags & 0x2)? "on" : "off"); - printf ("%s: Address fields is turned %s.\n", - filename, (mbh->flags & 0x10000)? "on" : "off"); - } - - /* Check for the address fields. */ - if (mbh->flags & 0x10000) - { - if (mbh->header_addr < mbh->load_addr) - { - fprintf (stderr, - "%s: header_addr is less than " - "load_addr (0x%lx > 0x%lx).\n", - filename, mbh->header_addr, mbh->load_addr); - return 0; - } - - if (mbh->load_end_addr && mbh->load_addr >= mbh->load_end_addr) - { - fprintf (stderr, - "%s: load_addr is not less than load_end_addr" - " (0x%lx >= 0x%lx).\n", - filename, mbh->load_addr, mbh->load_end_addr); - return 0; - } - - if (mbh->bss_end_addr && mbh->load_end_addr > mbh->bss_end_addr) - { - fprintf (stderr, - "%s: load_end_addr is greater than bss_end_addr" - " (0x%lx > 0x%lx).\n", - filename, mbh->load_end_addr, mbh->bss_end_addr); - return 0; - } - - if (mbh->load_addr > mbh->entry_addr) - { - fprintf (stderr, - "%s: load_addr is greater than entry_addr" - " (0x%lx > 0x%lx).\n", - filename, mbh->load_addr, mbh->entry_addr); - return 0; - } - - /* FIXME: It is better to check if the entry address is within the - file, especially when the load end address is zero. */ - if (mbh->load_end_addr && mbh->load_end_addr <= mbh->entry_addr) - { - fprintf (stderr, - "%s: load_end_addr is not greater than entry_addr" - " (0x%lx <= 0x%lx).\n", - filename, mbh->load_end_addr, mbh->entry_addr); - return 0; - } - - /* This is a GRUB-specific limitation. */ - if (mbh->load_addr < 0x100000) - { - fprintf (stderr, - "%s: Cannot be loaded at less than 1MB by GRUB" - " (0x%lx).\n", - filename, mbh->load_addr); - return 0; - } - } - - if (! quiet) - printf ("%s: All checks passed.\n", filename); - - return 1; -} - -int -main (int argc, char *argv[]) -{ - int c; - - do - { - c = getopt_long (argc, argv, optstring, longopts, 0); - switch (c) - { - case EOF: - break; - - case 'h': - usage (0); - break; - - case 'v': - printf ("mbchk (GNU GRUB " VERSION ")\n"); - exit (0); - break; - - case 'q': - quiet = 1; - break; - - default: - usage (1); - break; - } - } - while (c != EOF); - - if (optind < argc) - { - while (optind < argc) - { - FILE *fp; - - fp = fopen (argv[optind], "r"); - if (! fp) - { - fprintf (stderr, "%s: No such file.\n", argv[optind]); - exit (1); - } - - if (! check_multiboot (argv[optind], fp)) - exit (1); - - fclose (fp); - optind++; - } - } - else - { - if (! check_multiboot ("", stdin)) - exit (1); - } - - return 0; -} diff --git a/util/mkbimage b/util/mkbimage deleted file mode 100644 index c5ebdf844..000000000 --- a/util/mkbimage +++ /dev/null @@ -1,415 +0,0 @@ -#!/bin/sh -# MaKe a Bootable IMAGE --- 1.44, 2.88 and El Torito no-emulation mode -# C) 2001,2002,2003 Thierry Laronde -# C) 2001,2002,2003 Robert Millan - - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, you can either send email to this -# program's maintainer or write to: The Free Software Foundation, -# Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA. - -# $Id$ - -# Global variables -tarfile= -dir= -fs= #file system type -decompress= -image_type= -uname=`uname -s` -PATH=/sbin:$PATH - -# You can set GRUB_PATH if you need to use a specially located GRUB. -# This MUST end by a '/'! - - -#----------------------------DON'T CHANGE: INTERNALS - -block_size=512 -cylinders= -heads= -sectors= -cyl_size= -type_option= -geo_option= -image= -bk_120=$((2 * 15 * 80)) -bk_144=$((2 * 18 * 80)) -bk_288=$((2 * 36 * 80)) -bk_160=$((2 * 20 * 80)) -bk_168=$((2 * 21 * 80)) -bk_174=$((2 * 21 * 83)) -lo_options= -device_map= -mkfs_options= -debug= -stage2_os_name= - -# Name by which this script was invoked. -program=`echo "$0" | sed -e 's/[^\/]*\///g'` -version_number='$Revision$' - -usage=" -Usage: $program [-hVF] [-t TYPE] [-d DIRECTORY] [-s FS_TYPE] -f TAR_FILE -Make a Bootable IMAGE using GRUB as a bootloader - -Options: - Actions: - -d DIRECTORY [default CWD] - Directory where the boot.image and the partition subdirectories - are/will be created - -f TAR_FILE - Name of the tar file containing the filesystem to install. Can - be a pure tar file [.tar] or a compressed tar file - [.tar.gz|.tar.bz2] - -s FS_TYPE - Type of the file system to create on the virtual disk. Choices - are: - ext2 on GNU [default is ext2] - ext2, minix or msdos on GNU/Linux [default is ext2] - - -t TYPE - Type of the image to create. Choices are '1.20', '1.44', '1.60', - '1.68', '1.74', '2.88' or 'hd' [default is hd] - -F - Force to set the set_dpt flag (unnecessary 99% of the time! Be - careful! - Informations: - -D - turn Debugging on [xtrace] - -h|--help - display this Help and exit - -V|--version - display Version information and exit - -Copyright (c) 2001,2002,2003 Thierry Laronde . -GPLed." - -version="mkbimage $version_number - -Written by Thierry Laronde. - -Copyright (c) 2001,2002,2003 Thierry Laronde . - -This is free software under the GPL version 2 or later; see the source for -copying conditions. There is NO warranty, not even for MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE." - -# Functions - -error () -{ - case $1 in - bug) echo "This is a bug!"; - echo "$usage";; - option) echo "Unknow option"; echo "$usage";; - missing_argument) echo "You must give an argument to the option!"; - echo "$usage";; - missing_option) echo "You must indicate at least one option!"; - echo "$usage";; - must_be_root) echo "You must be root! (or install e2tools/mtools)";; - unknown_fs) if [ $uname = Linux ]; - then echo "The GNU/Linux supported fs are: ext2, minix or msdos!"; - elif [ $uname = GNU ]; - then echo "The GNU supported fs is ext2!"; - fi;; - unknown_format) echo "The tar file must be .tar|.tar.gz|.tar.bz2!";; - wont_fit) echo "The files won't fit on the selected type of media!";; - wrong_directory) echo "Directory inexistant or not given!"; - echo "$usage";; - wrong_file) echo "File inexistant or empty!"; - echo "$usage";; - wrong_type) echo "The type specified is not a valid one!"; - echo "$usage";; - esac - exit 1 -} - -# create a filesystem of type $fs in $image with offset $offset -mkbimage_mkfs () -{ - case $offset in - 0) lo_options="";; - *) lo_options="-o $offset";; - esac - - if [ "$offset" = "0" ] ; then - mkfs.$fs -F $image - elif [ `id -u` = "0" ] ; then - losetup $lo_options /dev/loop1 $image - mkfs.$fs /dev/loop1 - losetup -d /dev/loop1 - else - error must_be_root - fi -} - -# copy ${image}1/* to ${image}:/, assuming ${image} contains a filesystem -# of type $fs in offset $offset -mkbimage_cp () -{ - case $offset in - 0) lo_options="";; - *) lo_options="-o $offset";; - esac - case $fs in - ext2) - cp="e2cp"; - mkdir="e2mkdir";; - vfat) - cp="mcopy"; - mkdir="mmd";; - *) - cp=""; - mkdir="";; - esac - - if [ "$offset" = 0 ] && which $cp > /dev/null ; then - for dir in $(cd ${image}1 && find -type d) ; do - $mkdir ${image}:$dir - done - for file in $(cd ${image}1 && find -type f) ; do - $cp ${image}1/$file ${image}:$file - done - elif [ "`id -u`" = "0" ] ; then - losetup $lo_options /dev/loop1 $image - mkdir ${image}.mnt - mount -t $fs /dev/loop1 ${image}.mnt - cp -a ${image}1/* ${image}.mnt/ && sync - umount ${image}.mnt - rmdir ${image}.mnt - losetup -d /dev/loop1 - else - error must_be_root - fi -} - -#********************************************************************** -# MAIN PROGRAM * -#********************************************************************** - -#---------------------- Getting the options - -[ $# -eq 0 ] && error missing_option; - -while [ $# -gt 0 ]; do - case "$1" in - -d) shift; - dir="$1"; - [ ! -d "$1" ] && error wrong_directory;; - -f) shift; - tarfile="$1"; - [ -z "$tarfile" ] && error missing_argument;; - -s) shift; - fs="$1";; - -t) shift; - image_type="$1";; - -F) geo_option="-F";; - -D) debug="-v"; - set -x;; - -h|--help) echo "$usage"; exit 0;; - -V|--version) echo "$version"; exit 0;; - *) error option ;; - esac -shift -done -#---------------------- Sanity checks -[ ! "$tarfile" ] && error missing_argument; -[ ! -s "$tarfile" ] && error wrong_file; - -if [ ! "$image_type" ]; then - image_type=hd; -elif [ "$image_type" != "1.20" ] && [ "$image_type" != "1.44" ] \ - && [ "$image_type" != "1.60" ] && [ "$image_type" != "1.68" ] \ - && [ "$image_type" != "2.88" ] && [ "$image_type" != "1.74" ] \ - && [ "$image_type" != "hd" ] && [ "$image_type" != "1.60" ] ; then - error wrong_type ; -fi - -[ ! "$fs" ] && fs=ext2 - -# Carlo Contavalli reported that I [TL] have forgotten to specify the -# partition ID for sfdisk to correctly fill the partition table (ext2 is the -# default on Linux, so this worked in this case...). This is fixed below. -case "$fs" in - ext2) mkfs_options="-m 0"; - part_id="83";; # This is the default -# ufs) if [ $uname = Linux ]; -# then error unknown_fs; -# fi;; - minix) if [ $uname = GNU ]; - then error unknown_fs; - else - mkfs_options="-v"; # Minix version 2 - part_id="81"; - fi;; - msdos) if [ $uname = GNU ]; - then error unknown_fs; - else - mkfs_options="-f 1 -F 12"; # the smallest... - part_id="1"; - fi;; - *) error unknown_fs;; -esac - -# What type of tar file has been given ? - -suffix=`echo "$tarfile" | sed -n 's/^.*\.\([targbz2]\{2,3\}\)$/\1/p'` -case "$suffix" in - tar) decompress="cat";; - gz) decompress="gunzip -c";; - bz2) decompress="bunzip2 -c";; - *) error unknown_format;; -esac -#---------------------- Initializations - -[ ! "$dir" ] && dir=`pwd` - -image=$dir/$image_type.image -device_map=$dir/device.map - -# First, find the size of the tar file in block_size. -file_size=`$decompress $tarfile | wc -c | tr -d ' '` -file_size=$(($file_size / $block_size + 1)) - -# Increase in order to be sure that with a fs there will be enough -# room (trying 110%) -file_size=$(($file_size + $file_size / 10)) - -case "$image_type" in - hd) heads=16; - sectors=63; - cyl_size=$((16 * 63)); - # Create the minimum number of cylinders. At the moment, we leave - # some space by rounding everything up by adding 1 cylinder, plus - # another one for MBR + reserved track. - cylinders=$(($file_size / $cyl_size + 2));; - 1.20) [ $file_size -ge $bk_120 ] && error wont_fit; - heads=2; - sectors=15; - cyl_size=$((2 * 15)); - cylinders=80;; - 1.44) [ $file_size -ge $bk_144 ] && error wont_fit; - heads=2; - sectors=18; - cyl_size=$((2 * 18)); - cylinders=80;; - 1.60) [ $file_size -ge $bk_160 ] && error wont_fit; - heads=2; - sectors=20; - cyl_size=$((2 * 20)); - cylinders=80; - geo_option="-F";; - 1.68) [ $file_size -ge $bk_168 ] && error wont_fit; - heads=2; - sectors=21; - cyl_size=$((2 * 21)); - cylinders=80;; - 1.74) [ $file_size -ge $bk_174 ] && error wont_fit; - heads=2; - sectors=21; - cyl_size=$((2 * 21)); - cylinders=83;; - 2.88) [ $file_size -ge $bk_288 ] && error wont_fit; - heads=2; - sectors=36; - cyl_size=$((2 * 36)); - cylinders=80;; - *) error bug;; -esac - -type_option="-t $image_type" - -# We start by creating a virtual disk which size is the number of -# cylinders of $cyl_size mandatory to put the files stocked in the $tarfile -# Create the empty virtual disk -dd if=/dev/zero of=$image bs=$block_size count=$(($cyl_size * $cylinders)) - -# We then format the virtual disk -# NOTE: the El Torito specification wants only one partition. So we -# create the first, and the remaining 3 entries are empty. - -if [ "$image_type" = "hd" ]; then - sfdisk -C $cylinders -H $heads -S $sectors -D $image<$device_map -$device ${image} -EOT - -${GRUB_PATH}grub --device-map=$device_map --batch<.image of=/dev/fd0[u] bs=512 - -will be more than enough... if you have formated the floppy correctly -using \`superformat' to be found in \`fdutils' package. - -For El Torito floppy emulation : - -mkisofs -b -c boot.catalog -o raw.iso - -And for El Torito Hard Disk emulation: - -mkisofs -b -hard-disk-boot -c boot.catalog -o raw.iso - -Enjoy! -EOF - -rm -rf ${image}1 - -exit 0