aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ieee1394/config_roms.c
diff options
context:
space:
mode:
authorStefan Richter <stefanr@s5r6.in-berlin.de>2010-10-09 18:12:20 -0400
committerStefan Richter <stefanr@s5r6.in-berlin.de>2010-10-11 08:48:03 -0400
commit66fa12c571d35e3cd62574c65f1785a460105397 (patch)
treeb4f8de3d5ca827d2b134ed628628a7bff46967ca /drivers/ieee1394/config_roms.c
parent1ef5b816c0eaf84f91106cfc0893069c49e86113 (diff)
ieee1394: remove the old IEEE 1394 driver stack
The drivers - ohci1394 (controller driver) - ieee1394 (core) - dv1394, raw1394, video1394 (userspace ABI) - eth1394, sbp2 (protocol drivers) are replaced by - firewire-ohci (controller driver) - firewire-core (core and userspace ABI) - firewire-net, firewire-sbp2 (protocol drivers) which are more featureful, better performing, and more secure than the older drivers; all with a smaller and more modern code base. The driver firedtv in drivers/media/dvb/firewire/ contains backends to both ieee1394 and firewire-core. Its ieee1394 backend code can be removed in an independent commit; firedtv as-is builds and works fine without ieee1394. The driver pcilynx (an incomplete controller driver) is deleted without replacement since PCILynx cards are extremely rare. Owners of these cards use them with the stand-alone bus sniffer driver nosy instead. The drivers nosy and init_ohci1394_dma which do not interact with either of the two IEEE 1394 stacks are not affected by the ieee1394 subsystem removal. There are still some issues with the newer firewire subsystem compared to the older one: - The rare and quirky controllers ALi M52xx, Apple UniNorth v1, NVIDIA NForce2 are even less well supported by firewire-ohci than by ohci1394. I am looking into the M52xx issue. - The experimental firewire-net is reportedly less stable than its experimental cousin eth1394. - Audio playback of a certain group of audio devices (ones based on DICE chipset with EAP; supported by prerelease FFADO code) does not work yet. This issue is still under investigation. - There were some ieee1394 based out-of-the-mainline drivers. Of them, only lisight, an audio driver for iSight webcams, seems still useful. Work is underway to reimplement it on top of firewire-core. All these remainig issues are minor; they should not stand in the way of overall better user experience of IEEE 1394 on Linux, together with a reduction in support efforts and maintenance burden. The coexistence of two IEEE 1394 kernel driver stacks in the mainline since 2.6.22 shall end now, as announced earlier this year. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers/ieee1394/config_roms.c')
-rw-r--r--drivers/ieee1394/config_roms.c194
1 files changed, 0 insertions, 194 deletions
diff --git a/drivers/ieee1394/config_roms.c b/drivers/ieee1394/config_roms.c
deleted file mode 100644
index 1b981207fa76..000000000000
--- a/drivers/ieee1394/config_roms.c
+++ /dev/null
@@ -1,194 +0,0 @@
1/*
2 * IEEE 1394 for Linux
3 *
4 * ConfigROM entries
5 *
6 * Copyright (C) 2004 Ben Collins
7 *
8 * This code is licensed under the GPL. See the file COPYING in the root
9 * directory of the kernel sources for details.
10 */
11
12#include <linux/types.h>
13
14#include "csr1212.h"
15#include "ieee1394.h"
16#include "ieee1394_types.h"
17#include "hosts.h"
18#include "ieee1394_core.h"
19#include "highlevel.h"
20#include "csr.h"
21#include "config_roms.h"
22
23struct hpsb_config_rom_entry {
24 const char *name;
25
26 /* Base initialization, called at module load */
27 int (*init)(void);
28
29 /* Cleanup called at module exit */
30 void (*cleanup)(void);
31
32 /* The flag added to host->config_roms */
33 unsigned int flag;
34};
35
36/* The default host entry. This must succeed. */
37int hpsb_default_host_entry(struct hpsb_host *host)
38{
39 struct csr1212_keyval *root;
40 struct csr1212_keyval *vend_id = NULL;
41 struct csr1212_keyval *text = NULL;
42 char csr_name[128];
43 int ret;
44
45 sprintf(csr_name, "Linux - %s", host->driver->name);
46 root = host->csr.rom->root_kv;
47
48 vend_id = csr1212_new_immediate(CSR1212_KV_ID_VENDOR, host->csr.guid_hi >> 8);
49 text = csr1212_new_string_descriptor_leaf(csr_name);
50
51 if (!vend_id || !text) {
52 if (vend_id)
53 csr1212_release_keyval(vend_id);
54 if (text)
55 csr1212_release_keyval(text);
56 csr1212_destroy_csr(host->csr.rom);
57 return -ENOMEM;
58 }
59
60 csr1212_associate_keyval(vend_id, text);
61 csr1212_release_keyval(text);
62 ret = csr1212_attach_keyval_to_directory(root, vend_id);
63 csr1212_release_keyval(vend_id);
64 if (ret != CSR1212_SUCCESS) {
65 csr1212_destroy_csr(host->csr.rom);
66 return -ENOMEM;
67 }
68
69 host->update_config_rom = 1;
70
71 return 0;
72}
73
74
75#ifdef CONFIG_IEEE1394_ETH1394_ROM_ENTRY
76#include "eth1394.h"
77
78static struct csr1212_keyval *ip1394_ud;
79
80static int config_rom_ip1394_init(void)
81{
82 struct csr1212_keyval *spec_id = NULL;
83 struct csr1212_keyval *spec_desc = NULL;
84 struct csr1212_keyval *ver = NULL;
85 struct csr1212_keyval *ver_desc = NULL;
86 int ret = -ENOMEM;
87
88 ip1394_ud = csr1212_new_directory(CSR1212_KV_ID_UNIT);
89
90 spec_id = csr1212_new_immediate(CSR1212_KV_ID_SPECIFIER_ID,
91 ETHER1394_GASP_SPECIFIER_ID);
92 spec_desc = csr1212_new_string_descriptor_leaf("IANA");
93 ver = csr1212_new_immediate(CSR1212_KV_ID_VERSION,
94 ETHER1394_GASP_VERSION);
95 ver_desc = csr1212_new_string_descriptor_leaf("IPv4");
96
97 if (!ip1394_ud || !spec_id || !spec_desc || !ver || !ver_desc)
98 goto ip1394_fail;
99
100 csr1212_associate_keyval(spec_id, spec_desc);
101 csr1212_associate_keyval(ver, ver_desc);
102 if (csr1212_attach_keyval_to_directory(ip1394_ud, spec_id)
103 == CSR1212_SUCCESS &&
104 csr1212_attach_keyval_to_directory(ip1394_ud, ver)
105 == CSR1212_SUCCESS)
106 ret = 0;
107
108ip1394_fail:
109 if (ret && ip1394_ud) {
110 csr1212_release_keyval(ip1394_ud);
111 ip1394_ud = NULL;
112 }
113
114 if (spec_id)
115 csr1212_release_keyval(spec_id);
116 if (spec_desc)
117 csr1212_release_keyval(spec_desc);
118 if (ver)
119 csr1212_release_keyval(ver);
120 if (ver_desc)
121 csr1212_release_keyval(ver_desc);
122
123 return ret;
124}
125
126static void config_rom_ip1394_cleanup(void)
127{
128 if (ip1394_ud) {
129 csr1212_release_keyval(ip1394_ud);
130 ip1394_ud = NULL;
131 }
132}
133
134int hpsb_config_rom_ip1394_add(struct hpsb_host *host)
135{
136 if (!ip1394_ud)
137 return -ENODEV;
138
139 if (csr1212_attach_keyval_to_directory(host->csr.rom->root_kv,
140 ip1394_ud) != CSR1212_SUCCESS)
141 return -ENOMEM;
142
143 host->config_roms |= HPSB_CONFIG_ROM_ENTRY_IP1394;
144 host->update_config_rom = 1;
145 return 0;
146}
147EXPORT_SYMBOL_GPL(hpsb_config_rom_ip1394_add);
148
149void hpsb_config_rom_ip1394_remove(struct hpsb_host *host)
150{
151 csr1212_detach_keyval_from_directory(host->csr.rom->root_kv, ip1394_ud);
152 host->config_roms &= ~HPSB_CONFIG_ROM_ENTRY_IP1394;
153 host->update_config_rom = 1;
154}
155EXPORT_SYMBOL_GPL(hpsb_config_rom_ip1394_remove);
156
157static struct hpsb_config_rom_entry ip1394_entry = {
158 .name = "ip1394",
159 .init = config_rom_ip1394_init,
160 .cleanup = config_rom_ip1394_cleanup,
161 .flag = HPSB_CONFIG_ROM_ENTRY_IP1394,
162};
163
164#endif /* CONFIG_IEEE1394_ETH1394_ROM_ENTRY */
165
166static struct hpsb_config_rom_entry *const config_rom_entries[] = {
167#ifdef CONFIG_IEEE1394_ETH1394_ROM_ENTRY
168 &ip1394_entry,
169#endif
170};
171
172/* Initialize all config roms */
173int hpsb_init_config_roms(void)
174{
175 int i, error = 0;
176
177 for (i = 0; i < ARRAY_SIZE(config_rom_entries); i++)
178 if (config_rom_entries[i]->init()) {
179 HPSB_ERR("Failed to initialize config rom entry `%s'",
180 config_rom_entries[i]->name);
181 error = -1;
182 }
183
184 return error;
185}
186
187/* Cleanup all config roms */
188void hpsb_cleanup_config_roms(void)
189{
190 int i;
191
192 for (i = 0; i < ARRAY_SIZE(config_rom_entries); i++)
193 config_rom_entries[i]->cleanup();
194}