Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6: ieee1394: fix host device registering when nodemgr disabled ieee1394: video1394: DMA fix ieee1394: raw1394: prevent unloading of low-level driver ieee1394: dv1394: tidy up card removal ieee1394: dv1394: fix CardBus card ejection ieee1394: sbp2: lower block queue alignment requirement ieee1394: sbp2: remove bogus "emulated" host flag ieee1394: save one word in struct hpsb_host ieee1394: restore config ROM when resuming ieee1394: ohci1394: drop pcmcia-cs compatibility code ieee1394: nodemgr: check info_length in ROM header earlier the scheduled IEEE1394_OUI_DB removal the scheduled IEEE1394_EXPORT_FULL_API removal ieee1394: sbp2: use a better wildcard for blacklist Add PCI class ID for firewire OHCI controllers. ieee1394: modified csr1212_key_id_type_map to support lisight
This commit is contained in:
commit
64106104dd
@ -50,22 +50,6 @@ Who: Dan Dennedy <dan@dennedy.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: ieee1394 core's unused exports (CONFIG_IEEE1394_EXPORT_FULL_API)
|
||||
When: January 2007
|
||||
Why: There are no projects known to use these exported symbols, except
|
||||
dfg1394 (uses one symbol whose functionality is core-internal now).
|
||||
Who: Stefan Richter <stefanr@s5r6.in-berlin.de>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: ieee1394's *_oui sysfs attributes (CONFIG_IEEE1394_OUI_DB)
|
||||
When: January 2007
|
||||
Files: drivers/ieee1394/: oui.db, oui2c.sh
|
||||
Why: big size, little value
|
||||
Who: Stefan Richter <stefanr@s5r6.in-berlin.de>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: Video4Linux API 1 ioctls and video_decoder.h from Video devices.
|
||||
When: December 2006
|
||||
Why: V4L1 AP1 was replaced by V4L2 API. during migration from 2.4 to 2.6
|
||||
|
1
drivers/ieee1394/.gitignore
vendored
1
drivers/ieee1394/.gitignore
vendored
@ -1 +0,0 @@
|
||||
oui.c
|
@ -35,20 +35,6 @@ config IEEE1394_VERBOSEDEBUG
|
||||
Say Y if you really want or need the debugging output, everyone
|
||||
else says N.
|
||||
|
||||
config IEEE1394_OUI_DB
|
||||
bool "OUI Database built-in (deprecated)"
|
||||
depends on IEEE1394
|
||||
help
|
||||
If you say Y here, then an OUI list (vendor unique ID's) will be
|
||||
compiled into the ieee1394 module. This doesn't really do much
|
||||
except being able to display the vendor of a hardware node. The
|
||||
downside is that it adds about 300k to the size of the module,
|
||||
or kernel (depending on whether you compile ieee1394 as a
|
||||
module, or static in the kernel).
|
||||
|
||||
This option is not needed for userspace programs like gscanbus
|
||||
to show this information.
|
||||
|
||||
config IEEE1394_EXTRA_CONFIG_ROMS
|
||||
bool "Build in extra config rom entries for certain functionality"
|
||||
depends on IEEE1394
|
||||
@ -66,13 +52,6 @@ config IEEE1394_CONFIG_ROM_IP1394
|
||||
with MacOSX and WinXP IP-over-1394), enable this option and the
|
||||
eth1394 option below.
|
||||
|
||||
config IEEE1394_EXPORT_FULL_API
|
||||
bool "Export all symbols of ieee1394's API (deprecated)"
|
||||
depends on IEEE1394
|
||||
default n
|
||||
help
|
||||
This option will be removed soon. Don't worry, say N.
|
||||
|
||||
comment "Device Drivers"
|
||||
depends on IEEE1394
|
||||
|
||||
|
@ -5,9 +5,6 @@
|
||||
ieee1394-objs := ieee1394_core.o ieee1394_transactions.o hosts.o \
|
||||
highlevel.o csr.o nodemgr.o dma.o iso.o \
|
||||
csr1212.o config_roms.o
|
||||
ifdef CONFIG_IEEE1394_OUI_DB
|
||||
ieee1394-objs += oui.o
|
||||
endif
|
||||
|
||||
obj-$(CONFIG_IEEE1394) += ieee1394.o
|
||||
obj-$(CONFIG_IEEE1394_PCILYNX) += pcilynx.o
|
||||
@ -18,10 +15,3 @@ obj-$(CONFIG_IEEE1394_SBP2) += sbp2.o
|
||||
obj-$(CONFIG_IEEE1394_DV1394) += dv1394.o
|
||||
obj-$(CONFIG_IEEE1394_ETH1394) += eth1394.o
|
||||
|
||||
quiet_cmd_oui2c = OUI2C $@
|
||||
cmd_oui2c = $(CONFIG_SHELL) $(srctree)/$(src)/oui2c.sh < $< > $@
|
||||
|
||||
targets := oui.c
|
||||
$(obj)/oui.o: $(obj)/oui.c
|
||||
$(obj)/oui.c: $(src)/oui.db $(src)/oui2c.sh FORCE
|
||||
$(call if_changed,oui2c)
|
||||
|
@ -47,14 +47,14 @@
|
||||
#define __D (1 << CSR1212_KV_TYPE_DIRECTORY)
|
||||
#define __L (1 << CSR1212_KV_TYPE_LEAF)
|
||||
static const u_int8_t csr1212_key_id_type_map[0x30] = {
|
||||
0, /* Reserved */
|
||||
__C, /* used by Apple iSight */
|
||||
__D | __L, /* Descriptor */
|
||||
__I | __D | __L, /* Bus_Dependent_Info */
|
||||
__I | __D | __L, /* Vendor */
|
||||
__I, /* Hardware_Version */
|
||||
0, 0, /* Reserved */
|
||||
__D | __L, /* Module */
|
||||
0, 0, 0, 0, /* Reserved */
|
||||
__D | __L | __I, /* Module */
|
||||
__I, 0, 0, 0, /* used by Apple iSight, Reserved */
|
||||
__I, /* Node_Capabilities */
|
||||
__L, /* EUI_64 */
|
||||
0, 0, 0, /* Reserved */
|
||||
@ -1234,6 +1234,12 @@ static int csr1212_parse_bus_info_block(struct csr1212_csr *csr)
|
||||
csr->private);
|
||||
if (ret != CSR1212_SUCCESS)
|
||||
return ret;
|
||||
|
||||
/* check ROM header's info_length */
|
||||
if (i == 0 &&
|
||||
CSR1212_BE32_TO_CPU(csr->cache_head->data[0]) >> 24 !=
|
||||
bytes_to_quads(csr->bus_info_len) - 1)
|
||||
return CSR1212_EINVAL;
|
||||
}
|
||||
|
||||
bi = (struct csr1212_bus_info_block_img*)csr->cache_head->data;
|
||||
@ -1250,9 +1256,6 @@ static int csr1212_parse_bus_info_block(struct csr1212_csr *csr)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (bytes_to_quads(csr->bus_info_len - sizeof(csr1212_quad_t)) != bi->length)
|
||||
return CSR1212_EINVAL;
|
||||
|
||||
#if 0
|
||||
/* Apparently there are too many differnt wrong implementations of the
|
||||
* CRC algorithm that verifying them is moot. */
|
||||
|
@ -2255,49 +2255,37 @@ static int dv1394_init(struct ti_ohci *ohci, enum pal_or_ntsc format, enum modes
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void dv1394_un_init(struct video_card *video)
|
||||
static void dv1394_remove_host(struct hpsb_host *host)
|
||||
{
|
||||
/* obviously nobody has the driver open at this point */
|
||||
do_dv1394_shutdown(video, 1);
|
||||
kfree(video);
|
||||
}
|
||||
|
||||
|
||||
static void dv1394_remove_host (struct hpsb_host *host)
|
||||
{
|
||||
struct video_card *video;
|
||||
struct video_card *video, *tmp_video;
|
||||
unsigned long flags;
|
||||
int id = host->id;
|
||||
int found_ohci_card = 0;
|
||||
|
||||
/* We only work with the OHCI-1394 driver */
|
||||
if (strcmp(host->driver->name, OHCI1394_DRIVER_NAME))
|
||||
return;
|
||||
|
||||
/* find the corresponding video_cards */
|
||||
do {
|
||||
struct video_card *tmp_vid;
|
||||
|
||||
video = NULL;
|
||||
|
||||
spin_lock_irqsave(&dv1394_cards_lock, flags);
|
||||
list_for_each_entry(tmp_vid, &dv1394_cards, list) {
|
||||
if ((tmp_vid->id >> 2) == id) {
|
||||
list_del(&tmp_vid->list);
|
||||
video = tmp_vid;
|
||||
list_for_each_entry(tmp_video, &dv1394_cards, list) {
|
||||
if ((tmp_video->id >> 2) == host->id) {
|
||||
list_del(&tmp_video->list);
|
||||
video = tmp_video;
|
||||
found_ohci_card = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&dv1394_cards_lock, flags);
|
||||
|
||||
if (video)
|
||||
dv1394_un_init(video);
|
||||
} while (video != NULL);
|
||||
if (video) {
|
||||
do_dv1394_shutdown(video, 1);
|
||||
kfree(video);
|
||||
}
|
||||
} while (video);
|
||||
|
||||
class_device_destroy(hpsb_protocol_class,
|
||||
MKDEV(IEEE1394_MAJOR, IEEE1394_MINOR_BLOCK_DV1394 * 16 + (id<<2)));
|
||||
if (found_ohci_card)
|
||||
class_device_destroy(hpsb_protocol_class, MKDEV(IEEE1394_MAJOR,
|
||||
IEEE1394_MINOR_BLOCK_DV1394 * 16 + (host->id << 2)));
|
||||
}
|
||||
|
||||
static void dv1394_add_host (struct hpsb_host *host)
|
||||
static void dv1394_add_host(struct hpsb_host *host)
|
||||
{
|
||||
struct ti_ohci *ohci;
|
||||
int id = host->id;
|
||||
|
@ -190,14 +190,19 @@ int hpsb_add_host(struct hpsb_host *host)
|
||||
{
|
||||
if (hpsb_default_host_entry(host))
|
||||
return -ENOMEM;
|
||||
|
||||
hpsb_add_extra_config_roms(host);
|
||||
|
||||
highlevel_add_host(host);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void hpsb_resume_host(struct hpsb_host *host)
|
||||
{
|
||||
if (host->driver->set_hw_config_rom)
|
||||
host->driver->set_hw_config_rom(host,
|
||||
host->csr.rom->bus_info_data);
|
||||
host->driver->devctl(host, RESET_BUS, SHORT_RESET);
|
||||
}
|
||||
|
||||
void hpsb_remove_host(struct hpsb_host *host)
|
||||
{
|
||||
host->is_shutdown = 1;
|
||||
@ -206,9 +211,7 @@ void hpsb_remove_host(struct hpsb_host *host)
|
||||
flush_scheduled_work();
|
||||
|
||||
host->driver = &dummy_driver;
|
||||
|
||||
highlevel_remove_host(host);
|
||||
|
||||
hpsb_remove_extra_config_roms(host);
|
||||
|
||||
class_device_unregister(&host->class_dev);
|
||||
|
@ -61,9 +61,9 @@ struct hpsb_host {
|
||||
struct device device;
|
||||
struct class_device class_dev;
|
||||
|
||||
int update_config_rom;
|
||||
struct delayed_work delayed_reset;
|
||||
unsigned int config_roms;
|
||||
unsigned config_roms:31;
|
||||
unsigned update_config_rom:1;
|
||||
|
||||
struct list_head addr_space;
|
||||
u64 low_addr_space; /* upper bound of physical DMA area */
|
||||
@ -200,7 +200,8 @@ struct hpsb_host_driver {
|
||||
struct hpsb_host *hpsb_alloc_host(struct hpsb_host_driver *drv, size_t extra,
|
||||
struct device *dev);
|
||||
int hpsb_add_host(struct hpsb_host *host);
|
||||
void hpsb_remove_host(struct hpsb_host *h);
|
||||
void hpsb_resume_host(struct hpsb_host *host);
|
||||
void hpsb_remove_host(struct hpsb_host *host);
|
||||
|
||||
/* Updates the configuration rom image of a host. rom_version must be the
|
||||
* current version, otherwise it will fail with return value -1. If this
|
||||
|
@ -1178,6 +1178,7 @@ module_exit(ieee1394_cleanup);
|
||||
/** hosts.c **/
|
||||
EXPORT_SYMBOL(hpsb_alloc_host);
|
||||
EXPORT_SYMBOL(hpsb_add_host);
|
||||
EXPORT_SYMBOL(hpsb_resume_host);
|
||||
EXPORT_SYMBOL(hpsb_remove_host);
|
||||
EXPORT_SYMBOL(hpsb_update_config_rom_image);
|
||||
|
||||
@ -1195,10 +1196,6 @@ EXPORT_SYMBOL(hpsb_selfid_complete);
|
||||
EXPORT_SYMBOL(hpsb_packet_sent);
|
||||
EXPORT_SYMBOL(hpsb_packet_received);
|
||||
EXPORT_SYMBOL_GPL(hpsb_disable_irm);
|
||||
#ifdef CONFIG_IEEE1394_EXPORT_FULL_API
|
||||
EXPORT_SYMBOL(hpsb_send_phy_config);
|
||||
EXPORT_SYMBOL(hpsb_send_packet_and_wait);
|
||||
#endif
|
||||
|
||||
/** ieee1394_transactions.c **/
|
||||
EXPORT_SYMBOL(hpsb_get_tlabel);
|
||||
@ -1229,20 +1226,12 @@ EXPORT_SYMBOL(hpsb_set_hostinfo_key);
|
||||
EXPORT_SYMBOL(hpsb_get_hostinfo_bykey);
|
||||
EXPORT_SYMBOL(hpsb_set_hostinfo);
|
||||
EXPORT_SYMBOL(highlevel_host_reset);
|
||||
#ifdef CONFIG_IEEE1394_EXPORT_FULL_API
|
||||
EXPORT_SYMBOL(highlevel_add_host);
|
||||
EXPORT_SYMBOL(highlevel_remove_host);
|
||||
#endif
|
||||
|
||||
/** nodemgr.c **/
|
||||
EXPORT_SYMBOL(hpsb_node_fill_packet);
|
||||
EXPORT_SYMBOL(hpsb_node_write);
|
||||
EXPORT_SYMBOL(__hpsb_register_protocol);
|
||||
EXPORT_SYMBOL(hpsb_unregister_protocol);
|
||||
#ifdef CONFIG_IEEE1394_EXPORT_FULL_API
|
||||
EXPORT_SYMBOL(ieee1394_bus_type);
|
||||
EXPORT_SYMBOL(nodemgr_for_each_host);
|
||||
#endif
|
||||
|
||||
/** csr.c **/
|
||||
EXPORT_SYMBOL(hpsb_update_config_rom);
|
||||
@ -1287,13 +1276,3 @@ EXPORT_SYMBOL(csr1212_read);
|
||||
EXPORT_SYMBOL(csr1212_parse_keyval);
|
||||
EXPORT_SYMBOL(_csr1212_read_keyval);
|
||||
EXPORT_SYMBOL(_csr1212_destroy_keyval);
|
||||
#ifdef CONFIG_IEEE1394_EXPORT_FULL_API
|
||||
EXPORT_SYMBOL(csr1212_create_csr);
|
||||
EXPORT_SYMBOL(csr1212_init_local_csr);
|
||||
EXPORT_SYMBOL(csr1212_new_immediate);
|
||||
EXPORT_SYMBOL(csr1212_associate_keyval);
|
||||
EXPORT_SYMBOL(csr1212_new_string_descriptor_leaf);
|
||||
EXPORT_SYMBOL(csr1212_destroy_csr);
|
||||
EXPORT_SYMBOL(csr1212_generate_csr_image);
|
||||
EXPORT_SYMBOL(csr1212_parse_csr);
|
||||
#endif
|
||||
|
@ -41,22 +41,6 @@ struct nodemgr_csr_info {
|
||||
};
|
||||
|
||||
|
||||
static char *nodemgr_find_oui_name(int oui)
|
||||
{
|
||||
#ifdef CONFIG_IEEE1394_OUI_DB
|
||||
extern struct oui_list_struct {
|
||||
int oui;
|
||||
char *name;
|
||||
} oui_list[];
|
||||
int i;
|
||||
|
||||
for (i = 0; oui_list[i].name; i++)
|
||||
if (oui_list[i].oui == oui)
|
||||
return oui_list[i].name;
|
||||
#endif
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Correct the speed map entry. This is necessary
|
||||
* - for nodes with link speed < phy speed,
|
||||
@ -274,7 +258,6 @@ static struct device_driver nodemgr_mid_layer_driver = {
|
||||
struct device nodemgr_dev_template_host = {
|
||||
.bus = &ieee1394_bus_type,
|
||||
.release = nodemgr_release_host,
|
||||
.driver = &nodemgr_mid_layer_driver,
|
||||
};
|
||||
|
||||
|
||||
@ -473,11 +456,9 @@ fw_attr(ne, struct node_entry, nodeid, unsigned int, "0x%04x\n")
|
||||
|
||||
fw_attr(ne, struct node_entry, vendor_id, unsigned int, "0x%06x\n")
|
||||
fw_attr_td(ne, struct node_entry, vendor_name_kv)
|
||||
fw_attr(ne, struct node_entry, vendor_oui, const char *, "%s\n")
|
||||
|
||||
fw_attr(ne, struct node_entry, guid, unsigned long long, "0x%016Lx\n")
|
||||
fw_attr(ne, struct node_entry, guid_vendor_id, unsigned int, "0x%06x\n")
|
||||
fw_attr(ne, struct node_entry, guid_vendor_oui, const char *, "%s\n")
|
||||
fw_attr(ne, struct node_entry, in_limbo, int, "%d\n");
|
||||
|
||||
static struct device_attribute *const fw_ne_attrs[] = {
|
||||
@ -503,7 +484,6 @@ fw_attr(ud, struct unit_directory, model_id, unsigned int, "0x%06x\n")
|
||||
fw_attr(ud, struct unit_directory, specifier_id, unsigned int, "0x%06x\n")
|
||||
fw_attr(ud, struct unit_directory, version, unsigned int, "0x%06x\n")
|
||||
fw_attr_td(ud, struct unit_directory, vendor_name_kv)
|
||||
fw_attr(ud, struct unit_directory, vendor_oui, const char *, "%s\n")
|
||||
fw_attr_td(ud, struct unit_directory, model_name_kv)
|
||||
|
||||
static struct device_attribute *const fw_ud_attrs[] = {
|
||||
@ -865,7 +845,6 @@ static struct node_entry *nodemgr_create_node(octlet_t guid, struct csr1212_csr
|
||||
|
||||
ne->guid = guid;
|
||||
ne->guid_vendor_id = (guid >> 40) & 0xffffff;
|
||||
ne->guid_vendor_oui = nodemgr_find_oui_name(ne->guid_vendor_id);
|
||||
ne->csr = csr;
|
||||
|
||||
memcpy(&ne->device, &nodemgr_dev_template_ne,
|
||||
@ -885,9 +864,6 @@ static struct node_entry *nodemgr_create_node(octlet_t guid, struct csr1212_csr
|
||||
goto fail_classdevreg;
|
||||
get_device(&ne->device);
|
||||
|
||||
if (ne->guid_vendor_oui &&
|
||||
device_create_file(&ne->device, &dev_attr_ne_guid_vendor_oui))
|
||||
goto fail_addoiu;
|
||||
nodemgr_create_ne_dev_files(ne);
|
||||
|
||||
nodemgr_update_bus_options(ne);
|
||||
@ -898,8 +874,6 @@ static struct node_entry *nodemgr_create_node(octlet_t guid, struct csr1212_csr
|
||||
|
||||
return ne;
|
||||
|
||||
fail_addoiu:
|
||||
put_device(&ne->device);
|
||||
fail_classdevreg:
|
||||
device_unregister(&ne->device);
|
||||
fail_devreg:
|
||||
@ -975,15 +949,10 @@ static void nodemgr_register_device(struct node_entry *ne,
|
||||
goto fail_classdevreg;
|
||||
get_device(&ud->device);
|
||||
|
||||
if (ud->vendor_oui &&
|
||||
device_create_file(&ud->device, &dev_attr_ud_vendor_oui))
|
||||
goto fail_addoui;
|
||||
nodemgr_create_ud_dev_files(ud);
|
||||
|
||||
return;
|
||||
|
||||
fail_addoui:
|
||||
put_device(&ud->device);
|
||||
fail_classdevreg:
|
||||
device_unregister(&ud->device);
|
||||
fail_devreg:
|
||||
@ -1020,9 +989,6 @@ static struct unit_directory *nodemgr_process_unit_directory
|
||||
if (kv->key.type == CSR1212_KV_TYPE_IMMEDIATE) {
|
||||
ud->vendor_id = kv->value.immediate;
|
||||
ud->flags |= UNIT_DIRECTORY_VENDOR_ID;
|
||||
|
||||
if (ud->vendor_id)
|
||||
ud->vendor_oui = nodemgr_find_oui_name(ud->vendor_id);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -1153,9 +1119,6 @@ static void nodemgr_process_root_directory(struct host_info *hi, struct node_ent
|
||||
switch (kv->key.id) {
|
||||
case CSR1212_KV_ID_VENDOR:
|
||||
ne->vendor_id = kv->value.immediate;
|
||||
|
||||
if (ne->vendor_id)
|
||||
ne->vendor_oui = nodemgr_find_oui_name(ne->vendor_id);
|
||||
break;
|
||||
|
||||
case CSR1212_KV_ID_NODE_CAPABILITIES:
|
||||
@ -1183,9 +1146,6 @@ static void nodemgr_process_root_directory(struct host_info *hi, struct node_ent
|
||||
last_key_id = kv->key.id;
|
||||
}
|
||||
|
||||
if (ne->vendor_oui &&
|
||||
device_create_file(&ne->device, &dev_attr_ne_vendor_oui))
|
||||
goto fail;
|
||||
if (ne->vendor_name_kv &&
|
||||
device_create_file(&ne->device, &dev_attr_ne_vendor_name_kv))
|
||||
goto fail;
|
||||
@ -1889,22 +1849,31 @@ int init_ieee1394_nodemgr(void)
|
||||
|
||||
error = class_register(&nodemgr_ne_class);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
goto fail_ne;
|
||||
error = class_register(&nodemgr_ud_class);
|
||||
if (error) {
|
||||
class_unregister(&nodemgr_ne_class);
|
||||
return error;
|
||||
}
|
||||
if (error)
|
||||
goto fail_ud;
|
||||
error = driver_register(&nodemgr_mid_layer_driver);
|
||||
if (error)
|
||||
goto fail_ml;
|
||||
/* This driver is not used if nodemgr is off (disable_nodemgr=1). */
|
||||
nodemgr_dev_template_host.driver = &nodemgr_mid_layer_driver;
|
||||
|
||||
hpsb_register_highlevel(&nodemgr_highlevel);
|
||||
return 0;
|
||||
|
||||
fail_ml:
|
||||
class_unregister(&nodemgr_ud_class);
|
||||
fail_ud:
|
||||
class_unregister(&nodemgr_ne_class);
|
||||
fail_ne:
|
||||
return error;
|
||||
}
|
||||
|
||||
void cleanup_ieee1394_nodemgr(void)
|
||||
{
|
||||
hpsb_unregister_highlevel(&nodemgr_highlevel);
|
||||
|
||||
driver_unregister(&nodemgr_mid_layer_driver);
|
||||
class_unregister(&nodemgr_ud_class);
|
||||
class_unregister(&nodemgr_ne_class);
|
||||
}
|
||||
|
@ -70,7 +70,6 @@ struct unit_directory {
|
||||
|
||||
quadlet_t vendor_id;
|
||||
struct csr1212_keyval *vendor_name_kv;
|
||||
const char *vendor_oui;
|
||||
|
||||
quadlet_t model_id;
|
||||
struct csr1212_keyval *model_name_kv;
|
||||
@ -93,7 +92,6 @@ struct unit_directory {
|
||||
struct node_entry {
|
||||
u64 guid; /* GUID of this node */
|
||||
u32 guid_vendor_id; /* Top 24bits of guid */
|
||||
const char *guid_vendor_oui; /* OUI name of guid vendor id */
|
||||
|
||||
struct hpsb_host *host; /* Host this node is attached to */
|
||||
nodeid_t nodeid; /* NodeID */
|
||||
@ -104,7 +102,6 @@ struct node_entry {
|
||||
/* The following is read from the config rom */
|
||||
u32 vendor_id;
|
||||
struct csr1212_keyval *vendor_name_kv;
|
||||
const char *vendor_oui;
|
||||
|
||||
u32 capabilities;
|
||||
|
||||
|
@ -3281,14 +3281,11 @@ static int __devinit ohci1394_pci_probe(struct pci_dev *dev,
|
||||
PRINT(KERN_WARNING, "PCI resource length of 0x%llx too small!",
|
||||
(unsigned long long)pci_resource_len(dev, 0));
|
||||
|
||||
/* Seems PCMCIA handles this internally. Not sure why. Seems
|
||||
* pretty bogus to force a driver to special case this. */
|
||||
#ifndef PCMCIA
|
||||
if (!request_mem_region (ohci_base, OHCI1394_REGISTER_SIZE, OHCI1394_DRIVER_NAME))
|
||||
if (!request_mem_region(ohci_base, OHCI1394_REGISTER_SIZE,
|
||||
OHCI1394_DRIVER_NAME))
|
||||
FAIL(-ENOMEM, "MMIO resource (0x%llx - 0x%llx) unavailable",
|
||||
(unsigned long long)ohci_base,
|
||||
(unsigned long long)ohci_base + OHCI1394_REGISTER_SIZE);
|
||||
#endif
|
||||
ohci->init_state = OHCI_INIT_HAVE_MEM_REGION;
|
||||
|
||||
ohci->registers = ioremap(ohci_base, OHCI1394_REGISTER_SIZE);
|
||||
@ -3509,10 +3506,8 @@ static void ohci1394_pci_remove(struct pci_dev *pdev)
|
||||
iounmap(ohci->registers);
|
||||
|
||||
case OHCI_INIT_HAVE_MEM_REGION:
|
||||
#ifndef PCMCIA
|
||||
release_mem_region(pci_resource_start(ohci->dev, 0),
|
||||
OHCI1394_REGISTER_SIZE);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PPC_PMAC
|
||||
/* On UniNorth, power down the cable and turn off the chip clock
|
||||
@ -3541,9 +3536,6 @@ static int ohci1394_pci_suspend(struct pci_dev *pdev, pm_message_t state)
|
||||
int err;
|
||||
struct ti_ohci *ohci = pci_get_drvdata(pdev);
|
||||
|
||||
printk(KERN_INFO "%s does not fully support suspend and resume yet\n",
|
||||
OHCI1394_DRIVER_NAME);
|
||||
|
||||
if (!ohci) {
|
||||
printk(KERN_ERR "%s: tried to suspend nonexisting host\n",
|
||||
OHCI1394_DRIVER_NAME);
|
||||
@ -3630,15 +3622,14 @@ static int ohci1394_pci_resume(struct pci_dev *pdev)
|
||||
mdelay(50);
|
||||
ohci_initialize(ohci);
|
||||
|
||||
hpsb_resume_host(ohci->host);
|
||||
return 0;
|
||||
}
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
#define PCI_CLASS_FIREWIRE_OHCI ((PCI_CLASS_SERIAL_FIREWIRE << 8) | 0x10)
|
||||
|
||||
static struct pci_device_id ohci1394_pci_tbl[] = {
|
||||
{
|
||||
.class = PCI_CLASS_FIREWIRE_OHCI,
|
||||
.class = PCI_CLASS_SERIAL_FIREWIRE_OHCI,
|
||||
.class_mask = PCI_ANY_ID,
|
||||
.vendor = PCI_ANY_ID,
|
||||
.device = PCI_ANY_ID,
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,22 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
cat <<EOF
|
||||
/* Generated file for OUI database */
|
||||
|
||||
|
||||
#ifdef CONFIG_IEEE1394_OUI_DB
|
||||
struct oui_list_struct {
|
||||
int oui;
|
||||
char *name;
|
||||
} oui_list[] = {
|
||||
EOF
|
||||
|
||||
while read oui name; do
|
||||
echo " { 0x$oui, \"$name\" },"
|
||||
done
|
||||
|
||||
cat <<EOF
|
||||
};
|
||||
|
||||
#endif /* CONFIG_IEEE1394_OUI_DB */
|
||||
EOF
|
@ -636,27 +636,32 @@ static int state_initialized(struct file_info *fi, struct pending_request *req)
|
||||
|
||||
case RAW1394_REQ_SET_CARD:
|
||||
spin_lock_irqsave(&host_info_lock, flags);
|
||||
if (req->req.misc < host_count) {
|
||||
list_for_each_entry(hi, &host_info_list, list) {
|
||||
if (!req->req.misc--)
|
||||
break;
|
||||
}
|
||||
get_device(&hi->host->device); // XXX Need to handle failure case
|
||||
list_add_tail(&fi->list, &hi->file_info_list);
|
||||
fi->host = hi->host;
|
||||
fi->state = connected;
|
||||
|
||||
req->req.error = RAW1394_ERROR_NONE;
|
||||
req->req.generation = get_hpsb_generation(fi->host);
|
||||
req->req.misc = (fi->host->node_id << 16)
|
||||
| fi->host->node_count;
|
||||
if (fi->protocol_version > 3) {
|
||||
req->req.misc |=
|
||||
NODEID_TO_NODE(fi->host->irm_id) << 8;
|
||||
}
|
||||
} else {
|
||||
if (req->req.misc >= host_count) {
|
||||
req->req.error = RAW1394_ERROR_INVALID_ARG;
|
||||
goto out_set_card;
|
||||
}
|
||||
list_for_each_entry(hi, &host_info_list, list)
|
||||
if (!req->req.misc--)
|
||||
break;
|
||||
get_device(&hi->host->device); /* FIXME handle failure case */
|
||||
list_add_tail(&fi->list, &hi->file_info_list);
|
||||
|
||||
/* prevent unloading of the host's low-level driver */
|
||||
if (!try_module_get(hi->host->driver->owner)) {
|
||||
req->req.error = RAW1394_ERROR_ABORTED;
|
||||
goto out_set_card;
|
||||
}
|
||||
WARN_ON(fi->host);
|
||||
fi->host = hi->host;
|
||||
fi->state = connected;
|
||||
|
||||
req->req.error = RAW1394_ERROR_NONE;
|
||||
req->req.generation = get_hpsb_generation(fi->host);
|
||||
req->req.misc = (fi->host->node_id << 16)
|
||||
| fi->host->node_count;
|
||||
if (fi->protocol_version > 3)
|
||||
req->req.misc |= NODEID_TO_NODE(fi->host->irm_id) << 8;
|
||||
out_set_card:
|
||||
spin_unlock_irqrestore(&host_info_lock, flags);
|
||||
|
||||
req->req.length = 0;
|
||||
@ -2955,6 +2960,11 @@ static int raw1394_release(struct inode *inode, struct file *file)
|
||||
put_device(&fi->host->device);
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&host_info_lock, flags);
|
||||
if (fi->host)
|
||||
module_put(fi->host->driver->owner);
|
||||
spin_unlock_irqrestore(&host_info_lock, flags);
|
||||
|
||||
kfree(fi);
|
||||
|
||||
return 0;
|
||||
|
@ -51,7 +51,6 @@
|
||||
* Grep for inline FIXME comments below.
|
||||
*/
|
||||
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/device.h>
|
||||
@ -304,10 +303,11 @@ static struct scsi_host_template sbp2_shost_template = {
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.cmd_per_lun = SBP2_MAX_CMDS,
|
||||
.can_queue = SBP2_MAX_CMDS,
|
||||
.emulated = 1,
|
||||
.sdev_attrs = sbp2_sysfs_sdev_attrs,
|
||||
};
|
||||
|
||||
/* for match-all entries in sbp2_workarounds_table */
|
||||
#define SBP2_ROM_VALUE_WILDCARD 0x1000000
|
||||
|
||||
/*
|
||||
* List of devices with known bugs.
|
||||
@ -329,22 +329,14 @@ static const struct {
|
||||
},
|
||||
/* Initio bridges, actually only needed for some older ones */ {
|
||||
.firmware_revision = 0x000200,
|
||||
.model_id = SBP2_ROM_VALUE_WILDCARD,
|
||||
.workarounds = SBP2_WORKAROUND_INQUIRY_36,
|
||||
},
|
||||
/* Symbios bridge */ {
|
||||
.firmware_revision = 0xa0b800,
|
||||
.model_id = SBP2_ROM_VALUE_WILDCARD,
|
||||
.workarounds = SBP2_WORKAROUND_128K_MAX_TRANS,
|
||||
},
|
||||
/*
|
||||
* Note about the following Apple iPod blacklist entries:
|
||||
*
|
||||
* There are iPods (2nd gen, 3rd gen) with model_id==0. Since our
|
||||
* matching logic treats 0 as a wildcard, we cannot match this ID
|
||||
* without rewriting the matching routine. Fortunately these iPods
|
||||
* do not feature the read_capacity bug according to one report.
|
||||
* Read_capacity behaviour as well as model_id could change due to
|
||||
* Apple-supplied firmware updates though.
|
||||
*/
|
||||
/* iPod 4th generation */ {
|
||||
.firmware_revision = 0x0a2700,
|
||||
.model_id = 0x000021,
|
||||
@ -1307,11 +1299,13 @@ static void sbp2_parse_unit_directory(struct sbp2_lu *lu,
|
||||
|
||||
if (!(workarounds & SBP2_WORKAROUND_OVERRIDE))
|
||||
for (i = 0; i < ARRAY_SIZE(sbp2_workarounds_table); i++) {
|
||||
if (sbp2_workarounds_table[i].firmware_revision &&
|
||||
if (sbp2_workarounds_table[i].firmware_revision !=
|
||||
SBP2_ROM_VALUE_WILDCARD &&
|
||||
sbp2_workarounds_table[i].firmware_revision !=
|
||||
(firmware_revision & 0xffff00))
|
||||
continue;
|
||||
if (sbp2_workarounds_table[i].model_id &&
|
||||
if (sbp2_workarounds_table[i].model_id !=
|
||||
SBP2_ROM_VALUE_WILDCARD &&
|
||||
sbp2_workarounds_table[i].model_id != ud->model_id)
|
||||
continue;
|
||||
workarounds |= sbp2_workarounds_table[i].workarounds;
|
||||
@ -2017,7 +2011,6 @@ static int sbp2scsi_slave_configure(struct scsi_device *sdev)
|
||||
{
|
||||
struct sbp2_lu *lu = (struct sbp2_lu *)sdev->host->hostdata[0];
|
||||
|
||||
blk_queue_dma_alignment(sdev->request_queue, (512 - 1));
|
||||
sdev->use_10_for_rw = 1;
|
||||
|
||||
if (sdev->type == TYPE_ROM)
|
||||
|
@ -489,6 +489,9 @@ static void wakeup_dma_ir_ctx(unsigned long l)
|
||||
reset_ir_status(d, i);
|
||||
d->buffer_status[d->buffer_prg_assignment[i]] = VIDEO1394_BUFFER_READY;
|
||||
do_gettimeofday(&d->buffer_time[d->buffer_prg_assignment[i]]);
|
||||
dma_region_sync_for_cpu(&d->dma,
|
||||
d->buffer_prg_assignment[i] * d->buf_size,
|
||||
d->buf_size);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1096,6 +1099,8 @@ static long video1394_ioctl(struct file *file,
|
||||
DBGMSG(ohci->host->id, "Starting iso transmit DMA ctx=%d",
|
||||
d->ctx);
|
||||
put_timestamp(ohci, d, d->last_buffer);
|
||||
dma_region_sync_for_device(&d->dma,
|
||||
v.buffer * d->buf_size, d->buf_size);
|
||||
|
||||
/* Tell the controller where the first program is */
|
||||
reg_write(ohci, d->cmdPtr,
|
||||
@ -1111,6 +1116,9 @@ static long video1394_ioctl(struct file *file,
|
||||
"Waking up iso transmit dma ctx=%d",
|
||||
d->ctx);
|
||||
put_timestamp(ohci, d, d->last_buffer);
|
||||
dma_region_sync_for_device(&d->dma,
|
||||
v.buffer * d->buf_size, d->buf_size);
|
||||
|
||||
reg_write(ohci, d->ctrlSet, 0x1000);
|
||||
}
|
||||
}
|
||||
|
@ -95,6 +95,7 @@
|
||||
|
||||
#define PCI_BASE_CLASS_SERIAL 0x0c
|
||||
#define PCI_CLASS_SERIAL_FIREWIRE 0x0c00
|
||||
#define PCI_CLASS_SERIAL_FIREWIRE_OHCI 0x0c0010
|
||||
#define PCI_CLASS_SERIAL_ACCESS 0x0c01
|
||||
#define PCI_CLASS_SERIAL_SSA 0x0c02
|
||||
#define PCI_CLASS_SERIAL_USB 0x0c03
|
||||
|
Loading…
Reference in New Issue
Block a user