From 5f5d1604492ae15967f9d86f41fbeeedcae0ae2b Mon Sep 17 00:00:00 2001 From: Ralf Baechle Date: Thu, 8 Jul 1999 06:44:55 +0200 Subject: Import ax25-tools 0.0.3 from tarball --- yamdrv/Makefile.am | 16 + yamdrv/Makefile.in | 323 ++++++ yamdrv/README.yamdrv | 92 ++ yamdrv/mcs2h.c | 106 ++ yamdrv/yam.h | 82 ++ yamdrv/yam08-2.0.36-patch.diff | 2180 ++++++++++++++++++++++++++++++++++++++++ yamdrv/yam08-2.2.1-patch.diff | 2172 +++++++++++++++++++++++++++++++++++++++ yamdrv/yamcfg.c | 351 +++++++ 8 files changed, 5322 insertions(+) create mode 100644 yamdrv/Makefile.am create mode 100644 yamdrv/Makefile.in create mode 100644 yamdrv/README.yamdrv create mode 100644 yamdrv/mcs2h.c create mode 100644 yamdrv/yam.h create mode 100755 yamdrv/yam08-2.0.36-patch.diff create mode 100644 yamdrv/yam08-2.2.1-patch.diff create mode 100644 yamdrv/yamcfg.c (limited to 'yamdrv') diff --git a/yamdrv/Makefile.am b/yamdrv/Makefile.am new file mode 100644 index 0000000..b8f6a21 --- /dev/null +++ b/yamdrv/Makefile.am @@ -0,0 +1,16 @@ + +sbin_PROGRAMS = yamcfg mcs2h + +yamcfg_SOURCES = yamcfg.c yam.h + +mcs2h_SOURCES = mcs2h.c + +docdir=${prefix}/doc/ax25-tools +doc_DATA = README.yamdrv \ + yam08-2.0.36-patch.diff \ + yam08-2.2.1-patch.diff + +EXTRA_DIST = $(doc_DATA) + +installconf: + diff --git a/yamdrv/Makefile.in b/yamdrv/Makefile.in new file mode 100644 index 0000000..84c0512 --- /dev/null +++ b/yamdrv/Makefile.in @@ -0,0 +1,323 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 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. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +AWK = @AWK@ +AX25IO_LIB = @AX25IO_LIB@ +AX25_LIB = @AX25_LIB@ +CC = @CC@ +MAKEINFO = @MAKEINFO@ +NCURSES_LIB = @NCURSES_LIB@ +PACKAGE = @PACKAGE@ +UTIL_LIB = @UTIL_LIB@ +VERSION = @VERSION@ +Z_LIB = @Z_LIB@ + +sbin_PROGRAMS = yamcfg mcs2h + +yamcfg_SOURCES = yamcfg.c yam.h + +mcs2h_SOURCES = mcs2h.c + +docdir = ${prefix}/doc/ax25-tools +doc_DATA = README.yamdrv yam08-2.0.36-patch.diff yam08-2.2.1-patch.diff + + +EXTRA_DIST = $(doc_DATA) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(sbin_PROGRAMS) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I.. +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +X_CFLAGS = @X_CFLAGS@ +X_LIBS = @X_LIBS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +yamcfg_OBJECTS = yamcfg.o +yamcfg_LDADD = $(LDADD) +yamcfg_DEPENDENCIES = +yamcfg_LDFLAGS = +mcs2h_OBJECTS = mcs2h.o +mcs2h_LDADD = $(LDADD) +mcs2h_DEPENDENCIES = +mcs2h_LDFLAGS = +CFLAGS = @CFLAGS@ +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ +DATA = $(doc_DATA) + +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +SOURCES = $(yamcfg_SOURCES) $(mcs2h_SOURCES) +OBJECTS = $(yamcfg_OBJECTS) $(mcs2h_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps yamdrv/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-sbinPROGRAMS: + +clean-sbinPROGRAMS: + -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) + +distclean-sbinPROGRAMS: + +maintainer-clean-sbinPROGRAMS: + +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(sbindir) + @list='$(sbin_PROGRAMS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ + $(INSTALL_PROGRAM) $$p $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ + else :; fi; \ + done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + list='$(sbin_PROGRAMS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(sbindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ + done + +.c.o: + $(COMPILE) -c $< + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +yamcfg: $(yamcfg_OBJECTS) $(yamcfg_DEPENDENCIES) + @rm -f yamcfg + $(LINK) $(yamcfg_LDFLAGS) $(yamcfg_OBJECTS) $(yamcfg_LDADD) $(LIBS) + +mcs2h: $(mcs2h_OBJECTS) $(mcs2h_DEPENDENCIES) + @rm -f mcs2h + $(LINK) $(mcs2h_LDFLAGS) $(mcs2h_OBJECTS) $(mcs2h_LDADD) $(LIBS) + +install-docDATA: $(doc_DATA) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(docdir) + @list='$(doc_DATA)'; for p in $$list; do \ + if test -f $(srcdir)/$$p; then \ + echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(docdir)/$$p"; \ + $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(docdir)/$$p; \ + else if test -f $$p; then \ + echo " $(INSTALL_DATA) $$p $(DESTDIR)$(docdir)/$$p"; \ + $(INSTALL_DATA) $$p $(DESTDIR)$(docdir)/$$p; \ + fi; fi; \ + done + +uninstall-docDATA: + @$(NORMAL_UNINSTALL) + list='$(doc_DATA)'; for p in $$list; do \ + rm -f $(DESTDIR)$(docdir)/$$p; \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = yamdrv + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: install-sbinPROGRAMS +install-exec: install-exec-am + +install-data-am: install-docDATA +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: uninstall-sbinPROGRAMS uninstall-docDATA +uninstall: uninstall-am +all-am: Makefile $(PROGRAMS) $(DATA) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(sbindir) $(DESTDIR)$(docdir) + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-sbinPROGRAMS mostlyclean-compile \ + mostlyclean-tags mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-sbinPROGRAMS clean-compile clean-tags clean-generic \ + mostlyclean-am + +clean: clean-am + +distclean-am: distclean-sbinPROGRAMS distclean-compile distclean-tags \ + distclean-generic clean-am + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-sbinPROGRAMS \ + maintainer-clean-compile maintainer-clean-tags \ + maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: mostlyclean-sbinPROGRAMS distclean-sbinPROGRAMS \ +clean-sbinPROGRAMS maintainer-clean-sbinPROGRAMS uninstall-sbinPROGRAMS \ +install-sbinPROGRAMS mostlyclean-compile distclean-compile \ +clean-compile maintainer-clean-compile uninstall-docDATA \ +install-docDATA tags mostlyclean-tags distclean-tags clean-tags \ +maintainer-clean-tags distdir info-am info dvi-am dvi check check-am \ +installcheck-am installcheck install-exec-am install-exec \ +install-data-am install-data install-am install uninstall-am uninstall \ +all-redirect all-am all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +installconf: + +# 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/yamdrv/README.yamdrv b/yamdrv/README.yamdrv new file mode 100644 index 0000000..f76ac10 --- /dev/null +++ b/yamdrv/README.yamdrv @@ -0,0 +1,92 @@ +1998/07/29 Version 0.5 +---------- + +Driver now supports up to 4 yam modems. +yam0 default to COM1 0x3f8 irq4 +yam1 default to COM2 0x2f8 irq3 +yam2 default to COM3 0x3e8 irq4 +yam3 default to COM4 0x3e8 irq3 + +1998/09/01 Version 0.6 +---------- + +Added : bitrate/baudrate configuration. +Added : mcs file may be loaded from yamcfg. + One mcs file is affected to each bitrate. + + mcs data for 1200 and 9600 bds are preloaded in the driver + but may be changed by yamcfg. + +options of yamcfg : + + [iobase ] + [irq ] + [bitrate ] + [baudrate ] + [duplex ] + [hold ] + [txdelay ] + [txtail ] + [slottime ] + [persist ] + [load ] + +/proc/net/yam gives the current configuration + + +1998/09/12 Version 0.7 +---------- + +A patch to the kernel tree 2.0.36 has been created. +To patch the kernel, do the following : + +cd /usr/src +cat PATH_OF_THE_FILE/yam08-2.2.1-patch.diff | patch -p0 + +cd linux +run "make menuconfig" (or other) to configure the yam options. + +------------ + +The program yamcfg get or set the parameters of the yam driver +yamcfg -h gives a minimum help + +Example setup of yam0 for 1 serial port (com2) : + + file /etc/ax25/axports : + port0 F1OAT-9 9600 256 2 VHF (9600 bit/s) + + commands : + setserial /dev/cua0 port 0 # to avoid conflict with yam driver + insmod yam + yamcfg yam0 io 0x2f8 irq 3 + ifconfig yam0 hw ax25 f1oat-9 up + + + +Example setup of yam0,3 for 4 serial port (com1->com4) : + + file /etc/ax25/axports : + port0 F1OAT-9 9600 256 2 VHF (9600 bit/s) + port1 F1OAT-8 9600 256 2 UHF1 (9600 bit/s) + port2 F1OAT-7 9600 256 2 UHF2 (9600 bit/s) + port3 F1OAT-8 9600 256 2 UHF3 (9600 bit/s) + + commands : + setserial /dev/cua0 port 0 # to avoid conflict with yam driver + setserial /dev/cua1 port 0 # to avoid conflict with yam driver + setserial /dev/cua2 port 0 # to avoid conflict with yam driver + setserial /dev/cua3 port 0 # to avoid conflict with yam driver + insmod yam + yamcfg yam2 irq 5 + yamcfg yam3 irq 7 + ifconfig yam0 hw ax25 f1oat-9 up + ifconfig yam1 hw ax25 f1oat-8 up + ifconfig yam2 hw ax25 f1oat-7 up + ifconfig yam3 hw ax25 f1oat-6 up + + + +Good test !!! + +73's Frederic F1OAT and Jean-Paul F6FBB diff --git a/yamdrv/mcs2h.c b/yamdrv/mcs2h.c new file mode 100644 index 0000000..6914965 --- /dev/null +++ b/yamdrv/mcs2h.c @@ -0,0 +1,106 @@ +#include +#include +#include + +int in2hex(char *ptr) +{ + char str[3]; + int val; + + memcpy(str, ptr, 2); + str[2] = '\0'; + + sscanf(str, "%x", &val); + + return val; +} + +unsigned char swap(unsigned char c) +{ + unsigned char r = 0; + int i; + + for (i = 0 ; i < 8 ; i++) + { + r <<= 1; + if (c & 1) + r |= 1; + c >>= 1; + } + return r; +} + +int in4hex(char *ptr) +{ + char str[5]; + int val; + + memcpy(str, ptr, 4); + str[4] = '\0'; + + sscanf(str, "%x", &val); + + return val; +} + +int main(int ac, char *av[]) +{ + int nb, add, type, i; + int first = 1; + time_t temps; + FILE *fptr; + char buf[256]; + + if (ac != 3) + { + fprintf(stderr, "format : mcs2h 1200|9600 filename\n"); + return 1; + } + + fptr = fopen(av[2], "r"); + if (fptr == NULL) + { + fprintf(stderr, "file %s not found\n", av[2]); + return 1; + } + + time(&temps); + + printf( "/*\n" + " *\n" + " * File %s converted to h format by mcs2h\n" + " *\n" + " * (C) F6FBB 1998\n" + " *\n" + " * %s" + " *\n" + " */\n\n", + av[2], ctime(&temps)); + + printf("static unsigned char bits_%s[]= {\n", av[1]); + + while (fgets(buf, sizeof(buf), fptr)) + { + nb = in2hex(buf+1); + add = in4hex(buf+3); + type = in2hex(buf+7); + + if (type != 0) + continue; + + if (first) + first = 0; + else + printf(",\n"); + + for (i = 0 ; i < nb ; i++) + { + printf("0x%02x%s", swap(in2hex(buf+9+i*2)), (i < (nb-1)) ? "," : ""); + } + } + + printf(" };\n"); + + fclose(fptr); + return 0; +} diff --git a/yamdrv/yam.h b/yamdrv/yam.h new file mode 100644 index 0000000..7fe2822 --- /dev/null +++ b/yamdrv/yam.h @@ -0,0 +1,82 @@ +/*****************************************************************************/ + +/* + * yam.h -- YAM radio modem driver. + * + * Copyright (C) 1998 Frederic Rible F1OAT (frible@teaser.fr) + * Adapted from baycom.c driver written by Thomas Sailer (sailer@ife.ee.ethz.ch) + * + * 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. + * + * Please note that the GPL allows you to use the driver, NOT the radio. + * In order to use the radio, you need a license from the communications + * authority of your country. + * + * + */ + +/*****************************************************************************/ + +#define SIOCYAMRESERVED (0) +#define SIOCYAMSCFG (1) /* Set configuration */ +#define SIOCYAMGCFG (2) /* Get configuration */ +#define SIOCYAMSMCS (3) /* Set mcs data */ + +#define YAM_IOBASE (1 << 0) +#define YAM_IRQ (1 << 1) +#define YAM_BITRATE (1 << 2) /* Bit rate of radio port ->57600 */ +#define YAM_MODE (1 << 3) /* 0=simplex 1=duplex 2=duplex+tempo */ +#define YAM_HOLDDLY (1 << 4) /* duplex tempo (sec) */ +#define YAM_TXDELAY (1 << 5) /* Tx Delay (ms) */ +#define YAM_TXTAIL (1 << 6) /* Tx Tail (ms) */ +#define YAM_PERSIST (1 << 7) /* Persist (ms) */ +#define YAM_SLOTTIME (1 << 8) /* Slottime (ms) */ +#define YAM_BAUDRATE (1 << 9) /* Baud rate of rs232 port ->115200 */ + +#define YAM_MAXBITRATE 57600 +#define YAM_MAXBAUDRATE 115200 +#define YAM_MAXMODE 2 +#define YAM_MAXHOLDDLY 99 +#define YAM_MAXTXDELAY 999 +#define YAM_MAXTXTAIL 999 +#define YAM_MAXPERSIST 255 +#define YAM_MAXSLOTTIME 999 + +#define YAM_FPGA_SIZE 5302 + +struct yamcfg { + unsigned int mask; /* Mask of commands */ + unsigned int iobase; /* IO Base of COM port */ + unsigned int irq; /* IRQ of COM port */ + unsigned int bitrate; /* Bit rate of radio port */ + unsigned int baudrate; /* Baud rate of the RS232 port */ + unsigned int txdelay; /* TxDelay */ + unsigned int txtail; /* TxTail */ + unsigned int persist; /* Persistence */ + unsigned int slottime; /* Slottime */ + unsigned int mode; /* mode 0 (simp), 1(Dupl), 2(Dupl+delay) */ + unsigned int holddly; /* PTT delay in FullDuplex 2 mode */ +}; + +struct yamdrv_ioctl_cfg { + int cmd; + struct yamcfg cfg; +}; + +struct yamdrv_ioctl_mcs { + int cmd; + int bitrate; + unsigned char bits[YAM_FPGA_SIZE]; +}; diff --git a/yamdrv/yam08-2.0.36-patch.diff b/yamdrv/yam08-2.0.36-patch.diff new file mode 100755 index 0000000..07e0712 --- /dev/null +++ b/yamdrv/yam08-2.0.36-patch.diff @@ -0,0 +1,2180 @@ +diff -u --recursive --new-file linux.prev/Documentation/Configure.help linux/Documentation/Configure.help +--- linux.prev/Documentation/Configure.help Sat Sep 12 23:12:05 1998 ++++ linux/Documentation/Configure.help Sat Sep 12 23:07:13 1998 +@@ -2284,6 +2284,13 @@ + running kernel whenever you want), say M here and read + Documentation/modules.txt. + ++YAM driver for AX.25 ++CONFIG_YAM ++ Support for the YAM modem on serial port. If you want to compile this ++ as a module ( = code which can be inserted in and removed from the ++ running kernel whenever you want), say M here and read ++ Documentation/modules.txt. ++ + BAYCOM ser12 and par96 driver for AX.25 + CONFIG_BAYCOM + This is an experimental driver for Baycom style simple amateur radio +diff -u --recursive --new-file linux.prev/drivers/net/Config.in linux/drivers/net/Config.in +--- linux.prev/drivers/net/Config.in Sat Sep 12 23:11:49 1998 ++++ linux/drivers/net/Config.in Sat Sep 12 22:02:40 1998 +@@ -46,6 +46,7 @@ + tristate 'Z8530 SCC KISS emulation driver for AX.25' CONFIG_SCC + tristate 'STRIP (Metricom starmode radio IP)' CONFIG_STRIP + tristate 'AT&T WaveLAN & DEC RoamAbout DS support' CONFIG_WAVELAN ++ tristate 'YAM driver for AX.25' CONFIG_YAM + fi + # + # Ethernet +diff -u --recursive --new-file linux.prev/drivers/net/Makefile linux/drivers/net/Makefile +--- linux.prev/drivers/net/Makefile Sat Sep 12 23:11:49 1998 ++++ linux/drivers/net/Makefile Sat Sep 12 22:01:01 1998 +@@ -515,6 +515,14 @@ + endif + endif + ++ifeq ($(CONFIG_YAM),y) ++L_OBJS += yam.o ++else ++ ifeq ($(CONFIG_YAM),m) ++ M_OBJS += yam.o ++ endif ++endif ++ + ifeq ($(CONFIG_PI),y) + L_OBJS += pi2.o + else +diff -u --recursive --new-file linux.prev/drivers/net/Space.c linux/drivers/net/Space.c +--- linux.prev/drivers/net/Space.c Sat Sep 12 23:11:49 1998 ++++ linux/drivers/net/Space.c Sat Sep 12 22:01:42 1998 +@@ -352,6 +352,16 @@ + #define NEXT_DEV (&mkiss_bootstrap) + #endif /* MKISS */ + ++#if defined(CONFIG_YAM) ++ /* To be exact, this node just hooks the initialization ++ routines to the device structures. */ ++extern int yam_init(struct device *); ++static struct device yam_bootstrap = { ++ "yam", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, yam_init, }; ++#undef NEXT_DEV ++#define NEXT_DEV (&yam_bootstrap) ++#endif /* CONFIG_YAM */ ++ + #if defined(CONFIG_STRIP) + extern int strip_init_ctrl_dev(struct device *); + static struct device strip_bootstrap = { +diff -u --recursive --new-file linux.prev/include/linux/yam.h linux/include/linux/yam.h +--- linux.prev/include/linux/yam.h Thu Jan 1 00:00:00 1970 ++++ linux/include/linux/yam.h Sat Sep 12 22:03:24 1998 +@@ -0,0 +1,82 @@ ++/*****************************************************************************/ ++ ++/* ++ * yam.h -- YAM radio modem driver. ++ * ++ * Copyright (C) 1998 Frederic Rible F1OAT (frible@teaser.fr) ++ * Adapted from baycom.c driver written by Thomas Sailer (sailer@ife.ee.ethz.ch) ++ * ++ * 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. ++ * ++ * Please note that the GPL allows you to use the driver, NOT the radio. ++ * In order to use the radio, you need a license from the communications ++ * authority of your country. ++ * ++ * ++ */ ++ ++/*****************************************************************************/ ++ ++#define SIOCYAMRESERVED (0) ++#define SIOCYAMSCFG (1) /* Set configuration */ ++#define SIOCYAMGCFG (2) /* Get configuration */ ++#define SIOCYAMSMCS (3) /* Set mcs data */ ++ ++#define YAM_IOBASE (1 << 0) ++#define YAM_IRQ (1 << 1) ++#define YAM_BITRATE (1 << 2) /* Bit rate of radio port ->57600 */ ++#define YAM_MODE (1 << 3) /* 0=simplex 1=duplex 2=duplex+tempo */ ++#define YAM_HOLDDLY (1 << 4) /* duplex tempo (sec) */ ++#define YAM_TXDELAY (1 << 5) /* Tx Delay (ms) */ ++#define YAM_TXTAIL (1 << 6) /* Tx Tail (ms) */ ++#define YAM_PERSIST (1 << 7) /* Persist (ms) */ ++#define YAM_SLOTTIME (1 << 8) /* Slottime (ms) */ ++#define YAM_BAUDRATE (1 << 9) /* Baud rate of rs232 port ->115200 */ ++ ++#define YAM_MAXBITRATE 57600 ++#define YAM_MAXBAUDRATE 115200 ++#define YAM_MAXMODE 2 ++#define YAM_MAXHOLDDLY 99 ++#define YAM_MAXTXDELAY 999 ++#define YAM_MAXTXTAIL 999 ++#define YAM_MAXPERSIST 255 ++#define YAM_MAXSLOTTIME 999 ++ ++#define YAM_FPGA_SIZE 5302 ++ ++struct yamcfg { ++ unsigned int mask; /* Mask of commands */ ++ unsigned int iobase; /* IO Base of COM port */ ++ unsigned int irq; /* IRQ of COM port */ ++ unsigned int bitrate; /* Bit rate of radio port */ ++ unsigned int baudrate; /* Baud rate of the RS232 port */ ++ unsigned int txdelay; /* TxDelay */ ++ unsigned int txtail; /* TxTail */ ++ unsigned int persist; /* Persistence */ ++ unsigned int slottime; /* Slottime */ ++ unsigned int mode; /* mode 0 (simp), 1(Dupl), 2(Dupl+delay) */ ++ unsigned int holddly; /* PTT delay in FullDuplex 2 mode */ ++}; ++ ++struct yamdrv_ioctl_cfg { ++ int cmd; ++ struct yamcfg cfg; ++}; ++ ++struct yamdrv_ioctl_mcs { ++ int cmd; ++ int bitrate; ++ unsigned char bits[YAM_FPGA_SIZE]; ++}; +diff -u --recursive --new-file linux.prev/drivers/net/yam1200.h linux/drivers/net/yam1200.h +--- linux.prev/drivers/net/yam1200.h Thu Jan 1 00:00:00 1970 ++++ linux/drivers/net/yam1200.h Sat Sep 12 22:03:34 1998 +@@ -0,0 +1,343 @@ ++/* ++ * ++ * File yam1k2b5.mcs converted to h format by mcs2h ++ * ++ * (C) F6FBB 1998 ++ * ++ * Tue Aug 25 20:24:08 1998 ++ * ++ */ ++ ++static unsigned char bits_1200[]= { ++0xff,0xf2,0x00,0xa5,0xad,0xff,0xfe,0x9f,0xff,0xef,0xf3,0xcb,0xff,0xdb,0xfc,0xf2, ++0xff,0xf6,0xff,0x3c,0xbf,0xfd,0xbf,0xdf,0x6e,0x3f,0x6f,0xf1,0x7d,0xb4,0xfd,0xbf, ++0xdf,0x6f,0x3f,0x6f,0xf7,0x0b,0xff,0xdb,0xfd,0xf2,0xff,0xf6,0xff,0xff,0xff,0xff, ++0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xdf,0xff,0xff,0xff,0xef,0xff,0xff,0xff, ++0xfd,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xbf, ++0xff,0xff,0xf7,0xff,0xff,0xfb,0xff,0xff,0xff,0xfc,0xff,0xfe,0xff,0xff,0xff,0xf0, ++0x5f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xf1,0xff,0xff,0xfe,0x7f,0xbf,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xfb,0xff,0xff,0xff,0xf0,0x9f, ++0xff,0xff,0xff,0xfe,0xff,0xfd,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xf7,0xff, ++0xff,0xff,0xfb,0xff,0xfb,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xf7,0xff,0xff,0xfb,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xef,0xff,0xf0,0x5f,0xff, ++0xff,0xff,0xfe,0xff,0xff,0xef,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xbf,0xff,0xff,0xdf,0xf7,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xfb,0xfe,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff, ++0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb, ++0xff,0xff,0xff,0xfd,0xff,0xbf,0xf1,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xfb, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x6f,0xff,0xff,0xff, ++0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xf7,0xff,0xff,0xf1,0xff,0xff,0xf7,0xbf,0xe7,0xff,0xff,0xff,0xff,0xfb, ++0xff,0xff,0xff,0xff,0xff,0xff,0x77,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xdb, ++0xff,0xff,0xf5,0xa5,0xfd,0x4b,0x6e,0xef,0x33,0x32,0xdd,0xd3,0x4a,0xd6,0x92,0xfe, ++0xb3,0x3f,0xbd,0xf1,0xfa,0xdb,0xfe,0xf7,0xf6,0x96,0xbd,0xbd,0xff,0xbd,0xff,0xed, ++0x7f,0x6b,0x7f,0xfb,0xdf,0xfe,0xfb,0xfe,0x90,0xcf,0xff,0xff,0xff,0xfe,0xbe,0xef, ++0xff,0xff,0xdb,0x5f,0xf6,0xff,0xf6,0x8f,0xfd,0xa5,0xdd,0xff,0xff,0xff,0xff,0x6f, ++0x7f,0xdb,0xf1,0xfc,0xbf,0xff,0x6f,0xff,0xef,0xfc,0x5b,0x5d,0xda,0xdf,0xf4,0xff, ++0xf2,0xff,0xfd,0xbf,0xff,0xff,0xff,0xd0,0x1f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff, ++0xff,0xfb,0xef,0xb7,0xfc,0x33,0xff,0xfb,0xff,0x04,0x6a,0xf3,0x3c,0x36,0xff,0xf0, ++0x0f,0xf1,0x0f,0xff,0xff,0xff,0xf3,0x15,0x72,0x0f,0xf1,0x6f,0xff,0xfe,0x94,0x3f, ++0xff,0xff,0xff,0x7b,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf0, ++0xf7,0xef,0xb7,0xfc,0x33,0xff,0xff,0xff,0x04,0x6a,0xf3,0x3c,0x36,0xff,0xf0,0x0f, ++0xf1,0x0f,0xff,0xff,0xff,0xf3,0x15,0x73,0x8f,0xf2,0x6f,0xff,0xfe,0x94,0x3f,0xff, ++0xff,0xff,0x7d,0x9f,0xff,0xf0,0x0f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0x9e, ++0xff,0xfc,0xef,0xd3,0xfb,0xff,0x7f,0xf5,0x5f,0xfe,0x59,0xff,0xff,0xff,0xfc,0xf1, ++0xfe,0x7f,0xff,0xff,0xfa,0x17,0xff,0xe7,0xef,0xef,0xff,0xff,0x3f,0xf1,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xf5,0xff,0xbf,0xff,0xfc,0xea, ++0xff,0xf0,0xff,0xff,0xbf,0xf9,0x3f,0xb1,0xef,0xff,0xd7,0xff,0xfb,0xff,0xf0,0xff, ++0xff,0xf3,0xff,0xdf,0xff,0x7b,0xff,0xfd,0xff,0xf6,0xff,0xbf,0xff,0xff,0xbf,0xff, ++0xff,0xff,0xda,0xf0,0xff,0xff,0xff,0xff,0xfe,0xf2,0xc0,0x01,0x00,0x00,0x02,0x02, ++0x02,0x02,0x00,0x40,0x40,0x40,0x10,0x00,0x00,0x00,0x20,0x00,0x00,0x01,0x00,0x00, ++0x00,0x00,0x00,0x00,0x19,0x00,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10, ++0x00,0x3c,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xfb,0xff,0xfd,0xff, ++0xff,0x7f,0xff,0xff,0xbf,0xff,0xef,0xff,0xff,0xfd,0xff,0xff,0xf1,0xff,0xdf,0xff, ++0xff,0xff,0xff,0xff,0xff,0xbf,0xfe,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xdf, ++0xdb,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xf0,0xbf,0xdf,0xff,0x7f,0xff,0xff,0xff,0xff, ++0xdf,0xdf,0xff,0xef,0xff,0x9e,0xef,0xff,0xff,0x7f,0xff,0xf1,0xef,0xff,0xff,0xff, ++0xf7,0xfa,0xbf,0xff,0xff,0xfe,0x47,0xef,0xff,0xbd,0xf6,0xff,0xff,0xdf,0xf5,0xf0, ++0xf0,0xef,0xff,0xff,0xff,0xfe,0xf8,0x30,0x00,0x00,0x00,0x04,0x00,0x01,0x02,0x08, ++0x16,0x00,0x00,0x00,0x80,0x00,0x01,0x02,0x00,0x80,0x01,0x0c,0x02,0x00,0x00,0x01, ++0x00,0x00,0x20,0x00,0x00,0x06,0x00,0x20,0x00,0x10,0x00,0x14,0x00,0x04,0xc1,0xf0, ++0x2f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0x7f, ++0xec,0xff,0xff,0xfa,0xff,0xbf,0xff,0x6f,0xff,0xe1,0xff,0xff,0xff,0xff,0xbd,0xfe, ++0x46,0xff,0xef,0x7f,0xcd,0xdf,0xff,0xff,0xfd,0xff,0xbd,0xff,0x7f,0x7f,0xf0,0x4f, ++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x0f,0xff, ++0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0xa4,0xbc,0xcd,0x6d,0x6b,0x6f,0x5b,0xdc,0x33, ++0x5a,0xf6,0xf7,0xf6,0xb3,0x3f,0xbd,0xc1,0xfa,0x5a,0xf6,0xf6,0xb6,0xf7,0xff,0xbd, ++0xbb,0x3c,0xce,0xcf,0x34,0xef,0x33,0xbb,0xcc,0xff,0xff,0xff,0xf0,0x4f,0xff,0xff, ++0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,0xf6,0xd6,0xff,0xfd,0xfd,0xbf,0xff,0xad, ++0xbf,0xf9,0x7f,0x6f,0xfc,0xdb,0xf1,0xfd,0xbf,0xff,0x6f,0xff,0xff,0xda,0xdb,0xfc, ++0xdb,0xff,0x76,0x8f,0xf6,0xff,0xcd,0xab,0xfe,0xfb,0xff,0xd0,0xff,0xff,0xff,0xff, ++0xfe,0xff,0x9f,0xff,0xf4,0x20,0xaf,0x6d,0x0b,0xc1,0x7b,0xff,0xff,0xff,0xcb,0xff, ++0x3f,0xf0,0xef,0x7f,0x0f,0xf1,0xc3,0x3c,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x0b, ++0x1d,0x6a,0x64,0x05,0x6b,0x99,0x01,0xff,0xfd,0xef,0xf0,0x2f,0xff,0xff,0xff,0xfe, ++0xff,0xff,0xff,0xf4,0x00,0x2f,0xcc,0x0b,0xc3,0x7f,0xff,0xff,0xff,0x0a,0xdf,0xbf, ++0xfd,0x7f,0xff,0xff,0xf1,0xc3,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x4a,0x0e, ++0x96,0x64,0x02,0x97,0x99,0x10,0xff,0xff,0xff,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff, ++0xff,0xff,0xfe,0x84,0xf9,0xd5,0x27,0xf1,0x7f,0xff,0xf8,0xeb,0xdf,0xf3,0xcf,0x3f, ++0x1f,0xff,0xf7,0x11,0xff,0xcf,0xff,0xfe,0x67,0xff,0xff,0xff,0xff,0xc4,0xff,0xff, ++0xb3,0xa1,0xff,0xf9,0xe0,0xff,0xff,0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xf5,0xff, ++0xff,0xfb,0x7f,0xe0,0xff,0xc7,0xfe,0x7f,0x3f,0xff,0xfd,0x77,0x8d,0x7f,0x0f,0xff, ++0xc3,0xff,0xf1,0xbf,0x8f,0xcf,0xff,0xff,0xdd,0x7b,0xff,0xf6,0xfa,0xf7,0xff,0x40, ++0x9f,0xf9,0x7f,0xd8,0xff,0xff,0xfa,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xf1,0xc0,0x00, ++0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x10,0x00,0x00,0x10, ++0x00,0x01,0x00,0x10,0x20,0x20,0x00,0x00,0x10,0x00,0x04,0x01,0x05,0x00,0x00,0x00, ++0x00,0x40,0x40,0x00,0x00,0x3c,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff, ++0xff,0xff,0xfe,0x7f,0x7f,0xff,0xef,0xff,0xff,0xdf,0xff,0xff,0xdf,0xff,0xef,0xf7, ++0xf1,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xf7,0xff,0xff,0xff,0xfc,0xfd,0xff,0x7f, ++0x7e,0xff,0xff,0xff,0xdb,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xf0,0xbb,0xff,0xff,0xff, ++0xff,0xff,0xfe,0xeb,0xfd,0x6f,0xff,0xf7,0xfe,0xf5,0x7f,0xff,0xff,0x7f,0xbf,0xb1, ++0xff,0xff,0x9f,0xbf,0xfb,0xff,0xfe,0xff,0xfe,0xff,0xf7,0xeb,0xdf,0xbf,0x5f,0xdd, ++0xff,0xdb,0xfd,0xd0,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xf8,0x30,0x20,0x00,0x42,0x00, ++0x00,0x00,0x30,0x18,0x04,0x08,0x09,0x21,0x82,0x80,0x02,0x00,0x08,0x00,0x01,0x00, ++0x00,0x00,0x0c,0x20,0x10,0x00,0x11,0x00,0x44,0x84,0x00,0x20,0x20,0x84,0x80,0x00, ++0x00,0x00,0xc1,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xf7,0xff,0xfb,0xdd,0xf9,0xff, ++0xda,0xff,0xdc,0xdd,0xfc,0xfb,0xff,0xbf,0xfb,0x3e,0xd7,0x96,0xfe,0x61,0xf7,0xff, ++0x7f,0xff,0x3f,0xfd,0xff,0xdf,0xcf,0xf7,0xdf,0xf7,0xbf,0xfd,0xff,0xfe,0xef,0xef, ++0xfe,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf3,0xbd,0xfd,0x4b,0x74,0xcf, ++0x73,0x5b,0xcb,0x3b,0xdf,0xfe,0xf7,0xfe,0xd3,0x75,0xac,0xa1,0xfb,0xdf,0xfe,0xf7, ++0x76,0x96,0xb5,0x24,0xbd,0xa5,0xad,0x49,0x2f,0x69,0x2b,0x52,0x5b,0xbd,0xff,0xff, ++0xf0,0xcf,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,0xf6,0xfe,0xff,0xcc, ++0xa7,0xfb,0xad,0xff,0x7f,0x6f,0xff,0x6d,0x7f,0xdb,0xf1,0xfd,0xbf,0xff,0x6f,0xff, ++0x6f,0xff,0xdb,0xff,0xdb,0xff,0xf6,0x97,0xf6,0xff,0xb5,0xb5,0xff,0xff,0xff,0xd0, ++0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0xa5,0xbc,0x43,0xfc,0x7c,0x03,0xe7, ++0xff,0xff,0x20,0xff,0xff,0xff,0xcc,0xfd,0x7d,0xf1,0xff,0xff,0xff,0xff,0xd5,0x59, ++0xba,0x56,0x66,0x6a,0xad,0x9a,0xa9,0x9a,0x97,0xa5,0xaa,0xbb,0xff,0xff,0xf0,0x0f, ++0xff,0xff,0xff,0xfe,0xfe,0xfb,0xff,0xfd,0xf7,0xfd,0x43,0xff,0xfd,0x6b,0xe7,0xff, ++0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0x3f,0xf1,0xff,0xff,0xff,0xff,0xd5,0x59,0xb5, ++0xa6,0x66,0x6a,0xad,0x9a,0xa9,0x99,0x6b,0x5a,0xaa,0xff,0xff,0xb7,0xf0,0x3f,0xff, ++0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0x9c,0xf7,0xfd,0xd2,0x41,0xff,0xff,0xf2,0x7f, ++0x8f,0xff,0xff,0x3d,0xf3,0xff,0x17,0xf1,0xff,0xff,0xff,0xff,0xff,0x7f,0xdf,0xfc, ++0x8f,0x38,0xff,0xef,0x23,0xff,0xfb,0xf7,0xc8,0xff,0xff,0xff,0xf0,0x9f,0xff,0xff, ++0xff,0xfe,0xf5,0x7f,0xff,0xfd,0xff,0xe4,0xff,0xeb,0xff,0xcf,0xbf,0xfa,0xff,0xab, ++0xef,0xff,0xfb,0xff,0xf3,0xfd,0x61,0xff,0xff,0xff,0xff,0xfa,0xff,0xfb,0xfd,0x0d, ++0xff,0xfe,0xff,0x43,0x7f,0xfe,0xbf,0xd0,0xfd,0xff,0xfa,0xf0,0x3f,0xff,0xff,0xff, ++0xfe,0xf3,0xc0,0x00,0x00,0x00,0x02,0x00,0x02,0x01,0x00,0x60,0xc0,0x40,0x00,0x00, ++0x00,0x00,0x34,0x04,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x88,0x00, ++0x00,0x03,0x00,0x00,0x40,0x00,0x40,0x00,0x00,0x3c,0xf0,0x3f,0xff,0xff,0xff,0xfe, ++0xfd,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x7f,0xbf,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xf7,0xf1,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xfd,0xff, ++0xff,0xff,0xff,0xfe,0xfe,0x5f,0xff,0xff,0xcb,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xf0, ++0xff,0xff,0xfd,0xff,0xef,0xe3,0xde,0xee,0xd9,0xc5,0x93,0xff,0xff,0xfe,0xfe,0xff, ++0xfb,0xee,0xfe,0xf1,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xbf,0xf7,0xff,0xff,0x7f, ++0xaf,0xbd,0xdf,0xdf,0xfb,0xf3,0xf3,0xf0,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xf8,0x34, ++0x00,0x06,0x61,0x00,0x18,0x01,0xa0,0x05,0x17,0x00,0x20,0x05,0x28,0x20,0x00,0x00, ++0x05,0x00,0x41,0x00,0x00,0x40,0x00,0x09,0x00,0x01,0x20,0x86,0x82,0x08,0x40,0x03, ++0x80,0x30,0x70,0x08,0x14,0x02,0xc1,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff, ++0xff,0xff,0xbd,0xef,0xfb,0xff,0xff,0xfb,0x9c,0x7f,0xef,0xdf,0xff,0xbf,0xeb,0xde, ++0xff,0xc1,0x7f,0xff,0xfb,0x7f,0xff,0xff,0xff,0x5f,0xff,0xff,0xff,0xdf,0xbf,0xef, ++0x3f,0xf7,0x8f,0xef,0x7f,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xbd, ++0xdf,0xef,0x7d,0x6d,0x2b,0x5a,0x5d,0xd2,0xdf,0xf6,0x92,0xb6,0xb2,0xb3,0xac,0xa1, ++0xfb,0xdf,0xfe,0xf1,0xee,0xf5,0xf6,0xbc,0x6b,0xbd,0x7d,0xaf,0x1a,0xef,0x5f,0x6b, ++0xc6,0xff,0xff,0xff,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff, ++0xf6,0xff,0xf6,0xb7,0xfd,0xad,0xfd,0xbf,0xf3,0x6f,0xff,0x6f,0xff,0xdb,0xd1,0xfd, ++0xbf,0xff,0x6f,0xf5,0x6b,0xbc,0x5b,0x3c,0xda,0xef,0x16,0xaf,0x16,0xff,0xcd,0xab, ++0xff,0x6f,0xff,0xd0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfc,0xbf,0xff,0xff, ++0xff,0x6c,0x03,0x10,0xc1,0xf3,0xff,0xf3,0x3a,0xf3,0xca,0xff,0xaf,0xf1,0xff,0xff, ++0xff,0xff,0xd9,0x96,0xa6,0x65,0xa6,0x66,0x6a,0x95,0x69,0x69,0x6a,0x5a,0x5a,0xff, ++0xff,0x5f,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff, ++0xea,0x0f,0x50,0xc3,0xf3,0x7f,0xff,0xf3,0xf3,0xc3,0xff,0xaf,0xf1,0xff,0xff,0xff, ++0xff,0xd9,0x96,0xa6,0x65,0xa6,0x66,0x6a,0x95,0x69,0x69,0x6a,0x5a,0x5a,0xff,0xff, ++0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xd7,0xff,0xff,0x5f,0xc1, ++0x3f,0xf7,0x5e,0xf5,0xce,0x9e,0x5f,0x3f,0x17,0xff,0xf3,0xe1,0xff,0xff,0xff,0xff, ++0xd8,0xff,0xfa,0xfe,0x67,0xff,0xfe,0xbf,0x5a,0xff,0xff,0xaf,0xf5,0xff,0xff,0xff, ++0xf0,0x2f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xfd,0xff,0xf7,0xff,0xfd,0x4e,0x3d, ++0x3f,0xe7,0x0b,0xbf,0x8f,0xf9,0xff,0xeb,0xe3,0xff,0xe1,0xff,0xff,0xfc,0xff,0xc7, ++0x9f,0xff,0x3e,0x39,0xe5,0xff,0xcf,0x9b,0xf9,0xff,0xff,0xc5,0xff,0xff,0xfa,0xf0, ++0x5f,0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00, ++0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x20, ++0x00,0x01,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0xf0,0x4f, ++0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xbf, ++0x3f,0xff,0xff,0xbf,0xff,0xff,0xff,0xfb,0xf1,0xff,0xff,0xff,0xff,0xf7,0xff,0xf7, ++0xff,0xed,0xff,0xfb,0xfe,0xff,0x7f,0xff,0x7f,0xdf,0xff,0xff,0xdd,0xf0,0x3f,0xff, ++0xff,0xff,0xfe,0xf0,0xff,0xff,0xf3,0xff,0xf7,0xff,0xfe,0x5f,0xff,0xf7,0xff,0xff, ++0xdf,0xff,0xff,0xff,0xf7,0xfe,0x7b,0xf1,0xff,0xfd,0xfd,0xff,0xdf,0xdf,0xff,0x7d, ++0x73,0xf9,0xff,0xc3,0x7e,0xfe,0xff,0xef,0xd7,0xff,0xcf,0xd0,0xf0,0x6f,0xff,0xff, ++0xff,0xfe,0xf8,0x30,0x00,0x00,0x40,0x04,0x00,0x01,0x41,0x20,0x00,0x04,0x00,0x02, ++0xd5,0x09,0x00,0x02,0x80,0x02,0x01,0x00,0x00,0x00,0x0a,0x04,0x00,0x07,0x00,0x01, ++0x50,0x01,0x80,0x02,0x61,0x40,0x41,0x0c,0x14,0x08,0xc1,0xf0,0x9f,0xff,0xff,0xff, ++0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xdf,0xcb,0x5f,0xfe,0xef,0xff,0xfe, ++0xff,0x3f,0xff,0x7f,0xfd,0xc1,0xff,0xff,0x7f,0xff,0xdf,0xfd,0xfc,0xfd,0xf7,0xee, ++0xff,0xff,0x4e,0xff,0xdf,0xcf,0xdb,0xeb,0xff,0xff,0xf0,0x1f,0xff,0xff,0xff,0xfe, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff,0xfe,0x7f, ++0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff, ++0xf7,0xfb,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0x7f,0xff,0xff,0xff,0x7f,0xff,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xdd,0xff, ++0xff,0xff,0xa5,0xff,0x6f,0x6b,0xe9,0x6f,0xda,0xca,0xfb,0xdd,0xee,0xf7,0xf6,0xb2, ++0xb3,0xa4,0xa1,0x5b,0x5b,0xf6,0xd7,0xf4,0xf7,0x7b,0xbd,0xbd,0xad,0xcf,0xef,0x7f, ++0x6b,0x7f,0x3b,0xdf,0xdb,0xff,0xff,0x30,0xcf,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff, ++0xff,0xff,0xff,0xf6,0xfe,0x96,0xff,0xfd,0xb5,0xfd,0xbf,0xad,0x7f,0xff,0x6f,0xff, ++0xde,0xd1,0xad,0xad,0xe9,0xff,0xf1,0xec,0xef,0xde,0x3f,0xcb,0xff,0xf6,0xff,0x32, ++0xff,0xc5,0xbd,0xff,0xff,0xff,0xd0,0xbf,0xff,0xff,0xff,0xfe,0xfe,0xfb,0xff,0xf4, ++0x28,0xbf,0xff,0xfd,0xfb,0xd3,0xff,0xff,0x42,0xff,0xff,0xff,0xea,0xb3,0xfc,0xc3, ++0xc1,0xff,0x33,0xff,0xc0,0x15,0x6b,0x70,0xff,0xf0,0xf2,0x4f,0xff,0xfc,0x3e,0x97, ++0x3c,0xff,0xff,0xfd,0xef,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0x78, ++0xbf,0xff,0xfd,0xf3,0xef,0x55,0xff,0x7e,0xff,0xff,0xff,0xea,0xb3,0xfc,0xc3,0xc1, ++0xff,0x33,0xff,0xc0,0x15,0x6f,0xff,0x0f,0xf0,0xf0,0x0f,0xff,0xfc,0x3d,0x6b,0xc3, ++0xff,0xff,0xfe,0xf7,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfc,0xff, ++0xff,0x23,0xf8,0x7f,0xff,0x4e,0xff,0xff,0xff,0xfb,0xf9,0x17,0xff,0xf6,0xf1,0xff, ++0xcf,0xef,0xff,0xff,0x13,0xdf,0xe6,0x2f,0xc7,0xff,0xff,0xe7,0xc1,0xfd,0xff,0xfe, ++0xff,0xff,0xff,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xff,0xfe,0xae,0xff, ++0xff,0x7f,0x3b,0x3f,0xfc,0x7f,0xfc,0xef,0xff,0xfc,0xe2,0x7b,0xff,0xf1,0xfd,0xed, ++0xef,0xff,0xff,0x35,0x73,0xff,0xff,0xfe,0xfa,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff, ++0xff,0xfa,0xf0,0x8f,0xff,0xff,0xff,0xfe,0xf1,0xc0,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x80,0x00,0x00,0x40,0x00,0x00,0x00,0x0c,0x04,0x01,0x40,0x40,0x00, ++0x00,0x30,0x28,0x04,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00, ++0x38,0xf0,0x0f,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xfb,0xff,0x7f, ++0xff,0xff,0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xdf,0xdf,0xff, ++0xff,0xff,0xff,0xed,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xbf,0xbf,0xff,0xff,0xc3, ++0xf0,0x3f,0xff,0xff,0xff,0xfe,0xf0,0xbf,0xfd,0xff,0xbf,0xff,0xff,0xfd,0xff,0xff, ++0xff,0xff,0xff,0xfd,0x7b,0xff,0x7f,0xff,0xbd,0xff,0xf1,0xef,0xff,0xff,0xfd,0xdf, ++0xfd,0xfb,0xff,0xff,0xbf,0xbe,0xff,0xcd,0x7f,0xfc,0xf7,0xf7,0x6f,0xbf,0xd8,0xf0, ++0xef,0xff,0xff,0xff,0xfe,0xf8,0x30,0x00,0x00,0x00,0x04,0x00,0x00,0xa0,0x00,0x00, ++0xc0,0x00,0x00,0x20,0x34,0x00,0x00,0x00,0x0c,0x81,0x00,0x20,0xa4,0x20,0x00,0x10, ++0x08,0x04,0x48,0x08,0x00,0x40,0x93,0x00,0x10,0x00,0x38,0x18,0x20,0xc1,0xf0,0x3f, ++0xff,0xff,0xff,0xfe,0xff,0xfb,0xff,0xff,0xb9,0xdf,0xfe,0xb3,0xff,0xff,0xe7,0xfd, ++0xff,0xff,0x3b,0xff,0x7f,0xff,0xbf,0xff,0xc1,0xff,0xfc,0xff,0xff,0x3f,0x77,0xfe, ++0xfe,0xcf,0xff,0xbf,0xfd,0xbf,0xff,0xfe,0xed,0xf2,0xfd,0xf7,0xff,0xf0,0x2f,0xff, ++0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xbf,0xff,0xff, ++0xff,0xfe,0xff,0xff,0xff,0xf3,0xad,0xcf,0xef,0x70,0xc9,0x73,0x3b,0xdf,0x5b,0x4a, ++0xf6,0xb7,0xfe,0xd7,0xf5,0xbc,0xc1,0x33,0xca,0xd6,0xb7,0x6e,0xf7,0xfb,0xbd,0xc5, ++0x24,0xcf,0x6f,0x2f,0x4d,0x2b,0xba,0x5a,0xff,0xff,0xff,0xf0,0xaf,0xff,0xff,0xff, ++0xfe,0xbf,0xff,0xff,0xff,0xff,0xf6,0xf6,0xd7,0xff,0xff,0xad,0xbd,0xff,0xff,0xff, ++0xef,0xf7,0x7f,0xfc,0x5b,0xb1,0xfd,0xbd,0x75,0x6f,0xef,0x6a,0xfd,0x5b,0xfb,0xdb, ++0x3a,0xbf,0x8e,0x9f,0xff,0xbf,0xfd,0xff,0x6f,0xff,0xd0,0x6f,0xff,0xff,0xff,0xfe, ++0xff,0xbb,0xff,0xf0,0x3f,0xff,0xff,0xfd,0xfb,0x7f,0xde,0xff,0xff,0x5a,0xd6,0xbf, ++0xd8,0x2a,0xbf,0xbf,0xf1,0xe5,0xff,0xcc,0xc0,0xa9,0x70,0xff,0xf3,0x3c,0x3c,0xfd, ++0x57,0xfd,0x98,0x03,0x00,0xc3,0xff,0xff,0xff,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xff, ++0xff,0xff,0xff,0x3d,0xbf,0xff,0xfd,0xfb,0xff,0xdb,0xff,0xff,0x0f,0xfc,0x3f,0xd8, ++0x2a,0xbf,0xbf,0xf1,0xef,0xff,0xcc,0xc0,0x96,0xbe,0xff,0xf3,0x3f,0xff,0xfd,0x57, ++0xfd,0x99,0x0f,0xff,0xc3,0xff,0xff,0xff,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xff,0xff, ++0xff,0xf1,0xe7,0xff,0xff,0xf3,0x8e,0x7b,0xff,0xa8,0xff,0xdf,0x7f,0x8e,0x78,0x73, ++0xff,0xf1,0x51,0x62,0xff,0xfc,0x4b,0xff,0xf3,0xff,0x7e,0xcf,0xf9,0xff,0xfd,0xff, ++0xff,0x7f,0xff,0xe0,0xff,0xff,0xff,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff, ++0xfb,0xfd,0xae,0xff,0xfc,0xfe,0x6f,0x3f,0xf8,0xfd,0x77,0xaf,0xfe,0x37,0xfe,0x7b, ++0xff,0xb1,0x8c,0xff,0xef,0xfd,0xf8,0xe7,0xbf,0xff,0xf1,0xfe,0x3e,0xf7,0xfe,0x95, ++0x3e,0xbf,0xff,0xff,0xff,0xfa,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xf1,0xc0,0x00,0x00, ++0x01,0x04,0x00,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x08, ++0x41,0x80,0x10,0x00,0x00,0x08,0x10,0x84,0x00,0x0c,0x04,0x02,0x61,0x00,0x00,0x81, ++0x00,0x00,0x00,0x00,0x3d,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff, ++0xff,0xff,0x7f,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1, ++0x7f,0xbf,0xf7,0x7f,0xef,0xff,0xef,0xff,0xf7,0xfd,0xff,0xff,0xfd,0x7f,0xff,0xbe, ++0xdf,0xff,0xff,0xd9,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xf0,0xbb,0xff,0x7f,0xfb,0xff, ++0xfb,0xff,0xbf,0xff,0xf3,0x7f,0xfb,0xfd,0xeb,0x7f,0xdf,0xfa,0xff,0xde,0xf0,0xed, ++0xff,0xb1,0xf7,0xf9,0x1f,0xb5,0x5b,0xfe,0x7e,0xf7,0xbe,0xfd,0x7f,0x5f,0xb5,0xf7, ++0xff,0xff,0xd0,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf8,0x30,0x01,0x00,0x07,0x42,0x01, ++0x00,0x6a,0x18,0x50,0x80,0x00,0x00,0x02,0x40,0x01,0x01,0x20,0x01,0x01,0x24,0x14, ++0x21,0x10,0x02,0x08,0x07,0x08,0x00,0x40,0x10,0x80,0x58,0x00,0x84,0x80,0x18,0x10, ++0x40,0xc1,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf7,0xff,0xdb,0xb7,0xf3, ++0xdf,0x7c,0xf8,0x74,0xff,0xff,0x6f,0x7d,0x3f,0x7e,0xec,0x7f,0xc1,0xf5,0xff,0xcf, ++0x6f,0x9f,0xf9,0xdf,0xbe,0xe5,0xe7,0xff,0xd7,0xf3,0xdd,0xfb,0xff,0xfc,0xff,0xbf, ++0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xf0,0x2f,0xff,0xff,0xff,0xfe,0xd7,0xff,0xff,0xff,0xb4,0xcf,0xef,0x77,0x6f,0x73, ++0x3a,0x4a,0x3a,0xcb,0xd4,0xf7,0x2e,0xd6,0xbd,0xbd,0xa1,0x3b,0xdf,0xd6,0xf7,0xee, ++0xd3,0x35,0xbd,0xfb,0xbd,0xce,0xeb,0x2b,0x4d,0x2f,0xbb,0xda,0xff,0xff,0xfe,0xb0, ++0x5f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdf,0x5f,0x36,0xaf,0x3f,0xed,0xb7, ++0xf5,0xfd,0xf3,0x2b,0xef,0x77,0xff,0xfb,0xda,0xb1,0xbd,0xa3,0x77,0x69,0x7f,0x4f, ++0xff,0xdb,0xfa,0x5b,0xff,0xf2,0xfe,0xff,0x96,0xff,0xff,0xfe,0xdf,0xff,0xd0,0xaf, ++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0x8f,0xfd,0x40,0x6f,0x9e,0x83,0x5a,0x0f, ++0xfa,0xc3,0xff,0xff,0xfc,0xe9,0x7f,0xf3,0x01,0xd0,0x00,0xfe,0xbf,0xcd,0x3f,0xf0, ++0xef,0xfc,0xc5,0x0c,0x3f,0xfd,0x68,0x0b,0xff,0xff,0xff,0xfe,0xdf,0xf0,0xff,0xff, ++0xff,0xff,0xfe,0xff,0xbb,0xff,0xfd,0x85,0xff,0xd4,0x6f,0x9f,0xc3,0x5a,0x0f,0xff, ++0xff,0xff,0xff,0xfc,0xe9,0x7f,0xf3,0x01,0xf0,0xfb,0xc2,0xbf,0xfc,0x00,0x37,0xef, ++0xfc,0xcd,0xbc,0x3f,0xff,0x0c,0xbf,0xff,0xff,0xff,0xff,0xff,0xf0,0x5f,0xff,0xff, ++0xff,0xfe,0xff,0xff,0xff,0xff,0xd9,0xf7,0xd1,0xb7,0x7e,0x7f,0xf1,0xe4,0xfd,0xff, ++0xfb,0xfb,0xff,0x5f,0xff,0x7f,0xb1,0xbc,0x0f,0x67,0xeb,0xb8,0x3f,0xff,0xe2,0xff, ++0xe9,0xff,0xfd,0xe3,0xff,0x3f,0x9f,0xc2,0xff,0xff,0xff,0xf0,0x9f,0xff,0xff,0xff, ++0xfe,0xf5,0x7f,0xff,0xf0,0x3f,0xbc,0xff,0xd5,0xf5,0xce,0x3f,0xfe,0xff,0xfe,0x6d, ++0xff,0xf1,0xbf,0x7b,0xff,0xf1,0xfd,0xff,0x4f,0xff,0x87,0xff,0xae,0xff,0xb1,0xf8, ++0xfe,0xff,0xff,0x78,0x01,0xb9,0xff,0xff,0xff,0xfa,0xf0,0x2f,0xff,0xff,0xff,0xfe, ++0xf3,0xc0,0x00,0x00,0x00,0x04,0x02,0x13,0x02,0x00,0x80,0x40,0x00,0x90,0x10,0x00, ++0x10,0x00,0x02,0x00,0x01,0x20,0x80,0x12,0x10,0x00,0x40,0x08,0x00,0x04,0x00,0x00, ++0x02,0x00,0x01,0x40,0x00,0x80,0x00,0x00,0x3c,0xf0,0xef,0xff,0xff,0xff,0xfe,0xfd, ++0x1f,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x7f,0xff,0x7f,0xf7,0xdf,0xf7,0xff, ++0xf7,0xfb,0xeb,0xd1,0xff,0xff,0xff,0xff,0xef,0xf7,0xff,0xff,0xfb,0xff,0xfe,0xff, ++0xff,0x7e,0xff,0xfb,0xff,0xff,0xff,0xdb,0xf0,0xff,0xff,0xff,0xff,0xfe,0xf0,0xff, ++0xff,0xb7,0xeb,0xf7,0xdf,0xff,0xfe,0xf5,0x6b,0xe7,0xed,0xf7,0x3e,0xec,0xff,0x54, ++0xef,0x6f,0xf1,0xf5,0xaf,0x6f,0xf6,0xfd,0xff,0xdd,0x7b,0xff,0xef,0xbf,0x7f,0xff, ++0xff,0xf7,0xff,0xf3,0x5f,0xf7,0xd0,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xf8,0x30,0x00, ++0x80,0x40,0x04,0x00,0x81,0x2c,0x04,0x24,0x00,0x02,0x01,0xc8,0x02,0x00,0x02,0x24, ++0x00,0x01,0xb4,0x42,0xdc,0x44,0x02,0x15,0x90,0x02,0x03,0x48,0x39,0x10,0x02,0x24, ++0xa0,0xba,0x00,0x00,0x40,0xc1,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff, ++0xfe,0xfc,0xf7,0xf0,0xee,0xb6,0x5d,0xfd,0xf5,0xff,0xdb,0xf7,0x7f,0x7f,0xbe,0xff, ++0xc1,0xfe,0xbf,0xfa,0xfa,0x5f,0xff,0xad,0xff,0xef,0xff,0x7f,0xdf,0x7f,0xfe,0xbf, ++0xb7,0x94,0xbf,0xff,0xff,0xf0,0x9f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf0,0x8f,0xff,0xff,0xff,0xfe,0xd7,0xff,0xff,0xfb,0xb5,0xff, ++0xef,0x7c,0xeb,0x2b,0x52,0x5b,0x3b,0xda,0xd4,0xf3,0x36,0x96,0xb5,0xbd,0xf1,0xfb, ++0xda,0xee,0xf6,0xfe,0xd3,0x35,0xbd,0xdf,0xad,0xcf,0xef,0x7e,0xcd,0x6b,0xbb,0xdf, ++0xff,0xff,0xfd,0xb0,0xef,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xd3,0x5f,0xf6, ++0xff,0xf6,0xff,0xfd,0xad,0xfd,0xff,0x7f,0xef,0xff,0x6f,0x7f,0xdb,0xf1,0xa5,0xa3, ++0x7f,0x6f,0x6b,0x4f,0xff,0xdb,0xfb,0xcb,0xff,0xf6,0xff,0xf4,0xd7,0xfd,0xbf,0xfe, ++0xdf,0xff,0xd0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf7,0xdf,0xff,0xff,0xff, ++0x3f,0x7f,0xfc,0xe5,0xff,0x20,0xfe,0xff,0xff,0xdf,0x7f,0xff,0xf1,0x7f,0xff,0xfe, ++0xff,0xf0,0x7c,0x3d,0x4f,0xf3,0xc3,0x3f,0xff,0xff,0x6f,0xc3,0xff,0x0f,0xff,0xff, ++0xaf,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xff,0xff,0xfb,0xb7,0xe0,0x0f,0xff,0xff,0x2b, ++0xff,0x7d,0xbf,0xff,0xdf,0xff,0xff,0xf8,0x9f,0x7f,0xff,0xf1,0x55,0xff,0xff,0xff, ++0xfd,0x7c,0x3c,0xff,0xf3,0xc3,0x3f,0xff,0xff,0xef,0xc3,0xff,0xdf,0xff,0xff,0xff, ++0xf0,0x9f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0x9f,0xbf,0x7f, ++0xf9,0x19,0x47,0x8e,0xe7,0x9f,0x3f,0x17,0xff,0xfc,0x81,0xc1,0x7e,0xf3,0xd9,0xf9, ++0x73,0xdf,0xf4,0x7f,0xfa,0xff,0xff,0xff,0xfb,0x7f,0x77,0xc7,0xff,0xff,0xff,0xf0, ++0x2f,0xff,0xff,0xff,0xfe,0xf5,0xf7,0xff,0xfb,0xff,0xf7,0x3f,0xfc,0xbf,0x3e,0x3f, ++0xec,0xff,0x81,0xaf,0xfe,0x4f,0xf3,0xbb,0xff,0xf0,0x7e,0xff,0x6f,0xff,0x87,0xff, ++0xbb,0xff,0xd5,0xfc,0xff,0x7f,0xfc,0x6f,0xff,0xef,0xe7,0xff,0xff,0xfa,0xf0,0x3f, ++0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, ++0x00,0x30,0x10,0x60,0x20,0x00,0x08,0x00,0x01,0x20,0x80,0x00,0x10,0x00,0x04,0x00, ++0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x80,0x40,0x00,0x08,0x20,0x3c,0xf0,0x6f,0xff, ++0xff,0xff,0xfe,0xf5,0xbf,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0x7f,0xfe,0x3f,0xff, ++0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xf1,0xdf,0xdf,0xff,0xff,0xff,0x7f,0xdf,0xff, ++0xfd,0xbd,0xff,0xff,0xff,0xfb,0xdf,0xff,0xff,0xff,0xff,0x5b,0xf0,0xff,0xff,0xff, ++0xff,0xfe,0xf0,0xbf,0xbf,0xbf,0xff,0xf7,0xfb,0xff,0xfe,0xee,0xfa,0xff,0xff,0xff, ++0x3d,0x3b,0xff,0xff,0xfe,0xfb,0xf1,0xff,0xbf,0x7b,0xff,0xff,0xef,0xff,0xbf,0xff, ++0xff,0xff,0xff,0xff,0xfe,0xff,0xf7,0xef,0xff,0xfb,0xd0,0xf0,0xdf,0xff,0xff,0xff, ++0xfe,0xf8,0x30,0x00,0x00,0x00,0x00,0x00,0x0b,0x10,0x05,0x01,0x00,0x08,0x00,0x02, ++0x01,0x01,0x00,0x00,0x10,0x01,0xc8,0x08,0x00,0x00,0x00,0x00,0x42,0x02,0x00,0x00, ++0x00,0x80,0x02,0x00,0x00,0x40,0x24,0x80,0x00,0xc1,0xf0,0x3f,0xff,0xff,0xff,0xfe, ++0xff,0xff,0xff,0xff,0xf7,0xfd,0xf7,0xfa,0xef,0xee,0xf9,0xfd,0xff,0xf7,0xfe,0xbf, ++0x1f,0xfd,0x9e,0xfd,0xd1,0xef,0xff,0xf7,0x7f,0x9f,0xff,0xef,0xff,0xf6,0xff,0xfe, ++0xfe,0x7b,0xff,0xbd,0xff,0x7e,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xff,0xff, ++0xff,0xf7,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xdf,0xfd,0xff,0xff,0xdf,0xff, ++0xff,0x5f,0xf1,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xef,0xff, ++0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xfb,0xff,0xff,0xef,0xfb,0xfd, ++0xff,0xf1,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xf7,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xe7,0xff, ++0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,0xff,0xfb,0xff,0xfb,0xf1, ++0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7b,0xff,0xff,0xff,0x7f,0xff,0xf1,0xff, ++0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xef,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0x57,0xff,0xfe,0xbf,0xfb,0xf1,0xff,0xff, ++0xfd,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xd7,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf7,0xdb,0xff,0xdb,0xfd, ++0xf6,0xff,0xf6,0xff,0x3c,0xbc,0xbc,0xbf,0xdf,0x6f,0xef,0x2f,0xf1,0x3c,0xbf,0xbc, ++0xbf,0xdf,0x6f,0xff,0x6f,0xf7,0xdb,0xff,0xdb,0xfd,0xf6,0xff,0xf6,0xff,0xff,0xff, ++0x01,0xe2,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff }; +diff -u --recursive --new-file linux.prev/drivers/net/yam9600.h linux/drivers/net/yam9600.h +--- linux.prev/drivers/net/yam9600.h Thu Jan 1 00:00:00 1970 ++++ linux/drivers/net/yam9600.h Sat Sep 12 22:03:34 1998 +@@ -0,0 +1,343 @@ ++/* ++ * ++ * File yam111.mcs converted to h format by mcs2h ++ * ++ * (C) F6FBB 1998 ++ * ++ * Tue Aug 25 20:23:03 1998 ++ * ++ */ ++ ++static unsigned char bits_9600[]= { ++0xff,0xf2,0x00,0xa5,0xad,0xff,0xfe,0x9f,0xff,0xef,0xfb,0xcb,0xff,0xdb,0xfe,0xf2, ++0xff,0xf6,0xff,0x9c,0xbf,0xfd,0xbf,0xef,0x2e,0x3f,0x6f,0xf1,0xfd,0xb4,0xfd,0xbf, ++0xff,0x6f,0xff,0x6f,0xff,0x0b,0xff,0xdb,0xff,0xf2,0xff,0xf6,0xff,0xff,0xff,0xff, ++0xf0,0x6f,0xff,0xff,0xff,0xfe,0xff,0xfd,0xdf,0xff,0xff,0xff,0xf7,0xff,0xff,0xff, ++0xfb,0xff,0xff,0xf7,0xff,0xff,0xff,0xfe,0xff,0x7f,0xf1,0xff,0xfe,0xff,0xbf,0xbf, ++0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xfe,0xff,0xfe,0xff,0xff,0xff,0xf0, ++0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xf7, ++0xff,0xff,0xf7,0xef,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0x7e,0xff,0xff, ++0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xf0,0xdf, ++0xff,0xff,0xff,0xfe,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xef,0xff,0xf3,0xfb,0xfe,0xff,0xf1,0xff,0xfd,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xdf,0xff,0xf0,0x7f,0xff, ++0xff,0xff,0xfe,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xdf,0xff,0xff,0xff,0xf7,0xf1,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xf0,0x0f,0xff,0xff, ++0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf5, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff, ++0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xef,0xff,0x7f,0xff,0xef, ++0xff,0xef,0xff,0x7f,0xef,0xf1,0xff,0xef,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xf0,0x9f,0xff,0xff,0xff,0xfe, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xff, ++0xff,0xff,0xff,0xbd,0xff,0xef,0x7f,0xef,0x7f,0xfb,0xdf,0xd3,0x5a,0xfe,0xd7,0xd6, ++0xf7,0x7f,0xbd,0xf1,0xbb,0x5d,0xd6,0xf7,0xfe,0x96,0xff,0xbd,0xaf,0xad,0xbf,0xef, ++0x7f,0x6b,0x7f,0xfb,0xd6,0xfe,0xf7,0xff,0x10,0xef,0xff,0xff,0xff,0xfe,0xbe,0xef, ++0xff,0xff,0xdb,0xff,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xfd,0xbf,0xff,0x7f,0xff,0x7f, ++0xdf,0xdb,0xf1,0xfd,0x35,0xff,0x6f,0xff,0x6f,0xff,0xdb,0xff,0xcb,0xff,0xf6,0xff, ++0xf2,0xfd,0xfd,0xbf,0xff,0xff,0xff,0xd0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xff,0xcc,0xc0,0x3f,0xff, ++0xff,0xf1,0x24,0xf0,0xff,0xff,0xcf,0xef,0x3f,0xff,0xf0,0xff,0xff,0xff,0xfc,0x3f, ++0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xff,0xcc,0xc0,0x3f,0xff,0xff, ++0xf1,0x00,0xf0,0xff,0xff,0xcf,0xdf,0xff,0xff,0xf0,0xff,0xff,0xff,0xfc,0x3f,0xff, ++0xff,0xff,0x7d,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xfe,0x7f,0xdf,0xff,0xff,0xff,0xf1, ++0xff,0xcf,0xff,0xf3,0xff,0x97,0xff,0xff,0x8f,0xe7,0xff,0xff,0xfc,0x71,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xf5,0xff,0xbf,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xf7,0xef,0xff,0xff,0xfc,0x7b,0xff,0xf1,0x3f, ++0xff,0xef,0xff,0xcf,0xe3,0xe3,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xbf,0xff, ++0xbf,0xff,0xda,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xf2,0xc0,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00, ++0x01,0x3c,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xdb,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0x9f,0xff, ++0xff,0xff,0xf7,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xdb,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xf0,0xbb,0xdf,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xfb,0xdf,0xbf,0xf1,0xfe,0xfd,0xf7,0xff, ++0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0xfd,0xf2, ++0xf0,0x1f,0xff,0xff,0xff,0xfe,0xf8,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, ++0x00,0x00,0x00,0x02,0x00,0x90,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x04,0x24,0x00, ++0x40,0x01,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0xc0,0xf0, ++0x4f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xbf,0xff,0xff,0x6f,0xff,0xdf,0xff,0xd1,0xff,0xfe,0xff,0xff,0xff,0xff, ++0xff,0xff,0xdf,0xff,0xfb,0xff,0xfb,0xef,0xff,0xff,0xee,0xff,0xff,0x7f,0xf0,0xdf, ++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x8f,0xff, ++0xff,0xff,0xfe,0xff,0xff,0xff,0xf5,0xad,0xff,0x69,0x2a,0xed,0x6b,0xfb,0xdf,0x3a, ++0xdc,0xf4,0x96,0xee,0xb3,0x3d,0x35,0xc1,0xbb,0xdd,0xfe,0xf6,0xfe,0xd6,0xb5,0xad, ++0xbf,0xa5,0xad,0x49,0x2f,0x4f,0x2b,0xda,0x5f,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff, ++0xff,0xfe,0xbf,0xff,0xff,0xfb,0x5b,0xf7,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xfd,0xa5, ++0xf3,0x6f,0xf3,0x6e,0xfa,0x7b,0xd1,0xfd,0xb5,0x77,0x6f,0xe9,0x6f,0xff,0xdb,0xfb, ++0xdb,0xdf,0xf6,0xff,0xf6,0xff,0xfd,0x3f,0xfe,0xf7,0xff,0xd0,0x4f,0xff,0xff,0xff, ++0xfe,0xff,0x9f,0xff,0xff,0x0f,0xff,0xc0,0x3f,0x9c,0x03,0xff,0xff,0x8b,0xa5,0xfe, ++0x80,0x3e,0xc2,0xbf,0xac,0xb1,0x24,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xa3, ++0xff,0xfd,0x6b,0xff,0xff,0xf0,0xa5,0xff,0xff,0xff,0xf0,0xaf,0xff,0xff,0xff,0xfe, ++0xff,0xff,0xff,0xff,0x0f,0xff,0xc0,0x3f,0xd4,0x6b,0xff,0xff,0xdb,0xff,0xfe,0x86, ++0xbf,0xc2,0xbf,0x30,0xa1,0x24,0xff,0xff,0xff,0xff,0xcc,0xff,0x0f,0xff,0xa3,0xff, ++0x05,0x6b,0xff,0xff,0xf0,0xa5,0xff,0xff,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff, ++0xff,0xff,0xfb,0xc7,0xff,0xc4,0xff,0xff,0x7f,0xff,0xec,0xfe,0x7f,0xdf,0xd8,0xb9, ++0x47,0xfc,0x36,0xc1,0xdf,0xff,0xff,0xf9,0xff,0xf3,0xff,0xf7,0xff,0xfc,0xff,0xfd, ++0x3f,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xf5,0xff, ++0xff,0xff,0xff,0xfe,0xff,0xff,0x7e,0xbd,0x3f,0xff,0x2b,0xfe,0x2f,0xf5,0xa3,0xfc, ++0x5b,0xfe,0x61,0x9f,0x7f,0xef,0xff,0xff,0xa7,0xfb,0xff,0xff,0xfa,0xfe,0xff,0x33, ++0xf1,0xff,0xbf,0xff,0xff,0xff,0xfa,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xf1,0xc0,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x30,0x24,0x04, ++0x00,0x01,0x00,0x80,0x40,0x00,0x08,0x00,0x00,0x00,0x02,0x01,0x01,0x00,0x02,0x00, ++0x00,0x00,0x00,0x00,0x01,0x3d,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xfd,0xbd,0xff,0xfd, ++0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0x7f,0xf6,0xef,0xbf,0xf7,0xff,0x73,0xeb, ++0xf1,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xf9,0xff,0xfd,0xfe,0xff,0xff, ++0xff,0xff,0xff,0xff,0xd9,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xf0,0xbf,0x7f,0xff,0xff, ++0xff,0x7f,0xff,0xff,0xde,0xff,0xff,0xef,0xdd,0xde,0x77,0xf2,0xfb,0xed,0xe7,0xf1, ++0x73,0xfd,0xfd,0xdf,0xff,0x7d,0xbe,0xdf,0xff,0xfb,0xff,0xef,0xff,0xef,0xff,0xff, ++0xff,0xff,0xff,0xd0,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xf8,0x30,0x20,0x02,0x00,0x22, ++0x40,0xc0,0x00,0x00,0x00,0x08,0x00,0x02,0x41,0x02,0x12,0x00,0x21,0x87,0x81,0x00, ++0x00,0x80,0x04,0x0b,0x28,0x01,0xb0,0x00,0x82,0x00,0x40,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0xc1,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xfd,0xff, ++0xf7,0xff,0xfe,0x7f,0xed,0x79,0xff,0xde,0xeb,0x7f,0x74,0xf7,0xf7,0xe1,0xf9,0xff, ++0xf6,0x5f,0x7f,0xff,0xff,0xff,0xd7,0xdb,0xef,0xff,0xbb,0xff,0xff,0xff,0xcc,0xff, ++0xff,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xf0,0x0f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0x3d,0xcd,0x49,0x7f,0x6f, ++0x2b,0xba,0x5c,0xd2,0xda,0xf6,0xf3,0x3e,0xf7,0xff,0xbd,0xf1,0xfa,0xdf,0xfe,0xf7, ++0xcc,0xf6,0xbb,0xa5,0xb3,0xad,0xbf,0x6f,0x7d,0x6f,0x6b,0xdb,0xdf,0xbd,0xff,0xfe, ++0xb0,0x5f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xfb,0xdb,0x57,0xf6,0xfe,0x9f,0xd5, ++0xb7,0xff,0xaf,0xe5,0x3f,0xff,0xff,0x6f,0xff,0xdb,0xf1,0xfd,0xbf,0xff,0x6f,0x69, ++0x6c,0xdf,0xda,0xdf,0xcb,0xff,0xf6,0xff,0x76,0xfd,0xfd,0xbf,0xff,0xff,0xff,0xd0, ++0x3f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfd,0xbd,0x08,0x03,0x89,0x4f,0x5a, ++0x0f,0xf0,0xff,0xf8,0xbf,0xff,0xff,0xff,0xff,0xf1,0x5a,0xff,0xff,0xff,0xff,0xf3, ++0xfa,0xa0,0xf0,0xf2,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xff, ++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfc,0xfd,0x00,0x6b,0xff,0xff,0x5a,0x0f, ++0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0x5a,0xff,0xff,0xff,0xff,0xb3,0xf5, ++0x50,0xf0,0xf0,0xff,0xff,0xff,0xd7,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x7f,0xff, ++0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0xbc,0xff,0xe4,0xe7,0x71,0xff,0xf9,0xc4,0xf4, ++0x7f,0x7f,0xcf,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xfb,0xf7,0x73,0xbf,0x14, ++0xff,0xe6,0xff,0xff,0xe1,0x7d,0xff,0xff,0xe7,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff, ++0xff,0xfe,0xf5,0xff,0xff,0xfe,0xd2,0xfa,0xff,0xc4,0xf4,0x5c,0xbf,0xfa,0xff,0xff, ++0xec,0x7e,0xbf,0xff,0xff,0xff,0xf1,0xff,0xff,0xef,0xff,0xff,0x6b,0xdb,0xff,0xdf, ++0xf9,0xfb,0xbf,0xff,0xf1,0xff,0xbf,0xff,0xff,0xff,0xfb,0xf0,0xbf,0xff,0xff,0xff, ++0xfe,0xf3,0xc0,0x00,0x02,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x80,0x00, ++0x00,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x00,0x01,0x08,0x20,0x00,0x00,0x00,0x00, ++0x01,0x00,0x01,0x00,0x00,0x80,0x02,0x00,0x01,0x3c,0xf0,0x5f,0xff,0xff,0xff,0xfe, ++0xfd,0xbf,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0x7f,0xff,0xdf,0xff,0xef,0xff, ++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xfb,0xff,0xfd,0xff, ++0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xc3,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xf0, ++0xff,0xdf,0xff,0xff,0xf7,0x23,0xff,0xff,0xfd,0xff,0xef,0xff,0xfe,0x7f,0x7d,0xf7, ++0xfe,0xff,0x7f,0x71,0xff,0xfb,0x7f,0xff,0xff,0xff,0x6e,0xfd,0xf7,0xfd,0xff,0xbf, ++0xff,0xbf,0xf9,0xfd,0xff,0xdf,0xef,0xf0,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xf8,0x30, ++0x40,0x01,0x00,0x83,0x00,0x00,0x00,0x0c,0x06,0x08,0x04,0x26,0x26,0x00,0x00,0x06, ++0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x04,0x00,0x70,0x08,0x80,0x00,0x20,0x01,0x20, ++0x00,0x02,0x00,0x30,0x00,0x00,0xc1,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff, ++0xff,0xff,0x7b,0x3f,0xf7,0xff,0xd7,0xfe,0xfe,0xfb,0xfe,0x3b,0xfe,0xbd,0xff,0x2f, ++0xff,0x71,0xff,0xfb,0x7f,0xe7,0xff,0xf9,0xef,0xff,0xd7,0xfa,0xff,0xb7,0xbb,0xfe, ++0xff,0xff,0x74,0xff,0xf7,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xf0,0x8f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xb5, ++0xbd,0x6f,0x7c,0xeb,0x7f,0xfb,0xdb,0xd3,0x4b,0xee,0xd6,0xf6,0xb7,0xfd,0xac,0xa1, ++0xfb,0xdf,0xfe,0xf7,0xf4,0x96,0xbd,0xb4,0xc5,0xa5,0xaf,0x6f,0x69,0x4f,0x7f,0xba, ++0xdb,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff, ++0xf6,0xff,0xf6,0xff,0xbd,0xbf,0xa5,0xbf,0xff,0x7d,0x7f,0xef,0xff,0xfb,0xf1,0xfd, ++0xbf,0xff,0x6f,0xff,0x6b,0x7a,0xdb,0xff,0xdb,0xdf,0xf6,0xfe,0xb6,0xfd,0xfd,0xbf, ++0xfe,0xf7,0xff,0xd0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xf4,0x2f,0xff, ++0xfc,0x43,0x6b,0xff,0xff,0xff,0x0d,0xff,0xfc,0x33,0x3f,0xf0,0x5f,0xf1,0xff,0xff, ++0xff,0xff,0xf9,0xde,0xf0,0x4c,0xfe,0x77,0xaf,0xff,0xff,0xef,0xff,0xf0,0xff,0xdb, ++0xff,0x5f,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff,0xfe,0xf7,0xff,0xf0,0x2f,0xff,0xfd, ++0x43,0x7f,0xff,0xff,0xf1,0x0f,0xff,0xfc,0x33,0x3f,0xff,0xaf,0xf1,0xff,0xff,0xff, ++0xff,0xf6,0xd7,0xff,0xbc,0xfd,0xbd,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff, ++0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfc,0xff,0xff,0xfb,0xf1, ++0xbf,0xff,0xf9,0xfd,0xcf,0xf2,0x70,0xff,0x1f,0x9f,0xf3,0xf1,0xff,0xff,0xff,0xff, ++0xfc,0xf7,0xff,0x13,0x9f,0xfc,0xff,0xff,0x84,0xf7,0xff,0xff,0x47,0xff,0xff,0xff, ++0xf0,0xbf,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xff,0xf1,0xfc,0xff,0xfe,0xfe,0x79, ++0x3f,0xff,0x1d,0x46,0xcf,0xff,0xcf,0xfc,0x7b,0xff,0xf1,0xff,0xff,0xff,0xff,0xed, ++0xf3,0xab,0xff,0xcb,0xff,0xf8,0xff,0xfc,0xf5,0xff,0xbf,0xff,0xff,0xff,0xfa,0xf0, ++0x8f,0xff,0xff,0xff,0xfe,0xf3,0xc2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, ++0x00,0x00,0x20,0x00,0x20,0x00,0x00,0x04,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x20, ++0x0c,0x00,0x00,0x04,0x01,0x00,0x01,0x00,0x00,0x80,0x00,0x00,0x01,0x3c,0xf0,0x7f, ++0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xfd,0xfe,0xff,0xff,0xff,0xff,0xfe,0xff, ++0xdf,0xff,0xff,0xf7,0xff,0xff,0xff,0xef,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xeb, ++0xff,0xdf,0xff,0xff,0xfb,0xf7,0x7f,0xff,0xfe,0xff,0xff,0xbf,0xdb,0xf0,0xff,0xff, ++0xff,0xff,0xfe,0xf0,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0x7f,0xf7,0xff, ++0xbf,0xbf,0xcf,0xff,0xff,0xff,0x3e,0xf1,0x7f,0xff,0xff,0xef,0xff,0xff,0xff,0xfe, ++0xff,0xfd,0xff,0xbf,0xbd,0xfe,0xff,0xfb,0xf7,0xdf,0xfb,0xd0,0xf0,0x9f,0xff,0xff, ++0xff,0xfe,0xf8,0x30,0x20,0x00,0x40,0x01,0x80,0xc0,0x30,0x00,0x00,0x20,0x00,0x10, ++0x50,0x88,0x20,0x00,0x00,0x13,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00, ++0x00,0x00,0x01,0x80,0x08,0x00,0x00,0xa0,0x00,0x10,0xc1,0xf0,0xef,0xff,0xff,0xff, ++0xfe,0xfd,0xef,0x7f,0xff,0xff,0xbf,0xff,0xf7,0xff,0xef,0xfb,0xfd,0x77,0xef,0xbf, ++0xf7,0x7f,0xff,0xff,0xbf,0xd1,0x7f,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xaf,0xff, ++0xdf,0xf7,0xfb,0xff,0xfd,0xff,0xfc,0xff,0xfd,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff, ++0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x3f,0xff,0xff,0xff,0xfe,0xdd,0xff, ++0xff,0xff,0xa5,0xfd,0x6f,0x7d,0x6d,0x7f,0x52,0xdf,0x5a,0x4b,0xee,0xb6,0xee,0xf2, ++0xbb,0xac,0xa1,0x5b,0x4d,0xd6,0xf7,0xfe,0xb2,0xbd,0x35,0xb5,0xb5,0xdd,0x6f,0x7f, ++0xe9,0x5f,0x52,0xdf,0xbd,0xff,0xff,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff, ++0xff,0xdb,0xfe,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xfd,0xb5,0xbf,0xf9,0x7f,0x6f,0xff, ++0xdb,0xf1,0xfd,0xbf,0xff,0x6f,0xff,0x69,0x7f,0xdb,0xff,0xd3,0xff,0xf6,0xfe,0xf2, ++0xff,0xad,0xbf,0xff,0xff,0xff,0xd0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf5, ++0x30,0x0f,0xff,0xff,0xfd,0x6b,0xca,0xff,0xf0,0x0f,0xd6,0xbf,0xcf,0x3f,0xff,0xff, ++0xf1,0xff,0xff,0xff,0xca,0xfe,0xbf,0xff,0xf0,0x05,0xaf,0x0f,0xff,0xfc,0xf0,0xcf, ++0xf0,0xff,0xff,0xff,0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf5,0x30, ++0x0f,0xff,0xff,0xfc,0x3f,0xca,0xff,0x0f,0x0f,0xd6,0xbf,0xff,0xff,0xf5,0x5f,0xf1, ++0xff,0x8b,0xff,0xc3,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xfc,0xf0,0xcf,0xf0, ++0xff,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xcf,0xff, ++0xff,0xbf,0x9f,0x3f,0xfe,0xfc,0xff,0x4f,0xff,0xff,0xff,0xff,0xff,0xf7,0xf1,0xff, ++0xdf,0xfe,0x7e,0x3f,0x9f,0xf4,0xfc,0x7f,0xfc,0xff,0xff,0x3f,0xff,0x3f,0xfe,0x3f, ++0xff,0xff,0xff,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xfb,0xff,0xfe,0xff, ++0xff,0xff,0xff,0xbf,0xfb,0xff,0xf8,0xed,0xff,0x8f,0xff,0xbb,0xff,0xb1,0xf3,0xef, ++0x8f,0xf7,0xff,0xff,0xdb,0xff,0xff,0xff,0xef,0xbf,0xfd,0x79,0xbf,0xbf,0xff,0xff, ++0xff,0xfb,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00,0x00,0x04,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x04,0x08,0x08,0x01,0x01,0x00,0x90, ++0x00,0x00,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x00,0x08,0x00,0x04,0x00,0x00,0x01, ++0x3c,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0x9f,0xff,0xaf,0xdf,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff, ++0xbf,0xef,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xbf,0xff,0xff,0xff,0xc3, ++0xf0,0x3f,0xff,0xff,0xff,0xfe,0xf0,0xff,0xfd,0xff,0xff,0xff,0xfb,0xff,0xbb,0xff, ++0xff,0xff,0x7f,0xf6,0xff,0x7f,0xfb,0xfd,0xed,0xff,0xf1,0xff,0xfe,0x7f,0xff,0xff, ++0xff,0x5f,0xff,0xf7,0xff,0x7e,0xff,0xfd,0xff,0xef,0xff,0xff,0xff,0xef,0xf0,0xf0, ++0x8f,0xff,0xff,0xff,0xfe,0xf8,0x30,0x80,0x00,0x04,0x00,0x00,0x40,0x02,0x00,0x03, ++0x00,0x05,0x04,0x20,0x00,0x00,0x01,0xd0,0x00,0x81,0x00,0x20,0x04,0x04,0x00,0x00, ++0x81,0x04,0x08,0x80,0x10,0x00,0xc0,0x00,0x00,0x00,0x20,0x00,0x08,0xc1,0xf0,0x6f, ++0xff,0xff,0xff,0xfe,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xf3,0xfd,0xff,0xed,0xfc, ++0xff,0xff,0x9f,0xfb,0xfd,0xff,0xff,0xff,0xf1,0xff,0xff,0x7f,0xfb,0x3e,0xff,0x9f, ++0xff,0xff,0xff,0xff,0xfd,0xf9,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xf0,0x6f,0xff, ++0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xcf,0xff,0xff, ++0xff,0xfe,0xff,0xff,0xff,0xfd,0xbd,0xff,0xef,0x7c,0xeb,0x7f,0xfb,0xdb,0xfa,0xdc, ++0xee,0xf7,0xf6,0xd7,0xf5,0x2d,0xa1,0xbb,0xdd,0xee,0xf7,0x54,0xf7,0xfb,0x2c,0xb5, ++0xb4,0xbd,0x6b,0x6f,0xef,0x6f,0xbb,0xdf,0xff,0xff,0xff,0xf0,0x1f,0xff,0xff,0xff, ++0xfe,0xbf,0xff,0xff,0xff,0xfb,0xff,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xff,0xbf,0xef, ++0x6f,0xff,0x6f,0xfa,0xdb,0xf1,0xc5,0xbd,0xf5,0x6f,0xff,0x6f,0xca,0xdb,0xff,0xdb, ++0xfb,0xf6,0x97,0xf6,0xff,0xfd,0xbf,0xfe,0xf7,0xff,0xd0,0x9f,0xff,0xff,0xff,0xfe, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x8b,0x7f,0xff,0xff,0xe7,0x63,0xff,0xff, ++0xff,0xfc,0x77,0xdf,0xf1,0xdb,0xff,0xd6,0xa8,0x3f,0xff,0xff,0x08,0x2f,0xf0,0xff, ++0xc3,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0x5f,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x8b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xfc,0xff,0xcf,0xf1,0xdb,0xff,0xd6,0xa8,0x3f,0xff,0xff,0x08,0x2f,0xf0,0xff,0xc3, ++0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xf5,0xbf,0xff,0xca,0xff,0x9f,0xff,0xfa,0xb9,0xe7, ++0x9f,0xf3,0x81,0xff,0xff,0xfc,0x73,0xd7,0xff,0xff,0x77,0xff,0xfd,0xff,0xfc,0xff, ++0xff,0xff,0xff,0xcf,0xff,0xff,0xff,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff, ++0xff,0xf7,0xde,0xff,0xfe,0x7e,0xff,0xbf,0xff,0xbf,0xf1,0xb3,0xff,0xff,0xe3,0xfb, ++0xff,0xe1,0x1f,0x7f,0xff,0xf8,0x78,0xff,0xfb,0x1e,0xff,0xf7,0xfe,0xe7,0xff,0xff, ++0xff,0xbf,0xff,0xff,0xff,0xfa,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x04,0x00, ++0x01,0x80,0x40,0x40,0x20,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, ++0x80,0x00,0x00,0x01,0x3c,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xfb,0xff, ++0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xf7,0xf1, ++0xfd,0xff,0xff,0xff,0xdf,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff, ++0xff,0xff,0xff,0xdb,0xf0,0x8f,0xff,0xff,0xff,0xfe,0xf0,0xff,0xdf,0xff,0xff,0x7f, ++0xff,0xff,0xff,0xbe,0xd7,0xff,0xed,0xbd,0x7e,0xbf,0xfe,0xf6,0x7f,0xbf,0x71,0xff, ++0xff,0xda,0xff,0xf9,0xff,0xbf,0x7f,0xfe,0xff,0x6f,0x7f,0xff,0xff,0xff,0xff,0xff, ++0x7f,0xff,0xd0,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xf8,0x30,0x42,0x00,0x00,0x00,0x00, ++0x80,0xc1,0x00,0x00,0x90,0x00,0xc4,0x00,0x00,0x12,0x20,0x43,0x22,0x81,0x84,0x00, ++0x00,0x14,0x00,0x01,0x00,0x08,0x80,0x00,0x02,0x00,0x02,0x00,0x04,0x02,0x00,0x00, ++0x10,0xc1,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xff,0xff,0xfd,0xff,0xff,0xdd,0xfe,0xff, ++0xb6,0x76,0xe5,0xbc,0xf9,0xf7,0xaf,0x5f,0xbf,0xfc,0xdf,0xcf,0xf1,0xff,0xef,0x79, ++0xff,0xbd,0xff,0xef,0xff,0xff,0xf7,0x6f,0x5f,0xff,0xff,0xfd,0xef,0xef,0xbf,0xff, ++0xff,0xf0,0x9f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xf0,0xff,0xff,0xff,0xff,0xfe,0xdb,0xff,0xff,0xfd,0x2d,0xff,0x69,0x2a,0xef,0x77, ++0xbb,0xdd,0x5a,0xdf,0xf6,0xf6,0xd6,0xf7,0x7d,0xbd,0xd1,0xb2,0x4a,0xd6,0xb2,0xbe, ++0x97,0xf5,0xbd,0xb3,0xad,0xff,0xef,0x7f,0x69,0x6b,0xfb,0xdf,0xff,0xff,0xff,0xf0, ++0x2f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,0xf6,0xfe,0x9f,0xd4,0xbf, ++0xed,0xaf,0xff,0x6b,0x6f,0xf7,0xff,0xdd,0xdb,0x31,0xfd,0xbf,0xff,0x6f,0x7f,0xff, ++0xff,0xdb,0xff,0xcb,0xdf,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xfe,0xf7,0xff,0xd0,0x8f, ++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0x1f,0xff,0x46,0x2f,0x9f,0xff,0xff,0xff, ++0xa5,0xff,0xff,0xff,0xdf,0xb7,0xff,0xff,0xf1,0xff,0xff,0xff,0xf7,0xe9,0x6a,0xbf, ++0xff,0xff,0xfd,0xff,0xff,0xfd,0x55,0x57,0xff,0xff,0xff,0xff,0xaf,0xf0,0x4f,0xff, ++0xff,0xff,0xfe,0xfe,0xdf,0xff,0xfd,0x1f,0xff,0x46,0x2f,0x9f,0xff,0xff,0xff,0xa5, ++0xff,0xff,0xff,0xc0,0x37,0xff,0xff,0xf1,0x99,0x8e,0xdc,0x7f,0xe9,0x6a,0xbf,0xff, ++0xf0,0x0f,0xff,0xff,0xfd,0x55,0x57,0xff,0xff,0xff,0xff,0xff,0xf0,0x0f,0xff,0xff, ++0xff,0xfe,0xff,0xff,0xff,0xff,0x07,0xff,0xc0,0xbe,0xff,0xff,0xcf,0xef,0x9f,0xff, ++0xff,0xfb,0xff,0xe7,0xff,0xff,0xa1,0xe3,0xce,0x3c,0x58,0x3f,0xf3,0xff,0xfd,0xef, ++0xf9,0xff,0xff,0xf7,0xf1,0x7f,0xff,0xcb,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff, ++0xfe,0xf5,0x7f,0xff,0xf0,0xff,0xfe,0xff,0xc4,0x75,0xe7,0xb9,0xff,0xff,0xff,0xef, ++0xff,0xc7,0x37,0x3b,0xff,0xf0,0x13,0x9e,0x0f,0xf4,0xff,0xfe,0xfb,0xff,0xff,0xf9, ++0xfc,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xfa,0xf0,0xef,0xff,0xff,0xff,0xfe, ++0xf3,0xc0,0x01,0x00,0x00,0x02,0x00,0x02,0x22,0x00,0x00,0xc0,0x40,0x00,0x40,0x00, ++0x04,0x08,0x04,0x0a,0x01,0x01,0x10,0x20,0x20,0x00,0x00,0x04,0x08,0x08,0x04,0x00, ++0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x3c,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xfd, ++0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0x7f,0xff,0x7f,0xff,0xcf,0x9d,0xff, ++0xff,0xf7,0xfd,0xf1,0xff,0xff,0xff,0xee,0xbf,0xff,0xff,0xff,0xff,0xfe,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdb,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xf0,0xff, ++0xff,0xff,0xf7,0xf7,0xff,0xff,0xfe,0xbf,0xf7,0xff,0xff,0x5b,0xff,0xbf,0xf7,0xff, ++0xfd,0x7f,0x71,0xfd,0xff,0xed,0xf7,0xfe,0xef,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, ++0xff,0xff,0xef,0xff,0x7f,0xff,0xd0,0xf0,0xff,0xff,0xff,0xff,0xfe,0xf8,0x30,0x11, ++0x00,0x48,0x60,0x40,0x82,0x60,0x24,0x60,0x00,0xcc,0x00,0x80,0x04,0x01,0x00,0x00, ++0x14,0x01,0x0c,0x04,0x00,0x30,0x00,0x00,0x00,0x08,0x08,0x00,0x01,0x00,0xc2,0x00, ++0x00,0x02,0x00,0x80,0x00,0xc1,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff, ++0xf7,0x7b,0xff,0xf3,0xeb,0xbf,0xff,0xf7,0xff,0xff,0xff,0xe7,0x5d,0x3f,0xff,0xf6, ++0xd1,0xfd,0xff,0xeb,0xf7,0x3d,0xff,0xff,0xff,0x5f,0xff,0x7f,0x7f,0xf3,0xff,0xff, ++0xef,0xfd,0xbf,0xff,0xff,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf5,0xb5,0xdf, ++0x6f,0x7d,0x69,0x7f,0xfb,0xdf,0x52,0x5f,0xf6,0xf7,0xfe,0xf6,0xf3,0xbd,0xb1,0xda, ++0xcd,0xfe,0xf6,0xee,0xd2,0xbd,0xa5,0xaf,0xbd,0xff,0x6f,0x7c,0xeb,0x2b,0xfa,0xda, ++0xff,0xfe,0xdf,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,0xf6, ++0xff,0xf6,0xff,0xbd,0xbf,0xcd,0xbf,0xeb,0x6f,0xf7,0x6f,0xdf,0xdb,0x51,0xfd,0xbd, ++0xff,0x6f,0xff,0x6f,0xfb,0x5b,0xff,0xdb,0xff,0xf6,0xfe,0xf6,0xfd,0xfd,0xbf,0xfe, ++0xf7,0xff,0xd0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfa,0x50,0xff,0xff,0xff, ++0xf0,0x6f,0xff,0xff,0xf0,0x96,0xff,0xff,0xc6,0x2b,0xff,0xff,0xf1,0xfc,0xff,0xff, ++0xf7,0xdb,0xc3,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xc1,0x4f,0xc3,0xff,0xff,0xff, ++0xaf,0xf0,0x9f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf5,0xa0,0xff,0xff,0xff,0xf0, ++0x6f,0xff,0xff,0xf0,0x96,0xff,0xff,0xc6,0x2b,0xff,0xff,0xf1,0x5a,0xff,0xff,0xff, ++0xf3,0xc3,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xc1,0x4f,0xc3,0xff,0xff,0xff,0xff, ++0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfc,0xff,0xff,0x9f,0xf0,0x7f, ++0xff,0xf9,0xfc,0x4f,0xf3,0xff,0x27,0xeb,0xff,0xfc,0x81,0xfc,0x7f,0xfe,0x7b,0xff, ++0xf7,0xff,0x12,0x7f,0xff,0xff,0xff,0xff,0x18,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, ++0x7f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xff,0xdf,0xfe,0xff,0xfc,0x7e,0x7f,0xbf, ++0xff,0xff,0xaf,0xef,0xff,0xdf,0xdf,0xfb,0xff,0xf1,0xc3,0xfe,0x6f,0xf1,0xcf,0x3f, ++0xfb,0xff,0xff,0xcf,0xfe,0xff,0xff,0xfe,0x7f,0xbf,0xff,0xff,0xbf,0xfa,0xf0,0xdf, ++0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00, ++0x20,0x00,0x01,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x02,0x80,0x00,0x02,0x3c,0xf0,0x2f,0xff, ++0xff,0xff,0xfe,0xfd,0xbf,0xff,0xfb,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xf5,0xf1,0xff,0x7f,0xff,0xff,0xff,0xff,0xef,0xff, ++0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xdb,0xf0,0x2f,0xff,0xff, ++0xff,0xfe,0xf0,0xff,0xff,0xff,0xfb,0xff,0xbf,0xff,0xff,0xff,0xff,0xf7,0xbf,0xfb, ++0xff,0xff,0xff,0xdf,0xf7,0xff,0xf1,0xf7,0xbf,0xfb,0xff,0xff,0xff,0x7f,0xde,0xff, ++0xff,0xff,0xff,0xff,0xff,0xed,0xf7,0xff,0xff,0x7f,0xd0,0xf0,0x3f,0xff,0xff,0xff, ++0xfe,0xf8,0x30,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0xe0,0x00,0x00,0x80, ++0x20,0x01,0x01,0x92,0x00,0x01,0x01,0x00,0xe0,0x1c,0x60,0x20,0x30,0x08,0x08,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0xc1,0xf0,0x6f,0xff,0xff,0xff,0xfe, ++0xff,0xff,0xff,0xff,0xff,0xdb,0xfe,0xff,0xff,0xdf,0xff,0xfc,0x7f,0xfb,0xbf,0xff, ++0xff,0xff,0xff,0xff,0xf1,0xf6,0xff,0xf7,0x7e,0x3f,0xff,0x7f,0xff,0xff,0xff,0xf7, ++0xff,0xff,0xff,0xed,0xff,0xdf,0xff,0xb7,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff, ++0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xbf,0xff,0xdf, ++0x57,0xef,0xf1,0xfd,0xfe,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xfb,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff, ++0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xdf,0xff, ++0xff,0xf1,0xfd,0xff,0x7f,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xfe,0xff,0xff,0xff,0xff,0xf0,0x9f,0xff,0xff,0xff,0xfe,0xf7,0xfd,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff, ++0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1, ++0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xfb,0xff,0xff,0xff,0xfe,0xff,0xff,0xfb,0x6f,0xff,0xfe,0xbf,0xff,0xf1,0xff, ++0xf7,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd, ++0xff,0xff,0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xfb,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0x57,0xff,0xfd,0xbf,0xff,0xf1,0xff,0xef, ++0xfe,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff, ++0xde,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf7,0xdb,0xff,0xdb,0xfd, ++0xf6,0xff,0xf6,0xff,0x3c,0xbc,0xbc,0xbf,0xdf,0x6f,0xe7,0x2f,0xf1,0x3c,0xbf,0xfd, ++0xbf,0xdf,0x6f,0xff,0x6f,0xf7,0xdb,0xff,0xdb,0xfd,0xf6,0xff,0xf6,0xff,0xff,0xff, ++0x02,0x01,0xdf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff }; +diff -u --recursive --new-file linux.prev/drivers/net/yam.c linux/drivers/net/yam.c +--- linux.prev/drivers/net/yam.c Thu Jan 1 00:00:00 1970 ++++ linux/drivers/net/yam.c Sat Sep 12 22:54:35 1998 +@@ -0,0 +1,1330 @@ ++/*****************************************************************************/ ++ ++/* ++ * yam.c -- YAM radio modem driver. ++ * ++ * Copyright (C) 1998 Frederic Rible F1OAT (frible@teaser.fr) ++ * Adapted from baycom.c driver written by Thomas Sailer (sailer@ife.ee.ethz.ch) ++ * ++ * 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. ++ * ++ * Please note that the GPL allows you to use the driver, NOT the radio. ++ * In order to use the radio, you need a license from the communications ++ * authority of your country. ++ * ++ * ++ * History: ++ * 0.0 F1OAT 06.06.98 Begin of work with baycom.c source code V 0.3 ++ * 0.1 F1OAT 07.06.98 Add timer polling routine for channel arbitration ++ * 0.2 F6FBB 08.06.98 Added delay after FPGA programming ++ * 0.3 F6FBB 29.07.98 Delayed PTT implementation for dupmode=2 ++ * 0.4 F6FBB 30.07.98 Added TxTail, Slottime and Persistance ++ * 0.5 F6FBB 01.08.98 Shared IRQs, /proc/net and network statistics ++ * 0.6 F6FBB 25.08.98 Added 1200Bds format ++ * 0.7 F6FBB 12.09.98 Added to the kernel configuration ++ */ ++ ++/*****************************************************************************/ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE) ++/* prototypes for ax25_encapsulate and ax25_rebuild_header */ ++#include ++#endif /* CONFIG_AX25 || CONFIG_AX25_MODULE */ ++ ++/* make genksyms happy */ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include ++#include "yam9600.h" ++#include "yam1200.h" ++ ++/* --------------------------------------------------------------------- */ ++ ++/* ++ * currently this module is supposed to support both module styles, i.e. ++ * the old one present up to about 2.1.9, and the new one functioning ++ * starting with 2.1.21. The reason is I have a kit allowing to compile ++ * this module also under 2.0.x which was requested by several people. ++ * This will go in 2.2 ++ */ ++#include ++ ++#if LINUX_VERSION_CODE >= 0x20100 ++#include ++#else ++#include ++#include ++ ++#undef put_user ++#undef get_user ++ ++#define put_user(x,ptr) ({ __put_user((unsigned long)(x),(ptr),sizeof(*(ptr))); 0; }) ++#define get_user(x,ptr) ({ x = ((__typeof__(*(ptr)))__get_user((ptr),sizeof(*(ptr)))); 0; }) ++ ++extern inline int copy_from_user(void *to, const void *from, unsigned long n) ++{ ++ int i = verify_area(VERIFY_READ, from, n); ++ if (i) ++ return i; ++ memcpy_fromfs(to, from, n); ++ return 0; ++} ++ ++extern inline int copy_to_user(void *to, const void *from, unsigned long n) ++{ ++ int i = verify_area(VERIFY_WRITE, to, n); ++ if (i) ++ return i; ++ memcpy_tofs(to, from, n); ++ return 0; ++} ++#endif ++ ++#if LINUX_VERSION_CODE < 0x20115 ++extern __inline__ void dev_init_buffers(struct device *dev) ++{ ++ int i; ++ for(i=0;ibuffs[i]); ++ } ++} ++#endif ++ ++#if LINUX_VERSION_CODE >= 0x20123 ++#include ++#else ++#define __init ++#define __initdata ++#define __initfunc(x) x ++#endif ++ ++/* --------------------------------------------------------------------- */ ++ ++static const char yam_drvname[] = "yam"; ++static const char yam_drvinfo[] = KERN_INFO "yam: (C) 1998 Frederic Rible F1OAT\n" ++KERN_INFO "yam: version 0.7 compiled " __TIME__ " " __DATE__ "\n"; ++ ++/* --------------------------------------------------------------------- */ ++ ++#define YAM_9600 1 ++#define YAM_1200 2 ++ ++#define NR_PORTS 4 ++#define YAM_MAGIC 0xF10A7654 ++ ++/* Transmitter states */ ++ ++#define TX_OFF 0 ++#define TX_HEAD 1 ++#define TX_DATA 2 ++#define TX_CRC1 3 ++#define TX_CRC2 4 ++#define TX_TAIL 5 ++ ++#define YAM_MAX_FRAME 1024 ++ ++#define DEFAULT_BITRATE 9600 /* bps */ ++#define DEFAULT_HOLDD 10 /* sec */ ++#define DEFAULT_TXD 300 /* ms */ ++#define DEFAULT_TXTAIL 10 /* ms */ ++#define DEFAULT_SLOT 100 /* ms */ ++#define DEFAULT_PERS 64 /* 0->255 */ ++ ++struct yam_port { ++ int magic; ++ int bitrate; ++ int baudrate; ++ int iobase; ++ int irq; ++ int dupmode; ++ char name[16]; ++ ++ struct device dev; ++ ++ /* Stats section */ ++ ++#if LINUX_VERSION_CODE < 0x20119 ++ struct enet_statistics stats; ++#else ++ struct net_device_stats stats; ++#endif ++ int nb_rxint; ++ int nb_mdint; ++ ++ /* Parameters section */ ++ ++ int txd; /* tx delay */ ++ int holdd; /* duplex ptt delay */ ++ int txtail; /* txtail delay */ ++ int slot; /* slottime */ ++ int pers; /* persistence */ ++ ++ /* Tx section */ ++ ++ int tx_state; ++ int tx_count; ++ int slotcnt; ++ unsigned char tx_buf[YAM_MAX_FRAME]; ++ int tx_len; ++ int tx_crcl, tx_crch; ++ struct sk_buff_head send_queue; /* Packets awaiting transmission */ ++ ++ /* Rx section */ ++ ++ int dcd; ++ unsigned char rx_buf[YAM_MAX_FRAME]; ++ int rx_len; ++ int rx_crcl, rx_crch; ++}; ++ ++struct yam_mcs { ++ unsigned char bits[YAM_FPGA_SIZE]; ++ int bitrate; ++ struct yam_mcs *next; ++}; ++ ++static struct yam_port yam_ports[NR_PORTS]; ++ ++static struct yam_mcs *yam_data = NULL; ++ ++static unsigned irqs[16]; ++ ++static char ax25_bcast[7] = ++{'Q' << 1, 'S' << 1, 'T' << 1, ' ' << 1, ' ' << 1, ' ' << 1, '0' << 1}; ++static char ax25_test[7] = ++{'L' << 1, 'I' << 1, 'N' << 1, 'U' << 1, 'X' << 1, ' ' << 1, '1' << 1}; ++ ++static struct timer_list yam_timer; ++ ++/* --------------------------------------------------------------------- */ ++ ++#define RBR(iobase) (iobase+0) ++#define THR(iobase) (iobase+0) ++#define IER(iobase) (iobase+1) ++#define IIR(iobase) (iobase+2) ++#define FCR(iobase) (iobase+2) ++#define LCR(iobase) (iobase+3) ++#define MCR(iobase) (iobase+4) ++#define LSR(iobase) (iobase+5) ++#define MSR(iobase) (iobase+6) ++#define SCR(iobase) (iobase+7) ++#define DLL(iobase) (iobase+0) ++#define DLM(iobase) (iobase+1) ++ ++#define YAM_EXTENT 8 ++ ++/* Interrupt Identification Register Bit Masks */ ++#define IIR_NOPEND 1 ++#define IIR_MSR 0 ++#define IIR_TX 2 ++#define IIR_RX 4 ++#define IIR_LSR 6 ++#define IIR_TIMEOUT 12 /* Fifo mode only */ ++ ++#define IIR_MASK 0x0F ++ ++/* Interrupt Enable Register Bit Masks */ ++#define IER_RX 1 /* enable rx interrupt */ ++#define IER_TX 2 /* enable tx interrupt */ ++#define IER_LSR 4 /* enable line status interrupts */ ++#define IER_MSR 8 /* enable modem status interrupts */ ++ ++/* Modem Control Register Bit Masks */ ++#define MCR_DTR 0x01 /* DTR output */ ++#define MCR_RTS 0x02 /* RTS output */ ++#define MCR_OUT1 0x04 /* OUT1 output (not accessible in RS232) */ ++#define MCR_OUT2 0x08 /* Master Interrupt enable (must be set on PCs) */ ++#define MCR_LOOP 0x10 /* Loopback enable */ ++ ++/* Modem Status Register Bit Masks */ ++#define MSR_DCTS 0x01 /* Delta CTS input */ ++#define MSR_DDSR 0x02 /* Delta DSR */ ++#define MSR_DRIN 0x04 /* Delta RI */ ++#define MSR_DDCD 0x08 /* Delta DCD */ ++#define MSR_CTS 0x10 /* CTS input */ ++#define MSR_DSR 0x20 /* DSR input */ ++#define MSR_RING 0x40 /* RI input */ ++#define MSR_DCD 0x80 /* DCD input */ ++ ++/* line status register bit mask */ ++#define LSR_RXC 0x01 ++#define LSR_OE 0x02 ++#define LSR_PE 0x04 ++#define LSR_FE 0x08 ++#define LSR_BREAK 0x10 ++#define LSR_THRE 0x20 ++#define LSR_TSRE 0x40 ++ ++/* Line Control Register Bit Masks */ ++#define LCR_DLAB 0x80 ++#define LCR_BREAK 0x40 ++#define LCR_PZERO 0x28 ++#define LCR_PEVEN 0x18 ++#define LCR_PODD 0x08 ++#define LCR_STOP1 0x00 ++#define LCR_STOP2 0x04 ++#define LCR_BIT5 0x00 ++#define LCR_BIT6 0x02 ++#define LCR_BIT7 0x01 ++#define LCR_BIT8 0x03 ++ ++/* YAM Modem <-> UART Port mapping */ ++ ++#define TX_RDY MSR_DCTS /* transmitter ready to send */ ++#define RX_DCD MSR_DCD /* carrier detect */ ++#define RX_FLAG MSR_RING /* hdlc flag received */ ++#define FPGA_DONE MSR_DSR /* FPGA is configured */ ++#define PTT_ON (MCR_RTS|MCR_OUT2) /* activate PTT */ ++#define PTT_OFF (MCR_DTR|MCR_OUT2) /* release PTT */ ++ ++#define ENABLE_RXINT IER_RX /* enable uart rx interrupt during rx */ ++#define ENABLE_TXINT IER_MSR /* enable uart ms interrupt during tx */ ++#define ENABLE_RTXINT (IER_RX|IER_MSR) /* full duplex operations */ ++ ++#define MIN(a, b) (((a) < (b)) ? (a) : (b)) ++#define MAX(a, b) (((a) > (b)) ? (a) : (b)) ++ ++/************************************************************************* ++* CRC Tables ++************************************************************************/ ++ ++static const unsigned char chktabl[256]= ++{ 0x00,0x89,0x12,0x9b,0x24,0xad,0x36,0xbf,0x48,0xc1,0x5a,0xd3,0x6c,0xe5,0x7e, ++ 0xf7,0x81,0x08,0x93,0x1a,0xa5,0x2c,0xb7,0x3e,0xc9,0x40,0xdb,0x52,0xed,0x64, ++ 0xff,0x76,0x02,0x8b,0x10,0x99,0x26,0xaf,0x34,0xbd,0x4a,0xc3,0x58,0xd1,0x6e, ++ 0xe7,0x7c,0xf5,0x83,0x0a,0x91,0x18,0xa7,0x2e,0xb5,0x3c,0xcb,0x42,0xd9,0x50, ++ 0xef,0x66,0xfd,0x74,0x04,0x8d,0x16,0x9f,0x20,0xa9,0x32,0xbb,0x4c,0xc5,0x5e, ++ 0xd7,0x68,0xe1,0x7a,0xf3,0x85,0x0c,0x97,0x1e,0xa1,0x28,0xb3,0x3a,0xcd,0x44, ++ 0xdf,0x56,0xe9,0x60,0xfb,0x72,0x06,0x8f,0x14,0x9d,0x22,0xab,0x30,0xb9,0x4e, ++ 0xc7,0x5c,0xd5,0x6a,0xe3,0x78,0xf1,0x87,0x0e,0x95,0x1c,0xa3,0x2a,0xb1,0x38, ++ 0xcf,0x46,0xdd,0x54,0xeb,0x62,0xf9,0x70,0x08,0x81,0x1a,0x93,0x2c,0xa5,0x3e, ++ 0xb7,0x40,0xc9,0x52,0xdb,0x64,0xed,0x76,0xff,0x89,0x00,0x9b,0x12,0xad,0x24, ++ 0xbf,0x36,0xc1,0x48,0xd3,0x5a,0xe5,0x6c,0xf7,0x7e,0x0a,0x83,0x18,0x91,0x2e, ++ 0xa7,0x3c,0xb5,0x42,0xcb,0x50,0xd9,0x66,0xef,0x74,0xfd,0x8b,0x02,0x99,0x10, ++ 0xaf,0x26,0xbd,0x34,0xc3,0x4a,0xd1,0x58,0xe7,0x6e,0xf5,0x7c,0x0c,0x85,0x1e, ++ 0x97,0x28,0xa1,0x3a,0xb3,0x44,0xcd,0x56,0xdf,0x60,0xe9,0x72,0xfb,0x8d,0x04, ++ 0x9f,0x16,0xa9,0x20,0xbb,0x32,0xc5,0x4c,0xd7,0x5e,0xe1,0x68,0xf3,0x7a,0x0e, ++ 0x87,0x1c,0x95,0x2a,0xa3,0x38,0xb1,0x46,0xcf,0x54,0xdd,0x62,0xeb,0x70,0xf9, ++ 0x8f,0x06,0x9d,0x14,0xab,0x22,0xb9,0x30,0xc7,0x4e,0xd5,0x5c,0xe3,0x6a,0xf1, ++ 0x78}; ++static const unsigned char chktabh[256]= ++{ 0x00,0x11,0x23,0x32,0x46,0x57,0x65,0x74,0x8c,0x9d,0xaf,0xbe,0xca,0xdb,0xe9, ++ 0xf8,0x10,0x01,0x33,0x22,0x56,0x47,0x75,0x64,0x9c,0x8d,0xbf,0xae,0xda,0xcb, ++ 0xf9,0xe8,0x21,0x30,0x02,0x13,0x67,0x76,0x44,0x55,0xad,0xbc,0x8e,0x9f,0xeb, ++ 0xfa,0xc8,0xd9,0x31,0x20,0x12,0x03,0x77,0x66,0x54,0x45,0xbd,0xac,0x9e,0x8f, ++ 0xfb,0xea,0xd8,0xc9,0x42,0x53,0x61,0x70,0x04,0x15,0x27,0x36,0xce,0xdf,0xed, ++ 0xfc,0x88,0x99,0xab,0xba,0x52,0x43,0x71,0x60,0x14,0x05,0x37,0x26,0xde,0xcf, ++ 0xfd,0xec,0x98,0x89,0xbb,0xaa,0x63,0x72,0x40,0x51,0x25,0x34,0x06,0x17,0xef, ++ 0xfe,0xcc,0xdd,0xa9,0xb8,0x8a,0x9b,0x73,0x62,0x50,0x41,0x35,0x24,0x16,0x07, ++ 0xff,0xee,0xdc,0xcd,0xb9,0xa8,0x9a,0x8b,0x84,0x95,0xa7,0xb6,0xc2,0xd3,0xe1, ++ 0xf0,0x08,0x19,0x2b,0x3a,0x4e,0x5f,0x6d,0x7c,0x94,0x85,0xb7,0xa6,0xd2,0xc3, ++ 0xf1,0xe0,0x18,0x09,0x3b,0x2a,0x5e,0x4f,0x7d,0x6c,0xa5,0xb4,0x86,0x97,0xe3, ++ 0xf2,0xc0,0xd1,0x29,0x38,0x0a,0x1b,0x6f,0x7e,0x4c,0x5d,0xb5,0xa4,0x96,0x87, ++ 0xf3,0xe2,0xd0,0xc1,0x39,0x28,0x1a,0x0b,0x7f,0x6e,0x5c,0x4d,0xc6,0xd7,0xe5, ++ 0xf4,0x80,0x91,0xa3,0xb2,0x4a,0x5b,0x69,0x78,0x0c,0x1d,0x2f,0x3e,0xd6,0xc7, ++ 0xf5,0xe4,0x90,0x81,0xb3,0xa2,0x5a,0x4b,0x79,0x68,0x1c,0x0d,0x3f,0x2e,0xe7, ++ 0xf6,0xc4,0xd5,0xa1,0xb0,0x82,0x93,0x6b,0x7a,0x48,0x59,0x2d,0x3c,0x0e,0x1f, ++ 0xf7,0xe6,0xd4,0xc5,0xb1,0xa0,0x92,0x83,0x7b,0x6a,0x58,0x49,0x3d,0x2c,0x1e, ++ 0x0f}; ++ ++/************************************************************************* ++* FPGA functions ++************************************************************************/ ++ ++static void delay(int ms) ++{ ++ unsigned long timeout = jiffies + ((ms*HZ)/1000); ++ while (jiffies < timeout); ++} ++ ++/* ++ * reset FPGA ++ */ ++ ++static void fpga_reset(int iobase) ++{ ++ outb(0, IER(iobase)); ++ outb(LCR_DLAB|LCR_BIT5, LCR(iobase)); ++ outb(1, DLL(iobase)); ++ outb(0, DLM(iobase)); ++ ++ outb(LCR_BIT5, LCR(iobase)); ++ inb(LSR(iobase)); ++ inb(MSR(iobase)); ++ /* turn off FPGA supply voltage */ ++ outb(MCR_OUT1|MCR_OUT2, MCR(iobase)); ++ delay(100); ++ /* turn on FPGA supply voltage again */ ++ outb(MCR_DTR|MCR_RTS|MCR_OUT1|MCR_OUT2, MCR(iobase)); ++ delay(100); ++} ++ ++/* ++ * send one byte to FPGA ++ */ ++ ++static int fpga_write(int iobase, unsigned char wrd) ++{ ++ unsigned char bit; ++ int k; ++ unsigned long timeout = jiffies + HZ/10; ++ ++ for (k=0; k<8; k++) { ++ bit = (wrd&0x80)?(MCR_RTS|MCR_DTR):MCR_DTR; ++ outb(bit|MCR_OUT1|MCR_OUT2, MCR(iobase)); ++ wrd <<=1 ; ++ outb(0xfc, THR(iobase)); ++ while ((inb(LSR(iobase)) & LSR_TSRE) == 0) ++ if (jiffies > timeout) return -1; ++ } ++ ++ return 0; ++} ++ ++#ifdef MODULE ++static void free_mcs(void) ++{ ++ struct yam_mcs *p; ++ ++ while (yam_data) { ++ p = yam_data; ++ yam_data = yam_data->next; ++ kfree(p); ++ } ++} ++#endif ++ ++static unsigned char *add_mcs(unsigned char *bits, int bitrate) ++{ ++ struct yam_mcs *p; ++ ++ /* If it already exists, replace the bit data */ ++ p = yam_data; ++ while (p) { ++ if (p->bitrate == bitrate) { ++ memcpy(p->bits, bits, YAM_FPGA_SIZE); ++ return p->bits; ++ } ++ p = p->next; ++ } ++ ++ /* Allocate a new mcs */ ++ p = kmalloc(sizeof(struct yam_mcs), GFP_ATOMIC); ++ if (p == NULL) { ++ printk(KERN_WARNING "YAM: no memory to allocate mcs\n"); ++ return NULL; ++ } ++ ++ memcpy(p->bits, bits, YAM_FPGA_SIZE); ++ p->bitrate = bitrate; ++ p->next = yam_data; ++ yam_data = p; ++ ++ return p->bits; ++} ++ ++static unsigned char *get_mcs(int bitrate) ++{ ++ struct yam_mcs *p; ++ ++ p = yam_data; ++ while (p) { ++ if (p->bitrate == bitrate) ++ return p->bits; ++ p = p->next; ++ } ++ ++ /* Load predefined mcs data */ ++ switch (bitrate) { ++ case 1200 : ++ return add_mcs(bits_1200, bitrate); ++ default : ++ return add_mcs(bits_9600, bitrate); ++ } ++} ++ ++/* ++ * download bitstream to FPGA ++ * data is contained in bits[] array in fpgaconf.h ++ */ ++ ++static int fpga_download(int iobase, int bitrate) ++{ ++ int i, rc; ++ unsigned char *pbits; ++ ++ pbits = get_mcs(bitrate); ++ if (pbits == NULL) ++ return -1; ++ ++ fpga_reset(iobase); ++ for(i = 0 ; i < YAM_FPGA_SIZE ; i++) { ++ if (fpga_write(iobase, pbits[i])) { ++ printk("yam: error in write cycle\n"); ++ return -1; /* write... */ ++ } ++ } ++ ++ fpga_write(iobase, 0xFF); ++ rc = inb(MSR(iobase)); /* check DONE signal */ ++ ++ /* Necesary for some hardwares */ ++ delay(50); ++ ++ return (rc & MSR_DSR) ? 0 : -1; ++} ++ ++ ++/************************************************************************ ++* Serial port init ++************************************************************************/ ++ ++static void yam_set_uart(struct device *dev) ++{ ++ struct yam_port *yp = (struct yam_port *)dev->priv; ++ int divisor = 115200/yp->baudrate; ++ ++ outb(0, IER(dev->base_addr)); ++ outb(LCR_DLAB|LCR_BIT8, LCR(dev->base_addr)); ++ outb(divisor, DLL(dev->base_addr)); ++ outb(0, DLM(dev->base_addr)); ++ outb(LCR_BIT8, LCR(dev->base_addr)); ++ outb(PTT_OFF, MCR(dev->base_addr)); ++ outb(0x00, FCR(dev->base_addr)); ++ ++ /* Flush pending irq */ ++ ++ inb(RBR(dev->base_addr)); ++ inb(MSR(dev->base_addr)); ++ ++ /* Enable rx irq */ ++ ++ outb(ENABLE_RTXINT, IER(dev->base_addr)); ++ /* if (yp->dupmode) { ++ outb(ENABLE_RTXINT, IER(dev->base_addr)); ++ } ++ else { ++ outb(ENABLE_RXINT, IER(dev->base_addr)); ++ outb(ENABLE_RTXINT, IER(dev->base_addr)); ++ } */ ++} ++ ++ ++/* --------------------------------------------------------------------- */ ++ ++enum uart { c_uart_unknown, c_uart_8250, ++ c_uart_16450, c_uart_16550, c_uart_16550A}; ++static const char *uart_str[] = ++ { "unknown", "8250", "16450", "16550", "16550A" }; ++ ++static enum uart yam_check_uart(unsigned int iobase) ++{ ++ unsigned char b1,b2,b3; ++ enum uart u; ++ enum uart uart_tab[] = ++ { c_uart_16450, c_uart_unknown, c_uart_16550, c_uart_16550A }; ++ ++ b1 = inb(MCR(iobase)); ++ outb(b1 | 0x10, MCR(iobase)); /* loopback mode */ ++ b2 = inb(MSR(iobase)); ++ outb(0x1a, MCR(iobase)); ++ b3 = inb(MSR(iobase)) & 0xf0; ++ outb(b1, MCR(iobase)); /* restore old values */ ++ outb(b2, MSR(iobase)); ++ if (b3 != 0x90) ++ return c_uart_unknown; ++ inb(RBR(iobase)); ++ inb(RBR(iobase)); ++ outb(0x01, FCR(iobase)); /* enable FIFOs */ ++ u = uart_tab[(inb(IIR(iobase)) >> 6) & 3]; ++ if (u == c_uart_16450) { ++ outb(0x5a, SCR(iobase)); ++ b1 = inb(SCR(iobase)); ++ outb(0xa5, SCR(iobase)); ++ b2 = inb(SCR(iobase)); ++ if ((b1 != 0x5a) || (b2 != 0xa5)) ++ u = c_uart_8250; ++ } ++ return u; ++} ++ ++/****************************************************************************** ++* Rx Section ++******************************************************************************/ ++static void inline yam_rx_flag(struct device *dev, struct yam_port *yp) ++{ ++ if (yp->dcd && yp->rx_len >= 3 && yp->rx_len < YAM_MAX_FRAME) { ++ int pkt_len = yp->rx_len - 2 + 1; /* -CRC + kiss */ ++ struct sk_buff *skb; ++ ++ if ((yp->rx_crch & yp->rx_crcl) != 0xFF) { ++ /* Bad crc */ ++ } ++ else { ++ if (!(skb = dev_alloc_skb(pkt_len))) { ++ printk("%s: memory squeeze, dropping packet\n", dev->name); ++ ++yp->stats.rx_dropped; ++ } ++ else { ++ unsigned char *cp; ++ skb->dev = dev; ++ cp = skb_put(skb, pkt_len); ++ *cp++ = 0; /* KISS kludge */ ++ memcpy(cp, yp->rx_buf, pkt_len - 1); ++ skb->protocol = htons(ETH_P_AX25); ++ skb->mac.raw = skb->data; ++ netif_rx(skb); ++ ++yp->stats.rx_packets; ++ } ++ } ++ } ++ yp->rx_len = 0; ++ yp->rx_crcl = 0x21; ++ yp->rx_crch = 0xf3; ++} ++ ++static void inline yam_rx_byte(struct device *dev, struct yam_port *yp, unsigned char rxb) ++{ ++ if (yp->rx_len < YAM_MAX_FRAME) { ++ unsigned char c = yp->rx_crcl; ++ yp->rx_crcl = (chktabl[c]^yp->rx_crch); ++ yp->rx_crch = (chktabh[c]^rxb); ++ yp->rx_buf[yp->rx_len++] = rxb; ++ } ++} ++ ++/******************************************************************************** ++* TX Section ++********************************************************************************/ ++ ++static void ptt_on(struct device *dev) ++{ ++ /* struct yam_port *yp = (struct yam_port *)dev->priv; */ ++ ++ outb(PTT_ON, MCR(dev->base_addr)); ++ /* inb(MSR(dev->base_addr)); ++ if (yp->dupmode) { ++ outb(ENABLE_RTXINT, IER(dev->base_addr)); ++ } ++ else { ++ outb(ENABLE_TXINT, IER(dev->base_addr)); ++ } */ ++} ++ ++static void ptt_off(struct device *dev) ++{ ++ /* struct yam_port *yp = (struct yam_port *)dev->priv; */ ++ ++ outb(PTT_OFF, MCR(dev->base_addr)); ++ /* if (yp->dupmode) { ++ outb(ENABLE_RTXINT, IER(dev->base_addr)); ++ } ++ else { ++ inb(RBR(dev->base_addr)); ++ outb(ENABLE_RXINT, IER(dev->base_addr)); ++ } */ ++} ++ ++static int yam_send_packet(struct sk_buff *skb, struct device *dev) ++{ ++ struct yam_port *yp = dev->priv; ++ ++ if (skb == NULL) { ++ dev_tint(dev); ++ return 0; ++ } ++ skb_queue_tail(&yp->send_queue, skb); ++ dev->trans_start = jiffies; ++ return 0; ++} ++ ++static void yam_start_tx(struct device *dev, struct yam_port *yp) ++{ ++ if ((yp->tx_state == TX_TAIL) || (yp->txd == 0)) ++ yp->tx_count = 1; ++ else ++ yp->tx_count = (yp->bitrate*yp->txd)/8000; ++ yp->tx_state = TX_HEAD; ++ ptt_on(dev); ++} ++ ++static unsigned short random_seed; ++ ++static inline unsigned short random_num(void) ++{ ++ random_seed = 28629 * random_seed + 157; ++ return random_seed; ++} ++ ++static void yam_arbitrate(struct device *dev) ++{ ++ struct yam_port *yp = dev->priv; ++ ++ if (!yp || yp->magic != YAM_MAGIC ++ || yp->tx_state!=TX_OFF || skb_queue_empty(&yp->send_queue)) { ++ return; ++ } ++ ++ /* tx_state is TX_OFF and there is data to send */ ++ ++ if (yp->dupmode) { ++ /* Full duplex mode, don't wait */ ++ yam_start_tx(dev, yp); ++ return; ++ } ++ ++ if (yp->dcd) { ++ /* DCD on, wait slotime ... */ ++ yp->slotcnt = yp->slot / 10; ++ return; ++ } ++ ++ /* Is slottime passed ? */ ++ if ((--yp->slotcnt) > 0) ++ return; ++ ++ yp->slotcnt = yp->slot / 10; ++ ++ /* is random > persist ? */ ++ if ((random_num() % 256) > yp->pers) ++ return; ++ ++ yam_start_tx(dev, yp); ++} ++ ++static void yam_dotimer(unsigned long dummy) ++{ ++ int i; ++ ++ for (i = 0; i < NR_PORTS; i++) { ++ struct device *dev = &yam_ports[i].dev; ++ if (dev->start) yam_arbitrate(dev); ++ } ++ yam_timer.expires = jiffies + HZ/100; ++ add_timer(&yam_timer); ++} ++ ++static void yam_tx_byte(struct device *dev, struct yam_port *yp) ++{ ++ struct sk_buff *skb; ++ unsigned char b, temp; ++ ++ switch (yp->tx_state) { ++ case TX_OFF: ++ break; ++ case TX_HEAD: ++ if (--yp->tx_count <= 0) { ++ if (!(skb = skb_dequeue(&yp->send_queue))) { ++ ptt_off(dev); ++ yp->tx_state = TX_OFF; ++ break; ++ } ++ yp->tx_state = TX_DATA; ++ if (skb->data[0] != 0) { ++/* do_kiss_params(s, skb->data, skb->len);*/ ++ dev_kfree_skb(skb, FREE_WRITE); ++ break; ++ } ++ yp->tx_len = skb->len-1; /* strip KISS byte */ ++ if (yp->tx_len >= YAM_MAX_FRAME || yp->tx_len < 2) { ++ dev_kfree_skb(skb, FREE_WRITE); ++ break; ++ } ++ memcpy(yp->tx_buf, skb->data+1, yp->tx_len); ++ dev_kfree_skb(skb, FREE_WRITE); ++ yp->tx_count = 0; ++ yp->tx_crcl = 0x21; ++ yp->tx_crch = 0xf3; ++ yp->tx_state = TX_DATA; ++ } ++ break; ++ case TX_DATA: ++ b = yp->tx_buf[yp->tx_count++]; ++ outb(b, THR(dev->base_addr)); ++ temp = yp->tx_crcl; ++ yp->tx_crcl = chktabl[temp]^yp->tx_crch; ++ yp->tx_crch = chktabh[temp]^b; ++ if (yp->tx_count >= yp->tx_len) { ++ yp->tx_state = TX_CRC1; ++ } ++ break; ++ case TX_CRC1: ++ yp->tx_crch = chktabl[yp->tx_crcl]^yp->tx_crch; ++ yp->tx_crcl = chktabh[yp->tx_crcl]^chktabl[yp->tx_crch]^0xff; ++ outb(yp->tx_crcl, THR(dev->base_addr)); ++ yp->tx_state = TX_CRC2; ++ break; ++ case TX_CRC2: ++ outb(chktabh[yp->tx_crch]^0xFF, THR(dev->base_addr)); ++ if (skb_queue_empty(&yp->send_queue)) { ++ yp->tx_count = (yp->bitrate*yp->txtail)/8000; ++ if (yp->dupmode == 2) yp->tx_count += (yp->bitrate*yp->holdd)/8; ++ if (yp->tx_count == 0) yp->tx_count = 1; ++ yp->tx_state = TX_TAIL; ++ } ++ else { ++ yp->tx_count = 1; ++ yp->tx_state = TX_HEAD; ++ } ++ ++yp->stats.tx_packets; ++ break; ++ case TX_TAIL: ++ if (--yp->tx_count <= 0) { ++ yp->tx_state = TX_OFF; ++ ptt_off(dev); ++ } ++ break; ++ } ++} ++ ++/*********************************************************************************** ++* ISR routine ++************************************************************************************/ ++ ++static void yam_interrupt(int irq, void *dev_id, struct pt_regs *regs) ++{ ++ struct device *dev; ++ struct yam_port *yp; ++ unsigned char iir; ++ int counter = 100; ++ int i; ++ ++ sti(); ++ ++ for (i = 0 ; i < NR_PORTS ; i++) { ++ yp = &yam_ports[i]; ++ dev = &yp->dev; ++ ++ if (!dev->start) ++ continue; ++ ++ while ( (iir = IIR_MASK & inb(IIR(dev->base_addr)) ) != IIR_NOPEND) { ++ unsigned char msr = inb(MSR(dev->base_addr)); ++ unsigned char lsr = inb(LSR(dev->base_addr)); ++ unsigned char rxb; ++ ++ if (lsr & LSR_OE) ++ ++yp->stats.rx_fifo_errors; ++ ++ yp->dcd = (msr & RX_DCD) ? 1 : 0; ++ ++ if (--counter <= 0) { ++ printk("%s: too many irq iir=%d\n", dev->name, iir); ++ return; ++ } ++ ++ if (msr & TX_RDY) { ++ ++yp->nb_mdint; ++ yam_tx_byte(dev, yp); ++ } ++ ++ if (lsr & LSR_RXC) { ++ ++yp->nb_rxint; ++ rxb = inb(RBR(dev->base_addr)); ++ if (msr & RX_FLAG) yam_rx_flag(dev, yp); ++ else yam_rx_byte(dev, yp, rxb); ++ } ++ /* ++ switch (iir) { ++ case IIR_MSR: ++ ++yp->nb_mdint; ++ if (msr & TX_RDY) yam_tx_byte(dev, yp); ++ break; ++ case IIR_RX: ++ ++yp->nb_rxint; ++ rxb = inb(RBR(dev->base_addr)); ++ if (msr & RX_FLAG) yam_rx_flag(dev, yp); ++ else yam_rx_byte(dev, yp, rxb); ++ break; ++ } ++ */ ++ } ++ } ++} ++ ++static int yam_net_get_info(char *buffer, char **start, off_t offset, int length, int dummy) ++{ ++ int len = 0; ++ int i; ++ off_t pos = 0; ++ off_t begin = 0; ++ ++ cli(); ++ ++ for (i = 0; i < NR_PORTS; i++) ++ { ++ if (yam_ports[i].iobase == 0 || yam_ports[i].irq == 0) ++ continue; ++ len += sprintf(buffer+len, "Device %s\n", yam_ports[i].name); ++ len += sprintf(buffer+len, " Up %d\n", yam_ports[i].dev.start); ++ len += sprintf(buffer+len, " Speed %u\n", yam_ports[i].bitrate); ++ len += sprintf(buffer+len, " IoBase 0x%x\n", yam_ports[i].iobase); ++ len += sprintf(buffer+len, " BaudRate %u\n", yam_ports[i].baudrate); ++ len += sprintf(buffer+len, " IRQ %u\n", yam_ports[i].irq); ++ len += sprintf(buffer+len, " TxState %u\n", yam_ports[i].tx_state); ++ len += sprintf(buffer+len, " Duplex %u\n", yam_ports[i].dupmode); ++ len += sprintf(buffer+len, " HoldDly %u\n", yam_ports[i].holdd); ++ len += sprintf(buffer+len, " TxDelay %u\n", yam_ports[i].txd); ++ len += sprintf(buffer+len, " TxTail %u\n", yam_ports[i].txtail); ++ len += sprintf(buffer+len, " SlotTime %u\n", yam_ports[i].slot); ++ len += sprintf(buffer+len, " Persist %u\n", yam_ports[i].pers); ++ len += sprintf(buffer+len, " TxFrames %u\n", yam_ports[i].stats.tx_packets); ++ len += sprintf(buffer+len, " RxFrames %u\n", yam_ports[i].stats.rx_packets); ++ len += sprintf(buffer+len, " TxInt %u\n", yam_ports[i].nb_mdint); ++ len += sprintf(buffer+len, " RxInt %u\n", yam_ports[i].nb_rxint); ++ len += sprintf(buffer+len, " RxOver %u\n", yam_ports[i].stats.rx_fifo_errors); ++ len += sprintf(buffer+len, "\n"); ++ ++ pos = begin + len; ++ ++ if (pos < offset) { ++ len = 0; ++ begin = pos; ++ } ++ ++ if (pos > offset + length) ++ break; ++ } ++ ++ sti(); ++ ++ *start = buffer + (offset - begin); ++ len -= (offset - begin); ++ ++ if (len > length) len = length; ++ ++ return len; ++} ++ ++#ifdef CONFIG_INET ++#ifndef PROC_NET_YAM ++#define PROC_NET_YAM (PROC_NET_LAST+10) /* Sorry again... */ ++#endif ++ ++struct proc_dir_entry yam_proc_dir_entry = ++{ ++ PROC_NET_YAM, 3, "yam", S_IFREG | S_IRUGO, 1, 0, 0, 0, ++ &proc_net_inode_operations, yam_net_get_info ++}; ++ ++#define yam_net_procfs_init() proc_net_register(&yam_proc_dir_entry); ++#define yam_net_procfs_remove() proc_net_unregister(PROC_NET_YAM); ++#else ++#define yam_net_procfs_init() ++#define yam_net_procfs_remove() ++#endif ++ ++/* --------------------------------------------------------------------- */ ++ ++#if LINUX_VERSION_CODE >= 0x20119 ++static struct net_device_stats *yam_get_stats(struct device *dev) ++#else ++static struct enet_statistics *yam_get_stats(struct device *dev) ++#endif ++{ ++ struct yam_port *yp; ++ ++ if (!dev || !dev->priv) ++ return NULL; ++ ++ yp = (struct yam_port *)dev->priv; ++ if (yp->magic != YAM_MAGIC) ++ return NULL; ++ ++ /* ++ * Get the current statistics. This may be called with the ++ * card open or closed. ++ */ ++ return &yp->stats; ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++static int yam_open(struct device *dev) ++{ ++ struct yam_port *yp = (struct yam_port *)dev->priv; ++ enum uart u; ++ int i; ++ ++ printk(KERN_INFO "Trying %s at iobase 0x%lx irq %u\n", dev->name, dev->base_addr, dev->irq); ++ ++ if (!dev || !yp || !yp->bitrate) ++ return -ENXIO; ++ if (!dev->base_addr || dev->base_addr > 0x1000-YAM_EXTENT || ++ dev->irq < 2 || dev->irq > 15) { ++ return -ENXIO; ++ } ++ if (check_region(dev->base_addr, YAM_EXTENT)) { ++ printk("%s: cannot 0x%lx busy\n", dev->name, dev->base_addr); ++ return -EACCES; ++ } ++ if ((u = yam_check_uart(dev->base_addr)) == c_uart_unknown) { ++ printk("%s: cannot find uart type\n", dev->name); ++ return -EIO; ++ } ++ ++ if (fpga_download(dev->base_addr, yp->bitrate)) { ++ printk("%s: cannot init FPGA\n", dev->name); ++ return -EIO; ++ } ++ ++ outb(0, IER(dev->base_addr)); ++ if (request_irq(dev->irq, yam_interrupt, SA_INTERRUPT|SA_SHIRQ, dev->name, NULL)) { ++ printk("%s: irq %d busy\n", dev->name, dev->irq); ++ return -EBUSY; ++ } ++ ++ request_region(dev->base_addr, YAM_EXTENT, dev->name); ++ ++ yam_set_uart(dev); ++ dev->start = 1; ++ yp->slotcnt = yp->slot / 10; ++ ++ /* Reset overruns for all ports - FPGA programming makes overruns */ ++ for (i = 0 ; i < NR_PORTS ; i++) { ++ inb(LSR(yam_ports[i].dev.base_addr)); ++ yam_ports[i].stats.rx_fifo_errors = 0; ++ } ++ ++ printk(KERN_INFO "%s at iobase 0x%lx irq %u uart %s\n", dev->name, dev->base_addr, dev->irq, ++ uart_str[u]); ++ MOD_INC_USE_COUNT; ++ return 0; ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++static int yam_close(struct device *dev) ++{ ++ struct sk_buff *skb; ++ struct yam_port *yp = (struct yam_port *)dev->priv; ++ ++ if (!dev || !yp) ++ return -EINVAL; ++ /* ++ * disable interrupts ++ */ ++ outb(0, IER(dev->base_addr)); ++ outb(1, MCR(dev->base_addr)); ++ /* Remove IRQ handler if last */ ++ free_irq(dev->irq, NULL); ++ release_region(dev->base_addr, YAM_EXTENT); ++ dev->start = 0; ++ dev->tbusy = 1; ++ while ((skb = skb_dequeue(&yp->send_queue))) ++ dev_kfree_skb(skb, FREE_WRITE); ++ ++ printk(KERN_INFO "%s: close yam at iobase 0x%lx irq %u\n", ++ yam_drvname, dev->base_addr, dev->irq); ++ MOD_DEC_USE_COUNT; ++ return 0; ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++static int yam_ioctl(struct device *dev, struct ifreq *ifr, int cmd) ++{ ++ struct yam_port *yp = (struct yam_port *)dev->priv; ++ struct yamdrv_ioctl_cfg yi; ++ struct yamdrv_ioctl_mcs *ym; ++ int ioctl_cmd; ++ ++ if (copy_from_user(&ioctl_cmd, ifr->ifr_data, sizeof(int))) ++ return -EFAULT; ++ ++ if (yp == NULL || yp->magic != YAM_MAGIC) ++ return -EINVAL; ++ ++ if (!suser()) return -EPERM; ++ ++ if (cmd != SIOCDEVPRIVATE) ++ return -EINVAL; ++ ++ switch(ioctl_cmd) { ++ ++ case SIOCYAMRESERVED: ++ return -EINVAL; /* unused */ ++ ++ case SIOCYAMSMCS: ++ if (dev->start) ++ return -EINVAL; /* Cannot change this parameter when up */ ++ ym = kmalloc(sizeof(struct yamdrv_ioctl_mcs), GFP_ATOMIC); ++ ym->bitrate = 9600; ++ if (copy_from_user(ym, ifr->ifr_data, sizeof(struct yamdrv_ioctl_mcs))) ++ return -EFAULT; ++ if (ym->bitrate > YAM_MAXBITRATE) return -EINVAL; ++ add_mcs(ym->bits, ym->bitrate); ++ kfree(ym); ++ break; ++ ++ case SIOCYAMSCFG: ++ if (copy_from_user(&yi, ifr->ifr_data, sizeof(struct yamdrv_ioctl_cfg))) ++ return -EFAULT; ++ ++ if ((yi.cfg.mask & YAM_IOBASE) && dev->start) ++ return -EINVAL; /* Cannot change this parameter when up */ ++ if ((yi.cfg.mask & YAM_IRQ) && dev->start) ++ return -EINVAL; /* Cannot change this parameter when up */ ++ if ((yi.cfg.mask & YAM_BITRATE) && dev->start) ++ return -EINVAL; /* Cannot change this parameter when up */ ++ if ((yi.cfg.mask & YAM_BAUDRATE) && dev->start) ++ return -EINVAL; /* Cannot change this parameter when up */ ++ ++ if (yi.cfg.mask & YAM_IOBASE) { ++ yp->iobase = yi.cfg.iobase; ++ dev->base_addr = yi.cfg.iobase; ++ } ++ if (yi.cfg.mask & YAM_IRQ) { ++ if (yi.cfg.irq > 15) return -EINVAL; ++ yp->irq = yi.cfg.irq; ++ dev->irq = yi.cfg.irq; ++ } ++ if (yi.cfg.mask & YAM_BITRATE) { ++ if (yi.cfg.bitrate > YAM_MAXBITRATE) return -EINVAL; ++ yp->bitrate = yi.cfg.bitrate; ++ } ++ if (yi.cfg.mask & YAM_BAUDRATE) { ++ if (yi.cfg.baudrate > YAM_MAXBAUDRATE) return -EINVAL; ++ yp->baudrate = yi.cfg.baudrate; ++ } ++ if (yi.cfg.mask & YAM_MODE) { ++ if (yi.cfg.mode > YAM_MAXMODE) return -EINVAL; ++ yp->dupmode = yi.cfg.mode; ++ } ++ if (yi.cfg.mask & YAM_HOLDDLY) { ++ if (yi.cfg.holddly > YAM_MAXHOLDDLY) return -EINVAL; ++ yp->holdd = yi.cfg.holddly; ++ } ++ if (yi.cfg.mask & YAM_TXDELAY) { ++ if (yi.cfg.txdelay > YAM_MAXTXDELAY) return -EINVAL; ++ yp->txd = yi.cfg.txdelay; ++ } ++ if (yi.cfg.mask & YAM_TXTAIL) { ++ if (yi.cfg.txtail > YAM_MAXTXTAIL) return -EINVAL; ++ yp->txtail = yi.cfg.txtail; ++ } ++ if (yi.cfg.mask & YAM_PERSIST) { ++ if (yi.cfg.persist > YAM_MAXPERSIST) return -EINVAL; ++ yp->pers = yi.cfg.persist; ++ } ++ if (yi.cfg.mask & YAM_SLOTTIME) { ++ if (yi.cfg.slottime > YAM_MAXSLOTTIME) return -EINVAL; ++ yp->slot = yi.cfg.slottime; ++ yp->slotcnt = yp->slot / 10; ++ } ++ break; ++ ++ case SIOCYAMGCFG: ++ yi.cfg.mask = 0xffffffff; ++ yi.cfg.iobase = yp->iobase; ++ yi.cfg.irq = yp->irq; ++ yi.cfg.bitrate = yp->bitrate; ++ yi.cfg.baudrate = yp->baudrate; ++ yi.cfg.mode = yp->dupmode; ++ yi.cfg.txdelay = yp->txd; ++ yi.cfg.holddly = yp->holdd; ++ yi.cfg.txtail = yp->txtail; ++ yi.cfg.persist = yp->pers; ++ yi.cfg.slottime = yp->slot; ++ if (copy_to_user(ifr->ifr_data, &yi, sizeof(struct yamdrv_ioctl_cfg))) ++ return -EFAULT; ++ break; ++ ++ default: ++ return -EINVAL; ++ ++ } ++ ++ return 0; ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++static int yam_set_mac_address(struct device *dev, void *addr) ++{ ++ struct sockaddr *sa = (struct sockaddr *)addr; ++ ++ /* addr is an AX.25 shifted ASCII mac address */ ++ memcpy(dev->dev_addr, sa->sa_data, dev->addr_len); ++ return 0; ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++static int yam_probe(struct device *dev) ++{ ++ struct yam_port *yp; ++ ++ if (!dev) ++ return -ENXIO; ++ ++ yp = (struct yam_port *)dev->priv; ++ ++ dev->open = yam_open; ++ dev->stop = yam_close; ++ dev->do_ioctl = yam_ioctl; ++ dev->hard_start_xmit = yam_send_packet; ++ dev->get_stats = yam_get_stats; ++ ++ dev_init_buffers(dev); ++ skb_queue_head_init(&yp->send_queue); ++ ++#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE) ++ dev->hard_header = ax25_encapsulate; ++ dev->rebuild_header = ax25_rebuild_header; ++#else /* CONFIG_AX25 || CONFIG_AX25_MODULE */ ++ dev->hard_header = NULL; ++ dev->rebuild_header = NULL; ++#endif /* CONFIG_AX25 || CONFIG_AX25_MODULE */ ++ ++ dev->set_mac_address = yam_set_mac_address; ++ ++ dev->type = ARPHRD_AX25; /* AF_AX25 device */ ++ dev->hard_header_len = 73; /* We do digipeaters now */ ++ dev->mtu = 256; /* AX25 is the default */ ++ dev->addr_len = 7; /* sizeof an ax.25 address */ ++ memcpy(dev->broadcast, ax25_bcast, 7); ++ memcpy(dev->dev_addr, ax25_test, 7); ++ ++ /* New style flags */ ++ dev->flags = 0; ++ dev->family = AF_INET; ++ dev->pa_addr = 0; ++ dev->pa_brdaddr = 0; ++ dev->pa_mask = 0; ++ dev->pa_alen = sizeof(unsigned long); ++ ++ return 0; ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++__initfunc(int yam_init(struct device *dev)) ++{ ++ int i; ++ ++ printk(yam_drvinfo); ++ ++ /* Clears the IRQ table */ ++ memset(irqs, 0, sizeof(irqs)); ++ memset(yam_ports, 0, sizeof(yam_ports)); ++ ++ for(i = 0; i < NR_PORTS; i++) { ++ sprintf(yam_ports[i].name, "yam%d", i); ++ yam_ports[i].magic = YAM_MAGIC; ++ yam_ports[i].bitrate = DEFAULT_BITRATE; ++ yam_ports[i].baudrate = DEFAULT_BITRATE * 2; ++ yam_ports[i].iobase = 0; ++ yam_ports[i].irq = 0; ++ yam_ports[i].dupmode = 0; ++ yam_ports[i].holdd = DEFAULT_HOLDD; ++ yam_ports[i].txd = DEFAULT_TXD; ++ yam_ports[i].txtail = DEFAULT_TXTAIL; ++ yam_ports[i].slot = DEFAULT_SLOT; ++ yam_ports[i].pers = DEFAULT_PERS; ++ ++ dev = &yam_ports[i].dev; ++ ++ dev->priv = &yam_ports[i]; ++ dev->name = yam_ports[i].name; ++ dev->base_addr = yam_ports[i].iobase; ++ dev->irq = yam_ports[i].irq; ++ dev->init = yam_probe; ++ dev->if_port = 0; ++ dev->start = 0; ++ dev->tbusy = 1; ++ ++ if (register_netdev(dev)) { ++ printk(KERN_WARNING "yam: cannot register net device %s\n", dev->name); ++ return -ENXIO; ++ } ++ } ++ ++ yam_timer.function = yam_dotimer; ++ yam_timer.expires = jiffies + HZ/100; ++ add_timer(&yam_timer); ++ ++ yam_net_procfs_init(); ++ ++ /* do not keep this device */ ++ return 1; ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++#ifdef MODULE ++ ++/* ++ * command line settable parameters ++ */ ++ ++#if LINUX_VERSION_CODE >= 0x20115 ++ ++MODULE_AUTHOR("Frederic Rible F1OAT frible@teaser.fr"); ++MODULE_DESCRIPTION("Yam amateur radio modem driver"); ++ ++#endif ++ ++__initfunc(int init_module(void)) ++{ ++ int ret = yam_init(NULL); ++ ++ return (ret == 1) ? 0 : ret; ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++void cleanup_module(void) ++{ ++ int i; ++ ++ del_timer(&yam_timer); ++ for(i = 0; i < NR_PORTS; i++) { ++ struct device *dev = &yam_ports[i].dev; ++ if (!dev->priv) continue; ++ if (dev->start) yam_close(dev); ++ unregister_netdev(dev); ++ } ++ free_mcs(); ++ yam_net_procfs_remove(); ++} ++ ++#endif /* MODULE */ ++/* --------------------------------------------------------------------- */ diff --git a/yamdrv/yam08-2.2.1-patch.diff b/yamdrv/yam08-2.2.1-patch.diff new file mode 100644 index 0000000..0906155 --- /dev/null +++ b/yamdrv/yam08-2.2.1-patch.diff @@ -0,0 +1,2172 @@ +diff -u --recursive --new-file linux.prev/Documentation/Configure.help linux/Documentation/Configure.help +--- linux.prev/Documentation/Configure.help Sat Sep 12 23:12:05 1998 ++++ linux/Documentation/Configure.help Sat Sep 12 23:07:13 1998 +@@ -3178,6 +2875,13 @@ + ### Don't know what's going on here. + ### + # ++YAM driver for AX.25 ++CONFIG_YAM ++ Support for the YAM modem on serial port. If you want to compile this ++ as a module ( = code which can be inserted in and removed from the ++ running kernel whenever you want), say M here and read ++ Documentation/modules.txt. ++ + BAYCOM picpar and par96 driver for AX.25 + CONFIG_BAYCOM_PAR + This is a driver for Baycom style simple amateur radio modems that +diff -u --recursive --new-file linux.prev/drivers/net/hamradio/Config.in linux/drivers/net/hamradio/Config.in +--- linux.prev/drivers/net/hamradio/Config.in Sat Sep 12 23:11:49 1998 ++++ linux/drivers/net/hamradio/Config.in Sat Sep 12 22:02:40 1998 +@@ -28,3 +28,5 @@ + bool ' soundmodem support for 4800 baud PSK modulation' CONFIG_SOUNDMODEM_PSK4800 + bool ' soundmodem support for 9600 baud FSK G3RUH modulation' CONFIG_SOUNDMODEM_FSK9600 + fi ++ ++tristate 'YAM driver for AX.25' CONFIG_YAM +diff -u --recursive --new-file linux.prev/drivers/net/hamradio/Makefile linux/drivers/net/hamradio/Makefile +--- linux.prev/drivers/net/hamradio/Makefile Sat Sep 12 23:11:49 1998 ++++ linux/drivers/net/hamradio/Makefile Sat Sep 12 22:01:01 1998 +@@ -53,6 +53,14 @@ + endif + endif + ++ifeq ($(CONFIG_YAM),y) ++L_OBJS += yam.o ++else ++ ifeq ($(CONFIG_YAM),m) ++ M_OBJS += yam.o ++ endif ++endif ++ + ifeq ($(CONFIG_PI),y) + L_OBJS += pi2.o + else +diff -u --recursive --new-file linux.prev/drivers/net/Space.c linux/drivers/net/Space.c +--- linux.prev/drivers/net/Space.c Sat Sep 12 23:11:49 1998 ++++ linux/drivers/net/Space.c Sat Sep 12 22:01:42 1998 +@@ -660,6 +660,16 @@ + #define NEXT_DEV (&mkiss_bootstrap) + #endif /* MKISS */ + ++#if defined(CONFIG_YAM) ++ /* To be exact, this node just hooks the initialization ++ routines to the device structures. */ ++extern int yam_init(struct device *); ++static struct device yam_bootstrap = { ++ "yam", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, yam_init, }; ++#undef NEXT_DEV ++#define NEXT_DEV (&yam_bootstrap) ++#endif /* CONFIG_YAM */ ++ + #if defined(CONFIG_STRIP) + extern int strip_init_ctrl_dev(struct device *); + static struct device strip_bootstrap = { +diff -u --recursive --new-file linux.prev/include/linux/yam.h linux/include/linux/yam.h +--- linux.prev/include/linux/yam.h Thu Jan 1 00:00:00 1970 ++++ linux/include/linux/yam.h Sat Sep 12 22:03:24 1998 +@@ -0,0 +1,82 @@ ++/*****************************************************************************/ ++ ++/* ++ * yam.h -- YAM radio modem driver. ++ * ++ * Copyright (C) 1998 Frederic Rible F1OAT (frible@teaser.fr) ++ * Adapted from baycom.c driver written by Thomas Sailer (sailer@ife.ee.ethz.ch) ++ * ++ * 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. ++ * ++ * Please note that the GPL allows you to use the driver, NOT the radio. ++ * In order to use the radio, you need a license from the communications ++ * authority of your country. ++ * ++ * ++ */ ++ ++/*****************************************************************************/ ++ ++#define SIOCYAMRESERVED (0) ++#define SIOCYAMSCFG (1) /* Set configuration */ ++#define SIOCYAMGCFG (2) /* Get configuration */ ++#define SIOCYAMSMCS (3) /* Set mcs data */ ++ ++#define YAM_IOBASE (1 << 0) ++#define YAM_IRQ (1 << 1) ++#define YAM_BITRATE (1 << 2) /* Bit rate of radio port ->57600 */ ++#define YAM_MODE (1 << 3) /* 0=simplex 1=duplex 2=duplex+tempo */ ++#define YAM_HOLDDLY (1 << 4) /* duplex tempo (sec) */ ++#define YAM_TXDELAY (1 << 5) /* Tx Delay (ms) */ ++#define YAM_TXTAIL (1 << 6) /* Tx Tail (ms) */ ++#define YAM_PERSIST (1 << 7) /* Persist (ms) */ ++#define YAM_SLOTTIME (1 << 8) /* Slottime (ms) */ ++#define YAM_BAUDRATE (1 << 9) /* Baud rate of rs232 port ->115200 */ ++ ++#define YAM_MAXBITRATE 57600 ++#define YAM_MAXBAUDRATE 115200 ++#define YAM_MAXMODE 2 ++#define YAM_MAXHOLDDLY 99 ++#define YAM_MAXTXDELAY 999 ++#define YAM_MAXTXTAIL 999 ++#define YAM_MAXPERSIST 255 ++#define YAM_MAXSLOTTIME 999 ++ ++#define YAM_FPGA_SIZE 5302 ++ ++struct yamcfg { ++ unsigned int mask; /* Mask of commands */ ++ unsigned int iobase; /* IO Base of COM port */ ++ unsigned int irq; /* IRQ of COM port */ ++ unsigned int bitrate; /* Bit rate of radio port */ ++ unsigned int baudrate; /* Baud rate of the RS232 port */ ++ unsigned int txdelay; /* TxDelay */ ++ unsigned int txtail; /* TxTail */ ++ unsigned int persist; /* Persistence */ ++ unsigned int slottime; /* Slottime */ ++ unsigned int mode; /* mode 0 (simp), 1(Dupl), 2(Dupl+delay) */ ++ unsigned int holddly; /* PTT delay in FullDuplex 2 mode */ ++}; ++ ++struct yamdrv_ioctl_cfg { ++ int cmd; ++ struct yamcfg cfg; ++}; ++ ++struct yamdrv_ioctl_mcs { ++ int cmd; ++ int bitrate; ++ unsigned char bits[YAM_FPGA_SIZE]; ++}; +diff -u --recursive --new-file linux.prev/drivers/net/hamradio/yam1200.h linux/drivers/net/hamradio/yam1200.h +--- linux.prev/drivers/net/hamradio/yam1200.h Thu Jan 1 00:00:00 1970 ++++ linux/drivers/net/hamradio/yam1200.h Sat Sep 12 22:03:34 1998 +@@ -0,0 +1,343 @@ ++/* ++ * ++ * File yam1k2b5.mcs converted to h format by mcs2h ++ * ++ * (C) F6FBB 1998 ++ * ++ * Tue Aug 25 20:24:08 1998 ++ * ++ */ ++ ++static unsigned char bits_1200[]= { ++0xff,0xf2,0x00,0xa5,0xad,0xff,0xfe,0x9f,0xff,0xef,0xf3,0xcb,0xff,0xdb,0xfc,0xf2, ++0xff,0xf6,0xff,0x3c,0xbf,0xfd,0xbf,0xdf,0x6e,0x3f,0x6f,0xf1,0x7d,0xb4,0xfd,0xbf, ++0xdf,0x6f,0x3f,0x6f,0xf7,0x0b,0xff,0xdb,0xfd,0xf2,0xff,0xf6,0xff,0xff,0xff,0xff, ++0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xdf,0xff,0xff,0xff,0xef,0xff,0xff,0xff, ++0xfd,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xbf, ++0xff,0xff,0xf7,0xff,0xff,0xfb,0xff,0xff,0xff,0xfc,0xff,0xfe,0xff,0xff,0xff,0xf0, ++0x5f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xf1,0xff,0xff,0xfe,0x7f,0xbf,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xfb,0xff,0xff,0xff,0xf0,0x9f, ++0xff,0xff,0xff,0xfe,0xff,0xfd,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xf7,0xff, ++0xff,0xff,0xfb,0xff,0xfb,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xf7,0xff,0xff,0xfb,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xef,0xff,0xf0,0x5f,0xff, ++0xff,0xff,0xfe,0xff,0xff,0xef,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xbf,0xff,0xff,0xdf,0xf7,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xfb,0xfe,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff, ++0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xeb, ++0xff,0xff,0xff,0xfd,0xff,0xbf,0xf1,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xfb, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x6f,0xff,0xff,0xff, ++0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xf7,0xff,0xff,0xf1,0xff,0xff,0xf7,0xbf,0xe7,0xff,0xff,0xff,0xff,0xfb, ++0xff,0xff,0xff,0xff,0xff,0xff,0x77,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xdb, ++0xff,0xff,0xf5,0xa5,0xfd,0x4b,0x6e,0xef,0x33,0x32,0xdd,0xd3,0x4a,0xd6,0x92,0xfe, ++0xb3,0x3f,0xbd,0xf1,0xfa,0xdb,0xfe,0xf7,0xf6,0x96,0xbd,0xbd,0xff,0xbd,0xff,0xed, ++0x7f,0x6b,0x7f,0xfb,0xdf,0xfe,0xfb,0xfe,0x90,0xcf,0xff,0xff,0xff,0xfe,0xbe,0xef, ++0xff,0xff,0xdb,0x5f,0xf6,0xff,0xf6,0x8f,0xfd,0xa5,0xdd,0xff,0xff,0xff,0xff,0x6f, ++0x7f,0xdb,0xf1,0xfc,0xbf,0xff,0x6f,0xff,0xef,0xfc,0x5b,0x5d,0xda,0xdf,0xf4,0xff, ++0xf2,0xff,0xfd,0xbf,0xff,0xff,0xff,0xd0,0x1f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff, ++0xff,0xfb,0xef,0xb7,0xfc,0x33,0xff,0xfb,0xff,0x04,0x6a,0xf3,0x3c,0x36,0xff,0xf0, ++0x0f,0xf1,0x0f,0xff,0xff,0xff,0xf3,0x15,0x72,0x0f,0xf1,0x6f,0xff,0xfe,0x94,0x3f, ++0xff,0xff,0xff,0x7b,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf0, ++0xf7,0xef,0xb7,0xfc,0x33,0xff,0xff,0xff,0x04,0x6a,0xf3,0x3c,0x36,0xff,0xf0,0x0f, ++0xf1,0x0f,0xff,0xff,0xff,0xf3,0x15,0x73,0x8f,0xf2,0x6f,0xff,0xfe,0x94,0x3f,0xff, ++0xff,0xff,0x7d,0x9f,0xff,0xf0,0x0f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0x9e, ++0xff,0xfc,0xef,0xd3,0xfb,0xff,0x7f,0xf5,0x5f,0xfe,0x59,0xff,0xff,0xff,0xfc,0xf1, ++0xfe,0x7f,0xff,0xff,0xfa,0x17,0xff,0xe7,0xef,0xef,0xff,0xff,0x3f,0xf1,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xf5,0xff,0xbf,0xff,0xfc,0xea, ++0xff,0xf0,0xff,0xff,0xbf,0xf9,0x3f,0xb1,0xef,0xff,0xd7,0xff,0xfb,0xff,0xf0,0xff, ++0xff,0xf3,0xff,0xdf,0xff,0x7b,0xff,0xfd,0xff,0xf6,0xff,0xbf,0xff,0xff,0xbf,0xff, ++0xff,0xff,0xda,0xf0,0xff,0xff,0xff,0xff,0xfe,0xf2,0xc0,0x01,0x00,0x00,0x02,0x02, ++0x02,0x02,0x00,0x40,0x40,0x40,0x10,0x00,0x00,0x00,0x20,0x00,0x00,0x01,0x00,0x00, ++0x00,0x00,0x00,0x00,0x19,0x00,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10, ++0x00,0x3c,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xfb,0xff,0xfd,0xff, ++0xff,0x7f,0xff,0xff,0xbf,0xff,0xef,0xff,0xff,0xfd,0xff,0xff,0xf1,0xff,0xdf,0xff, ++0xff,0xff,0xff,0xff,0xff,0xbf,0xfe,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xdf, ++0xdb,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xf0,0xbf,0xdf,0xff,0x7f,0xff,0xff,0xff,0xff, ++0xdf,0xdf,0xff,0xef,0xff,0x9e,0xef,0xff,0xff,0x7f,0xff,0xf1,0xef,0xff,0xff,0xff, ++0xf7,0xfa,0xbf,0xff,0xff,0xfe,0x47,0xef,0xff,0xbd,0xf6,0xff,0xff,0xdf,0xf5,0xf0, ++0xf0,0xef,0xff,0xff,0xff,0xfe,0xf8,0x30,0x00,0x00,0x00,0x04,0x00,0x01,0x02,0x08, ++0x16,0x00,0x00,0x00,0x80,0x00,0x01,0x02,0x00,0x80,0x01,0x0c,0x02,0x00,0x00,0x01, ++0x00,0x00,0x20,0x00,0x00,0x06,0x00,0x20,0x00,0x10,0x00,0x14,0x00,0x04,0xc1,0xf0, ++0x2f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0x7f, ++0xec,0xff,0xff,0xfa,0xff,0xbf,0xff,0x6f,0xff,0xe1,0xff,0xff,0xff,0xff,0xbd,0xfe, ++0x46,0xff,0xef,0x7f,0xcd,0xdf,0xff,0xff,0xfd,0xff,0xbd,0xff,0x7f,0x7f,0xf0,0x4f, ++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x0f,0xff, ++0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0xa4,0xbc,0xcd,0x6d,0x6b,0x6f,0x5b,0xdc,0x33, ++0x5a,0xf6,0xf7,0xf6,0xb3,0x3f,0xbd,0xc1,0xfa,0x5a,0xf6,0xf6,0xb6,0xf7,0xff,0xbd, ++0xbb,0x3c,0xce,0xcf,0x34,0xef,0x33,0xbb,0xcc,0xff,0xff,0xff,0xf0,0x4f,0xff,0xff, ++0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,0xf6,0xd6,0xff,0xfd,0xfd,0xbf,0xff,0xad, ++0xbf,0xf9,0x7f,0x6f,0xfc,0xdb,0xf1,0xfd,0xbf,0xff,0x6f,0xff,0xff,0xda,0xdb,0xfc, ++0xdb,0xff,0x76,0x8f,0xf6,0xff,0xcd,0xab,0xfe,0xfb,0xff,0xd0,0xff,0xff,0xff,0xff, ++0xfe,0xff,0x9f,0xff,0xf4,0x20,0xaf,0x6d,0x0b,0xc1,0x7b,0xff,0xff,0xff,0xcb,0xff, ++0x3f,0xf0,0xef,0x7f,0x0f,0xf1,0xc3,0x3c,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x0b, ++0x1d,0x6a,0x64,0x05,0x6b,0x99,0x01,0xff,0xfd,0xef,0xf0,0x2f,0xff,0xff,0xff,0xfe, ++0xff,0xff,0xff,0xf4,0x00,0x2f,0xcc,0x0b,0xc3,0x7f,0xff,0xff,0xff,0x0a,0xdf,0xbf, ++0xfd,0x7f,0xff,0xff,0xf1,0xc3,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x4a,0x0e, ++0x96,0x64,0x02,0x97,0x99,0x10,0xff,0xff,0xff,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff, ++0xff,0xff,0xfe,0x84,0xf9,0xd5,0x27,0xf1,0x7f,0xff,0xf8,0xeb,0xdf,0xf3,0xcf,0x3f, ++0x1f,0xff,0xf7,0x11,0xff,0xcf,0xff,0xfe,0x67,0xff,0xff,0xff,0xff,0xc4,0xff,0xff, ++0xb3,0xa1,0xff,0xf9,0xe0,0xff,0xff,0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xf5,0xff, ++0xff,0xfb,0x7f,0xe0,0xff,0xc7,0xfe,0x7f,0x3f,0xff,0xfd,0x77,0x8d,0x7f,0x0f,0xff, ++0xc3,0xff,0xf1,0xbf,0x8f,0xcf,0xff,0xff,0xdd,0x7b,0xff,0xf6,0xfa,0xf7,0xff,0x40, ++0x9f,0xf9,0x7f,0xd8,0xff,0xff,0xfa,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xf1,0xc0,0x00, ++0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x10,0x00,0x00,0x10, ++0x00,0x01,0x00,0x10,0x20,0x20,0x00,0x00,0x10,0x00,0x04,0x01,0x05,0x00,0x00,0x00, ++0x00,0x40,0x40,0x00,0x00,0x3c,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff, ++0xff,0xff,0xfe,0x7f,0x7f,0xff,0xef,0xff,0xff,0xdf,0xff,0xff,0xdf,0xff,0xef,0xf7, ++0xf1,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xf7,0xff,0xff,0xff,0xfc,0xfd,0xff,0x7f, ++0x7e,0xff,0xff,0xff,0xdb,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xf0,0xbb,0xff,0xff,0xff, ++0xff,0xff,0xfe,0xeb,0xfd,0x6f,0xff,0xf7,0xfe,0xf5,0x7f,0xff,0xff,0x7f,0xbf,0xb1, ++0xff,0xff,0x9f,0xbf,0xfb,0xff,0xfe,0xff,0xfe,0xff,0xf7,0xeb,0xdf,0xbf,0x5f,0xdd, ++0xff,0xdb,0xfd,0xd0,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xf8,0x30,0x20,0x00,0x42,0x00, ++0x00,0x00,0x30,0x18,0x04,0x08,0x09,0x21,0x82,0x80,0x02,0x00,0x08,0x00,0x01,0x00, ++0x00,0x00,0x0c,0x20,0x10,0x00,0x11,0x00,0x44,0x84,0x00,0x20,0x20,0x84,0x80,0x00, ++0x00,0x00,0xc1,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xf7,0xff,0xfb,0xdd,0xf9,0xff, ++0xda,0xff,0xdc,0xdd,0xfc,0xfb,0xff,0xbf,0xfb,0x3e,0xd7,0x96,0xfe,0x61,0xf7,0xff, ++0x7f,0xff,0x3f,0xfd,0xff,0xdf,0xcf,0xf7,0xdf,0xf7,0xbf,0xfd,0xff,0xfe,0xef,0xef, ++0xfe,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf3,0xbd,0xfd,0x4b,0x74,0xcf, ++0x73,0x5b,0xcb,0x3b,0xdf,0xfe,0xf7,0xfe,0xd3,0x75,0xac,0xa1,0xfb,0xdf,0xfe,0xf7, ++0x76,0x96,0xb5,0x24,0xbd,0xa5,0xad,0x49,0x2f,0x69,0x2b,0x52,0x5b,0xbd,0xff,0xff, ++0xf0,0xcf,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,0xf6,0xfe,0xff,0xcc, ++0xa7,0xfb,0xad,0xff,0x7f,0x6f,0xff,0x6d,0x7f,0xdb,0xf1,0xfd,0xbf,0xff,0x6f,0xff, ++0x6f,0xff,0xdb,0xff,0xdb,0xff,0xf6,0x97,0xf6,0xff,0xb5,0xb5,0xff,0xff,0xff,0xd0, ++0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0xa5,0xbc,0x43,0xfc,0x7c,0x03,0xe7, ++0xff,0xff,0x20,0xff,0xff,0xff,0xcc,0xfd,0x7d,0xf1,0xff,0xff,0xff,0xff,0xd5,0x59, ++0xba,0x56,0x66,0x6a,0xad,0x9a,0xa9,0x9a,0x97,0xa5,0xaa,0xbb,0xff,0xff,0xf0,0x0f, ++0xff,0xff,0xff,0xfe,0xfe,0xfb,0xff,0xfd,0xf7,0xfd,0x43,0xff,0xfd,0x6b,0xe7,0xff, ++0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0x3f,0xf1,0xff,0xff,0xff,0xff,0xd5,0x59,0xb5, ++0xa6,0x66,0x6a,0xad,0x9a,0xa9,0x99,0x6b,0x5a,0xaa,0xff,0xff,0xb7,0xf0,0x3f,0xff, ++0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0x9c,0xf7,0xfd,0xd2,0x41,0xff,0xff,0xf2,0x7f, ++0x8f,0xff,0xff,0x3d,0xf3,0xff,0x17,0xf1,0xff,0xff,0xff,0xff,0xff,0x7f,0xdf,0xfc, ++0x8f,0x38,0xff,0xef,0x23,0xff,0xfb,0xf7,0xc8,0xff,0xff,0xff,0xf0,0x9f,0xff,0xff, ++0xff,0xfe,0xf5,0x7f,0xff,0xfd,0xff,0xe4,0xff,0xeb,0xff,0xcf,0xbf,0xfa,0xff,0xab, ++0xef,0xff,0xfb,0xff,0xf3,0xfd,0x61,0xff,0xff,0xff,0xff,0xfa,0xff,0xfb,0xfd,0x0d, ++0xff,0xfe,0xff,0x43,0x7f,0xfe,0xbf,0xd0,0xfd,0xff,0xfa,0xf0,0x3f,0xff,0xff,0xff, ++0xfe,0xf3,0xc0,0x00,0x00,0x00,0x02,0x00,0x02,0x01,0x00,0x60,0xc0,0x40,0x00,0x00, ++0x00,0x00,0x34,0x04,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x88,0x00, ++0x00,0x03,0x00,0x00,0x40,0x00,0x40,0x00,0x00,0x3c,0xf0,0x3f,0xff,0xff,0xff,0xfe, ++0xfd,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x7f,0xbf,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xf7,0xf1,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xfd,0xff, ++0xff,0xff,0xff,0xfe,0xfe,0x5f,0xff,0xff,0xcb,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xf0, ++0xff,0xff,0xfd,0xff,0xef,0xe3,0xde,0xee,0xd9,0xc5,0x93,0xff,0xff,0xfe,0xfe,0xff, ++0xfb,0xee,0xfe,0xf1,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xbf,0xf7,0xff,0xff,0x7f, ++0xaf,0xbd,0xdf,0xdf,0xfb,0xf3,0xf3,0xf0,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xf8,0x34, ++0x00,0x06,0x61,0x00,0x18,0x01,0xa0,0x05,0x17,0x00,0x20,0x05,0x28,0x20,0x00,0x00, ++0x05,0x00,0x41,0x00,0x00,0x40,0x00,0x09,0x00,0x01,0x20,0x86,0x82,0x08,0x40,0x03, ++0x80,0x30,0x70,0x08,0x14,0x02,0xc1,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff, ++0xff,0xff,0xbd,0xef,0xfb,0xff,0xff,0xfb,0x9c,0x7f,0xef,0xdf,0xff,0xbf,0xeb,0xde, ++0xff,0xc1,0x7f,0xff,0xfb,0x7f,0xff,0xff,0xff,0x5f,0xff,0xff,0xff,0xdf,0xbf,0xef, ++0x3f,0xf7,0x8f,0xef,0x7f,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xbd, ++0xdf,0xef,0x7d,0x6d,0x2b,0x5a,0x5d,0xd2,0xdf,0xf6,0x92,0xb6,0xb2,0xb3,0xac,0xa1, ++0xfb,0xdf,0xfe,0xf1,0xee,0xf5,0xf6,0xbc,0x6b,0xbd,0x7d,0xaf,0x1a,0xef,0x5f,0x6b, ++0xc6,0xff,0xff,0xff,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff, ++0xf6,0xff,0xf6,0xb7,0xfd,0xad,0xfd,0xbf,0xf3,0x6f,0xff,0x6f,0xff,0xdb,0xd1,0xfd, ++0xbf,0xff,0x6f,0xf5,0x6b,0xbc,0x5b,0x3c,0xda,0xef,0x16,0xaf,0x16,0xff,0xcd,0xab, ++0xff,0x6f,0xff,0xd0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfc,0xbf,0xff,0xff, ++0xff,0x6c,0x03,0x10,0xc1,0xf3,0xff,0xf3,0x3a,0xf3,0xca,0xff,0xaf,0xf1,0xff,0xff, ++0xff,0xff,0xd9,0x96,0xa6,0x65,0xa6,0x66,0x6a,0x95,0x69,0x69,0x6a,0x5a,0x5a,0xff, ++0xff,0x5f,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff, ++0xea,0x0f,0x50,0xc3,0xf3,0x7f,0xff,0xf3,0xf3,0xc3,0xff,0xaf,0xf1,0xff,0xff,0xff, ++0xff,0xd9,0x96,0xa6,0x65,0xa6,0x66,0x6a,0x95,0x69,0x69,0x6a,0x5a,0x5a,0xff,0xff, ++0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xd7,0xff,0xff,0x5f,0xc1, ++0x3f,0xf7,0x5e,0xf5,0xce,0x9e,0x5f,0x3f,0x17,0xff,0xf3,0xe1,0xff,0xff,0xff,0xff, ++0xd8,0xff,0xfa,0xfe,0x67,0xff,0xfe,0xbf,0x5a,0xff,0xff,0xaf,0xf5,0xff,0xff,0xff, ++0xf0,0x2f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xfd,0xff,0xf7,0xff,0xfd,0x4e,0x3d, ++0x3f,0xe7,0x0b,0xbf,0x8f,0xf9,0xff,0xeb,0xe3,0xff,0xe1,0xff,0xff,0xfc,0xff,0xc7, ++0x9f,0xff,0x3e,0x39,0xe5,0xff,0xcf,0x9b,0xf9,0xff,0xff,0xc5,0xff,0xff,0xfa,0xf0, ++0x5f,0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00, ++0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x20,0x00,0x20, ++0x00,0x01,0x10,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0xf0,0x4f, ++0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xbf, ++0x3f,0xff,0xff,0xbf,0xff,0xff,0xff,0xfb,0xf1,0xff,0xff,0xff,0xff,0xf7,0xff,0xf7, ++0xff,0xed,0xff,0xfb,0xfe,0xff,0x7f,0xff,0x7f,0xdf,0xff,0xff,0xdd,0xf0,0x3f,0xff, ++0xff,0xff,0xfe,0xf0,0xff,0xff,0xf3,0xff,0xf7,0xff,0xfe,0x5f,0xff,0xf7,0xff,0xff, ++0xdf,0xff,0xff,0xff,0xf7,0xfe,0x7b,0xf1,0xff,0xfd,0xfd,0xff,0xdf,0xdf,0xff,0x7d, ++0x73,0xf9,0xff,0xc3,0x7e,0xfe,0xff,0xef,0xd7,0xff,0xcf,0xd0,0xf0,0x6f,0xff,0xff, ++0xff,0xfe,0xf8,0x30,0x00,0x00,0x40,0x04,0x00,0x01,0x41,0x20,0x00,0x04,0x00,0x02, ++0xd5,0x09,0x00,0x02,0x80,0x02,0x01,0x00,0x00,0x00,0x0a,0x04,0x00,0x07,0x00,0x01, ++0x50,0x01,0x80,0x02,0x61,0x40,0x41,0x0c,0x14,0x08,0xc1,0xf0,0x9f,0xff,0xff,0xff, ++0xfe,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0xdf,0xcb,0x5f,0xfe,0xef,0xff,0xfe, ++0xff,0x3f,0xff,0x7f,0xfd,0xc1,0xff,0xff,0x7f,0xff,0xdf,0xfd,0xfc,0xfd,0xf7,0xee, ++0xff,0xff,0x4e,0xff,0xdf,0xcf,0xdb,0xeb,0xff,0xff,0xf0,0x1f,0xff,0xff,0xff,0xfe, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff,0xfe,0x7f, ++0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff, ++0xf7,0xfb,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0x7f,0xff,0xff,0xff,0x7f,0xff,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xdd,0xff, ++0xff,0xff,0xa5,0xff,0x6f,0x6b,0xe9,0x6f,0xda,0xca,0xfb,0xdd,0xee,0xf7,0xf6,0xb2, ++0xb3,0xa4,0xa1,0x5b,0x5b,0xf6,0xd7,0xf4,0xf7,0x7b,0xbd,0xbd,0xad,0xcf,0xef,0x7f, ++0x6b,0x7f,0x3b,0xdf,0xdb,0xff,0xff,0x30,0xcf,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff, ++0xff,0xff,0xff,0xf6,0xfe,0x96,0xff,0xfd,0xb5,0xfd,0xbf,0xad,0x7f,0xff,0x6f,0xff, ++0xde,0xd1,0xad,0xad,0xe9,0xff,0xf1,0xec,0xef,0xde,0x3f,0xcb,0xff,0xf6,0xff,0x32, ++0xff,0xc5,0xbd,0xff,0xff,0xff,0xd0,0xbf,0xff,0xff,0xff,0xfe,0xfe,0xfb,0xff,0xf4, ++0x28,0xbf,0xff,0xfd,0xfb,0xd3,0xff,0xff,0x42,0xff,0xff,0xff,0xea,0xb3,0xfc,0xc3, ++0xc1,0xff,0x33,0xff,0xc0,0x15,0x6b,0x70,0xff,0xf0,0xf2,0x4f,0xff,0xfc,0x3e,0x97, ++0x3c,0xff,0xff,0xfd,0xef,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfe,0x78, ++0xbf,0xff,0xfd,0xf3,0xef,0x55,0xff,0x7e,0xff,0xff,0xff,0xea,0xb3,0xfc,0xc3,0xc1, ++0xff,0x33,0xff,0xc0,0x15,0x6f,0xff,0x0f,0xf0,0xf0,0x0f,0xff,0xfc,0x3d,0x6b,0xc3, ++0xff,0xff,0xfe,0xf7,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfc,0xff, ++0xff,0x23,0xf8,0x7f,0xff,0x4e,0xff,0xff,0xff,0xfb,0xf9,0x17,0xff,0xf6,0xf1,0xff, ++0xcf,0xef,0xff,0xff,0x13,0xdf,0xe6,0x2f,0xc7,0xff,0xff,0xe7,0xc1,0xfd,0xff,0xfe, ++0xff,0xff,0xff,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xff,0xfe,0xae,0xff, ++0xff,0x7f,0x3b,0x3f,0xfc,0x7f,0xfc,0xef,0xff,0xfc,0xe2,0x7b,0xff,0xf1,0xfd,0xed, ++0xef,0xff,0xff,0x35,0x73,0xff,0xff,0xfe,0xfa,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff, ++0xff,0xfa,0xf0,0x8f,0xff,0xff,0xff,0xfe,0xf1,0xc0,0x00,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x80,0x00,0x00,0x40,0x00,0x00,0x00,0x0c,0x04,0x01,0x40,0x40,0x00, ++0x00,0x30,0x28,0x04,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00, ++0x38,0xf0,0x0f,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xfb,0xff,0x7f, ++0xff,0xff,0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xdf,0xdf,0xff, ++0xff,0xff,0xff,0xed,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xbf,0xbf,0xff,0xff,0xc3, ++0xf0,0x3f,0xff,0xff,0xff,0xfe,0xf0,0xbf,0xfd,0xff,0xbf,0xff,0xff,0xfd,0xff,0xff, ++0xff,0xff,0xff,0xfd,0x7b,0xff,0x7f,0xff,0xbd,0xff,0xf1,0xef,0xff,0xff,0xfd,0xdf, ++0xfd,0xfb,0xff,0xff,0xbf,0xbe,0xff,0xcd,0x7f,0xfc,0xf7,0xf7,0x6f,0xbf,0xd8,0xf0, ++0xef,0xff,0xff,0xff,0xfe,0xf8,0x30,0x00,0x00,0x00,0x04,0x00,0x00,0xa0,0x00,0x00, ++0xc0,0x00,0x00,0x20,0x34,0x00,0x00,0x00,0x0c,0x81,0x00,0x20,0xa4,0x20,0x00,0x10, ++0x08,0x04,0x48,0x08,0x00,0x40,0x93,0x00,0x10,0x00,0x38,0x18,0x20,0xc1,0xf0,0x3f, ++0xff,0xff,0xff,0xfe,0xff,0xfb,0xff,0xff,0xb9,0xdf,0xfe,0xb3,0xff,0xff,0xe7,0xfd, ++0xff,0xff,0x3b,0xff,0x7f,0xff,0xbf,0xff,0xc1,0xff,0xfc,0xff,0xff,0x3f,0x77,0xfe, ++0xfe,0xcf,0xff,0xbf,0xfd,0xbf,0xff,0xfe,0xed,0xf2,0xfd,0xf7,0xff,0xf0,0x2f,0xff, ++0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xbf,0xff,0xff, ++0xff,0xfe,0xff,0xff,0xff,0xf3,0xad,0xcf,0xef,0x70,0xc9,0x73,0x3b,0xdf,0x5b,0x4a, ++0xf6,0xb7,0xfe,0xd7,0xf5,0xbc,0xc1,0x33,0xca,0xd6,0xb7,0x6e,0xf7,0xfb,0xbd,0xc5, ++0x24,0xcf,0x6f,0x2f,0x4d,0x2b,0xba,0x5a,0xff,0xff,0xff,0xf0,0xaf,0xff,0xff,0xff, ++0xfe,0xbf,0xff,0xff,0xff,0xff,0xf6,0xf6,0xd7,0xff,0xff,0xad,0xbd,0xff,0xff,0xff, ++0xef,0xf7,0x7f,0xfc,0x5b,0xb1,0xfd,0xbd,0x75,0x6f,0xef,0x6a,0xfd,0x5b,0xfb,0xdb, ++0x3a,0xbf,0x8e,0x9f,0xff,0xbf,0xfd,0xff,0x6f,0xff,0xd0,0x6f,0xff,0xff,0xff,0xfe, ++0xff,0xbb,0xff,0xf0,0x3f,0xff,0xff,0xfd,0xfb,0x7f,0xde,0xff,0xff,0x5a,0xd6,0xbf, ++0xd8,0x2a,0xbf,0xbf,0xf1,0xe5,0xff,0xcc,0xc0,0xa9,0x70,0xff,0xf3,0x3c,0x3c,0xfd, ++0x57,0xfd,0x98,0x03,0x00,0xc3,0xff,0xff,0xff,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xff, ++0xff,0xff,0xff,0x3d,0xbf,0xff,0xfd,0xfb,0xff,0xdb,0xff,0xff,0x0f,0xfc,0x3f,0xd8, ++0x2a,0xbf,0xbf,0xf1,0xef,0xff,0xcc,0xc0,0x96,0xbe,0xff,0xf3,0x3f,0xff,0xfd,0x57, ++0xfd,0x99,0x0f,0xff,0xc3,0xff,0xff,0xff,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xff,0xff, ++0xff,0xf1,0xe7,0xff,0xff,0xf3,0x8e,0x7b,0xff,0xa8,0xff,0xdf,0x7f,0x8e,0x78,0x73, ++0xff,0xf1,0x51,0x62,0xff,0xfc,0x4b,0xff,0xf3,0xff,0x7e,0xcf,0xf9,0xff,0xfd,0xff, ++0xff,0x7f,0xff,0xe0,0xff,0xff,0xff,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff, ++0xfb,0xfd,0xae,0xff,0xfc,0xfe,0x6f,0x3f,0xf8,0xfd,0x77,0xaf,0xfe,0x37,0xfe,0x7b, ++0xff,0xb1,0x8c,0xff,0xef,0xfd,0xf8,0xe7,0xbf,0xff,0xf1,0xfe,0x3e,0xf7,0xfe,0x95, ++0x3e,0xbf,0xff,0xff,0xff,0xfa,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xf1,0xc0,0x00,0x00, ++0x01,0x04,0x00,0x00,0x00,0x00,0x80,0x02,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x08, ++0x41,0x80,0x10,0x00,0x00,0x08,0x10,0x84,0x00,0x0c,0x04,0x02,0x61,0x00,0x00,0x81, ++0x00,0x00,0x00,0x00,0x3d,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff, ++0xff,0xff,0x7f,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1, ++0x7f,0xbf,0xf7,0x7f,0xef,0xff,0xef,0xff,0xf7,0xfd,0xff,0xff,0xfd,0x7f,0xff,0xbe, ++0xdf,0xff,0xff,0xd9,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xf0,0xbb,0xff,0x7f,0xfb,0xff, ++0xfb,0xff,0xbf,0xff,0xf3,0x7f,0xfb,0xfd,0xeb,0x7f,0xdf,0xfa,0xff,0xde,0xf0,0xed, ++0xff,0xb1,0xf7,0xf9,0x1f,0xb5,0x5b,0xfe,0x7e,0xf7,0xbe,0xfd,0x7f,0x5f,0xb5,0xf7, ++0xff,0xff,0xd0,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf8,0x30,0x01,0x00,0x07,0x42,0x01, ++0x00,0x6a,0x18,0x50,0x80,0x00,0x00,0x02,0x40,0x01,0x01,0x20,0x01,0x01,0x24,0x14, ++0x21,0x10,0x02,0x08,0x07,0x08,0x00,0x40,0x10,0x80,0x58,0x00,0x84,0x80,0x18,0x10, ++0x40,0xc1,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf7,0xff,0xdb,0xb7,0xf3, ++0xdf,0x7c,0xf8,0x74,0xff,0xff,0x6f,0x7d,0x3f,0x7e,0xec,0x7f,0xc1,0xf5,0xff,0xcf, ++0x6f,0x9f,0xf9,0xdf,0xbe,0xe5,0xe7,0xff,0xd7,0xf3,0xdd,0xfb,0xff,0xfc,0xff,0xbf, ++0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xf0,0x2f,0xff,0xff,0xff,0xfe,0xd7,0xff,0xff,0xff,0xb4,0xcf,0xef,0x77,0x6f,0x73, ++0x3a,0x4a,0x3a,0xcb,0xd4,0xf7,0x2e,0xd6,0xbd,0xbd,0xa1,0x3b,0xdf,0xd6,0xf7,0xee, ++0xd3,0x35,0xbd,0xfb,0xbd,0xce,0xeb,0x2b,0x4d,0x2f,0xbb,0xda,0xff,0xff,0xfe,0xb0, ++0x5f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdf,0x5f,0x36,0xaf,0x3f,0xed,0xb7, ++0xf5,0xfd,0xf3,0x2b,0xef,0x77,0xff,0xfb,0xda,0xb1,0xbd,0xa3,0x77,0x69,0x7f,0x4f, ++0xff,0xdb,0xfa,0x5b,0xff,0xf2,0xfe,0xff,0x96,0xff,0xff,0xfe,0xdf,0xff,0xd0,0xaf, ++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0x8f,0xfd,0x40,0x6f,0x9e,0x83,0x5a,0x0f, ++0xfa,0xc3,0xff,0xff,0xfc,0xe9,0x7f,0xf3,0x01,0xd0,0x00,0xfe,0xbf,0xcd,0x3f,0xf0, ++0xef,0xfc,0xc5,0x0c,0x3f,0xfd,0x68,0x0b,0xff,0xff,0xff,0xfe,0xdf,0xf0,0xff,0xff, ++0xff,0xff,0xfe,0xff,0xbb,0xff,0xfd,0x85,0xff,0xd4,0x6f,0x9f,0xc3,0x5a,0x0f,0xff, ++0xff,0xff,0xff,0xfc,0xe9,0x7f,0xf3,0x01,0xf0,0xfb,0xc2,0xbf,0xfc,0x00,0x37,0xef, ++0xfc,0xcd,0xbc,0x3f,0xff,0x0c,0xbf,0xff,0xff,0xff,0xff,0xff,0xf0,0x5f,0xff,0xff, ++0xff,0xfe,0xff,0xff,0xff,0xff,0xd9,0xf7,0xd1,0xb7,0x7e,0x7f,0xf1,0xe4,0xfd,0xff, ++0xfb,0xfb,0xff,0x5f,0xff,0x7f,0xb1,0xbc,0x0f,0x67,0xeb,0xb8,0x3f,0xff,0xe2,0xff, ++0xe9,0xff,0xfd,0xe3,0xff,0x3f,0x9f,0xc2,0xff,0xff,0xff,0xf0,0x9f,0xff,0xff,0xff, ++0xfe,0xf5,0x7f,0xff,0xf0,0x3f,0xbc,0xff,0xd5,0xf5,0xce,0x3f,0xfe,0xff,0xfe,0x6d, ++0xff,0xf1,0xbf,0x7b,0xff,0xf1,0xfd,0xff,0x4f,0xff,0x87,0xff,0xae,0xff,0xb1,0xf8, ++0xfe,0xff,0xff,0x78,0x01,0xb9,0xff,0xff,0xff,0xfa,0xf0,0x2f,0xff,0xff,0xff,0xfe, ++0xf3,0xc0,0x00,0x00,0x00,0x04,0x02,0x13,0x02,0x00,0x80,0x40,0x00,0x90,0x10,0x00, ++0x10,0x00,0x02,0x00,0x01,0x20,0x80,0x12,0x10,0x00,0x40,0x08,0x00,0x04,0x00,0x00, ++0x02,0x00,0x01,0x40,0x00,0x80,0x00,0x00,0x3c,0xf0,0xef,0xff,0xff,0xff,0xfe,0xfd, ++0x1f,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0x7f,0xff,0x7f,0xf7,0xdf,0xf7,0xff, ++0xf7,0xfb,0xeb,0xd1,0xff,0xff,0xff,0xff,0xef,0xf7,0xff,0xff,0xfb,0xff,0xfe,0xff, ++0xff,0x7e,0xff,0xfb,0xff,0xff,0xff,0xdb,0xf0,0xff,0xff,0xff,0xff,0xfe,0xf0,0xff, ++0xff,0xb7,0xeb,0xf7,0xdf,0xff,0xfe,0xf5,0x6b,0xe7,0xed,0xf7,0x3e,0xec,0xff,0x54, ++0xef,0x6f,0xf1,0xf5,0xaf,0x6f,0xf6,0xfd,0xff,0xdd,0x7b,0xff,0xef,0xbf,0x7f,0xff, ++0xff,0xf7,0xff,0xf3,0x5f,0xf7,0xd0,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xf8,0x30,0x00, ++0x80,0x40,0x04,0x00,0x81,0x2c,0x04,0x24,0x00,0x02,0x01,0xc8,0x02,0x00,0x02,0x24, ++0x00,0x01,0xb4,0x42,0xdc,0x44,0x02,0x15,0x90,0x02,0x03,0x48,0x39,0x10,0x02,0x24, ++0xa0,0xba,0x00,0x00,0x40,0xc1,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff, ++0xfe,0xfc,0xf7,0xf0,0xee,0xb6,0x5d,0xfd,0xf5,0xff,0xdb,0xf7,0x7f,0x7f,0xbe,0xff, ++0xc1,0xfe,0xbf,0xfa,0xfa,0x5f,0xff,0xad,0xff,0xef,0xff,0x7f,0xdf,0x7f,0xfe,0xbf, ++0xb7,0x94,0xbf,0xff,0xff,0xf0,0x9f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf0,0x8f,0xff,0xff,0xff,0xfe,0xd7,0xff,0xff,0xfb,0xb5,0xff, ++0xef,0x7c,0xeb,0x2b,0x52,0x5b,0x3b,0xda,0xd4,0xf3,0x36,0x96,0xb5,0xbd,0xf1,0xfb, ++0xda,0xee,0xf6,0xfe,0xd3,0x35,0xbd,0xdf,0xad,0xcf,0xef,0x7e,0xcd,0x6b,0xbb,0xdf, ++0xff,0xff,0xfd,0xb0,0xef,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xd3,0x5f,0xf6, ++0xff,0xf6,0xff,0xfd,0xad,0xfd,0xff,0x7f,0xef,0xff,0x6f,0x7f,0xdb,0xf1,0xa5,0xa3, ++0x7f,0x6f,0x6b,0x4f,0xff,0xdb,0xfb,0xcb,0xff,0xf6,0xff,0xf4,0xd7,0xfd,0xbf,0xfe, ++0xdf,0xff,0xd0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf7,0xdf,0xff,0xff,0xff, ++0x3f,0x7f,0xfc,0xe5,0xff,0x20,0xfe,0xff,0xff,0xdf,0x7f,0xff,0xf1,0x7f,0xff,0xfe, ++0xff,0xf0,0x7c,0x3d,0x4f,0xf3,0xc3,0x3f,0xff,0xff,0x6f,0xc3,0xff,0x0f,0xff,0xff, ++0xaf,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xff,0xff,0xfb,0xb7,0xe0,0x0f,0xff,0xff,0x2b, ++0xff,0x7d,0xbf,0xff,0xdf,0xff,0xff,0xf8,0x9f,0x7f,0xff,0xf1,0x55,0xff,0xff,0xff, ++0xfd,0x7c,0x3c,0xff,0xf3,0xc3,0x3f,0xff,0xff,0xef,0xc3,0xff,0xdf,0xff,0xff,0xff, ++0xf0,0x9f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0x9f,0xbf,0x7f, ++0xf9,0x19,0x47,0x8e,0xe7,0x9f,0x3f,0x17,0xff,0xfc,0x81,0xc1,0x7e,0xf3,0xd9,0xf9, ++0x73,0xdf,0xf4,0x7f,0xfa,0xff,0xff,0xff,0xfb,0x7f,0x77,0xc7,0xff,0xff,0xff,0xf0, ++0x2f,0xff,0xff,0xff,0xfe,0xf5,0xf7,0xff,0xfb,0xff,0xf7,0x3f,0xfc,0xbf,0x3e,0x3f, ++0xec,0xff,0x81,0xaf,0xfe,0x4f,0xf3,0xbb,0xff,0xf0,0x7e,0xff,0x6f,0xff,0x87,0xff, ++0xbb,0xff,0xd5,0xfc,0xff,0x7f,0xfc,0x6f,0xff,0xef,0xe7,0xff,0xff,0xfa,0xf0,0x3f, ++0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, ++0x00,0x30,0x10,0x60,0x20,0x00,0x08,0x00,0x01,0x20,0x80,0x00,0x10,0x00,0x04,0x00, ++0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x80,0x40,0x00,0x08,0x20,0x3c,0xf0,0x6f,0xff, ++0xff,0xff,0xfe,0xf5,0xbf,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0x7f,0xfe,0x3f,0xff, ++0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xf1,0xdf,0xdf,0xff,0xff,0xff,0x7f,0xdf,0xff, ++0xfd,0xbd,0xff,0xff,0xff,0xfb,0xdf,0xff,0xff,0xff,0xff,0x5b,0xf0,0xff,0xff,0xff, ++0xff,0xfe,0xf0,0xbf,0xbf,0xbf,0xff,0xf7,0xfb,0xff,0xfe,0xee,0xfa,0xff,0xff,0xff, ++0x3d,0x3b,0xff,0xff,0xfe,0xfb,0xf1,0xff,0xbf,0x7b,0xff,0xff,0xef,0xff,0xbf,0xff, ++0xff,0xff,0xff,0xff,0xfe,0xff,0xf7,0xef,0xff,0xfb,0xd0,0xf0,0xdf,0xff,0xff,0xff, ++0xfe,0xf8,0x30,0x00,0x00,0x00,0x00,0x00,0x0b,0x10,0x05,0x01,0x00,0x08,0x00,0x02, ++0x01,0x01,0x00,0x00,0x10,0x01,0xc8,0x08,0x00,0x00,0x00,0x00,0x42,0x02,0x00,0x00, ++0x00,0x80,0x02,0x00,0x00,0x40,0x24,0x80,0x00,0xc1,0xf0,0x3f,0xff,0xff,0xff,0xfe, ++0xff,0xff,0xff,0xff,0xf7,0xfd,0xf7,0xfa,0xef,0xee,0xf9,0xfd,0xff,0xf7,0xfe,0xbf, ++0x1f,0xfd,0x9e,0xfd,0xd1,0xef,0xff,0xf7,0x7f,0x9f,0xff,0xef,0xff,0xf6,0xff,0xfe, ++0xfe,0x7b,0xff,0xbd,0xff,0x7e,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xff,0xff, ++0xff,0xf7,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xdf,0xfd,0xff,0xff,0xdf,0xff, ++0xff,0x5f,0xf1,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xef,0xff, ++0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xfb,0xff,0xff,0xef,0xfb,0xfd, ++0xff,0xf1,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xf7,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xe7,0xff, ++0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xcf,0xff,0xfb,0xff,0xfb,0xf1, ++0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7b,0xff,0xff,0xff,0x7f,0xff,0xf1,0xff, ++0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xef,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0x57,0xff,0xfe,0xbf,0xfb,0xf1,0xff,0xff, ++0xfd,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xd7,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf7,0xdb,0xff,0xdb,0xfd, ++0xf6,0xff,0xf6,0xff,0x3c,0xbc,0xbc,0xbf,0xdf,0x6f,0xef,0x2f,0xf1,0x3c,0xbf,0xbc, ++0xbf,0xdf,0x6f,0xff,0x6f,0xf7,0xdb,0xff,0xdb,0xfd,0xf6,0xff,0xf6,0xff,0xff,0xff, ++0x01,0xe2,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff }; +diff -u --recursive --new-file linux.prev/drivers/net/hamradio/yam9600.h linux/drivers/net/hamradio/yam9600.h +--- linux.prev/drivers/net/hamradio/yam9600.h Thu Jan 1 00:00:00 1970 ++++ linux/drivers/net/hamradio/yam9600.h Sat Sep 12 22:03:34 1998 +@@ -0,0 +1,343 @@ ++/* ++ * ++ * File yam111.mcs converted to h format by mcs2h ++ * ++ * (C) F6FBB 1998 ++ * ++ * Tue Aug 25 20:23:03 1998 ++ * ++ */ ++ ++static unsigned char bits_9600[]= { ++0xff,0xf2,0x00,0xa5,0xad,0xff,0xfe,0x9f,0xff,0xef,0xfb,0xcb,0xff,0xdb,0xfe,0xf2, ++0xff,0xf6,0xff,0x9c,0xbf,0xfd,0xbf,0xef,0x2e,0x3f,0x6f,0xf1,0xfd,0xb4,0xfd,0xbf, ++0xff,0x6f,0xff,0x6f,0xff,0x0b,0xff,0xdb,0xff,0xf2,0xff,0xf6,0xff,0xff,0xff,0xff, ++0xf0,0x6f,0xff,0xff,0xff,0xfe,0xff,0xfd,0xdf,0xff,0xff,0xff,0xf7,0xff,0xff,0xff, ++0xfb,0xff,0xff,0xf7,0xff,0xff,0xff,0xfe,0xff,0x7f,0xf1,0xff,0xfe,0xff,0xbf,0xbf, ++0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xfe,0xff,0xfe,0xff,0xff,0xff,0xf0, ++0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xf7, ++0xff,0xff,0xf7,0xef,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0x7e,0xff,0xff, ++0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xf0,0xdf, ++0xff,0xff,0xff,0xfe,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xef,0xff,0xf3,0xfb,0xfe,0xff,0xf1,0xff,0xfd,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xdf,0xff,0xf0,0x7f,0xff, ++0xff,0xff,0xfe,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xdf,0xff,0xff,0xff,0xf7,0xf1,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xf0,0x0f,0xff,0xff, ++0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf5, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff, ++0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xef,0xff,0x7f,0xff,0xef, ++0xff,0xef,0xff,0x7f,0xef,0xf1,0xff,0xef,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xf0,0x9f,0xff,0xff,0xff,0xfe, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xff, ++0xff,0xff,0xff,0xbd,0xff,0xef,0x7f,0xef,0x7f,0xfb,0xdf,0xd3,0x5a,0xfe,0xd7,0xd6, ++0xf7,0x7f,0xbd,0xf1,0xbb,0x5d,0xd6,0xf7,0xfe,0x96,0xff,0xbd,0xaf,0xad,0xbf,0xef, ++0x7f,0x6b,0x7f,0xfb,0xd6,0xfe,0xf7,0xff,0x10,0xef,0xff,0xff,0xff,0xfe,0xbe,0xef, ++0xff,0xff,0xdb,0xff,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xfd,0xbf,0xff,0x7f,0xff,0x7f, ++0xdf,0xdb,0xf1,0xfd,0x35,0xff,0x6f,0xff,0x6f,0xff,0xdb,0xff,0xcb,0xff,0xf6,0xff, ++0xf2,0xfd,0xfd,0xbf,0xff,0xff,0xff,0xd0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xff,0xcc,0xc0,0x3f,0xff, ++0xff,0xf1,0x24,0xf0,0xff,0xff,0xcf,0xef,0x3f,0xff,0xf0,0xff,0xff,0xff,0xfc,0x3f, ++0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x55,0xff,0xcc,0xc0,0x3f,0xff,0xff, ++0xf1,0x00,0xf0,0xff,0xff,0xcf,0xdf,0xff,0xff,0xf0,0xff,0xff,0xff,0xfc,0x3f,0xff, ++0xff,0xff,0x7d,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xfe,0x7f,0xdf,0xff,0xff,0xff,0xf1, ++0xff,0xcf,0xff,0xf3,0xff,0x97,0xff,0xff,0x8f,0xe7,0xff,0xff,0xfc,0x71,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xf5,0xff,0xbf,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xe3,0xf7,0xef,0xff,0xff,0xfc,0x7b,0xff,0xf1,0x3f, ++0xff,0xef,0xff,0xcf,0xe3,0xe3,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xbf,0xff, ++0xbf,0xff,0xda,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xf2,0xc0,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00, ++0x01,0x3c,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xdb,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0x9f,0xff, ++0xff,0xff,0xf7,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xdb,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xf0,0xbb,0xdf,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xfb,0xdf,0xbf,0xf1,0xfe,0xfd,0xf7,0xff, ++0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x77,0xfd,0xf2, ++0xf0,0x1f,0xff,0xff,0xff,0xfe,0xf8,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, ++0x00,0x00,0x00,0x02,0x00,0x90,0x00,0x00,0x00,0x0c,0x01,0x00,0x00,0x04,0x24,0x00, ++0x40,0x01,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0xc0,0xf0, ++0x4f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xbf,0xff,0xff,0x6f,0xff,0xdf,0xff,0xd1,0xff,0xfe,0xff,0xff,0xff,0xff, ++0xff,0xff,0xdf,0xff,0xfb,0xff,0xfb,0xef,0xff,0xff,0xee,0xff,0xff,0x7f,0xf0,0xdf, ++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x8f,0xff, ++0xff,0xff,0xfe,0xff,0xff,0xff,0xf5,0xad,0xff,0x69,0x2a,0xed,0x6b,0xfb,0xdf,0x3a, ++0xdc,0xf4,0x96,0xee,0xb3,0x3d,0x35,0xc1,0xbb,0xdd,0xfe,0xf6,0xfe,0xd6,0xb5,0xad, ++0xbf,0xa5,0xad,0x49,0x2f,0x4f,0x2b,0xda,0x5f,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff, ++0xff,0xfe,0xbf,0xff,0xff,0xfb,0x5b,0xf7,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xfd,0xa5, ++0xf3,0x6f,0xf3,0x6e,0xfa,0x7b,0xd1,0xfd,0xb5,0x77,0x6f,0xe9,0x6f,0xff,0xdb,0xfb, ++0xdb,0xdf,0xf6,0xff,0xf6,0xff,0xfd,0x3f,0xfe,0xf7,0xff,0xd0,0x4f,0xff,0xff,0xff, ++0xfe,0xff,0x9f,0xff,0xff,0x0f,0xff,0xc0,0x3f,0x9c,0x03,0xff,0xff,0x8b,0xa5,0xfe, ++0x80,0x3e,0xc2,0xbf,0xac,0xb1,0x24,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xa3, ++0xff,0xfd,0x6b,0xff,0xff,0xf0,0xa5,0xff,0xff,0xff,0xf0,0xaf,0xff,0xff,0xff,0xfe, ++0xff,0xff,0xff,0xff,0x0f,0xff,0xc0,0x3f,0xd4,0x6b,0xff,0xff,0xdb,0xff,0xfe,0x86, ++0xbf,0xc2,0xbf,0x30,0xa1,0x24,0xff,0xff,0xff,0xff,0xcc,0xff,0x0f,0xff,0xa3,0xff, ++0x05,0x6b,0xff,0xff,0xf0,0xa5,0xff,0xff,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff, ++0xff,0xff,0xfb,0xc7,0xff,0xc4,0xff,0xff,0x7f,0xff,0xec,0xfe,0x7f,0xdf,0xd8,0xb9, ++0x47,0xfc,0x36,0xc1,0xdf,0xff,0xff,0xf9,0xff,0xf3,0xff,0xf7,0xff,0xfc,0xff,0xfd, ++0x3f,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xf5,0xff, ++0xff,0xff,0xff,0xfe,0xff,0xff,0x7e,0xbd,0x3f,0xff,0x2b,0xfe,0x2f,0xf5,0xa3,0xfc, ++0x5b,0xfe,0x61,0x9f,0x7f,0xef,0xff,0xff,0xa7,0xfb,0xff,0xff,0xfa,0xfe,0xff,0x33, ++0xf1,0xff,0xbf,0xff,0xff,0xff,0xfa,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xf1,0xc0,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x30,0x24,0x04, ++0x00,0x01,0x00,0x80,0x40,0x00,0x08,0x00,0x00,0x00,0x02,0x01,0x01,0x00,0x02,0x00, ++0x00,0x00,0x00,0x00,0x01,0x3d,0xf0,0x2f,0xff,0xff,0xff,0xfe,0xfd,0xbd,0xff,0xfd, ++0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0x7f,0xf6,0xef,0xbf,0xf7,0xff,0x73,0xeb, ++0xf1,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xf9,0xff,0xfd,0xfe,0xff,0xff, ++0xff,0xff,0xff,0xff,0xd9,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xf0,0xbf,0x7f,0xff,0xff, ++0xff,0x7f,0xff,0xff,0xde,0xff,0xff,0xef,0xdd,0xde,0x77,0xf2,0xfb,0xed,0xe7,0xf1, ++0x73,0xfd,0xfd,0xdf,0xff,0x7d,0xbe,0xdf,0xff,0xfb,0xff,0xef,0xff,0xef,0xff,0xff, ++0xff,0xff,0xff,0xd0,0xf0,0xbf,0xff,0xff,0xff,0xfe,0xf8,0x30,0x20,0x02,0x00,0x22, ++0x40,0xc0,0x00,0x00,0x00,0x08,0x00,0x02,0x41,0x02,0x12,0x00,0x21,0x87,0x81,0x00, ++0x00,0x80,0x04,0x0b,0x28,0x01,0xb0,0x00,0x82,0x00,0x40,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0xc1,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xfd,0xff, ++0xf7,0xff,0xfe,0x7f,0xed,0x79,0xff,0xde,0xeb,0x7f,0x74,0xf7,0xf7,0xe1,0xf9,0xff, ++0xf6,0x5f,0x7f,0xff,0xff,0xff,0xd7,0xdb,0xef,0xff,0xbb,0xff,0xff,0xff,0xcc,0xff, ++0xff,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xf0,0x0f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0x3d,0xcd,0x49,0x7f,0x6f, ++0x2b,0xba,0x5c,0xd2,0xda,0xf6,0xf3,0x3e,0xf7,0xff,0xbd,0xf1,0xfa,0xdf,0xfe,0xf7, ++0xcc,0xf6,0xbb,0xa5,0xb3,0xad,0xbf,0x6f,0x7d,0x6f,0x6b,0xdb,0xdf,0xbd,0xff,0xfe, ++0xb0,0x5f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xfb,0xdb,0x57,0xf6,0xfe,0x9f,0xd5, ++0xb7,0xff,0xaf,0xe5,0x3f,0xff,0xff,0x6f,0xff,0xdb,0xf1,0xfd,0xbf,0xff,0x6f,0x69, ++0x6c,0xdf,0xda,0xdf,0xcb,0xff,0xf6,0xff,0x76,0xfd,0xfd,0xbf,0xff,0xff,0xff,0xd0, ++0x3f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfd,0xbd,0x08,0x03,0x89,0x4f,0x5a, ++0x0f,0xf0,0xff,0xf8,0xbf,0xff,0xff,0xff,0xff,0xf1,0x5a,0xff,0xff,0xff,0xff,0xf3, ++0xfa,0xa0,0xf0,0xf2,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xff, ++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfc,0xfd,0x00,0x6b,0xff,0xff,0x5a,0x0f, ++0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0x5a,0xff,0xff,0xff,0xff,0xb3,0xf5, ++0x50,0xf0,0xf0,0xff,0xff,0xff,0xd7,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x7f,0xff, ++0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0xbc,0xff,0xe4,0xe7,0x71,0xff,0xf9,0xc4,0xf4, ++0x7f,0x7f,0xcf,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xfb,0xf7,0x73,0xbf,0x14, ++0xff,0xe6,0xff,0xff,0xe1,0x7d,0xff,0xff,0xe7,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff, ++0xff,0xfe,0xf5,0xff,0xff,0xfe,0xd2,0xfa,0xff,0xc4,0xf4,0x5c,0xbf,0xfa,0xff,0xff, ++0xec,0x7e,0xbf,0xff,0xff,0xff,0xf1,0xff,0xff,0xef,0xff,0xff,0x6b,0xdb,0xff,0xdf, ++0xf9,0xfb,0xbf,0xff,0xf1,0xff,0xbf,0xff,0xff,0xff,0xfb,0xf0,0xbf,0xff,0xff,0xff, ++0xfe,0xf3,0xc0,0x00,0x02,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x80,0x00, ++0x00,0x00,0x00,0x40,0x00,0x01,0x00,0x00,0x00,0x01,0x08,0x20,0x00,0x00,0x00,0x00, ++0x01,0x00,0x01,0x00,0x00,0x80,0x02,0x00,0x01,0x3c,0xf0,0x5f,0xff,0xff,0xff,0xfe, ++0xfd,0xbf,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0x7f,0xff,0xdf,0xff,0xef,0xff, ++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xf7,0xff,0xfb,0xff,0xfd,0xff, ++0xff,0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xc3,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xf0, ++0xff,0xdf,0xff,0xff,0xf7,0x23,0xff,0xff,0xfd,0xff,0xef,0xff,0xfe,0x7f,0x7d,0xf7, ++0xfe,0xff,0x7f,0x71,0xff,0xfb,0x7f,0xff,0xff,0xff,0x6e,0xfd,0xf7,0xfd,0xff,0xbf, ++0xff,0xbf,0xf9,0xfd,0xff,0xdf,0xef,0xf0,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xf8,0x30, ++0x40,0x01,0x00,0x83,0x00,0x00,0x00,0x0c,0x06,0x08,0x04,0x26,0x26,0x00,0x00,0x06, ++0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x04,0x00,0x70,0x08,0x80,0x00,0x20,0x01,0x20, ++0x00,0x02,0x00,0x30,0x00,0x00,0xc1,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff, ++0xff,0xff,0x7b,0x3f,0xf7,0xff,0xd7,0xfe,0xfe,0xfb,0xfe,0x3b,0xfe,0xbd,0xff,0x2f, ++0xff,0x71,0xff,0xfb,0x7f,0xe7,0xff,0xf9,0xef,0xff,0xd7,0xfa,0xff,0xb7,0xbb,0xfe, ++0xff,0xff,0x74,0xff,0xf7,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xf0,0x8f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xb5, ++0xbd,0x6f,0x7c,0xeb,0x7f,0xfb,0xdb,0xd3,0x4b,0xee,0xd6,0xf6,0xb7,0xfd,0xac,0xa1, ++0xfb,0xdf,0xfe,0xf7,0xf4,0x96,0xbd,0xb4,0xc5,0xa5,0xaf,0x6f,0x69,0x4f,0x7f,0xba, ++0xdb,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff, ++0xf6,0xff,0xf6,0xff,0xbd,0xbf,0xa5,0xbf,0xff,0x7d,0x7f,0xef,0xff,0xfb,0xf1,0xfd, ++0xbf,0xff,0x6f,0xff,0x6b,0x7a,0xdb,0xff,0xdb,0xdf,0xf6,0xfe,0xb6,0xfd,0xfd,0xbf, ++0xfe,0xf7,0xff,0xd0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xf4,0x2f,0xff, ++0xfc,0x43,0x6b,0xff,0xff,0xff,0x0d,0xff,0xfc,0x33,0x3f,0xf0,0x5f,0xf1,0xff,0xff, ++0xff,0xff,0xf9,0xde,0xf0,0x4c,0xfe,0x77,0xaf,0xff,0xff,0xef,0xff,0xf0,0xff,0xdb, ++0xff,0x5f,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff,0xfe,0xf7,0xff,0xf0,0x2f,0xff,0xfd, ++0x43,0x7f,0xff,0xff,0xf1,0x0f,0xff,0xfc,0x33,0x3f,0xff,0xaf,0xf1,0xff,0xff,0xff, ++0xff,0xf6,0xd7,0xff,0xbc,0xfd,0xbd,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff, ++0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfc,0xff,0xff,0xfb,0xf1, ++0xbf,0xff,0xf9,0xfd,0xcf,0xf2,0x70,0xff,0x1f,0x9f,0xf3,0xf1,0xff,0xff,0xff,0xff, ++0xfc,0xf7,0xff,0x13,0x9f,0xfc,0xff,0xff,0x84,0xf7,0xff,0xff,0x47,0xff,0xff,0xff, ++0xf0,0xbf,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xff,0xf1,0xfc,0xff,0xfe,0xfe,0x79, ++0x3f,0xff,0x1d,0x46,0xcf,0xff,0xcf,0xfc,0x7b,0xff,0xf1,0xff,0xff,0xff,0xff,0xed, ++0xf3,0xab,0xff,0xcb,0xff,0xf8,0xff,0xfc,0xf5,0xff,0xbf,0xff,0xff,0xff,0xfa,0xf0, ++0x8f,0xff,0xff,0xff,0xfe,0xf3,0xc2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00, ++0x00,0x00,0x20,0x00,0x20,0x00,0x00,0x04,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x20, ++0x0c,0x00,0x00,0x04,0x01,0x00,0x01,0x00,0x00,0x80,0x00,0x00,0x01,0x3c,0xf0,0x7f, ++0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xfd,0xfe,0xff,0xff,0xff,0xff,0xfe,0xff, ++0xdf,0xff,0xff,0xf7,0xff,0xff,0xff,0xef,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xeb, ++0xff,0xdf,0xff,0xff,0xfb,0xf7,0x7f,0xff,0xfe,0xff,0xff,0xbf,0xdb,0xf0,0xff,0xff, ++0xff,0xff,0xfe,0xf0,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0x7f,0xf7,0xff, ++0xbf,0xbf,0xcf,0xff,0xff,0xff,0x3e,0xf1,0x7f,0xff,0xff,0xef,0xff,0xff,0xff,0xfe, ++0xff,0xfd,0xff,0xbf,0xbd,0xfe,0xff,0xfb,0xf7,0xdf,0xfb,0xd0,0xf0,0x9f,0xff,0xff, ++0xff,0xfe,0xf8,0x30,0x20,0x00,0x40,0x01,0x80,0xc0,0x30,0x00,0x00,0x20,0x00,0x10, ++0x50,0x88,0x20,0x00,0x00,0x13,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00, ++0x00,0x00,0x01,0x80,0x08,0x00,0x00,0xa0,0x00,0x10,0xc1,0xf0,0xef,0xff,0xff,0xff, ++0xfe,0xfd,0xef,0x7f,0xff,0xff,0xbf,0xff,0xf7,0xff,0xef,0xfb,0xfd,0x77,0xef,0xbf, ++0xf7,0x7f,0xff,0xff,0xbf,0xd1,0x7f,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xaf,0xff, ++0xdf,0xf7,0xfb,0xff,0xfd,0xff,0xfc,0xff,0xfd,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff, ++0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x3f,0xff,0xff,0xff,0xfe,0xdd,0xff, ++0xff,0xff,0xa5,0xfd,0x6f,0x7d,0x6d,0x7f,0x52,0xdf,0x5a,0x4b,0xee,0xb6,0xee,0xf2, ++0xbb,0xac,0xa1,0x5b,0x4d,0xd6,0xf7,0xfe,0xb2,0xbd,0x35,0xb5,0xb5,0xdd,0x6f,0x7f, ++0xe9,0x5f,0x52,0xdf,0xbd,0xff,0xff,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff, ++0xff,0xdb,0xfe,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xfd,0xb5,0xbf,0xf9,0x7f,0x6f,0xff, ++0xdb,0xf1,0xfd,0xbf,0xff,0x6f,0xff,0x69,0x7f,0xdb,0xff,0xd3,0xff,0xf6,0xfe,0xf2, ++0xff,0xad,0xbf,0xff,0xff,0xff,0xd0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf5, ++0x30,0x0f,0xff,0xff,0xfd,0x6b,0xca,0xff,0xf0,0x0f,0xd6,0xbf,0xcf,0x3f,0xff,0xff, ++0xf1,0xff,0xff,0xff,0xca,0xfe,0xbf,0xff,0xf0,0x05,0xaf,0x0f,0xff,0xfc,0xf0,0xcf, ++0xf0,0xff,0xff,0xff,0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf5,0x30, ++0x0f,0xff,0xff,0xfc,0x3f,0xca,0xff,0x0f,0x0f,0xd6,0xbf,0xff,0xff,0xf5,0x5f,0xf1, ++0xff,0x8b,0xff,0xc3,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xff,0xfc,0xf0,0xcf,0xf0, ++0xff,0xff,0xff,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xcf,0xff, ++0xff,0xbf,0x9f,0x3f,0xfe,0xfc,0xff,0x4f,0xff,0xff,0xff,0xff,0xff,0xf7,0xf1,0xff, ++0xdf,0xfe,0x7e,0x3f,0x9f,0xf4,0xfc,0x7f,0xfc,0xff,0xff,0x3f,0xff,0x3f,0xfe,0x3f, ++0xff,0xff,0xff,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xfb,0xff,0xfe,0xff, ++0xff,0xff,0xff,0xbf,0xfb,0xff,0xf8,0xed,0xff,0x8f,0xff,0xbb,0xff,0xb1,0xf3,0xef, ++0x8f,0xf7,0xff,0xff,0xdb,0xff,0xff,0xff,0xef,0xbf,0xfd,0x79,0xbf,0xbf,0xff,0xff, ++0xff,0xfb,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00,0x00,0x04,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x04,0x08,0x08,0x01,0x01,0x00,0x90, ++0x00,0x00,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x00,0x08,0x00,0x04,0x00,0x00,0x01, ++0x3c,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0x9f,0xff,0xaf,0xdf,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff, ++0xbf,0xef,0xff,0xff,0xff,0xed,0xff,0xff,0xff,0xef,0xff,0xbf,0xff,0xff,0xff,0xc3, ++0xf0,0x3f,0xff,0xff,0xff,0xfe,0xf0,0xff,0xfd,0xff,0xff,0xff,0xfb,0xff,0xbb,0xff, ++0xff,0xff,0x7f,0xf6,0xff,0x7f,0xfb,0xfd,0xed,0xff,0xf1,0xff,0xfe,0x7f,0xff,0xff, ++0xff,0x5f,0xff,0xf7,0xff,0x7e,0xff,0xfd,0xff,0xef,0xff,0xff,0xff,0xef,0xf0,0xf0, ++0x8f,0xff,0xff,0xff,0xfe,0xf8,0x30,0x80,0x00,0x04,0x00,0x00,0x40,0x02,0x00,0x03, ++0x00,0x05,0x04,0x20,0x00,0x00,0x01,0xd0,0x00,0x81,0x00,0x20,0x04,0x04,0x00,0x00, ++0x81,0x04,0x08,0x80,0x10,0x00,0xc0,0x00,0x00,0x00,0x20,0x00,0x08,0xc1,0xf0,0x6f, ++0xff,0xff,0xff,0xfe,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xf3,0xfd,0xff,0xed,0xfc, ++0xff,0xff,0x9f,0xfb,0xfd,0xff,0xff,0xff,0xf1,0xff,0xff,0x7f,0xfb,0x3e,0xff,0x9f, ++0xff,0xff,0xff,0xff,0xfd,0xf9,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xf0,0x6f,0xff, ++0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xcf,0xff,0xff, ++0xff,0xfe,0xff,0xff,0xff,0xfd,0xbd,0xff,0xef,0x7c,0xeb,0x7f,0xfb,0xdb,0xfa,0xdc, ++0xee,0xf7,0xf6,0xd7,0xf5,0x2d,0xa1,0xbb,0xdd,0xee,0xf7,0x54,0xf7,0xfb,0x2c,0xb5, ++0xb4,0xbd,0x6b,0x6f,0xef,0x6f,0xbb,0xdf,0xff,0xff,0xff,0xf0,0x1f,0xff,0xff,0xff, ++0xfe,0xbf,0xff,0xff,0xff,0xfb,0xff,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xff,0xbf,0xef, ++0x6f,0xff,0x6f,0xfa,0xdb,0xf1,0xc5,0xbd,0xf5,0x6f,0xff,0x6f,0xca,0xdb,0xff,0xdb, ++0xfb,0xf6,0x97,0xf6,0xff,0xfd,0xbf,0xfe,0xf7,0xff,0xd0,0x9f,0xff,0xff,0xff,0xfe, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x8b,0x7f,0xff,0xff,0xe7,0x63,0xff,0xff, ++0xff,0xfc,0x77,0xdf,0xf1,0xdb,0xff,0xd6,0xa8,0x3f,0xff,0xff,0x08,0x2f,0xf0,0xff, ++0xc3,0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0x5f,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x8b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xfc,0xff,0xcf,0xf1,0xdb,0xff,0xd6,0xa8,0x3f,0xff,0xff,0x08,0x2f,0xf0,0xff,0xc3, ++0xff,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xf5,0xbf,0xff,0xca,0xff,0x9f,0xff,0xfa,0xb9,0xe7, ++0x9f,0xf3,0x81,0xff,0xff,0xfc,0x73,0xd7,0xff,0xff,0x77,0xff,0xfd,0xff,0xfc,0xff, ++0xff,0xff,0xff,0xcf,0xff,0xff,0xff,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff, ++0xff,0xf7,0xde,0xff,0xfe,0x7e,0xff,0xbf,0xff,0xbf,0xf1,0xb3,0xff,0xff,0xe3,0xfb, ++0xff,0xe1,0x1f,0x7f,0xff,0xf8,0x78,0xff,0xfb,0x1e,0xff,0xf7,0xfe,0xe7,0xff,0xff, ++0xff,0xbf,0xff,0xff,0xff,0xfa,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x04,0x00, ++0x01,0x80,0x40,0x40,0x20,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, ++0x80,0x00,0x00,0x01,0x3c,0xf0,0xaf,0xff,0xff,0xff,0xfe,0xfd,0xbf,0xff,0xfb,0xff, ++0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xf7,0xf1, ++0xfd,0xff,0xff,0xff,0xdf,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff, ++0xff,0xff,0xff,0xdb,0xf0,0x8f,0xff,0xff,0xff,0xfe,0xf0,0xff,0xdf,0xff,0xff,0x7f, ++0xff,0xff,0xff,0xbe,0xd7,0xff,0xed,0xbd,0x7e,0xbf,0xfe,0xf6,0x7f,0xbf,0x71,0xff, ++0xff,0xda,0xff,0xf9,0xff,0xbf,0x7f,0xfe,0xff,0x6f,0x7f,0xff,0xff,0xff,0xff,0xff, ++0x7f,0xff,0xd0,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xf8,0x30,0x42,0x00,0x00,0x00,0x00, ++0x80,0xc1,0x00,0x00,0x90,0x00,0xc4,0x00,0x00,0x12,0x20,0x43,0x22,0x81,0x84,0x00, ++0x00,0x14,0x00,0x01,0x00,0x08,0x80,0x00,0x02,0x00,0x02,0x00,0x04,0x02,0x00,0x00, ++0x10,0xc1,0xf0,0x1f,0xff,0xff,0xff,0xfe,0xff,0xff,0xfd,0xff,0xff,0xdd,0xfe,0xff, ++0xb6,0x76,0xe5,0xbc,0xf9,0xf7,0xaf,0x5f,0xbf,0xfc,0xdf,0xcf,0xf1,0xff,0xef,0x79, ++0xff,0xbd,0xff,0xef,0xff,0xff,0xf7,0x6f,0x5f,0xff,0xff,0xfd,0xef,0xef,0xbf,0xff, ++0xff,0xf0,0x9f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xf0,0xff,0xff,0xff,0xff,0xfe,0xdb,0xff,0xff,0xfd,0x2d,0xff,0x69,0x2a,0xef,0x77, ++0xbb,0xdd,0x5a,0xdf,0xf6,0xf6,0xd6,0xf7,0x7d,0xbd,0xd1,0xb2,0x4a,0xd6,0xb2,0xbe, ++0x97,0xf5,0xbd,0xb3,0xad,0xff,0xef,0x7f,0x69,0x6b,0xfb,0xdf,0xff,0xff,0xff,0xf0, ++0x2f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,0xf6,0xfe,0x9f,0xd4,0xbf, ++0xed,0xaf,0xff,0x6b,0x6f,0xf7,0xff,0xdd,0xdb,0x31,0xfd,0xbf,0xff,0x6f,0x7f,0xff, ++0xff,0xdb,0xff,0xcb,0xdf,0xf6,0xff,0xf6,0xff,0xfd,0xbf,0xfe,0xf7,0xff,0xd0,0x8f, ++0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0x1f,0xff,0x46,0x2f,0x9f,0xff,0xff,0xff, ++0xa5,0xff,0xff,0xff,0xdf,0xb7,0xff,0xff,0xf1,0xff,0xff,0xff,0xf7,0xe9,0x6a,0xbf, ++0xff,0xff,0xfd,0xff,0xff,0xfd,0x55,0x57,0xff,0xff,0xff,0xff,0xaf,0xf0,0x4f,0xff, ++0xff,0xff,0xfe,0xfe,0xdf,0xff,0xfd,0x1f,0xff,0x46,0x2f,0x9f,0xff,0xff,0xff,0xa5, ++0xff,0xff,0xff,0xc0,0x37,0xff,0xff,0xf1,0x99,0x8e,0xdc,0x7f,0xe9,0x6a,0xbf,0xff, ++0xf0,0x0f,0xff,0xff,0xfd,0x55,0x57,0xff,0xff,0xff,0xff,0xff,0xf0,0x0f,0xff,0xff, ++0xff,0xfe,0xff,0xff,0xff,0xff,0x07,0xff,0xc0,0xbe,0xff,0xff,0xcf,0xef,0x9f,0xff, ++0xff,0xfb,0xff,0xe7,0xff,0xff,0xa1,0xe3,0xce,0x3c,0x58,0x3f,0xf3,0xff,0xfd,0xef, ++0xf9,0xff,0xff,0xf7,0xf1,0x7f,0xff,0xcb,0xff,0xff,0xff,0xf0,0x2f,0xff,0xff,0xff, ++0xfe,0xf5,0x7f,0xff,0xf0,0xff,0xfe,0xff,0xc4,0x75,0xe7,0xb9,0xff,0xff,0xff,0xef, ++0xff,0xc7,0x37,0x3b,0xff,0xf0,0x13,0x9e,0x0f,0xf4,0xff,0xfe,0xfb,0xff,0xff,0xf9, ++0xfc,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xfa,0xf0,0xef,0xff,0xff,0xff,0xfe, ++0xf3,0xc0,0x01,0x00,0x00,0x02,0x00,0x02,0x22,0x00,0x00,0xc0,0x40,0x00,0x40,0x00, ++0x04,0x08,0x04,0x0a,0x01,0x01,0x10,0x20,0x20,0x00,0x00,0x04,0x08,0x08,0x04,0x00, ++0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x3c,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xfd, ++0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0x7f,0xff,0x7f,0xff,0xcf,0x9d,0xff, ++0xff,0xf7,0xfd,0xf1,0xff,0xff,0xff,0xee,0xbf,0xff,0xff,0xff,0xff,0xfe,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdb,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xf0,0xff, ++0xff,0xff,0xf7,0xf7,0xff,0xff,0xfe,0xbf,0xf7,0xff,0xff,0x5b,0xff,0xbf,0xf7,0xff, ++0xfd,0x7f,0x71,0xfd,0xff,0xed,0xf7,0xfe,0xef,0xff,0xff,0x7f,0xff,0xff,0xff,0xff, ++0xff,0xff,0xef,0xff,0x7f,0xff,0xd0,0xf0,0xff,0xff,0xff,0xff,0xfe,0xf8,0x30,0x11, ++0x00,0x48,0x60,0x40,0x82,0x60,0x24,0x60,0x00,0xcc,0x00,0x80,0x04,0x01,0x00,0x00, ++0x14,0x01,0x0c,0x04,0x00,0x30,0x00,0x00,0x00,0x08,0x08,0x00,0x01,0x00,0xc2,0x00, ++0x00,0x02,0x00,0x80,0x00,0xc1,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff, ++0xf7,0x7b,0xff,0xf3,0xeb,0xbf,0xff,0xf7,0xff,0xff,0xff,0xe7,0x5d,0x3f,0xff,0xf6, ++0xd1,0xfd,0xff,0xeb,0xf7,0x3d,0xff,0xff,0xff,0x5f,0xff,0x7f,0x7f,0xf3,0xff,0xff, ++0xef,0xfd,0xbf,0xff,0xff,0xf0,0x5f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf0,0xdf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf5,0xb5,0xdf, ++0x6f,0x7d,0x69,0x7f,0xfb,0xdf,0x52,0x5f,0xf6,0xf7,0xfe,0xf6,0xf3,0xbd,0xb1,0xda, ++0xcd,0xfe,0xf6,0xee,0xd2,0xbd,0xa5,0xaf,0xbd,0xff,0x6f,0x7c,0xeb,0x2b,0xfa,0xda, ++0xff,0xfe,0xdf,0xf0,0x4f,0xff,0xff,0xff,0xfe,0xbf,0xff,0xff,0xff,0xdb,0xff,0xf6, ++0xff,0xf6,0xff,0xbd,0xbf,0xcd,0xbf,0xeb,0x6f,0xf7,0x6f,0xdf,0xdb,0x51,0xfd,0xbd, ++0xff,0x6f,0xff,0x6f,0xfb,0x5b,0xff,0xdb,0xff,0xf6,0xfe,0xf6,0xfd,0xfd,0xbf,0xfe, ++0xf7,0xff,0xd0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xfa,0x50,0xff,0xff,0xff, ++0xf0,0x6f,0xff,0xff,0xf0,0x96,0xff,0xff,0xc6,0x2b,0xff,0xff,0xf1,0xfc,0xff,0xff, ++0xf7,0xdb,0xc3,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xc1,0x4f,0xc3,0xff,0xff,0xff, ++0xaf,0xf0,0x9f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf5,0xa0,0xff,0xff,0xff,0xf0, ++0x6f,0xff,0xff,0xf0,0x96,0xff,0xff,0xc6,0x2b,0xff,0xff,0xf1,0x5a,0xff,0xff,0xff, ++0xf3,0xc3,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xc1,0x4f,0xc3,0xff,0xff,0xff,0xff, ++0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xfc,0xff,0xff,0x9f,0xf0,0x7f, ++0xff,0xf9,0xfc,0x4f,0xf3,0xff,0x27,0xeb,0xff,0xfc,0x81,0xfc,0x7f,0xfe,0x7b,0xff, ++0xf7,0xff,0x12,0x7f,0xff,0xff,0xff,0xff,0x18,0xff,0xff,0xff,0xff,0xff,0xff,0xf0, ++0x7f,0xff,0xff,0xff,0xfe,0xf5,0xff,0xff,0xff,0xdf,0xfe,0xff,0xfc,0x7e,0x7f,0xbf, ++0xff,0xff,0xaf,0xef,0xff,0xdf,0xdf,0xfb,0xff,0xf1,0xc3,0xfe,0x6f,0xf1,0xcf,0x3f, ++0xfb,0xff,0xff,0xcf,0xfe,0xff,0xff,0xfe,0x7f,0xbf,0xff,0xff,0xbf,0xfa,0xf0,0xdf, ++0xff,0xff,0xff,0xfe,0xf3,0xc0,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00, ++0x20,0x00,0x01,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00, ++0x00,0x00,0x00,0x02,0x00,0x00,0x80,0x00,0x02,0x80,0x00,0x02,0x3c,0xf0,0x2f,0xff, ++0xff,0xff,0xfe,0xfd,0xbf,0xff,0xfb,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xf5,0xf1,0xff,0x7f,0xff,0xff,0xff,0xff,0xef,0xff, ++0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xdb,0xf0,0x2f,0xff,0xff, ++0xff,0xfe,0xf0,0xff,0xff,0xff,0xfb,0xff,0xbf,0xff,0xff,0xff,0xff,0xf7,0xbf,0xfb, ++0xff,0xff,0xff,0xdf,0xf7,0xff,0xf1,0xf7,0xbf,0xfb,0xff,0xff,0xff,0x7f,0xde,0xff, ++0xff,0xff,0xff,0xff,0xff,0xed,0xf7,0xff,0xff,0x7f,0xd0,0xf0,0x3f,0xff,0xff,0xff, ++0xfe,0xf8,0x30,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0xe0,0x00,0x00,0x80, ++0x20,0x01,0x01,0x92,0x00,0x01,0x01,0x00,0xe0,0x1c,0x60,0x20,0x30,0x08,0x08,0x00, ++0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0xc1,0xf0,0x6f,0xff,0xff,0xff,0xfe, ++0xff,0xff,0xff,0xff,0xff,0xdb,0xfe,0xff,0xff,0xdf,0xff,0xfc,0x7f,0xfb,0xbf,0xff, ++0xff,0xff,0xff,0xff,0xf1,0xf6,0xff,0xf7,0x7e,0x3f,0xff,0x7f,0xff,0xff,0xff,0xf7, ++0xff,0xff,0xff,0xed,0xff,0xdf,0xff,0xb7,0xff,0xf0,0x3f,0xff,0xff,0xff,0xfe,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xff,0xff,0xff,0xff,0xfe,0xff,0xff, ++0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xbf,0xff,0xdf, ++0x57,0xef,0xf1,0xfd,0xfe,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xdf,0xfb,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x7f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff, ++0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xff,0xdf,0xff, ++0xff,0xf1,0xfd,0xff,0x7f,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xfe,0xff,0xff,0xff,0xff,0xf0,0x9f,0xff,0xff,0xff,0xfe,0xf7,0xfd,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff, ++0xf1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xf0,0x6f,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1, ++0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xfb,0xff,0xff,0xff,0xfe,0xff,0xff,0xfb,0x6f,0xff,0xfe,0xbf,0xff,0xf1,0xff, ++0xf7,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd, ++0xff,0xff,0xff,0xf0,0xef,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xfb,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0x57,0xff,0xfd,0xbf,0xff,0xf1,0xff,0xef, ++0xfe,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff, ++0xde,0xff,0xf0,0xcf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xf7,0xdb,0xff,0xdb,0xfd, ++0xf6,0xff,0xf6,0xff,0x3c,0xbc,0xbc,0xbf,0xdf,0x6f,0xe7,0x2f,0xf1,0x3c,0xbf,0xfd, ++0xbf,0xdf,0x6f,0xff,0x6f,0xf7,0xdb,0xff,0xdb,0xfd,0xf6,0xff,0xf6,0xff,0xff,0xff, ++0x02,0x01,0xdf,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++0xff,0xff,0xff,0xff,0xff,0xff }; +diff -u --recursive --new-file linux.prev/drivers/net/hamradio/yam.c linux/drivers/net/hamradio/yam.c +--- linux.prev/drivers/net/hamradio/yam.c Thu Jan 1 00:00:00 1970 ++++ linux/drivers/net/hamradio/yam.c Sat Sep 12 22:54:35 1998 +@@ -0,0 +1,1324 @@ ++/*****************************************************************************/ ++ ++/* ++ * yam.c -- YAM radio modem driver. ++ * ++ * Copyright (C) 1998 Frederic Rible F1OAT (frible@teaser.fr) ++ * Adapted from baycom.c driver written by Thomas Sailer (sailer@ife.ee.ethz.ch) ++ * ++ * 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. ++ * ++ * Please note that the GPL allows you to use the driver, NOT the radio. ++ * In order to use the radio, you need a license from the communications ++ * authority of your country. ++ * ++ * ++ * History: ++ * 0.0 F1OAT 06.06.98 Begin of work with baycom.c source code V 0.3 ++ * 0.1 F1OAT 07.06.98 Add timer polling routine for channel arbitration ++ * 0.2 F6FBB 08.06.98 Added delay after FPGA programming ++ * 0.3 F6FBB 29.07.98 Delayed PTT implementation for dupmode=2 ++ * 0.4 F6FBB 30.07.98 Added TxTail, Slottime and Persistance ++ * 0.5 F6FBB 01.08.98 Shared IRQs, /proc/net and network statistics ++ * 0.6 F6FBB 25.08.98 Added 1200Bds format ++ * 0.7 F6FBB 12.09.98 Added to the kernel configuration ++ */ ++ ++/*****************************************************************************/ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE) ++/* prototypes for ax25_encapsulate and ax25_rebuild_header */ ++#include ++#endif /* CONFIG_AX25 || CONFIG_AX25_MODULE */ ++ ++/* make genksyms happy */ ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include ++#include "yam9600.h" ++#include "yam1200.h" ++ ++/* --------------------------------------------------------------------- */ ++ ++/* ++ * currently this module is supposed to support both module styles, i.e. ++ * the old one present up to about 2.1.9, and the new one functioning ++ * starting with 2.1.21. The reason is I have a kit allowing to compile ++ * this module also under 2.0.x which was requested by several people. ++ * This will go in 2.2 ++ */ ++#include ++ ++#if LINUX_VERSION_CODE >= 0x20100 ++#include ++#else ++#include ++#include ++ ++#undef put_user ++#undef get_user ++ ++#define put_user(x,ptr) ({ __put_user((unsigned long)(x),(ptr),sizeof(*(ptr))); 0; }) ++#define get_user(x,ptr) ({ x = ((__typeof__(*(ptr)))__get_user((ptr),sizeof(*(ptr)))); 0; }) ++ ++extern inline int copy_from_user(void *to, const void *from, unsigned long n) ++{ ++ int i = verify_area(VERIFY_READ, from, n); ++ if (i) ++ return i; ++ memcpy_fromfs(to, from, n); ++ return 0; ++} ++ ++extern inline int copy_to_user(void *to, const void *from, unsigned long n) ++{ ++ int i = verify_area(VERIFY_WRITE, to, n); ++ if (i) ++ return i; ++ memcpy_tofs(to, from, n); ++ return 0; ++} ++#endif ++ ++#if LINUX_VERSION_CODE < 0x20115 ++extern __inline__ void dev_init_buffers(struct device *dev) ++{ ++ int i; ++ for(i=0;ibuffs[i]); ++ } ++} ++#endif ++ ++#if LINUX_VERSION_CODE >= 0x20123 ++#include ++#else ++#define __init ++#define __initdata ++#define __initfunc(x) x ++#endif ++ ++/* --------------------------------------------------------------------- */ ++ ++static const char yam_drvname[] = "yam"; ++static const char yam_drvinfo[] = KERN_INFO "yam: (C) 1998 Frederic Rible F1OAT\n" ++KERN_INFO "yam: version 0.7 compiled " __TIME__ " " __DATE__ "\n"; ++ ++/* --------------------------------------------------------------------- */ ++ ++#define YAM_9600 1 ++#define YAM_1200 2 ++ ++#define NR_PORTS 4 ++#define YAM_MAGIC 0xF10A7654 ++ ++/* Transmitter states */ ++ ++#define TX_OFF 0 ++#define TX_HEAD 1 ++#define TX_DATA 2 ++#define TX_CRC1 3 ++#define TX_CRC2 4 ++#define TX_TAIL 5 ++ ++#define YAM_MAX_FRAME 1024 ++ ++#define DEFAULT_BITRATE 9600 /* bps */ ++#define DEFAULT_HOLDD 10 /* sec */ ++#define DEFAULT_TXD 300 /* ms */ ++#define DEFAULT_TXTAIL 10 /* ms */ ++#define DEFAULT_SLOT 100 /* ms */ ++#define DEFAULT_PERS 64 /* 0->255 */ ++ ++struct yam_port { ++ int magic; ++ int bitrate; ++ int baudrate; ++ int iobase; ++ int irq; ++ int dupmode; ++ char name[16]; ++ ++ struct device dev; ++ ++ /* Stats section */ ++ ++#if LINUX_VERSION_CODE < 0x20119 ++ struct enet_statistics stats; ++#else ++ struct net_device_stats stats; ++#endif ++ int nb_rxint; ++ int nb_mdint; ++ ++ /* Parameters section */ ++ ++ int txd; /* tx delay */ ++ int holdd; /* duplex ptt delay */ ++ int txtail; /* txtail delay */ ++ int slot; /* slottime */ ++ int pers; /* persistence */ ++ ++ /* Tx section */ ++ ++ int tx_state; ++ int tx_count; ++ int slotcnt; ++ unsigned char tx_buf[YAM_MAX_FRAME]; ++ int tx_len; ++ int tx_crcl, tx_crch; ++ struct sk_buff_head send_queue; /* Packets awaiting transmission */ ++ ++ /* Rx section */ ++ ++ int dcd; ++ unsigned char rx_buf[YAM_MAX_FRAME]; ++ int rx_len; ++ int rx_crcl, rx_crch; ++}; ++ ++struct yam_mcs { ++ unsigned char bits[YAM_FPGA_SIZE]; ++ int bitrate; ++ struct yam_mcs *next; ++}; ++ ++static struct yam_port yam_ports[NR_PORTS]; ++ ++static struct yam_mcs *yam_data = NULL; ++ ++static unsigned irqs[16]; ++ ++static char ax25_bcast[7] = ++{'Q' << 1, 'S' << 1, 'T' << 1, ' ' << 1, ' ' << 1, ' ' << 1, '0' << 1}; ++static char ax25_test[7] = ++{'L' << 1, 'I' << 1, 'N' << 1, 'U' << 1, 'X' << 1, ' ' << 1, '1' << 1}; ++ ++static struct timer_list yam_timer; ++ ++/* --------------------------------------------------------------------- */ ++ ++#define RBR(iobase) (iobase+0) ++#define THR(iobase) (iobase+0) ++#define IER(iobase) (iobase+1) ++#define IIR(iobase) (iobase+2) ++#define FCR(iobase) (iobase+2) ++#define LCR(iobase) (iobase+3) ++#define MCR(iobase) (iobase+4) ++#define LSR(iobase) (iobase+5) ++#define MSR(iobase) (iobase+6) ++#define SCR(iobase) (iobase+7) ++#define DLL(iobase) (iobase+0) ++#define DLM(iobase) (iobase+1) ++ ++#define YAM_EXTENT 8 ++ ++/* Interrupt Identification Register Bit Masks */ ++#define IIR_NOPEND 1 ++#define IIR_MSR 0 ++#define IIR_TX 2 ++#define IIR_RX 4 ++#define IIR_LSR 6 ++#define IIR_TIMEOUT 12 /* Fifo mode only */ ++ ++#define IIR_MASK 0x0F ++ ++/* Interrupt Enable Register Bit Masks */ ++#define IER_RX 1 /* enable rx interrupt */ ++#define IER_TX 2 /* enable tx interrupt */ ++#define IER_LSR 4 /* enable line status interrupts */ ++#define IER_MSR 8 /* enable modem status interrupts */ ++ ++/* Modem Control Register Bit Masks */ ++#define MCR_DTR 0x01 /* DTR output */ ++#define MCR_RTS 0x02 /* RTS output */ ++#define MCR_OUT1 0x04 /* OUT1 output (not accessible in RS232) */ ++#define MCR_OUT2 0x08 /* Master Interrupt enable (must be set on PCs) */ ++#define MCR_LOOP 0x10 /* Loopback enable */ ++ ++/* Modem Status Register Bit Masks */ ++#define MSR_DCTS 0x01 /* Delta CTS input */ ++#define MSR_DDSR 0x02 /* Delta DSR */ ++#define MSR_DRIN 0x04 /* Delta RI */ ++#define MSR_DDCD 0x08 /* Delta DCD */ ++#define MSR_CTS 0x10 /* CTS input */ ++#define MSR_DSR 0x20 /* DSR input */ ++#define MSR_RING 0x40 /* RI input */ ++#define MSR_DCD 0x80 /* DCD input */ ++ ++/* line status register bit mask */ ++#define LSR_RXC 0x01 ++#define LSR_OE 0x02 ++#define LSR_PE 0x04 ++#define LSR_FE 0x08 ++#define LSR_BREAK 0x10 ++#define LSR_THRE 0x20 ++#define LSR_TSRE 0x40 ++ ++/* Line Control Register Bit Masks */ ++#define LCR_DLAB 0x80 ++#define LCR_BREAK 0x40 ++#define LCR_PZERO 0x28 ++#define LCR_PEVEN 0x18 ++#define LCR_PODD 0x08 ++#define LCR_STOP1 0x00 ++#define LCR_STOP2 0x04 ++#define LCR_BIT5 0x00 ++#define LCR_BIT6 0x02 ++#define LCR_BIT7 0x01 ++#define LCR_BIT8 0x03 ++ ++/* YAM Modem <-> UART Port mapping */ ++ ++#define TX_RDY MSR_DCTS /* transmitter ready to send */ ++#define RX_DCD MSR_DCD /* carrier detect */ ++#define RX_FLAG MSR_RING /* hdlc flag received */ ++#define FPGA_DONE MSR_DSR /* FPGA is configured */ ++#define PTT_ON (MCR_RTS|MCR_OUT2) /* activate PTT */ ++#define PTT_OFF (MCR_DTR|MCR_OUT2) /* release PTT */ ++ ++#define ENABLE_RXINT IER_RX /* enable uart rx interrupt during rx */ ++#define ENABLE_TXINT IER_MSR /* enable uart ms interrupt during tx */ ++#define ENABLE_RTXINT (IER_RX|IER_MSR) /* full duplex operations */ ++ ++#define MIN(a, b) (((a) < (b)) ? (a) : (b)) ++#define MAX(a, b) (((a) > (b)) ? (a) : (b)) ++ ++/************************************************************************* ++* CRC Tables ++************************************************************************/ ++ ++static const unsigned char chktabl[256]= ++{ 0x00,0x89,0x12,0x9b,0x24,0xad,0x36,0xbf,0x48,0xc1,0x5a,0xd3,0x6c,0xe5,0x7e, ++ 0xf7,0x81,0x08,0x93,0x1a,0xa5,0x2c,0xb7,0x3e,0xc9,0x40,0xdb,0x52,0xed,0x64, ++ 0xff,0x76,0x02,0x8b,0x10,0x99,0x26,0xaf,0x34,0xbd,0x4a,0xc3,0x58,0xd1,0x6e, ++ 0xe7,0x7c,0xf5,0x83,0x0a,0x91,0x18,0xa7,0x2e,0xb5,0x3c,0xcb,0x42,0xd9,0x50, ++ 0xef,0x66,0xfd,0x74,0x04,0x8d,0x16,0x9f,0x20,0xa9,0x32,0xbb,0x4c,0xc5,0x5e, ++ 0xd7,0x68,0xe1,0x7a,0xf3,0x85,0x0c,0x97,0x1e,0xa1,0x28,0xb3,0x3a,0xcd,0x44, ++ 0xdf,0x56,0xe9,0x60,0xfb,0x72,0x06,0x8f,0x14,0x9d,0x22,0xab,0x30,0xb9,0x4e, ++ 0xc7,0x5c,0xd5,0x6a,0xe3,0x78,0xf1,0x87,0x0e,0x95,0x1c,0xa3,0x2a,0xb1,0x38, ++ 0xcf,0x46,0xdd,0x54,0xeb,0x62,0xf9,0x70,0x08,0x81,0x1a,0x93,0x2c,0xa5,0x3e, ++ 0xb7,0x40,0xc9,0x52,0xdb,0x64,0xed,0x76,0xff,0x89,0x00,0x9b,0x12,0xad,0x24, ++ 0xbf,0x36,0xc1,0x48,0xd3,0x5a,0xe5,0x6c,0xf7,0x7e,0x0a,0x83,0x18,0x91,0x2e, ++ 0xa7,0x3c,0xb5,0x42,0xcb,0x50,0xd9,0x66,0xef,0x74,0xfd,0x8b,0x02,0x99,0x10, ++ 0xaf,0x26,0xbd,0x34,0xc3,0x4a,0xd1,0x58,0xe7,0x6e,0xf5,0x7c,0x0c,0x85,0x1e, ++ 0x97,0x28,0xa1,0x3a,0xb3,0x44,0xcd,0x56,0xdf,0x60,0xe9,0x72,0xfb,0x8d,0x04, ++ 0x9f,0x16,0xa9,0x20,0xbb,0x32,0xc5,0x4c,0xd7,0x5e,0xe1,0x68,0xf3,0x7a,0x0e, ++ 0x87,0x1c,0x95,0x2a,0xa3,0x38,0xb1,0x46,0xcf,0x54,0xdd,0x62,0xeb,0x70,0xf9, ++ 0x8f,0x06,0x9d,0x14,0xab,0x22,0xb9,0x30,0xc7,0x4e,0xd5,0x5c,0xe3,0x6a,0xf1, ++ 0x78}; ++static const unsigned char chktabh[256]= ++{ 0x00,0x11,0x23,0x32,0x46,0x57,0x65,0x74,0x8c,0x9d,0xaf,0xbe,0xca,0xdb,0xe9, ++ 0xf8,0x10,0x01,0x33,0x22,0x56,0x47,0x75,0x64,0x9c,0x8d,0xbf,0xae,0xda,0xcb, ++ 0xf9,0xe8,0x21,0x30,0x02,0x13,0x67,0x76,0x44,0x55,0xad,0xbc,0x8e,0x9f,0xeb, ++ 0xfa,0xc8,0xd9,0x31,0x20,0x12,0x03,0x77,0x66,0x54,0x45,0xbd,0xac,0x9e,0x8f, ++ 0xfb,0xea,0xd8,0xc9,0x42,0x53,0x61,0x70,0x04,0x15,0x27,0x36,0xce,0xdf,0xed, ++ 0xfc,0x88,0x99,0xab,0xba,0x52,0x43,0x71,0x60,0x14,0x05,0x37,0x26,0xde,0xcf, ++ 0xfd,0xec,0x98,0x89,0xbb,0xaa,0x63,0x72,0x40,0x51,0x25,0x34,0x06,0x17,0xef, ++ 0xfe,0xcc,0xdd,0xa9,0xb8,0x8a,0x9b,0x73,0x62,0x50,0x41,0x35,0x24,0x16,0x07, ++ 0xff,0xee,0xdc,0xcd,0xb9,0xa8,0x9a,0x8b,0x84,0x95,0xa7,0xb6,0xc2,0xd3,0xe1, ++ 0xf0,0x08,0x19,0x2b,0x3a,0x4e,0x5f,0x6d,0x7c,0x94,0x85,0xb7,0xa6,0xd2,0xc3, ++ 0xf1,0xe0,0x18,0x09,0x3b,0x2a,0x5e,0x4f,0x7d,0x6c,0xa5,0xb4,0x86,0x97,0xe3, ++ 0xf2,0xc0,0xd1,0x29,0x38,0x0a,0x1b,0x6f,0x7e,0x4c,0x5d,0xb5,0xa4,0x96,0x87, ++ 0xf3,0xe2,0xd0,0xc1,0x39,0x28,0x1a,0x0b,0x7f,0x6e,0x5c,0x4d,0xc6,0xd7,0xe5, ++ 0xf4,0x80,0x91,0xa3,0xb2,0x4a,0x5b,0x69,0x78,0x0c,0x1d,0x2f,0x3e,0xd6,0xc7, ++ 0xf5,0xe4,0x90,0x81,0xb3,0xa2,0x5a,0x4b,0x79,0x68,0x1c,0x0d,0x3f,0x2e,0xe7, ++ 0xf6,0xc4,0xd5,0xa1,0xb0,0x82,0x93,0x6b,0x7a,0x48,0x59,0x2d,0x3c,0x0e,0x1f, ++ 0xf7,0xe6,0xd4,0xc5,0xb1,0xa0,0x92,0x83,0x7b,0x6a,0x58,0x49,0x3d,0x2c,0x1e, ++ 0x0f}; ++ ++/************************************************************************* ++* FPGA functions ++************************************************************************/ ++ ++static void delay(int ms) ++{ ++ unsigned long timeout = jiffies + ((ms*HZ)/1000); ++ while (jiffies < timeout); ++} ++ ++/* ++ * reset FPGA ++ */ ++ ++static void fpga_reset(int iobase) ++{ ++ outb(0, IER(iobase)); ++ outb(LCR_DLAB|LCR_BIT5, LCR(iobase)); ++ outb(1, DLL(iobase)); ++ outb(0, DLM(iobase)); ++ ++ outb(LCR_BIT5, LCR(iobase)); ++ inb(LSR(iobase)); ++ inb(MSR(iobase)); ++ /* turn off FPGA supply voltage */ ++ outb(MCR_OUT1|MCR_OUT2, MCR(iobase)); ++ delay(100); ++ /* turn on FPGA supply voltage again */ ++ outb(MCR_DTR|MCR_RTS|MCR_OUT1|MCR_OUT2, MCR(iobase)); ++ delay(100); ++} ++ ++/* ++ * send one byte to FPGA ++ */ ++ ++static int fpga_write(int iobase, unsigned char wrd) ++{ ++ unsigned char bit; ++ int k; ++ unsigned long timeout = jiffies + HZ/10; ++ ++ for (k=0; k<8; k++) { ++ bit = (wrd&0x80)?(MCR_RTS|MCR_DTR):MCR_DTR; ++ outb(bit|MCR_OUT1|MCR_OUT2, MCR(iobase)); ++ wrd <<=1 ; ++ outb(0xfc, THR(iobase)); ++ while ((inb(LSR(iobase)) & LSR_TSRE) == 0) ++ if (jiffies > timeout) return -1; ++ } ++ ++ return 0; ++} ++ ++#ifdef MODULE ++static void free_mcs(void) ++{ ++ struct yam_mcs *p; ++ ++ while (yam_data) { ++ p = yam_data; ++ yam_data = yam_data->next; ++ kfree(p); ++ } ++} ++#endif ++ ++static unsigned char *add_mcs(unsigned char *bits, int bitrate) ++{ ++ struct yam_mcs *p; ++ ++ /* If it already exists, replace the bit data */ ++ p = yam_data; ++ while (p) { ++ if (p->bitrate == bitrate) { ++ memcpy(p->bits, bits, YAM_FPGA_SIZE); ++ return p->bits; ++ } ++ p = p->next; ++ } ++ ++ /* Allocate a new mcs */ ++ p = kmalloc(sizeof(struct yam_mcs), GFP_ATOMIC); ++ if (p == NULL) { ++ printk(KERN_WARNING "YAM: no memory to allocate mcs\n"); ++ return NULL; ++ } ++ ++ memcpy(p->bits, bits, YAM_FPGA_SIZE); ++ p->bitrate = bitrate; ++ p->next = yam_data; ++ yam_data = p; ++ ++ return p->bits; ++} ++ ++static unsigned char *get_mcs(int bitrate) ++{ ++ struct yam_mcs *p; ++ ++ p = yam_data; ++ while (p) { ++ if (p->bitrate == bitrate) ++ return p->bits; ++ p = p->next; ++ } ++ ++ /* Load predefined mcs data */ ++ switch (bitrate) { ++ case 1200 : ++ return add_mcs(bits_1200, bitrate); ++ default : ++ return add_mcs(bits_9600, bitrate); ++ } ++} ++ ++/* ++ * download bitstream to FPGA ++ * data is contained in bits[] array in fpgaconf.h ++ */ ++ ++static int fpga_download(int iobase, int bitrate) ++{ ++ int i, rc; ++ unsigned char *pbits; ++ ++ pbits = get_mcs(bitrate); ++ if (pbits == NULL) ++ return -1; ++ ++ fpga_reset(iobase); ++ for(i = 0 ; i < YAM_FPGA_SIZE ; i++) { ++ if (fpga_write(iobase, pbits[i])) { ++ printk("yam: error in write cycle\n"); ++ return -1; /* write... */ ++ } ++ } ++ ++ fpga_write(iobase, 0xFF); ++ rc = inb(MSR(iobase)); /* check DONE signal */ ++ ++ /* Necesary for some hardwares */ ++ delay(50); ++ ++ return (rc & MSR_DSR) ? 0 : -1; ++} ++ ++ ++/************************************************************************ ++* Serial port init ++************************************************************************/ ++ ++static void yam_set_uart(struct device *dev) ++{ ++ struct yam_port *yp = (struct yam_port *)dev->priv; ++ int divisor = 115200/yp->baudrate; ++ ++ outb(0, IER(dev->base_addr)); ++ outb(LCR_DLAB|LCR_BIT8, LCR(dev->base_addr)); ++ outb(divisor, DLL(dev->base_addr)); ++ outb(0, DLM(dev->base_addr)); ++ outb(LCR_BIT8, LCR(dev->base_addr)); ++ outb(PTT_OFF, MCR(dev->base_addr)); ++ outb(0x00, FCR(dev->base_addr)); ++ ++ /* Flush pending irq */ ++ ++ inb(RBR(dev->base_addr)); ++ inb(MSR(dev->base_addr)); ++ ++ /* Enable rx irq */ ++ ++ outb(ENABLE_RTXINT, IER(dev->base_addr)); ++ /* if (yp->dupmode) { ++ outb(ENABLE_RTXINT, IER(dev->base_addr)); ++ } ++ else { ++ outb(ENABLE_RXINT, IER(dev->base_addr)); ++ outb(ENABLE_RTXINT, IER(dev->base_addr)); ++ } */ ++} ++ ++ ++/* --------------------------------------------------------------------- */ ++ ++enum uart { c_uart_unknown, c_uart_8250, ++ c_uart_16450, c_uart_16550, c_uart_16550A}; ++static const char *uart_str[] = ++ { "unknown", "8250", "16450", "16550", "16550A" }; ++ ++static enum uart yam_check_uart(unsigned int iobase) ++{ ++ unsigned char b1,b2,b3; ++ enum uart u; ++ enum uart uart_tab[] = ++ { c_uart_16450, c_uart_unknown, c_uart_16550, c_uart_16550A }; ++ ++ b1 = inb(MCR(iobase)); ++ outb(b1 | 0x10, MCR(iobase)); /* loopback mode */ ++ b2 = inb(MSR(iobase)); ++ outb(0x1a, MCR(iobase)); ++ b3 = inb(MSR(iobase)) & 0xf0; ++ outb(b1, MCR(iobase)); /* restore old values */ ++ outb(b2, MSR(iobase)); ++ if (b3 != 0x90) ++ return c_uart_unknown; ++ inb(RBR(iobase)); ++ inb(RBR(iobase)); ++ outb(0x01, FCR(iobase)); /* enable FIFOs */ ++ u = uart_tab[(inb(IIR(iobase)) >> 6) & 3]; ++ if (u == c_uart_16450) { ++ outb(0x5a, SCR(iobase)); ++ b1 = inb(SCR(iobase)); ++ outb(0xa5, SCR(iobase)); ++ b2 = inb(SCR(iobase)); ++ if ((b1 != 0x5a) || (b2 != 0xa5)) ++ u = c_uart_8250; ++ } ++ return u; ++} ++ ++/****************************************************************************** ++* Rx Section ++******************************************************************************/ ++static void inline yam_rx_flag(struct device *dev, struct yam_port *yp) ++{ ++ if (yp->dcd && yp->rx_len >= 3 && yp->rx_len < YAM_MAX_FRAME) { ++ int pkt_len = yp->rx_len - 2 + 1; /* -CRC + kiss */ ++ struct sk_buff *skb; ++ ++ if ((yp->rx_crch & yp->rx_crcl) != 0xFF) { ++ /* Bad crc */ ++ } ++ else { ++ if (!(skb = dev_alloc_skb(pkt_len))) { ++ printk("%s: memory squeeze, dropping packet\n", dev->name); ++ ++yp->stats.rx_dropped; ++ } ++ else { ++ unsigned char *cp; ++ skb->dev = dev; ++ cp = skb_put(skb, pkt_len); ++ *cp++ = 0; /* KISS kludge */ ++ memcpy(cp, yp->rx_buf, pkt_len - 1); ++ skb->protocol = htons(ETH_P_AX25); ++ skb->mac.raw = skb->data; ++ netif_rx(skb); ++ ++yp->stats.rx_packets; ++ } ++ } ++ } ++ yp->rx_len = 0; ++ yp->rx_crcl = 0x21; ++ yp->rx_crch = 0xf3; ++} ++ ++static void inline yam_rx_byte(struct device *dev, struct yam_port *yp, unsigned char rxb) ++{ ++ if (yp->rx_len < YAM_MAX_FRAME) { ++ unsigned char c = yp->rx_crcl; ++ yp->rx_crcl = (chktabl[c]^yp->rx_crch); ++ yp->rx_crch = (chktabh[c]^rxb); ++ yp->rx_buf[yp->rx_len++] = rxb; ++ } ++} ++ ++/******************************************************************************** ++* TX Section ++********************************************************************************/ ++ ++static void ptt_on(struct device *dev) ++{ ++ /* struct yam_port *yp = (struct yam_port *)dev->priv; */ ++ ++ outb(PTT_ON, MCR(dev->base_addr)); ++ /* inb(MSR(dev->base_addr)); ++ if (yp->dupmode) { ++ outb(ENABLE_RTXINT, IER(dev->base_addr)); ++ } ++ else { ++ outb(ENABLE_TXINT, IER(dev->base_addr)); ++ } */ ++} ++ ++static void ptt_off(struct device *dev) ++{ ++ /* struct yam_port *yp = (struct yam_port *)dev->priv; */ ++ ++ outb(PTT_OFF, MCR(dev->base_addr)); ++ /* if (yp->dupmode) { ++ outb(ENABLE_RTXINT, IER(dev->base_addr)); ++ } ++ else { ++ inb(RBR(dev->base_addr)); ++ outb(ENABLE_RXINT, IER(dev->base_addr)); ++ } */ ++} ++ ++static int yam_send_packet(struct sk_buff *skb, struct device *dev) ++{ ++ struct yam_port *yp = dev->priv; ++ ++ if (skb == NULL) { ++ /* dev_tint(dev); */ ++ return 0; ++ } ++ skb_queue_tail(&yp->send_queue, skb); ++ dev->trans_start = jiffies; ++ return 0; ++} ++ ++static void yam_start_tx(struct device *dev, struct yam_port *yp) ++{ ++ if ((yp->tx_state == TX_TAIL) || (yp->txd == 0)) ++ yp->tx_count = 1; ++ else ++ yp->tx_count = (yp->bitrate*yp->txd)/8000; ++ yp->tx_state = TX_HEAD; ++ ptt_on(dev); ++} ++ ++static unsigned short random_seed; ++ ++static inline unsigned short random_num(void) ++{ ++ random_seed = 28629 * random_seed + 157; ++ return random_seed; ++} ++ ++static void yam_arbitrate(struct device *dev) ++{ ++ struct yam_port *yp = dev->priv; ++ ++ if (!yp || yp->magic != YAM_MAGIC ++ || yp->tx_state!=TX_OFF || skb_queue_empty(&yp->send_queue)) { ++ return; ++ } ++ ++ /* tx_state is TX_OFF and there is data to send */ ++ ++ if (yp->dupmode) { ++ /* Full duplex mode, don't wait */ ++ yam_start_tx(dev, yp); ++ return; ++ } ++ ++ if (yp->dcd) { ++ /* DCD on, wait slotime ... */ ++ yp->slotcnt = yp->slot / 10; ++ return; ++ } ++ ++ /* Is slottime passed ? */ ++ if ((--yp->slotcnt) > 0) ++ return; ++ ++ yp->slotcnt = yp->slot / 10; ++ ++ /* is random > persist ? */ ++ if ((random_num() % 256) > yp->pers) ++ return; ++ ++ yam_start_tx(dev, yp); ++} ++ ++static void yam_dotimer(unsigned long dummy) ++{ ++ int i; ++ ++ for (i = 0; i < NR_PORTS; i++) { ++ struct device *dev = &yam_ports[i].dev; ++ if (dev->start) yam_arbitrate(dev); ++ } ++ yam_timer.expires = jiffies + HZ/100; ++ add_timer(&yam_timer); ++} ++ ++static void yam_tx_byte(struct device *dev, struct yam_port *yp) ++{ ++ struct sk_buff *skb; ++ unsigned char b, temp; ++ ++ switch (yp->tx_state) { ++ case TX_OFF: ++ break; ++ case TX_HEAD: ++ if (--yp->tx_count <= 0) { ++ if (!(skb = skb_dequeue(&yp->send_queue))) { ++ ptt_off(dev); ++ yp->tx_state = TX_OFF; ++ break; ++ } ++ yp->tx_state = TX_DATA; ++ if (skb->data[0] != 0) { ++/* do_kiss_params(s, skb->data, skb->len);*/ ++ dev_kfree_skb(skb); ++ break; ++ } ++ yp->tx_len = skb->len-1; /* strip KISS byte */ ++ if (yp->tx_len >= YAM_MAX_FRAME || yp->tx_len < 2) { ++ dev_kfree_skb(skb); ++ break; ++ } ++ memcpy(yp->tx_buf, skb->data+1, yp->tx_len); ++ dev_kfree_skb(skb); ++ yp->tx_count = 0; ++ yp->tx_crcl = 0x21; ++ yp->tx_crch = 0xf3; ++ yp->tx_state = TX_DATA; ++ } ++ break; ++ case TX_DATA: ++ b = yp->tx_buf[yp->tx_count++]; ++ outb(b, THR(dev->base_addr)); ++ temp = yp->tx_crcl; ++ yp->tx_crcl = chktabl[temp]^yp->tx_crch; ++ yp->tx_crch = chktabh[temp]^b; ++ if (yp->tx_count >= yp->tx_len) { ++ yp->tx_state = TX_CRC1; ++ } ++ break; ++ case TX_CRC1: ++ yp->tx_crch = chktabl[yp->tx_crcl]^yp->tx_crch; ++ yp->tx_crcl = chktabh[yp->tx_crcl]^chktabl[yp->tx_crch]^0xff; ++ outb(yp->tx_crcl, THR(dev->base_addr)); ++ yp->tx_state = TX_CRC2; ++ break; ++ case TX_CRC2: ++ outb(chktabh[yp->tx_crch]^0xFF, THR(dev->base_addr)); ++ if (skb_queue_empty(&yp->send_queue)) { ++ yp->tx_count = (yp->bitrate*yp->txtail)/8000; ++ if (yp->dupmode == 2) yp->tx_count += (yp->bitrate*yp->holdd)/8; ++ if (yp->tx_count == 0) yp->tx_count = 1; ++ yp->tx_state = TX_TAIL; ++ } ++ else { ++ yp->tx_count = 1; ++ yp->tx_state = TX_HEAD; ++ } ++ ++yp->stats.tx_packets; ++ break; ++ case TX_TAIL: ++ if (--yp->tx_count <= 0) { ++ yp->tx_state = TX_OFF; ++ ptt_off(dev); ++ } ++ break; ++ } ++} ++ ++/*********************************************************************************** ++* ISR routine ++************************************************************************************/ ++ ++static void yam_interrupt(int irq, void *dev_id, struct pt_regs *regs) ++{ ++ struct device *dev; ++ struct yam_port *yp; ++ unsigned char iir; ++ int counter = 100; ++ int i; ++ ++ sti(); ++ ++ for (i = 0 ; i < NR_PORTS ; i++) { ++ yp = &yam_ports[i]; ++ dev = &yp->dev; ++ ++ if (!dev->start) ++ continue; ++ ++ while ( (iir = IIR_MASK & inb(IIR(dev->base_addr)) ) != IIR_NOPEND) { ++ unsigned char msr = inb(MSR(dev->base_addr)); ++ unsigned char lsr = inb(LSR(dev->base_addr)); ++ unsigned char rxb; ++ ++ if (lsr & LSR_OE) ++ ++yp->stats.rx_fifo_errors; ++ ++ yp->dcd = (msr & RX_DCD) ? 1 : 0; ++ ++ if (--counter <= 0) { ++ printk("%s: too many irq iir=%d\n", dev->name, iir); ++ return; ++ } ++ ++ if (msr & TX_RDY) { ++ ++yp->nb_mdint; ++ yam_tx_byte(dev, yp); ++ } ++ ++ if (lsr & LSR_RXC) { ++ ++yp->nb_rxint; ++ rxb = inb(RBR(dev->base_addr)); ++ if (msr & RX_FLAG) yam_rx_flag(dev, yp); ++ else yam_rx_byte(dev, yp, rxb); ++ } ++ /* ++ switch (iir) { ++ case IIR_MSR: ++ ++yp->nb_mdint; ++ if (msr & TX_RDY) yam_tx_byte(dev, yp); ++ break; ++ case IIR_RX: ++ ++yp->nb_rxint; ++ rxb = inb(RBR(dev->base_addr)); ++ if (msr & RX_FLAG) yam_rx_flag(dev, yp); ++ else yam_rx_byte(dev, yp, rxb); ++ break; ++ } ++ */ ++ } ++ } ++} ++ ++static int yam_net_get_info(char *buffer, char **start, off_t offset, int length, int dummy) ++{ ++ int len = 0; ++ int i; ++ off_t pos = 0; ++ off_t begin = 0; ++ ++ cli(); ++ ++ for (i = 0; i < NR_PORTS; i++) ++ { ++ if (yam_ports[i].iobase == 0 || yam_ports[i].irq == 0) ++ continue; ++ len += sprintf(buffer+len, "Device %s\n", yam_ports[i].name); ++ len += sprintf(buffer+len, " Up %d\n", yam_ports[i].dev.start); ++ len += sprintf(buffer+len, " Speed %u\n", yam_ports[i].bitrate); ++ len += sprintf(buffer+len, " IoBase 0x%x\n", yam_ports[i].iobase); ++ len += sprintf(buffer+len, " BaudRate %u\n", yam_ports[i].baudrate); ++ len += sprintf(buffer+len, " IRQ %u\n", yam_ports[i].irq); ++ len += sprintf(buffer+len, " TxState %u\n", yam_ports[i].tx_state); ++ len += sprintf(buffer+len, " Duplex %u\n", yam_ports[i].dupmode); ++ len += sprintf(buffer+len, " HoldDly %u\n", yam_ports[i].holdd); ++ len += sprintf(buffer+len, " TxDelay %u\n", yam_ports[i].txd); ++ len += sprintf(buffer+len, " TxTail %u\n", yam_ports[i].txtail); ++ len += sprintf(buffer+len, " SlotTime %u\n", yam_ports[i].slot); ++ len += sprintf(buffer+len, " Persist %u\n", yam_ports[i].pers); ++ len += sprintf(buffer+len, " TxFrames %lu\n", yam_ports[i].stats.tx_packets); ++ len += sprintf(buffer+len, " RxFrames %lu\n", yam_ports[i].stats.rx_packets); ++ len += sprintf(buffer+len, " TxInt %u\n", yam_ports[i].nb_mdint); ++ len += sprintf(buffer+len, " RxInt %u\n", yam_ports[i].nb_rxint); ++ len += sprintf(buffer+len, " RxOver %lu\n", yam_ports[i].stats.rx_fifo_errors); ++ len += sprintf(buffer+len, "\n"); ++ ++ pos = begin + len; ++ ++ if (pos < offset) { ++ len = 0; ++ begin = pos; ++ } ++ ++ if (pos > offset + length) ++ break; ++ } ++ ++ sti(); ++ ++ *start = buffer + (offset - begin); ++ len -= (offset - begin); ++ ++ if (len > length) len = length; ++ ++ return len; ++} ++ ++#ifdef CONFIG_INET ++#ifndef PROC_NET_YAM ++#define PROC_NET_YAM (PROC_NET_LAST+10) /* Sorry again... */ ++#endif ++ ++struct proc_dir_entry yam_proc_dir_entry = ++{ ++ PROC_NET_YAM, 3, "yam", S_IFREG | S_IRUGO, 1, 0, 0, 0, ++ &proc_net_inode_operations, yam_net_get_info ++}; ++ ++#define yam_net_procfs_init() proc_net_register(&yam_proc_dir_entry); ++#define yam_net_procfs_remove() proc_net_unregister(PROC_NET_YAM); ++#else ++#define yam_net_procfs_init() ++#define yam_net_procfs_remove() ++#endif ++ ++/* --------------------------------------------------------------------- */ ++ ++#if LINUX_VERSION_CODE >= 0x20119 ++static struct net_device_stats *yam_get_stats(struct device *dev) ++#else ++static struct enet_statistics *yam_get_stats(struct device *dev) ++#endif ++{ ++ struct yam_port *yp; ++ ++ if (!dev || !dev->priv) ++ return NULL; ++ ++ yp = (struct yam_port *)dev->priv; ++ if (yp->magic != YAM_MAGIC) ++ return NULL; ++ ++ /* ++ * Get the current statistics. This may be called with the ++ * card open or closed. ++ */ ++ return &yp->stats; ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++static int yam_open(struct device *dev) ++{ ++ struct yam_port *yp = (struct yam_port *)dev->priv; ++ enum uart u; ++ int i; ++ ++ printk(KERN_INFO "Trying %s at iobase 0x%lx irq %u\n", dev->name, dev->base_addr, dev->irq); ++ ++ if (!dev || !yp || !yp->bitrate) ++ return -ENXIO; ++ if (!dev->base_addr || dev->base_addr > 0x1000-YAM_EXTENT || ++ dev->irq < 2 || dev->irq > 15) { ++ return -ENXIO; ++ } ++ if (check_region(dev->base_addr, YAM_EXTENT)) { ++ printk("%s: cannot 0x%lx busy\n", dev->name, dev->base_addr); ++ return -EACCES; ++ } ++ if ((u = yam_check_uart(dev->base_addr)) == c_uart_unknown) { ++ printk("%s: cannot find uart type\n", dev->name); ++ return -EIO; ++ } ++ ++ if (fpga_download(dev->base_addr, yp->bitrate)) { ++ printk("%s: cannot init FPGA\n", dev->name); ++ return -EIO; ++ } ++ ++ outb(0, IER(dev->base_addr)); ++ if (request_irq(dev->irq, yam_interrupt, SA_INTERRUPT|SA_SHIRQ, dev->name, NULL)) { ++ printk("%s: irq %d busy\n", dev->name, dev->irq); ++ return -EBUSY; ++ } ++ ++ request_region(dev->base_addr, YAM_EXTENT, dev->name); ++ ++ yam_set_uart(dev); ++ dev->start = 1; ++ yp->slotcnt = yp->slot / 10; ++ ++ /* Reset overruns for all ports - FPGA programming makes overruns */ ++ for (i = 0 ; i < NR_PORTS ; i++) { ++ inb(LSR(yam_ports[i].dev.base_addr)); ++ yam_ports[i].stats.rx_fifo_errors = 0; ++ } ++ ++ printk(KERN_INFO "%s at iobase 0x%lx irq %u uart %s\n", dev->name, dev->base_addr, dev->irq, ++ uart_str[u]); ++ MOD_INC_USE_COUNT; ++ return 0; ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++static int yam_close(struct device *dev) ++{ ++ struct sk_buff *skb; ++ struct yam_port *yp = (struct yam_port *)dev->priv; ++ ++ if (!dev || !yp) ++ return -EINVAL; ++ /* ++ * disable interrupts ++ */ ++ outb(0, IER(dev->base_addr)); ++ outb(1, MCR(dev->base_addr)); ++ /* Remove IRQ handler if last */ ++ free_irq(dev->irq, NULL); ++ release_region(dev->base_addr, YAM_EXTENT); ++ dev->start = 0; ++ dev->tbusy = 1; ++ while ((skb = skb_dequeue(&yp->send_queue))) ++ dev_kfree_skb(skb); ++ ++ printk(KERN_INFO "%s: close yam at iobase 0x%lx irq %u\n", ++ yam_drvname, dev->base_addr, dev->irq); ++ MOD_DEC_USE_COUNT; ++ return 0; ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++static int yam_ioctl(struct device *dev, struct ifreq *ifr, int cmd) ++{ ++ struct yam_port *yp = (struct yam_port *)dev->priv; ++ struct yamdrv_ioctl_cfg yi; ++ struct yamdrv_ioctl_mcs *ym; ++ int ioctl_cmd; ++ ++ if (copy_from_user(&ioctl_cmd, ifr->ifr_data, sizeof(int))) ++ return -EFAULT; ++ ++ if (yp == NULL || yp->magic != YAM_MAGIC) ++ return -EINVAL; ++ ++ if (!suser()) return -EPERM; ++ ++ if (cmd != SIOCDEVPRIVATE) ++ return -EINVAL; ++ ++ switch(ioctl_cmd) { ++ ++ case SIOCYAMRESERVED: ++ return -EINVAL; /* unused */ ++ ++ case SIOCYAMSMCS: ++ if (dev->start) ++ return -EINVAL; /* Cannot change this parameter when up */ ++ ym = kmalloc(sizeof(struct yamdrv_ioctl_mcs), GFP_ATOMIC); ++ ym->bitrate = 9600; ++ if (copy_from_user(ym, ifr->ifr_data, sizeof(struct yamdrv_ioctl_mcs))) ++ return -EFAULT; ++ if (ym->bitrate > YAM_MAXBITRATE) return -EINVAL; ++ add_mcs(ym->bits, ym->bitrate); ++ kfree(ym); ++ break; ++ ++ case SIOCYAMSCFG: ++ if (copy_from_user(&yi, ifr->ifr_data, sizeof(struct yamdrv_ioctl_cfg))) ++ return -EFAULT; ++ ++ if ((yi.cfg.mask & YAM_IOBASE) && dev->start) ++ return -EINVAL; /* Cannot change this parameter when up */ ++ if ((yi.cfg.mask & YAM_IRQ) && dev->start) ++ return -EINVAL; /* Cannot change this parameter when up */ ++ if ((yi.cfg.mask & YAM_BITRATE) && dev->start) ++ return -EINVAL; /* Cannot change this parameter when up */ ++ if ((yi.cfg.mask & YAM_BAUDRATE) && dev->start) ++ return -EINVAL; /* Cannot change this parameter when up */ ++ ++ if (yi.cfg.mask & YAM_IOBASE) { ++ yp->iobase = yi.cfg.iobase; ++ dev->base_addr = yi.cfg.iobase; ++ } ++ if (yi.cfg.mask & YAM_IRQ) { ++ if (yi.cfg.irq > 15) return -EINVAL; ++ yp->irq = yi.cfg.irq; ++ dev->irq = yi.cfg.irq; ++ } ++ if (yi.cfg.mask & YAM_BITRATE) { ++ if (yi.cfg.bitrate > YAM_MAXBITRATE) return -EINVAL; ++ yp->bitrate = yi.cfg.bitrate; ++ } ++ if (yi.cfg.mask & YAM_BAUDRATE) { ++ if (yi.cfg.baudrate > YAM_MAXBAUDRATE) return -EINVAL; ++ yp->baudrate = yi.cfg.baudrate; ++ } ++ if (yi.cfg.mask & YAM_MODE) { ++ if (yi.cfg.mode > YAM_MAXMODE) return -EINVAL; ++ yp->dupmode = yi.cfg.mode; ++ } ++ if (yi.cfg.mask & YAM_HOLDDLY) { ++ if (yi.cfg.holddly > YAM_MAXHOLDDLY) return -EINVAL; ++ yp->holdd = yi.cfg.holddly; ++ } ++ if (yi.cfg.mask & YAM_TXDELAY) { ++ if (yi.cfg.txdelay > YAM_MAXTXDELAY) return -EINVAL; ++ yp->txd = yi.cfg.txdelay; ++ } ++ if (yi.cfg.mask & YAM_TXTAIL) { ++ if (yi.cfg.txtail > YAM_MAXTXTAIL) return -EINVAL; ++ yp->txtail = yi.cfg.txtail; ++ } ++ if (yi.cfg.mask & YAM_PERSIST) { ++ if (yi.cfg.persist > YAM_MAXPERSIST) return -EINVAL; ++ yp->pers = yi.cfg.persist; ++ } ++ if (yi.cfg.mask & YAM_SLOTTIME) { ++ if (yi.cfg.slottime > YAM_MAXSLOTTIME) return -EINVAL; ++ yp->slot = yi.cfg.slottime; ++ yp->slotcnt = yp->slot / 10; ++ } ++ break; ++ ++ case SIOCYAMGCFG: ++ yi.cfg.mask = 0xffffffff; ++ yi.cfg.iobase = yp->iobase; ++ yi.cfg.irq = yp->irq; ++ yi.cfg.bitrate = yp->bitrate; ++ yi.cfg.baudrate = yp->baudrate; ++ yi.cfg.mode = yp->dupmode; ++ yi.cfg.txdelay = yp->txd; ++ yi.cfg.holddly = yp->holdd; ++ yi.cfg.txtail = yp->txtail; ++ yi.cfg.persist = yp->pers; ++ yi.cfg.slottime = yp->slot; ++ if (copy_to_user(ifr->ifr_data, &yi, sizeof(struct yamdrv_ioctl_cfg))) ++ return -EFAULT; ++ break; ++ ++ default: ++ return -EINVAL; ++ ++ } ++ ++ return 0; ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++static int yam_set_mac_address(struct device *dev, void *addr) ++{ ++ struct sockaddr *sa = (struct sockaddr *)addr; ++ ++ /* addr is an AX.25 shifted ASCII mac address */ ++ memcpy(dev->dev_addr, sa->sa_data, dev->addr_len); ++ return 0; ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++static int yam_probe(struct device *dev) ++{ ++ struct yam_port *yp; ++ ++ if (!dev) ++ return -ENXIO; ++ ++ yp = (struct yam_port *)dev->priv; ++ ++ dev->open = yam_open; ++ dev->stop = yam_close; ++ dev->do_ioctl = yam_ioctl; ++ dev->hard_start_xmit = yam_send_packet; ++ dev->get_stats = yam_get_stats; ++ ++ dev_init_buffers(dev); ++ skb_queue_head_init(&yp->send_queue); ++ ++#if defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE) ++ dev->hard_header = ax25_encapsulate; ++ dev->rebuild_header = ax25_rebuild_header; ++#else /* CONFIG_AX25 || CONFIG_AX25_MODULE */ ++ dev->hard_header = NULL; ++ dev->rebuild_header = NULL; ++#endif /* CONFIG_AX25 || CONFIG_AX25_MODULE */ ++ ++ dev->set_mac_address = yam_set_mac_address; ++ ++ dev->type = ARPHRD_AX25; /* AF_AX25 device */ ++ dev->hard_header_len = 73; /* We do digipeaters now */ ++ dev->mtu = 256; /* AX25 is the default */ ++ dev->addr_len = 7; /* sizeof an ax.25 address */ ++ memcpy(dev->broadcast, ax25_bcast, 7); ++ memcpy(dev->dev_addr, ax25_test, 7); ++ ++ /* New style flags */ ++ dev->flags = 0; ++ ++ return 0; ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++__initfunc(int yam_init(struct device *dev)) ++{ ++ int i; ++ ++ printk(yam_drvinfo); ++ ++ /* Clears the IRQ table */ ++ memset(irqs, 0, sizeof(irqs)); ++ memset(yam_ports, 0, sizeof(yam_ports)); ++ ++ for(i = 0; i < NR_PORTS; i++) { ++ sprintf(yam_ports[i].name, "yam%d", i); ++ yam_ports[i].magic = YAM_MAGIC; ++ yam_ports[i].bitrate = DEFAULT_BITRATE; ++ yam_ports[i].baudrate = DEFAULT_BITRATE * 2; ++ yam_ports[i].iobase = 0; ++ yam_ports[i].irq = 0; ++ yam_ports[i].dupmode = 0; ++ yam_ports[i].holdd = DEFAULT_HOLDD; ++ yam_ports[i].txd = DEFAULT_TXD; ++ yam_ports[i].txtail = DEFAULT_TXTAIL; ++ yam_ports[i].slot = DEFAULT_SLOT; ++ yam_ports[i].pers = DEFAULT_PERS; ++ ++ dev = &yam_ports[i].dev; ++ ++ dev->priv = &yam_ports[i]; ++ dev->name = yam_ports[i].name; ++ dev->base_addr = yam_ports[i].iobase; ++ dev->irq = yam_ports[i].irq; ++ dev->init = yam_probe; ++ dev->if_port = 0; ++ dev->start = 0; ++ dev->tbusy = 1; ++ ++ if (register_netdev(dev)) { ++ printk(KERN_WARNING "yam: cannot register net device %s\n", dev->name); ++ return -ENXIO; ++ } ++ } ++ ++ yam_timer.function = yam_dotimer; ++ yam_timer.expires = jiffies + HZ/100; ++ add_timer(&yam_timer); ++ ++ yam_net_procfs_init(); ++ ++ /* do not keep this device */ ++ return 1; ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++#ifdef MODULE ++ ++/* ++ * command line settable parameters ++ */ ++ ++#if LINUX_VERSION_CODE >= 0x20115 ++ ++MODULE_AUTHOR("Frederic Rible F1OAT frible@teaser.fr"); ++MODULE_DESCRIPTION("Yam amateur radio modem driver"); ++ ++#endif ++ ++__initfunc(int init_module(void)) ++{ ++ int ret = yam_init(NULL); ++ ++ return (ret == 1) ? 0 : ret; ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++void cleanup_module(void) ++{ ++ int i; ++ ++ del_timer(&yam_timer); ++ for(i = 0; i < NR_PORTS; i++) { ++ struct device *dev = &yam_ports[i].dev; ++ if (!dev->priv) continue; ++ if (dev->start) yam_close(dev); ++ unregister_netdev(dev); ++ } ++ free_mcs(); ++ yam_net_procfs_remove(); ++} ++ ++#endif /* MODULE */ ++/* --------------------------------------------------------------------- */ diff --git a/yamdrv/yamcfg.c b/yamdrv/yamcfg.c new file mode 100644 index 0000000..59e2273 --- /dev/null +++ b/yamdrv/yamcfg.c @@ -0,0 +1,351 @@ +/*****************************************************************************/ + +/* + * yaminit.c -- YAM radio modem driver setup utility. + * + * Copyright (C) 1998 Jean-Paul ROUBELAT (jpr@f6fbb.org) + * Adapted from sethdlc.c written by Thomas Sailer (sailer@ife.ee.ethz.ch) + * + * 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. + * + * Please note that the GPL allows you to use the driver, NOT the radio. + * In order to use the radio, you need a license from the communications + * authority of your country. + * + * + * History: + * 0.0 29.07.98 First draft + */ + +/*****************************************************************************/ + +/* ---------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "yam.h" + +static unsigned char bitswap (unsigned char c) +{ + unsigned char r = 0; + int i; + + for (i = 0; i < 8; i++) + { + r <<= 1; + if (c & 1) + r |= 1; + c >>= 1; + } + return r; +} + +static int in2hex (char *ptr) +{ + char str[3]; + int val; + + memcpy (str, ptr, 2); + str[2] = '\0'; + + sscanf (str, "%x", &val); + + return val; +} + +static int set_mcs (char *name, struct ifreq *ifr, int sock, int bitrate, char *filename) +{ + struct yamdrv_ioctl_mcs yammcs; + FILE *fptr; + int nb, i, type, pos; + char buf[256]; + + yammcs.bitrate = bitrate; + + fptr = fopen (filename, "r"); + if (fptr == NULL) + { + fprintf (stderr, "%s: file %s not found\n", name, filename); + return -1; + } + + pos = 0; + + while (fgets (buf, sizeof (buf), fptr)) + { + nb = in2hex (buf + 1); + type = in2hex (buf + 7); + + if (type != 0) + continue; + + for (i = 0; i < nb; i++) + { + if (pos == YAM_FPGA_SIZE) + { + fclose (fptr); + printf ("fpga bytes are more than %d in %s mcs file\n", YAM_FPGA_SIZE, filename); + return -1; + } + yammcs.bits[pos++] = bitswap (in2hex (buf + 9 + i * 2)); + } + } + + fclose (fptr); + + if (pos != YAM_FPGA_SIZE) + { + printf ("fpga bytes are not %d in %s mcs file\n", YAM_FPGA_SIZE, filename); + return -1; + } + + ifr->ifr_data = (caddr_t) & yammcs; + yammcs.cmd = SIOCYAMSMCS; + + if (ioctl (sock, SIOCDEVPRIVATE, ifr) == -1) + { + fprintf (stderr, "%s: Error %s (%i), cannot ioctl SIOCYAMSMCS on %s\n", + name, strerror (errno), errno, ifr->ifr_name); + return -1; + } + + printf ("mcs file %s loaded for bitrate %d\n\n", filename, yammcs.bitrate); + + return 0; +} + +static int set_params (char *name, struct ifreq *ifr, int sock, int ac, char **av, unsigned *pmask) +{ + int len; + int bitrate = 0; + char *filename = NULL; + struct yamdrv_ioctl_cfg yamctl; + + printf ("\n"); + + yamctl.cfg.mask = 0; + + while (ac >= 2) + { + len = strlen (av[0]); + if (!strncasecmp (av[0], "iobase", len)) + { + yamctl.cfg.iobase = strtoul (av[1], NULL, 0); + yamctl.cfg.mask |= YAM_IOBASE; + } + else if (!strncasecmp (av[0], "irq", len)) + { + yamctl.cfg.irq = strtoul (av[1], NULL, 0); + yamctl.cfg.mask |= YAM_IRQ; + } + else if (!strncasecmp (av[0], "bitrate", len)) + { + yamctl.cfg.bitrate = strtoul (av[1], NULL, 0); + yamctl.cfg.mask |= YAM_BITRATE; + } + else if (!strncasecmp (av[0], "baudrate", len)) + { + yamctl.cfg.baudrate = strtoul (av[1], NULL, 0); + yamctl.cfg.mask |= YAM_BAUDRATE; + } + else if (!strncasecmp (av[0], "duplex", len)) + { + yamctl.cfg.mode = strtoul (av[1], NULL, 0); + yamctl.cfg.mask |= YAM_MODE; + } + else if (!strncasecmp (av[0], "hold", len)) + { + yamctl.cfg.holddly = strtoul (av[1], NULL, 0); + yamctl.cfg.mask |= YAM_HOLDDLY; + } + else if (!strncasecmp (av[0], "txdelay", len)) + { + yamctl.cfg.txdelay = strtoul (av[1], NULL, 0); + yamctl.cfg.mask |= YAM_TXDELAY; + } + else if (!strncasecmp (av[0], "txtail", len)) + { + yamctl.cfg.txtail = strtoul (av[1], NULL, 0); + yamctl.cfg.mask |= YAM_TXTAIL; + } + else if (!strncasecmp (av[0], "slottime", len)) + { + yamctl.cfg.slottime = strtoul (av[1], NULL, 0); + yamctl.cfg.mask |= YAM_SLOTTIME; + } + else if (!strncasecmp (av[0], "persist", len)) + { + yamctl.cfg.persist = strtoul (av[1], NULL, 0); + yamctl.cfg.mask |= YAM_PERSIST; + } + else if (!strncasecmp (av[0], "load", len)) + { + if (ac < 3) + break; + bitrate = strtoul (av[1], NULL, 0); + filename = av[2]; + av += 1; + ac -= 1; + } + else + { + fprintf (stderr, "%s: invalid parameter type '%s'\n", + name, av[0]); + } + av += 2; + ac -= 2; + } + if (ac > 0) + fprintf (stderr, "%s: orphaned parameter type '%s', no data\n", + name, av[0]); + + if (yamctl.cfg.mask) + { + ifr->ifr_data = (caddr_t) & yamctl; + yamctl.cmd = SIOCYAMSCFG; + *pmask = yamctl.cfg.mask; + + if (ioctl (sock, SIOCDEVPRIVATE, ifr) == -1) + { + fprintf (stderr, "%s: Error %s (%i), cannot ioctl SIOCYAMSCFG on %s\n", + name, strerror (errno), errno, ifr->ifr_name); + return -1; + } + } + + if (filename) + return set_mcs (name, ifr, sock, bitrate, filename); + + return 0; +} + +#define is_mask(m, n) (m & n) ? '*' : ' ' +static void get_params (char *name, struct ifreq *ifr, int sock, unsigned mask) +{ + char *dup; + struct yamdrv_ioctl_cfg yamctl; + + ifr->ifr_data = (caddr_t) & yamctl; + yamctl.cmd = SIOCYAMGCFG; + + if (ioctl (sock, SIOCDEVPRIVATE, ifr) == -1) + { + fprintf (stderr, "%s: Error %s (%i), cannot ioctl SIOCYAMGCFG on %s\n", + name, strerror (errno), errno, ifr->ifr_name); + return; + } + + switch (yamctl.cfg.mode) + { + case 0: + dup = "off"; + break; + case 1: + dup = "on"; + break; + case 2: + dup = "on+delay"; + break; + default: + dup = ""; + break; + } + + printf ("Device : %s\n", ifr->ifr_name); + printf ("iobase :%c%04x\n", is_mask (mask, YAM_IOBASE), yamctl.cfg.iobase); + printf ("bitrate :%c%u (bps)\n", is_mask (mask, YAM_BITRATE), yamctl.cfg.bitrate); + printf ("irq :%c%u\n", is_mask (mask, YAM_IRQ), yamctl.cfg.irq); + printf ("baudrate :%c%u (bps)\n", is_mask (mask, YAM_BAUDRATE), yamctl.cfg.baudrate); + printf ("fulldup :%c%s\n", is_mask (mask, YAM_MODE), dup); + if (yamctl.cfg.mode == 2) + printf ("holddelay :%c%-3u (sec)\n", is_mask (mask, YAM_HOLDDLY), yamctl.cfg.holddly); + printf ("txdelay :%c%-3u (ms)\n", is_mask (mask, YAM_TXDELAY), yamctl.cfg.txdelay); + printf ("txtail :%c%-3u (ms)\n", is_mask (mask, YAM_TXTAIL), yamctl.cfg.txtail); + printf ("slottime :%c%-3u (ms)\n", is_mask (mask, YAM_SLOTTIME), yamctl.cfg.slottime); + printf ("persist :%c%u\n", is_mask (mask, YAM_PERSIST), yamctl.cfg.persist); + printf ("\n"); +} + +static const char *usage_str = +"[-h] yamif\n" +" [iobase ] [irq ] [bitrate ] [baudrate ]\n" +" [duplex ] [hold ] [txdelay ]\n" +" [txtail ] [slottime ] [persist ]\n" +" [load ]\n" +" yamif: the name of the yam kernel driver interface (yam0)\n" +" -h: this help\n\n"; + +int main (int argc, char *argv[]) +{ + char name[256] = "yam0"; + struct ifreq ifr; + int sock; + unsigned int mask; + + printf ("\n%s: Version 0.1 (C) 1998 by Jean-Paul ROUBELAT - F6FBB\n", *argv); + + if ((argc < 2) || (strcasecmp (argv[1], "-h") == 0)) + { + printf ("usage: %s %s", *argv, usage_str); + return 1; + } + + strcpy (name, argv[1]); + + if ((sock = socket (PF_INET, SOCK_PACKET, htons (ETH_P_AX25))) < 0) + { + fprintf (stderr, "%s: Error %s (%i), cannot open %s\n", + argv[0], strerror (errno), errno, name); + return 2; + } + + strcpy (ifr.ifr_name, name); + if (ioctl (sock, SIOCGIFFLAGS, &ifr) < 0) + { + fprintf (stderr, "%s: Error %s (%i), cannot ioctl %s\n", + argv[0], strerror (errno), errno, name); + close (sock); + return 3; + } + + mask = 0; + + if (set_params (argv[0], &ifr, sock, argc - 2, argv + 2, &mask) == -1) + { + close (sock); + return 4; + } + + get_params (argv[0], &ifr, sock, mask); + + close (sock); + + return 0; +} -- cgit v1.2.3