From owner-svn-src-projects@FreeBSD.ORG Sun Jul 24 23:02:24 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E7669106566B; Sun, 24 Jul 2011 23:02:24 +0000 (UTC) (envelope-from linimon@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9E3B38FC0A; Sun, 24 Jul 2011 23:02:24 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6ON2Oa2027878; Sun, 24 Jul 2011 23:02:24 GMT (envelope-from linimon@svn.freebsd.org) Received: (from linimon@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6ON2OJQ027876; Sun, 24 Jul 2011 23:02:24 GMT (envelope-from linimon@svn.freebsd.org) Message-Id: <201107242302.p6ON2OJQ027876@svn.freebsd.org> From: Mark Linimon Date: Sun, 24 Jul 2011 23:02:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224298 - projects/portbuild/scripts X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 24 Jul 2011 23:02:25 -0000 Author: linimon (doc,ports committer) Date: Sun Jul 24 23:02:24 2011 New Revision: 224298 URL: http://svn.freebsd.org/changeset/base/224298 Log: Add a great deal of error handling. A specific case that causes pollmachine to go catatonic seems to be the "disk full" condition. Modified: projects/portbuild/scripts/pollmachine Modified: projects/portbuild/scripts/pollmachine ============================================================================== --- projects/portbuild/scripts/pollmachine Sun Jul 24 20:09:42 2011 (r224297) +++ projects/portbuild/scripts/pollmachine Sun Jul 24 23:02:24 2011 (r224298) @@ -2,7 +2,7 @@ # # pollmachine # -# Monitors build machines and notifies qmgr of changes +# Monitors build machines and notifies qmanager of changes # # pollmachine [options] [arch] ... @@ -16,7 +16,7 @@ # # TODO: -# XXX qmgr notification of new/removed machines +# XXX qmanager notification of new/removed machines # XXX counter before declaring a machine as dead # Declares a machine as online if it reports 0 data from infoseek? @@ -28,6 +28,10 @@ import sys, threading, socket from time import sleep import os, subprocess, logging +EXPECTED_LINES = 6 + +DEBUG=False + pbc = os.getenv('PORTBUILD_CHECKOUT') \ if os.getenv('PORTBUILD_CHECKOUT') else "/var/portbuild" pbd = os.getenv('PORTBUILD_DATA') \ @@ -122,25 +126,42 @@ class MachinePoll(threading.Thread): try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(60) - s.connect((self.host, self.port)) + retval = s.connect_ex((self.host, self.port)) + if retval != 0: + if self.online: + logging.info("[%s] Connection error: %s" % (self.mach, `retval`)) + self.timeouts += 1 + else: + if DEBUG: + logging.info("%s connected to socket for %s" % ( str(self), self.mach )) - data = "" - while len(data) < 65536: - chunk = s.recv(8192) - if not chunk: - break - data += chunk - - nowonline = True - self.timeouts = 0 - lines = data.split("\n") + data = "" + while len(data) < 65536: + chunk = s.recv(8192) + if not chunk: + break + data += chunk + + if DEBUG: + logging.info("%s: len(data) = %d" % (self.mach, len(data))) + if len(data) > 0: + lines = data.split("\n") + if len(lines) >= EXPECTED_LINES: + nowonline = True + self.timeouts = 0 + else: + # XXX MCL + if DEBUG or True: + logging.info("%s: truncated reply: %s" % (self.mach, lines)) except socket.timeout: if self.online: logging.info("[%s] Connection timeout" % self.mach) self.timeouts += 1 if self.timeouts < 3: nowonline = self.online - except: + except Exception, e: + print "pollmachine: exception in poll for %s:" %self.mach + print e pass finally: try: @@ -153,7 +174,7 @@ class MachinePoll(threading.Thread): self.online = nowonline if self.online: self.timeouts = 0 - # XXX inform qmgr of state change + # XXX inform qmanager of state change if self.online and not lines and not self.timeouts: # reportload script is missing @@ -180,7 +201,7 @@ class MachinePoll(threading.Thread): if old != part[2]: self.vars[part[0]] = part[2] # logging.info("%s@%s: \"%s\" -> \"%s\"" % (part[0], self.mach, old, part[2])) - # XXX update qmgr + # XXX inform qmanager try: envs = self.vars['buildenvs'] @@ -222,16 +243,31 @@ class MachinePoll(threading.Thread): except KeyError: pass + if DEBUG: + logging.info("%s recording current system load for %s" % ( str(self), self.mach )) # Record current system load + # note: can fail on "file system full" try: f = file("%s/%s/loads/%s" % (pbd, self.arch, self.mach), "w") - except: + except Exception, e: + print "pollmachine: exception in creating %s/%s/loads/%s:" % (pbd, self.arch, self.mach) + print e return try: - f.write("%s %s\n" % (self.vars['jobs'], self.vars['load'])) - except: - pass - f.close() + if 'jobs' in self.vars and 'load' in self.vars: + f.write("%s %s\n" % (self.vars['jobs'], self.vars['load'])) + else: + # machine is not responding to poll. + # XXX MCL remove from machines + # XXX inform qmanager + f.write("") + f.close() + except Exception, e: + print "pollmachine: exception in writing %s/%s/loads/%s:" % (pbd, self.arch, self.mach) + print self.vars + print e + if DEBUG: + logging.info("%s finished polling for %s" % ( str(self), self.mach )) def setup(self, branch, buildid, args = ""): cmd = "su ports-%s -c \"%s/scripts/dosetupnode %s %s %s %s %s\""\ @@ -275,13 +311,13 @@ while True: for mach in gone: logging.info("Removing machine %s/%s" % (arch, mach)) - # XXX disable from qmgr + # XXX disable from qmanager pollthreads[mach].shutdown=True del pollthreads[mach] for mach in new: logging.info("Adding machine %s/%s" % (arch, mach)) - # XXX set up qmgr + # XXX set up qmanager pc="%s/%s/portbuild.conf" % (pbd, arch) pch="%s/%s/portbuild.%s" % (pbd, arch, mach) @@ -303,4 +339,10 @@ while True: if not polldelay: break + if DEBUG: + logging.info("Ready to sleep") sleep(polldelay) + if DEBUG: + logging.info("Wakeup") + +logging.info("pollmachine: exiting.") From owner-svn-src-projects@FreeBSD.ORG Thu Jul 28 09:27:02 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4783C106566B; Thu, 28 Jul 2011 09:27:02 +0000 (UTC) (envelope-from andrew@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 378008FC13; Thu, 28 Jul 2011 09:27:02 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6S9R2ZZ094270; Thu, 28 Jul 2011 09:27:02 GMT (envelope-from andrew@svn.freebsd.org) Received: (from andrew@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6S9R2iE094264; Thu, 28 Jul 2011 09:27:02 GMT (envelope-from andrew@svn.freebsd.org) Message-Id: <201107280927.p6S9R2iE094264@svn.freebsd.org> From: Andrew Turner Date: Thu, 28 Jul 2011 09:27:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224472 - in projects/arm_eabi: include sys/arm/include sys/sys X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Jul 2011 09:27:02 -0000 Author: andrew Date: Thu Jul 28 09:27:01 2011 New Revision: 224472 URL: http://svn.freebsd.org/changeset/base/224472 Log: Add support for an unsigned wchar_t required by the ARM EABI. To do this I have: * Moved the wchar_t typedef to machine/_types.h * Moved the definitions of WCHAR_MIN and WCHAR_MAX to machine/_wchar.h Added: projects/arm_eabi/sys/arm/include/_wchar.h Modified: projects/arm_eabi/include/wchar.h projects/arm_eabi/sys/arm/include/_stdint.h projects/arm_eabi/sys/arm/include/_types.h projects/arm_eabi/sys/sys/_types.h Modified: projects/arm_eabi/include/wchar.h ============================================================================== --- projects/arm_eabi/include/wchar.h Thu Jul 28 03:11:12 2011 (r224471) +++ projects/arm_eabi/include/wchar.h Thu Jul 28 09:27:01 2011 (r224472) @@ -64,6 +64,7 @@ #include #include #include +#include #include <_ctype.h> #ifndef _MBSTATE_T_DECLARED @@ -88,11 +89,6 @@ typedef __wint_t wint_t; #define _WINT_T_DECLARED #endif -#ifndef WCHAR_MIN -#define WCHAR_MIN __INT_MIN -#define WCHAR_MAX __INT_MAX -#endif - #ifndef WEOF #define WEOF ((wint_t)-1) #endif Modified: projects/arm_eabi/sys/arm/include/_stdint.h ============================================================================== --- projects/arm_eabi/sys/arm/include/_stdint.h Thu Jul 28 03:11:12 2011 (r224471) +++ projects/arm_eabi/sys/arm/include/_stdint.h Thu Jul 28 09:27:01 2011 (r224472) @@ -52,6 +52,8 @@ #if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) +#include + /* * ISO/IEC 9899:1999 * 7.18.2.1 Limits of exact-width integer types @@ -149,12 +151,6 @@ /* Limit of size_t. */ #define SIZE_MAX UINT32_MAX -#ifndef WCHAR_MIN /* Also possibly defined in */ -/* Limits of wchar_t. */ -#define WCHAR_MIN INT32_MIN -#define WCHAR_MAX INT32_MAX -#endif - /* Limits of wint_t. */ #define WINT_MIN INT32_MIN #define WINT_MAX INT32_MAX Modified: projects/arm_eabi/sys/arm/include/_types.h ============================================================================== --- projects/arm_eabi/sys/arm/include/_types.h Thu Jul 28 03:11:12 2011 (r224471) +++ projects/arm_eabi/sys/arm/include/_types.h Thu Jul 28 09:27:01 2011 (r224472) @@ -120,4 +120,10 @@ typedef char * __va_list; typedef __va_list __gnuc_va_list; /* compatibility w/GNU headers*/ #endif +#ifdef __ARM_EABI__ +typedef unsigned int __wchar_t; +#else +typedef int __wchar_t; +#endif + #endif /* !_MACHINE__TYPES_H_ */ Added: projects/arm_eabi/sys/arm/include/_wchar.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/arm_eabi/sys/arm/include/_wchar.h Thu Jul 28 09:27:01 2011 (r224472) @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2011 Andrew Turner + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef _MACHINE__WCHAR_H_ +#define _MACHINE__WCHAR_H_ + +/* + * Limits of wchar_t. __UINT_MAX and __INT_{MIN,MAX} are used as UINT32_MAX + * and INT32_{MIN,MAX} are not always defined when this is included. + */ +#ifdef __ARM_EABI__ +#define WCHAR_MIN (0) +#define WCHAR_MAX __UINT_MAX +#else +#define WCHAR_MIN __INT_MIN +#define WCHAR_MAX __INT_MAX +#endif + +#endif /* _ARM_INCLUDE__WCHAR_H_ */ + Modified: projects/arm_eabi/sys/sys/_types.h ============================================================================== --- projects/arm_eabi/sys/sys/_types.h Thu Jul 28 03:11:12 2011 (r224471) +++ projects/arm_eabi/sys/sys/_types.h Thu Jul 28 09:27:01 2011 (r224472) @@ -86,7 +86,6 @@ typedef int __cpusetid_t; /* cpuset ide */ typedef int __ct_rune_t; /* arg type for ctype funcs */ typedef __ct_rune_t __rune_t; /* rune_t (see above) */ -typedef __ct_rune_t __wchar_t; /* wchar_t (see above) */ typedef __ct_rune_t __wint_t; /* wint_t (see above) */ typedef __uint32_t __dev_t; /* device number */ From owner-svn-src-projects@FreeBSD.ORG Thu Jul 28 13:27:14 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E4E21106566B; Thu, 28 Jul 2011 13:27:14 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BD8398FC08; Thu, 28 Jul 2011 13:27:14 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6SDREl3005353; Thu, 28 Jul 2011 13:27:14 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6SDREa8005352; Thu, 28 Jul 2011 13:27:14 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201107281327.p6SDREa8005352@svn.freebsd.org> From: Alexander Motin Date: Thu, 28 Jul 2011 13:27:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224478 - projects/hid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Jul 2011 13:27:15 -0000 Author: mav Date: Thu Jul 28 13:27:14 2011 New Revision: 224478 URL: http://svn.freebsd.org/changeset/base/224478 Log: Create playground for my attempt to refactor/improve HID devices support. Added: - copied from r224477, head/ Directory Properties: projects/hid/ (props changed) From owner-svn-src-projects@FreeBSD.ORG Thu Jul 28 13:49:32 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C5EDB106564A; Thu, 28 Jul 2011 13:49:32 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B73578FC0A; Thu, 28 Jul 2011 13:49:32 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6SDnWa9006086; Thu, 28 Jul 2011 13:49:32 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6SDnWG5006084; Thu, 28 Jul 2011 13:49:32 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201107281349.p6SDnWG5006084@svn.freebsd.org> From: Alexander Motin Date: Thu, 28 Jul 2011 13:49:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224480 - projects/hid/usr.bin/usbhidctl X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Jul 2011 13:49:32 -0000 Author: mav Date: Thu Jul 28 13:49:32 2011 New Revision: 224480 URL: http://svn.freebsd.org/changeset/base/224480 Log: Add Report ID and Collection Type fields to the "-r" output. Modified: projects/hid/usr.bin/usbhidctl/usbhid.c Modified: projects/hid/usr.bin/usbhidctl/usbhid.c ============================================================================== --- projects/hid/usr.bin/usbhidctl/usbhid.c Thu Jul 28 13:41:50 2011 (r224479) +++ projects/hid/usr.bin/usbhidctl/usbhid.c Thu Jul 28 13:49:32 2011 (r224480) @@ -101,8 +101,8 @@ dumpitem(const char *label, struct hid_i { if ((h->flags & HIO_CONST) && !verbose) return; - printf("%s size=%d count=%d page=%s usage=%s%s", label, - h->report_size, h->report_count, + printf("%s rid=%d size=%d count=%d page=%s usage=%s%s", label, + h->report_ID, h->report_size, h->report_count, hid_usage_page(HID_PAGE(h->usage)), hid_usage_in_page(h->usage), h->flags & HIO_CONST ? " Const" : ""); @@ -116,6 +116,24 @@ dumpitem(const char *label, struct hid_i printf("\n"); } +static const char * +hid_collection_type(int32_t type) +{ + static char num[8]; + + switch (type) { + case 0: return ("Physical"); + case 1: return ("Application"); + case 2: return ("Logical"); + case 3: return ("Report"); + case 4: return ("Named_Array"); + case 5: return ("Usage_Switch"); + case 6: return ("Usage_Modifier"); + } + snprintf(num, sizeof(num), "0x%02x", type); + return (num); +} + void dumpitems(report_desc_t r) { @@ -126,7 +144,8 @@ dumpitems(report_desc_t r) for (d = hid_start_parse(r, ~0, reportid); hid_get_item(d, &h); ) { switch (h.kind) { case hid_collection: - printf("Collection page=%s usage=%s\n", + printf("Collection type=%s page=%s usage=%s\n", + hid_collection_type(h.collection), hid_usage_page(HID_PAGE(h.usage)), hid_usage_in_page(h.usage)); break; From owner-svn-src-projects@FreeBSD.ORG Thu Jul 28 17:31:50 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2C3271065672; Thu, 28 Jul 2011 17:31:50 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1D1A08FC1D; Thu, 28 Jul 2011 17:31:50 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6SHVo73012650; Thu, 28 Jul 2011 17:31:50 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6SHVn7D012648; Thu, 28 Jul 2011 17:31:49 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201107281731.p6SHVn7D012648@svn.freebsd.org> From: Alexander Motin Date: Thu, 28 Jul 2011 17:31:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224481 - projects/hid/lib/libusbhid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Jul 2011 17:31:50 -0000 Author: mav Date: Thu Jul 28 17:31:49 2011 New Revision: 224481 URL: http://svn.freebsd.org/changeset/base/224481 Log: Make hid_report_size() handle negative id argument value as wildcard. Modified: projects/hid/lib/libusbhid/parse.c Modified: projects/hid/lib/libusbhid/parse.c ============================================================================== --- projects/hid/lib/libusbhid/parse.c Thu Jul 28 13:49:32 2011 (r224480) +++ projects/hid/lib/libusbhid/parse.c Thu Jul 28 17:31:49 2011 (r224481) @@ -512,13 +512,14 @@ hid_report_size(report_desc_t r, enum hi uint32_t temp; uint32_t hpos; uint32_t lpos; + int report_id = 0; hpos = 0; lpos = 0xFFFFFFFF; memset(&h, 0, sizeof h); for (d = hid_start_parse(r, 1 << k, id); hid_get_item(d, &h); ) { - if (h.report_ID == id && h.kind == k) { + if ((h.report_ID == id || id < 0) && h.kind == k) { /* compute minimum */ if (lpos > h.pos) lpos = h.pos; @@ -527,6 +528,8 @@ hid_report_size(report_desc_t r, enum hi /* compute maximum */ if (hpos < temp) hpos = temp; + if (h.report_ID != 0) + report_id = 1; } } hid_end_parse(d); @@ -537,11 +540,8 @@ hid_report_size(report_desc_t r, enum hi else temp = hpos - lpos; - if (id) - temp += 8; - /* return length in bytes rounded up */ - return ((temp + 7) / 8); + return ((temp + 7) / 8 + report_id); } int From owner-svn-src-projects@FreeBSD.ORG Thu Jul 28 17:46:00 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1F81F106564A; Thu, 28 Jul 2011 17:46:00 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0566D8FC17; Thu, 28 Jul 2011 17:46:00 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6SHjxFv013093; Thu, 28 Jul 2011 17:45:59 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6SHjxP2013091; Thu, 28 Jul 2011 17:45:59 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201107281745.p6SHjxP2013091@svn.freebsd.org> From: Alexander Motin Date: Thu, 28 Jul 2011 17:45:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224482 - projects/hid/usr.bin/usbhidctl X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Jul 2011 17:46:00 -0000 Author: mav Date: Thu Jul 28 17:45:59 2011 New Revision: 224482 URL: http://svn.freebsd.org/changeset/base/224482 Log: - Make usbhidctl work with devices with multiple Report IDs. - Report Array items as such, and fix printing of their values. Modified: projects/hid/usr.bin/usbhidctl/usbhid.c Modified: projects/hid/usr.bin/usbhidctl/usbhid.c ============================================================================== --- projects/hid/usr.bin/usbhidctl/usbhid.c Thu Jul 28 17:31:49 2011 (r224481) +++ projects/hid/usr.bin/usbhidctl/usbhid.c Thu Jul 28 17:45:59 2011 (r224482) @@ -46,7 +46,6 @@ int verbose = 0; int all = 0; int noname = 0; int hexdump = 0; -static int reportid; char **names; int nnames; @@ -101,11 +100,12 @@ dumpitem(const char *label, struct hid_i { if ((h->flags & HIO_CONST) && !verbose) return; - printf("%s rid=%d size=%d count=%d page=%s usage=%s%s", label, + printf("%s rid=%d size=%d count=%d page=%s usage=%s%s%s", label, h->report_ID, h->report_size, h->report_count, hid_usage_page(HID_PAGE(h->usage)), hid_usage_in_page(h->usage), - h->flags & HIO_CONST ? " Const" : ""); + h->flags & HIO_CONST ? " Const" : "", + h->flags & HIO_VARIABLE ? "" : " Array"); printf(", logical range %d..%d", h->logical_minimum, h->logical_maximum); if (h->physical_minimum != h->physical_maximum) @@ -141,7 +141,7 @@ dumpitems(report_desc_t r) struct hid_item h; int size; - for (d = hid_start_parse(r, ~0, reportid); hid_get_item(d, &h); ) { + for (d = hid_start_parse(r, ~0, -1); hid_get_item(d, &h); ) { switch (h.kind) { case hid_collection: printf("Collection type=%s page=%s usage=%s\n", @@ -164,13 +164,13 @@ dumpitems(report_desc_t r) } } hid_end_parse(d); - size = hid_report_size(r, hid_input, 0); + size = hid_report_size(r, hid_input, -1); printf("Total input size %d bytes\n", size); - size = hid_report_size(r, hid_output, 0); + size = hid_report_size(r, hid_output, -1); printf("Total output size %d bytes\n", size); - size = hid_report_size(r, hid_feature, 0); + size = hid_report_size(r, hid_feature, -1); printf("Total feature size %d bytes\n", size); } @@ -199,14 +199,17 @@ prdata(u_char *buf, struct hid_item *h) pos = h->pos; for (i = 0; i < h->report_count; i++) { data = hid_get_data(buf, h); + if (i > 0) + printf(" "); if (h->logical_minimum < 0) printf("%d", (int)data); else printf("%u", data); if (hexdump) printf(" [0x%x]", data); - pos += h->report_size; + h->pos += h->report_size; } + h->pos = pos; } void @@ -221,7 +224,7 @@ dumpdata(int f, report_desc_t rd, int lo char namebuf[10000], *namep; hids = 0; - for (d = hid_start_parse(rd, 1<next) { + if (n->report_ID != 0 && dbuf[0] != n->report_ID) + continue; namep = namebuf; namep += sprintf(namep, "%s:%s.", hid_usage_page(HID_PAGE(n->collection)), @@ -261,7 +266,7 @@ dumpdata(int f, report_desc_t rd, int lo if (all || gotname(namebuf)) { if (!noname) printf("%s=", namebuf); - prdata(dbuf + (reportid != 0), n); + prdata(dbuf, n); printf("\n"); } } From owner-svn-src-projects@FreeBSD.ORG Thu Jul 28 18:39:48 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0124B106566B; Thu, 28 Jul 2011 18:39:48 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E63A38FC0A; Thu, 28 Jul 2011 18:39:47 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6SIdlpG014698; Thu, 28 Jul 2011 18:39:47 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6SIdlgo014696; Thu, 28 Jul 2011 18:39:47 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201107281839.p6SIdlgo014696@svn.freebsd.org> From: Alexander Motin Date: Thu, 28 Jul 2011 18:39:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224483 - projects/hid/lib/libusbhid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Jul 2011 18:39:48 -0000 Author: mav Date: Thu Jul 28 18:39:47 2011 New Revision: 224483 URL: http://svn.freebsd.org/changeset/base/224483 Log: Do not return usage_minimum/usage_maximum fields for HIO_VARIABLE items. They are unrolled into usages inside hid_get_item(), and returning extra range may confuse applications, as it does for usbhidaction. Modified: projects/hid/lib/libusbhid/parse.c Modified: projects/hid/lib/libusbhid/parse.c ============================================================================== --- projects/hid/lib/libusbhid/parse.c Thu Jul 28 17:45:59 2011 (r224482) +++ projects/hid/lib/libusbhid/parse.c Thu Jul 28 18:39:47 2011 (r224483) @@ -322,6 +322,8 @@ hid_get_item(hid_data_t s, hid_item_t *h * one and one item: */ c->report_count = 1; + c->usage_minimum = 0; + c->usage_maximum = 0; } else { s->ncount = 1; } From owner-svn-src-projects@FreeBSD.ORG Thu Jul 28 18:42:10 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7E885106564A; Thu, 28 Jul 2011 18:42:10 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6F06B8FC16; Thu, 28 Jul 2011 18:42:10 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6SIgAZQ014807; Thu, 28 Jul 2011 18:42:10 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6SIgA9t014805; Thu, 28 Jul 2011 18:42:10 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201107281842.p6SIgA9t014805@svn.freebsd.org> From: Alexander Motin Date: Thu, 28 Jul 2011 18:42:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224484 - projects/hid/usr.bin/usbhidaction X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Jul 2011 18:42:10 -0000 Author: mav Date: Thu Jul 28 18:42:10 2011 New Revision: 224484 URL: http://svn.freebsd.org/changeset/base/224484 Log: Fix support for multiple Report IDs. Modified: projects/hid/usr.bin/usbhidaction/usbhidaction.c Modified: projects/hid/usr.bin/usbhidaction/usbhidaction.c ============================================================================== --- projects/hid/usr.bin/usbhidaction/usbhidaction.c Thu Jul 28 18:39:47 2011 (r224483) +++ projects/hid/usr.bin/usbhidaction/usbhidaction.c Thu Jul 28 18:42:10 2011 (r224484) @@ -92,12 +92,12 @@ main(int argc, char **argv) char buf[100]; char devnamebuf[PATH_MAX]; struct command *cmd; - int reportid; + int reportid = -1; demon = 1; ignore = 0; dieearly = 0; - while ((ch = getopt(argc, argv, "c:def:ip:t:v")) != -1) { + while ((ch = getopt(argc, argv, "c:def:ip:r:t:v")) != -1) { switch(ch) { case 'c': conf = optarg; @@ -117,6 +117,9 @@ main(int argc, char **argv) case 'p': pidfile = optarg; break; + case 'r': + reportid = atoi(optarg); + break; case 't': table = optarg; break; @@ -146,14 +149,13 @@ main(int argc, char **argv) fd = open(dev, O_RDWR); if (fd < 0) err(1, "%s", dev); - reportid = hid_get_report_id(fd); repd = hid_get_report_desc(fd); if (repd == NULL) err(1, "hid_get_report_desc() failed"); commands = parse_conf(conf, repd, reportid, ignore); - sz = (size_t)hid_report_size(repd, hid_input, reportid); + sz = (size_t)hid_report_size(repd, hid_input, -1); if (verbose) printf("report size %zu\n", sz); @@ -198,6 +200,9 @@ main(int argc, char **argv) } #endif for (cmd = commands; cmd; cmd = cmd->next) { + if (cmd->item.report_ID != 0 && + buf[0] != cmd->item.report_ID) + continue; val = hid_get_data(buf, &cmd->item); if (cmd->value != val && cmd->anyvalue == 0) goto next; From owner-svn-src-projects@FreeBSD.ORG Thu Jul 28 19:24:34 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4EF1F10656DA; Thu, 28 Jul 2011 19:24:34 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3F9C68FC0A; Thu, 28 Jul 2011 19:24:34 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6SJOYtn016045; Thu, 28 Jul 2011 19:24:34 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6SJOY6X016043; Thu, 28 Jul 2011 19:24:34 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201107281924.p6SJOY6X016043@svn.freebsd.org> From: Alexander Motin Date: Thu, 28 Jul 2011 19:24:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224485 - projects/hid/usr.bin/usbhidaction X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Jul 2011 19:24:34 -0000 Author: mav Date: Thu Jul 28 19:24:33 2011 New Revision: 224485 URL: http://svn.freebsd.org/changeset/base/224485 Log: Fix Array items support: check all reports, not only the first. Modified: projects/hid/usr.bin/usbhidaction/usbhidaction.c Modified: projects/hid/usr.bin/usbhidaction/usbhidaction.c ============================================================================== --- projects/hid/usr.bin/usbhidaction/usbhidaction.c Thu Jul 28 18:42:10 2011 (r224484) +++ projects/hid/usr.bin/usbhidaction/usbhidaction.c Thu Jul 28 19:24:33 2011 (r224485) @@ -203,7 +203,20 @@ main(int argc, char **argv) if (cmd->item.report_ID != 0 && buf[0] != cmd->item.report_ID) continue; - val = hid_get_data(buf, &cmd->item); + if (cmd->item.flags & HIO_VARIABLE) + val = hid_get_data(buf, &cmd->item); + else { + uint32_t pos = cmd->item.pos; + for (i = 0; i < cmd->item.report_count; i++) { + val = hid_get_data(buf, &cmd->item); + if (val == cmd->value) + break; + cmd->item.pos += cmd->item.report_size; + } + cmd->item.pos = pos; + val = (i < cmd->item.report_count) ? + cmd->value : -1; + } if (cmd->value != val && cmd->anyvalue == 0) goto next; if ((cmd->debounce == 0) || @@ -417,7 +430,6 @@ parse_conf(const char *conf, report_desc } foundhid: - hid_end_parse(d); cmd->lastseen = -1; cmd->lastused = -1; cmd->item = h; @@ -429,6 +441,7 @@ parse_conf(const char *conf, report_desc else cmd->value = -1; } + hid_end_parse(d); if (verbose) printf("PARSE:%d %s, %d, '%s'\n", cmd->line, name, From owner-svn-src-projects@FreeBSD.ORG Thu Jul 28 20:30:55 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EF76B106566B; Thu, 28 Jul 2011 20:30:55 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E07058FC1D; Thu, 28 Jul 2011 20:30:55 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6SKUtiZ018023; Thu, 28 Jul 2011 20:30:55 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6SKUtU5018021; Thu, 28 Jul 2011 20:30:55 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201107282030.p6SKUtU5018021@svn.freebsd.org> From: Alexander Motin Date: Thu, 28 Jul 2011 20:30:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224486 - projects/hid/usr.bin/usbhidaction X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Jul 2011 20:30:56 -0000 Author: mav Date: Thu Jul 28 20:30:55 2011 New Revision: 224486 URL: http://svn.freebsd.org/changeset/base/224486 Log: This change wasn't needed. Revert. Modified: projects/hid/usr.bin/usbhidaction/usbhidaction.c Modified: projects/hid/usr.bin/usbhidaction/usbhidaction.c ============================================================================== --- projects/hid/usr.bin/usbhidaction/usbhidaction.c Thu Jul 28 19:24:33 2011 (r224485) +++ projects/hid/usr.bin/usbhidaction/usbhidaction.c Thu Jul 28 20:30:55 2011 (r224486) @@ -430,6 +430,7 @@ parse_conf(const char *conf, report_desc } foundhid: + hid_end_parse(d); cmd->lastseen = -1; cmd->lastused = -1; cmd->item = h; @@ -441,7 +442,6 @@ parse_conf(const char *conf, report_desc else cmd->value = -1; } - hid_end_parse(d); if (verbose) printf("PARSE:%d %s, %d, '%s'\n", cmd->line, name, From owner-svn-src-projects@FreeBSD.ORG Sat Jul 30 13:28:12 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7EA23106564A; Sat, 30 Jul 2011 13:28:12 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6A6F58FC0C; Sat, 30 Jul 2011 13:28:12 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p6UDSCOM001734; Sat, 30 Jul 2011 13:28:12 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p6UDSCea001716; Sat, 30 Jul 2011 13:28:12 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201107301328.p6UDSCea001716@svn.freebsd.org> From: Alexander Motin Date: Sat, 30 Jul 2011 13:28:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r224513 - in projects/hid: contrib/top release/amd64 release/i386 release/powerpc sbin/mount share/mk sys/cam sys/cam/ata sys/dev/ahci sys/dev/ath sys/dev/ath/ath_hal/ar5416 sys/dev/mpt... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 30 Jul 2011 13:28:12 -0000 Author: mav Date: Sat Jul 30 13:28:11 2011 New Revision: 224513 URL: http://svn.freebsd.org/changeset/base/224513 Log: MFC@r224512 Modified: projects/hid/release/amd64/make-memstick.sh projects/hid/release/i386/make-memstick.sh projects/hid/release/powerpc/make-memstick.sh projects/hid/sbin/mount/mount.c projects/hid/sys/cam/ata/ata_da.c projects/hid/sys/cam/cam_periph.c projects/hid/sys/dev/ahci/ahci.c projects/hid/sys/dev/ahci/ahci.h projects/hid/sys/dev/ath/ath_hal/ar5416/ar5416.h projects/hid/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c projects/hid/sys/dev/ath/ath_hal/ar5416/ar5416_cal.c projects/hid/sys/dev/ath/ath_hal/ar5416/ar5416_recv.c projects/hid/sys/dev/ath/if_ath_sysctl.c projects/hid/sys/dev/mpt/mpt.c projects/hid/sys/dev/mpt/mpt.h projects/hid/sys/dev/mpt/mpt_cam.c projects/hid/sys/dev/mpt/mpt_debug.c projects/hid/sys/dev/mpt/mpt_pci.c projects/hid/sys/dev/mpt/mpt_raid.c projects/hid/sys/dev/mpt/mpt_raid.h projects/hid/sys/dev/mpt/mpt_user.c projects/hid/sys/dev/re/if_re.c projects/hid/sys/dev/usb/input/ums.c projects/hid/sys/pci/if_rlreg.h projects/hid/sys/powerpc/powermac/fcu.c projects/hid/sys/ufs/ffs/ffs_alloc.c projects/hid/sys/ufs/ffs/ffs_softdep.c projects/hid/sys/ufs/ffs/ffs_vfsops.c projects/hid/sys/ufs/ffs/ffs_vnops.c projects/hid/sys/ufs/ufs/inode.h projects/hid/usr.sbin/mfiutil/mfi_show.c Directory Properties: projects/hid/ (props changed) projects/hid/cddl/contrib/opensolaris/ (props changed) projects/hid/contrib/bind9/ (props changed) projects/hid/contrib/binutils/ (props changed) projects/hid/contrib/bzip2/ (props changed) projects/hid/contrib/compiler-rt/ (props changed) projects/hid/contrib/dialog/ (props changed) projects/hid/contrib/ee/ (props changed) projects/hid/contrib/expat/ (props changed) projects/hid/contrib/file/ (props changed) projects/hid/contrib/gcc/ (props changed) projects/hid/contrib/gdb/ (props changed) projects/hid/contrib/gdtoa/ (props changed) projects/hid/contrib/gnu-sort/ (props changed) projects/hid/contrib/groff/ (props changed) projects/hid/contrib/less/ (props changed) projects/hid/contrib/libpcap/ (props changed) projects/hid/contrib/libstdc++/ (props changed) projects/hid/contrib/llvm/ (props changed) projects/hid/contrib/llvm/tools/clang/ (props changed) projects/hid/contrib/ncurses/ (props changed) projects/hid/contrib/netcat/ (props changed) projects/hid/contrib/ntp/ (props changed) projects/hid/contrib/one-true-awk/ (props changed) projects/hid/contrib/openbsm/ (props changed) projects/hid/contrib/openpam/ (props changed) projects/hid/contrib/pf/ (props changed) projects/hid/contrib/sendmail/ (props changed) projects/hid/contrib/tcpdump/ (props changed) projects/hid/contrib/tcsh/ (props changed) projects/hid/contrib/tnftp/ (props changed) projects/hid/contrib/top/ (props changed) projects/hid/contrib/top/install-sh (props changed) projects/hid/contrib/tzcode/stdtime/ (props changed) projects/hid/contrib/tzcode/zic/ (props changed) projects/hid/contrib/tzdata/ (props changed) projects/hid/contrib/wpa/ (props changed) projects/hid/contrib/xz/ (props changed) projects/hid/crypto/openssh/ (props changed) projects/hid/crypto/openssl/ (props changed) projects/hid/gnu/lib/ (props changed) projects/hid/gnu/usr.bin/binutils/ (props changed) projects/hid/gnu/usr.bin/cc/cc_tools/ (props changed) projects/hid/gnu/usr.bin/gdb/ (props changed) projects/hid/lib/libc/ (props changed) projects/hid/lib/libc/stdtime/ (props changed) projects/hid/lib/libutil/ (props changed) projects/hid/lib/libz/ (props changed) projects/hid/sbin/ (props changed) projects/hid/sbin/ipfw/ (props changed) projects/hid/share/mk/bsd.arch.inc.mk (props changed) projects/hid/share/zoneinfo/ (props changed) projects/hid/sys/ (props changed) projects/hid/sys/amd64/include/xen/ (props changed) projects/hid/sys/boot/ (props changed) projects/hid/sys/boot/i386/efi/ (props changed) projects/hid/sys/boot/ia64/efi/ (props changed) projects/hid/sys/boot/ia64/ski/ (props changed) projects/hid/sys/boot/powerpc/boot1.chrp/ (props changed) projects/hid/sys/boot/powerpc/ofw/ (props changed) projects/hid/sys/cddl/contrib/opensolaris/ (props changed) projects/hid/sys/conf/ (props changed) projects/hid/sys/contrib/dev/acpica/ (props changed) projects/hid/sys/contrib/octeon-sdk/ (props changed) projects/hid/sys/contrib/pf/ (props changed) projects/hid/sys/contrib/x86emu/ (props changed) projects/hid/usr.bin/calendar/ (props changed) projects/hid/usr.bin/csup/ (props changed) projects/hid/usr.bin/procstat/ (props changed) projects/hid/usr.sbin/ndiscvt/ (props changed) projects/hid/usr.sbin/rtadvctl/ (props changed) projects/hid/usr.sbin/rtadvd/ (props changed) projects/hid/usr.sbin/zic/ (props changed) Modified: projects/hid/release/amd64/make-memstick.sh ============================================================================== --- projects/hid/release/amd64/make-memstick.sh Sat Jul 30 13:25:11 2011 (r224512) +++ projects/hid/release/amd64/make-memstick.sh Sat Jul 30 13:28:11 2011 (r224513) @@ -32,7 +32,7 @@ if [ -e ${2} ]; then exit 1 fi -echo '/dev/gpt/FreeBSD_Install / ufs rw,noatime 1 1' > ${1}/etc/fstab +echo '/dev/gpt/FreeBSD_Install / ufs ro,noatime 1 1' > ${1}/etc/fstab rm -f ${tempfile} makefs -B little ${tempfile} ${1} if [ $? -ne 0 ]; then Modified: projects/hid/release/i386/make-memstick.sh ============================================================================== --- projects/hid/release/i386/make-memstick.sh Sat Jul 30 13:25:11 2011 (r224512) +++ projects/hid/release/i386/make-memstick.sh Sat Jul 30 13:28:11 2011 (r224513) @@ -32,7 +32,7 @@ if [ -e ${2} ]; then exit 1 fi -echo '/dev/gpt/FreeBSD_Install / ufs rw,noatime 1 1' > ${1}/etc/fstab +echo '/dev/gpt/FreeBSD_Install / ufs ro,noatime 1 1' > ${1}/etc/fstab rm -f ${tempfile} makefs -B little ${tempfile} ${1} if [ $? -ne 0 ]; then Modified: projects/hid/release/powerpc/make-memstick.sh ============================================================================== --- projects/hid/release/powerpc/make-memstick.sh Sat Jul 30 13:25:11 2011 (r224512) +++ projects/hid/release/powerpc/make-memstick.sh Sat Jul 30 13:28:11 2011 (r224513) @@ -32,7 +32,7 @@ if [ -e ${2} ]; then exit 1 fi -echo '/dev/da0s3 / ufs rw,noatime 1 1' > ${1}/etc/fstab +echo '/dev/da0s3 / ufs ro,noatime 1 1' > ${1}/etc/fstab rm -f ${tempfile} makefs -B big ${tempfile} ${1} if [ $? -ne 0 ]; then Modified: projects/hid/sbin/mount/mount.c ============================================================================== --- projects/hid/sbin/mount/mount.c Sat Jul 30 13:25:11 2011 (r224512) +++ projects/hid/sbin/mount/mount.c Sat Jul 30 13:28:11 2011 (r224513) @@ -317,7 +317,7 @@ main(int argc, char *argv[]) rval = 0; switch (argc) { case 0: - if ((mntsize = getmntinfo(&mntbuf, MNT_WAIT)) == 0) + if ((mntsize = getmntinfo(&mntbuf, MNT_NOWAIT)) == 0) err(1, "getmntinfo"); if (all) { while ((fs = getfsent()) != NULL) { @@ -666,7 +666,7 @@ getmntpt(const char *name) struct statfs *mntbuf; int i, mntsize; - mntsize = getmntinfo(&mntbuf, MNT_WAIT); + mntsize = getmntinfo(&mntbuf, MNT_NOWAIT); for (i = mntsize - 1; i >= 0; i--) { if (strcmp(mntbuf[i].f_mntfromname, name) == 0 || strcmp(mntbuf[i].f_mntonname, name) == 0) Modified: projects/hid/sys/cam/ata/ata_da.c ============================================================================== --- projects/hid/sys/cam/ata/ata_da.c Sat Jul 30 13:25:11 2011 (r224512) +++ projects/hid/sys/cam/ata/ata_da.c Sat Jul 30 13:28:11 2011 (r224513) @@ -69,6 +69,7 @@ __FBSDID("$FreeBSD$"); #define ATA_MAX_28BIT_LBA 268435455UL typedef enum { + ADA_STATE_RAHEAD, ADA_STATE_WCACHE, ADA_STATE_NORMAL } ada_state; @@ -94,7 +95,8 @@ typedef enum { } ada_quirks; typedef enum { - ADA_CCB_WCACHE = 0x01, + ADA_CCB_RAHEAD = 0x01, + ADA_CCB_WCACHE = 0x02, ADA_CCB_BUFFER_IO = 0x03, ADA_CCB_WAITING = 0x04, ADA_CCB_DUMP = 0x05, @@ -132,6 +134,7 @@ struct ada_softc { int outstanding_cmds; int trim_max_ranges; int trim_running; + int read_ahead; int write_cache; #ifdef ADA_TEST_FAILURE int force_read_error; @@ -294,10 +297,19 @@ static void adaresume(void *arg); #define ADA_DEFAULT_SPINDOWN_SUSPEND 1 #endif +#ifndef ADA_DEFAULT_READ_AHEAD +#define ADA_DEFAULT_READ_AHEAD 1 +#endif + #ifndef ADA_DEFAULT_WRITE_CACHE #define ADA_DEFAULT_WRITE_CACHE 1 #endif +#define ADA_RA (softc->read_ahead >= 0 ? \ + softc->read_ahead : ada_read_ahead) +#define ADA_WC (softc->write_cache >= 0 ? \ + softc->write_cache : ada_write_cache) + /* * Most platforms map firmware geometry to actual, but some don't. If * not overridden, default to nothing. @@ -312,6 +324,7 @@ static int ada_default_timeout = ADA_DEF static int ada_send_ordered = ADA_DEFAULT_SEND_ORDERED; static int ada_spindown_shutdown = ADA_DEFAULT_SPINDOWN_SHUTDOWN; static int ada_spindown_suspend = ADA_DEFAULT_SPINDOWN_SUSPEND; +static int ada_read_ahead = ADA_DEFAULT_READ_AHEAD; static int ada_write_cache = ADA_DEFAULT_WRITE_CACHE; SYSCTL_NODE(_kern_cam, OID_AUTO, ada, CTLFLAG_RD, 0, @@ -334,6 +347,9 @@ TUNABLE_INT("kern.cam.ada.spindown_shutd SYSCTL_INT(_kern_cam_ada, OID_AUTO, spindown_suspend, CTLFLAG_RW, &ada_spindown_suspend, 0, "Spin down upon suspend"); TUNABLE_INT("kern.cam.ada.spindown_suspend", &ada_spindown_suspend); +SYSCTL_INT(_kern_cam_ada, OID_AUTO, read_ahead, CTLFLAG_RW, + &ada_read_ahead, 0, "Enable disk read-ahead"); +TUNABLE_INT("kern.cam.ada.read_ahead", &ada_read_ahead); SYSCTL_INT(_kern_cam_ada, OID_AUTO, write_cache, CTLFLAG_RW, &ada_write_cache, 0, "Enable disk write cache"); TUNABLE_INT("kern.cam.ada.write_cache", &ada_write_cache); @@ -737,16 +753,19 @@ adaasync(void *callback_arg, u_int32_t c softc = (struct ada_softc *)periph->softc; cam_periph_async(periph, code, path, arg); - if (ada_write_cache < 0 && softc->write_cache < 0) - break; if (softc->state != ADA_STATE_NORMAL) break; xpt_setup_ccb(&cgd.ccb_h, periph->path, CAM_PRIORITY_NORMAL); cgd.ccb_h.func_code = XPT_GDEV_TYPE; xpt_action((union ccb *)&cgd); - if ((cgd.ident_data.support.command1 & ATA_SUPPORT_WRITECACHE) == 0) - break; - softc->state = ADA_STATE_WCACHE; + if (ADA_RA >= 0 && + cgd.ident_data.support.command1 & ATA_SUPPORT_LOOKAHEAD) + softc->state = ADA_STATE_RAHEAD; + else if (ADA_WC >= 0 && + cgd.ident_data.support.command1 & ATA_SUPPORT_WRITECACHE) + softc->state = ADA_STATE_WCACHE; + else + break; cam_periph_acquire(periph); cam_freeze_devq_arg(periph->path, RELSIM_RELEASE_RUNLEVEL, CAM_RL_DEV + 1); @@ -789,6 +808,9 @@ adasysctlinit(void *context, int pending } SYSCTL_ADD_INT(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), + OID_AUTO, "read_ahead", CTLFLAG_RW | CTLFLAG_MPSAFE, + &softc->read_ahead, 0, "Enable disk read ahead."); + SYSCTL_ADD_INT(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree), OID_AUTO, "write_cache", CTLFLAG_RW | CTLFLAG_MPSAFE, &softc->write_cache, 0, "Enable disk write cache."); #ifdef ADA_TEST_FAILURE @@ -922,6 +944,10 @@ adaregister(struct cam_periph *periph, v quirks = softc->quirks; TUNABLE_INT_FETCH(announce_buf, &quirks); softc->quirks = quirks; + softc->read_ahead = -1; + snprintf(announce_buf, sizeof(announce_buf), + "kern.cam.ada.%d.read_ahead", periph->unit_number); + TUNABLE_INT_FETCH(announce_buf, &softc->read_ahead); softc->write_cache = -1; snprintf(announce_buf, sizeof(announce_buf), "kern.cam.ada.%d.write_cache", periph->unit_number); @@ -1044,7 +1070,14 @@ adaregister(struct cam_periph *periph, v (ADA_DEFAULT_TIMEOUT * hz) / ADA_ORDEREDTAG_INTERVAL, adasendorderedtag, softc); - if ((ada_write_cache >= 0 || softc->write_cache >= 0) && + if (ADA_RA >= 0 && + cgd->ident_data.support.command1 & ATA_SUPPORT_LOOKAHEAD) { + softc->state = ADA_STATE_RAHEAD; + cam_periph_acquire(periph); + cam_freeze_devq_arg(periph->path, + RELSIM_RELEASE_RUNLEVEL, CAM_RL_DEV + 1); + xpt_schedule(periph, CAM_PRIORITY_DEV); + } else if (ADA_WC >= 0 && cgd->ident_data.support.command1 & ATA_SUPPORT_WRITECACHE) { softc->state = ADA_STATE_WCACHE; cam_periph_acquire(periph); @@ -1317,8 +1350,19 @@ out: adaschedule(periph); break; } + case ADA_STATE_RAHEAD: case ADA_STATE_WCACHE: { + if (softc->flags & ADA_FLAG_PACK_INVALID) { + softc->state = ADA_STATE_NORMAL; + xpt_release_ccb(start_ccb); + cam_release_devq(periph->path, + RELSIM_RELEASE_RUNLEVEL, 0, CAM_RL_DEV + 1, FALSE); + adaschedule(periph); + cam_periph_release_locked(periph); + return; + } + cam_fill_ataio(ataio, 1, adadone, @@ -1328,10 +1372,15 @@ out: 0, ada_default_timeout*1000); - ata_28bit_cmd(ataio, ATA_SETFEATURES, (softc->write_cache > 0 || - (softc->write_cache < 0 && ada_write_cache)) ? - ATA_SF_ENAB_WCACHE : ATA_SF_DIS_WCACHE, 0, 0); - start_ccb->ccb_h.ccb_state = ADA_CCB_WCACHE; + if (softc->state == ADA_STATE_RAHEAD) { + ata_28bit_cmd(ataio, ATA_SETFEATURES, ADA_RA ? + ATA_SF_ENAB_RCACHE : ATA_SF_DIS_RCACHE, 0, 0); + start_ccb->ccb_h.ccb_state = ADA_CCB_RAHEAD; + } else { + ata_28bit_cmd(ataio, ATA_SETFEATURES, ADA_WC ? + ATA_SF_ENAB_WCACHE : ATA_SF_DIS_WCACHE, 0, 0); + start_ccb->ccb_h.ccb_state = ADA_CCB_WCACHE; + } xpt_action(start_ccb); break; } @@ -1343,6 +1392,7 @@ adadone(struct cam_periph *periph, union { struct ada_softc *softc; struct ccb_ataio *ataio; + struct ccb_getdev *cgd; softc = (struct ada_softc *)periph->softc; ataio = &done_ccb->ataio; @@ -1423,6 +1473,47 @@ adadone(struct cam_periph *periph, union biodone(bp); break; } + case ADA_CCB_RAHEAD: + { + if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { + if (adaerror(done_ccb, 0, 0) == ERESTART) { + return; + } else if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) != 0) { + cam_release_devq(done_ccb->ccb_h.path, + /*relsim_flags*/0, + /*reduction*/0, + /*timeout*/0, + /*getcount_only*/0); + } + } + + /* + * Since our peripheral may be invalidated by an error + * above or an external event, we must release our CCB + * before releasing the reference on the peripheral. + * The peripheral will only go away once the last reference + * is removed, and we need it around for the CCB release + * operation. + */ + cgd = (struct ccb_getdev *)done_ccb; + xpt_setup_ccb(&cgd->ccb_h, periph->path, CAM_PRIORITY_NORMAL); + cgd->ccb_h.func_code = XPT_GDEV_TYPE; + xpt_action((union ccb *)cgd); + if (ADA_WC >= 0 && + cgd->ident_data.support.command1 & ATA_SUPPORT_WRITECACHE) { + softc->state = ADA_STATE_WCACHE; + xpt_release_ccb(done_ccb); + xpt_schedule(periph, CAM_PRIORITY_DEV); + return; + } + softc->state = ADA_STATE_NORMAL; + xpt_release_ccb(done_ccb); + cam_release_devq(periph->path, + RELSIM_RELEASE_RUNLEVEL, 0, CAM_RL_DEV + 1, FALSE); + adaschedule(periph); + cam_periph_release_locked(periph); + return; + } case ADA_CCB_WCACHE: { if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { Modified: projects/hid/sys/cam/cam_periph.c ============================================================================== --- projects/hid/sys/cam/cam_periph.c Sat Jul 30 13:25:11 2011 (r224512) +++ projects/hid/sys/cam/cam_periph.c Sat Jul 30 13:28:11 2011 (r224513) @@ -1550,7 +1550,8 @@ camperiphscsisenseerror(union ccb *ccb, * make sure we actually have retries available. */ if ((err_action & SSQ_DECREMENT_COUNT) != 0) { - if (ccb->ccb_h.retry_count > 0) + if (ccb->ccb_h.retry_count > 0 && + (periph->flags & CAM_PERIPH_INVALID) == 0) ccb->ccb_h.retry_count--; else { *action_string = "Retries exhausted"; @@ -1718,6 +1719,7 @@ int cam_periph_error(union ccb *ccb, cam_flags camflags, u_int32_t sense_flags, union ccb *save_ccb) { + struct cam_periph *periph; const char *action_string; cam_status status; int frozen; @@ -1725,7 +1727,8 @@ cam_periph_error(union ccb *ccb, cam_fla int openings; u_int32_t relsim_flags; u_int32_t timeout = 0; - + + periph = xpt_path_periph(ccb->ccb_h.path); action_string = NULL; status = ccb->ccb_h.status; frozen = (status & CAM_DEV_QFRZN) != 0; @@ -1787,9 +1790,9 @@ cam_periph_error(union ccb *ccb, cam_fla xpt_print(ccb->ccb_h.path, "Data overrun\n"); printed++; } - error = EIO; /* we have to kill the command */ /* decrement the number of retries */ - if (ccb->ccb_h.retry_count > 0) { + if (ccb->ccb_h.retry_count > 0 && + (periph->flags & CAM_PERIPH_INVALID) == 0) { ccb->ccb_h.retry_count--; error = ERESTART; } else { @@ -1808,7 +1811,8 @@ cam_periph_error(union ccb *ccb, cam_fla struct cam_path *newpath; if ((camflags & CAM_RETRY_SELTO) != 0) { - if (ccb->ccb_h.retry_count > 0) { + if (ccb->ccb_h.retry_count > 0 && + (periph->flags & CAM_PERIPH_INVALID) == 0) { ccb->ccb_h.retry_count--; error = ERESTART; @@ -1826,10 +1830,11 @@ cam_periph_error(union ccb *ccb, cam_fla timeout = periph_selto_delay; break; } + action_string = "Retries exhausted"; } error = ENXIO; /* Should we do more if we can't create the path?? */ - if (xpt_create_path(&newpath, xpt_path_periph(ccb->ccb_h.path), + if (xpt_create_path(&newpath, periph, xpt_path_path_id(ccb->ccb_h.path), xpt_path_target_id(ccb->ccb_h.path), CAM_LUN_WILDCARD) != CAM_REQ_CMP) @@ -1874,11 +1879,16 @@ cam_periph_error(union ccb *ccb, cam_fla /* FALLTHROUGH */ case CAM_REQUEUE_REQ: /* Unconditional requeue */ - error = ERESTART; if (bootverbose && printed == 0) { xpt_print(ccb->ccb_h.path, "Request requeued\n"); printed++; } + if ((periph->flags & CAM_PERIPH_INVALID) == 0) + error = ERESTART; + else { + action_string = "Retries exhausted"; + error = EIO; + } break; case CAM_RESRC_UNAVAIL: /* Wait a bit for the resource shortage to abate. */ @@ -1893,7 +1903,8 @@ cam_periph_error(union ccb *ccb, cam_fla /* FALLTHROUGH */ default: /* decrement the number of retries */ - if (ccb->ccb_h.retry_count > 0) { + if (ccb->ccb_h.retry_count > 0 && + (periph->flags & CAM_PERIPH_INVALID) == 0) { ccb->ccb_h.retry_count--; error = ERESTART; if (bootverbose && printed == 0) { Modified: projects/hid/sys/dev/ahci/ahci.c ============================================================================== --- projects/hid/sys/dev/ahci/ahci.c Sat Jul 30 13:25:11 2011 (r224512) +++ projects/hid/sys/dev/ahci/ahci.c Sat Jul 30 13:28:11 2011 (r224513) @@ -1879,12 +1879,13 @@ ahci_execute_transaction(struct ahci_slo device_printf(dev, "Poll timeout on slot %d port %d\n", slot->slot, port); device_printf(dev, "is %08x cs %08x ss %08x " - "rs %08x tfd %02x serr %08x\n", + "rs %08x tfd %02x serr %08x cmd %08x\n", ATA_INL(ch->r_mem, AHCI_P_IS), ATA_INL(ch->r_mem, AHCI_P_CI), ATA_INL(ch->r_mem, AHCI_P_SACT), ch->rslots, ATA_INL(ch->r_mem, AHCI_P_TFD), - ATA_INL(ch->r_mem, AHCI_P_SERR)); + ATA_INL(ch->r_mem, AHCI_P_SERR), + ATA_INL(ch->r_mem, AHCI_P_CMD)); et = AHCI_ERR_TIMEOUT; } @@ -1960,8 +1961,12 @@ ahci_timeout(struct ahci_slot *slot) ccs = (ATA_INL(ch->r_mem, AHCI_P_CMD) & AHCI_P_CMD_CCS_MASK) >> AHCI_P_CMD_CCS_SHIFT; if ((sstatus & (1 << slot->slot)) != 0 || ccs == slot->slot || - ch->fbs_enabled) + ch->fbs_enabled || ch->wrongccs) slot->state = AHCI_SLOT_EXECUTING; + else if ((ch->rslots & (1 << ccs)) == 0) { + ch->wrongccs = 1; + slot->state = AHCI_SLOT_EXECUTING; + } callout_reset(&slot->timeout, (int)slot->ccb->ccb_h.timeout * hz / 2000, @@ -1971,10 +1976,12 @@ ahci_timeout(struct ahci_slot *slot) device_printf(dev, "Timeout on slot %d port %d\n", slot->slot, slot->ccb->ccb_h.target_id & 0x0f); - device_printf(dev, "is %08x cs %08x ss %08x rs %08x tfd %02x serr %08x\n", + device_printf(dev, "is %08x cs %08x ss %08x rs %08x tfd %02x " + "serr %08x cmd %08x\n", ATA_INL(ch->r_mem, AHCI_P_IS), ATA_INL(ch->r_mem, AHCI_P_CI), ATA_INL(ch->r_mem, AHCI_P_SACT), ch->rslots, - ATA_INL(ch->r_mem, AHCI_P_TFD), ATA_INL(ch->r_mem, AHCI_P_SERR)); + ATA_INL(ch->r_mem, AHCI_P_TFD), ATA_INL(ch->r_mem, AHCI_P_SERR), + ATA_INL(ch->r_mem, AHCI_P_CMD)); /* Handle frozen command. */ if (ch->frozen) { @@ -1987,7 +1994,7 @@ ahci_timeout(struct ahci_slot *slot) } xpt_done(fccb); } - if (!ch->fbs_enabled) { + if (!ch->fbs_enabled && !ch->wrongccs) { /* Without FBS we know real timeout source. */ ch->fatalerr = 1; /* Handle command with timeout. */ @@ -2585,6 +2592,7 @@ ahci_reset(device_t dev) xpt_release_simq(ch->sim, TRUE); ch->eslots = 0; ch->toslots = 0; + ch->wrongccs = 0; ch->fatalerr = 0; /* Tell the XPT about the event */ xpt_async(AC_BUS_RESET, ch->path, NULL); Modified: projects/hid/sys/dev/ahci/ahci.h ============================================================================== --- projects/hid/sys/dev/ahci/ahci.h Sat Jul 30 13:25:11 2011 (r224512) +++ projects/hid/sys/dev/ahci/ahci.h Sat Jul 30 13:28:11 2011 (r224513) @@ -426,6 +426,7 @@ struct ahci_channel { int resetting; /* Hard-reset in progress. */ int resetpolldiv; /* Hard-reset poll divider. */ int listening; /* SUD bit is cleared. */ + int wrongccs; /* CCS field in CMD was wrong */ union ccb *frozen; /* Frozen command */ struct callout pm_timer; /* Power management events */ struct callout reset_timer; /* Hard-reset timeout */ Modified: projects/hid/sys/dev/ath/ath_hal/ar5416/ar5416.h ============================================================================== --- projects/hid/sys/dev/ath/ath_hal/ar5416/ar5416.h Sat Jul 30 13:25:11 2011 (r224512) +++ projects/hid/sys/dev/ath/ath_hal/ar5416/ar5416.h Sat Jul 30 13:28:11 2011 (r224513) @@ -218,6 +218,8 @@ extern HAL_BOOL ar5416ResetKeyCacheEntry extern HAL_BOOL ar5416SetKeyCacheEntry(struct ath_hal *ah, uint16_t entry, const HAL_KEYVAL *k, const uint8_t *mac, int xorKey); +extern uint32_t ar5416GetRxFilter(struct ath_hal *ah); +extern void ar5416SetRxFilter(struct ath_hal *ah, uint32_t bits); extern void ar5416StartPcuReceive(struct ath_hal *ah); extern void ar5416StopPcuReceive(struct ath_hal *ah); extern HAL_BOOL ar5416SetupRxDesc(struct ath_hal *, Modified: projects/hid/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c ============================================================================== --- projects/hid/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c Sat Jul 30 13:25:11 2011 (r224512) +++ projects/hid/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c Sat Jul 30 13:28:11 2011 (r224513) @@ -117,6 +117,8 @@ ar5416InitState(struct ath_hal_5416 *ahp ah->ah_resetTxQueue = ar5416ResetTxQueue; /* Receive Functions */ + ah->ah_getRxFilter = ar5416GetRxFilter; + ah->ah_setRxFilter = ar5416SetRxFilter; ah->ah_startPcuReceive = ar5416StartPcuReceive; ah->ah_stopPcuReceive = ar5416StopPcuReceive; ah->ah_setupRxDesc = ar5416SetupRxDesc; Modified: projects/hid/sys/dev/ath/ath_hal/ar5416/ar5416_cal.c ============================================================================== --- projects/hid/sys/dev/ath/ath_hal/ar5416/ar5416_cal.c Sat Jul 30 13:25:11 2011 (r224512) +++ projects/hid/sys/dev/ath/ath_hal/ar5416/ar5416_cal.c Sat Jul 30 13:28:11 2011 (r224513) @@ -73,8 +73,15 @@ ar5416IsCalSupp(struct ath_hal *ah, cons case ADC_GAIN_CAL: case ADC_DC_CAL: /* Run ADC Gain Cal for either 5ghz any or 2ghz HT40 */ - if (IEEE80211_IS_CHAN_5GHZ(chan)) - return AH_TRUE; + /* + * Merlin (AR9280) doesn't ever complete ADC calibrations + * in 5ghz non-HT40 mode (ie, HT20, 11a). For now, disable + * it for Merlin only until further information is + * available. + */ + if (! AR_SREV_MERLIN(ah)) + if (IEEE80211_IS_CHAN_5GHZ(chan)) + return AH_TRUE; if (IEEE80211_IS_CHAN_HT40(chan)) return AH_TRUE; return AH_FALSE; @@ -186,36 +193,22 @@ ar5416RunInitCals(struct ath_hal *ah, in } #endif + +/* + * AGC calibration for the AR5416, AR9130, AR9160, AR9280. + */ HAL_BOOL ar5416InitCalHardware(struct ath_hal *ah, const struct ieee80211_channel *chan) { - if (AR_SREV_MERLIN_10_OR_LATER(ah)) { - /* Enable Rx Filter Cal */ - OS_REG_CLR_BIT(ah, AR_PHY_ADC_CTL, AR_PHY_ADC_CTL_OFF_PWDADC); - OS_REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, - AR_PHY_AGC_CONTROL_FLTR_CAL); - - /* Clear the carrier leak cal bit */ - OS_REG_CLR_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_CL_CAL_ENABLE); - - /* kick off the cal */ - OS_REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL); - /* Poll for offset calibration complete */ - if (!ath_hal_wait(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_CAL, 0)) { - HALDEBUG(ah, HAL_DEBUG_ANY, - "%s: offset calibration failed to complete in 1ms; " - "noisy environment?\n", __func__); - return AH_FALSE; - } + if (AR_SREV_MERLIN_10_OR_LATER(ah)) { + /* Disable ADC */ + OS_REG_CLR_BIT(ah, AR_PHY_ADC_CTL, + AR_PHY_ADC_CTL_OFF_PWDADC); - /* Set the cl cal bit and rerun the cal a 2nd time */ /* Enable Rx Filter Cal */ - OS_REG_CLR_BIT(ah, AR_PHY_ADC_CTL, AR_PHY_ADC_CTL_OFF_PWDADC); OS_REG_SET_BIT(ah, AR_PHY_AGC_CONTROL, AR_PHY_AGC_CONTROL_FLTR_CAL); - - OS_REG_SET_BIT(ah, AR_PHY_CL_CAL_CTL, AR_PHY_CL_CAL_ENABLE); } /* Calibrate the AGC */ @@ -229,6 +222,16 @@ ar5416InitCalHardware(struct ath_hal *ah return AH_FALSE; } + if (AR_SREV_MERLIN_10_OR_LATER(ah)) { + /* Enable ADC */ + OS_REG_SET_BIT(ah, AR_PHY_ADC_CTL, + AR_PHY_ADC_CTL_OFF_PWDADC); + + /* Disable Rx Filter Cal */ + OS_REG_CLR_BIT(ah, AR_PHY_AGC_CONTROL, + AR_PHY_AGC_CONTROL_FLTR_CAL); + } + return AH_TRUE; } @@ -247,7 +250,8 @@ ar5416InitCal(struct ath_hal *ah, const /* Do initial chipset-specific calibration */ if (! AH5416(ah)->ah_cal_initcal(ah, chan)) { - HALDEBUG(ah, HAL_DEBUG_ANY, "%s: initial chipset calibration did " + HALDEBUG(ah, HAL_DEBUG_ANY, + "%s: initial chipset calibration did " "not complete in time; noisy environment?\n", __func__); return AH_FALSE; } Modified: projects/hid/sys/dev/ath/ath_hal/ar5416/ar5416_recv.c ============================================================================== --- projects/hid/sys/dev/ath/ath_hal/ar5416/ar5416_recv.c Sat Jul 30 13:25:11 2011 (r224512) +++ projects/hid/sys/dev/ath/ath_hal/ar5416/ar5416_recv.c Sat Jul 30 13:28:11 2011 (r224513) @@ -27,6 +27,46 @@ #include "ar5416/ar5416desc.h" /* + * Get the receive filter. + */ +uint32_t +ar5416GetRxFilter(struct ath_hal *ah) +{ + uint32_t bits = OS_REG_READ(ah, AR_RX_FILTER); + uint32_t phybits = OS_REG_READ(ah, AR_PHY_ERR); + + if (phybits & AR_PHY_ERR_RADAR) + bits |= HAL_RX_FILTER_PHYRADAR; + if (phybits & (AR_PHY_ERR_OFDM_TIMING | AR_PHY_ERR_CCK_TIMING)) + bits |= HAL_RX_FILTER_PHYERR; + return bits; +} + +/* + * Set the receive filter. + */ +void +ar5416SetRxFilter(struct ath_hal *ah, u_int32_t bits) +{ + uint32_t phybits; + + OS_REG_WRITE(ah, AR_RX_FILTER, (bits & 0xffff)); + phybits = 0; + if (bits & HAL_RX_FILTER_PHYRADAR) + phybits |= AR_PHY_ERR_RADAR; + if (bits & HAL_RX_FILTER_PHYERR) + phybits |= AR_PHY_ERR_OFDM_TIMING | AR_PHY_ERR_CCK_TIMING; + OS_REG_WRITE(ah, AR_PHY_ERR, phybits); + if (phybits) { + OS_REG_WRITE(ah, AR_RXCFG, + OS_REG_READ(ah, AR_RXCFG) | AR_RXCFG_ZLFDMA); + } else { + OS_REG_WRITE(ah, AR_RXCFG, + OS_REG_READ(ah, AR_RXCFG) &~ AR_RXCFG_ZLFDMA); + } +} + +/* * Start receive at the PCU engine */ void Modified: projects/hid/sys/dev/ath/if_ath_sysctl.c ============================================================================== --- projects/hid/sys/dev/ath/if_ath_sysctl.c Sat Jul 30 13:25:11 2011 (r224512) +++ projects/hid/sys/dev/ath/if_ath_sysctl.c Sat Jul 30 13:28:11 2011 (r224513) @@ -354,7 +354,21 @@ ath_sysctl_intmit(SYSCTL_HANDLER_ARGS) error = sysctl_handle_int(oidp, &intmit, 0, req); if (error || !req->newptr) return error; - return !ath_hal_setintmit(sc->sc_ah, intmit) ? EINVAL : 0; + + /* reusing error; 1 here means "good"; 0 means "fail" */ + error = ath_hal_setintmit(sc->sc_ah, intmit); + if (! error) + return EINVAL; + + /* + * Reset the hardware here - disabling ANI in the HAL + * doesn't reset ANI related registers, so it'll leave + * things in an inconsistent state. + */ + if (sc->sc_ifp->if_drv_flags & IFF_DRV_RUNNING) + ath_reset(sc->sc_ifp); + + return 0; } #ifdef IEEE80211_SUPPORT_TDMA Modified: projects/hid/sys/dev/mpt/mpt.c ============================================================================== --- projects/hid/sys/dev/mpt/mpt.c Sat Jul 30 13:25:11 2011 (r224512) +++ projects/hid/sys/dev/mpt/mpt.c Sat Jul 30 13:28:11 2011 (r224513) @@ -301,66 +301,75 @@ mpt_modevent(module_t mod, int type, voi return (error); } -int +static int mpt_stdload(struct mpt_personality *pers) { + /* Load is always successful. */ return (0); } -int +static int mpt_stdprobe(struct mpt_softc *mpt) { + /* Probe is always successful. */ return (0); } -int +static int mpt_stdattach(struct mpt_softc *mpt) { + /* Attach is always successful. */ return (0); } -int +static int mpt_stdenable(struct mpt_softc *mpt) { + /* Enable is always successful. */ return (0); } -void +static void mpt_stdready(struct mpt_softc *mpt) { -} +} -int +static int mpt_stdevent(struct mpt_softc *mpt, request_t *req, MSG_EVENT_NOTIFY_REPLY *msg) { + mpt_lprt(mpt, MPT_PRT_DEBUG, "mpt_stdevent: 0x%x\n", msg->Event & 0xFF); /* Event was not for us. */ return (0); } -void +static void mpt_stdreset(struct mpt_softc *mpt, int type) { + } -void +static void mpt_stdshutdown(struct mpt_softc *mpt) { + } -void +static void mpt_stddetach(struct mpt_softc *mpt) { + } -int +static int mpt_stdunload(struct mpt_personality *pers) { + /* Unload is always successful. */ return (0); } @@ -383,7 +392,6 @@ mpt_postattach(void *unused) } SYSINIT(mptdev, SI_SUB_CONFIGURE, SI_ORDER_MIDDLE, mpt_postattach, NULL); - /******************************* Bus DMA Support ******************************/ void mpt_map_rquest(void *arg, bus_dma_segment_t *segs, int nseg, int error) @@ -478,6 +486,7 @@ static int mpt_default_reply_handler(struct mpt_softc *mpt, request_t *req, uint32_t reply_desc, MSG_DEFAULT_REPLY *reply_frame) { + mpt_prt(mpt, "Default Handler Called: req=%p:%u reply_descriptor=%x frame=%p\n", req, req->serno, reply_desc, reply_frame); @@ -494,8 +503,8 @@ static int mpt_config_reply_handler(struct mpt_softc *mpt, request_t *req, uint32_t reply_desc, MSG_DEFAULT_REPLY *reply_frame) { - if (req != NULL) { + if (req != NULL) { if (reply_frame != NULL) { MSG_CONFIG *cfgp; MSG_CONFIG_REPLY *reply; @@ -528,6 +537,7 @@ static int mpt_handshake_reply_handler(struct mpt_softc *mpt, request_t *req, uint32_t reply_desc, MSG_DEFAULT_REPLY *reply_frame) { + /* Nothing to be done. */ return (TRUE); } @@ -650,6 +660,7 @@ static int mpt_core_event(struct mpt_softc *mpt, request_t *req, MSG_EVENT_NOTIFY_REPLY *msg) { + mpt_lprt(mpt, MPT_PRT_DEBUG, "mpt_core_event: 0x%x\n", msg->Event & 0xFF); switch(msg->Event & 0xFF) { @@ -870,6 +881,7 @@ mpt_complete_request_chain(struct mpt_so void mpt_dump_reply_frame(struct mpt_softc *mpt, MSG_DEFAULT_REPLY *reply_frame) { + mpt_prt(mpt, "Address Reply:\n"); mpt_print_reply(reply_frame); } @@ -881,12 +893,14 @@ static __inline uint32_t mpt_rd_intr(st static __inline uint32_t mpt_rd_db(struct mpt_softc *mpt) { + return mpt_read(mpt, MPT_OFFSET_DOORBELL); } static __inline uint32_t mpt_rd_intr(struct mpt_softc *mpt) { + return mpt_read(mpt, MPT_OFFSET_INTR_STATUS); } @@ -895,6 +909,7 @@ static int mpt_wait_db_ack(struct mpt_softc *mpt) { int i; + for (i=0; i < MPT_MAX_WAIT; i++) { if (!MPT_DB_IS_BUSY(mpt_rd_intr(mpt))) { maxwait_ack = i > maxwait_ack ? i : maxwait_ack; @@ -910,6 +925,7 @@ static int mpt_wait_db_int(struct mpt_softc *mpt) { int i; + for (i = 0; i < MPT_MAX_WAIT; i++) { if (MPT_DB_INTR(mpt_rd_intr(mpt))) { maxwait_int = i > maxwait_int ? i : maxwait_int; @@ -925,6 +941,7 @@ void mpt_check_doorbell(struct mpt_softc *mpt) { uint32_t db = mpt_rd_db(mpt); + if (MPT_STATE(db) != MPT_DB_STATE_RUNNING) { mpt_prt(mpt, "Device not running\n"); mpt_print_db(db); @@ -956,6 +973,7 @@ static int mpt_download_fw(struct mpt_so static int mpt_soft_reset(struct mpt_softc *mpt) { + mpt_lprt(mpt, MPT_PRT_DEBUG, "soft reset\n"); /* Have to use hard reset if we are not in Running state */ @@ -1019,6 +1037,7 @@ mpt_enable_diag_mode(struct mpt_softc *m static void mpt_disable_diag_mode(struct mpt_softc *mpt) { + mpt_write(mpt, MPT_OFFSET_SEQUENCE, 0xFFFFFFFF); } @@ -1094,6 +1113,7 @@ mpt_hard_reset(struct mpt_softc *mpt) static void mpt_core_ioc_reset(struct mpt_softc *mpt, int type) { + /* * Complete all pending requests with a status * appropriate for an IOC reset. @@ -1102,7 +1122,6 @@ mpt_core_ioc_reset(struct mpt_softc *mpt MPI_IOCSTATUS_INVALID_STATE); } - /* * Reset the IOC when needed. Try software command first then if needed * poke at the magic diagnostic reset. Note that a hard reset resets @@ -1263,6 +1282,7 @@ retry: void mpt_send_cmd(struct mpt_softc *mpt, request_t *req) { + if (mpt->verbose > MPT_PRT_DEBUG2) { mpt_dump_request(mpt, req); } @@ -2110,6 +2130,7 @@ mpt_send_event_request(struct mpt_softc void mpt_enable_ints(struct mpt_softc *mpt) { + /* Unmask every thing except door bell int */ mpt_write(mpt, MPT_OFFSET_INTR_MASK, MPT_INTR_DB_MASK); } @@ -2120,6 +2141,7 @@ mpt_enable_ints(struct mpt_softc *mpt) void mpt_disable_ints(struct mpt_softc *mpt) { + /* Mask all interrupts */ mpt_write(mpt, MPT_OFFSET_INTR_MASK, MPT_INTR_REPLY_MASK | MPT_INTR_DB_MASK); @@ -2219,7 +2241,7 @@ mpt_detach(struct mpt_softc *mpt) return (0); } -int +static int mpt_core_load(struct mpt_personality *pers) { int i; @@ -2245,7 +2267,7 @@ mpt_core_load(struct mpt_personality *pe * Initialize per-instance driver data and perform * initial controller configuration. */ -int +static int mpt_core_attach(struct mpt_softc *mpt) { int val, error; @@ -2276,9 +2298,10 @@ mpt_core_attach(struct mpt_softc *mpt) return (error); } -int +static int mpt_core_enable(struct mpt_softc *mpt) { + /* * We enter with the IOC enabled, but async events * not enabled, ports not enabled and interrupts @@ -2326,13 +2349,14 @@ mpt_core_enable(struct mpt_softc *mpt) return (0); } -void +static void mpt_core_shutdown(struct mpt_softc *mpt) { + mpt_disable_ints(mpt); } -void +static void mpt_core_detach(struct mpt_softc *mpt) { int val; @@ -2351,9 +2375,10 @@ mpt_core_detach(struct mpt_softc *mpt) mpt_dma_buf_free(mpt); } -int +static int mpt_core_unload(struct mpt_personality *pers) { + /* Unload is always successful. */ return (0); } @@ -2575,6 +2600,7 @@ static void mpt_dma_buf_free(struct mpt_softc *mpt) { int i; + if (mpt->request_dmat == 0) { mpt_lprt(mpt, MPT_PRT_DEBUG, "already released dma memory\n"); return; Modified: projects/hid/sys/dev/mpt/mpt.h ============================================================================== --- projects/hid/sys/dev/mpt/mpt.h Sat Jul 30 13:25:11 2011 (r224512) +++ projects/hid/sys/dev/mpt/mpt.h Sat Jul 30 13:28:11 2011 (r224513) @@ -1075,16 +1075,6 @@ mpt_complete_request_chain(struct mpt_so int mpt_reset(struct mpt_softc *, int /*reinit*/); /****************************** Debugging ************************************/ -typedef struct mpt_decode_entry { - char *name; - u_int value; - u_int mask; -} mpt_decode_entry_t; - -int mpt_decode_value(mpt_decode_entry_t *table, u_int num_entries, - const char *name, u_int value, u_int *cur_column, - u_int wrap_point); - void mpt_dump_data(struct mpt_softc *, const char *, void *, int); void mpt_dump_request(struct mpt_softc *, request_t *); @@ -1110,17 +1100,21 @@ do { \ mpt_prt(mpt, __VA_ARGS__); \ } while (0) +#if 0 #define mpt_lprtc(mpt, level, ...) \ do { \ if (level <= (mpt)->verbose) \ mpt_prtc(mpt, __VA_ARGS__); \ } while (0) +#endif #else void mpt_lprt(struct mpt_softc *, int, const char *, ...) __printflike(3, 4); +#if 0 void mpt_lprtc(struct mpt_softc *, int, const char *, ...) __printflike(3, 4); #endif +#endif void mpt_prt(struct mpt_softc *, const char *, ...) __printflike(2, 3); void mpt_prtc(struct mpt_softc *, const char *, ...) @@ -1277,7 +1271,6 @@ void mpt_check_doorbell(struct mpt_soft void mpt_dump_reply_frame(struct mpt_softc *mpt, MSG_DEFAULT_REPLY *reply_frame); -void mpt_set_config_regs(struct mpt_softc *); int mpt_issue_cfg_req(struct mpt_softc */*mpt*/, request_t */*req*/, cfgparms_t *params, bus_addr_t /*addr*/, bus_size_t/*len*/, @@ -1331,6 +1324,5 @@ char *mpt_ioc_diag(uint32_t diag); void mpt_req_state(mpt_req_state_t state); void mpt_print_config_request(void *vmsg); void mpt_print_request(void *vmsg); -void mpt_print_scsi_io_request(MSG_SCSI_IO_REQUEST *msg); void mpt_dump_sgl(SGE_IO_UNION *se, int offset); #endif /* _MPT_H_ */ Modified: projects/hid/sys/dev/mpt/mpt_cam.c ============================================================================== --- projects/hid/sys/dev/mpt/mpt_cam.c Sat Jul 30 13:25:11 2011 (r224512) +++ projects/hid/sys/dev/mpt/mpt_cam.c Sat Jul 30 13:28:11 2011 (r224513) @@ -193,7 +193,7 @@ MODULE_DEPEND(mpt_cam, cam, 1, 1, 1); int mpt_enable_sata_wc = -1; TUNABLE_INT("hw.mpt.enable_sata_wc", &mpt_enable_sata_wc); -int +static int mpt_cam_probe(struct mpt_softc *mpt) { int role; *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***