#ifndef SAA713X_VAR_H #define SAA713X_VAR_H #include #if defined(SAA_DSHM) && __FreeBSD_version < 502121 #error "FreeBSD version incompatible with SAA_DSHM, please refer to Makefile." #endif #if __FreeBSD_version > 502102 #define DVERSION .d_version = D_VERSION, #define DFLAGS #else #define DVERSION #define DFLAGS .d_flags = D_NOGIANT, #endif #if __FreeBSD_version > 502114 #define DPTYPE struct cdev* #else #define DPTYPE dev_t #endif extern devclass_t saa_devclass; #define SCVF_ON (1 << 0) #define SCVF_OVERLAY (1 << 1) #define SCVF_CAPTURE (1 << 2) #define SCVF_DMA_PAUSED (1 << 3) #define SCAF_ON (1 << 0) struct saa_softc { device_t sc_dev; device_t sc_iicbus_dev; DPTYPE sc_video_cdev; DPTYPE sc_audio_cdev; struct resource *sc_base_res; bus_space_tag_t sc_base_bustag; bus_space_handle_t sc_base_bushandle; int sc_base_rid; struct resource *sc_intr_res; int sc_intr_rid; void *sc_intr_cookie; bus_dma_tag_t sc_pta_tag; bus_dmamap_t sc_pta_map; uint32_t *sc_pta; uint32_t sc_pta_paddr[SAA_DMA_NRCHANS]; uint8_t sc_pta_map_destroyflag; uint8_t sc_pta_map_unloadflag; uint8_t sc_pta_map_loadidx; uint8_t sc_pta_map_loaderror; uint32_t sc_video_flags; struct saa_video_opt sc_video_opt; struct saa_video_std sc_video_std; struct saa_video_spec sc_video_spec; /* 2 item array because we have two Tasks viz. A,B */ bus_dma_tag_t sc_video_capbuf_tag[2]; bus_dmamap_t sc_video_capbuf_map[2]; uint8_t sc_video_capbuf_map_destroyflag[2]; uint8_t sc_video_capbuf_map_unloadflag[2]; void *sc_video_capbuf[2]; int sc_video_capbuf_loadcount[2]; uint8_t sc_video_capbuf_allocflag[2]; /* worst case limit: 1028 * 1024 for device, 3 for dirshm and * 1 for packed pta */ bus_dma_segment_t sc_capbuf_pgsegs[3][1028]; int sc_video_capbuf_sz[2]; vm_object_t sc_video_capbuf_shmobj[2]; vm_offset_t sc_video_capbuf_shmaddr[2]; int sc_video_capbuf_shmlen[2]; pid_t sc_video_capbuf_sigpid; struct saa_status *sc_sts; /* variables used for syncronisation with DMA callback */ int sc_video_capbuf_current; int sc_capbuf_loaderror; int sc_capbuf_loadidx; int sc_capbuf_loadlen; /* Audio Section */ struct saa_audio_opt sc_audio_opt; struct saa_audio_spec sc_audio_spec; uint32_t sc_audio_flags; pid_t sc_audio_capbuf_sigpid; int sc_audio_capbuf_sz; bus_dma_tag_t sc_audio_capbuf_tag; bus_dmamap_t sc_audio_capbuf_map; uint8_t sc_audio_capbuf_map_destroyflag; uint8_t sc_audio_capbuf_map_unloadflag; void *sc_audio_capbuf; int sc_audio_capbuf_loadcount; uint8_t sc_audio_capbuf_allocflag; uint32_t sc_video_dmasave; }; /* * Skip skip_count bytes from segs and then fills pta with * remaining segs. */ void saa_build_pta(struct saa_softc *sc, bus_dma_segment_t *segs, int nsegs, uint32_t *pta); #define REG_READB(r) (bus_space_read_1(sc->sc_base_bustag, \ sc->sc_base_bushandle, \ (r))) #define REG_WRITEB(r, v) (bus_space_write_1(sc->sc_base_bustag, \ sc->sc_base_bushandle, \ (r), (v))) #define REG_READW(r) (bus_space_read_2(sc->sc_base_bustag, \ sc->sc_base_bushandle, \ (r))) #define REG_WRITEW(r, v) (bus_space_write_2(sc->sc_base_bustag, \ sc->sc_base_bushandle, \ (r), (v))) #define REG_READ(r) (bus_space_read_4(sc->sc_base_bustag, \ sc->sc_base_bushandle, \ (r))) #define REG_WRITE(r, v) (bus_space_write_4(sc->sc_base_bustag, \ sc->sc_base_bushandle, \ (r), (v))) #define REG_SETB(r, v) (REG_WRITEB(r, REG_READB(r) | (v))) #define REG_CLRB(r, m) (REG_WRITEB(r, REG_READB(r) & (~m))) #define REG_SETMB(r, m, v) (REG_WRITEB(r, (REG_READB(r) & (~m)) | ((v) & (m)))) #define REG_SET(r, v) (REG_WRITE(r, REG_READ(r) | (v))) #define REG_CLR(r, m) (REG_WRITE(r, REG_READ(r) & (~m))) #define REG_SETM(r, m, v) (REG_WRITE(r, (REG_READ(r) & (~m)) | ((v) & (m)))) #endif