diff options
author | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2008-11-02 07:45:00 -0500 |
---|---|---|
committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2009-02-24 08:51:28 -0500 |
commit | 8ae83cdf3297d7da301af36bdb6ff45bd331c6d0 (patch) | |
tree | 0363a01f1b3655507bdaf7e1f55af6a3ee9d26b7 /drivers/media/dvb/firesat/firesat.h | |
parent | 00fc3072e484c1c6fdbd9c3b1851f866000a6cb9 (diff) |
firedtv: cleanups and minor fixes
Combination of the following changes:
Sun, 2 Nov 2008 13:45:00 +0100 (CET)
firedtv: increase FCP frame length for DVB-S2 tune QSPK
The last three bytes didn't go out to the wire.
Effect of the fix not yet tested.
Sun, 2 Nov 2008 13:45:00 +0100 (CET)
firedtv: replace mdelay by msleep
These functions can sleep (and in fact sleep for the duration of a whole
FCP transaction). Hence msleep is more appropriate here.
Sun, 2 Nov 2008 13:45:00 +0100 (CET)
firedtv: trivial reorganization in avc_api
Reduce nesting level by factoring code out of avc_tuner_dsd() into
helper functions.
Sun, 2 Nov 2008 13:45:00 +0100 (CET)
firedtv: trivial cleanups in avc_api
Use dev_err(), no CamelCase function names, adjust comment style, put
#if 0 around unused code and add FIXME comments, standardize on
lower-case hexadecimal constants, use ALIGN() for some frame length
calculations, make a local function static...
The code which writes FCP command frames and reads FCP response frames
is not yet brought into canonical kernel coding style because this
involves changes of typedefs (on-the-wire bitfields).
Sun, 2 Nov 2008 13:45:00 +0100 (CET)
firedtv: don't retry oPCR updates endlessly
In the theoretical case that the target node wasn't handling the lock
transactions as expected or there was continued interference by other
initiating nodes, these functions wouldn't return for ages.
Sun, 2 Nov 2008 13:45:00 +0100 (CET)
firedtv: remove bitfield typedefs from cmp, fix for big endian CPUs
Use macros/ inline functions/ standard byte order accessors to read and
write oPCR register values (big endian bitfields, on-the-wire data).
The new code may not be the ultimate optimum, but it doesn't occur in a
hot path.
This fixes the CMP code for big endian CPUs. So far I tested it only on
a little endian CPU though.
For now, include <asm/byteorder.h> instead of <linux/byteorder.h>
because drivers/ieee1394/*.h also include the former. I will fix this
in drivers/ieee1394 and firedtv later.
Sun, 2 Nov 2008 13:45:00 +0100 (CET)
firedtv: trivial cleanups in cmp
Reduce nesting level by means of early exit and goto.
Remove obsolete includes, use dev_err(), no CamelCase function names...
Sun, 2 Nov 2008 13:45:00 +0100 (CET)
firedtv: trivial cleanups in firesat-ci
Whitespace, variable names, comment style...
Also, use dvb_generic_open() and dvb_generic_release() directly as
our hooks in struct file_operations because firedtv's wrappers merely
called these generic functions.
Sun, 2 Nov 2008 13:45:00 +0100 (CET)
firedtv: remove CA debug code
This looks like it is not necessary to have available for endusers who
cannot patch kernels for bug reporting and tests of fixes.
Sun, 2 Nov 2008 13:45:00 +0100 (CET)
firedtv: remove AV/C debug code
This looks like it is not necessary to have available for endusers who
cannot patch kernels for bug reporting and tests of fixes.
Sun, 2 Nov 2008 13:45:00 +0100 (CET)
firedtv: remove various debug code
Most of this was already commented out. And that which wasn't is not
relevant in normal use.
Mon, 29 Sep 2008 19:22:48 +0200 (CEST)
firedtv: register input device as child of a FireWire device
Instead of one virtual input device which exists for the whole lifetime
of the driver and receives events from all connected FireDTVs, register
one input device for each firedtv device. These input devices will show
up as children of the respective firedtv devices in the sysfs hierarchy.
However, the implementation falls short because of a bug in userspace:
Udev's path_id script gets stuck with 100% CPU utilization, maybe
because of an assumption about the maximum ieee1394 device hierarchy
depth.
To avoid this bug, we use the fw-host device instead of the proper
unit_directory device as parent of the input device.
There is hope that the port to the new firewire stack won't be inhibited
by this userspace bug because there are no fw-host devices there.
Mon, 29 Sep 2008 19:21:52 +0200 (CEST)
firedtv: fix string comparison and a few sparse warnings
Sparse found a bug:
while ((kv_buf + kv_len - 1) == '\0')
should have been
while (kv_buf[kv_len - 1] == '\0')
We fix it by a better implementation without a temporary copy.
Also fix sparse warnings of 0 instead of NULL and signedness mismatches.
Mon, 29 Sep 2008 19:21:20 +0200 (CEST)
firedtv: remove unused struct members
and redefine an int as a bool.
Mon, 29 Sep 2008 19:20:36 +0200 (CEST)
firedtv: fix initialization of dvb_frontend.ops
There was a NULL pointer reference if no dvb_frontend_info was found.
Also, don't directly assign struct typed values to struct typed
variables. Instead write out assignments to individual strcut members.
This reduces module size by about 1 kB.
Mon, 29 Sep 2008 19:19:41 +0200 (CEST)
firedtv: remove unused dual subunit code from initialization
No FireDTVs with more than one subunit exists, hence simplify the
initialization for the special case of one subunit. The driver was able
to check for more than one subunit but was broken for more than two
subunits.
While we are at it, add several missing cleanups after failure, and
include a few dynamically allocated structures diretly into struct
firesat instead of allocating them separately.
Mon, 29 Sep 2008 19:19:08 +0200 (CEST)
firedtv: add vendor_id and version to driver match table
Now that nodemgr was enhanced to match against the root directory's
vendor ID if there isn't one in the unit directory, use this to
prevent firedtv to be bound to wrong devices by accident.
Also add the AV/C software version ID to the match flags for
completeness; specifier ID and software only make sense as a pair.
Mon, 29 Sep 2008 19:18:30 +0200 (CEST)
firedtv: use hpsb_node_read(), _write(), _lock()
because they are simpler and treat the node generation more correctly.
While we are at it, clean up and simplify surrounding code.
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers/media/dvb/firesat/firesat.h')
-rw-r--r-- | drivers/media/dvb/firesat/firesat.h | 68 |
1 files changed, 28 insertions, 40 deletions
diff --git a/drivers/media/dvb/firesat/firesat.h b/drivers/media/dvb/firesat/firesat.h index 5f0de88e41a6..51f64c0afcdb 100644 --- a/drivers/media/dvb/firesat/firesat.h +++ b/drivers/media/dvb/firesat/firesat.h | |||
@@ -21,11 +21,11 @@ | |||
21 | #include <linux/types.h> | 21 | #include <linux/types.h> |
22 | #include <linux/wait.h> | 22 | #include <linux/wait.h> |
23 | #include <linux/workqueue.h> | 23 | #include <linux/workqueue.h> |
24 | #include <asm/atomic.h> | ||
25 | 24 | ||
26 | #include <demux.h> | 25 | #include <demux.h> |
27 | #include <dmxdev.h> | 26 | #include <dmxdev.h> |
28 | #include <dvb_demux.h> | 27 | #include <dvb_demux.h> |
28 | #include <dvb_frontend.h> | ||
29 | #include <dvb_net.h> | 29 | #include <dvb_net.h> |
30 | #include <dvbdev.h> | 30 | #include <dvbdev.h> |
31 | 31 | ||
@@ -127,50 +127,35 @@ enum model_type { | |||
127 | FireSAT_DVB_S2 = 4, | 127 | FireSAT_DVB_S2 = 4, |
128 | }; | 128 | }; |
129 | 129 | ||
130 | struct hpsb_host; | 130 | struct input_dev; |
131 | struct hpsb_iso; | 131 | struct hpsb_iso; |
132 | struct node_entry; | 132 | struct unit_directory; |
133 | 133 | ||
134 | struct firesat { | 134 | struct firesat { |
135 | struct dvb_demux dvb_demux; | 135 | struct dvb_adapter adapter; |
136 | 136 | struct dmxdev dmxdev; | |
137 | /* DVB bits */ | 137 | struct dvb_demux demux; |
138 | struct dvb_adapter *adapter; | 138 | struct dmx_frontend frontend; |
139 | struct dmxdev dmxdev; | 139 | struct dvb_net dvbnet; |
140 | struct dvb_demux demux; | 140 | struct dvb_frontend fe; |
141 | struct dmx_frontend frontend; | 141 | |
142 | struct dvb_net dvbnet; | 142 | struct dvb_device *cadev; |
143 | struct dvb_frontend_info *frontend_info; | 143 | int ca_last_command; |
144 | struct dvb_frontend *fe; | 144 | int ca_time_interval; |
145 | 145 | ||
146 | struct dvb_device *cadev; | 146 | struct mutex avc_mutex; |
147 | int ca_last_command; | 147 | wait_queue_head_t avc_wait; |
148 | int ca_time_interval; | 148 | bool avc_reply_received; |
149 | 149 | struct work_struct remote_ctrl_work; | |
150 | struct mutex avc_mutex; | 150 | struct input_dev *remote_ctrl_dev; |
151 | wait_queue_head_t avc_wait; | ||
152 | atomic_t avc_reply_received; | ||
153 | struct work_struct remote_ctrl_work; | ||
154 | 151 | ||
155 | struct firesat_channel { | 152 | struct firesat_channel { |
156 | struct firesat *firesat; | 153 | bool active; |
157 | struct dvb_demux_feed *dvbdmxfeed; | ||
158 | |||
159 | int active; | ||
160 | int id; | ||
161 | int pid; | 154 | int pid; |
162 | int type; /* 1 - TS, 2 - Filter */ | ||
163 | } channel[16]; | 155 | } channel[16]; |
164 | struct mutex demux_mutex; | 156 | struct mutex demux_mutex; |
165 | |||
166 | /* needed by avc_api */ | ||
167 | void *respfrm; | ||
168 | int resp_length; | ||
169 | 157 | ||
170 | struct hpsb_host *host; | 158 | struct unit_directory *ud; |
171 | u64 guid; /* GUID of this node */ | ||
172 | u32 guid_vendor_id; /* Top 24bits of guid */ | ||
173 | struct node_entry *nodeentry; | ||
174 | 159 | ||
175 | enum model_type type; | 160 | enum model_type type; |
176 | char subunit; | 161 | char subunit; |
@@ -181,6 +166,10 @@ struct firesat { | |||
181 | struct hpsb_iso *iso_handle; | 166 | struct hpsb_iso *iso_handle; |
182 | 167 | ||
183 | struct list_head list; | 168 | struct list_head list; |
169 | |||
170 | /* needed by avc_api */ | ||
171 | int resp_length; | ||
172 | u8 respfrm[512]; | ||
184 | }; | 173 | }; |
185 | 174 | ||
186 | struct firewireheader { | 175 | struct firewireheader { |
@@ -226,11 +215,10 @@ struct device; | |||
226 | /* firesat_dvb.c */ | 215 | /* firesat_dvb.c */ |
227 | int firesat_start_feed(struct dvb_demux_feed *dvbdmxfeed); | 216 | int firesat_start_feed(struct dvb_demux_feed *dvbdmxfeed); |
228 | int firesat_stop_feed(struct dvb_demux_feed *dvbdmxfeed); | 217 | int firesat_stop_feed(struct dvb_demux_feed *dvbdmxfeed); |
229 | int firesat_dvbdev_init(struct firesat *firesat, struct device *dev, | 218 | int firesat_dvbdev_init(struct firesat *firesat, struct device *dev); |
230 | struct dvb_frontend *fe); | ||
231 | 219 | ||
232 | /* firesat_fe.c */ | 220 | /* firesat_fe.c */ |
233 | int firesat_frontend_attach(struct firesat *firesat, struct dvb_frontend *fe); | 221 | void firesat_frontend_init(struct firesat *firesat); |
234 | 222 | ||
235 | /* firesat_iso.c */ | 223 | /* firesat_iso.c */ |
236 | int setup_iso_channel(struct firesat *firesat); | 224 | int setup_iso_channel(struct firesat *firesat); |