From f7bb9f922dcebeca62fd13e4e7256f0de5296e23 Mon Sep 17 00:00:00 2001 From: Werner Almesberger Date: Wed, 29 Feb 2012 11:08:44 -0500 Subject: PR2028: Milkymist USB: forward MIDI messages. Forward MIDI messages from the softusb controller to the application. Signed-off-by: Gedare Bloom --- c/src/lib/libbsp/lm32/shared/milkymist_usbinput/comloc.h | 2 ++ c/src/lib/libbsp/lm32/shared/milkymist_usbinput/usbinput.c | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/comloc.h b/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/comloc.h index 538022b30d..40362b3f3f 100644 --- a/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/comloc.h +++ b/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/comloc.h @@ -22,5 +22,7 @@ #define COMLOC_MEVT(offset) COMLOCV(MM_SOFTUSB_DMEM_BASE+0x1102+offset) #define COMLOC_KEVT_PRODUCE COMLOCV(MM_SOFTUSB_DMEM_BASE+0x1142) #define COMLOC_KEVT(offset) COMLOCV(MM_SOFTUSB_DMEM_BASE+0x1143+offset) +#define COMLOC_MIDI_PRODUCE COMLOCV(MM_SOFTUSB_DMEM_BASE+0x1183) +#define COMLOC_MIDI(offset) COMLOCV(MM_SOFTUSB_DMEM_BASE+0x1184+offset) #endif /* __COMLOC_H_ */ diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/usbinput.c b/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/usbinput.c index 022d7306f6..69317489a9 100644 --- a/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/usbinput.c +++ b/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/usbinput.c @@ -35,6 +35,7 @@ static const unsigned char input_firmware[] = { static int mouse_consume; static int keyboard_consume; +static int midi_consume; static rtems_id event_q; @@ -58,6 +59,14 @@ static rtems_isr interrupt_handler(rtems_vector_number n) rtems_message_queue_send(event_q, msg, 8); keyboard_consume = (keyboard_consume + 1) & 0x07; } + + while(midi_consume != COMLOC_MIDI_PRODUCE) { + for(i=0;i<3;i++) + msg[i] = COMLOC_MIDI(4*midi_consume+i+1); + rtems_message_queue_send(event_q, msg, 3); + midi_consume = (midi_consume + 1) & 0x0f; + } + } rtems_device_driver usbinput_initialize( @@ -87,6 +96,7 @@ rtems_device_driver usbinput_initialize( mouse_consume = 0; keyboard_consume = 0; + midi_consume = 0; sc = rtems_io_register_name(DEVICE_NAME, major, 0); RTEMS_CHECK_SC(sc, "create USB input device"); -- cgit v1.2.3 From 396b80ebf6bc0e21d0128b9e768a8243e32372d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ralf=20Cors=C3=A9pius?= Date: Fri, 2 Mar 2012 09:31:38 +0100 Subject: =?UTF-8?q?2012-03-02=20Ralf=20Cors=C3=A9pius=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * configure.ac: Check for rcmd in unistd.h. * libnetworking/libc/rcmd.c: Build iff rcmd is declared in unistd.h. Change rcmd's decl to match with Linux/FreeBSD's decl. --- cpukit/ChangeLog | 6 ++++++ cpukit/configure.ac | 1 + cpukit/libnetworking/libc/rcmd.c | 5 ++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index 43b26202a8..bebed7c7f5 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,9 @@ +2012-03-02 Ralf Corsépius + + * configure.ac: Check for rcmd in unistd.h. + * libnetworking/libc/rcmd.c: Build iff rcmd is declared in unistd.h. + Change rcmd's decl to match with Linux/FreeBSD's decl. + 2011-12-14 Sebastian Huber PR 1924/cpukit diff --git a/cpukit/configure.ac b/cpukit/configure.ac index e3c6a59e74..7c5c731361 100644 --- a/cpukit/configure.ac +++ b/cpukit/configure.ac @@ -302,6 +302,7 @@ AC_CHECK_DECLS([LONG_BIT],,,[#include ]) ## BSD-ism, excluded from POSIX, but available on most platforms AC_CHECK_DECLS([sbrk],,,[#include ]) +AC_CHECK_DECLS([rcmd],,,[#include ]) ## Check if libc provides BSD's strlcpy/strlcat AC_CHECK_FUNCS(strlcpy strlcat) diff --git a/cpukit/libnetworking/libc/rcmd.c b/cpukit/libnetworking/libc/rcmd.c index d0fb281e1f..99e4f89c49 100644 --- a/cpukit/libnetworking/libc/rcmd.c +++ b/cpukit/libnetworking/libc/rcmd.c @@ -37,6 +37,8 @@ #include "config.h" #endif +#if HAVE_DECL_RCMD + #include #include #include @@ -81,7 +83,7 @@ static int __icheckhost(const struct sockaddr *, socklen_t, const char *); int rcmd( char **ahost, - u_short rport, + int rport, const char *locuser, const char *remuser, const char *cmd, @@ -545,3 +547,4 @@ __icheckhost(raddr, lhost) return (0); } #endif +#endif -- cgit v1.2.3 From 7f2036aa35f8055c0a2f775779cc512ae4293faa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ralf=20Cors=C3=A9pius?= Date: Fri, 2 Mar 2012 13:01:07 +0100 Subject: =?UTF-8?q?2012-03-02=20Ralf=20Cors=C3=A9pius=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * libnetworking/resolv.h: Partial sync with FreeBSD. Add decls for res_send_setqhook, res_send_setrhook. --- cpukit/ChangeLog | 5 + cpukit/libnetworking/resolv.h | 370 +++++++++++++++++++++--------------------- 2 files changed, 193 insertions(+), 182 deletions(-) diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index bebed7c7f5..5c8e2b13c4 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,8 @@ +2012-03-02 Ralf Corsépius + + * libnetworking/resolv.h: Partial sync with FreeBSD. + Add decls for res_send_setqhook, res_send_setrhook. + 2012-03-02 Ralf Corsépius * configure.ac: Check for rcmd in unistd.h. diff --git a/cpukit/libnetworking/resolv.h b/cpukit/libnetworking/resolv.h index 20b3120553..61f3c6f4c5 100644 --- a/cpukit/libnetworking/resolv.h +++ b/cpukit/libnetworking/resolv.h @@ -1,7 +1,7 @@ -/*- - * Copyright (c) 1983, 1987, 1989, 1993 - * The Regents of the University of California. All rights reserved. - * +/* + * Copyright (c) 1983, 1987, 1989 + * The Regents of the University of California. All rights reserved. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -10,11 +10,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -32,26 +28,26 @@ */ /* - * Portions Copyright (c) 1996 by Internet Software Consortium. + * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") + * Portions Copyright (c) 1996-1999 by Internet Software Consortium. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * - * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS - * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE - * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* +/*% * @(#)resolv.h 8.1 (Berkeley) 6/2/93 - * From Id: resolv.h,v 8.12 1998/04/28 19:36:46 halley Exp $ - * $Id$ + * $Id: resolv.h,v 1.19.18.4 2008/04/03 23:15:15 marka Exp $ + * $FreeBSD: release/9.0.0/include/resolv.h 203964 2010-02-16 19:39:50Z imp $ */ #ifndef _RESOLV_H_ @@ -63,7 +59,7 @@ #include #include /* struct in_addr */ -/* +/*% * Revision information. This is the release date in YYYYMMDD format. * It can change every day so the right thing to do with it is use it * in preprocessor commands such as "#if (__RES > 19931104)". Do not @@ -73,7 +69,7 @@ #define __RES 19960801 -/* +/*% * This used to be defined in res_query.c, now it's in herror.c. It was * never extern'd by any *.h file before it was placed here. herror.c is * part of libresolv.a even though it might make more sense in libnetdb.a @@ -82,7 +78,7 @@ extern int h_errno; -/* +/*% * Resolver configuration file. * Normally not present, but may contain the address of the * initial name server(s) to query and the domain search list. @@ -92,32 +88,54 @@ extern int h_errno; #define _PATH_RESCONF "/etc/resolv.conf" #endif -/* +typedef enum { res_goahead, res_nextns, res_modified, res_done, res_error } + res_sendhookact; + +typedef res_sendhookact (*res_send_qhook)(struct sockaddr_in * const *ns, + const u_char **query, + int *querylen, + u_char *ans, + int anssiz, + int *resplen); + +typedef res_sendhookact (*res_send_rhook)(const struct sockaddr_in *ns, + const u_char *query, + int querylen, + u_char *ans, + int anssiz, + int *resplen); + +struct res_sym { + int number; /*%< Identifying number, like T_MX */ + const char * name; /*%< Its symbolic name, like "MX" */ + const char * humanname; /*%< Its fun name, like "mail exchanger" */ +}; + +/*% * Global defines and variables for resolver stub. */ -#define MAXNS 3 /* max # name servers we'll track */ -#define MAXDFLSRCH 3 /* # default domain levels to try */ -#define MAXDNSRCH 6 /* max # domains in search path */ -#define LOCALDOMAINPARTS 2 /* min levels in name that is "local" */ - -#define RES_TIMEOUT 5 /* min. seconds between retries */ -#define MAXRESOLVSORT 10 /* number of net to sort on */ -#define RES_MAXNDOTS 15 /* should reflect bit field size */ +#define MAXNS 3 /*%< max # name servers we'll track */ +#define MAXDFLSRCH 3 /*%< # default domain levels to try */ +#define MAXDNSRCH 6 /*%< max # domains in search path */ +#define LOCALDOMAINPARTS 2 /*%< min levels in name that is "local" */ +#define RES_TIMEOUT 5 /*%< min. seconds between retries */ +#define MAXRESOLVSORT 10 /*%< number of net to sort on */ +#define RES_MAXNDOTS 15 /*%< should reflect bit field size */ struct __res_state { - int retrans; /* retransmission time interval */ - int retry; /* number of times to retransmit */ - u_long options; /* option flags - see below. */ - int nscount; /* number of name servers */ + int retrans; /*%< retransmission time interval */ + int retry; /*%< number of times to retransmit */ + u_long options; /*%< option flags - see below. */ + int nscount; /*%< number of name servers */ struct sockaddr_in - nsaddr_list[MAXNS]; /* address of name server */ -#define nsaddr nsaddr_list[0] /* for backward compatibility */ - u_short id; /* current message id */ - char *dnsrch[MAXDNSRCH+1]; /* components of domain to search */ - char defdname[256]; /* default domain (deprecated) */ - u_long pfcode; /* RES_PRF_ flags - see below. */ - unsigned ndots:4; /* threshold for initial abs. query */ - unsigned nsort:4; /* number of elements in sort_list[] */ + nsaddr_list[MAXNS]; /*%< address of name server */ +#define nsaddr nsaddr_list[0] /*%< for backward compatibility */ + u_short id; /*%< current message id */ + char *dnsrch[MAXDNSRCH+1]; /*%< components of domain to search */ + char defdname[256]; /*%< default domain (deprecated) */ + u_long pfcode; /*%< RES_PRF_ flags - see below. */ + unsigned ndots:4; /*%< threshold for initial abs. query */ + unsigned nsort:4; /*%< number of elements in sort_list[] */ char unused[3]; struct { struct in_addr addr; @@ -126,28 +144,31 @@ struct __res_state { char pad[72]; /* on an i386 this means 512b total */ }; -/* +typedef struct __res_state *res_state; + +/*% * Resolver options (keep these in synch with res_debug.c, please) */ -#define RES_INIT 0x00000001 /* address initialized */ -#define RES_DEBUG 0x00000002 /* print debug messages */ -#define RES_AAONLY 0x00000004 /* authoritative answers only (!IMPL)*/ -#define RES_USEVC 0x00000008 /* use virtual circuit */ -#define RES_PRIMARY 0x00000010 /* query primary server only (!IMPL) */ -#define RES_IGNTC 0x00000020 /* ignore truncation errors */ -#define RES_RECURSE 0x00000040 /* recursion desired */ -#define RES_DEFNAMES 0x00000080 /* use default domain name */ -#define RES_STAYOPEN 0x00000100 /* Keep TCP socket open */ -#define RES_DNSRCH 0x00000200 /* search up local domain tree */ -#define RES_INSECURE1 0x00000400 /* type 1 security disabled */ -#define RES_INSECURE2 0x00000800 /* type 2 security disabled */ -#define RES_NOALIASES 0x00001000 /* shuts off HOSTALIASES feature */ -#define RES_USE_INET6 0x00002000 /* use/map IPv6 in gethostbyname() */ -#define RES_NOTLDQUERY 0x00004000 /* Don't query TLD names */ +#define RES_INIT 0x00000001 /*%< address initialized */ +#define RES_DEBUG 0x00000002 /*%< print debug messages */ +#define RES_AAONLY 0x00000004 /*%< authoritative answers only (!IMPL)*/ +#define RES_USEVC 0x00000008 /*%< use virtual circuit */ +#define RES_PRIMARY 0x00000010 /*%< query primary server only (!IMPL) */ +#define RES_IGNTC 0x00000020 /*%< ignore truncation errors */ +#define RES_RECURSE 0x00000040 /*%< recursion desired */ +#define RES_DEFNAMES 0x00000080 /*%< use default domain name */ +#define RES_STAYOPEN 0x00000100 /*%< Keep TCP socket open */ +#define RES_DNSRCH 0x00000200 /*%< search up local domain tree */ +#define RES_INSECURE1 0x00000400 /*%< type 1 security disabled */ +#define RES_INSECURE2 0x00000800 /*%< type 2 security disabled */ +#define RES_NOALIASES 0x00001000 /*%< shuts off HOSTALIASES feature */ +#define RES_USE_INET6 0x00002000 /*%< use/map IPv6 in gethostbyname() */ +#define RES_NOTLDQUERY 0x00004000 /*%< Don't query TLD names */ -#define RES_DEFAULT (RES_RECURSE | RES_DEFNAMES | RES_DNSRCH) +#define RES_DEFAULT (RES_RECURSE | RES_DEFNAMES | \ + RES_DNSRCH) -/* +/*% * Resolver "pfcode" values. Used by dig. */ #define RES_PRF_STATS 0x00000001 @@ -164,137 +185,122 @@ struct __res_state { #define RES_PRF_HEADX 0x00000800 #define RES_PRF_QUERY 0x00001000 #define RES_PRF_REPLY 0x00002000 -#define RES_PRF_INIT 0x00004000 +#define RES_PRF_INIT 0x00004000 /* 0x00008000 */ -typedef enum { res_goahead, res_nextns, res_modified, res_done, res_error } - res_sendhookact; +#define fp_nquery __fp_nquery +#define fp_query __fp_query +#define hostalias __hostalias +#define p_query __p_query +#define res_close __res_close +#define res_init __res_init +#define res_isourserver __res_isourserver +#define res_mkquery __res_mkquery +#define res_query __res_query +#define res_querydomain __res_querydomain +#define res_search __res_search +#define res_send __res_send -typedef res_sendhookact (*res_send_qhook)(struct sockaddr_in * const *ns, - const u_char **query, - int *querylen, - u_char *ans, - int anssiz, - int *resplen); +__BEGIN_DECLS +void fp_nquery(const u_char *, int, FILE *); +void fp_query(const u_char *, FILE *); +const char * hostalias(const char *); +void p_query(const u_char *); +void res_close(void); +int res_init(void); +int res_isourserver(const struct sockaddr_in *); +int res_mkquery(int, const char *, int, int, const u_char *, + int, const u_char *, u_char *, int); +int res_query(const char *, int, int, u_char *, int); +int res_querydomain(const char *, const char *, int, int, + u_char *, int); +int res_search(const char *, int, int, u_char *, int); +int res_send(const u_char *, int, u_char *, int); +__END_DECLS -typedef res_sendhookact (*res_send_rhook)(const struct sockaddr_in *ns, - const u_char *query, - int querylen, - u_char *ans, - int anssiz, - int *resplen); +extern struct __res_state _res; -struct res_sym { - int number; /* Identifying number, like T_MX */ - char * name; /* Its symbolic name, like "MX" */ - char * humanname; /* Its fun name, like "mail exchanger" */ -}; -extern struct __res_state _res; extern const struct res_sym __p_class_syms[]; extern const struct res_sym __p_type_syms[]; /* Private routines shared between libc/net, named, nslookup and others. */ -#define res_hnok __res_hnok -#define res_ownok __res_ownok -#define res_mailok __res_mailok -#define res_dnok __res_dnok -#define sym_ston __sym_ston -#define sym_ntos __sym_ntos -#define sym_ntop __sym_ntop -#define b64_ntop __b64_ntop -#define b64_pton __b64_pton -#define loc_ntoa __loc_ntoa -#define loc_aton __loc_aton -#define fp_resstat __fp_resstat -#define p_query __p_query -#define dn_skipname __dn_skipname -#define fp_resstat __fp_resstat -#define fp_query __fp_query -#define fp_nquery __fp_nquery -#define hostalias __hostalias -#define putlong __putlong -#define putshort __putshort -#define p_class __p_class -#define p_time __p_time -#define p_type __p_type -#define p_query __p_query -#define p_cdnname __p_cdnname -#define p_section __p_section -#define p_cdname __p_cdname -#define p_fqnname __p_fqnname -#define p_fqname __p_fqname -#define p_option __p_option -#define p_secstodate __p_secstodate -#define dn_count_labels __dn_count_labels -#define dn_comp __dn_comp -#define dn_expand __dn_expand -#define res_init __res_init -#define res_randomid __res_randomid -#define res_query __res_query -#define res_search __res_search -#define res_querydomain __res_querydomain -#define res_mkquery __res_mkquery -#define res_send __res_send -#define res_isourserver __res_isourserver -#define res_nameinquery __res_nameinquery -#define res_queriesmatch __res_queriesmatch -#define res_close __res_close -#define res_mkupdate __res_mkupdate -#define res_mkupdrec __res_mkupdrec -#define res_freeupdrec __res_freeupdrec +#define b64_ntop __b64_ntop +#define b64_pton __b64_pton +#define dn_comp __dn_comp +#define dn_count_labels __dn_count_labels +#define dn_expand __dn_expand +#define dn_skipname __dn_skipname +#define fp_resstat __fp_resstat +#define loc_aton __loc_aton +#define loc_ntoa __loc_ntoa +#define p_cdname __p_cdname +#define p_cdnname __p_cdnname +#define fp_resstat __fp_resstat +#define p_class __p_class +#define p_fqname __p_fqname +#define p_fqnname __p_fqnname +#define p_option __p_option +#define p_secstodate __p_secstodate +#define p_section __p_section +#define p_time __p_time +#define p_type __p_type +#define putlong __putlong +#define putshort __putshort +#define res_dnok __res_dnok +#define res_hnok __res_hnok +#define res_mailok __res_mailok +#define res_nameinquery __res_nameinquery +#define res_ownok __res_ownok +#define res_queriesmatch __res_queriesmatch +#define res_randomid __res_randomid +#define sym_ntop __sym_ntop +#define sym_ntos __sym_ntos +#define sym_ston __sym_ston +#define res_send_setqhook __res_send_setqhook +#define res_send_setrhook __res_send_setrhook +#define res_mkupdate __res_mkupdate +#define res_mkupdrec __res_mkupdrec +#define res_freeupdrec __res_freeupdrec __BEGIN_DECLS -int res_hnok (const char *); -int res_ownok (const char *); -int res_mailok (const char *); -int res_dnok (const char *); -int sym_ston (const struct res_sym *, const char *, int *); -const char * sym_ntos (const struct res_sym *, int, int *); -const char * sym_ntop (const struct res_sym *, int, int *); -int b64_ntop (u_char const *, size_t, char *, size_t); -int b64_pton (char const *, u_char *, size_t); -int loc_aton (const char *, u_char *); -const char * loc_ntoa (const u_char *, char *); -int dn_skipname (const u_char *, const u_char *); -void fp_resstat (struct __res_state *, FILE *); -void fp_query (const u_char *, FILE *); -void fp_nquery (const u_char *, int, FILE *); -const char * hostalias (const char *); -void putlong (u_int32_t, u_char *); -void putshort (u_int16_t, u_char *); -const char * p_class (int); -const char * p_time (u_int32_t); -const char * p_type (int); -void p_query (const u_char *); -const u_char * p_cdnname (const u_char *, const u_char *, int, FILE *); -const u_char * p_cdname (const u_char *, const u_char *, FILE *); -const u_char * p_fqnname (const u_char *, const u_char *, - int, char *, int); -const u_char * p_fqname (const u_char *, const u_char *, FILE *); -const char * p_option (u_long); -char * p_secstodate (u_long); -int dn_count_labels (const char *); -int dn_comp (const char *, u_char *, int, - u_char **, u_char **); -int dn_expand (const u_char *, const u_char *, const u_char *, - char *, int); -int res_init (void); -u_int res_randomid (void); -int res_query (const char *, int, int, u_char *, int); -int res_search (const char *, int, int, u_char *, int); -int res_querydomain (const char *, const char *, int, int, - u_char *, int); -int res_mkquery (int, const char *, int, int, const u_char *, - int, const u_char *, u_char *, int); -int res_send (const u_char *, int, u_char *, int); -int res_isourserver (const struct sockaddr_in *); -int res_nameinquery (const char *, int, int, - const u_char *, const u_char *); -int res_queriesmatch (const u_char *, const u_char *, - const u_char *, const u_char *); -void res_close (void); -const char * p_section (int, int); +int res_hnok(const char *); +int res_ownok(const char *); +int res_mailok(const char *); +int res_dnok(const char *); +int sym_ston(const struct res_sym *, const char *, int *); +const char * sym_ntos(const struct res_sym *, int, int *); +const char * sym_ntop(const struct res_sym *, int, int *); +int b64_ntop(u_char const *, size_t, char *, size_t); +int b64_pton(char const *, u_char *, size_t); +int loc_aton(const char *, u_char *); +const char * loc_ntoa(const u_char *, char *); +int dn_skipname(const u_char *, const u_char *); +void fp_resstat(struct __res_state *, FILE *); +void putlong(u_int32_t, u_char *); +void putshort(u_int16_t, u_char *); +const char * p_class(int); +const char * p_time(u_int32_t); +const char * p_type(int); +const u_char * p_cdnname(const u_char *, const u_char *, int, FILE *); +const u_char * p_cdname(const u_char *, const u_char *, FILE *); +const u_char * p_fqnname(const u_char *, const u_char *, int, char *, int); +const u_char * p_fqname(const u_char *, const u_char *, FILE *); +const char * p_option(u_long); +char * p_secstodate(u_long); +int dn_count_labels(const char *); +int dn_comp(const char *, u_char *, int, u_char **, u_char **); +int dn_expand(const u_char *, const u_char *, const u_char *, + char *, int); +u_int res_randomid(void); +int res_nameinquery(const char *, int, int, const u_char *, + const u_char *); +int res_queriesmatch(const u_char *, const u_char *, + const u_char *, const u_char *); +const char * p_section(int, int); +void res_send_setqhook(res_send_qhook); +void res_send_setrhook(res_send_rhook); + /* XXX The following depend on the ns_updrec typedef in arpa/nameser.h */ #ifdef _ARPA_NAMESER_H_ int res_update (ns_updrec *); -- cgit v1.2.3 From e6a675e6f95b0c527a666ba75b6c44cf5a9f5f2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ralf=20Cors=C3=A9pius?= Date: Fri, 2 Mar 2012 14:51:10 +0100 Subject: =?UTF-8?q?2011-03-02=09Ralf=20Cors=C3=A9pius=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * psxtmmq01/init.c: Make benchmark_mq_open, benchmark_mq_open_second, benchmark_mq_close, benchmark_mq_close_second, benchmark_mq_unlink, benchmark_mq_notify, benchmark_mq_send, benchmark_mq_receive, benchmark_mq_timedsend, benchmark_mq_timedreceive static. * psxtmmutex01/init.c: Make test_mutex_create, test_mutex_destroy static. * psxtmsem02/init.c: benchmark_sem_getvalue, benchmark_sem_wait, benchmark_sem_post, benchmark_sem_trywait_available, benchmark_sem_trywait_not_available static. --- testsuites/psxtmtests/ChangeLog | 13 +++++++++++++ testsuites/psxtmtests/psxtmmq01/init.c | 20 ++++++++++---------- testsuites/psxtmtests/psxtmmutex01/init.c | 4 ++-- testsuites/psxtmtests/psxtmsem02/init.c | 10 +++++----- 4 files changed, 30 insertions(+), 17 deletions(-) diff --git a/testsuites/psxtmtests/ChangeLog b/testsuites/psxtmtests/ChangeLog index 61ff69f1fa..bf638284bb 100644 --- a/testsuites/psxtmtests/ChangeLog +++ b/testsuites/psxtmtests/ChangeLog @@ -1,3 +1,16 @@ +2011-03-02 Ralf Corsépius + + * psxtmmq01/init.c: Make benchmark_mq_open, + benchmark_mq_open_second, benchmark_mq_close, + benchmark_mq_close_second, benchmark_mq_unlink, benchmark_mq_notify, + benchmark_mq_send, benchmark_mq_receive, benchmark_mq_timedsend, + benchmark_mq_timedreceive static. + * psxtmmutex01/init.c: Make test_mutex_create, test_mutex_destroy + static. + * psxtmsem02/init.c: benchmark_sem_getvalue, benchmark_sem_wait, + benchmark_sem_post, benchmark_sem_trywait_available, + benchmark_sem_trywait_not_available static. + 2011-12-13 Ralf Corsépius * psxtmbarrier01/init.c: Make benchmark_pthread_barrier_init, diff --git a/testsuites/psxtmtests/psxtmmq01/init.c b/testsuites/psxtmtests/psxtmmq01/init.c index 095e4628af..fcbb0df3b4 100644 --- a/testsuites/psxtmtests/psxtmmq01/init.c +++ b/testsuites/psxtmtests/psxtmmq01/init.c @@ -28,7 +28,7 @@ mqd_t queue; mqd_t queue2; const char *q_name; -void benchmark_mq_open(int printable) +static void benchmark_mq_open(int printable) { benchmark_timer_t end_time; struct mq_attr attr; @@ -52,7 +52,7 @@ void benchmark_mq_open(int printable) ); } -void benchmark_mq_open_second(int printable) +static void benchmark_mq_open_second(int printable) { benchmark_timer_t end_time; struct mq_attr attr; @@ -76,7 +76,7 @@ void benchmark_mq_open_second(int printable) } -void benchmark_mq_close(int printable) +static void benchmark_mq_close(int printable) { benchmark_timer_t end_time; int status; @@ -96,7 +96,7 @@ void benchmark_mq_close(int printable) ); } -void benchmark_mq_close_second(int printable) +static void benchmark_mq_close_second(int printable) { benchmark_timer_t end_time; int status; @@ -116,7 +116,7 @@ void benchmark_mq_close_second(int printable) ); } -void benchmark_mq_unlink(void) +static void benchmark_mq_unlink(void) { benchmark_timer_t end_time; int status; @@ -135,7 +135,7 @@ void benchmark_mq_unlink(void) ); } -void benchmark_mq_notify(void) +static void benchmark_mq_notify(void) { benchmark_timer_t end_time; int status; @@ -158,7 +158,7 @@ void benchmark_mq_notify(void) ); } -void benchmark_mq_send(void) +static void benchmark_mq_send(void) { benchmark_timer_t end_time; int status; @@ -178,7 +178,7 @@ void benchmark_mq_send(void) ); } -void benchmark_mq_receive(void) +static void benchmark_mq_receive(void) { benchmark_timer_t end_time; int status; @@ -200,7 +200,7 @@ void benchmark_mq_receive(void) ); } -void benchmark_mq_timedsend(void) +static void benchmark_mq_timedsend(void) { benchmark_timer_t end_time; int status; @@ -224,7 +224,7 @@ void benchmark_mq_timedsend(void) ); } -void benchmark_mq_timedreceive(void) +static void benchmark_mq_timedreceive(void) { benchmark_timer_t end_time; int status; diff --git a/testsuites/psxtmtests/psxtmmutex01/init.c b/testsuites/psxtmtests/psxtmmutex01/init.c index 5c8baf039e..efec788633 100644 --- a/testsuites/psxtmtests/psxtmmutex01/init.c +++ b/testsuites/psxtmtests/psxtmmutex01/init.c @@ -21,7 +21,7 @@ pthread_mutex_t MutexId; -void test_mutex_create(void) +static void test_mutex_create(void) { benchmark_timer_t end_time; int status; @@ -40,7 +40,7 @@ void test_mutex_create(void) ); } -void test_mutex_destroy(void) +static void test_mutex_destroy(void) { benchmark_timer_t end_time; int status; diff --git a/testsuites/psxtmtests/psxtmsem02/init.c b/testsuites/psxtmtests/psxtmsem02/init.c index baddc44fa0..be8673e37e 100644 --- a/testsuites/psxtmtests/psxtmsem02/init.c +++ b/testsuites/psxtmtests/psxtmsem02/init.c @@ -24,7 +24,7 @@ sem_t sem1; sem_t *n_sem1; -void benchmark_sem_getvalue(void) +static void benchmark_sem_getvalue(void) { benchmark_timer_t end_time; int status; @@ -44,7 +44,7 @@ void benchmark_sem_getvalue(void) ); } -void benchmark_sem_wait(void) +static void benchmark_sem_wait(void) { benchmark_timer_t end_time; int status; @@ -63,7 +63,7 @@ void benchmark_sem_wait(void) ); } -void benchmark_sem_post(void) +static void benchmark_sem_post(void) { benchmark_timer_t end_time; int status; @@ -82,7 +82,7 @@ void benchmark_sem_post(void) ); } -void benchmark_sem_trywait_available(void) +static void benchmark_sem_trywait_available(void) { benchmark_timer_t end_time; int status; @@ -101,7 +101,7 @@ void benchmark_sem_trywait_available(void) ); } -void benchmark_sem_trywait_not_available(void) +static void benchmark_sem_trywait_not_available(void) { benchmark_timer_t end_time; int status; -- cgit v1.2.3 From ac165341df9ecdb9f3395677dde906b472121a34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ralf=20Cors=C3=A9pius?= Date: Fri, 2 Mar 2012 18:16:33 +0100 Subject: =?UTF-8?q?2011-03-02=09Ralf=20Cors=C3=A9pius=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * support/src/spin.c: Include "test_support.h". --- testsuites/ChangeLog | 4 ++++ testsuites/support/src/spin.c | 1 + 2 files changed, 5 insertions(+) diff --git a/testsuites/ChangeLog b/testsuites/ChangeLog index fbfa1e4518..a952d888e6 100644 --- a/testsuites/ChangeLog +++ b/testsuites/ChangeLog @@ -1,3 +1,7 @@ +2011-03-02 Ralf Corsépius + + * support/src/spin.c: Include "test_support.h". + 2011-12-11 Ralf Corsépius * Makefile.am: Add support/include/tmtests_empty_function.h. diff --git a/testsuites/support/src/spin.c b/testsuites/support/src/spin.c index d2b1d425be..52dcc9be46 100644 --- a/testsuites/support/src/spin.c +++ b/testsuites/support/src/spin.c @@ -14,6 +14,7 @@ #endif #include +#include "test_support.h" /* * Burn CPU for specified number of ticks -- cgit v1.2.3 From f0d2261bebd925cf31aa08f77a6ff8123bf63832 Mon Sep 17 00:00:00 2001 From: Xiangfu Liu Date: Sat, 3 Mar 2012 15:50:53 -0500 Subject: PR2029: Milkymist VGA: adjust video timings Slightly adjust video timing registers since we had problems with a few screens and the previous values. Signed-off-by: Gedare Bloom --- .../lm32/shared/milkymist_framebuffer/framebuffer.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_framebuffer/framebuffer.c b/c/src/lib/libbsp/lm32/shared/milkymist_framebuffer/framebuffer.c index b1d0612e51..9ea183149c 100644 --- a/c/src/lib/libbsp/lm32/shared/milkymist_framebuffer/framebuffer.c +++ b/c/src/lib/libbsp/lm32/shared/milkymist_framebuffer/framebuffer.c @@ -98,9 +98,9 @@ static void set_video_mode(int mode) MM_WRITE(MM_VGA_HSYNC_START, 656); MM_WRITE(MM_VGA_HSYNC_END, 752); MM_WRITE(MM_VGA_HSCAN, 799); - MM_WRITE(MM_VGA_VSYNC_START, 491); - MM_WRITE(MM_VGA_VSYNC_END, 493); - MM_WRITE(MM_VGA_VSCAN, 523); + MM_WRITE(MM_VGA_VSYNC_START, 492); + MM_WRITE(MM_VGA_VSYNC_END, 494); + MM_WRITE(MM_VGA_VSCAN, 524); MM_WRITE(MM_VGA_CLKSEL, 0); break; case 1: // 800x600, pixel clock: 50MHz @@ -109,9 +109,9 @@ static void set_video_mode(int mode) MM_WRITE(MM_VGA_HSYNC_START, 848); MM_WRITE(MM_VGA_HSYNC_END, 976); MM_WRITE(MM_VGA_HSCAN, 1040); - MM_WRITE(MM_VGA_VSYNC_START, 637); - MM_WRITE(MM_VGA_VSYNC_END, 643); - MM_WRITE(MM_VGA_VSCAN, 666); + MM_WRITE(MM_VGA_VSYNC_START, 636); + MM_WRITE(MM_VGA_VSYNC_END, 642); + MM_WRITE(MM_VGA_VSCAN, 665); MM_WRITE(MM_VGA_CLKSEL, 1); break; case 2: // 1024x768, pixel clock: 65MHz @@ -120,9 +120,9 @@ static void set_video_mode(int mode) MM_WRITE(MM_VGA_HSYNC_START, 1048); MM_WRITE(MM_VGA_HSYNC_END, 1184); MM_WRITE(MM_VGA_HSCAN, 1344); - MM_WRITE(MM_VGA_VSYNC_START, 771); - MM_WRITE(MM_VGA_VSYNC_END, 777); - MM_WRITE(MM_VGA_VSCAN, 806); + MM_WRITE(MM_VGA_VSYNC_START, 772); + MM_WRITE(MM_VGA_VSYNC_END, 778); + MM_WRITE(MM_VGA_VSCAN, 807); MM_WRITE(MM_VGA_CLKSEL, 2); break; } -- cgit v1.2.3 From dc1a3b9c6cffa080780672553a80e43cad2e9732 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Sat, 3 Mar 2012 16:02:33 -0500 Subject: PR 2032: Milkymist USB: Ioctl interface for loading USB firmware Leave the task of providing a suitable firmware for the Milkymist softusb core to the application instead of having an inflexible array in the driver. Signed-off-by: Gedare Bloom --- .../shared/milkymist_usbinput/milkymist_usbinput.h | 18 +- .../lm32/shared/milkymist_usbinput/softusb-input.h | 329 --------------------- .../lm32/shared/milkymist_usbinput/usbinput.c | 60 ++-- 3 files changed, 57 insertions(+), 350 deletions(-) delete mode 100644 c/src/lib/libbsp/lm32/shared/milkymist_usbinput/softusb-input.h diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/milkymist_usbinput.h b/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/milkymist_usbinput.h index dc912124de..7db2b33aca 100644 --- a/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/milkymist_usbinput.h +++ b/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/milkymist_usbinput.h @@ -8,7 +8,7 @@ * * $Id$ * - * COPYRIGHT (c) 2010 Sebastien Bourdeauducq + * COPYRIGHT (c) 2010, 2012 Sebastien Bourdeauducq */ #ifndef __MILKYMIST_USBINPUT_H_ @@ -18,6 +18,14 @@ extern "C" { #endif +/* Ioctls */ +#define USBINPUT_LOAD_FIRMWARE 0x5500 + +struct usbinput_firmware_description { + const unsigned char *data; + int length; +}; + rtems_device_driver usbinput_initialize( rtems_device_major_number major, rtems_device_minor_number minor, @@ -36,8 +44,14 @@ rtems_device_driver usbinput_read( void *arg ); +rtems_device_driver usbinput_control( + rtems_device_major_number major, + rtems_device_minor_number minor, + void *arg +); + #define USBINPUT_DRIVER_TABLE_ENTRY {usbinput_initialize, \ -usbinput_open, NULL, usbinput_read, NULL, NULL} +usbinput_open, NULL, usbinput_read, NULL, usbinput_control} #ifdef __cplusplus } diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/softusb-input.h b/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/softusb-input.h deleted file mode 100644 index 26feda0459..0000000000 --- a/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/softusb-input.h +++ /dev/null @@ -1,329 +0,0 @@ -/* softusb-input.h - * - * Milkymist USB input devices driver for RTEMS - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.com/license/LICENSE. - * - * $Id$ - * - * COPYRIGHT (c) 2010, 2011 Sebastien Bourdeauducq - */ - - 0x0f, 0xef, 0x0e, 0xbf, 0x0f, 0xe1, 0x0d, 0xbf, 0xfb, 0xd5, 0x27, 0xc4, - 0x5d, 0xc4, 0x76, 0xc4, 0x87, 0xc4, 0xa3, 0xc4, 0xda, 0xc4, 0x32, 0xc5, - 0x52, 0xc5, 0x73, 0x6f, 0x66, 0x74, 0x75, 0x73, 0x62, 0x2d, 0x69, 0x6e, - 0x70, 0x75, 0x74, 0x20, 0x76, 0x31, 0x2e, 0x30, 0x52, 0x43, 0x31, 0x0a, - 0x00, 0x46, 0x75, 0x6c, 0x6c, 0x20, 0x73, 0x70, 0x65, 0x65, 0x64, 0x20, - 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x6e, 0x20, 0x70, 0x6f, - 0x72, 0x74, 0x20, 0x00, 0x4c, 0x6f, 0x77, 0x20, 0x73, 0x70, 0x65, 0x65, - 0x64, 0x20, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x20, 0x6f, 0x6e, 0x20, - 0x70, 0x6f, 0x72, 0x74, 0x20, 0x00, 0x56, 0x49, 0x44, 0x3a, 0x20, 0x00, - 0x2c, 0x20, 0x50, 0x49, 0x44, 0x3a, 0x20, 0x00, 0x46, 0x6f, 0x75, 0x6e, - 0x64, 0x20, 0x00, 0x75, 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, - 0x65, 0x64, 0x20, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x0a, 0x00, 0x6b, - 0x65, 0x79, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x0a, 0x00, 0x6d, 0x6f, 0x75, - 0x73, 0x65, 0x0a, 0x00, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x20, 0x64, - 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x20, 0x6f, 0x6e, - 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x00, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x20, - 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x3a, 0x0a, 0x00, 0x53, 0x45, 0x54, - 0x55, 0x50, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x3a, 0x0a, 0x00, 0x49, - 0x4e, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x3a, 0x0a, 0x00, 0x4f, 0x55, - 0x54, 0x2f, 0x44, 0x41, 0x54, 0x41, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x79, - 0x3a, 0x0a, 0x00, 0x28, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x29, 0x0a, 0x00, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x65, 0x72, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x20, 0x00, 0x52, - 0x58, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x20, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x0a, 0x00, 0x52, 0x58, 0x20, 0x62, 0x69, 0x74, 0x73, - 0x74, 0x75, 0x66, 0x66, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0a, 0x00, - 0x52, 0x65, 0x74, 0x72, 0x79, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, - 0x65, 0x78, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x2c, 0x20, 0x64, 0x69, - 0x73, 0x61, 0x62, 0x6c, 0x69, 0x6e, 0x67, 0x20, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x0a, 0x00, 0x44, 0x41, 0x54, 0x41, 0x78, 0x20, 0x6d, - 0x69, 0x73, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x0a, 0x00, 0x28, 0x6e, 0x6f, - 0x20, 0x64, 0x61, 0x74, 0x61, 0x29, 0x0a, 0x00, 0x30, 0x31, 0x32, 0x33, - 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, - 0x00, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, - 0x41, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x00, 0xc1, 0x81, - 0x40, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, - 0x41, 0x00, 0xc1, 0x81, 0x40, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, - 0x41, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, - 0x41, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x00, 0xc1, 0x81, - 0x40, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x00, 0xc1, 0x81, - 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, 0x41, 0x00, 0xc1, 0x81, - 0x40, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, - 0x41, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x00, 0xc1, 0x81, - 0x40, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, - 0x41, 0x00, 0xc1, 0x81, 0x40, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, - 0x41, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, - 0x41, 0x00, 0xc1, 0x81, 0x40, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, - 0x41, 0x01, 0xc0, 0x80, 0x41, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, - 0x41, 0x00, 0xc1, 0x81, 0x40, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, - 0x41, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, - 0x41, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x00, 0xc1, 0x81, - 0x40, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, - 0x41, 0x00, 0xc1, 0x81, 0x40, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, - 0x41, 0x00, 0xc1, 0x81, 0x40, 0x01, 0xc0, 0x80, 0x41, 0x01, 0xc0, 0x80, - 0x41, 0x00, 0xc1, 0x81, 0x40, 0x00, 0xc0, 0xc1, 0x01, 0xc3, 0x03, 0x02, - 0xc2, 0xc6, 0x06, 0x07, 0xc7, 0x05, 0xc5, 0xc4, 0x04, 0xcc, 0x0c, 0x0d, - 0xcd, 0x0f, 0xcf, 0xce, 0x0e, 0x0a, 0xca, 0xcb, 0x0b, 0xc9, 0x09, 0x08, - 0xc8, 0xd8, 0x18, 0x19, 0xd9, 0x1b, 0xdb, 0xda, 0x1a, 0x1e, 0xde, 0xdf, - 0x1f, 0xdd, 0x1d, 0x1c, 0xdc, 0x14, 0xd4, 0xd5, 0x15, 0xd7, 0x17, 0x16, - 0xd6, 0xd2, 0x12, 0x13, 0xd3, 0x11, 0xd1, 0xd0, 0x10, 0xf0, 0x30, 0x31, - 0xf1, 0x33, 0xf3, 0xf2, 0x32, 0x36, 0xf6, 0xf7, 0x37, 0xf5, 0x35, 0x34, - 0xf4, 0x3c, 0xfc, 0xfd, 0x3d, 0xff, 0x3f, 0x3e, 0xfe, 0xfa, 0x3a, 0x3b, - 0xfb, 0x39, 0xf9, 0xf8, 0x38, 0x28, 0xe8, 0xe9, 0x29, 0xeb, 0x2b, 0x2a, - 0xea, 0xee, 0x2e, 0x2f, 0xef, 0x2d, 0xed, 0xec, 0x2c, 0xe4, 0x24, 0x25, - 0xe5, 0x27, 0xe7, 0xe6, 0x26, 0x22, 0xe2, 0xe3, 0x23, 0xe1, 0x21, 0x20, - 0xe0, 0xa0, 0x60, 0x61, 0xa1, 0x63, 0xa3, 0xa2, 0x62, 0x66, 0xa6, 0xa7, - 0x67, 0xa5, 0x65, 0x64, 0xa4, 0x6c, 0xac, 0xad, 0x6d, 0xaf, 0x6f, 0x6e, - 0xae, 0xaa, 0x6a, 0x6b, 0xab, 0x69, 0xa9, 0xa8, 0x68, 0x78, 0xb8, 0xb9, - 0x79, 0xbb, 0x7b, 0x7a, 0xba, 0xbe, 0x7e, 0x7f, 0xbf, 0x7d, 0xbd, 0xbc, - 0x7c, 0xb4, 0x74, 0x75, 0xb5, 0x77, 0xb7, 0xb6, 0x76, 0x72, 0xb2, 0xb3, - 0x73, 0xb1, 0x71, 0x70, 0xb0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, - 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9c, 0x5c, 0x5d, - 0x9d, 0x5f, 0x9f, 0x9e, 0x5e, 0x5a, 0x9a, 0x9b, 0x5b, 0x99, 0x59, 0x58, - 0x98, 0x88, 0x48, 0x49, 0x89, 0x4b, 0x8b, 0x8a, 0x4a, 0x4e, 0x8e, 0x8f, - 0x4f, 0x8d, 0x4d, 0x4c, 0x8c, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, - 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40, 0x00, 0x28, 0x2f, - 0x39, 0x2f, 0x80, 0xe8, 0x84, 0xb9, 0x85, 0xb1, 0x88, 0x23, 0xe9, 0xf7, - 0xe2, 0x2f, 0xf3, 0x2f, 0x90, 0xe0, 0x07, 0xc0, 0x80, 0x81, 0x84, 0xb9, - 0x85, 0xb1, 0x88, 0x23, 0xe9, 0xf7, 0x9f, 0x5f, 0x31, 0x96, 0x96, 0x17, - 0xb8, 0xf3, 0x80, 0xe0, 0x86, 0xb9, 0x87, 0xb1, 0x88, 0x23, 0xe9, 0xf7, - 0x08, 0x95, 0x48, 0x2f, 0x59, 0x2f, 0x2f, 0xef, 0x3f, 0xe0, 0x10, 0xc0, - 0x21, 0x15, 0x31, 0x05, 0x21, 0xf4, 0x8e, 0xe0, 0x91, 0xe0, 0x60, 0xd4, - 0x20, 0xc0, 0x8c, 0xb1, 0x88, 0x23, 0x21, 0xf0, 0x8e, 0xe0, 0x91, 0xe0, - 0x59, 0xd4, 0x10, 0xc0, 0x21, 0x50, 0x30, 0x40, 0x8a, 0xb1, 0x88, 0x23, - 0x69, 0xf3, 0x24, 0x2f, 0x35, 0x2f, 0xe2, 0x2f, 0xf3, 0x2f, 0x90, 0xe0, - 0x2f, 0xef, 0x3f, 0xe0, 0x12, 0xc0, 0x8c, 0xb1, 0x88, 0x23, 0x19, 0xf0, - 0x81, 0xe3, 0x91, 0xe0, 0x08, 0xc0, 0x8b, 0xb1, 0x88, 0x23, 0x99, 0xf0, - 0x21, 0x15, 0x31, 0x05, 0x21, 0xf4, 0x8f, 0xe1, 0x91, 0xe0, 0x3c, 0xd4, - 0x0b, 0xc0, 0x21, 0x50, 0x30, 0x40, 0x8a, 0xb1, 0x88, 0x23, 0x59, 0xf3, - 0x96, 0x17, 0x21, 0xf0, 0x89, 0xb1, 0x81, 0x93, 0x9f, 0x5f, 0xe2, 0xcf, - 0x90, 0xe0, 0x89, 0x2f, 0x08, 0x95, 0xcf, 0x93, 0xdf, 0x93, 0xc8, 0x2f, - 0xd9, 0x2f, 0x8b, 0x81, 0x8f, 0x5f, 0x8b, 0x83, 0x81, 0x50, 0x85, 0x31, - 0x2c, 0xf0, 0x84, 0xe4, 0x91, 0xe0, 0x20, 0xd4, 0x88, 0xe0, 0x88, 0x83, - 0xdf, 0x91, 0xcf, 0x91, 0x08, 0x95, 0xff, 0x92, 0x0f, 0x93, 0x1f, 0x93, - 0x04, 0x2f, 0x15, 0x2f, 0xe4, 0x2f, 0xf5, 0x2f, 0x80, 0x83, 0x61, 0x83, - 0x60, 0x70, 0x77, 0x70, 0xf7, 0x2e, 0x72, 0x83, 0x81, 0x81, 0x67, 0x2f, - 0xbb, 0xd4, 0x88, 0x0f, 0x88, 0x0f, 0x88, 0x0f, 0xf8, 0x2a, 0xe0, 0x2f, - 0xf1, 0x2f, 0xf2, 0x82, 0x1f, 0x91, 0x0f, 0x91, 0xff, 0x90, 0x08, 0x95, - 0x2f, 0x92, 0x3f, 0x92, 0x4f, 0x92, 0x5f, 0x92, 0x6f, 0x92, 0x7f, 0x92, - 0x8f, 0x92, 0x9f, 0x92, 0xaf, 0x92, 0xbf, 0x92, 0xcf, 0x92, 0xdf, 0x92, - 0xef, 0x92, 0xff, 0x92, 0x0f, 0x93, 0x1f, 0x93, 0xdf, 0x93, 0xcf, 0x93, - 0xcd, 0xb7, 0xde, 0xb7, 0x2b, 0x97, 0xde, 0xbf, 0xcd, 0xbf, 0x38, 0x2e, - 0xf6, 0x2e, 0xe7, 0x2e, 0x24, 0x2e, 0xa2, 0x2e, 0xb3, 0x2e, 0x40, 0x2e, - 0x51, 0x2e, 0x8d, 0xe2, 0x63, 0x2d, 0x70, 0xe0, 0x0c, 0x2f, 0x1d, 0x2f, - 0x0f, 0x5f, 0x1f, 0x4f, 0x40, 0x2f, 0x51, 0x2f, 0xbc, 0xdf, 0x80, 0x2f, - 0x91, 0x2f, 0x63, 0xe0, 0x4e, 0xdf, 0x83, 0xec, 0x89, 0x83, 0xac, 0x2f, - 0xbd, 0x2f, 0x12, 0x96, 0x8f, 0x2d, 0x9e, 0x2d, 0xe8, 0x2f, 0xf9, 0x2f, - 0x88, 0xe0, 0x01, 0x90, 0x0d, 0x92, 0x81, 0x50, 0xe1, 0xf7, 0x32, 0xe0, - 0x83, 0x2e, 0x91, 0x2c, 0x8c, 0x0e, 0x9d, 0x1e, 0x88, 0x2d, 0x99, 0x2d, - 0x68, 0xe0, 0x4c, 0x2f, 0x5d, 0x2f, 0x46, 0x5f, 0x5f, 0x4f, 0x88, 0xd4, - 0x0c, 0x2f, 0x1d, 0x2f, 0x0f, 0x5f, 0x1f, 0x4f, 0x80, 0x2f, 0x91, 0x2f, - 0x6b, 0xe0, 0x2b, 0xdf, 0x80, 0x2f, 0x91, 0x2f, 0x6b, 0xe0, 0x41, 0xdf, - 0xf8, 0x2e, 0x41, 0xe0, 0x84, 0x17, 0x19, 0xf4, 0x89, 0x81, 0x82, 0x3d, - 0x31, 0xf0, 0x8b, 0xeb, 0x90, 0xe0, 0xa2, 0xd3, 0x85, 0xed, 0x90, 0xe0, - 0x5b, 0xc0, 0x22, 0x20, 0x09, 0xf4, 0x66, 0xc0, 0xdd, 0x24, 0xcc, 0x24, - 0xc3, 0x94, 0x60, 0x2e, 0x71, 0x2e, 0x88, 0x2d, 0x99, 0x2d, 0x99, 0x2e, - 0x64, 0x2d, 0x6d, 0x19, 0x09, 0xf4, 0xb5, 0xc0, 0xe6, 0x2e, 0x58, 0xe0, - 0x56, 0x17, 0x14, 0xf4, 0x28, 0xe0, 0xe2, 0x2e, 0x81, 0xee, 0x63, 0x2d, - 0x70, 0xe0, 0x46, 0x2d, 0x57, 0x2d, 0x69, 0xdf, 0x86, 0x2d, 0x97, 0x2d, - 0x63, 0xe0, 0xfb, 0xde, 0x80, 0xe0, 0xcc, 0x20, 0x09, 0xf4, 0x81, 0xe0, - 0xc8, 0x2e, 0x88, 0x23, 0x11, 0xf4, 0x8b, 0xe4, 0x01, 0xc0, 0x83, 0xec, - 0x89, 0x83, 0x0e, 0x2d, 0x11, 0x27, 0x07, 0xfd, 0x10, 0x95, 0x88, 0x2d, - 0x99, 0x2d, 0x6a, 0x2d, 0x7b, 0x2d, 0x40, 0x2f, 0x51, 0x2f, 0x62, 0xd4, - 0x40, 0x2f, 0x51, 0x2f, 0x4f, 0x5f, 0x5f, 0x4f, 0x46, 0x0d, 0x57, 0x1d, - 0x88, 0x2d, 0x99, 0x2d, 0x6e, 0x2d, 0x30, 0xd4, 0x6e, 0x2d, 0x6d, 0x5f, - 0x86, 0x2d, 0x97, 0x2d, 0xd6, 0xde, 0x86, 0x2d, 0x97, 0x2d, 0x6b, 0xe0, - 0xec, 0xde, 0xf8, 0x2e, 0x81, 0xe0, 0xf8, 0x16, 0x21, 0xf4, 0x89, 0x81, - 0x82, 0x3d, 0x19, 0xf4, 0x11, 0xc0, 0x1f, 0x14, 0x24, 0xf4, 0x89, 0x81, - 0x8a, 0x35, 0x09, 0xf4, 0xb5, 0xcf, 0x8b, 0xeb, 0x90, 0xe0, 0x46, 0xd3, - 0x83, 0xee, 0x90, 0xe0, 0x43, 0xd3, 0x8c, 0x2f, 0x9d, 0x2f, 0x01, 0x96, - 0x6f, 0x2d, 0xca, 0xc0, 0xde, 0x0c, 0x48, 0xe0, 0xe4, 0x16, 0x09, 0xf0, - 0x5e, 0xc0, 0xa0, 0x0e, 0xb1, 0x1e, 0xa2, 0xcf, 0x41, 0x14, 0x51, 0x04, - 0x11, 0xf4, 0xdd, 0x24, 0x54, 0xc0, 0xdd, 0x24, 0x80, 0x2f, 0x91, 0x2f, - 0xc0, 0x2e, 0xe9, 0x2e, 0x88, 0x2d, 0x99, 0x2d, 0x99, 0x2e, 0x92, 0xed, - 0x79, 0x2e, 0x89, 0xe6, 0x63, 0x2d, 0x70, 0xe0, 0x4c, 0x2d, 0x5e, 0x2d, - 0x06, 0xdf, 0x8c, 0x2d, 0x9e, 0x2d, 0x63, 0xe0, 0x98, 0xde, 0x8c, 0x2d, - 0x9e, 0x2d, 0x6b, 0xe0, 0xae, 0xde, 0x18, 0x2f, 0x83, 0x30, 0x34, 0xf0, - 0x89, 0x81, 0x83, 0x3c, 0x59, 0xf0, 0x8b, 0x34, 0x19, 0xf4, 0x08, 0xc0, - 0x18, 0x16, 0x1c, 0xf4, 0x89, 0x81, 0x8a, 0x35, 0x21, 0xf3, 0x8b, 0xeb, - 0x90, 0xe0, 0x59, 0xc0, 0x8d, 0xef, 0xf8, 0x2e, 0xf1, 0x0e, 0x8f, 0x2d, - 0x99, 0x27, 0x87, 0xfd, 0x90, 0x95, 0x2d, 0x2d, 0x33, 0x27, 0x27, 0xfd, - 0x30, 0x95, 0x44, 0x2d, 0x55, 0x2d, 0x42, 0x1b, 0x53, 0x0b, 0x48, 0x17, - 0x59, 0x07, 0x14, 0xf4, 0xf4, 0x2c, 0xfd, 0x18, 0x0f, 0x2d, 0x11, 0x27, - 0x07, 0xfd, 0x10, 0x95, 0x8a, 0x2d, 0x9b, 0x2d, 0x68, 0x2d, 0x79, 0x2d, - 0x40, 0x2f, 0x51, 0x2f, 0xe1, 0xd3, 0x79, 0x82, 0x8c, 0x2d, 0x9e, 0x2d, - 0x61, 0xe0, 0x5f, 0xde, 0xdf, 0x0c, 0x57, 0xe0, 0x5f, 0x15, 0x1c, 0xf4, - 0xa0, 0x0e, 0xb1, 0x1e, 0xb6, 0xcf, 0xcc, 0x24, 0xc3, 0x94, 0xec, 0x2e, - 0xfd, 0x2e, 0x08, 0x94, 0xe1, 0x1c, 0xf1, 0x1c, 0x22, 0x20, 0x11, 0xf4, - 0x81, 0xee, 0x01, 0xc0, 0x89, 0xe6, 0x63, 0x2d, 0x70, 0xe0, 0x4e, 0x2d, - 0x5f, 0x2d, 0xb1, 0xde, 0x8e, 0x2d, 0x9f, 0x2d, 0x63, 0xe0, 0x43, 0xde, - 0x22, 0x20, 0x19, 0xf1, 0x8e, 0x2d, 0x9f, 0x2d, 0x6b, 0xe0, 0x57, 0xde, - 0x18, 0x2f, 0x83, 0x30, 0x31, 0xf4, 0x89, 0x81, 0x83, 0x3c, 0x89, 0xf0, - 0x8b, 0x34, 0x19, 0xf4, 0x0e, 0xc0, 0x18, 0x16, 0x1c, 0xf4, 0x89, 0x81, - 0x8a, 0x35, 0xf1, 0xf2, 0x8b, 0xeb, 0x90, 0xe0, 0xb1, 0xd2, 0x8f, 0xef, - 0x90, 0xe0, 0xae, 0xd2, 0x8e, 0xee, 0x90, 0xe0, 0x32, 0xc0, 0x82, 0xed, - 0x89, 0x83, 0x8c, 0x2f, 0x9d, 0x2f, 0x01, 0x96, 0x61, 0xe0, 0x1f, 0xde, - 0x32, 0xc0, 0x80, 0xe0, 0xcc, 0x20, 0x09, 0xf4, 0x81, 0xe0, 0xc8, 0x2e, - 0x88, 0x23, 0x11, 0xf4, 0x8b, 0xe4, 0x01, 0xc0, 0x83, 0xec, 0x89, 0x83, - 0x1b, 0x82, 0x1a, 0x82, 0x8e, 0x2d, 0x9f, 0x2d, 0x63, 0xe0, 0x0d, 0xde, - 0x8e, 0x2d, 0x9f, 0x2d, 0x6b, 0xe0, 0x23, 0xde, 0x18, 0x2f, 0x81, 0x30, - 0x21, 0xf4, 0x89, 0x81, 0x82, 0x3d, 0x19, 0xf4, 0x16, 0xc0, 0x18, 0x16, - 0x24, 0xf4, 0x89, 0x81, 0x8a, 0x35, 0x09, 0xf4, 0xad, 0xcf, 0x8b, 0xeb, - 0x90, 0xe0, 0x7e, 0xd2, 0x8f, 0xef, 0x90, 0xe0, 0x7b, 0xd2, 0x83, 0xee, - 0x90, 0xe0, 0x78, 0xd2, 0x8c, 0x2f, 0x9d, 0x2f, 0x01, 0x96, 0x61, 0x2f, - 0xb5, 0xd2, 0xdd, 0x24, 0xda, 0x94, 0x8d, 0x2d, 0x2b, 0x96, 0xde, 0xbf, - 0xcd, 0xbf, 0xcf, 0x91, 0xdf, 0x91, 0x1f, 0x91, 0x0f, 0x91, 0xff, 0x90, - 0xef, 0x90, 0xdf, 0x90, 0xcf, 0x90, 0xbf, 0x90, 0xaf, 0x90, 0x9f, 0x90, - 0x8f, 0x90, 0x7f, 0x90, 0x6f, 0x90, 0x5f, 0x90, 0x4f, 0x90, 0x3f, 0x90, - 0x2f, 0x90, 0x08, 0x95, 0xcf, 0x92, 0xdf, 0x92, 0xef, 0x92, 0xff, 0x92, - 0x0f, 0x93, 0x1f, 0x93, 0xdf, 0x93, 0xcf, 0x93, 0xcd, 0xb7, 0xde, 0xb7, - 0xc4, 0x5a, 0xd0, 0x40, 0xde, 0xbf, 0xcd, 0xbf, 0xe8, 0x2e, 0xf9, 0x2e, - 0x06, 0x2f, 0xe8, 0x2f, 0xf9, 0x2f, 0x80, 0x81, 0x82, 0x30, 0x8c, 0xf0, - 0x61, 0x34, 0x11, 0xf4, 0x80, 0xb1, 0x01, 0xc0, 0x81, 0xb1, 0x88, 0x23, - 0x51, 0xf4, 0x80, 0xea, 0x90, 0xe0, 0x3a, 0xd2, 0x80, 0x2f, 0x2b, 0xd2, - 0x8a, 0xe0, 0x29, 0xd2, 0xee, 0x2d, 0xff, 0x2d, 0x10, 0x82, 0xee, 0x2d, - 0xff, 0x2d, 0x80, 0x81, 0xe8, 0x2f, 0xff, 0x27, 0xe7, 0xfd, 0xf0, 0x95, - 0xe8, 0x30, 0xf1, 0x05, 0x08, 0xf0, 0xc9, 0xc1, 0xeb, 0x5f, 0xff, 0x4f, - 0x09, 0x94, 0x01, 0x34, 0x11, 0xf4, 0x10, 0xb1, 0x01, 0xc0, 0x11, 0xb1, - 0x11, 0x30, 0x61, 0xf4, 0x81, 0xe3, 0x90, 0xe0, 0x1b, 0xd2, 0x80, 0x2f, - 0x0c, 0xd2, 0x8a, 0xe0, 0x0a, 0xd2, 0xee, 0x2d, 0xff, 0x2d, 0x11, 0x83, - 0x88, 0xe0, 0x3c, 0xc0, 0x12, 0x30, 0x09, 0xf0, 0xb0, 0xc1, 0x8c, 0xe4, - 0x90, 0xe0, 0x0c, 0xd2, 0x80, 0x2f, 0xfd, 0xd1, 0x8a, 0xe0, 0xfb, 0xd1, - 0xee, 0x2d, 0xff, 0x2d, 0x11, 0x82, 0x01, 0x34, 0x21, 0xf4, 0x88, 0xb1, - 0x81, 0x60, 0x88, 0xb9, 0x03, 0xc0, 0x88, 0xb1, 0x82, 0x60, 0x88, 0xb9, - 0x81, 0xe0, 0xee, 0x2d, 0xff, 0x2d, 0x80, 0x83, 0x80, 0x91, 0x0e, 0x00, - 0x90, 0x91, 0x0f, 0x00, 0x82, 0x5a, 0x9e, 0x4f, 0x97, 0x70, 0x95, 0x83, - 0x84, 0x83, 0x8f, 0xc1, 0x20, 0x91, 0x0e, 0x00, 0x30, 0x91, 0x0f, 0x00, - 0xee, 0x2d, 0xff, 0x2d, 0x84, 0x81, 0x95, 0x81, 0x28, 0x17, 0x39, 0x07, - 0x09, 0xf0, 0x83, 0xc1, 0x01, 0x34, 0x21, 0xf4, 0x88, 0xb1, 0x82, 0x70, - 0x88, 0xb9, 0x03, 0xc0, 0x88, 0xb1, 0x81, 0x70, 0x88, 0xb9, 0x82, 0xe0, - 0xee, 0x2d, 0xff, 0x2d, 0x80, 0x83, 0x75, 0xc1, 0xee, 0x2d, 0xff, 0x2d, - 0x84, 0x81, 0x95, 0x81, 0x86, 0x50, 0x9f, 0x4f, 0x97, 0x70, 0x20, 0x91, - 0x0e, 0x00, 0x30, 0x91, 0x0f, 0x00, 0x28, 0x17, 0x39, 0x07, 0x09, 0xf0, - 0x66, 0xc1, 0x13, 0x82, 0x83, 0xe0, 0xec, 0xcf, 0x19, 0x82, 0x85, 0xe0, - 0x8a, 0x83, 0x81, 0xe0, 0x8b, 0x83, 0x1c, 0x82, 0x1d, 0x82, 0x1e, 0x82, - 0x1f, 0x82, 0x18, 0x86, 0x80, 0xe0, 0x6c, 0x2f, 0x7d, 0x2f, 0x6f, 0x5f, - 0x7f, 0x4f, 0x41, 0xe0, 0x20, 0xe0, 0x30, 0xe0, 0x00, 0xe0, 0x10, 0xe0, - 0xad, 0xdd, 0x88, 0x23, 0x09, 0xf0, 0xb3, 0xc0, 0xee, 0x2d, 0xff, 0x2d, - 0x13, 0x82, 0x84, 0xe0, 0xad, 0xc0, 0x80, 0xe8, 0x89, 0x83, 0x86, 0xe0, - 0x8a, 0x83, 0x1b, 0x82, 0x81, 0xe0, 0x8c, 0x83, 0x1d, 0x82, 0x1e, 0x82, - 0x82, 0xe1, 0x8f, 0x83, 0x18, 0x86, 0x81, 0xe0, 0x6c, 0x2f, 0x7d, 0x2f, - 0x6f, 0x5f, 0x7f, 0x4f, 0x40, 0xe0, 0x2c, 0x2f, 0x3d, 0x2f, 0x2c, 0x5e, - 0x3f, 0x4f, 0x02, 0xe1, 0x10, 0xe0, 0x8c, 0xdd, 0x87, 0xfd, 0x93, 0xc0, - 0xee, 0x2d, 0xff, 0x2d, 0x13, 0x82, 0x86, 0xe6, 0x90, 0xe0, 0x84, 0xd1, - 0x8d, 0x8d, 0x9a, 0xd1, 0x8c, 0x8d, 0x98, 0xd1, 0x8c, 0xe6, 0x90, 0xe0, - 0x7d, 0xd1, 0x8f, 0x8d, 0x93, 0xd1, 0x8e, 0x8d, 0x91, 0xd1, 0x8a, 0xe0, - 0x6a, 0xd1, 0x88, 0x8d, 0x88, 0x23, 0x09, 0xf0, 0x4d, 0xc0, 0x89, 0x8d, - 0x88, 0x23, 0x09, 0xf0, 0x49, 0xc0, 0x85, 0xe0, 0x56, 0xc0, 0x80, 0xe8, - 0x89, 0x83, 0x86, 0xe0, 0x8a, 0x83, 0x1b, 0x82, 0x82, 0xe0, 0x8c, 0x83, - 0x1d, 0x82, 0x1e, 0x82, 0x8f, 0xe7, 0x8f, 0x83, 0x18, 0x86, 0x46, 0xe2, - 0xc4, 0x2e, 0xd1, 0x2c, 0xcc, 0x0e, 0xdd, 0x1e, 0x81, 0xe0, 0x6c, 0x2f, - 0x7d, 0x2f, 0x6f, 0x5f, 0x7f, 0x4f, 0x40, 0xe0, 0x2c, 0x2d, 0x3d, 0x2d, - 0x0f, 0xe7, 0x10, 0xe0, 0x51, 0xdd, 0x48, 0x2f, 0x87, 0xfd, 0x57, 0xc0, - 0xee, 0x2d, 0xff, 0x2d, 0x13, 0x82, 0x90, 0xe0, 0x2c, 0x2d, 0x3d, 0x2d, - 0x1f, 0xc0, 0xe9, 0x2f, 0xff, 0x27, 0xe7, 0xfd, 0xf0, 0x95, 0xe2, 0x0f, - 0xf3, 0x1f, 0x81, 0x81, 0x84, 0x30, 0xa1, 0xf4, 0x85, 0x81, 0x83, 0x30, - 0xa9, 0xf4, 0x86, 0x81, 0x81, 0x30, 0x91, 0xf4, 0x87, 0x81, 0x81, 0x30, - 0x19, 0xf0, 0x82, 0x30, 0x69, 0xf4, 0x04, 0xc0, 0xee, 0x2d, 0xff, 0x2d, - 0x82, 0x83, 0xc5, 0xc0, 0xee, 0x2d, 0xff, 0x2d, 0x12, 0x82, 0xc1, 0xc0, - 0x80, 0x81, 0x98, 0x0f, 0x94, 0x17, 0xfc, 0xf2, 0x84, 0xe7, 0x90, 0xe0, - 0x23, 0xd1, 0x8b, 0xe7, 0x90, 0xe0, 0x20, 0xd1, 0x88, 0xe0, 0x07, 0xc0, - 0x8f, 0xe8, 0x90, 0xe0, 0x02, 0xc0, 0x89, 0xe9, 0x90, 0xe0, 0x18, 0xd1, - 0x86, 0xe0, 0xee, 0x2d, 0xff, 0x2d, 0x1c, 0xc0, 0x19, 0x82, 0x89, 0xe0, - 0x8a, 0x83, 0x81, 0xe0, 0x8b, 0x83, 0x1c, 0x82, 0x1d, 0x82, 0x1e, 0x82, - 0x1f, 0x82, 0x18, 0x86, 0x6c, 0x2f, 0x7d, 0x2f, 0x6f, 0x5f, 0x7f, 0x4f, - 0x41, 0xe0, 0x20, 0xe0, 0x30, 0xe0, 0x00, 0xe0, 0x10, 0xe0, 0x00, 0xdd, - 0x88, 0x23, 0x39, 0xf4, 0xee, 0x2d, 0xff, 0x2d, 0x13, 0x82, 0x83, 0xec, - 0x86, 0x83, 0x87, 0xe0, 0x80, 0x83, 0x8e, 0x2d, 0x9f, 0x2d, 0xc7, 0xdc, - 0x94, 0xc0, 0x0c, 0x2f, 0x1d, 0x2f, 0x07, 0x5f, 0x1f, 0x4f, 0x89, 0xe6, - 0x61, 0xe8, 0x70, 0xe0, 0x40, 0x2f, 0x51, 0x2f, 0xce, 0xdc, 0x80, 0x2f, - 0x91, 0x2f, 0x63, 0xe0, 0x60, 0xdc, 0x80, 0x2f, 0x91, 0x2f, 0x6b, 0xe0, - 0x76, 0xdc, 0xd8, 0x2e, 0xf6, 0xe0, 0xf8, 0x17, 0x08, 0xf0, 0x7d, 0xc0, - 0x99, 0x85, 0xee, 0x2d, 0xff, 0x2d, 0x86, 0x81, 0x98, 0x17, 0x81, 0xf0, - 0x93, 0x3c, 0x19, 0xf0, 0x9b, 0x34, 0x09, 0xf0, 0x72, 0xc0, 0x82, 0xed, - 0x89, 0x87, 0x8c, 0x2f, 0x9d, 0x2f, 0x09, 0x96, 0x61, 0xe0, 0x45, 0xdc, - 0x8d, 0xe6, 0x91, 0xe0, 0xc7, 0xd0, 0x67, 0xc0, 0x82, 0xed, 0x89, 0x87, - 0x80, 0x2f, 0x91, 0x2f, 0x61, 0xe0, 0x3b, 0xdc, 0xee, 0x2d, 0xff, 0x2d, - 0x86, 0x81, 0x83, 0x3c, 0x11, 0xf4, 0x8b, 0xe4, 0x03, 0xc0, 0x83, 0xec, - 0xee, 0x2d, 0xff, 0x2d, 0x86, 0x83, 0xee, 0x2d, 0xff, 0x2d, 0x82, 0x81, - 0x88, 0x23, 0x29, 0xf1, 0xf8, 0xe0, 0xfd, 0x15, 0x08, 0xf0, 0x40, 0xc0, - 0x90, 0x91, 0x42, 0x11, 0x89, 0x2f, 0x88, 0x0f, 0x88, 0x0f, 0x88, 0x0f, - 0xac, 0x2f, 0xbd, 0x2f, 0x1a, 0x96, 0x29, 0xe3, 0x31, 0xe1, 0x2c, 0x1b, - 0x3d, 0x0b, 0x28, 0x0f, 0x31, 0x1d, 0x4c, 0x2f, 0x5d, 0x2f, 0x4e, 0x5e, - 0x5f, 0x4f, 0xe2, 0x2f, 0xf3, 0x2f, 0xea, 0x0f, 0xfb, 0x1f, 0x8d, 0x91, - 0x80, 0x83, 0xa4, 0x17, 0xb5, 0x07, 0xb9, 0xf7, 0x9f, 0x5f, 0x97, 0x70, - 0x90, 0x93, 0x42, 0x11, 0x1f, 0xc0, 0x90, 0x91, 0x01, 0x11, 0x89, 0x2f, - 0x88, 0x0f, 0x88, 0x0f, 0xac, 0x2f, 0xbd, 0x2f, 0x1a, 0x96, 0x28, 0xef, - 0x30, 0xe1, 0x2c, 0x1b, 0x3d, 0x0b, 0x28, 0x0f, 0x31, 0x1d, 0x4c, 0x2f, - 0x5d, 0x2f, 0x42, 0x5f, 0x5f, 0x4f, 0xe2, 0x2f, 0xf3, 0x2f, 0xea, 0x0f, - 0xfb, 0x1f, 0x8d, 0x91, 0x80, 0x83, 0xa4, 0x17, 0xb5, 0x07, 0xb9, 0xf7, - 0x9f, 0x5f, 0x9f, 0x70, 0x90, 0x93, 0x01, 0x11, 0x81, 0xe0, 0x85, 0xbb, - 0x0a, 0xc0, 0x84, 0xe7, 0x90, 0xe0, 0x66, 0xd0, 0xee, 0x2d, 0xff, 0x2d, - 0x82, 0x81, 0x88, 0x23, 0x09, 0xf0, 0x42, 0xcf, 0x44, 0xcf, 0xcc, 0x55, - 0xdf, 0x4f, 0xde, 0xbf, 0xcd, 0xbf, 0xcf, 0x91, 0xdf, 0x91, 0x1f, 0x91, - 0x0f, 0x91, 0xff, 0x90, 0xef, 0x90, 0xdf, 0x90, 0xcf, 0x90, 0x08, 0x95, - 0xff, 0x92, 0x0f, 0x93, 0x1f, 0x93, 0x8a, 0xe1, 0x90, 0xe0, 0x4c, 0xd0, - 0x81, 0xe0, 0x8d, 0xb9, 0x83, 0xe0, 0x8e, 0xb9, 0x80, 0xe0, 0x81, 0xbb, - 0x00, 0xe0, 0x11, 0xe0, 0x52, 0xe0, 0xf5, 0x2e, 0x82, 0xb3, 0x8b, 0x3b, - 0xe8, 0xf3, 0x81, 0xb3, 0x80, 0x37, 0xd0, 0xf3, 0x01, 0xbb, 0x90, 0xe0, - 0x80, 0x91, 0x00, 0x00, 0x82, 0x30, 0x09, 0xf4, 0x91, 0xe0, 0x80, 0x91, - 0x07, 0x00, 0x82, 0x30, 0x09, 0xf4, 0x92, 0x60, 0x93, 0xb9, 0x1f, 0xb9, - 0x87, 0xb1, 0x88, 0x23, 0xe9, 0xf7, 0x00, 0x00, 0x8f, 0x5f, 0x80, 0x38, - 0xe1, 0xf7, 0x02, 0xb9, 0x13, 0xb9, 0x80, 0xe0, 0x90, 0xe0, 0x61, 0xe4, - 0xc7, 0xdd, 0x87, 0xb1, 0x88, 0x23, 0xe9, 0xf7, 0x12, 0xb9, 0xf3, 0xb8, - 0x87, 0xe0, 0x90, 0xe0, 0x62, 0xe4, 0xbe, 0xdd, 0x80, 0x91, 0x0e, 0x00, - 0x90, 0x91, 0x0f, 0x00, 0x01, 0x96, 0x97, 0x70, 0x90, 0x93, 0x0f, 0x00, - 0x80, 0x93, 0x0e, 0x00, 0xcb, 0xcf, 0xa0, 0xe0, 0xb0, 0xe1, 0x9c, 0x91, - 0xe9, 0x2f, 0xf0, 0xe0, 0xef, 0x5f, 0xff, 0x4e, 0x80, 0x83, 0x9f, 0x5f, - 0x9c, 0x93, 0x81, 0xe0, 0x85, 0xbb, 0x08, 0x95, 0x28, 0x2f, 0x39, 0x2f, - 0x41, 0xe0, 0x0d, 0xc0, 0x80, 0x91, 0x00, 0x10, 0xe8, 0x2f, 0xf0, 0xe0, - 0xef, 0x5f, 0xff, 0x4e, 0x90, 0x83, 0x8f, 0x5f, 0x80, 0x93, 0x00, 0x10, - 0x45, 0xbb, 0x2f, 0x5f, 0x3f, 0x4f, 0xe2, 0x2f, 0xf3, 0x2f, 0xc8, 0x95, - 0x90, 0x2d, 0x99, 0x23, 0x69, 0xf7, 0x08, 0x95, 0x28, 0x2f, 0x82, 0x95, - 0x8f, 0x70, 0xe8, 0xe8, 0xf1, 0xe0, 0xe8, 0x0f, 0xf1, 0x1d, 0xc8, 0x95, - 0x90, 0x2d, 0xa0, 0xe0, 0xb0, 0xe1, 0x8c, 0x91, 0xe8, 0x2f, 0xf0, 0xe0, - 0xef, 0x5f, 0xff, 0x4e, 0x90, 0x83, 0x8f, 0x5f, 0x8c, 0x93, 0x81, 0xe0, - 0x85, 0xbb, 0xe2, 0x2f, 0xf0, 0xe0, 0xef, 0x70, 0xf0, 0x70, 0xe8, 0x57, - 0xfe, 0x4f, 0xc8, 0x95, 0x90, 0x2d, 0xa0, 0xe0, 0xb0, 0xe1, 0x8c, 0x91, - 0xe8, 0x2f, 0xf0, 0xe0, 0xef, 0x5f, 0xff, 0x4e, 0x90, 0x83, 0x8f, 0x5f, - 0x8c, 0x93, 0x81, 0xe0, 0x85, 0xbb, 0x08, 0x95, 0xdf, 0x92, 0xef, 0x92, - 0xff, 0x92, 0x0f, 0x93, 0x1f, 0x93, 0xcf, 0x93, 0xdf, 0x93, 0x28, 0x2f, - 0x39, 0x2f, 0x06, 0x2f, 0x66, 0x23, 0x51, 0xf0, 0xc2, 0x2f, 0xd3, 0x2f, - 0x10, 0xe0, 0x90, 0xe2, 0xd9, 0x2e, 0xff, 0x24, 0xf3, 0x94, 0x8a, 0xe0, - 0xe8, 0x2e, 0x20, 0xc0, 0x8d, 0xe7, 0x91, 0xe0, 0xa5, 0xdf, 0x2d, 0xc0, - 0x88, 0x81, 0xba, 0xdf, 0x81, 0x2f, 0x8f, 0x70, 0x51, 0xf4, 0x11, 0x23, - 0x41, 0xf0, 0x80, 0x91, 0x00, 0x10, 0xe8, 0x2f, 0xf0, 0xe0, 0xef, 0x5f, - 0xff, 0x4e, 0xe0, 0x82, 0x07, 0xc0, 0x80, 0x91, 0x00, 0x10, 0xe8, 0x2f, - 0xf0, 0xe0, 0xef, 0x5f, 0xff, 0x4e, 0xd0, 0x82, 0x8f, 0x5f, 0x80, 0x93, - 0x00, 0x10, 0xf5, 0xba, 0x1f, 0x5f, 0x21, 0x96, 0x10, 0x17, 0x10, 0xf3, - 0x0f, 0x70, 0x69, 0xf0, 0x90, 0x91, 0x00, 0x10, 0xe9, 0x2f, 0xf0, 0xe0, - 0xef, 0x5f, 0xff, 0x4e, 0x8a, 0xe0, 0x80, 0x83, 0x9f, 0x5f, 0x90, 0x93, - 0x00, 0x10, 0x81, 0xe0, 0x85, 0xbb, 0xdf, 0x91, 0xcf, 0x91, 0x1f, 0x91, - 0x0f, 0x91, 0xff, 0x90, 0xef, 0x90, 0xdf, 0x90, 0x08, 0x95, 0x98, 0xe0, - 0x96, 0x1b, 0x38, 0x2f, 0x01, 0xc0, 0x33, 0x0f, 0x9a, 0x95, 0xea, 0xf7, - 0x20, 0xe0, 0x41, 0xe0, 0x12, 0xc0, 0x93, 0x2f, 0x99, 0x1f, 0x99, 0x27, - 0x99, 0x1f, 0x90, 0x5d, 0x80, 0x91, 0x00, 0x10, 0xe8, 0x2f, 0xf0, 0xe0, - 0xef, 0x5f, 0xff, 0x4e, 0x90, 0x83, 0x8f, 0x5f, 0x80, 0x93, 0x00, 0x10, - 0x45, 0xbb, 0x33, 0x0f, 0x2f, 0x5f, 0x26, 0x17, 0x60, 0xf3, 0x08, 0x95, - 0x48, 0x2f, 0x2f, 0xe1, 0x30, 0xe0, 0x54, 0xe1, 0x94, 0x2f, 0x91, 0x70, - 0x46, 0x95, 0x82, 0x2f, 0x81, 0x70, 0x26, 0x95, 0x98, 0x13, 0x25, 0x27, - 0x3f, 0x5f, 0x38, 0x30, 0xa9, 0xf7, 0x30, 0xe0, 0x44, 0xe1, 0x96, 0x2f, - 0x91, 0x70, 0x66, 0x95, 0x82, 0x2f, 0x81, 0x70, 0x26, 0x95, 0x98, 0x13, - 0x24, 0x27, 0x3f, 0x5f, 0x33, 0x30, 0xa9, 0xf7, 0x20, 0x95, 0x82, 0x2f, - 0x8f, 0x71, 0x08, 0x95, 0xcf, 0x93, 0xdf, 0x93, 0xc4, 0x2f, 0xd5, 0x2f, - 0xa8, 0x2f, 0xb9, 0x2f, 0x9f, 0xef, 0x2f, 0xef, 0x30, 0xe0, 0x15, 0xc0, - 0x8d, 0x91, 0x98, 0x27, 0x49, 0x2f, 0x50, 0xe0, 0x84, 0x2f, 0x95, 0x2f, - 0x87, 0x56, 0x9e, 0x4f, 0xe8, 0x2f, 0xf9, 0x2f, 0xc8, 0x95, 0x90, 0x2d, - 0x92, 0x27, 0x47, 0x56, 0x5d, 0x4f, 0xe4, 0x2f, 0xf5, 0x2f, 0xc8, 0x95, - 0x80, 0x2d, 0x3f, 0x5f, 0x28, 0x2f, 0x36, 0x17, 0x48, 0xf3, 0x90, 0x95, - 0x98, 0x83, 0x20, 0x95, 0x29, 0x83, 0xdf, 0x91, 0xcf, 0x91, 0x08, 0x95, - 0xcf, 0x93, 0xdf, 0x93, 0xc8, 0x2f, 0xd9, 0x2f, 0x20, 0xe0, 0x30, 0xe0, - 0x0c, 0xc0, 0xec, 0x2f, 0xfd, 0x2f, 0xe2, 0x0f, 0xf3, 0x1f, 0xa6, 0x2f, - 0xb7, 0x2f, 0xa2, 0x0f, 0xb3, 0x1f, 0x8c, 0x91, 0x80, 0x83, 0x2f, 0x5f, - 0x3f, 0x4f, 0x24, 0x17, 0x35, 0x07, 0x8c, 0xf3, 0x8c, 0x2f, 0x9d, 0x2f, - 0xdf, 0x91, 0xcf, 0x91, 0x08, 0x95 diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/usbinput.c b/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/usbinput.c index 69317489a9..d8dd4cc8ce 100644 --- a/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/usbinput.c +++ b/c/src/lib/libbsp/lm32/shared/milkymist_usbinput/usbinput.c @@ -8,7 +8,7 @@ * * $Id$ * - * COPYRIGHT (c) 2010, 2011 Sebastien Bourdeauducq + * COPYRIGHT (c) 2010, 2011, 2012 Sebastien Bourdeauducq */ #define RTEMS_STATUS_CHECKS_USE_PRINTK @@ -25,10 +25,6 @@ #include "../include/system_conf.h" #include "milkymist_usbinput.h" -static const unsigned char input_firmware[] = { -#include "softusb-input.h" -}; - #include "comloc.h" #define DEVICE_NAME "/dev/usbinput" @@ -76,23 +72,9 @@ rtems_device_driver usbinput_initialize( ) { rtems_status_code sc; - volatile unsigned int *usb_dmem - = (volatile unsigned int *)MM_SOFTUSB_DMEM_BASE; - volatile unsigned int *usb_pmem - = (volatile unsigned int *)MM_SOFTUSB_PMEM_BASE; - int i, nwords; rtems_isr_entry dummy; MM_WRITE(MM_SOFTUSB_CONTROL, SOFTUSB_CONTROL_RESET); - for(i=0;ibuffer; + + if(args->command == USBINPUT_LOAD_FIRMWARE) { + load_firmware(fd->data, fd->length); + args->ioctl_return = 0; + return RTEMS_SUCCESSFUL; + } else { + args->ioctl_return = -1; + return RTEMS_UNSATISFIED; + } +} -- cgit v1.2.3 From a52be5ec4044acb7fe1e28875c69c1ef031ac9fe Mon Sep 17 00:00:00 2001 From: Gedare Bloom Date: Sun, 4 Mar 2012 08:48:10 -0500 Subject: PR2034: sprbtree01: predecessor/successor imprecision The tests for the rtems_rbtree_predecessor/successor check for a range of values for the target id of the predecessor/successor when we know the exact expected value. This commit makes the test more precise. --- testsuites/sptests/sprbtree01/init.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/testsuites/sptests/sprbtree01/init.c b/testsuites/sptests/sprbtree01/init.c index c01f3cb923..38badc94d6 100644 --- a/testsuites/sptests/sprbtree01/init.c +++ b/testsuites/sptests/sprbtree01/init.c @@ -443,13 +443,13 @@ rtems_task Init( puts( "INIT - Verify rtems_rbtree_predecessor/successor"); p = rtems_rbtree_predecessor(p); - if(p && rtems_rbtree_container_of(p,test_node,Node)->id > 30) { + if(p && rtems_rbtree_container_of(p,test_node,Node)->id != 29) { puts ("INIT - ERROR ON RBTREE ID MISMATCH"); rtems_test_exit(0); } p = rtems_rbtree_find(&rbtree1, &search_node.Node); p = rtems_rbtree_successor(p); - if(p && rtems_rbtree_container_of(p,test_node,Node)->id < 30) { + if(p && rtems_rbtree_container_of(p,test_node,Node)->id != 31) { puts ("INIT - ERROR ON RBTREE ID MISMATCH"); rtems_test_exit(0); } -- cgit v1.2.3 From 41d33b90306ae6a12b0bb0c7466bf128aa7354bd Mon Sep 17 00:00:00 2001 From: Gedare Bloom Date: Sun, 4 Mar 2012 11:42:08 -0500 Subject: score: Add _RBTree_Opposite_direction. Add a red-black tree helper method to ease obtaining the direction opposite to the current direction. Useful for manipulating and traversing an rbtree. --- cpukit/score/inline/rtems/score/rbtree.inl | 16 +++++++++++++--- cpukit/score/src/rbtreeextract.c | 10 +++++----- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/cpukit/score/inline/rtems/score/rbtree.inl b/cpukit/score/inline/rtems/score/rbtree.inl index bbc60477c8..ef653e5628 100644 --- a/cpukit/score/inline/rtems/score/rbtree.inl +++ b/cpukit/score/inline/rtems/score/rbtree.inl @@ -31,6 +31,16 @@ * @{ */ +/** + * @brief Get the direction opposite to @a the_dir + */ +RTEMS_INLINE_ROUTINE RBTree_Direction _RBTree_Opposite_direction( + RBTree_Direction the_dir +) +{ + return (!the_dir); +} + /** @brief Set off rbtree * * This function sets the parent and child fields of the @a node to NULL @@ -435,10 +445,10 @@ RTEMS_INLINE_ROUTINE void _RBTree_Rotate( { RBTree_Node *c; if (the_node == NULL) return; - if (the_node->child[(1-dir)] == NULL) return; + if (the_node->child[_RBTree_Opposite_direction(dir)] == NULL) return; - c = the_node->child[(1-dir)]; - the_node->child[(1-dir)] = c->child[dir]; + c = the_node->child[_RBTree_Opposite_direction(dir)]; + the_node->child[_RBTree_Opposite_direction(dir)] = c->child[dir]; if (c->child[dir]) c->child[dir]->parent = the_node; diff --git a/cpukit/score/src/rbtreeextract.c b/cpukit/score/src/rbtreeextract.c index ecbda18252..407136164e 100644 --- a/cpukit/score/src/rbtreeextract.c +++ b/cpukit/score/src/rbtreeextract.c @@ -50,7 +50,7 @@ static void _RBTree_Extract_validate_unprotected( sibling->color = RBT_BLACK; dir = the_node != parent->child[0]; _RBTree_Rotate(parent, dir); - sibling = parent->child[!dir]; + sibling = parent->child[_RBTree_Opposite_direction(dir)]; } /* sibling is black, see if both of its children are also black. */ @@ -72,15 +72,15 @@ static void _RBTree_Extract_validate_unprotected( * Then switch the sibling and parent colors, and rotate through parent. */ dir = the_node != parent->child[0]; - if (!_RBTree_Is_red(sibling->child[!dir])) { + if (!_RBTree_Is_red(sibling->child[_RBTree_Opposite_direction(dir)])) { sibling->color = RBT_RED; sibling->child[dir]->color = RBT_BLACK; - _RBTree_Rotate(sibling, !dir); - sibling = parent->child[!dir]; + _RBTree_Rotate(sibling, _RBTree_Opposite_direction(dir)); + sibling = parent->child[_RBTree_Opposite_direction(dir)]; } sibling->color = parent->color; parent->color = RBT_BLACK; - sibling->child[!dir]->color = RBT_BLACK; + sibling->child[_RBTree_Opposite_direction(dir)]->color = RBT_BLACK; _RBTree_Rotate(parent, dir); break; /* done */ } -- cgit v1.2.3