auvitekvar.h revision 1.8.2.1
11.8.2.1Ssnj/* $NetBSD: auvitekvar.h,v 1.8.2.1 2017/04/05 19:54:19 snj Exp $ */ 21.1Sjmcneill 31.1Sjmcneill/*- 41.1Sjmcneill * Copyright (c) 2010 Jared D. McNeill <jmcneill@invisible.ca> 51.1Sjmcneill * All rights reserved. 61.1Sjmcneill * 71.1Sjmcneill * Redistribution and use in source and binary forms, with or without 81.1Sjmcneill * modification, are permitted provided that the following conditions 91.1Sjmcneill * are met: 101.1Sjmcneill * 1. Redistributions of source code must retain the above copyright 111.1Sjmcneill * notice, this list of conditions and the following disclaimer. 121.1Sjmcneill * 2. Redistributions in binary form must reproduce the above copyright 131.1Sjmcneill * notice, this list of conditions and the following disclaimer in the 141.1Sjmcneill * documentation and/or other materials provided with the distribution. 151.1Sjmcneill * 161.1Sjmcneill * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 171.1Sjmcneill * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 181.1Sjmcneill * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 191.1Sjmcneill * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 201.1Sjmcneill * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 211.1Sjmcneill * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 221.1Sjmcneill * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 231.1Sjmcneill * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 241.1Sjmcneill * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 251.1Sjmcneill * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 261.1Sjmcneill * POSSIBILITY OF SUCH DAMAGE. 271.1Sjmcneill */ 281.1Sjmcneill 291.1Sjmcneill#ifndef _AUVITEKVAR_H 301.1Sjmcneill#define _AUVITEKVAR_H 311.1Sjmcneill 321.1Sjmcneill#include <sys/mutex.h> 331.3Sjmcneill#include <sys/condvar.h> 341.3Sjmcneill#include <sys/kthread.h> 351.1Sjmcneill 361.5Sdyoung#include <dev/dtv/dtvif.h> 371.5Sdyoung 381.1Sjmcneill#include <dev/usb/usb.h> 391.1Sjmcneill#include <dev/usb/usbdi.h> 401.1Sjmcneill#include <dev/usb/usbdi_util.h> 411.1Sjmcneill#include <dev/i2c/i2cvar.h> 421.1Sjmcneill 431.1Sjmcneill#include <dev/i2c/au8522var.h> 441.1Sjmcneill#include <dev/i2c/xc5kvar.h> 451.1Sjmcneill#include <dev/i2c/xc5kreg.h> 461.1Sjmcneill 471.1Sjmcneillstruct auvitek_softc; 481.1Sjmcneill 491.1Sjmcneillenum auvitek_board { 501.2Sjmcneill AUVITEK_BOARD_HVR_850, 511.1Sjmcneill AUVITEK_BOARD_HVR_950Q, 521.1Sjmcneill}; 531.1Sjmcneill 541.3Sjmcneill#define AUVITEK_NISOC_XFERS 16 551.3Sjmcneill#define AUVITEK_NBULK_XFERS 1 561.1Sjmcneill#define AUVITEK_XFER_ALTNO 5 571.3Sjmcneill#define AUVITEK_BULK_BUFLEN 58658 /* BDA driver uses the same */ 581.1Sjmcneill 591.1Sjmcneillstruct auvitek_isoc { 601.1Sjmcneill struct auvitek_xfer *i_ax; 611.8.2.1Ssnj struct usbd_xfer *i_xfer; 621.1Sjmcneill uint8_t *i_buf; 631.1Sjmcneill uint16_t *i_frlengths; 641.1Sjmcneill}; 651.1Sjmcneill 661.1Sjmcneillstruct auvitek_videobuf { 671.1Sjmcneill uint8_t av_buf[720*480*2]; 681.1Sjmcneill uint32_t av_el, av_eb; 691.1Sjmcneill uint32_t av_ol, av_ob; 701.1Sjmcneill uint32_t av_stride; 711.1Sjmcneill}; 721.1Sjmcneill 731.1Sjmcneillstruct auvitek_xfer { 741.1Sjmcneill struct auvitek_softc *ax_sc; 751.1Sjmcneill int ax_endpt; 761.1Sjmcneill uint16_t ax_maxpktlen; 771.8.2.1Ssnj struct usbd_pipe * ax_pipe; 781.3Sjmcneill struct auvitek_isoc ax_i[AUVITEK_NISOC_XFERS]; 791.1Sjmcneill uint32_t ax_nframes; 801.1Sjmcneill uint32_t ax_uframe_len; 811.1Sjmcneill uint8_t ax_frinfo; 821.1Sjmcneill int ax_frno; 831.1Sjmcneill struct auvitek_videobuf ax_av; 841.1Sjmcneill}; 851.1Sjmcneill 861.3Sjmcneillstruct auvitek_bulk_xfer { 871.3Sjmcneill struct auvitek_softc *bx_sc; 881.8.2.1Ssnj struct usbd_xfer *bx_xfer; 891.3Sjmcneill uint8_t *bx_buffer; 901.3Sjmcneill}; 911.3Sjmcneill 921.3Sjmcneillstruct auvitek_bulk { 931.3Sjmcneill struct auvitek_softc *ab_sc; 941.3Sjmcneill int ab_endpt; 951.8.2.1Ssnj struct usbd_pipe *ab_pipe; 961.3Sjmcneill struct auvitek_bulk_xfer ab_bx[AUVITEK_NBULK_XFERS]; 971.3Sjmcneill bool ab_running; 981.3Sjmcneill}; 991.3Sjmcneill 1001.1Sjmcneillstruct auvitek_softc { 1011.1Sjmcneill device_t sc_dev; 1021.6Sjmcneill device_t sc_videodev, sc_dtvdev, sc_audiodev, sc_i2cdev; 1031.1Sjmcneill struct i2c_controller sc_i2c; 1041.1Sjmcneill kmutex_t sc_i2c_lock; 1051.1Sjmcneill 1061.8.2.1Ssnj struct usbd_device *sc_udev; 1071.1Sjmcneill int sc_uport; 1081.8.2.1Ssnj struct usbd_interface *sc_isoc_iface; 1091.8.2.1Ssnj struct usbd_interface *sc_bulk_iface; 1101.1Sjmcneill 1111.1Sjmcneill char sc_running; 1121.1Sjmcneill char sc_dying; 1131.1Sjmcneill 1141.1Sjmcneill enum auvitek_board sc_board; 1151.1Sjmcneill const char *sc_descr; 1161.1Sjmcneill uint8_t sc_i2c_clkdiv; 1171.1Sjmcneill 1181.1Sjmcneill struct au8522 *sc_au8522; 1191.1Sjmcneill struct xc5k *sc_xc5k; 1201.1Sjmcneill kmutex_t sc_subdev_lock; 1211.1Sjmcneill 1221.1Sjmcneill unsigned int sc_ainput, sc_vinput; 1231.1Sjmcneill uint32_t sc_curfreq; 1241.4Sjmcneill void (*sc_dtvsubmitcb)(void *, 1251.4Sjmcneill const struct dtv_payload *); 1261.4Sjmcneill void *sc_dtvsubmitarg; 1271.1Sjmcneill 1281.1Sjmcneill struct auvitek_xfer sc_ax; 1291.3Sjmcneill struct auvitek_bulk sc_ab; 1301.1Sjmcneill 1311.1Sjmcneill char sc_businfo[32]; 1321.1Sjmcneill}; 1331.1Sjmcneill 1341.1Sjmcneill/* auvitek.c */ 1351.1Sjmcneilluint8_t auvitek_read_1(struct auvitek_softc *, uint16_t); 1361.1Sjmcneillvoid auvitek_write_1(struct auvitek_softc *, uint16_t, uint8_t); 1371.7Sjmcneillvoid auvitek_attach_tuner(device_t); 1381.1Sjmcneill 1391.1Sjmcneill/* auvitek_audio.c */ 1401.1Sjmcneillint auvitek_audio_attach(struct auvitek_softc *); 1411.1Sjmcneillint auvitek_audio_detach(struct auvitek_softc *, int); 1421.1Sjmcneillvoid auvitek_audio_childdet(struct auvitek_softc *, device_t); 1431.1Sjmcneill 1441.1Sjmcneill/* auvitek_board.c */ 1451.1Sjmcneillvoid auvitek_board_init(struct auvitek_softc *); 1461.3Sjmcneillint auvitek_board_tuner_reset(void *); 1471.3Sjmcneillunsigned int auvitek_board_get_if_frequency(struct auvitek_softc *); 1481.1Sjmcneill 1491.1Sjmcneill/* auvitek_i2c.c */ 1501.1Sjmcneillint auvitek_i2c_attach(struct auvitek_softc *); 1511.1Sjmcneillint auvitek_i2c_detach(struct auvitek_softc *, int); 1521.6Sjmcneillvoid auvitek_i2c_rescan(struct auvitek_softc *, const char *, const int *); 1531.6Sjmcneillvoid auvitek_i2c_childdet(struct auvitek_softc *, device_t); 1541.1Sjmcneill 1551.1Sjmcneill/* auvitek_video.c */ 1561.1Sjmcneillint auvitek_video_attach(struct auvitek_softc *); 1571.1Sjmcneillint auvitek_video_detach(struct auvitek_softc *, int); 1581.4Sjmcneillvoid auvitek_video_rescan(struct auvitek_softc *, const char *, const int *); 1591.1Sjmcneillvoid auvitek_video_childdet(struct auvitek_softc *, device_t); 1601.1Sjmcneill 1611.3Sjmcneill/* auvitek_dtv.c */ 1621.3Sjmcneillint auvitek_dtv_attach(struct auvitek_softc *); 1631.3Sjmcneillint auvitek_dtv_detach(struct auvitek_softc *, int); 1641.4Sjmcneillvoid auvitek_dtv_rescan(struct auvitek_softc *, const char *, const int *); 1651.3Sjmcneillvoid auvitek_dtv_childdet(struct auvitek_softc *, device_t); 1661.3Sjmcneill 1671.1Sjmcneill#endif /* !_AUVITEKVAR_H */ 168