[BACK]Return to bktr_reg.h CVS log [TXT][DIR] Up to [local] / sys / dev / pci / bktr

Annotation of sys/dev/pci/bktr/bktr_reg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: bktr_reg.h,v 1.10 2007/06/11 08:10:22 robert Exp $    */
                      2: /*
                      3:  * $FreeBSD: src/sys/dev/bktr/bktr_reg.h,v 1.42 2000/10/31 13:09:56 roger Exp $
                      4:  *
                      5:  * Copyright (c) 1999 Roger Hardiman
                      6:  * Copyright (c) 1998 Amancio Hasty
                      7:  * Copyright (c) 1995 Mark Tinguely and Jim Lowe
                      8:  * All rights reserved.
                      9:  *
                     10:  * Redistribution and use in source and binary forms, with or without
                     11:  * modification, are permitted provided that the following conditions
                     12:  * are met:
                     13:  * 1. Redistributions of source code must retain the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer.
                     15:  * 2. Redistributions in binary form must reproduce the above copyright
                     16:  *    notice, this list of conditions and the following disclaimer in the
                     17:  *    documentation and/or other materials provided with the distribution.
                     18:  * 3. All advertising materials mentioning features or use of this software
                     19:  *    must display the following acknowledgement:
                     20:  *     This product includes software developed by Mark Tinguely and Jim Lowe
                     21:  * 4. The name of the author may not be used to endorse or promote products
                     22:  *    derived from this software without specific prior written permission.
                     23:  *
                     24:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     25:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
                     26:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
                     27:  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
                     28:  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
                     29:  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
                     30:  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     31:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
                     32:  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
                     33:  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     34:  * POSSIBILITY OF SUCH DAMAGE.
                     35:  *
                     36:  */
                     37:
                     38: #include <machine/bus.h>               /* struct device */
                     39: #include <sys/device.h>
                     40: #include <sys/selinfo.h>                       /* struct selinfo */
                     41:
                     42: #ifdef DEBUG
                     43: #  define      bootverbose 1
                     44: #else
                     45: #  define      bootverbose 0
                     46: #endif
                     47:
                     48: /*
                     49:  * The kernel options for the driver now all begin with BKTR.
                     50:  * Support the older kernel options on OpenBSD.
                     51:  *
                     52:  */
                     53: #if defined(BROOKTREE_ALLOC_PAGES)
                     54: #define BKTR_ALLOC_PAGES BROOKTREE_ALLOC_PAGES
                     55: #endif
                     56:
                     57: #if defined(BROOKTREE_SYSTEM_DEFAULT)
                     58: #define BKTR_SYSTEM_DEFAULT BROOKTREE_SYSTEM_DEFAULT
                     59: #endif
                     60:
                     61: #if defined(OVERRIDE_CARD)
                     62: #define BKTR_OVERRIDE_CARD OVERRIDE_CARD
                     63: #endif
                     64:
                     65: #if defined(OVERRIDE_TUNER)
                     66: #define BKTR_OVERRIDE_TUNER OVERRIDE_TUNER
                     67: #endif
                     68:
                     69: #if defined(OVERRIDE_DBX)
                     70: #define BKTR_OVERRIDE_DBX OVERRIDE_DBX
                     71: #endif
                     72:
                     73: #if defined(OVERRIDE_MSP)
                     74: #define BKTR_OVERRIDE_MSP OVERRIDE_MSP
                     75: #endif
                     76:
                     77: #ifndef PCI_LATENCY_TIMER
                     78: #define        PCI_LATENCY_TIMER               0x0c    /* pci timer register */
                     79: #endif
                     80:
                     81: /*
                     82:  * Definitions for the Brooktree 848/878 video capture to pci interface.
                     83:  */
                     84: #include <dev/pci/pcivar.h>
                     85:
                     86: /* PCI vendor ID */
                     87: #define PCI_VENDOR_BROOKTREE    0x109e                /* Brooktree */
                     88: /* Brooktree products */
                     89: #define PCI_PRODUCT_BROOKTREE_BT848     0x0350        /* Bt848 Video Capture */
                     90: #define PCI_PRODUCT_BROOKTREE_BT849     0x0351        /* Bt849 Video Capture */
                     91: #define PCI_PRODUCT_BROOKTREE_BT878     0x036e        /* Bt878 Video Capture */
                     92: #define PCI_PRODUCT_BROOKTREE_BT879     0x036f        /* Bt879 Video Capture */
                     93:
                     94: #define BROOKTREE_848                   1
                     95: #define BROOKTREE_848A                  2
                     96: #define BROOKTREE_849A                  3
                     97: #define BROOKTREE_878                   4
                     98: #define BROOKTREE_879                   5
                     99:
                    100: typedef volatile u_int         bregister_t;
                    101: /*
                    102:  * if other persuasion endian, then compiler will probably require that
                    103:  * these next
                    104:  * macros be reversed
                    105:  */
                    106: #define        BTBYTE(what)    bregister_t  what:8; int :24
                    107: #define        BTWORD(what)    bregister_t  what:16; int: 16
                    108: #define BTLONG(what)   bregister_t  what:32
                    109:
                    110: struct bt848_registers {
                    111:     BTBYTE (dstatus);          /* 0, 1,2,3 */
                    112: #define BT848_DSTATUS_PRES             (1<<7)
                    113: #define BT848_DSTATUS_HLOC             (1<<6)
                    114: #define BT848_DSTATUS_FIELD            (1<<5)
                    115: #define BT848_DSTATUS_NUML             (1<<4)
                    116: #define BT848_DSTATUS_CSEL             (1<<3)
                    117: #define BT848_DSTATUS_PLOCK            (1<<2)
                    118: #define BT848_DSTATUS_LOF              (1<<1)
                    119: #define BT848_DSTATUS_COF              (1<<0)
                    120:     BTBYTE (iform);            /* 4, 5,6,7 */
                    121: #define BT848_IFORM_MUXSEL             (0x3<<5)
                    122: # define BT848_IFORM_M_MUX1            (0x03<<5)
                    123: # define BT848_IFORM_M_MUX0            (0x02<<5)
                    124: # define BT848_IFORM_M_MUX2            (0x01<<5)
                    125: # define BT848_IFORM_M_MUX3            (0x0)
                    126: # define BT848_IFORM_M_RSVD            (0x00<<5)
                    127: #define BT848_IFORM_XTSEL              (0x3<<3)
                    128: # define BT848_IFORM_X_AUTO            (0x03<<3)
                    129: # define BT848_IFORM_X_XT1             (0x02<<3)
                    130: # define BT848_IFORM_X_XT0             (0x01<<3)
                    131: # define BT848_IFORM_X_RSVD            (0x00<<3)
                    132:     BTBYTE (tdec);             /* 8, 9,a,b */
                    133:     BTBYTE (e_crop);           /* c, d,e,f */
                    134:     BTBYTE (e_vdelay_lo);      /* 10, 11,12,13 */
                    135:     BTBYTE (e_vactive_lo);     /* 14, 15,16,17 */
                    136:     BTBYTE (e_delay_lo);       /* 18, 19,1a,1b */
                    137:     BTBYTE (e_hactive_lo);     /* 1c, 1d,1e,1f */
                    138:     BTBYTE (e_hscale_hi);      /* 20, 21,22,23 */
                    139:     BTBYTE (e_hscale_lo);      /* 24, 25,26,27 */
                    140:     BTBYTE (bright);           /* 28, 29,2a,2b */
                    141:     BTBYTE (e_control);                /* 2c, 2d,2e,2f */
                    142: #define BT848_E_CONTROL_LNOTCH         (1<<7)
                    143: #define BT848_E_CONTROL_COMP           (1<<6)
                    144: #define BT848_E_CONTROL_LDEC           (1<<5)
                    145: #define BT848_E_CONTROL_CBSENSE                (1<<4)
                    146: #define BT848_E_CONTROL_RSVD           (1<<3)
                    147: #define BT848_E_CONTROL_CON_MSB                (1<<2)
                    148: #define BT848_E_CONTROL_SAT_U_MSB      (1<<1)
                    149: #define BT848_E_CONTROL_SAT_V_MSB      (1<<0)
                    150:     BTBYTE (contrast_lo);      /* 30, 31,32,33 */
                    151:     BTBYTE (sat_u_lo);         /* 34, 35,36,37 */
                    152:     BTBYTE (sat_v_lo);         /* 38, 39,3a,3b */
                    153:     BTBYTE (hue);              /* 3c, 3d,3e,3f */
                    154:     BTBYTE (e_scloop);         /* 40, 41,42,43 */
                    155: #define BT848_E_SCLOOP_RSVD1           (1<<7)
                    156: #define BT848_E_SCLOOP_CAGC            (1<<6)
                    157: #define BT848_E_SCLOOP_CKILL           (1<<5)
                    158: #define BT848_E_SCLOOP_HFILT           (0x3<<3)
                    159: # define BT848_E_SCLOOP_HFILT_ICON     (0x3<<3)
                    160: # define BT848_E_SCLOOP_HFILT_QCIF     (0x2<<3)
                    161: # define BT848_E_SCLOOP_HFILT_CIF      (0x1<<3)
                    162: # define BT848_E_SCLOOP_HFILT_AUTO     (0x0<<3)
                    163: #define BT848_E_SCLOOP_RSVD0           (0x7<<0)
                    164:     int                :32;            /* 44, 45,46,47 */
                    165:     BTBYTE (oform);            /* 48, 49,4a,4b */
                    166:     BTBYTE (e_vscale_hi);      /* 4c, 4d,4e,4f */
                    167:     BTBYTE (e_vscale_lo);      /* 50, 51,52,53 */
                    168:     BTBYTE (test);             /* 54, 55,56,57 */
                    169:     int                :32;            /* 58, 59,5a,5b */
                    170:     int                :32;            /* 5c, 5d,5e,5f */
                    171:     BTLONG (adelay);           /* 60, 61,62,63 */
                    172:     BTBYTE (bdelay);           /* 64, 65,66,67 */
                    173:     BTBYTE (adc);              /* 68, 69,6a,6b */
                    174: #define BT848_ADC_RESERVED             (0x80)  /* required pattern */
                    175: #define BT848_ADC_SYNC_T               (1<<5)
                    176: #define BT848_ADC_AGC_EN               (1<<4)
                    177: #define BT848_ADC_CLK_SLEEP            (1<<3)
                    178: #define BT848_ADC_Y_SLEEP              (1<<2)
                    179: #define BT848_ADC_C_SLEEP              (1<<1)
                    180: #define BT848_ADC_CRUSH                        (1<<0)
                    181:     BTBYTE (e_vtc);            /* 6c, 6d,6e,6f */
                    182:     int                :32;            /* 70, 71,72,73 */
                    183:     int        :32;            /* 74, 75,76,77 */
                    184:     int                :32;            /* 78, 79,7a,7b */
                    185:     BTLONG (sreset);           /* 7c, 7d,7e,7f */
                    186:     u_char     filler1[0x84-0x80];
                    187:     BTBYTE (tgctrl);           /* 84, 85,86,87 */
                    188: #define BT848_TGCTRL_TGCKI             (3<<3)
                    189: #define BT848_TGCTRL_TGCKI_XTAL                (0<<3)
                    190: #define BT848_TGCTRL_TGCKI_PLL         (1<<3)
                    191: #define BT848_TGCTRL_TGCKI_GPCLK       (2<<3)
                    192: #define BT848_TGCTRL_TGCKI_GPCLK_I     (3<<3)
                    193:     u_char     filler[0x8c-0x88];
                    194:     BTBYTE (o_crop);           /* 8c, 8d,8e,8f */
                    195:     BTBYTE (o_vdelay_lo);      /* 90, 91,92,93 */
                    196:     BTBYTE (o_vactive_lo);     /* 94, 95,96,97 */
                    197:     BTBYTE (o_delay_lo);       /* 98, 99,9a,9b */
                    198:     BTBYTE (o_hactive_lo);     /* 9c, 9d,9e,9f */
                    199:     BTBYTE (o_hscale_hi);      /* a0, a1,a2,a3 */
                    200:     BTBYTE (o_hscale_lo);      /* a4, a5,a6,a7 */
                    201:     int                :32;            /* a8, a9,aa,ab */
                    202:     BTBYTE (o_control);                /* ac, ad,ae,af */
                    203: #define BT848_O_CONTROL_LNOTCH         (1<<7)
                    204: #define BT848_O_CONTROL_COMP           (1<<6)
                    205: #define BT848_O_CONTROL_LDEC           (1<<5)
                    206: #define BT848_O_CONTROL_CBSENSE                (1<<4)
                    207: #define BT848_O_CONTROL_RSVD           (1<<3)
                    208: #define BT848_O_CONTROL_CON_MSB                (1<<2)
                    209: #define BT848_O_CONTROL_SAT_U_MSB      (1<<1)
                    210: #define BT848_O_CONTROL_SAT_V_MSB      (1<<0)
                    211:     u_char     fillter4[16];
                    212:     BTBYTE (o_scloop);         /* c0, c1,c2,c3 */
                    213: #define BT848_O_SCLOOP_RSVD1           (1<<7)
                    214: #define BT848_O_SCLOOP_CAGC            (1<<6)
                    215: #define BT848_O_SCLOOP_CKILL           (1<<5)
                    216: #define BT848_O_SCLOOP_HFILT           (0x3<<3)
                    217: #define BT848_O_SCLOOP_HFILT_ICON      (0x3<<3)
                    218: #define BT848_O_SCLOOP_HFILT_QCIF      (0x2<<3)
                    219: #define BT848_O_SCLOOP_HFILT_CIF       (0x1<<3)
                    220: #define BT848_O_SCLOOP_HFILT_AUTO      (0x0<<3)
                    221: #define BT848_O_SCLOOP_RSVD0           (0x7<<0)
                    222:     int                :32;            /* c4, c5,c6,c7 */
                    223:     int                :32;            /* c8, c9,ca,cb */
                    224:     BTBYTE (o_vscale_hi);      /* cc, cd,ce,cf */
                    225:     BTBYTE (o_vscale_lo);      /* d0, d1,d2,d3 */
                    226:     BTBYTE (color_fmt);                /* d4, d5,d6,d7 */
                    227:     bregister_t color_ctl_swap         :4; /* d8 */
                    228: #define BT848_COLOR_CTL_WSWAP_ODD      (1<<3)
                    229: #define BT848_COLOR_CTL_WSWAP_EVEN     (1<<2)
                    230: #define BT848_COLOR_CTL_BSWAP_ODD      (1<<1)
                    231: #define BT848_COLOR_CTL_BSWAP_EVEN     (1<<0)
                    232:     bregister_t color_ctl_gamma                :1;
                    233:     bregister_t color_ctl_rgb_ded      :1;
                    234:     bregister_t color_ctl_color_bars   :1;
                    235:     bregister_t color_ctl_ext_frmrate  :1;
                    236: #define BT848_COLOR_CTL_GAMMA          (1<<4)
                    237: #define BT848_COLOR_CTL_RGB_DED                (1<<5)
                    238: #define BT848_COLOR_CTL_COLOR_BARS     (1<<6)
                    239: #define BT848_COLOR_CTL_EXT_FRMRATE     (1<<7)
                    240:     int                :24;            /* d9,da,db */
                    241:     BTBYTE (cap_ctl);          /* dc, dd,de,df */
                    242: #define BT848_CAP_CTL_DITH_FRAME       (1<<4)
                    243: #define BT848_CAP_CTL_VBI_ODD          (1<<3)
                    244: #define BT848_CAP_CTL_VBI_EVEN         (1<<2)
                    245: #define BT848_CAP_CTL_ODD              (1<<1)
                    246: #define BT848_CAP_CTL_EVEN             (1<<0)
                    247:     BTBYTE (vbi_pack_size);    /* e0, e1,e2,e3 */
                    248:     BTBYTE (vbi_pack_del);     /* e4, e5,e6,e7 */
                    249:     int                :32;            /* e8, e9,ea,eb */
                    250:     BTBYTE (o_vtc);            /* ec, ed,ee,ef */
                    251:     BTBYTE (pll_f_lo);         /* f0, f1,f2,f3 */
                    252:     BTBYTE (pll_f_hi);         /* f4, f5,f6,f7 */
                    253:     BTBYTE (pll_f_xci);                /* f8, f9,fa,fb */
                    254: #define BT848_PLL_F_C                  (1<<6)
                    255: #define BT848_PLL_F_X                  (1<<7)
                    256:     u_char     filler2[0x100-0xfc];
                    257:     BTLONG (int_stat);         /* 100, 101,102,103 */
                    258:     BTLONG (int_mask);         /* 104, 105,106,107 */
                    259: #define BT848_INT_RISCS                        (0xf<<28)
                    260: #define BT848_INT_RISC_EN              (1<<27)
                    261: #define BT848_INT_RACK                 (1<<25)
                    262: #define BT848_INT_FIELD                        (1<<24)
                    263: #define BT848_INT_MYSTERYBIT           (1<<23)
                    264: #define BT848_INT_SCERR                        (1<<19)
                    265: #define BT848_INT_OCERR                        (1<<18)
                    266: #define BT848_INT_PABORT               (1<<17)
                    267: #define BT848_INT_RIPERR               (1<<16)
                    268: #define BT848_INT_PPERR                        (1<<15)
                    269: #define BT848_INT_FDSR                 (1<<14)
                    270: #define BT848_INT_FTRGT                        (1<<13)
                    271: #define BT848_INT_FBUS                 (1<<12)
                    272: #define BT848_INT_RISCI                        (1<<11)
                    273: #define BT848_INT_GPINT                        (1<<9)
                    274: #define BT848_INT_I2CDONE              (1<<8)
                    275: #define BT848_INT_RSV1                 (1<<7)
                    276: #define BT848_INT_RSV0                 (1<<6)
                    277: #define BT848_INT_VPRES                        (1<<5)
                    278: #define BT848_INT_HLOCK                        (1<<4)
                    279: #define BT848_INT_OFLOW                        (1<<3)
                    280: #define BT848_INT_HSYNC                        (1<<2)
                    281: #define BT848_INT_VSYNC                        (1<<1)
                    282: #define BT848_INT_FMTCHG               (1<<0)
                    283: #define        BT848_INT_BITS \
                    284:     ("\020\01FMTCHG\02VSYNC\03HSYNC\04OFLOW\05HLOCK\06VPRES\07RSV0"\
                    285:      "\010RSV1\011I2CDONE\012GPINT\014RISCI\015FBUS\016FTRGT\017FDSR"\
                    286:      "\020PPERR\021RIPERR\022PABORT\023OCERR\024SCERR"\
                    287:      "\030MYSTERYBIT\031FIELD\032RACK\034RISC_EN")
                    288:     int                :32;            /* 108, 109,10a,10b */
                    289:     BTWORD (gpio_dma_ctl);     /* 10c, 10d,10e,10f */
                    290: #define BT848_DMA_CTL_PL23TP4          (0<<6)  /* planar1 trigger 4 */
                    291: #define BT848_DMA_CTL_PL23TP8          (1<<6)  /* planar1 trigger 8 */
                    292: #define BT848_DMA_CTL_PL23TP16         (2<<6)  /* planar1 trigger 16 */
                    293: #define BT848_DMA_CTL_PL23TP32         (3<<6)  /* planar1 trigger 32 */
                    294: #define BT848_DMA_CTL_PL1TP4           (0<<4)  /* planar1 trigger 4 */
                    295: #define BT848_DMA_CTL_PL1TP8           (1<<4)  /* planar1 trigger 8 */
                    296: #define BT848_DMA_CTL_PL1TP16          (2<<4)  /* planar1 trigger 16 */
                    297: #define BT848_DMA_CTL_PL1TP32          (3<<4)  /* planar1 trigger 32 */
                    298: #define BT848_DMA_CTL_PKTP4            (0<<2)  /* packed trigger 4 */
                    299: #define BT848_DMA_CTL_PKTP8            (1<<2)  /* packed trigger 8 */
                    300: #define BT848_DMA_CTL_PKTP16           (2<<2)  /* packed trigger 16 */
                    301: #define BT848_DMA_CTL_PKTP32           (3<<2)  /* packed trigger 32 */
                    302: #define BT848_DMA_CTL_RISC_EN          (1<<1)
                    303: #define BT848_DMA_CTL_FIFO_EN          (1<<0)
                    304:     BTLONG (i2c_data_ctl);     /* 110, 111,112,113 */
                    305: #define BT848_DATA_CTL_I2CDIV          (0xf<<4)
                    306: #define BT848_DATA_CTL_I2CSYNC         (1<<3)
                    307: #define BT848_DATA_CTL_I2CW3B          (1<<2)
                    308: #define BT848_DATA_CTL_I2CSCL          (1<<1)
                    309: #define BT848_DATA_CTL_I2CSDA          (1<<0)
                    310:     BTLONG (risc_strt_add);    /* 114, 115,116,117 */
                    311:     BTLONG (gpio_out_en);      /* 118, 119,11a,11b */  /* really 24 bits */
                    312:     BTLONG (gpio_reg_inp);     /* 11c, 11d,11e,11f */  /* really 24 bits */
                    313:     BTLONG (risc_count);       /* 120, 121,122,123 */
                    314:     u_char     filler3[0x200-0x124];
                    315:     BTLONG (gpio_data);                /* 200, 201,202,203 */  /* really 24 bits */
                    316: };
                    317:
                    318:
                    319: #define BKTR_DSTATUS                   0x000
                    320: #define BKTR_IFORM                     0x004
                    321: #define BKTR_TDEC                      0x008
                    322: #define BKTR_E_CROP                    0x00C
                    323: #define BKTR_O_CROP                    0x08C
                    324: #define BKTR_E_VDELAY_LO               0x010
                    325: #define BKTR_O_VDELAY_LO               0x090
                    326: #define BKTR_E_VACTIVE_LO              0x014
                    327: #define BKTR_O_VACTIVE_LO              0x094
                    328: #define BKTR_E_DELAY_LO                        0x018
                    329: #define BKTR_O_DELAY_LO                        0x098
                    330: #define BKTR_E_HACTIVE_LO              0x01C
                    331: #define BKTR_O_HACTIVE_LO              0x09C
                    332: #define BKTR_E_HSCALE_HI               0x020
                    333: #define BKTR_O_HSCALE_HI               0x0A0
                    334: #define BKTR_E_HSCALE_LO               0x024
                    335: #define BKTR_O_HSCALE_LO               0x0A4
                    336: #define BKTR_BRIGHT                    0x028
                    337: #define BKTR_E_CONTROL                 0x02C
                    338: #define BKTR_O_CONTROL                 0x0AC
                    339: #define BKTR_CONTRAST_LO               0x030
                    340: #define BKTR_SAT_U_LO                  0x034
                    341: #define BKTR_SAT_V_LO                  0x038
                    342: #define BKTR_HUE                       0x03C
                    343: #define BKTR_E_SCLOOP                  0x040
                    344: #define BKTR_O_SCLOOP                  0x0C0
                    345: #define BKTR_OFORM                     0x048
                    346: #define BKTR_E_VSCALE_HI               0x04C
                    347: #define BKTR_O_VSCALE_HI               0x0CC
                    348: #define BKTR_E_VSCALE_LO               0x050
                    349: #define BKTR_O_VSCALE_LO               0x0D0
                    350: #define BKTR_TEST                      0x054
                    351: #define BKTR_ADELAY                    0x060
                    352: #define BKTR_BDELAY                    0x064
                    353: #define BKTR_ADC                       0x068
                    354: #define BKTR_E_VTC                     0x06C
                    355: #define BKTR_O_VTC                     0x0EC
                    356: #define BKTR_SRESET                    0x07C
                    357: #define BKTR_COLOR_FMT                 0x0D4
                    358: #define BKTR_COLOR_CTL                 0x0D8
                    359: #define BKTR_CAP_CTL                   0x0DC
                    360: #define BKTR_VBI_PACK_SIZE             0x0E0
                    361: #define BKTR_VBI_PACK_DEL              0x0E4
                    362: #define BKTR_INT_STAT                  0x100
                    363: #define BKTR_INT_MASK                  0x104
                    364: #define BKTR_RISC_COUNT                        0x120
                    365: #define BKTR_RISC_STRT_ADD             0x114
                    366: #define BKTR_GPIO_DMA_CTL              0x10C
                    367: #define BKTR_GPIO_OUT_EN               0x118
                    368: #define BKTR_GPIO_REG_INP              0x11C
                    369: #define BKTR_GPIO_DATA                 0x200
                    370: #define BKTR_I2C_DATA_CTL              0x110
                    371: #define BKTR_TGCTRL                    0x084
                    372: #define BKTR_PLL_F_LO                  0x0F0
                    373: #define BKTR_PLL_F_HI                  0x0F4
                    374: #define BKTR_PLL_F_XCI                 0x0F8
                    375:
                    376: /*
                    377:  * device support for onboard tv tuners
                    378:  */
                    379:
                    380: /* description of the LOGICAL tuner */
                    381: struct TVTUNER {
                    382:        int             frequency;
                    383:        u_char          chnlset;
                    384:        u_char          channel;
                    385:        u_char          band;
                    386:        u_char          afc;
                    387:        u_char          radio_mode;     /* current mode of the radio mode */
                    388:        int             tuner_mode;     /* current tuning mode */
                    389: #define BT848_TUNER_MODE_TV    1
                    390: #define BT848_TUNER_MODE_RADIO 2
                    391: };
                    392:
                    393: /* description of the PHYSICAL tuner */
                    394: struct TUNER {
                    395:        char           *name;
                    396:        u_char          type;
                    397:        u_char          pllControl[4];
                    398:        u_char          bandLimits[ 2 ];
                    399:        u_char          bandAddrs[ 4 ];        /* 3 first for the 3 TV
                    400:                                               ** bands. Last for radio
                    401:                                               ** band (0x00=NoRadio).
                    402:                                               */
                    403:
                    404: };
                    405:
                    406: /* description of the card */
                    407: #define EEPROMBLOCKSIZE                32
                    408: struct CARDTYPE {
                    409:        unsigned int            card_id;        /* card id (from #define's) */
                    410:        char                   *name;
                    411:        const struct TUNER*     tuner;          /* Tuner details */
                    412:        u_char                  tuner_pllAddr;  /* Tuner i2c address */
                    413:        u_char                  dbx;            /* Has DBX chip? */
                    414:        u_char                  msp3400c;       /* Has msp3400c chip? */
                    415:        u_char                  dpl3518a;       /* Has dpl3518a chip? */
                    416:        u_char                  eepromAddr;
                    417:        u_char                  eepromSize;     /* bytes / EEPROMBLOCKSIZE */
                    418:        u_int                   audiomuxs[ 5 ]; /* tuner, ext (line-in) */
                    419:                                                /* int/unused (radio) */
                    420:                                                /* mute, present */
                    421:        u_int                   gpio_mux_bits;  /* GPIO mask for audio mux */
                    422: };
                    423:
                    424: struct format_params {
                    425:   /* Total lines, lines before image, image lines */
                    426:   int vtotal, vdelay, vactive;
                    427:   /* Total unscaled horizontal pixels, pixels before image, image pixels */
                    428:   int htotal, hdelay, hactive;
                    429:   /* Scaled horizontal image pixels, Total Scaled horizontal pixels */
                    430:   int  scaled_hactive, scaled_htotal;
                    431:   /* frame rate . for ntsc is 30 frames per second */
                    432:   int frame_rate;
                    433:   /* A-delay and B-delay */
                    434:   u_char adelay, bdelay;
                    435:   /* Iform XTSEL value */
                    436:   int iform_xtsel;
                    437:   /* VBI number of lines per field, and number of samples per line */
                    438:   int vbi_num_lines, vbi_num_samples;
                    439: };
                    440:
                    441: /* Bt848/878 register access
                    442:  * The registers can either be access via a memory mapped structure
                    443:  * or accessed via bus_space.
                    444:  * bus_0pace access allows cross platform support, where as the
                    445:  * memory mapped structure method only works on 32 bit processors
                    446:  * with the right type of endianness.
                    447:  */
                    448: #define INB(sc,o)      (({                                     \
                    449:        u_int8_t __v;                                           \
                    450:        __v = bus_space_read_1((sc)->memt, (sc)->memh, (o));    \
                    451:        bus_space_barrier((sc)->memt, (sc)->memh, (o), 1,       \
                    452:            BUS_SPACE_BARRIER_READ);                            \
                    453:        (__v);                                                  \
                    454: }))
                    455: #define INW(sc,o)      (({                                     \
                    456:        u_int16_t __v;                                          \
                    457:        __v = bus_space_read_2((sc)->memt, (sc)->memh, (o));    \
                    458:        bus_space_barrier((sc)->memt, (sc)->memh, (o), 4,       \
                    459:            BUS_SPACE_BARRIER_READ);                            \
                    460:        (__v);                                                  \
                    461: }))
                    462: #define INL(sc,o)      (({                                     \
                    463:        u_int32_t __v;                                          \
                    464:        __v = bus_space_read_4((sc)->memt, (sc)->memh, (o));    \
                    465:        bus_space_barrier((sc)->memt, (sc)->memh, (o), 4,       \
                    466:            BUS_SPACE_BARRIER_READ);                            \
                    467:        (__v);                                                  \
                    468: }))
                    469: #define OUTB(sc,o,v)   do {                                    \
                    470:        bus_space_write_1((sc)->memt, (sc)->memh, (o), (v));    \
                    471:        bus_space_barrier((sc)->memt, (sc)->memh, (o), 1,       \
                    472:            BUS_SPACE_BARRIER_WRITE);                           \
                    473: } while (0)
                    474: #define OUTW(sc,o,v)   do {                                    \
                    475:        bus_space_write_2((sc)->memt, (sc)->memh, (o), (v));    \
                    476:        bus_space_barrier((sc)->memt, (sc)->memh, (o), 2,       \
                    477:            BUS_SPACE_BARRIER_WRITE);                           \
                    478: } while (0)
                    479: #define OUTL(sc,o,v) do {                                      \
                    480:        bus_space_write_4((sc)->memt, (sc)->memh, (o), (v));    \
                    481:        bus_space_barrier((sc)->memt, (sc)->memh, (o), 4,       \
                    482:            BUS_SPACE_BARRIER_WRITE);                           \
                    483: } while (0)
                    484:
                    485: typedef struct bktr_clip bktr_clip_t;
                    486:
                    487: /*
                    488:  * BrookTree 848  info structure, one per bt848 card installed.
                    489:  */
                    490: struct bktr_softc {
                    491:     struct device bktr_dev;     /* base device */
                    492:     bus_dma_tag_t      dmat;   /* DMA tag */
                    493:     bus_space_tag_t    memt;
                    494:     bus_space_handle_t memh;
                    495:     bus_size_t         obmemsz;        /* size of en card (bytes) */
                    496:     void               *ih;
                    497:     bus_dmamap_t       dm_prog;
                    498:     bus_dmamap_t       dm_oprog;
                    499:     bus_dmamap_t       dm_mem;
                    500:     bus_dmamap_t       dm_vbidata;
                    501:     bus_dmamap_t       dm_vbibuffer;
                    502:
                    503:     vaddr_t bigbuf;          /* buffer that holds the captured image */
                    504:     vaddr_t vbidata;         /* RISC program puts VBI data from the current frame here */
                    505:     vaddr_t vbibuffer;       /* Circular buffer holding VBI data for the user */
                    506:     vaddr_t dma_prog;        /* RISC prog for single and/or even field capture*/
                    507:     vaddr_t odd_dma_prog;    /* RISC program for Odd field capture */
                    508:
                    509:     /* the following definitions are common over all platforms */
                    510:     int                alloc_pages;    /* number of pages in bigbuf */
                    511:     int         vbiinsert;      /* Position for next write into circular buffer */
                    512:     int         vbistart;       /* Position of last read from circular buffer */
                    513:     int         vbisize;        /* Number of bytes in the circular buffer */
                    514:     u_int      vbi_sequence_number;    /* sequence number for VBI */
                    515:     int                vbi_read_blocked;       /* user process blocked on read() from /dev/vbi */
                    516:     struct selinfo vbi_select; /* Data used by select() on /dev/vbi */
                    517:
                    518:
                    519:     struct proc        *proc;          /* process to receive raised signal */
                    520:     int                signal;         /* signal to send to process */
                    521:     int                clr_on_start;   /* clear cap buf on capture start? */
                    522: #define        METEOR_SIG_MODE_MASK    0xffff0000
                    523: #define        METEOR_SIG_FIELD_MODE   0x00010000
                    524: #define        METEOR_SIG_FRAME_MODE   0x00000000
                    525:     char         dma_prog_loaded;
                    526:     struct meteor_mem *mem;    /* used to control sync. multi-frame output */
                    527:     u_int      synch_wait;     /* wait for free buffer before continuing */
                    528:     short      current;        /* frame number in buffer (1-frames) */
                    529:     short      rows;           /* number of rows in a frame */
                    530:     short      cols;           /* number of columns in a frame */
                    531:     int                capture_area_x_offset; /* Usually the full 640x480(NTSC) image is */
                    532:     int                capture_area_y_offset; /* captured. The capture area allows for */
                    533:     int                capture_area_x_size;   /* example 320x200 pixels from the centre */
                    534:     int                capture_area_y_size;   /* of the video image to be captured. */
                    535:     char       capture_area_enabled;  /* When TRUE use user's capture area. */
                    536:     int                pixfmt;         /* active pixel format (idx into fmt tbl) */
                    537:     int                pixfmt_compat;  /* Y/N - in meteor pix fmt compat mode */
                    538:     u_int      format;         /* frame format rgb, yuv, etc.. */
                    539:     short      frames;         /* number of frames allocated */
                    540:     int                frame_size;     /* number of bytes in a frame */
                    541:     u_int      fifo_errors;    /* number of fifo capture errors since open */
                    542:     u_int      dma_errors;     /* number of DMA capture errors since open */
                    543:     u_int      frames_captured;/* number of frames captured since open */
                    544:     u_int      even_fields_captured; /* number of even fields captured */
                    545:     u_int      odd_fields_captured; /* number of odd fields captured */
                    546:     u_int      range_enable;   /* enable range checking ?? */
                    547:     u_short     capcontrol;     /* reg 0xdc capture control */
                    548:     u_short     bktr_cap_ctl;
                    549:     volatile u_int     flags;
                    550: #define        METEOR_INITALIZED       0x00000001
                    551: #define        METEOR_OPEN             0x00000002
                    552: #define        METEOR_MMAP             0x00000004
                    553: #define        METEOR_INTR             0x00000008
                    554: #define        METEOR_READ             0x00000010      /* XXX never gets referenced */
                    555: #define        METEOR_SINGLE           0x00000020      /* get single frame */
                    556: #define        METEOR_CONTIN           0x00000040      /* continuously get frames */
                    557: #define        METEOR_SYNCAP           0x00000080      /* synchronously get frames */
                    558: #define        METEOR_CAP_MASK         0x000000f0
                    559: #define        METEOR_NTSC             0x00000100
                    560: #define        METEOR_PAL              0x00000200
                    561: #define        METEOR_SECAM            0x00000400
                    562: #define        BROOKTREE_NTSC          0x00000100      /* used in video open() and */
                    563: #define        BROOKTREE_PAL           0x00000200      /* in the kernel config */
                    564: #define        BROOKTREE_SECAM         0x00000400      /* file */
                    565: #define        METEOR_AUTOMODE         0x00000800
                    566: #define        METEOR_FORM_MASK        0x00000f00
                    567: #define        METEOR_DEV0             0x00001000
                    568: #define        METEOR_DEV1             0x00002000
                    569: #define        METEOR_DEV2             0x00004000
                    570: #define        METEOR_DEV3             0x00008000
                    571: #define METEOR_DEV_SVIDEO      0x00006000
                    572: #define METEOR_DEV_RGB         0x0000a000
                    573: #define        METEOR_DEV_MASK         0x0000f000
                    574: #define        METEOR_RGB16            0x00010000
                    575: #define        METEOR_RGB24            0x00020000
                    576: #define        METEOR_YUV_PACKED       0x00040000
                    577: #define        METEOR_YUV_PLANAR       0x00080000
                    578: #define        METEOR_WANT_EVEN        0x00100000      /* want even frame */
                    579: #define        METEOR_WANT_ODD         0x00200000      /* want odd frame */
                    580: #define        METEOR_WANT_MASK        0x00300000
                    581: #define METEOR_ONLY_EVEN_FIELDS        0x01000000
                    582: #define METEOR_ONLY_ODD_FIELDS 0x02000000
                    583: #define METEOR_ONLY_FIELDS_MASK 0x03000000
                    584: #define METEOR_YUV_422         0x04000000
                    585: #define        METEOR_OUTPUT_FMT_MASK  0x040f0000
                    586: #define        METEOR_WANT_TS          0x08000000      /* time-stamp a frame */
                    587: #define METEOR_RGB             0x20000000      /* meteor rgb unit */
                    588: #define METEOR_FIELD_MODE      0x80000000
                    589:     u_char     tflags;                         /* Tuner flags (/dev/tuner) */
                    590: #define        TUNER_INITALIZED        0x00000001
                    591: #define        TUNER_OPEN              0x00000002
                    592:     u_char      vbiflags;                      /* VBI flags (/dev/vbi) */
                    593: #define VBI_INITALIZED          0x00000001
                    594: #define VBI_OPEN                0x00000002
                    595: #define VBI_CAPTURE             0x00000004
                    596:     u_short    fps;            /* frames per second */
                    597:     struct meteor_video video;
                    598:     struct TVTUNER     tuner;
                    599:     struct CARDTYPE    card;
                    600:     u_char             audio_mux_select;       /* current mode of the audio */
                    601:     u_char             audio_mute_state;       /* mute state of the audio */
                    602:     u_char             format_params;
                    603:     u_int              current_sol;
                    604:     u_int              current_col;
                    605:     int                 clip_start;
                    606:     int                 line_length;
                    607:     int                 last_y;
                    608:     int                 y;
                    609:     int                 y2;
                    610:     int                 yclip;
                    611:     int                 yclip2;
                    612:     int                 max_clip_node;
                    613:     bktr_clip_t                clip_list[100];
                    614:     int                 reverse_mute;          /* Swap the GPIO values for Mute and TV Audio */
                    615:     int                 bt848_tuner;
                    616:     int                 bt848_card;
                    617:     u_int              id;
                    618: #define BT848_USE_XTALS 0
                    619: #define BT848_USE_PLL   1
                    620:     int                        xtal_pll_mode;  /* Use XTAL or PLL mode for PAL/SECAM */
                    621:     int                        remote_control;      /* remote control detected */
                    622:     int                        remote_control_addr;   /* remote control i2c address */
                    623:     char               msp_version_string[9]; /* MSP version string 34xxx-xx */
                    624:     int                        msp_addr;              /* MSP i2c address */
                    625:     char               dpl_version_string[9]; /* DPL version string 35xxx-xx */
                    626:     int                        dpl_addr;              /* DPL i2c address */
                    627:     int                 slow_msp_audio;               /* 0 = use fast MSP3410/3415 programming sequence */
                    628:                                               /* 1 = use slow MSP3410/3415 programming sequence */
                    629:                                               /* 2 = use Tuner's Mono audio output via the MSP chip */
                    630:     int                 msp_use_mono_source;   /* use Tuner's Mono audio output via the MSP chip */
                    631:     int                 audio_mux_present;     /* 1 = has audio mux on GPIO lines, 0 = no audio mux */
                    632:     int                 msp_source_selected;   /* 0 = TV source, 1 = Line In source, 2 = FM Radio Source */
                    633:
                    634: };
                    635:
                    636: typedef struct bktr_softc bktr_reg_t;
                    637: typedef struct bktr_softc* bktr_ptr_t;
                    638:
                    639: #define Bt848_MAX_SIGN 16
                    640:
                    641: struct bt848_card_sig {
                    642:   int card;
                    643:   int tuner;
                    644:   u_char signature[Bt848_MAX_SIGN];
                    645: };
                    646:
                    647:
                    648: /***********************************************************/
                    649: /* ioctl_cmd_t int on old versions, u_long on new versions */
                    650: /***********************************************************/
                    651: typedef u_long ioctl_cmd_t;

CVSweb