提交 91b94366 编写于 作者: U Uwe Bugla 提交者: Mauro Carvalho Chehab

V4L/DVB (11288): Code cleanup (passes checkpatch now) of the b2c2-flexcop-drivers 2/2

This is the second part of the code cleanup changing the usb and pci-driver cores.
Signed-off-by: NUwe Bugla <uwe.bugla@gmx.de>
Signed-off-by: NPatrick Boettcher <pb@linuxtv.org>
Signed-off-by: NMauro Carvalho Chehab <mchehab@redhat.com>
上级 1589a993
/* /*
* This file is part of linux driver the digital TV devices equipped with B2C2 FlexcopII(b)/III * Linux driver the digital TV devices equipped with B2C2 FlexcopII(b)/III
* * flexcop-pci.c - covers the PCI part including DMA transfers
* flexcop-pci.c - covers the PCI part including DMA transfers. * see flexcop.c for copyright information
*
* see flexcop.c for copyright information.
*/ */
#define FC_LOG_PREFIX "flexcop-pci" #define FC_LOG_PREFIX "flexcop-pci"
...@@ -11,7 +9,8 @@ ...@@ -11,7 +9,8 @@
static int enable_pid_filtering = 1; static int enable_pid_filtering = 1;
module_param(enable_pid_filtering, int, 0444); module_param(enable_pid_filtering, int, 0444);
MODULE_PARM_DESC(enable_pid_filtering, "enable hardware pid filtering: supported values: 0 (fullts), 1"); MODULE_PARM_DESC(enable_pid_filtering,
"enable hardware pid filtering: supported values: 0 (fullts), 1");
static int irq_chk_intv = 100; static int irq_chk_intv = 100;
module_param(irq_chk_intv, int, 0644); module_param(irq_chk_intv, int, 0644);
...@@ -26,17 +25,17 @@ MODULE_PARM_DESC(irq_chk_intv, "set the interval for IRQ streaming watchdog."); ...@@ -26,17 +25,17 @@ MODULE_PARM_DESC(irq_chk_intv, "set the interval for IRQ streaming watchdog.");
#define DEBSTATUS " (debugging is not enabled)" #define DEBSTATUS " (debugging is not enabled)"
#endif #endif
#define deb_info(args...) dprintk(0x01,args) #define deb_info(args...) dprintk(0x01, args)
#define deb_reg(args...) dprintk(0x02,args) #define deb_reg(args...) dprintk(0x02, args)
#define deb_ts(args...) dprintk(0x04,args) #define deb_ts(args...) dprintk(0x04, args)
#define deb_irq(args...) dprintk(0x08,args) #define deb_irq(args...) dprintk(0x08, args)
#define deb_chk(args...) dprintk(0x10,args) #define deb_chk(args...) dprintk(0x10, args)
static int debug; static int debug;
module_param(debug, int, 0644); module_param(debug, int, 0644);
MODULE_PARM_DESC(debug, MODULE_PARM_DESC(debug,
"set debug level (1=info,2=regs,4=TS,8=irqdma,16=check (|-able))." "set debug level (1=info,2=regs,4=TS,8=irqdma,16=check (|-able))."
DEBSTATUS); DEBSTATUS);
#define DRIVER_VERSION "0.1" #define DRIVER_VERSION "0.1"
#define DRIVER_NAME "Technisat/B2C2 FlexCop II/IIb/III Digital TV PCI Driver" #define DRIVER_NAME "Technisat/B2C2 FlexCop II/IIb/III Digital TV PCI Driver"
...@@ -51,30 +50,30 @@ struct flexcop_pci { ...@@ -51,30 +50,30 @@ struct flexcop_pci {
void __iomem *io_mem; void __iomem *io_mem;
u32 irq; u32 irq;
/* buffersize (at least for DMA1, need to be % 188 == 0, /* buffersize (at least for DMA1, need to be % 188 == 0,
* this logic is required */ * this logic is required */
#define FC_DEFAULT_DMA1_BUFSIZE (1280 * 188) #define FC_DEFAULT_DMA1_BUFSIZE (1280 * 188)
#define FC_DEFAULT_DMA2_BUFSIZE (10 * 188) #define FC_DEFAULT_DMA2_BUFSIZE (10 * 188)
struct flexcop_dma dma[2]; struct flexcop_dma dma[2];
int active_dma1_addr; /* 0 = addr0 of dma1; 1 = addr1 of dma1 */ int active_dma1_addr; /* 0 = addr0 of dma1; 1 = addr1 of dma1 */
u32 last_dma1_cur_pos; /* position of the pointer last time the timer/packet irq occured */ u32 last_dma1_cur_pos;
/* position of the pointer last time the timer/packet irq occured */
int count; int count;
int count_prev; int count_prev;
int stream_problem; int stream_problem;
spinlock_t irq_lock; spinlock_t irq_lock;
unsigned long last_irq; unsigned long last_irq;
struct delayed_work irq_check_work; struct delayed_work irq_check_work;
struct flexcop_device *fc_dev; struct flexcop_device *fc_dev;
}; };
static int lastwreg,lastwval,lastrreg,lastrval; static int lastwreg, lastwval, lastrreg, lastrval;
static flexcop_ibi_value flexcop_pci_read_ibi_reg (struct flexcop_device *fc, flexcop_ibi_register r) static flexcop_ibi_value flexcop_pci_read_ibi_reg(struct flexcop_device *fc,
flexcop_ibi_register r)
{ {
struct flexcop_pci *fc_pci = fc->bus_specific; struct flexcop_pci *fc_pci = fc->bus_specific;
flexcop_ibi_value v; flexcop_ibi_value v;
...@@ -82,19 +81,20 @@ static flexcop_ibi_value flexcop_pci_read_ibi_reg (struct flexcop_device *fc, fl ...@@ -82,19 +81,20 @@ static flexcop_ibi_value flexcop_pci_read_ibi_reg (struct flexcop_device *fc, fl
if (lastrreg != r || lastrval != v.raw) { if (lastrreg != r || lastrval != v.raw) {
lastrreg = r; lastrval = v.raw; lastrreg = r; lastrval = v.raw;
deb_reg("new rd: %3x: %08x\n",r,v.raw); deb_reg("new rd: %3x: %08x\n", r, v.raw);
} }
return v; return v;
} }
static int flexcop_pci_write_ibi_reg(struct flexcop_device *fc, flexcop_ibi_register r, flexcop_ibi_value v) static int flexcop_pci_write_ibi_reg(struct flexcop_device *fc,
flexcop_ibi_register r, flexcop_ibi_value v)
{ {
struct flexcop_pci *fc_pci = fc->bus_specific; struct flexcop_pci *fc_pci = fc->bus_specific;
if (lastwreg != r || lastwval != v.raw) { if (lastwreg != r || lastwval != v.raw) {
lastwreg = r; lastwval = v.raw; lastwreg = r; lastwval = v.raw;
deb_reg("new wr: %3x: %08x\n",r,v.raw); deb_reg("new wr: %3x: %08x\n", r, v.raw);
} }
writel(v.raw, fc_pci->io_mem + r); writel(v.raw, fc_pci->io_mem + r);
...@@ -117,12 +117,12 @@ static void flexcop_pci_irq_check_work(struct work_struct *work) ...@@ -117,12 +117,12 @@ static void flexcop_pci_irq_check_work(struct work_struct *work)
spin_lock_irq(&fc->demux.lock); spin_lock_irq(&fc->demux.lock);
list_for_each_entry(feed, &fc->demux.feed_list, list_for_each_entry(feed, &fc->demux.feed_list,
list_head) { list_head) {
flexcop_pid_feed_control(fc, feed, 0); flexcop_pid_feed_control(fc, feed, 0);
} }
list_for_each_entry(feed, &fc->demux.feed_list, list_for_each_entry(feed, &fc->demux.feed_list,
list_head) { list_head) {
flexcop_pid_feed_control(fc, feed, 1); flexcop_pid_feed_control(fc, feed, 1);
} }
spin_unlock_irq(&fc->demux.lock); spin_unlock_irq(&fc->demux.lock);
...@@ -150,11 +150,10 @@ static irqreturn_t flexcop_pci_isr(int irq, void *dev_id) ...@@ -150,11 +150,10 @@ static irqreturn_t flexcop_pci_isr(int irq, void *dev_id)
flexcop_ibi_value v; flexcop_ibi_value v;
irqreturn_t ret = IRQ_HANDLED; irqreturn_t ret = IRQ_HANDLED;
spin_lock_irqsave(&fc_pci->irq_lock,flags); spin_lock_irqsave(&fc_pci->irq_lock, flags);
v = fc->read_ibi_reg(fc, irq_20c);
v = fc->read_ibi_reg(fc,irq_20c);
/* errors */ /* errors */
if (v.irq_20c.Data_receiver_error) if (v.irq_20c.Data_receiver_error)
deb_chk("data receiver error\n"); deb_chk("data receiver error\n");
if (v.irq_20c.Continuity_error_flag) if (v.irq_20c.Continuity_error_flag)
...@@ -165,24 +164,29 @@ static irqreturn_t flexcop_pci_isr(int irq, void *dev_id) ...@@ -165,24 +164,29 @@ static irqreturn_t flexcop_pci_isr(int irq, void *dev_id)
deb_chk("Transport error\n"); deb_chk("Transport error\n");
if ((fc_pci->count % 1000) == 0) if ((fc_pci->count % 1000) == 0)
deb_chk("%d valid irq took place so far\n",fc_pci->count); deb_chk("%d valid irq took place so far\n", fc_pci->count);
if (v.irq_20c.DMA1_IRQ_Status == 1) { if (v.irq_20c.DMA1_IRQ_Status == 1) {
if (fc_pci->active_dma1_addr == 0) if (fc_pci->active_dma1_addr == 0)
flexcop_pass_dmx_packets(fc_pci->fc_dev,fc_pci->dma[0].cpu_addr0,fc_pci->dma[0].size / 188); flexcop_pass_dmx_packets(fc_pci->fc_dev,
fc_pci->dma[0].cpu_addr0,
fc_pci->dma[0].size / 188);
else else
flexcop_pass_dmx_packets(fc_pci->fc_dev,fc_pci->dma[0].cpu_addr1,fc_pci->dma[0].size / 188); flexcop_pass_dmx_packets(fc_pci->fc_dev,
fc_pci->dma[0].cpu_addr1,
fc_pci->dma[0].size / 188);
deb_irq("page change to page: %d\n",!fc_pci->active_dma1_addr); deb_irq("page change to page: %d\n",!fc_pci->active_dma1_addr);
fc_pci->active_dma1_addr = !fc_pci->active_dma1_addr; fc_pci->active_dma1_addr = !fc_pci->active_dma1_addr;
} else if (v.irq_20c.DMA1_Timer_Status == 1) {
/* for the timer IRQ we only can use buffer dmx feeding, because we don't have /* for the timer IRQ we only can use buffer dmx feeding, because we don't have
* complete TS packets when reading from the DMA memory */ * complete TS packets when reading from the DMA memory */
} else if (v.irq_20c.DMA1_Timer_Status == 1) {
dma_addr_t cur_addr = dma_addr_t cur_addr =
fc->read_ibi_reg(fc,dma1_008).dma_0x8.dma_cur_addr << 2; fc->read_ibi_reg(fc,dma1_008).dma_0x8.dma_cur_addr << 2;
u32 cur_pos = cur_addr - fc_pci->dma[0].dma_addr0; u32 cur_pos = cur_addr - fc_pci->dma[0].dma_addr0;
deb_irq("%u irq: %08x cur_addr: %llx: cur_pos: %08x, last_cur_pos: %08x ", deb_irq("%u irq: %08x cur_addr: %llx: cur_pos: %08x, "
"last_cur_pos: %08x ",
jiffies_to_usecs(jiffies - fc_pci->last_irq), jiffies_to_usecs(jiffies - fc_pci->last_irq),
v.raw, (unsigned long long)cur_addr, cur_pos, v.raw, (unsigned long long)cur_addr, cur_pos,
fc_pci->last_dma1_cur_pos); fc_pci->last_dma1_cur_pos);
...@@ -192,30 +196,36 @@ static irqreturn_t flexcop_pci_isr(int irq, void *dev_id) ...@@ -192,30 +196,36 @@ static irqreturn_t flexcop_pci_isr(int irq, void *dev_id)
* pass the data from last_cur_pos to the buffer end to the demux * pass the data from last_cur_pos to the buffer end to the demux
*/ */
if (cur_pos < fc_pci->last_dma1_cur_pos) { if (cur_pos < fc_pci->last_dma1_cur_pos) {
deb_irq(" end was reached: passing %d bytes ",(fc_pci->dma[0].size*2 - 1) - fc_pci->last_dma1_cur_pos); deb_irq(" end was reached: passing %d bytes ",
(fc_pci->dma[0].size*2 - 1) -
fc_pci->last_dma1_cur_pos);
flexcop_pass_dmx_data(fc_pci->fc_dev, flexcop_pass_dmx_data(fc_pci->fc_dev,
fc_pci->dma[0].cpu_addr0 + fc_pci->last_dma1_cur_pos, fc_pci->dma[0].cpu_addr0 +
(fc_pci->dma[0].size*2) - fc_pci->last_dma1_cur_pos); fc_pci->last_dma1_cur_pos,
(fc_pci->dma[0].size*2) -
fc_pci->last_dma1_cur_pos);
fc_pci->last_dma1_cur_pos = 0; fc_pci->last_dma1_cur_pos = 0;
} }
if (cur_pos > fc_pci->last_dma1_cur_pos) { if (cur_pos > fc_pci->last_dma1_cur_pos) {
deb_irq(" passing %d bytes ",cur_pos - fc_pci->last_dma1_cur_pos); deb_irq(" passing %d bytes ",
cur_pos - fc_pci->last_dma1_cur_pos);
flexcop_pass_dmx_data(fc_pci->fc_dev, flexcop_pass_dmx_data(fc_pci->fc_dev,
fc_pci->dma[0].cpu_addr0 + fc_pci->last_dma1_cur_pos, fc_pci->dma[0].cpu_addr0 +
cur_pos - fc_pci->last_dma1_cur_pos); fc_pci->last_dma1_cur_pos,
cur_pos - fc_pci->last_dma1_cur_pos);
} }
deb_irq("\n"); deb_irq("\n");
fc_pci->last_dma1_cur_pos = cur_pos; fc_pci->last_dma1_cur_pos = cur_pos;
fc_pci->count++; fc_pci->count++;
} else { } else {
deb_irq("isr for flexcop called, apparently without reason (%08x)\n",v.raw); deb_irq("isr for flexcop called, "
"apparently without reason (%08x)\n", v.raw);
ret = IRQ_NONE; ret = IRQ_NONE;
} }
spin_unlock_irqrestore(&fc_pci->irq_lock,flags); spin_unlock_irqrestore(&fc_pci->irq_lock, flags);
return ret; return ret;
} }
...@@ -223,52 +233,48 @@ static int flexcop_pci_stream_control(struct flexcop_device *fc, int onoff) ...@@ -223,52 +233,48 @@ static int flexcop_pci_stream_control(struct flexcop_device *fc, int onoff)
{ {
struct flexcop_pci *fc_pci = fc->bus_specific; struct flexcop_pci *fc_pci = fc->bus_specific;
if (onoff) { if (onoff) {
flexcop_dma_config(fc,&fc_pci->dma[0],FC_DMA_1); flexcop_dma_config(fc, &fc_pci->dma[0], FC_DMA_1);
flexcop_dma_config(fc,&fc_pci->dma[1],FC_DMA_2); flexcop_dma_config(fc, &fc_pci->dma[1], FC_DMA_2);
flexcop_dma_config_timer(fc, FC_DMA_1, 0);
flexcop_dma_config_timer(fc,FC_DMA_1,0); flexcop_dma_xfer_control(fc, FC_DMA_1,
FC_DMA_SUBADDR_0 | FC_DMA_SUBADDR_1, 1);
flexcop_dma_xfer_control(fc,FC_DMA_1,FC_DMA_SUBADDR_0 | FC_DMA_SUBADDR_1,1);
deb_irq("DMA xfer enabled\n"); deb_irq("DMA xfer enabled\n");
fc_pci->last_dma1_cur_pos = 0; fc_pci->last_dma1_cur_pos = 0;
flexcop_dma_control_timer_irq(fc,FC_DMA_1,1); flexcop_dma_control_timer_irq(fc, FC_DMA_1, 1);
deb_irq("IRQ enabled\n"); deb_irq("IRQ enabled\n");
fc_pci->count_prev = fc_pci->count; fc_pci->count_prev = fc_pci->count;
// fc_pci->active_dma1_addr = 0;
// flexcop_dma_control_size_irq(fc,FC_DMA_1,1);
} else { } else {
flexcop_dma_control_timer_irq(fc,FC_DMA_1,0); flexcop_dma_control_timer_irq(fc, FC_DMA_1, 0);
deb_irq("IRQ disabled\n"); deb_irq("IRQ disabled\n");
// flexcop_dma_control_size_irq(fc,FC_DMA_1,0); flexcop_dma_xfer_control(fc, FC_DMA_1,
FC_DMA_SUBADDR_0 | FC_DMA_SUBADDR_1, 0);
flexcop_dma_xfer_control(fc,FC_DMA_1,FC_DMA_SUBADDR_0 | FC_DMA_SUBADDR_1,0);
deb_irq("DMA xfer disabled\n"); deb_irq("DMA xfer disabled\n");
} }
return 0; return 0;
} }
static int flexcop_pci_dma_init(struct flexcop_pci *fc_pci) static int flexcop_pci_dma_init(struct flexcop_pci *fc_pci)
{ {
int ret; int ret;
if ((ret = flexcop_dma_allocate(fc_pci->pdev,&fc_pci->dma[0],FC_DEFAULT_DMA1_BUFSIZE)) != 0) ret = flexcop_dma_allocate(fc_pci->pdev, &fc_pci->dma[0],
FC_DEFAULT_DMA1_BUFSIZE);
if (ret != 0)
return ret; return ret;
if ((ret = flexcop_dma_allocate(fc_pci->pdev,&fc_pci->dma[1],FC_DEFAULT_DMA2_BUFSIZE)) != 0) { ret = flexcop_dma_allocate(fc_pci->pdev, &fc_pci->dma[1],
FC_DEFAULT_DMA2_BUFSIZE);
if (ret != 0) {
flexcop_dma_free(&fc_pci->dma[0]); flexcop_dma_free(&fc_pci->dma[0]);
return ret; return ret;
} }
flexcop_sram_set_dest(fc_pci->fc_dev,FC_SRAM_DEST_MEDIA | FC_SRAM_DEST_NET, FC_SRAM_DEST_TARGET_DMA1); flexcop_sram_set_dest(fc_pci->fc_dev, FC_SRAM_DEST_MEDIA |
flexcop_sram_set_dest(fc_pci->fc_dev,FC_SRAM_DEST_CAO | FC_SRAM_DEST_CAI, FC_SRAM_DEST_TARGET_DMA2); FC_SRAM_DEST_NET, FC_SRAM_DEST_TARGET_DMA1);
flexcop_sram_set_dest(fc_pci->fc_dev, FC_SRAM_DEST_CAO |
FC_SRAM_DEST_CAI, FC_SRAM_DEST_TARGET_DMA2);
fc_pci->init_state |= FC_PCI_DMA_INIT; fc_pci->init_state |= FC_PCI_DMA_INIT;
return ret; return ret;
} }
...@@ -291,12 +297,8 @@ static int flexcop_pci_init(struct flexcop_pci *fc_pci) ...@@ -291,12 +297,8 @@ static int flexcop_pci_init(struct flexcop_pci *fc_pci)
if ((ret = pci_enable_device(fc_pci->pdev)) != 0) if ((ret = pci_enable_device(fc_pci->pdev)) != 0)
return ret; return ret;
pci_set_master(fc_pci->pdev); pci_set_master(fc_pci->pdev);
/* enable interrupts */
// pci_write_config_dword(pdev, 0x6c, 0x8000);
if ((ret = pci_request_regions(fc_pci->pdev, DRIVER_NAME)) != 0) if ((ret = pci_request_regions(fc_pci->pdev, DRIVER_NAME)) != 0)
goto err_pci_disable_device; goto err_pci_disable_device;
...@@ -339,8 +341,8 @@ static void flexcop_pci_exit(struct flexcop_pci *fc_pci) ...@@ -339,8 +341,8 @@ static void flexcop_pci_exit(struct flexcop_pci *fc_pci)
fc_pci->init_state &= ~FC_PCI_INIT; fc_pci->init_state &= ~FC_PCI_INIT;
} }
static int flexcop_pci_probe(struct pci_dev *pdev,
static int flexcop_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) const struct pci_device_id *ent)
{ {
struct flexcop_device *fc; struct flexcop_device *fc;
struct flexcop_pci *fc_pci; struct flexcop_pci *fc_pci;
...@@ -351,7 +353,7 @@ static int flexcop_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e ...@@ -351,7 +353,7 @@ static int flexcop_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
return -ENOMEM; return -ENOMEM;
} }
/* general flexcop init */ /* general flexcop init */
fc_pci = fc->bus_specific; fc_pci = fc->bus_specific;
fc_pci->fc_dev = fc; fc_pci->fc_dev = fc;
...@@ -359,7 +361,6 @@ static int flexcop_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e ...@@ -359,7 +361,6 @@ static int flexcop_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
fc->write_ibi_reg = flexcop_pci_write_ibi_reg; fc->write_ibi_reg = flexcop_pci_write_ibi_reg;
fc->i2c_request = flexcop_i2c_request; fc->i2c_request = flexcop_i2c_request;
fc->get_mac_addr = flexcop_eeprom_check_mac_addr; fc->get_mac_addr = flexcop_eeprom_check_mac_addr;
fc->stream_control = flexcop_pci_stream_control; fc->stream_control = flexcop_pci_stream_control;
if (enable_pid_filtering) if (enable_pid_filtering)
...@@ -369,29 +370,29 @@ static int flexcop_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e ...@@ -369,29 +370,29 @@ static int flexcop_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
fc->pid_filtering = enable_pid_filtering; fc->pid_filtering = enable_pid_filtering;
fc->bus_type = FC_PCI; fc->bus_type = FC_PCI;
fc->dev = &pdev->dev; fc->dev = &pdev->dev;
fc->owner = THIS_MODULE; fc->owner = THIS_MODULE;
/* bus specific part */ /* bus specific part */
fc_pci->pdev = pdev; fc_pci->pdev = pdev;
if ((ret = flexcop_pci_init(fc_pci)) != 0) if ((ret = flexcop_pci_init(fc_pci)) != 0)
goto err_kfree; goto err_kfree;
/* init flexcop */ /* init flexcop */
if ((ret = flexcop_device_initialize(fc)) != 0) if ((ret = flexcop_device_initialize(fc)) != 0)
goto err_pci_exit; goto err_pci_exit;
/* init dma */ /* init dma */
if ((ret = flexcop_pci_dma_init(fc_pci)) != 0) if ((ret = flexcop_pci_dma_init(fc_pci)) != 0)
goto err_fc_exit; goto err_fc_exit;
INIT_DELAYED_WORK(&fc_pci->irq_check_work, flexcop_pci_irq_check_work); INIT_DELAYED_WORK(&fc_pci->irq_check_work, flexcop_pci_irq_check_work);
if (irq_chk_intv > 0) if (irq_chk_intv > 0)
schedule_delayed_work(&fc_pci->irq_check_work, schedule_delayed_work(&fc_pci->irq_check_work,
msecs_to_jiffies(irq_chk_intv < 100 ? 100 : irq_chk_intv)); msecs_to_jiffies(irq_chk_intv < 100 ?
100 :
irq_chk_intv));
return ret; return ret;
err_fc_exit: err_fc_exit:
...@@ -421,7 +422,6 @@ static void flexcop_pci_remove(struct pci_dev *pdev) ...@@ -421,7 +422,6 @@ static void flexcop_pci_remove(struct pci_dev *pdev)
static struct pci_device_id flexcop_pci_tbl[] = { static struct pci_device_id flexcop_pci_tbl[] = {
{ PCI_DEVICE(0x13d0, 0x2103) }, { PCI_DEVICE(0x13d0, 0x2103) },
/* { PCI_DEVICE(0x13d0, 0x2200) }, ? */
{ }, { },
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册