Mailing List archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[linux-dvb] Re: Skystar2 misc changes committed, testing wanted
Hi Roberto,
good work, indeed!
I attached a (trivial) patch that removes two empty if-clauses and
speeds up the pid removal (from O(n) to O(1)).
Thanks,
Niklas
Roberto Ragusa wrote:
Hi all,
I just committed a not trivial patch to skystar2.c.
Changelog:
- pid addition/removal and open_whole_bandwidth() reworked:
add_pid() and remove_pid() handle ref count tables only;
add_hw_pid() and remove_hw_pid() set the hardware, enabling/disabling
whole_bandwidth when necessary;
pid==0x2000 is considered special by *_hw_* functions only.
- write_reg_op() replaced by write_reg_bitfield(), simpler, cleaner
instead of:
write_reg_op(adapter,0x456,3,0xffffe000,0x1234);
we have now:
write_reg_bitfield(adapter,0x456,0x00001fff,0x1234);
- better usage of u8, u16, u32, int
- changed hexadecimal values to lowercase
- improved enable_hw_filters and related log messages
- lot of coding styling fixes
The first change is a simplification/reorganization of all the
pid handling stuff. Less duplication of code, better readability.
This code is moving towards final shape, but it's not there yet.
The second change touches a lot of parts. The ideas behind it are
that it's easier to spot errors if the mask is not negated and
that the op=1,2,3 for or/and/and+or was terribly ugly.
A careful examination of the diff would be useful to detect a
wrong conversion I may have introduced somewhere.
The other changes are less critical. Note that enable_hardware_filters
defaults now to 2 (i.e., try to activate all the 6+32 filters).
The diff is somewhat inflated because of the styling fixes.
Let me know if you see something wrong or if the code behaves
incorrectly.
Thank you.
Index: skystar2.c
===================================================================
RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/b2c2/skystar2.c,v
retrieving revision 1.22
diff -p -u -r1.22 skystar2.c
--- skystar2.c 10 Dec 2003 00:21:31 -0000 1.22
+++ skystar2.c 10 Dec 2003 07:27:31 -0000
@@ -1146,9 +1146,8 @@ static int add_hw_pid(struct adapter *ad
if (pid <= 0x1f)
return 1;
- if (pid == 0x2000) {
- /* we can't use a filter, so no search */
- } else {
+ /* we can't use a filter for 0x2000, so no search */
+ if (pid != 0x2000) {
/* find an unused hardware filter */
for (i = 0; i < adapter->useable_hw_filters; i++) {
dprintk("%s: pid=%d searching slot=%d\n", __FUNCTION__, pid, i);
@@ -1177,9 +1176,8 @@ static int remove_hw_pid(struct adapter
if (pid <= 0x1f)
return 1;
- if (pid == 0x2000) {
- /* we can't use a filter, so no search */
- } else {
+ /* we can't use a filter for 0x2000, so no search */
+ if (pid != 0x2000) {
for (i = 0; i < adapter->useable_hw_filters; i++) {
dprintk("%s: pid=%d searching slot=%d\n", __FUNCTION__, pid, i);
if (adapter->hw_pids[i] == pid) { // find the pid slot
@@ -1245,10 +1243,7 @@ static int remove_pid(struct adapter *ad
if (adapter->pid_rc[i] <= 0) {
// remove from the list
adapter->pid_count--;
- for (j = i; j < adapter->pid_count; j++) {
- adapter->pid_list[j] = adapter->pid_list[j + 1];
- adapter->pid_rc[j] = adapter->pid_rc[j + 1];
- }
+ adapter->pid_list[i]=adapter->pid_list[adapter->pid_count];
// hardware setting
remove_hw_pid(adapter, pid);
}
Home |
Main Index |
Thread Index