12912Sartem /***************************************************************************
22912Sartem *
32912Sartem * devinfo_ieee1394.c : IEEE 1394/FireWire devices
42912Sartem *
5*6112Sqz150045 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
62912Sartem * Use is subject to license terms.
72912Sartem *
82912Sartem * Licensed under the Academic Free License version 2.1
92912Sartem *
102912Sartem **************************************************************************/
112912Sartem
122916Sartem #pragma ident "%Z%%M% %I% %E% SMI"
132916Sartem
143121Sartem #ifdef HAVE_CONFIG_H
153121Sartem # include <config.h>
163121Sartem #endif
173121Sartem
182912Sartem #include <stdio.h>
192912Sartem #include <string.h>
202912Sartem #include <libdevinfo.h>
212912Sartem #include <sys/types.h>
222912Sartem #include <sys/mkdev.h>
232912Sartem #include <sys/stat.h>
242912Sartem
252912Sartem #include "../osspec.h"
262912Sartem #include "../logger.h"
272912Sartem #include "../hald.h"
282912Sartem #include "../hald_dbus.h"
292912Sartem #include "../device_info.h"
302912Sartem #include "../util.h"
312912Sartem #include "../ids.h"
322912Sartem #include "hotplug.h"
332912Sartem #include "devinfo.h"
342912Sartem #include "devinfo_ieee1394.h"
352912Sartem
362912Sartem HalDevice *devinfo_ieee1394_add(HalDevice *parent, di_node_t node, char *devfs_path, char *device_type);
372912Sartem static HalDevice *devinfo_scsa1394_add(HalDevice *d, di_node_t node, gchar *devfs_path);
382912Sartem
392912Sartem DevinfoDevHandler devinfo_ieee1394_handler = {
402912Sartem devinfo_ieee1394_add,
412912Sartem NULL,
422912Sartem NULL,
432912Sartem NULL,
442912Sartem NULL,
452912Sartem NULL
462912Sartem };
472912Sartem
482912Sartem HalDevice *
devinfo_ieee1394_add(HalDevice * parent,di_node_t node,char * devfs_path,char * device_type)492912Sartem devinfo_ieee1394_add(HalDevice *parent, di_node_t node, char *devfs_path, char *device_type)
502912Sartem {
512912Sartem HalDevice *d = NULL;
522912Sartem char *compat;
532912Sartem char *driver_name;
542912Sartem
552912Sartem /*
562912Sartem * we distinguish 1394 devices by compatible name
572912Sartem * starting with 'firewire'
582912Sartem */
592912Sartem if ((di_compatible_names (node, &compat) < 1) ||
602912Sartem (strncmp (compat, "firewire", sizeof ("firewire") - 1) != 0)) {
612912Sartem return (NULL);
622912Sartem }
632912Sartem
642912Sartem if ((driver_name = di_driver_name (node)) == NULL) {
652912Sartem return (NULL);
662912Sartem }
672912Sartem
682912Sartem if (strcmp (driver_name, "scsa1394") == 0) {
692912Sartem d = devinfo_scsa1394_add (parent, node, devfs_path);
702912Sartem }
712912Sartem
722912Sartem return (d);
732912Sartem }
742912Sartem
752912Sartem static HalDevice *
devinfo_scsa1394_add(HalDevice * parent,di_node_t node,gchar * devfs_path)762912Sartem devinfo_scsa1394_add(HalDevice *parent, di_node_t node, gchar *devfs_path)
772912Sartem {
782912Sartem HalDevice *d = NULL;
792912Sartem
802912Sartem d = hal_device_new ();
812912Sartem
822912Sartem devinfo_set_default_properties (d, parent, node, devfs_path);
83*6112Sqz150045 hal_device_property_set_string (d, "info.subsystem", "ieee1394");
842912Sartem hal_device_property_set_string (d, "info.product", "FireWire SBP-2 device");
852912Sartem
862912Sartem devinfo_add_enqueue (d, devfs_path, &devinfo_ieee1394_handler);
872912Sartem
882912Sartem return (d);
892912Sartem }
902912Sartem
91