aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx88/cx88.h
diff options
context:
space:
mode:
authorSteven Toth <stoth@hauppauge.com>2006-12-02 18:15:51 -0500
committerMauro Carvalho Chehab <mchehab@infradead.org>2006-12-10 05:50:47 -0500
commit6c5be74c86f102c2d4e123bc51d2fa93155fd794 (patch)
tree72bb1b00045f7c263721f113f92d286405ae96d7 /drivers/media/video/cx88/cx88.h
parent91bb9be6ff4101652bb104f9f083f340e73ba6dd (diff)
V4L/DVB (4676): Dynamic cx88 mpeg port management for HVR1300 MPEG2/DVB-T support.
A series of patches to change the cx88 framework to allow the PCI mpeg port to be shared dynamically between different types of drivers or applications. This patch changes the cx88-dvb and cx88-blackbird drivers to become 'sub drivers' of a higher single cx88-mpeg driver. The cx88-mpeg driver is a superset of the previous cx88-mpeg/blackbird drivers and now owns the IRQ. cx88-dvb/blackbird now become mini drivers, registering themselves with cx88-mpeg through a standard interface with callbacks. Sub drivers request access to hardware via the cx88-mpeg driver. In turn the cx88-mpeg driver determines whether the hardware is busy and accepts or refuses the request, grant access using callbacks into the sub drivers. The net effect is that you are no longer able to tamper with the mpeg port from multiple different applications at the same time, potentially breaking a live mpeg2 hardware encoding or dvb stream. The mechanism extends to enable multiple dvb frontends to be registered and share the single resource. Signed-off-by: Steven Toth <stoth@hauppauge.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/cx88/cx88.h')
-rw-r--r--drivers/media/video/cx88/cx88.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/drivers/media/video/cx88/cx88.h b/drivers/media/video/cx88/cx88.h
index 3bc91aad4fe5..5980e47aee13 100644
--- a/drivers/media/video/cx88/cx88.h
+++ b/drivers/media/video/cx88/cx88.h
@@ -74,6 +74,11 @@ enum cx88_board_type {
74 CX88_MPEG_BLACKBIRD 74 CX88_MPEG_BLACKBIRD
75}; 75};
76 76
77enum cx8802_board_access {
78 CX8802_DRVCTL_SHARED = 1,
79 CX8802_DRVCTL_EXCLUSIVE = 2,
80};
81
77/* ----------------------------------------------------------- */ 82/* ----------------------------------------------------------- */
78/* tv norms */ 83/* tv norms */
79 84
@@ -330,6 +335,7 @@ struct cx88_core {
330 335
331 /* cx88-video needs to access cx8802 for hybrid tuner pll access. */ 336 /* cx88-video needs to access cx8802 for hybrid tuner pll access. */
332 struct cx8802_dev *dvbdev; 337 struct cx8802_dev *dvbdev;
338 enum cx88_board_type active_type_id;
333}; 339};
334 340
335struct cx8800_dev; 341struct cx8800_dev;
@@ -405,6 +411,31 @@ struct cx8802_suspend_state {
405 int disabled; 411 int disabled;
406}; 412};
407 413
414struct cx8802_driver {
415 struct cx88_core *core;
416 struct list_head devlist;
417
418 /* Type of driver and access required */
419 enum cx88_board_type type_id;
420 enum cx8802_board_access hw_access;
421
422 /* MPEG 8802 internal only */
423 int (*suspend)(struct pci_dev *pci_dev, pm_message_t state);
424 int (*resume)(struct pci_dev *pci_dev);
425
426 /* MPEG 8802 -> mini driver - Driver probe and configuration */
427 int (*probe)(struct cx8802_driver *drv);
428 int (*remove)(struct cx8802_driver *drv);
429
430 /* MPEG 8802 -> mini driver - Access for hardware control */
431 int (*advise_acquire)(struct cx8802_driver *drv);
432 int (*advise_release)(struct cx8802_driver *drv);
433
434 /* MPEG 8802 <- mini driver - Access for hardware control */
435 int (*request_acquire)(struct cx8802_driver *drv);
436 int (*request_release)(struct cx8802_driver *drv);
437};
438
408struct cx8802_dev { 439struct cx8802_dev {
409 struct cx88_core *core; 440 struct cx88_core *core;
410 spinlock_t slock; 441 spinlock_t slock;
@@ -439,6 +470,9 @@ struct cx8802_dev {
439 470
440 /* mpeg params */ 471 /* mpeg params */
441 struct cx2341x_mpeg_params params; 472 struct cx2341x_mpeg_params params;
473
474 /* List of attached drivers */
475 struct cx8802_driver drvlist;
442}; 476};
443 477
444/* ----------------------------------------------------------- */ 478/* ----------------------------------------------------------- */
@@ -571,6 +605,11 @@ void cx88_get_stereo(struct cx88_core *core, struct v4l2_tuner *t);
571void cx88_set_stereo(struct cx88_core *core, u32 mode, int manual); 605void cx88_set_stereo(struct cx88_core *core, u32 mode, int manual);
572int cx88_audio_thread(void *data); 606int cx88_audio_thread(void *data);
573 607
608int cx8802_register_driver(struct cx8802_driver *drv);
609int cx8802_unregister_driver(struct cx8802_driver *drv);
610struct cx8802_dev * cx8802_get_device(struct inode *inode);
611struct cx8802_driver * cx8802_get_driver(struct cx8802_dev *dev, enum cx88_board_type btype);
612
574/* ----------------------------------------------------------- */ 613/* ----------------------------------------------------------- */
575/* cx88-input.c */ 614/* cx88-input.c */
576 615
@@ -600,6 +639,13 @@ extern int cx88_do_ioctl(struct inode *inode, struct file *file, int radio,
600extern const u32 cx88_user_ctrls[]; 639extern const u32 cx88_user_ctrls[];
601extern int cx8800_ctrl_query(struct v4l2_queryctrl *qctrl); 640extern int cx8800_ctrl_query(struct v4l2_queryctrl *qctrl);
602 641
642/* ----------------------------------------------------------- */
643/* cx88-blackbird.c */
644/* used by cx88-ivtv ioctl emulation layer */
645extern int (*cx88_ioctl_hook)(struct inode *inode, struct file *file,
646 unsigned int cmd, void *arg);
647extern unsigned int (*cx88_ioctl_translator)(unsigned int cmd);
648
603/* 649/*
604 * Local variables: 650 * Local variables:
605 * c-basic-offset: 8 651 * c-basic-offset: 8