aboutsummaryrefslogtreecommitdiff
path: root/libjava/classpath/lib/java/text/AttributedString$AttributeRange.class
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/lib/java/text/AttributedString$AttributeRange.class')
0 files changed, 0 insertions, 0 deletions
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
/*
 * Copyright (C) 2013 Michael Brown <mbrown@fensystems.co.uk>.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 * 02110-1301, USA.
 *
 * You can also choose to distribute this program under the terms of
 * the Unmodified Binary Distribution Licence (as given in the file
 * COPYING.UBDL), provided that you have satisfied its requirements.
 */

#include <stdio.h>
#include <getopt.h>
#include <ipxe/pci.h>
#include <ipxe/command.h>
#include <ipxe/parseopt.h>

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );

/** @file
 *
 * PCI commands
 *
 */

/** "pciscan" options */
struct pciscan_options {};

/** "pciscan" option list */
static struct option_descriptor pciscan_opts[] = {};

/** "pciscan" command descriptor */
static struct command_descriptor pciscan_cmd =
	COMMAND_DESC ( struct pciscan_options, pciscan_opts, 1, 1,
		       "<setting>" );

/**
 * "pciscan" command
 *
 * @v argc		Argument count
 * @v argv		Argument list
 * @ret rc		Return status code
 */
static int pciscan_exec ( int argc, char **argv ) {
	struct pciscan_options opts;
	struct named_setting setting;
	struct pci_device pci;
	unsigned long prev;
	uint32_t busdevfn;
	int len;
	int rc;

	/* Parse options */
	if ( ( rc = parse_options ( argc, argv, &pciscan_cmd, &opts ) ) != 0 )
		goto err_parse_options;

	/* Parse setting name */
	if ( ( rc = parse_autovivified_setting ( argv[optind],
						 &setting ) ) != 0 )
		goto err_parse_setting;

	/* Determine starting bus:dev.fn address */
	if ( ( len = fetchn_setting ( setting.settings, &setting.setting,
				      NULL, &setting.setting, &prev ) ) < 0 ) {
		/* Setting not yet defined: start searching from 00:00.0 */
		busdevfn = 0;
	} else {
		/* Setting is defined: start searching from next location */
		busdevfn = ( prev + 1 );
	}

	/* Find next existent PCI device */
	if ( ( rc = pci_find_next ( &pci, &busdevfn ) ) != 0 )
		goto err_find_next;

	/* Apply default type if necessary.  Use ":uint16" rather than
	 * ":busdevfn" to allow for easy inclusion within a
	 * "${pci/${location}.x.y}" constructed setting.
	 */
	if ( ! setting.setting.type )
		setting.setting.type = &setting_type_uint16;

	/* Store setting */
	if ( ( rc = storen_setting ( setting.settings, &setting.setting,
				     busdevfn ) ) != 0 ) {
		printf ( "Could not store \"%s\": %s\n",
			 setting.setting.name, strerror ( rc ) );
		goto err_store;
	}

 err_store:
 err_find_next:
 err_parse_setting:
 err_parse_options:
	return rc;
}

/** PCI commands */
struct command pci_commands[] __command = {
	{
		.name = "pciscan",
		.exec = pciscan_exec,
	},