1/***************************************************************************
2 *
3 * devinfo_ieee1394.c : IEEE 1394/FireWire devices
4 *
5 * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
6 * Use is subject to license terms.
7 *
8 * Licensed under the Academic Free License version 2.1
9 *
10 **************************************************************************/
11
12#pragma ident	"%Z%%M%	%I%	%E% SMI"
13
14#ifdef HAVE_CONFIG_H
15#  include <config.h>
16#endif
17
18#include <stdio.h>
19#include <string.h>
20#include <libdevinfo.h>
21#include <sys/types.h>
22#include <sys/mkdev.h>
23#include <sys/stat.h>
24
25#include "../osspec.h"
26#include "../logger.h"
27#include "../hald.h"
28#include "../hald_dbus.h"
29#include "../device_info.h"
30#include "../util.h"
31#include "../ids.h"
32#include "hotplug.h"
33#include "devinfo.h"
34#include "devinfo_ieee1394.h"
35
36HalDevice *devinfo_ieee1394_add(HalDevice *parent, di_node_t node, char *devfs_path, char *device_type);
37static HalDevice *devinfo_scsa1394_add(HalDevice *d, di_node_t node, gchar *devfs_path);
38
39DevinfoDevHandler devinfo_ieee1394_handler = {
40        devinfo_ieee1394_add,
41	NULL,
42	NULL,
43	NULL,
44	NULL,
45        NULL
46};
47
48HalDevice *
49devinfo_ieee1394_add(HalDevice *parent, di_node_t node, char *devfs_path, char *device_type)
50{
51	HalDevice *d = NULL;
52	char	*compat;
53	char	*driver_name;
54
55	/*
56	 * we distinguish 1394 devices by compatible name
57	 * starting with 'firewire'
58	 */
59	if ((di_compatible_names (node, &compat) < 1) ||
60	    (strncmp (compat, "firewire", sizeof ("firewire") - 1) != 0)) {
61		return (NULL);
62	}
63
64	if ((driver_name = di_driver_name (node)) == NULL) {
65		return (NULL);
66	}
67
68	if (strcmp (driver_name, "scsa1394") == 0) {
69		d = devinfo_scsa1394_add (parent, node, devfs_path);
70	}
71
72	return (d);
73}
74
75static HalDevice *
76devinfo_scsa1394_add(HalDevice *parent, di_node_t node, gchar *devfs_path)
77{
78	HalDevice *d = NULL;
79
80	d = hal_device_new ();
81
82	devinfo_set_default_properties (d, parent, node, devfs_path);
83	hal_device_property_set_string (d, "info.subsystem", "ieee1394");
84	hal_device_property_set_string (d, "info.product", "FireWire SBP-2 device");
85
86	devinfo_add_enqueue (d, devfs_path, &devinfo_ieee1394_handler);
87
88	return (d);
89}
90
91