From owner-svn-soc-all@freebsd.org Sun Jun 5 19:41:39 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 65805B6BA0A for ; Sun, 5 Jun 2016 19:41:39 +0000 (UTC) (envelope-from iateaca@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4B9E7146F for ; Sun, 5 Jun 2016 19:41:39 +0000 (UTC) (envelope-from iateaca@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u55JfdGt055327 for ; Sun, 5 Jun 2016 19:41:39 GMT (envelope-from iateaca@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u55JfcS2055324 for svn-soc-all@FreeBSD.org; Sun, 5 Jun 2016 19:41:38 GMT (envelope-from iateaca@FreeBSD.org) Date: Sun, 5 Jun 2016 19:41:38 GMT Message-Id: <201606051941.u55JfcS2055324@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to iateaca@FreeBSD.org using -f From: iateaca@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r304715 - soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 05 Jun 2016 19:41:39 -0000 Author: iateaca Date: Sun Jun 5 19:41:38 2016 New Revision: 304715 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=304715 Log: design the hda codec data structure describe the hda codec parameters for each node (ROOT, FG and AUDIO OUTPUT) implement the GET_PARAMETER verb M bhyve/hda_codec.c Modified: soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c Modified: soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c ============================================================================== --- soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c Sun Jun 5 18:16:33 2016 (r304714) +++ soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c Sun Jun 5 19:41:38 2016 (r304715) @@ -4,9 +4,44 @@ /* * HDA Codec defines */ +#define INTEL_VENDORID 0x8086 + +#define HDA_CODEC_SUBSYSTEM_ID ((INTEL_VENDORID << 16) | 0x01) +#define HDA_CODEC_ROOT_NID 0x00 +#define HDA_CODEC_FG_NID 0x01 +#define HDA_CODEC_AUDIO_OUTPUT_NID 0x02 + +#define HDA_CODEC_PARAMS_COUNT 0x14 #define HDA_CODEC_RESPONSE_EX_UNSOL 0x10 #define HDA_CODEC_RESPONSE_EX_SOL 0x00 +#define HDA_CODEC_SUPP_STREAM_FORMATS_PCM (1 << HDA_PARAM_SUPP_STREAM_FORMATS_PCM_SHIFT) + +#define HDA_CODEC_AUDIO_WCAP_OUTPUT (0x00 << HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_SHIFT) +#define HDA_CODEC_AUDIO_WCAP_FORMAT_OVR (1 << HDA_PARAM_AUDIO_WIDGET_CAP_FORMAT_OVR_SHIFT) +#define HDA_CODEC_AUDIO_WCAP_AMP_OVR (1 << HDA_PARAM_AUDIO_WIDGET_CAP_AMP_OVR_SHIFT) +#define HDA_CODEC_AUDIO_WCAP_OUT_AMP (1 << HDA_PARAM_AUDIO_WIDGET_CAP_OUT_AMP_SHIFT) +#define HDA_CODEC_AUDIO_WCAP_STEREO (1 << HDA_PARAM_AUDIO_WIDGET_CAP_STEREO_SHIFT) + +#define HDA_CODEC_OUTPUT_AMP_CAP_MUTE_CAP (1 << HDA_PARAM_OUTPUT_AMP_CAP_MUTE_CAP_SHIFT) +#define HDA_CODEC_OUTPUT_AMP_CAP_STEPSIZE (0x03 << HDA_PARAM_OUTPUT_AMP_CAP_STEPSIZE_SHIFT) +#define HDA_CODEC_OUTPUT_AMP_CAP_NUMSTEPS (0x1f << HDA_PARAM_OUTPUT_AMP_CAP_NUMSTEPS_SHIFT) +#define HDA_CODEC_OUTPUT_AMP_CAP_OFFSET (0x00 << HDA_PARAM_OUTPUT_AMP_CAP_OFFSET_SHIFT) + + +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) + +/* + * HDA Codec data structures + */ + + +struct hda_codec_softc { + uint32_t subsystem_id; + uint32_t no_nodes; + const uint32_t (*get_parameters)[HDA_CODEC_PARAMS_COUNT]; +}; + /* * HDA Codec module function declarations */ @@ -18,14 +53,63 @@ hda_codec_command(struct hda_codec_inst *hci, uint32_t cmd_data); /* + * HDA Codec global data + */ + +static const uint32_t hda_codec_parameters[][HDA_CODEC_PARAMS_COUNT] = { + [HDA_CODEC_ROOT_NID] = { + [HDA_PARAM_VENDOR_ID] = INTEL_VENDORID, + [HDA_PARAM_REVISION_ID] = 0xffff, + [HDA_PARAM_SUB_NODE_COUNT] = 0x00010001, /* 1 Subnode, StartNid = 1 */ + }, + [HDA_CODEC_FG_NID] = { + [HDA_PARAM_SUB_NODE_COUNT] = 0x00020001, /* 1 Subnode, StartNid = 2 */ + [HDA_PARAM_FCT_GRP_TYPE] = HDA_PARAM_FCT_GRP_TYPE_NODE_TYPE_AUDIO, + [HDA_PARAM_SUPP_PCM_SIZE_RATE] = (0x1f << 16) | 0x7ff, /* B8 - B32, 8.0 - 192.0kHz */ + [HDA_PARAM_SUPP_STREAM_FORMATS] = HDA_CODEC_SUPP_STREAM_FORMATS_PCM, + [HDA_PARAM_INPUT_AMP_CAP] = 0x00, /* None */ + [HDA_PARAM_OUTPUT_AMP_CAP] = 0x00, /* None */ + [HDA_PARAM_GPIO_COUNT] = 0x00, + }, + [HDA_CODEC_AUDIO_OUTPUT_NID] = { + [HDA_PARAM_AUDIO_WIDGET_CAP] = HDA_CODEC_AUDIO_WCAP_OUTPUT | + HDA_CODEC_AUDIO_WCAP_FORMAT_OVR | + HDA_CODEC_AUDIO_WCAP_AMP_OVR | + HDA_CODEC_AUDIO_WCAP_OUT_AMP | + HDA_CODEC_AUDIO_WCAP_STEREO, + [HDA_PARAM_SUPP_PCM_SIZE_RATE] = (0x1f << 16) | 0x7ff, /* B8 - B32, 8.0 - 192.0kHz */ + [HDA_PARAM_SUPP_STREAM_FORMATS] = HDA_CODEC_SUPP_STREAM_FORMATS_PCM, + [HDA_PARAM_INPUT_AMP_CAP] = 0x00, /* None */ + [HDA_PARAM_CONN_LIST_LENGTH] = 0x00, + [HDA_PARAM_OUTPUT_AMP_CAP] = HDA_CODEC_OUTPUT_AMP_CAP_MUTE_CAP | + HDA_CODEC_OUTPUT_AMP_CAP_STEPSIZE | + HDA_CODEC_OUTPUT_AMP_CAP_NUMSTEPS | + HDA_CODEC_OUTPUT_AMP_CAP_OFFSET, + }, +}; + +/* * HDA Codec module function definitions */ static int hda_codec_init(struct hda_codec_inst *hci, const char *opts) { + struct hda_codec_softc *sc = NULL; + DPRINTF("cad: 0x%x opts: %s\n", hci->cad, opts); + sc = calloc(1, sizeof(*sc)); + if (!sc) + return -1; + + sc->subsystem_id = HDA_CODEC_SUBSYSTEM_ID; + sc->no_nodes = ARRAY_SIZE(hda_codec_parameters); + sc->get_parameters = hda_codec_parameters; + DPRINTF("HDA Codec nodes: %d\n", sc->no_nodes); + + hci->priv = sc; + return 0; } @@ -52,9 +136,11 @@ static int hda_codec_command(struct hda_codec_inst *hci, uint32_t cmd_data) { + struct hda_codec_softc *sc = NULL; struct hda_ops *hops = NULL; uint8_t cad = 0, nid = 0; uint16_t verb = 0, payload = 0; + uint32_t res = 0; cad = (cmd_data >> HDA_CMD_CAD_SHIFT) & 0x0f; // 4 bits nid = (cmd_data >> HDA_CMD_NID_SHIFT) & 0xff; // 8 bits @@ -73,14 +159,36 @@ hops = hci->hops; assert(hops); - DPRINTF("cad: 0x%x nid: 0x%x verb: 0x%x payload: 0x%x\n", cad, nid, verb, payload); + sc = (struct hda_codec_softc *)hci->priv; + assert(sc); if (!hops->response) { DPRINTF("The controller ops does not implement the response function\n"); return -1; } - return hops->response(hci, 0, HDA_CODEC_RESPONSE_EX_SOL); + switch (verb) { + case HDA_CMD_VERB_GET_PARAMETER: + if (nid < sc->no_nodes) + res = sc->get_parameters[nid][payload]; + else + DPRINTF("GET_PARAMETER(nid: %d) not described\n", nid); + break; + case HDA_CMD_VERB_GET_SUBSYSTEM_ID: + res = sc->subsystem_id; + break; + case HDA_CMD_VERB_SET_AMP_GAIN_MUTE: + /* TODO - handle this command */ + break; + default: + /* TODO - call a specific handler per node */ + break; + } + + DPRINTF("cad: 0x%x nid: 0x%x verb: 0x%x payload: 0x%x response: 0x%x\n", + cad, nid, verb, payload, res); + + return hops->response(hci, res, HDA_CODEC_RESPONSE_EX_SOL); } struct hda_codec_class hda_codec = { From owner-svn-soc-all@freebsd.org Fri Jun 10 12:35:13 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1CBF1AEE8DB for ; Fri, 10 Jun 2016 12:35:13 +0000 (UTC) (envelope-from litong@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E860D1E10 for ; Fri, 10 Jun 2016 12:35:12 +0000 (UTC) (envelope-from litong@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5ACZCwO019129 for ; Fri, 10 Jun 2016 12:35:12 GMT (envelope-from litong@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5ACZA8H018361 for svn-soc-all@FreeBSD.org; Fri, 10 Jun 2016 12:35:10 GMT (envelope-from litong@FreeBSD.org) Date: Fri, 10 Jun 2016 12:35:10 GMT Message-Id: <201606101235.u5ACZA8H018361@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to litong@FreeBSD.org using -f From: litong@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305035 - in soc2016/litong/vagrant-bhyve/trunk: . bin lib/vagrant-bhyve spec/vagrant MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2016 12:35:13 -0000 Author: litong Date: Fri Jun 10 12:35:09 2016 New Revision: 305035 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305035 Log: Initial commit Added: soc2016/litong/vagrant-bhyve/trunk/bin/console (contents, props changed) soc2016/litong/vagrant-bhyve/trunk/bin/setup (contents, props changed) soc2016/litong/vagrant-bhyve/trunk/spec/vagrant/bhyve_spec.rb Modified: soc2016/litong/vagrant-bhyve/trunk/.gitignore soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/version.rb Modified: soc2016/litong/vagrant-bhyve/trunk/.gitignore ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/.gitignore Fri Jun 10 08:33:15 2016 (r305034) +++ soc2016/litong/vagrant-bhyve/trunk/.gitignore Fri Jun 10 12:35:09 2016 (r305035) @@ -7,4 +7,7 @@ /pkg/ /spec/reports/ /tmp/ +<<<<<<< 8569ecf8bd116d9e214f6907f29993bd8e03d40d /svn-commit.tmp +======= +>>>>>>> Initial commit Added: soc2016/litong/vagrant-bhyve/trunk/bin/console ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2016/litong/vagrant-bhyve/trunk/bin/console Fri Jun 10 12:35:09 2016 (r305035) @@ -0,0 +1,14 @@ +#!/usr/bin/env ruby + +require "bundler/setup" +require "vagrant/bhyve" + +# You can add fixtures and/or initialization code here to make experimenting +# with your gem easier. You can also use a different console, if you like. + +# (If you use this, don't forget to add pry to your Gemfile!) +# require "pry" +# Pry.start + +require "irb" +IRB.start Added: soc2016/litong/vagrant-bhyve/trunk/bin/setup ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2016/litong/vagrant-bhyve/trunk/bin/setup Fri Jun 10 12:35:09 2016 (r305035) @@ -0,0 +1,7 @@ +#!/bin/bash +set -euo pipefail +IFS=$'\n\t' + +bundle install + +# Do any other automated setup that you need to do here Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/version.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/version.rb Fri Jun 10 08:33:15 2016 (r305034) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/version.rb Fri Jun 10 12:35:09 2016 (r305035) @@ -1,4 +1,8 @@ +<<<<<<< 8569ecf8bd116d9e214f6907f29993bd8e03d40d module VagrantPlugins +======= +module Vagrant +>>>>>>> Initial commit module Bhyve VERSION = "0.1.0" end Added: soc2016/litong/vagrant-bhyve/trunk/spec/vagrant/bhyve_spec.rb ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2016/litong/vagrant-bhyve/trunk/spec/vagrant/bhyve_spec.rb Fri Jun 10 12:35:09 2016 (r305035) @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe Vagrant::Bhyve do + it 'has a version number' do + expect(Vagrant::Bhyve::VERSION).not_to be nil + end + + it 'does something useful' do + expect(false).to eq(true) + end +end From owner-svn-soc-all@freebsd.org Fri Jun 10 12:35:49 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EBFEDAEE8F6 for ; Fri, 10 Jun 2016 12:35:49 +0000 (UTC) (envelope-from litong@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id DF8EA1E2C for ; Fri, 10 Jun 2016 12:35:49 +0000 (UTC) (envelope-from litong@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5ACZnkU031398 for ; Fri, 10 Jun 2016 12:35:49 GMT (envelope-from litong@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5ACZmHJ030943 for svn-soc-all@FreeBSD.org; Fri, 10 Jun 2016 12:35:48 GMT (envelope-from litong@FreeBSD.org) Date: Fri, 10 Jun 2016 12:35:48 GMT Message-Id: <201606101235.u5ACZmHJ030943@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to litong@FreeBSD.org using -f From: litong@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305036 - in soc2016/litong/vagrant-bhyve/trunk: . bin lib/vagrant-bhyve spec/vagrant MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2016 12:35:50 -0000 Author: litong Date: Fri Jun 10 12:35:48 2016 New Revision: 305036 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305036 Log: remove bin Deleted: soc2016/litong/vagrant-bhyve/trunk/bin/console soc2016/litong/vagrant-bhyve/trunk/bin/setup soc2016/litong/vagrant-bhyve/trunk/spec/vagrant/bhyve_spec.rb Modified: soc2016/litong/vagrant-bhyve/trunk/.gitignore soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/version.rb Modified: soc2016/litong/vagrant-bhyve/trunk/.gitignore ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/.gitignore Fri Jun 10 12:35:09 2016 (r305035) +++ soc2016/litong/vagrant-bhyve/trunk/.gitignore Fri Jun 10 12:35:48 2016 (r305036) @@ -7,7 +7,11 @@ /pkg/ /spec/reports/ /tmp/ +<<<<<<< f0976cd4b81347c0d687988ff6463d3113e547d2 <<<<<<< 8569ecf8bd116d9e214f6907f29993bd8e03d40d /svn-commit.tmp ======= >>>>>>> Initial commit +======= +/svn-commit.tmp +>>>>>>> remove bin Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/version.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/version.rb Fri Jun 10 12:35:09 2016 (r305035) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/version.rb Fri Jun 10 12:35:48 2016 (r305036) @@ -1,8 +1,12 @@ +<<<<<<< f0976cd4b81347c0d687988ff6463d3113e547d2 <<<<<<< 8569ecf8bd116d9e214f6907f29993bd8e03d40d module VagrantPlugins ======= module Vagrant >>>>>>> Initial commit +======= +module VagrantPlugins +>>>>>>> remove bin module Bhyve VERSION = "0.1.0" end From owner-svn-soc-all@freebsd.org Fri Jun 10 12:36:05 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A832AAEE915 for ; Fri, 10 Jun 2016 12:36:05 +0000 (UTC) (envelope-from litong@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 8D1761E47 for ; Fri, 10 Jun 2016 12:36:05 +0000 (UTC) (envelope-from litong@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5ACa5Pm036629 for ; Fri, 10 Jun 2016 12:36:05 GMT (envelope-from litong@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5ACa0Vb034905 for svn-soc-all@FreeBSD.org; Fri, 10 Jun 2016 12:36:00 GMT (envelope-from litong@FreeBSD.org) Date: Fri, 10 Jun 2016 12:36:00 GMT Message-Id: <201606101236.u5ACa0Vb034905@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to litong@FreeBSD.org using -f From: litong@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305037 - in soc2016/litong/vagrant-bhyve/trunk: example_box lib lib/vagrant-bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2016 12:36:05 -0000 Author: litong Date: Fri Jun 10 12:36:00 2016 New Revision: 305037 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305037 Log: add initial example box Added: soc2016/litong/vagrant-bhyve/trunk/example_box/ soc2016/litong/vagrant-bhyve/trunk/example_box/README.md soc2016/litong/vagrant-bhyve/trunk/example_box/metadata.json soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/config.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/plugin.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/provider.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/util.rb Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/version.rb Added: soc2016/litong/vagrant-bhyve/trunk/example_box/README.md ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2016/litong/vagrant-bhyve/trunk/example_box/README.md Fri Jun 10 12:36:00 2016 (r305037) @@ -0,0 +1,28 @@ +# Vagrant Bhyve Example Box + +Vagrant providers each require a custom provider-specific box format. +This folder shows the example contents of a box for the `bhyve` provider. +To turn this into a box create a vagrant image according documentation (don't + forget to install rsync command) and create box with following command: + +``` +$ tar cvzf custom_box.box ./metadata.json ./Vagrantfile ./box.img +``` + +This box works by using Vagrant's built-in Vagrantfile merging to setup +defaults for Bhyve. These defaults can easily be overwritten by higher-level +Vagrantfiles (such as project root Vagrantfiles). + +## Box Metadata + +Bhyve box should define at least two data fields in `metadata.json` file. + +* provider - Provider name is bhyve +* loader - Loader should be grub2-bhyve or bhyveload + +## Converting Boxes + +Instead of creating a box from scratch, you can use +[vagrant-mutate](https://github.com/sciurus/vagrant-mutate) +to take boxes created for other Vagrant providers and use them +with vagrant-bhyve Added: soc2016/litong/vagrant-bhyve/trunk/example_box/metadata.json ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2016/litong/vagrant-bhyve/trunk/example_box/metadata.json Fri Jun 10 12:36:00 2016 (r305037) @@ -0,0 +1,4 @@ +{ + "provider" : "libvirt", + "loader" : "bhyveload" +} Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve.rb Fri Jun 10 12:35:48 2016 (r305036) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve.rb Fri Jun 10 12:36:00 2016 (r305037) @@ -1,10 +1,13 @@ require "pathname" - require "vagrant-bhyve/version" module VagrantPlugin - module Bhyve + module ProviderBhyve lib_path = Pathname.new(File.expand_path("../vagrant-bhyve", __FILE__)) + autoload :Action, lib_path.join('action') + autoload :Driver, lib_path.join('driver') + autoload :Errors, lib_path.join('errors') + autoload :Util, lib_path.join('util') # This function returns the path to the source of this plugin Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action.rb ============================================================================== Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/config.rb ============================================================================== Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb Fri Jun 10 12:36:00 2016 (r305037) @@ -0,0 +1,21 @@ +require "log4r" + +module VagrantPlugins + module ProviderBhyve + class Driver + + @@sudo = '' + + def initialize(machine) + @logger = Log4r::Logger.new("vagrant::bhyve::driver") + @machine = machine + end + + # if vagrant is excecuted by root (or with sudo) then the variable + # will be empty string, otherwise it will be 'sudo' to make sure we + # can run bhyve, bhyveload and pf with sudo privilege + def sudo + if Process.uid == 0 + @@sudo = '' + else + @@sudo = 'sudo' Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb ============================================================================== Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/plugin.rb ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/plugin.rb Fri Jun 10 12:36:00 2016 (r305037) @@ -0,0 +1,73 @@ +begin + require "vagrant" +rescue LoadError + raise "The Vagrant Bhyve plugin must be run within Vagrant." +end + +############################################################# +# TBD some version check # +############################################################# + +module VagrantPlugins + module ProviderBhyve + class Plugin < Vagrant.plugin('2') + name "bhyve" + description <<-DESC + This plugin allows vagrant to manage VMs in bhyve, the hypervisor + provided by FreeBSD's kernel + DESC + + config(:bhyve, :provider) do + require_relative "config" + Config + end + + provider(:bhyve, parallel: true) do + require_relative "provider" + Provider + end + + # This initializes the internationalization strings. + def self.setup_i18n + I18n.load_path << File.expand_path('locales/en.yml', + ProviderLibvirt.source_root) + I18n.reload! + end + + # This sets up our log level to be whatever VAGRANT_LOG is. + def self.setup_logging + require 'log4r' + + level = nil + begin + level = Log4r.const_get(ENV['VAGRANT_LOG'].upcase) + rescue NameError + # This means that the logging constant wasn't found, + # which is fine. We just keep `level` as `nil`. But + # we tell the user. + level = nil + end + + # Some constants, such as "true" resolve to booleans, so the + # above error checking doesn't catch it. This will check to make + # sure that the log level is an integer, as Log4r requires. + level = nil if !level.is_a?(Integer) + + # Set the logging level on all "vagrant" namespaced + # logs as long as we have a valid level. + if level + logger = Log4r::Logger.new('vagrant_libvirt') + logger.outputters = Log4r::Outputter.stderr + logger.level = level + logger = nil + end + end + + # Setup logging and i18n before any autoloading loads other classes + # with logging configured as this prevents inheritance of the log level + # from the parent logger. + setup_logging + setup_i18n + end + end +end Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/provider.rb ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/provider.rb Fri Jun 10 12:36:00 2016 (r305037) @@ -0,0 +1,68 @@ +require "vagrant" +require "log4r" + +module VagrantPlugins + module ProviderBhyve + autoload :Driver, 'vagrant-bhyve/driver' + + class Provider < Vagrant.plugin('2', :provider) + + def initialize(machine) + @logger = Log4r::Logger.new("vagrant::provider::bhyve") + @machine = machine + end + + def action(name) + # Attrmpt to get the action method from the Action class if it + # exists, otherwise return nil to show that we don't support the + # given action + action_method = "action_#{name}" + return Action.send(action_method) if Action.respond_to?(action_method) + nil + end + + def driver + return @driver if @driver + @driver = Driver.new(@machine) + end + + # This should return a hash of information that explains how to SSH + # into the machine. If the machine is not at a point where SSH is + # even possiable, then 'nil' should be returned + # + # The general structure of this returned hash should be the + # following: + # + # { + # host: "1.2.3.4", + # port: "22", + # username: "vagrant", + # private_key_path: "/path/to/my/key" + # } + def ssh_info + return nil if state.id != :running + + ip = driver.get_ipaddress(@machine) + + # We just return nil if were not able to identify the VM's IP and + # let Vagrant core deal with it like docker provider does + return nil if !ip + + ssh_info = { + host: ip, + port: @machine.config.ssh.guest_port + } +############################################################# +# TBD add more ssh info # +############################################################# + ssh_info + end + + def state + + end + + + end + end +end Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/util.rb ============================================================================== Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/version.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/version.rb Fri Jun 10 12:35:48 2016 (r305036) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/version.rb Fri Jun 10 12:36:00 2016 (r305037) @@ -1,6 +1,7 @@ <<<<<<< f0976cd4b81347c0d687988ff6463d3113e547d2 <<<<<<< 8569ecf8bd116d9e214f6907f29993bd8e03d40d module VagrantPlugins +<<<<<<< 41be567461e651dace80def0b0d464b58d14e3da ======= module Vagrant >>>>>>> Initial commit @@ -8,6 +9,9 @@ module VagrantPlugins >>>>>>> remove bin module Bhyve +======= + module ProviderBhyve +>>>>>>> add initial example box VERSION = "0.1.0" end end From owner-svn-soc-all@freebsd.org Fri Jun 10 12:36:16 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 12545AEE92E for ; Fri, 10 Jun 2016 12:36:16 +0000 (UTC) (envelope-from litong@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 0634B1E5E for ; Fri, 10 Jun 2016 12:36:16 +0000 (UTC) (envelope-from litong@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5ACaFju039974 for ; Fri, 10 Jun 2016 12:36:15 GMT (envelope-from litong@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5ACaDPD039147 for svn-soc-all@FreeBSD.org; Fri, 10 Jun 2016 12:36:13 GMT (envelope-from litong@FreeBSD.org) Date: Fri, 10 Jun 2016 12:36:13 GMT Message-Id: <201606101236.u5ACaDPD039147@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to litong@FreeBSD.org using -f From: litong@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305038 - in soc2016/litong/vagrant-bhyve/trunk/lib: . vagrant-bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2016 12:36:16 -0000 Author: litong Date: Fri Jun 10 12:36:12 2016 New Revision: 305038 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305038 Log: update the structure Deleted: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/util.rb Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/config.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve.rb Fri Jun 10 12:36:00 2016 (r305037) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve.rb Fri Jun 10 12:36:12 2016 (r305038) @@ -7,7 +7,6 @@ autoload :Action, lib_path.join('action') autoload :Driver, lib_path.join('driver') autoload :Errors, lib_path.join('errors') - autoload :Util, lib_path.join('util') # This function returns the path to the source of this plugin Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action.rb Fri Jun 10 12:36:00 2016 (r305037) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action.rb Fri Jun 10 12:36:12 2016 (r305038) @@ -0,0 +1,15 @@ +require "pathname" +require "vagrant/action/builder" + + +module VagrantPlugins + module ProviderBhyve + module Action + include Vagrant::Action::Builtin + + + + + end + end +end Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/config.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/config.rb Fri Jun 10 12:36:00 2016 (r305037) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/config.rb Fri Jun 10 12:36:12 2016 (r305038) @@ -0,0 +1,32 @@ +require "vagrant" + +module VagrantPlugins + module ProviderBhyve + class Config < Vagrant.plugin('2', :config) + # Loader used to load kernel before invoking bhyve.(grub2-bhyve or bhyveload) + attr_accessor :loader + + # Resources needed for the VM. + + # Specify the number of virtual CPUs. + attr_accessor :cups + # Specify the size of guest physical memory. + attr_accessor :memory + # Specify virtual devices will be attached to bhyve's emulated + # PCI bus. Network interface and disk will both attched as this kind + # of devices. + attr_accessor :pcis + # Specify console device which will be attached to the VM + attr_accessor :lpc + + def initialize + @loader = UNSET_VALUE + @cpus = UNSET_VALUE + @memory = UNSET_VALUE + @pcis = UNSET_VALUE + @lpc = UNSET_VALUE + end + + end + end +end Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb Fri Jun 10 12:36:00 2016 (r305037) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb Fri Jun 10 12:36:12 2016 (r305038) @@ -1,3 +1,4 @@ +require "vagrant/util/subprocess" require "log4r" module VagrantPlugins @@ -19,3 +20,14 @@ @@sudo = '' else @@sudo = 'sudo' + end + end + + def execute(command) + process = Subprocess.new(command) + process.execute + end + + end + end +end Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb Fri Jun 10 12:36:00 2016 (r305037) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb Fri Jun 10 12:36:12 2016 (r305038) @@ -0,0 +1,16 @@ +require "vagrant" + +module VagrantPlugins + module ProviderBhyve + module Errors + class VagrantBhyveError < Vagrant::Errors::VagrantError + error_namespace('vagrant_bhyve.errors') + end + + class NotRootUser << VagrantError + error_key(:has_no_root_privilege) + end + + end + end +end From owner-svn-soc-all@freebsd.org Fri Jun 10 12:36:26 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D4767AEE94A for ; Fri, 10 Jun 2016 12:36:26 +0000 (UTC) (envelope-from litong@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id BACB31E74 for ; Fri, 10 Jun 2016 12:36:26 +0000 (UTC) (envelope-from litong@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5ACaQ8t043253 for ; Fri, 10 Jun 2016 12:36:26 GMT (envelope-from litong@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5ACaOiS042393 for svn-soc-all@FreeBSD.org; Fri, 10 Jun 2016 12:36:24 GMT (envelope-from litong@FreeBSD.org) Date: Fri, 10 Jun 2016 12:36:24 GMT Message-Id: <201606101236.u5ACaOiS042393@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to litong@FreeBSD.org using -f From: litong@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305039 - in soc2016/litong/vagrant-bhyve/trunk: example_box lib lib/vagrant-bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2016 12:36:26 -0000 Author: litong Date: Fri Jun 10 12:36:23 2016 New Revision: 305039 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305039 Log: add executor and update box format Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/executor.rb Modified: soc2016/litong/vagrant-bhyve/trunk/example_box/README.md soc2016/litong/vagrant-bhyve/trunk/example_box/metadata.json soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb Modified: soc2016/litong/vagrant-bhyve/trunk/example_box/README.md ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/example_box/README.md Fri Jun 10 12:36:12 2016 (r305038) +++ soc2016/litong/vagrant-bhyve/trunk/example_box/README.md Fri Jun 10 12:36:23 2016 (r305039) @@ -17,8 +17,9 @@ Bhyve box should define at least two data fields in `metadata.json` file. -* provider - Provider name is bhyve -* loader - Loader should be grub2-bhyve or bhyveload +* provider - Provider name is bhyve. +* firmaware - Firmware should be bios or uefi. +* loader - Loader should be grub-bhyve or bhyveload when firmware is bios. This key should keep blank when firmware is uefi. ## Converting Boxes Modified: soc2016/litong/vagrant-bhyve/trunk/example_box/metadata.json ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/example_box/metadata.json Fri Jun 10 12:36:12 2016 (r305038) +++ soc2016/litong/vagrant-bhyve/trunk/example_box/metadata.json Fri Jun 10 12:36:23 2016 (r305039) @@ -1,4 +1,5 @@ { "provider" : "libvirt", + "firmware" : "bios", "loader" : "bhyveload" } Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve.rb Fri Jun 10 12:36:12 2016 (r305038) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve.rb Fri Jun 10 12:36:23 2016 (r305039) @@ -5,6 +5,7 @@ module ProviderBhyve lib_path = Pathname.new(File.expand_path("../vagrant-bhyve", __FILE__)) autoload :Action, lib_path.join('action') + autoload :Executor, lib_path.join('executor') autoload :Driver, lib_path.join('driver') autoload :Errors, lib_path.join('errors') Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb Fri Jun 10 12:36:12 2016 (r305038) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb Fri Jun 10 12:36:23 2016 (r305039) @@ -4,28 +4,31 @@ module VagrantPlugins module ProviderBhyve class Driver + + # This executor is responsible for actually executing commands, including + # bhyve, dnsmasq and other shell utils used to get VM's state + attr_accessor :executor @@sudo = '' def initialize(machine) @logger = Log4r::Logger.new("vagrant::bhyve::driver") @machine = machine + @executor = Executor::Exec.new end # if vagrant is excecuted by root (or with sudo) then the variable # will be empty string, otherwise it will be 'sudo' to make sure we # can run bhyve, bhyveload and pf with sudo privilege def sudo - if Process.uid == 0 - @@sudo = '' - else - @@sudo = 'sudo' - end + @@sudo = '' if Process.uid == 0 + @@sudo = 'sudo' end - def execute(command) - process = Subprocess.new(command) - process.execute + def state(&block) + IO.popen("test -e #{name}").tap { |f| f.read }.close + return :running if $?.success? + return :not_running end end Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb Fri Jun 10 12:36:12 2016 (r305038) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb Fri Jun 10 12:36:23 2016 (r305039) @@ -7,10 +7,14 @@ error_namespace('vagrant_bhyve.errors') end - class NotRootUser << VagrantError + class HasNoRootPrivilege << VagrantBhyveError error_key(:has_no_root_privilege) end + class ExecuteError << VagrantBhyveError + error_key(:execute_error) + end + end end end Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/executor.rb ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/executor.rb Fri Jun 10 12:36:23 2016 (r305039) @@ -0,0 +1,39 @@ +require "vagrant/util/busy" +require "vagrant/util/subprocess" + +module VagrantPlugins + module ProviderBhyve + module Executor + # This class is used to execute commands as subprocess. + class Exec + # When test is true, this method will return the executed command's + # exit code. Otherwise it will return the result's stdout + def execute(test, *cmd, **opts, &block) + # Append in the options for subprocess + cmd << { notify: [:stdout, :stderr] } + + interrupted = false + # Lambda to change interrupted to true + int_callback = ->{ interrupted = true } + result = ::Vagrant::Util::Busy.busy(int_callback) do + ::Vagrant::Util::Subprocess.execute(*cmd, &block) + end + + return result.exit_code if test + + result.stderr.gsub!("\r\n", "\n") + result.stdout.gsub!("\r\n", "\n") + + if result.exit_code != 0 && interrupted + raise Errors::ExecuteError, + command: cmd.inspect, + stderr: result.stderr, + stdout: result.stdout + end + + result.stdout + end + end + end + end +end From owner-svn-soc-all@freebsd.org Fri Jun 10 12:36:37 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6E654AEE96B for ; Fri, 10 Jun 2016 12:36:37 +0000 (UTC) (envelope-from litong@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 548881E89 for ; Fri, 10 Jun 2016 12:36:37 +0000 (UTC) (envelope-from litong@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5ACabHa046735 for ; Fri, 10 Jun 2016 12:36:37 GMT (envelope-from litong@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5ACaYWs045604 for svn-soc-all@FreeBSD.org; Fri, 10 Jun 2016 12:36:34 GMT (envelope-from litong@FreeBSD.org) Date: Fri, 10 Jun 2016 12:36:34 GMT Message-Id: <201606101236.u5ACaYWs045604@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to litong@FreeBSD.org using -f From: litong@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305040 - in soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve: . action MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2016 12:36:37 -0000 Author: litong Date: Fri Jun 10 12:36:34 2016 New Revision: 305040 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305040 Log: add create_switch and loader_kernel_module actions Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/create_switch.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/load_kernel_module.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/load_os.rb Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/executor.rb Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/create_switch.rb ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/create_switch.rb Fri Jun 10 12:36:34 2016 (r305040) @@ -0,0 +1,27 @@ +require "log4r" + +module VagrantPlugins + module ProviderBhyve + module Action + class LoadKernelModule + + def initialize(app, env) + @logger = Log4r::Logger.new("vagrant_bhyve::action::create_switch") + @app = app + end + + def call(env) + @machine = env[:machine] + @driver = @machine.provider.driver + switch_list = %w(vagrant-bhyve-default) + # The switch name is used as created bridge device's description + for switch in switch_list + driver.create_switch(switch) + end + @app.call(env) + end + + end + end + end +end Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/load_kernel_module.rb ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/load_kernel_module.rb Fri Jun 10 12:36:34 2016 (r305040) @@ -0,0 +1,26 @@ +require "log4r" + +module VagrantPlugins + module ProviderBhyve + module Action + class LoadKernelModule + + def initialize(app, env) + @logger = Log4r::Logger.new("vagrant_bhyve::action::load_kernel_module") + @app = app + end + + def call(env) + @machine = env[:machine] + @driver = @machine.provider.driver + module_list = %w(vmm nmdm if_bridge if_tap) + for kernel_module in module_list + driver.load_module(kernel_module) + end + @app.call(env) + end + + end + end + end +end Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/load_os.rb ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/load_os.rb Fri Jun 10 12:36:34 2016 (r305040) @@ -0,0 +1,25 @@ +require "log4r" + +module VagrantPlugins + module ProviderBhyve + module Action + class LoadKernelModule + + def initialize(app, env) + @logger = Log4r::Logger.new("vagrant_bhyve::action::load_os") + @app = app + end + + def call(env) + @machine = env[:machine] + @driver = @machine.provider.driver + firmware = @machine.box.metadata[:firmware] + loader = @machine.box.metadata[:loader] + @driver.loader(loader) if firmware == 'bios' + @app.call(env) + end + + end + end + end +end Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb Fri Jun 10 12:36:23 2016 (r305039) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb Fri Jun 10 12:36:34 2016 (r305040) @@ -1,4 +1,3 @@ -require "vagrant/util/subprocess" require "log4r" module VagrantPlugins @@ -9,26 +8,68 @@ # bhyve, dnsmasq and other shell utils used to get VM's state attr_accessor :executor - @@sudo = '' - def initialize(machine) - @logger = Log4r::Logger.new("vagrant::bhyve::driver") + @logger = Log4r::Logger.new("vagrant_bhyve::driver") @machine = machine @executor = Executor::Exec.new + + # if vagrant is excecuted by root (or with sudo) then the variable + # will be empty string, otherwise it will be 'sudo' to make sure we + # can run bhyve, bhyveload and pf with sudo privilege + if Process.uid == 0 + @sudo = '' + @sudo = 'sudo' + end + end + + def load_module(module_name) + result = execute(true, @sudo, "kldstat", "-qm", module_name, ">/dev/null", "2>&1") + if result != 0 + result = execute(true, @sudo, "kldload", module_name, ">/dev/null", "2>&1") + result != 0 && raise Errors::UnableToLoadModule + end + end + + def create_switch(switch_name) + return if switch_name.length == 0 + + # Check whether the switch has been created + desc = switch_name + '\$' + cmd = %w(ifconfig -a | grep -B 1).push(desc).push("|") + cmd += %w(head -n 1 | awk -F: '{print $1}') + result = execute(false, cmd) + return if result.length != 0 + + # Create new bridge device + bridge_name = execute(false, @sudo, "ifconfig", "bridge", "create") + raise Errors::UnableToCreateBridge if bridge_name.length == 0 + # Add new created bridge device's description + execute(false, @sudo, "ifconfig", bridge_name, "description", switch_name, "up") + end + + def loader(loader) + end + + def bhyve + end + + def state + # Prepare for other bhyve state which may be added in. For now, only + # running and not_running. + case + when running? + :running + else + :not_running + end end - # if vagrant is excecuted by root (or with sudo) then the variable - # will be empty string, otherwise it will be 'sudo' to make sure we - # can run bhyve, bhyveload and pf with sudo privilege - def sudo - @@sudo = '' if Process.uid == 0 - @@sudo = 'sudo' + def running? + execute(true, "test", "-e", "/dev/vmm/#{@machine.name}") == 0 end - def state(&block) - IO.popen("test -e #{name}").tap { |f| f.read }.close - return :running if $?.success? - return :not_running + def execute(*cmd, **opts, &block) + @executor.execute(*cmd, **opts, &block) end end Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb Fri Jun 10 12:36:23 2016 (r305039) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb Fri Jun 10 12:36:34 2016 (r305040) @@ -7,14 +7,21 @@ error_namespace('vagrant_bhyve.errors') end - class HasNoRootPrivilege << VagrantBhyveError + class HasNoRootPrivilege < VagrantBhyveError error_key(:has_no_root_privilege) end - class ExecuteError << VagrantBhyveError + class ExecuteError < VagrantBhyveError error_key(:execute_error) end + class UnableToLoadModule < VagrantError + error_key(:unable_to_load_module) + end + + class UnableToCreateBridge < VagrantError + error_key(:unable_to_create_brighe) + end end end end Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/executor.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/executor.rb Fri Jun 10 12:36:23 2016 (r305039) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/executor.rb Fri Jun 10 12:36:34 2016 (r305040) @@ -6,9 +6,10 @@ module Executor # This class is used to execute commands as subprocess. class Exec - # When test is true, this method will return the executed command's - # exit code. Otherwise it will return the result's stdout - def execute(test, *cmd, **opts, &block) + # When we need the command's exit code we should set parameter + # exit_code to true, otherwise this method will return executed + # command's stdout + def execute(exit_code, *cmd, **opts, &block) # Append in the options for subprocess cmd << { notify: [:stdout, :stderr] } @@ -19,7 +20,7 @@ ::Vagrant::Util::Subprocess.execute(*cmd, &block) end - return result.exit_code if test + return result.exit_code if exit_code result.stderr.gsub!("\r\n", "\n") result.stdout.gsub!("\r\n", "\n") From owner-svn-soc-all@freebsd.org Fri Jun 10 13:14:08 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6F1FAB70316 for ; Fri, 10 Jun 2016 13:14:08 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6352B194C for ; Fri, 10 Jun 2016 13:14:08 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5ADE8HG009753 for ; Fri, 10 Jun 2016 13:14:08 GMT (envelope-from vincenzo@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5ADE7Bs009694 for svn-soc-all@FreeBSD.org; Fri, 10 Jun 2016 13:14:07 GMT (envelope-from vincenzo@FreeBSD.org) Date: Fri, 10 Jun 2016 13:14:07 GMT Message-Id: <201606101314.u5ADE7Bs009694@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to vincenzo@FreeBSD.org using -f From: vincenzo@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305041 - soc2016/vincenzo/head/sys/dev/netmap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2016 13:14:08 -0000 Author: vincenzo Date: Fri Jun 10 13:14:06 2016 New Revision: 305041 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305041 Log: freebsd: fix DRIVER_MODULE declarations Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c soc2016/vincenzo/head/sys/dev/netmap/netmap_freebsd.c Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c ============================================================================== --- soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 12:36:34 2016 (r305040) +++ soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:14:06 2016 (r305041) @@ -187,8 +187,7 @@ }; static devclass_t ptnet_devclass; -DRIVER_MODULE(netmap, pci, ptnet_driver, ptnet_devclass, 0, 0); -MODULE_DEPEND(netmap, pci, 1, 1, 1); +DRIVER_MODULE(ptnet, pci, ptnet_driver, ptnet_devclass, NULL, NULL); static int ptnet_probe(device_t dev) Modified: soc2016/vincenzo/head/sys/dev/netmap/netmap_freebsd.c ============================================================================== --- soc2016/vincenzo/head/sys/dev/netmap/netmap_freebsd.c Fri Jun 10 12:36:34 2016 (r305040) +++ soc2016/vincenzo/head/sys/dev/netmap/netmap_freebsd.c Fri Jun 10 13:14:06 2016 (r305041) @@ -596,8 +596,8 @@ }; static devclass_t ptnetmap_devclass; -DRIVER_MODULE(netmap, pci, ptn_memdev_driver, ptnetmap_devclass, 0, 0); -MODULE_DEPEND(netmap, pci, 1, 1, 1); +DRIVER_MODULE(ptn_memdev, pci, ptn_memdev_driver, ptnetmap_devclass, + NULL, NULL); /* * I/O port read/write wrappers. @@ -1456,6 +1456,7 @@ DEV_MODULE(netmap, netmap_loader, NULL); +MODULE_DEPEND(netmap, pci, 1, 1, 1); MODULE_VERSION(netmap, 1); /* reduce conditional code */ // linux API, use for the knlist in FreeBSD From owner-svn-soc-all@freebsd.org Fri Jun 10 13:14:27 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2880EB70334 for ; Fri, 10 Jun 2016 13:14:27 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1CB331963 for ; Fri, 10 Jun 2016 13:14:27 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5ADEQ1N010158 for ; Fri, 10 Jun 2016 13:14:26 GMT (envelope-from vincenzo@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5ADEQG2010110 for svn-soc-all@FreeBSD.org; Fri, 10 Jun 2016 13:14:26 GMT (envelope-from vincenzo@FreeBSD.org) Date: Fri, 10 Jun 2016 13:14:26 GMT Message-Id: <201606101314.u5ADEQG2010110@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to vincenzo@FreeBSD.org using -f From: vincenzo@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305042 - soc2016/vincenzo/head/sys/dev/netmap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2016 13:14:27 -0000 Author: vincenzo Date: Fri Jun 10 13:14:25 2016 New Revision: 305042 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305042 Log: ptnetmap guest: temporary hack to avoid guest kernel crash Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c soc2016/vincenzo/head/sys/dev/netmap/netmap_freebsd.c Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c ============================================================================== --- soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:14:06 2016 (r305041) +++ soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:14:25 2016 (r305042) @@ -204,6 +204,8 @@ return (BUS_PROBE_DEFAULT); } +extern int netmap_initialized; + static int ptnet_attach(device_t dev) { @@ -217,6 +219,11 @@ int err, rid; int i; + if (!netmap_initialized) { + device_printf(dev, "Netmap still not initialized\n"); + return (ENXIO); + } + device_printf(dev, "%s\n", __func__); sc = device_get_softc(dev); Modified: soc2016/vincenzo/head/sys/dev/netmap/netmap_freebsd.c ============================================================================== --- soc2016/vincenzo/head/sys/dev/netmap/netmap_freebsd.c Fri Jun 10 13:14:06 2016 (r305041) +++ soc2016/vincenzo/head/sys/dev/netmap/netmap_freebsd.c Fri Jun 10 13:14:25 2016 (r305042) @@ -681,6 +681,8 @@ return (BUS_PROBE_DEFAULT); } +int netmap_initialized = 0; /* XXX temporary hack */ + /* Device initialization routine. */ static int ptn_memdev_attach(device_t dev) @@ -691,6 +693,11 @@ D("ptn_memdev_driver attach"); + if (!netmap_initialized) { + device_printf(dev, "Netmap still not initialized\n"); + return (ENXIO); + } + ptn_dev = device_get_softc(dev); ptn_dev->dev = dev; @@ -1430,6 +1437,8 @@ switch (event) { case MOD_LOAD: error = netmap_init(); + if (!error) + netmap_initialized = 1; break; case MOD_UNLOAD: From owner-svn-soc-all@freebsd.org Fri Jun 10 13:14:39 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 814A3B70350 for ; Fri, 10 Jun 2016 13:14:39 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 757F1197B for ; Fri, 10 Jun 2016 13:14:39 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5ADEdEN010391 for ; Fri, 10 Jun 2016 13:14:39 GMT (envelope-from vincenzo@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5ADEc4p010371 for svn-soc-all@FreeBSD.org; Fri, 10 Jun 2016 13:14:38 GMT (envelope-from vincenzo@FreeBSD.org) Date: Fri, 10 Jun 2016 13:14:38 GMT Message-Id: <201606101314.u5ADEc4p010371@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to vincenzo@FreeBSD.org using -f From: vincenzo@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305043 - soc2016/vincenzo/head/sys/dev/netmap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2016 13:14:39 -0000 Author: vincenzo Date: Fri Jun 10 13:14:37 2016 New Revision: 305043 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305043 Log: freebsd: ptnetmap guest: use DRIVER_MODULE_ORDERED Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c soc2016/vincenzo/head/sys/dev/netmap/netmap_freebsd.c Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c ============================================================================== --- soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:14:25 2016 (r305042) +++ soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:14:37 2016 (r305043) @@ -187,7 +187,8 @@ }; static devclass_t ptnet_devclass; -DRIVER_MODULE(ptnet, pci, ptnet_driver, ptnet_devclass, NULL, NULL); +DRIVER_MODULE_ORDERED(ptnet, pci, ptnet_driver, ptnet_devclass, + NULL, NULL, SI_ORDER_MIDDLE + 1); static int ptnet_probe(device_t dev) Modified: soc2016/vincenzo/head/sys/dev/netmap/netmap_freebsd.c ============================================================================== --- soc2016/vincenzo/head/sys/dev/netmap/netmap_freebsd.c Fri Jun 10 13:14:25 2016 (r305042) +++ soc2016/vincenzo/head/sys/dev/netmap/netmap_freebsd.c Fri Jun 10 13:14:37 2016 (r305043) @@ -596,8 +596,8 @@ }; static devclass_t ptnetmap_devclass; -DRIVER_MODULE(ptn_memdev, pci, ptn_memdev_driver, ptnetmap_devclass, - NULL, NULL); +DRIVER_MODULE_ORDERED(ptn_memdev, pci, ptn_memdev_driver, ptnetmap_devclass, + NULL, NULL, SI_ORDER_MIDDLE); /* * I/O port read/write wrappers. From owner-svn-soc-all@freebsd.org Fri Jun 10 13:14:58 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5AC01B7036C for ; Fri, 10 Jun 2016 13:14:58 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4F0831990 for ; Fri, 10 Jun 2016 13:14:58 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5ADEwra010750 for ; Fri, 10 Jun 2016 13:14:58 GMT (envelope-from vincenzo@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5ADEv61010748 for svn-soc-all@FreeBSD.org; Fri, 10 Jun 2016 13:14:57 GMT (envelope-from vincenzo@FreeBSD.org) Date: Fri, 10 Jun 2016 13:14:57 GMT Message-Id: <201606101314.u5ADEv61010748@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to vincenzo@FreeBSD.org using -f From: vincenzo@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305044 - soc2016/vincenzo/head/sys/dev/netmap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2016 13:14:58 -0000 Author: vincenzo Date: Fri Jun 10 13:14:57 2016 New Revision: 305044 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305044 Log: freebsd: ptnet_irqs_init(): proper error propagation on failure Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c ============================================================================== --- soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:14:37 2016 (r305043) +++ soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:14:57 2016 (r305044) @@ -504,8 +504,9 @@ pq->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_ACTIVE); if (pq->irq == NULL) { - device_printf(dev, "Failed to allocate interrupt" + device_printf(dev, "Failed to allocate interrupt " "for queue #%d\n", i); + err = ENOSPC; goto err_path; } From owner-svn-soc-all@freebsd.org Fri Jun 10 13:15:10 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 93713B70382 for ; Fri, 10 Jun 2016 13:15:10 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 87B1919AE for ; Fri, 10 Jun 2016 13:15:10 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5ADFAJE011233 for ; Fri, 10 Jun 2016 13:15:10 GMT (envelope-from vincenzo@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5ADF9iU011229 for svn-soc-all@FreeBSD.org; Fri, 10 Jun 2016 13:15:09 GMT (envelope-from vincenzo@FreeBSD.org) Date: Fri, 10 Jun 2016 13:15:09 GMT Message-Id: <201606101315.u5ADF9iU011229@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to vincenzo@FreeBSD.org using -f From: vincenzo@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305045 - soc2016/vincenzo/head/sys/dev/netmap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2016 13:15:10 -0000 Author: vincenzo Date: Fri Jun 10 13:15:09 2016 New Revision: 305045 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305045 Log: freebsd: ptnet_irqs_init: check for MSI-X capability Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c ============================================================================== --- soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:14:57 2016 (r305044) +++ soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:15:09 2016 (r305045) @@ -475,6 +475,11 @@ num_tx_rings = bus_read_4(sc->iomem, PTNET_IO_NUM_TX_RINGS); + if (pci_find_cap(dev, PCIY_MSIX, NULL) != 0) { + device_printf(dev, "Could not find MSI-X capability\n"); + return (ENXIO); + } + sc->msix_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE); if (sc->msix_mem == NULL) { @@ -495,12 +500,8 @@ for (i = 0; i < nvecs; i++) { struct ptnet_queue *pq = sc->queues + i; - void (*handler)(void *) = ptnet_tx_intr; - int rid = i + i; - if (i > num_tx_rings) { - handler = ptnet_rx_intr; - } + rid = i + i; pq->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_ACTIVE); if (pq->irq == NULL) { @@ -509,7 +510,15 @@ err = ENOSPC; goto err_path; } + } + for (i = 0; i < nvecs; i++) { + struct ptnet_queue *pq = sc->queues + i; + void (*handler)(void *) = ptnet_tx_intr; + + if (i > num_tx_rings) { + handler = ptnet_rx_intr; + } err = bus_setup_intr(dev, pq->irq, INTR_TYPE_NET | INTR_MPSAFE, NULL /* intr_filter */, handler, pq, &pq->cookie); From owner-svn-soc-all@freebsd.org Fri Jun 10 13:15:20 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C0945B703A2 for ; Fri, 10 Jun 2016 13:15:20 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B492919C8 for ; Fri, 10 Jun 2016 13:15:20 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5ADFKW6011575 for ; Fri, 10 Jun 2016 13:15:20 GMT (envelope-from vincenzo@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5ADFKIu011572 for svn-soc-all@FreeBSD.org; Fri, 10 Jun 2016 13:15:20 GMT (envelope-from vincenzo@FreeBSD.org) Date: Fri, 10 Jun 2016 13:15:20 GMT Message-Id: <201606101315.u5ADFKIu011572@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to vincenzo@FreeBSD.org using -f From: vincenzo@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305046 - soc2016/vincenzo/head/sys/dev/netmap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2016 13:15:20 -0000 Author: vincenzo Date: Fri Jun 10 13:15:19 2016 New Revision: 305046 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305046 Log: freebsd: ptnet: fix typo bug in IRQ resource (de)allocation Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c ============================================================================== --- soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:15:09 2016 (r305045) +++ soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:15:19 2016 (r305046) @@ -501,7 +501,7 @@ for (i = 0; i < nvecs; i++) { struct ptnet_queue *pq = sc->queues + i; - rid = i + i; + rid = i + 1; pq->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_ACTIVE); if (pq->irq == NULL) { @@ -563,7 +563,7 @@ } if (pq->irq) { - bus_release_resource(dev, SYS_RES_IRQ, i + i, pq->irq); + bus_release_resource(dev, SYS_RES_IRQ, i + 1, pq->irq); pq->irq = NULL; } } From owner-svn-soc-all@freebsd.org Fri Jun 10 13:15:38 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 85337B703C3 for ; Fri, 10 Jun 2016 13:15:38 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5F9C019E0 for ; Fri, 10 Jun 2016 13:15:38 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5ADFc90011988 for ; Fri, 10 Jun 2016 13:15:38 GMT (envelope-from vincenzo@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5ADFbf3011960 for svn-soc-all@FreeBSD.org; Fri, 10 Jun 2016 13:15:37 GMT (envelope-from vincenzo@FreeBSD.org) Date: Fri, 10 Jun 2016 13:15:37 GMT Message-Id: <201606101315.u5ADFbf3011960@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to vincenzo@FreeBSD.org using -f From: vincenzo@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305047 - soc2016/vincenzo/head/sys/dev/netmap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2016 13:15:38 -0000 Author: vincenzo Date: Fri Jun 10 13:15:36 2016 New Revision: 305047 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305047 Log: freebsd: ptnet attach/detach: move debug prints Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c soc2016/vincenzo/head/sys/dev/netmap/netmap_freebsd.c Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c ============================================================================== --- soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:15:19 2016 (r305046) +++ soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:15:36 2016 (r305047) @@ -193,8 +193,6 @@ static int ptnet_probe(device_t dev) { - device_printf(dev, "%s\n", __func__); - if (pci_get_vendor(dev) != PTNETMAP_PCI_VENDOR_ID || pci_get_device(dev) != PTNETMAP_PCI_NETIF_ID) { return (ENXIO); @@ -225,8 +223,6 @@ return (ENXIO); } - device_printf(dev, "%s\n", __func__); - sc = device_get_softc(dev); sc->dev = dev; @@ -379,6 +375,8 @@ sc->ptna_dr.hwup.up.nm_config = ptnet_nm_config; sc->ptna_dr.csb = sc->csb; + device_printf(dev, "%s() completed\n", __func__); + return (0); err_path: @@ -391,8 +389,6 @@ { struct ptnet_softc *sc = device_get_softc(dev); - device_printf(dev, "%s\n", __func__); - if (sc->ifp) { ether_ifdetach(sc->ifp); @@ -428,6 +424,8 @@ PTNET_CORE_LOCK_FINI(sc); + device_printf(dev, "%s() completed\n", __func__); + return (0); } Modified: soc2016/vincenzo/head/sys/dev/netmap/netmap_freebsd.c ============================================================================== --- soc2016/vincenzo/head/sys/dev/netmap/netmap_freebsd.c Fri Jun 10 13:15:19 2016 (r305046) +++ soc2016/vincenzo/head/sys/dev/netmap/netmap_freebsd.c Fri Jun 10 13:15:36 2016 (r305047) @@ -673,7 +673,6 @@ if (pci_get_device(dev) != PTNETMAP_PCI_DEVICE_ID) return (ENXIO); - D("ptn_memdev_driver probe"); snprintf(desc, sizeof(desc), "%s PCI adapter", PTN_MEMDEV_NAME); device_set_desc_copy(dev, desc); From owner-svn-soc-all@freebsd.org Fri Jun 10 13:15:51 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2C672B703DA for ; Fri, 10 Jun 2016 13:15:51 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 209CF19F5 for ; Fri, 10 Jun 2016 13:15:51 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5ADFo1W012319 for ; Fri, 10 Jun 2016 13:15:50 GMT (envelope-from vincenzo@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5ADFocC012270 for svn-soc-all@FreeBSD.org; Fri, 10 Jun 2016 13:15:50 GMT (envelope-from vincenzo@FreeBSD.org) Date: Fri, 10 Jun 2016 13:15:50 GMT Message-Id: <201606101315.u5ADFocC012270@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to vincenzo@FreeBSD.org using -f From: vincenzo@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305048 - soc2016/vincenzo/head/sys/dev/netmap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2016 13:15:51 -0000 Author: vincenzo Date: Fri Jun 10 13:15:50 2016 New Revision: 305048 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305048 Log: freebsd: ptnet: fix kernel crash due to uninitialized data structure Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c ============================================================================== --- soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:15:36 2016 (r305047) +++ soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:15:50 2016 (r305048) @@ -344,6 +344,7 @@ /* Prepare a netmap_adapter struct instance to do netmap_attach(). */ nifp_offset = bus_read_4(sc->iomem, PTNET_IO_NIFP_OFS); + memset(&na_arg, 0, sizeof(na_arg)); na_arg.ifp = ifp; na_arg.num_tx_desc = bus_read_4(sc->iomem, PTNET_IO_NUM_TX_SLOTS); na_arg.num_rx_desc = bus_read_4(sc->iomem, PTNET_IO_NUM_RX_SLOTS); From owner-svn-soc-all@freebsd.org Fri Jun 10 13:16:00 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B35E1B703F4 for ; Fri, 10 Jun 2016 13:16:00 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A3AC81A0B for ; Fri, 10 Jun 2016 13:16:00 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5ADG0FT012488 for ; Fri, 10 Jun 2016 13:16:00 GMT (envelope-from vincenzo@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5ADG0Z8012438 for svn-soc-all@FreeBSD.org; Fri, 10 Jun 2016 13:16:00 GMT (envelope-from vincenzo@FreeBSD.org) Date: Fri, 10 Jun 2016 13:16:00 GMT Message-Id: <201606101316.u5ADG0Z8012438@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to vincenzo@FreeBSD.org using -f From: vincenzo@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305049 - soc2016/vincenzo/head/sys/dev/netmap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2016 13:16:00 -0000 Author: vincenzo Date: Fri Jun 10 13:15:59 2016 New Revision: 305049 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305049 Log: freebsd: ptnet: invoke netmap on interrupt Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c ============================================================================== --- soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:15:50 2016 (r305048) +++ soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:15:59 2016 (r305049) @@ -85,6 +85,13 @@ #error "No support for on-device CSB" #endif +//#define DEBUG +#ifdef DEBUG +#define DBG(x) x +#else /* !DEBUG */ +#define DBG(x) +#endif /* !DEBUG */ + struct ptnet_softc; struct ptnet_queue { @@ -928,7 +935,11 @@ struct ptnet_queue *pq = opaque; struct ptnet_softc *sc = pq->sc; - device_printf(sc->dev, "Tx interrupt #%d", pq->kring_id); + DBG(device_printf(sc->dev, "Tx interrupt #%d\n", pq->kring_id)); + + if (netmap_tx_irq(sc->ifp, pq->kring_id) != NM_IRQ_PASS) { + return; + } } static void @@ -936,6 +947,11 @@ { struct ptnet_queue *pq = opaque; struct ptnet_softc *sc = pq->sc; + unsigned int unused; - device_printf(sc->dev, "Rx interrupt #%d", pq->kring_id); + DBG(device_printf(sc->dev, "Rx interrupt #%d\n", pq->kring_id)); + + if (netmap_rx_irq(sc->ifp, pq->kring_id, &unused) != NM_IRQ_PASS) { + return; + } } From owner-svn-soc-all@freebsd.org Fri Jun 10 13:16:19 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B3C3BB70414 for ; Fri, 10 Jun 2016 13:16:19 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A7EFF1A24 for ; Fri, 10 Jun 2016 13:16:19 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5ADGJK0012953 for ; Fri, 10 Jun 2016 13:16:19 GMT (envelope-from vincenzo@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5ADGJnb012895 for svn-soc-all@FreeBSD.org; Fri, 10 Jun 2016 13:16:19 GMT (envelope-from vincenzo@FreeBSD.org) Date: Fri, 10 Jun 2016 13:16:19 GMT Message-Id: <201606101316.u5ADGJnb012895@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to vincenzo@FreeBSD.org using -f From: vincenzo@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305050 - soc2016/vincenzo/head/sys/dev/netmap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2016 13:16:19 -0000 Author: vincenzo Date: Fri Jun 10 13:16:18 2016 New Revision: 305050 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305050 Log: freebsd: ptnet_irqs_init: use the right handler for RX interrupts Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c ============================================================================== --- soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:15:59 2016 (r305049) +++ soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:16:18 2016 (r305050) @@ -522,7 +522,7 @@ struct ptnet_queue *pq = sc->queues + i; void (*handler)(void *) = ptnet_tx_intr; - if (i > num_tx_rings) { + if (i >= num_tx_rings) { handler = ptnet_rx_intr; } err = bus_setup_intr(dev, pq->irq, INTR_TYPE_NET | INTR_MPSAFE, From owner-svn-soc-all@freebsd.org Fri Jun 10 13:16:53 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 63784B70439 for ; Fri, 10 Jun 2016 13:16:53 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 578D41A40 for ; Fri, 10 Jun 2016 13:16:53 +0000 (UTC) (envelope-from vincenzo@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5ADGrVC013701 for ; Fri, 10 Jun 2016 13:16:53 GMT (envelope-from vincenzo@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5ADGqR6013681 for svn-soc-all@FreeBSD.org; Fri, 10 Jun 2016 13:16:52 GMT (envelope-from vincenzo@FreeBSD.org) Date: Fri, 10 Jun 2016 13:16:52 GMT Message-Id: <201606101316.u5ADGqR6013681@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to vincenzo@FreeBSD.org using -f From: vincenzo@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305051 - soc2016/vincenzo/head/sys/dev/netmap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Jun 2016 13:16:53 -0000 Author: vincenzo Date: Fri Jun 10 13:16:52 2016 New Revision: 305051 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305051 Log: freebsd: ptnet: manage IFF_UP and IFF_DOWN flags Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c ============================================================================== --- soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:16:18 2016 (r305050) +++ soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c Fri Jun 10 13:16:52 2016 (r305051) @@ -154,8 +154,8 @@ static void ptnet_init(void *opaque); static int ptnet_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data); -static void ptnet_init_locked(struct ptnet_softc *sc); -static void ptnet_stop(struct ptnet_softc *sc); +static int ptnet_init_locked(struct ptnet_softc *sc); +static int ptnet_stop(struct ptnet_softc *sc); static void ptnet_start(struct ifnet *ifp); static int ptnet_media_change(struct ifnet *ifp); @@ -607,10 +607,10 @@ PTNET_CORE_LOCK(sc); if (ifp->if_flags & IFF_UP) { /* Network stack wants the iff to be up. */ - ptnet_init_locked(sc); + err = ptnet_init_locked(sc); } else { /* Network stack wants the iff to be down. */ - ptnet_stop(sc); + err = ptnet_stop(sc); } PTNET_CORE_UNLOCK(sc); @@ -621,29 +621,91 @@ return err; } -static void +static int ptnet_init_locked(struct ptnet_softc *sc) { struct ifnet *ifp = sc->ifp; + struct netmap_adapter *na_dr = &sc->ptna_dr.hwup.up; + int ret; device_printf(sc->dev, "%s\n", __func__); if (ifp->if_drv_flags & IFF_DRV_RUNNING) { - return; /* nothing to do */ + return 0; /* nothing to do */ + } + + netmap_update_config(na_dr); + + ret = netmap_mem_finalize(na_dr->nm_mem, na_dr); + if (ret) { + device_printf(sc->dev, "netmap_mem_finalize() failed\n"); + return ret; + } + + if (sc->backend_regifs == 0) { + ret = ptnet_nm_krings_create(na_dr); + if (ret) { + device_printf(sc->dev, "ptnet_nm_krings_create() " + "failed\n"); + goto err_mem_finalize; + } + + ret = netmap_mem_rings_create(na_dr); + if (ret) { + device_printf(sc->dev, "netmap_mem_rings_create() " + "failed\n"); + goto err_rings_create; + } + + ret = netmap_mem_get_lut(na_dr->nm_mem, &na_dr->na_lut); + if (ret) { + device_printf(sc->dev, "netmap_mem_get_lut() " + "failed\n"); + goto err_get_lut; + } } + + ret = ptnet_nm_register(na_dr, 1 /* on */); + if (ret) { + goto err_register; + } + + return 0; + +err_register: + memset(&na_dr->na_lut, 0, sizeof(na_dr->na_lut)); +err_get_lut: + netmap_mem_rings_delete(na_dr); +err_rings_create: + ptnet_nm_krings_delete(na_dr); +err_mem_finalize: + netmap_mem_deref(na_dr->nm_mem, na_dr); + + return ret; } /* To be called under core lock. */ -static void +static int ptnet_stop(struct ptnet_softc *sc) { struct ifnet *ifp = sc->ifp; + struct netmap_adapter *na_dr = &sc->ptna_dr.hwup.up; device_printf(sc->dev, "%s\n", __func__); if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) { - return; /* nothing to do */ + return 0; /* nothing to do */ + } + + ptnet_nm_register(na_dr, 0 /* off */); + + if (sc->backend_regifs == 0) { + netmap_mem_rings_delete(na_dr); + ptnet_nm_krings_delete(na_dr); } + netmap_mem_deref(na_dr->nm_mem, na_dr); + + return 0; } static void @@ -709,6 +771,8 @@ return 0; } +/* XXX krings create/delete and register functions should be shared + * with the Linux driver. */ static int ptnet_nm_krings_create(struct netmap_adapter *na) { From owner-svn-soc-all@freebsd.org Sat Jun 11 10:23:55 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 31663AEFAA0 for ; Sat, 11 Jun 2016 10:23:55 +0000 (UTC) (envelope-from litong@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 1E14229AA for ; Sat, 11 Jun 2016 10:23:55 +0000 (UTC) (envelope-from litong@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5BANsuQ086303 for ; Sat, 11 Jun 2016 10:23:54 GMT (envelope-from litong@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5BANrin086281 for svn-soc-all@FreeBSD.org; Sat, 11 Jun 2016 10:23:53 GMT (envelope-from litong@FreeBSD.org) Date: Sat, 11 Jun 2016 10:23:53 GMT Message-Id: <201606111023.u5BANrin086281@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to litong@FreeBSD.org using -f From: litong@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305103 - in soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve: . action MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jun 2016 10:23:55 -0000 Author: litong Date: Sat Jun 11 10:23:53 2016 New Revision: 305103 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305103 Log: add load_os action and its corresponding driver code Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/load_os.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/load_os.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/load_os.rb Sat Jun 11 06:42:34 2016 (r305102) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/load_os.rb Sat Jun 11 10:23:53 2016 (r305103) @@ -11,14 +11,19 @@ end def call(env) - @machine = env[:machine] - @driver = @machine.provider.driver - firmware = @machine.box.metadata[:firmware] - loader = @machine.box.metadata[:loader] - @driver.loader(loader) if firmware == 'bios' + machine = env[:machine] + load(machine) @app.call(env) end + private + + def load(machine) + driver = machine.provider.driver + firmware = machine.box.metadata[:firmware] + loader = machine.box.metadata[:loader] + driver.load(loader, machine) if firmware == 'bios' + end end end end Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb Sat Jun 11 06:42:34 2016 (r305102) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb Sat Jun 11 10:23:53 2016 (r305103) @@ -47,7 +47,44 @@ execute(false, @sudo, "ifconfig", bridge_name, "description", switch_name, "up") end - def loader(loader) + def load(loader, machine) + run_cmd = [] + case loader + when 'bhyveload' + run_cmd.push('bhyveload') + # Set autoboot, and memory and disk + run_cmd.push("-m").push("#{machine.config.memory}") + ######################################################### + # TBD: problem with disk name # + ######################################################### + run_cmd.push("-d").push("#{machine.box.directory.join('disk.img').to_s}") + run_cmd += %w(-e autoboot_delay=0) + when 'grub-bhyve' + command = execute(false, %w(which grub-bhyve)) + raise Errors::GrubBhyveNotInstalled if command.length == 0 + run_cmd.push(command) + run_cmd.push("-m").push("#{machine.box.directory.join('device.map').to_s}") + run_cmd.push("-M").push("#{machine.config.memory}") + # Maybe there should be some grub config in Vagrantfile, for now + # we just use this hd0,1 as default root and don't use -d -g + # argument + run_cmd += %w(-r hd0,1) + else + raise Errors::UnrecognizedLoader + end + + # Find an available nmdm device and add it as loader's -m argument + nmdm_num = 1 + while true + result = execute(false, %w(ls -l /dev/ | grep).push("nmdm#{nmdm_num}A")) + break if result.length == 0 + nmdm_num += 1 + end + run_cmd.push("-c").push("/dev/nmdm#{nmdm_num}A") + + vm_name = machine.box.name.gsub('/', '_') + run_cmd.push(vm_name) + execute(false, run_cmd) end def bhyve Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb Sat Jun 11 06:42:34 2016 (r305102) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb Sat Jun 11 10:23:53 2016 (r305103) @@ -22,6 +22,14 @@ class UnableToCreateBridge < VagrantError error_key(:unable_to_create_brighe) end + + class UnrecognizedLoader < VagrantError + error_key(:unrecognized_loader) + end + + class GrubBhyveNotinstalled < VagrantError + error_key(:grub_bhyve_not_installed) + end end end end From owner-svn-soc-all@freebsd.org Sat Jun 11 17:13:40 2016 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 159BEAEFF9D for ; Sat, 11 Jun 2016 17:13:40 +0000 (UTC) (envelope-from iateaca@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id EEBE724EA for ; Sat, 11 Jun 2016 17:13:39 +0000 (UTC) (envelope-from iateaca@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id u5BHDdtB047991 for ; Sat, 11 Jun 2016 17:13:39 GMT (envelope-from iateaca@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id u5BHDdOI047937 for svn-soc-all@FreeBSD.org; Sat, 11 Jun 2016 17:13:39 GMT (envelope-from iateaca@FreeBSD.org) Date: Sat, 11 Jun 2016 17:13:39 GMT Message-Id: <201606111713.u5BHDdOI047937@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to iateaca@FreeBSD.org using -f From: iateaca@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305108 - soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jun 2016 17:13:40 -0000 Author: iateaca Date: Sat Jun 11 17:13:38 2016 New Revision: 305108 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305108 Log: add one pin widget (Analog Line-out) to the hda codec configuration implement 3 configuration verbs: GET_CONFIGURATION_DEFAULT, GET_CONN_LIST_ENTRY, GET_PIN_WIDGET_CTRL M bhyve/hda_codec.c Modified: soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c Modified: soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c ============================================================================== --- soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c Sat Jun 11 14:46:49 2016 (r305107) +++ soc2016/iateaca/bhyve-hda-head/usr.sbin/bhyve/hda_codec.c Sat Jun 11 17:13:38 2016 (r305108) @@ -10,24 +10,35 @@ #define HDA_CODEC_ROOT_NID 0x00 #define HDA_CODEC_FG_NID 0x01 #define HDA_CODEC_AUDIO_OUTPUT_NID 0x02 +#define HDA_CODEC_PIN_OUTPUT_NID 0x03 #define HDA_CODEC_PARAMS_COUNT 0x14 +#define HDA_CODEC_CONN_LIST_COUNT 0x01 #define HDA_CODEC_RESPONSE_EX_UNSOL 0x10 #define HDA_CODEC_RESPONSE_EX_SOL 0x00 #define HDA_CODEC_SUPP_STREAM_FORMATS_PCM (1 << HDA_PARAM_SUPP_STREAM_FORMATS_PCM_SHIFT) #define HDA_CODEC_AUDIO_WCAP_OUTPUT (0x00 << HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_SHIFT) +#define HDA_CODEC_AUDIO_WCAP_PIN (0x04 << HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_SHIFT) +#define HDA_CODEC_AUDIO_WCAP_CONN_LIST (1 << HDA_PARAM_AUDIO_WIDGET_CAP_CONN_LIST_SHIFT) #define HDA_CODEC_AUDIO_WCAP_FORMAT_OVR (1 << HDA_PARAM_AUDIO_WIDGET_CAP_FORMAT_OVR_SHIFT) #define HDA_CODEC_AUDIO_WCAP_AMP_OVR (1 << HDA_PARAM_AUDIO_WIDGET_CAP_AMP_OVR_SHIFT) #define HDA_CODEC_AUDIO_WCAP_OUT_AMP (1 << HDA_PARAM_AUDIO_WIDGET_CAP_OUT_AMP_SHIFT) #define HDA_CODEC_AUDIO_WCAP_STEREO (1 << HDA_PARAM_AUDIO_WIDGET_CAP_STEREO_SHIFT) +#define HDA_CODEC_PIN_CAP_OUTPUT (1 << HDA_PARAM_PIN_CAP_OUTPUT_CAP_SHIFT) +#define HDA_CODEC_PIN_CAP_PRESENCE_DETECT (1 << HDA_PARAM_PIN_CAP_PRESENCE_DETECT_CAP_SHIFT) + #define HDA_CODEC_OUTPUT_AMP_CAP_MUTE_CAP (1 << HDA_PARAM_OUTPUT_AMP_CAP_MUTE_CAP_SHIFT) #define HDA_CODEC_OUTPUT_AMP_CAP_STEPSIZE (0x03 << HDA_PARAM_OUTPUT_AMP_CAP_STEPSIZE_SHIFT) #define HDA_CODEC_OUTPUT_AMP_CAP_NUMSTEPS (0x1f << HDA_PARAM_OUTPUT_AMP_CAP_NUMSTEPS_SHIFT) #define HDA_CODEC_OUTPUT_AMP_CAP_OFFSET (0x00 << HDA_PARAM_OUTPUT_AMP_CAP_OFFSET_SHIFT) +#define HDA_CODEC_PIN_SENSE_PRESENCE_PLUGGED (1 << 31) +#define HDA_CODEC_PIN_WIDGET_CTRL_OUT_ENABLE (1 << HDA_CMD_GET_PIN_WIDGET_CTRL_OUT_ENABLE_SHIFT) + +#define HDA_CONFIG_DEFAULTCONF_COLOR_BLACK (0x01 << HDA_CONFIG_DEFAULTCONF_COLOR_SHIFT) #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) @@ -40,6 +51,9 @@ uint32_t subsystem_id; uint32_t no_nodes; const uint32_t (*get_parameters)[HDA_CODEC_PARAMS_COUNT]; + const uint8_t (*conn_list)[HDA_CODEC_CONN_LIST_COUNT]; + const uint32_t *conf_default; + const uint8_t *pin_ctrl_default; }; /* @@ -63,7 +77,7 @@ [HDA_PARAM_SUB_NODE_COUNT] = 0x00010001, /* 1 Subnode, StartNid = 1 */ }, [HDA_CODEC_FG_NID] = { - [HDA_PARAM_SUB_NODE_COUNT] = 0x00020001, /* 1 Subnode, StartNid = 2 */ + [HDA_PARAM_SUB_NODE_COUNT] = 0x00020002, /* 2 Subnodes, StartNid = 2 */ [HDA_PARAM_FCT_GRP_TYPE] = HDA_PARAM_FCT_GRP_TYPE_NODE_TYPE_AUDIO, [HDA_PARAM_SUPP_PCM_SIZE_RATE] = (0x1f << 16) | 0x7ff, /* B8 - B32, 8.0 - 192.0kHz */ [HDA_PARAM_SUPP_STREAM_FORMATS] = HDA_CODEC_SUPP_STREAM_FORMATS_PCM, @@ -86,6 +100,33 @@ HDA_CODEC_OUTPUT_AMP_CAP_NUMSTEPS | HDA_CODEC_OUTPUT_AMP_CAP_OFFSET, }, + [HDA_CODEC_PIN_OUTPUT_NID] = { + [HDA_PARAM_AUDIO_WIDGET_CAP] = HDA_CODEC_AUDIO_WCAP_PIN | + HDA_CODEC_AUDIO_WCAP_CONN_LIST | + HDA_CODEC_AUDIO_WCAP_STEREO, + [HDA_PARAM_PIN_CAP] = HDA_CODEC_PIN_CAP_OUTPUT | + HDA_CODEC_PIN_CAP_PRESENCE_DETECT, + [HDA_PARAM_INPUT_AMP_CAP] = 0x00, /* None */ + [HDA_PARAM_CONN_LIST_LENGTH] = 0x01, + [HDA_PARAM_OUTPUT_AMP_CAP] = 0x00, /* None */ + }, +}; + +#define HDA_CODEC_NODES_COUNT (ARRAY_SIZE(hda_codec_parameters)) + +static const uint8_t hda_codec_conn_list[HDA_CODEC_NODES_COUNT][HDA_CODEC_CONN_LIST_COUNT] = { + [HDA_CODEC_PIN_OUTPUT_NID] = {0x02}, +}; + +static const uint32_t hda_codec_conf_default[HDA_CODEC_NODES_COUNT] = { + [HDA_CODEC_PIN_OUTPUT_NID] = HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_JACK | + HDA_CONFIG_DEFAULTCONF_DEVICE_LINE_OUT | + HDA_CONFIG_DEFAULTCONF_COLOR_BLACK | + (0x01 << HDA_CONFIG_DEFAULTCONF_ASSOCIATION_SHIFT), +}; + +static const uint8_t hda_codec_pin_ctrl_default[HDA_CODEC_NODES_COUNT] = { + [HDA_CODEC_PIN_OUTPUT_NID] = HDA_CODEC_PIN_WIDGET_CTRL_OUT_ENABLE, }; /* @@ -104,8 +145,11 @@ return -1; sc->subsystem_id = HDA_CODEC_SUBSYSTEM_ID; - sc->no_nodes = ARRAY_SIZE(hda_codec_parameters); + sc->no_nodes = HDA_CODEC_NODES_COUNT; sc->get_parameters = hda_codec_parameters; + sc->conn_list = hda_codec_conn_list; + sc->conf_default = hda_codec_conf_default; + sc->pin_ctrl_default = hda_codec_pin_ctrl_default; DPRINTF("HDA Codec nodes: %d\n", sc->no_nodes); hci->priv = sc; @@ -174,6 +218,21 @@ else DPRINTF("GET_PARAMETER(nid: %d) not described\n", nid); break; + case HDA_CMD_VERB_GET_CONN_LIST_ENTRY: + assert(nid < sc->no_nodes); + res = sc->conn_list[nid][0]; + break; + case HDA_CMD_VERB_GET_PIN_WIDGET_CTRL: + assert(nid < sc->no_nodes); + res = sc->pin_ctrl_default[nid]; + break; + case HDA_CMD_VERB_GET_PIN_SENSE: + res = HDA_CODEC_PIN_SENSE_PRESENCE_PLUGGED; + break; + case HDA_CMD_VERB_GET_CONFIGURATION_DEFAULT: + assert(nid < sc->no_nodes); + res = sc->conf_default[nid]; + break; case HDA_CMD_VERB_GET_SUBSYSTEM_ID: res = sc->subsystem_id; break; @@ -182,6 +241,7 @@ break; default: /* TODO - call a specific handler per node */ + DPRINTF("Unknown VERB: 0x%x\n", verb); break; }