diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /drivers/ieee1394/config_roms.c | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (diff) |
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts:
litmus/sched_cedf.c
Diffstat (limited to 'drivers/ieee1394/config_roms.c')
-rw-r--r-- | drivers/ieee1394/config_roms.c | 194 |
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 | |||
23 | struct 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. */ | ||
37 | int 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 | |||
78 | static struct csr1212_keyval *ip1394_ud; | ||
79 | |||
80 | static 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 | |||
108 | ip1394_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 | |||
126 | static void config_rom_ip1394_cleanup(void) | ||
127 | { | ||
128 | if (ip1394_ud) { | ||
129 | csr1212_release_keyval(ip1394_ud); | ||
130 | ip1394_ud = NULL; | ||
131 | } | ||
132 | } | ||
133 | |||
134 | int 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 | } | ||
147 | EXPORT_SYMBOL_GPL(hpsb_config_rom_ip1394_add); | ||
148 | |||
149 | void 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 | } | ||
155 | EXPORT_SYMBOL_GPL(hpsb_config_rom_ip1394_remove); | ||
156 | |||
157 | static 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 | |||
166 | static 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 */ | ||
173 | int 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 */ | ||
188 | void 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 | } | ||