Discussion:
Updated cx88 driver, now with PCIe!
(too old to reply)
Jason Harmening
2009-06-23 16:23:32 UTC
Permalink
cx88 version 1.2.0 is now in ports. In addition to the fix for the
userspace buffer sync panic (<sarcasm>I'm awesome!</sarcasm>) and some
cleanup of the internal driver architecture, this release adds kernel
driver support for CX23885/7/8-based PCIe cards.

Datasheets for the CX23885 family are not publicly available, but this
support was made possible by the hard work of Konstantin Dimitrov. He
did a great deal of clean-room research into the register-level
programming interfaces for the CX23885/7/8, and was ultimately able to
determine their SRAM layout and much of the required I2C and MPEG
transport stream control logic. We were able to fill in all the
remaining gaps based on our existing knowledge of the CX23880 family
and correlation of observed behavior with the register constants
declared in the Linux CX23885 driver source code.

The net result of this effort is a very clean driver enhancement--All
of the fundamental DMA and I2C logic is integrated into the common
code base with leverage of existing cx88 infrastructure and relatively
little added code. Common MPEG routines have been moved to
cx88mpegcore.ko, which also exposes the /dev/cx88mpeg* device nodes,
so the nodes are ioctl(2)-compatible. cx88mpeg.ko is now a thin
CX23880-specific wrapper around cx88mpegcore, while cx23885.ko is a
thin CX23885-family wrapper for all device interfaces that may be used
with CX23885/7/8 devices (currently only cx88mpegcore).

This support is currently MPEG-only. We will consider adding support
for other streams (analog, MPEG encoders, etc.) as need arises.

As usual, the kernel drivers should attach to any CX23885/7/8 device.
The initial CX23885-family cards supported in userspace are the
Hauppauge WinTV HVR-1250 and HVR-1800. Unfortunately, these are not
dual-HDTV cards. Each has one MPEG transport stream attached to the
digital TV frontend, while the 1800 has the other transport stream
attached to the analog frontend via a hardware encoder. I'll shortly
begin work on support for the DViCO Fusion 7 Dual, which *is* a
dual-HDTV card.
Konstantin is also working on support for DVB-T CX23885/7/8 cards,
namely the HVR-1200 and HVR-1700. He has successfully captured TV
streams with them, but they have complex tuners/demodulators that need
a lot of work to polish.

There are also new tunables for enabling I2C polling (for those RT
people who don't like lots of interrupts) and for enabling message
signaled interrupts (PCIe-only). See the wiki for details.

Please join me in giving a shout-out to Konstantin--without his hard
work I'd still be sitting here waiting for a datasheet to fall from
the sky.

--Jason
Juergen Lock
2009-06-23 21:01:42 UTC
Permalink
Post by Jason Harmening
cx88 version 1.2.0 is now in ports. In addition to the fix for the
userspace buffer sync panic (<sarcasm>I'm awesome!</sarcasm>) and some
cleanup of the internal driver architecture, this release adds kernel
driver support for CX23885/7/8-based PCIe cards.
Datasheets for the CX23885 family are not publicly available, but this
support was made possible by the hard work of Konstantin Dimitrov. He
did a great deal of clean-room research into the register-level
programming interfaces for the CX23885/7/8, and was ultimately able to
determine their SRAM layout and much of the required I2C and MPEG
transport stream control logic. We were able to fill in all the
remaining gaps based on our existing knowledge of the CX23880 family
and correlation of observed behavior with the register constants
declared in the Linux CX23885 driver source code.
The net result of this effort is a very clean driver enhancement--All
of the fundamental DMA and I2C logic is integrated into the common
code base with leverage of existing cx88 infrastructure and relatively
little added code. Common MPEG routines have been moved to
cx88mpegcore.ko, which also exposes the /dev/cx88mpeg* device nodes,
so the nodes are ioctl(2)-compatible. cx88mpeg.ko is now a thin
CX23880-specific wrapper around cx88mpegcore, while cx23885.ko is a
thin CX23885-family wrapper for all device interfaces that may be used
with CX23885/7/8 devices (currently only cx88mpegcore).
This support is currently MPEG-only. We will consider adding support
for other streams (analog, MPEG encoders, etc.) as need arises.
As usual, the kernel drivers should attach to any CX23885/7/8 device.
The initial CX23885-family cards supported in userspace are the
Hauppauge WinTV HVR-1250 and HVR-1800. Unfortunately, these are not
dual-HDTV cards. Each has one MPEG transport stream attached to the
digital TV frontend, while the 1800 has the other transport stream
attached to the analog frontend via a hardware encoder. I'll shortly
begin work on support for the DViCO Fusion 7 Dual, which *is* a
dual-HDTV card.
Konstantin is also working on support for DVB-T CX23885/7/8 cards,
namely the HVR-1200 and HVR-1700. He has successfully captured TV
streams with them, but they have complex tuners/demodulators that need
a lot of work to polish.
There are also new tunables for enabling I2C polling (for those RT
people who don't like lots of interrupts) and for enabling message
signaled interrupts (PCIe-only). See the wiki for details.
Please join me in giving a shout-out to Konstantin--without his hard
work I'd still be sitting here waiting for a datasheet to fall from
the sky.
Yeah, Konstantin++ :)

Although the version in ports seems to be missing a few headers now at least:

[...]
c++ -O2 -fno-strict-aliasing -pipe -Wall -I/usr/local/include -I../mpeg -I../audio -I../video -I../common -I./ -I/usr/local/include/libtuner -I/usr/local/include -c analog/cx88_analog_driver.cpp
ar -x /usr/local/lib/libezxml.a
c++ -o cx88 -O2 -fno-strict-aliasing -pipe -Wall -I/usr/local/include -I../mpeg -I../audio -I../video -I../common -I./ -I/usr/local/include/libtuner -I/usr/local/include -I./mpeg -I./analog -I./drivers -L/usr/local/lib/libtuner -ltuner -lpthread drivers/cx88_cards.cpp cx88.cpp *.o
In file included from drivers/cx88_cards.h:45,
from drivers/cx88_cards.cpp:29:
drivers/wintv_hvr1800.h:31:20: error: mt2131.h: No such file or directory
drivers/wintv_hvr1800.h:32:21: error: cx24227.h: No such file or directory
In file included from drivers/cx88_cards.h:45,
from drivers/cx88_cards.cpp:29:
drivers/wintv_hvr1800.h: In member function 'virtual int wintv_hvr1800::create_i2c_drivers()':
drivers/wintv_hvr1800.h:56: error: expected type-specifier before 'cx24227'
drivers/wintv_hvr1800.h:56: error: cannot convert 'int*' to 'tuner_driver*' in assignment
drivers/wintv_hvr1800.h:56: error: expected `;' before 'cx24227'
drivers/wintv_hvr1800.h:58: error: expected type-specifier before 'mt2131'
drivers/wintv_hvr1800.h:58: error: cannot convert 'int*' to 'tuner_driver*' in assignment
drivers/wintv_hvr1800.h:58: error: expected `;' before 'mt2131'
In file included from ./drivers/cx88_cards.h:45,
from ./mpeg/cx88_mpeg_driver_factory.h:31,
from cx88.cpp:47:
./drivers/wintv_hvr1800.h:31:20: error: mt2131.h: No such file or directory
./drivers/wintv_hvr1800.h:32:21: error: cx24227.h: No such file or directory
In file included from ./drivers/cx88_cards.h:45,
from ./mpeg/cx88_mpeg_driver_factory.h:31,
from cx88.cpp:47:
./drivers/wintv_hvr1800.h: In member function 'virtual int wintv_hvr1800::create_i2c_drivers()':
./drivers/wintv_hvr1800.h:56: error: expected type-specifier before 'cx24227'
./drivers/wintv_hvr1800.h:56: error: cannot convert 'int*' to 'tuner_driver*' in assignment
./drivers/wintv_hvr1800.h:56: error: expected `;' before 'cx24227'
./drivers/wintv_hvr1800.h:58: error: expected type-specifier before 'mt2131'
./drivers/wintv_hvr1800.h:58: error: cannot convert 'int*' to 'tuner_driver*' in assignment
./drivers/wintv_hvr1800.h:58: error: expected `;' before 'mt2131'
*** Error code 1

Stop in /usr/ports/multimedia/cx88/work/cx88-1.2.0/client.
*** Error code 1

Stop in /usr/ports/multimedia/cx88/work/cx88-1.2.0.
*** Error code 1

Stop in /usr/ports/multimedia/cx88.
Jason Harmening
2009-06-23 21:42:25 UTC
Permalink
Post by Juergen Lock
cx88 version 1.2.0 is now in ports.  In addition to the fix for the
userspace buffer sync panic (<sarcasm>I'm awesome!</sarcasm>) and some
cleanup of the internal driver architecture, this release adds kernel
driver support for CX23885/7/8-based PCIe cards.
Datasheets for the CX23885 family are not publicly available, but this
support was made possible by the hard work of Konstantin Dimitrov. He
did a great deal of clean-room research into the register-level
programming interfaces for the CX23885/7/8, and was ultimately able to
determine their SRAM layout and much of the required I2C and MPEG
transport stream control logic. We were able to fill in all the
remaining gaps based on our existing knowledge of the CX23880 family
and correlation of observed behavior with the register constants
declared in the Linux CX23885 driver source code.
The net result of this effort is a very clean driver enhancement--All
of the fundamental DMA and I2C logic is integrated into the common
code base with leverage of existing cx88 infrastructure and relatively
little added code. Common MPEG routines have been moved to
cx88mpegcore.ko, which also exposes the /dev/cx88mpeg* device nodes,
so the nodes are ioctl(2)-compatible. cx88mpeg.ko is now a thin
CX23880-specific wrapper around cx88mpegcore, while cx23885.ko is a
thin CX23885-family wrapper for all device interfaces that may be used
with CX23885/7/8 devices (currently only cx88mpegcore).
This support is currently MPEG-only. We will consider adding support
for other streams (analog, MPEG encoders, etc.) as need arises.
As usual, the kernel drivers should attach to any CX23885/7/8 device.
The initial CX23885-family cards supported in userspace are the
Hauppauge WinTV HVR-1250 and HVR-1800.  Unfortunately, these are not
dual-HDTV cards.  Each has one MPEG transport stream attached to the
digital TV frontend, while the 1800 has the other transport stream
attached to the analog frontend via a hardware encoder.  I'll shortly
begin work on support for the DViCO Fusion 7 Dual, which *is* a
dual-HDTV card.
Konstantin is also working on support for DVB-T CX23885/7/8 cards,
namely the HVR-1200 and HVR-1700.  He has successfully captured TV
streams with them, but they have complex tuners/demodulators that need
a lot of work to polish.
There are also new tunables for enabling I2C polling (for those RT
people who don't like lots of interrupts) and for enabling message
signaled interrupts (PCIe-only).  See the wiki for details.
Please join me in giving a shout-out to Konstantin--without his hard
work I'd still be sitting here waiting for a datasheet to fall from
the sky.
Yeah, Konstantin++ :)
[...]
c++ -O2 -fno-strict-aliasing -pipe -Wall -I/usr/local/include -I../mpeg -I../audio -I../video -I../common -I./  -I/usr/local/include/libtuner -I/usr/local/include -c analog/cx88_analog_driver.cpp
ar -x /usr/local/lib/libezxml.a
c++ -o cx88 -O2 -fno-strict-aliasing -pipe -Wall -I/usr/local/include -I../mpeg -I../audio -I../video -I../common -I./  -I/usr/local/include/libtuner -I/usr/local/include -I./mpeg -I./analog -I./drivers -L/usr/local/lib/libtuner -ltuner -lpthread drivers/cx88_cards.cpp cx88.cpp *.o
In file included from drivers/cx88_cards.h:45,
drivers/wintv_hvr1800.h:31:20: error: mt2131.h: No such file or directory
drivers/wintv_hvr1800.h:32:21: error: cx24227.h: No such file or directory
In file included from drivers/cx88_cards.h:45,
drivers/wintv_hvr1800.h:56: error: expected type-specifier before 'cx24227'
drivers/wintv_hvr1800.h:56: error: cannot convert 'int*' to 'tuner_driver*' in assignment
drivers/wintv_hvr1800.h:56: error: expected `;' before 'cx24227'
drivers/wintv_hvr1800.h:58: error: expected type-specifier before 'mt2131'
drivers/wintv_hvr1800.h:58: error: cannot convert 'int*' to 'tuner_driver*' in assignment
drivers/wintv_hvr1800.h:58: error: expected `;' before 'mt2131'
In file included from ./drivers/cx88_cards.h:45,
                from ./mpeg/cx88_mpeg_driver_factory.h:31,
./drivers/wintv_hvr1800.h:31:20: error: mt2131.h: No such file or directory
./drivers/wintv_hvr1800.h:32:21: error: cx24227.h: No such file or directory
In file included from ./drivers/cx88_cards.h:45,
                from ./mpeg/cx88_mpeg_driver_factory.h:31,
./drivers/wintv_hvr1800.h:56: error: expected type-specifier before 'cx24227'
./drivers/wintv_hvr1800.h:56: error: cannot convert 'int*' to 'tuner_driver*' in assignment
./drivers/wintv_hvr1800.h:56: error: expected `;' before 'cx24227'
./drivers/wintv_hvr1800.h:58: error: expected type-specifier before 'mt2131'
./drivers/wintv_hvr1800.h:58: error: cannot convert 'int*' to 'tuner_driver*' in assignment
./drivers/wintv_hvr1800.h:58: error: expected `;' before 'mt2131'
*** Error code 1
Stop in /usr/ports/multimedia/cx88/work/cx88-1.2.0/client.
*** Error code 1
Stop in /usr/ports/multimedia/cx88/work/cx88-1.2.0.
*** Error code 1
Stop in /usr/ports/multimedia/cx88.
If you're doing a portupgrade, make sure to either do an
upward-recursive portupgrade or to upgrade the libtuner dependency
first.
Juergen Lock
2009-06-23 22:10:09 UTC
Permalink
Post by Jason Harmening
Post by Juergen Lock
cx88 version 1.2.0 is now in ports.  In addition to the fix for the
userspace buffer sync panic (<sarcasm>I'm awesome!</sarcasm>) and some
cleanup of the internal driver architecture, this release adds kernel
driver support for CX23885/7/8-based PCIe cards.
Datasheets for the CX23885 family are not publicly available, but this
support was made possible by the hard work of Konstantin Dimitrov. He
did a great deal of clean-room research into the register-level
programming interfaces for the CX23885/7/8, and was ultimately able to
determine their SRAM layout and much of the required I2C and MPEG
transport stream control logic. We were able to fill in all the
remaining gaps based on our existing knowledge of the CX23880 family
and correlation of observed behavior with the register constants
declared in the Linux CX23885 driver source code.
The net result of this effort is a very clean driver enhancement--All
of the fundamental DMA and I2C logic is integrated into the common
code base with leverage of existing cx88 infrastructure and relatively
little added code. Common MPEG routines have been moved to
cx88mpegcore.ko, which also exposes the /dev/cx88mpeg* device nodes,
so the nodes are ioctl(2)-compatible. cx88mpeg.ko is now a thin
CX23880-specific wrapper around cx88mpegcore, while cx23885.ko is a
thin CX23885-family wrapper for all device interfaces that may be used
with CX23885/7/8 devices (currently only cx88mpegcore).
This support is currently MPEG-only. We will consider adding support
for other streams (analog, MPEG encoders, etc.) as need arises.
As usual, the kernel drivers should attach to any CX23885/7/8 device.
The initial CX23885-family cards supported in userspace are the
Hauppauge WinTV HVR-1250 and HVR-1800.  Unfortunately, these are not
dual-HDTV cards.  Each has one MPEG transport stream attached to the
digital TV frontend, while the 1800 has the other transport stream
attached to the analog frontend via a hardware encoder.  I'll shortly
begin work on support for the DViCO Fusion 7 Dual, which *is* a
dual-HDTV card.
Konstantin is also working on support for DVB-T CX23885/7/8 cards,
namely the HVR-1200 and HVR-1700.  He has successfully captured TV
streams with them, but they have complex tuners/demodulators that need
a lot of work to polish.
There are also new tunables for enabling I2C polling (for those RT
people who don't like lots of interrupts) and for enabling message
signaled interrupts (PCIe-only).  See the wiki for details.
Please join me in giving a shout-out to Konstantin--without his hard
work I'd still be sitting here waiting for a datasheet to fall from
the sky.
Yeah, Konstantin++ :)
[...]
c++ -O2 -fno-strict-aliasing -pipe -Wall -I/usr/local/include -I../mpeg -I../audio -I../video -I../common -I./  -I/usr/local/include/libtuner -I/usr/local/include -c analog/cx88_analog_driver.cpp
ar -x /usr/local/lib/libezxml.a
c++ -o cx88 -O2 -fno-strict-aliasing -pipe -Wall -I/usr/local/include -I../mpeg -I../audio -I../video -I../common -I./  -I/usr/local/include/libtuner -I/usr/local/include -I./mpeg -I./analog -I./drivers -L/usr/local/lib/libtuner -ltuner -lpthread drivers/cx88_cards.cpp cx88.cpp *.o
In file included from drivers/cx88_cards.h:45,
drivers/wintv_hvr1800.h:31:20: error: mt2131.h: No such file or directory
drivers/wintv_hvr1800.h:32:21: error: cx24227.h: No such file or directory
In file included from drivers/cx88_cards.h:45,
drivers/wintv_hvr1800.h:56: error: expected type-specifier before 'cx24227'
drivers/wintv_hvr1800.h:56: error: cannot convert 'int*' to 'tuner_driver*' in assignment
drivers/wintv_hvr1800.h:56: error: expected `;' before 'cx24227'
drivers/wintv_hvr1800.h:58: error: expected type-specifier before 'mt2131'
drivers/wintv_hvr1800.h:58: error: cannot convert 'int*' to 'tuner_driver*' in assignment
drivers/wintv_hvr1800.h:58: error: expected `;' before 'mt2131'
In file included from ./drivers/cx88_cards.h:45,
                from ./mpeg/cx88_mpeg_driver_factory.h:31,
./drivers/wintv_hvr1800.h:31:20: error: mt2131.h: No such file or directory
./drivers/wintv_hvr1800.h:32:21: error: cx24227.h: No such file or directory
In file included from ./drivers/cx88_cards.h:45,
                from ./mpeg/cx88_mpeg_driver_factory.h:31,
./drivers/wintv_hvr1800.h:56: error: expected type-specifier before 'cx24227'
./drivers/wintv_hvr1800.h:56: error: cannot convert 'int*' to 'tuner_driver*' in assignment
./drivers/wintv_hvr1800.h:56: error: expected `;' before 'cx24227'
./drivers/wintv_hvr1800.h:58: error: expected type-specifier before 'mt2131'
./drivers/wintv_hvr1800.h:58: error: cannot convert 'int*' to 'tuner_driver*' in assignment
./drivers/wintv_hvr1800.h:58: error: expected `;' before 'mt2131'
*** Error code 1
Stop in /usr/ports/multimedia/cx88/work/cx88-1.2.0/client.
*** Error code 1
Stop in /usr/ports/multimedia/cx88/work/cx88-1.2.0.
*** Error code 1
Stop in /usr/ports/multimedia/cx88.
If you're doing a portupgrade, make sure to either do an
upward-recursive portupgrade or to upgrade the libtuner dependency
first.
Oh haha, I like totally, completely forgot this is two ports...

Sorry for the noise,
Juergen
Bruce
2009-10-25 18:47:51 UTC
Permalink
Post by Jason Harmening
As usual, the kernel drivers should attach to any CX23885/7/8 device.
The initial CX23885-family cards supported in userspace are the
Hauppauge WinTV HVR-1250 and HVR-1800. Unfortunately, these are not
dual-HDTV cards. Each has one MPEG transport stream attached to the
digital TV frontend, while the 1800 has the other transport stream
attached to the analog frontend via a hardware encoder. I'll shortly
begin work on support for the DViCO Fusion 7 Dual, which *is* a
dual-HDTV card.
Is the Hauppauge 2250 (dual-HDTV card) supported?
Jason Harmening
2009-10-26 01:45:43 UTC
Permalink
Post by Bruce
Is the Hauppauge 2250 (dual-HDTV card) supported?
I believe the HVR-2250 is based on the saa7164 chip, not the cx88.
Continue reading on narkive:
Loading...